diff --git a/linux/build/build b/linux/build/build
index a739e1f..0876a0b 100755
--- a/linux/build/build
+++ b/linux/build/build
@@ -12,14 +12,19 @@ cd $dir
arch=$(uname -m)
language=$(echo $LANG | cut -c-5 | sed s/_/-/g)
-version="60.9.0esr"
+version="78.11.0esr"
application="firefox"
ftpmirror="https://ftp.mozilla.org/pub/$application/releases/$version"
curlfind=$(which curl)
if [ -z $curlfind ]; then
- echo "'cURL' does not seem to be installed. The script needs it!";
- exit 1;
+ echo "'cURL' does not seem to be installed. The script needs it!"
+ exit 1
+fi
+
+# We support only English (US) and Russian
+if [ "$language" != "ru" ]; then
+ language="en-US"
fi
echo "This script is preparing $application $version for use with I2Pd"
@@ -30,27 +35,27 @@ filepath="linux-$arch/$language/$file"
echo "Downloading $application..."
curl -L -f -# -O $ftpmirror/$filepath
if [ $? -ne 0 ]; then # Not found error, trying to cut language variable
- echo "[TRY 2] I'll try downloading Firefox with shorter language code";
+ echo "[TRY 2] I'll try downloading Firefox with shorter language code"
language=$(echo $language | cut -c-2)
# re-create variable with cutted lang
filepath="linux-$arch/$language/$file"
curl -L -f -# -O $ftpmirror/$filepath
if [ $? -ne 0 ]; then # Not found error, trying to download english version
- echo "[TRY 3] I'll try downloading Firefox with the English language code";
+ echo "[TRY 3] I'll try downloading Firefox with the English language code"
language="en_US"
# re-create lang variable
filepath="linux-$arch/$language/$file"
curl -L -f -# -O $ftpmirror/$filepath
if [ $? -ne 0 ]; then # After that i can say only that user haven't internet connection
echo "[Error] Can't download file. Check your internet connectivity."
- exit 1;
+ exit 1
fi
fi
fi
if [ ! -f $file ]; then
echo "[Error] Can't find downloaded file. Does it really exist?"
- exit 1;
+ exit 1
fi
echo "Downloading checksum file and checking SHA512 checksum"
@@ -59,7 +64,7 @@ recv_sum=$(grep "$filepath" SHA512SUMS | cut -c-128)
file_sum=$(sha512sum $file | cut -c-128)
if [ $recv_sum != $file_sum ]; then
echo "[Error] File checksum failed!"
- exit 1;
+ exit 1
else
echo "Checksum correct."
rm SHA512SUMS
@@ -78,33 +83,35 @@ rm ../app/pingsender
rm ../app/precomplete
rm ../app/removed-files
rm ../app/update*
-rm ../app/browser/blocklist.xml
+rm ../app/Throbber-small.gif
rm ../app/browser/crashreporter-override.ini
-rm ../app/browser/features/aushelper@mozilla.org.xpi
-rm ../app/browser/features/firefox@getpocket.com.xpi
-rm ../app/browser/features/followonsearch@mozilla.com.xpi
rm ../app/browser/features/formautofill@mozilla.org.xpi
-rm ../app/browser/features/jaws-esr@mozilla.org.xpi
-rm ../app/browser/features/onboarding@mozilla.org.xpi
rm ../app/browser/features/screenshots@mozilla.org.xpi
-rm -r ../app/dictionaries
+rm -r ../app/icons
# And edit some places
sed -i 's/Enabled=1/Enabled=0/g' ../app/application.ini
sed -i 's/ServerURL=.*/ServerURL=-/' ../app/application.ini
-# sed -i 's/Enabled=1/Enabled=0/g' ../app/webapprt/webapprt.ini
-# sed -i 's/ServerURL=.*/ServerURL=-/' ../app/webapprt/webapprt.ini
# Done!
echo "Downloading language packs..."
-curl -L -f -# -o ../app/browser/extensions/langpack-ru@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/978562/russian_ru_language_pack-60.0buildid20180605171542-an+fx.xpi
-curl -L -f -# -o ../app/browser/extensions/langpack-en-US@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/978493/english_us_language_pack-60.0buildid20180605171542-an+fx.xpi
+mkdir ../app/browser/extensions
+curl -L -f -# -o ../app/browser/extensions/langpack-ru@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/3605589/russian_ru_language_pack-78.0buildid20200708170202-fx.xpi
+curl -L -f -# -o ../app/browser/extensions/ru@dictionaries.addons.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/1163927/russian_spellchecking_dictionary-0.4.5.1webext.xpi
+curl -L -f -# -o ../app/browser/extensions/langpack-en-US@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/3605503/english_us_language_pack-78.0buildid20200708170202-fx.xpi
+curl -L -f -# -o ../app/browser/extensions/en-US@dictionaries.addons.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/3498005/english_united_states_dictionary-68.0.xpi
echo "Downloading NoScript extension..."
-curl -L -f -# -o ../app/browser/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi https://addons.mozilla.org/firefox/downloads/file/3383315/noscript_security_suite-11.0.3-an+fx.xpi
+curl -L -f -# -o ../app/browser/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi https://addons.mozilla.org/firefox/downloads/file/3625174/noscript_security_suite-11.0.38-an+fx.xpi
echo "Adding standard configs..."
-cp profile/* ../data/
cp -r preferences/* ../app/
+cp -r profile/* ../data/
+
+if [ "$language" = "ru" ]; then
+ cp -r profile-ru/* ../data/
+else
+ cp -r profile-en/* ../data/
+fi
echo '#!/bin/sh' > "../${application}-portable"
echo 'dir=${0%/*}' >> "../${application}-portable"
diff --git a/linux/build/preferences/cck2/chrome.manifest b/linux/build/preferences/cck2/chrome.manifest
deleted file mode 100644
index b1b9a9b..0000000
--- a/linux/build/preferences/cck2/chrome.manifest
+++ /dev/null
@@ -1 +0,0 @@
-resource cck2 modules/
diff --git a/linux/build/preferences/cck2/modules/CAPSCheckLoadURIFramescript.js b/linux/build/preferences/cck2/modules/CAPSCheckLoadURIFramescript.js
deleted file mode 100644
index 806fb3c..0000000
--- a/linux/build/preferences/cck2/modules/CAPSCheckLoadURIFramescript.js
+++ /dev/null
@@ -1,154 +0,0 @@
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const EXPORTED_SYMBOLS = [];
-
-var gForceExternalHandler = false;
-
-XPCOMUtils.defineLazyServiceGetter(this, "extProtocolSvc",
- "@mozilla.org/uriloader/external-protocol-service;1", "nsIExternalProtocolService");
-
-var documentObserver = {
- observe: function observe(subject, topic, data) {
- if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
- var doc = subject.document;
- doc.addEventListener("DOMContentLoaded", function onLoad(event) {
- event.target.removeEventListener("DOMContentLoaded", onLoad, false);
- // If the parent document is a local file, don't do anything
- // Links will just work
- if (doc.location.href.indexOf("file://") == 0) {
- return;
- }
- var links = event.target.getElementsByTagName("a");
- for (var i=0; i < links.length; i++) {
- var link = links[i];
- if (link.href.indexOf("file://") != 0) {
- continue;
- }
- link.addEventListener("click", function(link) {
- return function(event) {
- event.preventDefault();
- if (gForceExternalHandler) {
- extProtocolSvc.loadUrl(Services.io.newURI(link.href, null, null));
- } else {
- var target = "_self";
- if (link.hasAttribute("target")) {
- target = link.getAttribute("target");
- }
- // If we were told somewhere other than current (based on modifier keys), use it
- var where = whereToOpenLink(event);
- if (where != "current" || target == "_blank") {
- sendAsyncMessage("cck2:open-url", {
- "url": link.href,
- "where": (target == "_blank") ? "tab" : where
- });
- return;
- }
- switch (target) {
- case "_self":
- link.ownerDocument.location = link.href;
- break;
- case "_parent":
- link.ownerDocument.defaultView.parent.document.location = link.href;
- break;
- case "_top":
- link.ownerDocument.defaultView.top.document.location = link.href;
- break;
- default:
- // Attempt to find the iframe that this goes into
- var iframes = doc.defaultView.parent.document.getElementsByName(target);
- if (iframes.length > 0) {
- iframes[0].contentDocument.location = link.href;
- } else {
- link.ownerDocument.location = link.href;
- }
- break;
- }
- }
- }
- }(link), false);
- }
- }, false);
- }
- }
-}
-
-// Don't do this check before Firefox 29
-if (Services.vc.compare(Services.appinfo.version, "29") > 0) {
- try {
- if (Services.prefs.getCharPref("capability.policy.default.checkloaduri.enabled") == "allAccess") {
- gForceExternalHandler = !extProtocolSvc.isExposedProtocol('file');
- Services.obs.addObserver(documentObserver, "content-document-global-created", false);
- addEventListener("unload", function() {
- Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
- })
- }
- } catch (e) {}
-}
-
-
-/* Copied from http://mxr.mozilla.org/mozilla-central/source/browser/base/content/utilityOverlay.js?raw=1 */
-
-function getBoolPref(prefname, def)
-{
- try {
- return Services.prefs.getBoolPref(prefname);
- }
- catch(er) {
- return def;
- }
-}
-
-/* whereToOpenLink() looks at an event to decide where to open a link.
- *
- * The event may be a mouse event (click, double-click, middle-click) or keypress event (enter).
- *
- * On Windows, the modifiers are:
- * Ctrl new tab, selected
- * Shift new window
- * Ctrl+Shift new tab, in background
- * Alt save
- *
- * Middle-clicking is the same as Ctrl+clicking (it opens a new tab).
- *
- * Exceptions:
- * - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff.
- * (Currently, the Alt isn't sent here at all for menu items, but that will change in bug 126189.)
- * - Alt is hard to use in context menus, because pressing Alt closes the menu.
- * - Alt can't be used on the bookmarks toolbar because Alt is used for "treat this as something draggable".
- * - The button is ignored for the middle-click-paste-URL feature, since it's always a middle-click.
- */
-function whereToOpenLink( e, ignoreButton, ignoreAlt )
-{
- Components.utils.import("resource://gre/modules/AppConstants.jsm");
-
- // This method must treat a null event like a left click without modifier keys (i.e.
- // e = { shiftKey:false, ctrlKey:false, metaKey:false, altKey:false, button:0 })
- // for compatibility purposes.
- if (!e)
- return "current";
-
- var shift = e.shiftKey;
- var ctrl = e.ctrlKey;
- var meta = e.metaKey;
- var alt = e.altKey && !ignoreAlt;
-
- // ignoreButton allows "middle-click paste" to use function without always opening in a new window.
- var middle = !ignoreButton && e.button == 1;
- var middleUsesTabs = true;
-
- // Don't do anything special with right-mouse clicks. They're probably clicks on context menu items.
-
- var metaKey = AppConstants.platform == "macosx" ? meta : ctrl;
- if (metaKey || (middle && middleUsesTabs))
- return shift ? "tabshifted" : "tab";
-
- if (alt && getBoolPref("browser.altClickSave", false))
- return "save";
-
- if (shift || (middle && !middleUsesTabs))
- return "window";
-
- return "current";
-}
diff --git a/linux/build/preferences/cck2/modules/CAPSClipboardFramescript.js b/linux/build/preferences/cck2/modules/CAPSClipboardFramescript.js
deleted file mode 100644
index ffadb9d..0000000
--- a/linux/build/preferences/cck2/modules/CAPSClipboardFramescript.js
+++ /dev/null
@@ -1,183 +0,0 @@
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-Cu.import("resource://gre/modules/Services.jsm");
-
-const EXPORTED_SYMBOLS = [];
-
-var gAllowedPasteSites = [];
-var gAllowedCutCopySites = [];
-var gDeniedPasteSites = [];
-var gDeniedCutCopySites = [];
-var gDefaultPastePolicy = false;
-var gDefaultCutCopyPolicy = false;
-
-function allowCutCopy(doc) {
- var win = doc.defaultView;
- if (win !== win.top) {
- // It's an iframe. Use the top level window
- // for security purposes
- win = win.top;
- }
-
- if (gDefaultCutCopyPolicy == true) {
- for (var i=0; i < gDeniedCutCopySites.length; i++) {
- if (win.location.href.indexOf(gDeniedCutCopySites[i]) == 0) {
- return false;
- }
- }
- return true;
- } else {
- for (var i=0; i < gAllowedCutCopySites.length; i++) {
- if (win.location.href.indexOf(gAllowedCutCopySites[i]) == 0) {
- return true;
- }
- }
- return false;
- }
-}
-
-function allowPaste(doc) {
- var win = doc.defaultView;
- if (win !== win.top) {
- // It's an iframe. Use the top level window
- // for security purposes
- win = win.top;
- }
-
- if (gDefaultPastePolicy == true) {
- for (var i=0; i < gDeniedPasteSites.length; i++) {
- if (win.location.href.indexOf(gDeniedPasteSites[i]) == 0) {
- return false;
- break;
- }
- }
- return true;
- } else {
- for (var i=0; i < gAllowedPasteSites.length; i++) {
- if (win.location.href.indexOf(gAllowedPasteSites[i]) == 0) {
- return true;
- break;
- }
- }
- return false;
- }
-}
-
-function myExecCommand(doc, originalExecCommand) {
- return function(aCommandName, aShowDefaultUI, aValueArgument) {
- switch (aCommandName.toLowerCase()) {
- case "cut":
- case "copy":
- if (allowCutCopy(doc)) {
- var win = Services.wm.getMostRecentWindow("navigator:browser");
- win.goDoCommand("cmd_" + aCommandName.toLowerCase());
- return true;
- }
- break;
- case "paste":
- if (allowPaste(doc)) {
- var win = Services.wm.getMostRecentWindow("navigator:browser");
- win.goDoCommand("cmd_" + aCommandName.toLowerCase());
- return true;
- }
- break;
- }
- return originalExecCommand.call(doc, aCommandName, aShowDefaultUI, aValueArgument);
- }
-}
-
-function myQueryCommandSupported(doc, originalQueryCommandSupported) {
- return function(aCommandName) {
- switch (aCommandName.toLowerCase()) {
- case "cut":
- case "copy":
- if (allowCutCopy(doc)) {
- return true;
- }
- break;
- case "paste":
- if (allowPaste(doc)) {
- return true;
- }
- break;
- }
- return originalQueryCommandSupported.call(doc, aCommandName, aShowDefaultUI, aValueArgument);
- }
-}
-
-var documentObserver = {
- observe: function observe(subject, topic, data) {
- if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
- var doc = subject.document;
- var cutCopyAllowed = allowCutCopy(doc);
- var pasteAllowed = allowPaste(doc);
- if (!cutCopyAllowed && !pasteAllowed) {
- return;
- }
- var originalExecCommand = Cu.waiveXrays(doc).execCommand;
- Cu.exportFunction(myExecCommand(doc, originalExecCommand), doc, {defineAs: "execCommand"});
- var originalQueryCommandSupported = Cu.waiveXrays(doc).queryCommandSupported;
- Cu.exportFunction(myQueryCommandSupported(doc, originalQueryCommandSupported), doc, {defineAs: "queryCommandSupported"});
- var originalQueryCommandEnabled = Cu.waiveXrays(doc).queryCommandEnabled;
- Cu.exportFunction(myQueryCommandSupported(doc, originalQueryCommandEnabled), doc, {defineAs: "queryCommandEnabled"});
- }
- }
-}
-
-// Don't do this check before Firefox 29
-if (Services.vc.compare(Services.appinfo.version, "29") > 0) {
- try {
- if (Services.prefs.getCharPref("capability.policy.default.Clipboard.cutcopy") == "allAccess") {
- gDefaultCutCopyPolicy = true;
- }
- } catch (e) {}
- try {
- if (Services.prefs.getCharPref("capability.policy.default.Clipboard.paste") == "allAccess") {
- gDefaultPastePolicy = true;
- }
- } catch (e) {}
- try {
- var policies = [];
- policies = Services.prefs.getCharPref("capability.policy.policynames").split(', ');
- for (var i=0; i < policies.length; i++ ) {
- try {
- if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.cutcopy") == "allAccess") {
- var allowedCutCopySites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
- for (var j=0; j < allowedCutCopySites.length; j++) {
- gAllowedCutCopySites.push(allowedCutCopySites[j]);
- }
- }
- } catch(e) {}
- try {
- if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.cutcopy") == "noAccess") {
- var deniedCutCopySites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
- for (var j=0; j < deniedCutCopySites.length; j++) {
- gDeniedCutCopySites.push(deniedCutCopySites[j]);
- }
- }
- } catch(e) {}
- try {
- if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.paste") == "allAccess") {
- var allowedPasteSites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
- for (var j=0; j < allowedPasteSites.length; j++) {
- gAllowedPasteSites.push(allowedPasteSites[j]);
- }
- }
- } catch(e) {}
- try {
- if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.paste") == "noAccess") {
- var deniedPasteSites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
- for (var j=0; j < deniedPasteSites.length; j++) {
- gDeniedPasteSites.push(deniedPasteSites[j]);
- }
- }
- } catch(e) {}
- }
- } catch (e) {}
- if (gDefaultCutCopyPolicy || gDefaultPastePolicy ||
- gAllowedCutCopySites.length > 0 || gAllowedPasteSites> 0) {
- Services.obs.addObserver(documentObserver, "content-document-global-created", false);
- addEventListener("unload", function() {
- Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
- })
- }
-}
diff --git a/linux/build/preferences/cck2/modules/CCK2.jsm b/linux/build/preferences/cck2/modules/CCK2.jsm
deleted file mode 100644
index 2a63260..0000000
--- a/linux/build/preferences/cck2/modules/CCK2.jsm
+++ /dev/null
@@ -1,1495 +0,0 @@
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-var EXPORTED_SYMBOLS = ["CCK2"];
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/NetUtil.jsm");
-Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/PlacesUtils.jsm");
-try {
- Cu.import("resource://gre/modules/Timer.jsm");
-} catch (ex) {
- Cu.import("resource://cck2/Timer.jsm");
-}
-Cu.import("resource://cck2/Preferences.jsm");
-Cu.import("resource://cck2/CTPPermissions.jsm");
-Cu.import("resource:///modules/distribution.js");
-
-XPCOMUtils.defineLazyServiceGetter(this, "bmsvc",
- "@mozilla.org/browser/nav-bookmarks-service;1", "nsINavBookmarksService");
-XPCOMUtils.defineLazyServiceGetter(this, "annos",
- "@mozilla.org/browser/annotation-service;1", "nsIAnnotationService");
-XPCOMUtils.defineLazyServiceGetter(this, "override",
- "@mozilla.org/security/certoverride;1", "nsICertOverrideService");
-XPCOMUtils.defineLazyServiceGetter(this, "uuid",
- "@mozilla.org/uuid-generator;1", "nsIUUIDGenerator");
-
-Cu.importGlobalProperties(["XMLHttpRequest"]);
-
-/* Hack to work around bug that AutoConfig is loaded in the wrong charset */
-/* Not used for Firefox 44 and above (see CCK2.init) */
-let fixupUTF8 = function(str) {
- if (!str) {
- return null;
- }
- var out, i, len, c;
- var char2, char3;
-
- out = "";
- len = str.length;
- i = 0;
- while(i < len) {
- c = str.charCodeAt(i++);
- switch(c >> 4)
- {
- case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
- // 0xxxxxxx
- out += str.charAt(i-1);
- break;
- case 12: case 13:
- // 110x xxxx 10xx xxxx
- char2 = str.charCodeAt(i++);
- out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
- break;
- case 14:
- // 1110 xxxx 10xx xxxx 10xx xxxx
- char2 = str.charCodeAt(i++);
- char3 = str.charCodeAt(i++);
- out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
- break;
- }
- }
-
- return out;
-};
-
-/* Crazy hack to work around distribution.ini bug */
-/* Basically if the distribution can't be parsed, make it null */
-let dirSvc = Cc["@mozilla.org/file/directory_service;1"].
- getService(Ci.nsIProperties);
-let iniFile = dirSvc.get("XREAppDist", Ci.nsIFile);
-iniFile.leafName = "distribution";
-iniFile.append("distribution.ini");
-if (iniFile.exists()) {
- try {
- let ini = Cc["@mozilla.org/xpcom/ini-parser-factory;1"].
- getService(Ci.nsIINIParserFactory).
- createINIParser(iniFile);
- } catch (e) {
- DistributionCustomizer.prototype.__defineGetter__("_iniFile", function() { return null;});
- }
-}
-
-var networkPrefMapping = {
- proxyType: "network.proxy.type",
- proxyHTTP: "network.proxy.http",
- proxyHTTPPort: "network.proxy.http_port",
- proxySSL: "network.proxy.ssl",
- proxySSLPort: "network.proxy.ssl_port",
- proxyFTP: "network.proxy.ftp",
- proxyFTPPort: "network.proxy.ftp_port",
- proxySOCKS: "network.proxy.socks",
- proxySOCKSPort: "network.proxy.socks_port",
- proxySocksVersion: "network.proxy.socks_version",
- proxyNone: "network.proxy.no_proxies_on",
- proxyAutoConfig: "network.proxy.autoconfig_url",
- shareAllProxies: "network.proxy.share_proxy_settings",
- proxySOCKSRemoteDNS: "network.proxy.socks_remote_dns",
- proxyAutologin: "signon.autologin.proxy"
-}
-
-
-function alert(string) {
- Services.prompt.alert(Services.wm.getMostRecentWindow("navigator:browser"), "", string);
-}
-
-var gBundlePrefFiles = [];
-
-var CCK2 = {
- configs: {},
- firstrun: false,
- upgrade: false,
- installedVersion: null,
- initialized: false,
- aboutFactories: [],
- init: function(config, a, b) {
- if (a == b) {
- /* See bugzilla 1193625/1137799 */
- fixupUTF8 = function(str) { return str };
- }
- // Bring back default profiles for >= FF46
- if (Services.vc.compare(Services.appinfo.version, "46") >= 0) {
- // If it is a new profile
- if (!Preferences.isSet("browser.startup.homepage_override.mstone")) {
- var defaultProfileDir = Services.dirsvc.get("GreD", Ci.nsIFile);
- defaultProfileDir.append("defaults");
- defaultProfileDir.append("profile");
- if (defaultProfileDir.exists()) {
- var profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
- try {
- copyDir(defaultProfileDir, profileDir);
- } catch(e) {
- Components.utils.reportError("Error copying default profile directory: " + e);
- }
- }
- }
- }
- try {
- for (var id in this.configs) {
- if (id == config.id) {
- // We've already processed this config
- return;
- }
- }
- if (!config) {
- // Try to get config from default preference. If it is there, default
- // preference always wins
- var configJSON = Preferences.defaults.get("extensions.cck2.config");
- if (!configJSON) {
- configJSON = Preferences.defaults.get("extensions.cck2.config");
- }
- if (!configJSON) {
- // Try something else. Grou policy?
- }
- try {
- config = JSON.parse(configJSON);
- } catch (ex) {
- return;
- }
- }
-
- if (!config)
- return;
- if (!config.id) {
- alert("Missing ID in config");
- }
- config.firstrun = Preferences.get("extensions.cck2." + config.id + ".firstrun", true);
- Preferences.set("extensions.cck2." + config.id + ".firstrun", false);
- if (!config.firstrun) {
- config.installedVersion = Preferences.get("extensions.cck2." + config.id + ".installedVersion");
- config.upgrade = (config.installedVersion != config.version);
- }
- Preferences.set("extensions.cck2." + config.id + ".installedVersion", config.version);
- Preferences.lock("distribution.id", config.id);
- Preferences.lock("distribution.version", config.version + " (CCK2)");
-// Preferences.lock("distribution.about", String(config.id + " - " + config.version + " (CCK2)"));
-
- if (config.removeDefaultSearchEngines) {
- Services.io.getProtocolHandler("resource").QueryInterface(Components.interfaces.nsIResProtocolHandler)
- .setSubstitution("search-plugins", null);
- }
- if (config.noAddonCompatibilityCheck) {
- Preferences.reset("extensions.lastAppVersion");
- }
- if (config.preferences) {
- for (var i in config.preferences) {
- // For plugin.disable_full_page_plugin_for_types, there is
- // a default user value (application/pdf).
- // Because of this, setting the default value doesn't work.
- // So if a user is trying to set the default value, we set
- // the user value instead.
- // But we only do that if it's set to application/pdf
- // or not set (startup), or it's a CCK2 upgrade or first install
- // As a side note, at Firefox install, application/pdf is added
- // to the pref no matter what
- if (i == "plugin.disable_full_page_plugin_for_types") {
- if (!config.preferences[i].userset &&
- !config.preferences[i].locked &&
- !config.preferences[i].clear) {
- if (Preferences.get(i) == "application/pdf" ||
- !Preferences.get(i) || // firstrun
- config.upgrade ||
- config.firstrun) {
- Preferences.set(i, config.preferences[i].value);
- continue;
- }
- }
- }
- // Workaround bug where this pref is coming is as a string from import
- if (i == "toolkit.telemetry.prompted") {
- config.preferences[i].value = parseInt(config.preferences[i].value);
- }
- if (config.preferences[i].locked) {
- Preferences.lock(i, config.preferences[i].value);
- } else if (config.preferences[i].userset) {
- Preferences.set(i, config.preferences[i].value);
- } else if (config.preferences[i].clear) {
- Preferences.reset(i);
- } else {
- if (i == "browser.startup.homepage" ||
- i == "gecko.handlerService.defaultHandlersVersion" ||
- i == "browser.menu.showCharacterEncoding" ||
- i == "intl.accept_languages" ||
- i.indexOf("browser.search.defaultenginename") == 0 ||
- i.indexOf("browser.search.order") == 0 ||
- i.indexOf("browser.contentHandlers.types") == 0 ||
- i.indexOf("gecko.handlerService.schemes") == 0) {
- // If it's a complex preference, we need to set it differently
- Preferences.defaults.set(i, "data:text/plain," + i + "=" + config.preferences[i].value);
- } else {
- Preferences.defaults.set(i, config.preferences[i].value);
- }
- }
- }
- }
- if (config.registry && "@mozilla.org/windows-registry-key;1" in Cc) {
- for (var i in config.registry) {
- addRegistryKey(config.registry[i].rootkey,
- config.registry[i].key,
- config.registry[i].name,
- config.registry[i].value,
- config.registry[i].type);
- }
- }
- if (config.permissions) {
- for (var i in config.permissions) {
- for (var j in config.permissions[i]) {
- if (i.indexOf("http") == 0) {
- Services.perms.add(NetUtil.newURI(i), j, config.permissions[i][j]);
- } else {
- var domain = i.replace(/^\*\./g, '');
- Services.perms.add(NetUtil.newURI("http://" + domain), j, config.permissions[i][j]);
- Services.perms.add(NetUtil.newURI("https://" + domain), j, config.permissions[i][j]);
- }
- if (j == "plugins") {
- var plugins = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost).getPluginTags({});
- for (var k=0; k < plugins.length; k++) {
- if (i.indexOf("http") == 0) {
- Services.perms.add(NetUtil.newURI(i), "plugin:" + CTP.getPluginPermissionFromTag(plugins[k]), config.permissions[i][j]);
- Services.perms.add(NetUtil.newURI(i), "plugin-vulnerable:" + CTP.getPluginPermissionFromTag(plugins[k]), config.permissions[i][j]);
- } else {
- var domain = i.replace(/^\*\./g, '');
- Services.perms.add(NetUtil.newURI("http://" + domain), "plugin:" + CTP.getPluginPermissionFromTag(plugins[k]), config.permissions[i][j]);
- Services.perms.add(NetUtil.newURI("http://" + domain), "plugin-vulnerable:" + CTP.getPluginPermissionFromTag(plugins[k]), config.permissions[i][j]);
- Services.perms.add(NetUtil.newURI("https://" + domain), "plugin:" + CTP.getPluginPermissionFromTag(plugins[k]), config.permissions[i][j]);
- Services.perms.add(NetUtil.newURI("https://" + domain), "plugin-vulnerable:" + CTP.getPluginPermissionFromTag(plugins[k]), config.permissions[i][j]);
- }
- }
- }
- }
- if (Object.keys(config.permissions[i]).length === 0) {
- let perms = Services.perms.enumerator;
- while (perms.hasMoreElements()) {
- let perm = perms.getNext();
- try {
- // Firefox 41 and below
- if (perm.host == i) {
- Services.perms.remove(perm.host, perm.type);
- }
- } catch(e) {
- if (i.indexOf("http") == 0) {
- if (perm.matchesURI(NetUtil.newURI(i), false)) {
- perm.remove(NetUtil.newURI(i), perm.type);
- }
- } else {
- var domain = i.replace(/^\*\./g, '');
- if (perm.matchesURI(NetUtil.newURI("http://" + domain), false)) {
- perm.remove(NetUtil.newURI("http://" + domain), perm.type);
- }
- if (perm.matchesURI(NetUtil.newURI("https://" + i), false)) {
- perm.remove(NetUtil.newURI("https://" + domain), perm.type);
- }
- }
- }
- }
- }
- }
- }
- if (config.disablePrivateBrowsing) {
- Preferences.lock("browser.taskbar.lists.tasks.enabled", false);
- Preferences.lock("browser.privatebrowsing.autostart", false);
- var aboutPrivateBrowsing = {};
- aboutPrivateBrowsing.classID = Components.ID(uuid.generateUUID().toString());
- aboutPrivateBrowsing.factory = disableAbout(aboutPrivateBrowsing.classID,
- "Disable about:privatebrowsing - CCK",
- "privatebrowsing");
- CCK2.aboutFactories.push(aboutPrivateBrowsing);
- }
- if (config.noGetAddons) {
- Preferences.lock("extensions.getAddons.showPane", false);
- }
- if (config.noAddons) {
- Preferences.lock("xpinstall.enabled", false);
- }
- if (config.disablePDFjs) {
- Preferences.lock("pdfjs.disabled", true);
- }
- if (config.disableHello) {
- Preferences.lock("loop.enabled", false);
- }
- if (config.disablePocket) {
- Preferences.lock("browser.pocket.enabled", false);
- Preferences.lock("extensions.pocket.enabled", false);
- Preferences.lock("browser.newtabpage.activity-stream.feeds.section.topstories", false);
- }
- if (config.disableHeartbeat) {
- Preferences.lock("browser.selfsupport.url", "");
- }
- if (config.disableInContentPrefs) {
- Preferences.lock("browser.preferences.inContent", false);
- }
- if (config.disableSync) {
- var aboutAccounts = {};
- aboutAccounts.classID = Components.ID(uuid.generateUUID().toString());
- aboutAccounts.factory = disableAbout(aboutAccounts.classID,
- "Disable about:accounts - CCK",
- "accounts");
- CCK2.aboutFactories.push(aboutAccounts);
- var aboutSyncLog = {};
- aboutSyncLog.classID = Components.ID(uuid.generateUUID().toString());
- aboutSyncLog.factory = disableAbout(aboutSyncLog.classID,
- "Disable about:sync-log - CCK",
- "sync-log");
- CCK2.aboutFactories.push(aboutSyncLog);
- var aboutSyncProgress = {};
- aboutSyncProgress.classID = Components.ID(uuid.generateUUID().toString());
- aboutSyncProgress.factory = disableAbout(aboutSyncProgress.classID,
- "Disable about:sync-progress - CCK",
- "sync-progress");
- CCK2.aboutFactories.push(aboutSyncProgress);
- var aboutSyncTabs = {};
- aboutSyncTabs.classID = Components.ID(uuid.generateUUID().toString());
- aboutSyncTabs.factory = disableAbout(aboutSyncTabs.classID,
- "Disable about:sync-tabs - CCK",
- "sync-tabs");
- CCK2.aboutFactories.push(aboutSyncTabs);
- Preferences.lock("browser.syncPromoViewsLeftMap", JSON.stringify({bookmarks:0, passwords:0, addons:0}));
- Preferences.lock("browser.newtabpage.activity-stream.migrationExpired", true);
- Preferences.lock("identity.fxaccounts.enabled", false);
- }
- var disableAboutConfigFactory = null;
- if (config.disableAboutConfig) {
- var aboutConfig = {};
- aboutConfig.classID = Components.ID(uuid.generateUUID().toString());
- aboutConfig.factory = disableAbout(aboutConfig.classID,
- "Disable about:config - CCK",
- "config");
- CCK2.aboutFactories.push(aboutConfig);
- }
- if (config.disableAboutProfiles) {
- var aboutProfiles = {};
- aboutProfiles.classID = Components.ID(uuid.generateUUID().toString());
- aboutProfiles.factory = disableAbout(aboutProfiles.classID,
- "Disable about:profiles - CCK",
- "profiles");
- CCK2.aboutFactories.push(aboutProfiles);
- }
- if (config.disableAboutSupport) {
- var aboutSupport = {};
- aboutSupport.classID = Components.ID(uuid.generateUUID().toString());
- aboutSupport.factory = disableAbout(aboutSupport.classID,
- "Disable about:support - CCK",
- "support");
- CCK2.aboutFactories.push(aboutSupport);
- }
- if (config.disableAddonsManager) {
- var aboutAddons = {};
- aboutAddons.classID = Components.ID(uuid.generateUUID().toString());
- aboutAddons.factory = disableAbout(aboutAddons.classID,
- "Disable about:addons - CCK",
- "addons");
- CCK2.aboutFactories.push(aboutAddons);
- }
-
- if (config.alwaysDefaultBrowser) {
- var shellSvc = Cc["@mozilla.org/browser/shell-service;1"].getService(Ci.nsIShellService);
- if (shellSvc) {
- try {
- var isDefault = shellSvc.isDefaultBrowser(true, false);
- if (!isDefault) {
- shellSvc.setDefaultBrowser(true, false);
- }
- } catch (e) {
- // setDefaultBrowser errors on Yosemite, so we're just ignoring the error.
- // See Bugzilla bug #1063529
- }
- }
- }
- if (config.dontCheckDefaultBrowser) {
- Preferences.lock("browser.shell.checkDefaultBrowser", false);
- }
- if (config.dontUseDownloadDir) {
- Preferences.lock("browser.download.useDownloadDir", false);
- }
- if (config.disableFormFill) {
- Preferences.lock("browser.formfill.enable", false);
- }
- if (config.removeSmartBookmarks) {
- Preferences.lock("browser.places.smartBookmarksVersion", -1);
- }
- if (config.disableCrashReporter) {
- Preferences.lock("toolkit.crashreporter.enabled", false);
- Preferences.lock("browser.crashReports.unsubmittedCheck.autoSubmit", false);
- try {
- Cc["@mozilla.org/toolkit/crash-reporter;1"].
- getService(Ci.nsICrashReporter).submitReports = false;
- } catch (e) {
- // There seem to be cases where the crash reporter isn't defined
- }
- var aboutCrashes = {};
- aboutCrashes.classID = Components.ID(uuid.generateUUID().toString());
- aboutCrashes.factory = disableAbout(aboutCrashes.classID,
- "Disable about:crashes - CCK",
- "crashes");
- CCK2.aboutFactories.push(aboutCrashes);
- }
- if (config.disableTelemetry) {
- Preferences.lock("toolkit.telemetry.enabled", false);
- Preferences.lock("toolkit.telemetry.prompted", 999);
- Preferences.lock("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
- var aboutTelemetry = {};
- aboutTelemetry.classID = Components.ID(uuid.generateUUID().toString());
- aboutTelemetry.factory = disableAbout(aboutTelemetry.classID,
- "Disable about:telemetry - CCK",
- "telemetry");
- CCK2.aboutFactories.push(aboutTelemetry);
- }
- if (config.removeDeveloperTools) {
- Preferences.lock("devtools.scratchpad.enabled", false);
- Preferences.lock("devtools.responsiveUI.enabled", false);
- Preferences.lock("devtools.toolbar.enabled", false);
- Preferences.lock("devtools.styleeditor.enabled", false);
- Preferences.lock("devtools.debugger.enabled", false);
- Preferences.lock("devtools.profiler.enabled", false);
- Preferences.lock("devtools.errorconsole.enabled", false);
- Preferences.lock("devtools.inspector.enabled", false);
- }
- if (config.homePage && !config.lockHomePage) {
- Preferences.defaults.set("browser.startup.homepage", "data:text/plain,browser.startup.homepage=" + config.homePage);
- /* If you have a distribution.ini, browser.startup.homepage gets wiped out */
- /* We need to save it */
- if (!Preferences.isSet("browser.startup.homepage")) {
- Preferences.set("browser.startup.homepage", config.homePage);
- }
- }
- if (config.lockHomePage) {
- if (config.homePage) {
- Preferences.lock("browser.startup.homepage", config.homePage);
- } else {
- Preferences.lock("browser.startup.homepage");
- }
- Preferences.lock("pref.browser.homepage.disable_button.current_page", true);
- Preferences.lock("pref.browser.homepage.disable_button.bookmark_page", true);
- Preferences.lock("pref.browser.homepage.disable_button.restore_default", true);
- }
- if (config.noWelcomePage) {
- Preferences.lock("startup.homepage_welcome_url", "");
- Preferences.lock("startup.homepage_welcome_url.additional", "");
- Preferences.lock("browser.usedOnWindows10", true);
-
- } else if (config.welcomePage) {
- Preferences.lock("startup.homepage_welcome_url", config.welcomePage);
- }
- if (config.noUpgradePage) {
- Preferences.lock("browser.startup.homepage_override.mstone", "ignore");
- } else if (config.upgradePage) {
- Preferences.lock("startup.homepage_override_url", config.upgradePage);
- }
- if (config.dontShowRights) {
- Preferences.lock("browser.rights.override", true);
- var rightsVersion = Preferences.get("browser.rights.version");
- Preferences.lock("browser.rights." + rightsVersion + ".shown", true);
- }
- if (config.dontRememberPasswords) {
- Preferences.lock("signon.rememberSignons", false);
- }
- if (config.disableFirefoxHealthReport) {
- Preferences.lock("datareporting.healthreport.uploadEnabled", false);
- var aboutHealthReport = {};
- aboutHealthReport.classID = Components.ID(uuid.generateUUID().toString());
- aboutHealthReport.factory = disableAbout(aboutHealthReport.classID,
- "Disable about:healthreport - CCK",
- "healthreport");
- CCK2.aboutFactories.push(aboutHealthReport);
- }
- if (config.disableFirefoxHealthReportUpload) {
- Preferences.lock("datareporting.healthreport.uploadEnabled", false);
- }
- if (config.disableResetFirefox) {
- try {
- Cu.import("resource:///modules/UITour.jsm");
- UITour.origOnPageEvent = UITour.onPageEvent;
- UITour.onPageEvent = function(a, b) {
- var aEvent = b;
- if (!aEvent) {
- aEvent = a;
- }
- if (aEvent.detail.action == "resetFirefox") {
- Services.prompt.alert(null, "CCK2", "This has been disabled by your administrator");
- return;
- }
- UITour.origOnPageEvent(a, b);
- }
- Preferences.lock("browser.disableResetPrompt ", true);
- } catch (e) {}
- }
- if (config.disableFirefoxUpdates) {
- Preferences.lock("app.update.auto", false);
- Preferences.lock("app.update.enabled", false);
- }
- if (config.network) {
- for (var i in networkPrefMapping) {
- if (i in config.network) {
- Preferences.defaults.set(networkPrefMapping[i], config.network[i]);
- }
- if (config.network.locked) {
- Preferences.lock(networkPrefMapping[i]);
- }
- }
- }
- if (config.removeSnippets) {
- Preferences.lock("browser.newtabpage.activity-stream.disableSnippets", true);
- }
- // Fixup bad strings
- if ("helpMenu" in config) {
- if ("label" in config.helpMenu) {
- config.helpMenu.label = fixupUTF8(config.helpMenu.label);
- }
- if ("accesskey" in config.helpMenu) {
- config.helpMenu.accesskey = fixupUTF8(config.helpMenu.accesskey);
- }
- }
- if ("titlemodifier" in config) {
- config.titlemodifier = fixupUTF8(config.titlemodifier);
- }
- if ("defaultSearchEngine" in config) {
- config.defaultSearchEngine = fixupUTF8(config.defaultSearchEngine);
- }
- this.configs[config.id] = config;
- } catch (e) {
- errorCritical(e);
- }
- },
- getConfigs: function() {
- return this.configs;
- },
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "distribution-customization-complete":
- for (var id in this.configs) {
- var config = this.configs[id];
- // Due to bug 947838, we have to reinitialize default preferences
- {
- var iniFile = Services.dirsvc.get("XREAppDist", Ci.nsIFile);
- iniFile.leafName = "distribution";
- iniFile.append("distribution.ini");
- if (iniFile.exists()) {
- if (config.preferences) {
- for (var i in config.preferences) {
- // Workaround bug where this pref is coming is as a string from import
- if (i == "toolkit.telemetry.prompted") {
- config.preferences[i].value = parseInt(config.preferences[i].value);
- }
- if (!("locked" in config.preferences[i]) &&
- !("userset" in config.preferences[i]) &&
- !("clear" in config.preferences[i])) {
- if (Preferences.defaults.has(i)) {
- try {
- // If it's a complex preference, we need to set it differently
- Services.prefs.getComplexValue(i, Ci.nsIPrefLocalizedString).data;
- Preferences.defaults.set(i, "data:text/plain," + i + "=" + config.preferences[i].value);
- } catch (ex) {
- Preferences.defaults.set(i, config.preferences[i].value);
- }
- } else {
- Preferences.defaults.set(i, config.preferences[i].value);
- }
- }
- }
- }
- }
- if (config.homePage && !config.lockHomePage) {
- Preferences.defaults.set("browser.startup.homepage", "data:text/plain,browser.startup.homepage=" + config.homePage);
- /* If you have a distribution.ini, we changed browser.startup.homepage */
- /* Put it back */
- if (Preferences.get("browser.startup.homepage") == config.homePage) {
- Preferences.reset("browser.startup.homepage");
- }
- }
- if (config.network) {
- for (var i in networkPrefMapping) {
- if (i in config.network) {
- Preferences.defaults.set(networkPrefMapping[i], config.network[i]);
- }
- }
- }
- }
- // Try to install devices every time just in case get added after install
- if ("certs" in config && "devices" in config.certs) {
- let pkcs11;
- try {
- pkcs11 = Components.classes["@mozilla.org/security/pkcs11;1"].getService(Ci.nsIPKCS11);
- } catch (e) {
- pkcs11 = Components.classes["@mozilla.org/security/pkcs11moduledb;1"].getService(Ci.nsIPKCS11ModuleDB);
- }
- for (var i=0; i < config.certs.devices.length; i++) {
- var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
- try {
- file.initWithPath(config.certs.devices[i].path);
- if (file.exists()) {
- pkcs11.addModule(config.certs.devices[i].name, config.certs.devices[i].path, 0, 0);
- }
- } catch(e) {
- // Ignore path errors in case we are on different OSes
- }
- }
- }
- if (!config.firstrun && config.installedVersion == config.version) {
- continue;
- }
- if (config.removeSmartBookmarks) {
- var smartBookmarks = annos.getItemsWithAnnotation("Places/SmartBookmark", {});
- for (var i = 0; i < smartBookmarks.length; i++) {
- try {
- bmsvc.removeItem(smartBookmarks[i]);
- } catch (ex) {}
- }
- }
- let syncBookmarks = false;
- if ("getIdForItemAt" in bmsvc) {
- syncBookmarks = true;
- }
- if (config.removeDefaultBookmarks) {
- if (syncBookmarks) {
- var firefoxFolder = bmsvc.getIdForItemAt(bmsvc.bookmarksMenuFolder, 3);
- if ((firefoxFolder != -1) && (bmsvc.getItemType(firefoxFolder) == bmsvc.TYPE_FOLDER)) {
- var aboutMozilla = bmsvc.getIdForItemAt(firefoxFolder, 3);
- if (aboutMozilla != -1 &&
- bmsvc.getItemType(aboutMozilla) == bmsvc.TYPE_BOOKMARK &&
- /https?:\/\/www.mozilla.(com|org)\/.*\/about/.test(bmsvc.getBookmarkURI(aboutMozilla).spec)) {
- bmsvc.removeItem(firefoxFolder);
- }
- }
- var userAgentLocale = Preferences.defaults.get("general.useragent.locale");
- var gettingStartedURL = "https://www.mozilla.org/" + userAgentLocale + "/firefox/central/";
- var bookmarks = bmsvc.getBookmarkIdsForURI(NetUtil.newURI("https://www.mozilla.org/" + userAgentLocale + "/firefox/central/"));
- if (bookmarks.length == 0) {
- bookmarks = bmsvc.getBookmarkIdsForURI(NetUtil.newURI("http://www.mozilla.com/" + userAgentLocale + "/firefox/central/"));
- }
- if (bookmarks.length > 0) {
- bmsvc.removeItem(bookmarks[0])
- }
- var bookmarks = bmsvc.getBookmarkIdsForURI(NetUtil.newURI("https://www.mozilla.org/" + userAgentLocale + "/about/"));
- if (bookmarks.length == 0) {
- bookmarks = bmsvc.getBookmarkIdsForURI(NetUtil.newURI("http://www.mozilla.com/" + userAgentLocale + "/about/"));
- }
- if (bookmarks.length > 0) {
- var mozillaFolder = bmsvc.getFolderIdForItem(bookmarks[0]);
- if (mozillaFolder != -1) {
- var mozillaFolderIndex = bmsvc.getItemIndex(mozillaFolder);
- var mozillaFolderParent = bmsvc.getFolderIdForItem(mozillaFolder);
- bmsvc.removeItem(mozillaFolder);
- if (config.removeSmartBookmarks) {
- var separator = bmsvc.getIdForItemAt(mozillaFolderParent, mozillaFolderIndex-1);
- if (separator != -1) {
- bmsvc.removeItem(separator);
- }
- }
- }
- }
-
- } else {
- removeDefaultBookmarks();
- }
- }
-
- // If we detect an old CCK Wizard, remove it's bookmarks
- var bookmarksToRemove = [];
- if ("extension" in config) {
- var oldCCKVersion = Preferences.get("extensions." + config.extension.id + ".version", null);
- if (oldCCKVersion) {
- Preferences.reset("extensions." + config.extension.id + ".version");
- bookmarksToRemove = bookmarksToRemove.concat(annos.getItemsWithAnnotation(config.extension.id + "/" + oldCCKVersion, {}));
- }
- }
- if (config.installedVersion != config.version) {
- bookmarksToRemove = bookmarksToRemove.concat(annos.getItemsWithAnnotation(config.id + "/" + config.installedVersion, {}));
- bookmarksToRemove = bookmarksToRemove.concat(annos.getItemsWithAnnotation(config.installedVersion + "/" + config.installedVersion, {}));
- }
- // Just in case, remove bookmarks for this version too
- bookmarksToRemove = bookmarksToRemove.concat(annos.getItemsWithAnnotation(config.id + "/" + config.version, {}));
- if (syncBookmarks) {
- let bmFolders = [];
- for (var i = 0; i < bookmarksToRemove.length; i++) {
- try {
- var itemType = bmsvc.getItemType(bookmarksToRemove[i]);
- if (itemType == bmsvc.TYPE_FOLDER) {
- bmFolders.push(bookmarksToRemove[i]);
- } else {
- bmsvc.removeItem(bookmarksToRemove[i]);
- }
- } catch (e) {
- Components.utils.reportError(e);
- }
- }
- if (bmFolders.length > 0) {
- // Only remove folders if they are empty
- for (var i = 0; i < bmFolders.length; i++) {
- try {
- var bmID = bmsvc.getIdForItemAt(bmFolders[i], 0);
- if (bmID == -1) {
- bmsvc.removeItem(bmFolders[i]);
- } else {
- var newTitle = bmsvc.getItemTitle(bmFolders[i]) + " (" + (oldCCKVersion || config.installedVersion) + ")";
- bmsvc.setItemTitle(bmFolders[i], newTitle);
- }
- } catch (e) {
- bmsvc.removeItem(bmFolders[i]);
- }
- }
- }
- } else {
- removeOldBookmarks(bookmarksToRemove, oldCCKVersion || config.installedVersion);
- }
- if (config.bookmarks) {
- if (config.bookmarks.toolbar) {
- if (syncBookmarks) {
- addBookmarksSync(config.bookmarks.toolbar, bmsvc.toolbarFolder, config.id + "/" + config.version, config.removeDuplicateBookmarkNames);
- } else {
- addBookmarks(config.bookmarks.toolbar, PlacesUtils.bookmarks.toolbarGuid, config.id + "/" + config.version, config.removeDuplicateBookmarkNames);
- }
- }
- if (config.bookmarks.menu) {
- if (syncBookmarks) {
- addBookmarksSync(config.bookmarks.menu, bmsvc.bookmarksMenuFolder, config.id + "/" + config.version, config.removeDuplicateBookmarkNames);
- } else {
- addBookmarks(config.bookmarks.menu, PlacesUtils.bookmarks.menuGuid, config.id + "/" + config.version, config.removeDuplicateBookmarkNames);
- }
- }
- }
- if (config.searchplugins || config.defaultSearchEngine) {
- searchInitRun(function() {
- if (Array.isArray(config.searchplugins)) {
- for (var i=0; i < config.searchplugins.length; i++) {
- Services.search.addEngine(config.searchplugins[i], Ci.nsISearchEngine.DATA_XML, null, false, {
- onSuccess: function (engine) {
- if (engine.name == config.defaultSearchEngine) {
- Services.search.currentEngine = engine;
- }
- },
- onError: function (errorCode) {
- Components.utils.reportError("Engine install error: " + errorCode);
- // Ignore errors
- }
- });
- }
- } else {
- for (let enginename in config.searchplugins) {
- var engine = Services.search.getEngineByName(enginename);
- if (engine) {
- Services.search.removeEngine(engine);
- }
- Services.search.addEngine(config.searchplugins[enginename], Ci.nsISearchEngine.DATA_XML, null, false, {
- onSuccess: function (engine) {
- if (engine.name == config.defaultSearchEngine) {
- Services.search.currentEngine = engine;
- }
- },
- onError: function (errorCode) {
- Components.utils.reportError("Engine install error: " + errorCode);
- }
- });
- }
- }
-
- var defaultSearchEngine = Services.search.getEngineByName(config.defaultSearchEngine);
- if (defaultSearchEngine) {
- Services.search.currentEngine = defaultSearchEngine;
- }
- });
- }
- if (config.disableSearchEngineInstall) {
- try {
- Cu.import("resource:///modules/ContentLinkHandler.jsm");
- ContentLinkHandler.origOnLinkAdded = ContentLinkHandler.onLinkAdded;
- ContentLinkHandler.onLinkAdded = function(event, chromeGlobal) {
- if (event.originalTarget.rel == "search") {
- return;
- }
- ContentLinkHandler.origOnLinkAdded(event, chromeGlobal);
- };
- } catch (e) {
- // Just in case we are pre Firefox 31
- }
- }
- }
- break;
- case "browser-ui-startup-complete":
- var disableWebApps = false;
- for (var id in this.configs) {
- var config = this.configs[id];
- if (config.disableWebApps) {
- disableWebApps = true;
- break;
- }
- }
- if (!disableWebApps) {
- return;
- }
- try {
- Cu.import("resource://gre/modules/WebappManager.jsm");
- } catch (e) {
- try {
- Cu.import("resource:///modules/WebappManager.jsm");
- } catch (e) {}
- }
- try {
- WebappManager.doInstall = function() {
- var win = Services.wm.getMostRecentWindow("navigator:browser");
- var gBrowser = win.gBrowser;
- var gNavigatorBundle = win.gNavigatorBundle
- messageString = gNavigatorBundle.getString("xpinstallDisabledMessageLocked");;
- var options = {
- timeout: Date.now() + 30000
- };
- win.PopupNotifications.show(gBrowser.selectedBrowser, "xpinstall-disabled",
- messageString, "addons-notification-icon",
- null, null, options);
- };
- } catch(e) {
- // Web Apps was removed
- }
- break;
- case "final-ui-startup":
- for (var id in this.configs) {
- var config = this.configs[id];
- // Delay loading unnecessary modules
- // We should do this on a timeout
- loadModules(config);
- if (!config.firstrun && config.installedVersion == config.version) {
- return;
- }
- if ("certs" in config) {
- if ("override" in config.certs) {
- for (var i=0; i < config.certs.override.length; i++) {
- var xhr = new XMLHttpRequest();
- try {
- xhr.open("GET", "https://" + config.certs.override[i]);
- xhr.channel.notificationCallbacks = SSLExceptions;
- xhr.send(null);
- } catch (ex) {}
- }
- }
- var certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB);
- var certdb2 = certdb;
- try {
- certdb2 = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
- } catch (e) {}
- if (config.certs.ca) {
- for (var i=0; i < config.certs.ca.length; i++) {
- var certTrust;
- if (config.certs.ca[i].trust){
- certTrust = config.certs.ca[i].trust
- } else {
- certTrust = ",,";
- }
- if (config.certs.ca[i].url) {
- try {
- download(config.certs.ca[i].url, function(file, extraParams) {
- var istream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
- istream.init(file, -1, -1, false);
- var bstream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream);
- bstream.setInputStream(istream);
- var cert = bstream.readBytes(bstream.available());
- bstream.close();
- istream.close();
- if (/-----BEGIN CERTIFICATE-----/.test(cert)) {
- certdb2.addCertFromBase64(fixupCert(cert), extraParams.trust, "");
- } else {
- certdb.addCert(cert, extraParams.trust, "");
- }
- }, errorCritical, {trust: certTrust});
- } catch (e) {
- errorCritical("Unable to install " + config.certs.ca[i].url + " - " + e);
- }
- } else if (config.certs.ca[i].cert) {
- certdb2.addCertFromBase64(fixupCert(config.certs.ca[i].cert), certTrust, "");
- }
- }
- }
- if (config.certs.server) {
- for (var i=0; i < config.certs.server.length; i++) {
- try {
- download(config.certs.server[i], function(file) {
- try {
- certdb.importCertsFromFile(null, file, Ci.nsIX509Cert.SERVER_CERT);
- } catch(e) {
- // API removed in bugzilla #1064402 (FF47)
- }
- }, errorCritical);
- } catch (e) {
- errorCritical("Unable to install " + config.certs.server[i] + " - " + e);
- }
- }
- }
- }
- if (config.persona) {
- var temp = {};
- Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", temp);
- temp.LightweightThemeManager.currentTheme = config.persona;
- }
- if (config.addons) {
- Cu.import("resource://gre/modules/AddonManager.jsm");
- var numAddonsInstalled = 0;
- var numAddons = config.addons.length;
- let listener = {
- onInstallEnded: function(install, addon) {
- if (addon.isActive) {
- // restartless add-on, so we don't need to restart
- numAddons--;
- } else {
- numAddonsInstalled++;
- }
- if (numAddonsInstalled > 0 &&
- numAddonsInstalled == numAddons) {
- Services.startup.quit(Services.startup.eRestart | Services.startup.eAttemptQuit);
- }
- }
- }
- for (var i=0; i < config.addons.length; i++) {
- try {
- AddonManager.getInstallForURL(config.addons[i], function(addonInstall) {
- addonInstall.addListener(listener);
- addonInstall.install();
- }, "application/x-xpinstall");
- } catch (e) {
- try {
- AddonManager.getInstallForURL(config.addons[i], "application/x-xpinstall").then(addonInstall => {
- addonInstall.addListener(listener);
- addonInstall.install();
- });
- } catch (e) {
- errorCriticial(e);
- }
- }
- }
- }
- }
- break;
- case "load-extension-defaults":
- if (gBundlePrefFiles.length > 0) {
- // Create a temporary scope so the pref function works
- var temp = {};
- temp.pref = function(a, b) {
- Preferences.defaults.set(a, b);
- }
- gBundlePrefFiles.forEach(function(prefFile) {
- Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
- .getService(Components.interfaces.mozIJSSubScriptLoader)
- .loadSubScript(prefFile, temp);
- });
- }
- break;
- case "quit-application":
- var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
- for (var i=0; i < CCK2.aboutFactories.length; i++)
- registrar.unregisterFactory(CCK2.aboutFactories[i].classID, CCK2.aboutFactories[i].factory);
- break;
- }
- }
-}
-
-async function removeDefaultBookmarks() {
- var firefoxFolder = await PlacesUtils.bookmarks.fetch({
- parentGuid: PlacesUtils.bookmarks.menuGuid,
- index: 0});
- if (firefoxFolder && firefoxFolder.type == PlacesUtils.bookmarks.TYPE_FOLDER) {
- await PlacesUtils.bookmarks.remove(firefoxFolder);
- }
- var userAgentLocale = Preferences.defaults.get("general.useragent.locale");
- if (!userAgentLocale) {
- userAgentLocale = Services.locale.getRequestedLocales()[0];
- }
- var userAgentLocale = "en-US";
- var gettingStartedURL = "https://www.mozilla.org/" + userAgentLocale + "/firefox/central/";
- let bookmarks = [];
- await PlacesUtils.bookmarks.fetch({url: gettingStartedURL}, b => bookmarks.push(b));
- for (let bookmark of bookmarks) {
- await PlacesUtils.bookmarks.remove(bookmark);
- }
-}
-
-async function removeOldBookmarks(oldBookmarks, oldVersion) {
- let bmFolders = [];
- for (var i = 0; i < oldBookmarks.length; i++) {
- try {
- let guid = await PlacesUtils.promiseItemGuid(oldBookmarks[i]);
- let bookmark = await PlacesUtils.bookmarks.fetch(guid);
- if (bookmark.type == PlacesUtils.bookmarks.TYPE_FOLDER) {
- bmFolders.push(bookmark);
- } else {
- await PlacesUtils.bookmarks.remove(bookmark);
- }
- } catch (ex) {
- Components.utils.reportError(ex);
- }
- }
- if (bmFolders.length > 0) {
- // Only remove folders if they are empty
- for (var i = 0; i < bmFolders.length; i++) {
- let bookmarks = [];
- await PlacesUtils.bookmarks.fetch({parentGuid: bmFolders[i].guid, index: 0}, b => bookmarks.push(b));
- if (bookmarks.length == 0) {
- await PlacesUtils.bookmarks.remove(bmFolders[i]);
- } else {
- PlacesUtils.bookmarks.update({guid: bmFolders[i].guid,
- title: `${bmFolders[i].title} (${oldVersion})`});
- }
- }
- }
-}
-
-function loadModules(config) {
- let globalMM = Cc["@mozilla.org/globalmessagemanager;1"].getService();
- globalMM.addMessageListener("cck2:get-configs", function(message) {
- return CCK2.configs;
- });
- globalMM.addMessageListener("cck2:open-url", function(message) {
- var win = Services.wm.getMostRecentWindow("navigator:browser");
- if (win) {
- win.openUILinkIn(message.data.url, message.data.where);
- }
- });
- Cu.import("resource://cck2/CCK2AboutDialogOverlay.jsm");
- Cu.import("resource://cck2/CCK2AboutAddonsOverlay.jsm");
- Cu.import("resource://cck2/CCK2PreferencesOverlay.jsm");
- globalMM.loadFrameScript("resource://cck2/CCK2Framescript.js", true);
- globalMM.loadFrameScript("resource://cck2/CCK2AboutHomeFramescript.js", true);
- globalMM.loadFrameScript("resource://cck2/CAPSCheckLoadURIFramescript.js", true);
- globalMM.loadFrameScript("resource://cck2/CAPSClipboardFramescript.js", true);
- Cu.import("resource://cck2/CCK2AboutSupportOverlay.jsm");
- Cu.import("resource://cck2/CCK2BrowserOverlay.jsm");
- Cu.import("resource://cck2/CCK2FileBlock.jsm");
-}
-
-function addRegistryKey(RootKey, Key, Name, NameValue, Type) {
- const nsIWindowsRegKey = Ci.nsIWindowsRegKey;
- var key = null;
-
- try {
- key = Cc["@mozilla.org/windows-registry-key;1"]
- .createInstance(nsIWindowsRegKey);
- var rootKey;
- switch (RootKey) {
- case "HKEY_CLASSES_ROOT":
- rootKey = nsIWindowsRegKey.ROOT_KEY_CLASSES_ROOT;
- break;
- case "HKEY_CURRENT_USER":
- rootKey = nsIWindowsRegKey.ROOT_KEY_CURRENT_USER;
- break;
- default:
- rootKey = nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE;
- break;
- }
-
- key.create(rootKey, Key, nsIWindowsRegKey.ACCESS_WRITE);
-
- switch (Type) {
- case "REG_DWORD":
- key.writeIntValue(Name, NameValue);
- break;
- case "REG_QWORD":
- key.writeInt64Value(Name, NameValue);
- break;
- case "REG_BINARY":
- key.writeBinaryValue(Name, NameValue);
- break;
- case "REG_SZ":
- default:
- key.writeStringValue(Name, NameValue);
- break;
- }
- key.close();
- } catch (ex) {
- /* This could fail if you don't have the right authority on Windows */
- if (key) {
- key.close();
- }
- }
-}
-
-function addBookmarksSync(bookmarks, destination, annotation, removeDuplicateBookmarkNames) {
- for (var i =0; i < bookmarks.length; i++) {
- if (bookmarks[i].folder) {
- var newFolderId = bmsvc.createFolder(destination, fixupUTF8(bookmarks[i].name), bmsvc.DEFAULT_INDEX);
- annos.setItemAnnotation(newFolderId, annotation, "true", 0, annos.EXPIRE_NEVER);
- addBookmarksSync(bookmarks[i].folder, newFolderId, annotation, removeDuplicateBookmarkNames);
- } else if (bookmarks[i].type == "separator") {
- var separatorId = bmsvc.insertSeparator(destination, bmsvc.DEFAULT_INDEX);
- annos.setItemAnnotation(separatorId, annotation, "true", 0, annos.EXPIRE_NEVER);
- } else {
- try {
- var uri = NetUtil.newURI(bookmarks[i].location);
- var title = fixupUTF8(bookmarks[i].name);
- var bookmarkIds = bmsvc.getBookmarkIdsForURI(uri, {}, {});
- if (bookmarkIds.length > 0) {
- // Remove duplicate bookmarks
- for (var j=0; j < bookmarkIds.length; j++) {
- // Unfortunately there's no way to generically
- // check for any annotation, so we assume it is ours.
- // We at least check if the destination is the same
- let folderID = bmsvc.getFolderIdForItem(bookmarkIds[j]);
- if (bmsvc.getItemTitle(bookmarkIds[j]) == title &&
- destination == folderID) {
- bmsvc.removeItem(bookmarkIds[j]);
- }
- }
- }
- if (removeDuplicateBookmarkNames) {
- // This is hideous. There's no way to get the number of children
- // in a folder, so we do a loop to get a quick count so we can
- // work backwards.
- let numItems = 0;
- do {
- let bmId = bmsvc.getIdForItemAt(destination, numItems);
- if (bmId == -1) {
- break;
- }
- numItems++;
- } while (numItems < 50) // Failsafe just in case we somehow end up in a loop
- for (var k=numItems; k > 0; k--) {
- let bmId = bmsvc.getIdForItemAt(destination, k-1);
- if (bmId == -1) { // Shouldn't happen
- break;
- }
- if (bmsvc.getItemTitle(bmId) == title) {
- bmsvc.removeItem(bmId);
- }
- }
- }
- var newBookmarkId = bmsvc.insertBookmark(destination, uri, bmsvc.DEFAULT_INDEX, title);
- annos.setItemAnnotation(newBookmarkId, annotation, "true", 0, annos.EXPIRE_NEVER);
- } catch(e) {
- Components.utils.reportError(e);
- }
- }
- }
-}
-
-let BOOKMARK_GUID_PREFIX = "CCKB-";
-let FOLDER_GUID_PREFIX = "CCKF-";
-let SEPARATOR_GUID_PREFIX = "CCKS-";
-
-function generateGuidWithPrefix(prefix) {
- // Generates a random GUID and replace its beginning with the given
- // prefix. We do this instead of just prepending the prefix to keep
- // the correct character length.
- return prefix + PlacesUtils.history.makeGuid().substring(prefix.length);
-}
-
-async function addBookmarks(bookmarks, parentGuid, annotation, removeDuplicateBookmarkNames) {
- for (var i =0; i < bookmarks.length; i++) {
- if (bookmarks[i].folder) {
- let guid = generateGuidWithPrefix(FOLDER_GUID_PREFIX);
- await PlacesUtils.bookmarks.insert({
- type: PlacesUtils.bookmarks.TYPE_FOLDER,
- title: fixupUTF8(bookmarks[i].name),
- guid,
- parentGuid
- });
- let newFolderId = await PlacesUtils.promiseItemId(guid);
- annos.setItemAnnotation(newFolderId, annotation, "true", 0, annos.EXPIRE_NEVER);
- addBookmarks(bookmarks[i].folder, guid, annotation, removeDuplicateBookmarkNames);
- } else if (bookmarks[i].type == "separator") {
- let guid = generateGuidWithPrefix(SEPARATOR_GUID_PREFIX);
- await PlacesUtils.bookmarks.insert({
- type: PlacesUtils.bookmarks.TYPE_SEPARATOR,
- guid,
- parentGuid
- });
- let newSeparatorId = await PlacesUtils.promiseItemId(guid);
- annos.setItemAnnotation(newSeparatorId, annotation, "true", 0, annos.EXPIRE_NEVER);
- } else {
- try {
- var title = fixupUTF8(bookmarks[i].name);
- let bookmarksArray = [];
- await PlacesUtils.bookmarks.fetch({url: bookmarks[i].location}, b => bookmarksArray.push(b));
- for (let bookmark of bookmarksArray) {
- // Unfortunately there's no way to generically
- // check for any annotation, so we assume it is ours.
- // We at least check if the destination is the same
- if (bookmark.title == title &&
- bookmark.parentGuid == parentGuid) {
- }
- await PlacesUtils.bookmarks.remove(bookmark);
- }
- if (removeDuplicateBookmarkNames) {
- try {
- await PlacesUtils.bookmarks.fetch({parentGuid}, b => bookmarksArray.push(b));
- for (var k=bookmarksArray.length; k > 0; k--) {
- if (bookmarks[i].title == title) {
- await PlacesUtils.bookmarks.remove(bookmarksArray[i]);
- }
- }
- } catch(e) {
- // Bad index errors in some cases
- }
- }
- let guid = generateGuidWithPrefix(BOOKMARK_GUID_PREFIX);
- await PlacesUtils.bookmarks.insert({
- url: bookmarks[i].location,
- title: fixupUTF8(bookmarks[i].name),
- guid,
- parentGuid
- });
- let newBookmarkId = await PlacesUtils.promiseItemId(guid);
- annos.setItemAnnotation(newBookmarkId, annotation, "true", 0, annos.EXPIRE_NEVER);
- } catch(e) {
- Components.utils.reportError(e);
- }
- }
- }
-}
-
-function errorCritical(e) {
- var stack = e.stack;
- if (!stack) {
- stack = Error().stack;
- }
- Components.utils.reportError("CCK2: " + e + "\n\n" + stack);
-}
-
-/**
- * If the search service is not available, passing function
- * to search service init
- */
-function searchInitRun(func)
-{
- if (Services.search.init && !Services.search.isInitialized)
- Services.search.init(func);
- else
- func();
-}
-
-/**
- * Remove all extraneous info from a certificates. addCertFromBase64 requires
- * just the cert with no whitespace or anything.
- *
- * @param {String} certificate text
- * @returns {String} certificate text cleaned up
- */
-function fixupCert(cert) {
- var beginCert = "-----BEGIN CERTIFICATE-----";
- var endCert = "-----END CERTIFICATE-----";
-
- cert = cert.replace(/[\r\n]/g, "");
- var begin = cert.indexOf(beginCert);
- var end = cert.indexOf(endCert);
- return cert.substring(begin + beginCert.length, end);
-}
-
-/**
- * Download the given URL to the user's download directory
- *
- * @param {String} URL of the file
- * @param {function} Function to call on success - called with nsIFile
- * @param {String} Function to call on failure
- * @param {Object} extraParams passed to callback
- * @returns {nsIFile} Downloaded file
- */
-function download(url, successCallback, errorCallback, extraParams) {
- var uri = Services.io.newURI(url, null, null);
-
- var channel = Services.io.newChannelFromURI(uri);
-
- var downloader = Cc["@mozilla.org/network/downloader;1"].createInstance(Ci.nsIDownloader);
- var listener = {
- onDownloadComplete: function(downloader, request, ctxt, status, result) {
- if (Components.isSuccessCode(status)) {
- result.QueryInterface(Ci.nsIFile);
- if (result.exists() && result.fileSize > 0) {
- successCallback(result, extraParams);
- return;
- }
- }
- errorCallback(new Error("Download failed (" + status + " for " + url));
- }
- }
- downloader.init(listener, null);
- channel.asyncOpen(downloader, null);
-}
-
-/**
- * Used to allow the overriding of certificates
- */
-var SSLExceptions = {
- getInterface: function(uuid) {
- return this.QueryInterface(uuid);
- },
- QueryInterface: function(uuid) {
- if (uuid.equals(Ci.nsIBadCertListener2) ||
- uuid.equals(Ci.nsISupports))
- return this;
- throw Components.results.NS_ERROR_NO_INTERFACE;
- },
-
- notifyCertProblem: function (socketInfo, status, targetSite) {
- status.QueryInterface(Ci.nsISSLStatus);
-
- let flags = 0;
-
- if (status.isUntrusted)
- flags |= override.ERROR_UNTRUSTED;
- if (status.isDomainMismatch)
- flags |= override.ERROR_MISMATCH;
- if (status.isNotValidAtThisTime)
- flags |= override.ERROR_TIME;
-
- var hostInfo = targetSite.split(":");
-
- override.rememberValidityOverride(
- hostInfo[0],
- hostInfo[1],
- status.serverCert,
- flags,
- false);
- return true; // Don't show error UI
- }
-};
-
-var gAboutXHTML = '' +
-'' +
-'
' +
-' ' +
-' ' +
-' ' +
-' ' +
-' ' +
-' ' +
-'
' +
-'
%s
' +
-' ' +
-'
' +
-'
' +
-'
Access to %s has been disabled by your administrator.
' +
-'
' +
-'
' +
-'
' +
-' ' +
-' ' +
-'' +
-'';
-
-/**
- * Register a component that replaces an about page
- *
- * @param {String} The ClassID of the class being registered.
- * @param {String} The name of the class being registered.
- * @param {String} The type of about to be disabled (config/addons/privatebrowsing)
- * @returns {Object} The factory to be used to unregister
- */
-function disableAbout(aClass, aClassName, aboutType) {
- var gAbout = {
- newChannel : function (aURI, aLoadInfo) {
- var url = "data:text/html," + gAboutXHTML;
- var channel = Services.io.newChannelFromURIWithLoadInfo(NetUtil.newURI(url), aLoadInfo);
- channel.originalURI = aURI;
- return channel;
- },
- getURIFlags : function getURIFlags(aURI) {
- return Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT;
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
-
- createInstance: function(outer, iid) {
- return this.QueryInterface(iid);
- },
- };
-
- var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
- registrar.registerFactory(aClass, aClassName, "@mozilla.org/network/protocol/about;1?what=" + aboutType, gAbout);
- return gAbout;
-}
-
-var documentObserver = {
- observe: function observe(subject, topic, data) {
- if (subject instanceof Ci.nsIDOMWindow) {
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- if (topic == "chrome-document-global-created" ||
- (topic == "content-document-global-created" && win.document.documentURIObject.scheme == "about")) {
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var configs = CCK2.getConfigs();
- for (var id in configs) {
- var config = configs[id];
- if (config.hiddenUI) {
- for (var i=0; i < config.hiddenUI.length; i++) {
- var uiElements = doc.querySelectorAll(config.hiddenUI[i]);
- for (var j=0; j < uiElements.length; j++) {
- var uiElement = uiElements[j];
- uiElement.setAttribute("hidden", "true");
- }
- }
- }
- }
- }, false);
- }
- }
- }
-}
-
-function copyDir(aOriginal, aDestination) {
- var enumerator = aOriginal.directoryEntries;
- while (enumerator.hasMoreElements()) {
- var file = enumerator.getNext().QueryInterface(Components.interfaces.nsIFile);
- if (file.isDirectory()) {
- var subdir = aDestination.clone();
- subdir.append(file.leafName);
- subdir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
- copyDir(file, subdir);
- } else {
- file.copyTo(aDestination, null);
- }
- }
-}
-
-function loadBundleDirs() {
- var cck2BundleDir = Services.dirsvc.get("GreD", Ci.nsIFile);
- cck2BundleDir.append("cck2");
- cck2BundleDir.append("bundles");
- if (!cck2BundleDir.exists() || !cck2BundleDir.isDirectory()) {
- return;
- }
- var enumerator = cck2BundleDir.directoryEntries;
- while (enumerator.hasMoreElements()) {
- var file = enumerator.getNext().QueryInterface(Ci.nsIFile);
- var dirName = file.leafName;
- file.append("chrome.manifest");
- Components.manager.QueryInterface(Ci.nsIComponentRegistrar).autoRegister(file);
- file.leafName = "defaults";
- file.append("preferences");
- if (!file.exists() || !file.isDirectory()) {
- continue;
- }
- // In order to load prefs, we have to use a chrome URL.
- // Create a resource that maps to the prefs directory.
- var prefAlias = Services.io.newFileURI(file);
- var resource = Services.io.getProtocolHandler("resource")
- .QueryInterface(Ci.nsIResProtocolHandler);
- resource.setSubstitution(dirName + "_prefs", prefAlias);
- var prefEnumerator = file.directoryEntries;
- while (prefEnumerator.hasMoreElements()) {
- var prefFile = prefEnumerator.getNext().QueryInterface(Ci.nsIFile);
- gBundlePrefFiles.push("resource://" + dirName + "_prefs/" + prefFile.leafName);
- }
- }
-}
-
-Services.obs.addObserver(CCK2, "distribution-customization-complete", false);
-Services.obs.addObserver(CCK2, "final-ui-startup", false);
-Services.obs.addObserver(CCK2, "browser-ui-startup-complete", false);
-Services.obs.addObserver(documentObserver, "chrome-document-global-created", false);
-Services.obs.addObserver(documentObserver, "content-document-global-created", false);
-Services.obs.addObserver(CCK2, "load-extension-defaults", false);
-try {
- loadBundleDirs()
-} catch (e) {
- Components.utils.reportError(e);
-}
diff --git a/linux/build/preferences/cck2/modules/CCK2AboutAddonsOverlay.jsm b/linux/build/preferences/cck2/modules/CCK2AboutAddonsOverlay.jsm
deleted file mode 100644
index ea1bbd1..0000000
--- a/linux/build/preferences/cck2/modules/CCK2AboutAddonsOverlay.jsm
+++ /dev/null
@@ -1,111 +0,0 @@
-/* This file overlays about:addons. It does the following: */
-/* Workaround https://bugzilla.mozilla.org/show_bug.cgi?id=1132971 */
-/* Hide the "Install Add-on From File" menu if xpinstall.enabled is false */
-/* Hides the discover pane if xpinstall.enabled is false */
-/* Hides the add-on entry if specified in the CCK2 config */
-
-const EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://cck2/CCK2.jsm");
-
-var addonId = "cck2wizard@kaply.com";
-
-var observer = {
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "chrome-document-global-created":
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var url = doc.location.href.split("?")[0].split("#")[0];
- switch (url) {
- case "about:addons":
- case "chrome://mozapps/content/extensions/extensions.xul":
- var configs = CCK2.getConfigs();
- var hiddenAddons = [];
- var requiredAddons = [];
- for (let id in configs) {
- var config = configs[id];
- if (config && "extension" in config && config.extension.hide) {
- hiddenAddons.push(config.extension.id);
- }
- if (config.requiredAddons) {
- requiredAddons.push.apply(requiredAddons, config.requiredAddons.split(","));
- }
- }
- if (hiddenAddons.length > 0 || requiredAddons.length > 0) {
- var ss;
- for (var i = 0; i < doc.styleSheets.length; i++) {
- if (doc.styleSheets[i].href == "chrome://mozapps/skin/extensions/extensions.css") {
- ss = doc.styleSheets[i];
- break;
- }
- }
- for (var i=0; i < hiddenAddons.length; i++) {
- ss.insertRule("richlistitem[value='" + hiddenAddons[i] + "'] { display: none;}", ss.cssRules.length);
- }
- for (var i=0; i < requiredAddons.length; i++) {
- ss.insertRule("richlistitem[value='" + requiredAddons[i] + "'] button[anonid='disable-btn'] { display: none;}", ss.cssRules.length);
- ss.insertRule("richlistitem[value='" + requiredAddons[i] + "'] button[anonid='remove-btn'] { display: none;}", ss.cssRules.length);
- }
- if (requiredAddons.length > 0) {
- win.gViewController.commands.cmd_disableItem.origIsEnabled = win.gViewController.commands.cmd_disableItem.isEnabled;
- win.gViewController.commands.cmd_disableItem.isEnabled = function(aAddon) { if (aAddon && requiredAddons.indexOf(aAddon.id) != -1) return false; return this.origIsEnabled;}
- win.gViewController.commands.cmd_uninstallItem.origIsEnabled = win.gViewController.commands.cmd_disableItem.isEnabled;
- win.gViewController.commands.cmd_uninstallItem.isEnabled = function(aAddon) { if (aAddon && requiredAddons.indexOf(aAddon.id) != -1) return false; return this.origIsEnabled;}
- }
- }
- var showDiscoverPane = true;
- var xpinstallEnabled = true;
- try {
- xpinstallEnabled = Services.prefs.getBoolPref("xpinstall.enabled");
- } catch (e) {}
- try {
- showDiscoverPane = Services.prefs.getBoolPref("extensions.getAddons.showPane");
- } catch (e) {}
- if (!xpinstallEnabled || !showDiscoverPane) {
- // Work around Mozilla bug 1132971
- // Hide the discover pane if it is the selected pane
- if (E("view-port", doc) && E("view-port", doc).selectedIndex == 0) {
- try {
- win.gViewController.loadView("addons://list/extension");
- } catch (ex) {
- // This fails with Webconverger installed. Ignore it.
- }
- }
- }
- if (!xpinstallEnabled) {
- // Hide the "Install Add-on From File" separator
- hide(E("utils-installFromFile-separator", doc));
- // Hide the "Install Add-on From File" menuitem
- hide(E("utils-installFromFile", doc));
- win.gDragDrop.onDragOver = function(event) {
- event.dataTransfer.dropEffect = "none";
- event.stopPropagation();
- event.preventDefault();
- };
- }
- break;
- }
- }, false);
- break;
- }
- }
-}
-
-Services.obs.addObserver(observer, "chrome-document-global-created", false);
-
-function E(id, context) {
- var element = context.getElementById(id);
- return element;
-}
-
-function hide(element) {
- if (element) {
- element.setAttribute("hidden", "true");
- }
-}
diff --git a/linux/build/preferences/cck2/modules/CCK2AboutDialogOverlay.jsm b/linux/build/preferences/cck2/modules/CCK2AboutDialogOverlay.jsm
deleted file mode 100644
index 630e27b..0000000
--- a/linux/build/preferences/cck2/modules/CCK2AboutDialogOverlay.jsm
+++ /dev/null
@@ -1,33 +0,0 @@
-/* This file is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1139509 */
-/* It bolds the Firefox version in the about dialog and unbolds the distribution information */
-/* It can be removed once Firefox 38 ESR is out of support */
-
-const EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-
-var observer = {
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "chrome-document-global-created":
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var url = doc.location.href.split("?")[0].split("#")[0];
- switch (url) {
- case "chrome://browser/content/aboutDialog.xul":
- doc.querySelector("#version").style.fontWeight = "bold";
- doc.querySelector("#distribution").style.fontWeight = "normal";
- doc.querySelector("#distributionId").style.fontWeight = "normal";
- break;
- }
- }, false);
- break;
- }
- }
-}
-
-Services.obs.addObserver(observer, "chrome-document-global-created", false);
diff --git a/linux/build/preferences/cck2/modules/CCK2AboutHomeFramescript.js b/linux/build/preferences/cck2/modules/CCK2AboutHomeFramescript.js
deleted file mode 100644
index 98e5b3d..0000000
--- a/linux/build/preferences/cck2/modules/CCK2AboutHomeFramescript.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/* This file overrides about:home. It does the following:
- * Remove the sync button if Sync is disabled
- * Remove the Addons button if Sync is disabled
- * Remove the snippets if snippets are disabled
- */
-
-const EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-
-var configs = null;
-
-var observer = {
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "content-document-global-created":
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var url = doc.location.href.split("?")[0].split("#")[0];
- switch (url) {
- case "about:home":
- case "chrome://browser/content/abouthome/aboutHome.xhtml":
- if (!configs) {
- // TODO - Make this Async
- configs = sendSyncMessage("cck2:get-configs")[0];
- }
- for (let id in configs) {
- var config = configs[id];
- if (config.disableSync) {
- remove(E("sync", doc));
- }
- if (config.disableAddonsManager) {
- remove(E("addons", doc));
- }
- if (config.disableWebApps) {
- remove(E("apps", doc));
- }
- if (config.removeSnippets) {
- var snippets = E("snippets", doc);
- if (snippets) {
- snippets.style.display = "none";
- }
- }
- if (config.hiddenUI) {
- for (var i=0; i < config.hiddenUI.length; i++) {
- var uiElements = doc.querySelectorAll(config.hiddenUI[i]);
- for (var j=0; j < uiElements.length; j++) {
- var uiElement = uiElements[j];
- uiElement.setAttribute("hidden", "true");
- }
- }
- }
- }
- break;
- }
- }, false);
- break;
- }
- }
-}
-Services.obs.addObserver(observer, "content-document-global-created", false);
-
-addEventListener("unload", function() {
- Services.obs.removeObserver(observer, "content-document-global-created", false);
-})
-
-function E(id, context) {
- var element = context.getElementById(id);
- return element;
-}
-
-function remove(element) {
- if (element && element.parentNode)
- element.parentNode.removeChild(element);
-}
diff --git a/linux/build/preferences/cck2/modules/CCK2AboutSupportOverlay.jsm b/linux/build/preferences/cck2/modules/CCK2AboutSupportOverlay.jsm
deleted file mode 100644
index 4da8fba..0000000
--- a/linux/build/preferences/cck2/modules/CCK2AboutSupportOverlay.jsm
+++ /dev/null
@@ -1,62 +0,0 @@
-/* This file overrides about:support It does the following:
- * Remove the reset Firefox button if disableResetFirefox is set
- * Remove the safe mode Button if disableSafeMode is set
- * Remove the box if both are set
- */
-
-const EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://cck2/CCK2.jsm");
-
-var configs = null;
-
-var observer = {
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "chrome-document-global-created":
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var url = doc.location.href.split("?")[0].split("#")[0];
- switch (url) {
- case "about:support":
- case "chrome://global/content/aboutSupport.xhtml":
- if (!configs) {
- configs = CCK2.getConfigs();
- }
- for (let id in configs) {
- var config = configs[id];
- if (config.disableResetFirefox) {
- remove(E("reset-box", doc));
- }
- if (config.disableSafeMode) {
- remove(E("safe-mode-box", doc));
- }
- if (config.disableResetFirefox &&
- config.disableSafeMode) {
- remove(E("action-box", doc));
- }
- }
- break;
- }
- }, false);
- break;
- }
- }
-}
-Services.obs.addObserver(observer, "chrome-document-global-created", false);
-
-function E(id, context) {
- var element = context.getElementById(id);
- return element;
-}
-
-
-function remove(element) {
- if (element && element.parentNode)
- element.parentNode.removeChild(element);
-}
diff --git a/linux/build/preferences/cck2/modules/CCK2BrowserOverlay.jsm b/linux/build/preferences/cck2/modules/CCK2BrowserOverlay.jsm
deleted file mode 100644
index 52d59fb..0000000
--- a/linux/build/preferences/cck2/modules/CCK2BrowserOverlay.jsm
+++ /dev/null
@@ -1,373 +0,0 @@
-/* This file modifies the main browser window. It does the following:
- * Goes through the hiddenUI list and hides any UI
- *
- */
-
-const EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource:///modules/CustomizableUI.jsm");
-Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
-Cu.import("resource://cck2/CCK2.jsm");
-
-var configs = null;
-
-var observer = {
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "chrome-document-global-created":
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var url = doc.location.href.split("?")[0].split("#")[0];
- switch (url) {
- case "chrome://browser/content/browser.xul":
- // Workaround https://bugzilla.mozilla.org/show_bug.cgi?id=1149617
- var origSetReportPhishingMenu = win.gSafeBrowsing.setReportPhishingMenu;
- win.gSafeBrowsing.setReportPhishingMenu = function() {
- try {
- origSetReportPhishingMenu();
- } catch (e) {}
- }
-
- win.addEventListener("unload", function onUnload(event) {
- win.removeEventListener("unload", onUnload, false);
- var panelUIPopup = doc.getElementById("PanelUI-popup");
- if (panelUIPopup) {
- E("PanelUI-popup", doc).removeEventListener("popupshowing", onPanelShowing, false);
- }
- });
- var panelUIPopup = doc.getElementById("PanelUI-popup");
- if (panelUIPopup) {
- E("PanelUI-popup", doc).addEventListener("popupshowing", onPanelShowing, false);
- }
- var appMenuPopup = doc.getElementById("appMenu-popup");
- if (appMenuPopup) {
- E("appMenu-popup", doc).addEventListener("popupshowing", onAppMenuShowing, false);
- }
- configs = CCK2.getConfigs();
- for (let id in configs) {
- config = configs[id];
- if (config.disablePrivateBrowsing &&
- PrivateBrowsingUtils.isWindowPrivate(win)) {
- win.setTimeout(function() {
- Services.prompt.alert(win, "Private Browsing", "Private Browsing has been disabled by your administrator");
- win.close();
- }, 0, false);
- }
- if (config.disablePrivateBrowsing) {
- disablePrivateBrowsing(doc);
- }
- if (config.disableSync) {
- disableSync(doc);
- }
- if (config.disableAddonsManager) {
- disableAddonsManager(doc);
- }
- if (config.removeDeveloperTools) {
- Services.tm.mainThread.dispatch(function() {
- removeDeveloperTools(doc);
- }, Ci.nsIThread.DISPATCH_NORMAL);
- }
- if (config.disableErrorConsole) {
- disableErrorConsole(doc);
- }
- if (config.disableFirefoxHealthReport) {
- var healthReportMenu = doc.getElementById("healthReport");
- if (healthReportMenu) {
- healthReportMenu.parentNode.removeChild(healthReportMenu);
- }
- }
- if (config.removeSafeModeMenu) {
- hide(E("helpSafeMode", doc));
- }
- if (config.titlemodifier) {
- doc.getElementById("main-window").setAttribute("titlemodifier", config.titlemodifier);
- }
- if (config.removeSetDesktopBackground) {
- // Because this is on a context menu, we can't use "hidden"
- if (E("context-setDesktopBackground", doc)) {
- E("context-setDesktopBackground", doc).setAttribute("style", "display: none;");
- }
- }
- if (config.disableWebApps) {
- CustomizableUI.destroyWidget("web-apps-button");
- hide(E("menu_openApps", doc));
- }
- if (config.disableHello) {
- CustomizableUI.destroyWidget("loop-button");
- hide(E("menu_openLoop", doc));
- }
- if (config.disablePocket) {
- CustomizableUI.destroyWidget("pocket-button");
- }
- if (config.disableSharePage) {
- CustomizableUI.destroyWidget("social-share-button");
- // Because these are on a context menu, we can't use "hidden"
- if (E("context-sharelink", doc)) {
- E("context-sharelink", doc).setAttribute("style", "display: none;");
- }
- if (E("context-shareselect", doc)) {
- E("context-shareselect", doc).setAttribute("style", "display: none;");
- }
- if (E("context-shareimage", doc)) {
- E("context-shareimage", doc).setAttribute("style", "display: none;");
- }
- if (E("context-sharevideo", doc)) {
- E("context-sharevideo", doc).setAttribute("style", "display: none;");
- }
- if (E("context-sharepage", doc)) {
- E("context-sharepage", doc).setAttribute("style", "display: none;");
- }
- }
- if (config.disableSocialAPI) {
- win.SocialActivationListener = {};
- }
- if (config.disableForget) {
- CustomizableUI.destroyWidget("panic-button");
- }
- if (config.hiddenUI) {
- hideUIElements(doc, config.hiddenUI);
- }
- if (config.helpMenu) {
- // We need to run this function on a delay, because we won't know
- // if the about menu is hidden for mac until after it is run.
- Services.tm.mainThread.dispatch(function() {
- var helpMenuPopup = doc.getElementById("menu_HelpPopup");
- var menuitem = doc.createElement("menuitem");
- menuitem.setAttribute("label", config.helpMenu.label);
- if ("accesskey" in config.helpMenu) {
- menuitem.setAttribute("accesskey", config.helpMenu.accesskey);
- }
- menuitem.setAttribute("oncommand", "openUILink('" + config.helpMenu.url + "');");
- menuitem.setAttribute("onclick", "checkForMiddleClick(this, event);");
- if (!E("aboutName", doc) || E("aboutName", doc).hidden) {
- // Mac
- helpMenuPopup.appendChild(menuitem);
- } else {
- helpMenuPopup.insertBefore(menuitem, E("aboutName", doc));
- helpMenuPopup.insertBefore(doc.createElement("menuseparator"),
- E("aboutName", doc));
- }
- }, Ci.nsIThread.DISPATCH_NORMAL);
- }
- if (config.firstrun || config.upgrade) {
- if (config.displayBookmarksToolbar || (config.bookmarks && config.bookmarks.toolbar)) {
- CustomizableUI.setToolbarVisibility("PersonalToolbar", "true");
- }
- if (config.displayMenuBar) {
- CustomizableUI.setToolbarVisibility("toolbar-menubar", "true");
- }
- if (config.showSearchBar) {
- CustomizableUI.addWidgetToArea("search-container", CustomizableUI.AREA_NAVBAR,
- CustomizableUI.getPlacementOfWidget("urlbar-container").position + 1);
- }
- config.firstrun = false;
- config.upgrade = false;
- }
- }
- break;
- case "chrome://browser/content/places/places.xul":
- case "chrome://browser/content/bookmarks/bookmarksPanel.xul":
- case "chrome://browser/content/history/history-panel.xul":
- configs = CCK2.getConfigs();
- for (let id in configs) {
- var config = configs[id];
- if (config.disablePrivateBrowsing) {
- if (E("placesContext_open:newprivatewindow", doc)) {
- E("placesContext_open:newprivatewindow", doc).setAttribute("style", "display: none;");
- }
- }
- if (config.hiddenUI) {
- hideUIElements(doc, config.hiddenUI);
- }
- }
- break;
- }
- }, false);
- break;
- }
- }
-}
-Services.obs.addObserver(observer, "chrome-document-global-created", false);
-
-function disableSync(doc) {
- var win = doc.defaultView;
- if (win.gSyncUI) {
- var mySyncUI = {
- init: function() {
- return;
- },
- initUI: function() {
- return;
- },
- updateUI: function() {
- hide(E("sync-setup-state", doc));
- hide(E("sync-syncnow-state", doc));
- hide(E("sync-setup", doc));
- hide(E("sync-syncnowitem", doc));
- }
- }
- win.gSyncUI = mySyncUI;
- }
- CustomizableUI.destroyWidget("sync-button");
- CustomizableUI.removeWidgetFromArea("sync-button");
- var toolbox = doc.getElementById("navigator-toolbox");
- if (toolbox && toolbox.palette) {
- let element = toolbox.palette.querySelector("#sync-button");
- if (element) {
- element.parentNode.removeChild(element);
- }
- }
- hide(E("sync-setup-state", doc));
- hide(E("sync-syncnow-state", doc));
- hide(E("sync-setup", doc));
- hide(E("sync-syncnowitem", doc));
-}
-
-function disablePrivateBrowsing(doc) {
- disable(E("Tools:PrivateBrowsing", doc));
- hide(E("menu_newPrivateWindow", doc));
- // Because this is on a context menu, we can't use "hidden"
- if (E("context-openlinkprivate", doc))
- E("context-openlinkprivate", doc).setAttribute("style", "display: none;");
- if (E("placesContext_open:newprivatewindow", doc))
- E("placesContext_open:newprivatewindow", doc).setAttribute("style", "display: none;");
- CustomizableUI.destroyWidget("privatebrowsing-button")
-}
-
-function disableAddonsManager(doc) {
- hide(E("menu_openAddons", doc));
- disable(E("Tools:Addons", doc)); // Ctrl+Shift+A
- CustomizableUI.destroyWidget("add-ons-button")
-}
-
-function removeDeveloperTools(doc) {
- var win = doc.defaultView;
- // Need to delay this because devtools is created dynamically
- win.setTimeout(function() {
- CustomizableUI.destroyWidget("developer-button")
- hide(E("webDeveloperMenu", doc));
- var devtoolsKeyset = doc.getElementById("devtoolsKeyset");
- if (devtoolsKeyset) {
- for (var i = 0; i < devtoolsKeyset.childNodes.length; i++) {
- devtoolsKeyset.childNodes[i].removeAttribute("oncommand");
- devtoolsKeyset.childNodes[i].removeAttribute("command");
- }
- }
- }, 0);
- try {
- doc.getElementById("Tools:ResponsiveUI").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:Scratchpad").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:BrowserConsole").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:BrowserToolbox").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:DevAppsMgr").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:DevToolbar").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:DevToolbox").removeAttribute("oncommand");
- } catch (e) {}
- try {
- doc.getElementById("Tools:DevToolbarFocus").removeAttribute("oncommand");
- } catch (e) {}
- CustomizableUI.destroyWidget("developer-button")
-}
-
-function disableErrorConsole(doc) {
- doc.getElementById("Tools:ErrorConsole").removeAttribute("oncommand");
-}
-
-function onPanelShowing(event) {
- var configs = CCK2.getConfigs();
- for (let id in configs) {
- var config = configs[id];
- if (config.disableSync) {
- hide(E("PanelUI-fxa-status", event.target.ownerDocument));
- hide(E("PanelUI-footer-fxa", event.target.ownerDocument)); // Firefox 42+
- }
- }
-}
-
-function onAppMenuShowing(event) {
- var configs = CCK2.getConfigs();
- for (let id in configs) {
- var config = configs[id];
- if (config.disableSync) {
- hide(E("appMenu-fxa-container", event.target.ownerDocument));
- }
- if (config.removeDeveloperTools) {
- hide(E("appMenu-developer-button", event.target.ownerDocument));
- }
- }
-}
-
-function E(id, context) {
- var element = context.getElementById(id);
- return element;
-}
-
-function hide(element) {
- if (element) {
- element.setAttribute("hidden", "true");
- }
-}
-
-function disable(element) {
- if (element) {
- element.disabled = true;
- element.setAttribute("disabled", "true");
- }
-}
-
-function hideUIElements(doc, hiddenUI) {
- for (var i=0; i < hiddenUI.length; i++) {
- var uiElements = doc.querySelectorAll(hiddenUI[i]);
- // Don't use .hidden since it doesn't work sometimes
- var style = doc.getElementById("cck2-hidden-style");
- if (!style) {
- style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
- style.setAttribute("id", "cck2-hidden-style");
- style.setAttribute("type", "text/css");
- doc.documentElement.appendChild(style);
- }
- style.textContent = style.textContent + hiddenUI[i] + "{display: none !important;}";
- if (!uiElements || uiElements.length == 0) {
- continue;
- }
- for (var j=0; j < uiElements.length; j++) {
- var uiElement = uiElements[j];
- if (uiElement.nodeName == "menuitem") {
- uiElement.removeAttribute("key");
- uiElement.removeAttribute("oncommand");
- if (uiElement.hasAttribute("command")) {
- var commandId = uiElement.getAttribute("command");
- uiElement.removeAttribute("command");
- var command = doc.getElementById(commandId);
- command.removeAttribute("oncommand");
- var keys = doc.querySelectorAll("key[command='" + commandId + "']")
- for (var k=0; k < keys.length; k++) {
- keys[k].removeAttribute("command");
- }
- }
- }
- // Horrible hack to work around the crappy Australis help menu
- // Items on the menu always show up in the Australis menu, so we have to remove them.
- if (uiElements[j].parentNode.id == "menu_HelpPopup") {
- uiElements[j].parentNode.removeChild(uiElements[j]);
- }
- }
- }
-}
diff --git a/linux/build/preferences/cck2/modules/CCK2FileBlock.jsm b/linux/build/preferences/cck2/modules/CCK2FileBlock.jsm
deleted file mode 100644
index 5cad7de..0000000
--- a/linux/build/preferences/cck2/modules/CCK2FileBlock.jsm
+++ /dev/null
@@ -1,47 +0,0 @@
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-var EXPORTED_SYMBOLS = [];
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-let CCK2FileBlock = {
- chromeBlacklist: ["browser", "mozapps", "marionette", "specialpowers",
- "branding", "alerts"],
- shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
- // Prevent the loading of chrome URLs into the main browser window
- if (aContentLocation.scheme == "chrome") {
- if (aRequestOrigin &&
- (aRequestOrigin.spec == "chrome://browser/content/browser.xul" ||
- aRequestOrigin.scheme == "moz-nullprincipal")) {
- for (var i=0; i < this.chromeBlacklist.length; i++) {
- if (aContentLocation.host == this.chromeBlacklist[i]) {
- if (aContentLocation.spec.includes(".xul")) {
- return Ci.nsIContentPolicy.REJECT_REQUEST;
- }
- }
- }
- }
- }
- return Ci.nsIContentPolicy.ACCEPT;
- },
- shouldProcess: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
- return Ci.nsIContentPolicy.ACCEPT;
- },
- classDescription: "CCK2 FileBlock Service",
- contractID: "@kaply.com/cck2-fileblock-service;1",
- classID: Components.ID('{26e7afc9-e22d-4d12-bb57-c184fe24b828}'),
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPolicy]),
- createInstance: function(outer, iid) {
- return this.QueryInterface(iid);
- },
-};
-
-var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
-registrar.registerFactory(CCK2FileBlock.classID,
- CCK2FileBlock.classDescription,
- CCK2FileBlock.contractID,
- CCK2FileBlock);
-
-var cm = Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager);
-cm.addCategoryEntry("content-policy", CCK2FileBlock.contractID,
- CCK2FileBlock.contractID, false, true);
diff --git a/linux/build/preferences/cck2/modules/CCK2Framescript.js b/linux/build/preferences/cck2/modules/CCK2Framescript.js
deleted file mode 100644
index fda925c..0000000
--- a/linux/build/preferences/cck2/modules/CCK2Framescript.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-Cu.import("resource://gre/modules/Services.jsm");
-
-var disableSearchEngineInstall = false;
-
-var documentObserver = {
- observe: function observe(subject, topic, data) {
- if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
- var doc = subject.document;
- doc.addEventListener("DOMContentLoaded", function onLoad(event) {
- event.target.removeEventListener("DOMContentLoaded", onLoad, false);
- if (disableSearchEngineInstall) {
- subject.wrappedJSObject.external.AddSearchProvider = function() {};
- }
- if (!doc.documentURI.startsWith("about:")) {
- return;
- }
- for (let id in configs) {
- var config = configs[id];
- if (config.hiddenUI) {
- for (var i=0; i < config.hiddenUI.length; i++) {
- // Don't use .hidden since it doesn't work sometimes
- var style = doc.getElementById("cck2-hidden-style");
- if (!style) {
- style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
- style.setAttribute("id", "cck2-hidden-style");
- style.setAttribute("type", "text/css");
- doc.documentElement.appendChild(style);
- }
- style.textContent = style.textContent + config.hiddenUI[i] + "{display: none !important;}";
- }
- }
- }
- }, false);
- }
- }
-}
-
-var configs = sendSyncMessage("cck2:get-configs")[0];
-for (var id in configs) {
- var config = configs[id];
- if (config.disableSearchEngineInstall) {
- disableSearchEngineInstall = true;
- break;
- }
-}
-
-Services.obs.addObserver(documentObserver, "content-document-global-created", false);
-addEventListener("unload", function() {
- Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
-})
diff --git a/linux/build/preferences/cck2/modules/CCK2PreferencesOverlay.jsm b/linux/build/preferences/cck2/modules/CCK2PreferencesOverlay.jsm
deleted file mode 100644
index 3f165bd..0000000
--- a/linux/build/preferences/cck2/modules/CCK2PreferencesOverlay.jsm
+++ /dev/null
@@ -1,123 +0,0 @@
-/* This file modifies the preferences dialogs. It does the following:
- * Removes private browsing from the pref UI if it is disabled
- * Removes Sync from the pref UI if it is diabled
- * Disables the crash reporter button if crash reporter is disabled
- * Removed the master password UI if it is disabled
- * Goes through the hiddenUI list and hides any UI
- *
- */
-
-const EXPORTED_SYMBOLS = [];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://cck2/CCK2.jsm");
-
-var configs = null;
-
-var observer = {
- observe: function observe(subject, topic, data) {
- switch (topic) {
- case "chrome-document-global-created":
- var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
- win.addEventListener("load", function onLoad(event) {
- win.removeEventListener("load", onLoad, false);
- var doc = event.target;
- var url = doc.location.href.split("?")[0].split("#")[0];
- switch (url) {
- case "chrome://browser/content/preferences/preferences.xul":
- configs = CCK2.getConfigs();
- win.addEventListener("paneload", function(event) {
- updatePrefUI(event.target.ownerDocument);
- }, false);
- updatePrefUI(doc);
- for (let id in configs) {
- var config = configs[id];
- if (!config.disableSync) {
- continue;
- }
- var prefWindow = E("BrowserPreferences", doc);
- var paneSyncRadio = doc.getAnonymousElementByAttribute(prefWindow, "pane", "paneSync");
- hide(paneSyncRadio);
- var paneDeck = doc.getAnonymousElementByAttribute(prefWindow, "anonid", "paneDeck");
- var paneSync = E("paneSync", doc);
- paneSync.removeAttribute("helpTopic");
- var weavePrefsDeck = E("weavePrefsDeck", doc);
- if (weavePrefsDeck)
- weavePrefsDeck.parentNode.removeChild(weavePrefsDeck);
- if (prefWindow.currentPane == E("paneSync", doc))
- prefWindow.showPane(E("paneMain", doc));
- }
- break;
- case "about:preferences":
- case "chrome://browser/content/preferences/in-content/preferences.xul":
- configs = CCK2.getConfigs();
- for (let id in configs) {
- var config = configs[id];
- if (config.disableSync) {
- hide(E("category-sync", doc));
- }
- }
- updatePrefUI(doc);
- break;
- }
- }, false);
- break;
- }
- }
-}
-Services.obs.addObserver(observer, "chrome-document-global-created", false);
-
-// The IDs are the same, so I can reuse this for regular and in-content prefs
-function updatePrefUI(doc) {
- for (var id in configs) {
- var config = configs[id];
- if (config.disablePrivateBrowsing) {
- hide(E("privateBrowsingAutoStart", doc));
- var privateBrowsingMenu = doc.querySelector("menuitem[value='dontremember']");
- hide(privateBrowsingMenu, doc);
- }
- if (config.disableCrashReporter) {
- disable(E("submitCrashesBox", doc));
- }
- if (config.disableSync) {
- hide(E("noFxaAccount", doc));
- hide(E("hasFxaAccount", doc));
- }
- if (config.noMasterPassword == true) {
- hide(E("useMasterPassword", doc));
- hide(E("changeMasterPassword", doc));
- }
- if (config.hiddenUI) {
- for (var i=0; i < config.hiddenUI.length; i++) {
- // Don't use .hidden since it doesn't work sometimes
- var style = doc.getElementById("cck2-hidden-style");
- if (!style) {
- style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
- style.setAttribute("id", "cck2-hidden-style");
- style.setAttribute("type", "text/css");
- doc.documentElement.appendChild(style);
- }
- style.textContent = style.textContent + config.hiddenUI[i] + "{display: none !important;}";
- }
- }
- }
-}
-
-function E(id, context) {
- var element = context.getElementById(id);
- return element;
-}
-
-function hide(element) {
- if (element) {
- element.setAttribute("hidden", "true");
- }
-}
-
-function disable(element) {
- if (element) {
- element.disabled = true;
- }
-}
diff --git a/linux/build/preferences/cck2/modules/CTPPermissions.jsm b/linux/build/preferences/cck2/modules/CTPPermissions.jsm
deleted file mode 100644
index 862ea48..0000000
--- a/linux/build/preferences/cck2/modules/CTPPermissions.jsm
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * Copied from https://github.com/jvillalobos/CTP-Manager/blob/master/extension/modules/permissions.js
- **/
-
-/**
- * Copyright 2013 Jorge Villalobos
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- **/
-
-var EXPORTED_SYMBOLS = ["CTP"];
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-var CTP = {
- /**
- * Cleans up the plugin name to a more readable form.
- * Taken from /browser/base/content/pageinfo/permissions.js (Firefox 20)
- * @param aPluginName the name to clean up.
- * @return cleaned up plugin name.
- */
- makeNicePluginName : function(aPluginName) {
- let newName =
- aPluginName.replace(/[\s\d\.\-\_\(\)]+$/, "").
- replace(/\bplug-?in\b/i, "").trim();
-
- return newName;
- },
-
- /**
- * Gets the plugin permission string from the tag object. In Firefox 20, this
- * is the plugin filename. In 21 an above, the file extension is removed and
- * Flash and Java are special-cased.
- * @param aTag the tag object with the plugin information.
- * @return permission string that corresponds to the plugin in the tag.
- */
- getPluginPermissionFromTag : function(aTag) {
- let permission = null;
- let majorVersion = Services.appinfo.platformVersion.split(".")[0];
-
- if (21 <= majorVersion) {
- let mimeTypes = aTag.getMimeTypes();
-
- if (CTP.isFlashPlugin(mimeTypes)) {
- permission = "flash";
- } else if (CTP.isJavaPlugin(mimeTypes)) {
- permission = "java";
- } else {
- let lastPeriod = aTag.filename.lastIndexOf(".");
-
- permission =
- ((0 < lastPeriod) ? aTag.filename.substring(0, lastPeriod) :
- aTag.filename);
- // Remove digits at the end
- permission = permission.replace(/[0-9]+$/, "");
- permission = permission.toLowerCase();
- }
- } else {
- permission = aTag.filename;
- }
-
- return permission;
- },
-
- /**
- * Checks if the tag object corresponds to the Java plugin.
- * @param aMimeTypes the list of MIME types for the plugin.
- * @return true if the tag corresponds to the Java plugin.
- */
- isJavaPlugin : function(aMimeTypes) {
- let isJava = false;
- let mimeType;
-
- for (let i = 0; i < aMimeTypes.length; i++) {
- mimeType =
- ((null != aMimeTypes[i].type) ? aMimeTypes[i].type : aMimeTypes[i]);
-
- if ((0 == mimeType.indexOf("application/x-java-vm")) ||
- (0 == mimeType.indexOf("application/x-java-applet")) ||
- (0 == mimeType.indexOf("application/x-java-bean"))) {
- isJava = true;
- break;
- }
- }
-
- return isJava;
- },
-
- /**
- * Checks if the tag object corresponds to the Flash plugin.
- * @param aMimeTypes the list of MIME types for the plugin.
- * @return true if the tag corresponds to the Flash plugin.
- */
- isFlashPlugin : function(aMimeTypes) {
- let isFlash = false;
- let mimeType;
-
- for (let i = 0; i < aMimeTypes.length; i++) {
- mimeType =
- ((null != aMimeTypes[i].type) ? aMimeTypes[i].type : aMimeTypes[i]);
-
- if (0 == mimeType.indexOf("application/x-shockwave-flash")) {
- isFlash = true;
- break;
- }
- }
-
- return isFlash;
- }
-};
diff --git a/linux/build/preferences/cck2/modules/Preferences.jsm b/linux/build/preferences/cck2/modules/Preferences.jsm
deleted file mode 100644
index 2100911..0000000
--- a/linux/build/preferences/cck2/modules/Preferences.jsm
+++ /dev/null
@@ -1,629 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Preferences.
- *
- * The Initial Developer of the Original Code is Mozilla.
- * Portions created by the Initial Developer are Copyright (C) 2008
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Myk Melez
- * Daniel Aquino
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-let EXPORTED_SYMBOLS = ["Preferences"];
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cr = Components.results;
-const Cu = Components.utils;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-// The minimum and maximum integers that can be set as preferences.
-// The range of valid values is narrower than the range of valid JS values
-// because the native preferences code treats integers as NSPR PRInt32s,
-// which are 32-bit signed integers on all platforms.
-const MAX_INT = Math.pow(2, 31) - 1;
-const MIN_INT = -MAX_INT;
-
-function Preferences(args) {
- if (isObject(args)) {
- if (args.branch)
- this._prefBranch = args.branch;
- }
- else if (args)
- this._prefBranch = args;
- this.isDefaultBranch = false;
-}
-
-Preferences.prototype = {
- /**
- * Get the value of a pref, if any; otherwise return the default value.
- *
- * @param prefName {String|Array}
- * the pref to get, or an array of prefs to get
- *
- * @param defaultValue
- * the default value, if any, for prefs that don't have one
- *
- * @returns the value of the pref, if any; otherwise the default value
- */
- get: function(prefName, defaultValue) {
- if (isArray(prefName))
- return prefName.map(v => this.get(v, defaultValue));
-
- return this._get(prefName, defaultValue);
- },
-
-// In all cases below, the preference might exist as a user pref, but not
-// have a default value. In those cases, get* throws. Return the default value.
- _get: function(prefName, defaultValue) {
- switch (this._prefSvc.getPrefType(prefName)) {
- case Ci.nsIPrefBranch.PREF_STRING:
- try {
- return this._prefSvc.getComplexValue(prefName, Ci.nsISupportsString).data;
- } catch (ex) {
- if (this.isDefaultBranch)
- return defaultValue;
- else
- return this._prefSvc.getCharPref(prefName);
- }
-
- case Ci.nsIPrefBranch.PREF_INT:
- try {
- return this._prefSvc.getIntPref(prefName);
- } catch (ex) {
- return defaultValue;
- }
-
- case Ci.nsIPrefBranch.PREF_BOOL:
- try {
- return this._prefSvc.getBoolPref(prefName);
- } catch (ex) {
- return defaultValue;
- }
-
- case Ci.nsIPrefBranch.PREF_INVALID:
- return defaultValue;
-
- default:
- // This should never happen.
- throw "Error getting pref " + prefName + "; its value's type is " +
- this._prefSvc.getPrefType(prefName) + ", which I don't know " +
- "how to handle.";
- }
- },
-
- /**
- * Set a preference to a value.
- *
- * You can set multiple prefs by passing an object as the only parameter.
- * In that case, this method will treat the properties of the object
- * as preferences to set, where each property name is the name of a pref
- * and its corresponding property value is the value of the pref.
- *
- * @param prefName {String|Object}
- * the name of the pref to set; or an object containing a set
- * of prefs to set
- *
- * @param prefValue {String|Number|Boolean}
- * the value to which to set the pref
- *
- * Note: Preferences cannot store non-integer numbers or numbers outside
- * the signed 32-bit range -(2^31-1) to 2^31-1, If you have such a number,
- * store it as a string by calling toString() on the number before passing
- * it to this method, i.e.:
- * Preferences.set("pi", 3.14159.toString())
- * Preferences.set("big", Math.pow(2, 31).toString()).
- */
- set: function(prefName, prefValue) {
- if (isObject(prefName)) {
- for (let [name, value] in Iterator(prefName))
- this.set(name, value);
- return;
- }
-
- this._set(prefName, prefValue);
- },
-
- _set: function(prefName, prefValue) {
- let prefType;
- if (typeof prefValue != "undefined" && prefValue != null)
- prefType = prefValue.constructor.name;
-
- var existingPrefType = this._prefSvc.getPrefType(prefName);
- if (existingPrefType != Ci.nsIPrefBranch.PREF_INVALID)
- {
- // convert
- if (existingPrefType == Ci.nsIPrefBranch.PREF_INT && prefType == "String")
- {
- prefValue = parseInt(prefValue);
- if (isNaN(prefValue))
- throw "Incompatible pref value type - " + prefName;
- prefType = "Number";
- }
- else if (existingPrefType == Ci.nsIPrefBranch.PREF_BOOL && prefType == "String")
- {
- if (prefValue == "true")
- prefValue = true;
- else if (prefValue == "false")
- prefValue = false;
- else
- throw "Incompatible pref value type - " + prefName;
- prefType = "Boolean";
- }
- else if (existingPrefType == Ci.nsIPrefBranch.PREF_BOOL && prefType == "Number")
- {
- prefValue = prefValue != 0;
- prefType = "Boolean";
- }
- }
-
- switch (prefType) {
- case "String":
- {
- try {
- this._prefSvc.setStringPref(prefName, prefValue);
- } catch (e) {
- try {
- let string = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
- string.data = prefValue;
- this._prefSvc.setComplexValue(prefName, Ci.nsISupportsString, string);
- } catch (e2) {
- Components.utils.reportError(e2);
- }
- }
- }
- break;
-
- case "Number":
- // We throw if the number is outside the range, since the result
- // will never be what the consumer wanted to store, but we only warn
- // if the number is non-integer, since the consumer might not mind
- // the loss of precision.
- if (prefValue > MAX_INT || prefValue < MIN_INT)
- throw("you cannot set the " + prefName + " pref to the number " +
- prefValue + ", as number pref values must be in the signed " +
- "32-bit integer range -(2^31-1) to 2^31-1. To store numbers " +
- "outside that range, store them as strings.");
- try {
- this._prefSvc.setIntPref(prefName, prefValue);
- } catch (e) {
- throw new Error(e.toString() + " - " + prefName);
- }
- if (prefValue % 1 != 0)
- Cu.reportError("Warning: setting the " + prefName + " pref to the " +
- "non-integer number " + prefValue + " converted it " +
- "to the integer number " + this.get(prefName) +
- "; to retain fractional precision, store non-integer " +
- "numbers as strings.");
- break;
-
- case "Boolean":
- this._prefSvc.setBoolPref(prefName, prefValue);
- break;
-
- default:
- throw "can't set pref " + prefName + " to value '" + prefValue +
- "'; it isn't a String, Number, or Boolean";
- }
- },
-
- /**
- * Whether or not the given pref has a value. This is different from isSet
- * because it returns true whether the value of the pref is a default value
- * or a user-set value, while isSet only returns true if the value
- * is a user-set value.
- *
- * @param prefName {String|Array}
- * the pref to check, or an array of prefs to check
- *
- * @returns {Boolean|Array}
- * whether or not the pref has a value; or, if the caller provided
- * an array of pref names, an array of booleans indicating whether
- * or not the prefs have values
- */
- has: function(prefName) {
- if (isArray(prefName))
- return prefName.map(this.has, this);
-
- return this._has(prefName);
- },
-
- _has: function(prefName) {
- return (this._prefSvc.getPrefType(prefName) != Ci.nsIPrefBranch.PREF_INVALID);
- },
-
- /**
- * Whether or not the given pref has a user-set value. This is different
- * from |has| because it returns true only if the value of the pref is a user-
- * set value, while |has| returns true if the value of the pref is a default
- * value or a user-set value.
- *
- * @param prefName {String|Array}
- * the pref to check, or an array of prefs to check
- *
- * @returns {Boolean|Array}
- * whether or not the pref has a user-set value; or, if the caller
- * provided an array of pref names, an array of booleans indicating
- * whether or not the prefs have user-set values
- */
- isSet: function(prefName) {
- if (isArray(prefName))
- return prefName.map(this.isSet, this);
-
- return (this.has(prefName) && this._prefSvc.prefHasUserValue(prefName));
- },
-
- /**
- * Whether or not the given pref has a user-set value. Use isSet instead,
- * which is equivalent.
- * @deprecated
- */
- modified: function(prefName) { return this.isSet(prefName) },
-
- reset: function(prefName) {
- if (isArray(prefName)) {
- prefName.map(v => this.reset(v));
- return;
- }
-
- this._reset(prefName);
- },
-
- _reset: function(prefName) {
- try {
- this._prefSvc.clearUserPref(prefName);
- }
- catch(ex) {
- // The pref service throws NS_ERROR_UNEXPECTED when the caller tries
- // to reset a pref that doesn't exist or is already set to its default
- // value. This interface fails silently in those cases, so callers
- // can unconditionally reset a pref without having to check if it needs
- // resetting first or trap exceptions after the fact. It passes through
- // other exceptions, however, so callers know about them, since we don't
- // know what other exceptions might be thrown and what they might mean.
- if (ex.result != Cr.NS_ERROR_UNEXPECTED)
- throw ex;
- }
- },
-
- /**
- * If you need to know the default values, without resetting the actual
- * user prefs, you can use this.
- * @returns {Preferences} a new Preferences object, which accesses
- * the defaults rather than the user prefs.
- * *Only* call get() on this.
- * If you call set(), you will modify the defaults, so don't do that!
- */
- get defaults() {
- // nsIPrefService
- let defaultBranch = Services.prefs.
- getDefaultBranch(this._prefBranch).
- QueryInterface(Ci.nsIPrefBranch);
- let prefs = new Preferences(this._prefBranch);
- // override. nasty, but this is internal, so OK.
- Object.defineProperty(prefs, "_prefSvc", {
- get: function() {
- return defaultBranch;
- }
- });
- prefs.isDefaultBranch = true;
- return prefs;
- },
-
- /**
- * Lock a pref so it can't be changed.
- *
- * @param prefName {String|Array}
- * the pref to lock, or an array of prefs to lock
- * @param prefValue {String} (optional)
- * default value of pref to lock only works if prefName isn't an array
- */
- lock: function(prefName, prefValue) {
- if (isArray(prefName))
- prefName.map(this.lock, this);
- else if (typeof prefValue != "undefined")
- this.defaults.set(prefName, prefValue);
-
- this._prefSvc.lockPref(prefName);
- },
-
- /**
- * Unlock a pref so it can be changed.
- *
- * @param prefName {String|Array}
- * the pref to lock, or an array of prefs to lock
- */
- unlock: function(prefName) {
- if (isArray(prefName))
- prefName.map(this.unlock, this);
-
- this._prefSvc.unlockPref(prefName);
- },
-
- /**
- * Whether or not the given pref is locked against changes and
- * if it is set to the passedi n value
- *
- * @param prefName {String|Array}
- * the pref to check, or an array of prefs to check
- * @param prefValue {String|Number|Boolean}}
- * the pref value to compare against
- *
- * @returns {Boolean|Array}
- * whether or not the pref is locked; or, if the caller
- * provided an array of pref names, an array of booleans indicating
- * whether or not the prefs are locked
- * If a pref value was specified returns whether or not the pref
- * was locked and equal to the passed in value.
- */
- locked: function(prefName, prefValue) {
- if (isArray(prefName))
- return prefName.map(this.locked, this);
-
- if (prefValue)
- return this._prefSvc.prefIsLocked(prefName) && (this.get(prefName) == prefValue);
- else
- return this._prefSvc.prefIsLocked(prefName);
- },
-
- /**
- * Start observing a pref.
- *
- * The callback can be a function or any object that implements nsIObserver.
- * When the callback is a function and thisObject is provided, it gets called
- * as a method of thisObject.
- *
- * @param prefName {String}
- * the name of the pref to observe
- *
- * @param callback {Function|Object}
- * the code to notify when the pref changes;
- *
- * @param thisObject {Object} [optional]
- * the object to use as |this| when calling a Function callback;
- *
- * @returns the wrapped observer
- */
- observe: function(prefName, callback, thisObject) {
- let fullPrefName = this._prefBranch + (prefName || "");
-
- let observer = new PrefObserver(fullPrefName, callback, thisObject);
- Preferences._prefSvc.addObserver(fullPrefName, observer, true);
- observers.push(observer);
-
- return observer;
- },
-
- /**
- * Stop observing a pref.
- *
- * You must call this method with the same prefName, callback, and thisObject
- * with which you originally registered the observer. However, you don't have
- * to call this method on the same exact instance of Preferences; you can call
- * it on any instance. For example, the following code first starts and then
- * stops observing the "foo.bar.baz" preference:
- *
- * let observer = function() {...};
- * Preferences.observe("foo.bar.baz", observer);
- * new Preferences("foo.bar.").ignore("baz", observer);
- *
- * @param prefName {String}
- * the name of the pref being observed
- *
- * @param callback {Function|Object}
- * the code being notified when the pref changes
- *
- * @param thisObject {Object} [optional]
- * the object being used as |this| when calling a Function callback
- */
- ignore: function(prefName, callback, thisObject) {
- let fullPrefName = this._prefBranch + (prefName || "");
-
- // This seems fairly inefficient, but I'm not sure how much better we can
- // make it. We could index by fullBranch, but we can't index by callback
- // or thisObject, as far as I know, since the keys to JavaScript hashes
- // (a.k.a. objects) can apparently only be primitive values.
- let [observer] = observers.filter(v => v.prefName == fullPrefName &&
- v.callback == callback &&
- v.thisObject == thisObject);
-
- if (observer) {
- Preferences._prefSvc.removeObserver(fullPrefName, observer);
- observers.splice(observers.indexOf(observer), 1);
- }
- },
-
- /**
- * Same as observe(), but automatically unregisters itself when
- * the window closes, saving you from writing an unload handler and
- * calling ignore().
- * @param win {nsIDOMWindow} your |window|
- */
- observeAuto: function(win, prefName, callback, thisObject) {
- if (!win instanceof Ci.nsIDOMWindow)
- throw "Need your |window| as first parameter";
- this.observe(prefName, callback, thisObject);
- var self = this;
- win.addEventListener("unload", function()
- {
- self.ignore(prefName, callback, thisObject);
- }, false);
- win = null; // don't let closure hold on to window unnecessarily
- },
-
- resetBranch: function(prefBranch) {
- try {
- this._prefSvc.resetBranch(prefBranch);
- }
- catch(ex) {
- // The current implementation of nsIPrefBranch in Mozilla
- // doesn't implement resetBranch, so we do it ourselves.
- if (ex.result == Cr.NS_ERROR_NOT_IMPLEMENTED)
- this.reset(this._prefSvc.getChildList(prefBranch, []));
- else
- throw ex;
- }
- },
-
- /**
- * Returns all child prefs of this pref branch.
- * This equals nsIPrefBranch.getChildList().
- * This allows you to do e.g.
- * var myPrefs = new Preferences("extensions.cooler.");
- * var contents = myPrefs.branch("contents.");
- * for each (let prefname in contents.childPrefNames())
- * dump("have " + contents.get(prefname) + " " + prefname + "\n");
- *
- * @returns {Array of String} The names of the children,
- * without the base pref branch, but with subbranch.
- */
- childPrefNames : function() {
- return this._prefSvc.getChildList("", []);
- },
-
- /**
- * Returns an nsIPrefBranch for the pref branch that this object stands for.
- * You can use this to use functions that are not supported here.
- * @returns {nsIPrefBranch}
- */
- get mozillaPrefBranch() {
- return this._prefSvc;
- },
-
- /**
- * Returns the base pref name that this object stands for.
- * E.g. "extensions.yourcooler.";
- * @returns {String}
- */
- get prefBranchName() {
- return this._prefBranch;
- },
-
- /**
- * Returns an Preferences object for an sub pref branch
- * underneath the current pref branch.
- * @param subbranch {String} Will be appended to the
- * current pref branch. Don't forget the trailing dot,
- * where necessary.
- * E.g. "contents."
- * @returns {Preferences}
- */
- branch : function(subbranch) {
- return new Preferences(this._prefBranch + subbranch);
- },
-
- /**
- * The branch of the preferences tree to which this instance provides access.
- * @private
- */
- _prefBranch: "",
-
- /**
- * Preferences Service
- * @private
- */
- get _prefSvc() {
- // nsIPrefService
- let prefSvc = Services.prefs.
- getBranch(this._prefBranch).
- QueryInterface(Ci.nsIPrefBranch);
- Object.defineProperty(this, "_prefSvc", {
- get: function() {
- return prefSvc;
- }
- });
- return this._prefSvc;
- }
-
-};
-
-// Give the constructor the same prototype as its instances, so users can access
-// preferences directly via the constructor without having to create an instance
-// first.
-Preferences.__proto__ = Preferences.prototype;
-
-/**
- * A cache of pref observers.
- *
- * We use this to remove observers when a caller calls Preferences::ignore.
- *
- * All Preferences instances share this object, because we want callers to be
- * able to remove an observer using a different Preferences object than the one
- * with which they added it. That means we have to identify the observers
- * in this object by their complete pref name, not just their name relative to
- * the root branch of the Preferences object with which they were created.
- */
-let observers = [];
-
-function PrefObserver(prefName, callback, thisObject) {
- this.prefName = prefName;
- this.callback = callback;
- this.thisObject = thisObject;
-}
-
-PrefObserver.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
-
- observe: function(subject, topic, data) {
- // The pref service only observes whole branches, but we only observe
- // individual preferences, so we check here that the pref that changed
- // is the exact one we're observing (and not some sub-pref on the branch).
- if (data != this.prefName)
- return;
-
- if (typeof this.callback == "function") {
- let prefValue = Preferences.get(this.prefName);
-
- if (this.thisObject)
- this.callback.call(this.thisObject, prefValue);
- else
- this.callback(prefValue);
- }
- else // typeof this.callback == "object" (nsIObserver)
- this.callback.observe(subject, topic, data);
- }
-};
-
-function isArray(val) {
- // We can't check for |val.constructor == Array| here, since the value
- // might be from a different context whose Array constructor is not the same
- // as ours, so instead we match based on the name of the constructor.
- return (typeof val != "undefined" && val != null && typeof val == "object" &&
- val.constructor.name == "Array");
-}
-
-function isObject(val) {
- // We can't check for |val.constructor == Object| here, since the value
- // might be from a different context whose Object constructor is not the same
- // as ours, so instead we match based on the name of the constructor.
- return (typeof val != "undefined" && val != null && typeof val == "object" &&
- val.constructor.name == "Object");
-}
diff --git a/linux/build/preferences/cck2/modules/Timer.jsm b/linux/build/preferences/cck2/modules/Timer.jsm
deleted file mode 100644
index d405b28..0000000
--- a/linux/build/preferences/cck2/modules/Timer.jsm
+++ /dev/null
@@ -1,43 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-/**
- * JS module implementation of nsIDOMJSWindow.setTimeout and clearTimeout.
- */
-
-this.EXPORTED_SYMBOLS = ["setTimeout", "clearTimeout"];
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-// This gives us >=2^30 unique timer IDs, enough for 1 per ms for 12.4 days.
-let gNextTimeoutId = 1; // setTimeout must return a positive integer
-
-let gTimeoutTable = new Map(); // int -> nsITimer
-
-this.setTimeout = function setTimeout(aCallback, aMilliseconds) {
- let id = gNextTimeoutId++;
- let args = Array.slice(arguments, 2);
- let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- timer.initWithCallback(function setTimeout_timer() {
- gTimeoutTable.delete(id);
- aCallback.apply(null, args);
- }, aMilliseconds, timer.TYPE_ONE_SHOT);
-
- gTimeoutTable.set(id, timer);
- return id;
-}
-
-this.clearTimeout = function clearTimeout(aId) {
- if (gTimeoutTable.has(aId)) {
- gTimeoutTable.get(aId).cancel();
- gTimeoutTable.delete(aId);
- }
-}
-
diff --git a/linux/build/preferences/cck2/modules/Utils.jsm b/linux/build/preferences/cck2/modules/Utils.jsm
deleted file mode 100644
index 559bb0b..0000000
--- a/linux/build/preferences/cck2/modules/Utils.jsm
+++ /dev/null
@@ -1,10 +0,0 @@
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-var EXPORTED_SYMBOLS = ["errorCritical"];
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-function errorCritical(e)
-{
- Services.prompt.alert(null, "", e);
-}
diff --git a/linux/build/preferences/cck2/resources/certs/purplei2p_ca.pem b/linux/build/preferences/cck2/resources/certs/purplei2p_ca.pem
deleted file mode 100644
index a750237..0000000
--- a/linux/build/preferences/cck2/resources/certs/purplei2p_ca.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIUervWv7EoWkk4Gt8J34xDR9nhH50wDQYJKoZIhvcNAQEL
-BQAwgYIxCzAJBgNVBAYTAldXMRQwEgYDVQQIDAtJMlAgTmV0d29yazESMBAGA1UE
-CgwJUHVycGxlSTJQMSowKAYDVQQDDCFQdXJwbGVJMlAgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkxHTAbBgkqhkiG9w0BCQEWDnI0c2FzQG1haWwuaTJwMB4XDTE5MDMw
-MzE2MjcxNFoXDTI5MDIyODE2MjcxNFowgYIxCzAJBgNVBAYTAldXMRQwEgYDVQQI
-DAtJMlAgTmV0d29yazESMBAGA1UECgwJUHVycGxlSTJQMSowKAYDVQQDDCFQdXJw
-bGVJMlAgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHTAbBgkqhkiG9w0BCQEWDnI0
-c2FzQG1haWwuaTJwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwLEy
-A0TamzrfORA+aIM/NRRGrKYkI9o5Q9UB/pTM8IFlSBREGleUfnC6LFHZeNV+Y1Tn
-jrMBOZ7PmIKjPIv+fJP7KjhHACZdk6iqVZqkiGqE0/V17kG16g1+g05Bj2lkWr94
-mp1rhzBeKJJSI8cG82824qdfDcgWZheziye+O0okENhi0o2bDhg78EnyysJiN/tu
-OuoZSGfC9ZdITbpMWgqwuQcdeBg0FNy4hEqUJWoYNgrghe5uc0WMOjTAegSntYPE
-MeaaZyzlGICZ2F+rKZgTjnzVYW60QlHqfg7sShieSPYIZmeN5l5hZ5GZk9Giaj/X
-4pz4sup2iafKclWAmQIDAQABo2MwYTAdBgNVHQ4EFgQUCARvpDaXqPaF4amObzzV
-GaDoZm4wHwYDVR0jBBgwFoAUCARvpDaXqPaF4amObzzVGaDoZm4wDwYDVR0TBAgw
-BgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAKcmGUXV
-gCw8PRHe0+XlkcSTX69e0TIPP+j5uJxMT3BHasvBdyV4FcjuUokHGjAnHal5OV4N
-yWdbRPnIge7su4yLQZzlNM1OzbcRds1wSbqTEpb68R/6E8mv3ms6Rc8AcRoXwusc
-byZvzS9tBSXTQ21wCVrltnIARAYabWlWu+URv+DFvlwMik6H8+DklHSVkPC6K3Ov
-V1aMJztMnJ/XTTsFDS/yvaTfmJFG16LABIiSsEAW5QK64sWsN4sxvpcg0D6/EjWP
-knyLM4KXuD3i08mzwzus8d97AjGxC5RCEFL5ADBpVaDU/5CpmZmZdY1daYjiHrXm
-EVNoSbqid1fAVyA=
------END CERTIFICATE-----
diff --git a/linux/build/preferences/cck2/resources/searchengines/legwork.xml b/linux/build/preferences/cck2/resources/searchengines/legwork.xml
deleted file mode 100644
index 484edce..0000000
--- a/linux/build/preferences/cck2/resources/searchengines/legwork.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- YaCy 'legwork'
- YaCy.net - Searching the I2P network
- http://legwork.i2p/env/grafics/yacy.png
- data:image/x-icon;base64,AAABAAEAEBAAAAAAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////Chiu+fBm+fRq+fRq+fRq+fRq+fRq8ehXMmk////////////////////////////++exjUqGfZsnjYsXbYsXbYsXbZsnjTp2W+fBr///////////////////////////+9exfs2r/69/L58+z58+z58+z59e/z59bChSn///////////////////////////+9fBnnz638+fX69O369e748un38Ob59O3Ll0fVrGz////////////////////////Jk0HJlUjXuYrWt4jVtYPr28T58+r59OzPn1fPnlX////////////////////////Rolu8eRXCiTPEjTvCijbNnlj169359e7Zs3vLlkf////////////////////////UqmrAgSLt3MP27eH1693169327+T59Ozo0rG/gB////////////////////////////+/gCDv4Mn48+v38Of59Oz58+v48+vr2b2+fRv///////////////////////////+9ehXr17n58+z48ejo0bDp07T48+zx49DBhCj///////////////////////////+/fhzjyJ/59Oz59OzQoVvNmU759Oz58+vKlUbXrnH////////////////////////LlkfUqmn59Oz48+vZtHzNm1D48+v59OzPoFjOnlX////////////////////////OnVPOnFL59e348+vq1rnEiC7u38j69vDXsHTIkT3////////////////////////UqWjIkD327+T58+3s2bzAgSLp07T79/Pmzqq+fBn///////////////////////////+/fx7v4Mr7+PTx5NDHkD3kyqP8+vjs2r+9exf///////////////////////////++fBjQoFnVq2zTp2bGjTjJk0LWrW7SpWC+exf////////////////////////////Nm1C6dQy7eBG8eBK9exe8ehS7dxC6dQzLlkj////////////AH///wB8x+sAf///AD/+PwA///8AP///AD///4A9PU+APoz/gB///4AdxvOAHoz/gB3368AfjU/AHT1PwB/+P
-
- en-us
- UTF-8
- UTF-8
- true
- YaCy is an open-source GPL-licensed software that can be used for stand-alone search engine installations or as a client for a multi-user P2P-based web indexing cluster. This is the access to peer 'legwork'.
-
-
-
-
-
-
-
-
- See https://github.com/orgs/yacy/teams/yacy_developers
-
- YaCy Free Software Open Source P2P Peer-to-Peer Uncensored Distributed Web Search Engine
- See http://legwork.i2p/ViewProfile.html?hash=localhash
- http://yacy.net YaCy Software © 2004-2014 by Michael Christen et al., YaCy.net; Content: ask peer owner
- open
-
diff --git a/linux/build/preferences/distribution/policies.json b/linux/build/preferences/distribution/policies.json
new file mode 100644
index 0000000..5748d21
--- /dev/null
+++ b/linux/build/preferences/distribution/policies.json
@@ -0,0 +1,96 @@
+{
+ "policies": {
+ "AppUpdateURL": "http://127.0.0.1/",
+ "CaptivePortal": false,
+ "Certificates": {
+ "ImportEnterpriseRoots": false
+ },
+ "DNSOverHTTPS": {
+ "Enabled": false,
+ "Locked": true
+ },
+ "DisableAppUpdate": true,
+ "DisableFeedbackCommands": true,
+ "DisableFirefoxAccounts": true,
+ "DisableFirefoxScreenshots": true,
+ "DisableFirefoxStudies": true,
+ "DisablePasswordReveal": true,
+ "DisablePocket": true,
+ "DisableProfileImport": true,
+ "DisableProfileRefresh": true,
+ "DisableSafeMode": true,
+ "DisableSetDesktopBackground": true,
+ "DisableSystemAddonUpdate": true,
+ "DisableTelemetry": true,
+ "DontCheckDefaultBrowser": true,
+ "ExtensionUpdate": false,
+ "Extensions": {
+ "Locked": [
+ "73a6fe31-595d-460b-a920-fcc0f8843232"
+ ]
+ },
+ "FirefoxHome": {
+ "Highlights": false,
+ "Pocket": false,
+ "Search": true,
+ "Snippets": false,
+ "TopSites": true
+ },
+ "FlashPlugin": {
+ "Default": false
+ },
+ "NetworkPrediction": false,
+ "NoDefaultBookmarks": true,
+ "OfferToSaveLoginsDefault": false,
+ "OverrideFirstRunPage": "http://i2pd.i2p/",
+ "OverridePostUpdatePage": "",
+ "Permissions": {
+ "Camera": {
+ "BlockNewRequests": true
+ },
+ "Location": {
+ "BlockNewRequests": true
+ },
+ "Microphone": {
+ "BlockNewRequests": true
+ }
+ },
+ "PopupBlocking": {
+ "Default": true
+ },
+ "Preferences": {
+ "browser.cache.disk.enable": true,
+ "browser.fixup.dns_first_for_single_words": false,
+ "browser.search.update": false,
+ "browser.tabs.warnOnClose": false,
+ "browser.urlbar.suggest.bookmark": true,
+ "browser.urlbar.suggest.history": true,
+ "browser.urlbar.suggest.openpage": true,
+ "datareporting.policy.dataSubmissionPolicyBypassNotification": true,
+ "dom.disable_window_flip": true,
+ "dom.disable_window_move_resize": true,
+ "dom.event.contextmenu.enabled": false,
+ "network.IDN_show_punycode": false,
+ "network.dns.disableIPv6": true,
+ "places.history.enabled": true,
+ "privacy.file_unique_origin": true
+ },
+ "PromptForDownloadLocation": true,
+ "Proxy": {
+ "AutoLogin": true,
+ "FTPProxy": "127.0.0.1:4444",
+ "HTTPProxy": "127.0.0.1:4444",
+ "Mode": "manual",
+ "SOCKSVersion": 5,
+ "SSLProxy": "127.0.0.1:4444",
+ "UseHTTPProxyForAllProtocols": false,
+ "UseProxyForDNS": true
+ },
+ "SearchBar": "unified",
+ "SearchSuggestEnabled": false,
+ "SupportMenu": {
+ "Title": "Ilita IRC",
+ "URL": "http://irc.r4sas.i2p/?nick=WebClient...&channels=dev%2Cen%2Cru&prompt=1&uio=OT10cnVlde"
+ }
+ }
+}
\ No newline at end of file
diff --git a/linux/build/preferences/i2pdbrowser.cfg b/linux/build/preferences/i2pdbrowser.cfg
index 4872af6..8073053 100644
--- a/linux/build/preferences/i2pdbrowser.cfg
+++ b/linux/build/preferences/i2pdbrowser.cfg
@@ -6,38 +6,46 @@
* See full license text in LICENSE file at top of project tree
*/
-/* Do not edit this file.
- *
- * If you make changes to this file while the browser is running,
- * the changes will be overwritten when the browser exits.
- *
- * To make a manual change to preferences, you can visit the URL about:config
- * For more information, see http://www.mozilla.org/unix/customizing.html#prefs
- */
-
lockPref("accessibility.force_disabled", 1);
defaultPref("app.normandy.first_run", false);
+lockPref("app.normandy.enabled", false);
+lockPref("app.normandy.optoutstudies.enabled", false);
+lockPref("app.shield.optoutstudies.enabled", false);
lockPref("app.update.auto", false);
+lockPref("app.update.BITS.enabled", false);
lockPref("app.update.channel", "i2pdbrowser");
+lockPref("app.update.disable_button.showUpdateHistory", true);
lockPref("app.update.enabled", false);
lockPref("app.update.interval", 0);
lockPref("app.update.service.enabled", false);
+lockPref("app.update.url", "");
defaultPref("beacon.enabled", false);
pref("breakpad.reportURL", "");
-pref("browser.aboutHomeSnippets.updateUrl", "");
+defaultPref("browser.aboutHomeSnippets.updateUrl", "");
+lockPref("browser.aboutwelcome.enabled", false);
defaultPref("browser.cache.disk.capacity", 131072);
defaultPref("browser.cache.offline.enable", false);
defaultPref("browser.casting.enabled", false);
+lockPref("browser.contentblocking.database.enabled", false);
+lockPref("browser.contentblocking.report.lockwise.enabled", false);
+lockPref("browser.contentblocking.report.monitor.enabled", false);
+lockPref("browser.discovery.enabled", false);
pref("browser.download.manager.retention", 0);
defaultPref("browser.download.useDownloadDir", false);
defaultPref("browser.feeds.showFirstRunUI", false);
defaultPref("browser.fixup.alternate.enabled", false);
defaultPref("browser.formfill.enable", false);
defaultPref("browser.formfill.expire_days", 0);
+lockPref("browser.messaging-system.whatsNewPanel.enabled", false);
+lockPref("browser.newtabpage.activity-stream.feeds.asrouterfeed", false);
+lockPref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
+lockPref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
lockPref("browser.newtabpage.activity-stream.default.sites", "http://i2pd.i2p/,http://333.i2p/,http://inr.i2p/,http://102chan.i2p/,http://flibusta.i2p/,http://fsoc.i2p/,http://lifebox.i2p/,http://onelon.i2p/,http://wiki.ilita.i2p/");
+lockPref("browser.newtabpage.activity-stream.discoverystream.enabled", false);
lockPref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
lockPref("browser.newtabpage.activity-stream.feeds.snippets", false);
defaultPref("browser.newtabpage.activity-stream.showSearch", true);
+lockPref("browser.newtabpage.activity-stream.showSponsored", false);
lockPref("browser.newtabpage.activity-stream.telemetry", false);
pref("browser.newtabpage.activity-stream.topSitesRows", 2);
pref("browser.newtabpage.enhanced", false);
@@ -49,6 +57,7 @@ defaultPref("browser.onboarding.tour.onboarding-tour-performance.completed", tru
defaultPref("browser.onboarding.tour.onboarding-tour-private-browsing.completed", true);
defaultPref("browser.onboarding.tour.onboarding-tour-screenshots.completed", true);
defaultPref("browser.pagethumbnails.capturing_disabled", true);
+lockPref("browser.ping-centre.telemetry", false);
defaultPref("browser.places.smartBookmarksVersion", -1);
pref("browser.reader.detectedFirstArticle", false);
pref("browser.rights.3.shown", true);
@@ -83,7 +92,6 @@ defaultPref("browser.search.defaultenginename.US", "YaCy 'legwork'");
defaultPref("browser.search.geoSpecificDefaults", false);
defaultPref("browser.search.geoSpecificDefaults.url", "");
defaultPref("browser.search.geoip.url", "");
-pref("browser.search.hiddenOneOffs", "Amazon.com,Bing,DuckDuckGo,eBay,Google,Twitter,Wikipedia (en)");
defaultPref("browser.search.official", false);
defaultPref("browser.search.order.1", "YaCy 'legwork'");
defaultPref("browser.search.order.2", "");
@@ -96,11 +104,11 @@ defaultPref("browser.search.region", "US");
defaultPref("browser.search.searchEnginesURL", "");
defaultPref("browser.search.suggest.enabled", false);
defaultPref("browser.search.update", false);
-pref("browser.search.widget.inNavBar", true);
lockPref("browser.send_pings", false);
pref("browser.send_pings.require_same_host", true);
defaultPref("browser.shell.checkDefaultBrowser", false);
pref("browser.startup.homepage", "http://i2pd.i2p/");
+defaultPref("browser.startup.homepage_override.mstone", "ignore");
defaultPref("browser.tabs.closeWindowWithLastTab", false);
lockPref("browser.tabs.crashReporting.sendReport", false);
defaultPref("browser.translation.engine", "");
@@ -132,6 +140,8 @@ pref("devtools.debugger.remote-enabled", false);
pref("devtools.webide.autoinstallADBHelper", false);
pref("devtools.webide.autoinstallFxdtAdapters", false);
pref("devtools.webide.enabled", false);
+defaultPref("devtools.whatsnew.enabled", false);
+defaultPref("devtools.whatsnew.feature-enabled", false);
pref("dom.allow_cut_copy", false);
pref("dom.archivereader.enabled", false);
pref("dom.battery.enabled", false);
@@ -146,6 +156,7 @@ pref("dom.maxHardwareConcurrency", 2);
pref("dom.mozTCPSocket.enabled", false);
pref("dom.netinfo.enabled", false);
pref("dom.network.enabled", false);
+defaultPref("dom.push.enabled", false);
pref("dom.telephony.enabled", false);
pref("dom.vibrator.enabled", false);
pref("dom.vr.enabled", false);
@@ -155,13 +166,17 @@ pref("dom.workers.enabled", false);
pref("experiments.enabled", false);
pref("experiments.manifest.uri", "");
pref("experiments.supported", false);
+pref("extensions.abuseReport.enabled", false);
pref("extensions.autoDisableScopes", 0);
pref("extensions.blocklist.enabled", false);
pref("extensions.blocklist.url", "");
-pref("extensions.getAddons.cache.enabled", false);
+defaultPref("extensions.getAddons.cache.enabled", false);
pref("extensions.lazarus.showDonateNotification", false);
lockPref("extensions.pocket.enabled", false);
+lockPref("extensions.screenshots.upload-disabled", true);
pref("extensions.shownSelectionUI", true);
+defaultPref("extensions.systemAddon.update.enabled", false);
+defaultPref("extensions.systemAddon.update.url", "");
pref("extensions.ui.lastCategory", "addons://list/extension");
pref("extensions.update.autoUpdateDefault", false);
defaultPref("extensions.update.enabled", false);
@@ -170,23 +185,26 @@ pref("full-screen-api.warning.timeout", 0);
pref("general.buildID.override", "20100101");
lockPref("general.platform.override", "Win32");
lockPref("general.useragent.locale", "en-US");
-lockPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0");
+lockPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/78.0");
pref("general.warnOnAboutConfig", false);
defaultPref("geo.enabled", false);
lockPref("geo.wifi.logging.enabled", false);
defaultPref("geo.wifi.uri", "");
+lockPref("identity.fxaccounts.commands.enabled", false);
lockPref("identity.fxaccounts.enabled", false);
defaultPref("intl.locale.matchOS", true);
pref("javascript.use_us_english_locale", true);
pref("keyword.enabled", false);
pref("lightweightThemes.update.enabled", false);
pref("loop.logDomains", false);
+lockPref("marionette.enabled", false);
defaultPref("media.eme.enabled", false);
lockPref("media.getusermedia.audiocapture.enabled", false);
lockPref("media.getusermedia.screensharing.enabled", false);
pref("media.gmp-eme-adobe.enabled", false);
-pref("media.gmp-gmpopenh264.enabled", false);
+defaultPref("media.gmp-gmpopenh264.enabled", false);
pref("media.gmp-gmpopenh264.provider.enabled", false);
+pref("media.gmp-manager.cert.checkAttributes", false);
pref("media.gmp-manager.url", "");
defaultPref("media.navigator.enabled", false);
defaultPref("media.navigator.video.enabled", false);
@@ -199,17 +217,21 @@ defaultPref("media.peerconnection.use_document_iceservers", false);
defaultPref("media.video_stats.enabled", false);
defaultPref("media.webspeech.recognition.enable", false);
defaultPref("media.webspeech.synth.enabled", false);
+defaultPref("messaging-system.rsexperimentloader.enabled", false);
defaultPref("network.IDN.whitelist.i2p", true);
defaultPref("network.IDN_show_punycode", true);
defaultPref("network.allow-experiments", false);
+lockPref("network.captive-portal-service.enabled", false);
+lockPref("network.connectivity-service.enabled", false);
pref("network.cookie.prefsMigrated", true);
defaultPref("network.dns.disableIPv6", true);
defaultPref("network.dns.disablePrefetchFromHTTPS", true);
-defaultPref("network.dns.disableprefetch", true);
-pref("network.http.speculative-parallel-limit", 0);
+defaultPref("network.dns.disablePrefetch", true);
+defaultPref("network.http.speculative-parallel-limit", 0);
defaultPref("network.jar.open-unsafe-types", false);
pref("network.manage-offline-status", false);
defaultPref("network.negotiate-auth.allow-insecure-ntlm-v1", false);
+defaultPref("network.notify.changed", false);
pref("network.predictor.enabled", false);
defaultPref("network.prefetch-next", false);
pref("network.protocol-handler.expose-all", false);
@@ -263,13 +285,17 @@ defaultPref("reader.parse-on-load.force-enabled", false);
defaultPref("security.insecure_field_warning.contextual.enabled", false);
defaultPref("security.insecure_password.ui.enabled", false);
defaultPref("security.ssl.errorReporting.enabled", false);
+defaultPref("security.OCSP.enabled", 0);
defaultPref("services.blocklist.update_enabled", false);
+pref("services.settings.server", "");
lockPref("services.sync.enabled", false);
pref("services.sync.prefs.sync.browser.download.manager.scanWhenDone", false);
pref("services.sync.prefs.sync.browser.safebrowsing.enabled", false);
pref("services.sync.prefs.sync.browser.search.update", false);
pref("services.sync.prefs.sync.extensions.update.enabled", false);
pref("signon.autofillForms", false);
+defaultPref("signon.management.page.breach-alerts.enabled", false);
+defaultPref("signon.management.page.vulnerable-passwords.enabled", false);
pref("signon.rememberSignons", false);
defaultPref("startup.homepage_welcome_url", "http://i2pd.i2p/");
pref("startup.homepage_welcome_url.additional", "about:blank");
@@ -285,96 +311,3 @@ defaultPref("webgl.disable-fail-if-major-performance-caveat", true);
defaultPref("webgl.disabled", true);
defaultPref("webgl.enable-debug-renderer-info", false);
defaultPref("webgl.min_capability_mode", true);
-
-var config = {
- "cckVersion": "2.2.9",
- "name": "I2Pd Browser",
- "description": "Preconfigured for use with I2P browser",
- "version": "1.2.8",
- "homePage": "http://i2pd.i2p/",
- "welcomePage": "http://i2pd.i2p/",
- "titlemodifier": "I2Pd Browser",
- "extension": {
- "name": "I2Pd Browser"
- },
- "noWelcomePage": true,
- "noUpgradePage": true,
- "removeSetDesktopBackground": true,
- "removeSafeModeMenu": true,
- "noGetAddons": true,
- "noAddonCompatibilityCheck": true,
- "disableSearchEngineInstall": true,
- "removeDefaultSearchEngines": false,
- "displayBookmarksToolbar": true,
- "removeSmartBookmarks": true,
- "removeDefaultBookmarks": true,
- "removeDuplicateBookmarkNames": true,
- "dontCheckDefaultBrowser": true,
- "dontUseDownloadDir": true,
- "disableFormFill": true,
- "disableSync": true,
- "disableCrashReporter": true,
- "disableTelemetry": true,
- "disableFirefoxHealthReportUpload": true,
- "disableFirefoxHealthReport": true,
- "disableFirefoxUpdates": true,
- "removeSnippets": true,
- "disableResetFirefox": true,
- "disableWebApps": true,
- "disableHello": true,
- "disableSharePage": true,
- "disableForget": true,
- "disableHeartbeat": true,
- "disablePocket": true,
- "disableAboutSupport": true,
- "disableAboutProfiles": true,
- "showSearchBar": true,
- "autoconfig": {
- "disableProfileMigrator": true
- },
- "id": "i2pdbrowser",
- "hiddenUI": [
- "#defaultBrowserBox",
- "#enableSearchUpdate",
- "#dataCollectionCategory",
- "#dataCollectionGroup",
- ".help-button",
- "#onboarding-overlay-button",
- ".prefs-modal-inner-wrapper > section:nth-child(6)"
- ],
- "searchplugins": {
- "YaCy 'legwork'": "resource://cck2_i2pdbrowser/searchengines/legwork.xml"
- },
- "defaultSearchEngine": "YaCy 'legwork'",
- "certs": {
- "ca": [
- {
- "url": "resource://cck2_i2pdbrowser/certs/purplei2p_ca.pem",
- "trust": "CTc,CTc,CTc"
- }
- ]
- }
-};
-
-var io = Components.classes["@mozilla.org/network/io-service;1"]
- .getService(Components.interfaces.nsIIOService);
-var resource = io.getProtocolHandler("resource")
- .QueryInterface(Components.interfaces.nsIResProtocolHandler);
-
-var greDir = Components.classes["@mozilla.org/file/directory_service;1"]
- .getService(Components.interfaces.nsIProperties)
- .get("GreD", Components.interfaces.nsIFile);
-var cck2ModuleDir = greDir.clone();
-cck2ModuleDir.append("cck2");
-cck2ModuleDir.append("modules");
-var cck2Alias = io.newFileURI(cck2ModuleDir);
-resource.setSubstitution("cck2", cck2Alias);
-
-var configModuleDir = greDir.clone();
-configModuleDir.append("cck2");
-configModuleDir.append("resources");
-var configAlias = io.newFileURI(configModuleDir);
-resource.setSubstitution("cck2_i2pdbrowser", configAlias);
-
-Components.utils.import("resource://cck2/CCK2.jsm");
-CCK2.init(config, "ä"[0], "ä");
diff --git a/linux/build/profile-en/addonStartup.json.lz4 b/linux/build/profile-en/addonStartup.json.lz4
new file mode 100644
index 0000000..1c3d09f
Binary files /dev/null and b/linux/build/profile-en/addonStartup.json.lz4 differ
diff --git a/linux/build/profile-en/search.json.mozlz4 b/linux/build/profile-en/search.json.mozlz4
new file mode 100644
index 0000000..fc10c37
Binary files /dev/null and b/linux/build/profile-en/search.json.mozlz4 differ
diff --git a/linux/build/profile-ru/search.json.mozlz4 b/linux/build/profile-ru/search.json.mozlz4
new file mode 100644
index 0000000..cc0c7a5
Binary files /dev/null and b/linux/build/profile-ru/search.json.mozlz4 differ
diff --git a/linux/build/profile/cert9.db b/linux/build/profile/cert9.db
new file mode 100644
index 0000000..bcc5421
Binary files /dev/null and b/linux/build/profile/cert9.db differ
diff --git a/linux/build/profile/certificates/purplei2p_ca.pem b/linux/build/profile/certificates/purplei2p_ca.pem
new file mode 100644
index 0000000..bbbcc77
--- /dev/null
+++ b/linux/build/profile/certificates/purplei2p_ca.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID7DCCAtSgAwIBAgIJAKXaTovgoTIUMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
+VQQGEwJXVzEUMBIGA1UECAwLSTJQIE5ldHdvcmsxEjAQBgNVBAoMCVB1cnBsZUky
+UDEqMCgGA1UEAwwhUHVycGxlSTJQIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR0w
+GwYJKoZIhvcNAQkBFg5yNHNhc0BtYWlsLmkycDAeFw0xODA4MjQyMTQ3NTJaFw0y
+MzA4MjMyMTQ3NTJaMIGCMQswCQYDVQQGEwJXVzEUMBIGA1UECAwLSTJQIE5ldHdv
+cmsxEjAQBgNVBAoMCVB1cnBsZUkyUDEqMCgGA1UEAwwhUHVycGxlSTJQIENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MR0wGwYJKoZIhvcNAQkBFg5yNHNhc0BtYWlsLmky
+cDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALAZnN/U5bgkmiBqp/Np
+yiMOkUPjr2tLhV78Oba46xDLA6AiQ7yTPg+/ZYPIfbF2dPBTpfgGdly2M1xymRKc
+3Pa+IUXkLw6oCA+lFzOFW0Swtekk9HRAgGyHgj6/Hvagva5Wer4HJIO1qRsFPew+
+XcM3uhhiXoiO8o+YGpJ/7kz0gED3p2b9OVsLPd8G/GfdR3miD+Au+kUx/27z/WdJ
+ISfFILFnYeYZGffrpRcFtoGwuZUCugwnbLtpQpNKuGq8jDidm1v6Rb85JmkoH3Sg
+lRaX1MK0aPhM4WfCf7aWCNe669FAWPNB3Ya2lue7ewPLI84ZUEqcoJwmWn2ci2SU
+EXUCAwEAAaNjMGEwHQYDVR0OBBYEFG3hwzikpXqMasw678OHM8uLyjEoMB8GA1Ud
+IwQYMBaAFG3hwzikpXqMasw678OHM8uLyjEoMA8GA1UdEwQIMAYBAf8CAQAwDgYD
+VR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQA07URxJMI/Ta9y1wIg+k7o
+1aHXsl6YOXmd2ymhKZhZHrZlutE2U19IQSoEV0SBddP9D05xD6Ovsrwo7caeYzNt
++2DJnlJ2IY61NqYUIDEoJyNPL/S7WleH+xO+bcSqWvbntTNYAD6WQVfHCAimVE6P
+RnSZGqG089i84DRCyrh/6F1OxnBd6j14z+2ctQD+h6NlQXiCAUIwzVirYoE7oGpH
+Xta7Ei+RDvBXLXLAQRdXpzSP/Ddf7MCJzmH3VYAy+0sVuHr09hpFMtC59hTrdLVD
+/qma0eKrBr1DGH6QrZMZDqpNfv4wUPyVQBsRbbn2/1fL9IqK43CIj8RUllCOsmyU
+-----END CERTIFICATE-----
diff --git a/linux/build/profile/xulstore.json b/linux/build/profile/xulstore.json
deleted file mode 100644
index 6fe09a3..0000000
--- a/linux/build/profile/xulstore.json
+++ /dev/null
@@ -1 +0,0 @@
-{"chrome://browser/content/browser.xul":{"navigator-toolbox":{"iconsize":"small"},"titlebar-placeholder-on-menubar-for-caption-buttons":{"width":"102"},"titlebar-placeholder-on-TabsToolbar-for-captions-buttons":{"width":"102"},"main-window":{"screenX":"30","screenY":"30","width":"1280","height":"720","sizemode":"normal"},"PersonalToolbar":{"collapsed":"false","currentset":"personal-bookmarks"},"toolbar-menubar":{"currentset":"menubar-items"},"TabsToolbar":{"currentset":"tabbrowser-tabs,new-tab-button,alltabs-button"},"addon-bar":{"currentset":"addonbar-closebutton,status-bar"},"nav-bar":{"currentset":"back-button,forward-button,stop-reload-button,urlbar-container,bookmarks-menu-button,downloads-button,_73a6fe31-595d-460b-a920-fcc0f8843232_-browser-action"},"sidebar-title":{"value":""}}}
\ No newline at end of file
diff --git a/linux/i2pd/addressbook/addresses.csv b/linux/i2pd/addressbook/addresses.csv
index 2f4bfa4..9a5ec98 100644
--- a/linux/i2pd/addressbook/addresses.csv
+++ b/linux/i2pd/addressbook/addresses.csv
@@ -1,1197 +1,364 @@
-00.i2p,zmzpltxslembpaupg3srh4bbhv5txgh5jmms6sfj4hzsvlv3xugq
-01-laienhaft.i2p,sc2psmpgvhy4witmedjqunywznukyzyz4y6izdeddkb4k6qugsya
-02ch.i2p,6k3irsqo5v536bs45t5hn5f3s5pi7a3bp5nuxc6y72svjqp6vymq
-0chan.i2p,ah7wvpwga7hlwa2f7gnnxuqycnng5j5bkglhfm5ychejpnjucmka
-0ipfs.i2p,cdii3ou5mve5sfxyirs6kogt4tbvivk2d6o25awbcbazjrlhjeza
0pl.i2p,gd7qe2pu2jwqabz4zcf3wwablrzym7p6qswczoapkm5oa5ouuaua
-0x0.i2p,5kyswcuppi6pelnv2522mky4fodoter2h3cqhbzibppgimjlg4ka
-0xcc.i2p,gawouxh2sg32cluwlqsnpy3dwedvoqtfroi4evvdvm2pfv7tdadq
-1.fcp.freenet.i2p,cuxbeputgxn75ak4nr7ltp7fjktnzl5sul3wstwnsoytbbpb4ixq
+102chan-memorial.i2p,t6uwxydnfd7mo2knxklmnrudxafe4mw5ojiqikj7xfrc4ynltz3q
102chan.i2p,xxu3lso4h2rh6wmrxiou3ax7r7la7x6dhoepnku3jvrlwp35pefq
-1st.i2p,rduua7bhest6rwsmmyttzssfdw3p4eu6bgl3mb4hin32qo3x5zfq
-2.fcp.freenet.i2p,ndsznnipoeyapnsg3gj3yi2dzsqduxwalmujm5mzjm7e6x374tta
2ch.i2p,suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
-2chan.i2p,xnmlqiwaio6bg6dtbjqb63rtoznvgeud5acxklccomv5yytefmda
-2channel.i2p,wirxk4kulmd7v6qmttltnu5nx2vtchzvrg7ewocejrvdjcaiv5sq
-2hu.i2p,7jcjkstbxt4uqnvxnu5defexawuzzhwwux3np55bgoz2l5jljeva
-2rqv7nn2.i2p,2rqv7nn2j4q3wcxe5lsrqpf73k4rmtutweft3dvbc2w245vpkdva
333.i2p,ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza
-55cancri.i2p,b4iqenefh2fr4xtuq6civfc6nhnia6e2yo36pf7vcgdvrwmh7xua
-7i3.i2p,y4gh4ocvlsxnyjgqbdlqb6eeff4a4e62wbzuewd3ralagyopzb4q
-9.i2p,4serdqvuthqxeaovnfc5ybdjin3l7noperdgplthjwqovzxifvya
-a-zine-repo.i2p,zt6okylza25s2ppso7ngqbz2ybeteatxezxqemvucwhbb5ajot7a
aaa.i2p,zzhy7rumzzgxzodvgu4xz324nekbbccphegweukj4cm6nrbpg4oa
-aargh.i2p,wp7dwr6rsd6374g6sjlazwiy775lshtrwpy6gidyejpvyowlkqyq
-ababa.i2p,l454utm25jc4avll4byxmrpesbrinjbvxocryttvxqbcy3x2fbsq
-acestream.i2p,2ojd3s4rb73d6qvwz36x4ysjzqbnkzluemdbxhuuuf7qbbfew26a
-aconscientiousperson.i2p,6o6o65wdyljghdbaqxs6qqrgm54rrdi4ys3ows6dv74tkvy3sdqq
-adab.i2p,pxjr6f2cig6v7v7ekam3smdnkqgmgseyy5cdwrozdyejm7jknkha
-admin.open4you.i2p,hnlryqjvk52hsze2ixnz4qbuki4tf6qvygi25mf5bkllmbett2oa
-admin2.open4you.i2p,d62hjvhu7yqd23m766dvs4tupxpvrsa2hzd2r5rdpm5apsmtmc6a
-agaming468.i2p,4svcmhjnijtnclv2vdgf3ipdvzizgeyllysjfl6vu3xkqwa3w6sq
-agora.anarplex.i2p,ydaal5nbvxmydnncny5esb3ipxupmpgkensow7yvhp6u7uioujna
-agora.i2p,nvslgzpyqhxldfik5uwua7eqse5adqon5h4dbzqepw7ringod44q
+abdlandrubbernetwork.i2p,asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca
+acetone.i2p,tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a
agoradesk.i2p,ztqnvu7c35jyoqmfjyymqggjpyky6z3tlgewk2qgbgcmcyl4ecta
-aktie.i2p,4qwhpshwlp6ndzvtiwvf7myc3lll3vizqcdvvuxrzgaxv4g2qogq
-alacast.i2p,sdlcbhe5jffgdsmzaharudzbzhipw4pth24ivy7m3nqm5paxgtuq
albatcats.i2p,ilgg7nbtofvgzrpl6kenxugfdsgi3apu6sgilmqi5rhpolnauyga
-alcb.i2p,jxjxuqkgblqlbsngarpjisyx6c36tr4zrk7c4jlglvgvqtx2mifa
-alfogo.i2p,ffpoiodfwljmtar22coemsyrk5y5b2toa4cpjtatfutymn6o4kxq
-alice.i2p,iq26r2ls2qlkhbn62cvgb6a4iib7m5lkoulohdua5z6uvzlovjtq
-alterchan.i2p,6o6tlcrs3nj2vks5w4fehtbk7263dinlwd3brsbk3vdefsqkddda
-alttechdenizen.i2p,a6doke6sicgf6kktwe6dxnpft5agsouvqnuqw2abfo7eyjbylzxa
-always.i2p,wp43sdtuxum6gxbjvyeor35r5yvgtkp3dcu7dv47lx22zeb3relq
-amazingmisc.i2p,ndmujfb6zp5shfctvcczwvervyncwhsdncuvhg44mihr3acbtosq
-amazone.i2p,e6kq73lsxaeyiwpmykdbdo3uy4ppj64bl7y3viegp6mqrilqybqa
-amber.proxynet.i2p,ibijzvwflctuyyqazduxt52ffldlkpbqdq6f6ykfnudikzxcivua
-amiga.i2p,edy2xappzjjh7bxqounevji4wd2binqkv7gft4usrkan45xhbk5q
-amobius.i2p,rj6432agdprun5baai2hj62xfhb4l75uvzl55dhj6z5zzoxv3htq
-an0nmaz0n.i2p,ztooc5o6jqv67jnuqt7qqyo5v3ms6dbpujokbx73zoni4yh5gg7a
-anarchistfaq.i2p,xosberjz2geveh5dcstztq5kwew6xx2brrqaorkjf2323bjzcd3q
-anarplex.i2p,4qingryacppi5ed2vk2626qipri3d7c2v6iw3vr55zy6c2uc66za
-andmp.i2p,rv6zugykqdhmwwsuglv7j6ktjojdbf5fqta66hixejg33qb2su3q
+anek.i2p,iprnd5ceoj3sovmhoigwammwi7zuklrqwzfzrhvhjppspfxepvpa
animal.i2p,5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla
-anna.i2p,ou275m6qezujy66672l2ozowaqb6vk47wmitbizlkh75o75i444a
-anodex.i2p,25cb5kixhxm6i6c6wequrhi65mez4duc4l5qk6ictbik3tnxlu6a
-anodex.livingstone.i2p,yol5t4pjcaue57wf5f2iyub4hbm7xkwwtmzdfpz2kldhavdpm7eq
-anoharsath.i2p,ydn72ascujpmy2afhpkotvy3e6z7mrqeg3l45nblxhj7b5jkyl4a
-anon-box.i2p,kbv3jc2f4efmq2q4lj66p6xjkgmfhaed3jl7uzaml6y3oqc4jfpq
-anonarchive.i2p,vblifonpbegzggx5mgev6wtgtfpkz5ykv5awgrzsqv2lcknjp7ea
-anoncoin.i2p,nmi3loretkk4zbili32t2e5wyznwoxcsgzmd2z4ll3msgndyqpfa
anongw.i2p,owrnciwubb3f3dctvlmnaknb6tjdxtlzvv7klocb45mmhievdjhq
-anonime.i2p,mbctq7blcu2cqfjyn2ptf7plvgirwtqnqqo3bevs5omggxtaekya
-anonirc.i2p,qm7il7eolcvyppflohqgbecjtgq6tqwtmqmtvfcew2otdmjpe7qq
-anonsfw.i2p,ir6hzi66izmvqx3usjl6br3nndkpazonlckrzt3gtltqcy5ralyq
-anonymnet.i2p,77ouyl2ane7ffgydosd4ye42g67aomtc4jrusmi76lds5qonlffa
-anonymousfreeworld.i2p,ayt3o2lovn5vd5pal7p43bcqkbjymtqhoilbmhj5dj4yoo5qklia
-anonymousfreeworldirc.i2p,7sshnegbgqk5grdoqx3qjgbd7vpr5jti3keemz4xt5x6wo3cqkoq
-anonynanny.i2p,l2lnhq2dynnmf3m46tcbpcmbbn4kifjgt26go6n2hlapy4drhyja
+anonroms.i2p,w2sgx2i5n4uxtqjgekckxnhhpymigpn5lmgdaujyzib6sxq7j4cq
anonyradio.i2p,cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq
-anotoi.i2p,vthumgmniwvac2wcrjui2heaxpb7cuty46ovt4mvf5ontwusfima
-ansoma.i2p,rapsznfm3sgsiubmfwp5xs3uvdrx2j3zjipfgfqjem33kvikb6ta
-antipiracyagency.i2p,by4kcmklz7xnkai6ndfio47kts3rndm6wwleegtxghllimikdapq
-antipiratbyran.i2p,y2qbhrvuciifbszaqqwxd5t75bomp7kzdqx4yxsrkaq542t75k3a
-aosp.i2p,ly7raldsh2na2cgw5yvueyvqqjgx3vbqinecjrqdldgya76i2p2q
-aplus.i2p,h67lym6btfqinjs5ye272fo6uze2uvjk6t7qabibocjedfcv5fva
-aport.i2p,uvpczf5ljaptviombwxi6vmqxpzh6zpthyhvczzp57ihwfzrxnhq
apt.idk.i2p,s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia
-apt.mirror.i2p,kazqug7jqkfokjuyfstok4s2wnhtk3pueoaiuucashwzjqgsvpra
-arc2.i2p,rnmosuwvtftfcrk5sk7zoyhyadh2g4dhe2mif5ml7qjisgkyw2na
archaicbinarybbs.i2p,t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa
-archer.i2p,6i4xsdvh3xxvi2gp32rdbkoyobpvywr2drq5dyq5v6uqlqvh2mtq
archiv.tutorials.i2p,lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq
-archive.i2p,x54d5st3dl6mwgfxj6raiekqkypo5pdvuex3n62szwju7hgefiyq
-archive.syndie.i2p,abbyu5n3mh3nj7pe3b6byldrxswvva5ttxcafsnnseidanurq3kq
archlinux.i2p,5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa
ardor-wallet.i2p,tm23k5ny3umhf6vf3kghnnwacli5zywq5wrr3xcqowbcofuyr4gq
-ardvark.i2p,jcmw2sol3hruwc6rfinonx4e23pjkukkg7lg7xt7xb2gpiyyraiq
-arf.i2p,o46lsq4u7udxg3qqlidrmpj4lb4nr7ldxmbb2x53nftndaeyxqeq
-aria2.i2p,ejtai4k4v3gechtoz6zd7eqlz6wptwyi45kp5pohfqjcobpy53xa
-ark.i2p,svqersykedes2w5rxryiqfy65kqvfgojugdlyniio3qtgsjbhfva
-arkan.i2p,7o5y2lyyrjx5tf6l4fyumywui7msjv5azaaheatvw5sqj7mxbuvq
-arkwright.i2p,ebovdlxw47kodamth7p33nenfxy5kqsyu7usp2c3ni3dyfrbbvpa
-armada.i2p,26qxgmyqczulza5ym3jij5er3onclacejyqzecuhjllwun3kxuzq
-artik.i2p,3o7u6aag37cx6vvfort2xkorfra5begoz5j3pwgp27toczhjxgpa
-arus.i2p,a5sf2rk77dbsam2pmqrl6o74nvbwj2gmld4ofdowaxjpfeulx45a
-asciiwhite.i2p,itbzny5ktuenhjwjfqx3jravolhlj5wullhhr2m4qr6k2emnm5dq
-aspnet.i2p,tsb7zqru57p4q2a7cto2lko4w5cg4lieglwm6t27c44fkphqmf2a
-asylum.i2p,p45ejjw4p2q6nq3mzi6cm6ep35grtzshboidj2lojmrmic22noha
-atesi2p.i2p,hlahr4wgobvhegluufw3ckzulr4etamxxborktgz3dkefok232ga
-auchan.i2p,6vxz4yp3vhjwbkmxajj7wiikxafwujig63gkhjknbq6xh4rqpm5a
-aum.i2p,ohdfneqxapfd3fwfbum4tut7z6k3rnr7rrguoxdrrfe2tln2kpbq
-awen.i2p,yg2lo3fuqx4zjy7f7uocwdy6j7gb7svfrirmljwlxmfeir54zwxa
-awup.i2p,v6g32duzrkacnrezfbll3pza5u37h7lnukr2wbsk6rqen6prhbga
-b.i2p,272kt3gcx6wjurunzaiiwld7s5p4mpjewfubzmlcvw2vie62ckpq
-b812.i2p,ltkr76etonbnqv7pk5o2rhiud334wqrmyl5eskp5b3wfpnik75ua
-babylonastronaut.i2p,t7xrcwnbbmf24mwr4n5l2blzsmrieawporojjx72m3yjvczqw6mq
-bacardi.i2p,hivhnx2v47vh234c7coi2urj5cyvbl4bu3ypjr7snklortyqeljq
-backup.i2p,kepphem42whle3rkfv26wcksmnegdbg6rdp6t3oobdkc2fmzrdkq
-badfish.i2p,f6v26gyr4eipy3a7pi2voulw5qvob6dg7zij6xpo2ywbi5tvbu6a
-badtoyz.i2p,3qz6ubtwlt2c4iasofjirkckq43u5fgkzyg7mlutcsym5gzhijna
bandura-yacy.i2p,e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq
bandura.i2p,n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a
-barry.i2p,4kyahq53ol52n23l44tefgeaxqpp3cbb632t5k3umdvqcooevdzq
-bash.i2p,s3wouoilbl3mrefxjhp4qoyujgok34e7y6vmpbu6hx4342ivqo4q
bbs.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
-bdl.i2p,kp6fnuulenbjm7r26pfbmjcq3u7c7kvxeajodvgr5flcnskdgi5a
-bdsm.i2p,pa7fxql5jljegg7j5tglhnnaod2sptq3gxvdn3ji6muqyhgn3poq
-bee.i2p,gpgzc22souybsx6xo74radtybx7eo34nkwxnymfww7nhyj2jb3yq
-beeftek.i2p,ahm3a32grgelzzwnzsa7qbva7usyev5vvozp4l7zymxqj36r4k7a
-betaguru.i2p,d7cduwwhrcc2voameqfkvd66u3advu4jw2p6pysgax35vq6ovriq
-beyond.i2p,uaicfqlrpjtitqbqkpfujanj5dollzfzee5glsuls67ekw6hlpoa
-bible.i2p,pypz7ca24n3lyp4tm3kvncg3ltp3gd5pgnacc6zltoeffiyyegda
bible4u.i2p,xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq
-bigbrother.i2p,tnxiifs6uticzyg6ac4lhv2l5luwi6xra7yngocro56ive5e4jsq
-bitlox.i2p,lqw5khxcdntlv3u4vhn53upcqirplvnc4etjlmoytrzs66ytettq
-bitmoney.i2p,sd7asgdgnicjyj6lkaavux77u4vyvhv62pm3dfmluoc4xuivxb4a
-bitslair.i2p,q3k4tsw4fgw7wvm4ufpbstuw44rd6g6k6aymqvkij7fwehldecpq
-bittorrent.i2p,pgax2vz572i4zsp6u6paox5xubmjrkqohq6g4hvlp6ruzzy56l5q
-bk1k.i2p,nlyegmtyfffo5jfgg5h4dxxnlmqko2g36gpaye5a7vd3is35xxfq
-bl.i2p,e73d6uhnfbylza6wqkhxejmqeyfb7thkzw35gn5ojmna64jzyk2a
-blach.i2p,khjfx7pdxt4oqxqcgk6zupqvmelpjkpiafzjefe75sl3qxu5hcua
black.i2p,sjwueu62qpe6dtv5b322k3f23fl4uz3w6qe6wcrwauiwpnymypfq
-blackbox.i2p,7josyf7zjieoib3ovmr5a4dh5w64kmfh45lv5h436eljtgfegtqa
-blackdragon.i2p,yj7fa7i4malizkewvvzufwgig4dypuig2o3ysfxtewpxs2eqaq5q
-blackexchange.i2p,ztgr5kghkyn43fhhkuycroxgfti6cojo3vg4wdd3usqonyvrla5q
-blacklong.i2p,dx2jfxy7pwj6bbmcnshunjgfyranab4xy2dmaid65cpxwt6idiba
-blackmetal.i2p,xhcyocs3t4ifexiktqyld5t4ownetrm2oquhee57dgenwn6w2fjq
-blog.curiosity.i2p,yiz6jec5k7ccxdgnh7msqa4ze52bqqmf6rpq6bqdyojra2erd4ta
-blog.polecat.i2p,orlccceubewvxo3fbdyydq6e4uuidbs4xd5u2gyqbculnowo3ehq
-blog.tinlans.i2p,ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda
-blue.proxynet.i2p,wfigbdfs6tvajiw24xwohbwwy5pq3jcgzevwnsky2ucwzwgodumq
-bluebeam.i2p,lvxp3cbcfwtol57d5pmrsck32t7ndutlxubjb4smaf32bynhlk6a
-blueheron.i2p,anfb5jrhixjmvkyxctqwkezqer7dbob22wge2bh6wsewbhgnftfa
-bmctn.i2p,yofmgvwn4bbn7flpdets2lckbppbwpike6bmqr7imdncmjbdvwcq
-bmw.i2p,6naudpj2zozw6aiiqusv6znfzyprwitrufauz3zuejtdbotp6mxq
-bmworc.i2p,w254y65la47elcmf6mo7xc2caamm3ikeusmjjfknwsavwsy4whzq
-bnc.i2p,fr4zbcygmx2vdct6nrabakfys4b4derm6jqu2ovppkgqillvlqxa
-bob.i2p,i76m7dwm5hnapljendbie6fc5y3mjlkdlduo3tvbwiwmvhxbpyaa
-bobcat.i2p,ftuukjtcquuvppt726w37boit7gp5hf2yxwfop35prx3grzzzxlq
-bobthebuilder.i2p,qlahgthqhr4uojkkwahnper2cl3ro5f5gtzy5t4lzapbzo4osy6q
boerse.i2p,7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq
bofh.i2p,auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a
-boing.i2p,bgsq33bh74j66hn4oh7oovlvuhhdyw22lq2qi2fnv3jyh2ryap3a
-books.i2p,4hoggh2mh3jvnqrjge4vl6hg5ud6lssu7k5n4wyftifnwlfp7p5q
-books.manveru.i2p,eb2tisc2vr5jvjqrixrozcujiucwxg4m722stxwho5666ipl67zq
+boran.i2p,boranyzcefxqw2ktndemy3npt4zhetpp6edldtlym2ap7n5azt5a
bote.i2p,bhjhc3lsdqzoyhxwzyrd63kvyg4br6n2337d74blyintae66mr2a
-bozo.i2p,7a2d23h6htprhzrol36vgwgklsbqrnuya4tbaaaspmaeaodt57iq
-breaktheirbank.i2p,5c73sm3dky2pbsbdxnb5jqbgnnyimoonrln24yt7yao3nsus25vq
-brittanyworld.i2p,e76umhhic3474sdxiuax25ixyfg7y3z7oojj4fmxvhgv3ruet6aa
-bronzong.i2p,qqboneeyhdea3rm2mjkr6fb7mfuzhyrvovexyxi2dk4nudgye3wa
-brown.proxynet.i2p,ray4pizoghc2cxegomwurcpfhi6xvq6b35eiydwfmg5n5jzcacwq
-bs.i2p,bcr355ziz6uupqzsmfffa6zbk4bdte4yvkk3qy4xryy7hmw5axzq
-bt.i2p,uhkuu54pg47zey76h45tnvsdtpkf5bthbtrjgnaloi5m54h4hlaq
-bt.nnm-club.i2p,bmqz3v5ulhkvyqeahmp7co76ea4mwrxvb5nmtuclltpthm4mb47a
-bttracker.i2p,spjpsgdhy764p2tgk5uffvzwhr2tnojdedyooglwgjvf3izz2yaa
-bugfuzz.i2p,ubszn4gsf22vga67rvzzlg4qj2bfcq6o52fmxz46xruawqm6z7rq
-burningcold.i2p,7sw4p3rhzl5q2olfcxwig54huc3rhhoqgqsz5cdpy7k5tlwfsriq
-burntout.i2p,lkep3fd7tjvxrs25crr2c3jy7xm4s7bqiua5r327zgpw37sgyerq
-bytepay.i2p,7amc4ztwkzu3cgsaaaw3223ohuihn5hlsqc6gpf2rxdyptdkyugq
+boxs.i2p,owm3fy2t5vwbxowk5gsshihkwjfknqq7y4ylbeyhvzta7r3ybrpq
+brain.i2p,wbmkweyyedl5dp74hfyo2iot6y7oq5yzbe6hbscdszyi5dci2dka
+braindead.i2p,braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq
+bunkerirc.i2p,mdt7h4zsbwafsikg3r4iiqh5wriaisznjj5d3f3lyeahipudsxoq
ca.i2pd.i2p,u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba
-cacapo.i2p,y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la
-cases.i2p,kmpmk2fmineaiwublteqlifg4fkmewnhmxqlcgg7qwecz6daj43a
-cash.i2p,6qscc7avdla6lzs6u2nzbppoxndhioh5krmoauolpwixfeuylo2q
-catalufu.i2p,riuted4yhjwzttupiwzj4hnwr7o3jhhyqmtaogpi7gzupq3e27jq
-catgirls.i2p,taxqiyvy24hk67dadf3hzdsj4jtzjadljs57wdfgaujt46qeujbq
+cake.i2p,hpdbe6o6qqqqvgygbcznssat46kybsm7rcauofqaoly4ajdi2jeq
cathugger.i2p,vq43xjjcnejqpzfprws5qzrea2siieshu4tglpdepql2w3w3bpba
cbs.i2p,u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq
-cerapadus.i2p,zroed2cxga5zeuu6rcvmp2yfi77nzduw7yhdplbeuqkuyxwbrzaq
-cerebrum.i2p,u5gtsfn267udwfh2uq35jiabkufifvcbgv456zz34cydutsiw2eq
-cerise.proxynet.i2p,tubipc7vuq5svzsuddz6lu35c4sl3uwviyui7l55rmxltxqncknq
-cgan.i2p,43z65gdr52xe3fxmkumwp3dzhedu4tu4rdtzr24hz5b4awcpfbqa
-chaoswebs.i2p,fz7l3tv3urnnhjvlrdylbd4uhxpglmm2i3xfvuqrhksjccdfzx6q
-chat.i2p,ollpwnp6yidc3obbb3famgt6rw5jg5w3k3a6z7hhaegj6gcohiuq
-chat.volatile.i2p,o2zogadvui65kr52h2sqeh2d67l4rx5qhd7gj53hkqbsj7y75wrq
-chatfreedom.i2p,mxwg6hn6dicaziccpxvejfjj7ycrldp6vkvfaplfny3jxilq5cnq
-check.kovri.i2p,7uea4hzuqwbow5c6hm3ghkr7mvyb5vafoo473wrcaa4rmua2d7pq
-chen.i2p,l7fr75pvy3o66isse7bb4bdsy6coq2eb4irjkrsdlugbjanxqzzq
-chess.fillament.i2p,tv6wbanei647yf5bie4dhg2wmybkjurezlpdfwftc5ajqlfswwya
-chess.i2p,sbnoqznp5yzxals3vs6nzyqaj2fetvonys4e3b3x4ktmfeus54sa
-china.i2p,wit6f2zx6dtuqqze6nhbykrds3idppfirxvhf2f7ydqoqf4xdzeq
-chishir.i2p,gd3ijpmfcmcukfjgxupuepckitmx52vii35kt7monsv35ljmbkbq
-chitanka.i2p,u4s3jneepk3akoez46kqiwikoezi6zyj2ibjkjyi4uuvsbcojzba
-christian.i2p,7atkjb6iiru3z4dtb6q3k2hmcyhe4tigbgy55pqi5wwg33h6jwma
-chsnec.i2p,ezfwl4zsb3tsm23jro6jeuwyb34rezzkz33s7lxjrbcycefhtk5a
+chudo.i2p,iaublzhzc4ssa3rcrjbdigautm66mslt6g2sninugagiarl4at3q
ci.idk.i2p,antkos5hjxraxduyewoo4qwwr6vyceiggd562nctvmtpnfjsuqlq
-ciaran.i2p,2r3645eete6xwbfu62ogonudcrcgqq25sbnij5v4geru74yrscna
-ciphercraft.i2p,7s5pkqbpbfdkxtwuu2e2iwstbikyewvvscy76lij4x5pfbygbjca
-city.i2p,q3x6msrirtu5gy5vilpki7afqlgrduvs3f6ywixu3qt5q6qc6sca
-cloakbuffer.i2p,rxjexx7dole53hiuaoqqjyq2nljknmnjfws5hwyfoc7jmmhmwrpa
+cloaca.i2p,j462o64zr34ws6shsmpkwftbwrabtdo3u4yv3dfsrshkshwvcxtq
closedshop.i2p,6fg67mbw2okopzyonsck4bsy3cy7l2fame56uiysr2cezhjhzdbq
-cneal.i2p,g4za73ffigv3ht4jnhzy4dae52djjq7lqcguqsfg3w5cxzqm7nba
co.i2p,3mvo5eifcwplcsoubtvqkzdahwo2sdhfygfdde7lj2glybk4q22q
cobalt.idk.i2p,m63cbwomq4e4q6df3n6idnuveqa4yastxnls6kacseuutrp5um4q
-codevoid.i2p,2mukrqwtinsw27uoejtrz74zxtilyhnnfdyso7j3yo6vaa6nzlaa
-colombo-bt.i2p,cyr75zgiu2uuzap5zeosforbgvpfbqos2g6spe4qfulvzpyhnzxa
-complication.i2p,x2av6rwj5e5tp64yhdmifdyleo4wblw4ncrrcrabxwscuevpdv7a
-comwiz.i2p,6p7zqfotzbd66etl5xqy3p6xvr5ijucru3am2xqa7wmnj6vf3djq
-confessions.i2p,lh5vitshufxpmyr44zgyymebo5elc42eda7pxvn5lmtes47c7rxa
-connelly.i2p,5yrris3nigb3fapvzrlrcaew6cdmzdknzvgrc7y2jpn3ntqurweq
-conscious.i2p,vuudgshaznyenftsfgpyqcmsy7bs33uege3bymsxs5vgjagparua
+coldhell.i2p,z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja
+community.i2p,64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa
costeira.i2p,abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa
-covid19.i2p,j76d7matghmchkrx22z25kuchupqncnawep5lr5zed5emsekcwgq
-cowsay.i2p,q4ghzfpah4ffvm3bhc6fdkrznk5f6jxfjm2daytlparznai5d54q
-croquemort.i2p,j6damyqss2msf47sdxgc6dq7axz6wocqp5utjhn5wifdgabkwhfq
-crstrack.i2p,mm3zx3besctrx6peq5wzzueil237jdgscuvn5ugwilxrwzyuajja
-crumax.i2p,xg6ffstp3lnknou2ayhvnoc6nwdhic7fstzphy6idnjnner2wxnq
-crypt.i2p,4xpb7orp7xmhxyiwvdvjm36dzp23h6jxxvagr6xuldodqto2hcqq
-cryptdesign.i2p,ekfldb7x7hgmznu7wnw5d7ziryizyqr3dfhgjcnzshmbyn27zruq
-crypthost.i2p,zywhrxtnkjc3rxxvxbocom7ml4hnutomgtuvqrwyf3rhuupnq5ca
-cryption.i2p,hdfyl5jvzvlkamuz4fp5wokh7rzsmsnidr2qfoocke6myqgpxw2a
-crypto.i2p,vffax5jzewwv6pfim55hvhqyynafkygdalvzoqd74lkib3hla3ta
-cryptobank.i2p,cv2ccppauuoc5lq4drvbs6wdxzsa6iswnrxqf7idie36rxbqp6ra
-cryptostorm.i2p,mlu7mswyirjf53usqq7gyamvqc6rqihezgdbevov3dkxmkfo57aq
-curiosity.i2p,eomeif4xrykxlzhawc3icdilje5iammijos6tyizwhrfh3j7qdvq
-cut.i2p,uk5jarq7yvogeuxnbmntdkheyoh56mqbbqeysphdzcllnkvz5e2a
-cvs.i2p,yd6k7dzpsa2tnlzx4q7xqkmd4qsjk5xk5hbiqpiarwbeyvxaxgba
-cyberarmy.i2p,anv363jl7fofuyvspenoiqgwgz2xrgsc7sik2zofergf4khxajfa
-d73.i2p,uf6madmg2fv7uo25cjnvzpimd6iflsrozyemuypleyz46mxbyreq
-dallashackers.i2p,lzkthydgao725tev3rsqdgy526t3rfae7q5xjxbmvy4huimlkiiq
-dankest.i2p,t3xtjrbxfehmg3hnqf2mewezirny75mfgzflonhkd24sky4am75a
-danrobi.i2p,nfw3voslnm6h5rpmkoo36k7lwpbac7lbmcjbduxqpvxf6esyiwkq
-danwin1210.i2p,eoqdf4no5dxn4tw5n256kkd4lzz3uk4p47np4mepsykpsdzrnvba
-darkness.i2p,gmzo72vjm5tssrxppnvqiiijipi3556o7xwk636f2kgepbyqs7ra
-darknetlive.i2p,wflc3mc2istjnoff5e7ifycy57qkm6uwindckaryqmp645zzgzsa
-darknetnow.i2p,gkx3o5fy7mv7l4psqqnhp35d5iun7rt3soci6ylf3rgb7a5a655q
-darknut.i2p,2mk37gtvpk2i63o6vl7vna4dr46rqexxetupgn5efuuins7x3qya
+cs.i2p,kzaeunogz6s75ptgy6ifjzwwy75xdfenenswvrczd7mewxgrad5a
darkrealm.i2p,gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq
-darrob.i2p,hz2xhtpeo6btgiwi6od4qj2575ml5o2246rd5orarruyjhd63zja
dashninja.i2p,dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma
-davidkra.i2p,nq7ca2egm563nir3xegfv52ocgmxstpz56droji4jgnzfoosk45a
dcherukhin.i2p,qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a
-ddw.i2p,wlyy7ees7cumw7ggrs7ksp3uzld6holwopqr6qikncqjgj3vngka
-de-ebook-archiv.i2p,6mhurvyn6b6j6xa4a3wpuz7ovpsejbuncvyl6rnhepasfgdgmn7q
-de-ebooks.i2p,epqdyuuhtydkg5muwwq47n7jvr66pq4jheve7ky5euls6klzwuyq
dead.i2p,7ko27dxvicr2sezvykkrfiktlghx5y5onup3f2bas5ipocy6ibvq
-deadgod.i2p,63bveyh7wefb44hlia7wtxxb3jal3r67thd6jekmwrtq4ulaaksa
-deb-mirror.i2p,l6ly7szjqvbffz7hacvjxqsbvpxoguh34ypkddtgse6bq3fljayq
-debian-multimedia.i2p,cylxxz2y35x6cvyrl57wu3brckurtexatyi2i5awz3eeamqwjspq
-decadence.i2p,pw5ys7k2grjb5myydpv6ohikm6nna7y6u2dro44i4rucgulu3ikq
+deavmi.i2p,t4cvvenniup6dcdlu2ehdycos5r3luccfemwd6hhvyqv5zd6obgq
deepwebradio.i2p,2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la
-def.i2p,qon42l7zzzzylw7q2hxcwz67ada7lijqrzzwqqrrspff2qyycita
def2.i2p,cepsrw27kdegwo7ihzouwvgcvw2obswwjs23ollgj7hk2yrce3da
def3.i2p,xbf3ots2purqun7orn72ypkpjmrzbfrkj3u654zfe77hbrbow6la
def4.i2p,yyzdq4fwwmnlojp23drfpfqujln2vcjozjrfzfeuriuqzdq7g4mq
-deltalegion.i2p,lqcm5pncw5qiaqzzs5hrbpbf4fpo6t5tiehxfdby7dobdgcwvxcq
-deploy.i2p,ujzspsqkbz5z272eozsrdv4ukl434h3fuliwrfxxnab74jmd7e6a
-desdelaarena.i2p,7exkzayhcsmyqzbqn7oa7qjpny6tdvpc3av6g5236jrfle3xbn6a
det.i2p,y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q
-detonate.i2p,nykapdsjjswdkjov7x3jzslhg4ig3cpkhmshxqzijuhbisx25jja
-detra.i2p,nluwxqolosgyly5nzicm7dmjdnxj4e4d7mlfilef7qu5u7eqf3ma
-dev.i2p,cfscxpnm3w3qxnlv3oikewxm4qrot4u6dwp52ec2iuo6m7xb5mna
-devcron.i2p,isuao6uof4skihg5eg6xt3tb6xf3gpcp3fmc3inrff5hr4bwo4sa
-devfs.i2p,3olqlrn3jutjmry5aaxndt6m7diktaf66zwp5fbrks6qf5ax5e4a
-devilish.i2p,t3kova6elzks3rwldzhzc36o27w4h3csgxw6albjygv63huqs65a
-devulgar.i2p,4mahjuyvnuinlzocrhrxo35xsdbwb6rcj2wxoakc253bpwhijqva
-dg2.i2p,sjnqo3saada5pfldxmsvszns2rosi24uy5m54k7z6wqimewbke6a
-dharma.i2p,oyq77v6d4sofxpfouisk3rwvsxkw2laydd5x3i4vdzqrnuewlwna
-di.i2p,3irnooyt5spqiem66upksabez4f3yyrvvjwkmwyzlbealg64mgxa
-diagnosis.i2p,bvj7lfuccblbe7c6nonfi7imcj2xvptyn33upmovjxy5qqi4opmq
diasporg.i2p,edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua
diffyq.i2p,hkjvyuc3asswxa7uxyalrnpqab4lyvzriu2rsq6jbjc2kaoabghq
-diftracker.i2p,m4mer767ipj7mq6l7gdrmrq37yzvsj3kzezd7n7nsfuctntjseka
-direct.i2p,upxcjhddpeeizq2cdtt4esotssrtuvs5y74gram2ktjmmcc6mmfq
+digcitlab.i2p,gijabxlt4ox2mblh2nfxnds6u4mlsdeoonizknbdksl7klmbpvoq
diva.i2p,auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka
-dk.i2p,cpt2op6bkcfw7mdnx7s7bql3kzpz2tzqx2jphn7jj67y5537hy7a
dlms.i2p,krsbxsaw3lnb6ctdpydygm2gqobjcpm4pf367ddo5hylbscnynmq
-dm.i2p,heysbdivyeugdbggpscco5wje3dsvwgcpp5ot4sopooebnmiqvtq
-dnca-anarplex.i2p,szdgwbm7utjqoawfnwtlmqtqemhycjucbvrxx46d3u2yecoicj3q
-dnrs.i2p,p45lutcvpmt2o44lqnqnieo3gftjxqwhkpp64mruhztjbnmnxoza
-docs.i2p,ato242wckzs4eaawlr5matzxudt6t5enw73e4p6r3wajwkxsm3za
-docs.i2p2.i2p,las5l45ulwwf5i72nht6vk33sfkidcpr2okpf5b6mvgbk3a2ujna
-documentheaven.i2p,3kbrghggbvqawdmxeesbnpqjtq7645evesf4dggj6hzbgvkzng2a
-dollchan.i2p,hvmnvcq6xv7ok2efmllyxl6lei7ugidtkr3slgmcns2fjj3cytwa
-doom.i2p,yvnq6yyiluav647i7qc3hpjkprrbx7x4hb7e6djgwflu46vwqodq
+dns.chudo.i2p,zzfmtnnmacop3xvpznc4c2jfvk226wpep2gaoanja3gfzf3ih7xq
dosje.i2p,ir2ky5ejx4f646l4fsnug22gj4frn6jzlg7fgboudf2n5b4gdj3q
-downloads.legion.i2p,xpmxdpuuptlekyhs7mmdwkvry7h2jbvpqpzsijqe3a5ctxgodesq
-dox.i2p,vk27cjdrtegfdnrjqutebgxkpyrfj42trdfbsupl5zn2kp34wb3a
-dozzzer.i2p,u4tkzwghkjkdujctdcuk5p4qiwqqarvs3bhexmuhgwn5e2zg6ljq
+dreadpiratessociety.i2p,fbdd4syj2v52x5zord67av2xclmjsg6bc6xdvrqmvqkyd3whij6q
dropbox.i2p,omax2s5n4mzvymidpuxp2yqknf23asvu54uon6cxl6gdrlblnuiq
-duck.i2p,3u2mqm3mvcyc27yliky3xnr4khpgfd4eeadhwwjneaqhj25a65ua
-dumpteam.i2p,2fwlpuouwxlk2nj4xklvm43m52tqyhqnu2fcfiuv7clvf3wd5nwa
-dust.i2p,u6xgh6zhhhvdvefbqksfljfs3nyjvqcrmyamp5bryz5f4injmniq
-dvdr-core.i2p,fg6l2ej6qrk5rkyfzdptxx5xkcm4kvdla4gg2tun7z7fm5cxxw5q
-dyad.i2p,7n2ljphvp2dep7imoujvydxp4myuxfld3axwfgcny5xc5x6jj6ka
-e-reading.i2p,z54dnry6rxtmzcg7e6y3qtsig5yf5fmehuvakcg5wnuahx3iafuq
e8.i2p,5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a
easygpg2.i2p,bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora
-easysoft.i2p,ecbhsjzyt3pjp6zv6btqin5cbhlwqsgritljgyx5tc4aoarojeva
-eboochka.i2p,ou7g64d5in4sugv5fgmmzwnunuw5hloixio7puthmrvrkwrp6egq
ebooks.i2p,bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq
-eccs.i2p,n6jpy3ip4rmhln5i4f4uahsekhkhvqmhggho7y3b6qmwe5lrgqya
-echelon.i2p,afvtspvugtd32rsalxircjglh3fhcjzk7gxrm3gw4s2yrpvzk6wq
-echo.baffled.i2p,bfr3lyicr72psxvt2umqfb562rtex66w6q3hi3tktzkoyane2iha
echo.idk.i2p,63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq
-eco.i2p,2dq2o5h6c6a674qaduipp55mid5iktumjbswuwmpsrcqaeowdvwa
eddysblog.i2p,ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq
-edge.i2p,aknsl5wmzjmwyc4wxutfdwy2w5vgd3vcx52mqx647hcgvyurmqta
-eeeiue.i2p,ilzqzqvzpclqdhhrog5oycul2aaxtwb7ndy325aphsfg3oefluqq
-eepdot.i2p,t6edyotbxmxvy56fofdvmragvsj65te2gkhvzv5qnblicutyvgoa
-eepme.i2p,i2dhxxmowponghj3tlxq43z7b2oqnht7pkxa5esoq2zcn4odussa
-eepshare-project.i2p,sn26kom4qyuzouppv4lwnk6bqabdydcegtrilybviibwiq2s4nfq
-eepsites.i2p,isskhl4ak3g7qevrarlmblddgr4ugnn3ckalwpjcvxafk5rjgypq
-eepsquad.i2p,gsblvpx6kt5ops2w27clzwkvcnf2urreoi6kl4reoya4cr7l55va
-eksprestren.i2p,m5eqo26xg2jddmh52t25idkbx3yybtf7usef3omhh5vmdu5wuzbq
-electrico.i2p,65yj7dwjbne26e7pfvf4grwn3ohttvxtsbt5l5kyr3v67rjucyya
-elf.i2p,duz6ey27ohpcp3llylklzdb63lylolzcixad6bh7rt5tkq42qqpa
-elgoog.i2p,z6hrgkg2ajmuzlrddjlffrgctx7x7fkipm6c4hdzmohyn5wkr4ya
-ems.i2p,734zw4jsegdf55zl3z6s22tqkbxcghu4qvk6q2wevjfmx7xhbn6q
-eniologyktk.i2p,eniogu2clvvhs3nyag56yxcp5myuz5g5y6cyrqrbcmmqh3nr62qq
-entr0py.i2p,k2v7tseaeoritp3qy2nehsi7e6flm5y67iywhjogk5s6vqeuaveq
-epsilon.i2p,ze4bgohowgjzhoacnkuhb26stjktimoffyvt5nbfiuqis77fxgoa
-epub-eepsite.i2p,yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa
-equine.i2p,3btnjagyljkocpgepkqrrdklzvesce3drdi6t5bjuy6mt733disa
-erik-the-history.i2p,ab2lon2qoyiavdfofmukhsrspmiihnylucujmwouz632f7a5pqpa
-erowidmirror.i2p,erowid4soqvh7s7u7jc7ywboaghsqkshrl2ptqq3oll7tqgsia3q
es.hiddenanswers.i2p,cw7ge5ey4ekp5iep2kaw6j54boebtqytpcbnvio2bfpccd5ejzfa
-eschaton.i2p,xe75f5hzmrq6rkhsef2geslmi2v2yfngdiysmlmxvh7b4pyyjk4q
-esuwiki.i2p,cwxuiwcpymb72vm5vluba66ofhugyf5qeevvwo7e2fqrxl243coa
-evil.i2p,ljfl7cujtmxfffcydq77pgkqfxhgbikbc6qxjgkvcpn4wzd73a4a
-evilchat.i2p,s5b7l3hzs3ea535vqc5qe2ufnutyxzd63ke5hdvnhz24ltp3pjla
-evilgit.i2p,mx5vyoqhg77yuhthwznsxrepjsemq4uwitx4lxdzetk36ryl5rla
-exch.i2p,vsyjsbbf2pyggtilpqwqnhgcc7mymjxblamarmxe5hmbxaxvcndq
-exchange.gostcoin.i2p,n33uthzyqsbozl2qh5zii2bq2nnvbz6g6c4ew3mwp6uukk6u7wva
-exchanged.i2p,ylmulgfskl6uiwac4hw4ecwqdzd3oxtwaemzj25zc6k5q4rkexra
-exitpoint.i2p,5zmjurq3enudcenegnxu5hqmfmayz4lxvnik6ulch4xssa2ithta
-exotrack.i2p,blbgywsjubw3d2zih2giokakhe3o2cko7jtte4risb3hohbcoyva
-explorer.gostcoin.i2p,ktoacmumifddtqdw6ewns3szxths2hq2fat2o7xnwq4y3auga3za
-exseti.i2p,rgzuvkgcgpm7tu3wiwdgmb54wyzipcrlpaxvdhm45bs3usjmyjbq
-eye2p.i2p,szycufgqnbcc3rofk52nr5sf54btafj4omw4fx3ekm7rza7jd5gq
fa.i2p,6n6p3aj6xqhevfojj36dixwbl4reopkhymxmatz7ai5sroh75rka
-fa1c0n.i2p,o5m4ckiiea3wv7qgb3iwvf6f3tr4rlaysitdxbgp2erhon6qmcra
-fa1c0nsec.i2p,qvmto3fzqsskry2426kvrk56rlhoaqei5qispo55bpelnwzfcl4q
-falafel.i2p,djpn5cbcgmpumwcriuzqistbae66txca2j4apjd2xesfgb7r5zmq
false.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
-false2.i2p,j5i2tfumh3ti5sdtafwzzbpupmlcbg5drysfay2kxbdpsaljrosa
fantasy-worlds.i2p,62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq
-fazanka.i2p,fazanejlhnrydwqyrnwfk2qok35tnoydhmwco7g6zpca5dn2gbsa
-fb2book.i2p,3a24ytysvevkcgtssyd6fjgy6efck3bfonkanh7bphal65fthfvq
-fcp.entropy.i2p,de6h6ti5z3mcbdcwucu45vplikqyoeddsu3rqy7s2zy5i47j3peq
-fcp.i2p,ndsznnipoeyapnsg3gj3yi2dzsqduxwalmujm5mzjm7e6x374tta
-feddyob.i2p,lhl5ij5ddgmvbg3dfqt4aaubailhaphmw7ougfnldzixkmp3f25a
-fedo.i2p,zoamh7e3k2vf2g6pfy46ho4taujk2f4mxqqsv3gbg554fxbvyfqq
-fedor.i2p,mdlrk3gr4vecpmgii7lwpuaofoy3hcr3p2pyifq5wum6tsffkkwq
-feedspace.i2p,kvtnpx4jylgeyojfhix4x462sqn5uork3roml4sfzotkxx62i4wa
-ferret.i2p,kkqie5qmja7bkf3iad4zxhrdarwj7kbrx2m3etn5kmba3shgwj4q
fido.r4sas.i2p,i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q
-fifi4all.i2p,v2stz6bsot7sbjzix5tky5dm5ej7gidmjnkvzqjju5xvz5sz6fwa
-filehub.i2p,rsbtaakwwfvodxa6xyn7ea6tmi2andrfmlhdcasgy2xx32no2cpa
-fileproxyxmpp.undefined.i2p,oc6caemyolql5xwav6y7kputwcb357qk2matzevmrlyrm3y7f5pa
-files.hypercubus.i2p,qfglq25jwieszgyt7muz6dambzqsrmjhhszygzzx2ttubc77sffa
-files.i2p,w2sy74xe6oqnuz6sfh5fhkzu7boholgzd5f3anhj47srxwpj2vaa
-files.nickster.i2p,yil7dp2hg5pbqyovsiwb2ig6zjsq4tize3fnwemmqdrr6j5itdtq
-fillament.i2p,udj2kiino4cylstsj4edpz2jsls77e32jvffn2a4knjn4222s2oq
-fireaxe.i2p,ov3ev5dplhdz6ipy442ftb4kzz4dembm3ifs2jo25qhiyw6f4ogq
-firerabbit.i2p,awqh7n3wskzl3epyvkdwgarmfybsncm7vye6psg4tpkmplh3mj2q
-first-world.i2p,w35uyqjcbdrohmtwgk7pf36djxelyiq5gs76hzyrwovpnmkv2gcq
-flapflap.i2p,y53ceza7iji2vq3oa7om64whzakt6nnzksaqhmkqiisk5tvqk56q
flibs.i2p,ocdm33e3h5tdml3yyholj4objdwsrhlugfqjnqgdkslmgdzb6b3a
flibusta.i2p,zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq
-flipkick.i2p,aso5rzc4ym6g2bcbxjy2n573bmbenkjawva2jg7fhyqhwtwgu6lq
-flock.i2p,hflpi33ko5bi2655lx6bpzstdnjqgzrz23inovqjx5zpntyzyb3q
-floureszination.i2p,vitpvfb25sikuk3crgcvtcdi7hajxnnq2t6weay3no7ulur2wwwq
-fluxdirect.i2p,kudvuk4mc2rfqoi2f3khn5mz6af3hdaq4wx4bnvohut7hktoumua
-fmnet.i2p,zveaklfzb6xmcayvmmkdvqnboibmcddnk7tvcw56l4au5zuyrkqq
-forum-ru.i2p,fex6v4zccrovs7dixqbigbbqtrb7ylrmpgphwnwoyjutrg56qmoa
-forum.anoncoin.i2p,sytfn37x3exrre77ctjuo3g7nhnky32bqgpcn6jr7e5lijz75nuq
-forum.fr.i2p,onvelkowkbuwrglhw2cnocggvbdudi75sll5mfirde3cbopjqivq
-forum.i2p,33pebl3dijgihcdxxuxm27m3m4rgldi5didiqmjqjtg4q6fla6ya
forum.idk.i2p,bg7kaiqjcqqeuuwb5nyo3ptcp5dgza7mihtizwqtnz2itombg6da
forum.rus.i2p,zd37rfivydhkiyvau27qxwzmerlzbqtthsa5ohtcww62zrygjaga
-forums.i2p,tmlxlzag7lmkgwf6g2msygby3qttxvm6ixlfkq6s6cpgwubp33ya
-forums.presto.i2p,qt3s4ooeegj2uu2qvb7q37m75mbllal4fy27ook2fs2l7qri36ca
-fossil.z-lab.i2p,yltaujzwg3q5hcppo2xuun63i56ywfcr3hckn2fjo2apgdh3lj5a
-fproxy.i2p,keknios3gm6kh6onez6x2bm2t7stv54oanvltuagphgdfjdw5e2a
-fproxy.tino.i2p,fpaituvuvyxp6xdjnv3i27alnj2ifzcvqdweqb6yj5uybotzvyha
-fproxy2.i2p,r4lgw4wmza25g7j5fjocjbwzwthfg4ymcbm52ref3hh2hogskcza
-fr.i2p,ia6xlsnygorllplx2owokahtrkospukvsmysz7i7bzw3vejc4hdq
-frankjin.i2p,jllhyhjs7uzhcez4nuvexkynpp6hrptjukxboolamgusno5sgrza
-free-i2p.i2p,7qnxwbypvntysdse5o2x2w3kggrgzb7piuek75gbwish3dvt6wbq
-freebel.i2p,itir2seplkvrcgvlcw4v7jp6zkzdhmu4tbu2kcev2zkn3foi77yq
-freech.i2p,upld2ui3i7iylcqt7j64s6rpwssbvlxiuxsellrg5br6ksikiwwq
-freeciv.nightblade.i2p,rluupsgxbvw5t7jno3apyzlrdirjkljft4gdoy4mxxh4fmd4xzta
-freedomarchives.i2p,4ck6oliqfjz3sccpya2q4rh5xkj5xdxkqs76ieml37537nfhwd2q
-freedomforum.i2p,abzmusjcm3p3llj4z7b5kkkexpsxcnsylikokouk5txfim3evqua
-freefallheavens.i2p,giqnkltyugfmsb4ot5ywpvf3ievuswfurk6bjie4hxi2hh2axajq
+freefallheavens.i2p,7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka
freenet-inproxy.bandura.i2p,rblg2sajac7winv4mgvnkfh2fa3nt2zxfvxfiybj76okpwdrt45a
-freenet.eco.i2p,2kf7ovb35ztqkrurkm76y34jfpwi6go25xj7peznnmxrl7aieo7a
freifunkmobi.bandura.i2p,5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea
-frenchsharingforce.i2p,jgj72ptq43shnabzljbza2o3kx7qryrpjqhotscalllr7yqiq3ga
-freshcoffee.i2p,sscuukigp6alcb3ylhkcugoejjfw5jqgtqbsbafw4hyku42lgc3q
-frooze.i2p,m6ofa5dmyse4b4jg7kfmluuuc4pw5jqu6zh4qnboin4vropxepja
-frosk.i2p,63naq7zb3hvbcppj2ng7qwf6ztusp4kwpyrzbt4ptafcdbu4pfjq
-frostmirror.i2p,ycz3imuz6yte2zhlapmsm3bsvc46senvc2jxzwsbfdct5c72qulq
+fresh.i2p,jii6utg6ubwxgls6jegu24ifrroo4qzbcizjfft2bemodp4k2i6a
fs.i2p,ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q
-fsec.i2p,z432orw3ba45bxy2adkb7bdycva5xrraqu4fbzki5bnluxiqtvsa
+fsb.i2p,2jefiqburn5hu3su3dlg65xj32iuteqgz5bfpc5j57qbmkph7lya
+fskn.i2p,nx2uzyxx7424cwj6vmrekjka4hplvyq53oljkzqbkiuzghmi2ayq
fsoc.i2p,vaqc4jm2trq7lx2kkglve7rkzxhhaptcwwl32uicx4ehf5k3hx6q
-fsociety.i2p,6dnueis33hzitgvimakyxoxfqu6o4erfiv662jzntrlyrnrb27wa
-ftp.open4you.i2p,4ek4ltehr35aicnduha5gl3tiu6acnbk7v63yicjyd5sx6mzs5yq
-ftp65000.open4you.i2p,vzv2sjdkcgzyb47u7ump63sqgli75za5qcgilnzpt5cyvpyez5va
-ftp65001.open4you.i2p,e7sqiurf3njnhwbkeen5wjoqgfdhdpehcqgwyfpm62oew7c4lyzq
-furry.i2p,nsp4dwzfkdldtly3z6fewmicrurncrie277catksd7mpt6xjmbna
-fuubar.i2p,ptekidraefaa2k3333kyogg563jx7htwem7lova3tt5eqebpiebq
+fuka.i2p,e3aanmaobvwopjrmrnuqvrkr36gyubrv6f2lyygh5brku3ufwrsa
fxruby.i2p,lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq
-galen.i2p,4weo7zkxscxbcouiqx4mlnb35uwl2lromikzk33er3fljktyvi2q
-gallery.i2p,2ps7wt3v67ni2d535lwaubpsuuhxsg3igifsy7qlzolbrxaimunq
-gamedev-blog.i2p,fdxgivqgwkuedxusw5ewyrrm3dxjwghr7oa2pato7ugilmdhmluq
-games.nine.i2p,ov27guhkdyhgdkqcsi7ipxsbudytn7bj3qp6ovwk6ih2wwu6sl3q
-gaming.i2p,rfxberwod6st2zc6gblqswxjl57nucgc3xrbwss43pe3dvqqzj4q
-garden.i2p,qkk2dqx6nocycgt3vinsoc76cxkb4jreybcpgz3fcps2dbe4rowq
-garlichan.i2p,fcu4dlmhtk5lnhvfjb7dmmxxavpjzd6e7ukqwpzml3aducdfjfja
-gaytorrents.i2p,fnggbr2t2aulr6rvlo4aehotx6wecfob7u3k2nxsnvtm4xex424q
+gandc.i2p,m6zwig36wxbbhat5fxh5vzqo2uvq2vwl4q7kxc2f2w6wtzvzesoa
gedanken.i2p,kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a
-gelboorumirror.i2p,lgjfssrj7sznvli7ebtadzo2leefvxi7uzyt7aprtgxyh3xmi2cq
-general.i2p,5fklrsztdqpl3hkkwwrrw2rdowrq7wwhwb6h7avvk4fhansp4vvq
-georgebartolomey.i2p,r4z5h7uystl6hy7yikw6uqcee45xeb4ghojcizz3rlokqx4jpz2a
-gernika.i2p,wpzqv3lxpecdsvcaadvbmrhhwlc7kp4n2mijdv2qjw3zr3ye232a
-ghostsh.i2p,pp7p7ww7ug7qwkirgfrnwyxplp4cmyv3aksk2mroplterz4p6axa
ginnegappen.i2p,kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja
-git-ssh.crypthost.i2p,llcp7jvz3hgtt3yzkdgjolwobisgvhv4xqa5a4oddejllyozur5a
-git.crypthost.i2p,7frihhdcisdcyrzdbax6jzvx5gvtgwsm7m6kcem2tlaw4jtahbqa
-git.devfs.i2p,yklo4bsbwi66r2wlbug5jrkpx6tlquo34knzaopsboiz5dnxn5rq
git.idk.i2p,7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a
-git.psi.i2p,em763732l4b7b7zhaolctpt6wewwr7zw3nsxfchr6qmceizzmgpa
+git.qorg11.i2p,jf2mrxlbqsct67fces34x6kwbbnmlx6o7gd6g4knqk36soa6efqq
git.repo.i2p,vsd2vtgtuua2vwqsal2mpmxm2b2cpn3qzmqjoeumrrw2p4aot7uq
git.volatile.i2p,gwqdodo2stgwgwusekxpkh3hbtph5jjc3kovmov2e2fbfdxg3woq
gitssh.idk.i2p,g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka
-glog.i2p,ciaqmqmd2wnws3hcpyboqymauyz4dbwmkb3gm2eckklgvdca4rgq
-gloinsblog.i2p,zqazjq6ttjtbf2psrtmmjthjeuxaubi742ujrk2eptcsaoam4k7a
-glunews.i2p,2bka7rmfn75ollbwq2cgzf35yxx3qz3lttmwi7i5t7iptlj74yja
-go.i2p,ll6q4lsirhwkln4dqxwqkh2xu4mu3jiy546b4uhe4fypyb4vvx2q
-goliath.i2p,clw76fpe2y7wbo664xnsdccdmulmcl35b367lkwucnln2l4ckk2a
-gonzo2000.i2p,nogsv7okydhbvrewv6hb4xdojncvhkusnyib4lglluc4uw67a37a
-google.i2p,4p3ajq4cotnflmuv7fhef3ptop5qpm3uzzgp5bahxif3nc4w3ffq
-gopher.khzae.i2p,ql4l3ftj7lmrt5lxincilpey6czhphmozl2typgumaieysy7jf4q
+gopher.anonroms.i2p,wqfhyrnpknap3ushsck3ih3r7inz6uoqlr3u3ktwvejur3bejqha
gostcoin.i2p,4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq
-gott.i2p,dqows7dpftxxl2bd4bgcpkck6knrysdun6mtqy4ms5dxobbvg3ja
-gray.proxynet.i2p,5qcbsqgj342snriycuzbwad5srkqx3qdpw5mk7hkjeafzfqnewaq
-green.proxynet.i2p,tmg3bdw3eepv3efh24lfeahxw7dybzakomyct7hxvxyhtc63o4cq
-greenflog.i2p,zny5ftmhzxulxzyczmeat53qjnue2xtqv2clisc7dg76lwfceecq
-grimore.i2p,kbepzad33bwjfi3mqzwu6sefv3zeanwsgdqnotius6gemsjlyckq
-gsatdesk.i2p,yfcliyat7jjuj3qfdbaunlbt25icteuilkmru7unl2tdmq5lxaba
-gstbtc.i2p,n33uthzyqsbozl2qh5zii2bq2nnvbz6g6c4ew3mwp6uukk6u7wva
gusion.i2p,4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta
-guttersnipe.i2p,kizkhzes2bzp45widihremo6geepfk7dl6juourkvzuvlc6y3spq
+h0p3.i2p,k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq
h13.i2p,tozb4vssixoccyqtgnpaatkg2ql52kkjwnsdo3dltezges2na4bq
-hab.i2p,dtmzgkqferk2aobaneaeihwmadix2ljhcqr3z5zo2dv3zht3i2sq
-hack8.i2p,un63fgjgi3auvi7zscznwqfol7ka4johgthvqf635mg3fefsjgpq
-hackerculture.i2p,pl4pccq65gaee64zgo2slvn3ggjui56ewrcgxkmfuua5p7dwek2q
hagen.i2p,e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q
-hankdock.i2p,skyf4qawmvxbanizjc3v6bampavfj6flm3x6evdvdppvu4iqkecq
-hashshop.i2p,ltrposvzibc5ahwbcjgyk7akq52udeuetprotyy5sbclxp6v6yaq
+halifa.i2p,fpo5fq4kqulfxhb6odg25jskezvucbx4wlwzg6ngqsxhrzvmxtwa
heaven.i2p,y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq
-heisenberg.i2p,jz4quyw7zt63tmw65jfp76fblwadjss4iyi4puqdg3dye7oaqlvq
heligoland.i2p,gzrjm62ektpqjfsem3r3kwvg6zpjvvhvpjvwfxkm2ay4zu7sp6oq
-hello2600.i2p,khpazz3f747z5zet72s6g3dccw53bfdqyhxt5da4sv7ouve5veuq
-helpu.i2p,3rs5qlv5bdpvwmsxhnh4gjw7yrta7eoe6wjcrny6fudzottnxmua
-hidden.i2p,iqodhhqo473qv5gwhjcs2bsrbhlqtpzgpnuumpastfiyhuwb2kyq
+hgit.i2p,ny4ev7me2y2ibfi37mykakwvf2jhnl7lfql4etaiykjiwtd735pa
hiddenanswers.i2p,kj2kbzt27naifij4ki6bklsa2qfewxnkzbkgvximr4ecm7y4ojdq
hiddenbooru.i2p,zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q
hiddenchan.i2p,6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa
-hiddengate.i2p,rvblcu54jvkkfffp3fobhunsvpgfc6546crcgzielzwe2s5m5hbq
-hikiko.i2p,jwifa3ysjbrygc6szxchn2bck5zonnihhxwrotly24se5xob6p3q
-hispagatos.space.i2p,tibqaokyoc74mljuwng5ugulim4jfv6ql7j5vocqfjyrjwxrz6qa
-home.duck.i2p,jsh7yfvm2t5urdcnmfzdy4n6vegqskdtlwem53chgxli4ipfmuma
-hopekiller.i2p,kcaelbgsvrkiwpx36b4wxofebrl3njx7rgm5amzfmqwbomt44cxa
+hisdarkmaterials.i2p,qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq
+homosexualchan.i2p,suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
horo.i2p,vrxh2vbqsfvh2utnt3ighimu4vrgla2mfpwksipkjsguv5vewhdq
-hosting.i2p,ice6ax5qrzwfwzsy64bctffj6zlzpuzdr5np65zsxlbt7hztyc6a
hotline.i2p,6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq
hp-net.bandura.i2p,z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq
-hq.postman.i2p,27ivgyi2xhbwjyqmnx3ufjvc2slg6mv7767hxct74cfwzksjemaq
-http.entropy.i2p,ytu7kz5bdoc26nkpw2hajwt3q7n5rcbg2eokyefhmkxmmslimbdq
-http.i2p,ygzrfsuuytq6chx26qtdd5a3z5as3ylymqy7hxjnn4xaxisw4x6q
-human.i2p,nrtcelq3humyfvoxmzmngpka6tmyifweouku5mbi5av4lc43hzaa
-hypogeum.i2p,wryo5vzllas5g4hxjhofzmvp2cnrv6flpof7pwd7lrrdxeazb6tq
-i.i2p,5lpdk3gft3wccs4npmadb5mh3hwb7uh63ehym2x5rdre77xtfleq
-i2fund.i2p,ibtuscldyp6zog3dqxw43p5gcy57jfvmvaczohwqbydlj3rdf7dq
-i2host.i2p,awdf3nnmxxup5q2i6dobhozgcbir7fxpccejwruqcde2ptld443q
-i2jump.i2p,633kqgmwzzu6vhkevwvbf2pfyejt3gkes34i6upa4og57fgdfcxa
-i2p-bt.postman.i2p,jeudwnx7mekjcowpqo6xpkwn7263c57y5piurrjrdzinjziu4fla
-i2p-epub-eepsite.i2p,yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa
-i2p-javadocs.i2p,icgmr6hhjudl4yxhtuq4pxvss2pzypwddzowajgs5rdz6f55novq
+hq.postman.i2p,7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra
+http-false.telegram.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
i2p-mirror.bandura.i2p,aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q
i2p-projekt.i2p,udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna
-i2p-scene.i2p,cc6z3xuw67d2mpq5horgu4mpk7hybmhutotmwvmzzpvoudggifuq
-i2pbote.i2p,tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a
-i2pbuggenie.i2p,bioq5jbcnfopqwvk7qssaxcl7avzeta6mu72jmxjeowflpcrhf6q
-i2pchan.i2p,tduxyvfs7fzi26znvph3mu2d2ewaess7emomfci22wvownajphuq
i2pd.i2p,4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa
i2pdocs.str4d.i2p,yfvbtrhjac3jutdsqzugog6mbz3jtyhpwovrt2mqc5mzv534y7cq
-i2pdproject.i2p,5a7tngsj4ewoz3ufqoklzaxchyg26qojmoivoj2ianiokebri6ba
i2peek-a-boo.i2p,qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa
i2pforum.i2p,tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda
i2pjump.i2p,2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka
-i2plugins.i2p,bb63kmnmbpitsdu45ez54kmogvvljn3yudksurcxiyq7dn5abt7a
i2pmetrics.i2p,v65p4czypwxrn35zlrfkar2w77vr42acd7gbszegsrqq4u7sip5a
i2pnews.i2p,tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq
i2podisy.i2p,3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq
i2pseed.bandura.i2p,2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia
-i2pshare.i2p,kvzex5aqmvpofk7fpyjuwsbxyhgqjvllqgltqu4uuwa7saddjtwq
i2psurvey.i2p,pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia
-i2push.i2p,mabdiml4busx53hjh4el5wlyn4go5mgji2dxsfyelagi4v5mzjxq
i2pwiki.bandura.i2p,isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q
-i2pwiki.i2p,nrbnshsndzb6homcipymkkngngw4s6twediqottzqdfyvrvjw3pq
+i2pyacy.bandura.i2p,owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq
i2speed.i2p,532c5r6ra6rcf2mvfgtlcxbn3lpplybwxul4xsg3ps64dlx73fga
-iamevil.i2p,au7jhslyt4cxkjp365bvqvend3hhykrrhbohtjqlgoqrlijbezja
-icu812.i2p,bxgqwfsnr3bgnr6adn62anjcin5nuthqglotb3wn3dgynsfofeva
-id3nt.i2p,ufuqdzsxltiz224vq5gnuslt3a3t72dhy5kq6i2xway53m6pzv6q
identiguy.i2p,3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva
idk.i2p,b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq
-idlerpg.i2p,ghw3xixix5dk2y3pzjsvmlput7d3z6pawkwe6hme5jddxmzqkama
ilcosmista.i2p,6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q
ilita.i2p,isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba
-illuminati.i2p,syi6jakreatlm2z22u76izyqvbm4yi4yj7hr7jb63lgru5yhwwla
-imghost.i2p,bw3ncsqln6iiflm2tlf3ugxg2le4pb6lmy5uu6rb6csw5pzwxpeq
-imhotep.i2p,qegmmhy52bdes2wqot4kfyqyg7xnxm5jzbafdb42rfoafadj2q7a
in.i2p,r5vbv2akbp6txy5amkftia757klgdy44s6cglqhmstpg65xycyjq
-inach.i2p,nzusnipqsecluzj2ctbq5xywnfebcyg3e3i6ustodgk3kplnfeda
-inclib.i2p,ux6prousphswf56bym7yo7kst4ybh45y2z2wrnw7dujmrz56hq4q
-incobin.i2p,eorn2zs5nlj2noxflomqbbvo6qkl5xprz3jjoso6ap5ywupsxsjq
-infosecurity.i2p,v3gkh5kqzawn2l3uzhw6xnszsh6w3nztjmlwil7p4kyrwrsm2dba
+infiniteszimaliumsztarzsdeeploopzsplungedigraverepeatplungeei.i2p,lii5rejifs32fdoevdexodeqfvz3xenlyiyonwqdifseptls2wra
+infirium.i2p,4iovxkkupux5nnl3cnsdhpqzpjg3jmqatdmogpuu637gxdybjqhq
infoserver.i2p,jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q
-inproxy.tino.i2p,ex5yf6eqqmjkrzxnkn6cgvefgne24qxsskqnpmarmajoit43pgma
inr.i2p,joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq
instantexchange.i2p,5wiyndm44bysev22kxvczxt37p6o6qroiqykytrvn2yzi55aqfxq
-investigaciones.i2p,n7hqd4asxrdwf3zwo7rzv27y2qkcfmakmz6mjar6aw6hlc4c7mha
-invidious.i2p,owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya
-invisible-internet.i2p,jnpykdpp46zenz4p64eb3opadl5g42dls3rurk2cvq6a3g3rvbvq
-io.i2p,tx22i6crnorzuti3x6va4mijsbhoqswy2cfdxjbvprgsq4eerg7q
ioannism.i2p,g2246vc2tq64rmomwe47v3jnbpz3b3ec2wrrhadukj7lxmwd5aoa
-ipfs-gw.i2p,6ox7c4vu2dwezfxbtlv62owd6n6ijgcpl66vv26q4sslfcp7yaxq
-ipfsgw.i2p,uxqdckmpvrvgz4rkudi7ndgnhcz2xgm6msbql6dwpyqwg6zgdyva
-irc.00.i2p,bvcja52pppgfspp2ueuipoysjnvvoyblz2h6smpxcmanjquogirq
-irc.arcturus.i2p,5nywlbn35p2nwsymwpfmicu6fxono6g64vwusxbsvmm2qwz6vupq
-irc.baffled.i2p,5zmtoopscym6qagkvpgyn7jnkp6dwnfai745xevkxlou77c2fsjq
-irc.carambar.i2p,hxzbpivxqxy6nuae4t6fnkhcgnhs4c72vt6mmsqfmfhrkn2ca6gq
-irc.cerapadus.i2p,e4ckznxcxvgyikzjmjsu72i2dbj2d76ogexyukklbjvpcnhp6zzq
-irc.chatfreedom.i2p,n2y56bfettc7lyfdiw4uojt3ok3zfcgudwzispwj2a5po2k4gfxq
-irc.devfs.i2p,2tnl43crujj7gfko6ln4gp64zl5fkh4djvcjx2piyjvvsl76c5ba
-irc.dg.i2p,fvp3pkcw4uvijqabwtekcdilklp73gyasuek67wdcs2mucep4caq
-irc.duck.i2p,chdpmm4gxffyn24xx5dhxvfd5httu42i5gtoe6cctjlsf4mbofeq
+irc.acetone.i2p,qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq
+irc.coldhell.i2p,d4b3dcqt32yq55b6ct6f4rsib5svzgwkfz4klfczuz7e4p2v6rkq
irc.echelon.i2p,ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq
-irc.freshcoffee.i2p,ubiu2ehtfnrleemgpzsqkahwnvzuaifqa3u4wmaz5maaisd5ycfa
-irc.i2p,l3ohmm4ccxvyuxuajeaddiptci5lsrnxtvtyq7iohphrt3oj2evq
irc.ilita.i2p,5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a
-irc.ircbnc.i2p,4rqcsqd7xif6r4v55blqvmqu5er6due4eyene3mjorfkts4o3rxa
-irc.killyourtv.i2p,wre4majmg2vnbi6id27et7yw6lnpf56wkbm6ftnlwpvxnktq73hq
irc.kitsune.i2p,cpesprosbsuycn4ui3neidqdtqz5ufekthob7cobl3p7bcuaoh3q
-irc.kovri.i2p,o4hfe2fyc74rjfo6o36h4vcif2l23rv45l5v3h2sjtfa4lpxd2eq
-irc.livingstone.i2p,pbvmhz6osszi2jmmpsn6zbfuhhbolrpqnoosnzcbyxghh5kd6ehq
-irc.nickster.i2p,dhq3fhd5scw3jqhj5ge7kqfpprfolcgxfjbaw24obohaiqjtdu7a
-irc.orz.i2p,7gifacog4aoons3syybojbbnyqqaaqijhngrehn2xlq3eucuyjcq
-irc.pacman.i2p,ckxfx7oo5qbufui2i7tshzs5hef4yafgpw4jsogsyetcgk5tbn7a
-irc.postman.i2p,mpvr7qmek2yz2ekegp5rur573z7e77vp3xqt2lfbco5i6nkfppcq
+irc.postman.i2p,hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq
irc.r4sas.i2p,hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la
irc.rpi.i2p,ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q
-irc.sircd.i2p,iqevtbwle5p24wn3kjr5tft4dz6x5p7ybhjnqmly76t6jef2qvtq
-irc.talkfreedom.i2p,bwicwfqn4kjotbxfwyflxmzqv3ohdeespcco6untb5c645hslebq
-irc.undefined.i2p,t6phciy5wytbthyi6fxwz5towjtae44iqsgtlp56ygx725tetmhq
-irc2p-qdb.i2p,j6k3cqiviwqlr2oudf3pezowtpd44gm3jgg2wg6c6d4m5gq6jweq
-ircssl.cerapadus.i2p,4x2i745i4w52ss3he2kse6tzwt64pr62yvrcb72lgvrb63fup6ea
-irongeeks.i2p,ecduxoion5uc5hnvzjxff6iiwhdwph6gse3dknyvlo7e6gaeho7a
-iscofsi.i2p,enjgdxs4um2dmhdb2ajff2egrdijkjji3g47m6unb74swbrqsddq
-ismismis.i2p,5bgjw3l4unhq2suqjosefozpbxlqfcb2ebuqmfh4awazgp6hr44q
-isonomia.i2p,dkuoddjlafw436wathmwvubtxmfxe22gpqglgytwsaukdnh5aa3a
+isitup.i2p,xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq
isotoxin.i2p,wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq
-itemname.i2p,o35ut7hgywy35okvgkjkv3ufzv2ejv4luap4oytwbyy2jqy6u4vq
ivorytower.i2p,fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq
-j.i2p,kjxvohlsf5sdrzxzfcrmvquccnoevi6ytbl63mstsru5wt2dx3ea
-jabber-2.i2p,pvnmzgemetkwcuvt45omgowmeznwk5xw3nc3ygeoz7yekqxy57na
-jabber.duck.i2p,rhdzvvzraqzzm67zpyegb7knpfrjeffitixqzeyymdoz56uh2rtq
-jabber.i2p,32dft3x7pnwmgmc24yzl22r7kevefk22k66ms2dssd4w3skcgzqq
-jade.proxynet.i2p,4tx6x7pc542gmxnlzuzlqf76g6gfom3id54dcag2kngfx6skcgyq
-jake.i2p,v2axvy6pqefnla7gun5fmqs4lqe4xfyqovgzcundhxrpcdvfd7cq
-jar.i2p,2fthkmujup3xiiu3yple24n6g4emzdiiimbuqwvpdddtsr3c4nrq
-jazzy.i2p,ha5c3zafwkt6mwqwjcf4oqwvbwz473652ljjadiwrj4gfkfkjofa
-jdot.i2p,kw4jr5qw4bhnj33avkwankjdh3zi7wtahlmgkjwvsv2isskkzgpq
-jhor.i2p,c6rnm7oemydhuwzmhwwwxphkzanez5rnn7fkcs3lpgu6gkgtssoa
+javascript.i2p,idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva
jikx.i2p,aazr55itvyns4lwppvx5njyx5tjdwemw4w6jbmpegdunznod2ieq
-jisko.i2p,jxgfvr663uhr6m65hrgkscshysfshkq32ywdubc4ed7zda3e2pca
-jmg.i2p,oglpnq7zungdukmk6gk5fzj5jp6wibuoihqgks453wztrwos4ggq
-jnymo.i2p,nbfplxgykyfutyadlfko2rmizdsxox2pee2ahboj5mju4s3putda
-jrandom.dev.i2p,htynimemonyzqmn76gworxyfkmqtsa7zcprbrd3i5cxqqm75tuzq
-jrandom.i2p,dqows7dpftxxl2bd4bgcpkck6knrysdun6mtqy4ms5dxobbvg3ja
-jrrecology.i2p,qxi24gpbum3w3kesuxvheyu3p5u5o6tuvoypaolub2gnvbld57xq
-jwebcache.i2p,xdffxnxtjd6ji2zig3cgva7igvl2tiapyjoc7ylbzwqhxudbmvfa
k1773r.i2p,zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq
-kaji.i2p,z5ic7gvm2k4doczphtrnrspl2w5sfbss2de4z3ihjijhtjw67ydq
-kaji2.i2p,4lscgc6napekfx7ay5fdcjofeja4fnl7tqcd3fek63t4saavur2a
-kehaar.i2p,awzzfuvi7rrq3ue2qoiuso5n6s2cgm5zevsycg6qv7tcipok4eya
-kellett.i2p,cmhgn2lsgvfrhrgo5l2fqxkzpngrl2potp2v3jw7juti3jrr2rhq
+kallist.i2p,rpoqwcozn4pdxz7bp2vxsl7vfibpbccsymfuxg3c7v7yj3um4bta
kelvinchan.i2p,6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma
+kenguru.i2p,u44uhokgilvmnfsg5hgwx5nddb2mw2b7dp6qz2rnhrr344ebotea
keys.dlms.i2p,znl2swe5pez65qxrr2s2s4lmdfky6mnppvh3p5j6suuiovymhjtq
keys.echelon.i2p,mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva
-keys.i2p,6qv4x7ltaxckd4vbay5s4ntqqflq4efk6oke2d5yzicqrmk443ba
-keyserver.sigterm.i2p,isoxvnflrdn7cm76yjlfg5tbcugoito2hur7eidbqmo33xmwz5ga
-khzae.i2p,5rxgt7ppz6newvgfugr4iwxf26pazhhdzst64aqoklhszhbvsira
kibykarni.i2p,xowcvzbeq72slpbrwmjl3zy6xkrkb2ncctpkkskeqts63vedtg7a
-kill-all-fags.i2p,enovepzgagvhnkmchqix4eb2uhcmmlmt2gpggbjsu5zklffbsykq
-killyourtv.i2p,aululz24ugumppq56jsaw3d7mkbmcgo7dl2lgeanvpniyk2cbrda
-kinkyzero.i2p,zstwq5kvc3e3jqmcaekdb7eqb4e5rxlo6bncv5ny6nq3of2o4cka
-kitsune.i2p,mubckotdo3ju3fof4z6t4hh6a6rhzmkexclh4vfhddfyo6tkqtta
+kill-9.i2p,3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q
+kislitsa.i2p,khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq
+kkk.i2p,kukluxklanib666d73z5fyeyb6vnystmvvreaodhjf73rhl4wxva
knijka.i2p,knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa
-knotwork.i2p,2yocdbcjiyfaqgxb4l6oenrrrrie6nydgmbnbfulqg7cik6bozxq
-kobato.i2p,l4kzozq64uv7azieh2ggmsb22biqdv2lodbxbb2tlbnozyxfyzya
-kohaar.i2p,qchpjehbhqjbxdo7w3m55jbkrtsneb7oqoxcr24qttiq6j5g3z5q
-kovri.i2p,j3hdkil4juppzdz2z3hiybauoagcq4rz3lcqygge5tmg2ea7vs3q
-krabs.i2p,3yamyk5bgfgovg6zpvtvpdjk37ivjj2wog2w7wha5agzgxxkqaca
-krotcpp.i2p,v3zzorvnpwdmec35s22msqufk6mwthhmyiprhxw5l5o7oxntbvvq
-kuroneko.i2p,wbit2huhhwlyqp2j4undccuyrodh6qcmzdeyuaoy5o4ym7g5gdgq
+kurator.i2p,sp3umnyofy5ytixbqcue4jrpxixccgnrxtiuvhg6juep5s5lrs6q
kycklingar.i2p,gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva
-lainchan.i2p,7rov2od4lmtfswthoy7tziiuixupugkrexpdvyso5yj5pgicxvga
-larvalstage.i2p,h6de62jrrpn7s7omf3y5n666fyzwyzolkctsatrgshgp4juozeja
-latinum.i2p,n64izx6kyu3xv6yvc45mvpswlq4txbkc5y2okjwyoseb5lmzxoea
-lawiki.i2p,ddwc3z7tm6yuvh4mzmqne2ifn7qglbz73zyqxtkewlpzl7kpmqzq
-lawiki2p.i2p,dkb5f63obsb6wmzcgilebjvmgvw4wmcgzbkczu3sntgckmtzweza
-lazyguy.i2p,ia6xlsnygorllplx2owokahtrkospukvsmysz7i7bzw3vejc4hdq
lbt.i2p,5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq
-legion.i2p,5oirascyhwfy2tr2horw6mixozsre7z6s7jfq7qbnj523q3bkebq
-legitimate.i2p,rjeymxhm76gabjcsdggyjaeskttt2kxnu5cba4j66hpkep6nleuq
+legalloli.i2p,clxah7lssffdubl3iklopl5bkxewmmbi5zlerw7ryuxawo2dqx2q
legwork.i2p,cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a
-lenta.i2p,nevfjzoo3eeef3lbj2nqsuwj5qh3veiztiw6gzeu2eokcowns3ra
-leonamia.i2p,urcwgeiyaopohtu4pgfjo5s3mggthpjl6mgbgjfkwgcxio5x3d2a
-leparano.i2p,kt35uyvyq7ntfny3dfqfno5crrlkzf6dzuabgqoqzldti5tyfveq
-lg.i2p,3xqs2da7pnsqzmxqudsiq26vu6fcmd4ok7nsdytwyovz6omrggla
-lib.i2p,nqolhhg7wtr3wyjsxszjhjgh45uztj3xlrtydagwi4fi7ftnbqsq
-libertas.i2p,jpv23ou4splo2yd7pqj23s7gyc746bmnubejevokt6nd4sckxdoa
-libertor.i2p,7gajvk4dnnob6wlkoo2zcws7nor3gunvoi7ofalcps5lc76wruuq
-library.i2p,brqqaq44vbeagesj5o3sxcnkc5yivkwouafyxa77ciu7l644ei2a
-libretto.i2p,pa2osj63tq57g56dfn2ql2yhxbn6pwe2vra6qw4prw3drny5di5a
-lichtheim.i2p,wqm5qmhliy2bl47spbbmjzh7xzn2ulu7jkqzejkx2qjn2qhsiv3a
-lifebox.i2p,pyqjnycm55cuxow22voqj62qysrjdnb6nbyladaiaiirqi7vp2yq
-lifeware.i2p,3rqm2yt4dre3ztabc7pksgle7rqryd3y7hq7tontaq5iytpfruoa
-linuxagent.i2p,ap5riaikrjq2uv5qvy7klzhhqywvqi7wqscyipsewcun7w2eynlq
+li.i2p,jwzmbp5djo5t4mkbchhejq5mrx2yye7tkbwry22scihwy5s4hcba
linuxfarm.i2p,br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q
-lists.i2p2.i2p,vmfwbic2brek2ez223j6fc6bl5mmouzqvbsch45msvyyzih3iqua
-lithium.i2p,3h6ezhcq4ob7ve4spqh44ij3v7yxzputetlpft4kad2gelegmzqq
-live.m16.i2p,gjd54vyxuvx2epu3eqpo3q3at7u3keqp45mmwzqxhv4cenranopa
-livingstone.i2p,amtstumiegib6ujcihbjx5qjksxri4gagibn4wd7eqd425oybweq
+linuxmario.i2p,byo4esnp3p7imsmsn6j5syfhykt53zoh5ko66nodgdwp4427fqwa
lm.i2p,yeyar743vuwmm6fpgf3x6bzmj7fxb5uxhuoxx4ea76wqssdi4f3q
lodikon.i2p,u3f67staiwhqxpacya3clmvurdwd2kp7qcthzhstqnhrmlwc2g4a
-loinen.i2p,fhlhdpvi6mag7k3ojtmjcwbmkkvhdz5qidjepdcjfs6mkgia425q
-lolicatgirls.i2p,a4lzmjyba7aq7hl6okqpds7znnwymolqnr7xhvno2wraqb7uhfla
-lolifox.i2p,7fd2clkiotjnaoeigdtxlkkb24eik675ovezjf67x26ysham4zca
-longhorn.i2p,pohcihzxzttjclrazhs3p76wt3ih737egb5bovqb6ym3du6z3o7a
+lolicatgirls.i2p,pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra
+longseason.i2p,ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da
losinka.i2p,r2z2tcs6eguevoxlkrmpkcanuwgnsit2o45svnwaer3wq4v76hrq
-lostfaithinhumanity.i2p,xjv2xlfbipbyjptzgisescucanns7txvovq3ibntkc2cgzttftha
-lotnv.i2p,ziwehd4aooxlcdoixbb6xxlgd2s3snmalffca3pzwc6tmuf2sftq
-lp.i2p,jiklbujn3cbfikf4pca526jgmorx6mxhil3twqmfoteaplx6ddwq
-lucky.i2p,wx36m3wnpt2y6bngdpg3ifrarvtkpwnluarx377bllpgvkuhybaa
-luckypunk.i2p,y4t6cujjxnnrtln3rgmfbgbh46hic7wkef57krd7opitbgngohka
-lunokhod.i2p,3yc6sp7xic4grmpfecbwuij6z3dp5kdgoo362pszaco7io42mnwa
-lunta.i2p,2zzyzl3qany4rs2nze4nh2jzxnpp743ypsexda6safaw5jbcvblq
-lyra.i2p,xfinw5aapff3ajbm3vnk4t5wor3lzcuwtq73rxz4yb7umlnmyl3q
-m16.i2p,ucsr3eveuc4mx5y6gxnoaywd4ojvbel5q3ynns6s5yfw3vusmfva
-mac7.i2p,3yjowssqzydciwa5zx55kazgf7q7w6g7rkocr7bngy35ii44t34q
-madfrog.i2p,madkultsfghzjsdbfi6qk2s5s5oqsuz5agg7jeiymhjdyywvgtuq
-madman2003.i2p,a2sam2xbhxbzmeyobphbxrkdwlppoerewq5qvibbyk3ftsr643qq
-magi.i2p,ihmyjvrsrt6clo6mijrpmd5jbnqg2htinoxdeqh3d4ygsbyzcqva
-magija.i2p,magicxcn7esskepeajskvckrpkj4hopj6h7j5wm2agws3a4wrzdq
-magix.i2p,cgfnyxv62msfynsfbv3kju22j2mt6tfnopshhmrcmpcrxyts6xwq
-magnetmotor.i2p,n7cwvtnbzrusgkx3y6426vxl2trrrxffikrxnlnsmip7uwz6wumq
-magnets.i2p,snz46nez6hrrpg6336neinflw56l3vwatk6bzzytwu77xmsfsoca
-make.i2p,yr7r4o4ijrz5w4movfmfsn3yrlox2mjofrgiartn2qna7us7pd3q
+lyoko.i2p,afuuortfaqejkesne272krqvmafn65mhls6nvcwv3t7l2ic2p4kq
man.i2p,progskxxt44tlefm5uc4jqseanlhgbbkjyz4g3nvjjzbvhhp342q
-manas.i2p,6qolj62ikkoq6wdn3hbvcbdmlvf2rcyv432kgi5uy7mvrczmjtba
-manofperdition.i2p,wy3gcnlkpgirkqnlv6gdo3jx6sh7wqxxudi4cklhmfvytojvxoya
-manveru.i2p,pbmbofs76wpjnxi55eqtwg4y6ltyij72o4fm4sxfjol3y57ze5sq
-mapkin.i2p,tgvm3kgikmjxadymcwvnzt7wqxku7vse2nkoyuccho5accsmpsta
-marcos.i2p,vpo36bsil2voqaou53zshuegssqaroa5mbrzxfmhjywlbojckalq
marenostrum.i2p,tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq
-marlin23732.i2p,wfpkmtqz5fzlkh4wpft2aei3itithbhthp5peyavx6zn3napipgq
-marshmallow.i2p,svdqd6j3y3gwryufcl4fkzpmcujgvrvphvk2oy4r7m75xs327e2q
-marxists.i2p,lepah55qyp2fhuwxlz7bwrhzckn4gkuofivnofoeuyfpmke5x2hq
-mastodon.i2p,kmmmtwgfngtpyfetewqmyehxiyw7icqeq5nwftdpvbyywzdnenbq
-matrix.livingstone.i2p,dp4h2qp2kjjjdw3jxnghkmv6udxiipffnoflgpi3mu2kyi2tdx4a
+masterdestroyer.i2p,yp2g7frk3ze5ljaxbmhmh6hhda3rmpwmpianozi6or2uzqzdur7q
+mastodon.chudo.i2p,bba3rhijp3btiinfeixrk2jzz5rilnxxrxvjjx5os23ro4n6g4cq
mattermost.i2p,x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya
-mauve.proxynet.i2p,n2tqpnhkzankgmnrz6vxjmxhlodbjbsuvukj5odt2vxczkdicl3q
+mayvaneday.i2p,zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa
mdleom.i2p,ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa
-me.i2p,dbpegthe42sx2yendpesxgispuohjixm4bds7ts5gjxzni5nu6na
-meeh.i2p,4oes3rlgrpbkmzv4lqcfili23h3cvpwslqcfjlk6vvguxyggspwa
-mei.i2p,ta6fwpneavr2lzwrguwx6y6v4l7ttjbih3eclkieblrogqvwl6lq
-meinsite.i2p,rsmsn2hxjwlngsuiaiu2elwskjzzvkai2vo2eifk73u66qu2m6iq
-mesh.firerabbit.i2p,3x5wokr4bjy5z3ynji4fyhvwzv4fvgry3xafi5df5h75doezjytq
-meshforum.i2p,hp2uzysaur74tbeojtlcsl7apsy2jgqxydd7b5asgvztihz76jia
-messageinabottle.i2p,avfhe3kvrrv7utxn2vre65lg7damxzzsewq3vukwie4llitd254a
-metanomial.i2p,bqrlzrexzh4p3eukfajegt2ht63i32wqpb2tpqrqi37w253c3uja
-meth.i2p,icdrmuhlxexj7gg64mphrx7kbdvymsh4g5pz5pgdhcqgeizpapnq
+metavertex2.i2p,4k6h5tsysycyaefvrh7maltvincdx6ugj4t2a37zzyzm4wf4g4dq
metrics.i2p,z45ieamhex2ihqv7oowk5fz4qq47rbvxhhhbaaiinpajbhuevtpq
mhatta.i2p,o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq
-microbleu.i2p,mtapervgibruizniems2yyr47pin2wpysyh7m632rigl26vjc6qa
-microsoft.i2p,hvaqr5idszdyrjph34amb4mjosqd3ynggoxlnj7ciqhnx7q6plza
-mindisl0st.i2p,u7rnqhvsuyxd3fabm4kyzn7brgz3i3cporj2emk2jmbpcmltyf7a
-mindspore.i2p,uuh5dd3y2rqa7x2jpggm4p2pg6znarm5uanwsvybe4tk36ymwr4q
-minecraft.undefined.i2p,oynvlg4vyyvzttklbccgktj4xkbx5w4pah2bnjrqjtvy3jrghhba
-mirror.i2p,dfcysmvxvovmrhipxca3q4e3quz6akc3ls6q2zzputvo6sv4fcrq
mk16de.bandura.i2p,rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq
-mochimochi.i2p,nijkdoagv343xps2pm5z2cjujz6pmrozrokrcyhhz3aeje3tfzqq
-modulus.i2p,ctz3o6hdefrzwt3hlg6rjhdcbjk6irppbndq32u6jnn4lz72f62a
-monero-build.i2p,wc7qzr43g2o33wsluagjhhd4rvrcx7h5hhhtfwl6i42kk3iuouja
-monerotools.i2p,5bal7dngxde2ddmhuzbtfken6w5nmxmixtjlrlmxt3wbhnemv73q
+moneroauth.i2p,kt6uh4z24tendrol5zbm4wv4apq4nbv4w7k5vcguvbpg3alrqyxa
monerujo.i2p,puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq
-moonknight.i2p,gza3w4cf5pvdbvuah6fpop54qtg26m4n3v7ogn2u6thwvqfm4s3a
-morbius.i2p,5zecnrlfdwaxfnj2m65mg7pnjketcdqyts2hg726fxvyl3oaepla
-morket.i2p,aofuard3ltrd4h7uq6qp23u3f35dxjbi6l4xfc6cfe7swljtzx2q
-morph.i2p,iovyp2dao5rta6g5v6hke2s4ugx2btkpcljddak2yhxfrx3l4dqa
-mosbot.i2p,5bhmrp43mjwlzf4x64xgdrkwmw4luvng6eq5waa663a7vnkp732a
+mooks.i2p,6txhjmnxnrjku4cmdwtyacjzhwythc7l5euqaxieyrc4vjotqwzq
mosfet.i2p,s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q
-motherfuckingwebsite.i2p,t6sdpyzhp4w54bp7sps2h7exvuzuhfazpj7k3rvaknqr66v4yo3a
-motorcycle-manuals.i2p,6cgnqlkvmk7f52itvmrgda4d3fejwlnef4joksmbykmiyvuzloea
-mousestepper.i2p,mir325bmbgsvogs44tnkl4mssmtygu2rle2bnx3vqvrpcba5l26a
-moxonom.i2p,gcjdrvnlobgexh7ebv276pwmnoj3yoyaqm3w4vmmdha4lgxfinqq
-mp3.aum.i2p,n7bmu5dwux7f6gedmdik6zrm77bnls4lkzo2vo3bf4bwegk7vkjq
-mp3.tc.i2p,w3ied5s7ldjcvnhxu2gyofe3oogzbplkyxshzfkhspiy2526snsa
-mpaa.i2p,m6cqnglo7xlytwxkdsmwf3d23d6lq5r446c3tktb2tdmuah36zya
-mrbamboo.i2p,tmpmkx6wlbbrgsnexrqlrib7laoegpbfeop7bnyezegii7hecpxa
-mrbyte.i2p,6swunwgixw555gvpgehunlkyhovbbpjkz46v5wupiwq33ninjofq
-mrflibble.i2p,u7k2qcmkrril6yvudvwxjqz7k3dzgp3jdejjjeapej7liselj3eq
-mrplod.i2p,fjn5hxtybxyfyvdf6u5v5seg2sjd47hb5by6sa6ais4w3xnrxwyq
-mryuk.i2p,razf6cyxwygg5um3zud4zjvbc7pholxrma7jbzxinn4ewncv72da
-mtn.i2p,xisk3h6sku3iqj52uriogaajmnku7pwjux7wa4omx2zloamuw6eq
mtn.i2p-projekt.i2p,f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa
-mtn.i2p2.i2p,l6kuhtmgvbp57d7jwalj5nksi6nr4gfzbz4oit62lxgipb3llt5a
-mtn.meeh.i2p,h7ylrsuzzynrxp3jql7anoozyqblavj7eqces6o3wngvuuxhs2la
mtproxy.ilita.i2p,vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q
mucats.i2p,4vjquedemoznbsva4j6wnr7hyms5k3gwucmxgcnwcwweontbcrha
-mud.i2p,qcjtmicd3ow3q26iwcs62m5zu3dceu6emo3afezulh4c3fsgrkia
-mudgaard.i2p,yz32lk42gtoesknesfolq3tt4erxxcejcote5pontaeqev3bj2kq
-mumblei2p.i2p,62s3kmxenyxym2no4qpsyawcbblr4f3a4rvlhdoqo3tmfqyq47fq
-murzilka.i2p,wu5ukmavxtb5334ncr6oi5a6fqutpurhmhzqtgl5ktkhycgq4s7q
-mush.zeit.i2p,dk3sg23kljawxqp3cb6xz5mnzjlyckzvq5jhqs5gnvdsv7wqn6ha
-music.i2p,akamh76yi6p7xxbvl3qv3yhaockne57yfuh77acogbgpjmwypvia
-musicfile.i2p,vyp42nsgzhb4wuf4rraeu2dd574cc5goskxcwh75uokqn4u3z7yq
+mumble.acetone.i2p,plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa
muwire.i2p,c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa
-mysterious.i2p,p66g2a4nzfkvidd3l7nwphcnfa3ttyu5kiolcb4czec2rn2kvwsq
-mystery.i2p,ccea4jybmr3xbfiykaoagfw7ezbvzyhtg44x2jgwhv7wscsxaa7a
-mywastedlife.i2p,ceumy3puvvsrru5bmfmtgsajsx5qyehqac7l7a23xpwtfs2bvcgq
-nacl.i2p,bm2fib3tumer72lopjh4nmqomwvqu2sdfyb2hmr6lnk7jbw3vvia
-namesite.i2p,2uviv3enxrtwvrysyuzomh7yccvfnmryzzyqddzcyh7aqlrwo3oa
-nano.i2p,ex5ssv7s3hj6jp7hvadxfw3wvbjbvnczxr4pbk7qw26ihiorjmba
-nassai.i2p,v653cocvn3i6bgjdm3ciwbdnu32supglv6gn4fh23bohemsp545q
-nastycomics.i2p,npws2lm55kcrdfk4fkaynxqzihduegwm5hlomhmhkaolie27vjrq
-nefkon8002.i2p,cyihnmez5falat7zo2xo2jgdyyu47milwfcs7znj3okcmjqj4qiq
+nbtm.i2p,46iitklpnxzl7eeqweq5xq7nc3vcl2ll7wudpa4jcyyeahvfrgta
+nekochan.i2p,dszr2z2swmeczeao2bqgop6fyh34jw5baeiybsavwtihllwa5qwq
neodome.i2p,5hkhjehj3ct2pvcah7dcylwef2oti3xij5myxbv3pd7rocio5vkq
neoniet.i2p,jf32pdnofckjvedni77vjt26m6opzzz6ocpkpxof4fptzym56raq
news-i2pn.i2p,wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca
-news-ru.i2p,65tnauyus3odr47c7tyaoo35fxymruzqldfxkq2pu57vtccyxvhq
news.neodome.i2p,trhwcnygfkeqjj6g4xhmrdp4gsjqsye47lsxshbmwbten4ywt5oq
-news.underscore.i2p,rl7t3kspoktuatjcu7gf7xleu7y6biibs4fspzo24kll6n7hbq4q
-newsbyte.i2p,gsk3rgsejxxrfabjxu5w5plplxsu47aoeoke22vvhlwwllzosnxq
-newua.i2p,sl4dw7gpg3ravvmz4fsmj3mweaxyqpqdmb2aadqcxp3vozm4ticq
-nibble.i2p,jmdxcpdzqafedn3clc4y7u6o56qocfiffrzbzncmtggqtio5qjpa
-nic.i2p,vzu5ymab6klevpcdudv4ypisjqaznmt44e6lcg7dwiuza4saibxq
-nickster.i2p,zkwsa6kvq2wdhovw5g5wqakpb7rlaylyhfriwmurots5pvwbqauq
-nickster2.i2p,eofzi7npzpk4p5gb4qper4hmwgxo6kepo3dheeblakewedxj2bwq
-nickyb.i2p,gmpxk4tje7mnud32kg2kjmf36f6cpwqakzc2dxuzjnnz4qr5w4sa
-niconiconi.i2p,p5h4klccaaldvphjw7fllgj3x5tfy7thqnqu5yr6py7dofemeqiq
-nightblade.i2p,p4gkon7ytswxrbwkl7vruw6mg7kfw5aofovqjgt4c7tnqmbq6lha
-nightfort.i2p,6vth72b6i65jjbjvxvqxgsydpoy2i3hvn3rjcp73pvdm3l5xwevq
-nine.i2p,gniusiswp2zhjwh6bxdlyzk2ocg2cx6xxjwcmih4mohjs5sokqsa
-ninja.i2p,q6dg6hlb3egzdqz352ri5rc4fx4gcrdeu3tpiyfxlv73yfjgrhya
-nm.i2p,3itdpqzyn3ii7sivppo4sxxwhvgtpskzkbokrdibim6gqpvlw5ya
-nnm-club.i2p,xkk5fzxdmjra4xlijoa43h5cfcbusdjc6dbfplulvouxdbztokwq
-nnmc.i2p,7xizivpjkrpkb76x3yf2yktxscax3wf5vrpofwqgp3wcrnuru53a
-nnmclub.i2p,bntvsagecjxyrdpl7jshdrbh5m52gq7xt7sdtwxijofjwxrnae3a
-nntp.baffled.i2p,kc6muo2tih5mttbpzecteegvtonuysjidk3emcy4cm4yifzild2a
-nntp.duck.i2p,gvzzor4utsqxswvf6jaglfks7yxudlz2s326ftrk56i4lpd2s47q
-nntp.fr.i2p,npoztnqadfnu4vrokoh6rusoi3yne47s6jurc3lzhcrzzia5eqva
-nntp.i2p,wwdzmeyler4djegvyt2bxmkwrckfgg3epkkwowyb75s47he6df6q
-no.i2p,lpsg4x4gdrf7antxcdy47cl6abcqei5ommgzt55retq7go5ku3ba
-noname56.i2p,oiyoslismzyxuw7ehxoigmtkdj35idim6flmlplddxuiiif6msfa
-noop.i2p,vyf6ixbltwkmhjs7p52ulsshbk3epaq7u3ipcnuz7d7vt3ah7bxa
-nop.i2p,ssag45lathm4gqp46si7c4w4tioyvjpcza5uvz5x2zuljnplylca
+nicksphere.i2p,nickg4tsj3wy3i23faxp5momjcnlwrvwl5ek5l7lkm5vrbblvgbq
+nitter.i2p,axd6uavsstsrvstva4mzlzh4ct76rc6zdug3nxdgeitrzczhzf4q
normal.i2p,j5fex634r2altzb3kjvu35qekt2r3hgsqzg5qxoy7dp53heu5pma
-normanabcd.i2p,si2vh43gvxjnw2shwr24j76xyanow4oa6gbu4idookbraoxl3s3a
notbob.i2p,nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a
-nothingburger.i2p,tesfpn757ysc7nih7mxher2b3jstkc3l5fhfcyb5kxhzhvv52trq
-nothingspecial.i2p,wzrwqrp52bilqijrlboclynuev4kzpjzfzlvzl5aqxqt5fdnpbga
-novospice.i2p,ukqap24nwac4gns77s4zy7j5cagt7l7syb5zo7eukfg3zn5gg5qq
+novabbs.i2p,bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola
nsa.i2p,nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga
nvspc.i2p,anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra
-nxt-wallet.i2p,33pp74k4ivy67z332qpyl3qlcqmi6gxqumrow4bldkblxxlxqq5a
obmen.i2p,vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa
-obscuratus.i2p,i4j37hcmfssokfb6w3npup77v6v4awdxzxa65ranu34urjs4cota
-ogg.aum.i2p,wchgsx6d6p3czloeqvna2db5jr7odw4v4kqrn4gr4qiipfyrbh5q
-ogg.baffled.i2p,tfbvj2xal6lcuxv3hzuw7cw4g3whguombcv2zuotzvul4qtrimgq
ol.i2p,bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq
-olanet.i2p,ymcs6sgtayeu72okqhxwstu6a47lkvzoyupifmfnduncrat34sbq
-olymp.i2p,epw6gzczhyyk6a5hpccradb7wuue3nfntm7rsbxu2n4dqw2nqxma
-onboard.i2p,qwlgxrmv62mhdu6bgkh4ufnxowxsatfb6tbs2zr666qyunwqnecq
onelon.i2p,irkvgdnlc6tidoqomre4qr7q4w4qcjfyvbovatgyolk6d4uvcyha
-onepost.i2p,jeljxbr4swq4qq4uwzyleta64foow6ihllh77jwng6bxz7jaazka
-onhax.i2p,m7i6oe4i3bygx6pn44vn22pgf5kzikw7edr2y5t4cpe5gnqpt3ta
-onhere.i2p,vwjowg5exhxxsmt4uhjeumuecf5tvticndq2qilfnhzrdumcnuva
-oniichan.i2p,nnkikjorplul4dlytwfovkne66lwo7ln26xzuq33isvixw3wu3yq
-onionforum.i2p,yadam2bp6hccgy7uvcigf5cabknovj5hrplcqxnufcu4ey33pu5q
-ooo.i2p,iqp5wt326fyai5jajsa3vkkk5uk56ofn4anocgpe5iwlpisq6l7a
opal.i2p,li5kue3hfaqhhvaoxiw2ollhhkw765myhwcijgock5rs4erdqdaa
-opcheesecake.i2p,ervp5pore7nquim7flbpwg3wjsrn6rgyzpezcrpk3gxapxjrvk5q
-open4you.i2p,ice6ax5qrzwfwzsy64bctffj6zlzpuzdr5np65zsxlbt7hztyc6a
-openarea.i2p,nmju26n2m7tyqbuis6ghykekrslqmpfwd6fspd4lvm2riqmtojnq
-opendiftracker.i2p,bikpeyxci4zuyy36eau5ycw665dplun4yxamn7vmsastejdqtfoq
-openforums.i2p,lho7cvuuzddql24utu7x6mzfsdmxqq7virxp5bcqsxzry2vmwj5q
-openspace.i2p,uy65dhftzexjgdncmpa64i4ndt3ztua3oq3fm6fxeenjqaqq4upq
opentracker.dg2.i2p,w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa
-operapresto.i2p,taatejbzlrkotea34z45ojz7r5t2nkcolthfgfknjgqs4kxlzq7q
-opsec.i2p,rlsjbyy5beucaiedaggyo2tpbq75ituqwnfx4a4qghyifpdk3rra
-orange.proxynet.i2p,nuulzzn5cf5vs75ujqljkfoyiixlwikbg6ubvcjnvm2bptamu72a
-orc.i2p,orcnge47kqnpdj4wb22bg6aqcv5v6yu7kmjf5ll3htvseiqayntq
-organizedresistance.i2p,kpspvipmqbfe3dft2sgl27km5ncalvugpphewnyde3yyup6q5pca
-orion.i2p,5vntdqqckjex274sma3uqckwqep2czxs5zew25zlntwoofxk3sga
-orz.i2p,oxomqkekybmyk6befjlouesit5mhstonzvzd2xnvsk7i6uyrqsfq
-os3.i2p,s7x4ww5osrrfein3xgwyq67wnk6lgliw4mzt7shtu66wrb2zdojq
-osint.i2p,4pf7ftsi35ujbv4awbli2bgmrtkmmwezcw4l53x4q5kparfes3ba
-osiristomb.i2p,t3slf77axkv3qm7c3gzpv3jgmkraoqqe2bojr6h66eipibofsyzq
-ot.knotwork.i2p,cxhvvfkbp2qbv5qojph7zb46molpe2ffanghnerjag3xdmy6ltxq
outproxy-tor.meeh.i2p,77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq
outproxy.bandura.i2p,smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q
-outproxy.h2ik.i2p,nwgvfpfarpnyjjl4pwsxr2zdsppcx5we3kos2vlwicbiukopgaza
-outproxy.lcg.i2p,whkvsmth7qeduc7yrciy6jesuyr6qis4x3oke75upfw33qztsh2q
-outproxyng.h2ik.i2p,v32zse2zczzgegelwxbx7n5i2lm2xhh2avltg76h6fz5tb53sfxq
-overchan.oniichan.i2p,g7c54d4b7yva4ktpbaabqeu2yx6axalh4gevb44afpbwm23xuuya
p4bl0.i2p,lkgdfm4w6e2kkjhcdzr4ahhz26s3aunhrn6t2or436o73qh4z7ga
-pacman.i2p,hlkzt7mbciez64gf325u5ko3353hfxseblbj7bu4loti3lk2zfha
-pannuba.i2p,tr7ffmkmr6fcope2pix2xokl6ak4ricryvcbf6yaz4gvku4filzq
-pants.i2p,xez3clscjfafkqwk6f473ccp3yvac4kh6rdp6dptwxa2lhixizgq
-papel.i2p,mxskjqntn2d34q4ovsnd5mud7cgde734tdjldd3lt4hczh2645zq
-parazite2.i2p,s2kgme5ye22woyzlrxbpoo63uzxnnlohmy3g4t6mdcnugvbiiieq
-passwd.i2p,ojugl3kbejhzcmyq7x52ms5lraxsig4ofkhvbgzleraer4zczroa
-pasta-nojs.i2p,dkkl3ab6iovxfqnp44wsjgqaabznvu7u3hugpzyagbeqlxgvx3la
-paste.crypthost.i2p,2zaj4u4s4l3lgas2h5p6c6pvzr2dckylkrh5ngabursj4oh25ozq
-paste.i2p,v2bw3hiabaywor5ucakgourj3d2gfxhvdkvil3hxumi22uhvooma
-paste.i2p2.i2p,b2gizskfea4sjxlw6ru2tb6kdrj47dsjc77cijsf5mzh4ogbmfvq
+packages.i2p,2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja
+password.i2p,knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa
paste.idk.i2p,qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva
paste.r4sas.i2p,csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa
-pastebin.i2p,mnicncxrg2qqi55qftigiitaheugnj4rpysbk7zabdrirgktelqa
-pastethis.i2p,erkqiwnjl7vtysqd3wvddv6tfvnhswarqkbn4blhdlhfxn7cf2ha
-pdforge.i2p,wzeg3ehf6d2mqjqji3sd3rns776thvhe2vam2r6gjlmsqis2dctq
-perravida.i2p,uda2rkhskjdb4w7xiftz3btfpl7bhxsy5gwpiiiongte4gulbuza
-perv.i2p,f3k3wm4ae7t7ottfjd4hu6is7zsls73izl2gm2qynzficxcdsiwq
-pgp.duck.i2p,wujajyxj3cgsfsbtr3g7g7npv5ft3de6pcstxlav26zq6cxdjmha
+pehotin.i2p,e6tfct7qvso7qrseseubsk5hxn3wejkdivojqeed6i7hbj4dsmqa
pharos.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
pharoz.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
-phonebooth.i2p,noxia7rv6uvamoy2fkcgyj4ssjpdt4io6lzgx6jl6wujpufxedrq
-photo.i2p,fqhuy77ugd5htnubzkyy5guvwboqn6goahtmn2g7feewvdj7k3iq
-phpsadness.i2p,7kjaywpkfmfg2xshgnebdv2g3pz345s4ih2livqk27dp6tc37daa
-pidorchan.i2p,5fd222yoxytnmffvh73obszownatnoy3f7ewn565fqw5x4eh7orq
-piespy.i2p,vzusfjzcu5ntnvobcvyzc4dcu4j6ommtnpmba2puk3kexgdzrl7a
-pink.proxynet.i2p,q6ul3khwrszfp5gqttkwrcnwr2qayo2unw6sq2yqpyidcuip3nwa
-pinkpaste.i2p,o5zdq6iuire5eatwehhhylj7vbsdfedhm7wkd2hoejh7wxwfbqnq
-pisekot.i2p,7yzdwhy723fodqz4onp6k3nyvixra2sa6dl45tcblhmyoa7i36nq
+pirate.black.i2p,z67mwyo7o3tb42r3tjcckcx6gyh4tmnlh6sbmf2hz6qtn3lri2ta
pizdabol.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
-plain.i2p,y7f3c5s2n44j5pnsxncqpasluv6k7i5jtnhjfs5mfulcgcas6sqq
-planet.i2p,y45f23mb2apgywmftrjmfg35oynzfwjed7rxs2mh76pbdeh4fatq
-plazsekta.i2p,ha25hr5qvs5eclqt4bq4fl4w7dc3p3d7cfbstkglcv4tf645lfxa
-plugins.i2p,wwgtflbaa7od2fxbw4u7q7uugmdclxf56alddvizugwcz5edjgia
-pmail.i2p,4vuq2eku25cehr6yk5ly7ed2j2atliwhpzwnibxk7lpguunzk4ya
-polecat.i2p,het5jrdn35nhkanxmom5mjyggyvmn2wdj2agyqlrv4mhzhtmavwq
-poley.i2p,hu2qwmu2pfgkdhsyg66qm6fmnnnrgdpptln6izt7a23r4cs523dq
-politguy.i2p,6dkkh3wnlwlr6k7wnlp4dbtf7pebjrph5afra2vqgfjnbihdglkq
+planet.i2p,pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq
+play.infirium.i2p,3pesucgkmky2unpxceuec7jopajyz44pvb2sgwyqz6x43bfovnda
+podger.i2p,56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya
+polistern.i2p,ztqi2zewgtifrg4efs6eyxxi5www27ymley3aiz4obhulbnszlva
pomoyka.i2p,omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q
pool.gostcoin.i2p,m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa
-pools.plazsekta.i2p,ima2b6s3yjyvkab5qycexgsnkkvrhg57awjln4ctz6a5au4thqcq
-pop.mail.i2p,bup6pmac7adgzkb5r6eknk2juczkxigolkwqkbmenawkes5s5qfq
-pop.postman.i2p,ipkiowj7x4yjj7jc35yay3c6gauynkkl64gzzyxra3wmyhtfxlya
-popeye.i2p,pbvpqyrtxe65flkry32fhms4ztq5y5yh4i6mecze53ykqk36wzua
-popki.i2p,jiqcbrtrocof7btlbzg2riwfsqr7mkcllu7wgijt673oj5efjeeq
-potatolivingstone.i2p,potatlpuvdqy7ps5ac5i3tkornq5rqyfy6d7nv56r2r2nejtpmsa
-ppbbone.i2p,tpc7626frv5emypxua2zc6gps5knhmgfdpjsd6kbofkftf3mqkqa
-prana.i2p,jp7ftuehpzuxyfeobq23udjhtdnfch7lfb256hr573j6aorfzgxq
+pop.postman.i2p,i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq
pravtor.i2p,2sr27o5x2v2pyqro7wl5nl6krrsbizwrzsky5y7pkohwh24gn6xq
-preppers.i2p,nv3zav3qgmpc5bpdp6zdtlkgcxtb4h6w2ftg2ocg27btnoy2tuiq
-presto.i2p,rqmejrctgf5w6dxc6afbagvea3gbkg4gchybhp4biq73yazx5v6a
-pris.i2p,ahiwycgzuutdxvfqu3wseqffdnhy675nes57s4it2uysy5pxmz6a
-priv.i2p,h4asmxnsw2xz2ve43qt22mhoua7icerhx66ujog5msk6cretnaoq
-privacyhawk.i2p,qnfdfjfrcycygz5p7drylkv6pde7b5ehxemefjt63blqtal4cpaa
-privacysolutions.i2p,4m626tvfr4skzunz7tri6oti3alinbxnoglnvqeqmf4mwvdzyaeq
privatebin.i2p,e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a
+privetalena.i2p,alenabivbkqo2xoikterpsc3gquqzacxfef6usbifrez5ioegjjq
project-future.i2p,ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta
-projectmayhem2012-086.i2p,ehkjj4ptsagxlo27wpv4a5dk4zxqf4kg4p6fh35xrlz4y6mhe4eq
-protokol.i2p,f4xre35ehc5l6ianjvt3zcktxkjlyp2iwdje65qnu2j6vurhy6nq
-proxynet.i2p,7gar5a3n4hzvsgi73iizo65mjza4kujf7feopfxuwu5p6wtwog5a
-psi.i2p,avviiexdngd32ccoy4kuckvc3mkf53ycvzbz6vz75vzhv4tbpk5a
-psp.i2p,2nfqfabeahfl3eeqxuum2sapzfedu4kkyydivlqjmp5ipvvqvmzq
+proof-of-loss.i2p,ofhehzoj5p4khpkookxb63tmqvrmcxaapgb3v3nm7kd5wjgebs4a
psv.i2p,pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a
psy.i2p,s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q
psyco.i2p,eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q
pt.hiddenanswers.i2p,o5jlxbbnx3byzgmihqye3kysop5jgl3unsrkmurbtr2nrnl2y74a
pt.i2p,umbkgg3nhvgunyiwo2odfo3ufbdijb2ofg5eha6nyd4ymp4yitna
-ptm.i2p,7dna5745ynxgogpjermnq26hwrqyjdlsibpjfmjxlwig247bjisa
-ptt.i2p,q7r32j7lc3xgrcw2ym33wv4lfgqbez7vtm4lts7n34qfe3iygeha
-publicwww.i2p,oitoja234mwfbeuhtuibnxn6hd5v4nbtf7oxfgdhk5igrg6wkiqq
+pubsub.i2p,kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa
pull.git.repo.i2p,3so7htzxzz6h46qvjm3fbd735zl3lrblerlj2xxybhobublcv67q
purokishi.i2p,ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca
-purplemask.i2p,7u3x6deg5uotlmp4rypvnvvy4sf4nfip7zt5ykpm35gbcrnfgedq
push.git.repo.i2p,jef4g5vxnqybm4zpouum3lzbl6ti6456q57nbyj5kfyldkempm3a
-pycache.awup.i2p,w45lkxdnqhil4sgzanmxce62sv3q4szeowcjb2e72a5y5vbhm4ra
-qq.i2p,iv2wcb7aoty5pwfvqc3lhpdxjrlw6cftlxkjrlbkhioirnj4nlta
-qtmhkr.i2p,2jj2ikxixz372qzxcdmgkwpzu6kek3mjsvwtzctdkapacfg2epzq
+pwcq.i2p,hcwrhp454aj2jen6clgkw5odw7pvtixhf5dnqsx5ax4vkbxybk7q
+qis.i2p,sxfs4mmqxe4kj6yovbi54czfhhkpzxtj7mbwxjsvazgfulhq4gka
+qorg11.i2p,ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q
+query.i2p,qzdh2potcfrqcwl2oejkidsyggaspvi63gfggmlz2xrhjkrnazda
quest.idk.i2p,k6stkvw3jr6of4j5g3pu34jowfpl4k4jiqih3yozhcvinkok56aa
r4sas.i2p,2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq
-rabbithole.i2p,2ywckntwedn7ui5ltu44io2sildeh2m4ousyun2jeh6r6wnqvmgq
radio.r4sas.i2p,cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla
-ragnarok.i2p,jpzw6kbuzz3ll2mfi3emcaan4gidyt7ysdhu62r5k5xawrva7kca
-ramsay.i2p,svezv4xrp4l57ankyhu6qisd5jnk423n7oa5as3zd2554aaz6lkq
-random.i2p,pwcgh3tffcmjsacdxd7ej2k5c5l2n7zedymnhbx34oh2pehvwpza
+ramble.i2p,smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq
ransack.i2p,mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq
-rany.i2p,tcnai23pvo6asfmefl23cllpp3vgrgp2jhtjare7vhloyzwm2pma
-rasputin-sucks.i2p,fdozdbyak4rul4jwpqfisbkcx4xbrkuvf2o5r6fd3xryyrjgvjiq
-rblcom.i2p,dysjyfzd3pd7i6lp54mt6hv33xpdvcblvr7nnzy7bfc3lyo4vaiq
+realsite.i2p,ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta
rebel.i2p,nch2arl45crkyk6bklyk2hrdwjf5nztyxdtoshy6llhwqgxho5jq
-red.i2p,fzbdltgsg7jrpz7gmjfvhpcdnw5yrglwspnxqp4zoym3bglntzfa
-redpanda.i2p,3wcnp6afz4cikqzdu2ktb5wfz7hb3ejdbpn7ocpy7fmeqyzbaiea
-redzara.i2p,ty7bt62rw5ryvk44dd3v5sua6c7wnbpxxqb6v4dohajmwmezi7va
-reefer.i2p,4cde25mrrnt5n4nvp5tl62gej33nekfvq2viubmx4xdakhm5pfaa
+reg.i2p,shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa
reg.rus.i2p,k2r2wda4eavt4hoq5hptprqfmixusirq3gi5bl3z2pqzcd6felwa
reichsmarket.i2p,2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq
-relatelist.i2p,utrer5zgnou72hs4eztmk37pmzdtfw3d6s23wwl7nk3lkqpzbdiq
-rep.i2pdproject.i2p,rexmpwqbkjzietrp6aabxdih6ek2imqhrn6hu3crym3mqce2v5zq
repo.i2p,uxe3lqueuuyklel23sf5h25zwgqgjwsofrqchhnptd5y6pedzbxa
repo.r4sas.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
-republicat.i2p,jbzt3h2n6ggxx4cm3p7a6ywsbpeuxyfajq4sxh5ztwzeo2o6undq
-reseed.i2p,j7xszhsjy7orrnbdys7yykrssv5imkn4eid7n5ikcnxuhpaaw6cq
-retrobbs-nntp.i2p,fkyzl24oxcxvjzkx74t3533x7qjketzmvzk6bwn3d6hj5t7hlw6q
retrobbs.i2p,mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq
retrobbs2.i2p,ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q
-revo-ua.i2p,hpojpumki22xjwhmhe6zkiy44oanyn7u4ctcfe3in2ibwm5l32hq
-riaa.i2p,lfbezn7amkzhswnx7lb4lxihyggl2kuqo5c7vwkcv6bwqmr4cuoa
+rfocke.i2p,pphesm2icsbqi7uzsmxpgyy4kc22b3cdpb4uwplkkjmupexva7dq
+ricycal.i2p,tfkz7rgqh6rwvlo2veftw4why2dej3gztiglzfqfvykyzak2syxa
rideronthestorm.i2p,xrdc2qc7quhumhglpbcuiqxr42nuffv4xj4a73jbr4ygepitibqq
-ripshod.i2p,ggqxxx443edukuay5z7lwdewkg4r5aev43hjcvueopw6fb5pwvkq
-romster.i2p,eaf2stdqdbepylt53egvixdi34g2usvgi7a4oixsja6atkran43a
-rootd.i2p,mzbe5wofwn7eaqq4yefrmxizqaxoslwqxrv5qcv2opx5lnhg64dq
-rospravosudie.i2p,z55khrnlj6bzhs5zielutm6ae6t2bbhfuiujwlrp3teubqyc4w7q
-rotten.i2p,j4bm3rvezlejnb44elniagi5v2gazh7jaqrzhbod2pbxmgeb2frq
rpi.i2p,56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq
-rs-freenet.i2p,jhpvnnhfrozore2wlhi5m5bzggz5jcz5uwhou4w62ylkewtoxqba
-rs-tor.i2p,zv2etzurnqjuuajmeb5gg3sjhfdcotxvlae6igxbfyahkjhhsx4a
rslight.i2p,bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq
-rsync.thetower.i2p,w4brpcdod7wnfqhwqrxyt4sbf2acouqfk5wyosfpq4mxq4s35kqa
+rsync.anonroms.i2p,4q6llvjjpgncu6wbol2rqq24ksrtscu5njj65jjovqlsxounxbdq
ru.hiddenanswers.i2p,o6rmndvggfwnuvxwyq54y667fmmurgveerlzufyrhub6w3vkagva
ru.i2p,m7fqktjgtmsb3x7bvfrdx4tf7htnhytnz5qi2ujjcnph33u3hnja
rufurus.i2p,7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca
rus.i2p,gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga
-ruslibgen.i2p,kk566cv37hivbjafiij5ryoui2ebxnm7b25gb3troniixopaj6nq
-rutor.i2p,tro5tvvtd2qg34naxhvqp4236it36jjaipbda5vnjmggp55navdq
-rutracker.i2p,ujyqbawolalwvdpy33v2wjuaspnu4ym3fsl3fd6mldjblzzqlvlq
rvklein.i2p,pzbqr2s25zpgbwiz22nc7hzxlusqxwhpxrsmln63y6fd45whnjcq
-s.i2p,bnpc454fvuzqk22ywguqb4m4vkhrcfj3pydrbfw4esqklymd7t3a
-s01.0chan.i2p,v2ymvk4suxl2zghx6bhjn3yz32echagnxqwrkklul4iynmoqydrq
-s02.0chan.i2p,znn2mmwnypu4hrwo75nzoibe5dzj6napwcmzzic5yqty7wnqfyya
-s03.0chan.i2p,af2penimq2z3xprlnhpzkssc45bplfg73osqjcfezobgnwqcqfcq
-s04.0chan.i2p,kpxqwmwciyz4q7dfsawmgdotwrv525cmc3n5cet3je4ngtact37q
-salt.i2p,6aflphlze6btsbez5cm4x53ydrmwhqrkxsud535d3qjh4wq62rxq
-samotyki-2018.i2p,y7fkqkhtsayuj3gwxvl3mpeda2zq7kuuqjjpoqhxrtxwfftpwe4a
-sasquotch.i2p,p6535uyfk2y6etc3t47vd3oqxydznqior5jxcvq5bdxe5kw5th6q
-saurer.i2p,m2uhvcknp4p33ehkybdpzyq7rhwswrcjgy4ak6wsg7tlsolfsi6q
-sc.i2p,ovcw4qxa6fiosx3toiwjvtyywhfs2f5cfq2av5jakqhmvknajlza
-schwarzwald.i2p,4gokilzy73mmudufy3pohgatm42fcstx7uzg5hjvnfyphxpnphuq
-sciencebooks.i2p,ypftjpgck75swz3bnsu4nw7rmrlr2vqsn4mwivwt3zcc3rxln5cq
-scio.i2p,a5nhlcbz5ohgezri53ioyyarcckb6ekkwcl67u45prittktbh2fa
-scp.duck.i2p,ghbpsolpnveizxu4wbs7jbs2vj3kntnsexfcdleyhpqdhfpxleda
-scussuni.i2p,f6mb7qcd72i3e4hec57nvysifeza5lmklhokpkrf554avv7johvq
+scamdemia.i2p,fdkiv7o4kzaikwkw6hbn7iedidp25lv6eo7yeyeqxai3jz7mrvzq
sdmr.i2p,o2vtbbcddamtqqomtf7wbkzzkh2xovt23lc6np7qtxbuv6vtul6q
-search.i2p,nz4qj6xaw5fda3rsmsax6yjthqy4c7uak2j3dzcehtkgyso4q46q
-searx.i2p,lcjxhuo5lbrol3e5ijj3ga4gdhhelzdyslc7bm4blw6jy6cx4p5a
-searxes.i2p,2v2wkxi52vukbmcfkyg356pml2nwrca3rf6xjnw7bstblxfmcldq
-secondrealm.i2p,ykkgrp4u6kmcqiyefiahcbcc5bxkutwketp4n4dmgkgawwitcolq
-secretchat.i2p,cl3j2zxhpw6u6jevny45i557ojhwfxn4g375nnuqhy6lp27mry2q
secure.thetinhat.i2p,4q3qyzgz3ub5npbmt3vqqege5lg4zy62rhbgage4lpvnujwfpala
-seeker.i2p,ipll7sit24oyhnwawpvokz5u7dabq6klveuqpx3sbi6o5qemy2bq
-sentralintellijenzeigency.i2p,kqq6r6z7twhz5nmqpy3hdqo5iifzaz2urker3zscs7m5mt77llta
-seomon.i2p,5mvpsy4h45w4fx7upen7ay3vkrs5klphz5nptmtcqvc3fsajsm4q
-septu.i2p,5lqvih7yzbqacfi63hwnmih57dxopu5g2o5o4e2aorq7bt4ooyra
serien.i2p,3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda
-ses.i2p,5qfoz6qfgbo7z5sdi26naxstpi2xiltamkcdbhmj6y6q2bo4inja
-shadowlife.i2p,jme44x4m5k3ikzwk3sopi6huyp5qsqzr27plno2ds65cl4nv2b4a
-shiftfox.i2p,wpvnuzslu7hjy4gujvnphtyckchdoxccrlhbyomsmjizykczyseq
+sftp.anonroms.i2p,uozfd7ttkhjsofmgs7lfcy4pgngs4yp7kvnbhnppebjumgbjhjla
+sharefile.i2p,o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta
shoieq3.i2p,3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q
-shoronil.i2p,7shqzgmb6tabiwrnwlasruq7pswy2d3emvfhaitehkqgod7i62sa
-short.i2p,z5mt5rvnanlex6r3x3jnjhzzfqpv36r4ylesynigytegjmebauba
-sigterm.i2p,5tuw3uj6x4p5xousgqg53ygbsi5ixozxnnkgzzwdqlhtoe2fbzqa
-silc2p.i2p,wt4mvbvnpqniywcpkrrjubvcwyskskujxjkhk24xmhrojdeisoja
-silkroadreloaded.i2p,hyn3mwmyeovcn2paujxur2eury2ufqpoahvbbqshfoggljn25tra
-sion.i2p,lcbmmw2tvplvqh2dq5lmpxl3vnd5o4j3bdul5moa23deakjrso5q
-sircd.i2p,vdtpi36ui2wav3qv6qfsxf3b776wljzi7m643naivbqf7x3n3ztq
-sirup.i2p,aohdp4yajnkitrtw7v2mo3sp7swuqhjfwlsi5xwd7dudzftumsma
-site.games.i2p,zeuczucfxeev3k7tvqlfcdpfbnqggheiknyyb5r2q4utn3d2auja
skank.i2p,qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q
-slack.i2p,gfcsh2yrb2tx7hyvmobriv52skz7qoobn7n7y7n6xaehhh4rpbja
-slacker.i2p,wq7m2wdguzweleb666ygv3bmfhha63zj74rub76vfesbyhsyk6iq
-slump.i2p,pzo24fb6lfum67ovmyjd32ohthy7h35tk2puneqeilndtyr44mfa
-smeghead.i2p,ojf4czveeuekxqkjvkszvv7eiop5dg7x2p6rgfzl4ng4xrjk6lja
-smtp.mail.i2p,kdn7zx7fgoe4bn5abaaj5cb3e4ql22fklb5veui5yajpj4cxapya
-smtp.postman.i2p,jj7pt6chsziz6oxxnzpqj7mzhxm2xfhcrbh7dl3tegifb577vx5q
-snopyta.i2p,nppi6cyktvfgstqqzemkpp7nunt4uykwn5cwhwaxcfj2r4kjr7ua
-society.i2p,d6atkbmzbvh3tqflgieqe6pa2sma5x24q2nsz6mzdl3x5qhzreea
-socks1.tor.i2p,sifawcdexgdmoc3krv46pvvz74nzd6fkju2vzykjxsx3egqsb6wq
-sonax.i2p,jmuxdhlok5ggojehesfjlit2e2q3fhzwwfxjndts7vzdshucbjjq
-soup.i2p,s6lagaqbn572fvnr7vsxsqwbwxb6m3gr5hu6eetstykdm2opp2ia
-spectre.i2p,b7fynfg42avzwv2qeioxm2bmfxm5fimkpzu27zqi4qg5wxqx3zwq
+smtp.postman.i2p,3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q
+solr.chudo.i2p,utl2ds5vztfomjgerohvxrgaq3g6zrspyku4s35knfmu4rihhgxq
spoika.i2p,u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq
-sponge.i2p,o5hu7phy7udffuhts6w5wn5mw3sepwe3hyvw6kthti33wa2xn5tq
-squid.i2p,r4ll5zkbokgxlttqc2lrojvvey5yar4xr5prnndvnmggnqzjaeoq
-squid2.i2p,hum4wlwizbsckbudcklflei66qxhpxsdkyo4l2rn256smmjleila
-sqz.i2p,3jvbwc7sy4lnhj25nj7yepx7omli4ulqirnawv3mz6qlhgokjgzq
-sr-ocho.i2p,7my7fc6glh2mwxtdup33gni3gzwycu7avsg2paschpcj54c7n2ka
-ssh.i2p,xpvdadaouc4qr75pteymyozc7mcsynjfkuqqkkla542lpcsqionq
-ssh0.rany.i2p,xhphpkziyinn7faroz5nitcrc5abbs33auqlxoauxsoi4jnhvrgq
-stasher.i2p,6ilgpudnba4kroleunc2weh5txgoxys5yucij5gla6pjyki4oewa
-stats.i2p,7tbay5p4kzeekxvyvbf6v7eauazemsnnl2aoyqhg5jzpr5eke7tq
+spooks.i2p,lrlrsud2latpctgwmvfwn5hanv6m7rold4vk6n6w2p43danmvgsa
+sportloto.i2p,sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq
+spyware.i2p,36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq
+ss.i2p,7gg7xiiwjmigrijsmkpsyzl6n4pd7hqiioovdr6vsip2xsdxpsaq
+stats.i2p,kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq
status.str4d.i2p,ycyyjo3psqbo45nuz243xvgvwnmzlanzqbzxv3kh6gyjztv7425q
sto-man.i2p,rg4eilfpe24ws6nctix63qw2dlvd2tqgwdcgdxzji6l5bc4dc7aa
str4d.i2p,wrrwzdgsppwl2g2bdohhajz3dh45ui6u3y7yuop5ivvfzxtwnipa
-stream.i2p,prmbv3xm63ksoetnhbzqg4nzu2lhqdnqytgsydb7u3quxfrg7rna
streams.darkrealm.i2p,ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq
-striker.i2p,4gswsrfpbd44hwjoj33jbqfbwzxfkwpuplb3ydq5zm7nfu2pxvdq
-subrosa.i2p,g3lnglrnoual7wyabnwwv37uwhadgbxiqz36pf3f5cwfuxsx4mxq
-subterra.i2p,vdmhe4u26unzgd7ysq6w36ubjncms5wzbhzr2gq576sq4xut5zwq
-sugadude.i2p,yzjn76iyqard64wgggfrnywkxi7tbfkw7mjhpviqz3p2dguey4yq
-suicidal.i2p,yfamynllow5xiqbbca7eh5xn733wtnuti5bi4ovc7dwycntqmiuq
-sun.i2p,33mt3psjrtauk6wzt35ke7w4bkyizesnsjlal45fbosja2j5i74q
-sungo.i2p,h67s3jw56rwfyoxqxj3fngrluybsgxc2meendngkehzqowxnpj3q
-super.i2p,2oopfqdsylutqnxstwq4ppafbk5cmrl3be7pid3orcia4bnoisfa
-surrender.adab.i2p,jgz7xglgfgnjfklrytyn427np2ubipztlm5bxrtbiucayglukrta
-susi.i2p,qc6g2qfi2ccw7vjwpst6rwuofgzbeoewsb2usv7rubutf4gzqveq
svong.i2p,wlamzgxjc4k67fn2c2pdems2dzfq3hkdbbt3n7ela7p2wp3pew6a
-svs.i2p,zys6mammgvbu7h7n3gxp4dxnxs5u3u3giadgrq7vthjq5lwnkntq
-syncline.i2p,5kcqmhislu3lmr7llgmdl72yu3efhyriljdc6wp774ftpwlcs5ra
+switching.software.i2p,4ntxofeih4fopdgl3hxn7xu3xkhrbtadnshvcc2ikrggi2qar4ba
syndie-project.i2p,xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq
syndie.echelon.i2p,vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta
-syndie.i2p,7lm3yzpuejhpl4tt4l7o4ndqlu7hgijohofh7oaydx7q7kelenbq
-syndie.tiny.i2p,lvxboy6ni52i7dwe4a54xe7uxz3dwhy66jaqcmn4q6yzdrrf2xya
-syndie2.tiny.i2p,5iov5rqup5ji6os3zpxvgzfztnbpfp3d7jh2xchwyx6dmykwdzua
-syndiemedia.i2p,4lrbbblclodhobn3jadt5bf2yab2pxzoz4ey4a2cvrl44tdv3jma
tabak.i2p,y5o2vwb6kart7ivpnbpk4yte3i7kf2dsx7fy3i6w7htqtxhmbzia
tahoeserve.i2p,yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa
-talkfreedom.i2p,tbbikimv62ltdurcljry5fp3riokah3oi2dyksfa26e2pjugddwa
-tc.i2p,qkv2yk6rof3rh7n3eelg5niujae6cmdzcpqbv3wsttedxtqqqj7a
-tecsoc.i2p,kng3ri7scfoqdogy6pkschn5son2ls7z4kpwgnosi7zknit7lr2q
telegram.i2p,i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja
-templar.i2p,zxeralsujowfpyi2ynyjooxy222pzz4apc2qcwrfx5ikhf64et7q
-templeofmetal.i2p,cwtbmqx3cg7ae3jcrzgjzwcilpypnyz2biojrn4ca7ry5gukaixa
-terror.i2p,wsijm6aqz4qtuyn2jedpx6imar5uq4yuhjdgtfqumxbqww47vbnq
testmk16de.bandura.i2p,gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra
textboard.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
texterochtankar.i2p,woqimbz4v2synkwyif65izfz2t4gbfbqjrai2ic5ok5qhnvmfszq
-thatonetimeatshmoo.i2p,qmpixe23s7ytn47pjifzl5ifo6m5glq6g2vgafvb3dhzpujbx3vq
-thebland.i2p,oiviukgwapzxsrwxsoucpqa47s3wt6nfuhfjxvgbqsyrze2mwrda
-thebreton.i2p,woutbsflcrlgppx4y7ag2kawlqijyenvlwrhbbvbkoaksuhf2hkq
-thedarkside.i2p,fxt3z33nzkrg5kjrk7bp5vvmu7w2vsn4i6jo6cily3hsm6u664ca
-theland.i2p,26ppxbseda6xmim37ksarccdb4q5ctdagfmt2u5aba6xjh452zsa
-theslackpipe.i2p,hxw6ncycnyd7gttrsnushggmcerozrfybsqqvxe4h5casbck5fxq
-thetower.i2p,3xqa5nype64y6fxgqjq6r5w2qpiqftoraj2niebumseat4cj654a
-thisthingimade.i2p,bga2ae2ff3s5p2nskg2l37ns2ad6smczpvgjhm2olgxequogepja
+theyosh.i2p,5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita
thornworld.i2p,vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva
-timechat.i2p,dwmlsvckkc5lq335u53ewajg7yjm74dm2mqjdwbvubavkkw53kza
-tino.i2p,e4bfnhvaofu4s67ztcgiskos2mqyhskid64dvlqexxs2c2bno3iq
-tiny.i2p,elmeki5nvczhe4mnq6yb64wpocilkwacw2cshyvq2hrvkhbivqya
-tinyslibrary.i2p,nv5ysd44xz6dgc6y3hxe22tfonmcikegm76l633oqfuyfo26odva
-tinyurl.i2p,mc4oxv3v7dnyzpvok7v5qxkwtgjprgyz6w7x3tag4fipsen6rdwa
-tipped8.i2p,5l2mzforxf5kok7ndc6m53nfxve75m5tozb37m6eg2xsaf6hdlmq
-tome.i2p,qktkxwawgixrm5lzofnj5n24zspbnzxy4pvjm7uvaxvmgwrsuvgq
-tooman.i2p,auo7cuq4dovgniwojq5fbwyjuvmks3zv7aopu5f6onsckuihsdpa
-top4ek.i2p,hm3fpmxchlvqc3p4atnu7igwbenqpn7f3czbptnnqataemputl4q
-tor-gw.meeh.i2p,ounrqi7cfemnt66yhnhigt2u27fkctbvct527cp2522ozy3btjza
-tor-www-proxy.i2p,xov45rvjks5fe4ofmpblkj23bnwxgslbypbgvchbr7yul2ujej2q
-tor4.i2p,65dirba2db7yghufdiohgrm4kacs4pwx734azt5hohglw4lwho5q
-torapa.i2p,eejqjtpko6mdd4opvntbpsuandstrebxpbymfhix7avp5obrw5ta
-torrentfinder.i2p,mpc73okj7wq2xl6clofl64cn6v7vrvhpmi6d524nrsvbeuvjxalq
-torrents.livingstone.i2p,6zymy5hg6si2xn6zwogo2zz2c73bdvln3zzryq4rqc74i5ctiiqa
-torrfreedom.i2p,nfrjvknwcw47itotkzmk6mdlxmxfxsxhbhlr5ozhlsuavcogv4hq
+tmpsend.i2p,r2al7m32cg2ypjcny627wkoiyanrasmorub2wqla3y6gn6rwzzvq
+torrents.chudo.i2p,5ooemze55xiicrlvzjmz3il23dpo4fz5iqr7hmzrygdepan5m3lq
tosios.idk.i2p,4mfy2ggcynt5xjkrdstwju2cqicayq7tg5bcb6o575wvab2div7a
-tourist-destinations.i2p,s4lyjsubxnlw5zytyvq2v2lroscuqwoxu3ukrg3akh6tybm25qfa
-trac.i2p,kyioa2lgdi2za2fwfwajnb3ljz6zwlx7yzjdpnxnch5uw3iqn6ca
trac.i2p2.i2p,i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa
-tracker-fr.i2p,qfrvqrfoqkistgzo2oxpfduz4ktkhtqopleozs3emblmm36fepea
-tracker.awup.i2p,dl47cno335ltvqm6noi5zcij5hpvbj7vjkzuofu262efvu6yp6cq
-tracker.crypthost.i2p,ri5a27ioqd4vkik72fawbcryglkmwyy4726uu5j3eg6zqh2jswfq
-tracker.fr.i2p,rzwqr7pfibq5wlcq4a7akm6ohfyhz7hchmy4wz5t55lhd7dwao5q
-tracker.i2p,lsjcplya2b4hhmezz2jy5gqh6zlk3nskisjkhhwapy3jjly4ds5q
-tracker.icu812.i2p,h77hk3pr622mx5c6qmybvbtrdo5la7pxo6my4kzr47x2mlpnvm2a
-tracker.livingstone.i2p,c3qqnsxm4gqt4kujhxtw2or5mb3ddkd4sxnuufztpqhenwh2shca
-tracker.lodikon.i2p,q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
-tracker.mastertracker.i2p,tiwurhqvaaguwpz2shdahqmcfze5ejre52ed2rmoadnjkkilskda
-tracker.postman.i2p,jfcylf4j3gfmqogkltwy7v5m47wp4h7ffrnfsva6grfdavdn7ueq
-tracker.psi.i2p,vmow3h54yljn7zvzbqepdddt5fmygijujycod2q6yznpy2rrzuwa
-tracker.thebland.i2p,s5ikrdyjwbcgxmqetxb3nyheizftms7euacuub2hic7defkh3xhq
-tracker.welterde.i2p,cfmqlafjfmgkzbt4r3jsfyhgsr5abgxryl6fnz3d3y5a365di5aa
-tracker2.postman.i2p,ahsplxkbhemefwvvml7qovzl5a2b5xo5i7lyai7ntdunvcyfdtna
+tracker.chudo.i2p,swhb5i7wcjcohmus3gbt3w6du6pmvl3isdvxvepuhdxxkfbzao6q
+tracker2.postman.i2p,6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea
traditio.i2p,wkpjjloylf6jopu2itgpktr45t2xvpjijxilxd5tq4i7wkqgwhhq
-traveller.i2p,ljprcbxo44dd3gnuqxtu3a3jznojzbwgxflvsjwnjlt25cls7cxq
-trevorreznik.i2p,wc2z6o5fxm2saqzpfcawr63lejwccvzkysmgtfudkrigqopzfdma
-true.i2p,pdilhl5vmefyzrrnmak5bnmxqxk2pmw7rpy4f7wbaeppqu2vvugq
-trumpusa.i2p,vopyffqj3il2uapcvfxq2zkcdybf7ekmpvnrt6d4dbeuecbvs2ea
-trwcln.i2p,evml6jiiujhulsgxkdu3wcmkwbokxlv4is6w5qj46tp3ajz3hqzq
-trypanom.i2p,tgv5acj4khwvr6t44cmryohybd2e5o2kndysnzae6qwcr4hzda3q
-ts.i2p,nebcjgfx3f7q4wzihqmguwcdeopaf7f6wyk2dojw4bcuku472zxq
-ttc.i2p,wb4tsfyvfv4idgrultsq6o7inza4fxkc7dijsfpncbx7zko4cdlq
-ttp.i2p,uuczclxejmetohwf2vqewovx3qcumdfh5zecjb3xkcdmk6e5j72a
+triplechan.i2p,blrplscno3ecqb5ihhg73kufmypydjlv4r4gqiajftup5wmcdwna
+tube.i2p,vipzc556nzjraiqsk5xwvyhz54fvtqt3vrepdarat3zsj4a6eypq
tumbach.i2p,u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq
tutorials.i2p,zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja
-ugha.i2p,z3f3owc72awbywk4p6qb5l2mxgitvs6ejztggbpn2a3ddmymfjda
-uk.i2p,vydbychnep3mzkzhg43ptewp242issy47whamfbxodc4ma6wc63a
-ukiyo.i2p,ytd3loo226pogdcx3ajdtew6vl5rsidppqzh6phbo5vlmigdxclq
-ukraine.i2p,msk6mls32w6nh65r7ke5bjozf2r3z563ti7iwewts72jtkxhq4oq
-underground.i2p,dlnuthb6tpw3kchlb7xoztyspy4ehlggjhl44l64vbcrulrfeica
-underscore.i2p,3gmezyig6gvsjbpkq2kihoskpuqpkfrajmhhm7hpyrjuvtasgepa
-unknown.i2p,xzdhmsewrhmjqpf5djuhm7cxfohzjqwcs5ur6qb7mtj3uyhtzjja
-unqueued.i2p,3gvn4kwd7z74jxc2sn4ucx52dpvpscxbzjluux3ul4t3eu5g64xq
-up.i2p,25it5olgdo7pht25z6buzd32sw7jvc65oziqeuocfozfhgua655q
-update.dg.i2p,iqj6ysfh3wl26m4buvyna73yhduifv523l7bwuexxak4mgldexja
-update.killyourtv.i2p,gqdfg25jlqtm35qnmt4b7r53d6u2vep4ob23fwd42iyy4j6cvdqq
-update.postman.i2p,u5rbu6yohfafplp6lgbbmmcuip34s7g3zqdd63cp27dl3nbd7gtq
-utansans.i2p,u2oyre7ygqv4qs5xjjijfg3x7ddwtod6nqwgbomuuzljzvnq4rda
-v2mail.i2p,4gg7fykcqe7oaqt4w5fmlarnia7vtmwkv3h45zzgoj6o6crryg5a
-vadino.i2p,aalttzlt3z25ktokesceweabm5yyhhvml2z3rfotndgpfyh6myra
-veuch-tracker.i2p,dvydoczvi5pvrrgq4dfoaeqil64vxfh6klhraigbldbgs5o4uqvq
-visibility.i2p,pwgma3snbsgkddxgb54mrxxkt3l4jzchrtp52vxmw7rbkjygylxq
+tv.i2p,znccrkhtgz4wqceyofwsqdsraqhdtteqzrag53lgmp6rhkutuy6q
+unodice.i2p,fukkqcornjsfn2ggd2h4cgeitu4dbin7hymp5xf6zypwzif2pcoq
volatile.i2p,q6rve733tvhgyys57jfw4fymqf3xsnza6dqailcdjcq7w4fa5m3a
-voodoo.i2p,3tc76xvl5nulcflszmyycv2vhymtyz6taaus3mchjh7uafi4gtra
-vpnbest.i2p,ov5f74ndsy5rfkuyps56waf42vxncufqu5rzm3vsnxkdtogccaea
-vudu.i2p,3zlwci7pvgep2igygzyjej24ue7mjsktlhaff6crpsr75yquak2q
w.i2p,j2xorlcb3qxubnthzqu7lt4fvxqn63it4ikwmze55yjkzeeampuq
-wa11ed.city.i2p,7mxwtmala3ycg2sybjwwfil7s6dqck2fbemeutghhwu73rznmqoa
-wahoo.i2p,vqe5vkpe5wbda7lwekcd2jaj44ar3rawgv54u5rcolezbg5f5vwa
+walker.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
wallet.gostcoin.i2p,reuvum7lgetglafn72chypesvto773oy53zumagrpigkckybrwda
-wallsgetbombed.i2p,tzhea5d65fllm4263wztghgw4ijdgibsca5xsecp6lk4xlsbdeuq
-wanderer.i2p,zhzpf7bugq3rspkjw46yjqhufqrontrdudq4fas5i47zttrn6xwa
web.telegram.i2p,re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a
-webviewer.aktie.i2p,gvofjbuvkl65f2npmyyig6wmi4ryvzdyli2pj4ufu56vtabc5pmq
-weibo.i2p,hmgshf62bftau2zrn3rquiz3aollpt27xzolzquaovz5d7zvrrtq
-whoopboo.i2p,7i4err7ik6r5sno33sfmanmu4x7tsbqc6a7dmg3ijel57zhoosma
-wiht.i2p,yojmpj3sh76g3i6ogzgsf7eouipdgdij5o2blcpdgmu5oyjk5xca
-wiki.fr.i2p,lrqa7hw52uxjb5q3pedmjs6hzos5zrod4y6a4e25hu7vcjhohvxq
+webcam.i2p,fhrkpj4iscrg6etgdlteseoed37q2ph7cizclgpabgcbnaq6g24a
+webhosting.i2p,hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq
+weedforums.i2p,weedlt72zyludsl6adm5asdcalufihyzoruh6ca2klstbicj5iua
wiki.i2p-projekt.i2p,b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa
wiki.ilita.i2p,r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a
-wiki.meeh.i2p,df47gapq2gftoy25cqoldvgp5v7c4aaz5x3exee6jdulun3tim3q
-wintermute.i2p,4gvlfrdy2rkmem33c342tjntpvqik65wekcvm4275qbkuwotoila
-wipedlife.i2p,wipedvspi755caxyqcbbmpb4ziqt2h4g6gslygdofdk7p5sv4mha
wlm.i2p,nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa
-wspucktracker.i2p,ubd2txda3kllumx7ftg4unzgqy536cn6dd2ax6mlhodczfas7rgq
-wtfnix.i2p,ofjyswwcrgrom6ppqu433hl2odow37d42wkefotczzdkkkb3dqya
-www.aum.i2p,3xolizygkzkqrldncjqsb734szznw2u36lliceuacqnbs2n65aeq
-www.baffled.i2p,lqrsfslwu4xnubkk2hofhmuvvr4dia2zevxefinbzdsjurvehtqq
-www.fr.i2p,rmkgvlfwo3vkb3xrr6epoypxasdzzuilv3sckcqbo6c4os5jo2ea
-www.i2p,ojxyenivrrqvycgbxbm3phgisu5abspzq4g2us4fjlwz4tx222va
-www.i2p2.i2p,rjxwbsw4zjhv4zsplma6jmf5nr24e4ymvvbycd3swgiinbvg7oga
+wopen.i2p,xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza
www.imule.i2p,657xcllunctawyjtar5kgh3wpt6z4l7ba6mmam5rf7hev5w2lsvq
www.infoserver.i2p,fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq
-www.janonymous.i2p,vosqx5qw22hwrzcgsm4ib7hymf5ryovsbtaexqrzmnzshy5bhakq
-www.mail.i2p,nctas6ioo7aaekfstv3o45yh6ywzwa3vznrdae52ouupzke5pyba
-www.nntp.i2p,kly3o7zmetuwyz7xonnhttw4lj2244pkbibjz26uflyfte3b3dka
-www.postman.i2p,rb3srw2gaooyw63q62cp4udrxxa6molr2irbkgrloveylpkkblhq
-www.syndie.i2p,vojgy5ep4wffmtpjmpnbpa4gq64bgn4yicuw6qmhbm6nqa2ysrva
-www1.squid.i2p,vbh3bltd2duwbukafgj6f6vfi6aigwso7snucp5zohnf66a2hkpa
-xc.i2p,mt45a2z3sb2iyy2mwauj4rwa2lwu4peanfy6gx6ybidwnbasusyq
-xecut.i2p,y5mbioxpa5gocffimnhjudv7lq5rggh4njkvovur7mrcmfcxxloq
xeha.i2p,oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq
-xilog.i2p,eoc5i5q52hutnmsmq56edvooulutaxfikddgdz27otmgtsxmiloq
-xmpp.crypthost.i2p,ittkqpjuliwsdewdugkhvgzstejr2jp5tzou7p332lxx4xw7srba
-xmpp.fazanka.i2p,fazan6gjj2fpgmnvrdi7it66zmtfbbjljbwgj37hqbd3o4xwhqca
-xmpp.helpu.i2p,j6utejalk3mglymq3zaurbuxgpmiuoupr6px3lszy4mbreio7tfq
+xmpp.chudo.i2p,gppd6rx5jkutmt637odkbxh4tjqxy63i4amyhllqn424yt7pd2hq
xmpp.rpi.i2p,3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca
-xmpp.undefined.i2p,i7ihpnio5keiakl6i55ub26lxnpdo6yoguzikbamwhuoewi7e4dq
-xmppfree.i2p,axzxqfmir6ixkx6np5zh3uuzoca27beonuaxhxhwdl2xt7ufjzaa
+xmrnode.i2p,moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq
+xn--80aaid2dua.i2p,dvem3jrqrymufihxnagr32q3aezgstmzcfbfp2wj7evo3ch5inta
xn--hallchen-q4a.i2p,h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq
-xn--l2bl5aw.i2p,d2epikjh5crt2l5xjmtceqw2ho44hzp6x3u7hgjrd4mi4wywikwa
-xolotl.i2p,rwr6rrlmrotxfkxt22mah42cycliy2g5k7hgxyxkpcyyxkd2bgwq
+xn--i2p-5cdawgbask1ay4cjf2a9o.i2p,gar7ipdnhfy2mtbefo5dvoapzuupyphfriutu5nsnjruganiuknq
+xn--n3h.i2p,6a5bfeil667ksrdgg5hx5x2dse2v6ovnsng3r2k5gp5tb4z67egq
xotc.i2p,gqgvzum3xdgtaahkjfw3layb33vjrucmw5btyhrppm463cz3c5oq
-xpyxpy.i2p,vwzdbqs7p4z5i6zob4gqrl7kejnkaxfo7haabowdq6tjqwltatuq
yacy.idk.i2p,7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq
-yayponiesreloaded.i2p,sqpxarqcgkozjywghangtvbc5a3ugklffs625elbz73h55ywyhsq
-yobyrf.i2p,suomfhdrqoedznx3dsc2vxve34bqm6j4broc4e5prgeysx4vu43q
+yat.i2p,zxg4p6obolmrnkygoodqbdnikzychk5sild3o753hmaljuosl2fq
+yggdrasil.acetone.i2p,tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq
+yiffme.i2p,sm6dk2ovxhgdjuu3rmqussc4e2xkfz6rmhng6i2t7parcb4v4y3a
yoitsu.i2p,yaaqmj55lsi5c5nukf4hsrift2zslnqkbcghwvjlaqayidtyctwa
-yottabyte.i2p,zsdqh2ozauksuyeiaqypgcxus5ldmxgxxgz4yp76pglrjxzzu2ra
-z-lab.i2p,s6g2pz3mrwzsl4ts65ox3scqawfj7mzvd7hn2ekiiycawopkriba
+yt2mp3.i2p,7ai77u54gxta2ry326amfq4ugiqgcxd4r663nmxtswcwezyxsbzq
zab.i2p,n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq
-zcash.i2p,zcashmliuw3yd2ptfyd5sadatcpyxj4ldiqahtjzg73cgoevxp4q
-zede.i2p,ibzqdhlk556qst7sy45jec4rj3pxri3qqv6noh2tg3y53ppu5ubq
-zener.i2p,mcbyglflte3dhwhqyafsfpnqtcapqkv2sepqd62wzd7fo2dzz4ca
zerobin.i2p,3564erslxzaoucqasxsjerk4jz2xril7j2cbzd4p7flpb4ut67hq
-zeroman.i2p,gq77fmto535koofcd53f6yzcc5y57ccrxg3pb6twhcodc7v5dutq
zeronet.i2p,fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna
-znc.i2p,uw2yt6njjl676fupd72hiezwmd4ouuywowrph6fvhkzhlnvp7jwa
+zhaoku.i2p,2hq32svuc6wxgumgsyavy4osfssiaqjpdgynpvtyblin5l5urr4q
znc.str4d.i2p,ufkajv3stxpxlwgwwb2ae6oixdjircnbwog77qxpxv7nt67rpcxq
zog.i2p,7su4pwd7xicqu44rd36g2a3zjlsv2k6otommnh7ztjpyixyozq2a
-zootopia.i2p,evlpg2m7n3nnqtu3jjy52zxhglj52teqgl4cgei7egccxjg3shva
-zzz.i2p,ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq
+zx.i2p,4ru5b25ixgz2wt2aqskbr2iflv42gt6ta6qet7rv4et5rh2kq6fq
+zzz.i2p,lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua
diff --git a/linux/i2pd/certificates/reseed/acetone_at_mail.i2p.crt b/linux/i2pd/certificates/reseed/acetone_at_mail.i2p.crt
new file mode 100644
index 0000000..13f9f17
--- /dev/null
+++ b/linux/i2pd/certificates/reseed/acetone_at_mail.i2p.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFfzCCA2egAwIBAgIEctG1gDANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
+WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
+b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQYWNldG9uZUBtYWls
+LmkycDAeFw0yMTAxMjUxMDMyMjBaFw0zMTAxMjMxMDMyMjBaMHAxCzAJBgNVBAYT
+AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
+eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBhY2V0b25lQG1h
+aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqF/BRRmvZ54
+5XArgxbytDi7m7MDjFE/whUADruHj/9jXGCxE8DDiiKTt3yhfakV0SNo5xk7AMD+
+wqiSNC5JCHTm18gd2M4cQLIaOVRqucLLge4XVgk2WPX6OT98wfxh7mqA3wlSdEpj
+dY3Txtkf7VfZLicG76/RBtLFW3aBdsn63hZaQqZE4x/5MJyPVZx59+lys5RmMi0o
+LpXJy4HOu1/Gl1iKDJoI/ARFG3y7uP/B+ZtZBitJetTs0HcqycnNJq0tVZf2HiGF
+JNy67AL4foxNYPXP6QsvXvp6LRpGANaBCkFCBlriSF+x1zO2H3uAkRnuLYXuKIfB
+HudejTp4R57VgZGiHYoawHaF17FVAApue9G8O82XYECjhET35B9yFoOBHTvaMxLU
+CKrmayH8KMQon95mfe1qpoO3/YDa8DCxkjAfjdtytat7nt2pGZMH6/cLJxcFiofh
+RtRVvb+omv/X12j/6iCFrwP4NvBnAZsa736igbjpyee5n+CSyYxd9cJkRX1vQVk7
+WFSqL58Pz+g6CKJmdMPvqNOfUQ6mieBeejmx35B4pLzLcoNxw8R3O1+I2l4dg042
+dEydKRQNwdzOec4jYwnKR40iwIyZxpchXWGRbBdyF5RQCbIIo60QBJlfXMJ2svan
+q5lYIeWeY3mlODXu4KH4K09y10KT8FsCAwEAAaMhMB8wHQYDVR0OBBYEFMh+DoIL
+APNiu2o+6I9A49joNYQuMA0GCSqGSIb3DQEBDQUAA4ICAQBFeOJi0rmkqN5/E3IB
+nE2x4mUeLI82tUcN2D3Yu8J81vy4DnH+oMRQFDtYEHW5pfirRmgSZ7MQwYQnqWLp
+iTE7SyCxlqGrmVsYp7PzfS1pUT2QeWPtsNYUDdraG0Zr9BkIGB60VMhjMSa9WUrj
+lbchzr6E/j/EsEOE7IK08JxIDKCDZM2LLwis4tAM6tmiylkMf2RlUBIRBs1TCO+q
+x3yByttNE2P4nQyQVQpjc1qsaOMvJvbxun37dwo+oTQy+hwkA86BWTDRYdN3xwOk
+OfAOtlX6zM/wCKMN0ZRnjZoh59ZCn4JXokt3IjZ4n8qJOuJFRKeKGmGeKA8uaGW8
+ih5tdB99Gu5Z8LOT1FxAJKwQBn5My0JijPoMit4B0WKNC8hy2zc2YvNfflu1ZRj5
+wF4E5ktbtT/LWFSoRPas/GFS8wSXk/kbSB0ArDcRRszb3JHqbALmSQxngz3rfwb3
+SHwQIIg956gjMDueEX5CrGrMqigiK53b9fqtpghUrHDsqtEXqeImpAY65PX1asqo
+metDNuETHF7XrAjP7TGJfnrYQyeK90iS7j1G68ScBGkKY2nsTnFoXkSk5s5D338E
+SUzPaOlh91spmkVY6gQTVQ7BakADBHw+zBgDA1gBN/4JPvgN36hquj63+aG1cKy3
+3ZUnv2ipo2fpr69NtuBnutK6gw==
+-----END CERTIFICATE-----
diff --git a/linux/i2pd/certificates/reseed/bugme_at_mail.i2p.crt b/linux/i2pd/certificates/reseed/bugme_at_mail.i2p.crt
deleted file mode 100644
index 2b6acac..0000000
--- a/linux/i2pd/certificates/reseed/bugme_at_mail.i2p.crt
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFezCCA2OgAwIBAgIEUQYyQjANBgkqhkiG9w0BAQ0FADBuMQswCQYDVQQGEwJY
-WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
-b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOYnVnbWVAbWFpbC5p
-MnAwHhcNMTQxMTA2MDkxMTE0WhcNMjQxMTA1MDkxMTE0WjBuMQswCQYDVQQGEwJY
-WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
-b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOYnVnbWVAbWFpbC5p
-MnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCrThOH0eSDT0VnCSBC
-sqYmAydWH+O8eNttDXr2mSvZLhvAW+6/xHTkKhaWvkIvvS0Vh8hujMnD90Cgp4Fk
-TKCxMj9K527o5xIZwWW05OevbjlBwIpVLO1PjmsfsoD1nIX14eEzJSEoAulKsv7V
-jGUC/6hC11mmVvH9buQLSRv6sCjuAcMszmw3TAD+XYBIs+z57KuwYXtX3+OA543c
-l1/ZKLYkkwY8cwzZqWDVWqTKP5TfVae58t40HhJk3bOsr21FZsaOjlmao3GO+d/3
-exKuUGJRcolSqskL3sZ1ovFqko81obvvx0upI0YA0iMr/NRGl3VPuf/LJvRppYGc
-LsJHgy9TIgtHvaXRi5Nt4CbKl9sZh/7WkkTTI5YGvevu00btlabAN+DSAZZqdsB3
-wY8HhM1MHiA9SWsqwU65TwErcRrjNna2FiDHEu0xk5+/iAGl6CSKHZBmNcYKXSv8
-cwShB0jjmciK0a05nC638RPgj0fng7KRrSglyzfjXRrljmZ40LSBL/GGMZMWpOM7
-mEsBH5UZJ/2BEmjc9X9257zBdx8BK8y1TXpAligpNBsERcTw1WP1PJ35einZvlXW
-qI3GwMf0sl26sn+evcK0gDl27jVDZ45MtNQEq64M4NV3Tn9zq0eg/39YvjVeqrI5
-l7sxmYqYGR6BuSncwdc4x+t6swIDAQABoyEwHzAdBgNVHQ4EFgQU/REZ7NMbVZHr
-Xkao6Q8Ccqv2kAMwDQYJKoZIhvcNAQENBQADggIBACc2YjLVNbl1kJUdg2klCLJt
-5LjNTiIZa2Cha5GStlC/lyoRRge6+q/y9TN3tTptlzLPS9pI9EE1GfIQaE+HAk+e
-/bC3KUOAHgVuETvsNAbfpaVsPCdWpFuXmp/4b9iDN7qZy4afTKUPA/Ir/cLfNp14
-JULfP4z2yFOsCQZ5viNFAs1u99FrwobV2LBzUSIJQewsksuOwj96zIyau0Y629oJ
-k+og88Tifd9EH3MVZNGhdpojQDDdwHQSITnCDgfRP5yER1WIA4jg6l+mM90QkvLY
-5NjWTna5kJ3X6UizvgCk365yzT2sbN3R9UGXfCJa9GBcnnviJtJF3+/gC0abwY2f
-NtVYp32Xky45NY/NdRhDg0bjHP3psxmX+Sc0M9NuQcDQ+fUR+CzM0IGeiszkzXOs
-RG+bOou2cZ81G4oxWdAALHIRrn7VvLGlkFMxiIZyhYcTGQZzsTPT6n18dY99+DAV
-yQWZfIRdm8DOnt0G+cwfeohc/9ZwDmj4jJAAi0aeTXdY6NEGIVydk6MAycEhg2Hx
-9EV96kRwZNIW0AGY8CozECFL3Eyo2ClQVV4Q35SsBibsitDjM03usc2DJ/qjynXA
-C8HoOSWgbddiBvqZueqK8GdhykOy3J3ysr+MNN/lbG48LqkQr1OWxev9rGGQ6RJT
-wpBgPyAFAwouPy1whmnx
------END CERTIFICATE-----
diff --git a/linux/i2pd/certificates/reseed/meeh_at_mail.i2p.crt b/linux/i2pd/certificates/reseed/meeh_at_mail.i2p.crt
deleted file mode 100644
index 6014c96..0000000
--- a/linux/i2pd/certificates/reseed/meeh_at_mail.i2p.crt
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFeTCCA2GgAwIBAgIEZZozujANBgkqhkiG9w0BAQ0FADBtMQswCQYDVQQGEwJY
-WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
-b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwNbWVlaEBtYWlsLmky
-cDAeFw0xNDA2MjgyMjQ5MDlaFw0yNDA2MjcyMjQ5MDlaMG0xCzAJBgNVBAYTAlhY
-MQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9ueW1v
-dXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1tZWVoQG1haWwuaTJw
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnVnmPE4uUvCky0yCnnVH
-cJEDqzwDPupx0zr0YDlhZk5VOPPecx5haayJ/V6nXPc1aVVWn+CHfedcF2aBgN4K
-5aBueS/l6l5WHcv02DofAqlTmyAws3oQeR1qoTuW24cKRtLR7h5bxv63f6bgp6e+
-RihFNez6UxErnRPuJOJEO2Im6EgVp6fz7tQ7R35zxAUeES2YILPySvzy2vYm/EEG
-jXX7Ap2A5svVo90xCMOeUZ/55vLsjyIshN+tV87U4xwvAkUmwsmWVHm3BQpHkI6z
-zMJie6epB8Bqm0GYm0EcElJH4OCxGTvDLoghpswbuUO7iy3JSfoL7ZCnoiQdK9K4
-yVVChj8lG+r7KaTowK96iZep+sZefjOt5VFGuW2Fi/WBv3ldiLlJAo/ZfrUM4+vG
-fyNBXbl6bX87uTCGOT1p3dazo+zJMsAZ+Y93DlM/mDEWFa1kKNrs74syzaWEqF4L
-KQE6VoYn80OOzafSigTVQgSwUtQtB0XGhMzJhyxU2XHWe1LFIy7Pta0B+lDiZj7c
-I8nXxYjsDfEu/Elj/Ra9N6bH0awmgB5JDa+Tbir+oEM5SyDfpSaCGuatdGxjweGI
-kVmFU0SqCZV/8TXbIu6MUVzTZMZVT94edifFSRad4fqw7eZbSXlPu++3d1/btn6h
-ibM04nkv0mm+FxCKB/wdAkECAwEAAaMhMB8wHQYDVR0OBBYEFO7jIkSRkoXyJcho
-9/Q0gDOINa5EMA0GCSqGSIb3DQEBDQUAA4ICAQBzfWO7+8HWOKLaYWToJ6XZbpNF
-3wXv1yC4W/HRR80m4JSsq9r0d7838Nvd7vLVP6MY6MaVb/JnV76FdQ5WQ6ticD0Y
-o3zmpqqbKVSspN0lrkig4surT88AjfVQz/vEIzKNQEbpzc3hC2LCiE2u+cK/ix4j
-b9RohnaPvwLnew5RNQRpcmk+XejaNITISr2yQIwXL7TEYy8HdGCfzFSSFhKe9vkb
-GsWS5ASrUzRoprswmlgRe8gEHI+d51Z7mWgna0/5mBz9bH/3QXtpxlLWm3bVV+kt
-pZjQDTHE0GqG2YsD1Gmp4LU/JFhCojMTtiPCXmr9KFtpiVlx06DuKm5PC8Ak+5w+
-m/DQYYfv9z+AA5Y430bjnzwg67bhqVyyek4wcDQinFswv3h4bIB7CJujDcEqXXza
-lhG1ufPPCUTMrVjh7AShohZraqlSlyQPY9vEppLwD4W1d+MqDHM7ljOH7gQYaUPi
-wE30AdXEOxLZcT3aRKxkKf2esNofSuUC/+NXQvPjpuI4UJKO3eegi+M9dbnKoNWs
-MPPLPpycecWPheFYM5K6Ao63cjlUY2wYwCfDTFgjA5q8i/Rp7i6Z6fLE3YWJ4VdR
-WOFB7hlluQ//jMW6M1qz6IYXmlUjcXl81VEvlOH/QBNrPvX3I3SYXYgVRnVGUudB
-o3eNsanvTU+TIFBh2Q==
------END CERTIFICATE-----
diff --git a/linux/i2pd/certificates/reseed/reseed_at_diva.exchange.crt b/linux/i2pd/certificates/reseed/reseed_at_diva.exchange.crt
new file mode 100644
index 0000000..04b1524
--- /dev/null
+++ b/linux/i2pd/certificates/reseed/reseed_at_diva.exchange.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF0zCCA7ugAwIBAgIQWjHyC+NRh3emuuAwcEnKSjANBgkqhkiG9w0BAQsFADB0
+MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
+ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEdMBsGA1UEAwwU
+cmVzZWVkQGRpdmEuZXhjaGFuZ2UwHhcNMjAwNjA5MDUzNjQ1WhcNMzAwNjA5MDUz
+NjQ1WjB0MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4w
+HAYDVQQKExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEdMBsG
+A1UEAwwUcmVzZWVkQGRpdmEuZXhjaGFuZ2UwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQC6BJGeMEgoXk9dlzKVfmwHrT2VpwTT+wRJvh3eAM746u4uDT2y
+NPHXhdGcQ9dRRZ63T98IshWCwOmWSlm1kdWkmKkVVb93GUoMQ3gziCi0apLJMAau
+gEu/sPCbORS2dPsQeAPW2eIsJO7dSjTRiQAuquW//NcIXG4gnxDA52lgke1BvpKr
+83SJlCrqECAy6OKtZ49yn75CqmPPWFn0b/E8bxruN5ffeipTTospvdEtT41gXUqk
+hOz3k8ang+QTWiP//jOjk31KXZ2dbh0LOlNJOvRxCqQmBZafNxxCR4DH8RewfPlL
+qOiOJVzbLSP9RjqPLwnny5BOjbLWXcaybN5Qv2Pyd4mKtN3EpqBwRu7VnzXpsuuG
+gRbxNmfKJ/vBEGrZAHAxi0NkHHEEne3B7pPDc2dVZHOfTfCu31m9uDHZ4eHEsNOJ
+SJRiGjq74l0chCSlBGLrD1Y9LPyqadjdwuB9bzM0tMFC1wPflanQCflhhnEzAfbN
+BaU2GRXo/I1UCDW/dH1FIkqEe61eMW1Lwqr5tdlrUpdr5VIddTyNJRBJogbZ+HZE
+8mcoJW2lXRAkYi7KEm4b4EQNe7sbRNTF0j+fAJ+3ZOZ3O3SMHss6ignlSa+giVim
+VvL+Joc6wpSzxpeNPf6m82cEO/UvifFYeOC9TpiRriSt+vvgQVzQtfQ+fQIDAQAB
+o2EwXzAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
+BwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHJlc2VlZEBkaXZhLmV4Y2hh
+bmdlMA0GCSqGSIb3DQEBCwUAA4ICAQCFGOb1dHlwjmgFHEER6oMiGWl1mI3Hb7GX
+NNI6QUhZQ+iEWGYtsOTk3Q8xejL8t6AG/ZLXfZviLIJXZc5XZfPXk0ezDSC2cYxQ
+ZAyYPw2dRP14brI86sCSqNAFIax/U5SM3zXhCbBiTfaEoBPfDpvKjx+VliaITUnc
+sHTRn+C5ID5M8cZIqUSGECPEMU/bDtuRNJLTKYaJ98yXtYuS2CWsMEM4o0GGcnYQ
+5HOZT/lbbwfq1Ks7IyJpeIpRaS5qckGcfgkxFY4eGujDuaFeWC+HCIh9RzBJrqZR
+73Aly4Pyu7Jjg8xCCf9MswDjtqAjEHgWCmRLWL7p3H6cPipFKNMY6yomYZl5urE7
+q6DUAZFKwPqlZpyeaY4/SVvaHTxuPp7484s3db4kPhdmuQS/DOB/7d+cn/S580Vy
+ALqlFQjtjLEaT16upceAV0gYktDInE6Rtym/OsqilrtYks/Sc0GROSz8lJhDDWbr
+W3t92muSXDh0rYrEUYWl+xl1gSTpbIP75zzU+cUr1E/qlRY9qZn66FsJpOuN0I0q
+UXsQS/bPDcA+IW48Hd9LfO9gtTWZslwFTimjEvQ2nJAnUlUQP6OfuPUKHoYX/CwY
+2LCN8+pv2bKPDVHvp0lf6xrbbZNvFtzfR0G3AprZjYpuu2XgjVB5nJnwmbH74b9w
+LD8d2z2Lgg==
+-----END CERTIFICATE-----
diff --git a/linux/i2pd/i2pd.conf b/linux/i2pd/i2pd.conf
index 7eeeb04..3ad455a 100644
--- a/linux/i2pd/i2pd.conf
+++ b/linux/i2pd/i2pd.conf
@@ -20,9 +20,6 @@ name = I2Pd
[reseed]
verify = true
-[addressbook]
-subscriptions = http://inr.i2p/export/alive-hosts.txt,http://identiguy.i2p/hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt,http://i2p-projekt.i2p/hosts.txt
-
[http]
enabled = true
address = 127.0.0.1
@@ -45,5 +42,4 @@ port = 7656
[ntcp2]
enabled = true
-published = true
-#port =
+#published = true
diff --git a/linux/i2pd/tunnels.conf b/linux/i2pd/tunnels.conf
index 756f861..bc085d4 100644
--- a/linux/i2pd/tunnels.conf
+++ b/linux/i2pd/tunnels.conf
@@ -1,11 +1,3 @@
-#[IRC]
-#type = client
-#address = 127.0.0.1
-#port = 6668
-#destination = irc.postman.i2p
-#destinationport = 6667
-#keys = irc-keys.dat
-
#[SMTP]
#type = client
#address = 127.0.0.1
@@ -22,12 +14,4 @@
#destinationport = 110
#keys = pop3-keys.dat
-#[MTN]
-#type = client
-#address = 127.0.0.1
-#port = 8998
-#destination = mtn.i2p-projekt.i2p
-#destinationport = 4691
-#keys = mtn-keys.dat
-
# see more examples in /usr/share/doc/i2pd/configuration.md.gz