diff --git a/.gitmodules b/.gitmodules index 9bfc39e5b1..f898687600 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,6 +2,10 @@ path = addon-sdk url = https://github.com/mozilla/addon-sdk.git [submodule "https-everywhere-checker"] - path = https-everywhere-checker + path = test/rules url = https://github.com/jsha/https-everywhere-checker.git branch = coverage +[submodule "translations"] + path = translations + url = https://git.torproject.org/translation.git + branch = https_everywhere diff --git a/.travis.yml b/.travis.yml index 0ac47a1fdd..3298cd7642 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,38 @@ # Config copied from # http://www.theautomatedtester.co.uk/blog/2012/using-travis-ci-for-building-and-testing-firefox-addons.html -# Use node_js because there are maybe more workers? language: python python: - "2.7" +cache: + directories: + - $HOME/.cache/pip + - $HOME/virtualenv/python2.7_with_system_site_packages addons: + apt: + packages: + - libxml2-dev + - python-dev + - libcurl4-openssl-dev + - python-lxml + - python-software-properties + - chromium-browser firefox: "37.0" virtualenv: system_site_packages: true install: - - sudo apt-get -qq install libxml2-dev libxslt-dev python-dev libcurl4-openssl-dev python-lxml - - pip install -r https-everywhere-checker/requirements.txt -before_script: - - sh -e /etc/init.d/xvfb start + - pip install -r test/rules/requirements.txt + - pip install -r test/chromium/requirements.txt env: - DISPLAY=':99.0' +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + - wget https://chromedriver.storage.googleapis.com/2.12/chromedriver_linux64.zip + - unzip chromedriver_linux64.zip + - mv chromedriver test/chromium/chromedriver script: - ./test.sh +sudo: false notifications: email: recipients: @@ -27,4 +43,3 @@ notifications: - "irc.oftc.net#https-everywhere" on_success: change on_failure: change - diff --git a/Makefile b/Makefile index 3e55293df3..780ec52a98 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ prerelease: pkg pkg: mkdir pkg clean: + rm -rf pkg/xpi-amo/ pkg/xpi-eff/ rm -f pkg/*.xpi rm -f src/chrome/content/rules/default.rulesets rm -f src/defaults/rulesets.sqlite diff --git a/README.md b/README.md index 202538ff3a..dc45c93010 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Run the latest code and rulesets in a standalone Firefox profile: Run the latest code and rulesets in a standalone Chromium profile: - bash run-chromium.sh + bash test-chromium.sh --justrun Build the Firefox extension as a .xpi package: @@ -59,18 +59,8 @@ Important directories you might want to know about Hacking on the Source Code -------------------------- -The current stable release series is 4.0. The current development release series -is 5.0. Each release series is represented by a branch with the major and minor -version numbers, e.g. 4.0 or 5.0. This branch is updated during the lifecycle of -the release series. Specific releases are represented as tags with the full -version number, e.g. 4.0.0 or 5.0development.0. - -If you are making a bug fix to the current stable release, you should -work off of the stable branch, 4.0. If you are adding features or improving -functionality, work off of master. The maintainers will merge master into the -development series branch periodically. We will also occasionally merge ruleset -fixes from master into the stable branch if the ruleset is important (i.e. a -popular or high-security site), or if the version in stable is clearly broken. +The current stable release series is 5.0. The maintainers release new versions +off the current master branch about every two weeks. To submit changes, either use pull requests on GitHub or email patches to https-everywhere-rulesets@lists.eff.org (rulesets) or diff --git a/chromium/_locales/de/messages.json b/chromium/_locales/de/messages.json index 40b7e7aa81..ddb6ffc93f 100644 --- a/chromium/_locales/de/messages.json +++ b/chromium/_locales/de/messages.json @@ -1,6 +1,6 @@ { "menu_blockHttpRequests": { - "message": "Block all HTTP requests" + "message": "Alle HTTP requests blockieren" }, "about_title": { "message": "Über HTTPS Everywhere" @@ -121,6 +121,39 @@ }, "chrome_what_is_this_title": { "message": "HTTPS-Everywhere-Webseite" + }, + "menu_add_rule": { + "message": "Regel für diese Seite hinzufügen" + }, + "about_add_new_rule": { + "message": "Eine Regel für diese Seite hinzufügen" + }, + "menu_always_https_for_host": { + "message": "Für diese Seite HTTPS erzwingen" + }, + "menu_host": { + "message": "Host:" + }, + "menu_show_advanced": { + "message": "Erweiterte Optionen anzeigen" + }, + "menu_hide_advanced": { + "message": "Erweiterte Optionen verstecken" + }, + "menu_rule_name": { + "message": "Regel Name" + }, + "menu_regex": { + "message": "Auslösende regex" + }, + "menu_redirect_to": { + "message": "Umleiten zu" + }, + "menu_add_new_rule": { + "message": "Neue Regel hinzufügen" + }, + "status_cancel_button": { + "message": "Abbrechen" } } diff --git a/chromium/_locales/en/messages.json b/chromium/_locales/en/messages.json index 8d01a04fae..7cf06ab793 100644 --- a/chromium/_locales/en/messages.json +++ b/chromium/_locales/en/messages.json @@ -121,6 +121,39 @@ }, "chrome_what_is_this_title": { "message": "HTTPS Everywhere website" + }, + "menu_add_rule": { + "message": "Add a rule for this site" + }, + "about_add_new_rule": { + "message": "Add a new rule for this site" + }, + "menu_always_https_for_host": { + "message": "Always use https for this host." + }, + "menu_host": { + "message": "Host:" + }, + "menu_show_advanced": { + "message": "Show advanced" + }, + "menu_hide_advanced": { + "message": "Hide advanced" + }, + "menu_rule_name": { + "message": "Rule name" + }, + "menu_regex": { + "message": "Matching regex" + }, + "menu_redirect_to": { + "message": "Redirect to" + }, + "menu_add_new_rule": { + "message": "Add new rule" + }, + "status_cancel_button": { + "message": "Cancel" } } diff --git a/chromium/background.js b/chromium/background.js index 235aa2ccfd..632ae9cadb 100644 --- a/chromium/background.js +++ b/chromium/background.js @@ -1,8 +1,10 @@ "use strict"; /** * Fetch and parse XML to be loaded as RuleSets. + * + * @param url: a relative URL to local XML */ -function getRuleXml(url) { +function loadExtensionFile(url, returnType) { var xhr = new XMLHttpRequest(); // Use blocking XHR to ensure everything is loaded by the time // we return. @@ -12,13 +14,18 @@ function getRuleXml(url) { if (xhr.readyState != 4) { return; } - return xhr.responseXML; + if (returnType === 'xml') { + return xhr.responseXML; + } + return xhr.responseText; } -var all_rules = new RuleSets(navigator.userAgent, LRUCache, localStorage); -for (var i = 0; i < rule_list.length; i++) { - all_rules.addFromXml(getRuleXml(rule_list[i])); -} + +// Rules are loaded here +var all_rules = new RuleSets(navigator.userAgent, LRUCache, localStorage); +var rule_list = 'rules/default.rulesets'; +all_rules.addFromXml(loadExtensionFile(rule_list, 'xml')); + var USER_RULE_KEY = 'userRules'; // Records which tabId's are active in the HTTPS Switch Planner (see @@ -48,6 +55,9 @@ chrome.storage.onChanged.addListener(function(changes, areaName) { } }); +/** +* Load stored user rules + **/ var getStoredUserRules = function() { var oldUserRuleString = localStorage.getItem(USER_RULE_KEY); var oldUserRules = []; @@ -57,6 +67,10 @@ var getStoredUserRules = function() { return oldUserRules; }; var wr = chrome.webRequest; + +/** + * Load all stored user rules + */ var loadStoredUserRules = function() { var rules = getStoredUserRules(); var i; @@ -68,7 +82,10 @@ var loadStoredUserRules = function() { loadStoredUserRules(); -// Set the icon color correctly +/** + * Set the icon color correctly + * Depending on http-nowhere it should be red/default + */ var setIconColor = function() { var newIconPath = httpNowhereOn ? './icon38-red.png' : './icon38.png'; chrome.browserAction.setIcon({ @@ -88,7 +105,11 @@ for (r in rs) { } */ - +/** + * Adds a new user rule + * @param params: params defining the rule + * @param cb: Callback to call after success/fail + * */ var addNewRule = function(params, cb) { if (all_rules.addUserRule(params)) { // If we successfully added the user rule, save it in local @@ -106,6 +127,9 @@ var addNewRule = function(params, cb) { } }; +/** + * Adds a listener for removed tabs + * */ function AppliedRulesets() { this.active_tab_rules = {}; @@ -147,6 +171,11 @@ var domainBlacklist = {}; // TODO: Remove this code if they ever give us a real counter var redirectCounter = {}; +/** + * Called before a HTTP(s) request. Does the heavy lifting + * Cancels the request/redirects it to HTTPS. URL modification happens in here. + * @param details of the handler, see Chrome doc + * */ function onBeforeRequest(details) { var uri = document.createElement('a'); uri.href = details.url; @@ -254,8 +283,17 @@ var activeTypes = { stylesheet: 1, script: 1, object: 1, other: 1}; // UI treatment of insecure subframes. var passiveTypes = { main_frame: 1, sub_frame: 1, image: 1, xmlhttprequest: 1}; -// Record a non-HTTPS URL loaded by a given hostname in the Switch Planner, for -// use in determining which resources need to be ported to HTTPS. +/** + * Record a non-HTTPS URL loaded by a given hostname in the Switch Planner, for + * use in determining which resources need to be ported to HTTPS. + * (Reminder: Switch planner is the pro-tool enabled by switching into debug-mode) + * + * @param type: type of the resource (see activeTypes and passiveTypes arrays) + * @param tab_id: The id of the tab + * @param resource_host: The host of the original url + * @param resource_url: the original url + * @param rewritten_url: The url rewritten to + * */ function writeToSwitchPlanner(type, tab_id, resource_host, resource_url, rewritten_url) { var rw = "rw"; if (rewritten_url == null) @@ -284,8 +322,11 @@ function writeToSwitchPlanner(type, tab_id, resource_host, resource_url, rewritt switchPlannerInfo[tab_id][rw][resource_host][active_content][resource_url] = 1; } -// Return the number of properties in an object. For associative maps, this is -// their size. +/** + * Return the number of properties in an object. For associative maps, this is + * their size. + * @param obj: object to calc the size for + * */ function objSize(obj) { if (typeof obj == 'undefined') return 0; var size = 0, key; @@ -295,8 +336,10 @@ function objSize(obj) { return size; } -// Make an array of asset hosts by score so we can sort them, -// presenting the most important ones first. +/** + * Make an array of asset hosts by score so we can sort them, + * presenting the most important ones first. + * */ function sortSwitchPlanner(tab_id, rewritten) { var asset_host_list = []; if (typeof switchPlannerInfo[tab_id] === 'undefined' || @@ -315,7 +358,9 @@ function sortSwitchPlanner(tab_id, rewritten) { return asset_host_list; } -// Format the switch planner output for presentation to a user. +/** +* Format the switch planner output for presentation to a user. +* */ function switchPlannerSmallHtmlSection(tab_id, rewritten) { var asset_host_list = sortSwitchPlanner(tab_id, rewritten); if (asset_host_list.length == 0) { @@ -342,6 +387,9 @@ function switchPlannerSmallHtmlSection(tab_id, rewritten) { return output; } +/** + * Create switch planner sections + * */ function switchPlannerRenderSections(tab_id, f) { return "Unrewritten HTTP resources loaded from this tab (enable HTTPS on " + "these domains and add them to HTTPS Everywhere):
" + @@ -351,10 +399,17 @@ function switchPlannerRenderSections(tab_id, f) { f(tab_id, "rw"); } +/** + * Generate the small switch planner html content + * */ function switchPlannerSmallHtml(tab_id) { return switchPlannerRenderSections(tab_id, switchPlannerSmallHtmlSection); } +/** + * Generate a HTML link from urls in map + * map: the map containing the urls + * */ function linksFromKeys(map) { if (typeof map == 'undefined') return ""; var output = ""; @@ -366,10 +421,16 @@ function linksFromKeys(map) { return output; } +/** + * Generate the detailed html fot the switch planner + * */ function switchPlannerDetailsHtml(tab_id) { return switchPlannerRenderSections(tab_id, switchPlannerDetailsHtmlSection); } +/** + * Generate the detailed html fot the switch planner, by section + * */ function switchPlannerDetailsHtmlSection(tab_id, rewritten) { var asset_host_list = sortSwitchPlanner(tab_id, rewritten); var output = ""; @@ -393,6 +454,10 @@ function switchPlannerDetailsHtmlSection(tab_id, rewritten) { return output; } +/** + * monitor cookie changes. Automatically convert them to secure cookies + * @param changeInfo Cookie changed info, see Chrome doc + * */ function onCookieChanged(changeInfo) { if (!changeInfo.removed && !changeInfo.cookie.secure) { if (all_rules.shouldSecureCookie(changeInfo.cookie, false)) { @@ -424,6 +489,10 @@ function onCookieChanged(changeInfo) { } } +/** + * handling redirects, breaking loops + * @param details details for the redirect (see chrome doc) + * */ function onBeforeRedirect(details) { // Catch redirect loops (ignoring about:blank, etc. caused by other extensions) var prefix = details.redirectUrl.substring(0, 5); @@ -438,7 +507,15 @@ function onBeforeRedirect(details) { } } -wr.onBeforeRequest.addListener(onBeforeRequest, {urls: ["https://*/*", "http://*/*"]}, ["blocking"]); +// Registers the handler for requests +// We listen to all HTTP hosts, because RequestFilter can't handle tons of url restrictions. +wr.onBeforeRequest.addListener(onBeforeRequest, {urls: ["http://*/*"]}, ["blocking"]); + +// TODO: Listen only to the tiny subset of HTTPS hosts that we rewrite/downgrade. +var httpsUrlsWeListenTo = ["https://*/*"]; +// See: https://developer.chrome.com/extensions/match_patterns +wr.onBeforeRequest.addListener(onBeforeRequest, {urls: httpsUrlsWeListenTo}, ["blocking"]); + // Try to catch redirect loops on URLs we've redirected to HTTPS. wr.onBeforeRedirect.addListener(onBeforeRedirect, {urls: ["https://*/*"]}); @@ -447,12 +524,20 @@ wr.onBeforeRedirect.addListener(onBeforeRedirect, {urls: ["https://*/*"]}); // Listen for cookies set/updated and secure them if applicable. This function is async/nonblocking. chrome.cookies.onChanged.addListener(onCookieChanged); +/** + * disable switch Planner + * @param tabId the Tab to disable for + */ function disableSwitchPlannerFor(tabId) { delete switchPlannerEnabledFor[tabId]; // Clear stored URL info. delete switchPlannerInfo[tabId]; } +/** + * Enable switch planner for specific tab + * @param tabId the tab to enable it for + */ function enableSwitchPlannerFor(tabId) { switchPlannerEnabledFor[tabId] = true; } diff --git a/chromium/devtools-panel.js b/chromium/devtools-panel.js index 881d40133a..db216dbeb2 100644 --- a/chromium/devtools-panel.js +++ b/chromium/devtools-panel.js @@ -2,6 +2,10 @@ function e(id) { return document.getElementById(id); } +/** + * Send message to main extension for HTML to display + * @param type: enable/disable + */ function sendMessage(type) { chrome.runtime.sendMessage({ type: type, @@ -9,7 +13,9 @@ function sendMessage(type) { }); } -// Turn on the Switch Planner recording mode, and hide the long description. +/** + * Turn on the Switch Planner recording mode, and hide the long description. + */ function enableSwitchPlanner() { sendMessage("enable"); e("SwitchPlannerDescription").style.display = "none"; @@ -20,15 +26,19 @@ function enableSwitchPlanner() { chrome.devtools.inspectedWindow.reload(); } -// Disable the switch planner and reload, so any state is forgotten and -// the long description is restored. +/** + * Disable the switch planner and reload, so any state is forgotten and + * the long description is restored. + */ function disableSwitchPlanner() { sendMessage("disable"); document.location.reload(); } -// Fetch summary HTML of the planner results from the background page for -// display in the devtools panel. +/** + * Fetch summary HTML of the planner results from the background page for + * display in the devtools panel. + */ function display() { chrome.runtime.sendMessage({ type: "getSmallHtml", diff --git a/chromium/manifest.json b/chromium/manifest.json index 218d0b34dc..9abe9fa7fa 100644 --- a/chromium/manifest.json +++ b/chromium/manifest.json @@ -5,7 +5,6 @@ "background": { "scripts": [ "lru.js", - "rule_list.js", "rules.js", "util.js", "background.js" @@ -40,5 +39,5 @@ "" ], "update_url": "https://www.eff.org/files/https-everywhere-chrome-updates.xml", - "version": "2015.4.7" + "version": "2015.8.25" } \ No newline at end of file diff --git a/chromium/popup.css b/chromium/popup.css index c77ab707af..db8a80368d 100644 --- a/chromium/popup.css +++ b/chromium/popup.css @@ -25,6 +25,8 @@ section.rules { /* Favicons */ .rule img { + width: 16px; + height: 16px; margin-left: 0.6em; vertical-align: bottom; } diff --git a/chromium/popup.html b/chromium/popup.html index 2182562d48..22923f589e 100755 --- a/chromium/popup.html +++ b/chromium/popup.html @@ -16,28 +16,28 @@

+ >
- Add a rule for this site +
@@ -49,7 +49,7 @@

diff --git a/chromium/popup.js b/chromium/popup.js index 220005d6ab..f8231c67c2 100644 --- a/chromium/popup.js +++ b/chromium/popup.js @@ -8,6 +8,11 @@ function e(id) { return document.getElementById(id); } +/** + * Handles rule (de)activation in the popup + * @param checkbox checkbox being clicked + * @param ruleset the ruleset tied tot he checkbox + */ function toggleRuleLine(checkbox, ruleset) { ruleset.active = checkbox.checked; @@ -22,6 +27,11 @@ function toggleRuleLine(checkbox, ruleset) { chrome.tabs.reload(); } +/** + * Creates a rule line (including checkbox and icon) for the popup + * @param ruleset the ruleset to build the line for + * @returns {*} + */ function createRuleLine(ruleset) { // parent block for line @@ -67,6 +77,10 @@ function createRuleLine(ruleset) { return line; } +/** + * Create the list of rules for a specific tab + * @param tab + */ function gotTab(tab) { var rulesets = backgroundPage.activeRulesets.getRulesets(tab.id); @@ -85,6 +99,9 @@ function gotTab(tab) { } } +/** + * Fill in content into the popup on load + */ document.addEventListener("DOMContentLoaded", function () { stableRules = document.getElementById("StableRules"); unstableRules = document.getElementById("UnstableRules"); @@ -129,6 +146,9 @@ function show(elem) { elem.style.display = "block"; } +/** + * Handles the manual addition of rules + */ function addManualRule() { chrome.tabs.getSelected(null, function(tab) { hide(e("add-rule-link")); diff --git a/chromium/rule_list.js b/chromium/rule_list.js deleted file mode 100644 index 0c962730ca..0000000000 --- a/chromium/rule_list.js +++ /dev/null @@ -1,3 +0,0 @@ -var rule_list = [ -"rules/default.rulesets", -]; diff --git a/chromium/rules.js b/chromium/rules.js index 8ea6951fc3..74aded08f5 100644 --- a/chromium/rules.js +++ b/chromium/rules.js @@ -2,17 +2,34 @@ var DBUG = 1; function log(){}; +/** + * A single rule + * @param from + * @param to + * @constructor + */ function Rule(from, to) { //this.from = from; this.to = to; this.from_c = new RegExp(from); } +/** + * Regex-Compile a pattern + * @param pattern The pattern to compile + * @constructor + */ function Exclusion(pattern) { //this.pattern = pattern; this.pattern_c = new RegExp(pattern); } +/** + * Generates a CookieRule + * @param host The host regex to compile + * @param cookiename The cookie name Regex to compile + * @constructor + */ function CookieRule(host, cookiename) { this.host = host; this.host_c = new RegExp(host); @@ -20,6 +37,14 @@ function CookieRule(host, cookiename) { this.name_c = new RegExp(cookiename); } +/** + *A collection of rules + * @param set_name The name of this set + * @param match_rule Quick test match rule + * @param default_state activity state + * @param note Note will be displayed in popup + * @constructor + */ function RuleSet(set_name, match_rule, default_state, note) { this.name = set_name; if (match_rule) @@ -36,6 +61,11 @@ function RuleSet(set_name, match_rule, default_state, note) { } RuleSet.prototype = { + /** + * Check if a URI can be rewritten and rewrite it + * @param urispec The uri to rewrite + * @returns {*} null or the rewritten uri + */ apply: function(urispec) { var returl = null; // If we're covered by an exclusion, go home @@ -70,7 +100,13 @@ RuleSet.prototype = { }; - +/** + * Initialize Rule Sets + * @param userAgent The browser's user agent + * @param cache a cache object (lru) + * @param ruleActiveStates default state for rules + * @constructor + */ function RuleSets(userAgent, cache, ruleActiveStates) { // Load rules into structure var t1 = new Date().getTime(); @@ -88,14 +124,25 @@ function RuleSets(userAgent, cache, ruleActiveStates) { this.ruleActiveStates = ruleActiveStates; } + RuleSets.prototype = { + /** + * Iterate through data XML and load rulesets + */ addFromXml: function(ruleXml) { var sets = ruleXml.getElementsByTagName("ruleset"); for (var i = 0; i < sets.length; ++i) { - this.parseOneRuleset(sets[i]); + try { + this.parseOneRuleset(sets[i]); + } catch (e) { + log(WARN, 'Error processing ruleset:' + e); + } } }, + /** + * Return the RegExp for the local platform + */ localPlatformRegexp: (function() { var isOpera = /(?:OPR|Opera)[\/\s](\d+)(?:\.\d+)/.test(this.userAgent); if (isOpera && isOpera.length === 2 && parseInt(isOpera[1]) < 23) { @@ -108,6 +155,11 @@ RuleSets.prototype = { } })(), + /** + * Load a user rule + * @param params + * @returns {boolean} + */ addUserRule : function(params) { log(INFO, 'adding new user rule for ' + JSON.stringify(params)); var new_rule_set = new RuleSet(params.host, null, true, "user rule"); @@ -126,6 +178,10 @@ RuleSets.prototype = { return true; }, + /** + * Does the loading of a ruleset. + * @param ruletag The whole tag to parse + */ parseOneRuleset: function(ruletag) { var default_state = true; var note = ""; @@ -182,18 +238,25 @@ RuleSets.prototype = { } }, + /** + * Insert any elements from fromList into intoList, if they are not + * already there. fromList may be null. + * @param intoList + * @param fromList + */ setInsert: function(intoList, fromList) { - // Insert any elements from fromList into intoList, if they are not - // already there. fromList may be null. if (!fromList) return; for (var i = 0; i < fromList.length; i++) if (intoList.indexOf(fromList[i]) == -1) intoList.push(fromList[i]); }, - - potentiallyApplicableRulesets: function(host) { - // Return a list of rulesets that apply to this host + /** + * Return a list of rulesets that apply to this host + * @param host The host to check + * @returns {*} (empty) list + */ + potentiallyApplicableRulesets: function(host) { // Have we cached this result? If so, return it! var cached_item = this.ruleCache.get(host); if (cached_item !== undefined) { @@ -235,10 +298,14 @@ RuleSets.prototype = { return results; }, + /** + * Check to see if the Cookie object c meets any of our cookierule citeria for being marked as secure. + * knownHttps is true if the context for this cookie being set is known to be https. + * @param cookie The cookie to test + * @param knownHttps Is the context for setting this cookie is https ? + * @returns {*} ruleset or null + */ shouldSecureCookie: function(cookie, knownHttps) { - // Check to see if the Cookie object c meets any of our cookierule citeria - // for being marked as secure. knownHttps is true if the context for this - // cookie being set is known to be https. var hostname = cookie.domain; // cookie domain scopes can start with . while (hostname.charAt(0) == ".") @@ -263,6 +330,11 @@ RuleSets.prototype = { return null; }, + /** + * Check if it is secure to secure the cookie (=patch the secure flag in). + * @param domain The domain of the cookie + * @returns {*} true or false + */ safeToSecureCookie: function(domain) { // Check if the domain might be being served over HTTP. If so, it isn't // safe to secure a cookie! We can't always know this for sure because @@ -308,6 +380,12 @@ RuleSets.prototype = { return false; }, + /** + * Rewrite an URI + * @param urispec The uri to rewrite + * @param host The host of this uri + * @returns {*} the new uri or null + */ rewriteURI: function(urispec, host) { var newuri = null; var rs = this.potentiallyApplicableRulesets(host); diff --git a/chromium/util.js b/chromium/util.js index 3b4246c85a..3af43d695a 100644 --- a/chromium/util.js +++ b/chromium/util.js @@ -1,14 +1,16 @@ -VERB=1; -DBUG=2; -INFO=3; -NOTE=4; -WARN=5; +"use strict"; + +var VERB=1; +var DBUG=2; +var INFO=3; +var NOTE=4; +var WARN=5; // FYI: Logging everything is /very/ slow. Chrome will log & buffer // these console logs even when the debug tools are closed. :( // TODO: Add an easy UI to change the log level. // (Developers can just type DEFAULT_LOG_LEVEL=1 in the console) -DEFAULT_LOG_LEVEL=4; +var DEFAULT_LOG_LEVEL=4; console.log("Hey developer! Want to see more verbose logging?"); console.log("Type this into the console: DEFAULT_LOG_LEVEL=1"); diff --git a/https-everywhere-checker b/https-everywhere-checker deleted file mode 160000 index 4e9db0f6d8..0000000000 --- a/https-everywhere-checker +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4e9db0f6d846b608fabae2ee912495c4f51dc0c2 diff --git a/https-everywhere-tests/README.md b/https-everywhere-tests/README.md deleted file mode 100644 index 464daade5d..0000000000 --- a/https-everywhere-tests/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Tests for HTTPS Everywhere - -## Prerequisites -* Latest release of the Firefox Add-On SDK as a submodule: - git submodule update - -# Running - bash test.sh - -To add tests, put them in `./https-everywhere-tests/tests`. - -# Manual tests - -These are test cases to execute manually before a release, and we should -implement them as automated tests: - -# Firefox -- Visit a site that triggers a ruleset (e.g., Reddit.com). Verify counter appears on HTTPS - Everywhere icon. -- Click HTTPS Everywhere icon menu, click 'show counter'. Verify counter - disappears. Verify checkmark disappears from menu item. -- Click HTTPS Everywhere icon, verify ruleset shows up in green. -- Click ruleset. -- Reopen HTTPS Everywhere icon menu, verify ruleset shows up in grey. -- Reload HTTP version of the site, ensure it doesn't get rewritten now that the - ruleset is disabled. -- Click HTTP Everywhere icon, click ruleset again. -- Reopen HTTPS Everywhere icon menu, verify ruleset shows up in green. -- Click HTTPS Everywhere icon menu, click 'Enable / disable rules'. This will - freeze up the browser for a few seconds. Verify it eventually opens up a - dialog box listing all rules. -- Right-click on a rule, click 'View XML source.' Verify it opens up a dialog - box and shows the rule source. -- Click HTTPS Everywhere icon menu, click 'Block all HTTP requests'. Verify icon - turns red. -- Visit an HTTP site known to not have a rewrite rule. http://amazon.com is a - good example. Verify page does not load. -- Visit an HTTPS site that contains passive mixed content that is not rewritten - to HTTPS. https://jacob.hoffman-andrews.com/passive-mixed-content.html is a - good example. Verify the passive mixed content (e.g., image) does not load. -- Click icon menu, click 'About HTTPS Everywhere.' Verify dialog opens. -- Click icon menu, click 'SSL Observatory Preferences.' Verify dialog opens. -- Click icon menu, click 'Disable HTTPS Everywhere.' Verify icon turns grey. -- Visit a site that would normally trigger a ruleset. Verify it is not rewritten - to HTTPS. -- Click icon menu, click 'Enable HTTPS Everywhere.' Verify icon turns blue. - Verify page reloads and is rewritten to HTTPS. -- Look at log output, look for errors. Make sure certificates are being -submitted to SSL Observatory -- Tools > Web Developer > Browser Toolbox > Console. Check for errors. -- TODO: Test translations? - -# Chromium - -- Visit a site that triggers a ruleset (e.g., Reddit.com). Verify counter appears - on HTTPS Everywhere icon. -- Click HTTPS Everywhere icon menu. Verify it contains appropriate ruleset. -- Disable ruleset. -- Visit HTTP version of the site again. Verify it does not get redirected to - HTTPS. -- Re-enable ruleset. -- Visit HTTP version of the site again. Verify it does get redirected. -- Visit site that does not have a ruleset. From icon menu, click 'Add this - site', and complete site-adding process. -- Reload the site. Verify it gets redirected to HTTPS. diff --git a/install-dev-dependencies.sh b/install-dev-dependencies.sh index 9541ce88ec..e9e079bb3b 100755 --- a/install-dev-dependencies.sh +++ b/install-dev-dependencies.sh @@ -3,14 +3,26 @@ # HTTPS Everywhere set -o errexit -o xtrace if type apt-get >/dev/null ; then + BROWSERS="firefox chromium-browser" + CHROMEDRIVER="chromium-chromedriver" + if [[ "$(lsb_release -is)" == "Debian" ]]; then + # Iceweasel is the rebranded Firefox that Debian ships, and Chromium + # takes the name of 'chromium' instead of 'chromium-browser' in + # Debian 7 (wheezy) and later. + BROWSERS="iceweasel chromium" + CHROMEDRIVER="chromedriver" + fi sudo apt-get install libxml2-dev libxml2-utils libxslt1-dev python-dev \ - firefox chromium-browser zip sqlite3 python-pip libcurl4-openssl-dev + $BROWSERS zip sqlite3 python-pip libcurl4-openssl-dev \ + libssl-dev $CHROMEDRIVER elif type brew >/dev/null ; then brew list python &>/dev/null || brew install python - brew install libxml2 gnu-sed + brew install libxml2 gnu-sed chromedriver if ! echo $PATH | grep -ql /usr/local/bin ; then echo '/usr/local/bin not found in $PATH, please add it.' fi +elif type dnf >/dev/null ; then + sudo dnf install libxml2-devel python-devel libxslt-devel fi # Get the addon SDK submodule and rule checker @@ -19,7 +31,10 @@ git submodule update # Install Python packages pip install --user --no-allow-insecure --no-allow-external -r requirements.txt -cd https-everywhere-checker +cd test/rules +pip install --user -r requirements.txt +cd - +cd test/chromium pip install --user -r requirements.txt cd - diff --git a/makecrx.sh b/makecrx.sh index cb339cdf52..98f7abbc9c 100755 --- a/makecrx.sh +++ b/makecrx.sh @@ -18,90 +18,42 @@ # "dummy-chromium.pem" private key for you to sign your own local releases, # but these .crx files won't detect and upgrade to official HTTPS Everywhere # releases signed by EFF :/. We should find a more elegant arrangement. + +cd $(dirname $0) +RULESETS_UNVALIDATED="$PWD/pkg/rulesets.unvalidated.sqlite" RULESETS_SQLITE="$PWD/src/defaults/rulesets.sqlite" if [ -n "$1" ]; then - if [ "$1" = today ] ; then - python chromium/setversion.py - else - BRANCH=`git branch | head -n 1 | cut -d \ -f 2-` - SUBDIR=checkout - [ -d $SUBDIR ] || mkdir $SUBDIR - cp -r -f -a .git $SUBDIR - cd $SUBDIR - git reset --hard "$1" - fi + BRANCH=`git branch | head -n 1 | cut -d \ -f 2-` + SUBDIR=checkout + [ -d $SUBDIR ] || mkdir $SUBDIR + cp -r -f -a .git $SUBDIR + cd $SUBDIR + git reset --hard "$1" fi VERSION=`python -c "import json ; print(json.loads(open('chromium/manifest.json').read())['version'])"` echo "Building chrome version" $VERSION -# Build the SQLite DB even though we don't yet use it in the Chrome extension, -# because trivial-validate.py depends on it. -if [ "$1" != "--fast" -o ! -f "$RULESETS_SQLITE" ] ; then - echo "Generating sqlite DB" - python2.7 ./utils/make-sqlite.py -fi - -# =============== BEGIN VALIDATION ================ -# Unless we're in a hurry, validate the ruleset library & locales +[ -d pkg ] || mkdir -p pkg +[ -e pkg/crx ] && rm -rf pkg/crx -die() { - echo >&2 "ERROR:" "$@" - exit 1 +# Only generate the sqlite database if any rulesets have changed. Tried +# implementing this with make, but make is very slow with 15k+ input files. +needs_update() { + find src/chrome/content/rules/ -newer $RULESETS_UNVALIDATED |\ + grep -q . } - -if [ "$1" != "--fast" ] ; then - if python2.7 ./utils/trivial-validate.py --quiet --db $RULESETS_SQLITE >&2 - then - echo Validation of included rulesets completed. >&2 - echo >&2 - else - die "Validation of rulesets failed." - fi - - # Check for xmllint. - type xmllint >/dev/null || die "xmllint not available" - - GRAMMAR="utils/relaxng.xml" - if [ -f "$GRAMMAR" ] - then - # xmllint spams stderr with " validates, even with the --noout - # flag. We can't grep -v for that line, because the pipeline will mask error - # status from xmllint. Instead we run it once going to /dev/null, and if - # there's an error run it again, showing only error output. - validate_grammar() { - find src/chrome/content/rules -name "*.xml" | \ - xargs xmllint --noout --relaxng utils/relaxng.xml - } - if validate_grammar 2>/dev/null - then - echo Validation of rulesets against $GRAMMAR succeeded. >&2 - else - validate_grammar 2>&1 | grep -v validates - die "Validation of rulesets against $GRAMMAR failed." - fi - else - echo Validation of rulesets against $GRAMMAR SKIPPED. >&2 - fi - - if [ -x ./utils/compare-locales.sh ] >&2 - then - if ./utils/compare-locales.sh >&2 - then - echo Validation of included locales completed. >&2 - else - die "Validation of locales failed." - fi - fi +if [ ! -f "$RULESETS_UNVALIDATED" ] || needs_update ; then + # Build the SQLite DB even though we don't yet use it in the Chrome extension, + # because trivial-validate.py depends on it. + echo "Generating sqlite DB" + python2.7 ./utils/make-sqlite.py && bash utils/validate.sh fi -# =============== END VALIDATION ================ sed -e "s/VERSION/$VERSION/g" chromium/updates-master.xml > chromium/updates.xml -[ -d pkg ] || mkdir -p pkg -[ -e pkg/crx ] && rm -rf pkg/crx mkdir -p pkg/crx/rules cd pkg/crx cp -a ../../chromium/* . diff --git a/makexpi.sh b/makexpi.sh index 6b9da6d869..ef9a3ea775 100755 --- a/makexpi.sh +++ b/makexpi.sh @@ -16,13 +16,14 @@ APP_NAME=https-everywhere # ./makexpi.sh 0.2.3.development.2 cd "`dirname $0`" +RULESETS_UNVALIDATED="$PWD/pkg/rulesets.unvalidated.sqlite" RULESETS_SQLITE="$PWD/src/defaults/rulesets.sqlite" ANDROID_APP_ID=org.mozilla.firefox [ -d pkg ] || mkdir pkg # If the command line argument is a tag name, check that out and build it -if [ -n "$1" ] && [ "$2" != "--no-recurse" ] && [ "$1" != "--fast" ] ; then +if [ -n "$1" ] && [ "$2" != "--no-recurse" ] ; then BRANCH=`git branch | head -n 1 | cut -d \ -f 2-` SUBDIR=checkout [ -d $SUBDIR ] || mkdir $SUBDIR @@ -33,9 +34,11 @@ if [ -n "$1" ] && [ "$2" != "--no-recurse" ] && [ "$1" != "--fast" ] ; then # Ensure a clean build. git clean -fdx + git submodule update --recursive -f # Use the version of the build script that was current when that # tag/release/branch was made. ./makexpi.sh $1 --no-recurse || exit 1 + # The fact that the above works even when the thing you are building predates # support for --no-recurse in this script is (1) non-intuitive; (2) crazy; and (3) # involves two pristine checkouts of $1 within each other @@ -43,7 +46,7 @@ if [ -n "$1" ] && [ "$2" != "--no-recurse" ] && [ "$1" != "--fast" ] ; then # Now escape from the horrible mess we've made cd .. XPI_NAME="$APP_NAME-$1" - cp $SUBDIR/pkg/$XPI_NAME.xpi pkg/ + cp $SUBDIR/pkg/$XPI_NAME-eff.xpi pkg/ if ! cp $SUBDIR/pkg/$XPI_NAME-amo.xpi pkg/ 2> /dev/null ; then echo Old version does not support AMO fi @@ -51,17 +54,20 @@ if [ -n "$1" ] && [ "$2" != "--no-recurse" ] && [ "$1" != "--fast" ] ; then exit 0 fi -if [ "$1" != "--fast" -o ! -f "$RULESETS_SQLITE" ] ; then - +# Only generate the sqlite database if any rulesets have changed. Tried +# implementing this with make, but make is very slow with 15k+ input files. +needs_update() { + find src/chrome/content/rules/ -newer $RULESETS_UNVALIDATED |\ + grep -q . +} +if [ ! -f "$RULESETS_UNVALIDATED" ] || needs_update ; then # This is an optimization to get the OS reading the rulesets into RAM ASAP; # it's useful on machines with slow disk seek times; doing several of these - # at once allows the IO subsystem to seek more efficiently. Note that - # bash uses the completely insane glob ordering aAbBcC... + # at once allows the IO subsystem to seek more efficiently. for firstchar in `echo {a..z} {A..Z} {0..9}` ; do # Those cover everything but it wouldn't matter if they didn't nohup cat src/chrome/content/rules/"$firstchar"*.xml >/dev/null 2>/dev/null & done - echo "Generating sqlite DB" python2.7 ./utils/make-sqlite.py fi @@ -74,55 +80,15 @@ die() { exit 1 } -if [ "$1" != "--fast" -a -z "$FAST" ] ; then - if python2.7 ./utils/trivial-validate.py --quiet --db $RULESETS_SQLITE >&2 - then - echo Validation of included rulesets completed. >&2 - echo >&2 - else - die "Validation of rulesets failed." - fi - - # Check for xmllint. - type xmllint >/dev/null || die "xmllint not available" - - GRAMMAR="utils/relaxng.xml" - if [ -f "$GRAMMAR" ] - then - # xmllint spams stderr with " validates, even with the --noout - # flag. We can't grep -v for that line, because the pipeline will mask error - # status from xmllint. Instead we run it once going to /dev/null, and if - # there's an error run it again, showing only error output. - validate_grammar() { - find src/chrome/content/rules -name "*.xml" | \ - xargs xmllint --noout --relaxng utils/relaxng.xml - } - if validate_grammar 2>/dev/null - then - echo Validation of rulesets against $GRAMMAR succeeded. >&2 - else - validate_grammar 2>&1 | grep -v validates - die "Validation of rulesets against $GRAMMAR failed." - fi - else - echo Validation of rulesets against $GRAMMAR SKIPPED. >&2 - fi - - if [ -x ./utils/compare-locales.sh ] >&2 - then - if sh ./utils/compare-locales.sh >&2 - then - echo Validation of included locales completed. >&2 - else - die "Validation of locales failed." - fi - fi +# If the unvalidated rulesets have changed, validate and copy to the validated +# rulesets file. +if [ "$RULESETS_UNVALIDATED" -nt "$RULESETS_SQLITE" ] ; then + bash utils/validate.sh fi -# =============== END VALIDATION ================ # The name/version of the XPI we're building comes from src/install.rdf XPI_NAME="pkg/$APP_NAME-`grep em:version src/install.rdf | sed -e 's/[<>]/ /g' | cut -f3`" -if [ "$1" ] && [ "$1" != "--fast" ] ; then +if [ "$1" ]; then XPI_NAME="$XPI_NAME" else # During development, generate packages named with the short hash of HEAD. @@ -134,14 +100,18 @@ fi # Prepare packages suitable for uploading to EFF and AMO, respectively. [ -d pkg ] || mkdir pkg -[ -e pkg/xpi-eff ] && rm -rf pkg/xpi-eff -cp -a src/ pkg/xpi-eff/ -rm -r pkg/xpi-eff/chrome/content/rules -[ -e pkg/xpi-amo ] && rm -rf pkg/xpi-amo -cp -a src/ pkg/xpi-amo/ -rm -r pkg/xpi-amo/chrome/content/rules -# The AMO version of the package cannot contain the updateKey or updateURL tags -sed -i -e '/updateKey/d' -e '/updateURL/d' pkg/xpi-amo/install.rdf +rsync -a --delete --delete-excluded --exclude /chrome/content/rules src/ pkg/xpi-eff +cp -a translations/* pkg/xpi-eff/chrome/locale/ +rsync -a --delete pkg/xpi-eff/ pkg/xpi-amo +# The AMO version of the package cannot contain the updateKey or updateURL tags. +# Also, it has a different id than the eff-hosted version, because Firefox now +# requires us to upload the eff-hosted version to an unlisted extension on AMO +# in order to receive a signature indicating that it is not malware. +# https://github.com/efforg/https-everywhere/issues/2051 +sed -i.bak -e '/updateKey/d' -e '/updateURL/d' \ + -e 's,https-everywhere-eff@eff.org,https-everywhere@eff.org,' \ + pkg/xpi-amo/install.rdf +rm pkg/xpi-amo/install.rdf.bak # Used for figuring out which branch to pull from when viewing source for rules GIT_OBJECT_FILE=".git/refs/heads/master" @@ -152,17 +122,18 @@ fi # Build the XPI! rm -f "${XPI_NAME}.xpi" +rm -f "${XPI_NAME}-eff.xpi" rm -f "${XPI_NAME}-amo.xpi" -python2.7 utils/create_xpi.py -n "${XPI_NAME}.xpi" -x ".build_exclusions" "pkg/xpi-eff" +python2.7 utils/create_xpi.py -n "${XPI_NAME}-eff.xpi" -x ".build_exclusions" "pkg/xpi-eff" python2.7 utils/create_xpi.py -n "${XPI_NAME}-amo.xpi" -x ".build_exclusions" "pkg/xpi-amo" echo >&2 "Total included rules: `sqlite3 $RULESETS_SQLITE 'select count(*) from rulesets'`" echo >&2 "Rules disabled by default: `find src/chrome/content/rules -name "*.xml" | xargs grep -F default_off | wc -l`" -echo >&2 "Created ${XPI_NAME}.xpi and ${XPI_NAME}-amo.xpi" +echo >&2 "Created ${XPI_NAME}-eff.xpi and ${XPI_NAME}-amo.xpi" -bash utils/android-push.sh "$XPI_NAME.xpi" +bash utils/android-push.sh "$XPI_NAME-eff.xpi" if [ -n "$BRANCH" ]; then - cp $SUBDIR/$XPI_NAME.xpi pkg + cp $SUBDIR/${XPI_NAME}-eff.xpi $SUBDIR/${XPI_NAME}-amo.xpi pkg rm -rf $SUBDIR fi diff --git a/ruleset-style.md b/ruleset-style.md index dbbd3b177e..ab6da9a727 100644 --- a/ruleset-style.md +++ b/ruleset-style.md @@ -7,9 +7,10 @@ To that end, here are some style guidelines for writing or modifying rulesets. They are intended to help and simplify in places where choices are ambiguous, but like all guidelines they can be broken if the circumstances require it. -Avoid using the left-wildcard ("<target host='*.example.com'>") unless you -really mean it. Many rules today specify a left-wildcard target, but the -rewrite rules only rewrite an explicit list of hostnames. +Avoid using the left-wildcard ("<target host='*.example.com'>") unless +you intend to rewrite all or nearly all subdomains. Many rules today specify +a left-wildcard target, but the rewrite rules only rewrite an explicit list +of hostnames. Instead, prefer listing explicit target hosts and a single rewrite from "^http:" to "^https:". This saves you time as a ruleset author because each explicit target @@ -37,6 +38,8 @@ plus a plain rewrite from "^http:" to "^https:". Prefer dashes over underscores in filenames. Dashes are easier to type. +Use tabs and double quotes (`"`, not `'`). + When matching an arbitrary DNS label (a single component of a hostname), prefer `([\w-]+)` for a single label (i.e www), or `([\w.-]+)` for multiple labels (i.e. www.beta). Avoid more visually complicated options like `([^/:@\.]+\.)?`. @@ -55,7 +58,14 @@ non-capturing form adds extra line noise that makes rules harder to read. Generally you can achieve the same effect by choosing a correspondingly higher index for your replacement group to account for the groups you don't care about. -Here is an example ruleset today: +Avoid snapping redirects. For instance, if https://foo.fm serves HTTPS +correctly, but redirects to https://foo.com, it's tempting to rewrite foo.fm to +foo.com, to save users the latency of the redirect. However, such rulesets are +less obviously correct and require more scrutiny. And the redirect can go out of +date and cause problems. HTTPS Everywhere rulesets should change requests the minimum +amount necessary to ensure a secure connection. + +Here is an example ruleset pre-style guidelines: ``` @@ -90,3 +100,4 @@ test URLs: to="https:" /> + diff --git a/run-chromium.sh b/run-chromium.sh deleted file mode 100755 index 4a26e875e3..0000000000 --- a/run-chromium.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# -# Build the extension and run a chromium extension with it installed. -# -set -o errexit -o xtrace -cd $(dirname $0) -source makecrx.sh -PROFILE_DIRECTORY="$(mktemp -d)" -trap 'rm -r "$PROFILE_DIRECTORY"' EXIT -chromium-browser \ - --user-data-dir="$PROFILE_DIRECTORY" \ - --load-extension=pkg/crx/ "$@" diff --git a/src/Changelog b/src/Changelog index 6637e19f61..45a03ec8aa 100644 --- a/src/Changelog +++ b/src/Changelog @@ -1,3 +1,40 @@ +Firefox 5.1.1 / Chrome 2015.8.25 + * Ruleset fixes + * Clean up some unused code that was causing review problems on AMO. + +Firefox 5.1.0 + * Signed by AMO so it won't get a warning in Firefox + +Firefox 5.0.9 + * Fixed missing translations from 5.0.8 + +Firefox 5.0.8 / Chrome-2015.8.13 + * Ruleset fixes + * Restore checkbox icons on Firefox + * Add a link to the HTTPS Everywhere Atlas + +Firefox 5.0.7 / Chrome-2015.7.17 + * Ruleset fixes, in particular disable broken Netflix rule + * Fix "Add a rule" functionality in Chrome. + +Chrome-2015.7.15 + * Fix a broken ruleset that caused Chrome version to fail to rewrite all URLs. + +Firefox 5.0.6 / Chrome-2015.7.13 + * Ruleset fixes + * Move options from "Enable / Disable rules" into icon menu + * EFF 25th birthday edition! + +Firefox 5.0.5 / Chrome-2015.5.28 + * Ruleset fixes + * Fix ordering of locales to default to English again. + +Firefox 5.0.4 / Chrome-2015.5.12 + * Ruleset fixes + +Firefox 5.0.3 / Chrome-2015.4.23 + * Ruleset fixes + Firefox 5.0.2 / Chrome-2015.4.7 * Ruleset fixes diff --git a/src/META-INF/manifest.mf b/src/META-INF/manifest.mf new file mode 100644 index 0000000000..df6d5269ff --- /dev/null +++ b/src/META-INF/manifest.mf @@ -0,0 +1,2807 @@ +Manifest-Version: 1.0 + +Name: install.rdf +Digest-Algorithms: MD5 SHA1 +MD5-Digest: laCJ1qvV56BP/zJ+pAUQxg== +SHA1-Digest: NuPfXjb4Tu0u2OIhu0nz9eF+AWA= + +Name: chrome.manifest +Digest-Algorithms: MD5 SHA1 +MD5-Digest: rZZ7yvZZGLdL4lBT62CRZw== +SHA1-Digest: qpuVi0r02Psyx216gmgPVqJEUB8= + +Name: Changelog +Digest-Algorithms: MD5 SHA1 +MD5-Digest: FP3Ax5ALL5uMeEnN+aRi3A== +SHA1-Digest: t0J3+QnD/mZa55otq1c7RRuAwlc= + +Name: chrome/content/about.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: TO4DQ0ayWbNEXdYRvIy+Og== +SHA1-Digest: LLBVoXQCCBga94313zUlZ11orfw= + +Name: chrome/content/about.xul +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 0Q5QWjpzv6ug/3jHowymwA== +SHA1-Digest: GSNVm5xUXaphb41qtB00SXOQmA0= + +Name: chrome/content/meta-preferences.xul +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9YYHQqlA0cwc7IgId/YYhQ== +SHA1-Digest: jEBPCju6z4zzzNFf+2aXBXXG2C4= + +Name: chrome/content/observatory-popup.xul +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 14npcsxa30a6mQ+OV3WAyQ== +SHA1-Digest: MVOG9C0q9l5UguYxrRADE+z4BBw= + +Name: chrome/content/observatory-preferences.xul +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Bnf0sFZsI/b7eGzcH1JE1Q== +SHA1-Digest: /epomPtkK0HNTWKhwEbkIyVwB+w= + +Name: chrome/content/observatory-warning.xul +Digest-Algorithms: MD5 SHA1 +MD5-Digest: epqd6ikkve3I06atd0JUdQ== +SHA1-Digest: arqj9jjAqjMA3Cpame/E+iXAUUg= + +Name: chrome/content/observatory-xul.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: qwMKKHdLBoF2kdB2KmXkLQ== +SHA1-Digest: GSMCtGvcHTDq4BKI+kOzOggSBeY= + +Name: chrome/content/toolbar_button.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: p2UAguZ77gDOy0Chjsux0Q== +SHA1-Digest: +pdeRYxLLdjq72XPeNoVVSmC/ds= + +Name: chrome/content/toolbar_button.xul +Digest-Algorithms: MD5 SHA1 +MD5-Digest: cn9Z46ZmULORTwbcyEm4Zg== +SHA1-Digest: Wt4xdzGMyYH929kLfylciaoI3JU= + +Name: chrome/content/toolbar_button_binding.xml +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2dbyVeRAL8JeouHbcLwqJw== +SHA1-Digest: WccuJ8edCmDxzDdFG8x/qbDlxH8= + +Name: chrome/content/code/AndroidUI.jsm +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5LiEVRBV8Zf6dg6NZDgdBA== +SHA1-Digest: Ze0jpXS7C4/oRp9M7PuOhv2rm5U= + +Name: chrome/content/code/ApplicableList.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3J8kzqjLvrAkR6CszNKsag== +SHA1-Digest: xKlpXgS+iCm9yxc0ZXfb4se1bQc= + +Name: chrome/content/code/commonOCSP.json +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZF5tbgWyGTGMaY+Sry/TEA== +SHA1-Digest: QyZP0mnVpfI8v9HafWSGVpggXFI= + +Name: chrome/content/code/Cookie.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 7qopPVlNOK0J3+QOrKyZyg== +SHA1-Digest: bQ7CCZL833qNtLEac5z8KMG5Ky8= + +Name: chrome/content/code/HTTPS.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: PjqIt54QbHdk4CkCjfvskw== +SHA1-Digest: XIW4ZQt1P9u9N+T6yS5oa6SaB08= + +Name: chrome/content/code/HTTPSRules.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: s76BQeSd66O0S14U9Xrg0w== +SHA1-Digest: 3Fi+uQVk10oG5p3qK0VezA30KFw= + +Name: chrome/content/code/IOUtil.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Q5w8DgZk0cZpyBMMpIfO1g== +SHA1-Digest: ECKctZABDHx+hMJtaSRTYAZ+2+A= + +Name: chrome/content/code/NSS.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: B0hSLngHeCNzYEjlCV7VIA== +SHA1-Digest: vdvJRg2qSwNi0B6XDE6/SelVUqI= + +Name: chrome/content/code/Root-CAs.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: YfZ5JRnK/VVLJ3BexceymA== +SHA1-Digest: p3cDVtcEcaBW/wX7zfiUdjI4d8w= + +Name: chrome/content/code/sha256.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: feCNjWXdf8uxYzQdWKKyKg== +SHA1-Digest: id/qGgzRgxSXMMttuM2RKw+vpYY= + +Name: chrome/content/code/X509ChainWhitelist.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JIjqgTDiupq8QqrVuki0AA== +SHA1-Digest: mh2DCtzp2ISltw0WXLQNekM9uPs= + +Name: chrome/locale/README.txt +Digest-Algorithms: MD5 SHA1 +MD5-Digest: xdAkPVfASJh4FQgANym6GA== +SHA1-Digest: 9FXQ1FtZw4Qp2b+iOyrFg/mGeow= + +Name: chrome/locale/ach/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ach/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ach/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ady/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ady/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ady/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/af/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: G/HQInsMl1507RoqypVZMg== +SHA1-Digest: QUcQ0CseixJja0OH0DLC+IYcpaY= + +Name: chrome/locale/af/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/af/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/af_ZA/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/af_ZA/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/af_ZA/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/ak/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ak/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ak/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/am/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Kx61ZwAK1qVJTPGTt1MdQA== +SHA1-Digest: we6XrAYLD4T7ACROYnAztNBNfsA= + +Name: chrome/locale/am/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: d2gHWBuMboY/y+GU9KHD+A== +SHA1-Digest: H/f7CXhBImHoF9UO5GJVJubDamc= + +Name: chrome/locale/am/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: t85Np/mlXi6mry6DfInsGw== +SHA1-Digest: NqTGnOajiii9KcX+3kbxD/QUNDA= + +Name: chrome/locale/am_ET/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/am_ET/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/am_ET/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/ar/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +wrs4SwGd1W3ahTQ9x6lBg== +SHA1-Digest: xjIjj7onW4LBXNdwQ+szCOXjHvg= + +Name: chrome/locale/ar/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: rrhf/qvqYHOLnsLFKt0Elg== +SHA1-Digest: nDC6RpC/SmyAIHcYGBbrwvditoI= + +Name: chrome/locale/ar/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: IJzryFM3hJLJd1vXkwHGIA== +SHA1-Digest: S7AZKljyb3Lm0xbOzLFp0TsGi7Q= + +Name: chrome/locale/arn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/arn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/arn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ast/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Gw+l7nZKJ1ORI4ZHdD/9qw== +SHA1-Digest: nSWV1DXRs9QXm/xMA0syhNoADZA= + +Name: chrome/locale/ast/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ast/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: gutO5PrRuFOLXnM1KS+ffw== +SHA1-Digest: o8FbuYhtG0JexInXq193UD3/Et8= + +Name: chrome/locale/az/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 7FE46sMYFAkjgf4Yq2cWHA== +SHA1-Digest: GvG4qAk0yWq3TWf9BjTns/jVupQ= + +Name: chrome/locale/az/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: EYKtNNxU+1z0FAiMtzk4Jg== +SHA1-Digest: MrwhPPQiP/lzVfBqPToAjAyg8rg= + +Name: chrome/locale/az/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9YbqXUt4Z/ojNFX0SJT4fA== +SHA1-Digest: ATb4BBuHYH20LU6tN+k2LChMt9g= + +Name: chrome/locale/ba/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ba/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ba/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/be/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: NRW5ZULF7W7cVg+h60pyqw== +SHA1-Digest: kAIErNP2htrAyss/Tqtx4oPAiTo= + +Name: chrome/locale/be/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: OzkUu2yX5EwySRsPODNezg== +SHA1-Digest: 6EhHIexamAi+wE5JXZgePdzvLPc= + +Name: chrome/locale/be/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: NI/sXLrjCbZAAS6KDNIg6w== +SHA1-Digest: bgDWGNDUTkSm85cVc2njUtknHGQ= + +Name: chrome/locale/bg/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: DlMZMZ9RG2phUPlcc7j1mA== +SHA1-Digest: EJnxpKomXqzNtl0azcKfCcO5GCw= + +Name: chrome/locale/bg/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: fVK+HP5SVK7c2ZZ9QyLN2g== +SHA1-Digest: t+oCLmlMw/XFMKW0on1Ws4zLqAc= + +Name: chrome/locale/bg/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: a7PnLe9Q27wVKCKaKekPPg== +SHA1-Digest: ql3bDLVVelkQ4tUygWJ6e7cebu4= + +Name: chrome/locale/bg_BG/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/bg_BG/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/bn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: fAGyrBo1VER6lvRTj+t9Uw== +SHA1-Digest: XoKD3TU7YPzHdHInuic29ne+gFg= + +Name: chrome/locale/bn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: MM/s3bxOsL74Ft04VgwnkA== +SHA1-Digest: Q5x5zIpYWDX+dLT5tGtuncDUizM= + +Name: chrome/locale/bn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: VyeeG4i6OBehNi32hLt+oA== +SHA1-Digest: MK/MNB/fATBz0JcQbI5uENOjZpM= + +Name: chrome/locale/bn_BD/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/bn_BD/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/bn_BD/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/bn_IN/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/bn_IN/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/bn_IN/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/bo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/bo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/bo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/br/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/br/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/br/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/bs/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: U7lbMeTOH7NiqmX/w6RNUA== +SHA1-Digest: L1RuSNRLzi8d8aqeL3QIGSveso0= + +Name: chrome/locale/bs/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/bs/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZNI97feqRtbDaRb5vQJ1/w== +SHA1-Digest: sr+tDbYwOpO/hxIOMPDMQiyGl50= + +Name: chrome/locale/ca/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: e2yBHKkCUwUEQP++Im5zbA== +SHA1-Digest: LCXcHeD4TXtVJbucDNTJwL7Df/c= + +Name: chrome/locale/ca/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Ljbmp7ivnzL6U+nE8naKxA== +SHA1-Digest: WbUEa/c9NHhW9xBTM0A4kifZnYg= + +Name: chrome/locale/ca/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5sr/B9xSBUN2n1TdQrzwtg== +SHA1-Digest: /ZD6ZCCZr5dFNzJgyEeNcF7g4dQ= + +Name: chrome/locale/ca@valencia/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: wq1ftLJI/zu00jnty2UoTg== +SHA1-Digest: W6qiQGN0W2GdUYLH5nTJLwHhdog= + +Name: chrome/locale/ca@valencia/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JSS3FARi65XslQa5SDB16Q== +SHA1-Digest: fYOX+8CyYrFIbb+AWYrN1O7W7UI= + +Name: chrome/locale/ca@valencia/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3rXVOdQg/xpjPErJOGQZaw== +SHA1-Digest: qnrzobq7E/EtGV23OWJiBN0i6jw= + +Name: chrome/locale/ca_ES/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: eSkZ69G/Tyu30mSw5Apjjw== +SHA1-Digest: TQzUTfn1UOTSYlF1qjXWdQJgHFo= + +Name: chrome/locale/ca_ES/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: YtS2epu01TazFPbFmpsI/g== +SHA1-Digest: Cv7tQJ78lyhjEuq0PYh91QMdi8E= + +Name: chrome/locale/cs/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: nNu9SVDVjAIGOLRq+l4EMw== +SHA1-Digest: Fj1BRMCTI5s5pwBMBBsPeBQYISc= + +Name: chrome/locale/cs/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: FAklnVOMlJ6kWBf/5yRs3Q== +SHA1-Digest: Q5kpJEkoPkSBImHQN1Z9+FvPMu8= + +Name: chrome/locale/cs/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: EyqSdOPe8YR5DqVwEYeZVw== +SHA1-Digest: aSS+C8mCIjRok6aMBnslgqoofWY= + +Name: chrome/locale/cs_CZ/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/cs_CZ/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/cs_CZ/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/csb/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/csb/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/csb/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/cv/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/cv/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/cv/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: kIyH9l00bHAh6ADPQ5iArQ== +SHA1-Digest: QL0BuE+ti76nOKz2d1tDu1LPz9U= + +Name: chrome/locale/cy/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: qqDzvJnJLIPsVHMerq1bzw== +SHA1-Digest: h1kbi5cLApzw5icU1e2WMr9bD3o= + +Name: chrome/locale/cy/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: EcocIN7kKtTyJ6D2+1quVw== +SHA1-Digest: d1L7HMkwuDQVQRIgqQYy1Tw3ljQ= + +Name: chrome/locale/cy/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: I78RJeHOI07rGHv3ZDB+sA== +SHA1-Digest: OBSMk9WfDDCXvXVzKiCP9fwsC6c= + +Name: chrome/locale/cy_GB/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/cy_GB/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/cy_GB/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/da/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jL9Y4o+n+OesXqYoadBn7g== +SHA1-Digest: YPCV8wFEl06JtaHlHs0gJjp9jE8= + +Name: chrome/locale/da/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: w5nM93nrhX+Yz/JS91Qz2A== +SHA1-Digest: S5/Vj5KyVp4EGZShvYGK9+QN/Z0= + +Name: chrome/locale/da/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /1vivPRtL3R65irMByGiLg== +SHA1-Digest: ODfCjWUmnoz+XtQa9yrfhN8HE0E= + +Name: chrome/locale/de/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: LPM9PrNYIUJJ9SRqlako+A== +SHA1-Digest: 7YRcKhNT5lcIwHxtd4kLH5zOijw= + +Name: chrome/locale/de/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: KZ86VAGHSiDQH/sa4g2XQA== +SHA1-Digest: 2NkXR8m/i7WnKNgjyCNxv5OqnvM= + +Name: chrome/locale/de/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: g3P9W7O9E3iw8eGntpik7A== +SHA1-Digest: guJ0GfZoPCmb2Ri0nZIzSpYXY50= + +Name: chrome/locale/dz/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/dz/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/dz/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/el/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5mFI5VYJosKngZZGr3kmTA== +SHA1-Digest: g+a9xHXPiXXiDChOhaKdv5g+a8A= + +Name: chrome/locale/el/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 6e/6s2Z7EmaeqLFvacR/aw== +SHA1-Digest: R9ynfJDz/mmDBZUhpz6IS04gq+s= + +Name: chrome/locale/el/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ENMfbc5OHzv11XTdP0BFrA== +SHA1-Digest: 14yclFzpoPwvG7/l69j22tOgUcw= + +Name: chrome/locale/el_GR/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/el_GR/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/en/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/en/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/en/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: VdF6+z+uxg9i4YhmOpiyeA== +SHA1-Digest: NN2PnCMaroBKjX67NWSsLTCwarM= + +Name: chrome/locale/en_GB/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/en_GB/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/en_GB/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 6On/olVPNVqbKpXzW1X2XA== +SHA1-Digest: Ijz8la1nRxu5r+O6QbVZK3VSVaQ= + +Name: chrome/locale/eo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: CD5KFwO7l7MTSJgZVri86w== +SHA1-Digest: NKeMtoc1j6T4m7QF+VRQ3YQIR4c= + +Name: chrome/locale/eo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Yf97lgxpKNLGpAjMvfK/MA== +SHA1-Digest: fZVKrhE/OwB78CghulHRKR3Cru0= + +Name: chrome/locale/eo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 0soxl9J7jSJqthKSnVZgDA== +SHA1-Digest: 0VLL/32gqWwCgrncTLnxhn3ZT8I= + +Name: chrome/locale/es/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: KwhBrpAGGFSHP4Dzg5mJ6Q== +SHA1-Digest: gDbaAdz9bHNkxHnPMXdiqIpt5JE= + +Name: chrome/locale/es/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: DTNvpe38N9BJMblCk/vrTA== +SHA1-Digest: t+iUE39QJXMWCMX6LSVNttQ1r1w= + +Name: chrome/locale/es/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: OBjXp7DD5VWoPeaKLyRUpw== +SHA1-Digest: IwWd7U0zpf4iBtn/Pv03tBhrAFY= + +Name: chrome/locale/es_AR/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /+IUBcnLwO4R+O6IaJZ6Dw== +SHA1-Digest: DvmA3sDnobiHNacNRq9YDgXbu7c= + +Name: chrome/locale/es_AR/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: t197vjqc9+soRaRO2fbMFg== +SHA1-Digest: tZPETRNxL06AyoL+1QvoL1EcdRw= + +Name: chrome/locale/es_AR/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: pDJ6YCTokY+YgtVUmM0W1Q== +SHA1-Digest: 6RlkAbOq3Nvfl5T0lcQkMOqRC9k= + +Name: chrome/locale/es_CL/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2wMB7qppfceBj2xvHCsVWw== +SHA1-Digest: JTqmCdZ48Y6PVjNtTXqr6ovI/f8= + +Name: chrome/locale/es_CL/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ku02cJMU/CU79CCHjm68hg== +SHA1-Digest: YU/tSs5/QomJCk2jWGnFVaVRkUE= + +Name: chrome/locale/es_CL/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +UfF4zLiXupqbEGdlIyDmQ== +SHA1-Digest: O0nzY52MgvHQ5Qw/JAkRf8rsRcQ= + +Name: chrome/locale/es_CO/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 4xRvn2bilZo1XCkaGC/n1Q== +SHA1-Digest: WLYb7c7IOixjwEY5P4ZCg8/MaYo= + +Name: chrome/locale/es_CO/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: S3Sa+bBVNs2GQvqez4PdQw== +SHA1-Digest: NHaw5kmOifivBjtE//sO4YnFFJw= + +Name: chrome/locale/es_CO/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9A5weLWeecYlxtF4QYdb9g== +SHA1-Digest: 1QyaXe6xqoxYiFDcIiezvwa76eo= + +Name: chrome/locale/es_MX/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: lnlOijk8E8SZoumgbxOFVw== +SHA1-Digest: FnwP8l4rZRwLfsxQRUpWjDsUIQU= + +Name: chrome/locale/es_MX/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/es_MX/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: n6O9csSMLiwiF9wT7DNgAQ== +SHA1-Digest: cDYp9lx3gyJ9zUuA140+T2dssPc= + +Name: chrome/locale/es_NI/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/es_NI/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/es_NI/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/et/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: TpXDxn5JNEGOem7AxijCZA== +SHA1-Digest: PEBNS91F4Cg7apg1pHZlyhDruTU= + +Name: chrome/locale/et/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Mx04kEuG4w0velOssyehoA== +SHA1-Digest: TM0g8+S/1iPvtCebuuIFluYODAg= + +Name: chrome/locale/et/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: xYzYpEJbalFBV7cy8SE3nA== +SHA1-Digest: HX06kkq2cBOWxfykbfZbbAGfo3E= + +Name: chrome/locale/eu/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: eSDSTV6bBlFegvUQBC7e3A== +SHA1-Digest: lQmxM3MlA28hOsAXtHrPUhUSnOw= + +Name: chrome/locale/eu/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Dpg9ZDE+K/Qxz6MHg2+H9g== +SHA1-Digest: 65XPAH6P2S0bCMPl8NacLrauulM= + +Name: chrome/locale/eu/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: SxQhm/CpUtMLnp4xyRO6eQ== +SHA1-Digest: aOp2ToPN/20aHh4K9cNEF9k9pes= + +Name: chrome/locale/fa/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2jEpzoQlqW81Zk+pOibfZA== +SHA1-Digest: lAHkiko6wd0evKsCdT1TEegfcTc= + +Name: chrome/locale/fa/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: mGj2i2la6F155xMsd5kpQA== +SHA1-Digest: OuPLXb/wCTU7bSq5atIoquEzbKg= + +Name: chrome/locale/fa/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LXeOLF4ZfAEjOqOu10jew== +SHA1-Digest: oQhzbFAhEixn7dzTuy3MrrRugXI= + +Name: chrome/locale/fi/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: lVRbmFWi6Ti0OSmN45glWQ== +SHA1-Digest: 6Mvu9X2/sL+5l7ccLAdn8UdKUsQ= + +Name: chrome/locale/fi/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: bMFYJJYyZNxJh9OJT8XFIA== +SHA1-Digest: ElhnambE759W6e/4hZnzIA6HrvY= + +Name: chrome/locale/fi/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: eHDtz3NDVNSAvyNKhlUhnQ== +SHA1-Digest: vp/idYkSRVaGqgusuKxyf8MjQMk= + +Name: chrome/locale/fil/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Oud24U1g4ZcVBb1Lk4H94Q== +SHA1-Digest: L3pG77xjcFst8Mm6EG0P2Aruwf8= + +Name: chrome/locale/fil/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9Cs/7QbluLICU52dHrUZ1w== +SHA1-Digest: ujdlnjtRImrAgX/bf7PXg31uIUg= + +Name: chrome/locale/fil/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +FFlHBicdb/0z/EDLVOtEw== +SHA1-Digest: 5Wm79GVr0/HPjuC5dN+8/IDAuCM= + +Name: chrome/locale/fo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 4em2D9P2Hlh9C0FJT2t5aw== +SHA1-Digest: oOSgX/wKMptPkEi8sL1a2zW5o1c= + +Name: chrome/locale/fo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: bnmewhOUCJnKrhIMw7McbQ== +SHA1-Digest: G6fG9naOamJIThQcTfWlMyqXUXk= + +Name: chrome/locale/fo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: SazPXSZl0Kn1DTBCSvrZEw== +SHA1-Digest: eWCdOIKeRSDiPZ7YYqSAjVb8JSY= + +Name: chrome/locale/fr/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Be0rBsfQsNFPsh4gnMZ+Jg== +SHA1-Digest: ZArZqyvYekx4aAj+tdxKu00UaSE= + +Name: chrome/locale/fr/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 0JnynxpjbBRKQtQCv8F2vg== +SHA1-Digest: Y8gej6IWvkvE5b9KXU/nq85tK3E= + +Name: chrome/locale/fr/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: x+N5awTeQotsqJUl20CVlw== +SHA1-Digest: EqXgHnzEfYLDxag/cKi6bT6uYxM= + +Name: chrome/locale/fr_CA/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: pZ3J6tKw7iueyH5YN+KFTw== +SHA1-Digest: bYUCptWtLcBjDyZwl09ulpuKzsI= + +Name: chrome/locale/fr_CA/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /cR5zhXGPnYHHjDGWB5n/Q== +SHA1-Digest: TDdg2iGP6NgRYZUJma3w2KeB1z8= + +Name: chrome/locale/fr_CA/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: OLYTQOqE8HbOpIMH59FlSA== +SHA1-Digest: 5r2d10Rsz+RCujuV+XluAR/25UA= + +Name: chrome/locale/fur/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/fur/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/fur/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/fy/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2TjzcC2bJPaZEx4SyrcGQA== +SHA1-Digest: 4sRgSHQXK9rRvrffl6uF2xnjI24= + +Name: chrome/locale/fy/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 0iFxqKUaXCHvjSKB2sLubQ== +SHA1-Digest: KUE4+4xLxabVD/RR6f+bxIqTktw= + +Name: chrome/locale/fy/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Ph4d+XSKtqpFHskZ+aNm2g== +SHA1-Digest: TJ5/GODoHHzq+w1GlgCTxFYfPbo= + +Name: chrome/locale/ga/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: PTos8RuoxWkjUkLmmmHtKA== +SHA1-Digest: 3FAuD6VuOf5WUxv6RIFro6Uz5os= + +Name: chrome/locale/ga/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ga/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/gd/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/gd/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/gd/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/gl/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: NaQTd605+grL2vhIxm4Wdg== +SHA1-Digest: hYVwhlqTxtrT5d83JDlHKOQQuM4= + +Name: chrome/locale/gl/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: vUvtE+vtKQSUbCEokhfZqw== +SHA1-Digest: XRSjewWm/eBfu3PB9reT2xpWsH8= + +Name: chrome/locale/gl/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: RE53xjAb5Q/kGsotPaOCNQ== +SHA1-Digest: 3S3zKEqp4+wKtON6uYh7TeSx7k0= + +Name: chrome/locale/gu/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: EoRuc752YNApiIZxB/G/Vw== +SHA1-Digest: bl8FgsuPM8ObnYMCl1SXopBIsx8= + +Name: chrome/locale/gu/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/gu/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/gu_IN/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: z1OF1ojJ0p+6MrBZRnbN3A== +SHA1-Digest: nSTVhUGghcA4CS52SM8acy42Y3A= + +Name: chrome/locale/gu_IN/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/gu_IN/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/gun/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/gun/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/gun/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ha/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ha/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ha/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/he/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +V3K2I/ko9OlySCNXeP+3g== +SHA1-Digest: K9StYYyKbFxGLMkVPCNuzQJKqhs= + +Name: chrome/locale/he/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: c0p8v/D/5qfY10+Wqo9tcg== +SHA1-Digest: qZsRo78JA8TLfocybhWK3uTI7BQ= + +Name: chrome/locale/he/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: O4Omn6Ok1WY7N3w2BtHtgg== +SHA1-Digest: //w8DG1IKC9nyxdPF/oZGm4WoSQ= + +Name: chrome/locale/hi/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JdQLBvI4217DE9uwqTzuJw== +SHA1-Digest: fgQ4xYNkXb0aNZbLKVC6gND7Z8g= + +Name: chrome/locale/hi/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +4BZM2tBVdmfXr2LMMAWAw== +SHA1-Digest: mU3F6oBavOGN7+sEogTwTDkhLCg= + +Name: chrome/locale/hi/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Vpg1E34mBD0rbNeQH/3vsw== +SHA1-Digest: ox39/cDNLNx91ddhl2J0p4ORBqc= + +Name: chrome/locale/hr/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: xPoxJ94hiwKAMCIuFIi1Dw== +SHA1-Digest: GQTLuipIIB/dbxtpcAzbovyaWuw= + +Name: chrome/locale/hr/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/hr/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JSAkBKxW/QHLYU2ihoa3NA== +SHA1-Digest: ui/FpFXIFAb3harE9U24QFkj+C4= + +Name: chrome/locale/hr_HR/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: qTS2wtcwvsrULrqvmDK93w== +SHA1-Digest: DN6jurWBS/Fwh8OjS4NLev2CHKM= + +Name: chrome/locale/hr_HR/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: a2DDhwHCHiUO6i3JivQwcQ== +SHA1-Digest: /+Xec3ZIrueKZYdswg57HyWTSUg= + +Name: chrome/locale/hr_HR/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /8UUkmJWw4RdW2sP5SPhiQ== +SHA1-Digest: XDOXJh3tfg+Dr8TrCaqB5mT0Bec= + +Name: chrome/locale/ht/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ht/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ht/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/hu/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3KM0MFAjljj0iODETSJ+qA== +SHA1-Digest: 7HimJkh8Dv9yyWWZR7YilV7LpCg= + +Name: chrome/locale/hu/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5g+PYjspSeEAuFavnhkmsA== +SHA1-Digest: +suJcmHMbglRrfOuYI5VL7c5S5g= + +Name: chrome/locale/hu/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: dt+eQfUDIli/ZcgRsSZrVg== +SHA1-Digest: 1tkZ17evA2V1v6VYvPMaDc2Ixk0= + +Name: chrome/locale/hy/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/hy/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/hy/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/hy_AM/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3e8UB9rQ0F6vFG1jKwRTWA== +SHA1-Digest: 4pBBvEbO9VW9eqpdhtyp/ZtTnZ0= + +Name: chrome/locale/hy_AM/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/hy_AM/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JIPujla3pDgt7HD3WRr06Q== +SHA1-Digest: daF8/qDlckCVuw4Pl/EiMZcftyE= + +Name: chrome/locale/ia/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: vwb23yBbvaGP7u7SKAGx3g== +SHA1-Digest: T7edgK2GAEHxRlpGqN7ZcjQbG1k= + +Name: chrome/locale/ia/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ia/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: BVDxKblCch7KWR+Cp4nr5Q== +SHA1-Digest: jBjkpT6gWgExjNYzbOvRsj7SxoQ= + +Name: chrome/locale/id/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: OUcpDekjrElPW1ZVG+SJHw== +SHA1-Digest: rIqQPkQF8RObQBsl5f0gOR1SyLU= + +Name: chrome/locale/id/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: nIazzo6ZVcyR7QVf1ldoVg== +SHA1-Digest: Z/Cz/e+N/Z4LsHb//71imDrWA7Q= + +Name: chrome/locale/id/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2LhD0sqfO+jaZaeLQfQyqw== +SHA1-Digest: 8i4qYQWn4vWGVVrXMuJ7CiWBzzU= + +Name: chrome/locale/is/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: vUVFzbrIPBgPqTajtlbTWQ== +SHA1-Digest: oXtZ1m2EPP//fn/zz28BXrepODM= + +Name: chrome/locale/is/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Vgb9tuwyi0nU8aqZSGgQ4A== +SHA1-Digest: Z35OA/U0YcvDXFUYNI+l6NGQlgk= + +Name: chrome/locale/is/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: aJXEB5cO7Hy9D1apce3l9w== +SHA1-Digest: hhqgFhgE0J/C12kQ9JwmGHF0ldA= + +Name: chrome/locale/it/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Kk/lJiEBhHJxH6j95RkgJg== +SHA1-Digest: iCuQJhBlZ4R4dWlQRqop/44uwxc= + +Name: chrome/locale/it/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: hTg05Q9CVQ4Z8MlGSjF04g== +SHA1-Digest: gPRrF/iF/AkmoXMQ32k/clDikso= + +Name: chrome/locale/it/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: vGfd68HNd0xrGHwrD6WenA== +SHA1-Digest: 4UiEsTLkXAYWq5lxdQTOilfg4bk= + +Name: chrome/locale/ja/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: idGEBJimRtctitTNrtYZLA== +SHA1-Digest: J73m09Ci0Vs6xDEt9UXxmx8f8SQ= + +Name: chrome/locale/ja/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: mgEBN/VRGCQngfhHZTYqCA== +SHA1-Digest: 1RAHMOc+d29QAKSXrXSWGVGRWYc= + +Name: chrome/locale/ja/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: FYQNj5wMzJJk14shidOYmA== +SHA1-Digest: Zs+36FyqVNq1DWfrrDG2c2fVFNc= + +Name: chrome/locale/jbo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/jbo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/jbo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/jv/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/jv/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/jv/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ka/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: d8IYgS/pTHDsjW2VzjhskA== +SHA1-Digest: RbQbk+w2EQOF/C0eLZbNvpswxuc= + +Name: chrome/locale/ka/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2DOhXNct6qawoi8Wi/g9Kw== +SHA1-Digest: 6/Dsbjc0oZF7S7dof+y0i4BhMew= + +Name: chrome/locale/ka/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/kk/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/kk/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/kk/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: QT+KO17Nci0AJAGtBnUVpg== +SHA1-Digest: sF7Vm7l88m+gi7PqlUyysNXz1MY= + +Name: chrome/locale/km/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 0K2meHBFSKc0hWKLMhJhkw== +SHA1-Digest: QT3MoGfUK9/SupOBwD4x8/deWvw= + +Name: chrome/locale/km/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: tPSDcmHV0pA40oO2p/OP/Q== +SHA1-Digest: ZWmEHf7TyiDR4oYBjhyReUoNENg= + +Name: chrome/locale/km/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: GsDhn77ZLv1lyuoT6qYFRQ== +SHA1-Digest: kJE9ojsNrCSskngluWsXOqXTSag= + +Name: chrome/locale/kn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: eoArq62JmVBDRmMicpobWw== +SHA1-Digest: Ieh9jYWLWFmhWVod2nfdtTtPZk0= + +Name: chrome/locale/kn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: KDasH80ASwsGFTBg3JakPg== +SHA1-Digest: XOEQjUOZhjPsNik5EDfWnLY8ZyQ= + +Name: chrome/locale/kn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: iiOIe00Y0kQ8ThT2cRAXhQ== +SHA1-Digest: ciXS3K8yC8HHIPQP8GZWfTe59zA= + +Name: chrome/locale/ko/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: xtcX/X/rfWGePZOFuERD4Q== +SHA1-Digest: aRNsDlDl6k19WBrfiowVcd0Oz20= + +Name: chrome/locale/ko/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: wKv/GI+ZFYjky/pXwwRzFQ== +SHA1-Digest: Kg9jVIQ2HcuYCTFTugG6V8VoyEg= + +Name: chrome/locale/ko/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: haYZubMgYLjfaohbfY5xGA== +SHA1-Digest: E9or7WR5PvXOb6JwJ2adXAFY7Js= + +Name: chrome/locale/ko_KR/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: BHBacCjuEF0PRn1Mn4s/uQ== +SHA1-Digest: 0gXM5B2a8RchSMkos3/5rN5RLGQ= + +Name: chrome/locale/ko_KR/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: f+cDX1veh7GedFmEXRsbmg== +SHA1-Digest: wn5Dem8Kqjhd44sBdCmvhk9y3zU= + +Name: chrome/locale/ko_KR/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 4iBDBzmIoj0NaM1cB7v6yA== +SHA1-Digest: 90cyRycHsYAdjmgqm0PN2v3vq24= + +Name: chrome/locale/ku/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ku/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ku/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ku_IQ/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: AJevAtG+/kq6c0XXNxuRDw== +SHA1-Digest: RUpMptYd93GGoAYD17K1Wky94K4= + +Name: chrome/locale/ku_IQ/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ku_IQ/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: x9ull8xyV1xXhlfBcALCIg== +SHA1-Digest: JlKX5Y4thiLbv1mH6hboBLfC+74= + +Name: chrome/locale/kw/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/kw/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/kw/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ky/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3eM4hyrs8vv0X40RzyyeUg== +SHA1-Digest: U4I5YcPIYIIxk3Dr71hFWuh7Ibs= + +Name: chrome/locale/ky/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ky/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/la/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/la/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/la/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/lb/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/lb/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/lb/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/lg/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/lg/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/lg/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ln/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ln/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ln/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/lo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: b0Vspkv6woolhJxpcRUWjg== +SHA1-Digest: Wf1dLvcZuGR5vojCvYUrnYHcP+4= + +Name: chrome/locale/lo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/lo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 4ikhNExPcdQ/r9k+8XoC/w== +SHA1-Digest: kz0PE0Ingou//teig1O94MQx4mE= + +Name: chrome/locale/lt/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jlm9h4VOHDRB6jZ2fEY9lA== +SHA1-Digest: KMPBQrWDBDfYHE2XMDlxqL3l8M4= + +Name: chrome/locale/lt/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Nfos9wS4q3xAXTzDeYKy6g== +SHA1-Digest: Rb7ZEqUViuu81d4++rNp4JPlhAE= + +Name: chrome/locale/lt/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: iU6qeImNKfqgAn5y9oRmkw== +SHA1-Digest: Lg4uyzNdnXk6lbXTyrEM5GRSLEU= + +Name: chrome/locale/lv/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: N1EqGwwsnQo6HxQMIDYpqg== +SHA1-Digest: s2eYe53KcmBDsog7sf0bLU4rtUs= + +Name: chrome/locale/lv/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: F/TUbk92mmM/31oSB7bATA== +SHA1-Digest: Xm1Yg7zAg/POeJIYdV0Y6LM+834= + +Name: chrome/locale/lv/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Du7oW4VzcmYt5aZT8sAOTg== +SHA1-Digest: 8+fy38n0N4k+4BMVgz5rXMn/AMc= + +Name: chrome/locale/mg/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/mg/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/mg/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/mi/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/mi/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/mi/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/mk/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Vqj1XypRlmww3GjUiIquMw== +SHA1-Digest: 1mnN4s7y6tVHoWllhmDBqydORkE= + +Name: chrome/locale/mk/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/mk/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ml/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: hdhHKtXogChg+CDqEK4vRg== +SHA1-Digest: M5Vt4mbcuyPYKyzGWUr+g7XDn5k= + +Name: chrome/locale/ml/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: nEIybj/AYZY243ChjeMt5w== +SHA1-Digest: 3laMspwCVVNqLQWIaOTnY6+mgQk= + +Name: chrome/locale/ml/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/mn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/mn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/mn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/mr/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZKC5XwM/YkGq8Vij1uFKVw== +SHA1-Digest: xkbMKE2gS8f5BPzD4T8GOa7onC4= + +Name: chrome/locale/mr/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/mr/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: HJNNnfw2YBnFlJip0Yy+WA== +SHA1-Digest: kQ0p37O9XXcPAra6VR8HDwKpYGc= + +Name: chrome/locale/ms/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: T4ZR4viMIw5OKZI3t8JkKA== +SHA1-Digest: pP4xYuQBNtO/u+RdQ8rksSjTr/M= + +Name: chrome/locale/ms/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JSS3FARi65XslQa5SDB16Q== +SHA1-Digest: fYOX+8CyYrFIbb+AWYrN1O7W7UI= + +Name: chrome/locale/ms_MY/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jBusJWeFY5FHV6qlOZI09Q== +SHA1-Digest: r7Zs286IIGsE/nd7i6zqQ2xR6ss= + +Name: chrome/locale/ms_MY/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9IFlxgFWG7N37F15EPtIpg== +SHA1-Digest: LM8W64eIuAkaqqnLygTcVcSag3M= + +Name: chrome/locale/ms_MY/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: K4Iugdw8dCFfgEnGOg5ibA== +SHA1-Digest: Umlsnc7Xmj36de1+RsgrwOmXqYU= + +Name: chrome/locale/mt/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/mt/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/mt/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/my/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: DNr0TXi6Kxgd+MgtJ8tvJA== +SHA1-Digest: IjcHrtbY5bPWqrZU6TLnZvAoU8Q= + +Name: chrome/locale/my/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/my/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: kM882ex2hbYDre3xRToDhQ== +SHA1-Digest: cRdqRXM2u8s9vw0VAFEGpFJG0dw= + +Name: chrome/locale/nah/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/nah/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/nah/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/nap/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/nap/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/nap/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/nb/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: h2bE6M+4tlRbsmAWeHaf/g== +SHA1-Digest: 5IIMCS/rdwAzn2GexcTBNIKBZdY= + +Name: chrome/locale/nb/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: nQJ4lKNAofGmLvA0RcmPHQ== +SHA1-Digest: oOVXX1pPyneduoBIZz15kUdH5n4= + +Name: chrome/locale/nb/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: GXv9ruVyG8yU77ORHiw52Q== +SHA1-Digest: mqxEoUeXqiT8pz2kuUzgQh+tTzI= + +Name: chrome/locale/nds/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/nds/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/nds/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ne/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ne/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ne/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: pfJrD7S/XgulsBYIeTTc8g== +SHA1-Digest: ObhtCDb1nIInr5TABmRe7QScg98= + +Name: chrome/locale/nl/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Jg/4VllLDnE0HdIq0cfm1w== +SHA1-Digest: d4te9L++PwDLlPBYYRNy7DMQ078= + +Name: chrome/locale/nl/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: UnAlbkCtkg0z/e2xLucsZg== +SHA1-Digest: /xTlMI5yZFSN+7f88+5jw80yrzM= + +Name: chrome/locale/nl/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ESPblIjkcudzkirDQLNDnA== +SHA1-Digest: Qnv+5hF8m9MNrzmzRWVyuuk96lI= + +Name: chrome/locale/nl_BE/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: xpFx+ooasoiwj3YtfOFXhA== +SHA1-Digest: oiz2iGlNWFUOf8diZD/xu8Jiv90= + +Name: chrome/locale/nl_BE/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: dHUeIwNphXI4XPLVE6D1YA== +SHA1-Digest: 4cLEaSiZC1fZ1EBfA5sVVXFyUSk= + +Name: chrome/locale/nl_BE/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: R0TwAODuSLPLyIPIXC10Jg== +SHA1-Digest: Fp+4no/koAOnPxVpMo9wW2GEwyA= + +Name: chrome/locale/nn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 8LCBpCsYPsPYmLtiL0epaA== +SHA1-Digest: 6ADKPTcvYsMrXMHieGmYgtyhApc= + +Name: chrome/locale/nn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: aJQYaKKWmSTHl0uupU/54g== +SHA1-Digest: Y48T8JTpb18wN6sH5A+h6zg8+pQ= + +Name: chrome/locale/nn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 00GiF5Xo9YNWC2T7YvqSbw== +SHA1-Digest: VjSteWr/MlO+ZStcBH8R1Axar0g= + +Name: chrome/locale/nso/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/nso/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/nso/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/oc/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/oc/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/oc/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/or/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/or/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/or/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/pa/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 1K1Dke9Ro/q1tHrUdfUAgw== +SHA1-Digest: 3zQyBLT9QrIfotqjyw9xBV1rOp8= + +Name: chrome/locale/pa/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/pa/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: HwCe4oNLmpwGLxGWpUJu8Q== +SHA1-Digest: jYMWda13xj8i4+qWT19DlV40mRs= + +Name: chrome/locale/pap/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/pap/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/pap/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/pl/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3WLHcx9Ukdm0f2PL6ykrbw== +SHA1-Digest: NdIxnbu0wCmz7UHS3ZawO8PZbPM= + +Name: chrome/locale/pl/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: PXr9Mp8ALJyigDFgjgGmzA== +SHA1-Digest: jWXBXrLZ+dd4DqDwGBfXdD7m1fA= + +Name: chrome/locale/pl/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: wPtzD/j21t03kwnnM2IU0g== +SHA1-Digest: qOQKrt2rq1D8aUy4Q83gF6Q/8bI= + +Name: chrome/locale/pl_PL/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Rj/CN4/vQ4LybAP+Ryhg4Q== +SHA1-Digest: tZw5725a2jKDv7ZU97T5UKKg2tE= + +Name: chrome/locale/pl_PL/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: zme7LDRZOJxYhP/bwo7zmg== +SHA1-Digest: mdHj+D/94Xzf3psYTbD5lEI/fBA= + +Name: chrome/locale/pl_PL/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: RztU7nkCSHzFw83ybf2vFQ== +SHA1-Digest: JbeRdNZHmf8GRWEwHeNCRlgodPY= + +Name: chrome/locale/pms/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/pms/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/pms/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ps/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ps/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ps/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/pt/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: IrqNhXxOwHvvFIWAz8XJdQ== +SHA1-Digest: DBz8k8lrf8IVzebF/Sknwkq82MU= + +Name: chrome/locale/pt/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: O0iC9EoTgMH07ORXmpI/5w== +SHA1-Digest: pbf5c5ly7C7srVpfmVyGKPqxPM4= + +Name: chrome/locale/pt/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: rsGQ3vM0TttTkZX9Ua3a5g== +SHA1-Digest: r1Y8YoM8Ua/kjHH//PPIvhF/fJE= + +Name: chrome/locale/pt_BR/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: d16xidN3NH2IJGxrhCL2nQ== +SHA1-Digest: ZYogfmxmpzywmPz5I2/PB6su55M= + +Name: chrome/locale/pt_BR/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3N3ins+wGJJwRT//Nv2pkA== +SHA1-Digest: hsgMxmkh19jD8vWSJ+kVcZPYr9U= + +Name: chrome/locale/pt_BR/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9XCJXoaIeI7zxMxVImZHFQ== +SHA1-Digest: 6eEIE9sxM+dIE97Lkyvyvvjhfu0= + +Name: chrome/locale/ro/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: hIvMM30viKFt7xJs8nLHBg== +SHA1-Digest: oeS0I2FjRR9bZpUosfxe89xhrtA= + +Name: chrome/locale/ro/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XN8nSkJSkgzKS5bevtxjdQ== +SHA1-Digest: xFlQvzeLOlNLNqGLMWgiejw1ZFc= + +Name: chrome/locale/ro/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: DR+ECAAwnaZAP/2D7KRyoQ== +SHA1-Digest: cM2h6XorZY3CuQy4Wk709ZalNz0= + +Name: chrome/locale/ru/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: TqHK1F7qNWVvoXa1NX3mFQ== +SHA1-Digest: DYWNfEsyGpjAEHIFkoUzTnwZs+4= + +Name: chrome/locale/ru/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZW7L4md0IPTv9OFC5fI6Tg== +SHA1-Digest: BxFfjtQh6Bw2LuAJnVjMn93EQzc= + +Name: chrome/locale/ru/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 6zXoN/qFFiJHXWSCdliCqw== +SHA1-Digest: 6DYdgVgNa4rbbFMnkXQGo9en+14= + +Name: chrome/locale/ru@petr1708/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: m0zhF/4Jp+7Bd5ntSAo8SA== +SHA1-Digest: OvPYdR2LH1O4ATFlKSfygec8DHk= + +Name: chrome/locale/ru@petr1708/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ru@petr1708/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: gSjUeVoTvaEb1tTFJCutpw== +SHA1-Digest: box3vl3XacHQPuLjXz8znhT+hZI= + +Name: chrome/locale/sa/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/sa/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/sa/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/scn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/scn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/scn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/sco/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/sco/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/sco/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/si/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/si/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/si/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/si_LK/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: CD8W07bMgD1Y7cY9x92CJw== +SHA1-Digest: +JJmnwrq6NHsitQsRs197H2Ytb4= + +Name: chrome/locale/si_LK/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: QBAbWMiANOng5gZjBYUbqw== +SHA1-Digest: rKpiA5gu39+Zn16haQ+EXOTgLT8= + +Name: chrome/locale/si_LK/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /r152YECXcrDqTjVKCUPeA== +SHA1-Digest: HHqD8AsyR68mRnyINVQicYSsF0Q= + +Name: chrome/locale/sk/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZBwvVmbHB5190hALJKQKGQ== +SHA1-Digest: PBZECxDYohTE6yZSZBGBjFA/Xgo= + +Name: chrome/locale/sk/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: lKnwxA5on8Kz/cswf5VylQ== +SHA1-Digest: o/4FN4e3LkR+hYzKsObVmm/zPck= + +Name: chrome/locale/sk/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 6qfkKT7I7OrIOPoWfrOm0w== +SHA1-Digest: C/M4h0f97dPcA398sipJy5ikSAs= + +Name: chrome/locale/sk_SK/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: AMYsBcBaYeB8ghFUiPZKIw== +SHA1-Digest: gZNnMOrDzNUp2qFUKztYFLoi1F4= + +Name: chrome/locale/sk_SK/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: HwneA92Jwc/9F8IbKHAakQ== +SHA1-Digest: 9LHSU7IBve61RwkSqilrZy94FR8= + +Name: chrome/locale/sk_SK/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: O+3TBM9yaGNbYIicWb/umw== +SHA1-Digest: 36v1zYobdxGv1B99q4K08435kDg= + +Name: chrome/locale/sl/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: BdyX5S2e2HO3j+cW0Nadew== +SHA1-Digest: y5NTAJPUzRpptBqPp3tPENELr0I= + +Name: chrome/locale/sl/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 54LHG55uLY/z88dQ1dAJSw== +SHA1-Digest: NrZ5lkWAwvoXiGeJyzLQfuDaI44= + +Name: chrome/locale/sl/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: UH5KrUSlo/EY6voPFq3e2A== +SHA1-Digest: wN/70HjrHBHhpyA8vQzqlZyAXc0= + +Name: chrome/locale/sl_SI/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Dz0oqrbioJqOvo9/adDmBg== +SHA1-Digest: 368cO0NsGn5QKhsWl7fh8NHmIhM= + +Name: chrome/locale/sl_SI/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZN3sJh8f2hZJIj3SRquWkg== +SHA1-Digest: 5Wd36Io0rZcXIm+qeYU1oog96Bc= + +Name: chrome/locale/sl_SI/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: rr9dthYFWFXwUAbC+wRtoQ== +SHA1-Digest: 0F0R9zCok0nR/W87+3IbwDGynZg= + +Name: chrome/locale/sn/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/sn/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/sn/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/so/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/so/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/so/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/son/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/son/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/son/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/sq/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: bJSyuLPG089txzszCvvEZw== +SHA1-Digest: cfu4wadMK25q53zEvzSR3U0uOwo= + +Name: chrome/locale/sq/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: BppRzqkk0XBOJ2MrjiMrrw== +SHA1-Digest: HbwqM/DzGmq8SwbF2WmVaZEeQAc= + +Name: chrome/locale/sq/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: NKN8As0wtXOj+FJ0mGBDHQ== +SHA1-Digest: btVYnIy0eoelb8Age83pYrnRpNY= + +Name: chrome/locale/sq_AL/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/sq_AL/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/sq_AL/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/sr/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: pgy9BMIu/yjJCb0Q9KDoaA== +SHA1-Digest: vylBL5DBaeb+7jpX2mIY+AB7K5o= + +Name: chrome/locale/sr/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 26AFP6txN4+E4cjCP7oGMg== +SHA1-Digest: nxcEU6QYPfqsqqwajpxu9rV0lD8= + +Name: chrome/locale/sr/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +zFvG7y/JFqaXv7DS/Qd1A== +SHA1-Digest: WMvcAZ3M1QWK2NMRqMIQxliITqo= + +Name: chrome/locale/sr@latin/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: U7lbMeTOH7NiqmX/w6RNUA== +SHA1-Digest: L1RuSNRLzi8d8aqeL3QIGSveso0= + +Name: chrome/locale/sr@latin/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/sr@latin/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ZNI97feqRtbDaRb5vQJ1/w== +SHA1-Digest: sr+tDbYwOpO/hxIOMPDMQiyGl50= + +Name: chrome/locale/st/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/st/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/st/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/su/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/su/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/su/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/sv/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: aFlvEUuGg0Ahq8Ev8s9aWA== +SHA1-Digest: CaWtgtM+WUbM63MfTsGzIyNQHhU= + +Name: chrome/locale/sv/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: dC+4uR5af9cZ5SmCp6LUMA== +SHA1-Digest: w56f9qGZ9z6TtiAtko8dgwwxnPQ= + +Name: chrome/locale/sv/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: oRhjFTNIafuNUxgYnBLYKQ== +SHA1-Digest: DPJJJtJxPtVldcWFrOS/NjLlfCQ= + +Name: chrome/locale/sv_SE/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: T4ZR4viMIw5OKZI3t8JkKA== +SHA1-Digest: pP4xYuQBNtO/u+RdQ8rksSjTr/M= + +Name: chrome/locale/sv_SE/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JSS3FARi65XslQa5SDB16Q== +SHA1-Digest: fYOX+8CyYrFIbb+AWYrN1O7W7UI= + +Name: chrome/locale/sv_SE/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3rXVOdQg/xpjPErJOGQZaw== +SHA1-Digest: qnrzobq7E/EtGV23OWJiBN0i6jw= + +Name: chrome/locale/sw/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/sw/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/sw/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/szl/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/szl/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/szl/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ta/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Qs8MgcbuVwbc3/bOC16/CA== +SHA1-Digest: U5BfTwZgdVOD9cLmkhX+cZ8XVtg= + +Name: chrome/locale/ta/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5tAXMVfcu/PyTiffFzyd4w== +SHA1-Digest: 59KjWJla9s0hI20sEzRYy6zanew= + +Name: chrome/locale/ta/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2rQU2YQk3OdqU+I+iZfXTw== +SHA1-Digest: Y8WJ/4avyAarZPGj3+fAzmW9Mkw= + +Name: chrome/locale/te/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/te/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/te/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/te_IN/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/te_IN/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/te_IN/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/templates/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/templates/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/templates/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/tg/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/tg/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/tg/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/th/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jk2bKAjca6lArlHTrLKN2g== +SHA1-Digest: 8B13iEyTik9pSZWtJ2FZPjy88l0= + +Name: chrome/locale/th/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 4zqI4NbA080nYluFRAKlcA== +SHA1-Digest: etI1fNK0Me1Ut10SHyvv8pnAqcE= + +Name: chrome/locale/th/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: QQQSmRpmWTI4LMRbCabFKA== +SHA1-Digest: 9zUiD/FeqAmcs7DiE9N6n0a4RgU= + +Name: chrome/locale/ti/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ti/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ti/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/tk/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/tk/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/tk/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/tl_PH/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 3Zq7dnD2hEbUcxriJeZXZg== +SHA1-Digest: JWRqU6GyP1evr1Itj+m/3BmqfC4= + +Name: chrome/locale/tl_PH/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/tl_PH/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/tr/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: DA2zapvvU3xrUj1rl0wECA== +SHA1-Digest: ewpj3+H0Z83dyEY/b4lpJo451dY= + +Name: chrome/locale/tr/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: LBrze6Lp60n5HCr1mhpZUw== +SHA1-Digest: buUhfxx5JLDTwYARuT3WDNvcydA= + +Name: chrome/locale/tr/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 5fUoFKLNEzCqM9UJ52NnLQ== +SHA1-Digest: lfqBDTTuBMrMNuzPOpwco07clBQ= + +Name: chrome/locale/ug@Arab/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ug@Arab/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ug@Arab/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/uk/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: U+HLPss6lE8HDKcfXcTlKw== +SHA1-Digest: zQjaTUrLdeTwruySPVl1wPypCQ8= + +Name: chrome/locale/uk/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: A3GITxTpo9e7ZcwrtWJwsg== +SHA1-Digest: hhkL89cihRWgrZLdC7rhKsPbMRo= + +Name: chrome/locale/uk/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 2RgpQGXAZBnNN+GfPj0zvw== +SHA1-Digest: q3lOHdF1WoJUfpt4GIompO0A0uU= + +Name: chrome/locale/ur/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ur/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ur/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/ur_PK/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: l9dttH3FSvTlkF2Q30qtGw== +SHA1-Digest: 4p3Ylj+y3RGF7OHThTFhOwwHssE= + +Name: chrome/locale/ur_PK/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ur_PK/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: h9AM5suZavf7+46hHTd/3g== +SHA1-Digest: icLEwbi+ccL/luKqVT5u7kI7pkY= + +Name: chrome/locale/uz/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: nmxL6NSAyJbyh/tyl7luKg== +SHA1-Digest: SIGsPfy3LjRDxBP+GJ3vQhh5TpU= + +Name: chrome/locale/uz/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/uz/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: KVmPI62j4jDp549vptP6Kw== +SHA1-Digest: nRwuatYoCEKqEps4yCrooZ/F3T8= + +Name: chrome/locale/ve/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/ve/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/ve/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/vi/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: +fEy4lTr4hv9nP1PswZtdg== +SHA1-Digest: KcW225SIB7vDMM9AS9F9Suafr/w= + +Name: chrome/locale/vi/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XnKJP1wT2LkrVeXkiuFE/A== +SHA1-Digest: aHlJH588F7TPc2R/xYQlOiNabZk= + +Name: chrome/locale/vi/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: HylqJWHMY4YenUHOELQnNA== +SHA1-Digest: pXhzEKZJxrObU8ulcxjW2GgV6Vw= + +Name: chrome/locale/wa/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/wa/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/wa/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/wo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/wo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/wo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/yo/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/yo/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/yo/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/locale/zh-CN/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: xE2wMjzetw4w49Rj59tTpw== +SHA1-Digest: 2X4T2yat0/AJqHtELk3EraWcUUc= + +Name: chrome/locale/zh-CN/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 7WRDyMx26GnCJRG0z+R3IQ== +SHA1-Digest: aF/qWGBba52OatyWDhlqkFVlX8c= + +Name: chrome/locale/zh-CN/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: YWMkr4TUHtYPXGKwyvuklQ== +SHA1-Digest: hm4D1wtxncd/pRy7KEHThSIdKsg= + +Name: chrome/locale/zh/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/zh/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: YtS2epu01TazFPbFmpsI/g== +SHA1-Digest: Cv7tQJ78lyhjEuq0PYh91QMdi8E= + +Name: chrome/locale/zh/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/zh_CN.GB2312/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: yfo7YQeeQ66zBw59nBFIaA== +SHA1-Digest: amF5uU+jEDSlVdXfDCdz02fZr0Y= + +Name: chrome/locale/zh_CN.GB2312/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: YtS2epu01TazFPbFmpsI/g== +SHA1-Digest: Cv7tQJ78lyhjEuq0PYh91QMdi8E= + +Name: chrome/locale/zh_CN.GB2312/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: jfitnUpdvsWwJ3JxBjohGg== +SHA1-Digest: i3jufc9C9o2N98F2HpEpUn0tni8= + +Name: chrome/locale/zh_HK/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Qwid2vWFnc6NAYh8YSVHng== +SHA1-Digest: xhy+uxDfTWUU5ayQttP4EtSYltE= + +Name: chrome/locale/zh_HK/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: N/fxK3TbM42McThylOYCZg== +SHA1-Digest: ipz0PPOkCfrh1zrB4gAOVvv6FGA= + +Name: chrome/locale/zh_HK/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: VI5hHXDTwYBc9V6zpcgKBA== +SHA1-Digest: Ysacze8GSOFsyR9GUVKJd9TykYE= + +Name: chrome/locale/zh_TW/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 8Cw6ci4yvrp1rYuR0GEK5w== +SHA1-Digest: TTJuvenzDgkMlu4cj4eHyE0eoCQ= + +Name: chrome/locale/zh_TW/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: p1L8+gg/bwIWu5fN4fGnsA== +SHA1-Digest: 57Mey+G1jnjNhTgTw9n78Kkqejg= + +Name: chrome/locale/zh_TW/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: bYXoQZMMz/OFsgFKUbmczA== +SHA1-Digest: GFJ5aPMhyUI/cwjTY/Cv3imKs5Q= + +Name: chrome/locale/zu/https-everywhere.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /LMdumbZxkctzFI2q9kbTw== +SHA1-Digest: PtyTCbC8kYortQT7iyRNfOHljag= + +Name: chrome/locale/zu/https-everywhere.properties +Digest-Algorithms: MD5 SHA1 +MD5-Digest: XDAzRIKmfyAo2rnb6Rw+Kw== +SHA1-Digest: FyxdJkAsnBOyiBFHWAthoWu72Ds= + +Name: chrome/locale/zu/ssl-observatory.dtd +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hl9eTckPVjvEcAIp5mY7aA== +SHA1-Digest: xrBgVJCRqLeGb/wPIqZ7EdXqXgU= + +Name: chrome/skin/cross.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: bgHvUPVhsTSHZ6/9OiM9GQ== +SHA1-Digest: lRQBVkT7+spdDBm/AcnceJCVonA= + +Name: chrome/skin/eff-16.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: HGyJUQ/uTVld1pcjT1SNvA== +SHA1-Digest: nwX4H0BzO0cZ4eXxw6OGTzMWLJU= + +Name: chrome/skin/https-everywhere-128.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: tDx9xdTq6mFpDq+NoGB/1g== +SHA1-Digest: O/sOrTssRNlo4MCNbG+H5M2/RnY= + +Name: chrome/skin/https-everywhere-16-gray.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: /uZbLpQ6tAloLwSgdUwUuQ== +SHA1-Digest: jffcr/V5gbI9i7X5QzTF17vwh9I= + +Name: chrome/skin/https-everywhere-16-red.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: F8Lv4r2BP20psRFbodiOEg== +SHA1-Digest: 0wcdNI9Bxh7yN5MvcrY2YkUDc6E= + +Name: chrome/skin/https-everywhere-16.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: VP3H0R1tFxW92ZykNUW6dA== +SHA1-Digest: pPlwxdQpsxlcbYJrEZ8OFCSETmM= + +Name: chrome/skin/https-everywhere-24-gray.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: ldkMJFFYJBfHqqAYo80Cqg== +SHA1-Digest: txq2dBI5m/3WxUCRCbC05Ouzm44= + +Name: chrome/skin/https-everywhere-24-red.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: BgED7Un11JwVKlLiWfcGbQ== +SHA1-Digest: +V5WC+nwrt9vWfit5f88SINvosg= + +Name: chrome/skin/https-everywhere-24.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: hRiBGCvtxhdWU+kdz9Bs4w== +SHA1-Digest: N0dAERhSEbx+CzAkPJW8vNZDZGA= + +Name: chrome/skin/https-everywhere-banner.jpg +Digest-Algorithms: MD5 SHA1 +MD5-Digest: rvASLHcCTzxIpHhK3uui/w== +SHA1-Digest: 1OWO9r6SHq27vU2JrXjkJoZeMmQ= + +Name: chrome/skin/https-everywhere-half-24.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: hRiBGCvtxhdWU+kdz9Bs4w== +SHA1-Digest: N0dAERhSEbx+CzAkPJW8vNZDZGA= + +Name: chrome/skin/https-everywhere.css +Digest-Algorithms: MD5 SHA1 +MD5-Digest: U5sreUDk5IRxECkJrHIGHg== +SHA1-Digest: Y0XVRNzGkJKL89rotsgGv3jrlDY= + +Name: chrome/skin/https-everywhere.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9O/4Vj/ai47FKvqYib+WCA== +SHA1-Digest: Cec+Ldtuejaj5Veu2L2HiNLuvAE= + +Name: chrome/skin/loop.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: JhmXqu7bW4uq+9HnGmVpwg== +SHA1-Digest: PQem1uTMEFYpmKO7yn3BMnFSnUo= + +Name: chrome/skin/ssl-observatory-messy.jpg +Digest-Algorithms: MD5 SHA1 +MD5-Digest: L2pRKIgu3Cq2pakKS2TJVg== +SHA1-Digest: eDWqW3/z5rs3PnFKNEIZBO1Qv0s= + +Name: chrome/skin/tick-moot.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: wQ8ZYkcOtFOWLKLeaDsGVw== +SHA1-Digest: 1YrCtnOCobbHuua8II86Z3PYphs= + +Name: chrome/skin/tick.png +Digest-Algorithms: MD5 SHA1 +MD5-Digest: a8GmLX+5SSrILGWEISWLKg== +SHA1-Digest: wKpcrCI+KRe71KlW3HJsvtEnKA0= + +Name: components/https-everywhere.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: sFC5jhvyH2qyuDMAcrXNqQ== +SHA1-Digest: YAG+JSJqgXlaxhHHtx8/kIZxFjY= + +Name: components/ssl-observatory.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: dKSOqxTZFjH4JhX84WXtXQ== +SHA1-Digest: LGQm7JL+K7OXvISV2ej0/QFJqjo= + +Name: defaults/rulesets.sqlite +Digest-Algorithms: MD5 SHA1 +MD5-Digest: 9jhEKPwFM8ZDm0bRGakI/w== +SHA1-Digest: QCSXSthBbHp7BiMO3ioKJk8MTT8= + +Name: defaults/preferences/preferences.js +Digest-Algorithms: MD5 SHA1 +MD5-Digest: Hvk31b+DjMnRcUxHQEX+zw== +SHA1-Digest: 0IkerBi6u7H08qlyjijIJ6cwvdY= + diff --git a/src/META-INF/mozilla.rsa b/src/META-INF/mozilla.rsa new file mode 100644 index 0000000000..a0cc68535d Binary files /dev/null and b/src/META-INF/mozilla.rsa differ diff --git a/src/META-INF/mozilla.sf b/src/META-INF/mozilla.sf new file mode 100644 index 0000000000..cf74f3a900 --- /dev/null +++ b/src/META-INF/mozilla.sf @@ -0,0 +1,4 @@ +Signature-Version: 1.0 +MD5-Digest-Manifest: vbpn/nBFmE05CaCJoguRPw== +SHA1-Digest-Manifest: BAveeiq1RF0sEUaGHlHtESNt/eM= + diff --git a/src/chrome.manifest b/src/chrome.manifest index 3764fa697c..37d5ffead2 100644 --- a/src/chrome.manifest +++ b/src/chrome.manifest @@ -2,38 +2,52 @@ content https-everywhere chrome/content/ override chrome://https-everywhere/content/rulesets.sqlite defaults/rulesets.sqlite locale https-everywhere en chrome/locale/en/ -locale https-everywhere lt chrome/locale/lt/ -locale https-everywhere lv chrome/locale/lv/ -locale https-everywhere pt chrome/locale/pt/ -locale https-everywhere sv chrome/locale/sv/ +locale https-everywhere ar chrome/locale/ar/ +locale https-everywhere bg chrome/locale/bg/ +locale https-everywhere ca chrome/locale/ca/ +locale https-everywhere cs chrome/locale/cs/ +locale https-everywhere da chrome/locale/da/ locale https-everywhere de chrome/locale/de/ -locale https-everywhere ru chrome/locale/ru/ -locale https-everywhere zh-CN chrome/locale/zh-CN/ -locale https-everywhere zh-TW chrome/locale/zh-TW/ +locale https-everywhere el chrome/locale/el/ +locale https-everywhere en-GB chrome/locale/en_GB/ locale https-everywhere es chrome/locale/es/ -locale https-everywhere nl chrome/locale/nl/ -locale https-everywhere ar chrome/locale/ar/ -locale https-everywhere fa chrome/locale/fa/ +locale https-everywhere et chrome/locale/et/ locale https-everywhere eu chrome/locale/eu/ +locale https-everywhere fa chrome/locale/fa/ +locale https-everywhere fi chrome/locale/fi/ +locale https-everywhere fo chrome/locale/fo/ locale https-everywhere fr chrome/locale/fr/ -locale https-everywhere pl chrome/locale/pl/ -locale https-everywhere sk chrome/locale/sk/ -locale https-everywhere ms chrome/locale/ms/ -locale https-everywhere da chrome/locale/da/ -locale https-everywhere el chrome/locale/el/ +locale https-everywhere fr-CA chrome/locale/fr_CA/ +locale https-everywhere he chrome/locale/he/ +locale https-everywhere hr-HR chrome/locale/hr_HR/ locale https-everywhere hu chrome/locale/hu/ locale https-everywhere it chrome/locale/it/ -locale https-everywhere tr chrome/locale/tr/ +locale https-everywhere ja chrome/locale/ja/ +locale https-everywhere km chrome/locale/km/ locale https-everywhere ko chrome/locale/ko/ -locale https-everywhere cs chrome/locale/cs/ -locale https-everywhere hr chrome/locale/hr/ -locale https-everywhere he chrome/locale/he/ -locale https-everywhere fi chrome/locale/fi/ +locale https-everywhere lt chrome/locale/lt/ +locale https-everywhere lv chrome/locale/lv/ +locale https-everywhere ms-MY chrome/locale/ms_MY/ locale https-everywhere nb chrome/locale/nb/ +locale https-everywhere nl chrome/locale/nl/ +locale https-everywhere pl chrome/locale/pl/ +locale https-everywhere pt chrome/locale/pt/ +locale https-everywhere pt-BR chrome/locale/pt_BR/ +locale https-everywhere ro chrome/locale/ro/ +locale https-everywhere ru chrome/locale/ru/ +locale https-everywhere si-LK chrome/locale/si_LK/ +locale https-everywhere sk chrome/locale/sk/ +locale https-everywhere sk-SK chrome/locale/sk_SK/ locale https-everywhere sl chrome/locale/sl/ -locale https-everywhere bg chrome/locale/bg/ -locale https-everywhere ja chrome/locale/ja/ -locale https-everywhere si chrome/locale/si/ +locale https-everywhere sl-SI chrome/locale/sl_SI/ +locale https-everywhere sq chrome/locale/sq/ +locale https-everywhere sr chrome/locale/sr/ +locale https-everywhere sv chrome/locale/sv/ +locale https-everywhere th chrome/locale/th/ +locale https-everywhere tr chrome/locale/tr/ +locale https-everywhere uk chrome/locale/uk/ +locale https-everywhere zh-CN chrome/locale/zh-CN/ +locale https-everywhere zh-TW chrome/locale/zh_TW/ skin https-everywhere classic/1.0 chrome/skin/ diff --git a/src/chrome/content/about.js b/src/chrome/content/about.js new file mode 100644 index 0000000000..7a37815f14 --- /dev/null +++ b/src/chrome/content/about.js @@ -0,0 +1,14 @@ +const CC = Components.classes; + +function window_opener(uri) { + // we don't use window.open, because we need to work around TorButton's state control + if(typeof gBrowser == "undefined"){ + var window = CC["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); + var browserWindow = window.getMostRecentWindow("navigator:browser").getBrowser(); + var newTab = browserWindow.addTab(uri, null, null); + browserWindow.selectedTab = newTab; + + } + else + gBrowser.selectedTab = gBrowser.addTab(uri); +} diff --git a/src/chrome/content/about.xul b/src/chrome/content/about.xul index 585f79fc76..e7882613e9 100644 --- a/src/chrome/content/about.xul +++ b/src/chrome/content/about.xul @@ -14,14 +14,31 @@ align="center">