diff --git a/LICENSE.txt b/LICENSE.txt
index 53e248f9b07603e7f2221d873f2f91a9a9a211fc..a4bd67dcf1d27197eb682e436bb61be263b3a836 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -236,3 +236,7 @@ distributions. See the source package for the additional license information.
 
    SAM Python Library:
    Public domain.
+   
+   I2PSnark: 
+   "Man with hat over face" graphic licensed under a Creative Commons 2.0 license.
+   Original photo by Florian Kuhlmann. http://www.flickr.com/photos/floriankuhlmann/3117758155
diff --git a/Slackware/i2p-base/rc.i2p_def b/Slackware/i2p-base/rc.i2p_def
index 8e059c23d6d0fccb8d2151197eb3bbb295dec9ff..075e9e8472279bdde4daeef3005fba4f39233d40 100644
--- a/Slackware/i2p-base/rc.i2p_def
+++ b/Slackware/i2p-base/rc.i2p_def
@@ -2,15 +2,32 @@
 # Start/stop i2p service.
 
 i2p_start() {
- /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory start )"
+ # Check if router is up first!
+ /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory status )" > /dev/null
+ if [ ! $? -eq 0 ] ; then {
+  # I2p is already running, so tell the user.
+  echo "I2P is already running..."
+  i2p_status
+ } 
+ else
+ {
+  # Just in-case there are leftover junk in /tmp...
+  rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
+  # Now that all junk is cleaned up, start.
+  /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory start )"
+ }
+ fi
 }
 
 i2p_stop() {
  /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory stop )"
+ rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
 }
 
 i2p_restart() {
- /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory restart)"
+ # We want a FULL cycle here, not the wrappers idea of this!
+ i2p_stop
+ i2p_start
 }
 
 i2p_status() {
diff --git a/Slackware/i2p/i2p.SlackBuild b/Slackware/i2p/i2p.SlackBuild
index fc95ce3791dbbb174fd9ef0927ff8b227b17f4ad..3ae2075c8cb3dd2392f00860efa93f05930b0a27 100755
--- a/Slackware/i2p/i2p.SlackBuild
+++ b/Slackware/i2p/i2p.SlackBuild
@@ -85,23 +85,26 @@ cp -a ../i2p $PKG/$INSTALL_DIR/
 mkdir -p $PKG/install
 
 #############################################################################
-# Preconfigureation to make package smaller
+# Preconfigureation to make package smaller, and...
+# we keep as much as reasonable in the installation directory.
+# This makes the install map fairly well to the standard installation.
+# It also makes it easier to find the log and pid files!
 #############################################################################
 cd $PKG/$INSTALL_DIR/i2p
 
 # wrapper.config $INSTALL_PATH and $SYSTEM_java_io_tmpdir
-sed "s|\$INSTALL_PATH|$INSTALL_DIR/i2p|g" wrapper.config > a
-sed "s|\$SYSTEM_java_io_tmpdir|/var/tmp|g" a > wrapper.config
+sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" wrapper.config > a
+sed "s|\$SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > wrapper.config
 # eepget %INSTALL_PATH
-sed "s|\$INSTALL_PATH|$INSTALL_DIR/i2p|g" eepget > a
+sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" eepget > a
 rm eepget
 mv a eepget
 # runplain.sh %INSTALL_PATH and %SYSTEM_java_io_tmpdir
-sed "s|%INSTALL_PATH|$INSTALL_DIR/i2p|g" runplain.sh > a
-sed "s|%SYSTEM_java_io_tmpdir|/var/tmp|g" a > runplain.sh
+sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" runplain.sh > a
+sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > runplain.sh
 # i2prouter %INSTALL_PATH and %SYSTEM_java_io_tmpdir
-sed "s|%INSTALL_PATH|$INSTALL_DIR/i2p|g" i2prouter > a
-sed "s|%SYSTEM_java_io_tmpdir|/var/tmp|g" a > i2prouter
+sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" i2prouter > a
+sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > i2prouter
 
 chmod 744 ./i2prouter
 chmod 744 ./osid
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index e284cc1721f3fed80bb6d62afc81e984237c1cc4..d3a04df1fbbcea023580802d8f296ad6f006b04a 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -133,7 +133,6 @@ public class I2PSnarkServlet extends Default {
                 // bypass the horrid Resource.getListHTML()
                 String pathInfo = req.getPathInfo();
                 String pathInContext = URI.addPaths(path, pathInfo);
-                req.setCharacterEncoding("UTF-8");
                 resp.setCharacterEncoding("UTF-8");
                 resp.setContentType("text/html; charset=UTF-8");
                 Resource resource = getResource(pathInContext);
@@ -141,7 +140,7 @@ public class I2PSnarkServlet extends Default {
                     resp.sendError(HttpResponse.__404_Not_Found);
                 } else {
                     String base = URI.addPaths(req.getRequestURI(), "/");
-                    String listing = getListHTML(resource, base, true, method.equals("POST") ? req.getParameterMap() : null);
+                    String listing = getListHTML(resource, base, true);
                     if (listing != null)
                         resp.getWriter().write(listing);
                     else // shouldn't happen
@@ -503,7 +502,7 @@ public class I2PSnarkServlet extends Default {
                         File torrentFile = new File(baseFile.getParent(), baseFile.getName() + ".torrent");
                         if (torrentFile.exists())
                             throw new IOException("Cannot overwrite an existing .torrent file: " + torrentFile.getPath());
-                        _manager.saveTorrentStatus(info, s.getBitField(), null); // so addTorrent won't recheck
+                        _manager.saveTorrentStatus(info, s.getBitField()); // so addTorrent won't recheck
                         // DirMonitor could grab this first, maybe hold _snarks lock?
                         FileOutputStream out = new FileOutputStream(torrentFile);
                         out.write(info.getTorrentData());
@@ -530,8 +529,6 @@ public class I2PSnarkServlet extends Default {
                     _manager.stopTorrent(snark.torrent, false);
             }
             if (_manager.util().connected()) {
-                // Give the stopped announces time to get out
-                try { Thread.sleep(2000); } catch (InterruptedException ie) {}
                 _manager.util().disconnect();
                 _manager.addMessage(_("I2P tunnel closed."));
             }
@@ -1216,9 +1213,7 @@ public class I2PSnarkServlet extends Default {
     /** @since 0.7.14 */
     private static String urlify(String s) {
         StringBuilder buf = new StringBuilder(256);
-        // browsers seem to work without doing this but let's be strict
-        String link = s.replace("&", "&");
-        buf.append("<a href=\"").append(link).append("\">").append(link).append("</a>");
+        buf.append("<a href=\"").append(s).append("\">").append(s).append("</a>");
         return buf.toString();
     }
 
@@ -1257,11 +1252,10 @@ public class I2PSnarkServlet extends Default {
      * @param r The Resource
      * @param base The base URL
      * @param parent True if the parent directory should be included
-     * @param postParams map of POST parameters or null if not a POST
      * @return String of HTML
      * @since 0.7.14
      */
-    private String getListHTML(Resource r, String base, boolean parent, Map postParams)
+    private String getListHTML(Resource r, String base, boolean parent)
         throws IOException
     {
         if (!r.isDirectory())
@@ -1286,10 +1280,6 @@ public class I2PSnarkServlet extends Default {
         else
             torrentName = title;
         Snark snark = _manager.getTorrentByBaseName(torrentName);
-
-        if (snark != null && postParams != null)
-            savePriorities(snark, postParams);
-
         if (title.endsWith("/"))
             title = title.substring(0, title.length() - 1);
         title = _("Torrent") + ": " + title;
@@ -1307,19 +1297,12 @@ public class I2PSnarkServlet extends Default {
                .append(_("Up to higher level directory")).append("</A>\n");
         }
         
-        buf.append("</div><div class=\"page\"><div class=\"mainsection\">");
-        boolean showPriority = snark != null && !snark.storage.complete();
-        if (showPriority)
-            buf.append("<form action=\"").append(base).append("\" method=\"POST\">\n");
-        buf.append("<TABLE BORDER=0 class=\"snarkTorrents\" cellpadding=\"5px 10px\">" +
+        buf.append("</div><div class=\"page\"><div class=\"mainsection\">" +
+                   "<TABLE BORDER=0 class=\"snarkTorrents\" cellpadding=\"5px 10px\">" +
                    "<thead><tr><th>").append(_("File")).append("</th><th>").append(_("Size"))
-           .append("</th><th>").append(_("Status")).append("</th>");
-        if (showPriority)
-            buf.append("<th>").append(_("Priority")).append("</th>");
-        buf.append("</tr></thead>\n");
+           .append("</th><th>").append(_("Status")).append("</th></tr></thead>");
         //DateFormat dfmt=DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
         //                                               DateFormat.MEDIUM);
-        boolean showSaveButton = false;
         for (int i=0 ; i< ls.length ; i++)
         {   
             String encoded=URI.encodePath(ls[i]);
@@ -1357,8 +1340,7 @@ public class I2PSnarkServlet extends Default {
                                 complete = true;
                                 status = toImg("tick") + _("Complete");
                             } else {
-                                status =
-                                         (snark.storage.getPriority(f.getCanonicalPath()) < 0 ? toImg("cancel") : toImg("clock")) +
+                                status = toImg("clock") +
                                          (100 * (length - remaining) / length) + "% " + _("complete") +
                                          " (" + DataHelper.formatSize2(remaining) + _("bytes remaining") + ")";
                             }
@@ -1402,40 +1384,9 @@ public class I2PSnarkServlet extends Default {
             buf.append("</TD><TD class=\"").append(rowClass).append(" snarkFileStatus\">");
             //buf.append(dfmt.format(new Date(item.lastModified())));
             buf.append(status);
-            buf.append("</TD>");
-            if (showPriority) {
-                buf.append("<td>");
-                File f = item.getFile();
-                if ((!complete) && (!item.isDirectory()) && f != null) {
-                    int pri = snark.storage.getPriority(f.getCanonicalPath());
-                    buf.append("<input type=\"radio\" value=\"5\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
-                    if (pri > 0)
-                        buf.append("checked=\"true\"");
-                    buf.append('>').append(_("High"));
-
-                    buf.append("<input type=\"radio\" value=\"0\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
-                    if (pri == 0)
-                        buf.append("checked=\"true\"");
-                    buf.append('>').append(_("Normal"));
-
-                    buf.append("<input type=\"radio\" value=\"-9\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
-                    if (pri < 0)
-                        buf.append("checked=\"true\"");
-                    buf.append('>').append(_("Do not download"));
-                    showSaveButton = true;
-                }
-                buf.append("</td>");
-            }
-            buf.append("</TR>\n");
-        }
-        if (showSaveButton) {
-            buf.append("<thead><tr><th colspan=\"3\">&nbsp;</th><th align=\"center\"><input type=\"submit\" value=\"");
-            buf.append(_("Save priorities"));
-            buf.append("\" name=\"foo\" ></th></tr></thead>\n");
+            buf.append("</TD></TR>\n");
         }
         buf.append("</TABLE>\n");
-        if (showPriority)
-	    buf.append("</form>");
 	buf.append("</div></div></BODY></HTML>\n");
         
         return buf.toString();
@@ -1501,26 +1452,6 @@ public class I2PSnarkServlet extends Default {
         return "<img alt=\"\" height=\"16\" width=\"16\" src=\"/i2psnark/_icons/" + icon + ".png\"> ";
     }
 
-    /** @since 0.8.1 */
-    private void savePriorities(Snark snark, Map postParams) {
-        Set<Map.Entry> entries = postParams.entrySet();
-        for (Map.Entry entry : entries) {
-            String key = (String)entry.getKey();
-            if (key.startsWith("pri.")) {
-                try {
-                    String file = key.substring(4);
-                    String val = ((String[])entry.getValue())[0];   // jetty arrays
-                    int pri = Integer.parseInt(val);
-                    snark.storage.setPriority(file, pri);
-                    //System.err.println("Priority now " + pri + " for " + file);
-                } catch (Throwable t) { t.printStackTrace(); }
-            }
-        }
-        if (snark.coordinator != null)
-            snark.coordinator.updatePiecePriorities();
-        _manager.saveTorrentStatus(snark.storage.getMetaInfo(), snark.storage.getBitField(), snark.storage.getFilePriorities());
-    }
-
 
 /** inner class, don't bother reindenting */
 private static class FetchAndAdd implements Runnable {
diff --git a/apps/i2psnark/locale/messages_zh.po b/apps/i2psnark/locale/messages_zh.po
index e39ae0970dbbb426169881b252daa353d849a0a3..b649d8c589e5bc2f7e0ca0a90f6b16faa08d619f 100644
--- a/apps/i2psnark/locale/messages_zh.po
+++ b/apps/i2psnark/locale/messages_zh.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: I2P i2psnark\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-01 04:52+0000\n"
-"PO-Revision-Date: 2010-07-01 12:53+0800\n"
+"POT-Creation-Date: 2010-10-04 02:45+0000\n"
+"PO-Revision-Date: 2010-10-04 12:00+0800\n"
 "Last-Translator: walking <walking@mail.i2p>\n"
 "Language-Team: foo <foo@bar>\n"
 "MIME-Version: 1.0\n"
@@ -224,7 +224,6 @@ msgid "Torrents"
 msgstr "种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:187
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:193
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:837
 msgid "I2PSnark"
 msgstr ""
@@ -233,63 +232,65 @@ msgstr ""
 msgid "Refresh page"
 msgstr "刷新页面"
 
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:193
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/arrow_refresh.png\"> I2PSnark"
+msgstr ""
+
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:195
 msgid "Forum"
 msgstr "论坛"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:240
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1289
-msgid "Status"
-msgstr "状态"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"Torrent Status\">Status"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"种子状态\">状态"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:246
-msgid "Hide Peers"
-msgstr "隐藏用户"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/showpeers.png\" title=\"Toggle Peer Visibility\" alt=\"Hide Peers\">"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/showpeers.png\" title=\"隐藏节点\" alt=\"隐藏节点\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:249
-msgid "Show Peers"
-msgstr "显示用户"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/hidepeers.png\" title=\"Toggle Peer Visibility\" alt=\"Show Peers\">"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/hidepeers.png\" title=\"显示节点\" alt=\"显示节点\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1271
-msgid "Torrent"
-msgstr "种子"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/torrent.png\" title=\"Loaded Torrents\">Torrent"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/torrent.png\" title=\"载入的种子\">种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:256
-msgid "ETA"
-msgstr "预计剩余时间"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/eta.png\" title=\"Estimated Download Time\">ETA"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/eta.png\" title=\"预计剩余时间\">预计剩余时间"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:258
-msgid "Downloaded"
-msgstr "已下载"
+msgid "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"Data Downloaded\">RX"
+msgstr "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"下载数据量\">下载"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:260
-msgid "Uploaded"
-msgstr "已上传"
+msgid "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"Data Uploaded\">TX"
+msgstr "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"上传数据量\">上传"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:262
-msgid "Down Rate"
-msgstr "下载速度"
+msgid "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"Download Speed\">Rate"
+msgstr "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"下载速度\">下载速度"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:264
-msgid "Up Rate"
-msgstr "上传速度"
+msgid "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"Upload Speed\">Rate"
+msgstr "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"上传速度\">上传速度"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:271
 msgid "Stop all torrents and the I2P tunnel"
 msgstr "停止全部种子及I2P隧道"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:273
-msgid "Stop All"
-msgstr "停止全部"
+msgid "<img src=\"/themes/console/snark/images/stop_all.png\" title=\"Stop All Torrents\" alt=\"Stop All\">"
+msgstr "<img src=\"/themes/console/snark/images/stop_all.png\" title=\"全部停止\" alt=\"全部停止\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:278
 msgid "Start all torrents and the I2P tunnel"
 msgstr "启动全部种子及I2P隧道"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:280
-msgid "Start All"
-msgstr "启动全部"
+msgid "<img src=\"/themes/console/snark/images/start_all.png\" title=\"Start All Torrents\" alt=\"Start All\">"
+msgstr "<img src=\"/themes/console/snark/images/start_all.png\" title=\"全部开始\" alt=\"全部开始\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
 msgid "No torrents loaded."
@@ -317,13 +318,13 @@ msgid "Torrent file {0} does not exist"
 msgstr "种子文件{0}不存在"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1476
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1481
 #, java-format
 msgid "Torrent already running: {0}"
 msgstr "种子已启动:{0}"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1478
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1483
 #, java-format
 msgid "Torrent already in the queue: {0}"
 msgstr "种子排队中:{0}"
@@ -450,7 +451,7 @@ msgid "Seeding"
 msgstr "正做种"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1327
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
 msgid "Complete"
 msgstr "完成"
 
@@ -486,24 +487,24 @@ msgid "Tracker"
 msgstr "Tracker服务器"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:751
-msgid "Details"
-msgstr "详情"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/details.png\">"
+msgstr ""
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:785
 msgid "Stop the torrent"
 msgstr "停止种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:787
-msgid "Stop"
-msgstr "停止"
+msgid "<img src=\"/themes/console/snark/images/stop.png\" title=\"Stop Torrent\" alt=\"Stop\">"
+msgstr "<img src=\"/themes/console/snark/images/stop.png\" title=\"停止下载\" alt=\"停止\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:793
 msgid "Start the torrent"
 msgstr "启动种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:795
-msgid "Start"
-msgstr "启动"
+msgid "<img src=\"/themes/console/snark/images/start.png\" title=\"Start Torrent\" alt=\"Start\">"
+msgstr "<img src=\"/themes/console/snark/images/start.png\" title=\"开始下载\" alt=\"开始\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:800
 msgid "Remove the torrent from the active list, deleting the .torrent file"
@@ -518,8 +519,8 @@ msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded
 msgstr "您确定要删除文件“{0}.torrent”(下载的数据文件不会被删除)?"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:807
-msgid "Remove"
-msgstr "移除"
+msgid "<img src=\"/themes/console/snark/images/remove.png\" title=\"Remove Torrent\" alt=\"Remove\">"
+msgstr "<img src=\"/themes/console/snark/images/remove.png\" title=\"删除种子\" alt=\"删除种子\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811
 msgid "Delete the .torrent file and the associated data file(s)"
@@ -534,8 +535,8 @@ msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloade
 msgstr "您确定要删除种子“{0}”(下载的数据文件会一并被删除)?"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:818
-msgid "Delete"
-msgstr "删除"
+msgid "<img src=\"/themes/console/snark/images/delete.png\" title=\"Delete Torrent + Data\" alt=\"Delete\">"
+msgstr "<img src=\"/themes/console/snark/images/delete.png\" title=\"删除种子 + 数据\" alt=\"删除种子 + 数据\">"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:861
 msgid "Seed"
@@ -558,8 +559,8 @@ msgid "Choking (We are not allowing the peer to request pieces)"
 msgstr "拒绝请求"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:927
-msgid "Add Torrent"
-msgstr "添加种子"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/add.png\">Add Torrent"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/add.png\">添加种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:929
 msgid "From URL"
@@ -571,16 +572,16 @@ msgstr "添加种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:937
 #, java-format
-msgid "Alternately, you can copy .torrent files to the directory {0}."
-msgstr "或者您可以将.torrent文件复制到以下目录{0}."
+msgid "You can also copy .torrent files to: <code>{0}"
+msgstr "或者您可以将.torrent文件复制到<code>{0}."
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939
-msgid "Removing a .torrent file will cause the torrent to stop."
-msgstr "删除种子文件将导致中止该下载任务。"
+msgid "Removing a .torrent will cause it to stop."
+msgstr "删除种子文件将导致该下载任务中止。"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:958
-msgid "Create Torrent"
-msgstr "创建种子"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/create.png\">Create Torrent"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/create.png\">创建种子"
 
 #. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:961
@@ -596,8 +597,8 @@ msgid "Select a tracker"
 msgstr "选择一个Tracker"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
-msgid "or"
-msgstr "或"
+msgid "or&nbsp;"
+msgstr "或&nbsp;"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:985
 msgid "Specify custom tracker announce URL"
@@ -609,8 +610,8 @@ msgstr "创建种子"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1133
-msgid "Configuration"
-msgstr "设置"
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/config.png\">Configuration"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/config.png\">设置"
 
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
 msgid "Data directory"
@@ -709,53 +710,103 @@ msgid "1 tunnel"
 msgid_plural "{0} tunnels"
 msgstr[0] "{0}隧道"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283
-msgid "Up to higher level directory"
-msgstr "上一层文件夹"
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1271
+msgid "Torrent"
+msgstr "种子"
+
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1278
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/file.png\" title=\"File\" alt=\"File\">&nbsp;"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/file.png\" title=\"文件\" alt=\"文件\">&nbsp;"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1288
-msgid "File"
-msgstr "文件"
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1278
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/size.png\" title=\"FileSize\" alt=\"FileSize\">Size"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/size.png\" title=\"文件大小\" alt=\"文件大小\">大小"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1288
-msgid "Size"
-msgstr "大小"
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1279
+msgid "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"Download Status\">Status"
+msgstr "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"下载状态\">状态"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1311
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
 msgid "Directory"
 msgstr "文件夹"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1316
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1306
 msgid "Torrent not found?"
 msgstr "种子未找到"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1324
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
 msgid "File not found in torrent?"
 msgstr "种子中没有发现文件?"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1330
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1320
 msgid "complete"
 msgstr "完成"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1331
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1321
 msgid "bytes remaining"
 msgstr "剩余字节数"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1456
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1373
+msgid "Up to higher level directory"
+msgstr "上一层文件夹"
+
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1461
 #, java-format
 msgid "Torrent fetched from {0}"
 msgstr "从{0}获取种子成功"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1484
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1489
 #, java-format
 msgid "Torrent at {0} was not valid"
 msgstr "{0}的种子中有错误"
 
-#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1489
+#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1494
 #, java-format
 msgid "Torrent was not retrieved from {0}"
 msgstr "从{0}获得种子失败"
 
+#~ msgid "Status"
+#~ msgstr "状态"
+#~ msgid "Hide Peers"
+#~ msgstr "隐藏用户"
+#~ msgid "Show Peers"
+#~ msgstr "显示用户"
+#~ msgid "ETA"
+#~ msgstr "预计剩余时间"
+#~ msgid "Downloaded"
+#~ msgstr "已下载"
+#~ msgid "Uploaded"
+#~ msgstr "已上传"
+#~ msgid "Down Rate"
+#~ msgstr "下载速度"
+#~ msgid "Up Rate"
+#~ msgstr "上传速度"
+#~ msgid "Stop All"
+#~ msgstr "停止全部"
+#~ msgid "Start All"
+#~ msgstr "启动全部"
+#~ msgid "Details"
+#~ msgstr "详情"
+#~ msgid "Stop"
+#~ msgstr "停止"
+#~ msgid "Start"
+#~ msgstr "启动"
+#~ msgid "Remove"
+#~ msgstr "移除"
+#~ msgid "Delete"
+#~ msgstr "删除"
+#~ msgid "Add Torrent"
+#~ msgstr "添加种子"
+#~ msgid "Create Torrent"
+#~ msgstr "创建种子"
+#~ msgid "or"
+#~ msgstr "或"
+#~ msgid "Configuration"
+#~ msgstr "设置"
+#~ msgid "File"
+#~ msgstr "文件"
+#~ msgid "Size"
+#~ msgstr "大小"
 #~ msgid "Cannot change the I2CP settings while torrents are active"
 #~ msgstr "正在下载/上传,无法更改I2CP设置"
 #~ msgid "{0} torrents"
diff --git a/apps/i2ptunnel/locale/messages_zh.po b/apps/i2ptunnel/locale/messages_zh.po
index 0955d4e0c1f0d90df5d6da3b6a05c72c120a0371..f6efbfd3b85d751f2990a4d213be4875d6dfdc5e 100644
--- a/apps/i2ptunnel/locale/messages_zh.po
+++ b/apps/i2ptunnel/locale/messages_zh.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: I2P i2ptunnel\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-01 04:52+0000\n"
+"POT-Creation-Date: 2010-10-04 02:45+0000\n"
 "PO-Revision-Date: 2010-05-29 10:57+0800\n"
 "Last-Translator: walking <walking@mail.i2p>\n"
 "Language-Team: foo <foo@bar>\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-Language: Chinese\n"
 
-#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:493
+#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:492
 #, java-format
 msgid ""
 "To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -35,55 +35,55 @@ msgstr ""
 "请点击下面的链接通过【跳转(Jump)】服务提供的【地址助手】链接跳转至域名对应的"
 "主机:"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:369
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:372
 msgid "New Tunnel"
 msgstr "新建隧道"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:389
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392
 msgid "Standard client"
 msgstr "标准客户端"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:390
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:393
 msgid "HTTP client"
 msgstr "HTTP 客户端"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:391
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:394
 msgid "IRC client"
 msgstr "IRC 客户端"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:395
 msgid "Standard server"
 msgstr "标准服务器"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:393
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:396
 msgid "HTTP server"
 msgstr "HTTP 服务器"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:394
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:397
 msgid "SOCKS 4/4a/5 proxy"
 msgstr "SOCKS4/4A/5 代理"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:395
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
 msgid "SOCKS IRC proxy"
 msgstr "SOCKS IRC 代理"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:396
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:399
 msgid "CONNECT/SSL/HTTPS proxy"
 msgstr "CONNECT/SSL/HTTPS 代理"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:397
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:400
 msgid "IRC server"
 msgstr "IRC 服务器"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:401
 msgid "Streamr client"
 msgstr "Streamr 客户端"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:399
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:402
 msgid "Streamr server"
 msgstr "Streamr 服务器"
 
-#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:400
+#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:403
 msgid "HTTP bidir"
 msgstr "双向http"
 
diff --git a/apps/routerconsole/locale/messages_zh.po b/apps/routerconsole/locale/messages_zh.po
index ad0d9dc7c3efc99a3e296f91dd949fb19af64d4c..100e7619973a4824d3022c8d533e3f730d6668e9 100644
--- a/apps/routerconsole/locale/messages_zh.po
+++ b/apps/routerconsole/locale/messages_zh.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: I2P routerconsole\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-29 14:53+0000\n"
+"POT-Creation-Date: 2010-10-04 02:45+0000\n"
 "PO-Revision-Date: \n"
 "Last-Translator: walking <walking@mail.i2p>\n"
 "Language-Team: \n"
@@ -28,6 +28,7 @@ msgstr "按路由器 HASH 封杀: {0}"
 msgid "Banned by router hash"
 msgstr "已按路由 HASH 封杀"
 
+#. Temporary reason, until the job finishes
 #: ../../../router/java/src/net/i2p/router/Blocklist.java:673
 msgid "IP banned"
 msgstr "IP封锁"
@@ -45,6 +46,8 @@ msgstr "拒绝共享:准备退出"
 msgid "Rejecting tunnels: High message delay"
 msgstr "拒绝共享:高消息延迟"
 
+#. hard to do {0} from here
+#. setTunnelStatus("Rejecting " + (100 - (int) probAccept*100) + "% of tunnels: High number of requests");
 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:177
 msgid "Rejecting most tunnels: High number of requests"
 msgstr "收紧共享:高请求量"
@@ -53,14 +56,21 @@ msgstr "收紧共享:高请求量"
 msgid "Rejecting tunnels: Limit reached"
 msgstr "拒绝共享:隧道数限额"
 
+#. .067KBps
+#. * also limited to 90% - see below
+#. always leave at least 4KBps free when allowing
 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:301
 msgid "Rejecting tunnels: Bandwidth limit"
 msgstr "拒绝共享:带宽限额"
 
+#. hard to do {0} from here
+#. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: Bandwidth limit");
 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:371
 msgid "Rejecting most tunnels: Bandwidth limit"
 msgstr "收紧共享:带宽限额"
 
+#. hard to do {0} from here
+#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels");
 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:375
 msgid "Accepting most tunnels"
 msgstr "接收多数隧道"
@@ -69,53 +79,58 @@ msgstr "接收多数隧道"
 msgid "Accepting tunnels"
 msgstr "接收共享隧道"
 
+#. NPE, too early
+#. if (_context.router().getRouterInfo().getBandwidthTier().equals("K"))
+#. setTunnelStatus("Not expecting tunnel requests: Advertised bandwidth too low");
+#. else
 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:487
 msgid "Rejecting tunnels"
 msgstr "拒绝参与共享隧道"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:49
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:48
 msgid "Ensure that nothing blocks outbound HTTP, check <a target=\"_top\" href=\"logs.jsp\">logs</a> and if nothing helps, read the <a target=\"_top\" href=\"http://www.i2p2.de/faq.html\">FAQ</a> about reseeding manually."
 msgstr "请保证HTTP通信没有受阻,检查 <a target=\"_top\" href=\"logs.jsp\">日志</a> ,如果问题仍无法解决,请参照 <a target=\"_top\" href=\"http://www.i2p2.de/faq.html\">FAQ</a> 进行手动补种。"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:81
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:80
 msgid "Reseeding"
 msgstr "正在补种(引导网络启动)..."
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:145
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:144
 msgid "Reseeding: fetching seed URL."
 msgstr "正在补种:获取补种连接..."
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:151
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:150
 msgid "Last reseed failed fully (failed reading seed URL)."
 msgstr "上次补种尝试失败(读取补种URL失败)。"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:177
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:176
 msgid "Last reseed failed fully (no routerInfo URLs at seed URL)."
 msgstr "上次补种尝试失败(补种服务器未返回任何路由信息URL)。"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:190
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:189
 #, java-format
 msgid "Reseeding: fetching router info from seed URL ({0} successful, {1} errors)."
 msgstr "正在补种:从补种服务器获取路由信息({0}成功,{1}失败)。"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:211
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:210
 #, java-format
 msgid "Last reseed failed partly ({0}% of {1})."
 msgstr "上次补种部分失败({0}%失败,共{1})"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:216
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:215
 #, java-format
 msgid "Last reseed failed ({0}% of {1})."
 msgstr "上次补种失败({0}%失败,共{1})"
 
-#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:226
+#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:225
 msgid "Last reseed failed fully (exception caught)."
 msgstr "上次补种失败(exception caught)."
 
-#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:498
+#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:510
 msgid "NetDb entry"
 msgstr "NetDb 项目"
 
+#. This used to be "no common transports" but it is almost always no transports at all
 #: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70
 msgid "No transports (hidden or starting up?)"
 msgstr "无数据传输(隐身或正在启动)"
@@ -124,347 +139,357 @@ msgstr "无数据传输(隐身或正在启动)"
 msgid "Unreachable on any transport"
 msgstr "各传输方式均不可达"
 
-#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:503
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:508
 msgid "Router Transport Addresses"
 msgstr "路由传输地址"
 
-#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:509
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:514
 #, java-format
 msgid "{0} is used for outbound connections only"
 msgstr "{0} 仅被用作出站连接"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:380
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:594
-#, java-format
-msgid "Excessive clock skew: {0}"
-msgstr "严重时滞:{0}"
-
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:691
-msgid "NTCP connections"
-msgstr "NTCP连接"
-
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:692
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1879
-msgid "Limit"
-msgstr "限制"
-
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:693
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1880
-msgid "Timeout"
-msgstr "超时"
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
+#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:257
+msgid "Definitions"
+msgstr "定义"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:696
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1883
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2146
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:715
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1885
 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24
 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33
 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:81
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:187
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:238
 msgid "Peer"
 msgstr "节点"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:697
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1887
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2147
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529
+msgid "The remote peer, identified by router hash"
+msgstr "以路由Hash区分的远程节点"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:716
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1889
 msgid "Dir"
 msgstr "类别"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:698
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1888
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2155
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531
+msgid "Inbound connection"
+msgstr "进站连接"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
+msgid "Outbound connection"
+msgstr "出站连接"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
+msgid "They offered to introduce us (help other peers traverse our firewall)"
+msgstr "对方节点为中继帮助我方穿越防火墙"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
+msgid "We offered to introduce them (help other peers traverse their firewall)"
+msgstr "我方为中继帮助其他节点穿越防火墙"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
+msgid "How long since a packet has been received / sent"
+msgstr "最近一次数据传输距现在的时间"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:717
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1890
 msgid "Idle"
 msgstr "空闲"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:699
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1893
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2156
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:718
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1895
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:156
 msgid "In/Out"
 msgstr "入/出"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:700
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1898
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2157
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
+msgid "The smoothed inbound / outbound transfer rate (KBytes per second)"
+msgstr "进/出站平滑传输率(Kbyte/s)"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
+msgid "How long ago this connection was established"
+msgstr "连接建立时间"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:719
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1900
 msgid "Up"
 msgstr "寿命"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:701
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1900
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2158
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:720
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1902
 msgid "Skew"
 msgstr "时滞"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:702
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1917
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2168
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
+msgid "The difference between the peer's clock and your own"
+msgstr "节点与本地时钟间的时滞"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
+msgid "The congestion window, which is how many bytes can be sent without an acknowledgement"
+msgstr "拥塞窗口,即每次确认前可发送的字节量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
+msgid "The number of sent messages awaiting acknowledgement"
+msgstr "等待确认的已发送数据包数量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
+msgid "The maximum number of concurrent messages to send"
+msgstr "并发消息的最大发送量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
+msgid "The number of pending sends which exceed congestion window"
+msgstr "超过拥塞窗口的待发送数量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
+msgid "The slow start threshold"
+msgstr "慢启动门槛"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
+msgid "The round trip time in milliseconds"
+msgstr "往返时间单位毫秒"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1912
+msgid "Dev"
+msgstr "偏差"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
+msgid "The standard deviation of the round trip time in milliseconds"
+msgstr "环行时间的标准差单位毫秒"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
+msgid "The retransmit timeout in milliseconds"
+msgstr "重传输超时时间单位毫秒"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550
+msgid "Current maximum send packet size / estimated maximum receive packet size (bytes)"
+msgstr "当前发送数据包的最大大小/预计接收数据包的最大大小(字节)"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:721
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1919
 msgid "TX"
 msgstr "发包"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:703
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1919
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2169
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
+msgid "The total number of packets sent to the peer"
+msgstr "向节点发送的数据包总量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:722
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1921
 msgid "RX"
 msgstr "接包"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:704
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552
+msgid "The total number of packets received from the peer"
+msgstr "从节点接收到数据包总量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1924
+msgid "Dup TX"
+msgstr "重发包"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553
+msgid "The total number of packets retransmitted to the peer"
+msgstr "向节点发送的重复数据包总量"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1926
+msgid "Dup RX"
+msgstr "重接包"
+
+#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554
+msgid "The total number of duplicate packets received from the peer"
+msgstr "从节点接收到的重复数据包总量"
+
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:409
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:627
+#, java-format
+msgid "Excessive clock skew: {0}"
+msgstr "严重时滞:{0}"
+
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:710
+msgid "NTCP connections"
+msgstr "NTCP连接"
+
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:711
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1881
+msgid "Limit"
+msgstr "限制"
+
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:712
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1882
+msgid "Timeout"
+msgstr "超时"
+
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:723
 msgid "Out Queue"
 msgstr "出队"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:705
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:724
 msgid "Backlogged?"
 msgstr "积压?"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:719
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1942
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:738
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1944
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82
 msgid "Inbound"
 msgstr "入站"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:721
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1944
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:740
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1946
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82
 msgid "Outbound"
 msgstr "出站"
 
-#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:768
+#. buf.append("<tr> <td colspan=\"11\"><hr></td></tr>\n");
+#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:787
 msgid "peers"
 msgstr "节点"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1878
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1880
 msgid "UDP connections"
 msgstr "UDP连接"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1885
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1887
 msgid "Sort by peer hash"
 msgstr "按节点Hash"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1887
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1889
 msgid "Direction/Introduction"
 msgstr "方向"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1889
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1891
 msgid "Sort by idle inbound"
 msgstr "出站空闲"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1891
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1893
 msgid "Sort by idle outbound"
 msgstr "入站空闲"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1894
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1896
 msgid "Sort by inbound rate"
 msgstr "按入站速度"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1896
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1898
 msgid "Sort by outbound rate"
 msgstr "按出站速度"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1899
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1901
 msgid "Sort by connection uptime"
 msgstr "按连接时间"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1901
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1903
 msgid "Sort by clock skew"
 msgstr "按时滞"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1904
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1906
 msgid "Sort by congestion window"
 msgstr "按拥塞窗口"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1906
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1908
 msgid "Sort by slow start threshold"
 msgstr "按启动门槛"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1909
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1911
 msgid "Sort by round trip time"
 msgstr "按往返时间"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1910
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2165
-msgid "Dev"
-msgstr "偏差"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1911
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1913
 msgid "Sort by round trip time deviation"
 msgstr "按RTT偏差"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1913
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1915
 msgid "Sort by retransmission timeout"
 msgstr "按重传输超时时间"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1916
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1918
 msgid "Sort by outbound maximum transmit unit"
 msgstr "按出站最大传输单元"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1918
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1920
 msgid "Sort by packets sent"
 msgstr "按已发送数据包"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1920
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1922
 msgid "Sort by packets received"
 msgstr "按已接收数据包"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1922
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2170
-msgid "Dup TX"
-msgstr "重发包"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1923
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1925
 msgid "Sort by packets retransmitted"
 msgstr "按重传数据包"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1924
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2171
-msgid "Dup RX"
-msgstr "重接包"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1925
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1927
 msgid "Sort by packets received more than once"
 msgstr "按重复数据包"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1946
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1948
 msgid "We offered to introduce them"
 msgstr "中继客户"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1948
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1950
 msgid "They offered to introduce us"
 msgstr "中继"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1952
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1954
 msgid "Choked"
 msgstr ""
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1957
-msgid "fail(s)"
-msgstr "失败"
-
 #: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1962
+msgid "1 fail"
+msgstr "失败 1 次"
+
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1964
+#, java-format
+msgid "{0} fails"
+msgstr "失败 {0} 次"
+
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1970
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:162
 msgid "Banned"
 msgstr "已封锁"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2094
+#. buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n");
+#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2102
 msgid "SUMMARY"
 msgstr "总结"
 
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2145
-#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:257
-msgid "Definitions"
-msgstr "定义"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2146
-msgid "The remote peer, identified by router hash"
-msgstr "以路由Hash区分的远程节点"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2148
-msgid "Inbound connection"
-msgstr "进站连接"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2150
-msgid "Outbound connection"
-msgstr "出站连接"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2152
-msgid "They offered to introduce us (help other peers traverse our firewall)"
-msgstr "对方节点为中继帮助我方穿越防火墙"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2154
-msgid "We offered to introduce them (help other peers traverse their firewall)"
-msgstr "我方为中继帮助其他节点穿越防火墙"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2155
-msgid "How long since a packet has been received / sent"
-msgstr "最近一次数据传输距现在的时间"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2156
-msgid "The smoothed inbound / outbound transfer rate (KBytes per second)"
-msgstr "进/出站平滑传输率(Kbyte/s)"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2157
-msgid "How long ago this connection was established"
-msgstr "连接建立时间"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2158
-msgid "The difference between the peer's clock and your own"
-msgstr "节点与本地时钟间的时滞"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2159
-msgid "The congestion window, which is how many bytes can be sent without an acknowledgement"
-msgstr "拥塞窗口,即每次确认前可发送的字节量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2160
-msgid "The number of sent messages awaiting acknowledgement"
-msgstr "等待确认的已发送数据包数量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2161
-msgid "The maximum number of concurrent messages to send"
-msgstr "并发消息的最大发送量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2162
-msgid "The number of pending sends which exceed congestion window"
-msgstr "超过拥塞窗口的待发送数量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2163
-msgid "The slow start threshold"
-msgstr "慢启动门槛"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2164
-msgid "The round trip time in milliseconds"
-msgstr "往返时间单位毫秒"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2165
-msgid "The standard deviation of the round trip time in milliseconds"
-msgstr "环行时间的标准差单位毫秒"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2166
-msgid "The retransmit timeout in milliseconds"
-msgstr "重传输超时时间单位毫秒"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2167
-msgid "Current maximum send packet size / estimated maximum receive packet size (bytes)"
-msgstr "当前发送数据包的最大大小/预计接收数据包的最大大小(字节)"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2168
-msgid "The total number of packets sent to the peer"
-msgstr "向节点发送的数据包总量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2169
-msgid "The total number of packets received from the peer"
-msgstr "从节点接收到数据包总量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2170
-msgid "The total number of packets retransmitted to the peer"
-msgstr "向节点发送的重复数据包总量"
-
-#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2171
-msgid "The total number of duplicate packets received from the peer"
-msgstr "从节点接收到的重复数据包总量"
-
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:145
 msgid "Dropping tunnel requests: Too slow"
 msgstr "忽略共享请求:速度太慢"
 
+#. don't even bother, since we are so overloaded locally
 #: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:352
 msgid "Dropping tunnel requests: Overloaded"
 msgstr "忽略共享请求:路由过载"
 
-#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:523
+#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:525
 msgid "Rejecting tunnels: Request overload"
 msgstr "拒绝共享:请求过多"
 
-#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:548
+#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:550
 msgid "Rejecting tunnels: Connection limit"
 msgstr "拒绝共享:连接受限"
 
-#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:742
+#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:744
 msgid "Dropping tunnel requests: High load"
 msgstr "忽略共享请求:高负载"
 
-#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:751
+#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:753
 msgid "Dropping tunnel requests: Queue time"
 msgstr "忽略共享请求:队列积压"
 
+#. Automatically generated pseudo-java for xgettext - do not edit
+#. Translators may wish to translate a few of these, do not bother to translate all of them!!
 #: ../java/build/Countries.java:3
 msgid "Andorra"
 msgstr "安道尔"
@@ -525,874 +550,874 @@ msgstr "澳大利亚"
 msgid "Aruba"
 msgstr "阿鲁巴"
 
-#: ../java/build/Countries.java:19
+#: ../java/build/Countries.java:18
 msgid "Azerbaijan"
 msgstr "阿塞拜疆"
 
-#: ../java/build/Countries.java:20
+#: ../java/build/Countries.java:19
 msgid "Bosnia and Herzegovina"
 msgstr "波黑"
 
-#: ../java/build/Countries.java:21
+#: ../java/build/Countries.java:20
 msgid "Barbados"
 msgstr "巴巴多斯"
 
-#: ../java/build/Countries.java:22
+#: ../java/build/Countries.java:21
 msgid "Bangladesh"
 msgstr "孟加拉"
 
-#: ../java/build/Countries.java:23
+#: ../java/build/Countries.java:22
 msgid "Belgium"
 msgstr "比利时"
 
-#: ../java/build/Countries.java:24
+#: ../java/build/Countries.java:23
 msgid "Burkina Faso"
 msgstr "布基纳法索"
 
-#: ../java/build/Countries.java:25
+#: ../java/build/Countries.java:24
 msgid "Bulgaria"
 msgstr "保加利亚"
 
-#: ../java/build/Countries.java:26
+#: ../java/build/Countries.java:25
 msgid "Bahrain"
 msgstr "巴林"
 
-#: ../java/build/Countries.java:27
+#: ../java/build/Countries.java:26
 msgid "Burundi"
 msgstr "不丹"
 
-#: ../java/build/Countries.java:28
+#: ../java/build/Countries.java:27
 msgid "Benin"
 msgstr "贝宁"
 
-#: ../java/build/Countries.java:29
+#: ../java/build/Countries.java:28
 msgid "Bermuda"
 msgstr "百慕大"
 
-#: ../java/build/Countries.java:30
+#: ../java/build/Countries.java:29
 msgid "Brunei Darussalam"
 msgstr "文莱达鲁萨兰"
 
-#: ../java/build/Countries.java:31
+#: ../java/build/Countries.java:30
 msgid "Bolivia"
 msgstr "玻利维亚"
 
-#: ../java/build/Countries.java:32
+#: ../java/build/Countries.java:31
 msgid "Brazil"
 msgstr "巴西"
 
-#: ../java/build/Countries.java:33
+#: ../java/build/Countries.java:32
 msgid "Bahamas"
 msgstr "巴哈马"
 
-#: ../java/build/Countries.java:34
+#: ../java/build/Countries.java:33
 msgid "Bhutan"
 msgstr "不丹"
 
-#: ../java/build/Countries.java:35
+#: ../java/build/Countries.java:34
 msgid "Bouvet Island"
 msgstr "布韦群岛"
 
-#: ../java/build/Countries.java:36
+#: ../java/build/Countries.java:35
 msgid "Botswana"
 msgstr "伯兹瓦纳"
 
-#: ../java/build/Countries.java:37
+#: ../java/build/Countries.java:36
 msgid "Belarus"
 msgstr "白俄罗斯"
 
-#: ../java/build/Countries.java:38
+#: ../java/build/Countries.java:37
 msgid "Belize"
 msgstr "伯利兹"
 
-#: ../java/build/Countries.java:39
+#: ../java/build/Countries.java:38
 msgid "Canada"
 msgstr "加拿大"
 
-#: ../java/build/Countries.java:40
+#: ../java/build/Countries.java:39
 msgid "The Democratic Republic of the Congo"
 msgstr "刚果"
 
-#: ../java/build/Countries.java:41
+#: ../java/build/Countries.java:40
 msgid "Central African Republic"
 msgstr "中非"
 
-#: ../java/build/Countries.java:42
+#: ../java/build/Countries.java:41
 msgid "Congo"
 msgstr "Congo"
 
-#: ../java/build/Countries.java:43
+#: ../java/build/Countries.java:42
 msgid "Switzerland"
 msgstr "瑞士"
 
-#: ../java/build/Countries.java:44
+#: ../java/build/Countries.java:43
 msgid "Cote D'Ivoire"
 msgstr "象牙海岸"
 
-#: ../java/build/Countries.java:45
+#: ../java/build/Countries.java:44
 msgid "Cook Islands"
 msgstr "库克群岛"
 
-#: ../java/build/Countries.java:46
+#: ../java/build/Countries.java:45
 msgid "Chile"
 msgstr "智利"
 
-#: ../java/build/Countries.java:47
+#: ../java/build/Countries.java:46
 msgid "Cameroon"
 msgstr "喀麦隆"
 
-#: ../java/build/Countries.java:48
+#: ../java/build/Countries.java:47
 msgid "China"
 msgstr "中国"
 
-#: ../java/build/Countries.java:49
+#: ../java/build/Countries.java:48
 msgid "Colombia"
 msgstr "哥伦比亚"
 
-#: ../java/build/Countries.java:50
+#: ../java/build/Countries.java:49
 msgid "Costa Rica"
 msgstr "哥斯达黎加"
 
-#: ../java/build/Countries.java:51
+#: ../java/build/Countries.java:50
 msgid "Serbia and Montenegro"
 msgstr "塞尔维亚与黑山"
 
-#: ../java/build/Countries.java:52
+#: ../java/build/Countries.java:51
 msgid "Cuba"
 msgstr "古巴"
 
-#: ../java/build/Countries.java:53
+#: ../java/build/Countries.java:52
 msgid "Cape Verde"
 msgstr "佛得角"
 
-#: ../java/build/Countries.java:54
+#: ../java/build/Countries.java:53
 msgid "Cyprus"
 msgstr "塞浦路斯"
 
-#: ../java/build/Countries.java:55
+#: ../java/build/Countries.java:54
 msgid "Czech Republic"
 msgstr "捷克"
 
-#: ../java/build/Countries.java:56
+#: ../java/build/Countries.java:55
 msgid "Germany"
 msgstr "德国"
 
-#: ../java/build/Countries.java:57
+#: ../java/build/Countries.java:56
 msgid "Djibouti"
 msgstr "吉布提"
 
-#: ../java/build/Countries.java:58
+#: ../java/build/Countries.java:57
 msgid "Denmark"
 msgstr "丹麦"
 
-#: ../java/build/Countries.java:59
+#: ../java/build/Countries.java:58
 msgid "Dominica"
 msgstr "多米尼"
 
-#: ../java/build/Countries.java:60
+#: ../java/build/Countries.java:59
 msgid "Dominican Republic"
 msgstr "多米尼加联邦"
 
-#: ../java/build/Countries.java:61
+#: ../java/build/Countries.java:60
 msgid "Algeria"
 msgstr "阿尔及利亚"
 
-#: ../java/build/Countries.java:62
+#: ../java/build/Countries.java:61
 msgid "Ecuador"
 msgstr "厄瓜多尔"
 
-#: ../java/build/Countries.java:63
+#: ../java/build/Countries.java:62
 msgid "Estonia"
 msgstr "爱沙尼亚"
 
-#: ../java/build/Countries.java:64
+#: ../java/build/Countries.java:63
 msgid "Egypt"
 msgstr "埃及"
 
-#: ../java/build/Countries.java:65
+#: ../java/build/Countries.java:64
 msgid "Eritrea"
 msgstr "厄立特里亚"
 
-#: ../java/build/Countries.java:66
+#: ../java/build/Countries.java:65
 msgid "Spain"
 msgstr "西班牙"
 
-#: ../java/build/Countries.java:67
+#: ../java/build/Countries.java:66
 msgid "Ethiopia"
 msgstr "埃塞俄比亚"
 
-#: ../java/build/Countries.java:68
+#: ../java/build/Countries.java:67
 msgid "Finland"
 msgstr "芬兰"
 
-#: ../java/build/Countries.java:69
+#: ../java/build/Countries.java:68
 msgid "Fiji"
 msgstr "斐济"
 
-#: ../java/build/Countries.java:70
+#: ../java/build/Countries.java:69
 msgid "Falkland Islands (Malvinas)"
 msgstr "福克兰群岛"
 
-#: ../java/build/Countries.java:71
+#: ../java/build/Countries.java:70
 msgid "Federated States of Micronesia"
 msgstr "密克罗尼西亚"
 
-#: ../java/build/Countries.java:72
+#: ../java/build/Countries.java:71
 msgid "Faroe Islands"
 msgstr "法罗群岛"
 
-#: ../java/build/Countries.java:73
+#: ../java/build/Countries.java:72
 msgid "France"
 msgstr "法国"
 
-#: ../java/build/Countries.java:74
+#: ../java/build/Countries.java:73
 msgid "Gabon"
 msgstr "加蓬"
 
-#: ../java/build/Countries.java:75
+#: ../java/build/Countries.java:74
 msgid "United Kingdom"
 msgstr "英国"
 
-#: ../java/build/Countries.java:76
+#: ../java/build/Countries.java:75
 msgid "Grenada"
 msgstr "格林纳达"
 
-#: ../java/build/Countries.java:77
+#: ../java/build/Countries.java:76
 msgid "Georgia"
 msgstr "格鲁吉亚"
 
-#: ../java/build/Countries.java:78
+#: ../java/build/Countries.java:77
 msgid "French Guiana"
 msgstr "圭亚那"
 
-#: ../java/build/Countries.java:79
+#: ../java/build/Countries.java:78
 msgid "Ghana"
 msgstr "加纳"
 
-#: ../java/build/Countries.java:80
+#: ../java/build/Countries.java:79
 msgid "Gibraltar"
 msgstr "直布罗陀"
 
-#: ../java/build/Countries.java:81
+#: ../java/build/Countries.java:80
 msgid "Greenland"
 msgstr "格陵兰群岛"
 
-#: ../java/build/Countries.java:82
+#: ../java/build/Countries.java:81
 msgid "Gambia"
 msgstr "冈比亚"
 
-#: ../java/build/Countries.java:83
+#: ../java/build/Countries.java:82
 msgid "Guinea"
 msgstr "几内亚"
 
-#: ../java/build/Countries.java:84
+#: ../java/build/Countries.java:83
 msgid "Guadeloupe"
 msgstr "瓜德罗普岛"
 
-#: ../java/build/Countries.java:85
+#: ../java/build/Countries.java:84
 msgid "Equatorial Guinea"
 msgstr "赤道几内亚"
 
-#: ../java/build/Countries.java:86
+#: ../java/build/Countries.java:85
 msgid "Greece"
 msgstr "希腊"
 
-#: ../java/build/Countries.java:87
+#: ../java/build/Countries.java:86
 msgid "South Georgia and the South Sandwich Islands"
 msgstr "南乔治亚岛和南桑德韦奇岛"
 
-#: ../java/build/Countries.java:88
+#: ../java/build/Countries.java:87
 msgid "Guatemala"
 msgstr "危地马拉"
 
-#: ../java/build/Countries.java:89
+#: ../java/build/Countries.java:88
 msgid "Guam"
 msgstr "关岛"
 
-#: ../java/build/Countries.java:90
+#: ../java/build/Countries.java:89
 msgid "Guinea-Bissau"
 msgstr "几内亚比绍"
 
-#: ../java/build/Countries.java:91
+#: ../java/build/Countries.java:90
 msgid "Guyana"
 msgstr "圭亚那"
 
-#: ../java/build/Countries.java:92
+#: ../java/build/Countries.java:91
 msgid "Hong Kong"
 msgstr "香港"
 
-#: ../java/build/Countries.java:93
+#: ../java/build/Countries.java:92
 msgid "Honduras"
 msgstr "洪都拉斯"
 
-#: ../java/build/Countries.java:94
+#: ../java/build/Countries.java:93
 msgid "Croatia"
 msgstr "克罗蒂亚"
 
-#: ../java/build/Countries.java:95
+#: ../java/build/Countries.java:94
 msgid "Haiti"
 msgstr "海地"
 
-#: ../java/build/Countries.java:96
+#: ../java/build/Countries.java:95
 msgid "Hungary"
 msgstr "匈牙利"
 
-#: ../java/build/Countries.java:97
+#: ../java/build/Countries.java:96
 msgid "Indonesia"
 msgstr "印尼"
 
-#: ../java/build/Countries.java:98
+#: ../java/build/Countries.java:97
 msgid "Ireland"
 msgstr "爱尔兰"
 
-#: ../java/build/Countries.java:99
+#: ../java/build/Countries.java:98
 msgid "Israel"
 msgstr "以色列"
 
-#: ../java/build/Countries.java:101
+#: ../java/build/Countries.java:99
 msgid "India"
 msgstr "印度"
 
-#: ../java/build/Countries.java:102
+#: ../java/build/Countries.java:100
 msgid "British Indian Ocean Territory"
 msgstr "英属印度洋地区"
 
-#: ../java/build/Countries.java:103
+#: ../java/build/Countries.java:101
 msgid "Iraq"
 msgstr "伊拉克"
 
-#: ../java/build/Countries.java:104
+#: ../java/build/Countries.java:102
 msgid "Islamic Republic of Iran"
 msgstr "伊朗"
 
-#: ../java/build/Countries.java:105
+#: ../java/build/Countries.java:103
 msgid "Iceland"
 msgstr "冰岛"
 
-#: ../java/build/Countries.java:106
+#: ../java/build/Countries.java:104
 msgid "Italy"
 msgstr "意大利"
 
-#: ../java/build/Countries.java:108
+#: ../java/build/Countries.java:105
 msgid "Jamaica"
 msgstr "牙买加"
 
-#: ../java/build/Countries.java:109
+#: ../java/build/Countries.java:106
 msgid "Jordan"
 msgstr "约旦"
 
-#: ../java/build/Countries.java:110
+#: ../java/build/Countries.java:107
 msgid "Japan"
 msgstr "日本"
 
-#: ../java/build/Countries.java:111
+#: ../java/build/Countries.java:108
 msgid "Kenya"
 msgstr "肯尼亚"
 
-#: ../java/build/Countries.java:112
+#: ../java/build/Countries.java:109
 msgid "Kyrgyzstan"
 msgstr "吉尔吉斯斯坦"
 
-#: ../java/build/Countries.java:113
+#: ../java/build/Countries.java:110
 msgid "Cambodia"
 msgstr "柬埔塞"
 
-#: ../java/build/Countries.java:114
+#: ../java/build/Countries.java:111
 msgid "Kiribati"
 msgstr "基里巴斯"
 
-#: ../java/build/Countries.java:115
+#: ../java/build/Countries.java:112
 msgid "Comoros"
 msgstr "科摩罗"
 
-#: ../java/build/Countries.java:116
+#: ../java/build/Countries.java:113
 msgid "Saint Kitts and Nevis"
 msgstr "圣克里斯多福与尼维斯"
 
-#: ../java/build/Countries.java:117
+#: ../java/build/Countries.java:114
 msgid "Republic of Korea"
 msgstr "韩国"
 
-#: ../java/build/Countries.java:118
+#: ../java/build/Countries.java:115
 msgid "Kuwait"
 msgstr "科威特"
 
-#: ../java/build/Countries.java:119
+#: ../java/build/Countries.java:116
 msgid "Cayman Islands"
 msgstr "开曼群岛"
 
-#: ../java/build/Countries.java:120
+#: ../java/build/Countries.java:117
 msgid "Kazakhstan"
 msgstr "哈萨克斯坦"
 
-#: ../java/build/Countries.java:121
+#: ../java/build/Countries.java:118
 msgid "Lao People's Democratic Republic"
 msgstr "老挝"
 
-#: ../java/build/Countries.java:122
+#: ../java/build/Countries.java:119
 msgid "Lebanon"
 msgstr "黎巴嫩"
 
-#: ../java/build/Countries.java:123
+#: ../java/build/Countries.java:120
 msgid "Saint Lucia"
 msgstr "圣露西亚岛"
 
-#: ../java/build/Countries.java:124
+#: ../java/build/Countries.java:121
 msgid "Liechtenstein"
 msgstr "列支敦士登"
 
-#: ../java/build/Countries.java:125
+#: ../java/build/Countries.java:122
 msgid "Sri Lanka"
 msgstr "斯里兰卡"
 
-#: ../java/build/Countries.java:126
+#: ../java/build/Countries.java:123
 msgid "Liberia"
 msgstr "利比里亚"
 
-#: ../java/build/Countries.java:127
+#: ../java/build/Countries.java:124
 msgid "Lesotho"
 msgstr "莱索托"
 
-#: ../java/build/Countries.java:128
+#: ../java/build/Countries.java:125
 msgid "Lithuania"
 msgstr "立陶宛"
 
-#: ../java/build/Countries.java:129
+#: ../java/build/Countries.java:126
 msgid "Luxembourg"
 msgstr "卢森堡"
 
-#: ../java/build/Countries.java:130
+#: ../java/build/Countries.java:127
 msgid "Latvia"
 msgstr "拉脱维亚"
 
-#: ../java/build/Countries.java:131
+#: ../java/build/Countries.java:128
 msgid "Libyan Arab Jamahiriya"
 msgstr "利比亚"
 
-#: ../java/build/Countries.java:132
+#: ../java/build/Countries.java:129
 msgid "Morocco"
 msgstr "摩洛哥"
 
-#: ../java/build/Countries.java:133
+#: ../java/build/Countries.java:130
 msgid "Monaco"
 msgstr "摩纳哥"
 
-#: ../java/build/Countries.java:134
+#: ../java/build/Countries.java:131
 msgid "Republic of Moldova"
 msgstr "摩尔多瓦"
 
-#: ../java/build/Countries.java:137
+#: ../java/build/Countries.java:132
 msgid "Madagascar"
 msgstr "马达加斯加"
 
-#: ../java/build/Countries.java:138
+#: ../java/build/Countries.java:133
 msgid "Marshall Islands"
 msgstr "马绍尔群岛"
 
-#: ../java/build/Countries.java:139
+#: ../java/build/Countries.java:134
 msgid "The Former Yugoslav Republic of Macedonia"
 msgstr "前南斯拉夫之马其顿共和国"
 
-#: ../java/build/Countries.java:140
+#: ../java/build/Countries.java:135
 msgid "Mali"
 msgstr "马里"
 
-#: ../java/build/Countries.java:141
+#: ../java/build/Countries.java:136
 msgid "Myanmar"
 msgstr "缅甸"
 
-#: ../java/build/Countries.java:142
+#: ../java/build/Countries.java:137
 msgid "Mongolia"
 msgstr "蒙古"
 
-#: ../java/build/Countries.java:143
+#: ../java/build/Countries.java:138
 msgid "Macao"
 msgstr "澳门"
 
-#: ../java/build/Countries.java:144
+#: ../java/build/Countries.java:139
 msgid "Northern Mariana Islands"
 msgstr "北马里亚纳群岛"
 
-#: ../java/build/Countries.java:145
+#: ../java/build/Countries.java:140
 msgid "Martinique"
 msgstr "马提尼克岛"
 
-#: ../java/build/Countries.java:146
+#: ../java/build/Countries.java:141
 msgid "Mauritania"
 msgstr "毛里塔尼亚"
 
-#: ../java/build/Countries.java:147
+#: ../java/build/Countries.java:142
 msgid "Montserrat"
 msgstr "蒙特塞拉特"
 
-#: ../java/build/Countries.java:148
+#: ../java/build/Countries.java:143
 msgid "Malta"
 msgstr "马尔他"
 
-#: ../java/build/Countries.java:149
+#: ../java/build/Countries.java:144
 msgid "Mauritius"
 msgstr "毛里求斯"
 
-#: ../java/build/Countries.java:150
+#: ../java/build/Countries.java:145
 msgid "Maldives"
 msgstr "马尔代夫"
 
-#: ../java/build/Countries.java:151
+#: ../java/build/Countries.java:146
 msgid "Malawi"
 msgstr "马拉维"
 
-#: ../java/build/Countries.java:152
+#: ../java/build/Countries.java:147
 msgid "Mexico"
 msgstr "墨西哥"
 
-#: ../java/build/Countries.java:153
+#: ../java/build/Countries.java:148
 msgid "Malaysia"
 msgstr "马来西亚"
 
-#: ../java/build/Countries.java:154
+#: ../java/build/Countries.java:149
 msgid "Mozambique"
 msgstr "莫桑比克"
 
-#: ../java/build/Countries.java:155
+#: ../java/build/Countries.java:150
 msgid "Namibia"
 msgstr "纳米比亚"
 
-#: ../java/build/Countries.java:156
+#: ../java/build/Countries.java:151
 msgid "New Caledonia"
 msgstr "新喀里多尼亚"
 
-#: ../java/build/Countries.java:157
+#: ../java/build/Countries.java:152
 msgid "Niger"
 msgstr "尼日尔"
 
-#: ../java/build/Countries.java:158
+#: ../java/build/Countries.java:153
 msgid "Norfolk Island"
 msgstr "尼加拉瓜"
 
-#: ../java/build/Countries.java:159
+#: ../java/build/Countries.java:154
 msgid "Nigeria"
 msgstr "尼日利亚"
 
-#: ../java/build/Countries.java:160
+#: ../java/build/Countries.java:155
 msgid "Nicaragua"
 msgstr "尼加拉瓜"
 
-#: ../java/build/Countries.java:161
+#: ../java/build/Countries.java:156
 msgid "Netherlands"
 msgstr "荷兰"
 
-#: ../java/build/Countries.java:162
+#: ../java/build/Countries.java:157
 msgid "Norway"
 msgstr "挪威"
 
-#: ../java/build/Countries.java:163
+#: ../java/build/Countries.java:158
 msgid "Nepal"
 msgstr "尼泊尔"
 
-#: ../java/build/Countries.java:164
+#: ../java/build/Countries.java:159
 msgid "Nauru"
 msgstr "瑙鲁"
 
-#: ../java/build/Countries.java:165
+#: ../java/build/Countries.java:160
 msgid "Niue"
 msgstr "纽埃岛"
 
-#: ../java/build/Countries.java:166
+#: ../java/build/Countries.java:161
 msgid "New Zealand"
 msgstr "新西兰"
 
-#: ../java/build/Countries.java:167
+#: ../java/build/Countries.java:162
 msgid "Oman"
 msgstr "阿曼"
 
-#: ../java/build/Countries.java:168
+#: ../java/build/Countries.java:163
 msgid "Panama"
 msgstr "巴拿马"
 
-#: ../java/build/Countries.java:169
+#: ../java/build/Countries.java:164
 msgid "Peru"
 msgstr "秘鲁"
 
-#: ../java/build/Countries.java:170
+#: ../java/build/Countries.java:165
 msgid "French Polynesia"
 msgstr "玻利尼西亚"
 
-#: ../java/build/Countries.java:171
+#: ../java/build/Countries.java:166
 msgid "Papua New Guinea"
 msgstr "巴布亚新几内亚"
 
-#: ../java/build/Countries.java:172
+#: ../java/build/Countries.java:167
 msgid "Philippines"
 msgstr "菲律宾"
 
-#: ../java/build/Countries.java:173
+#: ../java/build/Countries.java:168
 msgid "Pakistan"
 msgstr "巴基斯坦"
 
-#: ../java/build/Countries.java:174
+#: ../java/build/Countries.java:169
 msgid "Poland"
 msgstr "波兰"
 
-#: ../java/build/Countries.java:175
+#: ../java/build/Countries.java:170
 msgid "Saint Pierre and Miquelon"
 msgstr "圣皮埃尔岛和密克隆"
 
-#: ../java/build/Countries.java:176
+#: ../java/build/Countries.java:171
 msgid "Puerto Rico"
 msgstr "波多黎各"
 
-#: ../java/build/Countries.java:177
+#: ../java/build/Countries.java:172
 msgid "Palestinian Territory"
 msgstr "巴勒斯坦地区"
 
-#: ../java/build/Countries.java:178
+#: ../java/build/Countries.java:173
 msgid "Portugal"
 msgstr "葡萄牙"
 
-#: ../java/build/Countries.java:179
+#: ../java/build/Countries.java:174
 msgid "Palau"
 msgstr "帕劳"
 
-#: ../java/build/Countries.java:180
+#: ../java/build/Countries.java:175
 msgid "Paraguay"
 msgstr "巴拉圭"
 
-#: ../java/build/Countries.java:181
+#: ../java/build/Countries.java:176
 msgid "Qatar"
 msgstr "卡塔尔"
 
-#: ../java/build/Countries.java:182
+#: ../java/build/Countries.java:177
 msgid "Reunion"
 msgstr "留尼汪岛"
 
-#: ../java/build/Countries.java:183
+#: ../java/build/Countries.java:178
 msgid "Romania"
 msgstr "罗马尼亚"
 
-#: ../java/build/Countries.java:184
+#: ../java/build/Countries.java:179
 msgid "Serbia"
 msgstr "塞尔维亚"
 
-#: ../java/build/Countries.java:185
+#: ../java/build/Countries.java:180
 msgid "Russian Federation"
 msgstr "俄联邦"
 
-#: ../java/build/Countries.java:186
+#: ../java/build/Countries.java:181
 msgid "Rwanda"
 msgstr "卢旺达"
 
-#: ../java/build/Countries.java:187
+#: ../java/build/Countries.java:182
 msgid "Saudi Arabia"
 msgstr "沙特阿拉伯"
 
-#: ../java/build/Countries.java:188
+#: ../java/build/Countries.java:183
 msgid "Solomon Islands"
 msgstr "所罗门群岛"
 
-#: ../java/build/Countries.java:189
+#: ../java/build/Countries.java:184
 msgid "Seychelles"
 msgstr "塞舌尔"
 
-#: ../java/build/Countries.java:190
+#: ../java/build/Countries.java:185
 msgid "Sudan"
 msgstr "苏丹"
 
-#: ../java/build/Countries.java:191
+#: ../java/build/Countries.java:186
 msgid "Sweden"
 msgstr "瑞典"
 
-#: ../java/build/Countries.java:192
+#: ../java/build/Countries.java:187
 msgid "Singapore"
 msgstr "新加坡"
 
-#: ../java/build/Countries.java:193
+#: ../java/build/Countries.java:188
 msgid "Slovenia"
 msgstr "斯洛文尼亚"
 
-#: ../java/build/Countries.java:194
+#: ../java/build/Countries.java:189
 msgid "Slovakia"
 msgstr "斯洛伐克"
 
-#: ../java/build/Countries.java:195
+#: ../java/build/Countries.java:190
 msgid "Sierra Leone"
 msgstr "塞拉利昂"
 
-#: ../java/build/Countries.java:196
+#: ../java/build/Countries.java:191
 msgid "San Marino"
 msgstr "圣马力诺"
 
-#: ../java/build/Countries.java:197
+#: ../java/build/Countries.java:192
 msgid "Senegal"
 msgstr "塞内加尔"
 
-#: ../java/build/Countries.java:198
+#: ../java/build/Countries.java:193
 msgid "Somalia"
 msgstr "索马里"
 
-#: ../java/build/Countries.java:199
+#: ../java/build/Countries.java:194
 msgid "Suriname"
 msgstr "苏里南"
 
-#: ../java/build/Countries.java:200
+#: ../java/build/Countries.java:195
 msgid "Sao Tome and Principe"
 msgstr "圣多美与普林西比共和国"
 
-#: ../java/build/Countries.java:201
+#: ../java/build/Countries.java:196
 msgid "El Salvador"
 msgstr "萨尔瓦多"
 
-#: ../java/build/Countries.java:202
+#: ../java/build/Countries.java:197
 msgid "Syrian Arab Republic"
 msgstr "叙利亚"
 
-#: ../java/build/Countries.java:203
+#: ../java/build/Countries.java:198
 msgid "Swaziland"
 msgstr "斯威士兰"
 
-#: ../java/build/Countries.java:204
+#: ../java/build/Countries.java:199
 msgid "Turks and Caicos Islands"
 msgstr "特克斯和凯科斯群岛"
 
-#: ../java/build/Countries.java:205
+#: ../java/build/Countries.java:200
 msgid "Chad"
 msgstr "乍得"
 
-#: ../java/build/Countries.java:206
+#: ../java/build/Countries.java:201
 msgid "French Southern Territories"
 msgstr "法属南半球领地"
 
-#: ../java/build/Countries.java:207
+#: ../java/build/Countries.java:202
 msgid "Togo"
 msgstr "多哥"
 
-#: ../java/build/Countries.java:208
+#: ../java/build/Countries.java:203
 msgid "Thailand"
 msgstr "泰国"
 
-#: ../java/build/Countries.java:209
+#: ../java/build/Countries.java:204
 msgid "Tajikistan"
 msgstr "塔吉克斯坦"
 
-#: ../java/build/Countries.java:210
+#: ../java/build/Countries.java:205
 msgid "Tokelau"
 msgstr "托克劳群岛"
 
-#: ../java/build/Countries.java:211
+#: ../java/build/Countries.java:206
 msgid "Timor-Leste"
 msgstr "东帝汶"
 
-#: ../java/build/Countries.java:212
+#: ../java/build/Countries.java:207
 msgid "Turkmenistan"
 msgstr "土库曼斯坦"
 
-#: ../java/build/Countries.java:213
+#: ../java/build/Countries.java:208
 msgid "Tunisia"
 msgstr "突尼斯"
 
-#: ../java/build/Countries.java:214
+#: ../java/build/Countries.java:209
 msgid "Tonga"
 msgstr "汤加"
 
-#: ../java/build/Countries.java:215
+#: ../java/build/Countries.java:210
 msgid "Turkey"
 msgstr "土耳其"
 
-#: ../java/build/Countries.java:216
+#: ../java/build/Countries.java:211
 msgid "Trinidad and Tobago"
 msgstr "特立尼达和多巴哥"
 
-#: ../java/build/Countries.java:217
+#: ../java/build/Countries.java:212
 msgid "Tuvalu"
 msgstr "图瓦鲁"
 
-#: ../java/build/Countries.java:218
+#: ../java/build/Countries.java:213
 msgid "Taiwan"
 msgstr "台湾"
 
-#: ../java/build/Countries.java:219
+#: ../java/build/Countries.java:214
 msgid "United Republic of Tanzania"
 msgstr "坦桑尼亚"
 
-#: ../java/build/Countries.java:220
+#: ../java/build/Countries.java:215
 msgid "Ukraine"
 msgstr "乌克兰"
 
-#: ../java/build/Countries.java:221
+#: ../java/build/Countries.java:216
 msgid "Uganda"
 msgstr "乌干达"
 
-#: ../java/build/Countries.java:222
+#: ../java/build/Countries.java:217
 msgid "United States Minor Outlying Islands"
 msgstr "美国本土外小岛屿"
 
-#: ../java/build/Countries.java:223
+#: ../java/build/Countries.java:218
 msgid "United States"
 msgstr "美国"
 
-#: ../java/build/Countries.java:224
+#: ../java/build/Countries.java:219
 msgid "Uruguay"
 msgstr "乌拉圭"
 
-#: ../java/build/Countries.java:225
+#: ../java/build/Countries.java:220
 msgid "Uzbekistan"
 msgstr "乌兹别克斯坦"
 
-#: ../java/build/Countries.java:226
+#: ../java/build/Countries.java:221
 msgid "Holy See (Vatican City State)"
 msgstr "梵地冈"
 
-#: ../java/build/Countries.java:227
+#: ../java/build/Countries.java:222
 msgid "Saint Vincent and the Grenadines"
 msgstr "圣文森特和格林纳丁斯"
 
-#: ../java/build/Countries.java:228
+#: ../java/build/Countries.java:223
 msgid "Venezuela"
 msgstr "委内瑞拉"
 
-#: ../java/build/Countries.java:229
-#: ../java/build/Countries.java:230
+#: ../java/build/Countries.java:224
+#: ../java/build/Countries.java:225
 msgid "Virgin Islands"
 msgstr "维京群岛"
 
-#: ../java/build/Countries.java:231
+#: ../java/build/Countries.java:226
 msgid "Viet Nam"
 msgstr "越南"
 
-#: ../java/build/Countries.java:232
+#: ../java/build/Countries.java:227
 msgid "Vanuatu"
 msgstr "瓦努阿图"
 
-#: ../java/build/Countries.java:233
+#: ../java/build/Countries.java:228
 msgid "Wallis and Futuna"
 msgstr "瓦利斯群岛和富图纳群岛"
 
-#: ../java/build/Countries.java:234
+#: ../java/build/Countries.java:229
 msgid "Samoa"
 msgstr "东萨摩亚"
 
-#: ../java/build/Countries.java:235
+#: ../java/build/Countries.java:230
 msgid "Yemen"
 msgstr "也门"
 
-#: ../java/build/Countries.java:236
+#: ../java/build/Countries.java:231
 msgid "Mayotte"
 msgstr "马约特"
 
-#: ../java/build/Countries.java:237
+#: ../java/build/Countries.java:232
 msgid "South Africa"
 msgstr "南非"
 
-#: ../java/build/Countries.java:238
+#: ../java/build/Countries.java:233
 msgid "Zambia"
 msgstr "赞比亚"
 
-#: ../java/build/Countries.java:239
+#: ../java/build/Countries.java:234
 msgid "Zimbabwe"
 msgstr "津巴布韦"
 
-#: ../java/src/net/i2p/router/web/CSSHelper.java:54
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:30
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:32
+#: ../java/src/net/i2p/router/web/CSSHelper.java:57
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:34
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:36
 #: ../java/strings/Strings.java:29
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:234
 msgid "I2P Router Console"
@@ -1403,12 +1428,12 @@ msgid "Error updating the configuration - please see the error logs"
 msgstr "配置更新出错 - 请查看错误日志"
 
 #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:69
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:263
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:266
 msgid "Configuration saved successfully"
 msgstr "设置保存成功"
 
 #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:71
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:265
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:268
 msgid "Error saving the configuration (applied but not saved) - please see the error logs"
 msgstr "配置保存出错(已应用但未保存) - 参见错误日志"
 
@@ -1452,6 +1477,7 @@ msgstr "插件 {0} 已停用"
 msgid "Error stopping plugin {0}"
 msgstr "停用插件 {0} 时发生错误"
 
+#. label (IE)
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:119
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:189
 msgid "Start"
@@ -1479,8 +1505,8 @@ msgstr "客户程序索引无效"
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:207
 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:218
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:38
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:374
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:389
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:387
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:379
 msgid "Client"
 msgstr "客户"
 
@@ -1588,8 +1614,8 @@ msgid "Plugin"
 msgstr "插件"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:95
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:191
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:165
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:268
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:180
 msgid "Version"
 msgstr "版本"
 
@@ -1622,15 +1648,15 @@ msgid "Stop"
 msgstr "停止"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:196
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:58
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:81
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:312
 msgid "Check for updates"
 msgstr "检查更新"
 
 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:197
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:213
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:220
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:230
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:237
 msgid "Update"
 msgstr "更新"
 
@@ -1720,6 +1746,7 @@ msgid "WARN"
 msgstr ""
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:199
 msgid "Network"
 msgstr "网络"
 
@@ -1728,7 +1755,8 @@ msgid "Service"
 msgstr "服务"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:90
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:100
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:376
 #: ../java/strings/Strings.java:72
 msgid "Tunnels"
 msgstr "隧道"
@@ -1751,15 +1779,15 @@ msgid "Logging"
 msgstr "日志"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:96
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:238
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:106
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:255
 #: ../java/strings/Strings.java:67
 msgid "Peers"
 msgstr "节点"
 
 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:298
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:132
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:382
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:142
 msgid "Stats"
 msgstr "统计"
 
@@ -1768,7 +1796,7 @@ msgid "Advanced"
 msgstr "高级"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:48
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:261
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:264
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:35
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:359
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:515
@@ -1783,79 +1811,81 @@ msgstr "保存修改"
 msgid "Rechecking router reachability..."
 msgstr "正在重检查路由连通性..."
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:150
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:153
 msgid "Updating IP address"
 msgstr "正在更新IP地址"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:168
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:171
 msgid "Disabling TCP completely"
 msgstr "正在彻底禁用TCP"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:172
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:175
 msgid "Updating inbound TCP address to"
 msgstr "正在更新进站TCP地址至"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:179
 msgid "Disabling inbound TCP"
 msgstr "正在禁用入站TCP"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:178
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:181
 msgid "Updating inbound TCP address to auto"
 msgstr "正在更新入站TCP地址至"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:187
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:190
 msgid "Updating inbound TCP port to"
 msgstr "正在更新入站TCP端口至"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:190
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:193
 msgid "Updating inbound TCP port to auto"
 msgstr "正在更新入站TCP端口至"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:205
 msgid "Updating UDP port from"
 msgstr "正在更新UDP端口由"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:205
 msgid "to"
 msgstr "至"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:218
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:221
 msgid "Gracefully restarting into Hidden Router Mode"
 msgstr "正在平滑重启路由进入隐身模式"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:220
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:223
 msgid "Gracefully restarting to exit Hidden Router Mode"
 msgstr "正在平滑重启路由退出隐身模式"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:229
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:232
 msgid "Enabling UPnP, restart required to take effect"
 msgstr "正在启用UPnP,程序重启后生效"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:234
 msgid "Disabling UPnP, restart required to take effect"
 msgstr "正在禁用UPnP,程序重启后生效"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:239
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:242
 msgid "Enabling laptop mode"
 msgstr "正在启用笔记本模式"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:241
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:244
 msgid "Disabling laptop mode"
 msgstr "正在禁用笔记本模式"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:250
 msgid "Requiring SSU introducers"
 msgstr "正在获取SSU中介"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:288
+#. There's a few changes that don't really require restart (e.g. enabling inbound TCP)
+#. But it would be hard to get right, so just do a restart.
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:291
 msgid "Gracefully restarting I2P to change published router address"
 msgstr "正在平滑重启路由重新发布路由地址"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:311
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:314
 msgid "Updating bandwidth share percentage"
 msgstr "正在更新共享带宽比例"
 
-#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:394
+#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:397
 msgid "Updated bandwidth limits"
 msgstr "带宽限制更新完毕"
 
@@ -1869,7 +1899,12 @@ msgstr "未知"
 
 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:169
 msgid "bits per second"
-msgstr "比特/秒"
+msgstr "Bit/s"
+
+#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:170
+#, java-format
+msgid "or {0} bytes per month maximum"
+msgstr "或最多 {0} Byte/月(假设始终 7 天 x 24小时开机)"
 
 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:20
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:314
@@ -1917,12 +1952,15 @@ msgstr "速度值无效"
 msgid "Bad capacity value"
 msgstr "容量值无效"
 
+#. Normal browsers send value, IE sends button label
 #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:32
 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:57
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:292
 msgid "Shutdown immediately"
 msgstr "立刻关闭"
 
+#. ctx.router().shutdown(Router.EXIT_HARD); // never returns
+#. give the UI time to respond
 #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:36
 msgid "Cancel shutdown"
 msgstr "取消关闭"
@@ -1935,6 +1973,8 @@ msgstr "取消重启"
 msgid "Restart immediately"
 msgstr "立刻重启"
 
+#. ctx.router().shutdown(Router.EXIT_HARD_RESTART); // never returns
+#. give the UI time to respond
 #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:43
 msgid "Restart"
 msgstr "重 启"
@@ -2106,6 +2146,8 @@ msgstr "统计数据过滤器及地址更新失败"
 msgid "Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>"
 msgstr "曲线图列表已更新,更新后的内容可能需要最多 60s 的时间才能在这里及 <a href=\"graphs.jsp\">统计图表</a>页面中反映出来。"
 
+#. the count isn't really correct anyway, since we don't check for actual changes
+#. addFormNotice("Updated settings for " + updated + " pools.");
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:137
 msgid "Updated settings for all pools."
 msgstr "隧道池更新完毕"
@@ -2119,21 +2161,18 @@ msgstr "探索隧道设置保存成功。"
 msgid "Error saving the configuration (applied but not saved) - please see the error logs."
 msgstr "配置保存出错(已应用但未保存) - 参见错误日志"
 
-#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:11
-msgid "hop"
-msgstr "跳点"
-
-#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:12
-msgid "tunnel"
-msgstr "隧道"
-
+#. * dummies for translation
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14
-msgid "hops"
-msgstr "跳点"
+#, java-format
+msgid "1 hop"
+msgid_plural "{0} hops"
+msgstr[0] "{0} 跳点"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:15
-msgid "tunnels"
-msgstr "隧道"
+#, java-format
+msgid "1 tunnel"
+msgid_plural "{0} tunnels"
+msgstr[0] "{0} 隧道"
 
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:26
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:41
@@ -2161,18 +2200,23 @@ msgstr "性能警告 - 设置中包括长隧道"
 msgid "PERFORMANCE WARNING - Settings include high tunnel quantities."
 msgstr "性能警告 - 设置中包括大量隧道"
 
+#. buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
+#. tunnel depth
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:87
 msgid "Length"
 msgstr "长度"
 
+#. tunnel depth variance
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:104
 msgid "Randomization"
 msgstr "随机"
 
+#. tunnel quantity
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:128
 msgid "Quantity"
 msgstr "数量"
 
+#. tunnel backup quantity
 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:145
 msgid "Backup quantity"
 msgstr "备用数量"
@@ -2221,52 +2265,52 @@ msgstr "俄语"
 msgid "Swedish"
 msgstr "瑞士语"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:65
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:88
 msgid "Update available, attempting to download now"
 msgstr "有更新可用,正在尝试下载"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:67
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:90
 msgid "Update available, click button on left to download"
 msgstr "有更新可用,点左侧按钮下载"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:73
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:96
 msgid "No update available"
 msgstr "无更新"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:81
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:104
 msgid "Updating news URL to"
 msgstr "正在更新新闻链接至"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:89
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:112
 msgid "Updating proxy host to"
 msgstr "正在更新代理主机至"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:97
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:120
 msgid "Updating proxy port to"
 msgstr "正在更新代理端口至"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:110
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:133
 msgid "Updating refresh frequency to"
 msgstr "正在更新更新频率为"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:117
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:140
 msgid "Updating update policy to"
 msgstr "正在更新更新策略为"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:126
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:149
 msgid "Updating update URLs."
 msgstr "正在更新更新链接至"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:135
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:158
 msgid "Updating trusted keys."
 msgstr "正在更新可信公钥为"
 
-#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:143
+#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:166
 msgid "Updating unsigned update URL to"
 msgstr "正在更新未签名软件链接至"
 
 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:88
-#: ../java/src/net/i2p/router/web/GraphHelper.java:136
+#: ../java/src/net/i2p/router/web/GraphHelper.java:138
 msgid "Never"
 msgstr "从不"
 
@@ -2290,66 +2334,76 @@ msgstr "仅下载、验证并重启"
 msgid "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit."
 msgstr "表单提交无效,可能的原因是您使用了“后退”或“刷新”按钮。请重新提交。"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:128
+#: ../java/src/net/i2p/router/web/GraphHelper.java:82
+msgid "Combined bandwidth graph"
+msgstr "复合带宽图"
+
+#. e.g. "statname for 60m"
+#: ../java/src/net/i2p/router/web/GraphHelper.java:96
+#, java-format
+msgid "{0} for {1}"
+msgstr "过去 {1} 统计 {0}"
+
+#: ../java/src/net/i2p/router/web/GraphHelper.java:130
 msgid "Configure Graph Display"
 msgstr "图表显示设置"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:128
+#: ../java/src/net/i2p/router/web/GraphHelper.java:130
 msgid "Select Stats"
 msgstr "选择统计项"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:130
+#: ../java/src/net/i2p/router/web/GraphHelper.java:132
 msgid "Periods"
 msgstr "周期"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:131
+#: ../java/src/net/i2p/router/web/GraphHelper.java:133
 msgid "Plot averages"
 msgstr "事件均值"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:132
+#: ../java/src/net/i2p/router/web/GraphHelper.java:134
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:416
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:332
 msgid "or"
 msgstr "或"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:132
+#: ../java/src/net/i2p/router/web/GraphHelper.java:134
 msgid "plot events"
 msgstr "事件数量"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:133
+#: ../java/src/net/i2p/router/web/GraphHelper.java:135
 msgid "Image sizes"
 msgstr "图像尺寸"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:133
+#: ../java/src/net/i2p/router/web/GraphHelper.java:135
 msgid "width"
 msgstr "宽度"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:134
+#: ../java/src/net/i2p/router/web/GraphHelper.java:136
 msgid "height"
 msgstr "高度"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:134
-#: ../java/src/net/i2p/router/web/GraphHelper.java:135
+#: ../java/src/net/i2p/router/web/GraphHelper.java:136
+#: ../java/src/net/i2p/router/web/GraphHelper.java:137
 msgid "pixels"
 msgstr "像素"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:136
+#: ../java/src/net/i2p/router/web/GraphHelper.java:138
 msgid "Refresh delay"
 msgstr "刷新延迟"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:136
+#: ../java/src/net/i2p/router/web/GraphHelper.java:138
 msgid "hour"
 msgstr "小时"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:136
+#: ../java/src/net/i2p/router/web/GraphHelper.java:138
 msgid "minute"
 msgstr "分钟"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:136
+#: ../java/src/net/i2p/router/web/GraphHelper.java:138
 msgid "minutes"
 msgstr "分钟"
 
-#: ../java/src/net/i2p/router/web/GraphHelper.java:137
+#: ../java/src/net/i2p/router/web/GraphHelper.java:139
 msgid "Redraw"
 msgstr "重绘"
 
@@ -2358,181 +2412,182 @@ msgstr "重绘"
 msgid "File location"
 msgstr "文件位置"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:60
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:77
 msgid "Network Database RouterInfo Lookup"
 msgstr "网络数据库 RouterInfo 检索"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:75
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:92
 #: ../java/strings/Strings.java:68
 msgid "Router"
 msgstr "路由器"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:75
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:92
 msgid "not found in network database"
 msgstr "在网络数据库概况未找到"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:83
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:104
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:212
 msgid "Network Database Contents"
 msgstr "网络数据库内容"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:84
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:105
 msgid "View RouterInfo"
 msgstr "浏览 RouterInfo"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:85
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:106
 msgid "LeaseSets"
 msgstr "赁集"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:93
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:128
 msgid "LeaseSet"
 msgstr "赁集"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:95
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:130
 msgid "Local"
 msgstr "本地"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:97
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:132
 msgid "Unpublished"
 msgstr "未发布"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:98
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:105
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:133
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:140
 msgid "Destination"
 msgstr "目标"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:115
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:150
 #, java-format
 msgid "Expires in {0}"
 msgstr "{0} 后过期"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:117
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:152
 #, java-format
 msgid "Expired {0} ago"
 msgstr "{0}前过期"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:119
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:164
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:156
 msgid "Gateway"
 msgstr "网关"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:119
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:164
 msgid "Lease"
 msgstr "租赁"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:121
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:166
 msgid "Tunnel"
 msgstr "隧道"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:212
 msgid "View LeaseSets"
 msgstr "查看赁集"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:137
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:214
 msgid "Not initialized"
 msgstr "未初始化"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:146
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223
 msgid "Routers"
 msgstr "路由器"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:148
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:225
 msgid "Show all routers"
 msgstr "显示所有路由器"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:150
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:227
 msgid "Show all routers with full stats"
 msgstr "显示所有路由及统计"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:185
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:262
 msgid "Network Database Router Statistics"
 msgstr "NetDb路由器统计"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:191
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:205
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:268
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:282
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:300
 msgid "Count"
 msgstr "计数"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:205
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:282
 msgid "Transports"
 msgstr "传输"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:300
 msgid "Country"
 msgstr "国家"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:255
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:339
 msgid "Our info"
 msgstr "我方信息"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:257
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:341
 msgid "Peer info for"
 msgstr "节点信息"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:261
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:345
 msgid "Full entry"
 msgstr "完整项"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:267
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:351
 #: ../java/src/net/i2p/router/web/SummaryHelper.java:110
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:600
 msgid "Hidden"
 msgstr "隐身"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:267
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:351
 msgid "Updated"
 msgstr "已更新"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:268
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:271
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:352
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:355
 #, java-format
 msgid "{0} ago"
 msgstr "{0}前"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:270
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:274
+#. shouldnt happen
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:354
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:358
 msgid "Published"
 msgstr "发布"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:276
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:360
 msgid "Address(es)"
 msgstr "地址"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:289
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:373
 msgid "cost"
-msgstr ""
+msgstr "开销"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:313
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:397
 msgid "Hidden or starting up"
 msgstr "隐身或正在启动"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:313
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:397
 msgid "SSU"
 msgstr ""
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:313
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:397
 msgid "SSU with introducers"
 msgstr "使用中介的SSU连接"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:314
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:398
 msgid "NTCP"
 msgstr ""
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:314
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:398
 msgid "NTCP and SSU"
 msgstr "NTCP 与 SSU"
 
-#: ../java/src/net/i2p/router/web/NetDbRenderer.java:314
+#: ../java/src/net/i2p/router/web/NetDbRenderer.java:398
 msgid "NTCP and SSU with introducers"
 msgstr "使用中介的NTCP与SSU连接"
 
-#: ../java/src/net/i2p/router/web/NewsFetcher.java:80
+#: ../java/src/net/i2p/router/web/NewsFetcher.java:82
 #, java-format
 msgid "News last updated {0} ago."
 msgstr "新闻更新于{0}前"
 
-#: ../java/src/net/i2p/router/web/NewsFetcher.java:86
+#: ../java/src/net/i2p/router/web/NewsFetcher.java:88
 #, java-format
 msgid "News last checked {0} ago."
 msgstr "最近一次查收新闻在{0}前"
@@ -2547,17 +2602,17 @@ msgstr "无法确定版本,插件 {0} 安装失败"
 msgid "Checking for update of plugin {0}"
 msgstr "正在为插件 {0} 检查更新"
 
-#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:153
+#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:154
 #, java-format
 msgid "New plugin version {0} is available"
 msgstr "新插件版本为 {0}"
 
-#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:155
+#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:156
 #, java-format
 msgid "No new version is available for plugin {0}"
 msgstr "插件 {0} 有更新"
 
-#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:164
+#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:165
 #, java-format
 msgid "Update check failed for plugin {0}"
 msgstr "插件 {0} 更新检测失败"
@@ -2598,6 +2653,7 @@ msgstr "由 {0} 获取的插件已损坏。"
 msgid "Plugin from {0} does not contain the required configuration file"
 msgstr "由 {0} 获取的插件缺少必要的配置文件"
 
+#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' + signer + "</b>");
 #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:199
 #, java-format
 msgid "Plugin from {0} contains an invalid key"
@@ -2758,7 +2814,7 @@ msgid "Failing"
 msgstr "失败"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:131
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:264
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:281
 msgid "Integrated"
 msgstr "已整合节点"
 
@@ -2766,6 +2822,7 @@ msgstr "已整合节点"
 msgid "Unreachable"
 msgstr "不可达"
 
+#. hide if < 10%
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171
 msgid "Test Fails"
 msgstr "测试失败"
@@ -2784,7 +2841,7 @@ msgstr "容量"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:189
 msgid "Integ. Value"
-msgstr ""
+msgstr "整数值"
 
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:190
 msgid "Last Heard About"
@@ -2866,6 +2923,7 @@ msgstr "分组"
 msgid "capabilities in the netDb, not used to determine profiles"
 msgstr "netDb中的容量,与描述信息无关。"
 
+#. capabilities
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259
 #: ../java/strings/Strings.java:81
 msgid "caps"
@@ -2921,6 +2979,41 @@ msgstr "封锁直到重启或{0}后"
 msgid "unban now"
 msgstr "立即解封"
 
+#. Note to translators: all runtime zh translation disabled in this file, no font available in RRD
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:174
+msgid "Bandwidth usage"
+msgstr "带宽占用"
+
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:181
+msgid "Outbound bytes/sec"
+msgstr "出站(byte/s)"
+
+#. def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3);
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:183
+msgid "Inbound bytes/sec"
+msgstr "入站(byte/s)"
+
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:186
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:187
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:188
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:189
+msgid "bytes/sec"
+msgstr ""
+
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:186
+msgid "out average"
+msgstr "出站平均值"
+
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:187
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:189
+#: ../java/src/net/i2p/router/web/SummaryRenderer.java:110
+msgid "max"
+msgstr "最大"
+
+#: ../java/src/net/i2p/router/web/StatSummarizer.java:188
+msgid "in average"
+msgstr "入站平均值"
+
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:56
 msgid "GO"
 msgstr ""
@@ -2965,235 +3058,244 @@ msgstr "总平均值"
 msgid "peak average"
 msgstr "峰值平均值"
 
+#. Display the strict average
 #: ../java/src/net/i2p/router/web/StatsGenerator.java:217
 msgid "lifetime average value"
 msgstr "总平均值"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:44
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:40
+msgid "I2P Router Help &amp; FAQ"
+msgstr "I2P 使用帮助与常见问答"
+
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:42
+msgid "Help &amp; FAQ"
+msgstr ""
+
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:54
 msgid "Configure startup of clients and webapps (services); manually start dormant services"
 msgstr "设置客户程序及Web程序(服务)的启动;手动启动重要服务"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:46
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:56
 msgid "I2P Services"
 msgstr "I2P 服务"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:52
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:62
 msgid "Manage your I2P hosts file here (I2P domain name resolution)"
 msgstr "管理您的 I2P HOST表(I2P域名解析表)"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:54
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:64
 msgid "Addressbook"
 msgstr "地址簿"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:58
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:68
 msgid "Built-in anonymous BitTorrent Client"
 msgstr "内建的匿名 BitTorrent 客户端"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:60
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:70
 msgid "Torrents"
 msgstr "匿名BT"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:64
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:74
 msgid "Anonymous webmail client"
 msgstr "匿名Web邮件客户端"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:66
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:76
 msgid "Webmail"
 msgstr "匿名邮箱"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:70
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:80
 msgid "Anonymous resident webserver"
 msgstr "内置的匿名Web服务器"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:72
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:82
 msgid "Webserver"
 msgstr "匿名主页服务器"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:80
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:90
 msgid "Configure I2P Router"
 msgstr "设置 I2P 路由器"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:82
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:92
 msgid "I2P Internals"
 msgstr "I2P内部设置"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:88
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:359
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:98
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:374
 msgid "View existing tunnels and tunnel build status"
 msgstr "查看现存隧道及隧道的建立状态"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:94
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:236
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:104
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:253
 msgid "Show all current peer connections"
 msgstr "显示当前所有的节点连接"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:100
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:110
 msgid "Show recent peer performance profiles"
 msgstr "显示当前节点的性能记录"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:102
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:112
 msgid "Profiles"
 msgstr "节点信息"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:106
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:116
 msgid "Show list of all known I2P routers"
 msgstr "包含所有已知I2P路由器的列表"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:108
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:118
 msgid "NetDB"
 msgstr "NetDB"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:112
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:122
 msgid "Health Report"
 msgstr "路由器健康状况报告"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:114
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:124
 msgid "Logs"
 msgstr "日志"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:124
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:134
 msgid "Graph router performance"
 msgstr "路由性能统计图"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:126
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:136
 msgid "Graphs"
 msgstr "图表"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:130
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:140
 msgid "Textual router performance statistics"
 msgstr "路由性能文字统计"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:136
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:375
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:146
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:365
 msgid "Local Destinations"
 msgstr "本地服务"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:138
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:148
 #: ../java/strings/Strings.java:62
 msgid "I2PTunnel"
 msgstr "I2P隧道"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:149
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:159
 msgid "I2P Router Help"
 msgstr "I2P路由帮助"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:151
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:161
 msgid "General"
 msgstr "功能概况"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:166
+msgid "Local Identity"
+msgstr "本地身份"
+
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:170
 msgid "Your unique I2P router identity is"
 msgstr "您I2P路由的唯一身份为"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:158
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:174
 msgid "never reveal it to anyone"
 msgstr "切勿将其告诉任何人"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:160
-msgid "Local Identity"
-msgstr "本地身份"
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:176
+msgid "show"
+msgstr "显示"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:172
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:187
 msgid "How long we've been running for this session"
 msgstr "本次路由运行时间"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:175
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:190
 msgid "Uptime"
 msgstr "运行时间"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:182
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:197
 msgid "Help with configuring your firewall and router for optimal I2P performance"
 msgstr "如何正确配置防火墙和(物理)路由器优化I2P性能"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:209
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:226
 msgid "Download"
 msgstr "下载"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:218
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:235
 msgid "Download Unsigned"
 msgstr "下载未签名更新"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:244
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:261
 msgid "Active"
 msgstr "活动节点"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:252
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:269
 msgid "Fast"
 msgstr "快速节点"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:258
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:275
 msgid "High capacity"
 msgstr "高容量节点"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:270
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:287
 msgid "Known"
 msgstr "已知节点"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:285
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:302
 msgid "Help with firewall configuration"
 msgstr "如何配置防火墙"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:287
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:304
 msgid "Check NAT/firewall"
 msgstr "检查NAT/防火墙"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:307
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:324
 msgid "Reseed"
 msgstr "补种(搜索节点启动网络)"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:324
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:341
 msgid "Configure router bandwidth allocation"
 msgstr "设置路由的带宽分配"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:326
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:343
 msgid "Bandwidth in/out"
 msgstr "带宽(进/出站)"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:343
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:359
 msgid "Total"
 msgstr "总计"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:351
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:366
 msgid "Used"
-msgstr "已使用"
+msgstr "已用"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:361
-msgid "Tunnels in/out"
-msgstr "通道(上/下行)"
-
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:366
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:381
 msgid "Exploratory"
 msgstr "探测"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:382
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:393
 msgid "Participating"
 msgstr "共享"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:388
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:399
 msgid "Share ratio"
 msgstr "共享/占用"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:394
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:405
 msgid "What's in the router's job queue?"
 msgstr "查看路由的作业队列"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:396
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:407
 msgid "Congestion"
 msgstr "拥堵"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:401
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:412
 msgid "Job lag"
 msgstr "作业延迟"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:407
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:418
 msgid "Message delay"
 msgstr "消息延迟"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:413
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:424
 msgid "Tunnel lag"
 msgstr "隧道延迟"
 
-#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:419
+#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:430
 msgid "Backlog"
 msgstr "积压"
 
@@ -3258,55 +3360,85 @@ msgstr "警告-因防火墙受限且UDP被禁用"
 msgid "Testing"
 msgstr "测试中"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:375
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:365
 msgid "Add/remove/edit &amp; control your client and server tunnels"
 msgstr "添加、删除、编辑或控制客户程序隧道和服务隧道"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:387
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:377
 msgid "Server"
 msgstr "服务"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:391
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:381
 msgid "Show tunnels"
 msgstr "显示隧道"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:402
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:392
 msgid "Leases expired"
 msgstr "Lease已过期"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:402
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:403
+#. red or yellow light
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:392
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:393
 msgid "Rebuilding"
 msgstr "正在重建"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:403
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:393
 msgid "ago"
 msgstr "前"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:406
+#. green light
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:396
 msgid "Ready"
 msgstr "就绪"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:410
+#. yellow light
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:400
 msgid "Building"
 msgstr "创建中"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:410
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:400
 msgid "Building tunnels"
 msgstr "正在隧道创建"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:415
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:405
 msgid "none"
 msgstr "无"
 
-#: ../java/src/net/i2p/router/web/SummaryHelper.java:426
+#. tunnel nicknames, taken from i2ptunnel.config so they will display
+#. nicely under 'local destinations' in the summary bar
+#. note that if the wording changes in i2ptunnel.config, we have to
+#. keep the old string here as well for existing installs
+#: ../java/src/net/i2p/router/web/SummaryHelper.java:416
 #: ../java/strings/Strings.java:36
 msgid "shared clients"
 msgstr "共享客户端"
 
+#. Note to translators: all runtime zh translation disabled in this file, no font available in RRD
+#: ../java/src/net/i2p/router/web/SummaryRenderer.java:84
+#, java-format
+msgid "events in {0}"
+msgstr "事件/{0}"
+
+#: ../java/src/net/i2p/router/web/SummaryRenderer.java:86
+#, java-format
+msgid "averaged for {0}"
+msgstr "{0} 平均值"
+
+#: ../java/src/net/i2p/router/web/SummaryRenderer.java:96
+msgid "Events per period"
+msgstr "事件/周期"
+
+#: ../java/src/net/i2p/router/web/SummaryRenderer.java:109
+msgid "avg"
+msgstr "平均"
+
+#: ../java/src/net/i2p/router/web/SummaryRenderer.java:111
+msgid "now"
+msgstr "当前"
+
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:41
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:63
-#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:275
+#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:280
 msgid "configure"
 msgstr "设置"
 
@@ -3373,7 +3505,7 @@ msgid "Inactive participating tunnels"
 msgstr "不活跃的共享隧道"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:127
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:216
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:218
 msgid "Lifetime bandwidth usage"
 msgstr "运行期间带宽使用情况"
 
@@ -3390,7 +3522,7 @@ msgid "Endpoint"
 msgstr "终端"
 
 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:205
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:211
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:212
 msgid "Build in progress"
 msgstr "创建中"
 
@@ -3398,39 +3530,39 @@ msgstr "创建中"
 msgid "inbound"
 msgstr "入站"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:211
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:212
 msgid "outbound"
 msgstr "出站"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:215
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:217
 msgid "No tunnels; waiting for the grace period to end."
 msgstr "无隧道;等待宽限期结束。"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:216
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:219
 msgid "in"
 msgstr "入"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:217
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:220
 msgid "out"
 msgstr "出"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:234
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:237
 msgid "Tunnel Counts By Peer"
 msgstr "每节点隧道计数"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:238
 msgid "% of total"
 msgstr "占总数%"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:238
 msgid "Our Tunnels"
 msgstr "我方隧道"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:238
 msgid "Participating Tunnels"
 msgstr "共享隧道"
 
-#: ../java/src/net/i2p/router/web/TunnelRenderer.java:253
+#: ../java/src/net/i2p/router/web/TunnelRenderer.java:256
 msgid "Totals"
 msgstr "总计"
 
@@ -3488,6 +3620,7 @@ msgstr "更新已验证"
 msgid "Transfer failed"
 msgstr "数据传输失败"
 
+#. wars for ConfigClientsHelper
 #: ../java/strings/Strings.java:12
 msgid "addressbook"
 msgstr "地址簿"
@@ -3512,6 +3645,9 @@ msgstr "susiDNS"
 msgid "routerconsole"
 msgstr "路由控制台"
 
+#. clients, taken from clients.config, for ConfigClientsHelper
+#. note that if the wording changes in clients.config, we have to
+#. keep the old string here as well for existing installs
 #: ../java/strings/Strings.java:22
 msgid "Web console"
 msgstr "网页控制台"
@@ -3560,6 +3696,7 @@ msgstr "匿名主页服务器"
 msgid "HTTP Proxy"
 msgstr "HTTP 代理"
 
+#. older names for pre-0.7.4 installs
 #: ../java/strings/Strings.java:42
 msgid "eepProxy"
 msgstr "I2P代理"
@@ -3568,14 +3705,17 @@ msgstr "I2P代理"
 msgid "ircProxy"
 msgstr "I2P聊天室"
 
+#. hardcoded in i2psnark
 #: ../java/strings/Strings.java:45
 msgid "I2PSnark"
 msgstr "I2P Snark"
 
+#. hardcoded in iMule?
 #: ../java/strings/Strings.java:47
 msgid "iMule"
 msgstr ""
 
+#. standard themes for ConfigUIHelper
 #: ../java/strings/Strings.java:51
 msgid "classic"
 msgstr "经典"
@@ -3592,6 +3732,7 @@ msgstr "亮色调"
 msgid "midnight"
 msgstr "午夜"
 
+#. stat groups for stats.jsp
 #: ../java/strings/Strings.java:57
 msgid "Bandwidth"
 msgstr "带宽"
@@ -3644,6 +3785,8 @@ msgstr "传输"
 msgid "udp"
 msgstr "UDP"
 
+#. parameters in transport addresses (netdb.jsp)
+#. may or may not be worth translating
 #: ../java/strings/Strings.java:77
 msgid "host"
 msgstr "主机"
@@ -3656,6 +3799,7 @@ msgstr "密钥"
 msgid "port"
 msgstr "端口"
 
+#. introducer host
 #: ../java/strings/Strings.java:83
 msgid "ihost0"
 msgstr ""
@@ -3668,6 +3812,7 @@ msgstr ""
 msgid "ihost2"
 msgstr ""
 
+#. introducer port
 #: ../java/strings/Strings.java:87
 msgid "iport0"
 msgstr ""
@@ -3680,6 +3825,7 @@ msgstr ""
 msgid "iport2"
 msgstr ""
 
+#. introducer key
 #: ../java/strings/Strings.java:91
 msgid "ikey0"
 msgstr ""
@@ -3692,6 +3838,7 @@ msgstr ""
 msgid "ikey2"
 msgstr ""
 
+#. introducer tag
 #: ../java/strings/Strings.java:95
 msgid "itag0"
 msgstr ""
@@ -3704,10 +3851,27 @@ msgstr ""
 msgid "itag2"
 msgstr ""
 
+#. Descriptions for the stats that are graphed by default
+#. There are over 500 stats currently defined, we aren't going to tag them all
+#: ../java/strings/Strings.java:101
+msgid "Low-level bandwidth receive rate"
+msgstr "底层速度(入站)"
+
+#. bw.recvRate
+#: ../java/strings/Strings.java:102
+msgid "Low-level bandwidth send rate"
+msgstr "底层速度(出站)"
+
+#. bw.sendRate
+#: ../java/strings/Strings.java:103
+msgid "How many peers we are actively talking with"
+msgstr "正在通讯的活动节点数"
+
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:106
 msgid "config networking"
 msgstr "连网设置"
 
+#. We have intl defined when this is included, but not when compiled standalone.
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:217
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:218
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:217
@@ -3722,6 +3886,7 @@ msgstr "连网设置"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:220
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:228
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:217
+#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:220
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:220
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:220
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:223
@@ -3738,6 +3903,7 @@ msgstr "连网设置"
 msgid "Refresh (s)"
 msgstr "刷新(秒)"
 
+#. ditto
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:221
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:222
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:221
@@ -3752,6 +3918,7 @@ msgstr "刷新(秒)"
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:224
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:232
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:221
+#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:224
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:224
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:224
 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:227
@@ -4806,15 +4973,15 @@ msgstr "如果您发现错误请报告至<a href=\"http://trac.i2p2.i2p/newticke
 msgid "Please include this information in bug reports"
 msgstr "报告问题时请包括以下信息"
 
-#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:269
+#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:274
 msgid "Critical Logs"
 msgstr "关键日志"
 
-#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:273
+#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:278
 msgid "Router Logs"
 msgstr "路由器日志"
 
-#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:279
+#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:284
 msgid "Service (Wrapper) Logs"
 msgstr "服务(封装)日志"
 
@@ -4879,6 +5046,12 @@ msgstr "隧道概况"
 msgid "I2P Tunnel Summary"
 msgstr "I2P 隧道概况"
 
+#~ msgid "hops"
+#~ msgstr "跳点"
+#~ msgid "tunnels"
+#~ msgstr "隧道"
+#~ msgid "Tunnels in/out"
+#~ msgstr "通道(上/下行)"
 #~ msgid "name"
 #~ msgstr "名称"
 #~ msgid ""
diff --git a/apps/susimail/src/src/i2p/susi/util/Config.java b/apps/susimail/src/src/i2p/susi/util/Config.java
index 723c56b992992be84f1a5625967677dc2ae95b86..8564cbfad8eb355f30470524263b3efe0e498c9b 100644
--- a/apps/susimail/src/src/i2p/susi/util/Config.java
+++ b/apps/susimail/src/src/i2p/susi/util/Config.java
@@ -42,7 +42,6 @@ public class Config {
 	/**
 	 * 
 	 * @param name
-	 * @return
 	 */
 	public static String getProperty( String name )
 	{
@@ -98,7 +97,6 @@ public class Config {
 	 * 
 	 * @param name
 	 * @param defaultValue
-	 * @return
 	 */
 	public static String getProperty( String name, String defaultValue )
 	{
@@ -109,7 +107,6 @@ public class Config {
 	 * 
 	 * @param name
 	 * @param defaultValue
-	 * @return
 	 */
 	public static int getProperty( String name, int defaultValue )
 	{
diff --git a/apps/susimail/src/src/i2p/susi/util/Folder.java b/apps/susimail/src/src/i2p/susi/util/Folder.java
index 7a18a2477db38c5bdbc709b0ac6be75edea1d61d..c8cd9b7669d13f741cbea730a445abacc995b2b0 100644
--- a/apps/susimail/src/src/i2p/susi/util/Folder.java
+++ b/apps/susimail/src/src/i2p/susi/util/Folder.java
@@ -270,7 +270,7 @@ public class Folder {
 	/**
 	 * Returns the element on the current page on the given position.
 	 *
-	 * @param Position of the element on the current page.
+	 * @param x Position of the element on the current page.
 	 * @return Element on the current page on the given position.
 	 */
 	public Object getElementAtPosXonCurrentPage( int x )
@@ -331,7 +331,7 @@ public class Folder {
 	 * Gets index of an element in the array regardless of sorting direction.
 	 * 
 	 * @param element
-	 * @return
+	 * @return index
 	 */
 	private int getIndexOf( Object element )
 	{
@@ -348,7 +348,7 @@ public class Folder {
 	 * Sorting direction is taken into account.
 	 * 
 	 * @param element
-	 * @return
+	 * @return The next element
 	 */
 	public Object getNextElement( Object element )
 	{
@@ -369,7 +369,7 @@ public class Folder {
 	 * Sorting direction is taken into account.
 	 * 
 	 * @param element
-	 * @return
+	 * @return The previous element
 	 */
 	public Object getPreviousElement( Object element )
 	{
@@ -388,7 +388,7 @@ public class Folder {
 	 * Retrieves element at index i. Depends on sorting direction.
 	 * 
 	 * @param i
-	 * @return
+	 * @return Element at index i
 	 */
 	private Object getElement( int i )
 	{
@@ -404,8 +404,6 @@ public class Folder {
 	
 	/**
 	 * Returns true, if folder shows points to the last page.
-	 * 
-	 * @return
 	 */
 	public boolean isLastPage()
 	{
@@ -414,8 +412,6 @@ public class Folder {
 	
 	/**
 	 * Returns true, if folder shows points to the first page.
-	 * 
-	 * @return
 	 */
 	public boolean isFirstPage()
 	{
@@ -427,7 +423,6 @@ public class Folder {
 	 * The sorting direction influences which element is taken for comparison.
 	 * 
 	 * @param element
-	 * @return
 	 */
 	public boolean isLastElement( Object element )
 	{
@@ -441,7 +436,6 @@ public class Folder {
 	 * The sorting direction influences which element is taken for comparison.
 	 * 
 	 * @param element
-	 * @return
 	 */
 	public boolean isFirstElement( Object element )
 	{
diff --git a/apps/susimail/src/src/i2p/susi/webmail/Attachment.java b/apps/susimail/src/src/i2p/susi/webmail/Attachment.java
index 91da870640d0bdbf525321d63086b5447d4f580a..922ca8069ff385d30716be65915883b53415ddb4 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/Attachment.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/Attachment.java
@@ -56,16 +56,12 @@ public class Attachment {
 	public void setBuffer(ReadBuffer buffer) {
 		this.buffer = buffer;
 	}
-	/**
-	 * @return
-	 */
+
 	public String getTransferEncoding() {
 		// TODO Auto-generated method stub
 		return transferEncoding;
 	}
-	/**
-	 * @return
-	 */
+
 	public String getContentType() {
 		// TODO Auto-generated method stub
 		return contentType;
@@ -82,9 +78,7 @@ public class Attachment {
 	public void setTransferEncoding(String transferEncoding) {
 		this.transferEncoding = transferEncoding;
 	}
-	/**
-	 * @param string
-	 */
+
 	public void setData(String data ) {
 		this.data = data;
 	}
diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java
index 80f6d67bffffb5d954f62a0cb163638a4eed1c81..98cf7c9e59c7b4cdb1bf0918097f5674097e99fe 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java
@@ -78,8 +78,8 @@ public class Mail {
 	}
 	/**
 	 * 
-	 * @param address
-	 * @return
+	 * @param address E-mail address to be validated
+	 * @return Is the e-mail address valid?
 	 */
 	public static boolean validateAddress( String address )
 	{
@@ -105,7 +105,6 @@ public class Mail {
 	}
 	/**
 	 * @param address
-	 * @return
 	 */
 	public static String getAddress(String address )
 	{
diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java
index 05694f2bf546d64532b92d8df59efbb2f5d091b3..a7116811ceb59bf03c62f8ba42372f450eaa2a9e 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java
@@ -47,9 +47,9 @@ public class MailCache {
 	/**
 	 * Fetch any needed data from pop3 server.
 	 * 
-	 * @param id message id to get
+	 * @param uidl message id to get
 	 * @param headerOnly fetch only header lines?
-	 * @return
+	 * @return An e-mail
 	 */
 	public Mail getMail( String uidl, boolean headerOnly ) {
 		
diff --git a/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java b/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java
index 0cb20af2f6d308b8d4ec7ad850f547ff280395f9..0c1d835cc15806b9c3254d03425a7563a8459567 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/RequestWrapper.java
@@ -67,29 +67,25 @@ public class RequestWrapper {
 
 	/**
 	 * @param b
-	 * @return
 	 */
 	public HttpSession getSession(boolean b) {
 		return httpRequest.getSession( b );
 	}
 
 	/**
-	 * @param key
-	 * @return
+	 * @param name Specific parameter key
+	 * @return parameter value
 	 */
 	public String getParameter(String name ) {
 		return getParameter( name, null );
 	}
 
-	/**
-	 * @return
-	 */
 	public HttpSession getSession() {
 		return httpRequest.getSession();
 	}
 
 	/**
-	 * @return
+	 * @return List of request parameter names
 	 */
 	public Enumeration getParameterNames() {
 		if( multiPartRequest != null ) {
@@ -106,24 +102,19 @@ public class RequestWrapper {
 	}
 
 	/**
-	 * @return
+	 * @return The total length of the content.
 	 */
 	public int getContentLength() {
 		return httpRequest.getContentLength();
 	}
 
 	/**
-	 * @return
+	 * @return The content type of the request.
 	 */
 	public String getContentType() {
 		return httpRequest.getContentType();
 	}
 
-	/**
-	 * 
-	 * @param partName
-	 * @return
-	 */
 	public String getContentType( String partName )
 	{
 		String result = null;
@@ -143,19 +134,11 @@ public class RequestWrapper {
 		}
 		return result;
 	}
-	/**
-	 * @param string
-	 * @return
-	 */
+
 	public Object getAttribute(String string) {
 		return httpRequest.getAttribute( string );
 	}
 
-	/**
-	 * @param new_subject
-	 * @param string
-	 * @return
-	 */
 	public String getParameter( String name, String defaultValue )
 	{
 		String result = defaultValue;
@@ -184,10 +167,7 @@ public class RequestWrapper {
 		}
 		return result;
 	}
-	/**
-	 * @param new_filename
-	 * @return
-	 */
+
 	public String getFilename(String partName )
 	{
 		String result = null;
@@ -198,10 +178,7 @@ public class RequestWrapper {
 		}
 		return result;
 	}
-	/**
-	 * @param new_filename
-	 * @return
-	 */
+
 	public InputStream getInputStream(String partName )
 	{
 		InputStream result = null;
diff --git a/apps/susimail/src/src/i2p/susi/webmail/encoding/Base64.java b/apps/susimail/src/src/i2p/susi/webmail/encoding/Base64.java
index b6c8ffaf5a93082b333451122921f0c80450dfc0..1d376fc386916fe85681ef5f05bd837d33d8a3f8 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/encoding/Base64.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/encoding/Base64.java
@@ -42,7 +42,7 @@ public class Base64 implements Encoding {
 		return "base64";
 	}
 	/**
-	 * @return
+	 * @return Base64-encoded String.
 	 * @throws EncodingException 
 	 */
 	public String encode( byte in[] ) throws EncodingException
@@ -53,8 +53,8 @@ public class Base64 implements Encoding {
 			throw new EncodingException( e.getMessage() );
 		}
 	}
-	/* (non-Javadoc)
-	 * @see i2p.susi23.util.Encoding#encode(java.lang.String)
+	/**
+	 * @see Base64#encode(byte[])
 	 */
 	public String encode(String str) throws EncodingException {
 		try {
@@ -66,7 +66,7 @@ public class Base64 implements Encoding {
 	/**
 	 * 
 	 * @param in
-	 * @return
+	 * @see Base64#encode(String)
 	 */
 	private String encode( InputStream in ) throws IOException, EncodingException
 	{
@@ -116,7 +116,7 @@ public class Base64 implements Encoding {
 
 	/**
 	 * @param b
-	 * @return
+	 * @return Encoded single byte.
 	 */
 	private static int encodeByte(int b) {
 		/*
@@ -173,21 +173,21 @@ public class Base64 implements Encoding {
 
 	/**
 	 * @param text 
-	 * @return
+	 * @return Buffer containing a decoded String.
 	 */
 	public ReadBuffer decode(String text) throws DecodingException {
 		return text != null ? decode( text.getBytes() ) : null;
 	}
 
-	/* (non-Javadoc)
-	 * @see i2p.susi23.util.Encoding#decode(byte[])
+	/**
+	 * @see Base64#decode(String)
 	 */
 	public ReadBuffer decode(byte[] in) throws DecodingException {
 		return decode( in, 0, in.length );
 	}
 
-	/* (non-Javadoc)
-	 * @see i2p.susi23.util.Encoding#decode(byte[], int, int)
+	/**
+	 * @see Base64#decode(String)
 	 */
 	public ReadBuffer decode(byte[] in, int offset, int length) throws DecodingException {
 		byte out[] = new byte[length * 3 / 4 + 1 ];
@@ -228,10 +228,10 @@ public class Base64 implements Encoding {
 		return readBuffer;
 	}
 
-	/* (non-Javadoc)
-	 * @see i2p.susi23.util.Encoding#decode(i2p.susi23.util.ReadBuffer)
+	/*
+	 * @see Base64#decode(String)
 	 */
 	public ReadBuffer decode(ReadBuffer in) throws DecodingException {
 		return decode( in.content, in.offset, in.length );
 	}
-}
\ No newline at end of file
+}
diff --git a/apps/susimail/src/src/i2p/susi/webmail/encoding/Encoding.java b/apps/susimail/src/src/i2p/susi/webmail/encoding/Encoding.java
index 9b77fb335520be82d4f2f781aa45e69888618ea1..37b823c9cc4ea087eee598ad7b924ffa56be8f35 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/encoding/Encoding.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/encoding/Encoding.java
@@ -35,21 +35,21 @@ public interface Encoding {
 	/**
 	 * 
 	 * @param in
-	 * @return
+	 * @return Encoded string.
 	 * @throws EncodingException 
 	 */
 	public String encode( byte in[] ) throws EncodingException;
 	/**
 	 * 
 	 * @param str
-	 * @return
+	 * @see Encoding#encode(byte[])
 	 * @throws EncodingException 
 	 */
 	public String encode( String str ) throws EncodingException;
 	/**
 	 * 
 	 * @param in
-	 * @return
+	 * @see Encoding#decode(byte[], int, int)
 	 * @throws DecodingException 
 	 */
 	public ReadBuffer decode( byte in[] ) throws DecodingException;
@@ -58,21 +58,21 @@ public interface Encoding {
 	 * @param in
 	 * @param offset 
 	 * @param length 
-	 * @return
+	 * @return Output buffer containing decoded String.
 	 * @throws DecodingException 
 	 */
 	public ReadBuffer decode( byte in[], int offset, int length ) throws DecodingException;
 	/**
 	 * 
 	 * @param str
-	 * @return
+	 * @see Encoding#decode(byte[], int, int)
 	 * @throws DecodingException 
 	 */
 	public ReadBuffer decode( String str ) throws DecodingException;
 	/**
 	 * 
 	 * @param in
-	 * @return
+	 * @see Encoding#decode(byte[], int, int)
 	 * @throws DecodingException 
 	 */
 	public ReadBuffer decode( ReadBuffer in ) throws DecodingException;
diff --git a/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java b/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java
index 9fd5d97807e49588cca82585475ebe8b964a087f..bbefe00e1c509b686d0903a21541e17a1f8ddadf 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java
@@ -62,7 +62,7 @@ public class EncodingFactory {
 	 * 
 	 * @param name name of encoding (e.g. quoted-printable)
 	 * 
-	 * @return
+	 * @return Encoder instance
 	 */
 	public static Encoding getEncoding( String name )
 	{
@@ -71,7 +71,7 @@ public class EncodingFactory {
 	/**
 	 * Returns list of available encodings;
 	 * 
-	 * @return
+	 * @return List of encodings
 	 */
 	public static Set availableEncodings()
 	{
diff --git a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java
index 6e266e24976a59dfb56392e53c18876f4fc70609..4434cff5e97a083e2cf460cb97deab40a6d60e62 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java
@@ -85,7 +85,7 @@ public class POP3MailBox {
 	/**
 	 * 
 	 * @param uidl
-	 * @return
+	 * @return Byte buffer containing header data.
 	 */
 	public ReadBuffer getHeader( String uidl ) {
 		synchronized( synchronizer ) {
@@ -97,7 +97,7 @@ public class POP3MailBox {
 	 * retrieves header from pop3 server (with TOP command and RETR as fallback)
 	 * 
 	 * @param id message id
-	 * @return byte buffer containing data
+	 * @return Byte buffer containing header data.
 	 */
 	private ReadBuffer getHeader( int id ) {
 		synchronized( synchronizer ) {
@@ -138,7 +138,7 @@ public class POP3MailBox {
 	/**
 	 * 
 	 * @param uidl
-	 * @return
+	 * @return Byte buffer containing body data.
 	 */
 	public ReadBuffer getBody( String uidl ) {
 		synchronized( synchronizer ) {
@@ -150,7 +150,7 @@ public class POP3MailBox {
 	 * retrieve message body from pop3 server (via RETR command)
 	 * 
 	 * @param id message id
-	 * @return byte buffer containing data
+	 * @return Byte buffer containing body data.
 	 */
 	private ReadBuffer getBody(int id) {
 		synchronized( synchronizer ) {
@@ -179,7 +179,7 @@ public class POP3MailBox {
 	/**
 	 * 
 	 * @param uidl
-	 * @return
+	 * @return Success of delete operation: true if successful.
 	 */
 	public boolean delete( String uidl )
 	{
@@ -193,7 +193,7 @@ public class POP3MailBox {
 	 * delete message on pop3 server
 	 * 
 	 * @param id message id
-	 * @return true if successful
+	 * @return Success of delete operation: true if successful.
 	 */
 	private boolean delete(int id)
 	{
@@ -215,7 +215,7 @@ public class POP3MailBox {
 	/**
 	 * 
 	 * @param uidl
-	 * @return
+	 * @return Message size in bytes.
 	 */
 	public int getSize( String uidl ) {
 		synchronized( synchronizer ) {
@@ -227,7 +227,7 @@ public class POP3MailBox {
 	 * get size of a message (via LIST command)
 	 * 
 	 * @param id message id
-	 * @return message size in bytes
+	 * @return Message size in bytes.
 	 */
 	private int getSize(int id) {
 		synchronized( synchronizer ) {
@@ -627,7 +627,7 @@ public class POP3MailBox {
 	}
 
 	/**
-	 * @return
+	 * @return The amount of e-mails available.
 	 */
 	public int getNumMails() {
 		synchronized( synchronizer ) {
@@ -641,7 +641,7 @@ public class POP3MailBox {
 	}
 
 	/**
-	 * @return
+	 * @return The most recent error message.
 	 */
 	public String lastError() {
 		Debug.debug(Debug.DEBUG, "lastError()");
@@ -673,7 +673,7 @@ public class POP3MailBox {
 	 * returns number of message with given UIDL
 	 * 
 	 * @param uidl
-	 * @return
+	 * @return Message number.
 	 */
 	private int getIDfromUIDL( String uidl )
 	{
@@ -687,7 +687,7 @@ public class POP3MailBox {
 	/**
 	 * 
 	 * @param id
-	 * @return
+	 * @return UIDL.
 	 */
 	public String getUIDLfromID( int id )
 	{
@@ -695,7 +695,7 @@ public class POP3MailBox {
 	}
 	/**
 	 * 
-	 * @return
+	 * @return A list of the available UIDLs.
 	 */
 	public Object[] getUIDLs()
 	{
diff --git a/build.xml b/build.xml
index 3c9f08a3a20a4c728f71c61c0fde7aa9ed5af3a1..af467498b89d8cd69aec3d7763a31753c87b4d87 100644
--- a/build.xml
+++ b/build.xml
@@ -420,9 +420,11 @@
         <copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
     </target>
     <target name="prepthemeupdates">
-        <!-- Add extricated I2PSnark css here, for now -->
-        <copy file="installer/resources/themes/console/snark.css" todir="pkg-temp/docs/themes/console/" />
-        <!-- these files now in docs/, not in the .war -->
+        <!-- Migrated all Snark content to its own dir. Need to ensure snark dir excluded from console theme choices!! -->
+        <!-- Snark's visible Assets -->
+        <copy todir="pkg-temp/docs/themes/snark/ubergine/" >
+            <fileset dir="installer/resources/themes/snark/ubergine/" />
+        </copy>
         <!-- No need to copy these individually, we're copying the whole dir below.. 
         <copy file="installer/resources/themes/console/images/favicon.ico" todir="pkg-temp/docs/themes/console/images/" />
         <copy file="installer/resources/themes/console/images/i2plogo.png" todir="pkg-temp/docs/themes/console/images/" />
diff --git a/core/java/src/net/i2p/crypto/TrustedUpdate.java b/core/java/src/net/i2p/crypto/TrustedUpdate.java
index b90fd46d364685bef50ee4af45567134a7fc7400..7e8a2b158588785a1dc860331cbe33be0d480e48 100644
--- a/core/java/src/net/i2p/crypto/TrustedUpdate.java
+++ b/core/java/src/net/i2p/crypto/TrustedUpdate.java
@@ -102,6 +102,25 @@ iD8DBQFHphOV+h38a3n8zjMRAll+AJ9KA6WiDJcTN4qfrslSemUMr+FBrwCeM8pF
 D8usM7Dxp5yrDrCYZ5AIijc=
 =SrXI
 -----END PGP SIGNATURE-----
+*/
+/*
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+*/
+    /* HungryHobo's key */
+    private static final String DEFAULT_TRUSTED_KEY4 =
+        "l3G6um9nB9EDLkT9cUusz5fX-GxXSWE5zaj2~V8lUL~XsGuFf8gKqzJLK" +
+        "NkAw0CgDIDsLRHHuUaF7ZHo5Z7HG~9JJU9Il4G2jyNYtg5S8AzG0UxkEt" +
+        "-JeBEqIxv5GDn6OFKr~wTI0UafJbegEWokl-8m-GPWf0vW-yPMjL7y5MI=";
+/*
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.10 (GNU/Linux)
+
+iEYEARECAAYFAkysnNIACgkQHix7YXbc3BJVfwCeNGUHaWSqZUbWN9L8VyQLpwxI
+JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR
+=3oMC
+-----END PGP SIGNATURE-----
 */
 
     private static final int    VERSION_BYTES       = 16;
@@ -148,6 +167,7 @@ D8usM7Dxp5yrDrCYZ5AIijc=
             addKey(DEFAULT_TRUSTED_KEY, "jrandom@mail.i2p");
             addKey(DEFAULT_TRUSTED_KEY2, "zzz@mail.i2p");
             //addKey(DEFAULT_TRUSTED_KEY3, "complication@mail.i2p");
+            addKey(DEFAULT_TRUSTED_KEY4, "HungryHobo@mail.i2p");
         }
         if (_log.shouldLog(Log.DEBUG))
             _log.debug("TrustedUpdate created, trusting " + _trustedKeys.size() + " keys.");
diff --git a/core/java/src/net/i2p/crypto/package.html b/core/java/src/net/i2p/crypto/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..ae471c30a83cd34df6f4d55648f8deb760d37644
--- /dev/null
+++ b/core/java/src/net/i2p/crypto/package.html
@@ -0,0 +1,11 @@
+<html>
+    <body>
+        <p>
+            These classes provide a number of low-level cryptographic routines.
+        </p>
+
+        <p>
+            These cryptographic routines include symmetric and asymmetric encryption and decryption, hashing, secure random number generation...
+        </p>
+    </body>
+</html>
diff --git a/core/java/src/net/i2p/package.html b/core/java/src/net/i2p/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..acc673d1ca8a460998efc586cfe0a66df5600640
--- /dev/null
+++ b/core/java/src/net/i2p/package.html
@@ -0,0 +1,7 @@
+<html>
+    <body>
+        <p>
+            Core I2P package, contains information about the I2P version and an entry point to access important elements.
+        </p>
+    </body>
+</html>
diff --git a/core/java/src/net/i2p/time/package.html b/core/java/src/net/i2p/time/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..18018d978e9c187ac2edead0a5c1e5e41adf5fc6
--- /dev/null
+++ b/core/java/src/net/i2p/time/package.html
@@ -0,0 +1,7 @@
+<html>
+    <body>
+        <p>
+            Provides classes for time synchronisation using NTP.
+        </p>
+    </body>
+</html>
diff --git a/debian/control b/debian/control
index 9fd92ea70d31e15e1c5bf55d1bbd27e1253e45fd..1813b75594f4cfa5ad2a14151a64d9bd09ab81d0 100644
--- a/debian/control
+++ b/debian/control
@@ -9,8 +9,8 @@ Package: i2p
 Architecture: all
 Section: net
 Priority: optional
-Depends: java-runtime
-Description: load-balanced unspoofable packet switching network
+Depends: sun-java6-jre | default-jre | java-runtime
+Description: Load-balanced unspoofable packet switching network
  I2P is an anonymizing network, offering a simple layer that identity-sensitive
  applications can use to securely communicate. All data is wrapped with several
  layers of encryption, and the network is both distributed and dynamic, with no
diff --git a/debian/rules b/debian/rules
index 21009d70a04d1a735e000f459bd633e87aa721dd..e9d457d81f8eec03cfe5c5cf87c5e085c51c0593 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,5 +1,8 @@
 #!/usr/bin/make -f
 
+VERSION=`grep String\ VERSION core/java/src/net/i2p/CoreVersion.java | cut -d\" -f2`
+SOURCEURL=http://mirror.i2p2.de/i2psource_${VERSION}.tar.bz2
+
 build:
 	ant preppkg-linux-only
 	mkdir -p debian/tmp/usr/lib
@@ -12,14 +15,12 @@ build:
 	mkdir -p debian/tmp/usr/bin
 	sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/eepget > debian/tmp/usr/lib/i2p/a
 	mv debian/tmp/usr/lib/i2p/a debian/tmp/usr/lib/i2p/eepget
-	cp debian/tmp/usr/lib/i2p/eepget  debian/tmp/usr/bin/eepget
-	chmod +x debian/tmp/usr/bin/eepget
+	ln -s /usr/lib/i2p/eepget debian/tmp/usr/bin/eepget
 	sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/runplain.sh > debian/tmp/usr/lib/i2p/a
 	sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/runplain.sh
 	sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/i2prouter > debian/tmp/usr/lib/i2p/a
 	sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/i2prouter
-	cp debian/tmp/usr/lib/i2p/i2prouter debian/tmp/usr/bin/i2prouter
-	chmod +x debian/tmp/usr/bin/i2prouter
+	ln -s /usr/lib/i2p/i2prouter debian/tmp/usr/bin/i2prouter
 	rm debian/tmp/usr/lib/i2p/a
 	touch debian/build
 
@@ -34,3 +35,6 @@ clean:
 	rm -rf debian/tmp/
 	ant distclean
 	@exit 0
+
+get-orig-source:
+	wget ${SOURCEURL}
diff --git a/debian/scripts/init b/debian/scripts/init
index 57efc1a2aa4a1f4b1faf7b3a583b6ba81013e11c..e196a9404d0cfb033ac28961895bb16fea3376fc 100755
--- a/debian/scripts/init
+++ b/debian/scripts/init
@@ -17,6 +17,11 @@ I2P () {
 	su i2psvc -c "/usr/lib/i2p/i2prouter $1"
 }
 
+if [ `id -un` != "root" ]; then
+	echo "This script ($0) must be run as root"
+	exit 1
+fi
+
 case "$1" in
   start)
 	log_daemon_msg "Starting I2P" "i2p"
diff --git a/debian/scripts/postinst b/debian/scripts/postinst
index 25ccaec33edf03d400548c5ac693dc12aaeddec3..6d76f2f0cf82935ed0c4f189109728473637203c 100755
--- a/debian/scripts/postinst
+++ b/debian/scripts/postinst
@@ -11,4 +11,10 @@ chown $I2PUSER:$I2PUSER $SVCHOME
 update-rc.d i2p defaults
 
 cd $I2P
-exec su $I2PUSER ./postinstall.sh
+su $I2PUSER ./postinstall.sh
+
+chmod 755 /usr/lib/i2p/eepget
+chmod 755 /usr/lib/i2p/i2prouter
+chmod 755 /usr/lib/i2p/i2psvc
+
+invoke-rc.d i2p start
diff --git a/debian/scripts/postrm b/debian/scripts/postrm
index f4c7218a2ebb4c62ae67e560690f46fd1d77b7ce..a768a036c3a812c5a08beab68a43ba9b7d47335a 100755
--- a/debian/scripts/postrm
+++ b/debian/scripts/postrm
@@ -1,4 +1,12 @@
 #!/bin/sh
+
+# $1 is either "remove" or "purge". Since there are no config
+# files left after a remove, exit here if called with "purge".
+# This avoids calling userdel again which would cause an error.
+if [ "$1" = "purge" ]; then
+	exit 0;
+fi
+
 I2PUSER=i2psvc
 exec userdel $I2PUSER
 
diff --git a/history.txt b/history.txt
index fcd33d6b46de9412a3828a18ef0f35aa80043c35..2c2d013a3f81cd5cd87b88edd10a368e53b9207d 100644
--- a/history.txt
+++ b/history.txt
@@ -38,6 +38,12 @@
     * Router: Set permissions on wrapper.log when not called by RouterLaunch
     * Systray: New doc and main()
 
+2010-10-22 sponge
+    * Sanity and some fixs for slackware package
+
+2010-10-22 sponge
+    * Fix rc.i2p for slackware package
+
 2010-10-19 zzz
     * Escape & in logs and i2psnark (much more to do)
     * JobImpl: Deprecate two debugging methods
@@ -149,6 +155,12 @@
       - Logging cleanup
       - Comment out a main()
 
+2010-10-10 sponge
+    * Fulfill Request for name resolving in BOB
+
+2010-09-15 dr|z3d
+    * I2PSnark: Overhaul UI, implement new theme.
+
 * 2010-07-12  0.8 released
 
 2010-07-08 zzz
diff --git a/installer/resources/themes/console/snark.css b/installer/resources/themes/console/snark.css
deleted file mode 100644
index 47d2b75db44486b93e1ba41bfb5575b2710e9166..0000000000000000000000000000000000000000
--- a/installer/resources/themes/console/snark.css
+++ /dev/null
@@ -1,338 +0,0 @@
-/* Not yet complete. Subject to flux and change. dr|z3d - 07.25.09 */
-
-body {
-     background: #eef;
-     color: #001;
-     font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
-}
-
-.snarkTitle {
-     font-size: 12pt;
-     font-weight: bold;
-     text-align: center;
-}
-
-.snarkRefresh:link,.snarkRefresh:visited {
-     text-decoration: none !important;
-     text-transform: uppercase !important;
-     padding: 0 16px;
-     letter-spacing: 0.05em;
-     font-weight: bold;
-     font-size: 11pt;
-     color: #005;
-}
-
-.snarkRefresh:hover {
-     text-decoration: none !important;
-     text-transform: uppercase !important;
-     padding: 0 16px;
-     letter-spacing: 0.05em;
-     font-weight: bold;
-     font-size: 11pt;
-     color: #f60;
-     border-bottom: 3px solid #f60;
-     border-top: 3px solid #f60;
-}
-
-.snarkRefresh:active {
-     text-decoration: none !important;
-     text-transform: uppercase !important;
-     padding: 0 16px;
-     letter-spacing: 0.05em;
-     font-weight: bold;
-     font-size: 11pt;
-     color: #f30;
-     border-bottom: 3px solid #f30;
-     border-top: 3px solid #f30;
-}
-
-.snarkMessages {
-     font: bold 9pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
-     text-align: left;
-     margin: 0 0px 10px 0px;
-     padding: 0;
-     border-spacing: 0px;
-     -moz-border-radius: 4px 0 0 0;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     border: 2px solid #930;
-     overflow: auto;
-     color: #531;
-     height: 79px;
-     width: auto;
-     background: #f0dea0;
-}
-
-pre {
-     width: 100%;
-     font: 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
-     padding: 0;
-     text-align: left !important;
-     height: 8px;
-}
-
-table {
-     margin: 0px 0px 10px 0px;
-     border: 0px;
-     padding: 0px;
-     border-spacing: 0px;
-     border-collapse: collapse;
-}
-
-th {
-     padding: 4px;
-     font-size: 9pt;
-     border-top: 1px outset #001;
-     border-bottom: 1px inset #001;
-     background: #fda;
-     whitespace: nowrap;
-}
-
-.SnarkTorrents {
-     margin: 0;
-     border: 1px solid #001;
-     background: #f9f;
-}
-
-td {
-     padding: 4px;
-}
-
-.snarkTorrentEven {
-     background: #fea;
-     font-size: 8pt;
-}
-
-.snarkTorrentOdd {
-     background: #f0dea0;
-     font-size: 8pt;
-}
-
-.snarkFileName {
-     min-width: 25em;
-     padding: 4px 10px;
-}
-
-.snarkFileSize {
-     padding: 4px 10px;
-}
-
-.snarkFileStatus {
-     padding: 4px 10px;
-}
-
-.thumb {
-     max-height: 64px;
-     max-width: 96px;
-}
-
-.snarkNewTorrent {
-     font-size: 9pt;
-}
-
-.snarkAddInfo {
-     font-size: 9pt;
-     line-height: 130% !important;
-}
-
-.snarkConfigTitle {
-     font-size: 11pt;
-     font-weight: bold;
-     text-transform: uppercase;
-}
-
-.snarkConfig {
-     font-size: 10pt;
-     width: 100%;
-}
-
-.page {
-     background: #fff;
-     color: #310;
-     min-width: 800px !important;
-     margin: 5px 0 0 0;
-     padding: 10px 10px 0px 10px;
-     -moz-border-radius: 4px;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     border: 1px solid #001;
-     font-size: 9pt !important;
-     line-height: 160% !important;
-     -moz-box-shadow: inset 0px 0px 1px 0px #002;
-     text-align: center;
-     opacity: 1.0;
-}
-
-form {
-     line-height: 250%;
-}
-
-p {
-     line-height: 150%;
-}
-
-hr {
-     color: #003;
-     background: #003;
-     height: 1px;
-     border: 0px solid #003;
-     width: 100%;
-     margin: 10px 0 7px 0;
-     text-align: center;
-}
-
-a:link {
-     color: #930;
-     text-decoration: none;
-     font-weight: bold;
-     word-wrap: break-word;
-}
-
-a:visited {
-     color: #606;
-     text-decoration: none;
-     font-weight: bold;
-}
-
-a:hover {
-     color: #900;
-     font-weight: bold;
-}
-
-input {
-     font-size: 9pt;
-     font-weight: bold;
-     text-align: left;
-     padding: 2px 4px;
-     -moz-border-radius: 4px;
-     border-radius: 4px;
-     border: 1px;
-     background: #ffe;
-}
-
-input.r {
-     text-align: right;
-}
-
-select {
-     background: #ffe;
-     color: #310;
-     font: 9pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
-     font-weight: bold;
-     padding: 2px 2px 2px 3px;
-     -moz-border-radius: 4px;
-     border-radius: 4px;
-}
-
-textarea {
-     background: #ffe;
-     color: #310;
-     font-weight: bold;
-     padding: 1px 4px 0px;
-     -moz-border-radius: 4px;
-     border-radius: 4px;
-}
-
-img {
-     border: none;
-     margin: 3px 8px 5px 4px;
-     vertical-align: middle;
-     opacity: 1.0;
-     line-height: 100%;
-}
-
-img: hover {
-     border: none;
-     margin: 5px 5px 0px 5px;
-     opacity: 0.5;
-     line-height: 100%;
-}
-
-div.section,div.mainsection {
-     margin: 0 0 10px 0;
-     padding: 10px;
-     border: 1px solid #001;
-     color: #001;
-     -moz-border-radius: 4px;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     -moz-box-shadow: inset 0px 0px 1px 0px #002;
-     word-wrap: break-word;
-     text-align: center;
-     background: #ffe url('../console/light/images/tabletile.png');
-     opacity: 1.0;
-}
-
-div.newtorrentsection {
-     margin: 0 0 10px 0;
-     padding: 0 10px 10px 10px;
-     border: 1px solid #001;
-     text-align: center;
-     color: #001;
-     -moz-border-radius: 4px;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     -moz-box-shadow: inset 0px 0px 1px 0px #002;
-     word-wrap: break-word;
-     background: #bb4 url('../console/images/yellowtile.png');
-     opacity: 1.0;
-}
-
-div.addtorrentsection {
-     margin: 0 0 10px 0;
-     padding: 0 10px 10px 10px;
-     border: 1px solid #001;
-     text-align: center;
-     color: #001;
-     -moz-border-radius: 4px;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     -moz-box-shadow: inset 0px 0px 1px 0px #002;
-     word-wrap: break-word;
-     background: #7f7 url('../console/images/greentile.png');
-     opacity: 1.0;
-}
-
-div.configsection {
-     margin: 0;
-     padding: 0 10px 10px 10px;
-     border: 1px solid #001;
-     color: #ffb;
-     -moz-border-radius: 4px;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     -moz-box-shadow: inset 0px 0px 0px 1px #900;
-     word-wrap: break-word;
-     text-align: center;
-     background: #700 url('../console/light/images/darkbluetile.png');
-     font-weight: bold;/* red tile needs bold text! */
-}
-
-div.configsection table{
-     color: #ffb;
-}
-
-div.configsection a {
-     color: #f90;
-}
-
-div.configsection a: hover {
-     color: #f60;
-     text-decoration: underline;
-}
-
-.snarknavbar {
-     margin: 0 0 10px 0 !important;
-     padding: 10px;
-     border: 1px solid #001;
-     -moz-border-radius: 4px;
-     -khtml-border-radius: 4px;
-     border-radius: 4px;
-     -moz-box-shadow: inset 0px 0px 1px 0px #002;
-     background: #ddf url('../console/light/images/tabletile.png');
-     text-transform: uppercase !important;
-     letter-spacing: 0.05em;
-     font-weight: bold;
-     font-size: 11pt;
-     color: #001;
- }
diff --git a/installer/resources/themes/snark/ubergine/favicon.ico b/installer/resources/themes/snark/ubergine/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..28658965c9486d89945244234f91d20162f1649b
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/favicon.ico differ
diff --git a/installer/resources/themes/snark/ubergine/images/add.png b/installer/resources/themes/snark/ubergine/images/add.png
new file mode 100644
index 0000000000000000000000000000000000000000..6332fefea4be19eeadf211b0b202b272e8564898
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/add.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/arrow_refresh.png b/installer/resources/themes/snark/ubergine/images/arrow_refresh.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d280de31164579cf1ed018e581db43fa209ae8e
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/arrow_refresh.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/complete.png b/installer/resources/themes/snark/ubergine/images/complete.png
new file mode 100644
index 0000000000000000000000000000000000000000..069df0dd68072257233c423a43dc9c671d3bb58c
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/complete.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/config.png b/installer/resources/themes/snark/ubergine/images/config.png
new file mode 100644
index 0000000000000000000000000000000000000000..565a9330e0a156dff5bed2c9fad8c95a44344ba4
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/config.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/configuration.png b/installer/resources/themes/snark/ubergine/images/configuration.png
new file mode 100644
index 0000000000000000000000000000000000000000..43a443b513766f0d35cb5efdad5aef2e2fcf777e
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/configuration.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/create.png b/installer/resources/themes/snark/ubergine/images/create.png
new file mode 100644
index 0000000000000000000000000000000000000000..44ccbf812879c42cb1f9587d865bcfc337ce6361
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/create.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/delete.png b/installer/resources/themes/snark/ubergine/images/delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..353e3e202d9dcd0807b43717372161d9baba81af
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/delete.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/details.png b/installer/resources/themes/snark/ubergine/images/details.png
new file mode 100644
index 0000000000000000000000000000000000000000..12cd1aef900803abba99b26920337ec01ad5c267
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/details.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/downloading.png b/installer/resources/themes/snark/ubergine/images/downloading.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc61019adfe5de9400d2de85aa717d56f3a924d0
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/downloading.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/eta.png b/installer/resources/themes/snark/ubergine/images/eta.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4c3f99d90440da920da4cce9ad8b5a21e0bdc59
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/eta.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/file.png b/installer/resources/themes/snark/ubergine/images/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d5df0d24433b2fb71d184d4a28fd82ff33aaf4f
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/file.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/graytile.png b/installer/resources/themes/snark/ubergine/images/graytile.png
new file mode 100644
index 0000000000000000000000000000000000000000..abafcc18e1220aa7d37bbc6a640b7054f6375b3c
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/graytile.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/hat.png b/installer/resources/themes/snark/ubergine/images/hat.png
new file mode 100644
index 0000000000000000000000000000000000000000..bed0c5b74df36bd8c8b8de53f985dff2ecf378db
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/hat.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/hidepeers.png b/installer/resources/themes/snark/ubergine/images/hidepeers.png
new file mode 100644
index 0000000000000000000000000000000000000000..18050ddf2b5b224eb66ed69e2b00725288805f4b
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/hidepeers.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/nopeers.png b/installer/resources/themes/snark/ubergine/images/nopeers.png
new file mode 100644
index 0000000000000000000000000000000000000000..b718f9c3d1be6e28f3d541549894ef127560433e
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/nopeers.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/remove.png b/installer/resources/themes/snark/ubergine/images/remove.png
new file mode 100644
index 0000000000000000000000000000000000000000..16f71813fe0d1913180c9db81a919c5a5941480e
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/remove.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/seeding.png b/installer/resources/themes/snark/ubergine/images/seeding.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e03d42694badebfc61e8a61f8695abf4f62ccd4
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/seeding.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/showpeers.png b/installer/resources/themes/snark/ubergine/images/showpeers.png
new file mode 100644
index 0000000000000000000000000000000000000000..8050024fa700190f97afe0b3eacaeca777a5fe82
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/showpeers.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/size.png b/installer/resources/themes/snark/ubergine/images/size.png
new file mode 100644
index 0000000000000000000000000000000000000000..78dda3d878f0601fb002eef04c70567e6ecaad46
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/size.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snark_add.png b/installer/resources/themes/snark/ubergine/images/snark_add.png
new file mode 100644
index 0000000000000000000000000000000000000000..f02fe118c860535d700c098325c2f3008c9f6de0
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snark_add.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snark_create.png b/installer/resources/themes/snark/ubergine/images/snark_create.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e767b9b2210b179316c02a86627570cd3d44bd6
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snark_create.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snark_thead.png b/installer/resources/themes/snark/ubergine/images/snark_thead.png
new file mode 100644
index 0000000000000000000000000000000000000000..ead40efeac7cebfaf0fed362aadc323c1d61a528
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snark_thead.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snarknav.png b/installer/resources/themes/snark/ubergine/images/snarknav.png
new file mode 100644
index 0000000000000000000000000000000000000000..7409a310dc0fbe8a802fe531a2f989b9049a6b64
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snarknav.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snarknav_lowlight.png b/installer/resources/themes/snark/ubergine/images/snarknav_lowlight.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba9435c0cde059a4444c16f5c1901a78dd1006a5
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snarknav_lowlight.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snarknav_on.png b/installer/resources/themes/snark/ubergine/images/snarknav_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f2ce23e7f1570f4046d90f9a118aa47f00676a2
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snarknav_on.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/snarktopnav.png b/installer/resources/themes/snark/ubergine/images/snarktopnav.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d00c75c2ff77e1cbef02aaeb7faf2824ee5af40
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/snarktopnav.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/stalled.png b/installer/resources/themes/snark/ubergine/images/stalled.png
new file mode 100644
index 0000000000000000000000000000000000000000..9204c2e8da56f7b6a146b5a6e9f9638874c1bf2e
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/stalled.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/start.png b/installer/resources/themes/snark/ubergine/images/start.png
new file mode 100644
index 0000000000000000000000000000000000000000..280b49814cc94739ebf06d0b01793261c60edbac
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/start.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/start_all.png b/installer/resources/themes/snark/ubergine/images/start_all.png
new file mode 100644
index 0000000000000000000000000000000000000000..11dec0d68a0bc637275191afe5ca55b02201c731
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/start_all.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/status.png b/installer/resources/themes/snark/ubergine/images/status.png
new file mode 100644
index 0000000000000000000000000000000000000000..618cb3fa6cb79b686bca54ea364ab9644780c47b
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/status.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/stop.png b/installer/resources/themes/snark/ubergine/images/stop.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f7c9da05512258629745a2b24c0a5a81e1d26fd
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/stop.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/stop_all.png b/installer/resources/themes/snark/ubergine/images/stop_all.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d4902293f253832898afc65d81430e1642a623e
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/stop_all.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/stopped.png b/installer/resources/themes/snark/ubergine/images/stopped.png
new file mode 100644
index 0000000000000000000000000000000000000000..1258113a3063b39a701466b3cd87379235838e4b
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/stopped.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/tile2.png b/installer/resources/themes/snark/ubergine/images/tile2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4db14c977b83ec524b82612b754109817826eea
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/tile2.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/torrent.png b/installer/resources/themes/snark/ubergine/images/torrent.png
new file mode 100644
index 0000000000000000000000000000000000000000..5894d66cbff96a62c4c14136975c28dd6d2dcbcc
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/torrent.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/trackererror.png b/installer/resources/themes/snark/ubergine/images/trackererror.png
new file mode 100644
index 0000000000000000000000000000000000000000..04766a4bcc810d8f77ef32111e627ae6a4ff4b47
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/trackererror.png differ
diff --git a/installer/resources/themes/snark/ubergine/images/up.png b/installer/resources/themes/snark/ubergine/images/up.png
new file mode 100644
index 0000000000000000000000000000000000000000..31bce12274be5dc14f7b5c5f07a866df68e22b25
Binary files /dev/null and b/installer/resources/themes/snark/ubergine/images/up.png differ
diff --git a/installer/resources/themes/snark/ubergine/snark.css b/installer/resources/themes/snark/ubergine/snark.css
new file mode 100644
index 0000000000000000000000000000000000000000..5ada66db07624d6f5ec6184e2fedbea3637dc413
--- /dev/null
+++ b/installer/resources/themes/snark/ubergine/snark.css
@@ -0,0 +1,634 @@
+/* I2PSnark theme "Ubergine" by dr|z3d */
+/* Guantanamo Commemorative Edition. */
+
+body {
+     background: #101 url('/themes/snark/ubergine/images/graytile.png');
+     color: #001;
+     font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
+}
+
+.snarkTitle {
+     font-size: 12pt;
+     font-weight: bold;
+     text-align: center;
+}
+
+.snarkRefresh:link,.snarkRefresh:visited {
+     text-decoration: none !important;
+     text-transform: uppercase !important;
+     padding: 4px 16px 5px !important;
+	 margin: -5px -7px -5px 0 !important;
+     letter-spacing: 0.05em;
+     font-weight: bold;
+     font-size: 11pt;
+     color: #f70;
+	 text-shadow: 1px 1px #420;
+     background: url('/themes/snark/ubergine/images/snarknav_lowlight.png') no-repeat scroll center bottom;
+     background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
+	 -moz-border-radius: 0px;
+	 -khtml-border-radius: 3px;
+	 border-radius: 0px;
+	 -moz-box-shadow: inset 0 0 1px 0 #f90;
+	 -khtml-box-shadow: inset 0 0 1px 0 #f90;
+	 box-shadow: 0 0 1px 0 #f90;
+
+}
+
+.snarkRefresh:hover {
+     text-decoration: none !important;
+     text-transform: uppercase !important;
+     padding: 1px 16px;
+     letter-spacing: 0.05em;
+     font-weight: bold;
+     font-size: 11pt;
+     color: #f50;
+     background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
+     background: url('/themes/snark/ubergine/images/snarknav_lowlight.png') repeat-x scroll center center;
+	 -moz-border-radius: 0;
+	 -khtml-border-radius: 0;
+	 border-radius: 0;
+	 -moz-box-shadow: inset 0 0 1px 0 #f90;
+	 -khtml-box-shadow: inset 0 0 1px 0 #f90;
+	 box-shadow: 0 0 1px  #f90;
+}
+
+.snarkRefresh:active {
+     text-decoration: none !important;
+     text-transform: uppercase !important;
+     padding: 0 16px;
+     letter-spacing: 0.05em;
+     font-weight: bold;
+     font-size: 11pt;
+     color: #fb0;
+     background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
+}
+
+.snarkRefresh:last-child {
+	 -moz-border-radius: 0 3px 3px 0px;
+	 -khtml-border-radius: 0 3px 0 0;
+	 border-radius: 0;
+	 -moz-box-shadow: inset 0 0 1px 0 #f90;
+	 -khtml-box-shadow: inset 0 0 1px 0 #f90;
+	 box-shadow: 0 0 1px 0 #f90;
+}
+
+.snarkRefresh:first-child {
+	 -moz-border-radius: 3px 0 0 3px;
+	 -khtml-border-radius: 3px;
+	 border-radius: 0;
+	 -moz-box-shadow: inset 0 0 1px 0 #f90;
+	 -khtml-box-shadow: inset 0 0 1px 0 #f90;
+	 box-shadow: 0 0 1px 0  #f90;
+}
+
+.snarkMessages {
+     font: bold 9pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
+     text-align: left;
+     margin: 0 0 10px 0;
+     padding: 3px 0;
+     border-spacing: 0px;
+     -moz-border-radius: 4px 0 0 0;
+     -khtml-border-radius: 4px 0 0 0;
+     border-radius: 4px 0 0 0;
+     border: 1px solid #000;
+     overflow: auto;
+     color: #26f;
+     height: 70px;
+     width: auto;
+     background: #101 url('/themes/snark/ubergine/images/hat.png') no-repeat scroll right center;
+}
+
+.snarkMessages a:link {
+     color: #37f !important;
+}
+
+.snarkMessages a:hover {
+     color: #59f !important;
+}
+
+.logshim {
+     margin-top: -10px !important;
+}
+
+pre {
+     width: 100%;
+     font: 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
+     padding: 0;
+     text-align: left !important;
+     height: 8px;
+	 color: #13f;
+     font-weight: bold !important; 
+}
+
+table {
+     margin: 0px 0px 10px 0px;
+     border: 0px;
+     padding: 0px;
+     border-spacing: 0px;
+     border-collapse: collapse;
+	 color: #323;
+	 width: 100%;
+	 opacity: 1 !important;
+}
+
+tr { 
+	 opacity: 1;
+}
+
+thead, tfoot {
+	 background: url("/themes/snark/ubergine/images/snark_thead.png") repeat-x scroll 0 0 #101;
+	 text-shadow:0 2px 5px #333333;
+}
+
+thead a, tfoot a {
+text-shadow:1px 1px #550000;
+} 
+
+thead {
+     border-bottom: 1px solid #101;
+}
+
+th {
+     padding: 4px 2px 4px 4px;
+     font-size: 9pt;
+     border-top: 1px outset #001;
+     border-bottom: 1px inset #101;
+	 color: #ddd;
+     whitespace: nowrap;
+     font-variant: small-caps !important;
+     letter-spacing: 0.05em;
+}
+
+th:first-child {
+     text-align: left !important;
+	 padding-left: 2px;
+	 max-width: 120px;
+}
+
+tfoot td:first-child {
+     text-align: left !important;
+	 padding-left: 0px;
+}
+
+th:first-child img {
+     margin: 1px 1px 3px 1px !important;
+}
+
+th:nth-child(2) img {
+     margin: 1px 7px 3px 2px !important;
+}
+
+tfoot th {
+     padding-bottom: 4px !important;
+}
+
+.SnarkTorrents {
+     margin: 0;
+     border: 1px solid #101;
+     background: #212;
+}
+
+td {
+     padding: 1px;
+	 color: #ddd !important;
+	 font-size: 9.5pt;
+	 opacity: 1;
+}
+
+.mainsection td {
+     color: #111;
+}
+
+td:first-child {
+     text-align: right;
+	 padding-left: 10px;
+}
+
+.snarkTorrentName {
+     text-shadow:1px 1px #550000;
+	 padding: 2px 0 0;
+}
+
+.snarkTorrentAction {
+     text-shadow:1px 1px #550000;
+	 padding: 1px 1px 1px 1px !important;
+	 margin: 0 !important;
+	 text-align: center;
+	 width: 68px;
+}
+
+.snarkTorrentAction img {
+     margin: 0 2px !important;
+	 opacity: 0.6;
+}
+
+.snarkTorrentAction img:hover {
+     -moz-box-shadow: 0 0 1px 1px #f90;
+     opacity: 1;
+}
+
+.snarkTorrentEven {
+     background: #545;
+     font-size: 8pt;
+     background: #202;
+}
+
+/*
+.snarkTorrentEven tr:first-child {
+	 border: 1px dotted #fff !important;
+}
+
+*/
+
+.snarkTorrentNoneLoaded {
+     background: #323;
+     font-size: 8.5pt;
+	 font-weight: bold;
+	 text-align: center !important;
+	 color: #bbb !important;
+}
+
+.snarkTorrentStatus {
+     padding: 1px 0 2px;
+}
+
+.snarkTorrentStatus:first-child {
+     text-align: left !important;
+     font-style: italic;
+     padding-left: 0px;
+     min-width: 92px;
+     font-weight: bold;
+     font-size: 7pt !important;
+     color: #dd9 !important;
+}
+
+.snarkTorrentStatus:first-child img {
+     margin-right: 0px !important;
+}
+
+.snarkTorrentRate, .snarkTorrentDownloaded, .snarkTorrentUploaded {
+     font-size: 8pt;
+     font-weight: bold;
+     padding: 0 3px;
+}
+
+.snarkTorrentDownloaded {
+     color: #76a !important;
+}
+
+.snarkTorrentUploaded {
+     color: #b9b !important;
+}
+
+.snarkTorrentRate {
+     color: #d9d !important;
+}
+
+
+.snarkTorrentOdd {
+     background: #656;
+     background: #351933;
+     font-size: 8pt;
+	 border: 0px inset #101 !important;
+	 border-left: 0 !important;
+	 border-right: 0 !important;
+}
+.snarkTorrentOdd td, .snarkTorrentEven td {
+	 border-top: 1px dotted #313 !important;
+}
+
+.snarkFileName {
+/*     min-width: 25em;*/
+     padding: 4px 0px !important; 
+	 text-align: left !important;
+}
+
+.snarkFileSize {
+     padding: 4px 2px;
+}
+
+.snarkFileStatus {
+     padding: 4px 10px;
+	 text-align: center;
+	 font-style: italic;
+}
+
+.snarkTorrentETA {
+     font-weight: bold;
+	 font-style: italic;
+     color: #dd7 !important;
+}
+
+.thumb {
+     max-height: 64px;
+     max-width: 96px;
+}
+
+.snarkNewTorrent {
+     font-size: 9pt;
+}
+
+.snarkAddInfo {
+     font-size: 9pt;
+     line-height: 130% !important;
+}
+
+.snarkConfigTitle {
+     font-size: 11pt;
+     font-weight: bold;
+	 padding: 0 25px 3px 25px;
+	 margin: 5px 0 10px 0 !important;
+	 letter-spacing: 0.25em;
+	 border: 1px solid #111;
+	 -moz-border-radius: 0 0 5px 5px;
+	 -khtml-border-radius: 0 0 5px 5px;
+	 border-radius: 0 0 5px 5px;
+	 border-top: 0;
+	 text-shadow: 0px 3px 5px #323;
+	 background: #101 url('/themes/snark/ubergine/images/snarknav.png') repeat-x scroll center center !important;
+	 font-variant: small-caps !important;
+}
+
+.snarkConfig {
+     font-size: 10pt;
+     width: 100%;
+}
+
+.page {
+     background: #323 url('/themes/snark/ubergine/images/tile2.png');
+     color: #310;
+     min-width: 880px !important;
+     margin: 5px 0 0 0;
+     padding: 10px 10px 0px 10px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     border: 1px solid #101;
+     font-size: 9pt !important;
+     line-height: 160% !important;
+     -moz-box-shadow: inset 0px 0px 1px 0px #212;
+     -khtml-box-shadow: inset 0px 0px 1px 0px #002;
+     box-shadow: inset 0px 0px 1px 0px #002;
+     text-align: center;
+     opacity: 1;
+}
+
+form {
+	 margin-bottom: 0;
+}
+
+p {
+     line-height: 150%;
+}
+
+hr {
+     color: #444;
+     background: #444;
+     height: 1px;
+     border: 0px solid #444;
+     width: 0%;
+     margin: 5px 0 7px 0;
+     text-align: center;
+}
+
+a:link {
+     color: #f70;
+     text-decoration: none;
+     font-weight: bold;
+     word-wrap: break-word;
+}
+
+a:visited {
+     color: #f50;
+     text-decoration: none;
+     font-weight: bold;
+}
+
+a:hover {
+     color: #f90;
+     font-weight: bold;
+}
+
+input {
+     font-size: 9pt;
+     font-weight: bold;
+     text-align: left;
+     padding: 2px 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     border: 1px inset #000;
+     background: #212 url('/themes/snark/ubergine/images/graytile.png');	 
+	 color: #f60;
+}
+
+input.r {
+     text-align: right;
+     background: url('/themes/snark/ubergine/images/graytile.png');
+}
+
+input[type=submit] {
+     text-shadow: 0px 0px #410;
+	 color: #000;
+	 background: #989;
+	 border: 1px inset #bbb;
+}
+
+input[type=submit]:hover {
+	 border: 1px outset #bbb;
+     text-shadow: 0 0;	 
+     background: #f60;
+	 color: #fff;
+	 text-shadow: 0px 1px 5px #f00;
+}
+
+input[type=submit]:active {
+     background: #000 !important;
+	 color: #f60 !important;
+	 text-shadow: 0 !important;
+}
+
+input[type=text]:active, input[type=text]:hover, input.r:hover {
+     background: #f60;
+	 color: #fff;
+}
+
+select {
+     background: #333;
+	 background: url('/themes/snark/ubergine/images/graytile.png') !important;
+     color: #f60;
+     font: 9pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
+     font-weight: bold;
+     padding: 2px 2px 2px 3px;
+     -moz-border-radius: 4px 0 0 4px;
+     -khtml-border-radius: 4px 0 0 4px;
+     border-radius: 4px 0 0 4px;
+	 border: 1px solid #000;
+}
+
+select:hover, textarea:hover {
+     background: #f60 !important;
+     color: #fff;
+}	 
+
+textarea {
+     background: #111 url('/themes/snark/ubergine/images/graytile.png');
+     color: #f60;
+     font-weight: bold;
+     padding: 1px 4px 0px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     border: 1px inset #000;
+}
+
+img {
+     border: none;
+     margin: 0 3px 1px 3px;
+     vertical-align: middle;
+     opacity: 1.0;
+     line-height: 100%;
+}
+
+img: hover {
+     border: none;
+     opacity: 0.5;
+     line-height: 100%;
+}
+
+div.section,div.mainsection {
+     margin: 0 0 10px 0;
+     padding: 10px;
+     border: 1px solid #001;
+     color: #001;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     -moz-box-shadow: inset 0px 0px 1px 0px #212;
+     word-wrap: break-word;
+     text-align: center;
+     background: #545;
+	 opacity: 1 !important;
+}
+
+div.newtorrentsection {
+     margin: 0 0 10px 0;
+     padding: 0 10px 0px 10px;
+     border: 1px solid #001;
+     text-align: center;
+     color: #ddd;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     -moz-box-shadow: inset 0px 0px 1px 0px #101;
+     -khtml-box-shadow: inset 0px 0px 1px 0px #101;
+     box-shadow: inset 0px 0px 1px 0px #101;
+     word-wrap: break-word;
+     background: #545 url('/themes/snark/ubergine/images/snark_create.png') no-repeat scroll right center;
+     opacity: 1.0;
+}
+
+div.addtorrentsection {
+     margin: 0 0 10px 0;
+     padding: 0 10px 0px 10px;
+     border: 1px solid #001;
+     text-align: center;
+     color: #ddd;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     -moz-box-shadow: inset 0px 0px 1px 0px #101;
+     -khtml-box-shadow: inset 0px 0px 1px 0px #101;
+     box-shadow: inset 0px 0px 1px 0px #101;
+     word-wrap: break-word;
+     background: #545 url('/themes/snark/ubergine/images/snark_add.png') no-repeat scroll right center;
+     opacity: 1.0;
+}
+
+div.configsection {
+     margin: 0 0 10px 0;
+     padding: 0 10px 15px 10px;
+     border: 1px solid #000;
+     color: #ddd;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     -moz-box-shadow: inset 0px 0px 1px 0px #101;
+     -khtml-box-shadow: inset 0px 0px 1px 0px #101;
+     box-shadow: inset 0px 0px 1px 0px #101;
+     word-wrap: break-word;
+     text-align: center;
+     background: #545;
+     font-weight: bold;
+}
+
+div.configsectionpanel {
+     margin: 0 0 10px 0;
+     padding: 0 10px;
+     border: 1px solid #000;
+     color: #ddd;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     border-radius: 4px;
+     -moz-box-shadow: inset 0px 0px 1px 0px #101;
+     -khtml-box-shadow: inset 0px 0px 1px 0px #101;
+     box-shadow: inset 0px 0px 1px 0px #101;
+     word-wrap: break-word;
+     text-align: center;
+     background: #545 url('/themes/snark/ubergine/images/configuration.png') no-repeat scroll right center;
+     font-weight: bold;
+}
+
+.newtorrentsection form, .configsection form, .addtorrentsection form {
+     color: #ddd !important;
+}
+
+div.configsection table{
+     color: #ffb;
+	 opacity: 1;
+}
+
+div.configsection a {
+     color: #f60;
+	 text-shadow: 1px 1px #500;
+}
+
+div.configsection a:hover {
+     color: #f90;
+     text-decoration: none;
+}
+
+code {
+     font-size: 9pt;
+     color: #b8b;
+	 padding: 0 2px;
+	 font-weight: bold;
+	 font-family: "Lucida Console", "DejaVu Sans Mono", Courier, mono;
+}
+.snarknavbar {
+     margin: -10px 0 5px 0 !important;
+     padding: 11px 10px 12px;
+     border: 1px solid #101;
+     -moz-border-radius: 0 0 8px 8px;
+     -khtml-border-radius: 0 0 4px 4px;
+     border-radius: 0 0 4px 4px;
+     -moz-box-shadow: inset 0px 0px 1px 0px #002;
+     -khtml-box-shadow: inset 0px 0px 1px 0px #002;
+     box-shadow: inset 0px 0px 1px 0px #002;
+     background: #101 url('/themes/snark/ubergine/images/snarktopnav.png') repeat-x scroll center center;
+     text-transform: uppercase !important;
+     letter-spacing: 0.065em !important;
+     font-weight: bold;
+     font-size: 11.5pt;
+     color: #001;
+	 min-width: 700px;
+	 width: 700px;
+	 text-align: center;
+ }
+
+ .snarknavbar img {
+     border: 0;
+     margin: 0 -6px 0 -2px;
+     padding: 1px 0 0px !important;
+     vertical-align: top;
+}
diff --git a/router/java/src/net/i2p/router/package.html b/router/java/src/net/i2p/router/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..02e1bb6566db2e51fb6b7a8371a5f9cb44ad50a2
--- /dev/null
+++ b/router/java/src/net/i2p/router/package.html
@@ -0,0 +1,10 @@
+<html>
+    <body>
+        <p>
+            The I2P router application handles the I2P network communication.
+        </p>
+        <p>
+            It encompasses sending and receiving messages, building up tunnels, encrypting and decrypting (on multiple levels) where applicable, and so on.
+        </p>
+    </body>
+</html>
diff --git a/router/java/src/net/i2p/router/peermanager/package.html b/router/java/src/net/i2p/router/peermanager/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..f422d0c1099c582029121865c5d904a19ee1971f
--- /dev/null
+++ b/router/java/src/net/i2p/router/peermanager/package.html
@@ -0,0 +1,10 @@
+<html>
+    <body>
+        <p>
+            The peer manager logs information about the history and quality of network peers.
+        </p>
+        <p>
+            Peer capacity, speed and other parameters are calculated to determine in what cases we should use each peer.
+        </p>
+    </body>
+</html>
diff --git a/router/java/src/net/i2p/router/startup/package.html b/router/java/src/net/i2p/router/startup/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..7dfdabf9ec0625311e01dc8290f5b7c32fbba2da
--- /dev/null
+++ b/router/java/src/net/i2p/router/startup/package.html
@@ -0,0 +1,10 @@
+<html>
+    <body>
+        <p>
+            The I2P startup package loads the configuration when I2P is started.
+        </p>
+        <p>
+            The startup consists of a number of different jobs, like loading data from files for the network database, creating new router information (keypairs), and so on.
+        </p>
+    </body>
+</html>
diff --git a/router/java/src/net/i2p/router/transport/ntcp/package.html b/router/java/src/net/i2p/router/transport/ntcp/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..4aeb388cf2bd89ee22d89ae1ab2cc949a9bbd88e
--- /dev/null
+++ b/router/java/src/net/i2p/router/transport/ntcp/package.html
@@ -0,0 +1,7 @@
+<html>
+    <body>
+        <p>
+            The NTCP transport allows passing I2P messages on top of TCP. The N in NTCP stands for 'New', as the NTCP transport replaces an older TCP transport which had issues concerning congestion collapse.
+        </p>
+    </body>
+</html>
diff --git a/router/java/src/net/i2p/router/transport/package.html b/router/java/src/net/i2p/router/transport/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..4970c053e1a01f66a3eab43601ff2702ebc61c33
--- /dev/null
+++ b/router/java/src/net/i2p/router/transport/package.html
@@ -0,0 +1,7 @@
+<html>
+    <body>
+        <p>
+            The transport system allows the usage of communication layers that are below I2P in the stack, on which I2P messages are sent.
+        </p>
+    </body>
+</html>
diff --git a/router/java/src/net/i2p/router/transport/udp/package.html b/router/java/src/net/i2p/router/transport/udp/package.html
new file mode 100644
index 0000000000000000000000000000000000000000..1c1f948524eea097eddd5543de33c9f3431f3a76
--- /dev/null
+++ b/router/java/src/net/i2p/router/transport/udp/package.html
@@ -0,0 +1,7 @@
+<html>
+    <body>
+        <p>
+            The UDP transport (also known as 'SSU transport') allows passing I2P messages on top of UDP.
+        </p>
+    </body>
+</html>