tbb-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 18735 discussions

15 Oct '20
commit 7b3991c9ba73b514cdedf23d2d54df3166454466
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon May 18 15:55:45 2020 +0200
Fix several bridge tests
---
tor-config/meek_config | 2 +-
tor-config/tor_bridge.conf | 2 +-
tor-config/tor_meek-azure.conf | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tor-config/meek_config b/tor-config/meek_config
index c851390..a795e1d 100644
--- a/tor-config/meek_config
+++ b/tor-config/meek_config
@@ -1,4 +1,4 @@
[% INCLUDE main_config %]
-ClientTransportPlugin meek exec [% tbbinfos.ptdir %]/meek-client-torbrowser -- [% tbbinfos.ptdir %]/meek-client
+ClientTransportPlugin meek_lite exec [% tbbinfos.ptdir %]/obfs4proxy
diff --git a/tor-config/tor_bridge.conf b/tor-config/tor_bridge.conf
index f9a5d7e..5d82115 100644
--- a/tor-config/tor_bridge.conf
+++ b/tor-config/tor_bridge.conf
@@ -1,4 +1,4 @@
[% INCLUDE main_config %]
UseBridges 1
-Bridge 83.212.101.3:6666
+Bridge 35.170.192.213:12358
diff --git a/tor-config/tor_meek-azure.conf b/tor-config/tor_meek-azure.conf
index 29f8601..0da1b9f 100644
--- a/tor-config/tor_meek-azure.conf
+++ b/tor-config/tor_meek-azure.conf
@@ -1,4 +1,4 @@
[% INCLUDE meek_config %]
UseBridges 1
-Bridge meek 0.0.2.0:3 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com
+Bridge meek_lite 0.0.2.0:2 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com
1
0

15 Oct '20
commit 72d4af38812d87fc43e66891bc1e049f83f9ddb1
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon May 18 17:44:23 2020 +0200
Enable noscript test
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 2 --
marionette/tor_browser_tests/test_noscript.py | 3 +--
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index b7014f4..4a8908e 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -397,8 +397,6 @@ our @tests = (
prefs => {
'extensions.torbutton.security_slider' => 2,
},
- # Bug 28876: temporarily disable test
- enable => sub { undef },
},
{
name => 'fp_screen_dimensions',
diff --git a/marionette/tor_browser_tests/test_noscript.py b/marionette/tor_browser_tests/test_noscript.py
index 6c3fdeb..8083098 100644
--- a/marionette/tor_browser_tests/test_noscript.py
+++ b/marionette/tor_browser_tests/test_noscript.py
@@ -7,7 +7,6 @@ from marionette_harness import MarionetteTestCase
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
@@ -21,7 +20,7 @@ class Test(MarionetteTestCase):
def test_noscript(self):
- self.marionette.set_search_timeout(1000)
+ self.marionette.timeout.implicit = 1
with self.marionette.using_context('content'):
1
0

[tor-browser-bundle-testsuite/master] Bug 40002: Add test for 'Add v3 onion services client authentication prompt' TB patch
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit 5c0a4650a88d4b616fb36afc2a57ebb78ab7f539
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Jul 3 00:53:46 2020 +0200
Bug 40002: Add test for 'Add v3 onion services client authentication prompt' TB patch
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 7 +
TBBTestSuite/Tests/TorBootstrap.pm | 4 +
.../tor_browser_tests/test_onion_client_auth.py | 215 +++++++++++++++++++++
3 files changed, 226 insertions(+)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 37efae6..7d6c110 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -494,6 +494,13 @@ our @tests = (
use_net => 1,
descr => 'Check that onion alias urlbar rewrites work properly',
},
+ {
+ name => 'onion_client_auth',
+ type => 'marionette',
+ use_net => 1,
+ descr => 'Check that onion client auth works properly',
+ run_once => 1,
+ },
{
name => 'security_level_ui',
type => 'marionette',
diff --git a/TBBTestSuite/Tests/TorBootstrap.pm b/TBBTestSuite/Tests/TorBootstrap.pm
index f35b4a2..006be59 100644
--- a/TBBTestSuite/Tests/TorBootstrap.pm
+++ b/TBBTestSuite/Tests/TorBootstrap.pm
@@ -153,11 +153,15 @@ sub start_tor {
}
write_file("$tbbinfos->{datadir}/Tor/torrc", ())
unless -f "$tbbinfos->{datadir}/Tor/torrc";
+ # These arguments should be kept in sync with tor-launcher
+ mkdir "$tbbinfos->{datadir}/Tor/onion-auth" unless -d "$tbbinfos->{datadir}/Tor/onion-auth";
my @cmd = (winpath($tbbinfos->{torbin}), '--defaults-torrc',
winpath($torrc_file),
'-f', winpath("$tbbinfos->{datadir}/Tor/torrc"),
'DataDirectory', winpath("$tbbinfos->{datadir}/Tor"),
'GeoIPFile', winpath($tbbinfos->{torgeoip}),
+ 'ClientOnionAuthDir', winpath("$tbbinfos->{datadir}/Tor/onion-auth"),
+ '__SocksPort', "$options->{'tor-socks-port'} ExtendedErrors IPv6Traffic PreferIPv6 KeepAliveIsolateSOCKSAuth",
'__OwningControllerProcess', winpid($$));
$tbbinfos->{torpid} = fork;
if ($tbbinfos->{torpid} == 0) {
diff --git a/marionette/tor_browser_tests/test_onion_client_auth.py b/marionette/tor_browser_tests/test_onion_client_auth.py
new file mode 100644
index 0000000..38c8a34
--- /dev/null
+++ b/marionette/tor_browser_tests/test_onion_client_auth.py
@@ -0,0 +1,215 @@
+from marionette_driver import By, Wait
+from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
+from marionette_driver.legacy_actions import Actions
+from marionette_harness import MarionetteTestCase, WindowManagerMixin
+
+import testsuite
+
+from stem.control import Controller
+from stem.process import launch_tor_with_config
+
+from urlparse import urlparse
+from tempfile import mkdtemp
+import shutil
+import os
+import base64
+
+import time
+
+
+class Test(WindowManagerMixin, MarionetteTestCase):
+ def setUp(self):
+ super(Test, self).setUp()
+
+ self.public_key = 'E4ST65PDZDVZRAW2FLT5RBFKYEM3GW73SRQDMEBLBDHQP3Y4NADQ'
+ self.private_key = 'B7H4TVVQNEOIENRS3GW3GI4VLVTSZPKS7NVSJAIDTNLBRWKWPHLQ'
+
+ self.tmp_dir = mkdtemp()
+ fixtures_port = urlparse(self.marionette.absolute_url('')).port
+ os.mkdir(os.path.join(self.tmp_dir, 'hidden_service'), 0700)
+ os.mkdir(os.path.join(self.tmp_dir, 'hidden_service',
+ 'authorized_clients'), 0700)
+ with open(os.path.join(self.tmp_dir, 'hidden_service', 'authorized_clients', 'alice.auth'), "w") as myfile:
+ myfile.write("descriptor:x25519:" + self.public_key + '\n')
+
+ # Add tor executable directory to the LD_LIBRARY_PATH
+ ld_lib_list = filter(len, os.environ.get(
+ "LD_LIBRARY_PATH", "").split(":"))
+ tor_dirname = os.path.dirname(
+ testsuite.TestSuite().t['tbbinfos']['torbin'])
+ if tor_dirname not in ld_lib_list:
+ ld_lib_list = [tor_dirname] + ld_lib_list
+ os.environ["LD_LIBRARY_PATH"] = ":".join(ld_lib_list)
+
+ self.tor_process = launch_tor_with_config(
+ config={
+ 'ControlPort': '9999',
+ 'SOCKSPort': '0',
+ 'DataDirectory': self.tmp_dir,
+ 'HiddenServiceDir': os.path.join(self.tmp_dir, 'hidden_service'),
+ 'HiddenServicePort': '80 127.0.0.1:' + str(fixtures_port),
+ },
+ take_ownership=True,
+ tor_cmd=testsuite.TestSuite().t['tbbinfos']['torbin']
+ )
+
+ with open(os.path.join(self.tmp_dir, 'hidden_service', 'hostname'), 'r') as myfile:
+ self.onion = myfile.read().strip()
+
+ self.controller = Controller.from_port(port=9999)
+ self.controller.authenticate()
+
+ def is_published(_):
+ try:
+ self.controller.get_hidden_service_descriptor(self.onion)
+ return True
+ except:
+ return False
+ Wait(self.marionette, timeout=10).until(is_published)
+ # Wait a reasonable amount of time to increase the chances of the service to work
+ time.sleep(10)
+
+ def tearDown(self):
+ self.controller.close()
+ self.tor_process.terminate()
+ shutil.rmtree(self.tmp_dir, ignore_errors=True)
+ super(Test, self).tearDown()
+
+ def load_onion(self, onion=None, wait_auth=True):
+ if not onion:
+ onion = self.onion
+ m = self.marionette
+ with m.using_context('content'):
+ self.marionette.execute_script(
+ 'window.location = "http://' + onion + '/dom-objects-enumeration.html";')
+ if wait_auth:
+ with m.using_context('chrome'):
+ Wait(m, timeout=m.timeout.page_load).until(lambda _: m.find_element(
+ 'id', 'tor-clientauth-notification-key').is_displayed())
+
+ def check_errors(self, title, short, long):
+ m = self.marionette
+ with m.using_context('content'):
+ Wait(m, timeout=m.timeout.page_load).until(lambda _: m.find_element(
+ 'css selector', '#text-container .title-text').text != '')
+ self.assertEqual(m.find_element(
+ 'css selector', '#text-container .title-text').text, title)
+ self.assertEqual(m.find_element(
+ 'id', 'errorShortDescText').text, short)
+ self.assertEqual(m.find_element('id', 'errorLongDesc').text, long)
+
+ def get_keys(self):
+ with self.marionette.using_context('content'):
+ self.marionette.navigate("about:preferences#privacy")
+ self.marionette.find_element(
+ 'id', 'torOnionServiceKeys-savedKeys').click()
+ return self.marionette.execute_script('''
+ const dialog = document.querySelector('.dialogFrame');
+ const tree = dialog.contentDocument.querySelector('#onionservices-savedkeys-tree');
+ const view = tree.view;
+ const rowCount = view.rowCount;
+ const result = [];
+ for (let i = 0; i < rowCount; ++i) {
+ result.push([
+ view.getCellText(i, tree.columns[0]),
+ view.getCellText(i, tree.columns[1]),
+ ]);
+ }
+ return result;
+ ''')
+
+ def new_identity(self):
+ m = self.marionette
+ with m.using_context('chrome'):
+ m.set_pref('extensions.torbutton.confirm_newnym', False)
+ m.find_element('id', 'new-identity-button').click()
+ # Wait some time for new identity to finish.
+ time.sleep(2)
+ # Reload marionette session after new identity.
+ self.marionette.quit()
+ self.marionette.start_session()
+ self.marionette.timeout.implicit = 10
+
+ def delete_all_keys(self):
+ with self.marionette.using_context('content'):
+ self.marionette.navigate("about:preferences#privacy")
+ self.marionette.find_element(
+ 'id', 'torOnionServiceKeys-savedKeys').click()
+ return self.marionette.execute_script('''
+ const dialog = document.querySelector('.dialogFrame');
+ dialog.contentDocument.querySelector('#onionservices-savedkeys-removeall').click();
+ ''')
+
+ def test_client_auth(self):
+ m = self.marionette
+ m.timeout.implicit = 10
+
+ # Cancel auth
+ self.load_onion()
+ with m.using_context('chrome'):
+ cancel = m.find_element(
+ 'css selector', '#tor-clientauth-notification .popup-notification-secondary-button')
+ cancel.click()
+
+ self.check_errors('Onionsite Requires Authentication', 'Access to the onionsite requires a key but none was provided.',
+ u'Details: 0xF4 \u2014 The client downloaded the requested onion service descriptor but was unable to decrypt its content because client authorization information is missing.')
+
+ # Wrong auth
+ self.load_onion()
+ with m.using_context('chrome'):
+ m.find_element('id', 'tor-clientauth-notification-key').send_keys(
+ 'E4ST65PDZDVZRAW2FLT5RBFKYEM3GW73SRQDMEBLBDHQP3Y4NADQ')
+ m.find_element(
+ 'css selector', '#tor-clientauth-notification .popup-notification-primary-button').click()
+ Wait(m, timeout=m.timeout.page_load).until(lambda _: not m.find_element(
+ 'id', 'tor-clientauth-notification-key').is_displayed())
+ Wait(m, timeout=m.timeout.page_load).until(lambda _: m.find_element(
+ 'id', 'tor-clientauth-notification-key').is_displayed())
+
+ # Good auth, don't remember key
+ with m.using_context('chrome'):
+ m.find_element(
+ 'id', 'tor-clientauth-notification-key').send_keys(self.private_key)
+ m.find_element(
+ 'css selector', '#tor-clientauth-notification .popup-notification-primary-button').click()
+ with m.using_context('content'):
+ m.find_element('id', 'enumeration')
+ keys = self.get_keys()
+ self.assertEqual(len(keys), 0)
+ self.new_identity()
+ self.load_onion() # This will block if the auth prompt is not displayed
+
+ # Good auth, remember key
+ with m.using_context('chrome'):
+ m.find_element(
+ 'id', 'tor-clientauth-notification-key').send_keys(self.private_key)
+ m.find_element('id', 'tor-clientauth-persistkey-checkbox').click()
+ m.find_element(
+ 'css selector', '#tor-clientauth-notification .popup-notification-primary-button').click()
+ with m.using_context('content'):
+ m.find_element('id', 'enumeration')
+ keys = self.get_keys()
+ self.assertEqual(len(keys), 1)
+ self.assertEqual(keys[0][0], self.onion[:-6])
+ self.assertEqual(keys[0][1], base64.b64encode(
+ base64.b32decode(self.private_key + '====')))
+ self.new_identity()
+ with m.using_context('content'):
+ m.navigate('http://' + self.onion +
+ '/dom-objects-enumeration.html') # Should not block
+
+ self.delete_all_keys()
+ # Wait a bit, otherwise it sometimes loads the onion without the auth prompt
+ time.sleep(5)
+ with m.using_context('content'):
+ self.load_onion() # Load and wait for the auth doorgahnger
+
+ # Check invalid onion address error
+ with m.using_context('content'):
+ bad_char = 'a' if self.onion[-7:-6] != 'a' else 'b'
+ self.load_onion(
+ onion=self.onion[:-7] + bad_char + ".onion", wait_auth=False)
+ self.check_errors('Invalid Onionsite Address', 'The provided onionsite address is invalid. Please check that you entered it correctly.',
+ u'Details: 0xF6 \u2014 The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn\'t match, the ed25519 public key is invalid, or the encoding is invalid.')
+
+ # TODO: check other onion errors
1
0

[tor-browser-bundle-testsuite/master] Bug 40004: Add test for 'Implement .onion alias urlbar rewrites' TB patch
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit cf696e9f07b8716e8115d59d9651982f3702fa32
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 29 19:54:14 2020 +0200
Bug 40004: Add test for 'Implement .onion alias urlbar rewrites' TB patch
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 6 +++
marionette/tor_browser_tests/test_onion_alias.py | 67 ++++++++++++++++++++++++
2 files changed, 73 insertions(+)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 5a642ef..931ab70 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -488,6 +488,12 @@ our @tests = (
use_net => 1,
descr => 'Check that Onion-Location header handling works correctly',
},
+ {
+ name => 'onion_alias',
+ type => 'marionette',
+ use_net => 1,
+ descr => 'Check that onion alias urlbar rewrites work properly',
+ },
);
sub set_test_prefs {
diff --git a/marionette/tor_browser_tests/test_onion_alias.py b/marionette/tor_browser_tests/test_onion_alias.py
new file mode 100644
index 0000000..1495906
--- /dev/null
+++ b/marionette/tor_browser_tests/test_onion_alias.py
@@ -0,0 +1,67 @@
+from marionette_driver import By, Wait
+from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
+from marionette_driver.legacy_actions import Actions
+from marionette_harness import MarionetteTestCase, WindowManagerMixin
+
+import time
+
+
+class Test(WindowManagerMixin, MarionetteTestCase):
+ def get_urlbar_value(self):
+ with self.marionette.using_context('chrome'):
+ return self.marionette.execute_script("return gURLBar.value;")
+
+ def test_onion_alias(self):
+ m = self.marionette
+ m.timeout.implicit = 10
+
+ # Wait until .tor.onion rules have been loaded
+ with m.using_context('chrome'):
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.execute_script("return OnionAliasStore._onionMap.size;") > 0)
+
+ with m.using_context('content'):
+ # Navigating to a known .tor.onion should redirect and rewrite the urlbar with the alias.
+ m.navigate('http://theintercept.securedrop.tor.onion')
+ self.assertEqual(m.get_url(
+ ), 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion/')
+ self.assertEqual(self.get_urlbar_value(),
+ 'theintercept.securedrop.tor.onion')
+
+ # Bookmark should be created with the onion alias URL
+ with m.using_context('chrome'):
+ m.find_element('id', 'star-button-box').click()
+ m.find_element('id', 'editBookmarkPanelDoneButton').click()
+ recent_bookmarks = m.execute_script(
+ "return PlacesUtils.bookmarks.getRecent(1);")
+ self.assertEqual(
+ recent_bookmarks[0]["url"], "http://theintercept.securedrop.tor.onion/")
+
+ # Opening a same-origin link should keep the onion alias in the urlbar
+ el = m.find_element('id', 'submit-documents-button')
+ action = Actions(m)
+ action.middle_click(el)
+ action.perform()
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 1)
+ m.switch_to_window(m.window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != 'about:blank')
+ self.assertEqual(m.get_url(
+ ), 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion/gener…')
+ self.assertEqual(self.get_urlbar_value(),
+ 'theintercept.securedrop.tor.onion/generate')
+ m.close()
+ m.switch_to_window(m.window_handles[0])
+
+ # Going directly to .onion should not rewrite the urlbar
+ new_tab = self.open_tab()
+ m.switch_to_window(new_tab)
+ m.navigate(
+ 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion')
+ self.assertEqual(m.get_url(
+ ), 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion/')
+ self.assertEqual(self.get_urlbar_value(
+ ), 'xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion')
+ m.close()
+ m.switch_to_window(self.start_tab)
1
0

[tor-browser-bundle-testsuite/master] Bug 40003: Add test for 'Implement Onion-Location' TB patch
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit fe257166a6e9a5bb4100a24674f98eed86822572
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 29 19:41:47 2020 +0200
Bug 40003: Add test for 'Implement Onion-Location' TB patch
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 6 +
.../tor_browser_tests/test_onion_location.py | 135 +++++++++++++++++++++
2 files changed, 141 insertions(+)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 834641e..5a642ef 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -482,6 +482,12 @@ our @tests = (
use_net => 1,
descr => 'Check onion security expectations',
},
+ {
+ name => 'onion_location',
+ type => 'marionette',
+ use_net => 1,
+ descr => 'Check that Onion-Location header handling works correctly',
+ },
);
sub set_test_prefs {
diff --git a/marionette/tor_browser_tests/test_onion_location.py b/marionette/tor_browser_tests/test_onion_location.py
new file mode 100644
index 0000000..1188250
--- /dev/null
+++ b/marionette/tor_browser_tests/test_onion_location.py
@@ -0,0 +1,135 @@
+from marionette_driver import By, Wait
+from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
+
+from marionette_harness import MarionetteTestCase, WindowManagerMixin
+
+
+class Test(WindowManagerMixin, MarionetteTestCase):
+
+ def test_onion_location(self):
+ m = self.marionette
+ m.timeout.implicit = 10
+
+ self.assertEqual(None, m.get_pref(
+ 'privacy.prioritizeonions.showNotification'))
+
+ with m.using_context('content'):
+ m.navigate('https://www.torproject.org/')
+
+ with m.using_context('chrome'):
+ # Check whether the urlbar badge is displayed
+ self.assertTrue(m.find_element(
+ 'id', 'onion-location-box').is_displayed())
+
+ # Check whether the notification is displayed the first time
+ notification = m.find_element('id', 'onion-location-notification')
+ self.assertTrue(notification.is_displayed())
+ self.assertFalse(m.get_pref(
+ 'privacy.prioritizeonions.showNotification'))
+ always_prioritize = notification.find_element(
+ 'css selector', '.popup-notification-primary-button')
+ self.assertEqual(always_prioritize.get_attribute(
+ 'label'), 'Always Prioritize Onions')
+
+ # Check learn more link
+ notification.find_element(
+ 'css selector', '.popup-notification-learnmore-link').click()
+ with m.using_context('content'):
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 1)
+ m.switch_to_window(m.window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != "about:blank")
+ self.assertEqual(
+ m.get_url(), "https://tb-manual.torproject.org/onion-services/")
+ m.close()
+ m.switch_to_window(m.window_handles[0])
+
+ with m.using_context('chrome'):
+ # Close the notification and check that it's not displayed anymore.
+ notification = m.find_element('id', 'onion-location-notification')
+ not_now = notification.find_element(
+ 'css selector', '.popup-notification-secondary-button')
+ self.assertEqual(not_now.get_attribute('label'), 'Not Now')
+ not_now.click()
+ try:
+ self.assertFalse(m.find_element(
+ 'id', 'onion-location-notification').is_displayed())
+ except NoSuchElementException:
+ pass
+
+ # Show the notification again
+ m.set_pref('privacy.prioritizeonions.showNotification', None)
+ new_tab = self.open_tab()
+ m.switch_to_window(new_tab)
+ m.close()
+ m.switch_to_window(self.start_tab)
+
+ # Click "Always prioritize" in the notification
+ notification = m.find_element('id', 'onion-location-notification')
+ notification.find_element(
+ 'css selector', '.popup-notification-primary-button').click()
+ self.assertTrue(m.get_pref('privacy.prioritizeonions.enabled'))
+
+ with m.using_context('content'):
+ m.switch_to_window(m.window_handles[1])
+ self.assertEqual(
+ m.get_url(), 'about:preferences#privacy-onionservices')
+ m.close()
+ m.switch_to_window(self.start_tab)
+
+ # Check that the original page is redirected to .onion
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != 'https://www.torproject.org/')
+ self.assertEqual(
+ m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+
+ # Check that auto-redirects work
+ m.navigate('https://www.torproject.org/')
+ self.assertEqual(m.get_url(), 'https://www.torproject.org/')
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != 'https://www.torproject.org/')
+ self.assertEqual(
+ m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+
+ # Go to preferences and disable auto-redirects
+ new_tab = self.open_tab()
+ m.switch_to_window(new_tab)
+ m.navigate('about:preferences#privacy-onionservices')
+ m.find_element('id', 'onionServicesRadioAsk').click()
+ self.assertFalse(m.get_pref(
+ 'privacy.prioritizeonions.enabled'))
+ m.close()
+ m.switch_to_window(self.start_tab)
+ m.navigate('https://www.torproject.org/')
+ try:
+ Wait(m, timeout=5).until(lambda _: m.get_url()
+ != 'https://www.torproject.org/')
+ self.assertTrue(False, "Should not redirect")
+ except TimeoutException:
+ pass
+
+ # Check that the page is redirected when clicking on the urlbar badge
+ with m.using_context('chrome'):
+ self.assertTrue(m.find_element(
+ 'id', 'onion-location-box').is_displayed())
+ m.find_element('id', 'onion-location-box').click()
+ with m.using_context('content'):
+ Wait(m, timeout=5).until(lambda _: m.get_url()
+ != 'https://www.torproject.org/')
+ self.assertEqual(
+ m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+
+ # Check learn more link
+ with m.using_context('content'):
+ m.navigate('about:preferences#privacy-onionservices')
+ m.find_element('id', 'onionServicesLearnMore').click()
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 1)
+ m.switch_to_window(m.window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != "about:blank")
+ self.assertEqual(
+ m.get_url(), "https://tb-manual.torproject.org/onion-services/")
+ m.close()
+ m.switch_to_window(m.window_handles[0])
1
0

[tor-browser-bundle-testsuite/master] Fix onion location test issue in 81
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit 120a97eb4b3c0250ce4613a8f314dcd3841430fb
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Aug 27 22:10:27 2020 +0200
Fix onion location test issue in 81
---
.../tor_browser_tests/test_onion_location.py | 36 ++++++++++++++--------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/marionette/tor_browser_tests/test_onion_location.py b/marionette/tor_browser_tests/test_onion_location.py
index 1188250..d028d04 100644
--- a/marionette/tor_browser_tests/test_onion_location.py
+++ b/marionette/tor_browser_tests/test_onion_location.py
@@ -5,6 +5,16 @@ from marionette_harness import MarionetteTestCase, WindowManagerMixin
class Test(WindowManagerMixin, MarionetteTestCase):
+ # To be investigated in #40007:
+ # In 81, marionette.get_url() sometimes fails with:
+ # `UnknownException: TypeError: browsingContext.currentWindowGlobal is null`
+ # It happens when clicking "Always Prioritize Onions" in the doorhanger:
+ # opens a new tab + refreshes the previous one, then when we close the new tab
+ # and move to the old one, marionette.get_url() throws the error.
+ # Until a proper fix, this workaround seems to work fine.
+ def get_url(self):
+ with self.marionette.using_context('content'):
+ return self.marionette.execute_script("return document.location.href;")
def test_onion_location(self):
m = self.marionette
@@ -39,9 +49,9 @@ class Test(WindowManagerMixin, MarionetteTestCase):
lambda _: len(m.window_handles) > 1)
m.switch_to_window(m.window_handles[1])
Wait(m, timeout=m.timeout.page_load).until(
- lambda _: m.get_url() != "about:blank")
+ lambda _: self.get_url() != "about:blank")
self.assertEqual(
- m.get_url(), "https://tb-manual.torproject.org/onion-services/")
+ self.get_url(), "https://tb-manual.torproject.org/onion-services/")
m.close()
m.switch_to_window(m.window_handles[0])
@@ -74,23 +84,23 @@ class Test(WindowManagerMixin, MarionetteTestCase):
with m.using_context('content'):
m.switch_to_window(m.window_handles[1])
self.assertEqual(
- m.get_url(), 'about:preferences#privacy-onionservices')
+ self.get_url(), 'about:preferences#privacy-onionservices')
m.close()
m.switch_to_window(self.start_tab)
# Check that the original page is redirected to .onion
Wait(m, timeout=m.timeout.page_load).until(
- lambda _: m.get_url() != 'https://www.torproject.org/')
+ lambda _: self.get_url() != 'https://www.torproject.org/')
self.assertEqual(
- m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+ self.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
# Check that auto-redirects work
m.navigate('https://www.torproject.org/')
- self.assertEqual(m.get_url(), 'https://www.torproject.org/')
+ self.assertEqual(self.get_url(), 'https://www.torproject.org/')
Wait(m, timeout=m.timeout.page_load).until(
- lambda _: m.get_url() != 'https://www.torproject.org/')
+ lambda _: self.get_url() != 'https://www.torproject.org/')
self.assertEqual(
- m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+ self.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
# Go to preferences and disable auto-redirects
new_tab = self.open_tab()
@@ -103,7 +113,7 @@ class Test(WindowManagerMixin, MarionetteTestCase):
m.switch_to_window(self.start_tab)
m.navigate('https://www.torproject.org/')
try:
- Wait(m, timeout=5).until(lambda _: m.get_url()
+ Wait(m, timeout=5).until(lambda _: self.get_url()
!= 'https://www.torproject.org/')
self.assertTrue(False, "Should not redirect")
except TimeoutException:
@@ -115,10 +125,10 @@ class Test(WindowManagerMixin, MarionetteTestCase):
'id', 'onion-location-box').is_displayed())
m.find_element('id', 'onion-location-box').click()
with m.using_context('content'):
- Wait(m, timeout=5).until(lambda _: m.get_url()
+ Wait(m, timeout=5).until(lambda _: self.get_url()
!= 'https://www.torproject.org/')
self.assertEqual(
- m.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
+ self.get_url(), 'http://expyuzz4wqqyqhjn.onion/index.html')
# Check learn more link
with m.using_context('content'):
@@ -128,8 +138,8 @@ class Test(WindowManagerMixin, MarionetteTestCase):
lambda _: len(m.window_handles) > 1)
m.switch_to_window(m.window_handles[1])
Wait(m, timeout=m.timeout.page_load).until(
- lambda _: m.get_url() != "about:blank")
+ lambda _: self.get_url() != "about:blank")
self.assertEqual(
- m.get_url(), "https://tb-manual.torproject.org/onion-services/")
+ self.get_url(), "https://tb-manual.torproject.org/onion-services/")
m.close()
m.switch_to_window(m.window_handles[0])
1
0

[tor-browser-bundle-testsuite/master] Bug 40001: Add test for 'Communicating security expectations TB patch'
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit a6c55026833dbdb0a7769d7352579fd796e7573c
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 29 19:37:00 2020 +0200
Bug 40001: Add test for 'Communicating security expectations TB patch'
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 6 +
marionette/setup.py | 1 +
.../test_onion_security_expectations.py | 134 +++++++++++++++++++++
test-data/mixed.html | 8 ++
test-data/mixed_active.html | 8 ++
5 files changed, 157 insertions(+)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 4a8908e..834641e 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -476,6 +476,12 @@ our @tests = (
# Bug 30432: temporarily disable test
enable => sub { undef },
},
+ {
+ name => 'onion_security_expectations',
+ type => 'marionette',
+ use_net => 1,
+ descr => 'Check onion security expectations',
+ },
);
sub set_test_prefs {
diff --git a/marionette/setup.py b/marionette/setup.py
index 78f4522..9dc9772 100644
--- a/marionette/setup.py
+++ b/marionette/setup.py
@@ -5,6 +5,7 @@ PACKAGE_VERSION = '0.3'
deps = [
'marionette_harness == 5.0.0',
'marionette_driver == 3.0.0',
+ 'stem == 1.8.0',
]
setup(name='tor-browser-tests',
diff --git a/marionette/tor_browser_tests/test_onion_security_expectations.py b/marionette/tor_browser_tests/test_onion_security_expectations.py
new file mode 100644
index 0000000..866ae1e
--- /dev/null
+++ b/marionette/tor_browser_tests/test_onion_security_expectations.py
@@ -0,0 +1,134 @@
+from marionette_driver import By, Wait
+from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
+from marionette_driver.legacy_actions import Actions
+from marionette_harness import MarionetteTestCase, WindowManagerMixin
+
+import testsuite
+
+from stem.control import Controller
+
+from urlparse import urlparse
+
+import time
+
+class OnionFixturesMixin(object):
+ def setUp(self):
+ super(OnionFixturesMixin, self).setUp()
+ tor_control_port = testsuite.TestSuite(
+ ).t['options']['tor-control-port']
+ with Controller.from_port(port=int(tor_control_port)) as controller:
+ controller.authenticate()
+ port = urlparse(self.marionette.absolute_url('')).port
+ response = controller.create_ephemeral_hidden_service(
+ {80: port},
+ key_content='ED25519-V3',
+ await_publication=True,
+ detached=True,
+ )
+ self.service_id = response.service_id
+
+ def tearDown(self):
+ tor_control_port = testsuite.TestSuite(
+ ).t['options']['tor-control-port']
+ with Controller.from_port(port=int(tor_control_port)) as controller:
+ controller.authenticate()
+ controller.remove_ephemeral_hidden_service(self.service_id)
+ super(OnionFixturesMixin, self).tearDown()
+
+
+class Test(OnionFixturesMixin, WindowManagerMixin, MarionetteTestCase):
+ def get_identity_class(self):
+ with self.marionette.using_context('chrome'):
+ return self.marionette.execute_script('''
+ return document.getElementById("identity-box").className;
+ ''')
+
+ def get_identity_icon(self):
+ with self.marionette.using_context('chrome'):
+ return self.marionette.execute_script('''
+ const el = document.getElementById("identity-icon");
+ return document.defaultView.getComputedStyle(el)["list-style-image"];
+ ''')
+
+ def get_connection_type(self):
+ m = self.marionette
+ with self.marionette.using_context('chrome'):
+ self.execute_chrome(
+ 'document.getElementById("identity-popup-more-info").click()')
+ m.switch_to_window(m.chrome_window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.find_element('id', 'security-technical-shortform').text != '')
+ text = m.find_element('id', 'security-technical-shortform').text
+ m.close_chrome_window()
+ m.switch_to_window(self.start_window)
+ return text
+
+ def execute_chrome(self, script):
+ with self.marionette.using_context('chrome'):
+ return self.marionette.execute_script(script)
+
+ def test_onion_security_expectations(self):
+ m = self.marionette
+ m.timeout.implicit = 10
+
+ # Wait some more time to make sure the onion service is set up
+ time.sleep(10)
+
+ # Regular onion
+ with m.using_context('content'):
+ m.navigate('http://' + self.service_id + '.onion')
+ self.assertTrue(self.execute_chrome(
+ "return !!gIdentityHandler._isSecureConnection;"))
+ self.assertEqual(self.get_identity_class(), 'onionUnknownIdentity')
+ self.assertEqual(self.get_connection_type(),
+ 'Connection Encrypted (Onion Service)')
+ self.assertEqual(self.get_identity_icon(),
+ 'url("chrome://browser/skin/onion.svg")')
+
+ # Onion with mixed display content
+ with m.using_context('content'):
+ m.navigate('http://' + self.service_id + '.onion/mixed.html')
+ self.assertFalse(self.execute_chrome(
+ "return !!gIdentityHandler._isSecureConnection;"))
+ self.assertEqual(self.get_identity_class(),
+ 'onionUnknownIdentity onionMixedDisplayContent')
+ self.assertEqual(self.get_connection_type(),
+ 'Connection Partially Encrypted')
+ self.assertEqual(self.get_identity_icon(),
+ 'url("chrome://browser/skin/onion-warning.svg")')
+
+ # Onion with mixed active content
+ with m.using_context('content'):
+ m.navigate('http://' + self.service_id +
+ '.onion/mixed_active.html')
+ self.assertTrue(self.execute_chrome(
+ "return !!gIdentityHandler._isSecureConnection;"))
+ self.assertEqual(self.get_identity_class(), 'onionUnknownIdentity')
+ self.assertEqual(self.get_connection_type(),
+ 'Connection Encrypted (Onion Service)')
+ self.assertEqual(self.get_identity_icon(),
+ 'url("chrome://browser/skin/onion.svg")')
+ # Reload with mixed content protection disabled
+ self.execute_chrome(
+ 'gIdentityHandler.disableMixedContentProtection();')
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: self.get_identity_class() != 'onionUnknownIdentity')
+ self.assertFalse(self.execute_chrome(
+ "return !!gIdentityHandler._isSecureConnection;"))
+ self.assertEqual(self.get_identity_class(),
+ 'onionUnknownIdentity onionMixedActiveContent')
+ self.assertEqual(self.get_connection_type(),
+ 'Connection Partially Encrypted')
+ self.assertEqual(self.get_identity_icon(),
+ 'url("chrome://browser/skin/onion-slash.svg")')
+
+ # Onion with valid TLS certificate
+ with m.using_context('content'):
+ m.navigate('https://3g2upl4pq6kufc4m.onion/')
+ self.assertTrue(self.execute_chrome(
+ "return !!gIdentityHandler._isSecureConnection;"))
+ self.assertEqual(self.get_identity_class(), 'onionVerifiedDomain')
+ self.assertEqual(self.get_connection_type(
+ ), 'Connection Encrypted (Onion Service, TLS_AES_256_GCM_SHA384, 256 bit keys, TLS 1.3)')
+ self.assertEqual(self.get_identity_icon(),
+ 'url("chrome://browser/skin/onion.svg")')
diff --git a/test-data/mixed.html b/test-data/mixed.html
new file mode 100644
index 0000000..3de98a1
--- /dev/null
+++ b/test-data/mixed.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ </head>
+ <body>
+ <img src="http://www.torproject.org/static/images/tor-logo@2x.png"/>
+ </body>
+</html>
diff --git a/test-data/mixed_active.html b/test-data/mixed_active.html
new file mode 100644
index 0000000..23430ab
--- /dev/null
+++ b/test-data/mixed_active.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ </head>
+ <body>
+ <iframe src="http://www.torproject.org"></iframe>
+ </body>
+</html>
1
0

[tor-browser-bundle-testsuite/master] Disable navigation timing test for >= 79
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit 0f220abf788eb987e5b158d0b376d2f88c6907e2
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Aug 3 15:45:25 2020 +0200
Disable navigation timing test for >= 79
---
marionette/tor_browser_tests/test_navigation-timing.py | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/marionette/tor_browser_tests/test_navigation-timing.py b/marionette/tor_browser_tests/test_navigation-timing.py
index 0b0c125..9d38697 100644
--- a/marionette/tor_browser_tests/test_navigation-timing.py
+++ b/marionette/tor_browser_tests/test_navigation-timing.py
@@ -7,11 +7,12 @@ from marionette_driver import By
from marionette_driver.errors import MarionetteException
from marionette_harness import MarionetteTestCase
+import testsuite
-class Test(MarionetteTestCase):
+class Test(testsuite.TorBrowserTest):
def setUp(self):
- MarionetteTestCase.setUp(self)
+ testsuite.TorBrowserTest.setUp(self)
self.TEST_URL = "https://www.mediawiki.org/wiki/MediaWiki"
@@ -40,6 +41,9 @@ class Test(MarionetteTestCase):
}
def test_navigation_timing(self):
+ if (self.get_version() >= 79):
+ # Navigation timing was reenabled in 79 (https://bugzilla.mozilla.org/show_bug.cgi?id=1637985)
+ return
with self.marionette.using_context('content'):
self.marionette.navigate(self.TEST_URL)
1
0

[tor-browser-bundle-testsuite/master] Fix slider settings test for 78.2
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit 3c2da7d966cf1a2eb02812d5ab05eea774a84359
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Aug 26 16:24:12 2020 +0200
Fix slider settings test for 78.2
---
marionette/tor_browser_tests/test_slider_settings.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/marionette/tor_browser_tests/test_slider_settings.py b/marionette/tor_browser_tests/test_slider_settings.py
index 290482e..f61ad21 100644
--- a/marionette/tor_browser_tests/test_slider_settings.py
+++ b/marionette/tor_browser_tests/test_slider_settings.py
@@ -20,7 +20,6 @@ class Test(MarionetteTestCase):
"javascript.options.ion" : [ 0, False, False, False, True ],
"javascript.options.baselinejit" : [ 0, False, False, False, True ],
"javascript.options.native_regexp" : [ 0, False, False, False, True ],
- "media.webaudio.enabled" : [ 0, False, False, False, True ],
"mathml.disabled" : [ 0, True, True, True, False],
"gfx.font_rendering.opentype_svg.enabled" : [ 0, False, False, True, True ],
"svg.disabled" : [ 0, True, False, False, False],
1
0

[tor-browser-bundle-testsuite/master] Bug 40005: Add test for 'Replace security slider with security level UI' TB patch
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit d97948001366242e3baab4d49dd0706cf42aa8ab
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 29 19:56:14 2020 +0200
Bug 40005: Add test for 'Replace security slider with security level UI' TB patch
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 6 ++
.../tor_browser_tests/test_security_level_ui.py | 72 ++++++++++++++++++++++
2 files changed, 78 insertions(+)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 931ab70..37efae6 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -494,6 +494,12 @@ our @tests = (
use_net => 1,
descr => 'Check that onion alias urlbar rewrites work properly',
},
+ {
+ name => 'security_level_ui',
+ type => 'marionette',
+ use_net => 1,
+ descr => 'Check that the security level UI is working properly',
+ },
);
sub set_test_prefs {
diff --git a/marionette/tor_browser_tests/test_security_level_ui.py b/marionette/tor_browser_tests/test_security_level_ui.py
new file mode 100644
index 0000000..f24e7ea
--- /dev/null
+++ b/marionette/tor_browser_tests/test_security_level_ui.py
@@ -0,0 +1,72 @@
+from marionette_driver import By, Wait
+from marionette_driver.errors import MarionetteException
+
+from marionette_harness import MarionetteTestCase
+
+
+class Test(MarionetteTestCase):
+ def test_security_level_ui(self):
+ custom_pref = 'javascript.options.wasm'
+ m = self.marionette
+ m.timeout.implicit = 5
+ with m.using_context('chrome'):
+ m.find_element('id', 'security-level-button').click()
+ m.find_element(
+ 'id', 'securityLevel-advancedSecuritySettings').click()
+ with m.using_context('content'):
+ # Test whether changing the security level value works
+ self.assertEqual(
+ m.get_url(), "about:preferences#privacy-securitylevel")
+ self.assertEqual(4, m.get_pref(
+ 'extensions.torbutton.security_slider'))
+ m.find_element(
+ 'css selector', '#securityLevel-vbox-safer radio').click()
+ self.assertEqual(2, m.get_pref(
+ 'extensions.torbutton.security_slider'))
+ m.find_element(
+ 'css selector', '#securityLevel-vbox-safest radio').click()
+ self.assertEqual(1, m.get_pref(
+ 'extensions.torbutton.security_slider'))
+ m.find_element(
+ 'css selector', '#securityLevel-vbox-standard radio').click()
+ self.assertEqual(4, m.get_pref(
+ 'extensions.torbutton.security_slider'))
+
+ # Test custom security settings
+ elem = m.find_element('id', 'securityLevel-restoreDefaults')
+ self.assertEqual(elem.is_displayed(), False)
+ m.set_pref(custom_pref, False)
+ self.assertEqual(elem.is_displayed(), True)
+ elem.click()
+ self.assertEqual(True, m.get_pref(custom_pref))
+
+ # Test Learn More link
+ m.find_element('id', 'securityLevel-learnMore').click()
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 1)
+ m.switch_to_window(m.window_handles[1])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != "about:blank")
+ self.assertTrue(
+ m.get_url() in ["https://tb-manual.torproject.org/en-US/security-settings/", "https://tb-manual.torproject.org/security-settings/"])
+
+ # Test Learn More link from panel
+ m.find_element('id', 'security-level-button').click()
+ m.find_element('id', 'securityLevel-learnMore').click()
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: len(m.window_handles) > 2)
+ with m.using_context('content'):
+ m.switch_to_window(m.window_handles[2])
+ Wait(m, timeout=m.timeout.page_load).until(
+ lambda _: m.get_url() != "about:blank")
+ self.assertTrue(
+ m.get_url() in ["https://tb-manual.torproject.org/en-US/security-settings/", "https://tb-manual.torproject.org/security-settings/"])
+
+ # Test custom settings from panel
+ m.set_pref(custom_pref, False)
+ elem = m.find_element('id', 'securityLevel-restoreDefaults')
+ self.assertEqual(elem.is_displayed(), False)
+ m.find_element('id', 'security-level-button').click()
+ self.assertEqual(elem.is_displayed(), True)
+ elem.click()
+ self.assertEqual(True, m.get_pref(custom_pref))
1
0

[tor-browser-bundle-testsuite/master] Fix onion alias test for same reason as previous commit
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit d582cb8edb59ba625c24586a2b8b202a83440e11
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Aug 27 22:28:26 2020 +0200
Fix onion alias test for same reason as previous commit
---
marionette/tor_browser_tests/test_onion_alias.py | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/marionette/tor_browser_tests/test_onion_alias.py b/marionette/tor_browser_tests/test_onion_alias.py
index 1495906..39dcc49 100644
--- a/marionette/tor_browser_tests/test_onion_alias.py
+++ b/marionette/tor_browser_tests/test_onion_alias.py
@@ -7,6 +7,10 @@ import time
class Test(WindowManagerMixin, MarionetteTestCase):
+ def get_url(self):
+ with self.marionette.using_context('content'):
+ return self.marionette.execute_script("return document.location.href;")
+
def get_urlbar_value(self):
with self.marionette.using_context('chrome'):
return self.marionette.execute_script("return gURLBar.value;")
@@ -23,7 +27,7 @@ class Test(WindowManagerMixin, MarionetteTestCase):
with m.using_context('content'):
# Navigating to a known .tor.onion should redirect and rewrite the urlbar with the alias.
m.navigate('http://theintercept.securedrop.tor.onion')
- self.assertEqual(m.get_url(
+ self.assertEqual(self.get_url(
), 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion/')
self.assertEqual(self.get_urlbar_value(),
'theintercept.securedrop.tor.onion')
@@ -46,8 +50,8 @@ class Test(WindowManagerMixin, MarionetteTestCase):
lambda _: len(m.window_handles) > 1)
m.switch_to_window(m.window_handles[1])
Wait(m, timeout=m.timeout.page_load).until(
- lambda _: m.get_url() != 'about:blank')
- self.assertEqual(m.get_url(
+ lambda _: self.get_url() != 'about:blank')
+ self.assertEqual(self.get_url(
), 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion/gener…')
self.assertEqual(self.get_urlbar_value(),
'theintercept.securedrop.tor.onion/generate')
@@ -59,7 +63,7 @@ class Test(WindowManagerMixin, MarionetteTestCase):
m.switch_to_window(new_tab)
m.navigate(
'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion')
- self.assertEqual(m.get_url(
+ self.assertEqual(self.get_url(
), 'http://xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion/')
self.assertEqual(self.get_urlbar_value(
), 'xpxduj55x2j27l2qytu2tcetykyfxbjbafin3x4i3ywddzphkbrd3jyd.onion')
1
0

[tor-browser-bundle-testsuite/master] Fix dom objects enumeration tests for 80
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit ab71188e49358619bfe06a2b618200b2f5e5b68f
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Aug 3 12:18:15 2020 +0200
Fix dom objects enumeration tests for 80
---
marionette/tor_browser_tests/lib/testsuite.py | 7 +++++++
.../test_dom-objects-enumeration-worker.py | 15 +++++++++++----
.../tor_browser_tests/test_dom-objects-enumeration.py | 16 ++++++++++++----
3 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/marionette/tor_browser_tests/lib/testsuite.py b/marionette/tor_browser_tests/lib/testsuite.py
index 78713c8..88b1953 100644
--- a/marionette/tor_browser_tests/lib/testsuite.py
+++ b/marionette/tor_browser_tests/lib/testsuite.py
@@ -1,5 +1,6 @@
import os
import json
+from marionette_harness import MarionetteTestCase
class TestSuite(object):
def __init__(self):
@@ -24,3 +25,9 @@ class TestSuite(object):
output = open(screenshot_file, 'w')
output.write(png_data)
output.close()
+
+
+class TorBrowserTest(MarionetteTestCase):
+ def get_version(self):
+ with self.marionette.using_context("chrome"):
+ return self.marionette.execute_script("return parseFloat(AppConstants.MOZ_APP_VERSION);")
diff --git a/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py b/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py
index 59d771b..88f5792 100644
--- a/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py
+++ b/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py
@@ -1,9 +1,10 @@
from marionette_harness import MarionetteTestCase
+import testsuite
-class Test(MarionetteTestCase):
+class Test(testsuite.TorBrowserTest):
def setUp(self):
- MarionetteTestCase.setUp(self)
+ testsuite.TorBrowserTest.setUp(self)
self.marionette.set_pref("network.proxy.allow_hijacking_localhost", False)
self.test_page_file_url = self.marionette.absolute_url("dom-objects-enumeration.html?testType=worker")
@@ -196,8 +197,14 @@ class Test(MarionetteTestCase):
"XMLHttpRequestEventTarget",
"XMLHttpRequestUpload",
]
+ self.expectedObjects80 = self.expectedObjects + ["AggregateError", "FinalizationRegistry", "WeakRef"]
+ self.expectedObjects80.sort()
def test_dom_objects_enumeration_workers(self):
+ expectedObjects = self.expectedObjects
+ if self.get_version() >= 80:
+ expectedObjects = self.expectedObjects80
+
with self.marionette.using_context('content'):
self.marionette.navigate(self.test_page_file_url)
self.marionette.timeout.implicit = 5
@@ -206,7 +213,7 @@ class Test(MarionetteTestCase):
err = False
unknown_objects = ''
for l in r:
- if l in self.expectedObjects:
+ if l in expectedObjects:
continue
err = True
unknown_objects += l + "\n"
@@ -214,7 +221,7 @@ class Test(MarionetteTestCase):
err_msg = "Unknown objects:\n%s" % unknown_objects
self.assertFalse(err, msg=err_msg)
- for l in self.expectedObjects:
+ for l in expectedObjects:
if l in r:
continue
err = True
diff --git a/marionette/tor_browser_tests/test_dom-objects-enumeration.py b/marionette/tor_browser_tests/test_dom-objects-enumeration.py
index be2ae65..3db4366 100644
--- a/marionette/tor_browser_tests/test_dom-objects-enumeration.py
+++ b/marionette/tor_browser_tests/test_dom-objects-enumeration.py
@@ -8,10 +8,11 @@ from marionette_driver import By
from marionette_driver.errors import MarionetteException
from marionette_harness import MarionetteTestCase
+import testsuite
-class Test(MarionetteTestCase):
+class Test(testsuite.TorBrowserTest):
def setUp(self):
- MarionetteTestCase.setUp(self)
+ testsuite.TorBrowserTest.setUp(self)
self.marionette.set_pref("network.proxy.allow_hijacking_localhost", False)
self.test_page_file_url = self.marionette.absolute_url("dom-objects-enumeration.html?testType=window")
# The list of expected DOM objects
@@ -753,8 +754,15 @@ class Test(MarionetteTestCase):
"XPathResult",
"XSLTProcessor",
]
+ self.expectedObjects80 = self.expectedObjects + ["AggregateError", "FinalizationRegistry", "WeakRef"]
+ self.expectedObjects80.remove("content")
+ self.expectedObjects80.sort()
def test_dom_objects_enumeration(self):
+ expectedObjects = self.expectedObjects
+ if self.get_version() >= 80:
+ expectedObjects = self.expectedObjects80
+
with self.marionette.using_context('content'):
self.marionette.navigate(self.test_page_file_url)
self.marionette.timeout.implicit = 5
@@ -763,7 +771,7 @@ class Test(MarionetteTestCase):
err = False
unknown_objects = ''
for l in r:
- if l in self.expectedObjects:
+ if l in expectedObjects:
continue
err = True
unknown_objects += l + "\n"
@@ -771,7 +779,7 @@ class Test(MarionetteTestCase):
err_msg = "Unknown objects:\n%s" % unknown_objects
self.assertFalse(err, msg=err_msg)
- for l in self.expectedObjects:
+ for l in expectedObjects:
if l in r:
continue
err = True
1
0

[tor-browser-bundle-testsuite/master] Cleanup skip_files lists in BrowserBundleTests.pm
by gk@torproject.org 15 Oct '20
by gk@torproject.org 15 Oct '20
15 Oct '20
commit 9eccab9ce7b5ac0b05dd8cd2986a2a52323e1925
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Sep 14 16:25:57 2020 +0200
Cleanup skip_files lists in BrowserBundleTests.pm
---
TBBTestSuite/TestSuite/BrowserBundleTests.pm | 49 ----------------------------
1 file changed, 49 deletions(-)
diff --git a/TBBTestSuite/TestSuite/BrowserBundleTests.pm b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
index 7d6c110..8cf64ce 100644
--- a/TBBTestSuite/TestSuite/BrowserBundleTests.pm
+++ b/TBBTestSuite/TestSuite/BrowserBundleTests.pm
@@ -52,36 +52,7 @@ our @tests = (
enable => sub { $_[0]->{os} eq 'Windows' },
# ticket 16417
skip_files => [ qw(
- TorBrowser/Tor/PluggableTransports/_ctypes.pyd
- TorBrowser/Tor/PluggableTransports/_hashlib.pyd
- TorBrowser/Tor/PluggableTransports/_socket.pyd
- TorBrowser/Tor/PluggableTransports/_ssl.pyd
- TorBrowser/Tor/PluggableTransports/bz2.pyd
- TorBrowser/Tor/PluggableTransports/Crypto.Cipher._AES.pyd
- TorBrowser/Tor/PluggableTransports/Crypto.Hash._SHA256.pyd
- TorBrowser/Tor/PluggableTransports/Crypto.Hash._SHA512.pyd
- TorBrowser/Tor/PluggableTransports/Crypto.Random.OSRNG.winrandom.pyd
- TorBrowser/Tor/PluggableTransports/Crypto.Util._counter.pyd
- TorBrowser/Tor/PluggableTransports/Crypto.Util.strxor.pyd
- TorBrowser/Tor/PluggableTransports/flashproxy-client.exe
- TorBrowser/Tor/PluggableTransports/flashproxy-reg-appspot.exe
- TorBrowser/Tor/PluggableTransports/flashproxy-reg-email.exe
- TorBrowser/Tor/PluggableTransports/flashproxy-reg-http.exe
- TorBrowser/Tor/PluggableTransports/flashproxy-reg-url.exe
- TorBrowser/Tor/PluggableTransports/fte.cDFA.pyd
- TorBrowser/Tor/PluggableTransports/fteproxy.exe
- TorBrowser/Tor/PluggableTransports/M2Crypto.__m2crypto.pyd
- TorBrowser/Tor/PluggableTransports/meek-client-torbrowser.exe
- TorBrowser/Tor/PluggableTransports/meek-client.exe
TorBrowser/Tor/PluggableTransports/obfs4proxy.exe
- TorBrowser/Tor/PluggableTransports/obfsproxy.exe
- TorBrowser/Tor/PluggableTransports/pyexpat.pyd
- TorBrowser/Tor/PluggableTransports/python27.dll
- TorBrowser/Tor/PluggableTransports/select.pyd
- TorBrowser/Tor/PluggableTransports/terminateprocess-buffer.exe
- TorBrowser/Tor/PluggableTransports/unicodedata.pyd
- TorBrowser/Tor/PluggableTransports/w9xpopen.exe
- TorBrowser/Tor/PluggableTransports/zope.interface._zope_interface_coptimizations.pyd
) ],
},
{
@@ -94,11 +65,7 @@ our @tests = (
&& ( $_[0] =~ m/BIND_NOW/ ) },
enable => sub { $OSNAME eq 'linux' },
skip_files => [ qw(
- TorBrowser/Tor/PluggableTransports/meek-client
- TorBrowser/Tor/PluggableTransports/meek-client-torbrowser
- TorBrowser/Tor/PluggableTransports/meek-client-torbrowser
TorBrowser/Tor/PluggableTransports/obfs4proxy
- TorBrowser/Tor/PluggableTransports/zope/interface/_zope_interface_coptimizations.so
TorBrowser/Tor/PluggableTransports/snowflake-client
TorBrowser/ncprop279/ncprop279
) ],
@@ -115,21 +82,9 @@ our @tests = (
skip_files => [ qw(
abicheck
gtk2/libmozgtk.so
- libmozalloc.so
libmozgtk.so
libplc4.so
- libplds4.so
TorBrowser/Tor/libstdc++/libstdc++.so.6
- TorBrowser/Tor/PluggableTransports/Crypto/Cipher/_ARC4.so
- TorBrowser/Tor/PluggableTransports/Crypto/Cipher/_XOR.so
- TorBrowser/Tor/PluggableTransports/Crypto/Util/_counter.so
- TorBrowser/Tor/PluggableTransports/fte/cDFA.so
- TorBrowser/Tor/PluggableTransports/meek-client-torbrowser
- TorBrowser/Tor/PluggableTransports/twisted/python/_initgroups.so
- TorBrowser/Tor/PluggableTransports/twisted/runner/portmap.so
- TorBrowser/Tor/PluggableTransports/twisted/test/raiser.so
- TorBrowser/Tor/PluggableTransports/zope/interface/_zope_interface_coptimizations.so
- TorBrowser/Tor/PluggableTransports/meek-client
TorBrowser/Tor/PluggableTransports/obfs4proxy
TorBrowser/Tor/PluggableTransports/snowflake-client
TorBrowser/ncprop279/ncprop279
@@ -156,8 +111,6 @@ our @tests = (
check_output => sub { $_[0] =~ m/Type:\s+DYN/ },
enable => sub { $OSNAME eq 'linux' },
skip_files => [ qw(
- TorBrowser/Tor/PluggableTransports/meek-client
- TorBrowser/Tor/PluggableTransports/meek-client-torbrowser
TorBrowser/Tor/PluggableTransports/obfs4proxy
TorBrowser/Tor/PluggableTransports/snowflake-client
TorBrowser/ncprop279/ncprop279
@@ -200,8 +153,6 @@ our @tests = (
enable => sub { $OSNAME eq 'darwin' },
retry => 1,
skip_files => [ qw(
- Contents/MacOS/Tor/PluggableTransports/meek-client
- Contents/MacOS/Tor/PluggableTransports/meek-client-torbrowser
Contents/MacOS/Tor/PluggableTransports/obfs4proxy
) ],
},
1
0

15 Oct '20
commit 71bce1264f10e8f184095aad54cf27e81f56a7a4
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Sep 14 18:16:10 2020 +0200
Cleanup tests python imports
---
marionette/tor_browser_tests/test_acid3.py | 6 +-----
marionette/tor_browser_tests/test_check.py | 3 ---
.../tor_browser_tests/test_dom-objects-enumeration-worker.py | 1 -
marionette/tor_browser_tests/test_dom-objects-enumeration.py | 4 ----
marionette/tor_browser_tests/test_download_pdf.py | 2 --
marionette/tor_browser_tests/test_fp_navigator.py | 4 ----
marionette/tor_browser_tests/test_fp_plugins.py | 3 ---
marionette/tor_browser_tests/test_fp_screen_coords.py | 4 ----
marionette/tor_browser_tests/test_fp_screen_dimensions.py | 3 ---
marionette/tor_browser_tests/test_fp_useragent.py | 4 ----
marionette/tor_browser_tests/test_fpcentral.py | 5 -----
marionette/tor_browser_tests/test_navigation-timing.py | 4 ----
marionette/tor_browser_tests/test_noscript.py | 5 +----
marionette/tor_browser_tests/test_onion_alias.py | 6 +-----
marionette/tor_browser_tests/test_onion_client_auth.py | 11 ++---------
marionette/tor_browser_tests/test_onion_location.py | 6 ++----
.../tor_browser_tests/test_onion_security_expectations.py | 10 ++--------
marionette/tor_browser_tests/test_page.py | 2 --
marionette/tor_browser_tests/test_pinning.py | 3 +--
marionette/tor_browser_tests/test_resource-timing.py | 3 ---
marionette/tor_browser_tests/test_screenshots.py | 4 ----
marionette/tor_browser_tests/test_searchengines.py | 5 -----
marionette/tor_browser_tests/test_security_level_ui.py | 5 +----
marionette/tor_browser_tests/test_settings.py | 5 -----
marionette/tor_browser_tests/test_slider_settings.py | 5 -----
marionette/tor_browser_tests/test_svg.py | 4 +---
marionette/tor_browser_tests/test_user-timing.py | 3 ---
27 files changed, 12 insertions(+), 108 deletions(-)
diff --git a/marionette/tor_browser_tests/test_acid3.py b/marionette/tor_browser_tests/test_acid3.py
index 9fa043b..c0f2e78 100644
--- a/marionette/tor_browser_tests/test_acid3.py
+++ b/marionette/tor_browser_tests/test_acid3.py
@@ -1,11 +1,7 @@
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException
-
+from marionette_driver import Wait
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_check.py b/marionette/tor_browser_tests/test_check.py
index dfe4abf..3d067a9 100755
--- a/marionette/tor_browser_tests/test_check.py
+++ b/marionette/tor_browser_tests/test_check.py
@@ -1,6 +1,3 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py b/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py
index 88f5792..5d21d1b 100644
--- a/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py
+++ b/marionette/tor_browser_tests/test_dom-objects-enumeration-worker.py
@@ -1,4 +1,3 @@
-from marionette_harness import MarionetteTestCase
import testsuite
class Test(testsuite.TorBrowserTest):
diff --git a/marionette/tor_browser_tests/test_dom-objects-enumeration.py b/marionette/tor_browser_tests/test_dom-objects-enumeration.py
index 3db4366..143a554 100644
--- a/marionette/tor_browser_tests/test_dom-objects-enumeration.py
+++ b/marionette/tor_browser_tests/test_dom-objects-enumeration.py
@@ -4,10 +4,6 @@
# This test has been suggested in the iSEC partners' report:
# https://blog.torproject.org/blog/isec-partners-conducts-tor-browser-hardeni…
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
-from marionette_harness import MarionetteTestCase
import testsuite
class Test(testsuite.TorBrowserTest):
diff --git a/marionette/tor_browser_tests/test_download_pdf.py b/marionette/tor_browser_tests/test_download_pdf.py
index 408f63a..6025a64 100644
--- a/marionette/tor_browser_tests/test_download_pdf.py
+++ b/marionette/tor_browser_tests/test_download_pdf.py
@@ -1,8 +1,6 @@
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_fp_navigator.py b/marionette/tor_browser_tests/test_fp_navigator.py
index 1453b0f..91dc951 100644
--- a/marionette/tor_browser_tests/test_fp_navigator.py
+++ b/marionette/tor_browser_tests/test_fp_navigator.py
@@ -1,8 +1,4 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
# expected values for navigation properties
diff --git a/marionette/tor_browser_tests/test_fp_plugins.py b/marionette/tor_browser_tests/test_fp_plugins.py
index 3f51d61..45981ca 100644
--- a/marionette/tor_browser_tests/test_fp_plugins.py
+++ b/marionette/tor_browser_tests/test_fp_plugins.py
@@ -1,6 +1,3 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_fp_screen_coords.py b/marionette/tor_browser_tests/test_fp_screen_coords.py
index 208430b..97c2767 100644
--- a/marionette/tor_browser_tests/test_fp_screen_coords.py
+++ b/marionette/tor_browser_tests/test_fp_screen_coords.py
@@ -1,7 +1,3 @@
-
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_fp_screen_dimensions.py b/marionette/tor_browser_tests/test_fp_screen_dimensions.py
index 879f5c2..2e0af6d 100644
--- a/marionette/tor_browser_tests/test_fp_screen_dimensions.py
+++ b/marionette/tor_browser_tests/test_fp_screen_dimensions.py
@@ -1,6 +1,3 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_fp_useragent.py b/marionette/tor_browser_tests/test_fp_useragent.py
index a2ef986..5b32bb3 100644
--- a/marionette/tor_browser_tests/test_fp_useragent.py
+++ b/marionette/tor_browser_tests/test_fp_useragent.py
@@ -1,8 +1,4 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_fpcentral.py b/marionette/tor_browser_tests/test_fpcentral.py
index a698155..a7c8020 100644
--- a/marionette/tor_browser_tests/test_fpcentral.py
+++ b/marionette/tor_browser_tests/test_fpcentral.py
@@ -1,11 +1,6 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_navigation-timing.py b/marionette/tor_browser_tests/test_navigation-timing.py
index 9d38697..ce3cb57 100644
--- a/marionette/tor_browser_tests/test_navigation-timing.py
+++ b/marionette/tor_browser_tests/test_navigation-timing.py
@@ -3,10 +3,6 @@
# Tor Browser. Setting |dom.enable_performance| to |false| and testing that has
# been not sufficient. See bug 13186 for further details.
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
-from marionette_harness import MarionetteTestCase
import testsuite
class Test(testsuite.TorBrowserTest):
diff --git a/marionette/tor_browser_tests/test_noscript.py b/marionette/tor_browser_tests/test_noscript.py
index 8083098..7d3d274 100644
--- a/marionette/tor_browser_tests/test_noscript.py
+++ b/marionette/tor_browser_tests/test_noscript.py
@@ -1,10 +1,7 @@
# https://trac.torproject.org/projects/tor/ticket/13053
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException, NoSuchElementException
-
+from marionette_driver.errors import NoSuchElementException
from marionette_harness import MarionetteTestCase
-
import testsuite
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_onion_alias.py b/marionette/tor_browser_tests/test_onion_alias.py
index 39dcc49..8f1dc67 100644
--- a/marionette/tor_browser_tests/test_onion_alias.py
+++ b/marionette/tor_browser_tests/test_onion_alias.py
@@ -1,11 +1,7 @@
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
+from marionette_driver import Wait
from marionette_driver.legacy_actions import Actions
from marionette_harness import MarionetteTestCase, WindowManagerMixin
-import time
-
-
class Test(WindowManagerMixin, MarionetteTestCase):
def get_url(self):
with self.marionette.using_context('content'):
diff --git a/marionette/tor_browser_tests/test_onion_client_auth.py b/marionette/tor_browser_tests/test_onion_client_auth.py
index 38c8a34..1686fa7 100644
--- a/marionette/tor_browser_tests/test_onion_client_auth.py
+++ b/marionette/tor_browser_tests/test_onion_client_auth.py
@@ -1,21 +1,14 @@
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
-from marionette_driver.legacy_actions import Actions
+from marionette_driver import Wait
from marionette_harness import MarionetteTestCase, WindowManagerMixin
-
-import testsuite
-
from stem.control import Controller
from stem.process import launch_tor_with_config
-
from urlparse import urlparse
from tempfile import mkdtemp
import shutil
import os
import base64
-
import time
-
+import testsuite
class Test(WindowManagerMixin, MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_onion_location.py b/marionette/tor_browser_tests/test_onion_location.py
index d028d04..37acb2d 100644
--- a/marionette/tor_browser_tests/test_onion_location.py
+++ b/marionette/tor_browser_tests/test_onion_location.py
@@ -1,9 +1,7 @@
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
-
+from marionette_driver import Wait
+from marionette_driver.errors import NoSuchElementException, TimeoutException
from marionette_harness import MarionetteTestCase, WindowManagerMixin
-
class Test(WindowManagerMixin, MarionetteTestCase):
# To be investigated in #40007:
# In 81, marionette.get_url() sometimes fails with:
diff --git a/marionette/tor_browser_tests/test_onion_security_expectations.py b/marionette/tor_browser_tests/test_onion_security_expectations.py
index 866ae1e..7a0fd27 100644
--- a/marionette/tor_browser_tests/test_onion_security_expectations.py
+++ b/marionette/tor_browser_tests/test_onion_security_expectations.py
@@ -1,15 +1,9 @@
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException, NoSuchElementException, TimeoutException
-from marionette_driver.legacy_actions import Actions
+from marionette_driver import Wait
from marionette_harness import MarionetteTestCase, WindowManagerMixin
-
-import testsuite
-
from stem.control import Controller
-
from urlparse import urlparse
-
import time
+import testsuite
class OnionFixturesMixin(object):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_page.py b/marionette/tor_browser_tests/test_page.py
index 3d1f4cc..f1369c5 100644
--- a/marionette/tor_browser_tests/test_page.py
+++ b/marionette/tor_browser_tests/test_page.py
@@ -1,8 +1,6 @@
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_pinning.py b/marionette/tor_browser_tests/test_pinning.py
index 23e029c..5641e7a 100644
--- a/marionette/tor_browser_tests/test_pinning.py
+++ b/marionette/tor_browser_tests/test_pinning.py
@@ -1,7 +1,6 @@
from marionette_harness import MarionetteTestCase
-
-import testsuite
import json
+import testsuite
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_resource-timing.py b/marionette/tor_browser_tests/test_resource-timing.py
index e143f0c..9660725 100644
--- a/marionette/tor_browser_tests/test_resource-timing.py
+++ b/marionette/tor_browser_tests/test_resource-timing.py
@@ -3,9 +3,6 @@
# Tor Browser. Setting |dom.enable_resource_timing| to |false| and testing that
# might not be sufficient.
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_screenshots.py b/marionette/tor_browser_tests/test_screenshots.py
index b7cc3d6..4fac52e 100755
--- a/marionette/tor_browser_tests/test_screenshots.py
+++ b/marionette/tor_browser_tests/test_screenshots.py
@@ -1,8 +1,4 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_searchengines.py b/marionette/tor_browser_tests/test_searchengines.py
index eeb2c6b..9f394f7 100644
--- a/marionette/tor_browser_tests/test_searchengines.py
+++ b/marionette/tor_browser_tests/test_searchengines.py
@@ -6,14 +6,9 @@
# case while the search engines are still not properly ordered. Rather, we
# check the entries in the search box directly.
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_security_level_ui.py b/marionette/tor_browser_tests/test_security_level_ui.py
index f24e7ea..740934f 100644
--- a/marionette/tor_browser_tests/test_security_level_ui.py
+++ b/marionette/tor_browser_tests/test_security_level_ui.py
@@ -1,9 +1,6 @@
-from marionette_driver import By, Wait
-from marionette_driver.errors import MarionetteException
-
+from marionette_driver import Wait
from marionette_harness import MarionetteTestCase
-
class Test(MarionetteTestCase):
def test_security_level_ui(self):
custom_pref = 'javascript.options.wasm'
diff --git a/marionette/tor_browser_tests/test_settings.py b/marionette/tor_browser_tests/test_settings.py
index b0a9be4..f24cdd0 100644
--- a/marionette/tor_browser_tests/test_settings.py
+++ b/marionette/tor_browser_tests/test_settings.py
@@ -1,11 +1,6 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_slider_settings.py b/marionette/tor_browser_tests/test_slider_settings.py
index f61ad21..9b1101a 100644
--- a/marionette/tor_browser_tests/test_slider_settings.py
+++ b/marionette/tor_browser_tests/test_slider_settings.py
@@ -1,11 +1,6 @@
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
-
import testsuite
-
class Test(MarionetteTestCase):
def setUp(self):
diff --git a/marionette/tor_browser_tests/test_svg.py b/marionette/tor_browser_tests/test_svg.py
index af55b1b..7dfd120 100644
--- a/marionette/tor_browser_tests/test_svg.py
+++ b/marionette/tor_browser_tests/test_svg.py
@@ -1,7 +1,5 @@
-from marionette_driver.errors import MarionetteException, JavascriptException, NoSuchElementException
-
+from marionette_driver.errors import JavascriptException
from marionette_harness import MarionetteTestCase
-
import testsuite
class Test(MarionetteTestCase):
diff --git a/marionette/tor_browser_tests/test_user-timing.py b/marionette/tor_browser_tests/test_user-timing.py
index 9ad56e1..46a74f2 100644
--- a/marionette/tor_browser_tests/test_user-timing.py
+++ b/marionette/tor_browser_tests/test_user-timing.py
@@ -3,9 +3,6 @@
# Tor Browser. Setting |dom.enable_user_timing| to |false| and testing that
# might not be sufficient.
-from marionette_driver import By
-from marionette_driver.errors import MarionetteException
-
from marionette_harness import MarionetteTestCase
class Test(MarionetteTestCase):
1
0

[tor-android-service/master] Bug 40003: Setup Tor in the main thread
by sysrqb@torproject.org 15 Oct '20
by sysrqb@torproject.org 15 Oct '20
15 Oct '20
commit 8213c8dc9868dead7c3b2e34c80d29934939e2ee
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Thu Oct 15 02:50:59 2020 +0000
Bug 40003: Setup Tor in the main thread
---
.../main/java/org/torproject/android/service/TorService.java | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/service/src/main/java/org/torproject/android/service/TorService.java b/service/src/main/java/org/torproject/android/service/TorService.java
index 971c2e9..f1ddcda 100644
--- a/service/src/main/java/org/torproject/android/service/TorService.java
+++ b/service/src/main/java/org/torproject/android/service/TorService.java
@@ -234,13 +234,10 @@ public final class TorService extends Service implements TorServiceConstants, Or
mActionBroadcastReceiver = new ActionBroadcastReceiver();
registerReceiver(mActionBroadcastReceiver, new IntentFilter(CMD_NEWNYM));
- new Thread(new Runnable() {
- public void run() {
- if (setupTor()) {
- notifyIfConnectedToTorNetwork();
- }
- }
- }).start();
+ if (setupTor()) {
+ mEventBroadcaster.broadcastNotice("Preparing Tor, please wait...");
+ notifyIfConnectedToTorNetwork();
+ }
Log.i("TorService", "onCreate end");
}
1
0

[Git][tpo/applications/fenix][tor-browser-82.0.0b4-10.0-1] Bug 40071: Show only supported locales
by Georg Koppen 14 Oct '20
by Georg Koppen 14 Oct '20
14 Oct '20
Georg Koppen pushed to branch tor-browser-82.0.0b4-10.0-1 at The Tor Project / Applications / fenix
Commits:
460d5891 by Matthew Finkel at 2020-10-13T14:05:35+00:00
Bug 40071: Show only supported locales
- - - - -
1 changed file:
- app/build.gradle
Changes:
=====================================
app/build.gradle
=====================================
@@ -589,7 +589,7 @@ task buildTranslationArray {
foundLocales.append("new String[]{")
fileTree("src/main/res").visit { FileVisitDetails details ->
- if(details.file.path.endsWith("/strings.xml")){
+ if(details.file.path.endsWith("/torbrowser_strings.xml")){
def languageCode = details.file.parent.tokenize('/').last().replaceAll('values-','').replaceAll('-r','-')
languageCode = (languageCode == "values") ? "en-US" : languageCode
languageCodes.add(languageCode)
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/460d5891f2788…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/460d5891f2788…
You're receiving this email because of your account on gitlab.torproject.org.
1
0
commit f3369b53bfe2d34a617dc31b7a737af312383d38
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Oct 14 07:08:05 2020 +0000
Fold in 10.0.1 Changelog
---
projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index f36b366..953c3fd 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,22 @@
+Tor Browser 10.0.1 -- October 13 2020
+ * Windows + OS X + Linux
+ * Update NoScript to 11.1.1
+ * Bump OpenSSL to 1.1.1h
+ * Update Tor Launcher to 0.2.26
+ * Bug 31767: Avoid using intl.locale.requested preference directly
+ * Bug 40013: End of year 2020 Fundraising campaign [torbutton]
+ * Bug 40016: Fix onion pattern for LTR locales [torbutton]
+ * Bug 40139: Update Onboarding icon for 10.0 [tor-browser]
+ * Bug 40148: Disable Picture-in-Picture until we investigate and possibly fix it [tor-browser]
+ * Translations update
+ * Windows
+ * Bug 40140: Videos stop working with Tor Browser 10.0 on Windows
+ * Build System
+ * Windows + OS X + Linux
+ * Bump Go to 1.14.9
+ * Windows
+ * Bug 40051: Remove SOURCE_DATE_EPOCH patch for OpenSSL
+
Tor Browser 10.0a8 -- October 8 2020
* Android
* Update Fenix to 81.1.2
1
0

13 Oct '20
commit 0ebfe1ca352e76b8898f617d2a7b18ae5bf2f8e4
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Oct 13 18:04:15 2020 +0000
Bug 40130: More mobile clean-up
Remove firefox-locale-bundle and remaining mobile bits in the firefox
project.
---
README | 6 +-
projects/firefox-locale-bundle/build | 35 --
projects/firefox-locale-bundle/config | 8 -
projects/firefox-locale-bundle/get_hg_hash | 21 -
projects/firefox/config | 4 -
projects/firefox/gradle-dependencies-list.txt | 574 --------------------------
6 files changed, 2 insertions(+), 646 deletions(-)
diff --git a/README b/README
index 3e98d02..e37f20d 100644
--- a/README
+++ b/README
@@ -12,8 +12,7 @@ to extract container file systems, start containers and copy files to and
from containers.
The sources of most components are downloaded using git, which needs to
-be installed. Some components are downloaded using mercurial which also
-needs to be installed.
+be installed.
You also need a few perl modules installed:
- YAML::XS
@@ -41,8 +40,7 @@ If you are running Debian or Ubuntu, you can install them with:
libio-captureoutput-perl libjson-perl libpath-tiny-perl \
libstring-shellquote-perl libsort-versions-perl \
libdigest-sha-perl libdata-uuid-perl libdata-dump-perl \
- libfile-copy-recursive-perl libfile-slurp-perl git runc \
- mercurial
+ libfile-copy-recursive-perl libfile-slurp-perl git runc
The build system is based on rbm, which is included as a git submodule
in the rbm/ directory. You can fetch the rbm git submodule by running
diff --git a/projects/firefox-locale-bundle/build b/projects/firefox-locale-bundle/build
deleted file mode 100644
index 3a9e323..0000000
--- a/projects/firefox-locale-bundle/build
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-[% c("var/set_default_env") -%]
-
-cat > l10n-changesets.json << 'EOF_CHANGESETS'
-[% pc('firefox', 'var/l10n-changesets.json') %]
-EOF_CHANGESETS
-
-clone_dir='[% c("basedir") %]/hg_clones/[% project %]'
-mkdir -p "$clone_dir"
-cd "$clone_dir"
-tmpdir=$(mktemp -d)
-
-[% FOREACH lang = c('var/locales') %]
- [% SET lang = tmpl(lang);
- # mk is unavailable on mobile.
- NEXT IF lang == 'mk';
- SET hgurl = "https://hg.mozilla.org/l10n-central/" _ lang %]
- if test -d [% lang %]
- then
- cd [% lang %]
- [% c("hg") %] pull [% hgurl %]
- else
- [% c("hg") %] clone [% hgurl %] [% lang %]
- cd [% lang %]
- fi
- hg_hash=$([% c("basedir") %]/projects/firefox-locale-bundle/get_hg_hash \
- $rootdir/l10n-changesets.json \
- [% lang %])
- [% c("hg") %] archive -r "$hg_hash" -t files "$tmpdir"/[% lang %]
- cd ..
-[% END %]
-
-tar -C "$tmpdir" -czf [% dest_dir %]/[% c("filename") %] .
-rm -Rf "$tmpdir"
diff --git a/projects/firefox-locale-bundle/config b/projects/firefox-locale-bundle/config
deleted file mode 100644
index 2f4997f..0000000
--- a/projects/firefox-locale-bundle/config
+++ /dev/null
@@ -1,8 +0,0 @@
-# vim: filetype=yaml sw=2
-version: '[% c("var/ff_version") %]-[% c("var/ff_build") %]'
-filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
-
-var:
- use_container: 0
- ff_version: '[% pc("firefox", "var/firefox_version") %]'
- ff_build: build1
diff --git a/projects/firefox-locale-bundle/get_hg_hash b/projects/firefox-locale-bundle/get_hg_hash
deleted file mode 100755
index 18b174e..0000000
--- a/projects/firefox-locale-bundle/get_hg_hash
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use Path::Tiny;
-use JSON;
-
-sub exit_error {
- print STDERR "Error: ", $_[0], "\n";
- exit (exists $_[1] ? $_[1] : 1);
-}
-
-exit_error("Wrong number of arguments", 1) unless @ARGV == 2;
-
-my ($file, $locale) = @ARGV;
-my $json_text = path($file)->slurp_raw;
-exit_error("Error reading $file", 2) unless defined $json_text;
-
-my $data = decode_json($json_text);
-
-my $changeset = $data->{$locale}{revision};
-exit_error("Can't find locale $locale in $file", 3) unless $changeset;
-print "$changeset\n";
diff --git a/projects/firefox/config b/projects/firefox/config
index 2c02b5b..a099d45 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -26,10 +26,6 @@ var:
- pkg-config
container:
use_container: 1
- # this should be updated when the list of gradle dependencies is changed
- gradle_dependencies_version: 6
- # used by projects/firefox-locale-bundle
- l10n-changesets.json: '[% exec("cat mobile/locales/l10n-changesets.json") %]'
steps:
src-tarballs:
diff --git a/projects/firefox/gradle-dependencies-list.txt b/projects/firefox/gradle-dependencies-list.txt
deleted file mode 100644
index b46f871..0000000
--- a/projects/firefox/gradle-dependencies-list.txt
+++ /dev/null
@@ -1,574 +0,0 @@
-# On how to update dependencies see projects/common/how-to-create-gradle-dependencies-list.txt
-# Don't forget to update var/gradle_dependencies_version when modifying this file
-sha256sum | url
-f5759b7fcdfc83a525a036deedcbd32e5b536b625ebc282426f16ca137eb5902 | https://jcenter.bintray.com/backport-util-concurrent/backport-util-concurre…
-770471090ca40a17b9e436ee2ec00819be42042da6f4085ece1d37916dc08ff9 | https://jcenter.bintray.com/backport-util-concurrent/backport-util-concurre…
-2bf4e59f3acd106fea6145a9a88fe8956509f8b9c0fdd11eb96fee757269e3f3 | https://jcenter.bintray.com/classworlds/classworlds/1.1-alpha-2/classworlds…
-0cc647963b74ad1d7a37c9868e9e5a8f474e49297e1863582253a08a4c719cb1 | https://jcenter.bintray.com/classworlds/classworlds/1.1-alpha-2/classworlds…
-9e1d8dd83ca6003f841e3af878ce2dc7c22497493a7bb6d1b62ec1b0d0a83c05 | https://jcenter.bintray.com/com/almworks/sqlite4java/sqlite4java/0.282/sqli…
-2d4cdc52be79184386d74333d1c4466b7960f83505bfd5e596e76c5ab6ee3bbf | https://jcenter.bintray.com/com/almworks/sqlite4java/sqlite4java/0.282/sqli…
-857db5645aaefbd7fbe9ba6454b072bc0518ebaba08a93d5eae89a9850e949c4 | https://jcenter.bintray.com/com/getkeepsafe/dexcount/dexcount-gradle-plugin…
-15d4b252c5aa3aeb8d634ae5aaf348ac6ce183b6b5e3615364e6c083715c1133 | https://jcenter.bintray.com/com/getkeepsafe/dexcount/dexcount-gradle-plugin…
-7b0aa6ed7553597ce0610684a9f7eca8021eee218f2e2f427c04a7fbf5f920bd | https://jcenter.bintray.com/com/google/android/apps/common/testing/accessib…
-d46777ad3ea8bca73491b2e02fc85b3664486abf5314cc4dc6740908bd855330 | https://jcenter.bintray.com/com/google/android/apps/common/testing/accessib…
-c98f1b0978cfd24712c27388e040c50ce0692252b3aa9448603d9efa05ebe8a8 | https://jcenter.bintray.com/com/google/auto/auto-parent/3/auto-parent-3.pom
-6cac9421439b39b9f4aa76738ced039462a69911c410f2c372c196b0f4b7f4cf | https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-val…
-901fb1440a0ef8e0c0553a7bb44c0b89647bf53c8822642eea0b57173c7c688d | https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-val…
-905721a0eea90a81534abb7ee6ef4ea2e5e645fa1def0a5cd88402df1b46c9ed | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
-feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
-1e7f53fa5b8b5c807e986ba335665da03f18d660802d8bf061823089d1bee468 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
-02c12c3c2ae12dd475219ff691c82a4d9ea21f44bc594a181295bf6d43dcfbb0 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
-2d43eb5ea9e133d2ee2405cc14f5ee08951b8361302fdd93494a3a997b508d32 | https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.jar
-723936ec07b87b210a44ef8058f32f56e3d56442218dfbf8f4e538a927160ede | https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7.pom
-c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
-a5331a0ecb548f9942ab5b93c7ac43c38a21e897763dde1bcdbf0774f416ca6f | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.pom
-b7134929f7cc7c04021ec1cc27ef63ab907e410cf0588e397b8851181eb91092 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar
-91b9f17a54e6c340c8d3ea4b359401170706eb26a82d51909abe6ba80081aed8 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.2/gson-2.8.2.pom
-871e8c737322301f0cc8acfe39a2960c4579d9d8666aeea5298bb6fcc9e4272b | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.7/gson-paren…
-0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.0/gson-par…
-cf5c43860b53ba5a95c19bc6525cc43d3488a6fe3df2f649c0099a613a0640e3 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.2/gson-par…
-2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
-47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
-757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
-7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
-cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
-9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
-de3c873b5dc06060f7a2a4d9b872a3f4dc1955c18095ef9702d13477e437782a | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
-180a588bb8b4ed7cc554578b0dbfdb1aecfb3380922173df6541da18ee230911 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
-cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.0.18…
-c6b6d61ddb8f6b3bf29e8dafe35ff5d5a1ea90304b457e05657c1e7b8063a143 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.1.2/…
-cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://jcenter.bintray.com/com/google/google/1/google-1.pom
-36a666e3b71ae7f0f0dca23654b67e086e6c93d192f60ba5dfd5519db6c288c8 | https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0.jar
-363cc83767b760d7a564d5301e09467e6d48fc1c1c1664b1e18c50815ce19076 | https://jcenter.bintray.com/com/google/guava/guava/20.0/guava-20.0.pom
-1158e94c7de4da480873f0b4ab4a1da14c0d23d4b1902cc94a58a6f0f9ab579e | https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.jar
-bfadb3b40f65dd6de1666d6b29f8bb54031396c76eeef4146cf9f28255f8bf33 | https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.pom
-7baa80df284117e5b945b19b98d367a85ea7b7801bd358ff657946c3bd1b6596 | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.jar
-ac2ac42a7a6b4ce5097c6c83e2fbbacbbb7f9913f1b4f993eb1723a14476324e | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.pom
-f1226fd07fc72af8d6232bdfa70bf31d883a1a01cbc547f23a74e9066c692df1 | https://jcenter.bintray.com/com/google/guava/guava-parent/20.0/guava-parent…
-1eaf9182e1977c1c50a70edbfbf70536398c68990bfaafc9f0e9899041201539 | https://jcenter.bintray.com/com/google/guava/guava-parent/22.0/guava-parent…
-66cc3a0d329f9fe130605fdb2c901e5a9bb2612f02f23a76757b46e689b3594d | https://jcenter.bintray.com/com/google/guava/guava-parent/23.0/guava-parent…
-2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
-f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
-c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
-efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
-c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
-55aa554843983f431df5616112cf688d38aa17c132357afd1c109435bfdac4e6 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/2.6.1/protobu…
-89fc0cd20db030033ba04bb00c2837efe1e530b00f86935d6a645717d15bb978 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/2.6.1/protobu…
-dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
-83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
-4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
-89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
-24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://jcenter.bintray.com/com/google/protobuf/protobuf-parent/3.4.0/proto…
-e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab | https://jcenter.bintray.com/com/ibm/icu/icu4j/53.1/icu4j-53.1.jar
-a0700d84efe7cc3103557bd0522f9443681b96ba9559c4bb7f9dc9bf35243485 | https://jcenter.bintray.com/com/ibm/icu/icu4j/53.1/icu4j-53.1.pom
-2643837251ebdff33a7731646abb563a6050dbb1307937a6e401ef25f3c59103 | https://jcenter.bintray.com/com/jayway/android/robotium/robotium/5.5.4/robo…
-d19c24122f9f70221e8d97a54f48fbf43feba5b003963057458982e0407aab42 | https://jcenter.bintray.com/com/jayway/android/robotium/robotium-solo/5.5.4…
-3ec9d39b3e35fad9aab1e6b137466ce2190f88aee897cffa383e94a65287105e | https://jcenter.bintray.com/com/jayway/android/robotium/robotium-solo/5.5.4…
-54b34e941b8e1414bd3e40d736efd3481772dc26db3296f6aa45cec9f6203d86 | https://jcenter.bintray.com/commons-codec/commons-codec/1.6/commons-codec-1…
-a06e35d3fff3a6b813d94894ebf3e498f9540c864c5b39ae783907e3a6c72889 | https://jcenter.bintray.com/commons-codec/commons-codec/1.6/commons-codec-1…
-ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
-e5efcf039cd909688c201dc5479b144fd6f01f0e40252b7fc5e7d2e1b5c07990 | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
-cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
-b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
-ce6f913cad1f0db3aad70186d65c5bc7ffcc9a99e3fe8e0b137312819f7c362f | https://jcenter.bintray.com/commons-logging/commons-logging/1.1.1/commons-l…
-d0f2e16d054e8bb97add9ca26525eb2346f692809fcd2a28787da8ceb3c35ee8 | https://jcenter.bintray.com/commons-logging/commons-logging/1.1.1/commons-l…
-daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
-c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
-8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar
-b3760f40f19e735b2cd418f7656335d926d1d9413e10982a1c9695b64edbb647 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
-f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
-d47fc646324c22c66f2b0e0e743c850dde9a51990c53925e7501d960f2e8df84 | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
-fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
-e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
-1ccea47240da2f0b75dbddb22718fd64cce42c20bf7983e35480b098ab62d26d | https://jcenter.bintray.com/com/squareup/leakcanary/leakcanary-android-no-o…
-7b0cdb372fbde4e801f76bdb416927162ebd32c0c4e53fa39828437d3112c9d5 | https://jcenter.bintray.com/com/squareup/leakcanary/leakcanary-android-no-o…
-1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://jcenter.bintray.com/com/sun/activation/all/1.2.0/all-1.2.0.pom
-993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
-f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
-c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://jcenter.bintray.com/com/sun/istack/istack-commons/2.21/istack-commo…
-c33e67a0807095f02a0e2da139412dd7c4f9cc1a4c054b3e434f96831ba950f4 | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
-ebe7137b5fbfd050545f9a7f3f339ae55beb0b53755071b4fd62aa024c626d1c | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
-b25e0693de21cb92b039a2e4608f396590fb8773108f10d6dc9f1465f03b5be9 | https://jcenter.bintray.com/com/sun/xml/bind/jaxb-bom-ext/2.2.11/jaxb-bom-e…
-b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-parent/2.2.11/jaxb-pa…
-21918cb8e4eda67f24251e909a5d81672201d93604c4ffbf33522ad836a58e90 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.2.11…
-9a398c699a5d3f3b56f1056c68890ede25d94a12d98eabc2a473733e6ab2362c | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-txw-parent/2.2.11/jax…
-27a77db909f3c2833c0b1a37c55af1db06045118ad2eed96ce567b6632bce038 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
-b7505e0ecf7d495b4daa3e6569f71611d1a789dc531cbd92a2025922ff2655d3 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
-fd0857899f1067e0287c2ffd91e38f967a26bd405b83a34650c2742cee9fc261 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/fastinfoset-project/1.2…
-a219a1abf948400b669d08be73a6f9209fb720d237e5ff74c223bffe5f9df93d | https://jcenter.bintray.com/com/thoughtworks/xstream/xstream/1.4.8/xstream-…
-8ba35dd4ea1647b89a8ae082bb6c81d5695a1ec31e73aa57bfa3512069c4bee2 | https://jcenter.bintray.com/com/thoughtworks/xstream/xstream/1.4.8/xstream-…
-c9268e671899430946b54c4d1b93c30f0db1b7df0b39b3c6279d6bd475a6fbdc | https://jcenter.bintray.com/com/thoughtworks/xstream/xstream-parent/1.4.8/x…
-74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.jar
-953b116521a73575eee990e3f2c36a892fb088bb2d9a3027c82193cb7a013ef7 | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
-91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar
-943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.pom
-b5e60cd8b7b5ff01ce4a74c5dd008f4fbd14ced3495d0b47b85cfedc182211f2 | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jax…
-2092a7d8d9bc5698c59b094bdea46622915c48c83ae66d5b5ad549c7bf16155b | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jax…
-59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a | https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.jar
-90f163f78e3ffb6f1c7ad97de9e7eba4eea25807141b85d6d12be67ca25449c4 | https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.pom
-fdff6cfa9ed9cc911c842a5d2395f209ec621ef1239d46810e9e495809d3ae09 | https://jcenter.bintray.com/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.jar
-f5655d331af6afcd4dbaedaa739b889380c771a7e83f7aea5c8544a05074cf0b | https://jcenter.bintray.com/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.pom
-95b8b357d19f63797dd7d67622fd3f18374d64acbc6584faba1c7759a31e8438 | https://jcenter.bintray.com/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal-1.…
-c219d697fa9c8f243d8f6e347499b6d4e8af1d0cac4bbc7b3907d338a2024c13 | https://jcenter.bintray.com/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal-1.…
-ec3a75bebddbf19ff56a281cf5d1ad146169dcaa0e69d7b14f4aaba2e7775f34 | https://jcenter.bintray.com/net/freehaven/tor/control/jtorctl/0.2/jtorctl-0…
-3369726ca2b0e3736c741ff3c22e06f707a1007ff20ccc5b5ba5d0d9a01ead30 | https://jcenter.bintray.com/net/freehaven/tor/control/jtorctl/0.2/jtorctl-0…
-281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf | https://jcenter.bintray.com/net/java/jvnet-parent/1/jvnet-parent-1.pom
-30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a | https://jcenter.bintray.com/net/java/jvnet-parent/3/jvnet-parent-3.pom
-471395735549495297c8ff939b9a32e08b91302020ff773586d27e497abb8fbb | https://jcenter.bintray.com/net/java/jvnet-parent/4/jvnet-parent-4.pom
-26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5 | https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-…
-7af7e2d8b24b4798f04c2b7da24c9fbd1b7557b4e017c2054481565916079092 | https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-…
-f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar
-31ce606f4e9518936299bb0d27c978fa61e185fd1de7c9874fe959a53e34a685 | https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.pom
-1d2e883717b8ab7d3fcc9fa01034d165809a9c94daa6303a838f11e4d36adc86 | https://jcenter.bintray.com/net/sf/proguard/proguard-base/5.3.3/proguard-ba…
-e51efb2ec140b2849b9880fb161cb6e30dd672368a534c1f47ab46d7f537d9ca | https://jcenter.bintray.com/net/sf/proguard/proguard-base/5.3.3/proguard-ba…
-f34b3a0b62cdb468eb7e8335de4edc87958dc299306c2b4ba8ea15e6a4be106a | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/5.3.3/proguard-…
-f26bdec2b9496470c0ce63b0d290816e8000ef018daaa259597ebae947fd690f | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/5.3.3/proguard-…
-0288414509c625b8dd544384fbd29f502bdc8b4f86cfc26625aa23eef9fa6057 | https://jcenter.bintray.com/net/sf/proguard/proguard-parent/5.3.3/proguard-…
-a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
-8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
-401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
-0251dbb938740ace07a53675113eee753ba389db65aebc814b175af50321620e | https://jcenter.bintray.com/org/apache/ant/ant/1.8.0/ant-1.8.0.jar
-e6d920d5a1a34aaaebab1e6a82c36bbfd61f1eeaabc4534ee05d4faad56f1b7a | https://jcenter.bintray.com/org/apache/ant/ant/1.8.0/ant-1.8.0.pom
-da9fd92eacdf63daf0be52eb71accc10ff7943a85d7aac9ea96cf7e03ee3d3cc | https://jcenter.bintray.com/org/apache/ant/ant-launcher/1.8.0/ant-launcher-…
-08426143d37d770f3e4dae45b0870c3ab1ba512cb64418f34496025b72d16760 | https://jcenter.bintray.com/org/apache/ant/ant-launcher/1.8.0/ant-launcher-…
-ecbd655fd71d298eaf0787045b84324ce68936ad0de98c7a9c55538e539f2747 | https://jcenter.bintray.com/org/apache/ant/ant-parent/1.8.0/ant-parent-1.8.…
-ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://jcenter.bintray.com/org/apache/apache/13/apache-13.pom
-36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494 | https://jcenter.bintray.com/org/apache/apache/15/apache-15.pom
-9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://jcenter.bintray.com/org/apache/apache/16/apache-16.pom
-9e9323a26ba8eb2394efef0c96d31b70df570808630dc147cab1e73541cc5194 | https://jcenter.bintray.com/org/apache/apache/4/apache-4.pom
-1933a6037439b389bda2feaccfc0113880fd8d88f7d240d2052b91108dd5ae89 | https://jcenter.bintray.com/org/apache/apache/5/apache-5.pom
-4946e60a547c8eda69f3bc23c5b6f0dadcf8469ea49b1d1da7de34aecfcf18dd | https://jcenter.bintray.com/org/apache/apache/9/apache-9.pom
-2c1542faf343185b7cab9c3d55c8ae5471d6d095d3887a4adefdbdf2984dc0b6 | https://jcenter.bintray.com/org/apache/commons/commons-compress/1.12/common…
-b787d574c851505e76212968b9ae1641ea79804aef7f5a2cee2a01cd4055213a | https://jcenter.bintray.com/org/apache/commons/commons-compress/1.12/common…
-cb49812dc1bfb0ea4f20f398bcae1a88c6406e213e67f7524fb10d4f8ad9347b | https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exe…
-82827f6019c0f71bd74fba886ab337ff6da291f63df9723379a209d6ad3b44f8 | https://jcenter.bintray.com/org/apache/commons/commons-exec/1.3/commons-exe…
-fb8c5e55e30a7addb4ff210858a0e8d2494ed6757bbe19012da99d51586c3cbb | https://jcenter.bintray.com/org/apache/commons/commons-parent/22/commons-pa…
-467ae650442e876867379094e7518dfdd67d22c5352ebd39808c84259e9790ba | https://jcenter.bintray.com/org/apache/commons/commons-parent/25/commons-pa…
-e4d258af8b2ff4032148d415379def7870789a6003e80576f1504b10f26b4be8 | https://jcenter.bintray.com/org/apache/commons/commons-parent/32/commons-pa…
-3a2e69d06d641d1f3b293126dc9e2e4ea6563bf8c36c87e0ab6fa4292d04b79c | https://jcenter.bintray.com/org/apache/commons/commons-parent/34/commons-pa…
-7098a1ab8336ecd4c9dc21cbbcac869f82c66f64b8ac4f7988d41b4fcb44e49a | https://jcenter.bintray.com/org/apache/commons/commons-parent/35/commons-pa…
-87cd27e1a02a5c3eb6d85059ce98696bb1b44c2b8b650f0567c86df60fa61da7 | https://jcenter.bintray.com/org/apache/commons/commons-parent/39/commons-pa…
-8bd632c00bdf80a7de36c22b60f12452c147d8eca2f00d79d66699ebe7daa02a | https://jcenter.bintray.com/org/apache/commons/commons-parent/5/commons-par…
-362e9324ee7c697e21279e20077b52737ddef3f1b2c1a7abe5ad34b465145550 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.2.6/http…
-f5a0a1eeaa100ed36aa83eca562d5dbb7e9b045c98b44db7da4745e9d9a20328 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.2.6/http…
-0dffc621400d6c632f55787d996b8aeca36b30746a716e079a985f24d8074057 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.2/http…
-488001ba21829a4b28b0efbed18dccb13689f58f0985453863257049f7ec19f0 | https://jcenter.bintray.com/org/apache/httpcomponents/httpclient/4.5.2/http…
-5215b648798c6c8d9b9cde3642d3bfb5a4cc894b7c8411004352e7de5d119827 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
-52b6fd2eaf2240e14dbe752f1fa884270cc668d6f350e8e7f65f6033a8172d69 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
-1de8cba6c1e5c46b28619e335a6fb7204c352dba3e8b1cefb4b59575e2beed01 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-client…
-164e7a9cf23a4e63bbc961f8db7d965d53d685710660a88249641f91d36f83a4 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-core/4…
-18d9243541c80848d5378bad89fccc5e1bf5c0465b2481d948b0c06851091cdc | https://jcenter.bintray.com/org/apache/httpcomponents/httpcomponents-core/4…
-e5e82da4cc66c8d917bbf743e3c0752efe8522735e7fc9dbddb65bccea81cfe9 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.2.5/httpco…
-b6eb99f1362b8344ca5400d57a35c49e3504f23f3dee304fdb879d4d953f4bc6 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.2.5/httpco…
-64d5453874cab7e40a7065cb01a9a9ca1053845a9786b478878b679e0580cec3 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.5/httpco…
-147fa18df753534e50054d018a360f789902af1e5c24322a3f0b200d0684fed2 | https://jcenter.bintray.com/org/apache/httpcomponents/httpcore/4.4.5/httpco…
-31629566148e8a47688ae43b420abc3ecd783ed15b33bebc00824bf24c9b15aa | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.1/httpmime…
-db3cd95bec1001605e1653f2843e8542e712fa2bb672fd9c8c1ace86c57673d1 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.1/httpmime…
-231a3f7e4962053db2be8461d5422e68fc458a3a7dd7d8ada803a348e21f8f07 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.2/httpmi…
-004b5b6272d820029adefcaaa92186ec46a485990b54d03509e441eda85b3784 | https://jcenter.bintray.com/org/apache/httpcomponents/httpmime/4.5.2/httpmi…
-21bb4d44dff54e33a37c11af69859a714202ae00969aab5453eba7276688f8ec | https://jcenter.bintray.com/org/apache/httpcomponents/project/4.1.1/project…
-3d6eba428555a558de046b5d76eacc1f5a54b4f5f20b84d636ed7aff18aa48c3 | https://jcenter.bintray.com/org/apache/httpcomponents/project/7/project-7.p…
-d135cff96dcbbc8a5fab30180e557cae620373cf26941d4c738a88896a2d98ed | https://jcenter.bintray.com/org/apache/maven/maven/2.2.1/maven-2.2.1.pom
-f16b5ea711dfe0323454b880180aa832420ec039936e4aa75fb978748634808a | https://jcenter.bintray.com/org/apache/maven/maven-ant-tasks/2.1.3/maven-an…
-f52619bf2f5c5117f0af1c23adff3a9c8f468647be47fefc59b81dcec7e480e6 | https://jcenter.bintray.com/org/apache/maven/maven-ant-tasks/2.1.3/maven-an…
-d53062ffe8677a4f5e1ad3a1d1fa37ed600fab39166d39be7ed204635c5f839b | https://jcenter.bintray.com/org/apache/maven/maven-artifact/2.2.1/maven-art…
-f658a628efd6e0efe416b977638ba144af660fe6413f3637a4d03feb6a1ce806 | https://jcenter.bintray.com/org/apache/maven/maven-artifact/2.2.1/maven-art…
-d1e247c4ed3952385fd704ac9db2a222247cfe7d20508b4f3c76b90f857952ed | https://jcenter.bintray.com/org/apache/maven/maven-artifact-manager/2.2.1/m…
-ecf58351f8fe0c398b8b452216705bece5291b9b327d30202c16b28ac680450c | https://jcenter.bintray.com/org/apache/maven/maven-artifact-manager/2.2.1/m…
-b3005544708f8583e455c22b09a4940596a057108bccdadb9db4d8e048091fed | https://jcenter.bintray.com/org/apache/maven/maven-error-diagnostics/2.2.1/…
-228367b7569fb1462a3eb1423bc2778e2fc7fbaee3d3767890c02b8924fa1889 | https://jcenter.bintray.com/org/apache/maven/maven-error-diagnostics/2.2.1/…
-153b32f474fd676ec36ad807c508885005139140fc92168bb76bf6be31f8efb8 | https://jcenter.bintray.com/org/apache/maven/maven-model/2.2.1/maven-model-…
-62dd8e35a2c4432bb22f8250bbfe08639635599b4064d5d747bd24cf3c02fac5 | https://jcenter.bintray.com/org/apache/maven/maven-model/2.2.1/maven-model-…
-7450c3330cf06c254db9f0dc5ef49eac15502311cf19e0208ba473076ee043d6 | https://jcenter.bintray.com/org/apache/maven/maven-parent/11/maven-parent-1…
-0c5a9770ae0271dc97bcc6cb0f2e809a40ba587cdce2556f9db59912c8e158fc | https://jcenter.bintray.com/org/apache/maven/maven-parent/19/maven-parent-1…
-4ad0673155d7e0e5cf6d13689802d8d507f38e5ea00a6d2fb92aef206108213d | https://jcenter.bintray.com/org/apache/maven/maven-plugin-registry/2.2.1/ma…
-3db15325cd620c0e54c3d88b6b7ec1bac43db376e18c9bf56bd0c05402ee6be8 | https://jcenter.bintray.com/org/apache/maven/maven-plugin-registry/2.2.1/ma…
-ecaffef655fea6b138f0855a12f7dbb59fc0d6bffb5c1bfd31803cccb49ea08c | https://jcenter.bintray.com/org/apache/maven/maven-profile/2.2.1/maven-prof…
-d125b3ade9f694ae60ef835f5ae000b6ba35fba8c34bafd8b40a1961375e63fa | https://jcenter.bintray.com/org/apache/maven/maven-profile/2.2.1/maven-prof…
-24ddb65b7a6c3befb6267ce5f739f237c84eba99389265c30df67c3dd8396a40 | https://jcenter.bintray.com/org/apache/maven/maven-project/2.2.1/maven-proj…
-34af0baedaef19375b7c1a7da967e9089d5e0754647fdbe9a302590392874b77 | https://jcenter.bintray.com/org/apache/maven/maven-project/2.2.1/maven-proj…
-5fe283f47b0e7f7d95a4252af3fa7a0db4d8f080cd9df308608c0472b8f168a1 | https://jcenter.bintray.com/org/apache/maven/maven-repository-metadata/2.2.…
-9dad0f56523955b60a9903f4e8342891355d7a59c77f36a3b53cf6ff2e4df625 | https://jcenter.bintray.com/org/apache/maven/maven-repository-metadata/2.2.…
-9a9f556713a404e770c9dbdaed7eb086078014c989291960c76fdde6db4192f7 | https://jcenter.bintray.com/org/apache/maven/maven-settings/2.2.1/maven-set…
-0d25a88a1b1e44801f8912206a40ff249cb5702ee87cf3d243d5213f7bcf534f | https://jcenter.bintray.com/org/apache/maven/maven-settings/2.2.1/maven-set…
-025caec7c56a0cb4d86c45bc18ac3e23dba291e22ebceb76302a9a9b9b7183cc | https://jcenter.bintray.com/org/apache/maven/wagon/wagon/1.0-beta-6/wagon-1…
-7298feeb36ff14dd933c38e62585fb9973fea32fb3c4bc5379428cb1aac5dd3c | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-file/1.0-beta-6/wa…
-f7524cfffc9773ea75a9f7379139f00a57355e411009ea9529b7adf7ef93fde8 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-file/1.0-beta-6/wa…
-be214032de23c6b520b79c1ccdb160948e0c67ed7c11984b7ec4ca5537867b4e | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-lightweight/1…
-f021eb07aebec822496f489a2d6ec5d3fa81a2717bfc8407cb0ebcaadcee2d7e | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-lightweight/1…
-f095c882716d49269a806685dcb256fa6a36389b2713ac56bb758bf8693565a2 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-shared/1.0-be…
-f6775dc981540ffa10f33bd831f14608517ce38b90628e045707dd5bb5d1348e | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-http-shared/1.0-be…
-e116f32edcb77067289a3148143f2c0c97b27cf9a1342f8108ee37dec4868861 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-provider-api/1.0-b…
-85c3c8840bb21554faf159998146f7ca9ef1b951defb29ec4e8252ec463728fd | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-provider-api/1.0-b…
-340422be8f3e3c847a0a0bf944296774f6db81f2fa8b34912bc931a112a26919 | https://jcenter.bintray.com/org/apache/maven/wagon/wagon-providers/1.0-beta…
-7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca | https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk…
-321668fc474a73140eb9cc73c779f1ebb9f60948aade3beddee082ecefcf0259 | https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk…
-0dc4d181e4d347893c2ddbd2e6cd5d7287fc651c03648fa64b2341c7366b1773 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk…
-7e4a34c7b63d879c5cec454e2e47eb1e61e271a58672e7e548659f4f23742500 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk…
-963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349 | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk…
-8fdc3336e7b01873193ba9c48b87de7d788dc0954d1eb45c322492627a4b5c6e | https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk…
-50eb253acd0b6ee048f432d9fc3a3b36264efb3da1ffa7fb07f6c4d4b7a8ca31 | https://jcenter.bintray.com/org/codehaus/codehaus-parent/3/codehaus-parent-…
-6b87237de8c2e1740cf80627c7f3ce3e15de1930bb250c55a1eca94fa3e014df | https://jcenter.bintray.com/org/codehaus/codehaus-parent/4/codehaus-parent-…
-6a56af4bd48903d56bec62821876cadefafd007360cc6bd0d8f7aa8d72b38be4 | https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.12/groovy-al…
-a8cd12c8da17b31e0fb46e64f7d3fc2e63344ca13815bade32a2d54fa2dedd3c | https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.12/groovy-al…
-2068320bd6bad744c3673ab048f67e30bef8f518996fa380033556600669905d | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.…
-1879f19a05991e3ed95910b96689333396b0c467a215dc4d1f90018404b72a26 | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.…
-f51550a06b1410bd4962cb0e71df0b921a60a7ef47bfa9c4825a14be72316eea | https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-parent/1.14/an…
-3e395d6fbc43c09a3774cac8694ce527398305ea3fd5492d80e25af27d382a9c | https://jcenter.bintray.com/org/codehaus/mojo/mojo-parent/34/mojo-parent-34…
-2242fd02d12b1ca73267fb3d89863025517200e7a4ee426cba4667d0172c74c3 | https://jcenter.bintray.com/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.p…
-e246e2a062b5d989fdefc521c9c56431ba5554ff8d2344edee9218a34a546a33 | https://jcenter.bintray.com/org/codehaus/plexus/plexus/2.0.2/plexus-2.0.2.p…
-381d72c526be217b770f9f8c3f749a86d3b1548ac5c1fcb48d267530ec60d43f | https://jcenter.bintray.com/org/codehaus/plexus/plexus-components/1.1.14/pl…
-7c758612888782ccfe376823aee7cdcc7e0cdafb097f7ef50295a0b0c3a16edf | https://jcenter.bintray.com/org/codehaus/plexus/plexus-container-default/1.…
-ef71d45a49edfe76be0f520312a76bc2aae73ec0743a5ffffe10d30122c6e2b2 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-container-default/1.…
-7c75075badcb014443ee94c8c4cad2f4a9905be3ce9430fe7b220afc7fa3a80f | https://jcenter.bintray.com/org/codehaus/plexus/plexus-containers/1.0.3/ple…
-fd9507feb858fa620d1b4aa4b7039fdea1a77e09d3fd28cfbddfff468d9d8c28 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-interpolation/1.11/p…
-b84d281f59b9da528139e0752a0e1cab0bd98d52c58442b00e45c9748e1d9eee | https://jcenter.bintray.com/org/codehaus/plexus/plexus-interpolation/1.11/p…
-2ca121831e597b4d8f2cb22d17c5c041fc23a7777ceb6bfbdd4dfb34bbe7d997 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-utils/1.5.15/plexus-…
-12a3c9a32b82fdc95223cab1f9d344e14ef3e396da14c4d0013451646f3280e7 | https://jcenter.bintray.com/org/codehaus/plexus/plexus-utils/1.5.15/plexus-…
-5c9f9714232f0f8ffb94d9a8cd7b5a43a8282c66adbb3ff9c2b6a928a6eed621 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-continuation/7.6.21.v20…
-608b26cf0f48c53857028e5073568d4b7867412a1ba5d6ae0f855f9853f90de9 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-continuation/7.6.21.v20…
-83823cb344a79340c2a454856f1b3931dca16b2791203220b510cf1ab7149ecb | https://jcenter.bintray.com/org/eclipse/jetty/jetty-http/7.6.21.v20160908/j…
-ee13eeebca316b72c07fbeab6c8bd5e0fba42d17b3a2aaa92dbe69a0e76c544d | https://jcenter.bintray.com/org/eclipse/jetty/jetty-http/7.6.21.v20160908/j…
-e228770d72984d88a65e56e8993edf24de00b134f28280ab43509f7f1d9652d7 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-io/7.6.21.v20160908/jet…
-2226dc95295952d18be6fe4f1714fbc74a4c312803483939e3b5096c9185aac6 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-io/7.6.21.v20160908/jet…
-a3578c9748a785c8d5be737222d3078663f590332ce3d5d24bd132825c73f63c | https://jcenter.bintray.com/org/eclipse/jetty/jetty-parent/18/jetty-parent-…
-cad17899a82a634fb487060875eb66dfbaf6e4127abab78655d43028de4af284 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-parent/20/jetty-parent-…
-9547b29f5e3abb4908db3986076e61c43ce33baf22dfd3e515ed2e0c9ec5cc80 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-project/7.6.21.v2016090…
-37270df84eedb56652f62ee777a2a6ee69d5a360b0501d3d96a050ec233518fc | https://jcenter.bintray.com/org/eclipse/jetty/jetty-server/7.6.21.v20160908…
-1de7d02de2a034808614cff189080c536a722b28084a39365aef75253ac3b62b | https://jcenter.bintray.com/org/eclipse/jetty/jetty-server/7.6.21.v20160908…
-5160e7e35558ca7e4cda300cd046892b14c233679b8159d68074ed00fafdc7fc | https://jcenter.bintray.com/org/eclipse/jetty/jetty-util/7.6.21.v20160908/j…
-cfa292af1dd93eafd970ba00c30c55f39dab6db9911dcac8eb0897ab8c6bac09 | https://jcenter.bintray.com/org/eclipse/jetty/jetty-util/7.6.21.v20160908/j…
-fbeb9035112292148b211226409ea25d8acc5b6ba2f7afe806516d79e50e10fc | https://jcenter.bintray.com/org/eclipse/jetty/orbit/javax.servlet/2.5.0.v20…
-01863a492c538b35729d7f9e37ada84cc9dfb693ba28b26421c28c283c181132 | https://jcenter.bintray.com/org/eclipse/jetty/orbit/javax.servlet/2.5.0.v20…
-7db6c47b0d2868b832aa36a45ddfce7158759ff49f8125235e165f17bf24c128 | https://jcenter.bintray.com/org/eclipse/jetty/orbit/jetty-orbit/1/jetty-orb…
-a52e6850f070dc9f7a2a51d0b25dfaafd49b0b9bf8196db6c0b3c5b7c94d8d38 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-bom/2.2.11/jaxb-bom-2.2…
-37bcaee8ebb04362c8352a5bf6221b86967ecdab5164c696b10b9a2bb587b2aa | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2…
-ec31409f203bcabf99534f59231ec0576d875d4d4b7349b09566a7a8c8179b24 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2…
-a874f2351cfba8e2946be3002d10c18a6da8f21b52ba2acf52f2b85d5520ed70 | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-run…
-e5327b31b595ab8143e97836d5ccdf85feb91e7ff5666f7b26913632facca4aa | https://jcenter.bintray.com/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-run…
-272a3ccad45a4511351920cd2a8633c53cab8d5220c7a92954da5526bb5eafea | https://jcenter.bintray.com/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.jar
-8514cb724b4fca59a5cf272b632e539bd0a0f3cacf1844082d0a173a86406bd8 | https://jcenter.bintray.com/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.pom
-66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9 | https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.…
-fde386a7905173a1b103de6ab820727584b50d0e32282e2797787c20a64ffa93 | https://jcenter.bintray.com/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.…
-70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2 | https://jcenter.bintray.com/org/hamcrest/hamcrest-integration/1.3/hamcrest-…
-42f0be9bf98c12dacdcb99dd141d83d4dc5bb7c37a6f26684cd3ff2287667fba | https://jcenter.bintray.com/org/hamcrest/hamcrest-integration/1.3/hamcrest-…
-711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c | https://jcenter.bintray.com/org/hamcrest/hamcrest-library/1.3/hamcrest-libr…
-1ceb4bfb0f098ae29b935044b2363e11323313fe3ed2055df8b79737d5056277 | https://jcenter.bintray.com/org/hamcrest/hamcrest-library/1.3/hamcrest-libr…
-6d535f94efb663bdb682c9f27a50335394688009642ba7a9677504bc1be4129b | https://jcenter.bintray.com/org/hamcrest/hamcrest-parent/1.3/hamcrest-paren…
-ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
-965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
-acb770bfe2faffd3704a5d79ad855ecf41a91165bb4ef4bab179b7529fb892d4 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
-a422c43a10feb4b0a4a426100229ce4e8b5df45077948edd0eec509a552ec583 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
-00f5c978f4884a7659b9d613981e4479b3227a9506e8622dc423e29e4e1d3380 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
-014db56312c2b7d402264d225d08c0a4c1c3bf98f8f02f1d41ba66cd30ba6783 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
-9729763ff014afdb7eb506a5f579da6974ab47a04a639971f916647a3877d9ef | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.2.41…
-80c1295507a4f456dde8362c7796e561c461613ccc89c040e55e87e8c2000d47 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.2.41…
-e2ab5aaf76d3c63974ad667e3aeae48e80488d06420f08ec5b81df102ac5e51e | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-embeddable…
-fff6a1348be06114fd7fefed7199233358206c538ab0cfe7f59d34e4c0f9779f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-embeddable…
-206ca2239053a335276e58fa41db466fffc4bf8b4a27cc63069d52abc14c9572 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.2…
-782191c19e99ac17bf9ae030dc0160f45d0d9c07daaf095d62e837bdfa82a67f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.2…
-e0c4e37c03d4a48d2fcf6ca5925d3cc09eabefac09e354fd9dd0655b37e708e2 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.2.4…
-895a8d2f076e99fceacc334c7f248890b785235737f2b2015576ea52323bb389 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.2.4…
-ba436f75e06013dc4b8015ba147c1146ec6cd17aa4ed1f7e2c5fecd26d945ac1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.4…
-607f658e54da3a79989c3cf9f78d410d111bc623ab3386b42682a790109dae04 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.2.4…
-51ddb2077ac425c1619b9c150c5534f8a36a3cff46657e72cd4e33376537c0c5 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
-ab86c4ce4a437ef53c5eadfce390003c6f3941e80ce65fa49f2964016432c6aa | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
-4f48a872bad6e4d9c053f4ad610d11e4012ad7e58dc19a03dd5eb811f36069dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
-f35215da1bed69e3d60735d76221d7012cd1a5bc0a30f6f7421719ada463b4dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
-1bab75771dfa2bb5949cd383ceaedf6f8d354fa0d677804fc5a39e320bab70d3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.41/kotl…
-59bd71c9eb0029386c34da8fe324e5adb77e7f653bae22c36e5ba7cfaf7d2ffd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.41/kotl…
-3c6a25008fb927815fd6b03f0b33694d53d24078c966d1ca54ab6019d5552ecb | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.2.…
-eb1fec93b39883a644c416504c136a609af6283d3e90fc09664f01ca5d299da2 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.2.…
-358700f7a5b932bce30ebb0010641a9cade4b8499a60845717b2e22a39697f92 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/kotli…
-05cfd9f5ac0b41910703a8925f7211a495909b27a2ffdd1c5106f1689aeafcd4 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
-ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
-f0595b9ed88ddc6fd66bddf68c56c6f2f6c4b17faa51e43e478acad32b05303e | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.41/kotli…
-9fb5e136d7d550300ebf6f61e22d1bb14193e08a41f21fab474b1f2a44e0de33 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.41/kotli…
-4c895c270b87f5fec2a2796e1d89c15407ee821de961527c28588bb46afbc68b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
-713db77c9a0c47a670f95c23b0051b9bd942b3a0ea1f6cc9bb5d9eaba1fa75ae | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
-63999687ff2fce8a592dd180ffbbf8f1d21c26b4044c55cdc74ff3cf3b3cf328 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
-a8c3ed5892032b9e9395524a4da2953975c99628b932df3336b25d546e7c6693 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
-b136bd61b240e07d4d92ce00d3bd1dbf584400a7bf5f220c2f3cd22446858082 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/…
-941426d95526c828e794791a1da889b62f1f29e0220cf2f2e8dc09b6197080b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/…
-ac3c8abf47790b64b4f7e2509a53f0c145e061ac1612a597520535d199946ea9 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
-845c33f0e9ed5f66bca2d7ed39873f3e75920c5e33de984c25c48760f79594b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
-c7a20fb951d437797afe8980aff6c1e5a03f310c661ba58ba1d4fa90cb0f2926 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/k…
-2077417c22d3ab7734ce35385e9c3f4721840fa8df925edb19abe3eea8507348 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/k…
-633524eee6ef1941f7cb1dab7ee3927b0a221ceee9047aeb5515f4cbb990c82a | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/k…
-6b7a74be21c57056eed1c1606524c3b6381ba091a98925fd934567c4a524ac38 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/k…
-1917871c8deb468307a584680c87a44572f5a8b0b98c6d397fc0f5f86596dbe7 | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
-5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
-a31ff7d77163c0deb09e7fee59ad35ae44c2cee2cc8552a116ccd1583d813fb4 | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.jar
-27cb450b6c367a00bd8362519907f84defac7b12086c64d4d6e97e33ab873ead | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
-d5831ee4f71055800821a34a3051cf1ed5b3702f295ffebd50f65fb5d81a71b8 | https://jcenter.bintray.com/org/mockito/mockito-core/1.10.19/mockito-core-1…
-715268d800bacd07236ee1e6f4407650e61cf979733bc262e4de15fbd13b920d | https://jcenter.bintray.com/org/mockito/mockito-core/1.10.19/mockito-core-1…
-c74330cc6b806c804fd37e74487b4fe5d7c2750c5e15fbc6efa13bdee1bdef80 | https://jcenter.bintray.com/org/objenesis/objenesis/2.1/objenesis-2.1.jar
-4054f186137e3b849a7c23c9e846cd57d8a2fe32c17d4c62bd420512d74c3d3f | https://jcenter.bintray.com/org/objenesis/objenesis/2.1/objenesis-2.1.pom
-343b1a3093410e3fb26c66998423ab389c3a7441cd1a8859bd327dd15b479aa4 | https://jcenter.bintray.com/org/objenesis/objenesis-parent/2.1/objenesis-pa…
-56057490cbc1eeae6227e6eb5c6d5b324b77429b8a78d15027c77d491ef9c675 | https://jcenter.bintray.com/org/ow2/asm/asm/5.0.1/asm-5.0.1.jar
-260cc48a58764afbcadec4a9b41877c5aa826c760ae3b6b1db8bde44074c7c41 | https://jcenter.bintray.com/org/ow2/asm/asm/5.0.1/asm-5.0.1.pom
-d2da399a9967c69f0a21739256fa79d284222c223082cacadc17372244764b54 | https://jcenter.bintray.com/org/ow2/asm/asm/5.1/asm-5.1.jar
-6d079b5abf39f323baaccc68463beef5cf2e9574f333dd749ae96753f00eb205 | https://jcenter.bintray.com/org/ow2/asm/asm/5.1/asm-5.1.pom
-dd8971c74a4e697899a8e95caae4ea8760ea6c486dc6b97b1795e75760420461 | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.jar
-c2bc497e197112e699085426bbb45b1ab0be8002da68267a3b1f450a0312c32e | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.pom
-a34658f5c5de4b573eef21131cc32cc25f7b66407944f312b28ec2e56abb1fa9 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1.j…
-81120db4d5490c4f0e9789e1178d2bac231fcff2618bd80f8ef6ff03c550d59b | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1.p…
-2f1a6387219c3a6cc4856481f221b03bd9f2408a326d416af09af5d6f608c1f4 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.j…
-d3aaf42e40e3e24aabda53b5de4de5e17cb78e06549bf37312dca6c77e251054 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.p…
-fb1cb7fa27d892712ced8fbf8d027eb5052ecd3999dba1ba47824357accb40e7 | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.0.1/asm-commons-5.0.1…
-c3fb02564ca173e45548d7a91aca1efe341db11da2656199d559773e7ae15edf | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.0.1/asm-commons-5.0.1…
-97b3786e1f55e74bddf8ad102bf50e33bbcbc1f6b7fd7b36f0bbbb25cd4981be | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.jar
-cd36b31f1495f4fe55a936dd00607abdd945e1f8074549225a04c402d1d35750 | https://jcenter.bintray.com/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.pom
-9884c02d47244364e1fb27675b5ef3b206a2d2d3141ac77f57fd771a175c2a2f | https://jcenter.bintray.com/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.1.p…
-85ec8258fafc283f61647e6a11b404890821c11db6fcf550779ecf7a14151007 | https://jcenter.bintray.com/org/ow2/asm/asm-parent/5.1/asm-parent-5.1.pom
-791d064bb9ecc9a46d43bc9efecd74c91464dfc451f321b802d2261e2ccd7d14 | https://jcenter.bintray.com/org/ow2/asm/asm-parent/6.0/asm-parent-6.0.pom
-ff2aceed10da9930a44f6c8f81c6372d5e55eb59c4e0ea9d37f77dfd765fa9fa | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.0.1/asm-tree-5.0.1.jar
-401429d864e4c28b0ef7bc9213ac7b48989f8a9a26db200abb8c65f41f5a503e | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.0.1/asm-tree-5.0.1.pom
-c0de2bbc4cb8297419659813ecd4ed1d077ed1dd5c1f5544cc5143e493e84c10 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.jar
-fb5369fc7ea4b2e3cf8d6f20243f1d97f81341bf818b179cd8dbd1da7a781a21 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
-887998fb69727c8759e4d253f856822801e33f9fd4caa566b3ac58ee92106215 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.jar
-36887e0d7fdb185a92378a38ea45e596a97f10f385c5d050eb6252454ee701b4 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.pom
-ee032c39ae5e3cd099148fbba9a2124f9ed613e5cb93e03ee0fa8808ce364040 | https://jcenter.bintray.com/org/ow2/asm/asm-util/5.1/asm-util-5.1.jar
-0c0e9d1857c250d1d71b5c6be7b8cc29afe55e7419a90d13bbe968ae5bd7240e | https://jcenter.bintray.com/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
-51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://jcenter.bintray.com/org/ow2/ow2/1.3/ow2-1.3.pom
-8eab08facfe2a8cd22f6a09f4378f012a5985c0d4f4ad4e203e00f75b5568458 | https://jcenter.bintray.com/org/robolectric/annotations/3.8/annotations-3.8…
-bf40b33056435efecf61ca46a0920af23ccc1660202f64d554aee41192db921f | https://jcenter.bintray.com/org/robolectric/annotations/3.8/annotations-3.8…
-042575dbc95dc82ec046d13438ccda578917ce786d2f464cba0eb18da1f412cb | https://jcenter.bintray.com/org/robolectric/junit/3.8/junit-3.8.jar
-61e4385874b356b8fb471551a0e3896639235162b3e027368897a96c4c9ab2bd | https://jcenter.bintray.com/org/robolectric/junit/3.8/junit-3.8.pom
-6d11e6d39df8eda837c52319cf8d6bef424df45be6f29b3a731707832eb6ffc1 | https://jcenter.bintray.com/org/robolectric/resources/3.8/resources-3.8.jar
-f5c0786b4db83e511a9e3fb2057a62d6861eb763507e2c6c8a07775d77938b5c | https://jcenter.bintray.com/org/robolectric/resources/3.8/resources-3.8.pom
-34908fc858e6e4113be2cf97fe55d3ffa4462bf7183d466542582ca1898ce60a | https://jcenter.bintray.com/org/robolectric/robolectric/3.8/robolectric-3.8…
-10ac87594ff278171fd93b060ce8f6ff728017cb947a1ac9eb4b41ac15c8c62b | https://jcenter.bintray.com/org/robolectric/robolectric/3.8/robolectric-3.8…
-cc257dc75c5af9e62a43572ac89dff4d8520427307cf973e6b663c88fb000720 | https://jcenter.bintray.com/org/robolectric/sandbox/3.8/sandbox-3.8.jar
-1ed4828519379b818869109119fb58ea8507cd0ac3d3d81399d74cd3c4968b21 | https://jcenter.bintray.com/org/robolectric/sandbox/3.8/sandbox-3.8.pom
-28bc24cb5c4b4030852cebebfd5f12536d03088892cb3c8b1d1379297087aca8 | https://jcenter.bintray.com/org/robolectric/shadowapi/3.8/shadowapi-3.8.jar
-d829088fff1f348db140a8360269e829e9bcdc9fa05dc8facfbcf377c5ebbc45 | https://jcenter.bintray.com/org/robolectric/shadowapi/3.8/shadowapi-3.8.pom
-83548db7249edf1af87e1a1f4d8f4eec3e85d6220161da601e6f6398476911b2 | https://jcenter.bintray.com/org/robolectric/shadows-framework/3.8/shadows-f…
-57da4b662882bb49b58d09fa3226e7c42a34e4030cf9f71ec2779e8334ffda70 | https://jcenter.bintray.com/org/robolectric/shadows-framework/3.8/shadows-f…
-e945d04d40e37554e02d4be1bc3abf9bede45375c843aa36d10ccb6b63edbf34 | https://jcenter.bintray.com/org/robolectric/utils/3.8/utils-3.8.jar
-00f42db29b1d9dcb7a7f92602a92e40d053be3030c6efd030e3f9858ceb60c99 | https://jcenter.bintray.com/org/robolectric/utils/3.8/utils-3.8.pom
-50cadbcd70d80cf627661628e9d5163fe4f0757b87e89e68b43663b509c031d5 | https://jcenter.bintray.com/org/simpleframework/simple-common/6.0.1/simple-…
-70cc10a9e0b028dd98ca870354afc45eb61eebbd5c6b247b9dd00b4af2b9279a | https://jcenter.bintray.com/org/simpleframework/simple-common/6.0.1/simple-…
-ef5ff4dc0257c1eebed07da22b4695ffdd3030da8d224282fb9c565b56cf2f24 | https://jcenter.bintray.com/org/simpleframework/simple-http/6.0.1/simple-ht…
-1870cb5f561ac94760064c5eff8d4259692dd5845680113e78ed9b239e6cf34a | https://jcenter.bintray.com/org/simpleframework/simple-http/6.0.1/simple-ht…
-1bd627d7252500462075f4a08cd0db4dbbf1ccecc08b093709551b54c8649085 | https://jcenter.bintray.com/org/simpleframework/simple-transport/6.0.1/simp…
-616da56b2e90bf055b90436800259a8f82715f8e03307c512483328380a51248 | https://jcenter.bintray.com/org/simpleframework/simple-transport/6.0.1/simp…
-fbd7b254e02d8aef60c418a5f0e14a783b38a16162caffb2d2a16ccd5d2c09b4 | https://jcenter.bintray.com/org/slf4j/slf4j-android/1.7.25/slf4j-android-1.…
-bd9b9cb1a3987b1427f7a18babe7f92078e32bbe2e1dca6dced00cc0e3a077a9 | https://jcenter.bintray.com/org/slf4j/slf4j-android/1.7.25/slf4j-android-1.…
-18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79 | https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar
-7cd9d7a0b5d93dfd461a148891b43509cf403a9c7f9fb49060d3554df1c81e1e | https://jcenter.bintray.com/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.pom
-18f5c52120db036e88d6136f8839c832d074bdda95c756c6f429249d2db54ac6 | https://jcenter.bintray.com/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1.7.…
-c513995cf019d9213d4fda666589937b2bf1bea5c4cdd337e6170e80b18406ee | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/4/oss-parent-4.pom
-b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
-fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
-d4e441fda1b3ad70b266793cc4b6d02bec8720875b796fadc063fc713f948549 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-android.…
-174d423722256823edbe2af8d7e3385c4645cf72382a22da0485b3b674394f37 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.pom
-34e08ee62116071cbb69c0ed70d15a7a5b208d62798c59f2120bb8929324cb63 | https://jcenter.bintray.com/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar
-8f10ffd8df0d3e9819c8cc8402709c6b248bc53a954ef6e45470d9ae3a5735fb | https://jcenter.bintray.com/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom
-bfc90e9e32d0eab1f397fb974b5f150a815188382ac41f372a7149d5bc178008 | https://jcenter.bintray.com/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar
-b5b46ac0c09da41b04dbc753456b48912856a7ffbb1490676910b510c471d13f | https://jcenter.bintray.com/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.pom
-3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.jar
-eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.pom
-c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar
-30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.pom
-8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.j…
-1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.p…
-7078b5c8ccb94203df9cc2a463c69cf0021596e6cf966d78fbfd697aaafe0630 | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
-24ae9a6ad8234173ba20eef298fbd56ed3dff618698cedbbe6b0515d24862d0a | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
-429426b2feec2245ffc5e75b3b5309bedb36159cf06dc71843ae43526ac289b6 | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
-e7289037e703c2608f46a727deab8937a312a922537f6d9bdfba5a56cd8da50a | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
-50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
-e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
-d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
-67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
-c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
-c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
-7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
-deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
-aba9445ffb0cb0070958cb9f37bf6ac6e4b789bcfc51ab4f6e168ea1d502c532 | https://maven.google.com/com/android/databinding/baseLibrary/3.1.4/baseLibr…
-1b93a8eac30f0fc74cb8af788da446f45144b6f5b1c9c3c71968110defe58699 | https://maven.google.com/com/android/databinding/baseLibrary/3.1.4/baseLibr…
-8b42d25a8b5c238f8c550d04a6301101a6f67e8945061fa38eeb4c2fb414ad4f | https://maven.google.com/com/android/databinding/compilerCommon/3.1.4/compi…
-a9f962192a31e347e58dce048d5654e6b171aa6602305b5501bbd7b5a9326369 | https://maven.google.com/com/android/databinding/compilerCommon/3.1.4/compi…
-271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
-d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
-a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
-d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
-115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
-790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
-bc9e6b0e06ce1205f1db34f0e6193019613d19cfeb54cdccea722340d1c60f26 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
-887ea96fc365743d8735b0446df3fbe77eb5a2e203acab1423346aa3319d8395 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
-93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://maven.google.com/com/android/support/collections/28.0.0/collections…
-f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://maven.google.com/com/android/support/collections/28.0.0/collections…
-9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
-cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
-87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
-5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
-2da4044cffa390448dd77e31e9179fc84a1e4c896668880d35082a4bd30cd300 | https://maven.google.com/com/android/support/customtabs/28.0.0/customtabs-2…
-4f48673d6c35084926d683cdd68334a89106eb72436ffbbb30ef0a7400038021 | https://maven.google.com/com/android/support/customtabs/28.0.0/customtabs-2…
-98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
-187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
-7874ad1904eedc74aa41cffffb7f759d8990056f3bbbc9264911651c67c42f5f | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.aar
-ba16a815266a3b5ce69d57e4c40ba7eb22ee91b8016f2fa3a9d73bd6917e31b4 | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.pom
-47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
-5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
-8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
-424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
-7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
-296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
-920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.aar
-9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.pom
-d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
-351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
-ecf6098572e23b5155bab3b9a82b2fd1530eda6c6c157745e0f5287c66eec60c | https://maven.google.com/com/android/support/multidex/1.0.3/multidex-1.0.3.…
-c84c0e5e72761812e0140aee7d9d1a803de90668ea56efd0cfe7d23d7482e084 | https://maven.google.com/com/android/support/multidex/1.0.3/multidex-1.0.3.…
-b48db30d7e96af32f400af4b91d3b95481d8fff3146278190eb3b922d3846f15 | https://maven.google.com/com/android/support/multidex-instrumentation/1.0.2…
-c7a755c35a13737ab78ef7090b945dc1156421d845f3c86e8227858a6d95611b | https://maven.google.com/com/android/support/multidex-instrumentation/1.0.2…
-317202dddb953d152d0677dbd8bb3b9d8ef8dcd0bdee0da4f40c98826e4960e6 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
-b609f2c1a2fb3edc2f9ed02214660c90e16103d992307ae531e2a1a5bae82138 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
-4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.aar
-e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.pom
-eb296414c1f6d4c7b522f69fe50588ea85297855db0e7806c24eb4f75409587d | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
-3b280edfcf646b1f51256b2b6b581d8b0194514fd248666c3dfdc0a04edb8686 | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
-d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
-be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
-3eae72fcf02a175efa1377886e6500e6147f92104ff43ee92b9b69d59357b90d | https://maven.google.com/com/android/support/support-annotations/26.1.0/sup…
-5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
-a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
-e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
-6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
-bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
-708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
-c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
-86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
-3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
-d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
-266eff9605f515013eee1ebdbd8818a9270696dc807f34bbcc5fc11fb61a22c7 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
-e88505a92565f4c0fabb1c9a40326a339a2d51ee843c8a097828a3a85c934f27 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
-8b9031381c678d628c9e47b566ae1d161e1c9710f7855c759beeac7596cecf30 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
-428da44d913e410db4dfcf732faa0082283e4eb6563a98a0bfb92022460a4dd4 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
-f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
-1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
-a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
-c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
-f40bf62e26e6f95a9c376c4e318415a77053b7dbb7ec12688eb6fab93dffdf73 | https://maven.google.com/com/android/support/test/espresso/espresso-core/3.…
-29dbc557ae45cb16194324a542925f229e08a39a8b2303559d945d6f9383922a | https://maven.google.com/com/android/support/test/espresso/espresso-core/3.…
-c6485150f9f4aea1ce9d138f3d60d82ebed3fe35b340a8b1dc975ff01f3b17b2 | https://maven.google.com/com/android/support/test/espresso/espresso-idling-…
-943f87635934def570d7c32a111aa12639e4942c24beb948db6bbfb47e40d605 | https://maven.google.com/com/android/support/test/espresso/espresso-idling-…
-38ef4fa98a32dc55550ff49bb36a583e178b3a9b830fcb8dcc27bfc4254bc2bc | https://maven.google.com/com/android/support/test/monitor/1.0.2/monitor-1.0…
-9ee5eff3c8ad31da64ab1d5269f1eb8b2cad5628249f482decfc7bf0869c5ac6 | https://maven.google.com/com/android/support/test/monitor/1.0.2/monitor-1.0…
-7ddad387d1a16d4dbdbefacee070d34574e565b008117c1a163edac8ae02a6aa | https://maven.google.com/com/android/support/test/rules/1.0.2/rules-1.0.2.a…
-060847574369f86628e548438710bead0ce5da411358d2a5dbad52a4120ebb61 | https://maven.google.com/com/android/support/test/rules/1.0.2/rules-1.0.2.p…
-f04b9ae342975ba1cb3e4a06e13426e3e6b8a73faa45acba604493d83c9a4f00 | https://maven.google.com/com/android/support/test/runner/1.0.2/runner-1.0.2…
-ec65b3e544985d13e88a7cba4adb5ba49fbe624e2d97da0c9f4fc4eb1d5899a5 | https://maven.google.com/com/android/support/test/runner/1.0.2/runner-1.0.2…
-45d09fc51284c17bbab300f5122512ac7d7348a6d23bda2051648bbe76cc9aa5 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
-771e8fe3b4dc0be4289db8e542bf134d7a032d8addedea070a3e951dc016d078 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
-60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
-e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
-013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
-080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
-c731d3801ca37633eb6c90dbfa621ca41a83530cc87cdcd18d104ea951bbc9b7 | https://maven.google.com/com/android/tools/analytics-library/protos/26.1.4/…
-cc206a5df0288f3aeae4f5ce8044524c33991f351187574499ac47b0a8bd9687 | https://maven.google.com/com/android/tools/analytics-library/protos/26.1.4/…
-2f371f5b1f551e85ab08be4d6a2873471b3d44afd1ebf6aa3298f3b796bf691f | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
-c7758a7ca3a1d03b26fe4ef14532f4ffbe83c7f28ee3c9146986573fc8b92e3e | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
-56f7e670b8c2c44faa118948bb4ce17bcfa19c22cb937d64c935f8c91de00722 | https://maven.google.com/com/android/tools/analytics-library/shared/26.1.4/…
-b5660feebbd20c49365bac2c09ea6bc4a90788fbdb0df1c1ab5c5661b0188fd4 | https://maven.google.com/com/android/tools/analytics-library/shared/26.1.4/…
-4c1e4e705fa4d45f23aaea230557f6508155012d9c296337787c1d7b26a97f5a | https://maven.google.com/com/android/tools/analytics-library/shared/26.2.1/…
-4eacca0543cb52098c7a322b76eb431e1e27ceaaf2094a099dde6c0639a3ef01 | https://maven.google.com/com/android/tools/analytics-library/shared/26.2.1/…
-66d5b6faeaa04d6c3c423a9052febdc46e037c00ac6622d21f7ca8e2509feff9 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.1.4…
-9cba044b92daf07c7cfad01884dcc3929dd7a6d73a3ccc6d294562e44312e700 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.1.4…
-4a624ecc976539f755ddb0bb8dfc2dd3d08326cfec59a098dbd70f701ca7fb75 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.2.1…
-fd1923c63290e6cdb1362483218fd140cb15b82ec537d1a50447bb23acd05f90 | https://maven.google.com/com/android/tools/analytics-library/tracker/26.2.1…
-608a93f89489d2b7b6940cb5456fa9c588a967b7a30177b252f50ec8c5175980 | https://maven.google.com/com/android/tools/annotations/26.1.4/annotations-2…
-dfb322069b0a3641b61f0705cd503212dd9844931f1643d8daf7dab20c84d8c4 | https://maven.google.com/com/android/tools/annotations/26.1.4/annotations-2…
-7391c6a1e080174b96e64ceb078dadd31ce4d8a2d2fee0ec65be202126f90f24 | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
-64d79783e2dffc1fec58146051bdd93a2fca23113a5b8443db6eb1d77dedfdec | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
-20a5111ef908e8cbab6c0a0e3ae1c031fa1460ed6bb00b4f621e9e93e6fac9f4 | https://maven.google.com/com/android/tools/build/aapt2-proto/0.1.0/aapt2-pr…
-6ca265a30441628d070e4abe03b3c3c9ddadbcf3a06283ba0d6506baaaa23bc1 | https://maven.google.com/com/android/tools/build/aapt2-proto/0.1.0/aapt2-pr…
-59adc336a67965866dadf6c0e1b9752b8f00535f87bf6cf12dbf7a57e7874575 | https://maven.google.com/com/android/tools/build/apksig/3.1.4/apksig-3.1.4.…
-436069cea7a08cc9dba247e5011655b7ae2d5f81878f278e3c6fd6b0e333cfc9 | https://maven.google.com/com/android/tools/build/apksig/3.1.4/apksig-3.1.4.…
-fe273ff4ac0d36f868a527bc00688d0049c25ee31fdb3333eef6ad582c54950b | https://maven.google.com/com/android/tools/build/builder/3.1.4/builder-3.1.…
-976aa72898099aa358983ed0c2b382b760752a62462c9ac9e9270f5dc0279e18 | https://maven.google.com/com/android/tools/build/builder/3.1.4/builder-3.1.…
-6e8d8cbf2a0c2c55a092e6d6d5ae1fe32d717bb3630846de9e844e5e6b140a3f | https://maven.google.com/com/android/tools/build/builder-model/3.1.4/builde…
-da176d1b16546a4ca987a4721a48480c038329ebb0cc90e4bd48d463d1f2c146 | https://maven.google.com/com/android/tools/build/builder-model/3.1.4/builde…
-a9f68e6abcec122f9cb5ad352d3f05a3eb03acbcdca95e4d25c16310c2c965ff | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
-4d2a35833cb9afee4d37b68c16280f8afc64de0e7cecdac1022dbafa2473e31f | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
-1f4ff1ce845b5f3723591757ffc7b0f1cb984d516e8390587f47f12a87dc4fe2 | https://maven.google.com/com/android/tools/build/builder-test-api/3.1.4/bui…
-6ed593017d9b10398b83eccf26024e2ea9983487ea660c3b66706d8a6eb9b129 | https://maven.google.com/com/android/tools/build/builder-test-api/3.1.4/bui…
-533ac6c2b5884bb54967a33791f2628dfdfac7981af39417a333b43d4379b6be | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
-16c4e26de8c9ce509a2e81eb4c571d5d6a6e792d9425dbc710dca93793a4e12d | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
-3bdb56f0bfabcd26ef63e58700f0d7e5087cd1e95e1abe2aa2e4b300b5616f15 | https://maven.google.com/com/android/tools/build/bundletool/0.1.0-alpha01/b…
-6c6776338f04a28676ab0d4ad13a1ada690998f4a843068cd3af7589f6d3e188 | https://maven.google.com/com/android/tools/build/bundletool/0.1.0-alpha01/b…
-0f4c65c004b1176c0d9a1964792a367458f62bc849c69b1a4671e7c5ac18b7b7 | https://maven.google.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.…
-2562cf19179a3aabeeae2b84da936709fbf9c0c1ff36ec61830e3c7e1dd644b3 | https://maven.google.com/com/android/tools/build/gradle/3.1.4/gradle-3.1.4.…
-d1ea749963fc7588f5fcad1858d9b80c96e3c8e09ffa9328fdbb2afbb2c41a63 | https://maven.google.com/com/android/tools/build/gradle-api/3.1.4/gradle-ap…
-527cd7f78d5c1a0fef6acf1e89284187a5e7c905065011dc984822bf27645666 | https://maven.google.com/com/android/tools/build/gradle-api/3.1.4/gradle-ap…
-aa5e52540de16873a7636ea41add40a3ceed139025a692fd3018bbeea4361dda | https://maven.google.com/com/android/tools/build/gradle-core/3.1.4/gradle-c…
-614f205bfaecc0a4e23157a6526571d791e45fca37203e6ac127dde50f9231ce | https://maven.google.com/com/android/tools/build/gradle-core/3.1.4/gradle-c…
-3d61b467d5a2f5a49b3efba86e0b9d171e0fd8988b5f8688fc596db09b7a8cb1 | https://maven.google.com/com/android/tools/build/manifest-merger/26.1.4/man…
-3ba08827c0469c302f04feec69915612f7e37587ae4ed3ccf6d8a5955d90b277 | https://maven.google.com/com/android/tools/build/manifest-merger/26.1.4/man…
-8830573263361035d38cfdcb51e2db94029c93865b21334f5fbf8a27984281a6 | https://maven.google.com/com/android/tools/build/manifest-merger/26.2.1/man…
-56c44bf0b7adc2d174ec5a93502c9188ac3e5c48668a732fbb161d08d54dbe19 | https://maven.google.com/com/android/tools/build/manifest-merger/26.2.1/man…
-4de4a3d05e1c534c2db9e4588bf34082bb2bd232d8abb9727c430290ce225740 | https://maven.google.com/com/android/tools/build/transform-api/2.0.0-deprec…
-7c62f3856e8abca1d79257925f26c12668693f5d95904056bbac88605cfd8575 | https://maven.google.com/com/android/tools/build/transform-api/2.0.0-deprec…
-3d5b574de3255d0b3ef2346cb2cf15b0475a2092d759c901af67de3b4bd62d47 | https://maven.google.com/com/android/tools/common/26.1.4/common-26.1.4.jar
-3e16cab88f80a04cbf37a3b2beb706140b0498243edd94fa60799d5097fdaf75 | https://maven.google.com/com/android/tools/common/26.1.4/common-26.1.4.pom
-a50aab2d6411ff68f4004a87c7e93d87d8e980a0ec3b352246549897ea2d78e5 | https://maven.google.com/com/android/tools/common/26.2.1/common-26.2.1.jar
-c5bd83a597baf99567c4469795d155c1928dc738e0eff398d96e38f8ad78b21f | https://maven.google.com/com/android/tools/common/26.2.1/common-26.2.1.pom
-a3a3126b8215c550b6db6626c8ed650cdaa0c62c7b37a9a73fc7e7aca584ff7f | https://maven.google.com/com/android/tools/ddms/ddmlib/26.1.4/ddmlib-26.1.4…
-b986e81e244c1e77ae5b0f0e1cf5f0183284741a1a27676af85a3bfe4fce092f | https://maven.google.com/com/android/tools/ddms/ddmlib/26.1.4/ddmlib-26.1.4…
-a4bf0a29a19980bf27269465cc782064656750b77c26728f82f9e148b705218b | https://maven.google.com/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1…
-79ba9d3e1f1d5b975a9e29d9261bd449c730f152ed4c5ebb3e297719eff050f0 | https://maven.google.com/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1…
-c50a8362a38c44c0e9f1b9e3b486d5f76c2f61294138c65769ebb6ab832c08ce | https://maven.google.com/com/android/tools/dvlib/26.1.4/dvlib-26.1.4.jar
-5a70c2cf91aff0b4220a55a64eebdca83fc43920a349f74141bbc7b2dc89adf7 | https://maven.google.com/com/android/tools/dvlib/26.1.4/dvlib-26.1.4.pom
-72a83bf2839b1df9b1fbf67ba45d1bfb9f966cd774da4320c762b2be8f1688aa | https://maven.google.com/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.jar
-1ca1b14c0281275a58b67cd5e3af180d65a105340d89f0766e6bd0eee6047281 | https://maven.google.com/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom
-1e0a5d4bf41fdd752050a78adaec421da232284000282200df9b83ffaaf019b9 | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
-a91fc3a2d29675cd426411c7411ba31383cda32ae522e986c2d579847e6afc3b | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
-4925ad1892c2687cb1a63427d440ef519c8c59215fefe0dc5d541d5d411fcafe | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
-7cd28289534ac8effe3c4f18eccffc79eb5774c271da390ba49a34961e692881 | https://maven.google.com/com/android/tools/external/com-intellij/intellij-c…
-f8d7fd8923070038dd35ff719d874ce968ea67684efa511169538ea1e8e4dc4a | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
-688257f7afea3b0783641d4b4e7039bc54bf779d223371665f742deb513fa2fc | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
-daa064fd708f340ee25fb9823c4c74104ac77f1370b76d907eb9ae6daec0a2ae | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
-1ccfc320980199e8bd65bcaa061514711aa7a8a8a46e420bf7be7a441565fb01 | https://maven.google.com/com/android/tools/external/com-intellij/kotlin-com…
-c63e7ab2cb4eeeb1970c9856858cac6b55229e30833fb648bd7c3a6afda0eb9e | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.1…
-2eec0c09c1a378f726c6c27d0f9b9225ae16ef7019cfb93ce418731ce96c1510 | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.1…
-f10f7258d2ab9189562cc0f9ad838c0378fdba439229173390a99de02ebac75b | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.2…
-aa377092896a6dc69da9fcc84eecb410b7db12508581c43505bc921d8e90829b | https://maven.google.com/com/android/tools/external/org-jetbrains/uast/26.2…
-d911c9ed7ce2e8845d1892cd1ee35058132774d4874b6cdbc2540ee2c9c5bfa8 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.1.4/l…
-960454dd6f5126928cbf01cffc5f472f7001d206e4c00e22531d11329a4c4224 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.1.4/l…
-ddbf4fca123733fa011595b1cc1f4ac2937ed327b60990711fafc33c775c2ade | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
-21e06d8c4fb95d389b66a0613dd8dbb6cc88a336931035b61c6a71db174abca7 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
-16c85d801af757e0c82f7802b7dcffc1e7cbaac80da25c1273de9ed5b91009cf | https://maven.google.com/com/android/tools/lint/lint/26.1.4/lint-26.1.4.jar
-41bcf09fad000d8b3e9627ddc465aad18e0b32bc4583aa76b6d0511a1d4e5769 | https://maven.google.com/com/android/tools/lint/lint/26.1.4/lint-26.1.4.pom
-7848b82ae988b90dee259ae7c7e86e05cbf52db6cd21c8bbd38ce7df08f3f8c5 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.jar
-445ce6f3c911a11c0f4a1dff662baa5e2a9a6524281a4b60226cf25dd225b548 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.pom
-988b8ee8b36f0bf09e93441aa123b75edfda642b1b093457579fc70b2e8d0f56 | https://maven.google.com/com/android/tools/lint/lint-api/26.1.4/lint-api-26…
-4551f7d0a1ea7f992adeaf650bbdc44fa5549b078d1cf6f4d6567bd1a8a96729 | https://maven.google.com/com/android/tools/lint/lint-api/26.1.4/lint-api-26…
-3b57e739de567b98bc9ab56c2c0ee66fc026b4adf5843e8f9804ca0666a6f66e | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
-8c3ad3303516cfcb96aa367757a429dbd5f6b6fa63e0c3bff4213b63fe76f69b | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
-f460c6426b63cd433ece0fb3efb7df8a8a272ae6b9d0ae9e900bc3a375e8dedc | https://maven.google.com/com/android/tools/lint/lint-checks/26.1.4/lint-che…
-23b8ceddf4ceb710253d914ea2cfe6ae7a469b94320898a11a1518f5a0957de3 | https://maven.google.com/com/android/tools/lint/lint-checks/26.1.4/lint-che…
-c86f4cc9aaee722ee4ad70062f7b5af91e9b041914af27adc09f545ab0fb3bc6 | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
-d5760172fe3dedec8f1304420bc304c0c2cae1ee24972bba7ad9c03bf0ac679e | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
-bf3b6cabf653a0570502d4fa8c8d0176dd13231fd16d4ebb8ff2d9650fa0f2bd | https://maven.google.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gra…
-061e6b607a334c5d99a5fe117f1eef289c365ee448f576ee22f6428a1df1d5e1 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.1.4/lint-gra…
-86c6d960418d3bcc9fea4066c6edcf495fb49371ae7d2eaced7f7391f0e5375a | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.1.4/lint…
-ce252401baac01a283e9dac15fbc56fec99384624a822a3a5c42adebb43b1f2d | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.1.4/lint…
-b2580f943fc447084ebde59dfe5685dddbc746c37308015872545a06fbc04495 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.1.4/lint-kot…
-68265a6aea4b1f23cf7d56bc403f94d28c5ea744381a2e9a7eb059f9c9ffc5d5 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.1.4/lint-kot…
-7a6a5d2b18f69cf1b900d857c2632b4c683713c533295933b8b759f8cab4a877 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
-c4c54f08f4dbdd379d6a9d6d3e1d66e0f2106d849591112742784ae62678b3c2 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
-b410e8967ee4577f39728a3b7b0f4076cb94e3b7c0d612484ac4543c54ea5357 | https://maven.google.com/com/android/tools/repository/26.1.4/repository-26.…
-ea46784bb4581223fae4ae7724ef3d99d382af89fde235086793e26ad7f236fa | https://maven.google.com/com/android/tools/repository/26.1.4/repository-26.…
-fa74dae09103faef703df38550ad8fa244c5b6d1bf90d6198be932292b3d9cc1 | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
-eb078adfb208eae7524d00d0ce03196a2c81353db78c7f9613885c19690cf2de | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
-789d3d193d75f1ddafb803e8fd27880d9b35268843fb4e91965b09814f3c9eab | https://maven.google.com/com/android/tools/sdk-common/26.1.4/sdk-common-26.…
-bb9a31ef138f0fb569ca5c417a9a0d25bf7bf5c46583bd04177e2ee6ce97d228 | https://maven.google.com/com/android/tools/sdk-common/26.1.4/sdk-common-26.…
-759d4b292ca69a35cf961fca377b54158fc6c88108978006999442e80a011cf4 | https://maven.google.com/com/android/tools/sdk-common/26.2.1/sdk-common-26.…
-dabf483508f36704e8a1d7c29cda5135ad9cdb6169f556908182954ee88e0b1f | https://maven.google.com/com/android/tools/sdk-common/26.2.1/sdk-common-26.…
-7a897ebc2b30c884fc152aba3b9c1f68276211bbd0ca6af7fe5f9d89ab7ee80a | https://maven.google.com/com/android/tools/sdklib/26.1.4/sdklib-26.1.4.jar
-f04bca1a944890691628b1364383757bdff1f527b1839842d132157c4ddc6f01 | https://maven.google.com/com/android/tools/sdklib/26.1.4/sdklib-26.1.4.pom
-248df7ad5eac4aeb6f96c394c76760de4b7b89ac056e54d0c21a739368b91b45 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.jar
-7031d2d09683996ac126074be3de6df9b3de80f7e0f10b80a6e8754f69c80028 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom
-2fa630c3928a0e0d8a5db4b1563c8e532457d75e6876937c0c9663bd0e1d2724 | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.2.1/apilint-0.2…
-acbf3da508a767dad51a8e9505b760f53547c758005157eae0b15f1674229559 | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.2.1/apilint-0.2…
1
0

[tor-browser-build/master] Merge remote-tracking branch 'gkgl/bug_40130'
by sysrqb@torproject.org 13 Oct '20
by sysrqb@torproject.org 13 Oct '20
13 Oct '20
commit ce7ff42391b9466521015ae20ec3ec9ab4054b8b
Merge: caa73f0 0ebfe1c
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Tue Oct 13 20:58:53 2020 +0000
Merge remote-tracking branch 'gkgl/bug_40130'
README | 6 +-
projects/firefox-locale-bundle/build | 35 --
projects/firefox-locale-bundle/config | 8 -
projects/firefox-locale-bundle/get_hg_hash | 21 -
projects/firefox/config | 4 -
projects/firefox/gradle-dependencies-list.txt | 574 --------------------------
6 files changed, 2 insertions(+), 646 deletions(-)
1
0

[tor-browser-build/master] Bug 40129: application-services is missing rustc in PATH
by sysrqb@torproject.org 13 Oct '20
by sysrqb@torproject.org 13 Oct '20
13 Oct '20
commit caa73f03aa5f546e3c3f8ffa908735b5592c72f8
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Oct 13 15:25:40 2020 +0000
Bug 40129: application-services is missing rustc in PATH
---
projects/application-services/build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/application-services/build b/projects/application-services/build
index c310ada..55ec519 100644
--- a/projects/application-services/build
+++ b/projects/application-services/build
@@ -17,7 +17,7 @@ cd /var/tmp/dist
tar -xf $rootdir/[% c('input_files_by_name/sqlcipher-' _ arch) %]
mv sqlcipher sqlcipher-[% arch %]
[% END -%]
-export PATH=/var/tmp/dist/fenix-rust/bin:$PATH
+export PATH=/var/tmp/dist/fenix-as-rust/bin:$PATH
cd $rootdir
# application-services uses a newer NDK, 21, than everything else...
1
0

[Git][tpo/applications/fenix][tor-browser-82.0.0b4-10.0-1] 2 commits: Bug 40083: Make locale ordering in BuildConfig deterministic
by Matthew Finkel 13 Oct '20
by Matthew Finkel 13 Oct '20
13 Oct '20
Matthew Finkel pushed to branch tor-browser-82.0.0b4-10.0-1 at The Tor Project / Applications / fenix
Commits:
0c537f77 by Georg Koppen at 2020-10-13T07:43:35+00:00
Bug 40083: Make locale ordering in BuildConfig deterministic
- - - - -
4a7a5f7b by Matthew Finkel at 2020-10-13T14:02:44+00:00
Merge remote-tracking branch 'gkgl/bug_40083' into tor-browser-82.0.0b4-10.0-1
- - - - -
1 changed file:
- app/build.gradle
Changes:
=====================================
app/build.gradle
=====================================
@@ -585,16 +585,22 @@ task buildTranslationArray {
// This isn't running as a task, instead the array is build when the gradle file is parsed.
// https://github.com/mozilla-mobile/fenix/issues/14175
def foundLocales = new StringBuilder()
+ def languageCodes = []
foundLocales.append("new String[]{")
fileTree("src/main/res").visit { FileVisitDetails details ->
if(details.file.path.endsWith("/strings.xml")){
def languageCode = details.file.parent.tokenize('/').last().replaceAll('values-','').replaceAll('-r','-')
languageCode = (languageCode == "values") ? "en-US" : languageCode
- foundLocales.append("\"").append(languageCode).append("\"").append(",")
+ languageCodes.add(languageCode)
}
}
-
+ // The order of files in a `FileTree` is not stable, even on a single
+ // computer. Thus we need to sort the `languageCode`s. See: fenix#40083.
+ languageCodes.sort()
+ languageCodes.each {
+ foundLocales.append("\"").append(it).append("\"").append(",")
+ }
foundLocales.append("}")
def foundLocalesString = foundLocales.toString().replaceAll(',}','}')
android.defaultConfig.buildConfigField "String[]", "SUPPORTED_LOCALE_ARRAY", foundLocalesString
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/1e797f9532be…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/1e797f9532be…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser-build/master] Bug 40121: Use updated glean_parser for application-services as well
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 4aebd17fa49c39ac2168514e603b56ab1f0cfc77
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 13:41:59 2020 +0000
Bug 40121: Use updated glean_parser for application-services as well
---
projects/android-components/config | 2 -
projects/application-services/40085.patch | 22 +++
projects/application-services/build | 3 +
projects/application-services/config | 5 +-
.../gradle-dependencies-list.txt | 150 +++++++++++----------
projects/fenix/config | 2 -
rbm.conf | 2 +-
7 files changed, 105 insertions(+), 81 deletions(-)
diff --git a/projects/android-components/config b/projects/android-components/config
index e0e10b4..8673dcc 100644
--- a/projects/android-components/config
+++ b/projects/android-components/config
@@ -15,8 +15,6 @@ var:
gradle_dependencies_version: 6
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
- # Overwrite `glean_parser` for now to fix #40085.
- glean_parser: 1.28.6
targets:
nightly:
diff --git a/projects/application-services/40085.patch b/projects/application-services/40085.patch
new file mode 100644
index 0000000..ccaa46e
--- /dev/null
+++ b/projects/application-services/40085.patch
@@ -0,0 +1,22 @@
+From bca7900361a57278293444fdf0855240987ebb49 Mon Sep 17 00:00:00 2001
+From: Georg Koppen <gk(a)torproject.org>
+Date: Fri, 9 Oct 2020 13:35:24 +0000
+Subject: [PATCH] Bug 40085: Bump glean_parser to 1.28.6
+
+
+diff --git a/build.gradle b/build.gradle
+index c6e0be82..2a13739c 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -4,7 +4,7 @@ buildscript {
+ ext.kotlin_version = '1.3.71'
+ ext.jna_version = '5.2.0'
+ ext.android_gradle_plugin_version = '3.6.0'
+- ext.android_components_version = '56.0.0'
++ ext.android_components_version = '62.0.0'
+
+ ext.build = [
+ ndkVersion: "21.3.6528147", // Keep it in sync in TC Dockerfile.
+--
+2.28.0
+
diff --git a/projects/application-services/build b/projects/application-services/build
index 7c5da2d..c310ada 100644
--- a/projects/application-services/build
+++ b/projects/application-services/build
@@ -82,6 +82,9 @@ patch -p1 < $rootdir/no-git.patch
# XXX: We don't build the code for Linux for now as this involves additional
# complexity. That's needed for running unit tests later on, though.
patch -p1 < $rootdir/target.patch
+# We need to pick up a newer glean_parser until an updated glean is used by
+# application-services.
+patch -p1 < $rootdir/40085.patch
[% IF c('var/fetch_gradle_dependencies') %]
# XXX: `assemble` is still not enough to see all fetched dependencies via
# Gradle's --debug. See: tor-browser-build#40056.
diff --git a/projects/application-services/config b/projects/application-services/config
index e4ea05d..d877002 100644
--- a/projects/application-services/config
+++ b/projects/application-services/config
@@ -8,7 +8,7 @@ var:
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 2
+ gradle_dependencies_version: 3
# This should be updated when the list of rust dependencies is changed.
rust_vendor_version: 2
# For armv7 we need a different target than the default one we use for
@@ -80,7 +80,7 @@ input_files:
exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
enable: '[% !c("var/fetch_gradle_dependencies") %]'
- URL: https://people.torproject.org/~gk/mirrors/sources/glean-parser-[% c('var/glean_parser') %].tar.bz2
- sha256sum: 69234aa1ae38fd5dda4de71bd5e536795073703c3ed5bb994b9b8485bd7a55dc
+ sha256sum: bdbb421fdcc9b66aebe8f41b33e254cab722355c59c0f43f10a8322d7d6da6a4
enable: '[% !c("var/fetch_gradle_dependencies") %]'
# `cargo vendor vendor` in the `application-services` directory has vendored
# the sources.
@@ -90,3 +90,4 @@ input_files:
- filename: mavenLocal.patch
enable: '[% !c("var/fetch_gradle_dependencies") %]'
- filename: target.patch
+ - filename: 40085.patch
diff --git a/projects/application-services/gradle-dependencies-list.txt b/projects/application-services/gradle-dependencies-list.txt
index 3978277..b444c76 100644
--- a/projects/application-services/gradle-dependencies-list.txt
+++ b/projects/application-services/gradle-dependencies-list.txt
@@ -5,10 +5,10 @@ d1bc9842455c2e534415d88c44df4d52413b478db9093a1ba36324f705f44c3d | https://dl.go
27a4be7462629c312da0b831a0978d2076fc34074145fb61dd4e86d7c8469b82 | https://dl.google.com/dl/android/maven2/androidx/activity/activity/1.0.0/ac…
d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692 | https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.1.…
2e9372ba7780ef44952adbf86b66e1f08682c1e5277c926185f6564a13799efe | https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.1.…
-8d7299bca44cb3bdf17f5595766acbf459fc81fee223e8686cc6acd3a42ab5c0 | https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/…
-340d617121f8ef8e02a6680c8f357aa3e542276d0c8a1cdcb6fd98984b2cb7b9 | https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/…
19944d32b46551a17c347e21894b95837fbd7baaafc9e2082794344f222f7361 | https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat-resour…
046011e16cb01b6f14842565661551110ef1b6427483f5d9068493f4c49690f2 | https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat-resour…
+8d7299bca44cb3bdf17f5595766acbf459fc81fee223e8686cc6acd3a42ab5c0 | https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/…
+340d617121f8ef8e02a6680c8f357aa3e542276d0c8a1cdcb6fd98984b2cb7b9 | https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/…
fe1237bf029d063e7f29fe39aeaf73ef74c8b0a3658486fc29d3c54326653889 | https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.1.…
83bbb3960eaabc600ac366c94cb59414e441532a1d6aa9388b0b8bfface5cf01 | https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.1.…
dd77615bd3dd275afb11b62df25bae46b10b4a117cd37943af45bdcbf8755852 | https://dl.google.com/dl/android/maven2/androidx/arch/core/core-runtime/2.1…
@@ -16,10 +16,10 @@ c0c4ed0160cd2ca18390015de8b392b697c173327c6b2c0947d4e62f6958c05d | https://dl.go
a7913a5275ad68e555d2612ebe8c14c367b153e14ca48a1872a64899020e54ef | https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.0.…
632a0e5407461de774409352940e292a291037724207a787820c77daf7d33b72 | https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.1.…
67e9066ca4acfdc6e3cc508293c31ba0398057ff118e4f70b1e1813c9a3456d1 | https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.1.…
-524b8b88ceb6a74a7e44e6b567a135660f211799904cb218bfee5be1166820b2 | https://dl.google.com/dl/android/maven2/androidx/core/core/1.2.0/core-1.2.0…
-3d1f4e37b77dd92353879a040ab4ce2f706798bcbdf066147491c3642b3f79a6 | https://dl.google.com/dl/android/maven2/androidx/core/core/1.2.0/core-1.2.0…
dcb74d510d552b35eff73b0dd27b829649535f3902e5b5a1f26040383c10a940 | https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.2.0/core-k…
29eaddba4e6a35e68a128e594ebae3b72ef7e767f1b273ef93dc2ed019ff97f6 | https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.2.0/core-k…
+524b8b88ceb6a74a7e44e6b567a135660f211799904cb218bfee5be1166820b2 | https://dl.google.com/dl/android/maven2/androidx/core/core/1.2.0/core-1.2.0…
+3d1f4e37b77dd92353879a040ab4ce2f706798bcbdf066147491c3642b3f79a6 | https://dl.google.com/dl/android/maven2/androidx/core/core/1.2.0/core-1.2.0…
a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564 | https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapte…
62d95c89850af21030b19f14d5f7ecd6d8bcc9a3014c59002ec99624caac8100 | https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapte…
20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2 | https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.…
@@ -39,10 +39,10 @@ ef78eb27ac02ddf3545d5f8a3857c73a2837a01853f8d5fcf77251011db52544 | https://dl.go
692c2a60437a95220c8fbb6e8943196f255f535d1a7c58714e6c46530782f276 | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common…
bd53c64b038585215b4959c1a388437a3ad525608a31c58e4283c3e371727d4d | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-extens…
510e33b8b6ca33d2fcb3b7615a4528e338b438de398f3ee8de119c26508a5fdd | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-extens…
-242e446bed3db36f0df0aab0cb7f91060bd2dab7adcad1117adf54e724cd1d26 | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-liveda…
-1e4c580c995e41cd18455cfb87e3e43955be9db9ec63a8fb3c7259f01b7c4e3c | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-liveda…
a150743e86c30eddf1660ad454b1f86041efdefcd1a039320c4c26db87f7119a | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-liveda…
6839d2e68c8fee4cc3bbf04e6b291a6ae842403fcd5f8d944c27814d296deff3 | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-liveda…
+242e446bed3db36f0df0aab0cb7f91060bd2dab7adcad1117adf54e724cd1d26 | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-liveda…
+1e4c580c995e41cd18455cfb87e3e43955be9db9ec63a8fb3c7259f01b7c4e3c | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-liveda…
8cddd0c7f4927bbf71fb71fca000786df82cc597c99463d6916ccbe4a205a9ac | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-proces…
8bd43b3a4c017cc9f255f0a33cb216a7b5040d6ee1a8838a95b787987601a4e4 | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-proces…
e5173897b965e870651e83d9d5af1742d3f532d58863223a390ce3a194c8312b | https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtim…
@@ -59,22 +59,22 @@ c978d550808b47434aa49a63164110a50b55b0bcc6160a93a2e37d5110df8c5e | https://dl.go
ce8566bc008cc900268c07a4acb8840e4b54cdc404f73081a0986906f205fd7c | https://dl.google.com/dl/android/maven2/androidx/room/room-runtime/2.1.0/ro…
2510a5619c37579c9ce1a04574faaf323cd0ffe2fc4e20fa8f8f01e5bb402e83 | https://dl.google.com/dl/android/maven2/androidx/savedstate/savedstate/1.0.…
844d7d22fcea798c78bf5559229daf88ec9cad8136f5eea0a29aa76b3f8fde7c | https://dl.google.com/dl/android/maven2/androidx/savedstate/savedstate/1.0.…
-cdfceb8f6ec64aac217dc5a499a5edb6d610f9d6a575fba7bea06b2bfaf3ea7f | https://dl.google.com/dl/android/maven2/androidx/sqlite/sqlite/2.0.1/sqlite…
-bc69fd52e7eb5563a766319b7a84efda32f15473c4cec0e12b99502d91489cb1 | https://dl.google.com/dl/android/maven2/androidx/sqlite/sqlite/2.0.1/sqlite…
870e3bce33ad21ef034332b083b2925105becfd73d262e3a1270901229e45076 | https://dl.google.com/dl/android/maven2/androidx/sqlite/sqlite-framework/2.…
c4dedda03bd663e0ff34c8eaaf608ae86be05929a2f7cf2ce1e17160201bca3e | https://dl.google.com/dl/android/maven2/androidx/sqlite/sqlite-framework/2.…
-46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26 | https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawa…
-5b0e2d5b2179e54804785cbc21ce5f473b5e1ddd55a57da482e94dcd39492bb2 | https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawa…
+cdfceb8f6ec64aac217dc5a499a5edb6d610f9d6a575fba7bea06b2bfaf3ea7f | https://dl.google.com/dl/android/maven2/androidx/sqlite/sqlite/2.0.1/sqlite…
+bc69fd52e7eb5563a766319b7a84efda32f15473c4cec0e12b99502d91489cb1 | https://dl.google.com/dl/android/maven2/androidx/sqlite/sqlite/2.0.1/sqlite…
76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8 | https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawa…
276a20116b705fb75b9003ee9496c56f6fd3b32375fb232472811eba60a040bd | https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawa…
+46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26 | https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawa…
+5b0e2d5b2179e54804785cbc21ce5f473b5e1ddd55a57da482e94dcd39492bb2 | https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawa…
9a1d77140ac222b7866b5054ee7d159bc1800987ed2d46dd6afdd145abb710c1 | https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versio…
c729c7be0cc06323bda829d460666e79dbd43b799a21089a44bd3b293dc253b5 | https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versio…
147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682 | https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/…
1f72f836339d03c6eb013f65075e76ca87075a577578eb4f95f74a3a5d253128 | https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/…
-de617480ce64e4e9055e2d0295c87ee20929b06c4f2a5efdaded27dcca8520e4 | https://dl.google.com/dl/android/maven2/androidx/work/work-runtime/2.2.0/wo…
-960a24728eaedfc4ff7a2f366b9360e02a1d88f9eb0a9c7142ed94ed462797b0 | https://dl.google.com/dl/android/maven2/androidx/work/work-runtime/2.2.0/wo…
e93836f35d35e47ba501add90fa6559964fa7a70975bf4ffc4a04836189611e9 | https://dl.google.com/dl/android/maven2/androidx/work/work-runtime-ktx/2.2.…
7cbb32f2fe880d407d4c53268bcd554c11dc9316a1d6cd556a08fe45a4631f22 | https://dl.google.com/dl/android/maven2/androidx/work/work-runtime-ktx/2.2.…
+de617480ce64e4e9055e2d0295c87ee20929b06c4f2a5efdaded27dcca8520e4 | https://dl.google.com/dl/android/maven2/androidx/work/work-runtime/2.2.0/wo…
+960a24728eaedfc4ff7a2f366b9360e02a1d88f9eb0a9c7142ed94ed462797b0 | https://dl.google.com/dl/android/maven2/androidx/work/work-runtime/2.2.0/wo…
10e1f9691dc9485d4c122d16b8ebb2c062a7675c983055bb28cec2496026e658 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
099461a4afeb91d9852e4f6a69959403c328286840d991a001a068afc243bac6 | https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary…
a0c36940b7351c2673bf3c96b6774017db4f1e8342ee063cafc3533cecd22707 | https://dl.google.com/dl/android/maven2/com/android/signflinger/3.6.0/signf…
@@ -89,26 +89,26 @@ ade7c62a6a19e93635ad78bb8f4bac080e32a1ecc7423c146522e013472f672f | https://dl.go
9835e19c8b5ba3660f1778d27a82f03c4ac944cb3d22f14881b372ae251246e2 | https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library…
fb242380c243cd2069fd992b2803cca4a9e4366157cd327984eab75eb9e9a9e7 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.6.…
827af30b20f5c227cba52f365d685e92ff08c45e2d4f37fca57eb5f951006dd2 | https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.6.…
-f74465e394c73d71f0f9053f3ebc90999d06bea3ad7c1fa3576b6a3a088d0db3 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.6.0…
-c616e4a81a19bf74fb98f072383b316da8be882c3e9efce7fee82b802da5ccd5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.6.0…
fac0435e08898f89eeeb9ca236bea707155ff816c12205ced285ad53604133ca | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto…
a24bdd4e8e374fdcd8cef8d77ea723f147ccd0f25dc6de4fbe290039be904339 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto…
+f74465e394c73d71f0f9053f3ebc90999d06bea3ad7c1fa3576b6a3a088d0db3 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.6.0…
+c616e4a81a19bf74fb98f072383b316da8be882c3e9efce7fee82b802da5ccd5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.6.0…
1fc041276d0e090b6ac99f26e8ab59d1c2257293bc88ee49ff074e69345bc665 | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.6.…
2cf2d4a8fbe06e60026b6f2f90a7d6c73b7d3f66abbb984e6a1740b85776a028 | https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.6.…
8126c2fef74b0ebd1d6e647c3a84ef4f3e9a60231952abc74e4a097a6449374a | https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.6…
055661a9e3089fb7154e0f358281a7406b1da4bc6d61dea1a0e19231239f36cf | https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.6…
-74cc34c112d8586cedb0f94a9728b0402492436e10c6493ee6da60308be0b262 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.6…
-f4485a00d7a5c792cb5f2a8c5c8446bada583570f25182dbf84d700e30441386 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.6…
e18b976ea7620026259eeae4dc0378bd2ff5388dd91b8201113b2089b281ae3f | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
369428537e6613f4e229cbd70360aeff18a628c41566a7dd5b3d143808eef41a | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-mod…
ac90b88ce12f9d0ae0f9845ff2ad9bdf65aa07d3e7b4b0515794cffe4b603fe8 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
af0c92edfbc6549bebb636e82eb8a851c85e12bc4bcdfa2b81161bbb9e994050 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-tes…
+74cc34c112d8586cedb0f94a9728b0402492436e10c6493ee6da60308be0b262 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.6…
+f4485a00d7a5c792cb5f2a8c5c8446bada583570f25182dbf84d700e30441386 | https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.6…
20f2e347e9b4ccd9cdcdc2f6e1956ba3cc1641991fbbadc1f86ca60dd6ca64e1 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/…
ad9c1614680f29b5c39018c32e2b44d3adfc52d667e7bf29ca64eb2feb697034 | https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/…
-bdd59f532634d4fde2b3a6864bdc61058d94a62a5310f431f75b6f571d00d196 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.…
-ee16c99fea79a677092828264e01961816cef6ef4fa1f5702db6a58093dc0157 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.…
841cfc9f6224c2d12e761ac3a305b268e0ee735b0ddd7e70cfebbf5a2df9cfa6 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
69d6a67a8f84d03ba331dc9e228bd477c903f3643bde330c8c3a1cc72e8e1b7a | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/…
+bdd59f532634d4fde2b3a6864bdc61058d94a62a5310f431f75b6f571d00d196 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.…
+ee16c99fea79a677092828264e01961816cef6ef4fa1f5702db6a58093dc0157 | https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.6.…
0930bb58d94e09c61161576ca38853b3dba4ac9320fcf323f9b31bc58a18afda | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/je…
c39f0d195566b2ca9e1c954a665a553dc60320d4022acad82fd56a31a6d395d5 | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/je…
689e5637b0b61b460f447064ff62ed4267203a26a70cf071fa34d7c3faba5366 | https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/je…
@@ -131,16 +131,16 @@ c84395f45a7d7e87f2f484e6e8180860cc92e464d2f344a90b8d2202520c99fe | https://dl.go
3680ff0f4ee339b0e05865f4057a2d2321b3adaf4bcddeb732314fa7f3fb2bc7 | https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetb…
951e8a3832d8f8cb7c10a41c6bd45c16a7a7ae7cc72958ac734f9db0650f61f9 | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
476d3579571a4588f8187024f0043b043917a9b102c2c9f1f8fd6fc0085ab7df | https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutl…
-1efa62b21a76ac2ec98c213937a846dab30f95082fcca806605b0215f9bba6d6 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.6.0/…
-235bd153831ba5180c3487ffb9d20364cd402b72aa38429dd87bdb6cdb4a2227 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.6.0/…
b5e1235b181a5a68a14de7adc88997c66cda26036895fc771e87aca63267f2a4 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
54ab64c262cd2762fb2a2c4aead50a23c3ab500cb0f285864b4c7789a2898df5 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.…
941a2cd8c4b88b02abad9e7fc8219a65642ec4222f531bc0dbb69ae2b4f97147 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
12a8ff3487f7d014492354942d4e88b20925ae6b6679ddf4d426131936e51741 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/…
-9298f4493601af4ba0ccd8f0623ec5cdb7c604c2fea59c3ddf1a82dab824b4c4 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/…
-40d80c18a03c236c1ed50dbbb792266b7348b280fcebfce5bf3e41a7f929ecb9 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/…
f661cca9e27b7029cc074b2b7167d1a6882abeb5a9f55efb8005a05e5ef6e11f | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-…
fe047cd786c3d1d32a92b2afe45d6c1ad8fefc214216136ffa0de491bb1cd51b | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-…
+9298f4493601af4ba0ccd8f0623ec5cdb7c604c2fea59c3ddf1a82dab824b4c4 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/…
+40d80c18a03c236c1ed50dbbb792266b7348b280fcebfce5bf3e41a7f929ecb9 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/…
+1efa62b21a76ac2ec98c213937a846dab30f95082fcca806605b0215f9bba6d6 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.6.0/…
+235bd153831ba5180c3487ffb9d20364cd402b72aa38429dd87bdb6cdb4a2227 | https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.6.0/…
da6c7429828e8149702d43b01bb32a57cf9687db6f407552585ba5f26bdf650b | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.6.0…
d583cc98e2215aa1d558b577435696c5d279674d48922e7095fc4f1dda0f5137 | https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.6.0…
2bdd20936544902649d85d5db4a538cca888bc9b079ca49886476f7eea270dbc | https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.6.0…
@@ -156,13 +156,9 @@ b48b04ddba40e8ac33bf036f06fc43995fc5084bd94bdaace807ce27d3bea3fb | https://jcent
feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.…
766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.…
19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.…
+8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.5/gson-par…
233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar
b8308557a7fccc92d9fe7c8cd0599258b361285d2ecde7689eda98843255a092 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.5/gson-2.8.5.pom
-8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.5/gson-par…
-2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
-47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
-757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
-7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
6ebd22ca1b9d8ec06d41de8d64e0596981d9607b42035f9ed374f9de271a481a | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
5e0258ea1ba4e51a133742680bc22448f7ab214be4073e8619f645ef1be42dd5 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
10a5949aa0f95c8de4fd47edfe20534d2acefd8c224f8afea1f607e112816120 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
@@ -174,42 +170,38 @@ cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://jcent
5bf4f695ed1177e80524525b6e5a040a5d7ea4b16196b1110882c62e69a555e8 | https://jcenter.bintray.com/com/google/gradle/osdetector-gradle-plugin/1.6.…
a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26 | https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureacc…
e96042ce78fecba0da2be964522947c87b40a291b5fd3cd672a434924103c4b9 | https://jcenter.bintray.com/com/google/guava/failureaccess/1.0.1/failureacc…
-6a8dd041f23a6bb14a86e440fccb993537b62271357a0dac0a3cb0ff39158f36 | https://jcenter.bintray.com/com/google/guava/guava/27.0.1-jre/guava-27.0.1-…
-4a5aa70cc968a4d137e599ad37553e5cfeed2265e8c193476d7119036c536fe7 | https://jcenter.bintray.com/com/google/guava/guava/27.1-jre/guava-27.1-jre.…
-bd99d75006131ae25c9860a1d63e84e36371f112fdb0c2fe3d5d6ab38e9eb271 | https://jcenter.bintray.com/com/google/guava/guava/27.1-jre/guava-27.1-jre.…
f8698ab46ca996ce889c1afc8ca4f25eb8ac6b034dc898d4583742360016cc04 | https://jcenter.bintray.com/com/google/guava/guava-parent/26.0-android/guav…
317e88291262e0cf2805e956c18850f1d4565c85c2e1112f5d9d08ab1732e696 | https://jcenter.bintray.com/com/google/guava/guava-parent/27.0.1-jre/guava-…
d3610165c6de2b4d8d6418487717b63c52b5a39c5e35a553e24873ecb60e0628 | https://jcenter.bintray.com/com/google/guava/guava-parent/27.1-jre/guava-pa…
+6a8dd041f23a6bb14a86e440fccb993537b62271357a0dac0a3cb0ff39158f36 | https://jcenter.bintray.com/com/google/guava/guava/27.0.1-jre/guava-27.0.1-…
+4a5aa70cc968a4d137e599ad37553e5cfeed2265e8c193476d7119036c536fe7 | https://jcenter.bintray.com/com/google/guava/guava/27.1-jre/guava-27.1-jre.…
+bd99d75006131ae25c9860a1d63e84e36371f112fdb0c2fe3d5d6ab38e9eb271 | https://jcenter.bintray.com/com/google/guava/guava/27.1-jre/guava-27.1-jre.…
e4ad7607e5c0477c6f890ef26a49cb8d1bb4dffb650bab4502afee64644e3069 | https://jcenter.bintray.com/com/google/guava/listenablefuture/1.0/listenabl…
53873caf26bc1ed8a567ea6c939ab2aaa3f47a5e32d5cade95ddf5080d23238a | https://jcenter.bintray.com/com/google/guava/listenablefuture/1.0/listenabl…
b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99 | https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-…
18d4b1db26153d4e55079ce1f76bb1fe05cdb862ef9954a88cbcc4ff38b8679b | https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-…
2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
+c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
-c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
74ee43b09e711b13d568811e12f33bd16e6087b15f1aeded22b0dfe89ae76856 | https://jcenter.bintray.com/com/google/protobuf/protobuf-bom/3.11.4/protobu…
433ae1f99ae3c330f1b54971b39c2672d49948e6acf661d9bb4f1e9a7743de8e | https://jcenter.bintray.com/com/google/protobuf/protobuf-gradle-plugin/0.8.…
d9fdbf20ea7e2b965a8870d17ebbd2900a64cef3c9a7c2bf0bd4d4857462680a | https://jcenter.bintray.com/com/google/protobuf/protobuf-gradle-plugin/0.8.…
+4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
+89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
8cacea2f7a042dabae295c509dcdbfe32a49aa3708eec6ddb8efd8593aa0b4a3 | https://jcenter.bintray.com/com/google/protobuf/protobuf-javalite/3.11.4/pr…
1aa38c0b0891b910e84642c5116bb1b54d86a5959f37c9c38a34ede600bdd55d | https://jcenter.bintray.com/com/google/protobuf/protobuf-javalite/3.11.4/pr…
-4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
-89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
c3e2aee04dd8698f8b21ce635c318f8964d52fc9ca490a01a64cdc7a6c44d362 | https://jcenter.bintray.com/com/google/protobuf/protobuf-parent/3.11.4/prot…
24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://jcenter.bintray.com/com/google/protobuf/protobuf-parent/3.4.0/proto…
5405b8939f23a32b70700386ff0edb9bc1a78b29b90396371d4c0fc973c60249 | https://jcenter.bintray.com/com/google/protobuf/protoc/3.11.4/protoc-3.11.4…
516b980cf41148c1d881e584634c81b0c4bc6c03a097a82e5181229f2a8b336d | https://jcenter.bintray.com/com/google/protobuf/protoc/3.11.4/protoc-3.11.4…
-4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
-bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
-cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
-b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
-50f11b09f877c294d56f24463f47d28f929cf5044f648661c0f0cfbae9a2f49c | https://jcenter.bintray.com/commons-lang/commons-lang/2.6/commons-lang-2.6.…
-ed76b8891c30b566289c743656f8a4d435986982438d40c567c626233247e711 | https://jcenter.bintray.com/commons-lang/commons-lang/2.6/commons-lang-2.6.…
-daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
-c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
+7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
20ef4b82e43ff7c652281a21313cf3b941092467add3fa73509c26f6969efdab | https://jcenter.bintray.com/com/squareup/javapoet/1.10.0/javapoet-1.10.0.jar
1690340a222279f2cbadf373e88826fa20f7f3cc3ec0252f36818fed32701ab1 | https://jcenter.bintray.com/com/squareup/javapoet/1.10.0/javapoet-1.10.0.pom
fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0 | https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0.…
@@ -217,9 +209,9 @@ e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://jcent
1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://jcenter.bintray.com/com/sun/activation/all/1.2.0/all-1.2.0.pom
993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
-6f83d3c85fdca9ef24010cb2f652aab1a508bff6331c087b60d0301782b78c6f | https://jcenter.bintray.com/com/sun/istack/istack-commons/3.0.7/istack-comm…
6443e10ba2e259fb821d9b6becf10db5316285fc30c53cec9d7b19a3877e7fdf | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/3.0.7/ist…
6d704e450a816a45bce806ba22c22fe83d8e8dcf7a71517603de630a1726809f | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/3.0.7/ist…
+6f83d3c85fdca9ef24010cb2f652aab1a508bff6331c087b60d0301782b78c6f | https://jcenter.bintray.com/com/sun/istack/istack-commons/3.0.7/istack-comm…
c2204f54b43593808c9af6502865ee71679823156dabdef341e71d35662c7aa0 | https://jcenter.bintray.com/com/sun/xml/bind/jaxb-bom-ext/2.3.1/jaxb-bom-ex…
f699ef37ec7966e284742dfca83075221179041a9a49aef7991280192604462d | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-parent/2.3.1/jaxb-par…
b56383eb4d43498b145d379e2a93d5fcdcd8ff9291f89b58b82cb91658dbf14c | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.3.1/…
@@ -227,6 +219,14 @@ b56383eb4d43498b145d379e2a93d5fcdcd8ff9291f89b58b82cb91658dbf14c | https://jcent
785861db11ca1bd0d1956682b974ad73eb19cd3e01a4b3fa82d62eca97210aec | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.15/Fast…
bbc796ab84a6778a751c2eff1136078abd2b4d35b5047062804f3582ef3c42c8 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.15/Fast…
cfb8cdad4c0dd05ed8cacbe146bf1718764403947b9de8348e1bfd42f62ea73e | https://jcenter.bintray.com/com/sun/xml/fastinfoset/fastinfoset-project/1.2…
+4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
+bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
+cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
+b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
+50f11b09f877c294d56f24463f47d28f929cf5044f648661c0f0cfbae9a2f49c | https://jcenter.bintray.com/commons-lang/commons-lang/2.6/commons-lang-2.6.…
+ed76b8891c30b566289c743656f8a4d435986982438d40c567c626233247e711 | https://jcenter.bintray.com/commons-lang/commons-lang/2.6/commons-lang-2.6.…
+daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
c8300fbf69d2240f5eae5a88a76f06f67e7c604d0328813de22b75174879a9e5 | https://jcenter.bintray.com/de/undercouch/gradle-download-task/3.4.3/gradle…
952cbfcc5f21beeccb5925cc5ba648af09839258441dd44d087d64a57d34e87a | https://jcenter.bintray.com/de/undercouch/gradle-download-task/4.0.2/gradle…
0161c5a76ef500bcfe727e95e34974c0482ad87793d821876bf3fa95704c1407 | https://jcenter.bintray.com/de/undercouch/gradle-download-task/4.0.2/gradle…
@@ -240,9 +240,9 @@ fc05b435d9467cc917d3b4dafa5c81af268434affa10875b29aae51055addda1 | https://jcent
da2926f3c8be898643cc10acdec6de0b0351a57fb2735770fa0177b06ade71b9 | https://jcenter.bintray.com/javax/activation/javax.activation-api/1.2.0/jav…
91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.jar
943e12b100627804638fa285805a0ab788a680266531e650921ebfe4621a8bfa | https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1.pom
+cd1beaa4560dc4dfdb826b9d809e464db22526dfb54264bae78a6ff7efb08e1f | https://jcenter.bintray.com/javax/xml/bind/jaxb-api-parent/2.3.1/jaxb-api-p…
88b955a0df57880a26a74708bc34f74dcaf8ebf4e78843a28b50eae945732b06 | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar
12b20cf922773445c3445c2883cbf671fa982111e9bf9f875020f9313b3814b1 | https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.pom
-cd1beaa4560dc4dfdb826b9d809e464db22526dfb54264bae78a6ff7efb08e1f | https://jcenter.bintray.com/javax/xml/bind/jaxb-api-parent/2.3.1/jaxb-api-p…
3a0c495de1cebc83f67beaa1776a7936f02f11f2addd3879596a78b2a86bcaa3 | https://jcenter.bintray.com/kr/motd/maven/os-maven-plugin/1.6.2/os-maven-pl…
6d70d1f2f2727730d779d32a1fd2fbb1ea08e75a67a50a2d8e7d0fdb3a2a4af3 | https://jcenter.bintray.com/kr/motd/maven/os-maven-plugin/1.6.2/os-maven-pl…
c83a9c71358d781539c34b38d76a88e3ec8e2d587c7f04b611acc9041919b310 | https://jcenter.bintray.com/net/java/dev/jna/jna/5.2.0/jna-5.2.0.aar
@@ -259,9 +259,9 @@ f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://jcent
cc12b1168e521491dd0e687cfebec11a4af874b22af70e10cf2a05b47ca00c8f | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/6.0.3/proguard-…
5a5c7317d68ce80d1d40c9d8bd4e38814d42d1b16c265146e333634833a35a57 | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/6.0.3/proguard-…
d87266bfd2312c3b036c4ac709310afa35c448ceb18027c3b87a33d03c6de0a0 | https://jcenter.bintray.com/net/sf/proguard/proguard-parent/6.0.3/proguard-…
+401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
-401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://jcenter.bintray.com/org/apache/apache/13/apache-13.pom
36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494 | https://jcenter.bintray.com/org/apache/apache/15/apache-15.pom
9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://jcenter.bintray.com/org/apache/apache/16/apache-16.pom
@@ -307,12 +307,12 @@ ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478 | https://jcent
965aeb2bedff369819bdde1bf7a0b3b89b8247dd69c88b86375d76163bb8c397 | https://jcenter.bintray.com/org/jetbrains/annotations/13.0/annotations-13.0…
affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601 | https://jcenter.bintray.com/org/jetbrains/intellij/deps/trove4j/1.0.2018121…
310a6aa2d90534c32b8f46f1fc98cd0edae95dcdfca23e2847e5efa9ae0c019a | https://jcenter.bintray.com/org/jetbrains/intellij/deps/trove4j/1.0.2018121…
-ffd156464b8129365423e27b9e53ecbfd32d56b91af977dab2222ca2d271a65f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
-eb68121782d951a1db37e9a00c8fd9252eafa91388e90987239d75224490d6bb | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
303c422700f79d5d13d528b978c6abd9cd136d78d9f7f6f2556e85a81892f9f1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions-…
648025c01c56b234a7458cb6048ae8fcfa941f9ea8ebf059090733237b9df9b6 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions-…
975dab97d8aa780bc8d1af8efd66ba121c35c709537308d5742e812c46b126c0 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions-…
d89b4ef057d10f9057d85685b711048c104ae76cfc60777cfae275848649a839 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions-…
+ffd156464b8129365423e27b9e53ecbfd32d56b91af977dab2222ca2d271a65f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
+eb68121782d951a1db37e9a00c8fd9252eafa91388e90987239d75224490d6bb | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-android-extensions/…
2e508e8d23e9ab171f53ae3f71e8218e7242cd138af040d62651ecd9d3417bcd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
c36857d64b1ee46f61f74f9a61bc0da7467bc50eb1fa6ce0c48e45b472a7d31e | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-annotation-processi…
a799c7521e0be8808b94d4ce6683c5fccc8428fc0764b659be337725ff57c68a | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-build-common/1.3.71…
@@ -325,18 +325,20 @@ c2c3917c52e8dd3cb8e0d6c7ca98be4c39200d69ad0c6eacbc50f7b7fd1c41d9 | https://jcent
8a92782825a7c4b3547ee3622ea08e36e71843e6295157ea214c98523bb7fee6 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.3.7…
5df3203befb387d24821473c35705987a3353e4514a9c45afe9621a8ce27a587 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-embeddable/1…
37d6bbf9074a74be00fa618b8bfa5783852c7bf27ec512895d2dd1ab64e1ea71 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-embeddable/1…
-f54f0a4620e6253573cb4ba6a130d9829c93b8cf165eaf05da8fe0e552500f3f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.7…
-18e52973ed9aff902570d6ba9e633037593564b9acc193890026a08aa8907b48 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.7…
44803ecde3e410d2344535d3374da67b32a290530f19de84410f37d4e7bc57fc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
6218d87f4b653d07aa348a3505e4261540a8fabfaca3a7aa479708aa4263fcb1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
9f56a0e6594ff627387cb35eab67a41c4d2905575006d1677aea9d0860698066 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-model…
08f9b985c8d7212b6d916d8e6c7debeeb90e64617723242381a75c43f8964666 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-model…
+f54f0a4620e6253573cb4ba6a130d9829c93b8cf165eaf05da8fe0e552500f3f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.7…
+18e52973ed9aff902570d6ba9e633037593564b9acc193890026a08aa8907b48 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.7…
6123981a9d8998fe7229f813352ccb11944685527c2612a3fe44437bce45e394 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-native-utils/1.3.71…
dabbcda1f808e1d318e62548d35c2bc55ac45429d5bc33126c9066c3becf732b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-native-utils/1.3.71…
143e715c10ff6d65eb5a7695be7b696c6e013702dff103d23ba54760bf93867b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.61/kotl…
b2b8add63c5ce9b67571ed469f7c37fd043ee2420206255e96a146018d8e2fa0 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.61/kotl…
59c57ab609494d2a30d6ea3737428a56918ff0b8031081ea73b8472fdec06e44 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.71/kotl…
4df94aaeee8d900be431386e31ef44e82a66e57c3ae30866aec2875aff01fe70 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.71/kotl…
+ec403b5a429113adc0fa96e6c9367ceeaa6294b3e6e8b8a3d65eef7224d1ccea | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
+04deba2875d68ac3f88d06dee97ab5c084698812a47415a1b0b88b6fde6b6c66 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
2c716ce300e573e51d351c68334b3cc5476cd500ad5e46cfdd716ee1e46cab31 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-common/1.…
0cc9b3006fe35dc2f297d9a38aadde5461d9b2e8fc49ffef4762eb2c6a30f40c | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-common/1.…
e7335e39e68af08902de5ca76085b7caba166a7b92ceb4acb81412f32d373831 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
@@ -345,14 +347,6 @@ b53a20c3b3cbd6c46754dcec681f0613c8e32ecda30308c27a3c0f13a6cc45ee | https://jcent
8491bd3f536685032bb7bfb8e40bac13b3286b57648582d65c348e8977764165 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
e67e0eaf0d532e4d312947ac4cf02135ea44aee646b32273707dc0c4646a3662 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.7…
781be9412e564dfbc31345b21959989012e3dbea2686795725b875e43eac5ce0 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.7…
-ec403b5a429113adc0fa96e6c9367ceeaa6294b3e6e8b8a3d65eef7224d1ccea | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
-04deba2875d68ac3f88d06dee97ab5c084698812a47415a1b0b88b6fde6b6c66 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
-e51e512619a7e7650a30eb4eb3e9c03e6909c7b5e3c026404e076254c098b932 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotli…
-dbe5babcd8d43e9b08c2845680b53fc1bb3e051c4805802ddd0ed3e8e2c50a84 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotli…
-5ace22b102a96425e4ac44e0558b927f3857b56a33cbc289cf1b70aee645e6a7 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotli…
-ff03e9989faa2d40fa4a9098aaad71e247f27ea4d24b0754da642eb0924bd8c5 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotli…
-3856a7349ebacd6d1be6802b2fed9c4dc2c5a564ea92b6b945ac988243d4b16b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotli…
-4f0d574a969ea93c45628a163e1ed3ffabb4584278d72c647ec124f8c8109481 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotli…
a2e7f341cf3047b5f00a1917ef777d323cdab2a57377468b8ed62aa31469cf7f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.6…
e22db009bb1a61636d9425635989736db5e3fca494809abf244468dc474cfc04 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.6…
76162bfcaa756897fd3f631019353e13b128df2318cdad5baecb7e7d428a28e3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.7…
@@ -374,6 +368,12 @@ ab355888358a25478591aafe2cab2dd0b2e44af323a0acc3fd03581b24712430 | https://jcent
a5e970ffd412599c8159068e670356509193e3238dddf20273ed6a8fb7b09de2 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.41/…
1b8355ce90079352de296f3f0b175473e7cbbde34d7338b92e4a80c633baab96 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.41/…
f6837401cbd13a8a31f126a9e22430ab9861602d91a4c310a47805453690f76d | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.41/…
+e51e512619a7e7650a30eb4eb3e9c03e6909c7b5e3c026404e076254c098b932 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotli…
+dbe5babcd8d43e9b08c2845680b53fc1bb3e051c4805802ddd0ed3e8e2c50a84 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.61/kotli…
+5ace22b102a96425e4ac44e0558b927f3857b56a33cbc289cf1b70aee645e6a7 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotli…
+ff03e9989faa2d40fa4a9098aaad71e247f27ea4d24b0754da642eb0924bd8c5 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotli…
+3856a7349ebacd6d1be6802b2fed9c4dc2c5a564ea92b6b945ac988243d4b16b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotli…
+4f0d574a969ea93c45628a163e1ed3ffabb4584278d72c647ec124f8c8109481 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.72/kotli…
71cdc094af3463af5773122941819ce11951e8550c499938bb79a04b3d5ee842 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-util-io/1.3.71/kotl…
ab2b2bd3304dcd40562a2930c53002b1e2d80fb21d0d9cc7d6448a83b9ae6b0b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-util-io/1.3.71/kotl…
51f7f966cd071ff412df49849bdd0a6a651f800c8816defaa29fcd106eedcdac | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-util-klib/1.3.71/ko…
@@ -388,8 +388,6 @@ f4a306487c17b8cdca8d3e5da50369a2e5ac7c665200516d427726dff5a56f92 | https://jcent
5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
95b05d9590af4154c6513b9c5dc1fb2e55b539972ba0a9ef28e9a0c01d83ad77 | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar
0a84c20cf71f6a3d21fe226b0d588332fc7ae3e90cb583c60a483317eb9f3644 | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.pom
-b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf | https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.jar
-83f65b1083d5ce4f8ba7f9545cfe9ff17824589c9a7cc82c3a4695801e4f5f68 | https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.pom
e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.j…
c6b54477e9d5bae1e7addff2e24cbf92aaff2ff08fd6bc0596c3933c3fadc2cb | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.p…
fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d | https://jcenter.bintray.com/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.jar
@@ -398,27 +396,31 @@ cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c | https://jcent
d39e7dd12f4ff535a0839d1949c39c7644355a4470220c94b76a5c168c57a068 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.pom
75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145 | https://jcenter.bintray.com/org/ow2/asm/asm-util/7.0/asm-util-7.0.jar
e07bce4bb55d5a06f4c10d912fc9dee8a9b9c04ec549bbb8db4f20db34706f75 | https://jcenter.bintray.com/org/ow2/asm/asm-util/7.0/asm-util-7.0.pom
+b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf | https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.jar
+83f65b1083d5ce4f8ba7f9545cfe9ff17824589c9a7cc82c3a4695801e4f5f68 | https://jcenter.bintray.com/org/ow2/asm/asm/7.0/asm-7.0.pom
0f8a1b116e760b8fe6389c51b84e4b07a70fc11082d4f936e453b583dd50b43b | https://jcenter.bintray.com/org/ow2/ow2/1.5/ow2-1.5.pom
b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
13009fb5ede3cf2be5a8d0f1602155aeaa0ce5ef5f9366892bd258d8d3d4d2b1 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar
1e1beb22ca906209700122b5cacf6f2719324538c5b1e3c27bf91564c8d31dbd | https://jcenter.bintray.com/org/yaml/snakeyaml/1.23/snakeyaml-1.23.pom
-e14c614b65ae4fe6c6d26ce369d523cf1ff837ce697e5e3f47e8cdfa355357f9 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/56.0.…
-e7bd7b2e2013a080bcb3cb9db974185eb28dd87c0594394f951a51ab5d6fcf5d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/56.0.…
-e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/56.0.…
-32acc51221752051a03765ac0bbf26a1da663ba2f7b3fe69ae422d5aac228f81 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/56.0.…
-ae35db5670efe458d3b9646cab337f2f7667becacdb023b599cc62bfa95b59ec | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/56.0.0…
-d87cd2eea092430c4e5a95ff04c3213be89f54aa61c2c7f80fb6548e6dc38bab | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/56.0.0…
-96aeede35017fd79576c5faa1cb41efc8137616e20231b41934999ca711f4407 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/56.0.0/…
-dbd706151fe820ed233792a6773b70efcceb42987c209e27575ef91d4552b8c4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/56.0.0/…
-22934a560b0bc34f01304efbdccc988d2e0fca039ae577894fcec52a7fdfd88e | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/56.0.…
-a2c1e39e5e58f585c2908af2266953b6b43e51f2fabe45e7723bc177c9c49bc0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/56.0.…
-0165b5554aa3427a2e4026e9ca78c1ea5021f1578d36839b37350dbf0f192d29 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-878570d1c4e5b06d2434b7133a14ce97fb516b7871c7637c44a4b087db291a49 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-5b078e136164082be6d49afa0d87f849c7b9f65e21125fa57056cd630756279b | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean/32.1.1/glean-3…
-64371d71a4fb11d63d2a5ff60149c94c1d0e0b909de09ffe199f6872663976b2 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean/32.1.1/glean-3…
-ab514359d7686282b7a7c8463e81237ff98460a23df534a6c9663b463e65423f | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
-f724de3fc1c37d8ecb4bbb7957dd67a489d0321da71eebb6b8d605ec4a57755a | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
+a67ba1d46f43c23c521e12cbaf14226232af78d14b1f649d4d69681f80b86a54 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/62.0.0…
+6b605eafe20d5ac0e3752e389bcd2fb30ff1654897513499b707351ac6b5cd81 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/62.0.0…
+fbe40935ac8dca66278ad2f23a5a08928515e6abf68bc10d341095226cabf1ce | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/62.0.…
+923190b601323312b57c7fb81de2646b57a9bf6de33fc35706a3da1daf971495 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/62.0.…
+e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/62.0.…
+d58717440828ed838a2bdfc14c3fc8a99eea380154d84800703afa3488b5a450 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/62.0.…
+ba5699f396773de6bf5fda67a06cf72368e31dcfa10976c26d008be3cc7dd9c0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/62.0.0…
+2e638c3b1781ca1f4a5d3acdccbe1d753eb3402c8ac1d8566c67cf2e08eaba23 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/62.0.0…
+95fda0ed2e76860d92ead80fa3641f39fa1512b233d2d22e6f0f209aabf898f7 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/62.0.0/…
+64604c28410376786e8288a8f39e9d38357e9dc246dff15972ebd4b8ff3c2de1 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/62.0.0/…
+4aa879034861b9187adea6676b91391379fae1a78337f6d763960d486e7e0b76 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/62.0.…
+c8d8f618668ccf620c7c4a87b8ebb77b6ae6d46410d072ea95acf2ff65d0f045 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/62.0.…
+5278d5b22cb4ccc5e0d540c661a54b177018f1bb3d19e6a5f08c8de7a0d057eb | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+67528b70924c76c53a59f0c93dda3a4c504844ed852eaf488dc8c9a599be30ac | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+93b2f27c919b07b927d764726eb64350cb7d480bac9485b9192881a9d5d10f30 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
+a84340369fdbb4c38ea0ce2e17ceac1c6a596cebb9818885276eec8b611e4d4b | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
+d0e02f22fbd35b15e50e043ca0462fac6b2b78ac4968b324bd1431c8f85878df | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean/32.4.1/glean-3…
+79d0b2e02aa86ef38577edb2befa25280ce58fcbae23a1ffd1db80147510aa86 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean/32.4.1/glean-3…
470564ff0a452da1c96be4ca3a9cdeceaa2912537ee2a8def486f3b383d43f15 | https://plugins.gradle.org/m2/com/jetbrains/python/envs/com.jetbrains.pytho…
6438812f927b505a4c4ef2703b45433a1b99e45334526bfed25e71e1a79abb14 | https://plugins.gradle.org/m2/gradle/plugin/com/jetbrains/python/gradle-pyt…
317aa4c467a37d5fcab6657c326a4069ea8e8c6dda951ec2091ffb95c596a2a3 | https://plugins.gradle.org/m2/gradle/plugin/com/jetbrains/python/gradle-pyt…
diff --git a/projects/fenix/config b/projects/fenix/config
index da9f1d5..1e84437 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -17,8 +17,6 @@ var:
gradle_dependencies_version: 8
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
- # Overwrite `glean_parser` for now to fix #40085.
- glean_parser: 1.28.6
targets:
nightly:
diff --git a/rbm.conf b/rbm.conf
index 1ff2da3..aeb089e 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -287,7 +287,7 @@ targets:
android_min_api_x86_64: 21
android_min_api_aarch64: 21
# This is needed to get the offline build part for Glean right.
- glean_parser: 1.28.1
+ glean_parser: 1.28.6
# We only build snowflake on the alpha and nightly
# channels for now.
snowflake: '[% c("var/alpha") || c("var/nightly") %]'
1
0

[tor-browser-build/master] Bug 40097: Update toolchain for Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 65e79d4262efb2d80a64e3826ddf4362970f6b0f
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Oct 5 10:18:34 2020 +0000
Bug 40097: Update toolchain for Fenix 82
As Fenix 82 uses clang 11.0.0-rc3 it is easier if we switch to using
the llvm-project repository directly. This fixes the mobile part of
bug 40048.
We need to use our compiled binutils version, too, as the one that comes
with Debian Buster (2.31.1) is breaking the build. We hit
https://bugs.llvm.org/show_bug.cgi?id=42994 which is essentially
an ld bug (https://sourceware.org/bugzilla/show_bug.cgi?id=24458) That
one is fixed on the 2.31 branch and onwards but never made it into a
2.31.x release.
---
projects/fenix-clang/43909.patch | 252 ---------------------------------------
projects/fenix-clang/build | 19 +--
projects/fenix-clang/config | 7 +-
projects/llvm-project/build | 8 ++
projects/llvm-project/config | 5 +
5 files changed, 26 insertions(+), 265 deletions(-)
diff --git a/projects/fenix-clang/43909.patch b/projects/fenix-clang/43909.patch
deleted file mode 100644
index 78d2a75..0000000
--- a/projects/fenix-clang/43909.patch
+++ /dev/null
@@ -1,252 +0,0 @@
-From c95310f2d4fd3c88241c3b5d6dbf6251d34a3256 Mon Sep 17 00:00:00 2001
-From: Nikita Popov <nikita.ppv(a)gmail.com>
-Date: Sat, 16 Nov 2019 16:22:18 +0100
-Subject: [PATCH] Restructure caching
-
-Variant on D70103. The caching is switched to always use a BB to
-cache entry map, which then contains per-value caches. A separate
-set contains value handles with a deletion callback. This allows us
-to properly invalidate overdefined values.
-
-A possible alternative would be to always cache by value first and
-have per-BB maps/sets in the each cache entry. In that case we could
-use a ValueMap and would avoid the separate value handle set. I went
-with the BB indexing at the top level to make it easier to integrate
-D69914, but possibly that's not the right choice.
-
-Differential Revision: https://reviews.llvm.org/D70376
-
-diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
-index 110c085d3f3..aa6862cb588 100644
---- a/llvm/lib/Analysis/LazyValueInfo.cpp
-+++ b/llvm/lib/Analysis/LazyValueInfo.cpp
-@@ -133,12 +133,9 @@ namespace {
- /// A callback value handle updates the cache when values are erased.
- class LazyValueInfoCache;
- struct LVIValueHandle final : public CallbackVH {
-- // Needs to access getValPtr(), which is protected.
-- friend struct DenseMapInfo<LVIValueHandle>;
--
- LazyValueInfoCache *Parent;
-
-- LVIValueHandle(Value *V, LazyValueInfoCache *P)
-+ LVIValueHandle(Value *V, LazyValueInfoCache *P = nullptr)
- : CallbackVH(V), Parent(P) { }
-
- void deleted() override;
-@@ -152,89 +149,63 @@ namespace {
- /// This is the cache kept by LazyValueInfo which
- /// maintains information about queries across the clients' queries.
- class LazyValueInfoCache {
-- /// This is all of the cached block information for exactly one Value*.
-- /// The entries are sorted by the BasicBlock* of the
-- /// entries, allowing us to do a lookup with a binary search.
-- /// Over-defined lattice values are recorded in OverDefinedCache to reduce
-- /// memory overhead.
-- struct ValueCacheEntryTy {
-- ValueCacheEntryTy(Value *V, LazyValueInfoCache *P) : Handle(V, P) {}
-- LVIValueHandle Handle;
-- SmallDenseMap<PoisoningVH<BasicBlock>, ValueLatticeElement, 4> BlockVals;
-+ /// This is all of the cached information for one basic block. It contains
-+ /// the per-value lattice elements, as well as a separate set for
-+ /// overdefined values to reduce memory usage.
-+ struct BlockCacheEntryTy {
-+ SmallDenseMap<AssertingVH<Value>, ValueLatticeElement, 4> LatticeElements;
-+ SmallDenseSet<AssertingVH<Value>, 4> OverDefined;
- };
-
-- /// This tracks, on a per-block basis, the set of values that are
-- /// over-defined at the end of that block.
-- typedef DenseMap<PoisoningVH<BasicBlock>, SmallPtrSet<Value *, 4>>
-- OverDefinedCacheTy;
-- /// Keep track of all blocks that we have ever seen, so we
-- /// don't spend time removing unused blocks from our caches.
-- DenseSet<PoisoningVH<BasicBlock> > SeenBlocks;
--
-- /// This is all of the cached information for all values,
-- /// mapped from Value* to key information.
-- DenseMap<Value *, std::unique_ptr<ValueCacheEntryTy>> ValueCache;
-- OverDefinedCacheTy OverDefinedCache;
--
-+ /// Cached information per basic block.
-+ DenseMap<PoisoningVH<BasicBlock>, BlockCacheEntryTy> BlockCache;
-+ /// Set of value handles used to erase values from the cache on deletion.
-+ DenseSet<LVIValueHandle, DenseMapInfo<Value *>> ValueHandles;
-
- public:
- void insertResult(Value *Val, BasicBlock *BB,
- const ValueLatticeElement &Result) {
-- SeenBlocks.insert(BB);
--
-+ auto &CacheEntry = BlockCache.try_emplace(BB).first->second;
- // Insert over-defined values into their own cache to reduce memory
- // overhead.
- if (Result.isOverdefined())
-- OverDefinedCache[BB].insert(Val);
-- else {
-- auto It = ValueCache.find_as(Val);
-- if (It == ValueCache.end()) {
-- ValueCache[Val] = make_unique<ValueCacheEntryTy>(Val, this);
-- It = ValueCache.find_as(Val);
-- assert(It != ValueCache.end() && "Val was just added to the map!");
-- }
-- It->second->BlockVals[BB] = Result;
-- }
-- }
--
-- bool isOverdefined(Value *V, BasicBlock *BB) const {
-- auto ODI = OverDefinedCache.find(BB);
--
-- if (ODI == OverDefinedCache.end())
-- return false;
-+ CacheEntry.OverDefined.insert(Val);
-+ else
-+ CacheEntry.LatticeElements.insert({ Val, Result });
-
-- return ODI->second.count(V);
-+ auto HandleIt = ValueHandles.find_as(Val);
-+ if (HandleIt == ValueHandles.end())
-+ ValueHandles.insert({ Val, this });
- }
-
- bool hasCachedValueInfo(Value *V, BasicBlock *BB) const {
-- if (isOverdefined(V, BB))
-- return true;
--
-- auto I = ValueCache.find_as(V);
-- if (I == ValueCache.end())
-+ auto It = BlockCache.find(BB);
-+ if (It == BlockCache.end())
- return false;
-
-- return I->second->BlockVals.count(BB);
-+ return It->second.OverDefined.count(V) ||
-+ It->second.LatticeElements.count(V);
- }
-
- ValueLatticeElement getCachedValueInfo(Value *V, BasicBlock *BB) const {
-- if (isOverdefined(V, BB))
-+ auto It = BlockCache.find(BB);
-+ if (It == BlockCache.end())
-+ return ValueLatticeElement();
-+
-+ if (It->second.OverDefined.count(V))
- return ValueLatticeElement::getOverdefined();
-
-- auto I = ValueCache.find_as(V);
-- if (I == ValueCache.end())
-+ auto LatticeIt = It->second.LatticeElements.find(V);
-+ if (LatticeIt == It->second.LatticeElements.end())
- return ValueLatticeElement();
-- auto BBI = I->second->BlockVals.find(BB);
-- if (BBI == I->second->BlockVals.end())
-- return ValueLatticeElement();
-- return BBI->second;
-+
-+ return LatticeIt->second;
- }
-
- /// clear - Empty the cache.
- void clear() {
-- SeenBlocks.clear();
-- ValueCache.clear();
-- OverDefinedCache.clear();
-+ BlockCache.clear();
-+ ValueHandles.clear();
- }
-
- /// Inform the cache that a given value has been deleted.
-@@ -248,23 +219,18 @@ namespace {
- /// OldSucc might have (unless also overdefined in NewSucc). This just
- /// flushes elements from the cache and does not add any.
- void threadEdgeImpl(BasicBlock *OldSucc,BasicBlock *NewSucc);
--
-- friend struct LVIValueHandle;
- };
- }
-
- void LazyValueInfoCache::eraseValue(Value *V) {
-- for (auto I = OverDefinedCache.begin(), E = OverDefinedCache.end(); I != E;) {
-- // Copy and increment the iterator immediately so we can erase behind
-- // ourselves.
-- auto Iter = I++;
-- SmallPtrSetImpl<Value *> &ValueSet = Iter->second;
-- ValueSet.erase(V);
-- if (ValueSet.empty())
-- OverDefinedCache.erase(Iter);
-+ for (auto &Pair : BlockCache) {
-+ Pair.second.LatticeElements.erase(V);
-+ Pair.second.OverDefined.erase(V);
- }
-
-- ValueCache.erase(V);
-+ auto HandleIt = ValueHandles.find_as(V);
-+ if (HandleIt != ValueHandles.end())
-+ ValueHandles.erase(HandleIt);
- }
-
- void LVIValueHandle::deleted() {
-@@ -274,18 +240,7 @@ void LVIValueHandle::deleted() {
- }
-
- void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
-- // Shortcut if we have never seen this block.
-- DenseSet<PoisoningVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
-- if (I == SeenBlocks.end())
-- return;
-- SeenBlocks.erase(I);
--
-- auto ODI = OverDefinedCache.find(BB);
-- if (ODI != OverDefinedCache.end())
-- OverDefinedCache.erase(ODI);
--
-- for (auto &I : ValueCache)
-- I.second->BlockVals.erase(BB);
-+ BlockCache.erase(BB);
- }
-
- void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
-@@ -303,10 +258,11 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
- std::vector<BasicBlock*> worklist;
- worklist.push_back(OldSucc);
-
-- auto I = OverDefinedCache.find(OldSucc);
-- if (I == OverDefinedCache.end())
-+ auto I = BlockCache.find(OldSucc);
-+ if (I == BlockCache.end() || I->second.OverDefined.empty())
- return; // Nothing to process here.
-- SmallVector<Value *, 4> ValsToClear(I->second.begin(), I->second.end());
-+ SmallVector<Value *, 4> ValsToClear(I->second.OverDefined.begin(),
-+ I->second.OverDefined.end());
-
- // Use a worklist to perform a depth-first search of OldSucc's successors.
- // NOTE: We do not need a visited list since any blocks we have already
-@@ -320,10 +276,10 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
- if (ToUpdate == NewSucc) continue;
-
- // If a value was marked overdefined in OldSucc, and is here too...
-- auto OI = OverDefinedCache.find(ToUpdate);
-- if (OI == OverDefinedCache.end())
-+ auto OI = BlockCache.find(ToUpdate);
-+ if (OI == BlockCache.end() || OI->second.OverDefined.empty())
- continue;
-- SmallPtrSetImpl<Value *> &ValueSet = OI->second;
-+ auto &ValueSet = OI->second.OverDefined;
-
- bool changed = false;
- for (Value *V : ValsToClear) {
-@@ -333,11 +289,6 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
- // If we removed anything, then we potentially need to update
- // blocks successors too.
- changed = true;
--
-- if (ValueSet.empty()) {
-- OverDefinedCache.erase(OI);
-- break;
-- }
- }
-
- if (!changed) continue;
---
-2.24.0
-
diff --git a/projects/fenix-clang/build b/projects/fenix-clang/build
index 10700ce..c3c15f1 100644
--- a/projects/fenix-clang/build
+++ b/projects/fenix-clang/build
@@ -10,20 +10,21 @@ export PATH="/var/tmp/dist/cmake/bin:$PATH"
[% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc'),
hardened_gcc => 0 }) %]
ln -s gcc /var/tmp/dist/gcc/bin/cc
- tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
- export PATH="/var/tmp/dist/binutils/bin:$PATH"
[% END -%]
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
+export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
mkdir -p /var/tmp/build
cd /var/tmp/build
-tar -xf $rootdir/[% c('input_files_by_name/clang-source') %]
-cd clang-source
-export LLVM_HOME=$(pwd)
+tar -xf $rootdir/[% c('input_files_by_name/llvm-project') %]
+cd llvm-project
mkdir build
cd build
-cmake .. -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$distdir \
- -DCMAKE_BUILD_TYPE:STRING=Release \
- [% IF c("var/rlbox") -%]-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \[% END -%]
- $LLVM_HOME
+cmake ../llvm -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$distdir \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
+ [% IF c("var/rlbox") -%]-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \[% END -%]
+ -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;lld"
make -j[% c("buildconf/num_procs") %]
make install
cd /var/tmp/dist
diff --git a/projects/fenix-clang/config b/projects/fenix-clang/config
index 46d308a..4bc55f3 100644
--- a/projects/fenix-clang/config
+++ b/projects/fenix-clang/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 9.0.1
+version: '[% pc("llvm-project", "version") %]'
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
var:
@@ -13,8 +13,7 @@ input_files:
enable: '[% c("var/linux") %]'
- name: binutils
project: binutils
- enable: '[% c("var/linux") %]'
- project: cmake
name: cmake
- - project: clang-source
- name: clang-source
+ - project: llvm-project
+ name: llvm-project
diff --git a/projects/llvm-project/build b/projects/llvm-project/build
new file mode 100644
index 0000000..ac0f21b
--- /dev/null
+++ b/projects/llvm-project/build
@@ -0,0 +1,8 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+tar xf [% project %]-[% c("version") %].tar.gz
+mv [% project %]-[% c("version") %] [% project %]
+[% c('tar', {
+ tar_src => [ project ],
+ tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+ }) %]
diff --git a/projects/llvm-project/config b/projects/llvm-project/config
new file mode 100644
index 0000000..1574177
--- /dev/null
+++ b/projects/llvm-project/config
@@ -0,0 +1,5 @@
+# vim: filetype=yaml sw=2
+version: 11.0.0-rc3
+git_hash: 8aca41f39c207b6f9efe2e448986d109892072ad
+git_url: https://github.com/llvm/llvm-project
+filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
1
0

[tor-browser-build/master] Revert "Bug 40093: Ensure application-services libs do not include libc networking symbols"
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 015ff456a104e5dc08cc87317069772906a030c3
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Oct 8 07:04:54 2020 +0000
Revert "Bug 40093: Ensure application-services libs do not include libc networking symbols"
This reverts commit 82ad6be56ef54a27da654d7ea879f8dff5fda900.
We need to bump Rust to 1.45 for #40115 and thus, we need to back out
this patch again and try finding a fix for #40114 instead.
---
projects/application-services/build | 13 -------------
projects/application-services/config | 2 --
projects/application-services/lto.patch | 10 ----------
projects/nss/build | 4 ----
4 files changed, 29 deletions(-)
diff --git a/projects/application-services/build b/projects/application-services/build
index ffe63da..5c6b5e0 100644
--- a/projects/application-services/build
+++ b/projects/application-services/build
@@ -97,25 +97,12 @@ patch -p1 < $rootdir/1651662.patch
export LANG=C.UTF-8
patch -p1 < $rootdir/mavenLocal.patch
gradle_flags="--offline --no-daemon -Dmaven.repo.local=$gradle_repo"
- patch -p1 < $rootdir/lto.patch
- # Set the right flags for cross-language LTO and override linking opt level, since
- # lld does not understand -Os or -Oz.
- export RUSTFLAGS="-Clinker-plugin-lto -Clink-arg=-fuse-ld=lld -Clink-arg=-Wl,-plugin-opt=O2"
$GRADLE_HOME/gradle-6.3/bin/gradle $gradle_flags assembleRelease
$GRADLE_HOME/gradle-6.3/bin/gradle $gradle_flags publish
cd build
find maven -regex '.*[0-9].\(aar\|pom\)' -exec cp --parents {} $distdir \;
- # Verify that the compiled libs do not have libc networking symbols
- # (list adapted from https://searchfox.org/mozilla-central/rev/30e70f2fe80c97bfbfcd975e68538cefd…)
- tmpdir=$(mktemp -d)
- find $distdir -name '*.aar' -exec mkdir -p $tmpdir/{} \; -exec unzip {} -d $tmpdir/{} \;
- if find $tmpdir -name '*.so' | xargs objdump -Tt | grep "*UND*" | grep "connect\|accept\|listen\|sock\|recv\|send\|host\|serv\|proto"; then
- echo "Error: networking symbols found"
- exit 1
- fi
-
cd /var/tmp/dist
[% c('tar', {
tar_src => [ project ],
diff --git a/projects/application-services/config b/projects/application-services/config
index 6d021da..336de62 100644
--- a/projects/application-services/config
+++ b/projects/application-services/config
@@ -92,5 +92,3 @@ input_files:
- filename: target.patch
- filename: 1651660.patch
- filename: 1651662.patch
- - filename: lto.patch
- enable: '[% !c("var/fetch_gradle_dependencies") %]'
diff --git a/projects/application-services/lto.patch b/projects/application-services/lto.patch
deleted file mode 100644
index 838967c..0000000
--- a/projects/application-services/lto.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-diff --git a/Cargo.toml b/Cargo.toml
-index 93006d8b..2c9ae848 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -39,4 +39,4 @@ members = [
- [profile.release]
- opt-level = "s"
- debug = true
--lto = "thin"
-+lto = "fat"
diff --git a/projects/nss/build b/projects/nss/build
index bf51122..c5cfd95 100644
--- a/projects/nss/build
+++ b/projects/nss/build
@@ -52,10 +52,6 @@ patch -p2 < $rootdir/config.patch
# side.
patch -p2 < $rootdir/bug_13028.patch
-# Enable LTO
-export CFLAGS="-flto"
-export LDFLAGS="-flto"
-
# Building NSPR
mkdir $builddir/nspr_build
cd $builddir/nspr_build
1
0

[tor-browser-build/master] Bug 40115: Update components for switch to Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 48bdac508097974eccea3afc3148a9e72a94ff2a
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Oct 6 09:58:37 2020 +0000
Bug 40115: Update components for switch to Fenix 82
Update GeckoView part
---
projects/geckoview/config | 4 +-
projects/geckoview/gradle-dependencies-list.txt | 274 ++++++++++++------------
projects/geckoview/mozconfig-android-all | 2 +
3 files changed, 141 insertions(+), 139 deletions(-)
diff --git a/projects/geckoview/config b/projects/geckoview/config
index d2ce0f6..92d4a1b 100644
--- a/projects/geckoview/config
+++ b/projects/geckoview/config
@@ -8,7 +8,7 @@ git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- geckoview_version: 81.0.1
+ geckoview_version: 82.0b7
torbrowser_branch: 10.0
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
deps:
@@ -25,7 +25,7 @@ var:
container:
use_container: 1
# this should be updated when the list of gradle dependencies is changed
- gradle_dependencies_version: 2
+ gradle_dependencies_version: 3
steps:
merge_aars:
diff --git a/projects/geckoview/gradle-dependencies-list.txt b/projects/geckoview/gradle-dependencies-list.txt
index dc10fc5..96d2e45 100644
--- a/projects/geckoview/gradle-dependencies-list.txt
+++ b/projects/geckoview/gradle-dependencies-list.txt
@@ -12,18 +12,14 @@ feab9191311c3d7aeef2b66d6064afc80d3d1d52d980fb07ae43c78c987ba93a | https://jcent
02c12c3c2ae12dd475219ff691c82a4d9ea21f44bc594a181295bf6d43dcfbb0 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.…
766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7 | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.…
19889dbdf1b254b2601a5ee645b8147a974644882297684c798afe5d63d78dfe | https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.…
+0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.0/gson-par…
+cf5c43860b53ba5a95c19bc6525cc43d3488a6fe3df2f649c0099a613a0640e3 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.2/gson-par…
+8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.5/gson-par…
c6221763bd79c4f1c3dc7f750b5f29a0bb38b367b81314c4f71896e340c40825 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
a5331a0ecb548f9942ab5b93c7ac43c38a21e897763dde1bcdbf0774f416ca6f | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0.pom
91b9f17a54e6c340c8d3ea4b359401170706eb26a82d51909abe6ba80081aed8 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.2/gson-2.8.2.pom
233a0149fc365c9f6edbd683cfe266b19bdc773be98eabdaf6b3c924b48e7d81 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar
b8308557a7fccc92d9fe7c8cd0599258b361285d2ecde7689eda98843255a092 | https://jcenter.bintray.com/com/google/code/gson/gson/2.8.5/gson-2.8.5.pom
-0f1d8369b1e9f1bc4b467c8dcfdd8b59733aad5b5c8419c3a59b2f9abaf04cd2 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.0/gson-par…
-cf5c43860b53ba5a95c19bc6525cc43d3488a6fe3df2f649c0099a613a0640e3 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.2/gson-par…
-8f1fec72b91a71ea39ec39f5f778c4d1124b6b097c6d55b3a50b554a52237b27 | https://jcenter.bintray.com/com/google/code/gson/gson-parent/2.8.5/gson-par…
-2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
-47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
-757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
-7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
cb4cfad870bf563a07199f3ebea5763f0dec440fcda0b318640b1feaa788656b | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
9144127192d6f612c2366825dceaeb23b0d53130b83e0bf1ffe107d1470a8487 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
03d0329547c13da9e17c634d1049ea2ead093925e290567e1a364fd6b1fc7ff8 | https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2…
@@ -34,32 +30,28 @@ cf149955279b07d4f11e817985c1164a69e930d73db7441b43a6ef53bbd286c4 | https://jcent
d52a2616a1389fce951de0e97a780b88f1bdf0c947b315a76fd47cd6bbfb239b | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.1.3/…
c460902ddf5ece68832c6b271ce52a0928b05cf3a6ac81a8f548c73cbd541138 | https://jcenter.bintray.com/com/google/errorprone/error_prone_parent/2.2.0/…
cd6db17a11a31ede794ccbd1df0e4d9750f640234731f21cff885a9997277e81 | https://jcenter.bintray.com/com/google/google/1/google-1.pom
+66cc3a0d329f9fe130605fdb2c901e5a9bb2612f02f23a76757b46e689b3594d | https://jcenter.bintray.com/com/google/guava/guava-parent/23.0/guava-parent…
+bb7d5cd417c0d7def5e3e27092fdd23522d3fc251ad8a07956c13ce0573aeaa3 | https://jcenter.bintray.com/com/google/guava/guava-parent/26.0-jre/guava-pa…
7baa80df284117e5b945b19b98d367a85ea7b7801bd358ff657946c3bd1b6596 | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.jar
ac2ac42a7a6b4ce5097c6c83e2fbbacbbb7f9913f1b4f993eb1723a14476324e | https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0.pom
a0e9cabad665bc20bcd2b01f108e5fc03f756e13aea80abaadb9f407033bea2c | https://jcenter.bintray.com/com/google/guava/guava/26.0-jre/guava-26.0-jre.…
1c337adc9a4ab4b844da81da85936581b8946c7cb71284c5dcbdaf1eaa7ee109 | https://jcenter.bintray.com/com/google/guava/guava/26.0-jre/guava-26.0-jre.…
-66cc3a0d329f9fe130605fdb2c901e5a9bb2612f02f23a76757b46e689b3594d | https://jcenter.bintray.com/com/google/guava/guava-parent/23.0/guava-parent…
-bb7d5cd417c0d7def5e3e27092fdd23522d3fc251ad8a07956c13ce0573aeaa3 | https://jcenter.bintray.com/com/google/guava/guava-parent/26.0-jre/guava-pa…
2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6 | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
f0c98c571e93a7cb4dd18df0fa308f0963e7a0620ac2d4244e61e709d03ad6be | https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc…
+c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar
efa86e5cd922f17b472fdfcae57234d8d4ac3e148b6250737dfce454af7a7a44 | https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
-c71555751e57e0ef912870e8ac9625ae782502a6a5b9c19ccf83b2a97d8b26bd | https://jcenter.bintray.com/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-…
-dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
-83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
4189e0be5ab15cf2330f70b24fbdc75ca37514f188388fce8580ce16a9a68052 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
89c43073e7eaa0eaba72a4a36ae1b6bfdfe5d81bb9d0e156aee05e4a72de3cb8 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/pr…
+dce7e66b32456a1b1198da0caff3a8acb71548658391e798c79369241e6490a4 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
+83f17ba86c5fa1a15a3a3c8030d4ce42ef21c1d39b65db6cc004a8eeb2c59406 | https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobu…
24909c552842c0eb7a4c769d631a43cbef5a9a10c1640f2bdbd1ea149c573a47 | https://jcenter.bintray.com/com/google/protobuf/protobuf-parent/3.4.0/proto…
+2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439 | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+47a89be0fa0fedd476db5fd2c83487654d2a119c391f83a142be876667cf7dab | https://jcenter.bintray.com/com/googlecode/json-simple/json-simple/1.1/json…
+757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76 | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
+7846399b35c7cd642a9b3a000c3e2d62d04eb37a4547b6933cc8b18bcc2f086b | https://jcenter.bintray.com/com/googlecode/juniversalchardet/juniversalchar…
f715b19c918900ad34be8f2e2372d97b1c5fff579a383f0b2dad9581df443ea4 | https://jcenter.bintray.com/com/koushikdutta/async/androidasync/2.2.1/andro…
522714e46eb74d494c94e37e17114030e618a7560141720998d82f363d1fcd47 | https://jcenter.bintray.com/com/koushikdutta/async/androidasync/2.2.1/andro…
-4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
-bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
-ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
-e5efcf039cd909688c201dc5479b144fd6f01f0e40252b7fc5e7d2e1b5c07990 | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
-cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
-b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
-daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
-c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
8e108c92027bb428196f10fa11cffbe589f7648a6af2016d652279385fdfd789 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.jar
b3760f40f19e735b2cd418f7656335d926d1d9413e10982a1c9695b64edbb647 | https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e | https://jcenter.bintray.com/com/squareup/javawriter/2.1.1/javawriter-2.1.1.…
@@ -69,9 +61,9 @@ e1abd7f1116cf5e0c59947693e2189208ec94296b2a3394c959e3511d399a7b0 | https://jcent
1d8518e3ac7532a104e4f7be77def37c982e530723c6bdb3d67708cce2b0c2c4 | https://jcenter.bintray.com/com/sun/activation/all/1.2.0/all-1.2.0.pom
993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
f879b6e945854c6900b0dbee1c8384d7ab3de7e157fd7ac84937405c416d2a5e | https://jcenter.bintray.com/com/sun/activation/javax.activation/1.2.0/javax…
-c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://jcenter.bintray.com/com/sun/istack/istack-commons/2.21/istack-commo…
c33e67a0807095f02a0e2da139412dd7c4f9cc1a4c054b3e434f96831ba950f4 | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
ebe7137b5fbfd050545f9a7f3f339ae55beb0b53755071b4fd62aa024c626d1c | https://jcenter.bintray.com/com/sun/istack/istack-commons-runtime/2.21/ista…
+c3071277f89b162982606b4e65c92077212efb6cbf1bdc365c51bd0b57ac818c | https://jcenter.bintray.com/com/sun/istack/istack-commons/2.21/istack-commo…
b25e0693de21cb92b039a2e4608f396590fb8773108f10d6dc9f1465f03b5be9 | https://jcenter.bintray.com/com/sun/xml/bind/jaxb-bom-ext/2.2.11/jaxb-bom-e…
b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-parent/2.2.11/jaxb-pa…
21918cb8e4eda67f24251e909a5d81672201d93604c4ffbf33522ad836a58e90 | https://jcenter.bintray.com/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.2.11…
@@ -79,6 +71,14 @@ b5301b711c01547e571b615f9a0832ee525d34a4ce3372f53907a87cf20b0480 | https://jcent
27a77db909f3c2833c0b1a37c55af1db06045118ad2eed96ce567b6632bce038 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
b7505e0ecf7d495b4daa3e6569f71611d1a789dc531cbd92a2025922ff2655d3 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/FastInfoset/1.2.13/Fast…
fd0857899f1067e0287c2ffd91e38f967a26bd405b83a34650c2742cee9fc261 | https://jcenter.bintray.com/com/sun/xml/fastinfoset/fastinfoset-project/1.2…
+4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
+bdb8db7012d112a6e3ea8fdb7c510b300d99eff0819d27dddba9c43397ea4cfb | https://jcenter.bintray.com/commons-codec/commons-codec/1.10/commons-codec-…
+ad19d2601c3abf0b946b5c3a4113e226a8c1e3305e395b90013b78dd94a723ce | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
+e5efcf039cd909688c201dc5479b144fd6f01f0e40252b7fc5e7d2e1b5c07990 | https://jcenter.bintray.com/commons-codec/commons-codec/1.9/commons-codec-1…
+cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.jar
+b2b5dd46cf998fa626eb6f8a1c114f6167c8d392694164e62533e5898e9b31f2 | https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4.pom
+daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
+c91ab5aa570d86f6fd07cc158ec6bc2c50080402972ee9179fe24100739fbb20 | https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-log…
453637054b08115122b7c7b2acf87e912e1613a78f37be3e9e6779cd0830d43e | https://jcenter.bintray.com/de/undercouch/gradle-download-task/3.4.3/gradle…
c8300fbf69d2240f5eae5a88a76f06f67e7c604d0328813de22b75174879a9e5 | https://jcenter.bintray.com/de/undercouch/gradle-download-task/3.4.3/gradle…
74fa208043740642f7e6eb09faba15965218ad2f50ce3020efb100136e4b591c | https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.jar
@@ -101,9 +101,9 @@ f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2 | https://jcent
cc12b1168e521491dd0e687cfebec11a4af874b22af70e10cf2a05b47ca00c8f | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/6.0.3/proguard-…
5a5c7317d68ce80d1d40c9d8bd4e38814d42d1b16c265146e333634833a35a57 | https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/6.0.3/proguard-…
d87266bfd2312c3b036c4ac709310afa35c448ceb18027c3b87a33d03c6de0a0 | https://jcenter.bintray.com/net/sf/proguard/proguard-parent/6.0.3/proguard-…
+401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar
8a4e4b32eedaa72976a757e12cf1dfe742725db0b7311bf176dd937ba4236384 | https://jcenter.bintray.com/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
-401877d5e70ad599e9b6cff18434ea0332f637b51f8ec68352646c836f9bb2a4 | https://jcenter.bintray.com/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5…
ff513db0361fd41237bef4784968bc15aae478d4ec0a9496f811072ccaf3841d | https://jcenter.bintray.com/org/apache/apache/13/apache-13.pom
36c2f2f979ac67b450c0cb480e4e9baf6b40f3a681f22ba9692287d1139ad494 | https://jcenter.bintray.com/org/apache/apache/15/apache-15.pom
9f85ff2fd7d6cb3097aa47fb419ee7f0ebe869109f98aba9f4eca3f49e74a40e | https://jcenter.bintray.com/org/apache/apache/16/apache-16.pom
@@ -187,18 +187,20 @@ f58cffaec052685c4b7985532c1bf52d9006b2b4ed9679d9c78df8867fc50d57 | https://jcent
83918960ee396c0e38132552c48cac0aa3f542ac09ffa974d6f106b5ddf07647 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-compiler-runner/1.3…
d59d7f617feef6beb880bc9aa6d4c838ebc6f15317e5a98c427815cce8ecfe84 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.3.4…
e05bebcf2d42073d145e12df19de3163320fbf876986bb53df82b7478679455b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-daemon-client/1.3.4…
-380b16b2ab673bb9d9341142b51484f97e6614952cc530a48ce34583952ab84f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.4…
-98954d5331ff118a5f2492db6bc73fe947f4a3225c8abd8e106647b5fa17b3e8 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.4…
57b0e2951fde88baf8ffb92d72c5682c101a7c2c12c6c501a5b47f88f5b08696 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
dc338b55085bfc4cc2a98dc83c8365dbee976b9d9134ca845d42d0a3d4767937 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1…
8a703d706c44996993f9df34b916162b99b81417f7f9d351ca8d205f0325936d | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-model…
8763bd09455cecf1c9fabea3653bd2ac17bf31a1291a153fefca8e4f28de9043 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin-model…
+380b16b2ab673bb9d9341142b51484f97e6614952cc530a48ce34583952ab84f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.4…
+98954d5331ff118a5f2492db6bc73fe947f4a3225c8abd8e106647b5fa17b3e8 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.4…
4f48a872bad6e4d9c053f4ad610d11e4012ad7e58dc19a03dd5eb811f36069dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
f35215da1bed69e3d60735d76221d7012cd1a5bc0a30f6f7421719ada463b4dd | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotli…
a0172daf57e511e8e0df9251b508db8aa6b885cdf0c5849addc9b840db4814f0 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.31/kotl…
521ea7a6923dba027d808da42cb789da43b332988652f209f45ae85b582abaac | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.31/kotl…
01d469878c6853a607baaadf869c7474b971abe6dd2cb74f244bea0ffb453c76 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.41/kotl…
4d0e8480bf227cd23d21d245dc9fe47e92056af5a6f367bc886bf43278c44146 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-reflect/1.3.41/kotl…
+ac184612f258b460b5af4ca47f6bee0bab20a46fa818b86697ba41ef29626a31 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
+9bd39a256bdd9f7a8689f095c7eff85f8504ae03789e12cf20e6bbc689baefd1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
fe9033bf39eb38d3daed1649f54b3321478901b9891c24482a4a06603d5b137f | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-common/1.…
21253e34109f982b0b1586367e47b5c91bc630f5071e77f5bf3228bb4d4d86de | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-common/1.…
c2da2d19f569e8369c2f55affa0dee5f50771bc3685697ee948ee29a16d0c3c1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
@@ -207,18 +209,6 @@ c2da2d19f569e8369c2f55affa0dee5f50771bc3685697ee948ee29a16d0c3c1 | https://jcent
bd29d1efdfcd51ae20d252ca66f2ea84cf3671ce323cd25518ff44a52c9a5dc1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-compiler-…
50ad890f1dfa33e9cdeba550fab2e98e88e6f03624461cd11c7f5eb4a41de7a1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.4…
fda06e8c1b1c47e720a80176f2269e43fc95b849045bf4006b7003c964f68a49 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.4…
-ac184612f258b460b5af4ca47f6bee0bab20a46fa818b86697ba41ef29626a31 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
-9bd39a256bdd9f7a8689f095c7eff85f8504ae03789e12cf20e6bbc689baefd1 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-script-runtime/1.3.…
-358700f7a5b932bce30ebb0010641a9cade4b8499a60845717b2e22a39697f92 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/kotli…
-ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
-4c895c270b87f5fec2a2796e1d89c15407ee821de961527c28588bb46afbc68b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
-713db77c9a0c47a670f95c23b0051b9bd942b3a0ea1f6cc9bb5d9eaba1fa75ae | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
-f38c84326543e66ed4895b20fb3ea0fca527fd5a040e1f49d0946ecf3d2b3b23 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotli…
-938182555f87aabdaabfa7ea22f29249a801d0882587fdb36efd6b69ab6d9483 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotli…
-6ea3d0921b26919b286f05cbdb906266666a36f9a7c096197114f7495708ffbc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.41/kotli…
-785b5b66f1146317d5ed5b18c8e0c10f83cd5c909434c799a4da9823f028cd63 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.41/kotli…
-e6f05746ee0366d0b52825a090fac474dcf44082c9083bbb205bd16976488d6c | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotli…
-704fd78960ae046428f69bcd5b951c122e4c180c9400238a866e12cb18494a61 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotli…
63999687ff2fce8a592dd180ffbbf8f1d21c26b4044c55cdc74ff3cf3b3cf328 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
a8c3ed5892032b9e9395524a4da2953975c99628b932df3336b25d546e7c6693 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.7…
d6e9c54c1e6c4df21be9395de558665544c6bdc8f8076ea7518f089f82cd34fc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.3…
@@ -235,6 +225,16 @@ ac3c8abf47790b64b4f7e2509a53f0c145e061ac1612a597520535d199946ea9 | https://jcent
845c33f0e9ed5f66bca2d7ed39873f3e75920c5e33de984c25c48760f79594b3 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/…
ad6acd219b468a532ac3b3c5aacbfd5db02d0ffcf967e2113e4677e2429490f6 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.31/…
5cb7c7867f97ce48ef211c79f975b77de5724ac13e0ae27c1da2613929897427 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.31/…
+358700f7a5b932bce30ebb0010641a9cade4b8499a60845717b2e22a39697f92 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.60/kotli…
+ca9778da4afbcd421b09384b257c9de47f610aec5c9165e0209228d25a337a20 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin…
+4c895c270b87f5fec2a2796e1d89c15407ee821de961527c28588bb46afbc68b | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
+713db77c9a0c47a670f95c23b0051b9bd942b3a0ea1f6cc9bb5d9eaba1fa75ae | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotli…
+f38c84326543e66ed4895b20fb3ea0fca527fd5a040e1f49d0946ecf3d2b3b23 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotli…
+938182555f87aabdaabfa7ea22f29249a801d0882587fdb36efd6b69ab6d9483 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotli…
+6ea3d0921b26919b286f05cbdb906266666a36f9a7c096197114f7495708ffbc | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.41/kotli…
+785b5b66f1146317d5ed5b18c8e0c10f83cd5c909434c799a4da9823f028cd63 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.41/kotli…
+e6f05746ee0366d0b52825a090fac474dcf44082c9083bbb205bd16976488d6c | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotli…
+704fd78960ae046428f69bcd5b951c122e4c180c9400238a866e12cb18494a61 | https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotli…
8f52859322d3c8e38c770ae31a4df9b2896df487fce608f9aff3b640a4026c3c | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-androi…
7f966ea79ea96db23ef9f52e9670166ea9c6f1080219fc27f27362f87fc2db80 | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-androi…
ac423f8a0aa4b4e74529696ff82c0171f81a8c8ab182a1965dff25e69c1f7844 | https://jcenter.bintray.com/org/jetbrains/kotlinx/kotlinx-coroutines-core/1…
@@ -245,8 +245,6 @@ ac423f8a0aa4b4e74529696ff82c0171f81a8c8ab182a1965dff25e69c1f7844 | https://jcent
5c415a9d8585200de4be1947e15291cc79f599b06249375f5c9ea22d4b2d090f | https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-…
a31ff7d77163c0deb09e7fee59ad35ae44c2cee2cc8552a116ccd1583d813fb4 | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.jar
27cb450b6c367a00bd8362519907f84defac7b12086c64d4d6e97e33ab873ead | https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
-dd8971c74a4e697899a8e95caae4ea8760ea6c486dc6b97b1795e75760420461 | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.jar
-c2bc497e197112e699085426bbb45b1ab0be8002da68267a3b1f450a0312c32e | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.pom
2f1a6387219c3a6cc4856481f221b03bd9f2408a326d416af09af5d6f608c1f4 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.j…
d3aaf42e40e3e24aabda53b5de4de5e17cb78e06549bf37312dca6c77e251054 | https://jcenter.bintray.com/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.p…
f1bce5c648a96a017bdcd01fe5d59af9845297fd7b79b81c015a6fbbd9719abf | https://jcenter.bintray.com/org/ow2/asm/asm-commons/6.0/asm-commons-6.0.jar
@@ -256,37 +254,94 @@ f1bce5c648a96a017bdcd01fe5d59af9845297fd7b79b81c015a6fbbd9719abf | https://jcent
36887e0d7fdb185a92378a38ea45e596a97f10f385c5d050eb6252454ee701b4 | https://jcenter.bintray.com/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.pom
356afebdb0f870175262e5188f8709a3b17aa2a5a6a4b0340b04d4b449bca5f6 | https://jcenter.bintray.com/org/ow2/asm/asm-util/6.0/asm-util-6.0.jar
3cdfc61f988d167b97503419da82a5808b20f4205aeb46c394e6e7ffd3211f12 | https://jcenter.bintray.com/org/ow2/asm/asm-util/6.0/asm-util-6.0.pom
+dd8971c74a4e697899a8e95caae4ea8760ea6c486dc6b97b1795e75760420461 | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.jar
+c2bc497e197112e699085426bbb45b1ab0be8002da68267a3b1f450a0312c32e | https://jcenter.bintray.com/org/ow2/asm/asm/6.0/asm-6.0.pom
51215c67d2c068d8b7d2f6f80f51372a098075deccc448d4bdd7b987ba8328fb | https://jcenter.bintray.com/org/ow2/ow2/1.3/ow2-1.3.pom
b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
fb40265f982548212ff82e362e59732b2187ec6f0d80182885c14ef1f982827a | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
d4e441fda1b3ad70b266793cc4b6d02bec8720875b796fadc063fc713f948549 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24-android.…
174d423722256823edbe2af8d7e3385c4645cf72382a22da0485b3b674394f37 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.24/snakeyaml-1.24.pom
-3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.jar
-eb91acbeeaccc7fa382f88b02a22d5eddf314665bbb8fed090c067b703f50a5c | https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.pom
-c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar
-30453099142d085d801460a20d7e02a3f4d3004238879eaeb62083f59f1193a9 | https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.pom
-8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.j…
-1742e74f222d06ea26f811191adf18e4cb74213b785e3f5d0d930224e83b4e82 | https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.p…
-7078b5c8ccb94203df9cc2a463c69cf0021596e6cf966d78fbfd697aaafe0630 | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
-24ae9a6ad8234173ba20eef298fbd56ed3dff618698cedbbe6b0515d24862d0a | https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-j…
-429426b2feec2245ffc5e75b3b5309bedb36159cf06dc71843ae43526ac289b6 | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
-e7289037e703c2608f46a727deab8937a312a922537f6d9bdfba5a56cd8da50a | https://maven.google.com/android/arch/lifecycle/extensions/1.1.1/extensions…
-50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750 | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
-e8db306738739a616a74c38533a91cc066ee194fd45f492f188164e6cb1b856e | https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1…
-d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
-67a11cd85fd5c96ecdb84538e1eb58d7be59200e7d36d99943f31ecb514fe2a1 | https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedat…
-c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
-c7a7d3c2a9d6c21d8b6d470933b9472c733a4799b3ff702081b608adf1c7e592 | https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1…
-7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
-deae2518ee1d17db319fbaf4055e32d591d58569eb9ccad53d8d323cf1840555 | https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1…
+a179c12db43d9c0300c9db63f4811db496504be5401b951d422b78490ad1e5b4 | https://maven.google.com/androidx/annotation/annotation/1.0.0/annotation-1.…
d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692 | https://maven.google.com/androidx/annotation/annotation/1.1.0/annotation-1.…
2e9372ba7780ef44952adbf86b66e1f08682c1e5277c926185f6564a13799efe | https://maven.google.com/androidx/annotation/annotation/1.1.0/annotation-1.…
+994254e12036cbd3326b2819a4d8bc3bef139f45022cfb0b1086dc58d36d56ce | https://maven.google.com/androidx/appcompat/appcompat/1.0.0/appcompat-1.0.0…
+202c3fcdb80832b22e2d27df14d9e71b2f716f08f5728e828349e33454cc4d2b | https://maven.google.com/androidx/appcompat/appcompat/1.0.0/appcompat-1.0.0…
+4b80b337779b526e64b0ee0ca9e0df43b808344d145f8e9b1c42a134dac57ad8 | https://maven.google.com/androidx/arch/core/core-common/2.0.0/core-common-2…
+4b6f1d459ddd146b4e85ed6d46e86eb8c2639c5de47904e6db4d698721334220 | https://maven.google.com/androidx/arch/core/core-common/2.0.0/core-common-2…
+87e65fc767c712b437649c7cee2431ebb4bed6daef82e501d4125b3ed3f65f8e | https://maven.google.com/androidx/arch/core/core-runtime/2.0.0/core-runtime…
+e2007d41ddc69ee2a77fed7b5c1dc5a41e01122926ba59696aab7b18d2264411 | https://maven.google.com/androidx/arch/core/core-runtime/2.0.0/core-runtime…
+f7eab60c57addd94bb06275832fe7600611beaaae1a1ec597c231956faf96c8b | https://maven.google.com/androidx/asynclayoutinflater/asynclayoutinflater/1…
+48167eeedc8da79c4d29deaf0d0cd9b5d8fedcae01f1a6efb3f28f08e8982f71 | https://maven.google.com/androidx/asynclayoutinflater/asynclayoutinflater/1…
+1193c04c22a3d6b5946dae9f4e8c59d6adde6a71b6bd5d87fb99d82dda1afec7 | https://maven.google.com/androidx/cardview/cardview/1.0.0/cardview-1.0.0.aar
+e64ef4e08b58358fe27b599e6fe80a1b153db014c644beee630ab271061c3e6c | https://maven.google.com/androidx/cardview/cardview/1.0.0/cardview-1.0.0.pom
+9c8d117b5c2bc120a1cdfeb857e05b495b16c36013570372a708f7827e3ac9f9 | https://maven.google.com/androidx/collection/collection/1.0.0/collection-1.…
+a7913a5275ad68e555d2612ebe8c14c367b153e14ca48a1872a64899020e54ef | https://maven.google.com/androidx/collection/collection/1.0.0/collection-1.…
+965c177e64fbd81bd1d27b402b66ef9d7bc7b5cb5f718044bf7a453abc542045 | https://maven.google.com/androidx/constraintlayout/constraintlayout-solver/…
+dc3fff25c5161fbdeb6cb6bffcc49b52884f1404c2db8aa0a476845ab16ec0e5 | https://maven.google.com/androidx/constraintlayout/constraintlayout-solver/…
+5ff864def9d41cd04e08348d69591143bae3ceff4284cf8608bceb98c36ac830 | https://maven.google.com/androidx/constraintlayout/constraintlayout/1.1.3/c…
+a47057d0a9b23342c3779d3d56b60944997e98f0c5d8886fda29e4f1074d9ea6 | https://maven.google.com/androidx/constraintlayout/constraintlayout/1.1.3/c…
+e508c695489493374d942bf7b4ee02abf7571d25aac4c622e57d6cd5cd29eb73 | https://maven.google.com/androidx/coordinatorlayout/coordinatorlayout/1.0.0…
+3e44e4de2fee6debc33d23626ee906e54e1bb3c1749b19e02bb667b614ab9392 | https://maven.google.com/androidx/coordinatorlayout/coordinatorlayout/1.0.0…
+d7672358fc0d46de678968bcddfd3bdfe1618574299a753477b16116cfec74f5 | https://maven.google.com/androidx/core/core/1.0.0/core-1.0.0.aar
+384d529ad668ada4808de29b29a6348f0007c2841ad79cae9a5a089bd68810f5 | https://maven.google.com/androidx/core/core/1.0.0/core-1.0.0.pom
+a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564 | https://maven.google.com/androidx/cursoradapter/cursoradapter/1.0.0/cursora…
+62d95c89850af21030b19f14d5f7ecd6d8bcc9a3014c59002ec99624caac8100 | https://maven.google.com/androidx/cursoradapter/cursoradapter/1.0.0/cursora…
+20e5b8f6526a34595a604f56718da81167c0b40a7a94a57daa355663f2594df2 | https://maven.google.com/androidx/customview/customview/1.0.0/customview-1.…
+ce9e47b87184f5bd5e139e9becd5b26476d42d78c31bf2fdedc37acb41b9ad49 | https://maven.google.com/androidx/customview/customview/1.0.0/customview-1.…
52886c0ef6cfa492d07b40c3952201d6d2f0cfc680144fbefc69d2d5cb786c25 | https://maven.google.com/androidx/databinding/databinding-common/3.4.2/data…
fb5c804e2d81186e9e63e45b7e97eec54aa6f5d502b763abfbb0c57b62b86b4c | https://maven.google.com/androidx/databinding/databinding-common/3.4.2/data…
770b6a82da0684f93d037ed5d241248cb25862ed14ecd7d9ec8c756153266051 | https://maven.google.com/androidx/databinding/databinding-compiler-common/3…
6082c0a366fac7506c65d276ecbb25b3a053428a4c1f534cd2568c1f12f23e52 | https://maven.google.com/androidx/databinding/databinding-compiler-common/3…
+865a061ef2fad16522f8433536b8d47208c46ff7c7745197dfa1eeb481869487 | https://maven.google.com/androidx/documentfile/documentfile/1.0.0/documentf…
+013288a9317a552706ce625fb24493e8223288529223ec578cf855a5ae9c16e5 | https://maven.google.com/androidx/documentfile/documentfile/1.0.0/documentf…
+9402442cdc5a43cf62fb14f8cf98c63342d4d9d9b805c8033c6cf7e802749ac1 | https://maven.google.com/androidx/drawerlayout/drawerlayout/1.0.0/drawerlay…
+da6733425a83f5ce850878fa7201082345fed7c668dd58550fdd19c0396c6fa4 | https://maven.google.com/androidx/drawerlayout/drawerlayout/1.0.0/drawerlay…
+65dd32d71fe65a32e77989a6cfb1ad09307038927f82a740c7611162d0b518f8 | https://maven.google.com/androidx/fragment/fragment/1.0.0/fragment-1.0.0.aar
+e329d673361e94d2e8f4d4d14e1f0586368bd43fb19efd5766ce7498bcccd162 | https://maven.google.com/androidx/fragment/fragment/1.0.0/fragment-1.0.0.pom
+33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a | https://maven.google.com/androidx/interpolator/interpolator/1.0.0/interpola…
+0ddc07cc39699f48ecd9ec894b5830c0f09e22e82959294edf37217224c88b7b | https://maven.google.com/androidx/interpolator/interpolator/1.0.0/interpola…
+0d1260c6e7e6a337f875df71b516931e703f716e90889817cd3a20fa5ac3d947 | https://maven.google.com/androidx/legacy/legacy-support-core-ui/1.0.0/legac…
+2baaf7f17551765524bd1e4d2f954a2a0178a112039cf549ba8b7d4b41e66931 | https://maven.google.com/androidx/legacy/legacy-support-core-ui/1.0.0/legac…
+a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7 | https://maven.google.com/androidx/legacy/legacy-support-core-utils/1.0.0/le…
+8fd093008b3ee7c06e52c78da2af980a7b47b69b967fa91dad7af466f7a00a38 | https://maven.google.com/androidx/legacy/legacy-support-core-utils/1.0.0/le…
+78fec1485f0f388a4749022dd51416857127cd2544ae1c3fd0b16589055480b0 | https://maven.google.com/androidx/legacy/legacy-support-v4/1.0.0/legacy-sup…
+ed88fb124cfb70f2bb928ede1357874374aa45881bcb6d9744c1dc6680fa7c58 | https://maven.google.com/androidx/legacy/legacy-support-v4/1.0.0/legacy-sup…
+9edc2d4f589656d470ef03b9c6ece62d335971294b033ec7d9ceb6e361e9aafa | https://maven.google.com/androidx/lifecycle/lifecycle-common-java8/2.0.0/li…
+3b0a665afb8ffe1081d1c4a079f185de0de137ea84bca02400e091c8e1544b87 | https://maven.google.com/androidx/lifecycle/lifecycle-common-java8/2.0.0/li…
7bad7a188804adea6fa1f35d5ef99b705f20bd93ecadde484760ff86b535fefc | https://maven.google.com/androidx/lifecycle/lifecycle-common/2.0.0/lifecycl…
04d525073469214d0c99e81aaa875dd548ba32b82945abd8326bc50229df700d | https://maven.google.com/androidx/lifecycle/lifecycle-common/2.0.0/lifecycl…
+8d4072201b6231d67e4192d608d46b1f5c920845106c9831632c2e3ffe706117 | https://maven.google.com/androidx/lifecycle/lifecycle-extensions/2.0.0/life…
+e18c4bd463eab9432e5a08484d63307aff5205896766802f0978acdb9a37e9c1 | https://maven.google.com/androidx/lifecycle/lifecycle-extensions/2.0.0/life…
+fde334ec7e22744c0f5bfe7caf1a84c9d717327044400577bdf9bd921ec4f7bc | https://maven.google.com/androidx/lifecycle/lifecycle-livedata-core/2.0.0/l…
+650fda1a232f5669742140571570ccad2f47a71225ab0f02179bc8d144b982c8 | https://maven.google.com/androidx/lifecycle/lifecycle-livedata-core/2.0.0/l…
+c82609ced8c498f0a701a30fb6771bb7480860daee84d82e0a81ee86edf7ba39 | https://maven.google.com/androidx/lifecycle/lifecycle-livedata/2.0.0/lifecy…
+a84842ffc0f14e518db75c05cc112680a8a4a164fa78395be32d88304a439423 | https://maven.google.com/androidx/lifecycle/lifecycle-livedata/2.0.0/lifecy…
+d8ff6fd844559743050c9ae010a6df230f2a3dbdf3e14498316f30bd8df836b5 | https://maven.google.com/androidx/lifecycle/lifecycle-process/2.0.0/lifecyc…
+efd48ae233a32d6f93d155bd1b6dc7ea5c6bc34b145d7730636f32f4e9ddf552 | https://maven.google.com/androidx/lifecycle/lifecycle-process/2.0.0/lifecyc…
+e4afc9e636183f6f3e0edf1cf46121a492ffd2c673075bb07f55c7a99dd43cfb | https://maven.google.com/androidx/lifecycle/lifecycle-runtime/2.0.0/lifecyc…
+a92a46fa7aec8ac326a5d578734a2d5b63206976996b9e06cae171b35b0ab6de | https://maven.google.com/androidx/lifecycle/lifecycle-runtime/2.0.0/lifecyc…
+cb2b15bb0cf14134e953ed8ead96f94265018643f519367d51fd837f7311e9f8 | https://maven.google.com/androidx/lifecycle/lifecycle-service/2.0.0/lifecyc…
+db21f5e6f286231197131ef184ec7f6ad212e27c1c1bad231bc2625030708029 | https://maven.google.com/androidx/lifecycle/lifecycle-service/2.0.0/lifecyc…
+d6460aea1b6bad80ab14cf88297e9e43bfde8d87c3e5c28f2c508233ffbcc062 | https://maven.google.com/androidx/lifecycle/lifecycle-viewmodel/2.0.0/lifec…
+60b758fd1c664089f82d1c018ed4ff7955c14a2b1620af7aa106591f733e0827 | https://maven.google.com/androidx/lifecycle/lifecycle-viewmodel/2.0.0/lifec…
+11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025 | https://maven.google.com/androidx/loader/loader/1.0.0/loader-1.0.0.aar
+c978d550808b47434aa49a63164110a50b55b0bcc6160a93a2e37d5110df8c5e | https://maven.google.com/androidx/loader/loader/1.0.0/loader-1.0.0.pom
+e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8 | https://maven.google.com/androidx/localbroadcastmanager/localbroadcastmanag…
+a000041f5a1f79283c5175e1bb60cf3683780f401c6a9d34fbe9751253fa6ff9 | https://maven.google.com/androidx/localbroadcastmanager/localbroadcastmanag…
+b23b527b2bac870c4a7451e6982d7132e413e88d7f27dbeb1fc7640a720cd9ee | https://maven.google.com/androidx/media/media/1.0.0/media-1.0.0.aar
+9cdfe5f7849069ad84dc4fb0407b3677fb8c22d3d66fd2b8fdb8dec8c5dc7411 | https://maven.google.com/androidx/media/media/1.0.0/media-1.0.0.pom
+6054ee0184ba0ffd66dc825e060e8c9bf2f6c2ea54336cf3bef15c575037a743 | https://maven.google.com/androidx/palette/palette/1.0.0/palette-1.0.0.aar
+85c5599135a789cfd5f99656f9e8240c9a727f72b2caaab60943aa32bb842771 | https://maven.google.com/androidx/palette/palette/1.0.0/palette-1.0.0.pom
+ea9fde25606eb456210ffe9f7e51048abd776b55a34c0cc6608282b5699122d1 | https://maven.google.com/androidx/preference/preference/1.0.0/preference-1.…
+c51e3b020fdd558375201f1f1c8b0b2d64b5ee5ff6e7bc9fb92edce3926af385 | https://maven.google.com/androidx/preference/preference/1.0.0/preference-1.…
+1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd | https://maven.google.com/androidx/print/print/1.0.0/print-1.0.0.aar
+62482c0594841bee24bb996abb6cb7b320a6a3b77dca9f0a0ba4fe3be5530aa7 | https://maven.google.com/androidx/print/print/1.0.0/print-1.0.0.pom
+06956fb1ac014027ca9d2b40469a4b42aa61b4957bb11848e1ff352701ab4548 | https://maven.google.com/androidx/recyclerview/recyclerview/1.0.0/recyclerv…
+8831c06417fab6a9690c25f6e4b347b2e8c03cf6d47337be9c57e75b7fb23e6a | https://maven.google.com/androidx/recyclerview/recyclerview/1.0.0/recyclerv…
+76bffb7cefbf780794d8817002dad1562f3e27c0a9f746d62401c8edb30aeede | https://maven.google.com/androidx/slidingpanelayout/slidingpanelayout/1.0.0…
+40e90f96838c2a8156ab51b181400767049f387cec8c695e412d3d9205b0745b | https://maven.google.com/androidx/slidingpanelayout/slidingpanelayout/1.0.0…
+9761b3a809c9b093fd06a3c4bbc645756dec0e95b5c9da419bc9f2a3f3026e8d | https://maven.google.com/androidx/swiperefreshlayout/swiperefreshlayout/1.0…
+8fe4b5db332af33cde899ba571ee866ad977be38114d3ab600edaca454ea8299 | https://maven.google.com/androidx/swiperefreshlayout/swiperefreshlayout/1.0…
fda5a08856ec82fc05e4dc37bd4eea93c9d02c231fd828d6b8ce2c6a42f79271 | https://maven.google.com/androidx/test/core/1.1.0/core-1.1.0.aar
8da5bb4dfb16eef6f181394875f19eda1b967006d55e116d89edfffdabbdfbb6 | https://maven.google.com/androidx/test/core/1.1.0/core-1.1.0.pom
af9c385fb753e4ee9f7def800dbbc4a25841bec95727e3ef30e9d04d76b73fe9 | https://maven.google.com/androidx/test/espresso/espresso-core/3.1.0/espress…
@@ -302,75 +357,18 @@ ecbc74d5eb4a004a676cc26b550ae94bd685a9088b84f6eea42bf320558af237 | https://maven
d263d896ba276dcaf2e182a66ce65fb23a2636a008c61d0b28178cffb330c323 | https://maven.google.com/androidx/test/rules/1.1.0/rules-1.1.0.pom
80ac63609299116f4c1ffa5e206eb75eeac7006013880b47e5b09691a89b4045 | https://maven.google.com/androidx/test/runner/1.1.0/runner-1.1.0.aar
7d4e4bd35a1e8a18b3c87765866703c4497fef2254f210c5dfea3373d0d4d59c | https://maven.google.com/androidx/test/runner/1.1.0/runner-1.1.0.pom
+a00a0f763f401abcecda9b0eafcb738929c5801b111a9a414b81a193d0f4008d | https://maven.google.com/androidx/transition/transition/1.0.0/transition-1.…
+e74b8a9e3ac94e2f303ba49fff80b1ea81d245a2b1f4e13e1c35bf3da111688b | https://maven.google.com/androidx/transition/transition/1.0.0/transition-1.…
+26c3a0cf0a9a9a7d235a0b00f2f37e431d52d9952751e3eb7c90b4b52c236cf1 | https://maven.google.com/androidx/vectordrawable/vectordrawable-animated/1.…
+d646aeeadeb5163a5f966cc08f1dfea4b7a2c1b918ef9a39ab790d32f337d47e | https://maven.google.com/androidx/vectordrawable/vectordrawable-animated/1.…
+507591926583875e3a0e6c46272235f323b4574759b5c02f0ab7a51d2ae7320d | https://maven.google.com/androidx/vectordrawable/vectordrawable/1.0.0/vecto…
+d7b66fea2854dc8fe162bcf24b9fe9d5e0b8b7a41515ce07391eb2984137c8aa | https://maven.google.com/androidx/vectordrawable/vectordrawable/1.0.0/vecto…
+f6438a93ed8016ccddca0e140a70be0b0110e0424edaa1472f84f98fed2e1ce3 | https://maven.google.com/androidx/versionedparcelable/versionedparcelable/1…
+47ee7c5543239a651f8fb81310cadeeaab8e38a2d844d7bb92dd086e4ffbb320 | https://maven.google.com/androidx/versionedparcelable/versionedparcelable/1…
+147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682 | https://maven.google.com/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0…
+1f72f836339d03c6eb013f65075e76ca87075a577578eb4f95f74a3a5d253128 | https://maven.google.com/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0…
5e4f3b90995be63f3c8eeecce120c588a98c6aad3b54f60ad4c80b5418c4b012 | https://maven.google.com/com/android/databinding/baseLibrary/3.4.2/baseLibr…
63da0e18ab10800d448b0d8ab2171bf9a2e273d06300a7c79fd39d7fa6effee1 | https://maven.google.com/com/android/databinding/baseLibrary/3.4.2/baseLibr…
-271ecbc906cda8dcd9e655ba0473129c3408a4189c806f616c378e6fd18fb3b7 | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
-d4783f9cce5b193cb59486fa9fd9f06e828fe4d2d9a5744fab372b9a4a95ecca | https://maven.google.com/com/android/support/animated-vector-drawable/28.0.…
-a3a8e5230359746ed91801579b5fbe4668e3b1c4e6a14c7d67c8f58cb0311752 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
-d9f2abe237eab1b651694c0d292dea9ec5b341ae70bfaafffbbb5d46b78c5e17 | https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-…
-115bde87721f7334579b0c735f60dd7c98af1bb7f34010c5b0553b95dc351aa2 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
-790f1d0ca7c1a65d5afb40baf5b5423fa3163f6f90a47f3193ae0c8bb11c6e78 | https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asy…
-bc9e6b0e06ce1205f1db34f0e6193019613d19cfeb54cdccea722340d1c60f26 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
-887ea96fc365743d8735b0446df3fbe77eb5a2e203acab1423346aa3319d8395 | https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7…
-93c258c8a09f531a267653829742c0f8f6da0e348b11cb8655b0855628f2d4f0 | https://maven.google.com/com/android/support/collections/28.0.0/collections…
-f6c4146b8b2029e52971402d1c29ed59d2a98b4fab33ef8e6f44233ac0cf27ba | https://maven.google.com/com/android/support/collections/28.0.0/collections…
-27b4e5c0b80d3ff8b92f4c93b3b4d3ecf16c01589f4cdf70ca7cf64cb42d8122 | https://maven.google.com/com/android/support/constraint/constraint-layout/1…
-d48935ae1641774e03ce24b0b3f7aeee66931a1e5d9ad4d47b5f93d237ea07fb | https://maven.google.com/com/android/support/constraint/constraint-layout/1…
-2cafbe356f71c208013d021f32943904798cd6459e5107f9fe27000eb5bc2aef | https://maven.google.com/com/android/support/constraint/constraint-layout-s…
-47be4ebd35a100945bac20b2efba158fe032520229a73bc060ac57986d132dfa | https://maven.google.com/com/android/support/constraint/constraint-layout-s…
-9dfacd80423dc979048fbaed83c0ee543c46259feb2417377e79a656888d3892 | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
-cb83674d682f81daf7b2d43e965a18b83ef4f5bb02a69d14bb20175753361a4f | https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coord…
-87feffe742b8d62ca8a9833abe564838bf6a672e31c7ad1306ec4006adf90d21 | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
-5727103ce28357bce8f74655c0994508d55d060f9ec6dafba0103e7fe55f275b | https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursorada…
-98db03845f994e08248bf701c1ff0ccaa12e70f94251ec9272900f0f694e072b | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
-187c2729dfd51ef8db5963598d14da67bad5ceb4ea5252f382044249327010e5 | https://maven.google.com/com/android/support/customview/28.0.0/customview-2…
-7874ad1904eedc74aa41cffffb7f759d8990056f3bbbc9264911651c67c42f5f | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.aar
-ba16a815266a3b5ce69d57e4c40ba7eb22ee91b8016f2fa3a9d73bd6917e31b4 | https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.pom
-47cdcd3e9302b7b064923f05487a5c03babbd9bbda4726b71e97791fab5d4779 | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
-5ffda693e34d152463f8a9a6c00407fb11747a2271c278e082a287abad3f9cba | https://maven.google.com/com/android/support/documentfile/28.0.0/documentfi…
-8f6809afae4793550c37461c9810e954ae6a23dbb4d23e5333bf18148df1150a | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
-424f2d0b4a3ac46e0ad5349192ad0ecdc0bfcb10ed91767a08230cd16a3cfe36 | https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayo…
-7bc7ee86a0db39a4b51956f3e89842d2bd962118d57d779eb6ed6b34ba0677ea | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
-296b5f5eaa5cb38f67bca092aaf56bf6d23a13aa07cd81a377f861f52d609f9b | https://maven.google.com/com/android/support/interpolator/28.0.0/interpolat…
-920b85efd72dc33e915b0f88a883fe73b88483c6df8751a741e17611f2460341 | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.aar
-9a9bad607f4b946d1503fe9b751af156da361e642e86f4fb5355b89b9557e8df | https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.pom
-d287c823af5fdde72c099fcfc5f630efe9687af7a914343ae6fd92de32c8a806 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
-351a941335421113dff16b1ff9d4618bbcb093fd1508fc8639f18c5533313091 | https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/l…
-317202dddb953d152d0677dbd8bb3b9d8ef8dcd0bdee0da4f40c98826e4960e6 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
-b609f2c1a2fb3edc2f9ed02214660c90e16103d992307ae531e2a1a5bae82138 | https://maven.google.com/com/android/support/palette-v7/28.0.0/palette-v7-2…
-75eabe936d1fc3b178450a554c4d433466036f2be6d6dccdf971eac9590fdbf5 | https://maven.google.com/com/android/support/preference-v7/28.0.0/preferenc…
-3c09d39caf1c2b61877d9da5df6fc158bd28a4cc924db58e1936c8fef16ad835 | https://maven.google.com/com/android/support/preference-v7/28.0.0/preferenc…
-4be8a812d73e4a80e35b91ceae127def3f0bb9726bf3bc439aa0cc81503f5728 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.aar
-e15dd914e64f5cfcbd91aeb1b921fd6ead39c21926e171a4955dd12c849c6e78 | https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.pom
-eb296414c1f6d4c7b522f69fe50588ea85297855db0e7806c24eb4f75409587d | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
-3b280edfcf646b1f51256b2b6b581d8b0194514fd248666c3dfdc0a04edb8686 | https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recycle…
-d1d234f66a1b36a9aee9b94fa6c66f97128c0828078c8e889e9037ec898cd600 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
-be47ac0d8fd8bdd783071596c5ea271362484752d282fb8c3421d1853ad02619 | https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidi…
-3eae72fcf02a175efa1377886e6500e6147f92104ff43ee92b9b69d59357b90d | https://maven.google.com/com/android/support/support-annotations/26.1.0/sup…
-5d5b9414f02d3fa0ee7526b8d5ddae0da67c8ecc8c4d63ffa6cf91488a93b927 | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
-a086481e014492fd3a4d5f4459875b8a70a201258f0b225836212ee29df0091a | https://maven.google.com/com/android/support/support-annotations/28.0.0/sup…
-e17e3b01dbea3f9ea1c86943292f903ca93d2231c6242e456e0b6a9c5817118a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
-6b79a06c2282fc0f961cfd826a26ad41ff5c457b0c11d9a6b6a63e51f53d961a | https://maven.google.com/com/android/support/support-compat/28.0.0/support-…
-bbc7f65fc95649464733af373361532ab5f9f3b749c3badaa2bbf27e574b6c6f | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
-708ad4a6a48ce625aee395fd0625ae5441fee8f0e25861406603f765e679b544 | https://maven.google.com/com/android/support/support-core-ui/28.0.0/support…
-c81e1e98ca3cb2edae002c69cf35b22aec364b8cb2f1042c97e206eb5790ac41 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
-86a744b8739e8b354d0ecaec35dd943dea9a66f0296a3a9c1eb384fc93a4eaf7 | https://maven.google.com/com/android/support/support-core-utils/28.0.0/supp…
-3772fc738ada86824ba1a4b3f197c3dbd67b7ddcfe2c9db1de95ef2e3487a915 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
-d24bdade5b77b26b82d39beda9fa0f42bcdf61cb5661a3c66ddfde3f77869b07 | https://maven.google.com/com/android/support/support-fragment/28.0.0/suppor…
-266eff9605f515013eee1ebdbd8818a9270696dc807f34bbcc5fc11fb61a22c7 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
-e88505a92565f4c0fabb1c9a40326a339a2d51ee843c8a097828a3a85c934f27 | https://maven.google.com/com/android/support/support-media-compat/28.0.0/su…
-8b9031381c678d628c9e47b566ae1d161e1c9710f7855c759beeac7596cecf30 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
-428da44d913e410db4dfcf732faa0082283e4eb6563a98a0bfb92022460a4dd4 | https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-2…
-f658986d968172bccfed28578471c96050780fe5e133861e4d331069cc373f4d | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
-1e54416142b0f1274db09bbea1808f5cf9311c895bb0d84adaa18a7b5132aadc | https://maven.google.com/com/android/support/support-vector-drawable/28.0.0…
-a3b41f7f6730866b49865e86e49f988d4858699765f534300fb2ff5f9325e712 | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
-c2e08d32b75d98a844f20be02510c830f7e5b53f64907af2270a898d59dc872f | https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swip…
-45d09fc51284c17bbab300f5122512ac7d7348a6d23bda2051648bbe76cc9aa5 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
-771e8fe3b4dc0be4289db8e542bf134d7a032d8addedea070a3e951dc016d078 | https://maven.google.com/com/android/support/transition/28.0.0/transition-2…
-60eb1cb08f71b65c3f6123135e03ebeb5930b5e126e1e5b2ac91b386908c9d02 | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
-e7d6f726e702b418998fab6284df2f509f5acdf9203ced37c8d1274f9e38447b | https://maven.google.com/com/android/support/versionedparcelable/28.0.0/ver…
-013c4c53058758ec104dbae970be58159f75dfe342ba8b937d15ff5282e35ffc | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
-080bba6573f6a4a9b2af443bf4ecb2a7ac4302a027274cc9bf9fdd51f409430e | https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.…
22189a009a57c1741f74deeae5442a101c1c5c8bd6c6404e8e87a7d7f58044e4 | https://maven.google.com/com/android/tools/analytics-library/crash/26.4.2/c…
aea2ab26c83212e1b81b5d2e91056ea41b1dbbc2f0801bbb3921a405da6bf685 | https://maven.google.com/com/android/tools/analytics-library/crash/26.4.2/c…
2f371f5b1f551e85ab08be4d6a2873471b3d44afd1ebf6aa3298f3b796bf691f | https://maven.google.com/com/android/tools/analytics-library/protos/26.2.1/…
@@ -389,16 +387,14 @@ ccfc624a522641d858e7a6477abb698889bd81de584d04b705a737bd59d7c784 | https://maven
64d79783e2dffc1fec58146051bdd93a2fca23113a5b8443db6eb1d77dedfdec | https://maven.google.com/com/android/tools/annotations/26.2.1/annotations-2…
1877849936f48cd65857bf448743f9a0bf93ed47fe57527d9ad8af875024888d | https://maven.google.com/com/android/tools/annotations/26.4.2/annotations-2…
c17bdf198c7609ce6fc63169800b26e366ff3131b8360ca9979c8234eba90c44 | https://maven.google.com/com/android/tools/annotations/26.4.2/annotations-2…
-8e0ae5bfe813ed34a8ddbd8a71cd356d84f0fe70a74a7582c029d4444d9a2cab | https://maven.google.com/com/android/tools/build/aapt2/3.4.2-5326820/aapt2-…
-a7d42baee36d11ebef1d15431ebffed2da98cc088a3aecfdf782463194977368 | https://maven.google.com/com/android/tools/build/aapt2/3.4.2-5326820/aapt2-…
a503219b89b0aaf7b7c6c9b3b17d69e655a6c619072b684a1ea4fbf1d7dc49da | https://maven.google.com/com/android/tools/build/aapt2-proto/0.3.1/aapt2-pr…
31e5f0e56b59a7c1433ab4a0396fd6178ef28def6cf6eb58e235d7cf40efd01d | https://maven.google.com/com/android/tools/build/aapt2-proto/0.3.1/aapt2-pr…
+8e0ae5bfe813ed34a8ddbd8a71cd356d84f0fe70a74a7582c029d4444d9a2cab | https://maven.google.com/com/android/tools/build/aapt2/3.4.2-5326820/aapt2-…
+a7d42baee36d11ebef1d15431ebffed2da98cc088a3aecfdf782463194977368 | https://maven.google.com/com/android/tools/build/aapt2/3.4.2-5326820/aapt2-…
7cb448a8317dc3b82629898c211895862453eee62acb12ad23c32ccdc2c942e2 | https://maven.google.com/com/android/tools/build/apksig/3.4.2/apksig-3.4.2.…
bf7a23f999b0ad601ff9bf7b1e3987993587e51527e1b00991f4cc85370b2fc1 | https://maven.google.com/com/android/tools/build/apksig/3.4.2/apksig-3.4.2.…
e00dbbd0997beba194e18d2a62647e42b2e62192652796bcbe5ea9b06687ba5c | https://maven.google.com/com/android/tools/build/apkzlib/3.4.2/apkzlib-3.4.…
256d360aa2524cebf97cf245b93e175b7062719c68d015297cfef37cfe9930ab | https://maven.google.com/com/android/tools/build/apkzlib/3.4.2/apkzlib-3.4.…
-3d104b1e0083aac49f5ea8d5e0e0cd740dd333bef2683a3214e1cd1953ffd661 | https://maven.google.com/com/android/tools/build/builder/3.4.2/builder-3.4.…
-0e7df1472a90a67d611f17528dfc2b6bcbc9fa7f799573ba79ec4407305a2ad8 | https://maven.google.com/com/android/tools/build/builder/3.4.2/builder-3.4.…
a9f68e6abcec122f9cb5ad352d3f05a3eb03acbcdca95e4d25c16310c2c965ff | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
4d2a35833cb9afee4d37b68c16280f8afc64de0e7cecdac1022dbafa2473e31f | https://maven.google.com/com/android/tools/build/builder-model/3.2.1/builde…
ddb36ca7fe72024bd53fbdd2700f1a9a9af5b1502062d59952eb3da7584fe413 | https://maven.google.com/com/android/tools/build/builder-model/3.4.2/builde…
@@ -407,12 +403,14 @@ ddb36ca7fe72024bd53fbdd2700f1a9a9af5b1502062d59952eb3da7584fe413 | https://maven
16c4e26de8c9ce509a2e81eb4c571d5d6a6e792d9425dbc710dca93793a4e12d | https://maven.google.com/com/android/tools/build/builder-test-api/3.2.1/bui…
40c62a008da4fa933cb20135227409d2953ed88ed68195e0f631d326c5675c46 | https://maven.google.com/com/android/tools/build/builder-test-api/3.4.2/bui…
7d96325cc2fef2fa3898d121e936528f987caddbbab7cfddb524c6995b09ab1f | https://maven.google.com/com/android/tools/build/builder-test-api/3.4.2/bui…
+3d104b1e0083aac49f5ea8d5e0e0cd740dd333bef2683a3214e1cd1953ffd661 | https://maven.google.com/com/android/tools/build/builder/3.4.2/builder-3.4.…
+0e7df1472a90a67d611f17528dfc2b6bcbc9fa7f799573ba79ec4407305a2ad8 | https://maven.google.com/com/android/tools/build/builder/3.4.2/builder-3.4.…
420bb34c44c9e3341583fa90bb4ad331db0b2ed902a5e75b9a420f4edd9f7894 | https://maven.google.com/com/android/tools/build/bundletool/0.7.2/bundletoo…
e917f5fc3bef4e31107c1aaa0e47781e788be9d86682288f44cd4a3ad17b3459 | https://maven.google.com/com/android/tools/build/bundletool/0.7.2/bundletoo…
-536afc619d2678b80bd7d0b5674be249f05fad349a8717998b69d48f66062fb5 | https://maven.google.com/com/android/tools/build/gradle/3.4.2/gradle-3.4.2.…
-e1d38f808e126ada6b7f77cc1d66e7fce01d1e03941d14e38062d41b7ab37953 | https://maven.google.com/com/android/tools/build/gradle/3.4.2/gradle-3.4.2.…
e6cddde562483c96b699be25fc91a78e141397e51a382eedae9b2c0e22ea22f5 | https://maven.google.com/com/android/tools/build/gradle-api/3.4.2/gradle-ap…
cc23bd10f9843e57f6f2bb1f5731ac32e1d73696927f93c3ea2972d76de3b017 | https://maven.google.com/com/android/tools/build/gradle-api/3.4.2/gradle-ap…
+536afc619d2678b80bd7d0b5674be249f05fad349a8717998b69d48f66062fb5 | https://maven.google.com/com/android/tools/build/gradle/3.4.2/gradle-3.4.2.…
+e1d38f808e126ada6b7f77cc1d66e7fce01d1e03941d14e38062d41b7ab37953 | https://maven.google.com/com/android/tools/build/gradle/3.4.2/gradle-3.4.2.…
c9f8b016144cfb31c5aee92d47f34de23289167cac5e8ef68365b2dd05766f11 | https://maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0…
db025ad1bbc6896edf0f67cda1222ba9b7ec9a0187df7f4fd0a318475c758e4e | https://maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0…
1dd481e7606ccb30868908d9ae80f27d1c5ba882f792532bd91ed731c54f4efb | https://maven.google.com/com/android/tools/build/jetifier/jetifier-processo…
@@ -451,10 +449,6 @@ ddbf4fca123733fa011595b1cc1f4ac2937ed327b60990711fafc33c775c2ade | https://maven
21e06d8c4fb95d389b66a0613dd8dbb6cc88a336931035b61c6a71db174abca7 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.2.1/l…
52fbb3614feee0d5d474c35f8c533ff3fa090cbf0df46c06e4cf353cae1c3652 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.4.2/l…
d59ef58abb73f06650ce1d80641fe70a3908a071fc5f98267074e6e42f904360 | https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/26.4.2/l…
-7848b82ae988b90dee259ae7c7e86e05cbf52db6cd21c8bbd38ce7df08f3f8c5 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.jar
-445ce6f3c911a11c0f4a1dff662baa5e2a9a6524281a4b60226cf25dd225b548 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.pom
-5eeb74d75aad007428ce5077f2c5c721cc7a2bb702b0525fa9605efad3afd7e8 | https://maven.google.com/com/android/tools/lint/lint/26.4.2/lint-26.4.2.jar
-ac7e208ce2e2bfece25498538c6a16b501a4813818149fc1f0670778b7bd6b24 | https://maven.google.com/com/android/tools/lint/lint/26.4.2/lint-26.4.2.pom
3b57e739de567b98bc9ab56c2c0ee66fc026b4adf5843e8f9804ca0666a6f66e | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
8c3ad3303516cfcb96aa367757a429dbd5f6b6fa63e0c3bff4213b63fe76f69b | https://maven.google.com/com/android/tools/lint/lint-api/26.2.1/lint-api-26…
d12d58c8a2ccb68daa7cbd70a0904b8f05dfdfc6c3a1871923b1b903bf5bf4da | https://maven.google.com/com/android/tools/lint/lint-api/26.4.2/lint-api-26…
@@ -463,12 +457,16 @@ c86f4cc9aaee722ee4ad70062f7b5af91e9b041914af27adc09f545ab0fb3bc6 | https://maven
d5760172fe3dedec8f1304420bc304c0c2cae1ee24972bba7ad9c03bf0ac679e | https://maven.google.com/com/android/tools/lint/lint-checks/26.2.1/lint-che…
8a0246f594d685bda999a66b2409cb4e0da59e59a66021c9293fdb40cc49d879 | https://maven.google.com/com/android/tools/lint/lint-checks/26.4.2/lint-che…
e9327b00b990f6b28f8cc974e98ea4436bbf03e2bc66ea4769970eb26dd840b5 | https://maven.google.com/com/android/tools/lint/lint-checks/26.4.2/lint-che…
-7e8e000f063f42f10ca209f51a48b332db1c4d3ac30979cc49c1877ef9e4b7f1 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.4.2/lint-gra…
-9f370942017e7472655aaff53ad550429e459581adf0c78e5b1fb071f61cb9e3 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.4.2/lint-gra…
90c6a1a650a257abb5d445dde9c172d55e6d28ce943a35b4e263c4cb3dcc96b0 | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.4.2/lint…
a8496204c0e7def7adee23e3d0f7ff0117b92c4809ecc8d2c06fc6b18b53e7c6 | https://maven.google.com/com/android/tools/lint/lint-gradle-api/26.4.2/lint…
+7e8e000f063f42f10ca209f51a48b332db1c4d3ac30979cc49c1877ef9e4b7f1 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.4.2/lint-gra…
+9f370942017e7472655aaff53ad550429e459581adf0c78e5b1fb071f61cb9e3 | https://maven.google.com/com/android/tools/lint/lint-gradle/26.4.2/lint-gra…
7a6a5d2b18f69cf1b900d857c2632b4c683713c533295933b8b759f8cab4a877 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
c4c54f08f4dbdd379d6a9d6d3e1d66e0f2106d849591112742784ae62678b3c2 | https://maven.google.com/com/android/tools/lint/lint-kotlin/26.2.1/lint-kot…
+7848b82ae988b90dee259ae7c7e86e05cbf52db6cd21c8bbd38ce7df08f3f8c5 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.jar
+445ce6f3c911a11c0f4a1dff662baa5e2a9a6524281a4b60226cf25dd225b548 | https://maven.google.com/com/android/tools/lint/lint/26.2.1/lint-26.2.1.pom
+5eeb74d75aad007428ce5077f2c5c721cc7a2bb702b0525fa9605efad3afd7e8 | https://maven.google.com/com/android/tools/lint/lint/26.4.2/lint-26.4.2.jar
+ac7e208ce2e2bfece25498538c6a16b501a4813818149fc1f0670778b7bd6b24 | https://maven.google.com/com/android/tools/lint/lint/26.4.2/lint-26.4.2.pom
fa74dae09103faef703df38550ad8fa244c5b6d1bf90d6198be932292b3d9cc1 | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
eb078adfb208eae7524d00d0ce03196a2c81353db78c7f9613885c19690cf2de | https://maven.google.com/com/android/tools/repository/26.2.1/repository-26.…
5183d0d2493d588d7960f954221a29130b67f1ac5f78c2d6f69195346b69617a | https://maven.google.com/com/android/tools/repository/26.4.2/repository-26.…
@@ -481,5 +479,7 @@ c7786e12c89c77e4daea2ebb991491821f90364cd5e06a02b56371a42084b3c0 | https://maven
7031d2d09683996ac126074be3de6df9b3de80f7e0f10b80a6e8754f69c80028 | https://maven.google.com/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom
ebec9d8e0a140b376aade276b08572cb1f8cf954249b469bee6dce6fd5a45cd4 | https://maven.google.com/com/android/tools/sdklib/26.4.2/sdklib-26.4.2.jar
768b365f2486e344d012d5b4b9b195fde8bfb442c23dca89d258a7766cdba5c8 | https://maven.google.com/com/android/tools/sdklib/26.4.2/sdklib-26.4.2.pom
-ce1754a344bc0a38408b1c7310db652d3ec2aa97df42669cd9da167c6c9c7f7b | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.3.0/apilint-0.3…
-e27acceb1ab0a6a490b91bf6112ff31605181db4255bed2039c98a965c5336f4 | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.3.0/apilint-0.3…
+7680e381a3c03798d999b2e441caadd8a56a0a808e108024a67af9fe26c11adc | https://maven.google.com/com/google/android/material/material/1.0.0/materia…
+c9fff541d51c11195de305c50bbfe4d1dfc97841983d95f6d7101112603515ab | https://maven.google.com/com/google/android/material/material/1.0.0/materia…
+ece749bdea04522b04a7b0cfd391026f88808c4d0103b3bede8b42baf0b7d677 | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.3.1/apilint-0.3…
+efd7067a5c6ed990ea698d42b56fb324062a2cb9556aff5d656b7c739d2134ba | https://plugins.gradle.org/m2/org/mozilla/apilint/apilint/0.3.1/apilint-0.3…
diff --git a/projects/geckoview/mozconfig-android-all b/projects/geckoview/mozconfig-android-all
index 073a6e8..691b1ab 100644
--- a/projects/geckoview/mozconfig-android-all
+++ b/projects/geckoview/mozconfig-android-all
@@ -1,3 +1,5 @@
+export MOZILLA_OFFICIAL=1
+
ac_add_options --enable-application=mobile/android
ac_add_options --disable-compile-environment
# We want to have a similar fat .aar versioning as Mozilla and make it clear we
1
0

[tor-browser-build/master] Bug 40097: Update toolchain for Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit dbdff9c7f064678194377acc0543ee1c51ccbc17
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Oct 8 06:57:24 2020 +0000
Bug 40097: Update toolchain for Fenix 82
application-services needs a newer Rust compiler as it now uses
features (strip_suffix()) that got stablizied in 1.45.0 first. We don't
want to risk GeckoView stability and thus bite the bullet and add a
different project solely used by application-services for the time being.
We omit the clean-up as this is supposed to be temporary until Rust for
GeckoView gets bumped.
It is noteworthy that we still need the patch for bug 43909 albeit in
a slightly updated fashion. Originally, this landed on trunk for the
10.0 release but it got backed out later on and did not reland in time
for any 10.0 release. Thus, we need to keep that patch until Rust
switches to LLVM 11.
---
projects/fenix-as-rust/43909.patch | 252 ++++++++++++++++++++++++++++++++++++
projects/fenix-as-rust/build | 65 ++++++++++
projects/fenix-as-rust/config | 103 +++++++++++++++
projects/fenix-as-rust/unwind.patch | 162 +++++++++++++++++++++++
4 files changed, 582 insertions(+)
diff --git a/projects/fenix-as-rust/43909.patch b/projects/fenix-as-rust/43909.patch
new file mode 100644
index 0000000..94e2ae2
--- /dev/null
+++ b/projects/fenix-as-rust/43909.patch
@@ -0,0 +1,252 @@
+From 74ca2aebcd26adc7e3259d0802c07cc61b77a40c Mon Sep 17 00:00:00 2001
+From: Nikita Popov <nikita.ppv(a)gmail.com>
+Date: Sat, 16 Nov 2019 16:22:18 +0100
+Subject: [PATCH] Restructure caching
+
+Variant on D70103. The caching is switched to always use a BB to
+cache entry map, which then contains per-value caches. A separate
+set contains value handles with a deletion callback. This allows us
+to properly invalidate overdefined values.
+
+A possible alternative would be to always cache by value first and
+have per-BB maps/sets in the each cache entry. In that case we could
+use a ValueMap and would avoid the separate value handle set. I went
+with the BB indexing at the top level to make it easier to integrate
+D69914, but possibly that's not the right choice.
+
+Differential Revision: https://reviews.llvm.org/D70376
+
+diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
+index 7ae7a1fd549..8c9e85e95b3 100644
+--- a/llvm/lib/Analysis/LazyValueInfo.cpp
++++ b/llvm/lib/Analysis/LazyValueInfo.cpp
+@@ -136,12 +136,9 @@ namespace {
+ /// A callback value handle updates the cache when values are erased.
+ class LazyValueInfoCache;
+ struct LVIValueHandle final : public CallbackVH {
+- // Needs to access getValPtr(), which is protected.
+- friend struct DenseMapInfo<LVIValueHandle>;
+-
+ LazyValueInfoCache *Parent;
+
+- LVIValueHandle(Value *V, LazyValueInfoCache *P)
++ LVIValueHandle(Value *V, LazyValueInfoCache *P = nullptr)
+ : CallbackVH(V), Parent(P) { }
+
+ void deleted() override;
+@@ -155,89 +152,63 @@ namespace {
+ /// This is the cache kept by LazyValueInfo which
+ /// maintains information about queries across the clients' queries.
+ class LazyValueInfoCache {
+- /// This is all of the cached block information for exactly one Value*.
+- /// The entries are sorted by the BasicBlock* of the
+- /// entries, allowing us to do a lookup with a binary search.
+- /// Over-defined lattice values are recorded in OverDefinedCache to reduce
+- /// memory overhead.
+- struct ValueCacheEntryTy {
+- ValueCacheEntryTy(Value *V, LazyValueInfoCache *P) : Handle(V, P) {}
+- LVIValueHandle Handle;
+- SmallDenseMap<PoisoningVH<BasicBlock>, ValueLatticeElement, 4> BlockVals;
++ /// This is all of the cached information for one basic block. It contains
++ /// the per-value lattice elements, as well as a separate set for
++ /// overdefined values to reduce memory usage.
++ struct BlockCacheEntryTy {
++ SmallDenseMap<AssertingVH<Value>, ValueLatticeElement, 4> LatticeElements;
++ SmallDenseSet<AssertingVH<Value>, 4> OverDefined;
+ };
+
+- /// This tracks, on a per-block basis, the set of values that are
+- /// over-defined at the end of that block.
+- typedef DenseMap<PoisoningVH<BasicBlock>, SmallPtrSet<Value *, 4>>
+- OverDefinedCacheTy;
+- /// Keep track of all blocks that we have ever seen, so we
+- /// don't spend time removing unused blocks from our caches.
+- DenseSet<PoisoningVH<BasicBlock> > SeenBlocks;
+-
+- /// This is all of the cached information for all values,
+- /// mapped from Value* to key information.
+- DenseMap<Value *, std::unique_ptr<ValueCacheEntryTy>> ValueCache;
+- OverDefinedCacheTy OverDefinedCache;
+-
++ /// Cached information per basic block.
++ DenseMap<PoisoningVH<BasicBlock>, BlockCacheEntryTy> BlockCache;
++ /// Set of value handles used to erase values from the cache on deletion.
++ DenseSet<LVIValueHandle, DenseMapInfo<Value *>> ValueHandles;
+
+ public:
+ void insertResult(Value *Val, BasicBlock *BB,
+ const ValueLatticeElement &Result) {
+- SeenBlocks.insert(BB);
+-
++ auto &CacheEntry = BlockCache.try_emplace(BB).first->second;
+ // Insert over-defined values into their own cache to reduce memory
+ // overhead.
+ if (Result.isOverdefined())
+- OverDefinedCache[BB].insert(Val);
+- else {
+- auto It = ValueCache.find_as(Val);
+- if (It == ValueCache.end()) {
+- ValueCache[Val] = std::make_unique<ValueCacheEntryTy>(Val, this);
+- It = ValueCache.find_as(Val);
+- assert(It != ValueCache.end() && "Val was just added to the map!");
+- }
+- It->second->BlockVals[BB] = Result;
+- }
+- }
+-
+- bool isOverdefined(Value *V, BasicBlock *BB) const {
+- auto ODI = OverDefinedCache.find(BB);
+-
+- if (ODI == OverDefinedCache.end())
+- return false;
++ CacheEntry.OverDefined.insert(Val);
++ else
++ CacheEntry.LatticeElements.insert({ Val, Result });
+
+- return ODI->second.count(V);
++ auto HandleIt = ValueHandles.find_as(Val);
++ if (HandleIt == ValueHandles.end())
++ ValueHandles.insert({ Val, this });
+ }
+
+ bool hasCachedValueInfo(Value *V, BasicBlock *BB) const {
+- if (isOverdefined(V, BB))
+- return true;
+-
+- auto I = ValueCache.find_as(V);
+- if (I == ValueCache.end())
++ auto It = BlockCache.find(BB);
++ if (It == BlockCache.end())
+ return false;
+
+- return I->second->BlockVals.count(BB);
++ return It->second.OverDefined.count(V) ||
++ It->second.LatticeElements.count(V);
+ }
+
+ ValueLatticeElement getCachedValueInfo(Value *V, BasicBlock *BB) const {
+- if (isOverdefined(V, BB))
++ auto It = BlockCache.find(BB);
++ if (It == BlockCache.end())
++ return ValueLatticeElement();
++
++ if (It->second.OverDefined.count(V))
+ return ValueLatticeElement::getOverdefined();
+
+- auto I = ValueCache.find_as(V);
+- if (I == ValueCache.end())
+- return ValueLatticeElement();
+- auto BBI = I->second->BlockVals.find(BB);
+- if (BBI == I->second->BlockVals.end())
++ auto LatticeIt = It->second.LatticeElements.find(V);
++ if (LatticeIt == It->second.LatticeElements.end())
+ return ValueLatticeElement();
+- return BBI->second;
++
++ return LatticeIt->second;
+ }
+
+ /// clear - Empty the cache.
+ void clear() {
+- SeenBlocks.clear();
+- ValueCache.clear();
+- OverDefinedCache.clear();
++ BlockCache.clear();
++ ValueHandles.clear();
+ }
+
+ /// Inform the cache that a given value has been deleted.
+@@ -251,23 +222,18 @@ namespace {
+ /// OldSucc might have (unless also overdefined in NewSucc). This just
+ /// flushes elements from the cache and does not add any.
+ void threadEdgeImpl(BasicBlock *OldSucc,BasicBlock *NewSucc);
+-
+- friend struct LVIValueHandle;
+ };
+ }
+
+ void LazyValueInfoCache::eraseValue(Value *V) {
+- for (auto I = OverDefinedCache.begin(), E = OverDefinedCache.end(); I != E;) {
+- // Copy and increment the iterator immediately so we can erase behind
+- // ourselves.
+- auto Iter = I++;
+- SmallPtrSetImpl<Value *> &ValueSet = Iter->second;
+- ValueSet.erase(V);
+- if (ValueSet.empty())
+- OverDefinedCache.erase(Iter);
++ for (auto &Pair : BlockCache) {
++ Pair.second.LatticeElements.erase(V);
++ Pair.second.OverDefined.erase(V);
+ }
+
+- ValueCache.erase(V);
++ auto HandleIt = ValueHandles.find_as(V);
++ if (HandleIt != ValueHandles.end())
++ ValueHandles.erase(HandleIt);
+ }
+
+ void LVIValueHandle::deleted() {
+@@ -277,18 +243,7 @@ void LVIValueHandle::deleted() {
+ }
+
+ void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
+- // Shortcut if we have never seen this block.
+- DenseSet<PoisoningVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
+- if (I == SeenBlocks.end())
+- return;
+- SeenBlocks.erase(I);
+-
+- auto ODI = OverDefinedCache.find(BB);
+- if (ODI != OverDefinedCache.end())
+- OverDefinedCache.erase(ODI);
+-
+- for (auto &I : ValueCache)
+- I.second->BlockVals.erase(BB);
++ BlockCache.erase(BB);
+ }
+
+ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+@@ -306,10 +261,11 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ std::vector<BasicBlock*> worklist;
+ worklist.push_back(OldSucc);
+
+- auto I = OverDefinedCache.find(OldSucc);
+- if (I == OverDefinedCache.end())
++ auto I = BlockCache.find(OldSucc);
++ if (I == BlockCache.end() || I->second.OverDefined.empty())
+ return; // Nothing to process here.
+- SmallVector<Value *, 4> ValsToClear(I->second.begin(), I->second.end());
++ SmallVector<Value *, 4> ValsToClear(I->second.OverDefined.begin(),
++ I->second.OverDefined.end());
+
+ // Use a worklist to perform a depth-first search of OldSucc's successors.
+ // NOTE: We do not need a visited list since any blocks we have already
+@@ -323,10 +279,10 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ if (ToUpdate == NewSucc) continue;
+
+ // If a value was marked overdefined in OldSucc, and is here too...
+- auto OI = OverDefinedCache.find(ToUpdate);
+- if (OI == OverDefinedCache.end())
++ auto OI = BlockCache.find(ToUpdate);
++ if (OI == BlockCache.end() || OI->second.OverDefined.empty())
+ continue;
+- SmallPtrSetImpl<Value *> &ValueSet = OI->second;
++ auto &ValueSet = OI->second.OverDefined;
+
+ bool changed = false;
+ for (Value *V : ValsToClear) {
+@@ -336,11 +292,6 @@ void LazyValueInfoCache::threadEdgeImpl(BasicBlock *OldSucc,
+ // If we removed anything, then we potentially need to update
+ // blocks successors too.
+ changed = true;
+-
+- if (ValueSet.empty()) {
+- OverDefinedCache.erase(OI);
+- break;
+- }
+ }
+
+ if (!changed) continue;
+--
+2.28.0
+
diff --git a/projects/fenix-as-rust/build b/projects/fenix-as-rust/build
new file mode 100644
index 0000000..5d3d5c1
--- /dev/null
+++ b/projects/fenix-as-rust/build
@@ -0,0 +1,65 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+distdir=/var/tmp/dist/[% project %]
+mkdir -p $distdir
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
+export PATH="/var/tmp/dist/cmake/bin:$PATH"
+tar -C /var/tmp/dist -xf [% c('input_files_by_name/prev_rust') %]
+cd /var/tmp/dist/rust-[% c('var/prev_version') %]-x86_64-unknown-linux-gnu
+./install.sh --prefix=$distdir-rust-old
+export PATH="$distdir-rust-old/bin:$PATH"
+
+[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+[% IF c("var/osx") %]
+ # We need to clear `CC` and `LDFLAGS` as they are used for the host platform
+ # (i.e. Linux).
+ unset CC
+ unset LDFLAGS
+
+ mkdir $distdir/helper
+ # We need to adapt our CFLAGS and make sure our flags are passed down to all
+ # dependencies. Using `CFLAGS_x86_apple-darwin` did not do the trick, so resort
+ # to a wrapper script.
+ cat > $distdir/helper/x86_64-apple-darwin-clang << 'EOF'
+#!/bin/sh
+BASEDIR=/var/tmp/dist/macosx-toolchain
+$BASEDIR/cctools/bin/x86_64-apple-darwin-clang -target x86_64-apple-darwin -B $BASEDIR/cctools/bin -isysroot $BASEDIR/MacOSX10.11.sdk/ -Wl,-syslibroot,$BASEDIR/MacOSX10.11.sdk/ -Wl,-dead_strip -Wl,-pie "$@"
+EOF
+
+ chmod +x $distdir/helper/x86_64-apple-darwin-clang
+ export PATH=$distdir/helper:$PATH
+[% END %]
+
+cd $rootdir
+mkdir /var/tmp/build
+tar -C /var/tmp/build -xf [% c('input_files_by_name/rust') %]
+cd /var/tmp/build/rustc-[% c('version') %]-src
+
+# LLVM has reproducibility issues when optimizing bitcode, which we need to
+# patch. See: #32053 for more details.
+cd src/llvm-project
+patch -p1 < $rootdir/43909.patch
+cd ../../
+
+[% IF c("var/windows-i686") %]
+ # Cross-compiling for Windows 32bit is currently not possible without any
+ # patches. The reason for that is libstd expecting DWARF unwinding while most
+ # toolchains on Linux, targeting Windows 32bit, use SjLj unwinding.
+ # See: https://github.com/rust-lang/rust/issues/12859 for discussion about
+ # that and https://github.com/rust-lang/rust/pull/49633 for a newer attempt to
+ # fix this problem. We apply the patch from neersighted.
+ patch -p1 < $rootdir/unwind.patch
+[% END %]
+
+mkdir build
+cd build
+../configure --prefix=$distdir [% c("var/configure_opt") %]
+
+make -j[% c("buildconf/num_procs") %]
+make install
+cd /var/tmp/dist
+[% c('tar', {
+ tar_src => [ project ],
+ tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+ }) %]
diff --git a/projects/fenix-as-rust/config b/projects/fenix-as-rust/config
new file mode 100644
index 0000000..4a4ae3c
--- /dev/null
+++ b/projects/fenix-as-rust/config
@@ -0,0 +1,103 @@
+# vim: filetype=yaml sw=2
+filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
+version: '[% c("input_file_var/rust_version") %]'
+
+# Those values can be changed from the input_files section of other
+# projects. See bug 32436.
+input_file_var:
+ rust_version: 1.45.2
+ prev_version: 1.44.1
+
+var:
+ prev_version: '[% c("input_file_var/prev_version") %]'
+ container:
+ use_container: 1
+
+targets:
+ android:
+ var:
+ arch_deps:
+ - libssl-dev
+ - pkg-config
+ - zlib1g-dev
+ configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=[% c("var/cross_prefix") %] --set=target.[% c("var/cross_prefix") %].cc=[% c("var/CC") %] --set=target.[% c("var/cross_prefix") %].ar=[% c("var/cross_prefix") %]-ar
+
+ android-armv7:
+ var:
+ configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=[% IF pc(c("origin_project"), "var/application_services") %]armv7-linux-androideabi[% ELSE %]thumbv7neon-linux-androideabi[% END %] --set=target.[% IF pc(c("origin_project"), "var/application_services") %]armv7-linux-androideabi[% ELSE %]thumbv7neon-linux-androideabi[% END %].cc=[% c("var/CC") %] --set=target.[% IF pc(c("origin_project"), "var/application_services") %]armv7-linux-androideabi[% ELSE %]thumbv7neon-linux-androideabi[% END %].ar=[% c("var/cross_prefix") %]-ar
+
+ linux:
+ var:
+ deps:
+ - libc6-dev-i386
+ - lib32stdc++6
+ - build-essential
+ - python
+ - automake
+ - libssl-dev
+ - pkg-config
+ - hardening-wrapper
+ # We use
+ # `--enable-local-rust` to avoid downloading the required compiler during
+ # build time
+ #
+ # `--enable-vendor` to avoid downloading crates during build time and just
+ # use the ones which are shipped with the source
+ #
+ # `--enable-extended` to build not only rustc but cargo as well
+ #
+ # `--enable-llvm-static-stdccp` to take a libstdc++ on Jessie into account
+ # which is too old and if used gives undefined reference errors
+ #
+ # `--release-channel=stable` to just include stable features in the
+ # compiler
+ #
+ # `--sysconfdir=etc` to avoid install failures as |make install| wants to
+ # write to /etc otherwise
+ #
+ # the `target` triple to explicitly specify the architecture and platform
+ # for the compiler/std lib. Ideally, it should not be needed unless one is
+ # cross-compiling, but compiling `alloc_jemalloc` fails without that in a
+ # 32bit container. "--host=x86_64-unknown-linux-gnu" is used in its
+ # configure script in this case.
+ # `--set=` to explicitly specify the C compiler. We need to compile the
+ # bundled LLVM and it wants to use `cc`. However, we don't have that in
+ # our compiled GCC resulting in weird errors due to C and C++ compiler
+ # version mismatch. We avoid that with this configure option.
+ configure_opt: --enable-local-rust --enable-vendor --enable-extended --enable-llvm-static-stdcpp --release-channel=stable --sysconfdir=etc --target=x86_64-unknown-linux-gnu,i686-unknown-linux-gnu --set=target.x86_64-unknown-linux-gnu.cc=gcc --set=target.i686-unknown-linux-gnu.cc=gcc
+
+ osx-x86_64:
+ var:
+ arch_deps:
+ - libssl-dev
+ - pkg-config
+ - zlib1g-dev
+ configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=x86_64-apple-darwin --set=target.x86_64-apple-darwin.cc=x86_64-apple-darwin-clang
+
+ windows:
+ var:
+ arch_deps:
+ - libssl-dev
+ - pkg-config
+ - zlib1g-dev
+ configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=[% c("arch") %]-pc-windows-gnu
+
+input_files:
+ - project: container-image
+ - project: cmake
+ name: cmake
+ - project: '[% c("var/compiler") %]'
+ name: '[% c("var/compiler") %]'
+ - URL: 'https://static.rust-lang.org/dist/rustc-[% c("version") %]-src.tar.gz'
+ name: rust
+ sig_ext: asc
+ file_gpg_id: 1
+ gpg_keyring: rust.gpg
+ - URL: 'https://static.rust-lang.org/dist/rust-[% c("var/prev_version") %]-x86_64-unknown-linux-gnu.tar.xz'
+ name: prev_rust
+ sig_ext: asc
+ file_gpg_id: 1
+ gpg_keyring: rust.gpg
+ - filename: unwind.patch
+ enable: '[% c("var/windows-i686") %]'
+ - filename: 43909.patch
diff --git a/projects/fenix-as-rust/unwind.patch b/projects/fenix-as-rust/unwind.patch
new file mode 100644
index 0000000..7b22dcb
--- /dev/null
+++ b/projects/fenix-as-rust/unwind.patch
@@ -0,0 +1,162 @@
+From b3bea7008ece7a5bdf9b5a5dcc95e82febad1854 Mon Sep 17 00:00:00 2001
+From: Bjorn Neergaard <bjorn(a)neersighted.com>
+Date: Sat, 9 Feb 2019 19:39:23 +0000
+Subject: [PATCH] Fix cross-compiling i686-pc-windows-gnu from Linux
+
+This is still very rough and serves as a proof-of-concept for fixing
+Linux -> 32-bit MinGW cross compilation workflow. Currently, clang and
+GCC's MinGW targets both only support DW2 (DWARF) or SJLJ (Set Jump Long
+Jump) unwinding on 32-bit Windows.
+
+The default for GCC (and the way it is shipped on every major distro) is
+to use SJLJ on Windows, as DWARF cannot traverse non-DWARF frames. This
+would work fine, except for the fact that libgcc (our C runtime on the
+MinGW platform) exports symbols under a different name when configured
+to use SJLJ-style unwinding, and uses a preprocessor macro internally to
+alias them.
+
+Because of this, we have to detect this scenario and link to the correct
+symbols ourselves. Linking has been tested with a full bootstrap on both
+x86_64-unknown-linux-gnu and i686-pc-windows-gnu, as well as
+cross-compilation of some of my own projects.
+
+Obviously, the detection is a bit unrefined. Right now we
+unconditionally use SJLJ when compiling Linux -> MinGW. I'd like to add
+feature detection using compiler build flags or autotools-style
+compilation and object analysis. Input on the best way to proceed here
+is welcome.
+
+Also, currently there is copy-pasted/duplicated code in libunwind.
+Ideally, this could be reduced, but this would likely require a
+rethinking of how iOS is special-cased above, to avoid further
+duplication. Input on how to best structure this file is requested.
+
+diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
+index 249a183189..df08d6eb0c 100644
+--- a/src/bootstrap/compile.rs
++++ b/src/bootstrap/compile.rs
+@@ -162,7 +162,12 @@ pub fn std_cargo(builder: &Builder<'_>,
+ .arg("--features")
+ .arg("compiler-builtins-mem");
+ } else {
+- let features = builder.std_features();
++ let mut features = builder.std_features();
++
++ // FIXME: Temporary detection of SJLJ MinGW compilers.
++ if builder.config.build.contains("linux") && target == "i686-pc-windows-gnu" {
++ features.push_str(" sjlj_eh");
++ }
+
+ if compiler.stage != 0 && builder.config.sanitizers {
+ // This variable is used by the sanitizer runtime crates, e.g.
+diff --git a/src/libstd/Cargo.toml b/src/libstd/Cargo.toml
+index 7d60a17042..d876d0b89a 100644
+--- a/src/libstd/Cargo.toml
++++ b/src/libstd/Cargo.toml
+@@ -71,3 +71,4 @@ wasm-bindgen-threads = []
+ # https://github.com/rust-lang-nursery/stdsimd/blob/master/crates/std_detect/…
+ std_detect_file_io = []
+ std_detect_dlsym_getauxval = []
++sjlj_eh = ["unwind/sjlj_eh"]
+diff --git a/src/libunwind/Cargo.toml b/src/libunwind/Cargo.toml
+index 2378b0a315..0b5979ed62 100644
+--- a/src/libunwind/Cargo.toml
++++ b/src/libunwind/Cargo.toml
+@@ -16,3 +16,6 @@ doc = false
+ core = { path = "../libcore" }
+ libc = { version = "0.2.43", features = ['rustc-dep-of-std'], default-features = false }
+ compiler_builtins = "0.1.0"
++
++[features]
++sjlj_eh = []
+diff --git a/src/libunwind/libunwind.rs b/src/libunwind/libunwind.rs
+index 339b554ed6..ec2f93ed60 100644
+--- a/src/libunwind/libunwind.rs
++++ b/src/libunwind/libunwind.rs
+@@ -1,10 +1,5 @@
+ #![allow(nonstandard_style)]
+
+-macro_rules! cfg_if {
+- ( $( if #[cfg( $meta:meta )] { $($it1:item)* } else { $($it2:item)* } )* ) =>
+- ( $( $( #[cfg($meta)] $it1)* $( #[cfg(not($meta))] $it2)* )* )
+-}
+-
+ use libc::{c_int, c_void, uintptr_t};
+
+ #[repr(C)]
+@@ -73,8 +68,8 @@ pub enum _Unwind_Context {}
+ pub type _Unwind_Exception_Cleanup_Fn = extern "C" fn(unwind_code: _Unwind_Reason_Code,
+ exception: *mut _Unwind_Exception);
+ extern "C" {
+- #[unwind(allowed)]
+- pub fn _Unwind_Resume(exception: *mut _Unwind_Exception) -> !;
++ #[cfg_attr(stage0, unwind)]
++ #[cfg_attr(not(stage0), unwind(allowed))]
+ pub fn _Unwind_DeleteException(exception: *mut _Unwind_Exception);
+ pub fn _Unwind_GetLanguageSpecificData(ctx: *mut _Unwind_Context) -> *mut c_void;
+ pub fn _Unwind_GetRegionStart(ctx: *mut _Unwind_Context) -> _Unwind_Ptr;
+@@ -206,26 +201,52 @@ if #[cfg(all(any(target_os = "ios", target_os = "netbsd", not(target_arch = "arm
+ pc
+ }
+ }
++} // cfg_if!
+
+-if #[cfg(not(all(target_os = "ios", target_arch = "arm")))] {
+- // Not 32-bit iOS
++cfg_if! {
++if #[cfg(all(target_os = "ios", target_arch = "arm"))] {
++ // 32-bit iOS uses SjLj and does not provide _Unwind_Backtrace()
+ extern "C" {
+- #[unwind(allowed)]
+- pub fn _Unwind_RaiseException(exception: *mut _Unwind_Exception) -> _Unwind_Reason_Code;
++ #[cfg_attr(stage0, unwind)]
++ #[cfg_attr(not(stage0), unwind(allowed))]
++ pub fn _Unwind_Resume(exception: *mut _Unwind_Exception) -> !;
++ pub fn _Unwind_SjLj_RaiseException(e: *mut _Unwind_Exception) -> _Unwind_Reason_Code;
++ }
++
++ #[inline]
++ pub unsafe fn _Unwind_RaiseException(exc: *mut _Unwind_Exception) -> _Unwind_Reason_Code {
++ _Unwind_SjLj_RaiseException(exc)
++ }
++
++} else if #[cfg(feature = "sjlj_eh")] {
++ extern "C" {
++ #[cfg_attr(stage0, unwind)]
++ #[cfg_attr(not(stage0), unwind(allowed))]
++ pub fn _Unwind_SjLj_Resume(e: *mut _Unwind_Exception) -> !;
++ pub fn _Unwind_SjLj_RaiseException(e: *mut _Unwind_Exception) -> _Unwind_Reason_Code;
+ pub fn _Unwind_Backtrace(trace: _Unwind_Trace_Fn,
+ trace_argument: *mut c_void)
+ -> _Unwind_Reason_Code;
+ }
+-} else {
+- // 32-bit iOS uses SjLj and does not provide _Unwind_Backtrace()
+- extern "C" {
+- #[unwind(allowed)]
+- pub fn _Unwind_SjLj_RaiseException(e: *mut _Unwind_Exception) -> _Unwind_Reason_Code;
++
++ #[inline]
++ pub unsafe fn _Unwind_Resume(exc: *mut _Unwind_Exception) -> ! {
++ _Unwind_SjLj_Resume(exc)
+ }
+
+ #[inline]
+ pub unsafe fn _Unwind_RaiseException(exc: *mut _Unwind_Exception) -> _Unwind_Reason_Code {
+ _Unwind_SjLj_RaiseException(exc)
+ }
++} else {
++ extern "C" {
++ #[cfg_attr(stage0, unwind)]
++ #[cfg_attr(not(stage0), unwind(allowed))]
++ pub fn _Unwind_Resume(exception: *mut _Unwind_Exception) -> !;
++ pub fn _Unwind_RaiseException(exception: *mut _Unwind_Exception) -> _Unwind_Reason_Code;
++ pub fn _Unwind_Backtrace(trace: _Unwind_Trace_Fn,
++ trace_argument: *mut c_void)
++ -> _Unwind_Reason_Code;
++ }
+ }
+ } // cfg_if!
+--
+2.23.0.rc0
+
1
0

12 Oct '20
commit 815db29612e3db0b901290690d1e817ad9f8f487
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Oct 6 05:25:44 2020 +0000
Bug 34360: Bump binutils to 2.35.1
We can drop our Windows patches now as the underlying bug
(https://sourceware.org/bugzilla/show_bug.cgi?id=17321) got fixed
in binutils 2.34.
---
projects/binutils/build | 8 --------
projects/binutils/config | 6 +-----
2 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/projects/binutils/build b/projects/binutils/build
index 9161192..f1cf0b9 100644
--- a/projects/binutils/build
+++ b/projects/binutils/build
@@ -11,14 +11,6 @@ distdir=/var/tmp/dist/binutils
[% END %]
tar xf [% project %]-[% c("version") %].tar.xz
cd [% project %]-[% c("version") %]
-[% IF c('var/windows') -%]
- # Needed for the hardening... The upstream ticket is:
- # https://sourceware.org/bugzilla/show_bug.cgi?id=17321
- patch -p1 < ../enable-reloc-section-ld.patch
-[% END -%]
-[% IF c('var/windows-x86_64') -%]
- patch -p1 < ../64bit-fixups.patch
-[% END -%]
./configure --prefix=$distdir [% c('var/configure_opt') %]
make -j[% c("buildconf/num_procs") %]
make install
diff --git a/projects/binutils/config b/projects/binutils/config
index 2367280..48065e1 100644
--- a/projects/binutils/config
+++ b/projects/binutils/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 2.31.1
+version: 2.35.1
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
var:
configure_opt: '--disable-multilib --enable-gold --enable-deterministic-archives --enable-plugins'
@@ -17,7 +17,3 @@ input_files:
file_gpg_id: 1
gpg_keyring: binutils.gpg
- project: container-image
- - filename: enable-reloc-section-ld.patch
- enable: '[% c("var/windows") %]'
- - filename: 64bit-fixups.patch
- enable: '[% c("var/windows-x86_64") %]'
1
0

[tor-browser-build/master] Bug 40115: Update components for switch to Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit a8fce676b2c870f1abd092199de5857f0055b84d
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Oct 6 17:45:36 2020 +0000
Bug 40115: Update components for switch to Fenix 82
Update application-services
---
projects/application-services/1651660.patch | 811 ----------------------------
projects/application-services/1651662.patch | 22 -
projects/application-services/build | 2 -
projects/application-services/config | 18 +-
projects/nss/config | 6 +-
projects/sqlcipher/config | 4 +-
6 files changed, 13 insertions(+), 850 deletions(-)
diff --git a/projects/application-services/1651660.patch b/projects/application-services/1651660.patch
deleted file mode 100644
index 8cf15b1..0000000
--- a/projects/application-services/1651660.patch
+++ /dev/null
@@ -1,811 +0,0 @@
-From 1641b74b17dad85a3ee65802a0a6320d2184c6c3 Mon Sep 17 00:00:00 2001
-From: Georg Koppen <gk(a)torproject.org>
-Date: Fri, 21 Aug 2020 19:26:37 +0000
-Subject: [PATCH] 1651660
-
-
-diff --git a/build.gradle b/build.gradle
-index 6b16a91d..58a4ddae 100644
---- a/build.gradle
-+++ b/build.gradle
-@@ -4,16 +4,16 @@ buildscript {
- ext.kotlin_version = '1.3.71'
- ext.jna_version = '5.2.0'
- ext.android_gradle_plugin_version = '3.6.0'
--
-- // N.B. try to keep these two in sync
-- ext.android_components_version = '24.0.0'
-- ext.glean_version = '21.3.0'
-+ ext.android_components_version = '47.0.0'
-
- ext.build = [
- ndkVersion: "21.3.6528147", // Keep it in sync in TC Dockerfile.
- compileSdkVersion: 29,
- targetSdkVersion: 28,
- minSdkVersion: 21, // So that we can publish for aarch64.
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ jvmTargetCompatibility: "1.8",
- ]
-
- repositories {
-@@ -44,6 +44,11 @@ buildscript {
-
- classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.12'
-
-+ // Since the Glean version depends on the Android components version,
-+ // it is very important to use a modern version of Glean and, ideally,
-+ // let this come from the embedding product itself.
-+ classpath "org.mozilla.components:tooling-glean-gradle:$android_components_version"
-+
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-diff --git a/components/fxa-client/android/build.gradle b/components/fxa-client/android/build.gradle
-index 9981facd..e0cac485 100644
---- a/components/fxa-client/android/build.gradle
-+++ b/components/fxa-client/android/build.gradle
-@@ -36,6 +36,19 @@ android {
- }
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/components/logins/android/build.gradle b/components/logins/android/build.gradle
-index be777e5b..166b81fe 100644
---- a/components/logins/android/build.gradle
-+++ b/components/logins/android/build.gradle
-@@ -46,6 +46,19 @@ android {
- includeAndroidResources = true
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-@@ -80,6 +93,12 @@ protobuf {
- }
- }
-
-+// Needs to happen before `dependencies` in order for the variables
-+// exposed by the plugin to be available for this project.
-+ext.gleanGenerateMarkdownDocs = true
-+ext.gleanDocsDirectory = "$rootDir/docs/metrics/logins"
-+apply plugin: "org.mozilla.telemetry.glean-gradle-plugin"
-+
- dependencies {
- // Part of the public API.
- api project(':sync15')
-@@ -108,7 +127,7 @@ dependencies {
- testImplementation 'org.mockito:mockito-core:2.21.0'
- testImplementation 'androidx.test:core-ktx:1.2.0'
- testImplementation 'androidx.work:work-testing:2.2.0'
-- testImplementation "org.mozilla.telemetry:glean-forUnitTests:$glean_version"
-+ testImplementation "org.mozilla.telemetry:glean-forUnitTests:$project.ext.glean_version"
-
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-@@ -132,8 +151,3 @@ afterEvaluate {
-
- apply from: "$rootDir/publish.gradle"
- ext.configurePublish()
--
--ext.gleanGenerateMarkdownDocs = true
--ext.gleanDocsDirectory = "$rootDir/docs/metrics/logins"
--apply from: "https://github.com/mozilla-mobile/android-components/raw/v${android_compone…"
--
-diff --git a/components/logins/android/metrics.yaml b/components/logins/android/metrics.yaml
-index e7ddec62..c81d6e43 100644
---- a/components/logins/android/metrics.yaml
-+++ b/components/logins/android/metrics.yaml
-@@ -2,31 +2,36 @@
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
--# This file defines the metrics that will be gathered for the "logins" storage component.
--# These are emitted for all users of the component. Additional metrics specific to the
--# *syncing* of logins are defined in a separate "sync_ping" package.
-+# This file defines the metrics that will be gathered for the "logins"
-+# storage component.
-+# These are emitted for all users of the component. Additional metrics
-+# specific to the *syncing* of logins are defined in a separate "sync_ping"
-+# package.
- #
--# Changes to these metrics require data review, which should take into consideration
--# the following known consumers of the logins component Android bindings:
-+# Changes to these metrics require data review, which should take into
-+# consideration the following known consumers of the logins component
-+# Android bindings:
- #
- # * Firefox Preview
- # * Firefox Lockwise for Android
-
-+---
- $schema: moz://mozilla.org/schemas/glean/metrics/1-0-0
-
- logins_store:
-
-- # These help us understand how much the logins store is being used, and whether it's succeeding
-- # in the duties asked of it. We'll use them to graph e.g. the error rate of applications trying
-- # to use the logins store, and identify application or platform features that lead to unusually
-+ # These help us understand how much the logins store is being used, and
-+ # whether it's succeeding in the duties asked of it. We'll use them to
-+ # graph e.g. the error rate of applications trying to use the logins store,
-+ # and identify application or platform features that lead to unusually
- # high error rates.
-
- unlock_count:
- type: counter
- description: >
- The number of times the login store was unlocked.
-- It is intended to be used together with `unlock_error_count` to measure the overall
-- error rate of unlocking the logins store.
-+ It is intended to be used together with `unlock_error_count` to measure
-+ the overall error rate of unlocking the logins store.
- bugs:
- - https://github.com/mozilla/application-services/issues/2225
- data_reviews:
-@@ -39,9 +44,10 @@ logins_store:
- unlock_error_count:
- type: labeled_counter
- description: >
-- The number of errors encountered when unlocking the logins store, labeled by type.
-- It is intended to be used together with `unlock_count` to measure the overall error
-- rate of unlocking the logins store.
-+ The number of errors encountered when unlocking the logins store, labeled
-+ by type.
-+ It is intended to be used together with `unlock_count` to measure the
-+ overall error rate of unlocking the logins store.
- labels:
- - invalid_key
- - mismatched_lock
-@@ -59,9 +65,10 @@ logins_store:
- type: counter
- description: >
- The total number of read operations performed on the logins store.
-- The count only includes operations triggered by the application, not e.g. incidental reads performed
-- as part of a sync. It is intended to be used together with `read_query_error_count` to measure the
-- overall error rate of read operations on the logins store.
-+ The count only includes operations triggered by the application, not
-+ e.g. incidental reads performed as part of a sync. It is intended to be
-+ used together with `read_query_error_count` to measure the overall error
-+ rate of read operations on the logins store.
- bugs:
- - https://github.com/mozilla/application-services/issues/2225
- data_reviews:
-@@ -74,9 +81,10 @@ logins_store:
- read_query_error_count:
- type: labeled_counter
- description: >
-- The total number of errors encountered during read operations on the logins store, labeled by type.
-- It is intended to be used together with `read_query_count` to measure the overall error rate
-- of read operations on the logins store.
-+ The total number of errors encountered during read operations on the
-+ logins store, labeled by type.
-+ It is intended to be used together with `read_query_count` to measure
-+ the overall error rate of read operations on the logins store.
- labels:
- - interrupted
- - storage_error
-@@ -93,9 +101,10 @@ logins_store:
- type: counter
- description: >
- The total number of write operations performed on the logins store.
-- The count only includes operations triggered by the application, not e.g. incidental writes performed
-- as part of a sync. It is intended to be used together with `write_query_error_count` to measure the
-- overall error rate of write operations on the logins store.
-+ The count only includes operations triggered by the application, not
-+ e.g. incidental writes performed as part of a sync. It is intended to
-+ be used together with `write_query_error_count` to measure the overall
-+ error rate of write operations on the logins store.
- bugs:
- - https://github.com/mozilla/application-services/issues/2225
- data_reviews:
-@@ -108,9 +117,10 @@ logins_store:
- write_query_error_count:
- type: labeled_counter
- description: >
-- The total number of errors encountered during write operations on the logins store, labeled by type.
-- It is intended to be used together with `write_query_count` to measure the overall error rate
-- of write operations on the logins store.
-+ The total number of errors encountered during write operations on the
-+ logins store, labeled by type.
-+ It is intended to be used together with `write_query_count` to measure
-+ the overall error rate of write operations on the logins store.
- labels:
- - no_such_record
- - id_collision
-@@ -127,14 +137,16 @@ logins_store:
- expires: "2021-03-01"
-
- # These help us understand the performance of the logins store in the wild.
-- # We'll use them to identify any application or platform features that are leading to unacceptably
-- # slow performance of the store, and eventually for comparison with other logins store implementations
-- # (such as the one in Desktop).
-+ # We'll use them to identify any application or platform features that are
-+ # leading to unacceptably slow performance of the store, and eventually for
-+ # comparison with other logins store implementations (such as the one in
-+ # Desktop).
-
- unlock_time:
- type: timing_distribution
- description: >
-- The time taken to open the logins store on startup, or after locking it due to user inactivity.
-+ The time taken to open the logins store on startup, or after locking it
-+ due to user inactivity.
- bugs:
- - https://github.com/mozilla/application-services/issues/2225
- data_reviews:
-@@ -147,8 +159,8 @@ logins_store:
- read_query_time:
- type: timing_distribution
- description: >
-- The time taken to execute a read query on the logins store (such as listing all logins, or finding a
-- specific login by id).
-+ The time taken to execute a read query on the logins store (such as
-+ listing all logins, or finding a specific login by id).
- bugs:
- - https://github.com/mozilla/application-services/issues/2225
- data_reviews:
-@@ -161,8 +173,8 @@ logins_store:
- write_query_time:
- type: timing_distribution
- description: >
-- The time taken to execute a write query on the logins store (such as adding, updating, or deleting
-- a login record).
-+ The time taken to execute a write query on the logins store (such as
-+ adding, updating, or deleting a login record).
- bugs:
- - https://github.com/mozilla/application-services/issues/2225
- data_reviews:
-diff --git a/components/logins/android/src/main/java/mozilla/appservices/logins/DatabaseLoginsStorage.kt b/components/logins/android/src/main/java/mozilla/appservices/logins/DatabaseLoginsStorage.kt
-index ae2ba8b1..8eb2ee7a 100644
---- a/components/logins/android/src/main/java/mozilla/appservices/logins/DatabaseLoginsStorage.kt
-+++ b/components/logins/android/src/main/java/mozilla/appservices/logins/DatabaseLoginsStorage.kt
-@@ -23,7 +23,6 @@ import org.mozilla.appservices.logins.GleanMetrics.LoginsStore as LoginsStoreMet
- * on version updates.
- */
- import mozilla.components.service.glean.private.CounterMetricType
--import mozilla.components.service.glean.private.TimingDistributionMetricType
- import mozilla.components.service.glean.private.LabeledMetricType
-
- /**
-@@ -419,22 +418,6 @@ internal fun Pointer.getRustString(): String {
- return this.getString(0, "utf8")
- }
-
--/**
-- * A helper extension method for conveniently measuring execution time of a closure.
-- *
-- * N.B. since we're measuring calls to Rust code here, the provided callback may be doing
-- * unsafe things. It's very imporant that we always call the function exactly once here
-- * and don't try to do anything tricky like stashing it for later or calling it multiple times.
-- */
--inline fun <U> TimingDistributionMetricType.measure(funcToMeasure: () -> U): U {
-- val timerId = this.start()
-- try {
-- return funcToMeasure()
-- } finally {
-- this.stopAndAccumulate(timerId)
-- }
--}
--
- /**
- * A helper class for gathering basic count metrics on different kinds of LoginsStore operation.
- *
-diff --git a/components/places/android/build.gradle b/components/places/android/build.gradle
-index 4debb737..5655326c 100644
---- a/components/places/android/build.gradle
-+++ b/components/places/android/build.gradle
-@@ -44,6 +44,19 @@ android {
- includeAndroidResources = true
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-@@ -77,6 +90,11 @@ protobuf {
- }
- }
-
-+// Generate markdown docs for the collected metrics.
-+ext.gleanGenerateMarkdownDocs = true
-+ext.gleanDocsDirectory = "$rootDir/docs/metrics/places"
-+apply plugin: "org.mozilla.telemetry.glean-gradle-plugin"
-+
- dependencies {
- // Part of the public API.
- api project(':sync15')
-@@ -105,7 +123,7 @@ dependencies {
- testImplementation 'org.mockito:mockito-core:2.21.0'
- testImplementation 'androidx.test:core-ktx:1.2.0'
- testImplementation 'androidx.work:work-testing:2.2.0'
-- testImplementation "org.mozilla.telemetry:glean-forUnitTests:$glean_version"
-+ testImplementation "org.mozilla.telemetry:glean-forUnitTests:$project.ext.glean_version"
-
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-@@ -130,8 +148,3 @@ afterEvaluate {
- apply from: "$rootDir/publish.gradle"
-
- ext.configurePublish()
--
--// Generate markdown docs for the collected metrics.
--ext.gleanGenerateMarkdownDocs = true
--ext.gleanDocsDirectory = "$rootDir/docs/metrics/places"
--apply from: "https://github.com/mozilla-mobile/android-components/raw/v${android_compone…"
-diff --git a/components/places/android/metrics.yaml b/components/places/android/metrics.yaml
-index 2c4b7891..dcfd1318 100644
---- a/components/places/android/metrics.yaml
-+++ b/components/places/android/metrics.yaml
-@@ -2,15 +2,19 @@
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
--# This file defines the metrics that will be gathered for the "places" storage component.
--# These are emitted for all users of the component. Additional metrics specific to the
--# *syncing* of places are defined in a separate "sync_ping" package.
-+# This file defines the metrics that will be gathered for the "places"
-+# storage component.
-+# These are emitted for all users of the component. Additional metrics
-+# specific to the *syncing* of places are defined in a separate "sync_ping"
-+# package.
- #
--# Changes to these metrics require data review, which should take into consideration
-+# Changes to these metrics require data review, which should take into
-+# consideration
- # the following known consumers of the places component Android bindings:
- #
- # * Fenix for Andriod
-
-+---
- $schema: moz://mozilla.org/schemas/glean/metrics/1-0-0
-
- places_manager:
-@@ -19,9 +23,10 @@ places_manager:
- type: counter
- description: >
- The total number of read operations performed on the places store.
-- The count only includes operations triggered by the application, not e.g. incidental reads performed
-- as part of a sync. It is intended to be used together with `read_query_error_count` to measure the
-- overall error rate of read operations on the places store.
-+ The count only includes operations triggered by the application, not
-+ e.g. incidental reads performed as part of a sync. It is intended to
-+ be used together with `read_query_error_count` to measure the overall
-+ error rate of read operations on the places store.
- bugs:
- - https://github.com/mozilla/application-services/issues/2300
- - https://github.com/mozilla/application-services/issues/2299
-@@ -35,9 +40,10 @@ places_manager:
- read_query_error_count:
- type: labeled_counter
- description: >
-- The total number of errors encountered during read operations on the places store, labeled by type.
-- It is intended to be used together with `read_query_count` to measure the overall error rate
-- of read operations on the places store.
-+ The total number of errors encountered during read operations on the
-+ places store, labeled by type.
-+ It is intended to be used together with `read_query_count` to measure
-+ the overall error rate of read operations on the places store.
- labels:
- - url_parse_failed
- - operation_interrupted
-@@ -55,9 +61,10 @@ places_manager:
- type: counter
- description: >
- The total number of write operations performed on the places store.
-- The count only includes operations triggered by the application, not e.g. incidental writes performed
-- as part of a sync. It is intended to be used together with `write_query_error_count` to measure the
-- overall error rate of write operations on the places store.
-+ The count only includes operations triggered by the application, not
-+ e.g. incidental writes performed as part of a sync. It is intended to
-+ be used together with `write_query_error_count` to measure the overall
-+ error rate of write operations on the places store.
- bugs:
- - https://github.com/mozilla/application-services/issues/2300
- - https://github.com/mozilla/application-services/issues/2299
-@@ -71,9 +78,10 @@ places_manager:
- write_query_error_count:
- type: labeled_counter
- description: >
-- The total number of errors encountered during write operations on the places store, labeled by type.
-- It is intended to be used together with `write_query_count` to measure the overall error rate
-- of write operations on the places store.
-+ The total number of errors encountered during write operations on the
-+ places store, labeled by type.
-+ It is intended to be used together with `write_query_count` to measure
-+ the overall error rate of write operations on the places store.
- labels:
- - url_parse_failed
- - invalid_bookmark_update
-@@ -108,8 +116,9 @@ places_manager:
- scan_query_time:
- type: timing_distribution
- description: >
-- The time taken to execute a scan query on the places store. This metric is for queries that we
-- expect to be costly e.g. getBookmarksTree(guid, recursive=True).
-+ The time taken to execute a scan query on the places store. This metric
-+ is for queries that we expect to be costly
-+ e.g. getBookmarksTree(guid, recursive=True).
- bugs:
- - https://github.com/mozilla/application-services/issues/2300
- - https://github.com/mozilla/application-services/issues/2299
-diff --git a/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt b/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt
-index 518bf77a..df2110c4 100644
---- a/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt
-+++ b/components/places/android/src/main/java/mozilla/appservices/places/PlacesConnection.kt
-@@ -27,7 +27,6 @@ import org.mozilla.appservices.places.GleanMetrics.PlacesManager as PlacesManage
- * on version updates.
- */
- import mozilla.components.service.glean.private.CounterMetricType
--import mozilla.components.service.glean.private.TimingDistributionMetricType
- import mozilla.components.service.glean.private.LabeledMetricType
-
- /**
-@@ -1273,22 +1272,6 @@ data class VisitInfosWithBound(
- }
- }
-
--/**
-- * A helper extension method for conveniently measuring execution time of a closure.
-- *
-- * N.B. since we're measuring calls to Rust code here, the provided callback may be doing
-- * unsafe things. It's very imporant that we always call the function exactly once here
-- * and don't try to do anything tricky like stashing it for later or calling it multiple times.
-- */
--inline fun <U> TimingDistributionMetricType.measure(funcToMeasure: () -> U): U {
-- val timerId = this.start()
-- try {
-- return funcToMeasure()
-- } finally {
-- this.stopAndAccumulate(timerId)
-- }
--}
--
- /**
- * A helper class for gathering basic count metrics on different kinds of PlacesManager operations.
- *
-diff --git a/components/push/android/build.gradle b/components/push/android/build.gradle
-index c68815f1..9dcc0678 100644
---- a/components/push/android/build.gradle
-+++ b/components/push/android/build.gradle
-@@ -36,6 +36,19 @@ android {
- }
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/components/rc_log/android/build.gradle b/components/rc_log/android/build.gradle
-index 07f6b238..ad813fca 100644
---- a/components/rc_log/android/build.gradle
-+++ b/components/rc_log/android/build.gradle
-@@ -29,6 +29,19 @@ android {
- // has their own build dir)
- test.resources.srcDirs += "${project(':full-megazord').buildDir}/rustJniLibs/desktop"
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/components/support/android/build.gradle b/components/support/android/build.gradle
-index 6555c057..0454acb2 100644
---- a/components/support/android/build.gradle
-+++ b/components/support/android/build.gradle
-@@ -25,6 +25,18 @@ android {
- }
- }
-
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- dependencies {
-diff --git a/components/sync15/android/build.gradle b/components/sync15/android/build.gradle
-index cd9f7c63..48520a94 100644
---- a/components/sync15/android/build.gradle
-+++ b/components/sync15/android/build.gradle
-@@ -25,6 +25,18 @@ android {
- }
- }
-
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- dependencies {
-diff --git a/components/sync_manager/android/build.gradle b/components/sync_manager/android/build.gradle
-index 7593e09c..2f1bc7fb 100644
---- a/components/sync_manager/android/build.gradle
-+++ b/components/sync_manager/android/build.gradle
-@@ -33,6 +33,19 @@ android {
- }
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/components/tabs/android/build.gradle b/components/tabs/android/build.gradle
-index 7593e09c..2f1bc7fb 100644
---- a/components/tabs/android/build.gradle
-+++ b/components/tabs/android/build.gradle
-@@ -33,6 +33,19 @@ android {
- }
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/components/viaduct/android/build.gradle b/components/viaduct/android/build.gradle
-index 842da737..bbffa362 100644
---- a/components/viaduct/android/build.gradle
-+++ b/components/viaduct/android/build.gradle
-@@ -37,6 +37,19 @@ android {
- }
- }
- }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/docs/metrics/logins/metrics.md b/docs/metrics/logins/metrics.md
-index 1a8cce22..bd16ea75 100644
---- a/docs/metrics/logins/metrics.md
-+++ b/docs/metrics/logins/metrics.md
-@@ -4,7 +4,6 @@
- This document enumerates the metrics collected by this project.
- This project may depend on other projects which also collect metrics.
- This means you might have to go searching through the dependency tree to get a full picture of everything collected by this project.
--Sorry about that.
-
- # Pings
-
-@@ -12,21 +11,24 @@ Sorry about that.
-
-
- ## metrics
-+
- This is a built-in ping that is assembled out of the box by the Glean SDK.
-+
- See the Glean SDK documentation for the [`metrics` ping](https://mozilla.github.io/glean/book/user/pings/metrics.html).
-+
- The following metrics are added to the ping:
-
- | Name | Type | Description | Data reviews | Extras | Expiration |
- | --- | --- | --- | --- | --- | --- |
--| logins_store.read_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of read operations performed on the logins store. The count only includes operations triggered by the application, not e.g. incidental reads performed as part of a sync. It is intended to be used together with `read_query_error_count` to measure the overall error rate of read operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)||2020-07-01 |
--| logins_store.read_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during read operations on the logins store, labeled by type. It is intended to be used together with `read_query_count` to measure the overall error rate of read operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)|<ul><li>interrupted</li><li>storage_error</li></ul>|2020-07-01 |
--| logins_store.read_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a read query on the logins store (such as listing all logins, or finding a specific login by id). |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)||2020-07-01 |
--| logins_store.unlock_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The number of times the login store was unlocked. It is intended to be used together with `unlock_error_count` to measure the overall error rate of unlocking the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)||2020-07-01 |
--| logins_store.unlock_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The number of errors encountered when unlocking the logins store, labeled by type. It is intended to be used together with `unlock_count` to measure the overall error rate of unlocking the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)|<ul><li>invalid_key</li><li>mismatched_lock</li><li>storage_error</li></ul>|2020-07-01 |
--| logins_store.unlock_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to open the logins store on startup, or after locking it due to user inactivity. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)||2020-07-01 |
--| logins_store.write_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of write operations performed on the logins store. The count only includes operations triggered by the application, not e.g. incidental writes performed as part of a sync. It is intended to be used together with `write_query_error_count` to measure the overall error rate of write operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)||2020-07-01 |
--| logins_store.write_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during write operations on the logins store, labeled by type. It is intended to be used together with `write_query_count` to measure the overall error rate of write operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)|<ul><li>no_such_record</li><li>id_collision</li><li>interrupted</li><li>invalid_record</li><li>storage_error</li></ul>|2020-07-01 |
--| logins_store.write_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a write query on the logins store (such as adding, updating, or deleting a login record). |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895)||2020-07-01 |
-+| logins_store.read_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of read operations performed on the logins store. The count only includes operations triggered by the application, not e.g. incidental reads performed as part of a sync. It is intended to be used together with `read_query_error_count` to measure the overall error rate of read operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| logins_store.read_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during read operations on the logins store, labeled by type. It is intended to be used together with `read_query_count` to measure the overall error rate of read operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)|<ul><li>interrupted</li><li>storage_error</li></ul>|2021-03-01 |
-+| logins_store.read_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a read query on the logins store (such as listing all logins, or finding a specific login by id). |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| logins_store.unlock_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The number of times the login store was unlocked. It is intended to be used together with `unlock_error_count` to measure the overall error rate of unlocking the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| logins_store.unlock_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The number of errors encountered when unlocking the logins store, labeled by type. It is intended to be used together with `unlock_count` to measure the overall error rate of unlocking the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)|<ul><li>invalid_key</li><li>mismatched_lock</li><li>storage_error</li></ul>|2021-03-01 |
-+| logins_store.unlock_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to open the logins store on startup, or after locking it due to user inactivity. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| logins_store.write_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of write operations performed on the logins store. The count only includes operations triggered by the application, not e.g. incidental writes performed as part of a sync. It is intended to be used together with `write_query_error_count` to measure the overall error rate of write operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| logins_store.write_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during write operations on the logins store, labeled by type. It is intended to be used together with `write_query_count` to measure the overall error rate of write operations on the logins store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)|<ul><li>no_such_record</li><li>id_collision</li><li>interrupted</li><li>invalid_record</li><li>storage_error</li></ul>|2021-03-01 |
-+| logins_store.write_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a write query on the logins store (such as adding, updating, or deleting a login record). |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1597895), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-
-
- <!-- AUTOGENERATED BY glean_parser. DO NOT EDIT. -->
-diff --git a/docs/metrics/places/metrics.md b/docs/metrics/places/metrics.md
-index efdc5723..8f7cb68c 100644
---- a/docs/metrics/places/metrics.md
-+++ b/docs/metrics/places/metrics.md
-@@ -4,7 +4,6 @@
- This document enumerates the metrics collected by this project.
- This project may depend on other projects which also collect metrics.
- This means you might have to go searching through the dependency tree to get a full picture of everything collected by this project.
--Sorry about that.
-
- # Pings
-
-@@ -12,19 +11,22 @@ Sorry about that.
-
-
- ## metrics
-+
- This is a built-in ping that is assembled out of the box by the Glean SDK.
-+
- See the Glean SDK documentation for the [`metrics` ping](https://mozilla.github.io/glean/book/user/pings/metrics.html).
-+
- The following metrics are added to the ping:
-
- | Name | Type | Description | Data reviews | Extras | Expiration |
- | --- | --- | --- | --- | --- | --- |
--| places_manager.read_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of read operations performed on the places store. The count only includes operations triggered by the application, not e.g. incidental reads performed as part of a sync. It is intended to be used together with `read_query_error_count` to measure the overall error rate of read operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)||2020-07-01 |
--| places_manager.read_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during read operations on the places store, labeled by type. It is intended to be used together with `read_query_count` to measure the overall error rate of read operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)|<ul><li>url_parse_failed</li><li>operation_interrupted</li></ul>|2020-07-01 |
--| places_manager.read_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a read query on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)||2020-07-01 |
--| places_manager.scan_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a scan query on the places store. This metric is for queries that we expect to be costly e.g. getBookmarksTree(guid, recursive=True). |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)||2020-07-01 |
--| places_manager.write_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of write operations performed on the places store. The count only includes operations triggered by the application, not e.g. incidental writes performed as part of a sync. It is intended to be used together with `write_query_error_count` to measure the overall error rate of write operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)||2020-07-01 |
--| places_manager.write_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during write operations on the places store, labeled by type. It is intended to be used together with `write_query_count` to measure the overall error rate of write operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)|<ul><li>url_parse_failed</li><li>invalid_bookmark_update</li><li>invalid_parent</li><li>unknown_bookmark_item</li><li>url_too_long</li><li>cannot_update_root</li></ul>|2020-07-01 |
--| places_manager.write_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a write query on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621)||2020-07-01 |
-+| places_manager.read_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of read operations performed on the places store. The count only includes operations triggered by the application, not e.g. incidental reads performed as part of a sync. It is intended to be used together with `read_query_error_count` to measure the overall error rate of read operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| places_manager.read_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during read operations on the places store, labeled by type. It is intended to be used together with `read_query_count` to measure the overall error rate of read operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)|<ul><li>url_parse_failed</li><li>operation_interrupted</li></ul>|2021-03-01 |
-+| places_manager.read_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a read query on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| places_manager.scan_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a scan query on the places store. This metric is for queries that we expect to be costly e.g. getBookmarksTree(guid, recursive=True). |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| places_manager.write_query_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The total number of write operations performed on the places store. The count only includes operations triggered by the application, not e.g. incidental writes performed as part of a sync. It is intended to be used together with `write_query_error_count` to measure the overall error rate of write operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-+| places_manager.write_query_error_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The total number of errors encountered during write operations on the places store, labeled by type. It is intended to be used together with `write_query_count` to measure the overall error rate of write operations on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)|<ul><li>url_parse_failed</li><li>invalid_bookmark_update</li><li>invalid_parent</li><li>unknown_bookmark_item</li><li>url_too_long</li><li>cannot_update_root</li></ul>|2021-03-01 |
-+| places_manager.write_query_time |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The time taken to execute a write query on the places store. |[1](https://bugzilla.mozilla.org/show_bug.cgi?id=1607621), [2](https://bugzilla.mozilla.org/show_bug.cgi?id=1649044)||2021-03-01 |
-
-
- <!-- AUTOGENERATED BY glean_parser. DO NOT EDIT. -->
-diff --git a/megazords/full/android/build.gradle b/megazords/full/android/build.gradle
-index 91d4071e..6da43879 100644
---- a/megazords/full/android/build.gradle
-+++ b/megazords/full/android/build.gradle
-@@ -29,6 +29,19 @@ android {
-
- // Uncomment to include debug symbols in native library builds.
- // packagingOptions { doNotStrip "**/*.so" }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
-diff --git a/megazords/lockbox/android/build.gradle b/megazords/lockbox/android/build.gradle
-index 5f4d5234..be7654ee 100644
---- a/megazords/lockbox/android/build.gradle
-+++ b/megazords/lockbox/android/build.gradle
-@@ -29,6 +29,19 @@ android {
-
- // Uncomment to include debug symbols in native library builds.
- // packagingOptions { doNotStrip "**/*.so" }
-+
-+ // This is required to support new AndroidX support libraries.
-+ // See mozilla-mobile/android-components#842
-+ compileOptions {
-+ sourceCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ targetCompatibility rootProject.ext.build.jvmTargetCompatibility
-+ }
-+
-+ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
-+ kotlinOptions {
-+ jvmTarget = rootProject.ext.build.jvmTargetCompatibility
-+ }
-+ }
- }
-
- configurations {
---
-2.28.0
-
diff --git a/projects/application-services/1651662.patch b/projects/application-services/1651662.patch
deleted file mode 100644
index 0275da2..0000000
--- a/projects/application-services/1651662.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 1818764e69145839ab33a2f885139ea320f2283f Mon Sep 17 00:00:00 2001
-From: Georg Koppen <gk(a)torproject.org>
-Date: Wed, 26 Aug 2020 15:56:49 +0000
-Subject: [PATCH] 1651662
-
-
-diff --git a/build.gradle b/build.gradle
-index 58a4ddae..c6e0be82 100644
---- a/build.gradle
-+++ b/build.gradle
-@@ -4,7 +4,7 @@ buildscript {
- ext.kotlin_version = '1.3.71'
- ext.jna_version = '5.2.0'
- ext.android_gradle_plugin_version = '3.6.0'
-- ext.android_components_version = '47.0.0'
-+ ext.android_components_version = '56.0.0'
-
- ext.build = [
- ndkVersion: "21.3.6528147", // Keep it in sync in TC Dockerfile.
---
-2.28.0
-
diff --git a/projects/application-services/build b/projects/application-services/build
index 5c6b5e0..7c5da2d 100644
--- a/projects/application-services/build
+++ b/projects/application-services/build
@@ -82,8 +82,6 @@ patch -p1 < $rootdir/no-git.patch
# XXX: We don't build the code for Linux for now as this involves additional
# complexity. That's needed for running unit tests later on, though.
patch -p1 < $rootdir/target.patch
-patch -p1 < $rootdir/1651660.patch
-patch -p1 < $rootdir/1651662.patch
[% IF c('var/fetch_gradle_dependencies') %]
# XXX: `assemble` is still not enough to see all fetched dependencies via
# Gradle's --debug. See: tor-browser-build#40056.
diff --git a/projects/application-services/config b/projects/application-services/config
index 336de62..e4ea05d 100644
--- a/projects/application-services/config
+++ b/projects/application-services/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
-version: 61.0.13
-git_hash: 8faa8313bcec03775ddaa194438391c4731eb840 # v61.0.13
+version: 63.0.0
+git_hash: 8e63363359c3d20385ed55f5308d19e321816898
git_url: https://github.com/mozilla/application-services
var:
@@ -10,7 +10,7 @@ var:
# This should be updated when the list of gradle dependencies is changed.
gradle_dependencies_version: 2
# This should be updated when the list of rust dependencies is changed.
- rust_vendor_version: 1
+ rust_vendor_version: 2
# For armv7 we need a different target than the default one we use for
# GeckoView. We set this variable so the Rust project in the `input_files`
# below can set the correct target when built for use in this project,
@@ -24,19 +24,19 @@ input_files:
- project: '[% c("var/compiler") %]'
name: '[% c("var/compiler") %]'
# We need the torbrowser-* targets for Rust, see: #40094.
- - project: fenix-rust
+ - project: fenix-as-rust
name: rust-armv7
target_prepend:
- torbrowser-android-armv7
- - project: fenix-rust
+ - project: fenix-as-rust
name: rust-aarch64
target_prepend:
- torbrowser-android-aarch64
- - project: fenix-rust
+ - project: fenix-as-rust
name: rust-x86
target_prepend:
- torbrowser-android-x86
- - project: fenix-rust
+ - project: fenix-as-rust
name: rust-x86_64
target_prepend:
- torbrowser-android-x86_64
@@ -85,10 +85,8 @@ input_files:
# `cargo vendor vendor` in the `application-services` directory has vendored
# the sources.
- URL: https://people.torproject.org/~gk/mirrors/sources/application-services-vend… c('var/rust_vendor_version') %].tar.bz2
- sha256sum: fd90572db453b5d83bc7dbb50b09d75c5019f09ee747054fdc12f42605d9da69
+ sha256sum: 70e02d587661e5d93dbe30ffa9265fb8b6b66ba8483f3268017ca919623688bc
- filename: no-git.patch
- filename: mavenLocal.patch
enable: '[% !c("var/fetch_gradle_dependencies") %]'
- filename: target.patch
- - filename: 1651660.patch
- - filename: 1651662.patch
diff --git a/projects/nss/config b/projects/nss/config
index 2b5b4d3..fb3550c 100644
--- a/projects/nss/config
+++ b/projects/nss/config
@@ -2,8 +2,8 @@
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
# The required versions for application-services can be found at the respective
# commit in libs/build-all.sh
-version: 3.53.1
-nspr_version: 4.25
+version: 3.56
+nspr_version: 4.28
var:
container:
use_container: 1
@@ -19,7 +19,7 @@ input_files:
project: ninja
- URL: 'https://ftp.mozilla.org/pub/security/nss/releases/NSS_[% c("version") | replace("\\.", "_") %]_RTM/src/nss-[% c("version") %]-with-nspr-[% c("nspr_version") %].tar.gz'
name: nss
- sha256sum: 132ce527f3963e3ae5be3337ed4e1099e160b9402be177b5704de3ed2f5271d2
+ sha256sum: 989b548aa5589d15e31a306218d3c48dbc472b6043b78c6846b5acc54ebfed67
- filename: configure.patch
- filename: config.patch
- filename: bug_13028.patch
diff --git a/projects/sqlcipher/config b/projects/sqlcipher/config
index da78dcd..fb4ae3a 100644
--- a/projects/sqlcipher/config
+++ b/projects/sqlcipher/config
@@ -2,7 +2,7 @@
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
# The required versions for application-services can be found at the respective
# commit in libs/build-all.sh
-version: 4.3.0
+version: 4.4.0
var:
container:
use_container: 1
@@ -18,4 +18,4 @@ input_files:
project: nss
- URL: 'https://github.com/sqlcipher/sqlcipher/archive/v[% c("version") %].tar.gz'
name: sqlcipher
- sha256sum: fccb37e440ada898902b294d02cde7af9e8706b185d77ed9f6f4d5b18b4c305f
+ sha256sum: 0924b2ae1079717954498bda78a30de20ce2a6083076b16214a711567821d148
1
0

[tor-browser-build/master] Merge remote-tracking branch 'gkgl/bug_40115_v6'
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 8efcab700904099020293b1dcaf51bbc681446a0
Merge: a86e9f9 4338d3d
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon Oct 12 02:58:37 2020 +0000
Merge remote-tracking branch 'gkgl/bug_40115_v6'
projects/android-components/40085.patch | 10 +-
projects/android-components/build | 20 +-
projects/android-components/config | 6 +-
projects/android-components/git.patch | 23 +-
.../gradle-dependencies-list.txt | 82 +--
projects/application-services/1651660.patch | 811 ---------------------
projects/application-services/1651662.patch | 22 -
projects/application-services/build | 15 -
projects/application-services/config | 20 +-
projects/application-services/lto.patch | 10 -
projects/binutils/build | 8 -
projects/binutils/config | 6 +-
projects/common/get-moz-build-date | 6 +-
.../how-to-create-gradle-dependencies-list.txt | 11 +
.../{fenix-clang => fenix-as-rust}/43909.patch | 28 +-
projects/fenix-as-rust/build | 65 ++
projects/fenix-as-rust/config | 103 +++
projects/fenix-as-rust/unwind.patch | 162 ++++
projects/fenix-clang/build | 19 +-
projects/fenix-clang/config | 7 +-
projects/fenix/config | 6 +-
projects/fenix/gradle-dependencies-list.txt | 390 +++++-----
projects/geckoview/config | 4 +-
projects/geckoview/gradle-dependencies-list.txt | 274 +++----
projects/geckoview/mozconfig-android-all | 2 +
projects/llvm-project/build | 8 +
projects/llvm-project/config | 5 +
projects/nss/build | 4 -
projects/nss/config | 6 +-
projects/sqlcipher/config | 4 +-
30 files changed, 822 insertions(+), 1315 deletions(-)
1
0

[tor-browser-build/master] Bug 40115: Update components for switch to Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit cb95a1c0b06e2b2e3d596bef70eabb521f5e3f25
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Oct 8 19:09:10 2020 +0000
Bug 40115: Update components for switch to Fenix 82
Update documentation on how to fetch Gradle dependencies
---
projects/common/how-to-create-gradle-dependencies-list.txt | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/projects/common/how-to-create-gradle-dependencies-list.txt b/projects/common/how-to-create-gradle-dependencies-list.txt
index 3435c31..940f810 100644
--- a/projects/common/how-to-create-gradle-dependencies-list.txt
+++ b/projects/common/how-to-create-gradle-dependencies-list.txt
@@ -7,6 +7,17 @@ If the dependencies for `application-services`, `android-components`, or `fenix`
are needed, set the `fetch_gradle_dependencies` flag in their `config` files to
`1`.
+Note: `android-components` and `fenix` require modified `geckoview` and
+`android-components` artifacts to compile successfully. In order to generate the
+necessary dependencies for them you need to point to the respective
+`android-components` and `fenix` commits our patches are based upon, too, first.
+That way the code as Mozilla is shipping it is used for the Gradle dependencies
+fetching which should avoid issues caused by broken builds (it is not guaranteed
+that all the dependencies are already fetched at the point when the build
+breaks). For `fenix` dependencies there is still a manual processing required
+afterwards right now as e.g. our tor-android-service related artifacts are not
+picked up.
+
For the firefox project, comment out the following line in the project's build file:
export GRADLE_MAVEN_REPOSITORIES="file://$gradle_repo"
1
0

[tor-browser-build/master] Bug 40115: Update components for switch to Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 02d15b8a84bbd884e92f8131cbe3db8e9a288ca9
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Oct 8 08:28:09 2020 +0000
Bug 40115: Update components for switch to Fenix 82
Update android-components
We additionally clean up our build script so that we actually only
compile the browser engine code we want to be compiled (the build
breaks otherwise due to GeckoView mismatch which caused us to exempt
geckoview-nightly from getting overwritten by our own earlier on).
---
projects/android-components/40085.patch | 10 +--
projects/android-components/build | 20 ++++--
projects/android-components/config | 6 +-
projects/android-components/git.patch | 23 ++++--
.../gradle-dependencies-list.txt | 82 +++++++++++-----------
5 files changed, 81 insertions(+), 60 deletions(-)
diff --git a/projects/android-components/40085.patch b/projects/android-components/40085.patch
index eb1a29d..5d15305 100644
--- a/projects/android-components/40085.patch
+++ b/projects/android-components/40085.patch
@@ -1,18 +1,18 @@
-From efa26eaf4fba939c3e43b659e5c77a57b22b270a Mon Sep 17 00:00:00 2001
+From 581a25d6dd543e56cb0d3291031818acac28999b Mon Sep 17 00:00:00 2001
From: Georg Koppen <gk(a)torproject.org>
-Date: Fri, 2 Oct 2020 08:48:49 +0000
+Date: Thu, 8 Oct 2020 08:22:52 +0000
Subject: [PATCH] Update glean for tor-browser-build#40085
diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt
-index f4063f7ad..245d14447 100644
+index cb56fbbcf..3d9580f51 100644
--- a/buildSrc/src/main/java/Dependencies.kt
+++ b/buildSrc/src/main/java/Dependencies.kt
@@ -29,7 +29,7 @@ object Versions {
- const val mozilla_appservices = "61.0.13"
+ const val mozilla_appservices = "63.0.0"
-- const val mozilla_glean = "32.1.1"
+- const val mozilla_glean = "32.4.0"
+ const val mozilla_glean = "32.4.1"
const val material = "1.1.0"
diff --git a/projects/android-components/build b/projects/android-components/build
index 035ae48..491bf24 100644
--- a/projects/android-components/build
+++ b/projects/android-components/build
@@ -14,11 +14,10 @@ EOF
[% pc('python', 'var/setup', { python_tarfile => c('input_files_by_name/python') }) %]
tar -C $distdir -xf [% c('input_files_by_name/geckoview') %]
gradle_repo=$rootdir/[% c('input_files_by_name/gradle-dependencies') %]
- # This overwrites the release and beta geckoview .aar files in our
+ # This overwrites the release, beta, and nightly geckoview .aar files in our
# gradle-dependencies directory to be sure that only the one we provide is
- # getting used when building beta/release code. XXX: Find a way to make that
- # work for nightly, too.
- find $gradle_repo -type f \( -name geckoview-[^a-z]*.aar -o -name geckoview-beta*.aar \) -exec cp -f $distdir/geckoview/geckoview*.aar {} \;
+ # getting used when building beta/release code.
+ find $gradle_repo -type f -name geckoview*.aar -exec cp -f $distdir/geckoview/geckoview*.aar {} \;
cp -r $gradle_repo/dl/android/maven2/* $gradle_repo
cp -r $gradle_repo/maven2/* $gradle_repo
cp -r $gradle_repo/m2/* $gradle_repo
@@ -38,7 +37,7 @@ patch -p1 < $rootdir/40085.patch
# XXX: fetching deps for `assembleGeckoBeta -x lint` by using that same target
# results in some missing dependencies for yet unknown reasons. Thus, we use
# `assemble` instead for now.
- gradle --debug -no-daemon assemble
+ gradle --debug --no-daemon assemble
[% ELSE %]
# Prepare Glean dependencies for offline build
tar -xjf $rootdir/glean-parser-[% c('var/glean_parser') %].tar.bz2
@@ -55,8 +54,19 @@ patch -p1 < $rootdir/40085.patch
exit 1
fi
+ # We want to make sure only our code is built. Overwrite engine-gecko code we
+ # don't need. XXX: Take release into account.
+ cd components/browser
+ [% IF c("var/alpha") || c("var/nightly") %]
+ rm -rf engine-gecko/src/*
+ rm -rf engine-gecko-nightly/src/*
+ cp -rf engine-gecko-beta/src/* engine-gecko/src/
+ cp -rf engine-gecko-beta/src/* engine-gecko-nightly/src/
+ [% END %]
+ cd ../../
gradle_args="--offline --no-daemon -Dmaven.repo.local=$gradle_repo"
+ # XXX: Take release into account
gradle $gradle_args assembleGeckoBeta -x lint
gradle $gradle_args publish
diff --git a/projects/android-components/config b/projects/android-components/config
index e42c0c9..e0e10b4 100644
--- a/projects/android-components/config
+++ b/projects/android-components/config
@@ -7,12 +7,12 @@ tag_gpg_id: 1
gpg_keyring: torbutton.gpg
var:
- android_components_version: 57.0.7
+ android_components_version: 60.0.3
torbrowser_branch: 10.0
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 5
+ gradle_dependencies_version: 6
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
# Overwrite `glean_parser` for now to fix #40085.
@@ -20,7 +20,7 @@ var:
targets:
nightly:
- git_hash: 'android-components-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-1'
+ git_hash: '[% project %]-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-1'
tag_gpg_id: 0
input_files:
diff --git a/projects/android-components/git.patch b/projects/android-components/git.patch
index 06638f5..0f510f7 100644
--- a/projects/android-components/git.patch
+++ b/projects/android-components/git.patch
@@ -1,14 +1,14 @@
-From a77b847b6451c598176137b944edf27e6e7202a2 Mon Sep 17 00:00:00 2001
+From 96fc057633a96188e00a55a0abc28a19d9b1dcf9 Mon Sep 17 00:00:00 2001
From: Georg Koppen <gk(a)torproject.org>
Date: Sun, 19 Apr 2020 17:59:16 +0000
-Subject: [PATCH 1/5] git patch
+Subject: [PATCH] git patch
diff --git a/components/support/base/build.gradle b/components/support/base/build.gradle
-index aa4c1b005..4318f1334 100644
+index 094c85e44..1b46c1b84 100644
--- a/components/support/base/build.gradle
+++ b/components/support/base/build.gradle
-@@ -37,7 +37,7 @@ android {
+@@ -38,7 +38,7 @@ android {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
@@ -17,6 +17,19 @@ index aa4c1b005..4318f1334 100644
}
}
+diff --git a/publish.gradle b/publish.gradle
+index 09280f51f..14da5a6c0 100644
+--- a/publish.gradle
++++ b/publish.gradle
+@@ -61,7 +61,7 @@ ext.configurePublish = { groupIdArg, artifactIdArg, descriptionArg ->
+ connection = libVcsUrl
+ developerConnection = libVcsUrl
+ url = libUrl
+- tag = getGitHash()
++ tag = "release build"
+ }
+ }
+ }
--
-2.27.0.rc0
+2.28.0
diff --git a/projects/android-components/gradle-dependencies-list.txt b/projects/android-components/gradle-dependencies-list.txt
index a82d51e..7d24b28 100644
--- a/projects/android-components/gradle-dependencies-list.txt
+++ b/projects/android-components/gradle-dependencies-list.txt
@@ -392,48 +392,46 @@ e3856758c3bb08b7c97ddcd493521c5e0bd0741717c93b292bf1a541513af082 | https://jcent
b51f8867c92b6a722499557fc3a1fdea77bdf9ef574722fe90ce436a29559454 | https://jcenter.bintray.com/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
13009fb5ede3cf2be5a8d0f1602155aeaa0ce5ef5f9366892bd258d8d3d4d2b1 | https://jcenter.bintray.com/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar
1e1beb22ca906209700122b5cacf6f2719324538c5b1e3c27bf91564c8d31dbd | https://jcenter.bintray.com/org/yaml/snakeyaml/1.23/snakeyaml-1.23.pom
-d4ab91af367123a2f1345e8f1a8ff0900bba9e24918479fb3f48459c86799533 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord-forU…
-369a6635f8cb0f6e8e1c9149900903f7deb47c226b67befaae6aedd84c87f724 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord-forU…
-710686da2a7d4a45c8e1a916d7f994730af8ef5851714fd926772976ac1cfc1c | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/61.0…
-58f3553ea92ced0a746b25edbd7ace112a1b95da9f3532c97ad180861011dcc5 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/61.0…
-05bc9d4f437f9f66e82312c25b66c8b98ff5e9763e66852ed9006f409395b0fd | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/61.0.13/…
-245d0d1d208955ccaf8eb024fc656d3a4e58714728f3b808698f839f954f8777 | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/61.0.13/…
-6aaead9440159e47921df63daff7e126a1679d6dd8ffddd8ac27c3038a175089 | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/61.0.13…
-1c3a2f89320adbca73db7654782b05e3dc9a1819dbbed5acea3529bfec8d6834 | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/61.0.13…
-9572bdf0cf07a390cb7fe125a4062827ef18ebfdb9cecc2a229ac7bab1045c24 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/61.0.13/log…
-5625532e701bf641fbec212eb8b389844c5687b656c5ad8309a797e9222e07b7 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/61.0.13/log…
-0ac0b96af98726e54c97b7aa2b52d2205c05e6edd0c8c88279e21798f8c49c41 | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/61.…
-bbc378284b26da3f33309a94c68a8ef8856cc8cce39b41ba203955f747c36729 | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/61.…
-39e1e04e6cae9f1d3d77f028eb5a63340368b58c5c4266b3e9134b25052f3f4f | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/61.0.13/pla…
-3ec1d8818b70dfd0661a6ce8931bd950dc728dc7ef9c407cc76a353198159552 | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/61.0.13/pla…
-cfa58458b1d04eaad4adfc558edc74ffc6d6308edc72243683cd6de2052ea0e0 | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/61.0.13/push-…
-6d08d646a02949933f1ed892386701dc51a38c6ae3ad683c13f461d3e970d39f | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/61.0.13/push-…
-94a93c5b9d321ce72acd07951d0d3f9f645847fceca357f26168d625a8c32365 | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/61.0.13/ru…
-5199a72884153b65b8b1c0cc9f6f3925ee09184be2fac3a5888935b8d64d6a7e | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/61.0.13/ru…
-a318804a6d52b0431dbb23f0643101e56f73d0c04d906f3e75e9373257899b01 | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/61.0.13/syn…
-b8740d75ff31c0402f8b75edd26046ddb1c6dcb28e880366b00227d8ec7e1d4b | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/61.0.13/syn…
-7f43407000d5faa6c409ee2cd69b21c66e1961b1fd151607f6808a6ba07b1405 | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/61.0.1…
-54d1a69f5a00b84bd4bf61ef024e73371b13c2b57c31ebcd6cf7581b18267e3b | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/61.0.1…
-b509686c9eb57b4a89b6ad5482ce99221a41ec8de410427d6a90bc6fc1a8315a | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/61.0.13/tabs-…
-0cfa4b1f7e0da13288a81551aafabb7429990957451937c7c1a747f8c7cf22a4 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/61.0.13/tabs-…
-bea33339616250107cddcb692f182a1ebce4a33b0c9b103351433688587f31d1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/24.0.…
-0f856b0f4cc29a551ffd0e65e7e53ab022a4adc1e8067c67fdcb65cc8cef2fbe | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/24.0.…
-e79c14fd4463a263a481191fcb4332db47cc8abc64e47ca5637c9bd91f7d87e9 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
-f030aabb57b0b6da86e0cdb0be073c190016d3abe6dacb2f070d42c00f269ce0 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
-14205f412218ba5c8c05a1c5713fff564b22436b88d5182ebab959afd1c93f75 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/24.0.…
-f3ce16a38f1b0ef7fbabd2bf25cff54e64a03dcfceb7de96fce7c780e2f58a69 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/24.0.…
-14e92790f570624d65a7e43b00d08d6cefd822d3586b4ec836691b1187504640 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/24.0.0…
-14fdad3d3b00cc5a43c106b723d2448064d111d4c9ba473fbe60515977c9424d | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/24.0.0…
-d69cc02f0b0a8d53bf425e97b8ac3b9ec932b549717750172316325284f8d094 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/24.0.0/…
-7bd257231ba2e0d5aa03e92a4c26f88a09c05e21043abf18dc0f47720e35c415 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/24.0.0/…
-a05be676278b6e176ae8d3801bd4d0ebcf77bc81411f25f1d059b713d5ca9da7 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/24.0.…
-8ca4bae0f6d2b165d6d92ac4af4321bcec0bcd4cd72b0bf9921d8abd966a42f1 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/24.0.…
-dbc48baf933d7e57eaf7f50c1fabb4c45ecabd0a8bd7a21f5533ab05d1b821d8 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
-3fe97c6a7bf5bb85cd85f1b2b732bece663fce5a87e4406f95334b9c866f3e20 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
-e3307e77325cf8e5bd1a4bbfb6f69b1dba208c0cd840ed41438790d6862008da | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/82…
-41d405815f5c5c1df8d8f31d61f6a556d0d6b2bc9e02c0f905f41321da1f7f8a | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/82…
-f654485c119c284c7e8132154753e11089254ef27b47abe880e4830abe0bf804 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
-9aee6e0f93d25b480c8bce9720f6e9ef73d0e866b1eddf68492805f021076bb3 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+3520e710bea6a79317db7ffcba1ab03e54696dc154550d7101220adb329232b5 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord-forU…
+bbfc48708d67383ffeb65ff20416b0477e378edb8319c6e8802c887f12a27333 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord-forU…
+032545e2abad022bac2192d9c11bba9439f954b5c939a1b15d8fb9d78aeb3bc5 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/63.0…
+ede284cc085fde78fb2650cb48a0bb537272cf76425eeeaf76b44309aa8ac1b4 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/63.0…
+d32cf0439223b97424243d4516b044301494f698e17d80c44241e19c97423f5f | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/63.0.0/f…
+9d35aecc1770669c5a253749212a254fca379f40f87eda8e38b53a210ec4bdca | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/63.0.0/f…
+e879e577aba4210949e4b10eb4013f451c270c6d174c61ff518933812ed1cefa | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/63.0.0/…
+642ab85c85ef07bbac292638935f5db527ca457ac98862fe60821a4f246cab8a | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/63.0.0/…
+6dc4870a15a866112e0fd960f9a14be6c65ea1ae7b85f18e0fd08f8001a13881 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/63.0.0/logi…
+06e78f40e5c2db1e6bcb275b5d2b2c26f83b1f096e88273c2c11819f9f4db1e3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/63.0.0/logi…
+e31ec1cc55287f27e6eac65e31aff5306df5667ba35e7e0b90e5530c9d5e2ddc | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/63.…
+68c16f560c397b55e46b6a46791391452f4c4212b720627c440f36c8d25f11a3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/63.…
+9ae67ef84b6b9c1f446f98b4d08e18a82fa8d1222e708ef3043cdc841cc08aaa | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/63.0.0/plac…
+c864a036385df7254d11e8c92fc78cf7e4f18ba64fc175aa7a641eb7eb997b0b | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/63.0.0/plac…
+8f1a4aa9adef85c557f831c65ffb6fe7d3a3b20d09303f753799628f8d138644 | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/63.0.0/push-6…
+b87499e129d7bcfd13ad228ef131b16bd4d83f4566a208555a3004194c9cef9b | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/63.0.0/push-6…
+77a6a0f3ec7b2d9f0dec6476ef8dd930bbd403829bc4f73eca6100b9834f5d7f | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/63.0.0/rus…
+5341bf383990d4cbeb19b6cb972f65f30050ac9c73558ab94018a98fff4811b3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/63.0.0/rus…
+d583c72e82c4dc62c0ee4140e2c7e253e609c890f1c8c7dda5fb7ae726c04479 | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/63.0.0/sync…
+1ff2d3d757cd63f6b240b7ed5604810f70e97bdb5f314f8600a3f443be97cf8e | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/63.0.0/sync…
+83bff9bafc078bb36ac3cf0db9d1ec1fcebc5aefb4ab2f76e5bcdf35752cf5d6 | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/63.0.0…
+7cc2954d065c14e1a7cb49f8a4fb9b330f76c4ebc625d50f8a00d53e5f74bbbe | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/63.0.0…
+53f24189f0cff54e7b4937b6fd1e990b1ff8d9a52e8cc2b254852dabe08d1903 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/63.0.0/tabs-6…
+a35dd95abca6750f590232a723f177c499b98c9640735ab1ab660327a4d0e3b1 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/63.0.0/tabs-6…
+e14c614b65ae4fe6c6d26ce369d523cf1ff837ce697e5e3f47e8cdfa355357f9 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/56.0.…
+e7bd7b2e2013a080bcb3cb9db974185eb28dd87c0594394f951a51ab5d6fcf5d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/56.0.…
+e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/56.0.…
+32acc51221752051a03765ac0bbf26a1da663ba2f7b3fe69ae422d5aac228f81 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/56.0.…
+ae35db5670efe458d3b9646cab337f2f7667becacdb023b599cc62bfa95b59ec | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/56.0.0…
+d87cd2eea092430c4e5a95ff04c3213be89f54aa61c2c7f80fb6548e6dc38bab | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/56.0.0…
+96aeede35017fd79576c5faa1cb41efc8137616e20231b41934999ca711f4407 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/56.0.0/…
+dbd706151fe820ed233792a6773b70efcceb42987c209e27575ef91d4552b8c4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/56.0.0/…
+22934a560b0bc34f01304efbdccc988d2e0fca039ae577894fcec52a7fdfd88e | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/56.0.…
+a2c1e39e5e58f585c2908af2266953b6b43e51f2fabe45e7723bc177c9c49bc0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/56.0.…
+f399bb05c62897849291f58296554844fdcb6dafe7ba355a6bfa61ad9deadeac | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/82.0.…
+cd3e8717a958c523bf06b974e2241a0ef5fac26043bb571ea7ad2d2db630d8c2 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/82.0.…
+593eec7ce486e9ab552f686a4fb4ba9fb96ff8a5ec0f58176fa839e5cca27758 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/83…
+2c2688dc22a1961a99ac7f14185354ba2e9239bb284f19285fc70ddd89b63cd3 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/83…
+b3acbeebbfca2cb7e6d5afa5c23672debd76679752c124e3ae8aa4c5673cdd12 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+e6754e5153344bacbbe164b1012743db0378b7253b259a1baaa140564fa2aa32 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
acfb992486c44ecf3727fac3eb7a4ac69e005e8baae2dd4104208265a947bccd | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
71bf43ad7ea24b261bb1e361c0f1d5642bdc4dab5471ca9628d1b7ad754e84a1 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
93b2f27c919b07b927d764726eb64350cb7d480bac9485b9192881a9d5d10f30 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
1
0

[tor-browser-build/master] Bug 40115: Update components for switch to Fenix 82
by sysrqb@torproject.org 12 Oct '20
by sysrqb@torproject.org 12 Oct '20
12 Oct '20
commit 4338d3dc47a8be42cf20e5f9df841ba3cbdc09cc
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Oct 8 20:49:02 2020 +0000
Bug 40115: Update components for switch to Fenix 82
Update fenix
---
projects/common/get-moz-build-date | 6 +-
projects/fenix/config | 6 +-
projects/fenix/gradle-dependencies-list.txt | 390 ++++++++++++++--------------
3 files changed, 205 insertions(+), 197 deletions(-)
diff --git a/projects/common/get-moz-build-date b/projects/common/get-moz-build-date
index 5932a6f..68c540b 100755
--- a/projects/common/get-moz-build-date
+++ b/projects/common/get-moz-build-date
@@ -11,8 +11,10 @@ if ($version =~ m/^tbb-nightly\.([^\.]+)\.([^\.]+)\.([^\.]+)$/) {
} elsif ($version eq 'testbuild') {
# There is no need for an increasing build date in test builds. Just hardcode
# it to a value that is compatible with the v1 versionCode scheme on Android,
- # see: #34163.
- $date = 20150801000000;
+ # see: #34163. We adjust the date to the new cutoff according to
+ # https://github.com/mozilla-mobile/fenix/pull/14952, following Mozilla.
+ # This should be unproblematic for test builds anyway.
+ $date = 20141228000000;
} else {
my @v = split(/[\.ab]/, $version);
push @v, '0' if @v < 4;
diff --git a/projects/fenix/config b/projects/fenix/config
index 79a1ccf..da9f1d5 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -8,13 +8,13 @@ gpg_keyring: torbutton.gpg
variant: Beta
var:
- fenix_version: 81.1.2
+ fenix_version: 82.0.0b4
torbrowser_branch: 10.0
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 7
+ gradle_dependencies_version: 8
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
# Overwrite `glean_parser` for now to fix #40085.
@@ -22,7 +22,7 @@ var:
targets:
nightly:
- git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-2'
+ git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-1'
tag_gpg_id: 0
variant: Nightly
diff --git a/projects/fenix/gradle-dependencies-list.txt b/projects/fenix/gradle-dependencies-list.txt
index 767330f..9cea599 100644
--- a/projects/fenix/gradle-dependencies-list.txt
+++ b/projects/fenix/gradle-dependencies-list.txt
@@ -878,198 +878,204 @@ d3f7f09989d5b0ce5c4791818ef937ee7663f1e359c2ef2d312f938aad0763da | https://jcent
8f10ffd8df0d3e9819c8cc8402709c6b248bc53a954ef6e45470d9ae3a5735fb | https://jcenter.bintray.com/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.pom
0341395a481bb887803957145a6a37879853dd625e9244c2ea2509d9bb7531b9 | https://jcenter.bintray.com/xpp3/xpp3/1.1.4c/xpp3-1.1.4c.jar
4e54622f5dc0f8b6c51e28650268f001e3b55d076c8e3a9d9731c050820c0a3d | https://jcenter.bintray.com/xpp3/xpp3/1.1.4c/xpp3-1.1.4c.pom
-710686da2a7d4a45c8e1a916d7f994730af8ef5851714fd926772976ac1cfc1c | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/61.0…
-58f3553ea92ced0a746b25edbd7ace112a1b95da9f3532c97ad180861011dcc5 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/61.0…
-05bc9d4f437f9f66e82312c25b66c8b98ff5e9763e66852ed9006f409395b0fd | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/61.0.13/…
-245d0d1d208955ccaf8eb024fc656d3a4e58714728f3b808698f839f954f8777 | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/61.0.13/…
-6aaead9440159e47921df63daff7e126a1679d6dd8ffddd8ac27c3038a175089 | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/61.0.13…
-1c3a2f89320adbca73db7654782b05e3dc9a1819dbbed5acea3529bfec8d6834 | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/61.0.13…
-9572bdf0cf07a390cb7fe125a4062827ef18ebfdb9cecc2a229ac7bab1045c24 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/61.0.13/log…
-5625532e701bf641fbec212eb8b389844c5687b656c5ad8309a797e9222e07b7 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/61.0.13/log…
-0ac0b96af98726e54c97b7aa2b52d2205c05e6edd0c8c88279e21798f8c49c41 | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/61.…
-bbc378284b26da3f33309a94c68a8ef8856cc8cce39b41ba203955f747c36729 | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/61.…
-39e1e04e6cae9f1d3d77f028eb5a63340368b58c5c4266b3e9134b25052f3f4f | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/61.0.13/pla…
-3ec1d8818b70dfd0661a6ce8931bd950dc728dc7ef9c407cc76a353198159552 | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/61.0.13/pla…
-cfa58458b1d04eaad4adfc558edc74ffc6d6308edc72243683cd6de2052ea0e0 | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/61.0.13/push-…
-6d08d646a02949933f1ed892386701dc51a38c6ae3ad683c13f461d3e970d39f | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/61.0.13/push-…
-94a93c5b9d321ce72acd07951d0d3f9f645847fceca357f26168d625a8c32365 | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/61.0.13/ru…
-5199a72884153b65b8b1c0cc9f6f3925ee09184be2fac3a5888935b8d64d6a7e | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/61.0.13/ru…
-a318804a6d52b0431dbb23f0643101e56f73d0c04d906f3e75e9373257899b01 | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/61.0.13/syn…
-b8740d75ff31c0402f8b75edd26046ddb1c6dcb28e880366b00227d8ec7e1d4b | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/61.0.13/syn…
-7f43407000d5faa6c409ee2cd69b21c66e1961b1fd151607f6808a6ba07b1405 | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/61.0.1…
-54d1a69f5a00b84bd4bf61ef024e73371b13c2b57c31ebcd6cf7581b18267e3b | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/61.0.1…
-b509686c9eb57b4a89b6ad5482ce99221a41ec8de410427d6a90bc6fc1a8315a | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/61.0.13/tabs-…
-0cfa4b1f7e0da13288a81551aafabb7429990957451937c7c1a747f8c7cf22a4 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/61.0.13/tabs-…
-5f6bfe0a609eb050c938b08e4342916b35627e85b8e83b8aafd13d41c227ffc3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-f7b960f8403293774e2525baa17a248980bb66a1597d402c3dd994d2e1faffd3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-5a55d12b1fd3d08d00f9cc87cecbc634a634ed5af5874fb5e5c2fb65ae150410 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/57.…
-68fe053675190d3488b60ee9a5472cfe4d3f9eb6cf73251162da5e90aac8e729 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/57.…
-1dd2e8cb21d1d48b72bbec5f8978827f0ec40de5a34b0720441731397094b9d7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-a366a8a7698d5e717445a9cf0cba32c263ab3468538e0039be4fcf71885440d6 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-067543abe32b8c57c50ca08c9250a40563dcd7e8fcc91777beb8f6a3a4280427 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-cd1bef87d7106aac5b269c078e8fc30d924a565176394aa6cfe845e067ab1ee6 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-371257933c6ce25b3c19be1460610ac0379461d898d4fee03e892df707ae2483 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-337de5e2ab9c77bd93e4ccd2036722c4e0019b3c9bace33fb11930880fb1d20f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-28c81a07de6d7d519be2a63fb0d0389aed84b1a7857037ccba9e4aa752d64700 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/57.0.…
-0b4b2f4fb121b2bc8864ebd36864537040f31b3f1a053d77d219e897c998b4cf | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/57.0.…
-31b441240cd7137ee5fbad950ca18fd650f176fc68f469f0c41fa4d60adad324 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/57.0.7…
-2d89061a9312e4d38fa39a232e59d6c16c1587f29c56b34e6e70bd85a77b5f01 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/57.0.7…
-74e46d1d56a4bb2f4cf8275300476e8f55c70770ff50af008a8bdf1a52bfd001 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/57.0.…
-345dbd71f578b2a3615e7a86f7f9d0b1786edfa21ba9ecf294b48e58e7e08a32 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/57.0.…
-39744aaee8b6aa9183f9ec96d5e960fe55f5ada1963756d555283720e6cc4f98 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/57.0…
-d15fae48071c32407bca938c0dfdd6f83679439f27ceee509b27e4952c7058b1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/57.0…
-67451ba96f48cb0fdccfdf645283c593a5117b149dc5ebb527a24f457c7dd0f5 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/57.…
-f65da7fce8bb94dfb55b07bab82677428c2169998e1f7924e132dddb7eb9ace9 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/57.…
-366101efe7a954b82dc9b3cd9e108553871d87d719ccd93c6df3ae2e0d472e04 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/57.0.…
-ead7e197ec517847f725989e7dba3575892114b8c586dbe58d2dcb2cb6edfefe | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/57.0.…
-39a1f741d7fc9760287053c81157caffba1f4a318530ea192d48f45e1f5eaa31 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-e22802553715ef7a43c527ea2e77323ee668b918024de7f933ea8cef352f2ba4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-88bc2639447874d810900dae880c4dc44a1f5db431ce7e6a0f9dfd21fcd79efa | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/57…
-a4b06488f68d6e3ec75661341aa505b4c490a483ee0f7a2da86ddb466148cb8f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/57…
-375062f26e552de415511c0e85f108e847eaa2c353f8f73d79b8fa0a00c0b7fd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-c513510cce5042db56b1a0669b4f907345f2066e508ef607defe93c9a9be4546 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-fbb056d3886cf543b68e70c3a31fc05d8a80d8b581e77c50a9d22ff45de3f81d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/57.…
-c4546168c850a90712a097eff072a00a56bbcd6eccdd7e16d72d1a18cd8dbe20 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/57.…
-389b0ad314e88bbf7b849cc14739a442ddc8916dbf40d2b28d9caa5197dc015d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-cdfd32a01705f0ad3016e997c19464fc62287e1c94e209ecf329f97f78af15dc | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-57fd18d3b217015c39cefedfed5a8231191bd5b25945f4c984c476515260c2c2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/57.0…
-c2296ca92d8e1f2544204c81ac591026b52c7ef41925a88e7e61f2a954c6f035 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/57.0…
-1bad0185cb4fa997f8843b976a42b648047ee42761c3adb32395940dafca1fc1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/57.0.…
-94e14fb5cbc5a337e01577bc4b3b4ff1f44c3ab4c7c837dffe7851369566d7d2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/57.0.…
-bbe901d57b1e16e6ea12f046337e1c3fdef728f0f400e209a33b170eb7069956 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/57.0.7…
-7410a8b18728006b5c46be479778158d788f758897262c93aa4b0f00bb0a1521 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/57.0.7…
-86425d68f958653f4ea53e2ecf18ed6ef33aa85382b90dc4cadfbc45dfe1cef1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/57.0.7…
-34ba5187405ccb4bb19e75d1d84e183e8676447b1e5b597e6bee0c520481207c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/57.0.7…
-4d0677e3e8af4559125239ac5520d5ab2869456b538cdecca69a0b6764a4bbe1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/57.…
-761f9795c8d74c360897732d600402dd6d0a1005f6921ea1638523524cd7640a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/57.…
-2b5332173768e003c5796a74ca6373187271317cd988e2436710903369f457ac | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/57.0.7…
-12aa92e9393c5cc3fa81490d5c4b5c8e80de2383505f3ce1223f789d9b3f394d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/57.0.7…
-21617e6dac8fedac91066962b5c43acc3d7d3aa8c110970eee6a59730f26b59f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/57…
-3f36cd15046a97ab9d34fb6684d28014fc0dbb50ab81d1995e9d43757fee10ba | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/57…
-5cecb07810e9904bc1d78e5128713a1f0395d68bb23a9e54d5fc439712d97822 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/57.…
-6b1263f6962e6a487a9b97e72b20fda7ca1869eb74cf55a6f9b32f87943c81b3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/57.…
-b752b3cfb542ef545e5a2ba85b73866571f7cc023ef33c5837c023e2f1cde688 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-d4411f4c8e5fd49ff1083512b97c421c6ef861b0a061cd3b20f18b09c23f613a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-9e2da0973a44b6b1479c49002f12f654bcf436840bd958e1ade106179256b884 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/57…
-fca2019cbbb6821f2d44d8763d045abcfd2439b764f29427ebc00a0eef30bc76 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/57…
-824a14ce95db32a21650e7a52089c6a831b721d98692da2c149ea1796f725a98 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/57.0…
-fed6ad3e564104cf17f17a43f87d1662500688d3f610e98d77c8f8535db9227b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/57.0…
-f6626406a628a813a98cd0161f3272e0889f8826d86af808d16b23e794e02c66 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/5…
-eb910185a541f3422e0571a1d20f4b4a6b4a7709c178c239442178ac3f939eb8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/5…
-78851fa5778ab76e45d499e0779c5b09e2b29459013a62021f14effd8b5204d0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-b34b93fa11ac22d1db753cd3c518bf31e03a9062fe7f6c404904b23ff16d5281 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-ec99a44f4790c551af40bc0adfe9ff935cd8bb4b67e126fa5aa749a4c9433ba6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-4150a564658e1230e6c81d2327847adbf1597f67b9fba3ed92456ad58b871835 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-d91b5fba16cd43cb3dd2668f16d7d657eea7b4ee32375e8c14a6904b13faabe0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-e193afc5ea1d8339e607d76e399267dfcf5921a240bbd966f8cfa18fc70b311e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-7f5d6a32e28afbfcc05909e3c8679fef539220f45c6acc0ee74c8ee068ecc5b1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/5…
-41406c0c0c2c6e4337b075cdf59ce10c03de08be48d08040d05fe25b7b42487e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/5…
-fa6355a90e334f6f4d25ef07b056e16ad25403f399e9a90bc63ec5f0028da6af | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-43b41bb4fed4b93e92a9930e5262636dd24c04b31691de52bf9584c4f45049a4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-c75f368f829f04a7e4b8f673083c58306d5b2ca228af78fee30c86d8f3ceed05 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/57.0…
-b81499285e515e50c54287d36b92a9b33c9201aa578641e9393aa55c4a5ccb05 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/57.0…
-d94918b35844bbea31ad66b2a26d26723818ffc6380a0881d8a3445029405a1e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/57.0…
-06eec5063ab9361b66ceda0bcc21b0a2c0929d32fe4518712d59100218e8c744 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/57.0…
-1b2ccbddf93c88284c73b4b3644b92ff70f2b62ddc936157821353167ca9cb42 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/57.0.…
-fdd63ea6bda72b44e432906e2304ffc7380c5f4877bed4c8e35cf9826586c1f5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/57.0.…
-7e730c67df298467356c24f1f9968f893b3971b64f7e965557ce073b34d4fba4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-c64ae220671560cddb0188ffac0991da68b5a28ad15ad01eb0f5817f3625ca9d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-7270e4b638e2cf663dcba72fa63aa39d923b0c620fda0d2ef8631675b51f7f10 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/57.…
-4a0d4f65cd5f05c95add0cf5ecbd313eba3a37e5f8bff54c982287149692c198 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/57.…
-ab7652da779fbea7b951c44664452a3e221bf955ccbe4e1863b88d344963ab40 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/57.0.7…
-7f49ae36500da9891717262879fd15ec5dcccdbf6c5ce743a22290da2a81a97a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/57.0.7…
-d912b000fcbe608593782b6417c37c0088e37766eb00557a2bcc68f21183ce9c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/57.0.7/…
-9694dc1a3e2938f9d046961ec1238ef477b4aa25d38a88fde07d3a2a0c0baa07 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/57.0.7/…
-af4fe332e5ccad6c4c4770fd5f25d1a2fa2d56985231c25dd44ae02c570861bc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/57.0.7/f…
-625bdd392457d25677fc0dd9940917560b6d37280c0117808e6049147c06d2ac | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/57.0.7/f…
-1d8d3981e1984e95204542a87bb65518873bfe424dbeabfe1707a18d2fafeb78 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-86a2672781f511990eca224650742e42649593c900056398ca673e910e5fb60c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-1f757d03617812c059cbb023b9fa320d9c6dba739b66aacb46c02f0339a46547 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/57.0…
-c5c88d057fb615d1424a3b364ae73acd6b010d8e0e87cd5be40a70ac263d7892 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/57.0…
-f8677e5e50c30f186ac473c694b2263adcc5b0d8cec10fdf94e65d46c4804516 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/57.…
-070fee0ec8b421ed8a8e94759760bc64d4e91d0d863bc253657c4ae0c3550a6f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/57.…
-e048d388d04e3883e55b5cb9c5a50c43b6e3ad7c11659be487929417612afef5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/57.0.…
-fc097fc9fe3da557816bd3f8f00b3fd30b536db5cbbb1ae5b8bfacd6648081e3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/57.0.…
-c9582aef3b2ebc06dba329937afcf5ffce378ed02c5debc7eb58b68cda46f75a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-d0feabe1a6b1bdb880f71e2074a29a032fd95af4225f19927fb8af1cf35d5bd4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-b75b1b868f3772e9fef9ce40d5912823f90116caaec7dc46540fdac333f4256e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-fe1616612cf5968a2923886178fce630e89659bdcaddf2089c47d6c5c72ae8ad | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-5072447af10b43e49519e447c5f20e683aed8b1527552d89b1edefd13dac6dc1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-9598822e46f859cebc277b3c1948413e24beb8bf6026b1de7f22706c5ac20eb3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-d628ae3063a463210d2dacd96f8b8b6b4649d99a2fd3f3b85618e1d1b2538e5d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/57.0.7…
-1fe9ddd87e90343cd9f431a8889d42a48031844e7e013951894e94a16ed73996 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/57.0.7…
-ccf0ba0db3bb4f2de02e90a941fc3f62005726298a7facb81fa53ab060c5748c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/57.…
-964eaaac18eb8e7ab61030341d5b45ecdf82423925edaf7705d85e23780dc990 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/57.…
-e0cffe2492ebc285afad787478e1dfcc582580990b080a5960702e12973c7427 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/5…
-046bec45ba286f2c384e252a99568cb17ed17f64466831763cc82b5de27001e3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/5…
-b5721d1284a1cda0fed50837933294a5e95665fb34f34c1e37156263e3d82750 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-046bdd3fa92ae885de544832724cc6b459ede604ff07ccb84df0a77c63cb0d56 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-74e7c382c163887910091e7916f7fce51cf160134f0ca54d34e3311f80fda908 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/5…
-d44c3d42f0289e960da61db34f067d74f99d926b9d76cb1b93fcc5d4bd1f721d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/5…
-9d182c04f3f4a84ba43fadefae9e2592890c6e03988b997f8f143f78420ddcfd | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-4c014cc610f97b1d5f75fcced17b3b21e09b5b168d4cb858c52e0622075b9bc6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-297bdc9f2cc52bade3efeeff663ab04ab88980940b46d08033bde449f950da6f | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/57.0.7/li…
-74da322dfcebaf0a9529d8e202362fe5acad370c026c4119c8c6bb447d4b9a5d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/57.0.7/li…
-270ea22bc03b84f7b1b6fcb87b2eeb3e31c8e8e8b207ea962db0a9d643579589 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/57.…
-f438e466565d15dd291f1f8697138ade8d801395be824a168c27bcc577fe4652 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/57.…
-72eb146d4a42333f6721613c6c2856c35bff3eecbceddec7dd150adcde18853a | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
-2ebe0b1a9ca60fb2d870ad7ce1eec7b27935889db22e8a030640969078834a3d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
-5464597fd0116f6e799464e42f4a4c90bb746919936138dc3e376b65a3d1a36e | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-cc14c4a0c4a311bf7eec092e5d5c4e5784c09be38ebb2d2b8d32c3d0c5c94bef | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-a8daa7620dd417ce28dc2ef6733bee2d31724d3781c1267c38e1da21e43b43b3 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/5…
-0a4c9a6c6972d0e54a858ec65caade3ae899810fa35475e5d5a5f743ebd03964 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/5…
-502ef281da0b593b459f6797187300c5399a3b705878759605e2033ff2508b05 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/57.0.7/li…
-ac061c9f14d2ee8466e1b022bb461f9458662a5efabcc38ae9c0ed6b935ac701 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/57.0.7/li…
-809bfd11357b6dcc11c606e5bc183fbdaa2e13606a30c597c99a0b0e4d5281cb | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-eb0c9cbf164cd587d5a8cf0a7d5432c66c6f9f0d0de3e54dd584094b7d9be726 | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-a483fbb43dbaa8790e21f51e9cfdc919b363f649983bbae807bfb6aeeea780ce | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
-87c6cefc40a5dca772adb723e923363301d5d8843d40e60ac59ea5f270c3a88a | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
-1282c766aa075bf869c4e9e12703e8b76c5f24642f291f41b03e609a4a055f40 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-cffbfc708ed4d4a7c3c6cd61499a128731728fe6f639c5789ebd684053059c8b | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/57.0.…
-939501a31ee560e321aee2a71241a7d916a619d79fa1215392ea3856378bd063 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/57.0.…
-1407414df4c5439c970e1423106a599c818946c3536d9865caee45a8377d2115 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/57…
-905886d366c0bc916f24c2ce16629f0d695856944612cc077e579e1571448aac | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/57…
-f719ea6a50d05349c4f1a0104c55e1c449e8297f3203ab56b5492d9d1be0868a | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-d4e6cb9371aa715f13ff74e25a4cf95f3c6f5a50c1af9b1d6d71236a050319e3 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-4233fd5a2f5089e5d7a835b4047cd4bc83ea3843fba979514a75ad483811c155 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/57.0.7…
-8f6f373efd8131a67016cd80e541539ab1c2b6909e62b69f270210ae7ac6b559 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/57.0.7…
-3834748245baf1c50a8a31e01910ef3f22c734e449eb7c428a3590dfeda7c0c0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/57.0…
-2c8fa07ad5665bb715e55a10de02804958551b160c25e72527230ff6776611e3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/57.0…
-019a10b6717f62aa708e3fd7935452ecae6fedfddea440a087c079ebc75a0c7e | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/57.0.7/…
-b8f4b5d7098d1c1793b4ab4aa8b64a8fb44a72a4c6aa0a479b7beb618f5870f4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/57.0.7/…
-7aeadd17067d28d9aa92c18803854163b549f6d264edba6f01b22607a6027636 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/57.0…
-a37bd3ed957ac72178ceb3a011767bdd6e85c8808a1a5351af9f0dda465db440 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/57.0…
-bc0ed8e77330270375e6fe4d5793453d40d2d4f77aeae9110b4134a98cf539b6 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/5…
-6a0af6487e59ec6a4fa9cd7be5307d99accb2ec26abe2ffa0f0523cfbd8e8502 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/5…
-d49f35d74db7a107ffc6b76d3a3b24a69c559bb11406878841115f0116002b88 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/57…
-099db076785fd75ad48bfe002f08c4a0d464c0f7acc19eaaf245faca909771f9 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/57…
-21e97bac96209bdc2eebb8fc939b2ed7f8bd3e2f720d772fae45f2cdb40f589d | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/57.…
-dbf86d3bd39983e494d7d07cafe3eab30ea699fff532aeb66d661876f2e1c243 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/57.…
-58795c3c6c1dad701cfec9f8dbf4f715eb381481e8d20778107b0bfe95209d04 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-718fef4b5d48cd9f22720c120e7cd036a58ef552ff10e6438ab63f1cc9d6e7e4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-8802d772db48d526b8241afe2eb9bc238be4e8e099a25b6cc1cbc0f573dfd85f | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/57.0.7…
-cb813dea89e6baabd045245a59654a306e48482c60178e376cd44378a63a4c01 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/57.0.7…
-22934a560b0bc34f01304efbdccc988d2e0fca039ae577894fcec52a7fdfd88e | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/57.0.…
-c0a54cf4564d67f2666627daece7e2fee02974c6f7a0ccdee71cf124851d0bfe | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/57.0.…
-1782bab8651c49971b0c3e29ee8c7c15539db31fb1ad712e574e858e3727f182 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-3e27886e88f21ca74be523b7f8ab61a5f79d7151448d1ca267d5045abee2f454 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-4173b499da754c1f90c75deaccd164f6baf61b01718e59084c267f167cf327f6 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-0f5a7bd36f3e9e64f6dafdc9d49591c57f23cc74c4227118a7d2a957219ddd1f | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-5d22777052629c0f0ce689a8ffb051bd83103f4ba7a558d2b2645df1b0e0c5a5 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/57.…
-96bdc3f268716c76989bb9df297b4cc0636fcbf74917e281948c1d07342c3e3f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/57.…
-f0b20de68ace4793cf51d8ecd39bba6356134fa290ec8a3c457ed3e1e100f47f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/57.0.7/ui…
-27bbdc571ffce43119cba811798899ab561efb6419e35ebcec36cea22069619e | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/57.0.7/ui…
-52728c6033d046cda35f0e37e6cc1b62105ec9e19e263d74603ef73d938ec8bb | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/57.0.7/ui-…
-58706d0c3aa601059b10f31eb33d7dbb7381c8294a8ca5f3b53445eee4cc78b4 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/57.0.7/ui-…
-81eb04ab0931b48c0e49782528f197ef2a09ba8480db02b1463f7d56931f858b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/57.0.…
-f548e10c1d76cd6e2b137fb66aa89d3a5f9241beaff9b3e54807ce44818a5f4c | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/57.0.…
-465a618f0723991c14f9b7569289c889572f534a47f98819250585df1dbdcfa0 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/57.0.7/u…
-8637659f0ffc8618cabbdeee8c0cac17478681df821fae3de50b8dfe6360d9c0 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/57.0.7/u…
-dbc48baf933d7e57eaf7f50c1fabb4c45ecabd0a8bd7a21f5533ab05d1b821d8 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
-3fe97c6a7bf5bb85cd85f1b2b732bece663fce5a87e4406f95334b9c866f3e20 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
-f654485c119c284c7e8132154753e11089254ef27b47abe880e4830abe0bf804 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
-9aee6e0f93d25b480c8bce9720f6e9ef73d0e866b1eddf68492805f021076bb3 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+032545e2abad022bac2192d9c11bba9439f954b5c939a1b15d8fb9d78aeb3bc5 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/63.0…
+ede284cc085fde78fb2650cb48a0bb537272cf76425eeeaf76b44309aa8ac1b4 | https://maven.mozilla.org/maven2/org/mozilla/appservices/full-megazord/63.0…
+d32cf0439223b97424243d4516b044301494f698e17d80c44241e19c97423f5f | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/63.0.0/f…
+9d35aecc1770669c5a253749212a254fca379f40f87eda8e38b53a210ec4bdca | https://maven.mozilla.org/maven2/org/mozilla/appservices/fxaclient/63.0.0/f…
+e879e577aba4210949e4b10eb4013f451c270c6d174c61ff518933812ed1cefa | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/63.0.0/…
+642ab85c85ef07bbac292638935f5db527ca457ac98862fe60821a4f246cab8a | https://maven.mozilla.org/maven2/org/mozilla/appservices/httpconfig/63.0.0/…
+6dc4870a15a866112e0fd960f9a14be6c65ea1ae7b85f18e0fd08f8001a13881 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/63.0.0/logi…
+06e78f40e5c2db1e6bcb275b5d2b2c26f83b1f096e88273c2c11819f9f4db1e3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/logins/63.0.0/logi…
+e31ec1cc55287f27e6eac65e31aff5306df5667ba35e7e0b90e5530c9d5e2ddc | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/63.…
+68c16f560c397b55e46b6a46791391452f4c4212b720627c440f36c8d25f11a3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/native-support/63.…
+9ae67ef84b6b9c1f446f98b4d08e18a82fa8d1222e708ef3043cdc841cc08aaa | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/63.0.0/plac…
+c864a036385df7254d11e8c92fc78cf7e4f18ba64fc175aa7a641eb7eb997b0b | https://maven.mozilla.org/maven2/org/mozilla/appservices/places/63.0.0/plac…
+8f1a4aa9adef85c557f831c65ffb6fe7d3a3b20d09303f753799628f8d138644 | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/63.0.0/push-6…
+b87499e129d7bcfd13ad228ef131b16bd4d83f4566a208555a3004194c9cef9b | https://maven.mozilla.org/maven2/org/mozilla/appservices/push/63.0.0/push-6…
+77a6a0f3ec7b2d9f0dec6476ef8dd930bbd403829bc4f73eca6100b9834f5d7f | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/63.0.0/rus…
+5341bf383990d4cbeb19b6cb972f65f30050ac9c73558ab94018a98fff4811b3 | https://maven.mozilla.org/maven2/org/mozilla/appservices/rustlog/63.0.0/rus…
+d583c72e82c4dc62c0ee4140e2c7e253e609c890f1c8c7dda5fb7ae726c04479 | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/63.0.0/sync…
+1ff2d3d757cd63f6b240b7ed5604810f70e97bdb5f314f8600a3f443be97cf8e | https://maven.mozilla.org/maven2/org/mozilla/appservices/sync15/63.0.0/sync…
+83bff9bafc078bb36ac3cf0db9d1ec1fcebc5aefb4ab2f76e5bcdf35752cf5d6 | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/63.0.0…
+7cc2954d065c14e1a7cb49f8a4fb9b330f76c4ebc625d50f8a00d53e5f74bbbe | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/63.0.0…
+53f24189f0cff54e7b4937b6fd1e990b1ff8d9a52e8cc2b254852dabe08d1903 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/63.0.0/tabs-6…
+a35dd95abca6750f590232a723f177c499b98c9640735ab1ab660327a4d0e3b1 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/63.0.0/tabs-6…
+3569255cb18fff3f799e6521720ccb7dc4a412ab83e1d7aca3bdca6fad8f1027 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+478d28c987da7b1bb8989c1db6ae9b2b0e519283ebbbac8e6a10afac1a0bbca3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+5a55d12b1fd3d08d00f9cc87cecbc634a634ed5af5874fb5e5c2fb65ae150410 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/60.…
+f1dfd98b310b1dfcf772c598ea4572a972a378b7f5f71d71c0fa0cd0ef49f028 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/60.…
+49cc036903e7b5799252ed989caf97adb2a6c4f8d9b9b8a012f2035d12fe84a3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+bd0fe834222e9a8ae77c1517a55b7ef08715eb9eb392e198241ec1713876b7aa | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+b4c6325fd88a6080dfac551af9707c22e27afddc2cee1e9fba6e42883869e99d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+027b527366f46940129c4966d8ad6f95805651952d3d9a50ccad7b58bb5101fe | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+a37f9320175c3c96d2ba9b8da547dca7defbee046bf2e3adcb9807963f0756c2 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+2e9856fe1bed153d742cee6fc0b5c58b151564a5c5c7673ba55449338058a2a8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+f2b927980297900cb2910761e8926ac9517faebda8609d31036b4c644b752177 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+055716a1ed7a07cfa08bcbe6dfb58fa570a65d8d00341be222a0b21a503e9c92 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+75e5452e43fbaef1ae07be138c639ee2be85928c33c1ec7ffe1047c1da02bbeb | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/60.0.…
+27a222b3ca468ebbe77c26ec0b3d259c4fc92a604a4ec01e8c8f7effd0e106b2 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/60.0.…
+86949f0dc6d964057a4162ceefa169fc425403b5074a301736baa2bba1ad6566 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/60.0.3…
+a2f1e668cfa5642d24ef168a2bf52ec09e775e5daf14f9f424d510ddbefa8090 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/60.0.3…
+fd065b7b9209e523cfc6b3eb685778f053fcb4e0ef3d5390a68903990ef7c691 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/60.0.…
+2eec5ac351cfcee69dcbe4b05d013b1bf43d8b8aa853682fcd795a41c25035b5 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/60.0.…
+39744aaee8b6aa9183f9ec96d5e960fe55f5ada1963756d555283720e6cc4f98 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/60.0…
+8c077c60efb7256ff9a5add2624383b4b703eccbf8d0a6f3018d269d7063bffd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/60.0…
+e206d19fcb47c2d9f98ea4ebdca4b0a4a0517629d9f5d8eb3c72085525a010d1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/60.…
+97777d194534a9aa267418035e6f1b4f5fe05c6491a3d9b39fcbc00912ead45c | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/60.…
+94871d34df2d15beb47ea8cf178e8802d55f0ca03fe09814734e07cbc839180d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/60.0.…
+4842abd88ca53d819ebb533136d9f65ab48f1ed0b09c9391b55f1d80aae20f1a | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/60.0.…
+79848bec697404b89e7838d55ba2136e01e0db844b84f69dee252603f0d18a90 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+7ef035141083181154ccfe625c7131d115bc4dfe55401ec4fcf94ee12f18cef8 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+7432e41b22511521c4263e0039ddc15a91f03bbf939347ea25c3ff66fde80b40 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/60…
+a0012b9076d9803c98ede8988b99d4007c3ed727cdac643d447807c1b44387ad | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/60…
+375062f26e552de415511c0e85f108e847eaa2c353f8f73d79b8fa0a00c0b7fd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+004b8c72b26a90a2e513074e260d09b3e53244460466e2455e4ccf361bd631ba | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+10d28f515394bdcc93a243be500b6117b201d3d9a70b4c9409a151e1f8dd8348 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/60.…
+0593e9b741246959ee4d9a4cb8f177c033b8ce0bdf2a75db7f4b4d452e8532ce | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/60.…
+4142885233661bd8f0e3e3a648aa23e4af40a10bfb7a97c6223b67e656896155 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+2d6189ffada7e15553cd6111ac4d80fae5da07865896478948e89677861ac0eb | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+a6246c20178c8bb8d3ed48e14c52a8da24fbb3761f0ebd9cd6cda52eb17515da | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/60.0.3…
+1de8fa3179f75693ba62cd4e49f95660db706001b482ac0304c22f1f4aedc938 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-base/60.0.3…
+5f10227f0d6fffcaea9ebbb042636824ca03509f3141e175e35ae45dd48cdd8a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/60.0…
+be0177ea4066b83739c201a22f953eff7fac34ca2d7f0c072c5899241321012f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/60.0…
+3b6eded63f2a4b159c0f29be490898a875f1ba6df9292b2dd75cc792a24005e8 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/60.0.…
+b36cf05db9aa81e37cea3b6be8c43649343108f4230ea971144ebd9c844b5e22 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/60.0.…
+bbe901d57b1e16e6ea12f046337e1c3fdef728f0f400e209a33b170eb7069956 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/60.0.3…
+498ff231f767d878e699860f51f67051648280e58a15d4a17263eef0bd822214 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/60.0.3…
+86425d68f958653f4ea53e2ecf18ed6ef33aa85382b90dc4cadfbc45dfe1cef1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/60.0.3…
+96b379cea5b92004088f574a9fc80a2e818357c109eb1f28b085c4eb281fbe3c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/60.0.3…
+4d0677e3e8af4559125239ac5520d5ab2869456b538cdecca69a0b6764a4bbe1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/60.…
+6a46a3ac954179516b4188852a260bed5a42d27e9d5342e7e1c90b747622003d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/60.…
+e76f29897587f2bf3b6bccd96f9c2c89056ea657b9a1090a24d9cdcda9a1d337 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/60.0.3…
+8c9efb63a8890d21f52cbcd8ebfa2a55e6500902852824d42f7be8b501856e13 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/60.0.3…
+21617e6dac8fedac91066962b5c43acc3d7d3aa8c110970eee6a59730f26b59f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/60…
+43c428e6ba07b06b967ab64763c19d376e80fdd33ba42605a11538bed36db12e | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/60…
+5cecb07810e9904bc1d78e5128713a1f0395d68bb23a9e54d5fc439712d97822 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/60.…
+e4b817155a1ac9ddd0575580a9a8d34a37737c048f0cab06428e95fc54f7b230 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/60.…
+b752b3cfb542ef545e5a2ba85b73866571f7cc023ef33c5837c023e2f1cde688 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+b284b45a1c217b79ca388e9bfc899a2479b7372cd28131ea41517e6bf91a8336 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+153e1f73de016dba173b90ab537adb25abc86e1f3467781fa3f081da8dd2969f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/60…
+d7df599cbb74e34ac2fab626efc7aa27821f3d3c867b4a43df743fe698058150 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/60…
+094231988a119ea344dfbd269a13ec8debb70e7453c38c27f8ca3d736b210e2f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/60.0…
+bdc002d93bcee53538df12e66dbca6ffbb2c8435690b0fe9de73161032631c09 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/60.0…
+bcc3a37ae37d3205d62657198b17e2999ba5ed6adcb7f60f1a2bd538d2c5acd9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/6…
+5eedf3372fcaf07595d129c8c59283599f43061964230a18c82e977ef6c21def | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/6…
+bf76e549c452d7de4bb5ef1c6d06819f02efed0108f82f03285ae764022ef4ef | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+01c84014dbf7b2d66ed19f84162e9ebfe0777337927704f1d7326f37ed4689ff | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+19126da4f3d292b8893a8a747c687aa2c1b08127a4d5b2e40160773d16f0f66c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+73a25bc35f136fb8809d2a1cf7b078044d19e463c6a9af525b5f1e88e4c358ea | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+d91b5fba16cd43cb3dd2668f16d7d657eea7b4ee32375e8c14a6904b13faabe0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+158a3508b94e5e154676fa30e4674f37af3721561651351833d2c2b2fec54042 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+09fd5789da6e1f8bab33c0107d49b03ad96afd68bcadd8e812739d93f1221279 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/6…
+2ab5f435b9e77e9ad022adf0c483153485901957ba2c25a8b8c7468eab57fa9f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/6…
+fa6355a90e334f6f4d25ef07b056e16ad25403f399e9a90bc63ec5f0028da6af | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+bc1df4f3683c2071b765d646a78fd68e7f550be2094e5c5cb9384cf9d8c0f0c9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+c75f368f829f04a7e4b8f673083c58306d5b2ca228af78fee30c86d8f3ceed05 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/60.0…
+a31786f3c1d0c60bf8031446de26ce84c1ddf9e40608895c1af4222efdb417fe | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/60.0…
+d94918b35844bbea31ad66b2a26d26723818ffc6380a0881d8a3445029405a1e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/60.0…
+7a8c81734d80033279b7d0fbc8bf6669639ae905d9c8828e299960bf768f0331 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/60.0…
+1b2ccbddf93c88284c73b4b3644b92ff70f2b62ddc936157821353167ca9cb42 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/60.0.…
+fd6d335ead5dcea4681dc6ce06d60329687811f27d998c4a1cbe52c739661356 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/60.0.…
+acb9379654dc34409247bf3c86a3648f6b96c5a4a4dfcb62bc41c3a9290f1b93 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+2e568aa39f1dec01245bc9699f4ea821ef6ef1c577979d8e504130d47d0f8ec4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+c4c77bce16b60c54995c8d1937c94bbdd394b6cd92bf4ee07e178c518cbbac63 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/60.…
+5cb141b12ea77ab75b8f1722d981ca21b25c8413301c24cb2ba1f35c5dea68b8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/60.…
+bbacc3caa7171bfed8ee6bd173fb30d62230007a5f1bc731f55712400ffd51a8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/60.0.3…
+e22c7b328a767b107900e1831ba81bdd3947465b4d6c41ca4d2779f6017ef213 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/60.0.3…
+53ab8940ad46f36bf7821acc857873260b6bacfa6870502f4f7c492adbece06a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/60.0.3/…
+c93289a7b444107d833c208b5da053e7b89d0e32bcae1da0c13cf06d7e5616ee | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/60.0.3/…
+d85a49a2f8bc9183afbab3e38c4414116eda62fb736eb58d7002a032551bb67c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/60.0.3/f…
+7c84ae608cee9a492f7be96aade74f919bf292ea41fae7b2891008498bb3fdf4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/60.0.3/f…
+439d3d21a246cfcb7c5a9a9b253494f9a335ac0e3096ff3d4a2c5a89a27fa0fa | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+55d62ea9731167f40eadc3bdfccb8c5f4b2ea9aed448dc9a69ff63d0c344bce2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+b1b73d773f021f7ff45c1170be739b4757bbfc111dd6928cc3c8af77f91727ad | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
+0a1f9d73594f6487cd657fe69ce36347f2ff5568187bacba34bd9be505a5d994 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-recentlyclo…
+1f757d03617812c059cbb023b9fa320d9c6dba739b66aacb46c02f0339a46547 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/60.0…
+1cf13c6fe00f32809eb7fe9db183a4a88a7635d5c8f515bab1747b09ec2661cf | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/60.0…
+712b8ad6e1266a9462b72eaedc58abc4c9ddc1e994c566296d86a03b74f9c9b9 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/60.…
+6d5cf2c46e35dbe3bcb16dfc12cd677fc56e0bff9803bc71bf5cb6e92925c30e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/60.…
+e048d388d04e3883e55b5cb9c5a50c43b6e3ad7c11659be487929417612afef5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/60.0.…
+75638874ff7c139eefa1e6c773d7c17e1e5fe059bf2147e5dae9a7006235d048 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/60.0.…
+af4ab0aebca2119625b566a95855a46c36f11be91961e1df1e969401d8e51948 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+af061e8a92eb64a5c41cea85a036dc5503738374e0ff8905bb3919ff7aa68429 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+4688f4cb15515cb04a554be1d8aacfa3301ddfce7a7fe8737155af750572b1fe | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+704462f1b3cc0a4e910195a560e6f13946cca06efad0d01039283117b194642f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+5072447af10b43e49519e447c5f20e683aed8b1527552d89b1edefd13dac6dc1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+1afdab347cde590b2f23227727da25090736ae883522bef4200b581b0bda174d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+9b60e265b41bd12c9389c116e8a9cd19533dace7d232a9b4e6114d1294ebc9f1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/60.0.3…
+fee651f7daca7a40291f2a36c612838d412b4e53fc48d3cf1576220a3e98f69f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/60.0.3…
+ccf0ba0db3bb4f2de02e90a941fc3f62005726298a7facb81fa53ab060c5748c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/60.…
+0c1d1ae4de63a8f57b9a2bb7355f68352685f946f39e2e83be7f6a743ca07a46 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/60.…
+bb09050fb45ee08e28f31ef7c3f30d335c2bcb85b8b1ef5c4329e83fffbbf2ca | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/6…
+a1b96e1c06c48cb1c840b49cc7e2a19badfb06c04a78377d30f0049200ab3724 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/6…
+b5721d1284a1cda0fed50837933294a5e95665fb34f34c1e37156263e3d82750 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+7cd62548e04d3531974522f1d7649979f465a693ccd14b82b94b40125f26e3ac | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+585ce686d2b451317a2a30339e01356889ebb952733a5e2ddf9ed66f897860f8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/6…
+067213278384f7c9130152e018d0ec5ecb751b375285ba832ffa7a38cb6c367c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/6…
+7cf3bdcf0cf9e171b10220608dc0d825230d091765641ec03f8cfea63d20722e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+be3303da8f8328e2fbfe6324b2f5c4d131b673140cd2d34ee2c29c881fef310b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+78ded295a320870c2cbcfc49fc403b6797e51ac87cdf89badda2c1482b6943c7 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/60.0.3/li…
+73c425ae36e045f5beca7c834c5c20730f1f6955bd142be091b771d482fd7706 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/60.0.3/li…
+270ea22bc03b84f7b1b6fcb87b2eeb3e31c8e8e8b207ea962db0a9d643579589 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/60.…
+e7aec4834db4232ed39722cbec67eb320bd3ead8ff3532e066ffdd1104dfbcbc | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/60.…
+586fb1308eb6c2887db7f98fc4fcba6da78dec2666da837b24ca7bd814c2a1a9 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
+edbc71f6af2e50d1b1cd5402fce9038f4e40fc979c097c57f71a76e8277a6f93 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
+d7b4e218a3b491822d8d267714c6660474b833fa53a71aa3cbf6e319d97916c0 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+7368eb9bc9100bcab677fb8aeeb3070491b970786ae9dd58e0c6e1029502c32c | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+a8daa7620dd417ce28dc2ef6733bee2d31724d3781c1267c38e1da21e43b43b3 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/6…
+427992366c70c17bd0e104af7844d7202a66dab557636ceb05c17cca69235d36 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/6…
+502ef281da0b593b459f6797187300c5399a3b705878759605e2033ff2508b05 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/60.0.3/li…
+9d3c8e01a446e775a8f49a60bc17d98a97cd5250c9599b4365d06e46fed3a718 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/60.0.3/li…
+809bfd11357b6dcc11c606e5bc183fbdaa2e13606a30c597c99a0b0e4d5281cb | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+d28fa186bbfe01b9b13d381106351a4d4e0d3d1804f13bcb5bb03b0fb48f98f5 | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+a483fbb43dbaa8790e21f51e9cfdc919b363f649983bbae807bfb6aeeea780ce | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
+5b66ea60c9ba4ba2330ff8ae94ad4e76dd8a76b850a813c32935103942cbb0eb | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
+4b0cc8be12b074a7c89d8b899eeea3e7f088097ac687603e771669dde49febae | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+e07f1ec5d1282753d658f017f8a29f5a9be28b9517f563abfd5c3301258e397b | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/60.0.…
+b1dc3cdf7e299fa04981efe7cf80ebc0c6e20da384491fbf52945f7b28545ad8 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/60.0.…
+f2d7424928531aeaf448863c2cdf70b539993533a5f3835ed311d8fcfe26c8b5 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/60…
+7a961bad965f2ab67d603228b1d24ffae1c1670ed5587099ac8098c9f5cc9ea8 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/60…
+f719ea6a50d05349c4f1a0104c55e1c449e8297f3203ab56b5492d9d1be0868a | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+dd6782dc52f5a0b1781469fffa9749762d6af293516167e1e805f4e1f6883605 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+b861ecf681b6abda6e4aba4f0abcee4e18fc3ca30e050dc0dc05be9091eebcbc | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/60.0.3…
+0f525b86e744d7916aa052a976d3e7866e5136fa6fdc5f389fd0bc259730b1c3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/60.0.3…
+3834748245baf1c50a8a31e01910ef3f22c734e449eb7c428a3590dfeda7c0c0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/60.0…
+b4f6452846fa73aac06be98331b5c6b270b7c8be6f83203beffd0c3224c7d68f | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/60.0…
+5fd89e26bb25aa32cfbad4a4120cbbd16231eae6011acfe361f0036f65882d5c | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/60.0.3/…
+b29f268ffbf976e9255917f23c9a6d1266642ede4e3f6d05a60fcdd9f63ea932 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/60.0.3/…
+7aeadd17067d28d9aa92c18803854163b549f6d264edba6f01b22607a6027636 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/60.0…
+b056bb2844c063bd13db281d21d5b6c7d872f1627a9cf6113c5ee3deae22e274 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/60.0…
+8835dba84af71fff8660ae6eb510b2644e07c2a1a13fbdd121a20f51bd878803 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/6…
+5ffedf2cf48ba1461da82d760fd5e783a294f4c36675ee28b136d7a9b41d32cb | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/6…
+d49f35d74db7a107ffc6b76d3a3b24a69c559bb11406878841115f0116002b88 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/60…
+fb7c875dbc706b3d51e571e13ae79b7a03279bd29fc78134488517d31a59b73d | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/60…
+1d551a1971becbb0076c050bb743ee766ed3bf31eba0898d0db1cfb93f476712 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/60.…
+d92200f3b91f29301e024601b54cbe47a69cd26b1c7a798b9c760d0a015f2495 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/60.…
+81588915fc875315edeca54d5f90be4bd09ba68d46fcdbc58fc38f9a25be4aea | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+19d06cd5755fa378f128312c6dac2f91fba09db1e7a69f74d76c5af155ce0cbb | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+8802d772db48d526b8241afe2eb9bc238be4e8e099a25b6cc1cbc0f573dfd85f | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/60.0.3…
+50d033ab99e4df26f2ab4a5f5499dafef6db8504610f0d7f2e3cfd458654ac5c | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/60.0.3…
+c77c8c7ada29bf001cb2a370a6af859f85ff377f6e68043eaceca9f95d504f3e | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/60.0.…
+6a26d0e9d34faf83e8baa32272fa148694b8f956387d6f02ac41fe69e9edcfe3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/60.0.…
+1782bab8651c49971b0c3e29ee8c7c15539db31fb1ad712e574e858e3727f182 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+c0f8a4c700f38963176b25b8ac2e68df0fcae39306560f993cc438594eccd6d5 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+e6af0275a3257b0ca35b94d7eb8125a7947c44198f99692b5d2da843383ec22d | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+17ca6498dbc7056b29f291de2c5476f2f74c280064ccc131c50ed11f9be02b35 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+e371391df8db6b373af079e7f47d6e849b13cf74bd924fa1f970b055c3327c6f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/60.…
+aed0c88bcd7448ae4829592822746d608ecf0ba5f079cb123a1aa38bfde9809b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/60.…
+f0b20de68ace4793cf51d8ecd39bba6356134fa290ec8a3c457ed3e1e100f47f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/60.0.3/ui…
+1ce40ae69e0f3b99a9421d7f795f3ad46966721a453d70f655718b1fd724ebf6 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/60.0.3/ui…
+52728c6033d046cda35f0e37e6cc1b62105ec9e19e263d74603ef73d938ec8bb | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/60.0.3/ui-…
+d3fa8646ab6410b3c96da456417ec623997cfe285e13693299540446e6908c5b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/60.0.3/ui-…
+81eb04ab0931b48c0e49782528f197ef2a09ba8480db02b1463f7d56931f858b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/60.0.…
+8f9aea7ddd081dbb02c3b1a4fe7f5f9b3a536351943e21ea71496f14f3198299 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/60.0.…
+465a618f0723991c14f9b7569289c889572f534a47f98819250585df1dbdcfa0 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/60.0.3/u…
+d2e74420703c19a703b7775e5c97575ee5fd551acb423b913fc5bd8f71a1bf30 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/60.0.3/u…
+f399bb05c62897849291f58296554844fdcb6dafe7ba355a6bfa61ad9deadeac | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/82.0.…
+cd3e8717a958c523bf06b974e2241a0ef5fac26043bb571ea7ad2d2db630d8c2 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/82.0.…
+b3acbeebbfca2cb7e6d5afa5c23672debd76679752c124e3ae8aa4c5673cdd12 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+e6754e5153344bacbbe164b1012743db0378b7253b259a1baaa140564fa2aa32 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
acfb992486c44ecf3727fac3eb7a4ac69e005e8baae2dd4104208265a947bccd | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
71bf43ad7ea24b261bb1e361c0f1d5642bdc4dab5471ca9628d1b7ad754e84a1 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
93b2f27c919b07b927d764726eb64350cb7d480bac9485b9192881a9d5d10f30 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
1
0
commit a86e9f9c6335d0f064c394e74f0395b32c1b6c7e
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon Oct 12 02:24:36 2020 +0000
Fold in 10.0a8 Changelog
---
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 152 +++++++++++++++++++++
1 file changed, 152 insertions(+)
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 89eb162..f36b366 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,155 @@
+Tor Browser 10.0a8 -- October 8 2020
+ * Android
+ * Update Fenix to 81.1.2
+ * Update Tor to 0.4.4.5
+ * Update NoScript to 11.0.46
+ * Bug 10394: Let Tor Browser update HTTPS Everywhere
+ * Bug 11154: Disable TLS 1.0 (and 1.1) by default
+ * Bug 16931: Sanitize the add-on blocklist update URL
+ * Bug 17374: Disable 1024-DH Encryption by default
+ * Bug 21601: Remove unused media.webaudio.enabled pref
+ * Bug 30682: Disable Intermediate CA Preloading
+ * Bug 30812: Exempt about: pages from Resist Fingerprinting
+ * Bug 32886: Separate treatment of @media interaction features for desktop and android
+ * Bug 33534: Review FF release notes from FF69 to latest (FF78)
+ * Bug 33594: Disable telemetry collection (Glean)
+ * Bug 33851: Patch out Parental Controls detection and logging
+ * Bug 33856: Set browser.privatebrowsing.forceMediaMemoryCache to True
+ * Bug 33862: Fix usages of createTransport API
+ * Bug 33962: Uplift patch for bug 5741 (dns leak protection)
+ * Bug 34125: API change in protocolProxyService.registerChannelFilter
+ * Bug 34338: Disable the crash reporter
+ * Bug 34377: Port padlock states for .onion services
+ * Bug 34378: Port external helper app prompting
+ * Bug 34401: Re-design Connect screen on Android
+ * Bug 34402: Re-design Network Settings Screen on Android
+ * Bug 34403: UI changes for "Only Private Browsing Mode" on Android
+ * Bug 34405: Re-design about:tor on Android
+ * Bug 34406: Re-design onion indicators for Android
+ * Bug 34407: Review all Fenix menu items
+ * Bug 40001: Start Tor as part of the Fenix initialization [fenix]
+ * Bug 40001: Generate tor-browser-brand.ftl when importing translations [torbutton]
+ * Bug 40002: Ensure system download manager is not used [android-components]
+ * Bug 40002: Fix generateNSGetFactory being moved to ComponentUtils [torbutton]
+ * Bug 40003: Adapt code for L10nRegistry API changes [torbutton]
+ * Bug 40004: Fix noscript message passing for Firefox 79 [torbutton]
+ * Bug 40005: Modify WebExtensions Menu [android-components]
+ * Bug 40006: "Only Private Browsing Mode" on Android [fenix]
+ * Bug 40006: Add Security Level plumbing [android-components]
+ * Bug 40007: Port external helper app prompting [android-components]
+ * Bug 40007: Move SecurityPrefs initialization to the StartupObserver component [torbutton]
+ * Bug 40008: Style fixes for 78 [torbutton]
+ * Bug 40009: Change the default search engines [android-components]
+ * Bug 40010: Verify Sentry is disabled [fenix]
+ * Bug 40011: Verify Leanplum is disabled [fenix]
+ * Bug 40011: Hide option for disallowing addons in private mode [android-components]
+ * Bug 40012: Verify Adjust is disabled [fenix]
+ * Bug 40013: Timestamp is embedded in extension manifest files [android-components]
+ * Bug 40013: Verify InstallReferrer is disabled [fenix]
+ * Bug 40014: Verify Google Ads ID is disabled [fenix]
+ * Bug 40014: Set correct default Security Level [android-components]
+ * Bug 40015: Modify Fenix Home Menu [fenix]
+ * Bug 40016: Modify Fenix Settings Menu [fenix]
+ * Bug 40016: Update Snowflake to discover NAT type [tor-browser-build]
+ * Bug 40017: Audit Firefox 68-78 diff for proxy issues [tor-browser]
+ * Bug 40018: Disable Push functionality [fenix]
+ * Bug 40019: Ensure missing Adjust token does not throw an exception [fenix]
+ * Bug 40023: Rebase Tor Browser esr78 patches onto 80 beta [tor-browser]
+ * Bug 40026: Implement Security Level settings [fenix]
+ * Bug 40028: Implement bootstrapping and about:tor [fenix]
+ * Bug 40029: Rebase Fenix patches to 81.1.0b1 [fenix]
+ * Bug 40030: Install https-everywhere and noscript addons [fenix]
+ * Bug 40031: Hide Mozilla-specific items on About page [fenix]
+ * Bug 40032: Disallow Cleartext Traffic [fenix]
+ * Bug 40034: Disable PWA [fenix]
+ * Bug 40038: Review RemoteSettings for ESR 78 [tor-browser]
+ * Bug 40035: Maybe hide Quick Start in release [fenix]
+ * Bug 40039: Implement Bridge configuration from Connect screen [fenix]
+ * Bug 40040: Investigate why bootstrapping fails [fenix]
+ * Bug 40041: Implement Network settings [fenix]
+ * Bug 40042: Timestamp is embedded in extension manifest files [fenix]
+ * Bug 40044: Fixup Connect, Onboarding, and Home screens [fenix]
+ * Bug 40048: Disable various ESR78 features via prefs [tor-browser]
+ * Bug 40054: Search engines on mobile Tor Browser don't match the desktop ones [fenix]
+ * Bug 40058: Hide option for disallowing addon in private mode [fenix]
+ * Bug 40061: Do not show "Send to device" in sharing menu [fenix]
+ * Bug 40063: Do not sort search engines alphabetically [fenix]
+ * Bug 40064: Modify Nighty (and Debug) build variants [fenix]
+ * Bug 40066: Remove default bridge 37.218.240.34 [tor-browser-build]
+ * Bug 40066: Enable Snowflake on Beta [fenix]
+ * Bug 40066: Update existing prefs for ESR 78 [tor-browser]
+ * Bug 40067: Make date on Fenix about page reproducible [fenix]
+ * Bug 40069: Add helpers for message passing with extensions [tor-browser]
+ * Bug 40072: Bug 40072: Disable Tracking Protection [fenix]
+ * Bug 40073: Repack omni.ja to include builtin HTTPS Everywhere [tor-browser-build]
+ * Bug 40073: Disable remote Public Suffix List fetching [tor-browser]
+ * Bug 40082: Let JavaScript on safest setting handled by NoScript again [tor-browser]
+ * Bug 40091: Load HTTPS Everywhere as a builtin addon [tor-browser]
+ * Bug 40095: Review Mozilla developer notes for 79-81 (including) [tor-browser]
+ * Bug 40096: Review closed Mozilla bugs between 79-81 (inclusive) for GeckoView [tor-browser]
+ * Bug 40097: Rebase browser patches to 81.0b1 [tor-browser]
+ * Bug 40098: Initialize torbutton for Geckoview and make sure its features work as expected in Fenix [tor-browser]
+ * Bug 40112: Check that caching stylesheets per document group adheres to FPI [tor-browser]
+ * Bug 40119: Update Fenix dependencies for 81.1.2 [fenix]
+ * Bug 40124: Implement Network settings [fenix]
+ * Bug 40125: Geckoview: Expose security level interface [tor-browser]
+ * Bug 40172: Security UI not updated for non-https .onion pages in Fenix [tor-browser]
+ * Bug 40173: Initialize security_slider in GeckoView at 4 [tor-browser]
+ * Translations update
+ * Build System
+ * Android
+ * Bump Go to 1.14.7
+ * Bug 33556: Add TBB project for android-components
+ * Bug 33557: Update Android toolchain for Fenix
+ * Bug 33558: Update tor-onion-proxy-library to use toolchain for Fenix
+ * Bug 33559: Update tor-android-service to use toolchain for Fenix
+ * Bug 33561: Update OpenSSL to use Android NDK 20
+ * Bug 33563: Update Tor to use Android NDK 20
+ * Bug 33564: Update ZSTD to use Android NDK 20
+ * Bug 33626: Add project for GeckoView
+ * Bug 33670: Update rbm.conf to match NDK 20
+ * Bug 33801: Update Go project to use new Android toolchain
+ * Bug 33833: Update Rust project to use Android NDK 20
+ * Bug 33927: Add tor-browser-build project for fenix
+ * Bug 33935: Fenix's classes5.dex files are not reproducible
+ * Bug 33973: Create fat .aar for GeckoView
+ * Bug 34011: Bump clang to 9.0.1
+ * Bug 34012: Bump cbindgen to 0.14.3
+ * Bug 34013: Bump Node to 10.21.0
+ * Bug 34014: Enable sqlite3 support in Python
+ * Bug 34101: Add tor-browser-build project for application-services
+ * Bug 34163: testbuild target is broken for Tor Browser 64 bit
+ * Bug 34187: Update zlib to use Android NDK 20
+ * Bug 40010: Add nss project for application-services [tor-browser-build]
+ * Bug 40011: Add sqlcipher for application-services [tor-browser-build]
+ * Bug 40029: Clean-up all projects to remove fennec bits we don't need for fenix [tor-browser-build]
+ * Bug 40031: Add licenses for kcp-go and smux. [tor-browser-build]
+ * Bug 40039: Remove version_path in nss project [tor-browser-build]
+ * Bug 40040: Wire geckoview, application-services, android-components, and fenix together [tor-browser-build]
+ * Bug 40054: Adapt build.android script in tor-browser project for fenix [tor-browser-build]
+ * Bug 40055: Integrate building Glean in offline mode [tor-browser-build]
+ * Bug 40057: Include translations into build process in the fenix world [tor-browser-build]
+ * Bug 40058: Build Fenix with tor-android-service and tor-onion-proxy-library [tor-browser-build]
+ * Bug 40060: Set Fenix Version Name in build [tor-browser-build]
+ * Bug 40061: Remove Android SDK 28 [tor-browser-build]
+ * Bug 40065: Bump debootstrap-image ubuntu_version to 20.04.1 [tor-browser-build]
+ * Bug 40068: Bump versions for Fenix 81.1.0b1 dependencies [tor-browser-build]
+ * Bug 40072: Tor libraries are missing in final .apk after switch to 81.1.0b1 [tor-browser-build]
+ * Bug 40076: Use our android-components repo on GitLab [tor-browser-build]
+ * Bug 40078: Bump Gradle version for Fenix to 6.5.1 [tor-browser-build]
+ * Bug 40084: Generation of AndroidManifest.xml is not reproducible [tor-browser-build]
+ * Bug 40085+40086: classes.dex files are not reproducible in Fenix [tor-browser-build]
+ * Bug 40087: Deterministically add HTTPS Everywhere into omni.ja [tor-browser-build]
+ * Bug 40088+40117: Use MOZ_BUILD_DATE for extension manifest timestamps [tor-browser-build]
+ * Bug 40093: Ensure application-services libs do not include libc networking symbols [tor-browser-build]
+ * Bug 40094: Aarch64 fenix rust cross-compilation fails [tor-browser-build]
+ * Bug 40095: The pattern for the apk variable in build.android is matching too much [tor-browser-build]
+ * Bug 40101: Pick up Fenix 81.1.1 [tor-browser-build]
+ * Bug 40105: Enhance Gradle dependency script (sort deterministically and exclude .module files) [tor-browser-build]
+ * Bug 40106: Support using geckoview as well [tor-browser-build]
+ * Bug 40108: android-components does not bundle tooling-glean-gradle archive, only .pom file [tor-browser-build]
+ * Bug 40113: Nightly Android should use Nightly branding [tor-browser-build]
+
Tor Browser 10.5a1 -- September 22 2020
* Windows + OS X + Linux
* Update Firefox to 78.3.0esr
1
0

[tor-browser/tor-browser-82.0b7-10.0-1] fixup! squash! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 11 Oct '20
by gk@torproject.org 11 Oct '20
11 Oct '20
commit 4d3fdb05b66beab2d69765d55e048860ad4daade
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Oct 11 09:25:01 2020 +0000
fixup! squash! TB4: Tor Browser's Firefox preference overrides.
---
browser/app/profile/000-tor-browser.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index bbfa6c1b9e5a..319cb3e7d872 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -341,7 +341,7 @@ pref("corroborator.enabled", false);
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
// tor-browser#40140.
#ifdef XP_WIN
-pref"media.rdd-opus.enabled", false);
+pref("media.rdd-opus.enabled", false);
#endif
// Onboarding.
1
0

[tor-browser/tor-browser-78.3.0esr-10.5-1] fixup! squash! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 11 Oct '20
by gk@torproject.org 11 Oct '20
11 Oct '20
commit 222c33a8112afb1e8f333a52b37013467d546878
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Oct 11 09:25:01 2020 +0000
fixup! squash! TB4: Tor Browser's Firefox preference overrides.
---
browser/app/profile/000-tor-browser.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 2c196761fef1..1218ebfe3d49 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -355,7 +355,7 @@ pref("corroborator.enabled", false);
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
// tor-browser#40140.
#ifdef XP_WIN
-pref"media.rdd-opus.enabled", false);
+pref("media.rdd-opus.enabled", false);
#endif
// Onboarding.
1
0

11 Oct '20
commit 0ed3fcfc32acb88d1f7f98c26c91db90d305e481
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Oct 11 09:28:46 2020 +0000
Pick up tor-browser -build4
---
projects/firefox/config | 2 +-
rbm.conf | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 8c73b0d..8db58d5 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build3'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build4'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
diff --git a/rbm.conf b/rbm.conf
index 8ece479..0530620 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -25,7 +25,7 @@ buildconf:
var:
torbrowser_version: '10.0.1'
- torbrowser_build: 'build1'
+ torbrowser_build: 'build2'
torbrowser_incremental_from:
- 10.0
project_name: tor-browser
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-2] fixup! squash! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 11 Oct '20
by gk@torproject.org 11 Oct '20
11 Oct '20
commit c99864079708fa7d937b479b0f926dc1e489f0fa
Author: Georg Koppen <gk(a)torproject.org>
Date: Sun Oct 11 09:25:01 2020 +0000
fixup! squash! TB4: Tor Browser's Firefox preference overrides.
---
browser/app/profile/000-tor-browser.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index e1e79f15a5ea..6bc759bdf30b 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -354,7 +354,7 @@ pref("corroborator.enabled", false);
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
// tor-browser#40140.
#ifdef XP_WIN
-pref"media.rdd-opus.enabled", false);
+pref("media.rdd-opus.enabled", false);
#endif
// Onboarding.
1
0

[tor-browser-build/maint-10.0] Bug 40051: Remove SOURCE_DATE_EPOCH patch
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit b587acfc0ab9f08fed9ed158a282b384add54212
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 15:21:32 2020 +0000
Bug 40051: Remove SOURCE_DATE_EPOCH patch
---
projects/openssl/build | 3 ---
projects/openssl/config | 2 --
projects/openssl/use-SOURCE_DATE_EPOCH.patch | 25 ----------------------
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 2 ++
4 files changed, 2 insertions(+), 30 deletions(-)
diff --git a/projects/openssl/build b/projects/openssl/build
index 63ea178..f8c4cbf 100644
--- a/projects/openssl/build
+++ b/projects/openssl/build
@@ -13,9 +13,6 @@ export CC='gcc -m32'
ln -s $clangdir/bin/clang $clangdir/bin/x86_64-apple-darwin-cc
export CC="cc [% c("var/FLAGS") %]"
[% END -%]
-[% IF c("var/windows") -%]
- patch -p1 < $rootdir/use-SOURCE_DATE_EPOCH.patch
-[% END -%]
export SOURCE_DATE_EPOCH='[% c("timestamp") %]'
./Configure [% c('var/configure_opts') %]
make
diff --git a/projects/openssl/config b/projects/openssl/config
index 8ed29db..45b4fd6 100644
--- a/projects/openssl/config
+++ b/projects/openssl/config
@@ -31,6 +31,4 @@ input_files:
- name: '[% c("var/compiler") %]'
project: '[% c("var/compiler") %]'
- URL: 'https://www.openssl.org/source/openssl-[% c("version") %].tar.gz'
- - filename: use-SOURCE_DATE_EPOCH.patch
- enable: '[% c("var/windows") %]'
sha256sum: 5c9ca8774bd7b03e5784f26ae9e9e6d749c9da2438545077e6b3d755a06595d9
diff --git a/projects/openssl/use-SOURCE_DATE_EPOCH.patch b/projects/openssl/use-SOURCE_DATE_EPOCH.patch
deleted file mode 100644
index 65533bb..0000000
--- a/projects/openssl/use-SOURCE_DATE_EPOCH.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From a1625535fc5127ab8e94043280ef7a983bcfc161 Mon Sep 17 00:00:00 2001
-From: Nicolas Vigier <boklm(a)torproject.org>
-Date: Thu, 5 Mar 2020 20:39:05 +0100
-Subject: [PATCH] If SOURCE_DATE_EPOCH is defined, use it for copyright year
-
-Using the date from SOURCE_DATE_EPOCH instead of the current date makes
-it possible to reproduce a build that was built on a different year:
-https://reproducible-builds.org/specs/source-date-epoch/
----
- util/mkrc.pl | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/util/mkrc.pl b/util/mkrc.pl
-index 6762bc4a56..e15c071af7 100755
---- a/util/mkrc.pl
-+++ b/util/mkrc.pl
-@@ -46,7 +46,7 @@ if ( $filename =~ /openssl/i ) {
- $vft = "VFT_APP";
- }
-
--my $YEAR = [localtime()]->[5] + 1900;
-+my $YEAR = [localtime($ENV{SOURCE_DATE_EPOCH} || time())]->[5] + 1900;
- print <<___;
- #include <winver.h>
-
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 8d3cdb9..2bf6fb5 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -14,6 +14,8 @@ Tor Browser 10.0.1 -- October 13 2020
* Windows + OS X + Linux
* Bump Go to 1.14.9
* Bump openssl to 1.1.1h
+ * Windows
+ * Bug 40051: Remove SOURCE_DATE_EPOCH patch
Tor Browser 10.0 -- September 22 2020
* Windows + OS X + Linux
1
0

[tor-browser-build/maint-10.0] Tor Browser 10.0.1 release preparations
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit 822525f34a96ed175071197c8bd0e7b997650074
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 03:02:19 2020 +0000
Tor Browser 10.0.1 release preparations
Version bumps and Changelog update
---
projects/firefox/config | 2 +-
projects/go/config | 4 ++--
projects/openssl/config | 4 ++--
projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt | 17 +++++++++++++++++
projects/tor-browser/config | 4 ++--
projects/tor-launcher/config | 2 +-
rbm.conf | 6 +++---
7 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 189b02e..8c73b0d 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build2'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build3'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
diff --git a/projects/go/config b/projects/go/config
index 24ab09a..02525e7 100644
--- a/projects/go/config
+++ b/projects/go/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 1.14.7
+version: 1.14.9
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
var:
@@ -118,7 +118,7 @@ input_files:
enable: '[% ! c("var/linux") %]'
- URL: 'https://golang.org/dl/go[% c("version") %].src.tar.gz'
name: go
- sha256sum: 064392433563660c73186991c0a315787688e7c38a561e26647686f89b6c30e3
+ sha256sum: c687c848cc09bcabf2b5e534c3fc4259abebbfc9014dd05a1a2dc6106f404554
- URL: 'https://golang.org/dl/go[% c("var/go14_version") %].src.tar.gz'
name: go14
sha256sum: 9947fc705b0b841b5938c48b22dc33e9647ec0752bae66e50278df4f23f64959
diff --git a/projects/openssl/config b/projects/openssl/config
index 91b0f1c..8ed29db 100644
--- a/projects/openssl/config
+++ b/projects/openssl/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 1.1.1g
+version: 1.1.1h
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
var:
@@ -31,6 +31,6 @@ input_files:
- name: '[% c("var/compiler") %]'
project: '[% c("var/compiler") %]'
- URL: 'https://www.openssl.org/source/openssl-[% c("version") %].tar.gz'
- sha256sum: ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46
- filename: use-SOURCE_DATE_EPOCH.patch
enable: '[% c("var/windows") %]'
+ sha256sum: 5c9ca8774bd7b03e5784f26ae9e9e6d749c9da2438545077e6b3d755a06595d9
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index ce725b3..8d3cdb9 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,20 @@
+Tor Browser 10.0.1 -- October 13 2020
+ * Windows + OS X + Linux
+ * Update NoScript to 11.1.1
+ * Update Tor Launcher to 0.2.26
+ * Bug 31767: Avoid using intl.locale.requested pref directly
+ * Bug 40013: End of year 2020 Fundraising campaign [torbutton]
+ * Bug 40016: Fix onion pattern for LTR locales [torbutton]
+ * Bug 40139: Update Onboarding icon for 10.0 [tor-browser]
+ * Bug 40148: Disable Picture-in-Picture until we investigate and possibly fix it [tor-browser]
+ * Translations update
+ * Windows
+ * Bug 40140: Videos stop working with Tor Browser 10.0 on Windows
+ * Build System
+ * Windows + OS X + Linux
+ * Bump Go to 1.14.9
+ * Bump openssl to 1.1.1h
+
Tor Browser 10.0 -- September 22 2020
* Windows + OS X + Linux
* Update Firefox to 78.3.0esr
diff --git a/projects/tor-browser/config b/projects/tor-browser/config
index 8bb1a67..e9a17d5 100644
--- a/projects/tor-browser/config
+++ b/projects/tor-browser/config
@@ -77,9 +77,9 @@ input_files:
enable: '[% c("var/snowflake") && ! c("var/android") %]'
- filename: Bundle-Data
enable: '[% ! c("var/android") %]'
- - URL: https://addons.cdn.mozilla.net/user-media/addons/722/noscript_security_suit…
+ - URL: https://addons.cdn.mozilla.net/user-media/addons/722/noscript_security_suit…
name: noscript
- sha256sum: 3b768fa45f94bed9c58962bd7c0c11bc431e639aeedb2e91c7d8303df5fc84ae
+ sha256sum: bdc99f11a75ea050934b692c8717c363493d5f717397ba9ef35b1a2e9078516c
- filename: 'RelativeLink/start-tor-browser.desktop'
enable: '[% c("var/linux") %]'
- filename: 'RelativeLink/execdesktop'
diff --git a/projects/tor-launcher/config b/projects/tor-launcher/config
index f8828db..0c9698a 100644
--- a/projects/tor-launcher/config
+++ b/projects/tor-launcher/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 0.2.25
+version: 0.2.26
git_url: https://git.torproject.org/tor-launcher.git
git_hash: '[% c("version") %]'
gpg_keyring: torbutton.gpg
diff --git a/rbm.conf b/rbm.conf
index c1332dd..8ece479 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -24,10 +24,10 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '10.0'
- torbrowser_build: 'build3'
+ torbrowser_version: '10.0.1'
+ torbrowser_build: 'build1'
torbrowser_incremental_from:
- - 9.5.4
+ - 10.0
project_name: tor-browser
multi_lingual: 0
build_mar: 1
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-2] fixup! Bug 10760: Integrate TorButton to TorBrowser core
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit bc9d508fdd0f600d762544662f007c213e33ea33
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Sat Oct 10 15:30:11 2020 +0000
fixup! Bug 10760: Integrate TorButton to TorBrowser core
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 88640a08733b..dd24967b1bb8 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 88640a08733bd28d359e2327ecc813391ca7f705
+Subproject commit dd24967b1bb89e83b656a22ff887eff81946be45
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-1] squash! TB4: Tor Browser's Firefox preference overrides.
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit f24fbd15e83a3ffe0b13f2c7a23553b8fb0c839e
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 07:19:56 2020 +0000
squash! TB4: Tor Browser's Firefox preference overrides.
Bug 40140: Videos stop working with Tor Browser 10.0 on Windows
---
browser/app/profile/000-tor-browser.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index bac98ce06540..0851f9ac84de 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -347,6 +347,13 @@ pref("browser.urlbar.update1.searchTips", false);
// is only reported via telemetry (which is disabled).
pref("corroborator.enabled", false);
+// Having the RDD Opus option enabled on Windows breaks videos for us.
+// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
+// tor-browser#40140.
+#ifdef XP_WIN
+pref"media.rdd-opus.enabled", false);
+#endif
+
// Onboarding.
pref("browser.onboarding.tourset-version", 5);
pref("browser.onboarding.newtour", "welcome,privacy,tor-network-9.0,circuit-display,security,expect-differences,onion-services,learn-more");
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-1] fixup! Bug 26961: New user onboarding.
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit ed0d4de53aeb4c4c328e84b1c2621bbaf475824e
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 8 11:51:44 2020 +0200
fixup! Bug 26961: New user onboarding.
Bug 40139: Update Onboarding icon for 10.0
---
browser/extensions/onboarding/content/Onboarding.jsm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/extensions/onboarding/content/Onboarding.jsm b/browser/extensions/onboarding/content/Onboarding.jsm
index b411a3039a3e..9f51fb4bd28a 100644
--- a/browser/extensions/onboarding/content/Onboarding.jsm
+++ b/browser/extensions/onboarding/content/Onboarding.jsm
@@ -909,7 +909,7 @@ class Onboarding {
}
const kOnionURL = "https://3g2upl4pq6kufc4m.onion/"; // DuckDuckGo
- const kLearnMore = "https://www.torproject.org/releases/tor-browser-95/";
+ const kLearnMore = "https://www.torproject.org/releases/tor-browser-10-0/";
let handledTourActionClick = false;
switch (id) {
case "onboarding-overlay-button-icon":
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-1] fixup! Bug 10760: Integrate TorButton to TorBrowser core
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit 20c8589c0570f6408c742e0f3b67f39907431267
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Sat Oct 10 15:16:18 2020 +0000
fixup! Bug 10760: Integrate TorButton to TorBrowser core
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 4e67ee2ef26e..dd24967b1bb8 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 4e67ee2ef26e28da0f02a0e43e22a61ee33c6d4d
+Subproject commit dd24967b1bb89e83b656a22ff887eff81946be45
1
0

[Git][tpo/applications/fenix][tor-browser-82.0.0b4-10.0-1] Bug 40062: HTTPS Everywhere is not shown as installed
by Matthew Finkel 10 Oct '20
by Matthew Finkel 10 Oct '20
10 Oct '20
Matthew Finkel pushed to branch tor-browser-82.0.0b4-10.0-1 at The Tor Project / Applications / fenix
Commits:
1e797f95 by Alex Catarineu at 2020-10-10T14:15:25+00:00
Bug 40062: HTTPS Everywhere is not shown as installed
Also 40070: Consider storing the list of recommended addons
This implements our own AddonsProvider, which loads the list of
available addons from assets instead of fetching it from an
endpoint. In this list, we replace https-everywhere by
our https-everywhere-eff, so that the EFF one is shown as installed
in the addons list and the AMO one is not displayed.
Also, we hide the uninstall button for builtin addons.
- - - - -
4 changed files:
- + app/src/main/assets/allowed_addons.json
- app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
- app/src/main/java/org/mozilla/fenix/components/Components.kt
- + app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt
Changes:
=====================================
app/src/main/assets/allowed_addons.json
=====================================
The diff for this file was not included because it is too large.
=====================================
app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
=====================================
@@ -21,6 +21,7 @@ import kotlinx.coroutines.launch
import mozilla.components.feature.addons.Addon
import mozilla.components.feature.addons.AddonManagerException
import mozilla.components.feature.addons.ui.translatedName
+import mozilla.components.support.webextensions.WebExtensionSupport.installedExtensions
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
@@ -256,6 +257,8 @@ class InstalledAddonDetailsFragment : Fragment() {
}
}
private fun bindRemoveButton(view: View) {
+ val isBuiltin = installedExtensions[addon.id]?.isBuiltIn() ?: false
+ view.remove_add_on.isVisible = !isBuiltin
view.remove_add_on.setOnClickListener {
setAllInteractiveViewsClickable(view, false)
requireContext().components.addonManager.uninstallAddon(
=====================================
app/src/main/java/org/mozilla/fenix/components/Components.kt
=====================================
@@ -9,7 +9,6 @@ import android.content.Context
import android.content.Intent
import androidx.core.net.toUri
import mozilla.components.feature.addons.AddonManager
-import mozilla.components.feature.addons.amo.AddonCollectionProvider
import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker
import mozilla.components.feature.addons.migration.SupportedAddonsChecker
import mozilla.components.feature.addons.update.AddonUpdater
@@ -71,18 +70,7 @@ class Components(private val context: Context) {
)
}
- val addonCollectionProvider by lazy {
- if (!BuildConfig.AMO_COLLECTION.isNullOrEmpty()) {
- AddonCollectionProvider(
- context,
- core.client,
- collectionName = BuildConfig.AMO_COLLECTION,
- maxCacheAgeInMinutes = DAY_IN_MINUTES
- )
- } else {
- AddonCollectionProvider(context, core.client, maxCacheAgeInMinutes = DAY_IN_MINUTES)
- }
- }
+ val addonCollectionProvider by lazy { TorAddonCollectionProvider(context, core.client) }
val appStartupTelemetry by lazy { AppStartupTelemetry(analytics.metrics) }
=====================================
app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt
=====================================
@@ -0,0 +1,60 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Copyright (c) 2020, The Tor Project, Inc.
+
+package org.mozilla.fenix.components
+
+import android.content.Context
+import android.graphics.Bitmap
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.fetch.Client
+import mozilla.components.feature.addons.Addon
+import kotlinx.coroutines.Dispatchers
+import mozilla.components.feature.addons.amo.AddonCollectionProvider
+import java.io.IOException
+
+internal const val COLLECTION_NAME = "tor_browser_collection"
+internal const val ALLOWED_ADDONS_PATH = "allowed_addons.json"
+internal const val MAX_CACHE_AGE = 1000L * 365L * 24L * 60L // 1000 years
+
+class TorAddonCollectionProvider(
+ private val context: Context,
+ client: Client
+) : AddonCollectionProvider(
+ context, client, serverURL = "",
+ collectionName = COLLECTION_NAME,
+ maxCacheAgeInMinutes = MAX_CACHE_AGE
+) {
+ private var isCacheLoaded = false
+
+ @Throws(IOException::class)
+ override suspend fun getAvailableAddons(
+ allowCache: Boolean,
+ readTimeoutInSeconds: Long?
+ ): List<Addon> {
+ ensureCache()
+ return super.getAvailableAddons(true, readTimeoutInSeconds)
+ }
+
+ @Throws(IOException::class)
+ override suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
+ ensureCache()
+ return super.getAddonIconBitmap(addon)
+ }
+
+ @Throws(IOException::class)
+ private suspend fun ensureCache() {
+ if (isCacheLoaded) {
+ return
+ }
+ return withContext(Dispatchers.IO) {
+ val data = context.assets.open(ALLOWED_ADDONS_PATH).bufferedReader().use {
+ it.readText()
+ }
+ writeToDiskCache(data)
+ isCacheLoaded = true
+ }
+ }
+}
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/1e797f9532bee…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/1e797f9532bee…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/fenix][tor-browser-81.1.2-10.0-2] 2 commits: Bug 40062: HTTPS Everywhere is not shown as installed
by Matthew Finkel 10 Oct '20
by Matthew Finkel 10 Oct '20
10 Oct '20
Matthew Finkel pushed to branch tor-browser-81.1.2-10.0-2 at The Tor Project / Applications / fenix
Commits:
78d91855 by Alex Catarineu at 2020-10-08T20:47:52+02:00
Bug 40062: HTTPS Everywhere is not shown as installed
Also 40070: Consider storing the list of recommended addons
This implements our own AddonsProvider, which loads the list of
available addons from assets instead of fetching it from an
endpoint. In this list, we replace https-everywhere by
our https-everywhere-eff, so that the EFF one is shown as installed
in the addons list and the AMO one is not displayed.
Also, we hide the uninstall button for builtin addons.
- - - - -
b0726c30 by Matthew Finkel at 2020-10-10T14:14:42+00:00
Merge remote-tracking branch 'acatgl/40062+1' into tor-browser-81.1.2-10.0-2
- - - - -
4 changed files:
- + app/src/main/assets/allowed_addons.json
- app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
- app/src/main/java/org/mozilla/fenix/components/Components.kt
- + app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt
Changes:
=====================================
app/src/main/assets/allowed_addons.json
=====================================
The diff for this file was not included because it is too large.
=====================================
app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
=====================================
@@ -21,6 +21,7 @@ import kotlinx.coroutines.launch
import mozilla.components.feature.addons.Addon
import mozilla.components.feature.addons.AddonManagerException
import mozilla.components.feature.addons.ui.translatedName
+import mozilla.components.support.webextensions.WebExtensionSupport.installedExtensions
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
@@ -256,6 +257,8 @@ class InstalledAddonDetailsFragment : Fragment() {
}
}
private fun bindRemoveButton(view: View) {
+ val isBuiltin = installedExtensions[addon.id]?.isBuiltIn() ?: false
+ view.remove_add_on.isVisible = !isBuiltin
view.remove_add_on.setOnClickListener {
setAllInteractiveViewsClickable(view, false)
requireContext().components.addonManager.uninstallAddon(
=====================================
app/src/main/java/org/mozilla/fenix/components/Components.kt
=====================================
@@ -9,7 +9,6 @@ import android.content.Context
import android.content.Intent
import androidx.core.net.toUri
import mozilla.components.feature.addons.AddonManager
-import mozilla.components.feature.addons.amo.AddonCollectionProvider
import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker
import mozilla.components.feature.addons.migration.SupportedAddonsChecker
import mozilla.components.feature.addons.update.AddonUpdater
@@ -71,18 +70,7 @@ class Components(private val context: Context) {
)
}
- val addonCollectionProvider by lazy {
- if (!BuildConfig.AMO_COLLECTION.isNullOrEmpty()) {
- AddonCollectionProvider(
- context,
- core.client,
- collectionName = BuildConfig.AMO_COLLECTION,
- maxCacheAgeInMinutes = DAY_IN_MINUTES
- )
- } else {
- AddonCollectionProvider(context, core.client, maxCacheAgeInMinutes = DAY_IN_MINUTES)
- }
- }
+ val addonCollectionProvider by lazy { TorAddonCollectionProvider(context, core.client) }
val appStartupTelemetry by lazy { AppStartupTelemetry(analytics.metrics) }
=====================================
app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt
=====================================
@@ -0,0 +1,60 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Copyright (c) 2020, The Tor Project, Inc.
+
+package org.mozilla.fenix.components
+
+import android.content.Context
+import android.graphics.Bitmap
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.fetch.Client
+import mozilla.components.feature.addons.Addon
+import kotlinx.coroutines.Dispatchers
+import mozilla.components.feature.addons.amo.AddonCollectionProvider
+import java.io.IOException
+
+internal const val COLLECTION_NAME = "tor_browser_collection"
+internal const val ALLOWED_ADDONS_PATH = "allowed_addons.json"
+internal const val MAX_CACHE_AGE = 1000L * 365L * 24L * 60L // 1000 years
+
+class TorAddonCollectionProvider(
+ private val context: Context,
+ client: Client
+) : AddonCollectionProvider(
+ context, client, serverURL = "",
+ collectionName = COLLECTION_NAME,
+ maxCacheAgeInMinutes = MAX_CACHE_AGE
+) {
+ private var isCacheLoaded = false
+
+ @Throws(IOException::class)
+ override suspend fun getAvailableAddons(
+ allowCache: Boolean,
+ readTimeoutInSeconds: Long?
+ ): List<Addon> {
+ ensureCache()
+ return super.getAvailableAddons(true, readTimeoutInSeconds)
+ }
+
+ @Throws(IOException::class)
+ override suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
+ ensureCache()
+ return super.getAddonIconBitmap(addon)
+ }
+
+ @Throws(IOException::class)
+ private suspend fun ensureCache() {
+ if (isCacheLoaded) {
+ return
+ }
+ return withContext(Dispatchers.IO) {
+ val data = context.assets.open(ALLOWED_ADDONS_PATH).bufferedReader().use {
+ it.readText()
+ }
+ writeToDiskCache(data)
+ isCacheLoaded = true
+ }
+ }
+}
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/6afc782a6377…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/6afc782a6377…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/android-components][android-components-60.0.3-10.0-1] Bug 40016: Allow inheriting from AddonCollectionProvider
by Matthew Finkel 10 Oct '20
by Matthew Finkel 10 Oct '20
10 Oct '20
Matthew Finkel pushed to branch android-components-60.0.3-10.0-1 at The Tor Project / Applications / android-components
Commits:
86094a92 by Alex Catarineu at 2020-10-10T14:11:59+00:00
Bug 40016: Allow inheriting from AddonCollectionProvider
This will allow implementing our own AddonsProvider in fenix.
- - - - -
1 changed file:
- components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AddonCollectionProvider.kt
Changes:
=====================================
components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AddonCollectionProvider.kt
=====================================
@@ -50,7 +50,7 @@ internal const val DEFAULT_READ_TIMEOUT_IN_SECONDS = 20L
* cache is being used by default.
* @property client A reference of [Client] for interacting with the AMO HTTP api.
*/
-class AddonCollectionProvider(
+open class AddonCollectionProvider(
private val context: Context,
private val client: Client,
private val serverURL: String = DEFAULT_SERVER_URL,
@@ -143,7 +143,7 @@ class AddonCollectionProvider(
* a connectivity problem or a timeout.
*/
@Throws(IOException::class)
- suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
+ open suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
var bitmap: Bitmap? = null
if (addon.iconUrl != "") {
client.fetch(
@@ -161,7 +161,7 @@ class AddonCollectionProvider(
}
@VisibleForTesting
- internal fun writeToDiskCache(collectionResponse: String) {
+ protected fun writeToDiskCache(collectionResponse: String) {
synchronized(diskCacheLock) {
getCacheFile(context).writeString { collectionResponse }
}
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/commit/…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/commit/…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/android-components][android-components-57.0.7-10.0-1] 2 commits: Bug 40016: Allow inheriting from AddonCollectionProvider
by Matthew Finkel 10 Oct '20
by Matthew Finkel 10 Oct '20
10 Oct '20
Matthew Finkel pushed to branch android-components-57.0.7-10.0-1 at The Tor Project / Applications / android-components
Commits:
481f7ef0 by Alex Catarineu at 2020-10-10T11:51:57+02:00
Bug 40016: Allow inheriting from AddonCollectionProvider
This will allow implementing our own AddonsProvider in fenix.
- - - - -
172013b4 by Matthew Finkel at 2020-10-10T14:10:40+00:00
Merge remote-tracking branch 'acatgl/40016+2' into android-components-57.0.7-10.0-1
- - - - -
1 changed file:
- components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AddonCollectionProvider.kt
Changes:
=====================================
components/feature/addons/src/main/java/mozilla/components/feature/addons/amo/AddonCollectionProvider.kt
=====================================
@@ -50,7 +50,7 @@ internal const val DEFAULT_READ_TIMEOUT_IN_SECONDS = 20L
* cache is being used by default.
* @property client A reference of [Client] for interacting with the AMO HTTP api.
*/
-class AddonCollectionProvider(
+open class AddonCollectionProvider(
private val context: Context,
private val client: Client,
private val serverURL: String = DEFAULT_SERVER_URL,
@@ -143,7 +143,7 @@ class AddonCollectionProvider(
* a connectivity problem or a timeout.
*/
@Throws(IOException::class)
- suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
+ open suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
var bitmap: Bitmap? = null
if (addon.iconUrl != "") {
client.fetch(
@@ -161,7 +161,7 @@ class AddonCollectionProvider(
}
@VisibleForTesting
- internal fun writeToDiskCache(collectionResponse: String) {
+ protected fun writeToDiskCache(collectionResponse: String) {
synchronized(diskCacheLock) {
getCacheFile(context).writeString { collectionResponse }
}
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/compare…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/compare…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser-build/master] Bug 40124: Remove unused torbrowser-android-all (and related) targets
by sysrqb@torproject.org 10 Oct '20
by sysrqb@torproject.org 10 Oct '20
10 Oct '20
commit 16361f048ef30607afcae19da118427063bcf3b5
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 17:11:20 2020 +0000
Bug 40124: Remove unused torbrowser-android-all (and related) targets
---
rbm.conf | 8 --------
1 file changed, 8 deletions(-)
diff --git a/rbm.conf b/rbm.conf
index a6f9eb5..1ff2da3 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -229,14 +229,6 @@ targets:
- zip
- unzip
- torbrowser-android-all:
- - android-all
- - android
- android-all:
- arch: all
- var:
- android-all: 1
- osname: android-all
torbrowser-android-armv7:
- android-armv7
- android
1
0

[Git][tpo/applications/fenix][tor-browser-82.0.0b4-10.0-1] 43 commits: Bug #40002: Add GitLab CI
by Matthew Finkel 09 Oct '20
by Matthew Finkel 09 Oct '20
09 Oct '20
Matthew Finkel pushed to branch tor-browser-82.0.0b4-10.0-1 at The Tor Project / Applications / fenix
Commits:
65ee32ec by Matthew Finkel at 2020-10-06T18:29:47+00:00
Bug #40002: Add GitLab CI
- - - - -
c4bf52fd by Matthew Finkel at 2020-10-06T18:30:42+00:00
Bug 40020: Change applicationId
- - - - -
ee8db2c5 by Matthew Finkel at 2020-10-06T18:30:43+00:00
Bug 40020: Change app name
- - - - -
6f75485f by Matthew Finkel at 2020-10-06T18:31:16+00:00
Bug 40020: Change deeplink scheme
- - - - -
ba988490 by Matthew Finkel at 2020-10-06T18:31:17+00:00
Bug 33594: Disable data collection by default (Glean)
- - - - -
5edf41c7 by Matthew Finkel at 2020-10-06T18:31:17+00:00
Bug 40019: Adjust is disabled on Release when data collection is disabled
- - - - -
6587846e by Matthew Finkel at 2020-10-06T18:31:17+00:00
Bug 34338: Disable the crash reporter
- - - - -
38630502 by Matthew Finkel at 2020-10-06T18:31:17+00:00
Bug 40014: Neuter Google Advertising ID
- - - - -
607d8187 by Matthew Finkel at 2020-10-06T18:31:17+00:00
Bug 40018: Disable Push service
- - - - -
b7ba7db2 by Alex Catarineu at 2020-10-06T18:31:17+00:00
Bug 40001: Start Tor as part of the Fenix initialization
- - - - -
a1b004b7 by Alex Catarineu at 2020-10-06T18:34:29+00:00
Bug 40030: Install HTTPS Everywhere and NoScript addons on startup
HTTPS Everywhere is installed as a builtin extension and NoScript as
a regular AMO addon. To avoid unnecessary I/O we only install NoScript
the first time, and rely on the browser addon updating mechanism for
keeping up with new versions. This is the same behaviour that was
implemented in the Fennec-based Tor Browser, where it was installed
as a "distribution addon", which also only occurred once.
- - - - -
b2b8b0a3 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 34403: Disable Normal mode by default
- - - - -
26ad7b86 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40015: Modify Home menu
- - - - -
ca8ddd3c by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40016: Hide unwanted Settings
- - - - -
d068b9f3 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40016: Modify Default toolbar menu
- - - - -
49cd6bcd by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40016: Add Donate settings button
- - - - -
a710dbff by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40016: Move Allow Screenshots under Advanced
- - - - -
abd59835 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40016: Don't install WebCompat webext
- - - - -
06573c35 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40016: Don't onboard Search Suggestions
- - - - -
2b689f55 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40031: Hide Mozilla-specific items on About page
- - - - -
8c56c3e8 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40020: Change App icons
- - - - -
5eb6eb90 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40032: Set usesCleartextTraffic as false
- - - - -
75a4a6da by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40028: Define bootstrapping events and Quick Start
- - - - -
69eea2d3 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40028: Implement Tor Service controller
- - - - -
aa09aebf by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40028: Integrate Tor Controller into HomeFragment
- - - - -
6344fbbb by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40028: Implement Tor connect and logger screens
- - - - -
e7447634 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40028: Implement Tor Onboarding
- - - - -
2915c48c by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40028: Implement new home screen
- - - - -
140a12ea by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40034: Disable PWA onboading
- - - - -
a935f9e3 by Alexander Færøy at 2020-10-07T22:36:42+00:00
Pin CI builds to runners with 32GB of RAM to avoid OOM conditions.
- - - - -
7fae8adc by Georg Koppen at 2020-10-07T22:36:42+00:00
Bug 40042: Add option do overwrite timestamp in extension version
- - - - -
cecf1d23 by Alex Catarineu at 2020-10-07T22:36:42+00:00
Bug 34378: Port external helper app prompting
With the corresponding android-components patch, this allows all `startActivity`
that may open external apps to be replaced by `TorUtils.startActivityPrompt`.
- - - - -
26c9d43a by Georg Koppen at 2020-10-07T22:36:42+00:00
Bug 40059: Use MOZ_BUILD_DATE for versionCode
At the same time we adapt MOZ_BUILD_DATE to our needs where it is
actually used and not in tor-browser-build. This gives us more
flexibility. See: tor-browser-build#40084.
- - - - -
1b543bfb by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40041: Implement Tor Network Settings
- - - - -
dccc751e by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40041: Integrate Tor Network Settings
- - - - -
76e5b527 by Alex Catarineu at 2020-10-07T22:36:42+00:00
Bug 40063: Do not sort search engines alphabetically
- - - - -
1def5736 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40026: Implement Security Level settings
- - - - -
6b4af383 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40026: Integrate Security Level settings
- - - - -
aa149b19 by Matthew Finkel at 2020-10-07T22:36:42+00:00
Bug 40064: Use Gecko Beta for Nightly and Debug variants
- - - - -
0878355b by Alex Catarineu at 2020-10-07T22:36:42+00:00
Bug 40061: Do not show "Send to device" in sharing menu
- - - - -
20792640 by Alex Catarineu at 2020-10-07T22:36:42+00:00
Bug 40058: Hide option for disallowing addon in private mode
- - - - -
185ce4a1 by Georg Koppen at 2020-10-07T22:36:42+00:00
Bug 40067: Fix reproducibility issue in classes2.dex
We make sure our MOZ_BUILD_DATE gets used as a source for showing date
related information on the Fenix about page.
- - - - -
58c7c6e4 by Matthew Finkel at 2020-10-07T22:41:42+00:00
Bug 40072: Disable Tracking Protection
- - - - -
30 changed files:
- + .gitlab-ci.yml
- app/build.gradle
- − app/src/beta/res/drawable/ic_launcher_foreground.xml
- app/src/beta/res/mipmap-hdpi/ic_launcher.png
- app/src/beta/res/mipmap-mdpi/ic_launcher.png
- app/src/beta/res/mipmap-xhdpi/ic_launcher.png
- app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
- app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
- app/src/beta/res/values/static_strings.xml
- app/src/beta/res/xml/shortcuts.xml
- − app/src/debug/res/drawable/ic_launcher_foreground.xml
- app/src/debug/res/xml/shortcuts.xml
- app/src/main/AndroidManifest.xml
- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt
- app/src/main/java/org/mozilla/fenix/FenixApplication.kt
- app/src/main/java/org/mozilla/fenix/HomeActivity.kt
- app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt
- app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
- app/src/main/java/org/mozilla/fenix/components/Analytics.kt
- app/src/main/java/org/mozilla/fenix/components/Components.kt
- app/src/main/java/org/mozilla/fenix/components/Core.kt
- + app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt
- app/src/main/java/org/mozilla/fenix/components/metrics/AdjustMetricsService.kt
- app/src/main/java/org/mozilla/fenix/components/metrics/MetricsUtils.kt
- app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt
- app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt
- app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
- app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt
- app/src/main/java/org/mozilla/fenix/home/Mode.kt
- app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/998b62866dee…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/compare/998b62866dee…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[Git][tpo/applications/android-components][android-components-60.0.3-10.0-1] 8 commits: Bug 40005: Modify Default toolbar menu
by Matthew Finkel 09 Oct '20
by Matthew Finkel 09 Oct '20
09 Oct '20
Matthew Finkel pushed to branch android-components-60.0.3-10.0-1 at The Tor Project / Applications / android-components
Commits:
e827ea02 by Matthew Finkel at 2020-10-06T18:55:20+00:00
Bug 40005: Modify Default toolbar menu
- - - - -
dc1e5052 by Alex Catarineu at 2020-10-06T18:55:26+00:00
Bug 40007: Port external helper app prompting
Together with the corresponding fenix patch, this allows all `startActivity`
that may open external apps to be replaced by `TorUtils.startActivityPrompt`.
- - - - -
0d362798 by Alex Catarineu at 2020-10-09T20:55:22+00:00
Bug 40002: Ensure system download manager is not used
- - - - -
45529d9a by Alex Catarineu at 2020-10-09T20:55:22+00:00
Bug 40009: Change the default search engines
This matches the search engines from desktop, that is:
DDG as the default, then YouTube, Google, DDGOnion,
Startpage, Twitter, Wikipedia and Yahoo.
- - - - -
baa63370 by Matthew Finkel at 2020-10-09T20:55:22+00:00
Bug 40006: Expose Security Level interface
- - - - -
5801ae44 by Alex Catarineu at 2020-10-09T20:55:22+00:00
Bug 40011: Hide option for disallowing addons in private mode
- - - - -
1a316aac by Georg Koppen at 2020-10-09T20:55:22+00:00
Bug 40013: Add option do overwrite timestamp in extension version
- - - - -
06e3626e by Alex Catarineu at 2020-10-09T21:00:08+00:00
Bug 40015: Port padlock states for .onion services
- - - - -
30 changed files:
- build.gradle
- components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
- components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
- components/browser/menu/src/main/java/mozilla/components/browser/menu/WebExtensionBrowserMenu.kt
- components/browser/menu/src/main/java/mozilla/components/browser/menu/WebExtensionBrowserMenuBuilder.kt
- components/browser/search/src/main/assets/search/list.json
- + components/browser/search/src/main/assets/searchplugins/ddg-onion.xml
- components/browser/search/src/main/assets/searchplugins/ddg.xml
- + components/browser/search/src/main/assets/searchplugins/startpage.xml
- + components/browser/search/src/main/assets/searchplugins/yahoo.xml
- + components/browser/search/src/main/assets/searchplugins/youtube.xml
- components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/DisplayToolbar.kt
- components/browser/toolbar/src/main/java/mozilla/components/browser/toolbar/display/SiteSecurityIconView.kt
- components/browser/toolbar/src/main/res/drawable/mozac_ic_site_security.xml
- components/browser/toolbar/src/main/res/values/attrs_browser_toolbar.xml
- components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
- components/concept/toolbar/src/main/java/mozilla/components/concept/toolbar/Toolbar.kt
- components/feature/addons/src/main/res/layout/mozac_feature_addons_fragment_dialog_addon_installed.xml
- components/feature/app-links/build.gradle
- components/feature/app-links/src/main/java/mozilla/components/feature/app/links/AppLinksFeature.kt
- components/feature/app-links/src/main/java/mozilla/components/feature/app/links/AppLinksUseCases.kt
- components/feature/contextmenu/src/main/java/mozilla/components/feature/contextmenu/ContextMenuCandidate.kt
- components/feature/downloads/build.gradle
- components/feature/downloads/src/main/java/mozilla/components/feature/downloads/AbstractFetchDownloadService.kt
- components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadsFeature.kt
- components/feature/toolbar/src/main/java/mozilla/components/feature/toolbar/ToolbarPresenter.kt
- components/support/ktx/src/main/java/mozilla/components/support/ktx/android/content/Context.kt
- components/support/ktx/src/main/java/mozilla/components/support/ktx/kotlin/String.kt
- + components/support/utils/src/main/java/mozilla/components/support/utils/TorUtils.kt
- + components/ui/icons/src/main/res/drawable/mozac_ic_onion.xml
The diff was not included because it is too large.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/compare…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/android-components/-/compare…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser/tor-browser-78.3.0esr-10.5-1] fixup! Bug 10760: Integrate TorButton to TorBrowser core
by sysrqb@torproject.org 09 Oct '20
by sysrqb@torproject.org 09 Oct '20
09 Oct '20
commit 03a0251a302c606688b52c8ac33457260872ab67
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 20:34:14 2020 +0000
fixup! Bug 10760: Integrate TorButton to TorBrowser core
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 14b92c3c4cfd..0675516fdb00 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 14b92c3c4cfd9b23477b669a956d6831161841fe
+Subproject commit 0675516fdb00677d5a1f8d8b0f1c9e55246d10de
1
0

[torbutton/master] fixup! Bug 40013: End of year 2020 Fundraising campaign
by sysrqb@torproject.org 09 Oct '20
by sysrqb@torproject.org 09 Oct '20
09 Oct '20
commit 0675516fdb00677d5a1f8d8b0f1c9e55246d10de
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Oct 9 22:14:06 2020 +0200
fixup! Bug 40013: End of year 2020 Fundraising campaign
Set unicode range of the WhiteonBlack font to Basic Latin
---
chrome/skin/aboutTorFonts.css | 1 +
1 file changed, 1 insertion(+)
diff --git a/chrome/skin/aboutTorFonts.css b/chrome/skin/aboutTorFonts.css
index d7ccd908..844d5842 100644
--- a/chrome/skin/aboutTorFonts.css
+++ b/chrome/skin/aboutTorFonts.css
@@ -5,6 +5,7 @@
* vim: set sw=2 sts=2 ts=8 et syntax=css:
*/
@font-face {
+ unicode-range: U+0000-007F;
font-family: WhiteonBlack; /* https://www.dafont.com/white-on-black.font */
src: url('data:font/ttf;base64,AAEAAAARAQAABAAQTFRTSNhraQIAAAWoAAAA8E9TLzJFB5PDAAABmAAAAGBWRE1Yc2h65wAABpgAAAXgY21hcEABUO8AACIQAAAERmN2dCAAKgAAAAAn0AAAAAJmcGdtBlacNAAAJlgAAAFzZ2FzcP//AAMABB70AAAACGdseWZ3DfufAAAn1AAD6pRoZG14qSDGXwAADHgAABWYaGVhZBPWePoAAAEcAAAANmhoZWEPnwesAAABVAAAACRobXR4BHnw9gAAAfgAAAOwbG9jYQLA16gABBJoAAADtG1heHADahOGAAABeAAAACBuYW1lNiKaSgAEFhwAAAaJcG9zdCsk4moABByoAAACSnByZXC4AAArAAAnzAAAAAQAAQAAAAEAAHrph0hfDzz1ABsIAAAAAADWJjXOAAAAANZ39/3/nP6LCG4HqAAAAAYAAQABAAAAAAABAAAGtP5eAN4I3/+c/4IIbgABAAAAAAAAAAAAAAAAAAAA7AABAAAA7AXkAHMAAAAAAAEAAAAAAAoAAAIADaEAAAAAAAMEYAGQAAUACAWaBTMAAAEbBZoFMwAAA9EAZgISAAACAAUAAAAAAAAAgAAAp1AAAEoAAAAAAAAAAEhMICAAQAAg+wIFmv5mAM0H0AGiIAABEUEAAAAEAAWaAAAAIAAAAtT/zgAAAAAB/AAAAmMAAAMA/84CoAAABTgAAAT1/84GSgAABab/zgLi/84C9gAAAvYAAAQAAAACav+cAw7/zgSb/84C8P/OAjkAAATH/84Drv/OBMz/zgUq/84FA//OBMf/zgUL/84EzP/OBJH/zgT0/84CLQAAAi0AAAP2AAAD9gAAA/YAAAUq/84H4wAABTX/zgUL/8QEzP/OBSr/zgRU/6IEe//OBUb/zgWV/84C4v/OA9z/zgUq/84Ds//OBmj/zgUY/84FKv/OBOX/zgTH/84FC//OBMz/
zgSF/84E6f/OBTD/zgf4/7kFMP/OBKv/zgTp/84C9gAAAjkAAAL2AAAD9gAABAAAAAQAAAAFNf/OBQv/xATM/84FKv/OBFT/ogR7/84FRv/OBZX/zgLi/84D3P/OBSr/zgOz/84GaP/OBRj/zgUq/84E5f/OBMf/zgUL/84EzP/OBIX/zgTp/84FMP/OB/j/uQUw/84Eq//OBOn/zgP2AAAD9gAAA/YAAAP2AAACoAAABHMAAAP2AAAD9gAABO4AAAP2AAAD9gAABAAAAAaKAAACiAAAA7AAAAP2AAAGigAAAp4AAAKiAAAD9gAAA/YAAAP2AAAEAAAABJwAAAQAAAAB/AAABAAAAAP2AAACzgAAA7AAAAasAAAHrAAABqwAAALsAAAGBAAABgQAAAYEAAAGBAAABgQAAAYEAAAIRgAABXcAAAR/AAAEfwAABH8AAAR/AAACkQAAApEAAAKRAAACkQAABe4AAAYSAAAGTgAABk4AAAZOAAAGTgAABk4AAAP2AAAGTgAABd0AAAXdAAAF3QAABd0AAATRAAAEYAAABOMAAAOaAAADmgAAA5oAAAOaAAADmgAAA5oAAAWuAAADiQAAA40AAAONAAADjQAAA40AAAICAAACAgAAAgIAAAICAAAEcwAABFQAAAPyAAAD8gAAA/IAAAPyAAAD8gAAA/YAAAPyAAAEIwAABCMAAAQjAAAEIwAAA2QAAAPyAAADZAAAAgIAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAARUAAAIAAAAAi0AAAItAAACLQAAA44AAAOOAAADjgAAA/YAAAP2AAAEAAAACAAAAAJ3AAACdwAAAVYAAAP2AAAD9gAAB+wAAAUq/84I3wAABdkAAAP2AAAEOQAABesAAAS2AAAD9gAAA/YAAAP2AAACmQAAA/YAAAP2AAAD9gAABDEAAAQ5AAAAAADsTAEBAUwBAQEBAQEBAQEBATsBA
QFMNwFMAUQBMwEBAQEBAUwBRDsBL0wBTAEzNwFMAQEmNwFMAQEBAQEBASEBAQEBAQFEOwEvTAFMATM3AUwBASY3AUwBAQEBAQEBIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAAEBAQEBAAwA+Aj/AAgACP/+AAkACf/+AAoACv/9AAsAC//9AAwADP/9AA0ADf/9AA4ADv/9AA8AD//8ABAAEP/8ABEAEf/8ABIAEv/8ABMAE//8ABQAFP/7ABUAFf/7ABYAFv/7ABcAF//7ABgAGP/7ABkAGf/6ABoAGv/6ABsAG//6ABwAHP/6AB0AHf/6AB4AHv/5AB8AH//5ACAAIP/5ACEAIf/5ACIAIv/5ACMAI//4ACQAJP/4ACUAJf/4ACYAJv/4ACcAJ//4ACgAKP/3ACkAKf/3ACoAKv/3ACsAKv/3ACwAK//3AC0ALP/2AC4ALf/2AC8ALv/2ADAAL//2ADEAMP/1ADIAMf/1ADMAMv/1ADQAM//1ADUANP/1ADYANf/0ADcANv/0ADgAN//0ADkAOP/0ADoAOf/0ADsAOv/zADwAO//zAD0APP/zAD4APf/zAD8APv/zAEAAP//yAEEAQP/yAEIAQf/yAEMAQv/yAEQAQ//yAEUARP/xAEYARf/xAEcARv/xAEgAR//xAEkASP/xAEoASf/wAEsASv/wAEwAS//wAE0ATP/wAE4ATf/wAE8ATv/vAFAAT//vAFEAUP/vAFIAUf/vAFMAUv/vAFQAU//uAFUAVP/uAFYAVP/uAFcAVf/uAFgAVv/uAFkAV//tAFoAWP/tAFsAWf/tAFwAWv/tAF0AW/
/tAF4AXP/sAF8AXf/sAGAAXv/sAGEAX//sAGIAYP/rAGMAYf/rAGQAYv/rAGUAY//rAGYAZP/rAGcAZf/qAGgAZv/qAGkAZ//qAGoAaP/qAGsAaf/qAGwAav/pAG0Aa//pAG4AbP/pAG8Abf/pAHAAbv/pAHEAb//oAHIAcP/oAHMAcf/oAHQAcv/oAHUAc//oAHYAdP/nAHcAdf/nAHgAdv/nAHkAd//nAHoAeP/nAHsAef/mAHwAev/mAH0Ae//mAH4AfP/mAH8Aff/mAIAAff/lAIEAfv/lAIIAf//lAIMAgP/lAIQAgf/lAIUAgv/kAIYAg//kAIcAhP/kAIgAhf/kAIkAhv/kAIoAh//jAIsAiP/jAIwAif/jAI0Aiv/jAI4Ai//jAI8AjP/iAJAAjf/iAJEAjv/iAJIAj//iAJMAkP/hAJQAkf/hAJUAkv/hAJYAk//hAJcAlP/hAJgAlf/gAJkAlv/gAJoAl//gAJsAmP/gAJwAmf/gAJ0Amv/fAJ4Am//fAJ8AnP/fAKAAnf/fAKEAnv/fAKIAn//eAKMAoP/eAKQAof/eAKUAov/eAKYAo//eAKcApP/dAKgApf/dAKkApv/dAKoAp//dAKsAp//dAKwAqP/cAK0Aqf/cAK4Aqv/cAK8Aq//cALAArP/cALEArf/bALIArv/bALMAr//bALQAsP/bALUAsf/bALYAsv/aALcAs//aALgAtP/aALkAtf/aALoAtv/aALsAt//ZALwAuP/ZAL0Auf/ZAL4Auv/ZAL8Au//ZAMAAvP/YAMEAvf/YAMIAvv/YAMMAv//YAMQAwP/XAMUAwf/XAMYAwv/XAMcAw//XAMgAxP/XAMkAxf/WAMoAxv/WAMsAx//WAMwAyP/WAM0Ayf/WAM4Ayv/VAM8Ay//VANAAzP/VANEAzf/VANIAzv/VANMAz//UANQA0P/UANUA0f/UANYA0f/UANcA0v/UANgA0//TANkA1P/TANo
A1f/TANsA1v/TANwA1//TAN0A2P/SAN4A2f/SAN8A2v/SAOAA2//SAOEA3P/SAOIA3f/RAOMA3v/RAOQA3//RAOUA4P/RAOYA4f/RAOcA4v/QAOgA4//QAOkA5P/QAOoA5f/QAOsA5v/QAOwA5//PAO0A6P/PAO4A6f/PAO8A6v/PAPAA6//PAPEA7P/OAPIA7f/OAPMA7v/OAPQA7//OAPUA8P/NAPYA8f/NAPcA8v/NAPgA8//NAPkA9P/NAPoA9f/MAPsA9v/MAPwA9//MAP0A+P/MAP4A+f/MAP8A+v/LAAAAFwAAAPAJCgMAAgMCAwYGBwYDAwMFAwMFAwMFAwUGBwUFBQQGAgIEBAQFCQUFBQUEBQUGAgMGAwcGBQUFBwUFBgYJBgUFAwMDBAUFBQUFBQQFBQYCAwYDBwYFBQUHBQUGBgkGBQUEBAQEAwUEBAYEBAUHAwQEBwMDBAQEBQUFAgUEAwQICQgDBwcHBwcHCQYFBQUFAwMDAwcHBwcHBwcEBwcHBwcFBQYEBAQEBAQGBAQEBAQCAgICBQUEBAQEBAQEBQUFBQQEBAIFBQUFBQUFBQUFCQICAgQEBAQEBQkDAwIEBAkGCgcEBQcFBAQEAwQEBAUFAAAKCwMAAgMDAwcGCAcEBAQFAwQFBAMGBAUGBwYFBgUGAwMFBQUFCgYFBgYEBgYHAwQGBAgGBQUGBwYGBgYKBgYGBAMEBQUFBgUGBgQGBgcDBAYECAYFBQYHBgYGBgoGBgYFBQUFAwYFBQYFBQUIAwUFCAMDBQUFBQYFAgUFBAUICggECAgICAgICgcGBgYGAwMDAwcICAgICAgFCAcHBwcGBQYFBQUFBQUHBAQEBAQDAwMDBgUFBQUFBQUFBQUFBQQFBAMFBQUFBQUFBQUFCgMDAwQEBAUFBQoDAwIFBQoGCwcFBQcGBQUFAwUFBQUFAAALDAQAAwMDBAcHCQgEBAQGAwQGBAMHBAYHCAcGBwUHAwMF
BQUHCwYGBwYGBgYIAwQHBgkHBgYHCAcGBwcLBwYGBAMEBQYGBgYHBgYGBggDBAcGCQcGBgcIBwYHBwsHBgYFBQUFBAYFBQcFBQYJAwUFCQQEBQUFBgYGAwYFBAUJCwkECAgICAgICwgGBgYGBAQEBAgICQkJCQkFCQgICAgHBgcFBQUFBQUIBQUFBQUDAwMDBgYFBQUFBQUFBgYGBgUFBQMGBgYGBgYGBgYGCwMDAwUFBQUFBgsDAwIFBQsHDAgFBggGBQUFBAUFBQYGAAAMDQQAAwQDBAgHCQgEBAQGBAUGBAMHBQYICAcGBwYHAwMGBgYHDAcGBwcGBwcIAwUIBQoIBwYHCAcHBwgMCAcHBAMEBgYGBwYHBwYHBwgDBQgFCggHBgcIBwcHCAwIBwcGBgYGBAcGBgcGBgYKBAYGCgQEBgYGBgcGAwYGBAYKDAoECQkJCQkJDAgHBwcHBAQEBAkJCQkJCQkGCQkJCQkHBwcFBQUFBQUJBQUFBQUDAwMDBwcGBgYGBgYGBgYGBgUGBQMGBgYGBgYGBgYHDAMDAwUFBQYGBgwEBAIGBgwIDQkGBgkHBgYGBAYGBgYGAAANDgQAAwQEBAgICgkFBQUHBAUHBQQIBQcIBwgHCAcIBAQGBgYIDQcHCAcHBwgJBAYIBQoICAcICQgHCAgNCAgHBQQFBgcHBwcIBwcHCAkEBggFCggIBwgJCAcICA0ICAcGBgYGBAcGBggGBgcLBAYGCwQEBgYGBwcHAwcGBQYLDAsFCgoKCgoKDQkHBwcHBAQEBAoKCgoKCgoGCgoKCgoIBwgGBgYGBgYJBgYGBgYDAwMDBwcGBgYGBgYGBwcHBwYGBgMHBwcHBwcHBwcHDQQEBAYGBgYGBw0EBAIGBg0IDgoGBwoIBgYGBAYGBgcHAAAPEQUABAQFBQoJDAsFBgYIBQYHBgQJBggKCQkJCQgJBAQHBwcJDwkJCQkICAkKBQcKBgwKCQgJCgkICQoPC
gkIBgQGBwgICQkJCQgICQoFBwoGDAoJCAkKCQgJCg8KCQgHBwcHBQgHBwkHBwgMBQcHDAUFBwcHCAkIBAgHBQcNDg0FCwsLCwsLEAoICAgIBQUFBQsLDAwMDAwHDAsLCwsJCAkHBwcHBwcLBwcHBwcEBAQECAgHBwcHBwcHCAgICAYHBgQICAgICAgICAgIDwQEBAcHBwcHCA8FBQMHBw8KEQsHCAsJBwcHBQcHBwgIAAAQEgUABAUFBQoKDQsGBgYIBQYJBgQKBwkKCQoJCggKBAQICAgJEAoJCgoICQoLBQcKBg0KCgkKCwoJCgoQCgkJBgQGCAgICgkKCggJCgsFBwoGDQoKCQoLCgkKChAKCQkICAgIBQkICAoICAgNBQcIDQUFCAgICAkIBAgIBgcNDw0GDAwMDAwMEQsJCQkJBQUFBQwMDQ0NDQ0IDQwMDAwKCQoHBwcHBwcLBwcHBwcEBAQECQkICAgICAgICAgICAcIBwQICAgICAgICAgJEAQEBAcHBwgICBAFBQMICBAKEgwICAwJCAgIBQgICAgIAAAREwYABAUGBgsLDQwGBgYJBQYJBgUKBwoLDAoKCgkLBQUICAgKEQoKCgoICgsMBggLBw4LCgkKDAoKCgsRCwoKBgUGCAkJCgoKCggKCwwGCAsHDgsKCQoMCgoKCxELCgoICAgIBgkICAoICAkOBQgIDgYGCAgICQoJBAkIBggOEA4GDQ0NDQ0NEgwKCgoKBQUFBQ0NDQ0NDQ0IDQwMDAwKCQoICAgICAgMCAgICAgEBAQECQkICAgICAgICQkJCQcIBwQJCQkJCQkJCQkJEQUFBQgICAgICREFBQMICBELEwwICQ0KCAgIBggICAkJAAATFQYABQYGBgwMDw0HBwcKBgcKBwULCAsMDQsLCwoMBQUJCQkMEwsLCwsKCwwNBggMCA8MCwsLDQsLDAwTDAsLBwUHCQoKCwsLCwoLDA0GCAwIDwwLCwsNCw
sMDBMMCwsJCQkJBgsJCQwJCQoQBgkJEAYGCQkJCgsKBQoJBwkQEhAHDg4ODg4OFA0LCwsLBgYGBg4ODw8PDw8JDw4ODg4LCgwJCQkJCQkNCAgICAgFBQUFCwoJCQkJCQkJCgoKCggJCAUKCgoKCgoKCgoKEwUFBQgICAkJChMGBgMJCRMMFQ4JCg4LCQkJBgkJCQoKAAAVFwcABQYHBw4NEQ8ICAgLBggLCAYNCQwODA0MDQwNBgYKCgoNFQ0MDQ0LDA0PBwoOCRENDQwNDg0MDQ4VDgwMCAYICgsLDQwNDQsMDQ8HCg4JEQ0NDA0ODQwNDhUODAwKCgoKBwwKCg0KCgsRBwoKEQcHCgoKCwwLBQsKBwoSFBIIEBAQEBAQFg4MDAwMBwcHBxAQEREREREKEQ8PDw8NCw0JCQkJCQkPCQkJCQkFBQUFDAsKCgoKCgoKCwsLCwkKCQULCwsLCwsLCwsLFQYGBgkJCQoKCxUGBgQKChUOFw8KCxAMCgoKBwoKCgsLAAAYGwgABgcICBAPExEJCQkMBwkNCQcOCw4QDg4PDg0PBwcMDAwOGA8ODg8NDQ8RCAsQChMPDw4OEA4ODxAYEA4OCQcJDAwMDw4ODw0NDxEICxAKEw8PDg4QDg4PEBgQDg4MDAwMCA0MDA8MDAwUCAsMFAgIDAwMDA4MBgwMCAsUFxQJEhISEhISGRANDQ0NCAgICBISExMTExMMExISEhIODQ8LCwsLCwsRCwsLCwsGBgYGDQ0MDAwMDAwMDAwMDAoMCgYMDAwMDAwMDAwNGAcHBwsLCwwMDBgHBwQMDBgQGxIMDRIODAwMCAwMDA0NAAAbHgkABwgJCRIRFRMKCgoOCAoPCggQDBAREhAQEA8RBwcNDQ0RGxEQEBEPDxETCQwRDBYRERAQEhAPERIbEhAQCggKDQ4OERAQEQ8PERMJDBEMFhEREBASEA8REhsSEBANDQ0NCQ8NDRENDQ4WCQwNFgkJDQ0
NDhAOBw4NCQwXGhcKFBQUFBQUHBIPDw8PCQkJCRQUFRUVFRUNFRQUFBQQDxEMDAwMDAwTDAwMDAwHBwcHDw8NDQ0NDQ0NDg4ODgsNCwcODg4ODg4ODg4PGwcHBwwMDA0NDhsICAUNDRsRHhQNDhQQDQ0NCQ0NDQ4OAAAdIAoABwkKChMSFxQKCwsPCQsQCwgRDRETERERERASCAgODg4SHRIRERIQEBMUCw4TDBcSEhERExEQEhMdExERCwgLDg8PEhEREhAQExQLDhMMFxISERETERASEx0TEREODg4OChAODhIODg8YCQ0OGAkKDg4ODxEPBw8OCg0YHBgLFhYWFhYWHhQQEBAQCQkJCRYWFxcXFxcOFxUVFRUREBINDQ0NDQ0VDQ0NDQ0HBwcHEBAODg4ODg4ODw8PDwwODAcPDw8PDw8PDw8QHQgICA0NDQ4ODx0JCQUODh0TIBUODxURDg4OCQ4ODg8PAAAgIwsACAoLCxUUGRcMDAwQCgwSDAkTDhMVExMTExIUCQkQEBAVIBQTExQREhQWDA8VDhoUFBMTFRMSFBUgFRMTDAkMEBAQFBMTFBESFBYMDxUOGhQUExMVExIUFSAVExMQEBAQCxIQEBQQEBAaCg8QGgoLEBAQEBIQCBAQCw8bHxsMGBgYGBgYIRYSEhISCgoKChgYGRkZGRkQGRcXFxcTEhQODg4ODg4XDg4ODg4ICAgIEhEQEBAQEBAQEREREQ4QDggQEBAQEBAQEBARIAkJCQ4ODhAQECAKCgUQECAVIxcQERgTEBAQChAQEBERAAAhJQwACAoMCxYUGhcMDAwRCg0SDAkUDxMVFBQTFBIUCQkQEBAVIRUUFBUTEhUXDBAVDhoVFRQUFRQTFBUhFRMUDAkMEBERFRQUFRMSFRcMEBUOGhUVFBQVFBMUFSEVExQQEBAQCxIQEBQQEBEbCg8QGwsLEBAQERMRCBEQDA8cIBwMGRkZGRkZIhcTExMTCwsL
CxgZGhoaGhoQGhgYGBgUEhQPDw8PDw8XDw8PDw8ICAgIEhIQEBAQEBAQEREREQ4QDggRERERERERERESIQkJCQ8PDxAQESEKCgYQECEVJRgQERgTEBAQCxAQEBERAAAlKQ0ACQsNDBgXHRoNDg4TCw4VDgoWEBYYFhYXFhUXCgoSEhIXJBgXFhcUFRgaDhIYEB4YFxYWGBYVFxglGBYXDgoOEhMTGBcWFxQVGBoOEhgQHhgXFhYYFhUXGCUYFhcSEhISDBUSEhcSEhMeDBESHgwMEhISExUTCRMSDREfIx8OHBwcHBwcJhkVFRUVDAwMDBscHR0dHR0SHRsbGxsWFBcREREREREaEBAQEBAJCQkJFRQSEhISEhISExMTExASEAkTExMTExMTExMUJQoKChAQEBISEyULCwYSEiUYKRsSFBsWEhISDBISEhMUAAAqLw8ACg0PDhsaIR4PEBAVDRAYDwwZExkbGhkZGRgaCwsVFRUbKRsZGRsXGBsdDxQbEiIbGxkZGxkYGhsqGxkaEAwQFRUVGxkZGxcYGx0PFBsSIhsbGRkbGRgaGyobGRoVFRUVDhcVFRoVFRUiDRMVIg4OFRUVFRgVChUVDxMjKCMPICAgICAgKx0YGBgYDQ0NDR8gISEhISEVIR8fHx8ZFxoTExMTExMeExMTExMLCwsLFxcVFRUVFRUVFhYWFhIVEgsVFRUVFRUVFRUXKgsLCxMTExUVFSoNDQcVFSobLx8VFh8ZFRUVDhUVFRYWAAAuMxAACw4QDx4dJCAREREXDhIbEQ0bFRweHBscHBocDQ0XFxceLR0cHB0YGh4gERYeFCUdHhwbHRwaHB4uHhscEQ0RFxcXHRwcHRgaHiARFh4UJR0eHBsdHBocHi4eGxwXFxcXDxoXFxwXFxcmDxUXJg8PFxcXFxsXCxcXEBUmLCYRIyMjIyMjMB8aGhoaDw8PDyIjJCQkJCQXJCIiIiIcGRwVFRUVFRUhFBQUF
BQMDAwMGhkXFxcXFxcXGBgYGBQXFAwXFxcXFxcXFxcZLg0NDRQUFBcXFy4ODggXFy4eMyIXGCIbFxcXDxcXFxgYAAAyNxIADA8SECEfJyMSExMZDxMcEg4eFh4gHx4eHhwfDg4ZGRkgMSAfHiAbHCEjERggFiggIB4eIB4cHyAyIB0fEw4TGRkZIB8eIBscISMRGCAWKCAgHh4gHhwfIDIgHR8ZGRkZEBwZGR8ZGRkpEBcZKRAQGRkZGR0ZDBkZEhcqMCoSJiYmJiYmNCIcHBwcEBAQECUmJycnJycZJyUlJSUeGx8XFxcXFxckFhYWFhYNDQ0NHBsZGRkZGRkZGhoaGhUZFQ0ZGRkZGRkZGRkbMg4ODhYWFhkZGTIPDwgZGTIgNyUZGiUdGRkZEBkZGRoaAAA2PBMADRAUEiMhKiYTFBQbEBUfFA8gGSEjISAiIB8hDw8bGxsjNSMhICMdHiQmExsjGCsiIyAgIyAfISM2IyAhFA8UGxsbIyEgIx0eJCYTGyMYKyIjICAjIB8hIzYjICEbGxsbEh4bGyEbGxssERkbLBISGxsbGx8bDRsbExktNC0UKSkpKSkpOCUeHh4eERERESgpKysrKysbKygoKCghHiEYGBgYGBgmGBgYGBgODg4OHh0bGxsbGxsbHBwcHBcbFw4bGxsbGxsbGxsdNg8PDxgYGBsbGzYREQkbGzUjPCcbHSggGxsbEhsbGxwdAAA6QBUADhEVEyYkLikVFRUdEhYiFRAjGiMlIyMkIyEkEBAdHR0lOSYkIyUfICYoFRwlGi4lJSMjJSMhJCY6JiIkFRAVHR0dJiQjJR8gJigVHCUaLiUlIyMlIyEkJjomIiQdHR0dEyAdHSQdHR0vEhsdLxMTHR0dHSEdDh0dFBswODAVLCwsLCwsPCghISEhExMTEyssLi4uLi4dLisrKysjICMaGhoaGhopGhoaGhoPDw8PIB8dHR0dHR0dHh4eHhkdGQ8dHR0dHR
0dHR0fOhAQEBoaGh0dHToSEgodHTklQCodHysiHR0dEx0dHR4fAABDShgAERQYFiwqNS8YGRkiFBonGRMoHygrKSgpKCYpEhIhISErQisqKCskJiwvGCArHjYrKykoKigmKStDKycpGRMZISIiKyooKyQmLC8YICseNisrKSgqKCYpK0MrJykhISEhFiUhISkhISI3FR8hNxYWISEhIiciESIhFx84QDgYMjIyMjIyRS4mJiYmFhYWFjIzNTU1NTUhNTExMTEoJSkeHh4eHh4wHh4eHh4RERERJSQhISEhISEhIyMjIxwhHBEiIiIiIiIiIiIkQxISEh4eHiEhIkMVFQshIUIrSjEhIzInISEhFiEhISMjAABLUxoAExYbGTEuOzUbHBwmFx0rHBUtIi0wLi0vLSsuFBQlJSUxSjEvLTAoKjI0GyQwIjwwMC4tMC0qLjFLMSwuHBUcJSYmMS8tMCgqMjQbJDAiPDAwLi0wLSouMUsxLC4lJSUlGSolJS4lJSY9GCMlPRkZJSUlJismEyYlGiM/SD8bODg4ODg4TjMqKioqGBgYGDg5Ozs7OzslOzc3NzctKS4iIiIiIiI1ISEhISETExMTKiklJSUlJSUlJycnJyAlIBMmJiYmJiYmJiYpSxQUFCEhISUlJksXFw0lJUowUzclKDcsJSUlGCUlJScoAAAAAAADAAAAAwAAAxYAAQAAAAAAHAADAAEAAAHmAAYBygAAACAA4AADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGE
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
QuAFuL7gBHxC4AXDQuAFwL7gBihC4AXHQuAFxL7oBcgEfAxoREjm4AR8QuAF00LgBdC+4AR8QuAF30LgBdy+4AR8QuAF50LgBeS+4AR8QuAF80LgBfC+4AR8QuAF/0LgBfy+6AYABHwEGERI5uAEfELgBgdC4AYEvuAGKELgBgtC4AYIvuAEfELgBg9C4AYMvuAGKELgBhNC4AYQvuAGKELgBhtC4AYYvuAGKELgBjNC4AYwvuAGKELgBjtC4AY4vuAGKELgBkNC4AZAvuAGKELgBktC4AZIvugGmAQYAwhESObgDGhC4AanQuAMaELgBrdC4Aa0vuAMaELgBs9C4AbMvuAGmELgBtNC4AbQvuAMaELgBuNC4AbgvuAGmELgBudC4AbkvuAMaELgBvNC4AbwvuAGmELgBvdC4Ab0vuAMaELgBv9C4Ab8vuAMaELgBwtC4AcIvugHMAQYAwhESObgDGhC4Ac7QuAHOL7gDGhC4AdPQuAHTL7gBphC4AdTQuAHUL7oB3QEGAMIREjm6Af8BBgDCERI5uAISELgCCtC4AgovuAISELgCFNC4AgvQuAILL7gCEhC4Ag3QuAINL7gCFBC4Ag7QuAISELgCENC4AhAvuAISELgCF9C4AhcvuAISELgCGtC4AhovugI/AQYAwhESOboCQQEGAMIREjm6AkMBBgDCERI5ugJFAQYAwhESOboCSwEGAMIREjm6Ak0BBgDCERI5uAMaELgCUdC4AlEvuAGmELgCUtC4AlIvugJWAQYAwhESOboCWAEGAMIREjm6Al0BBgDCERI5ugJvAQYAwhESOboCdgEGAMIREjm6AngBBgDCERI5ugJ+AQYAwhESOboCgQEGAMIREjm6AokBBgDCERI5ugKSAQYAwhESOboClwEGAMIREjm6AqEBBgDCERI5ugKwAQYAwhESOboCsgEGAMIREjm6ArwBBgDCERI5uAMaELgCwNC4AsAvugLQAQYAwhES
OboC4gEGAMIREjm6Au8BBgDCERI5ugLyAQYAwhESOboDAgEGAMIREjm4AxoQuAMG0LgDBi+4AxoQuAMK0LgDGhC4Aw7QuAGmELgDD9C4AxoQuAMQ0LgDEC+4AxoQuAMT0LgDEy+4AxoQuAMX0LgDFy+4AaYQuAMY0LgDGC+4AG8QuANR3AC4AOMvuAAAL7gAAy+4AAgvuAAML7gAGC+4AZQvugMsAM0AAyu6AZgCOwADK7gBmBC4AAbQuAAGL7oAIADjAAAREjm4AZgQuAAk0LgAJC+4AZgQuAAm0LgAJi+6ADACOwGYERI5ugAxAjsBmBESOboAOQI7AZgREjm6ADsCOwGYERI5ugA/AjsBmBESOboASwI7AZgREjm6AFAA4wAAERI5ugBVAOMAABESOboAVwDjAAAREjm6AGoA4wAAERI5ugB4AOMAABESOboAfgDjAAAREjm6AKwA4wAAERI5ugC2AOMAABESObgAzRC4AMXQuADFL7oAxwDNAywREjm4AM0QuADJ0LgAyS+6ANMA4wAAERI5ugDrAOMAABESObgAzRC4AO7QuADuL7gAzRC4APLQuADyL7gAzRC4APfQuADNELgA+dC4APkvugD9AOMAABESObgAzRC4AP/QuAD/L7gDLBC4ARLQuAESL7gDLBC4ARTQuAEUL7oBGQDjAAAREjm6ARoA4wAAERI5ugEuAOMAABESOboBMADjAAAREjm6ATEA4wAAERI5ugEyAOMAABESOboBYwDjAAAREjm6AWsA4wAAERI5ugFyAOMAABESOboBgADjAAAREjm4AZgQuAGW0LoBpgDjAAAREjm6AcwA4wAAERI5ugHdAOMAABESOboB/wDjAAAREjm4AjsQuAIl0LgCJS+4AjsQuAIn0LgCJy+4AjsQuAIq0LgCKi+4AjsQuAIs0LgCLC+4AjsQuAIv0LgCLy+4AjsQuAIx0LgCMS+4AjsQuAI00LgCNC+4AjsQuAI20
LgCOxC4AjjQuAI4L7oCPwDjAAAREjm6AkEA4wAAERI5ugJDAOMAABESOboCRQDjAAAREjm6AksA4wAAERI5ugJNAOMAABESOboCVgDjAAAREjm6AlgA4wAAERI5ugJdAOMAABESOboCbwDjAAAREjm6AnYA4wAAERI5ugJ4AOMAABESOboCfgDjAAAREjm6AoEA4wAAERI5ugKJAOMAABESOboCkgDjAAAREjm6ApcA4wAAERI5ugKhAOMAABESOboCsADjAAAREjm6ArIA4wAAERI5ugK8AOMAABESOboC0ADjAAAREjm6AuIA4wAAERI5ugLvAOMAABESOboC8gDjAAAREjm6AwIA4wAAERI5uAMsELgDHNC4AywQuAMg0LgDLBC4AyTQuAMsELgDJtC4AyYvuAMsELgDKNC4AywQuAMq0LgDKi+4AywQuANM0LgDTC8wMRMzFhUHMhUyNxY7ATUzFhU2MzIXNjMXNDMWFTYzFzcWFTcXNjMyFTY3FzcXNDMUMxUjFwYjFTIdASMnFRcHFhUnIwcyFSIVMhUiBxciFRcGIxcUIxcVJyMXIxYVFAcXBiMUMwcUFwYVMhcVIxYzBxUXBxYVBxYdAQcyFQcyFwczFQcyFSMVMxUiFRcHFxUHFhUGFRYVBxYXIhUWHQEUIxYVBhUWFQcVFwYdARYzBxUWMwcVFwcnFRcVFCMUMxQjFxUXFQcVIyI1BiMnByYjBiMVFwcjNCMHJwcmIwc0IwcjIjUGBzQnByI1ByY1ByYnFCMmKwEiByYjIhUnBhUjNCMUIyY1NyYjNTM0IzUzNTciNTY1IjUyPQE0IzciPQEyNSI9ATI3JzcnMyYnNDMmIzc1ByczNCc2Myc2NSI1NzU0Izc1NDcnMjcnNDMnNTQ3NTI3NCM3NCM3NTYzJjUyNyY1Myc3IjUyNzQjNTMXNCc2PQEnByM1MjUmPQEiNTc0IzU3NSczNjU0JzI1JjUyNSYnNyc2Mx
QzNxcyNxc2ExcUBxcHFjMWMwcXFRQHFhcGFTIXIh0BFBcGHQEXIh0BFyMXBhUWFxQXMjcyFyIHJwcUFwcWHQEHMh0BFyIdATMGFRQXFAcXFRQXFBcyNxQXMzcUMzcXMzI1Iic3NScyPQEnMjcnIwciJzUzMjc1NjU3IjU0NyczNjcnNjUnNDciNTcnNzU3IicGIycUKwEnFCMnByMnFCM0JxQjNCsBIhcVIyI1BxUjNRcVIzQXFSM1BxQrATUXFSc1BxUjIjUfASM1MgcUIyInBxUiJzUXFjMUBzQnNRcHIzUyNRYnFjMVIyYjNRcWMxUjBzQjNg8BJzQ3Mh8BBhUiJzUXFhcVIicjIhUjNCM0BxQXBzQnNjUHFBcVIhUnIwcjNTQ3NTQnNjUyBxQzMj0BNCcjFBcyFxQHJjUyPQEnNQczFAcmKwEHIzU0FxUjIjUWMzIVIzUHMhUHJiM1BzIXBycyFzcWFQcmIwcnNQMXIhUUFwcXFAcWHQEHMhUjFwcWHQEUBxYXMzIXNzIXNjsBFzcXMzcUMzI1JzY1NCcyNSYnNyYjBycHIicHJwciJwcnIwcmJxcVIzU0zAQHBAQEGAwJCgQUExQOGB4TGQcKBwQGCC0RFBgPBDsHIyojAw4HBwgNDgMHBwQEBwQEBAQEBgQKCgQFBwwECgoECAQEBAQCBgQEBAQGCA4CBgQGAgICBgQICAYFBwcDAwcHBwQIBAQICAQGAgQECAQLBAcHBwcCCAoHAwMOBwcHCg4IBAcVAwgRBwYHBwcIAwsIAwcqIAYHBBEHCgQDPQZFHAQOHwgFLAYhEyQHBgwUAjxGBAYHOAMECQYOCAMHBAQHBwcHEQcHBAcHBwMEBgMDBwQIAwcEBAQEBAgIBAQDBwYEAwMDAwQDAwMDAwIFBwcEBAQEBwcHAw0DBwMDAwcHEQMEBA4RAwYEBAsDBwcEBAgTES0YCARCBhgGAwMGAwMEBQwHBwQEAwMDBAQEBAQ
EBAQEBBEEFAMHBw4GBSwHBAcDAwcDAwcHBwQEA1UDB1kDEQMHBwMfAwQVBAQEBwMGCw0GAQobBAoDAwMDAwcKAwMDBwQEBwMEBANXDA0KBxgDBxUvEQQ5BAMHGHQECjMHIgZmB4EHBLUObQcKyQMNAzMHBgF6BgEOCwYRB2kRCg4NjgsGBAsJ5BMEDRgHDUoHGAQNJhEKBQlHLgIdDwoHBAobAwYEBFksCgoYCgMGBgMKXwcHBwTaBAoLEREGVRQYCwkEDQRxGAoSKwcRmQYDCwYRBAMOCgaJBw0DGwcRB4UEBAQEBAQEBAQEBwMDAwMKDggGBhcLEhALIgMRQRcHGwMDBgMDBAQICQcVBgkTBgcYAwcHFAQHA360BgdNAQkLBhELCwwFCgQEBAsHBAQEBAwJBhAFBQoLCxEgBQwEESQRCwUFBREKCwUFFgQGBRsbMAslGwUgBgsrCwURFSVABjUFCwsGFQU8GiYPCwoLCwEKSwsKERAQDwsGIAsFGwUKFiAWEAEKHhEHBUoGAQoQBRgJCgUBChEEEQEJBSEbBBYLRhUFBQUREBtlGxo2EQUmChEMBQUFBQUWBBUVBAQEBAoKBAsKExMLBQUEBwYLBQoKBQoFDBAREAsNHgsfDB8HFRoLCwUFCwYLFQsENgsGD1YGRTAMBDYLFQULDAkQCgsGCw8REBuFDAomFSEECxAMChAbBBYLJisKKQIhCQwKEAsLHwwFBQolFgsLBgsLCgYPBwoQBgQLG0kdBRtGCwQREikbNiscBgYRBgj+sRgEBh8HJaMLCgMIBgUnBwMKBAMIBgYHMAcDRAcUGAQdAUMFBCYUHwQHBg4GCAMRESkYDQQbHiIiBAcURBUeDg0DBgcDAwMDQCKgDgYEiAciAwoHEQ0EYiIRBA4XB/g6GAYEBwcsBhEEByIXCwQEBAQEBAQEBAYEAwNwAwf5AwMoBwYsAwMDBwcDBwMEEQQHGwcDAwcHAwsHBCkKDgcQ
CAcsBAQKBQEGBAcDEQ0HAwMUFAoHBwYKAw0IFQMpDwwDDQoOBQIKDgMDBwYLHxUGAwcHBwMEGAMGAQYHDQoGBwYBAxUiAwQJBQcHCgMsBQwHCgYIFQQHAwcHBAYHCgMGDgcOSwMGBAcHAwoD/jIHAwgGBwYEBwYHBxgDIgcGCAYIBiUiBAQEBAQHAwMDSgcHAyAhAwYZHxEEBwMDAwMDAwMDAwIP6woDBgAAH//O/osFJwelAZwCkwKcAqACqAKsArACtAK8AsACxQLOAtIC2ALdAuEC5QLpAu8C8wL4Av4DAgMGAwoDEAMUAxgDIAMkAygENboCFgEvAAMrugD9AS8CFhESObgBLxC4AQbQuAEvELgBCNC4AQgvuAEvELgBCtC4AQovuAEvELgBDNC4AS8QuAEQ0LgBEC+4AS8QuAES0LgBLxC4ARTQuAEUL7gBLxC4ARbQuAEWL7oBGQEvAQoREjm6ARoBLwIWERI5uAEvELgBHNC4ARwvuAEvELgBIdC4ASEvuAEvELgBKtC4ASovuAEvELgBLNC4ASwvuAEvELgBM9C4ATMvuAEvELgBOtC4AS8QuAE80LgBPC+4AS8QuAE+0LgBLxC4AUDQuAFAL7gBLxC4AULQugFFAS8BChESObgBLxC4AUfQuAFHL7gBLxC4AUvQuAFLL7gBLxC4AU7QuAFOL7oBYwEvAhYREjm6AYABLwIWERI5ugGMAS8CFhESObgCFhC4AcLQuAHCL7gCFhC4AgzQuAIML7gCFhC4AhDQuAIQL7gCFhC4AhLQuAISL7gCFhC4AhTQuAIUL7gCFhC4AuvQuAIWELgC7dC4Au0vuAIWELgDGtC4AxovuAIWELgDHtC4Ax4vALgAAC+4AAMvuAAIL7gADC+4ABgvuAGUL7gA4y+6AZgCkgADK7gBmBC4AAbQuAAGL7oAIADjAAAREjm4AZgQuAAk0LgAJC+4AZgQuAAm0LgAJi+4AZgQuAAo0LgAK
C+4AZgQuAAt0LgALS+6ADACkgGYERI5ugAxApIBmBESObgCkhC4ADjQuAA4L7oAOwKSAZgREjm6AD8A4wAAERI5ugBLAOMAABESOboAUADjAAAREjm6AFUA4wAAERI5ugBXAOMAABESOboAagDjAAAREjm6AHgA4wAAERI5ugB7AOMAABESOboAfgDjAAAREjm6AKcA4wAAERI5ugCsAOMAABESOboAswDjAAAREjm6ALYA4wAAERI5ugDHAOMAABESOboA0wDjAAAREjm6AOsA4wAAERI5ugD9AOMAABESOboBGQDjAAAREjm6ARoA4wAAERI5ugEuAOMAABESOboBMADjAAAREjm6ATIA4wAAERI5ugE6AOMAABESOboBRQDjAAAREjm6AWMA4wAAERI5ugGAAOMAABESOboBjADjAAAREjm4AZgQuAGW0LoBoQDjAAAREjm6AbIA4wAAERI5ugHIAOMAABESOboBzQDjAAAREjm6AdIA4wAAERI5ugHUAOMAABESOboB2QDjAAAREjm6AeEA4wAAERI5uAKSELgCiNC4AogvuAKSELgCitC4AoovuAKSELgCjNC4AowvuAKSELgCkNC4ApAvugK5AOMAABESOboC1wDjAAAREjm6AuAA4wAAERI5ugLjAOMAABESOboC5QDjAAAREjm6AvEA4wAAERI5ugLzAOMAABESOboC9wDjAAAREjm6AwEA4wAAERI5ugMJAOMAABESOboDEwDjAAAREjkwMQEzFhUHMhUyNxY7ATUzFhU2MzIXNjMXNjMWFTYzFzcWFTcXNjMyFTY3FzcXNDMUMxUjFwYjFTIdASMnFRcHFhUnIwcyFSIVMhUiBxciFRcGIxcUIxcVJyMXIxYVFAcXBiMUMwcUFwYVMhcVIxYzBxUXBxYVBxYdAQcWFQcyFwczFQcyFSMVMxUiFRcHFxUHFhUiFRYVBxYXIhUyHQEUIxYVBhUWFQcVFyIdARYzBx
UWMwcVFwcnFRcVFCMUMxQjFxUXFQcVIyI1BiMnByYjBiMVFwcjNCMHJwcmIwc0IwcjIjUGBzQnByI1ByY1ByYnFCMmKwEiByYjIhUnBhUjNCMUIyY1NyYjNTM0IzUzNTciNTY1IjUyPQE0IzciPQEyNSI9ATI3JzcnMyYnNDMmIzc1ByczNCc2Myc2NSI1NzU0Izc1NDcnMjcnNDMnNTQ3NTI3NCM3NCM3NTYzJjUyNyY1Myc3IjUyNzQjNTMXNCc2PQEnByM1MjUmPQEiNTc0IzU3NSczNjU0JzI1JjUyNSYnNyc2MxQzNxcyNxc2FxUWFxUjJwYjJjUjFAcWHQEGBwYVMwcnIwYHBhUGBxcGBxYXFBcUFxYXMhc1MxUjFRYXFhczNSczFwcyFTczFRYXFhc3BxUWMxYXBiMGIycHIyciJzQ3JjU2NSI1NyY9ATciJwcmJwciJyMHFxUUFxQHFhUzFSMVFxUWFxQXFhcVBzIVFAcUFxQzNxcyNxYzNjc0JzQ3NCc2PQE0NzY3Mjc2PQEmJyYnJi8BJicmJyYnNjc0NzY1MzIVMjcWFRYXFDM3FzY7ARc0MzIXNjMXNjUzFhU3MjU0JzY1Jzc0JyYnJicHJjU0NyY1NCcjJxQrASInByInIhcWMxUiByYjNBcVIzQHMxcGKwE1NBcVIzQXFSM1BxUjNRcWHQEjJj0BFxUjNQUzFSM1BxYzFCsBJiM1FwcnNxcjJic1FiUjJzcWNxUjNRcVIzUHFSM0ATMVIzU0ARUjNR8BBiM1BxUUIzU0FxUjNRcVIzUHFSM1FzMUKwE0HQEjNQUVIzUHMxUUKwE1NBcVIzUHFSM1AV8GCwYGBiYSDxAGIRwhFiUwHiYBCxALBgoMRxsgJhgGXAw2QzcFFgoKDRQXBgsLBgYLBgYGBgYJBxAQBggKEgYQEAYMBgYGBgMJBgYGBgkNFgMJBgoEBAQKBgwMCQgLCwUFCwsLBgwGBgwMBgoEBgY
MBhEGDAwMDAQMEAwEBBULCgoQFgwGCyEFDBsMCgoKDAwFEQwFDEEzCgsGGwsQBgVfCm4rBhYyCwlFCjQeOAwJEyADX20GCgxYBgcPChYMBgwGBgwMDAwcDAsGCwsLBgcJBAQMBgwFCwYGBgYGDAwGBgYMCQcEBAQEBgYGBgYGAgkLCwUFBQUJCQkGFQYJBAQECwsaBAUFFhoECgYGEQULCwYGDB4aRycMB2cJJ6k6BwcUEQcHBwMDQwspCgMKCj4XNxQHAwYEBgQiRDQhDAkKCjtDEBIDBwoEBAcKCxsKQREKBAkFGwcVKC80AxgHNhAIBwcDAwMGAwYBEQcUHzNKRAsEDQMHDQ0KIxcsSH0DAwMHLwcOIjkHBAchAwMDAyJMKygtMyIoNXUgQ1IjExIQLxUDES0sBwYIBlITDyIRBgYIEREDBAc+EBgDBwofEQQEBAQ6IFsuIAdEBwMKGBEKBwgGBwpOBjwTAgYLCwZwB+cOBg8FB20HRANOC+sKAwrSA/7YChs9ExIGEQkI4wMHBMwHBwcV/rkNBwMRJgS7B9IH/msHDgFzCs8HBQWMBpIEpwrWBEsDBgQD/hoOMAcHBoEKLQoHpQEKDAYSDAwNBQsFBQUMBwUFBQUOCQcSBgYLDAwSIgUMBRInEgwFBQUSCwwFBRcFBgUeHDQMJx4FIgcMLgwFEhcnRQc5BQwLBxcFQBwpEAwLDAwBClELAQsREhERDAUjDAUdBgsXIxcSCyATBwVQBwsRBhkKCwUCChIFEgsFIx0FFwxLFwUFBRIRHW0dHDoSBSkLEgwFBQUFBhcFFxcFBQUFCwsFDAsUFQwFBQQIBwwGCwsGCwUMERIRDA8fDCIMIgcXHAsMBgUMBgwXCwU6CwcQXAdKMw0FOQwXBQsNChELDAYMEBIRHZAMCygXIwYLEgwLER0FFwwpLgsrAyMKDQsRCwwiDAUFCygYDAsGCwwLBxAHCxEGBQwdTh8FHUwLBRIUKx06
Lh4HBxIGCZ0LEgUEBAcIBRYSISARDAUKBwcHIRlSEDBHByU6DxpiVh5LHxsKCgoEKh0OCgoLDhEHBw4TFTIgBxEKDkdPox4GAxFcBgFWEAYEAxEWCQoiBwQGBQQKBhEiSggIBg8dChEOHl4nDytEGz0RAwkTBSofBAQHAwYHBAYIHgwSFhofGQIYJTonxxvaWIY8HCgsDBMKFDdmLjQTNRAOBwQMHRVYQAMDAwMDAwoEBggFBQNBDBIHBB4RMVssGxUGAwgaCQtXDxEEAwMDAwZKBwQGBgZNBwYhAxURBiEHBg0GBhsKCgMFBQQFBQQEBgYGDhEOAwcHAwYHAwczAg8DDwIDBwICBwcKBAQKBwb+ZQ0GBv7dBAQpAwsOHwMHBAYGBwcECgoUBwcEBgYNERGZCgoYBwcHBg0KChcODgA0/87/tQXYBx0CBQK9AsECxwLYAt8C5QLsAvIC+gMAAwcDCwMSAxYDGgMhAykDLwM7A2MDbwN2A3oDfgOCA4cDiwOPA5QDmgOhA6gDrQO7A8EDyAPMA9AD1gPeA+ID5gPrA+8D8wP5BA8EHAQgBCYELgAAATMWHQEUIxcVBxcUBxYVFCMWFQYjFxUjFTIVBzQjBxUzBxcVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnN
TMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NSInNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYFBgcGBwYVFxYXFhcVBiMiBwYHBgcXIxQXIxYzFDMVByciBxYXFhcyNxY7AQcVMhcyNRc0MxUyNzI/ARQzFhcWFzI3NSc3FxQHFTM3NjUmNQc0JyY1NjUmNTM2MzUGIyInNDcUFzM3JyIHIzY1Njc1IzQ3NSM0NzQjJiMmIwc0JwYHBiMnIgcmJyYnJiM1Jj0BNDc2MzQ3NCcyNzY3NCM3NCc3JiM3JzY1JjUmJyY1JiM0JyIHJiciFxUjNRcUFxUnNQc2NxYXFhUUBwYjIicmJzU2NzIXFCMmJxciFSInMgcUMxUnNTIzFSMnNxYHFBcVIzQnNBcGKwE3MgcWFSMiJzUFIzUyBRUUByY1MhcVIzUFFSM1EzMWFSM1NBcyFSIHNCM0BxUjJjUWFzM2MxcVIyInBzY1FxYzBhUWFSIdARQXMjUzFSMXFhUGFQYHJisBNSYnIic0NzY3NjcyFwUWHQEiByYrATU3MhcVIgc1NxYXIzUyFxUjNQUVIzUFIzU3FgUVIzUXFSM1BxUmIzUFMhUjIicHMh0BIzQnFxQjNCM3FgUVIyInBTM3FDMHFRQzFSMmIzUXFDMVIzcHFBcjJj0BBxUjNQUVIzUFMxUiBzUHFwYVIzQjNCEVIicFFSM1MzIVIzUFFSM0BRUjNQUXFSMnNTMVNzMVIgcmKwEHFBcjIic3NSYnFzYXMhc2MxYVFCMmJyY1BxUjNSEyHQ
EmNRcUFwciJzY1BakIJwgIEAgIEBAQCAgIEBgQCAcPDx8YGB8PFwwLCBAICAgPCxQfDw8XEwQXEQYXFw8XFw8XFx8fFwgIEBAQGAgICAgQEBAQCAgQCAgQEBAICBAQEBAICBAIEAgQEBAICAgIGR5vCBA4QxwQJwgQIS4IIR8QBwhgDxAQEAgoNxAQEAgQEB88BBAIFRoQCBAIWB8ZDkQrYA8PDw8fGCAOGQcHDw8IFxcPAg0IDxAQCAcHBw8PFxAoCBAICAoGCAgICAgICBAQEAgICAgQEAgQCBgYCAgIKAgIEBAQECAQCCAYGAgICBAICAoWBhoICA4KGBAYGBAEFAgYEAIOCA8HDw8QJwgIFxcQEBAYEAgQBw8JFjMUCAgoCzwIDjEDDRMNEBAHAw0YGAhfCx06BRAIEBAIDwgQEAgDDUcQKD8IJAQnBw9ICAgIEAcIOAgIIAgQCBIFKAgIPBMgDxEQ/MWJSUgsGxQQQiklKgkSL0YZFRoDAwYDAQYzBBcEBw4bN1ERBBYICgMgNQMmAxQjG06nAysSLQoDEQ4RBwMHR3AUBwowBAQECAUYAwMEDhERBwQDBwMlIBMHDgoDAxEEHQUHDS8qEB8RBAYRGBYuEAUKKRMFHgMDBwgJBwQEBAQGAwMDAxgEKCggcBEYBhwFSQcwBwq/LB8hNCkbNyISHTQQDvEFBQcMBT0DBQkRMwcRA48KBwcHUgcDC0EFBRULCWwKBwUB/v0HBwGLDg4GRQ39ugNiBAoUOQcDBwNxChEZVAMYBAMKCw0RB7cNCwoUAxsEFxciLwdONg0ODjsGIhcXBjQvCAMH/s4sAwcLChQDBD0KDgQSEAcHYgcC7A39DQ4ECgJ8BDMG0AcD/kkHAwYBWAYDB7sHCgQG/s4DBgEBGgsGBAQVDhkFXw0UA5wRCgowAwKuBv1eCwkPkhEEAxECNAYB/uoHdwcLAZUH/igE/voRBg50IhEWDAYICgcHBwYEByE
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
xVfCjUfCxUKIBUVChUVCx81HwsKFR8VCyAVHx8LCxUKEBAVCzX8kgwB9QwMHgwGBhIMBgZCDB48BgELBgwMBgwMBhsDDCQeBgwGEgELBhIMCg4GDAELEwsGJAwYAQsYDCAcBgYGMxUURlQMBt4MBgwGCRUGBioMDHgMMBIGQgZUDAwGAQsBC6IGBh4MDAAC/87/DQTNBr0BTAGoBY24AakvuAGAL7gBqRC4ANnQuADZL7gA69C4AOsvuAGAELgAady4ACrQuAAqL7oABADrACoREjm6AAsA6wAqERI5ugAPAOsAKhESObgBgBC4ABbQuAAWL7oAGAGAAGkREjm6ADABgABpERI5uABpELgAUtC4AFIvuABpELgAVtC4AFYvuABpELgAW9C4AFsvuABpELgAXdC4AF0vuABpELgAYNC4AGAvuABpELgAYtC4AGIvuABpELgAZNC4AGQvuABpELgAZtC4AGYvuABpELgAa9C4AGsvuABpELgAbdC4AGkQuABw0LgAcC+6AHQBgABpERI5ugB9AYAAaRESOboAhAGAAGkREjm6AIcBgABpERI5uAGAELgAidC4AIkvugCKAOsAKhESOboAjQDrACoREjm6AI8A6wAqERI5ugCXAOsAKhESOboAnQDrACoREjm6AKcA6wAqERI5ugCoAOsAKhESOboArADrACoREjm6ALAA6wAqERI5ugC0AOsAKhESObgA2RC4AVjcuAC70LgAuy+4AVgQuAC90LgAvS+6AL4A2QFYERI5uADZELgAxNC4AMQvuADZELgAyNC4AMgvuADZELgAy9C4AMsvuADZELgA0NC4ANAvuADZELgA0tC4ANIvuADZELgA1tC4ANYvuADZELgA29C4ANsvuADZELgA3dC4AN0vuADZELgA39C4AN8vuADZELgA4dC4AOEvuADZELgA49C4AOMvuADZELgA5dC4AOUvuADZELgA6dC4AOkvuADZELgA7dC4AO
0vuADZELgA79C4AO8vuADZELgA8dC4APEvuADZELgA89C4ANkQuAD10LgA9S+4ANkQuAD40LgA2RC4APrQuAD6L7gA2RC4APzQuAD8L7gA2RC4AQnQuAEJL7oBCwDZAVgREjm6ARQA2QFYERI5ugEbANkBWBESOboBKADrACoREjm6ATAA6wAqERI5ugE0AOsAKhESOboBOADrACoREjm6ATsA6wAqERI5ugE/AOsAKhESOboBQADrACoREjm6AUUA6wAqERI5ugFJAOsAKhESObgBWBC4AU/QuAFPL7gBWBC4AVHQuAFRL7gBWBC4AVTQuAFYELgBVtC4AVYvugFgAOsAKhESObgBgBC4AX7QuAF+L7gBgBC4AYLQuAGCL7gBgBC4AYTQuAGAELgBh9C4AYAQuAGK0LgBii+6AZQA6wAqERI5ugGfAOsAKhESObgBWBC4AafQuAGnL7gAaRC4AarcALgAoC+4AKUvuACoL7gArC+4ALAvuACzL7gAtS+4ALkvuAC/L7gAAC+4AAIvuAAEL7gACC+4AAsvuAANL7gADy+4ABEvuAAVL7gAFy+4ABovuAAdL7gAHy+4AUgvugAYAKAAABESOboAMACgAAAREjm6AHQAoAAAERI5ugB9AKAAABESOboAhACgAAAREjm6AIcAoAAAERI5ugCKAKAAABESOboAjQCgAAAREjm6AI8AoAAAERI5ugCXAKAAABESOboAnQCgAAAREjm6AKcAoAAAERI5ugC0AKAAABESOboAvQCgAAAREjm6AL4AoAAAERI5ugDfAKAAABESOboA4QCgAAAREjm6AO8AoAAAERI5ugDxAKAAABESOboA8wCgAAAREjm6APUAoAAAERI5ugD6AKAAABESOboBCgCgAAAREjm6AQsAoAAAERI5ugEUAKAAABESOboBGwCgAAAREjm6ASgAoAAAERI5ugEwAKAAABESOboBNACgAAAREjm6ATgAoAAAERI
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
QuAKrL7gCtxC4Aq7QuAKuL7gCtxC4ArHQuAKxL7gCtxC4ArPQuAK3ELgCtdC4ArUvuAK3ELgCudC4ArkvuAK3ELgCvNC4ArwvuAK3ELgCvtC4Ar4vuAK3ELgCwNC4AsAvuAK3ELgCwtC4AsIvugLKAXACpxESOboC0QFwAqcREjkAuAE9L7gBQS+4AUQvuAFGL7gBSi+4AUwvuAAAL7gAAi+4AAcvuAAJL7gADi+4ABAvuAAUL7gAHy+4ADkvuAA8L7gAPi+4AEAvuABDL7gATC+4AE4vuABQL7gAUy+4AcsvuAHOL7oADwFEAAAREjm6AB0BRAAAERI5ugAhAUQAABESOboAJAFEAAAREjm6AC4BRAAAERI5ugBFAUQAABESOboAbQFEAAAREjm6AIYBRAAAERI5ugCIAUQAABESOboAiwFEAAAREjm6AJIBRAAAERI5ugCWAUQAABESOboAmQFEAAAREjm6AJoBRAAAERI5ugCrAUQAABESOboAvgFEAAAREjm6AMEBRAAAERI5ugDDAUQAABESOboAxwFEAAAREjm6AMoBRAAAERI5ugDgAUQAABESOboA5wFEAAAREjm6AOwBRAAAERI5ugDvAUQAABESOboBBwFEAAAREjm6AQ0BRAAAERI5ugEuAUQAABESOboBOQFEAAAREjm6AVoBRAAAERI5ugFcAUQAABESOboBXQFEAAAREjm6AV8BRAAAERI5ugFkAUQAABESOboBcwFEAAAREjm6AYUBRAAAERI5ugGIAUQAABESOboBsAFEAAAREjm6AdwBRAAAERI5ugIXAUQAABESOboCIAFEAAAREjm6Ak4BRAAAERI5ugJQAUQAABESOboCWQFEAAAREjm6AsoBRAAAERI5ugLNAUQAABESOboC0QFEAAAREjm6AuMBRAAAERI5ugLwAUQAABESOboC8gFEAAAREjkwMQEUFzcyFzYzFjM1FjM2MzUjNRYzNRYXNRc1
FzcWMyc1MhU3Mxc1FzcWOwE1MxYVNjMVMzUzFTczNDMXNjMWMzYzFjM3FBc2MxY7ATI1MhU2NRYXNxcVFAcWFQcWFwcWFQcWFSMXBxYVBiMWMxUjFxQjFhUGIxYXBxYdASMmIxUWFSIVFh0BIxcVIxUzBhUXBxUXFSMVFxUnIxUzBxQXBxcHFxUUIxcGHQEXBiMXFQYHFwYjFxUUIxQzBzMVFCMVFxQjFxUGFTIXIycVFwYjFRQzFSMnFRYXBxQzBxcGHQEXFSIVMhUGIxUWFQcWMwcnIxUUIxcGIxUyFQYVFjMVIhUjIjUHJwYjFTMVIyInIxQjJyIHJwcmIxUjIjUHIyI1IhUiNSIVJiMVJyMUByInIxQjJwYjNQciJwcnFAcUBzQnIgcnBiMmKwEiNQcGIzU0JzcmIzY1IjUyNSInMjUXNScyNyY1NyYnNjU0JzYzJj0BAzMnNTM1JzI3NSI1MjUiNTcnNyc3JzI1JzI9ASM1MzUnMjUiNTI9ATQnNjUmJzY3JzcnNjMmJzQzJic2NSc2NScWFzI1Mhc3FzI3FjM1FhU3Mxc2OwEXNjsBNDcXMjUXMgEVNj8BNj8BJzI1JzI1JzY9ATQnMjcnNyc2NTQnNzY3IjU2NyY9ATciNTQ3JzciJzc0JyYnJic0JxQjJwYVBgcGFRcGBzIXIh0BFyIdARQzBhUUFwcUFwYHFxQHFhcGHQEXIxcVBzIVBgcXBxUXBhUUFxYzFhcWFzM3FBc3NTMVJzQnFCMmJzYzJic2NS8BMjU0JzI9ASY1NCc2PQE3IjU3NCc3JzQ3JzQ3JzciNTQ3JzI3JzU3Jj0BNyInNj0BNDM2MzQ3NDcWFTIXBxYXIhUWHQEXIxQXBgcWFQcWFQcWFwYHFwcyFQYdARQHMhUGHQEXIgcGKwElNTMVATMVIiU1FxQBNTMyFzc0OwEVByInIj0BFjMUNzQjNDsBFSI3NTMVAUUVCRwgAgcICQ8LCQQJOA0uN
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
9C4AfYQuAIC0LgB9hC4AgTQuAIEL7gBnRC4AkTQuAJEL7gBnRC4AkbQuAJGL7oCSwAAAOMREjm6Ak4AAADjERI5ugJQAAAA4xESOTAxASMmNTciNSIHJisBFSMmNQYjIicGIycGIyY1BiMnByY1BycGIyI1BgcnBycUIzQjNTMnNjM1Ij0BMxc1JzcmNRczNyI1MjUiNTI3JzI1JzYzJzQzJzUXMyczJjU0Nyc2MzQjNzQnNjUiJzUzJiM3NSc3JjU3Jj0BNyI1NyInNyM1NyI1MzUjNTI1JzcnNTcmNTY1JjU3JicyNSY9ATQzJjU2NSY1NzUnNj0BJiM3NSYjNzUnNxc1JzU0MzQjNDMnNSc1NzUzMhU2Mxc3FjM2MzUnNzMUMzcXNxYzNxQzNzMyFTY3FBc3MhU3FhU3Fhc0MxY7ATI3FjMyNRc2NTMUMzQzFhUHFjMVIxQzFSMVBzIVBhUyFSIdARQzBzIdASIVMh0BIgcXBxcjFhcUIxYzBxU3FyMUFwYjFwYVMhUHFRQzBxUUBxciBxcUIxcVFAcVIgcUMwcUMwcVBiMWFSIHFhUjFwcyFSIHFDMVIycUFwYdARc3MxUiFRYdATIVBxQzFQcVFyMGFRQXIhUWFSIVFhcHFwYjNCMHJyIHJwYDNCsBFAcGBwYHJyIHJwYHBgcWFyIHFwcUMzcVMjcWOwEyFxUHFRQXFAcXFAcXBhUUFxQHFwcXIh0BFwcVFyIVFwcUFwYdARQXBxciFRQXBgcWFwYdARQ7ATcVMjcWMzQzFjsBNxU3MxcyPQE0JzY9ATQnNj0BJzMnNTQ3IjUzJiczNCc2NTQnNj0BNDcnNjcnNjUmJzY3NCc3JiM2PQEnMzQnNj0BNCMUIycGBRUjNR0BIzUHFSM1Aq8ECQUFBB4NCw0EGRYZEB0kFx0BCAwIBQgJNhQZHRIERgkqMyoDEQgICg8RBAgIBQUIBQQEBAQHBQwMBQYIDgUMDAQJBQUFBQ
MGBAQEBAYKEAIHBQgDAwMHBAkJBgYICAMDCAgIBQkEBAkJBAcDBAQJBQ0FCQkJCQMJDAkDAxEJCAgMEAkFCRoDCRUJBwkHCQkEDQkECTImCAgFFQgMBQNJB1QhBRAmCQc0BygXKwkHDhgDSFMFBwlEBQUMCBEJBQkEBAkJCQkVCQgFCQkJBQUHAwMJBAkDCAUFBAQECQkEBAUJBwUDAwMDBAUFBQUFAgYICAUFBQUICAgEEAQIAwMDCQkVAwUFEhUDBwUFDQQJCQQECRcUNh0JBk4HHnwGBCVYLSw2EQQHBgs9KwsDBAUCAwNHBwgGNSZPGggHBwQEBAQLBwMHBAcDBgoEBAQEBAQEBAcDAwMEBAYDBwoHCUUSAgQGBzMHERsVJQMDAwMDAwMNAwMDAwMDBgMDBwMDBAQEBwcDBAQHBAYDAwMDDjcDIgz+XAMHSAP+0wEJCwYRCwsMBQoEBAQLBwQEBAQMCQYQBQUKCwsRIAUMBBEkEQsFBQURCgsFBRYEBgUbGzALJRsFIAYLKwsFERUlQAY1BQsLBhUFPBomDwsKCwsBCksLChEQEA8LBiALBRsFChYgFhABCh4RBwVKBgEKEAUYCQoFAQoRBBEBCQUhGwQWC0YVBQUFERAbZRsaNhEFJgoRDAUFBQUFFgQVFQQEBAQKCgQLChMTCwUFBAcGCwUKCgUKBQwQERALDR4LHwwfBxUaCwsFBQsGCxULBDYLBg9WBkUwDAQ2CxUFCwwJEAoLBgsPERAbhQwKJhUhBAsQDAoQGwQWCyYrCikCIQkMChALCx8MBQUKJRYLCwYLCwoGDwcKEAYECxtJHQUbRgsEERIpGzYrHAYGEQYIBxEEBhYrHB82AwMDDR8TDxwGKRcYGAMDAwYREQsDHxsDBxEIHREo1woLBwYzBxgDHAoNCxcEBw0LBhMMAwwTB1UGCAYYRE81FhoiBwQEBwMDAwMDAwMbCggGBgcODBIFEwQGGCxPfQQYBh0
hFgUHBgYIIi4dDS0GBysIVAsENhA+e3MGCCkHCg1QdgobAwYG+QoKLwQEBAYGAAAAABj/zv7aBP4HGAIFA3QDeAN9A4EDhQOJA40DkQOXA50DoQOmA6wDsAO+A8QDyAPOA9ID1gPaA+AD5AQxugA9A1EAAyu4AD0QuAAD0LoABgNRAD0REjm4AD0QuAAH0LgAPRC4AArQuAAKL7gAPRC4AA7QuAA9ELgAENC4ABAvuAA9ELgAEtC4AD0QuAAV0LgAFS+6ABgDUQA9ERI5uAA9ELgAGtC6AB8DUQA9ERI5ugAgA1EAPRESObgAPRC4ACLQuAA9ELgAJ9C6ACoDUQA9ERI5uAA9ELgAK9C4ACsvugAuA1EAPRESObgAPRC4ADDQuAAwL7gAPRC4ADLQuAAyL7oANQNRAD0REjm4AD0QuAA50LgAOS+6AEADUQA9ERI5uAA9ELgAQ9C4AEMvugBEA1EAPRESOboATANRAD0REjm4AD0QuABR0LgAUS+6AFIDUQA9ERI5uAA9ELgAVdC4AFUvugBXA1EAPRESObgAPRC4AFjQuAA9ELgAYNC4AGAvugBjA1EAPRESObgAPRC4AGnQugBrA1EAPRESObgAPRC4AGzQuAA9ELgAcdC4AHEvuAA9ELgAc9C6AHUDUQA9ERI5uAA9ELgAdtC6AHgDUQA9ERI5ugB6A1EAPRESObgAPRC4AHzQugB+A1EAPRESObgAPRC4AIDQugCDA1EAPRESObgAPRC4AITQuAA9ELgAiNC4AD0QuACK0LgAii+6AI0DUQA9ERI5uAA9ELgAj9C4AD0QuACV0LgAlS+4AD0QuACX0LgAPRC4AJrQugCbA1EAPRESObgAPRC4AJzQugCfA1EAPRESObgAPRC4AKDQuANRELgB+9C4AfsvugH8A1EAPRESOboB/QNRAD0REjm6A1QDUQA9ERI5uANRELgDVdC6A1YB+wA9ERI5ugNYA1EAPRESObgDURC4
A1nQuANRELgDXNC4A1wvuANRELgDXtC4A14vuANRELgDYdC4A2EvuANRELgDY9C4AD0QuAPm3AC4AAAvuAHGL7gB2i+4AeEvuAHlL7gB7S+4AfMvuAH3L7gB+S+4Af8vugLNAKgAAyu4As0QuACa0LgAmi+6AJsAqALNERI5ugCfAKgCzRESObgAqBC4AKPQuACoELgArtC4AK4vuACoELgAsNC4ALAvuACoELgAxdC4AMUvuACoELgAyNC4AKgQuADK0LgAyi+6AMwAqALNERI5uACoELgAz9C4AM8vuACoELgA2dC4ANkvuACoELgA3NC4ANwvuACoELgA3tC4AKgQuADg0LgA4C+4AKgQuADi0LoA6QCoAs0REjm6AeYB2gAAERI5ugH4AdoAABESObgCzRC4AqjQuAKoL7gCzRC4AqvQuAKrL7gCzRC4Aq3QuAKtL7gCzRC4ArHQuAKxL7gCzRC4ArXQuALNELgCt9C4ArcvuALNELgCudC4As0QuAK70LgCuy+4As0QuAK+0LgCvi+4As0QuALA0LgCzRC4AsPQuALNELgCxdC4AsUvMDEBMxYdARQjFxUHFxQHFhUUIxYVBiMXFSMVMhUHNCMHFTMHFxUUIxUzFSMVFxUUIxYzNDMVFCMXBxYVBhUyFyIVFwcUFxUiBxcGIxcHFwYdARQzFQcUMxUjFxUGFRQXBxYVBhUXBhUXBxYVFCMXFQcXBhUXFRQjFxQjFwcWFRQHFh0BFCMXFQcWFQYdARcHMhUGIxUXBhUWFQcWFSMXFRQjFxUGByMiNQcjIicHJxQjNQciJwciJwYjJjUGFScjFCM0IwcnIxUzFCMiNTI1JwYVJwYjNCsBIgcmIwciNQYjIicGKwEiPQE0NycyPQEnNDM1NCM1MjcnNDcnNjM0JzcjNTYzJj0BJic3FDM0NyY1MjUiPQE3IjU3IjUyNRczNDcmJzMnNyc2NSI1MjUjNTI1JzQzJzU0Myc1M
yc1NyYjNTM1IjU2NTMVMzU0JzI1IjU3Fzc1Iic3JzU0MzQnNTY1JzcmNTI1JzY1Iic1Mjc1JzI1IiczNSM0MzUnMyYjNTMXNSc1NjMnNTMnMjUmIzU0NzQnNwc1Mj0BIzUzNSM1MzQjNzUnNSM0NyYnNjsBFhU3Mhc2NTIXNjMyFzcWMzYzFBc3FDM0MzIXNjMVNzMVMjUWMzYzFTcWMzYzFzcXNDMnNRYzNyc3FBcUOwEnNxYVMzcnNTMXMyc1MzIXNycyNRYzNxYzNgU0KwEHNCMHNSIHNCsBFAc1BgcGIwYHFSIHFwYVFBciBxUUMwcVFyIHFwcUMxYzNjMnNRc1NCc3NCc2PQEjNRc1NCM0Nyc1NzUjBzQjNTI3FDsBNDcnMjciJzY3FTY1FzM3FzI3FzI1FhcWFwYdARciFRQXBh0BFwcVFyIHFDMGFSIHFwcGIwYHBgcGBwYHFyIPAQYVBh0BFyIVMhcUMxUHFjMXNDMyFzI3FDMyNxc3Mxc0MxYzMjcVNzM3FDM2OwEXNjMXNDMVNjc2MzUnNTI3NCc2NyYjNTY9ATQnNzU0JzQ3NCcHIzU0Jwc1IgciJwYrAScUBycHIic2NyM1FzM1JzM2MzYzNjM1NjM2MzYzJzcnNRczNzY1MxUzNDM0IzQzNDcXMzQ3JzUXMjUXMjcnNjM0IzUXNzQnNjUnMjUyNScyNzY1FzUnNjcjNTM1IzUzNSM1NjU0JzY3IyYjNCcmJwciJyYnIgc0JyIHJyIHFSM1BwYVIzUHFSM1FxUjNQcVIzUXFSM1FxUjNQcVByInNQUXFSM0JxcVIzUXFSIHNRcVFCM1NAcVIzUXBxUXIhUnIyIVIzU2NRcyFSMiJxcVIzUHFSIVIzUXFSM1BxUjNQUVIzUHMxUHJzQDFSM1BNUHIgcHDQYGDQ0NBwYGDRQNBwcODhsUFBsOFQoLBg0HBwcOChEbDg4UEQMUDgYUFA4VFQ4UFBsbFAYGDQ0NFA
cHBwcNDQ0NBwcNBgYNDQ0HBw0NDQ0HBw0HDQYNDQ0HBwcHFRpgBw0wOhgNIgcOHCgHHBoOBwZSDg0ODgYjLw0NDgcODRwzAw4GExYOBw0HTBoWDDomUg0NDQ0bFRwNFQYGDQ0HFBQNAgsHDQ4OBwYGBg0NFA4iBg4HBwgGBwcHBwcHBw4ODgcHBwcODgcOBhQUBgcHIgcHDg0ODhsOBxsUFAcHBw4HBwgTBRYHBwsKFQ4VFQ4EEQcVDgIMBw0GDQ0OIgcHFBQODg4VDgcOBg0IEywRBwciCjMHDSoCCxAMDQ4HAgsVFAdSCRkyBA4HDQ4HDQcODQcCDD0OIjYHHwMjBw0+BgcHDgcHLwYGHAYNBxAEIgcHMxEbDQ8N/VMEAwcDBwcNBANBMEoVChgKDAgDCgcGAQcEBAQDAwMOBwrQEAMGAwoDAwcHBwcDBwQHBgMHAwQUAwMDBQEOKxUHAxQHBxEDBDsnIQwEBAQEBAQiBgMHBAsHFwMHEgVDOCsmJCcDEgQTHToiGwQEBQkKAxJQEQoORwQHMywvBxU2EQNIGwMHESYXBAYHCxQHAw4DFAsHCgoDBwQFAgcGCgcDBgYDBwNBBwMHIDUaIBsiGAY3EAsgCQcHBwQKBxEWBQQNGwcDEgMOBxQDBwMEFAMHDgoKFAcDDgMGBwcDDgMGBAoRBgMKAwcbBAQHFAcEERgHBwcHBw4HBwMDCAZHWjwGEyA+bAQHFAMHDgnhBAMEA0sH+QfCB8IHBwfdAwYBAmsDAwooChgKDkEHXANEBAQEBg4HAxQKBwMGAREDCw0EMwYfB/7VAzoDAwcfBgcYDh9kBQsXEAwFCyokCzsOEAwWBQwFBQsFHAYWCxYLBhELCxYFBQsMGwsGAgkWDBAGEhoGHCEcSCIFHBELCwYQDAsWBgIOExQLCwwBChACCiELCgwGCwYQHAIJEQsGCwsLCwIJCxcCCQsGCxEQFhECCRwRCwYFLRAMBQIJBhIPC04
GC1MhDAYGEQYGBgYGEQsQBQsGDAUFEAsLBQsLCwYFAgkGCwsLBQUFCwYGCxYHNycLBQYLEQsRCwsXJhYGDCwnBQsLBhECGQYGBgsLBgUMCxAMEBEGBgwKMxALCxclGAUGCwYWBRwGBQwFERYLBgsGCwkNCwUKHQYFBgYRBhwFCxELDhkREQsWCwsGCxYLBhwFCzIMBRwGCxAXFgsLFhEGCwsFHAsiBQ8CBgshCxELBQwLCwsLJxEQChgiFUMLBQULCwYLCwYGBgsICAsGFhAFBQULCwUFBQUFCxwGBgsLCxYGCwUKBgYLBgoMBQsGEREFGwULBgsFBQ7lAwMDAwMGAwUTBAtHKTQGESgHJhEJCzMDBxEEERENEQcUEQYRAwMIBhQIBgYIBgcDBwYGAREECgMDCgcDAwsrBxgHFRADAw4EBAQHBwQGIBs6BgcHEQQHBhMMCgdcBgsDAxkGMwcDJpNQVS1HIhQRByZYKwgSHgMRA6AKERELAwMGAwcHAwMDAwMDAwMDAwMDAwMDAwIIMwQNBAMDByMGCgcNCwMGAREHBgEGFQMHAwMDCwQEBAcDAwMEBAQiPgYHAwMYKS8iESYbGA0KBwQEDhwGBw4GBwsXAwQUBgcDEQQYBxQOBwoDAwcJDAYHHwcXLQYDAwcRTg4DBAMEEQMGASMoPUJvVAsEByELAwQDBASBBwcHBwMNZgMDLAcHKQcHOgMDDQQELAQHBwR7DQsJDwcDAzMDAwYUAwcDBigHBwcGCwYEBBUOGQUoBwciBwcRBA0UCgQEBwcHbQcHUQQHBAb+QwcHAAAAAC7/zv6cBVwG/QGCAzoDQANEA0gDTgNSA1YDWgNeA2QDaANuA3UDewOBA4kDkQOWA50DpAOsA7MDuQPBA8cDzwPWA9oD3gPiA+YD6wPyA/oEBwQLBBEEFQQZBB0EIgQmBCoELgQ0AAABMzIHFzI3FzcyFzcyFTczFzYzFxYXMzcWFzM3FhcHFhUH
FgcmBzMGJxcHFAcWFwYHFjMUIxYXBxcHJgcWHQEUIxYXBxYzBxQXBxcHFg8BFgcGFRYVBxYHIxYXBxcGJxcPARYzFSIHMg8BFwcWFxUjJiMVFxUjFxUjFhcHFBcGBxYPASYnIgcmJwcnByY1BxcHLwEiByYjIgcnJgcnBzQnFCMmJyIHJwYHNQcjJjUGBycGIycGIyY1ByMnBgcnIgc1ByYjByYnNjUiNTI1JzQzJic3JzcmNzYzJzcmPwEnNDMmNyM3JjUzJzYzJjc2NSc0Myc1NhcnNzQ3JiM3NCc3JzM3Jj0BMjc2JzI1Iic1Mzc0JzcmNTcmNzQ3JjU3Ijc0FzU2Iz8BJzY1IjcyNSY1MjU3IjcXNycXNycyNzUmIzY3JzI3Jic2NzY1FzM3FTYfATcWFTcWMzI3MhU3FzIVNhcWFzYzFzYzMhc3Fhc2MzIXNxc2FxQXNhcHNjMWFzczFTMBBgcGFSIHFRYdARQHFhcyNxQzNzIXMjcXNzIXNjsBNjc0JzI1NCc3Jj0BNyI1Mj0BNj8BNjUXMjUyFTI3MhcyFyIHFh0BFBcyNxYdASMnIw8BIjUiFSMiBxQXFSMmIyIHIjUiByYjIgcmNSIHNCMGFRQXBhUUFyIHFBcyNRYXMxQzMhcWFyIdAQcyFQYHFhUHFwYVFwcyFyIHFwYHBiMmNQciJyYnJic3NCc0Myc1JzI1Jzc0Jzc0JzcnNjU0JzY1JzU3JiM1JiM0IwYHNCMGBzQnByMHNQYdARQXFAcVFyIVFBcGFRQXNzMVIgcWFxYzFjMWFzQ7ARc0MxUyNxc3FzQ3FzI3FTI1NjUyFTc2MzYzNCM2NzUjNRczNCc3IzUzMjcnNTcnNTciJzQ3JzcnNzQnNzUnNTYzJj0BNDcnNjU0JzY1JjUyNTQnMjUnJj0BNjsBFzcmIzU0NzQnNyc3IjUiFSc1JicmIyYnJjU2MzQ3JzUXMjc2NTI3NTI3NCM2MzQnNjM0JzQ3J
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
C0A8RESOboC0wAtAPEREjm6AtgALQDxERI5ugLdAC0A8RESOboC/gAtAPEREjm6AwQALQDxERI5ugMHAC0A8RESOboDDQAtAPEREjm6Aw8ALQDxERI5ugMSAC0A8RESOboDFAAtAPEREjm6AyUALQDxERI5ugMnAC0A8RESOboDKgAtAPEREjm6AzIALQDxERI5ugM6AC0A8RESOTAxASMXBycGIwYnFQYnBhUiJwcnBiMGJwYHJwYjIicHIicGBwYnFCMHJxQjJiMGBycUBycHBicVJyMHNCcmJzY3NCM3NCcyNyc0IzcnBzcnBzQzJzQjNDcmIzQzNCc3LwEyJzUiNSYzJzQ3JjUmNyc0Myc2JzUHNTYzNCM2JzQjNTQzJyM3JzY1JzI3Jic1NwY9ATciNTcmJyY3Iic3BzQ3JzMmNyI1Nyc0Nyc3IicmNyc3JzY3Iic3NCMmMyYnNjcXMjcXNRYzNxYVNzMXNDcyFzcyFzcWFzQ3Mxc1Fhc3FjM2NzYVNjUXNxY/ARYzMjcWMzczFwcXNDcXNxc2NxYzNjcXFAcWFwYVFwYHMxUHMxUHFTI3MxUGBxcHFxQjFDMVBgcfAQcyFQcXBgczFgcXFAcUFxQHFxQHFwcXBhUXIgcXBgc2HQEWBxQ3FQcXBgcyFSIHFhciBxYfAQcyFSMWMxYHFRQHFwYHJyMGBycHIg8BIicHIycUIycGIycHNCMHFiMHAzQjBisBBzQjIgciJwcmJwc0KwEGHQEHBhUGFQYVBgcGBwYVFBcjFBcHFwcVFyMUFyIVFDMUBxciFRcWFTI3FBc2Mxc0NxQXNjMXNxQzNxQ7ATI/ARczNjUyFzI3FzcWFxQHFwcVFyMXIhUXFAcXBhUXBxUWMzI1Fhc0MxUyNxc3FjMyNTIVNxcyNzMUFzc0JzcjBzUyNSc1Mj0BIgcjNTciNTc0JzI1JzciNTI3Ij0BMzYzNjsBNjcVNjcUMzYzJzUmIyIHJxQjJj
UyNTQnNzUmIzY9AScyPQEnMjciPQE3JzI1JzI9ATQnNyc3NCc3NCc3Jzc0JzQzNCM1MzQjNTMVMzU0IzQzNCcyNyczNCc2Nyc0Nyc3NCc3IjU3NScyPQEjNTIVNzQnNjciNTI3JiM3JzcnMzQnNyc2PQEnMjUmJyMHNCcHJwYBFSM1FxUjNQUyFQYjNQcUMxUiBzQFFDMjFjMUBxYVFAcXBh0BByIHIzQ3Njc0PwEFFSM1BxYdASMmIzUyNTIXMxUiBzUHFSM1FxQjNRcVIzUFFSIHJzUFFSM1BQcnNQUyFQc1FxUjNQUjNTIFFSM1A8IMAQsBTRYJDiQDEBEWFhcJDQwKGwxTCwYFDAoEHgkCEBcFThwFGAoPEhcQFwsFCxEGCxwuGwMMBQQGBQsBCwUBCwUBEQsBCwsBBQUGCwEGBgEWAQsGBQYBBQcLDQYBCwgIERUBERACEAkGBQYKBQYBBQYEBQsBBgEJCgIFBgULCwIIBg8MBQYEBQYBEAcGBgoEBQEFCwEMAQYUHAsGCyc9CwsiHAUMEAYLCwUMFhEWBQsMIyALLRYcBQUyMhAkVxYmBw0JGAogBQwFIQscC3AYFAsMEBEoBQYGBQcQAgsFCxUGCwYOAg4KBgsRCA0GAQUGEAcEBQUBBAcLBgsHDw0GBggGBQUGCgULAQsiFgELBAYHAwgGBQUFAQEFBgYHCwELBQ8EEAsGDhMRFgMpCwkCCwYLBhsICRELBSIBCwaRBB0SJhEKBgEDBz0lBwcEMygRN0AfLQ0hHCIHBAQEBwMDAwcEBwMKBAseBgsOBwMRER8GBAcGBAcDHx0+BAciFAMHBAYHHx4RAwcKAwMGAwMDCgMDBwoVMwYqAwMHDhQHAwsDFAcrCAQDBwQEBAYKBwoDBwMDAwYGAwMDCgMEBAQCCAMbCwoNHQUECAUDCBMGASkDKQMDBwkFBwMDAwQCCgcDAwMGBgMDAwcEBwMDBwQHCgcEBAMKCgcFAgM
DBwYEBgMDAwMGAwcEBAcDBwMCBQQFAgUFBwcHCwQEBAcDAwMBGhEHChEHCf5kBJYHAVEHBQYNBwsN/vcDAwsJAwYDAwMDE6IDChUXYA0BKAM3KQMyDA4KPQsJD34HBAetA/2mAwcOAsoD/Q0DDgF9BxEXA/7wBwcBigP+uhEBEgkBCwUBBQkJBQYKBgEGDAEJBgUGBQELAQsGAgQFCgEMEQYGCwYBBgYLBggIBiAcAQUdBgsjFgwLHQEdHQEXDAsLAQUGBgsRHQsGCwsMFw0KCgwcHiILKAsMBgEGEgslIAsGCz8zDB4EHTMLDBcMAQYRHQUHERYiURwMAQYMET5iBkoGEwkjHBEOJhwMCxkyBRgLCwYLVwEGBgoGDwYLCwcFBQcFBgYNCwUFAQUFBQ8GCgERAQYQCAQMFgMHEAYKIwULBQsBEQYqAQwFAQwcDAsMJwsGHBKJBgsGIwUGCwEXWyILEgsLAREcLgwFHSJCCR8xHAoCDAsJAyIPJTgMC1kDHBIcEhcBDAUKAh0BCwEcDDkGIlAdEQkOIh0FLgkCEQYMji4XBQEMCwEMAQsGBQUEEQsGBQERAQcfBAQDAwcECgUFBAQPEBRBpjfNDEQOcTY3aFkKHQ8EBhEEEQMHDg0EBgQHNgMRBQYHBAMEBAQHBQIDAwMDAwMDBwMJBAMDAwMKCgQGCw0HByIDBwoOFBIDESIDOgoGBAQEBAQEBAcDAwMUCAYEEBIUAw0HCgQHAwMGEQQDCg4DFQcKFAQDDjMGBAQDBAMNEaoVBwcELSIDAwcKBA0LCgMHAxUHGwcDCgcDBxgDEyAHBwcFCBUGAQYHBAMHCgcDBAYGAw4GBxEpBwIWEBwDCAYHBggGGwQKAwcDEQcDAwQGBx8DDg0ROhgYEh0YDgYHBAcDCQUEBAMDAwP+8wcHdAMDjgcKESIEAwQGNSbBBAcvGAMRBxMMGwcHDRwbTyK0MwoLCyYTBQ0lBAoEAwoKRwQEewcH
GAYGyAQDAwcKBweWBgMDHgcDCgoHBwsHdwcHAAAa/87/EQT5BucB0AOSA5YDmgOfA6MDqwO1A7oDwAPGA80D0QPVA9sD3wPjA+cD6wPvA/UD+wQDBAkEDQQTAAABFBc3Mhc2MxYzNRYzNjM1IzUWMzUWFzUXNRc3FjMnNTIVNzMXNRc3FjsBNTMWFTYzFTM1MxU3MzQzFzYzFjM2MxYzNxQXNjMWOwEyNTIVNjUWFzcXFRQHFhUHFhcHFhUHFhUjFwcWFQYjFjMVIxcUIxYVBiMWFwcWHQEjJiMVFhUiFRYdASMXFSMVMwYVFwcVFxUjFRcVJyMVMwcUFwcXBxcVFCMXBh0BFwYjFxUGBxcGIxcVFCMUMwczFRQjFRcUIxcVBhUyFyMnFRcGIxUUMxUjJxUWFwcUMwcXBh0BFxUiFTIVBiMVFhUHFjMHJyMVFCMXBiMVMhUGFRYzFSIVIyI1BycGIxUzFSMiJyMUIyciBycHJiMVIyI1ByMiNSIVIjUiFSYjFScjFAciJyMUIycGIzUHIicHJxQHFAc0JyIHJwYjJisBIjUHBiM1NCc3JiM2NSI1MjUiJzI1FzUnMjcmNTcmJzY1NCc2MyY9AQMzJzUzNScyNzUiNTI1IjU3JzcnNycyNScyPQEjNTM1JzI1IjUyPQE0JzY1Jic2Nyc3JzYzJic0MyYnNjUnNjUnFhcyNTIXNxcyNxYzNRYVNzMXNjsBFzY7ATQ3FzI1FzIHNCsBBzQjFCsBBxQXBxYXIhUWHQEHMhciFRQXIgcXFAcXFAcWHQEHMhUHFwYVFBcGBzIVBxQXIgcXBxUXIgcXBxcUBxc3MxQXMjUyFzcXMjcXNxcyNxcyNxc3FDsBFzYzFjM3FzI3FhcWFxQHMhUiHQEUFxQjFBcGFRQXBxQXBxciFRciHQEyFxQHBgcnBiMnByY1Iic0Nyc0NyInNyY1NyYnMjUjBzQjBycjJxQjIicHIicHIyInFCM0IyIHF
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
S+4ATIQuAFb0LgBWy+4ATIQuAFe0LgBXi+4ATIQuAFg0LgBYC+6AWEBMgDYERI5uAEyELgBZtC4ATIQuAFu0LgBbi+4ATIQuAFw0LgBcC+6AY8ATwDYERI5ugGXAE8A2BESObgByRC4AajQuAGoL7gByRC4Aa3QuAGtL7gByRC4Aa/QuAGvL7gByRC4AbHQuAGxL7gByRC4AbPQuAGzL7gByRC4AbXQuAG1L7gByRC4AbjQuAG4L7gByRC4AbrQuAG6L7gByRC4AbzQuAG8L7gByRC4Ab7QuAHJELgBwdC4AckQuAHE0LgByRC4AcbQuAHGL7gByRC4AcvQuAHLL7gB7xC4AfXQuAH1L7oCAwBPANgREjm6AkMATwDYERI5ugJFAE8A2BESOboCSQBPANgREjm6Ak0ATwDYERI5ugJWAE8A2BESOboCZgBPANgREjm6AmgATwDYERI5ugJpAE8A2BESOboCbwBPANgREjm6AnUATwDYERI5ugJ3AE8A2BESOboCeQBPANgREjm6ApIATwDYERI5ugKmAE8A2BESOboCqQBPANgREjm6Aq0ATwDYERI5ugKxAE8A2BESOboCtgBPANgREjm6Ar8ATwDYERI5ugLBAE8A2BESObgByRC4AsLQuALCL7oCwwHJAKEREjm4AckQuALE0LgCxC+6AsUARQHJERI5uAHJELgC0dC4AtEvuAHJELgC2tC4AtovugLbAckAoRESObgByRC4AtzQuALcL7oC3wBPANgREjm6AuEATwDYERI5uAHJELgC4tC4AuIvugLxAE8A2BESOboC8wBPANgREjm6AzgATwDYERI5ugM6AE8A2BESOboDQABPANgREjm6A0IATwDYERI5ugNLAE8A2BESOboDVQBPANgREjm6A1wATwDYERI5ugNhAE8A2BESOboDZgBPANgREjm6A24ATwDYERI5ugN4AE8A2BESOboDewBPANgREjm6A4cATwDYER
I5ugOJAE8A2BESOboDjABPANgREjm6A5EATwDYERI5ugOTAE8A2BESObgBMhC4A5XcALgABy+4AYMvuAGOL7gBky+4AZgvuAGaL7gAuC+6AesBfQADK7gBfRC4AAHQuAABL7oAHAGaALgREjm6AC8BmgC4ERI5ugAxAZoAuBESOboAOAGaALgREjm6AEEBmgC4ERI5ugBWAZoAuBESOboAaQGaALgREjm6AGsBmgC4ERI5ugBtAZoAuBESOboAgQGaALgREjm6AIIBmgC4ERI5ugCfAZoAuBESOboAsAGaALgREjm6AMoBmgC4ERI5ugDUAZoAuBESOboA5gGaALgREjm6AOgBmgC4ERI5ugDvAZoAuBESOboA9AGaALgREjm6AR0BmgC4ERI5ugEgAZoAuBESOboBIwGaALgREjm6ATIBmgC4ERI5ugFFAZoAuBESOboBRwGaALgREjm6AUsBmgC4ERI5ugFQAX0B6xESOboBYQF9AesREjm6AWoBfQHrERI5ugFsAX0B6xESObgBfRC4AX/QuAF9ELgBhdC4AYUvuAF9ELgBiNC4AYgvuAF9ELgBitC4AX0QuAGP0LgBjy+4AX0QuAGR0LgBkS+4AX0QuAGV0LgBlS+4AX0QuAGX0LgBly+4AesQuAHa0LgB2i+4AesQuAHf0LgB3y+4AesQuAHk0LgB5C+4AesQuAHo0LgB6C+6AgMBmgC4ERI5ugJDAZoAuBESOboCRQGaALgREjm6AkkBmgC4ERI5ugJNAZoAuBESOboCVgGaALgREjm6AmYBmgC4ERI5ugJoAZoAuBESOboCaQGaALgREjm6Am8BmgC4ERI5ugJ1AZoAuBESOboCdwGaALgREjm6AnkBmgC4ERI5ugKSAZoAuBESOboCpgGaALgREjm6AqkBmgC4ERI5ugKtAZoAuBESOboCsQGaALgREjm6ArYBmgC4ERI5ugK/AZoAuBESOboCwQGaALgREjm6AsM
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
mNQYHJwYjJwYjJjUHIycUByciBzcHJiMHJic2NSI1MjUnNjMmJzcnNyY1NjMnNyY1Nyc0MyY3IzcmNzMnNjMmNzY1JzQzJzU2Fyc1NjcmIzc0JzcnMzcmNzUyNTYnMjciJzUzNTYnNyY1NyY3NDcmNTciNTQXNTQjPwEnNjUiNTI1JjUyPQEiNxc3Jxc1JzI1NyYjNjUnMjUmJzY3NjUXMzcVNh8BNxYHNxYzMjcyBzcXMhU2FxYXNjMXNjMyFzcWFzYzMhc3FzYXFBc2FxU2MxYXNTMVMwEnIwc0KwEiByIHFBcUIwYHIicGFSIHBgcVFhUWMxYzFQYHBhUXIgcUFwcWFRQHFh0BFyIVFyIdAQcyHQEHMhcUBxYdARciHQEUFxYXFhcWFRYzNxcyNxY7ATI3FjM3FTcUMzcVNjcyFTI1Mjc2NTY1JzY3IjUyPQEnMjc1NDcmPQE3IjU0Nyc0MyczNCcmJyYnNTY3Njc2NyI1NDcmPQE0NycyNTQnNzQnNjU0IzQzNCM0JzY9ASYjNCc0Jwc0JwcmKwEnBhc2NxcyNTIXFhUUBzIVBh0BFyIVFwcXBiMUBycHBhUjNCsBIic1Nyc3Izc1NCc3JzI9ATQjNzUnMjcnMyc3Njc2NzIVMjUyFxUjNTMVIzUXFSM1BRUjNQUVIicXFSM1BxUjNRcVIicXFSM1BQYVIzQnIRUjNQU2OwEWFQcWFwcWHQEXIxQXFAcXBhUUByYjIicmNTQ3JzY3Iic1NAUVIzUXIzUyA28FCh4FCw8IBxoFCgUKAggLJQMVDxENBQsOBA4FAQoKBgUGBQEBBQUFBgcDBgUDCgEVAR4BCgEKBQkFBAUGCAUECw4BBgsBBQoBBQMBBQUEBw8FBQIGDQcPAQsBBQkNAg0GCgUUAQoFCgEPBgUHBQUBJBAOCwoSFmcKGgsBHwULBR0JFgkLBiQUUCEPLgEuBQUZFSkKHSALCgUUEBQKBQoLBQ8KBRofCgo5
ASQKBgoZEgUKCwUBBQQKBgUGDgYFBQYECg0FBwILCwUBBQUCCQgBBgoFBAEFBQEFBAoGBAUIDwIQAQ8BEw8BCAcKAQULCgYEAQUEBgoVBQUBCgYFBQoLCgEPAQULBAoBCgUGBAULBBoqGgoFDwsFChQQARURDgkVBgEaRwUVDwIIGwQKCgUFCk0KGgkLDAgVFBUPDwMhDQcVRwoK/oEKFAcEAwYBRlMEDgwWBRYOFi4HBgYgE0MZSx4pAwMDAwMGBgMDAwMDAwMDAwMDAwQEHAoYJTosPjIHBwgFBggDDxcHAwdOAyJQBQQYVB8OHgMDBAQEBAMICgQEBAcDChEDCgdAFEgDH0w1FgkEBAcHCgMHBAQEBwMDFQQLA5xtBwoHEgwcET0pBx4EAxASQQQEBAQEBAQEBAMYBzMeBwcNTBcDBgMKAwcEBAQHAwMJBQQEBwcMCANBAwcHnApVB8IH/acEAfEGAWIDaQcbBgEzA/2SBAMEAeMH/u0UTwZBAxERBAcDAwMDBwdYBgghOzMHCgcDBgEBQATJBwcG9hEBBQYLEgUGBgYLAQwBCwwBBRcujgwGEQIKAS4GAR0iDgkRARxQIgY5DBwBDAIdAgoFDBcRHBIcA1kLDDkkDyMCCQsMAgocMR8JQiIdBgEMLhwSCwsSCyJbFwELBgYjBQsGiRIcBgsnDAsMHAwBBQwBKwYQAQsFCwYBIwoGEAcCFQwECBAGEgEKBg8FBQUBBQULDAUGBQYGBQcLCwYPBgsHBgFXCwYLCxcGMhkLDBwmDhEcIgoTBUsGYj4RDAUMHFEiFhEGBh0RBgEMFwwKNB0EHgs0PgELBgsfJgsSBQYMCycBCyIeHAwKCg0XDAsBDAYLHBILBgYFAQsLDBcBHR0BHQsLFyMLBh0FARwgBggIBgsGBgEGCwYGEAwKBgUCBgsBCwEFBgUGCQEMBQYKBgUBCAkFAQYLAQgREf6vBgMDBjoIBgoUBAcJBZ87BkRGH
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
gkFBQUKBQUK+KIfAg8IFiZRH7ENCEafGQMGCBQRCwYIBgg/CxS7EQMfAwcGCAcHBk4OIFoEG1wDQwE3EQQbBwMHBAMEAwMDIk8/f/76QD4RkBpEERERLhYEBwNBFA0LDjcvHRI4EAMHCAZEGyoQBAcGFQ9aFRcDAwQEBwMDAwMHBAcKDQcHEQcHAwUZDRQKBwMHBAYHBwMHBwoHCAIHAwMKGwMRCgofAxQOAwoOBA4DFAMDAw0DAwMHBAYBBwoVBAQDKU9HNi4hNhgDBR0HCAZQCwYIDgYcBCQFDQQKAw08OwQHNBMGCCURAwgGDgMDGAQRAxgYAzMlGzAQHAYAACH/zv8bBVwG/QGCApMCmAKeAqICpgKtArMCuQK+AsICyALMAtAC1ALcAu4C/gMCAwwDEAMUAxwDIAMoAzADNAM4AzwDQgNGA1ADhggRuAOHL7gCVC+4AAfQuAAHL7gCVBC4AAjQuAAIL7gCVBC4ADjcuABN0LgATS+4ADgQuABQ0LgAUC+4ADgQuABU0LgAVC+4ADgQuABX0LgAVy+4ADgQuABa0LgAWi+4ADgQuABc0LgAXC+4ADgQuABe0LgAOBC4AGDQuABgL7gAOBC4AGbQuABmL7gAOBC4AGjQuABoL7gAOBC4AGvQuABrL7gAOBC4AG/QuABvL7gAOBC4AHHQuABxL7oAcgJUADgREjm4ADgQuAB10LgAdS+4ADgQuAB30LgAdy+4ADgQuAB70LgAey+4ADgQuAB/0LgAfy+4ADgQuACB0LgAgS+4AlQQuACL0LgAiy+4AlQQuACN0LgAjS+4A4cQuAGy0LgBsi+4AWjQuAFoL7gBshC4AWrQuAFqL7gBshC4AdbcQRsANgHWAEYB1gBWAdYAZgHWAHYB1gCGAdYAlgHWAKYB1gC2AdYAxgHWANYB1gDmAdYA9gHWAA1dQQUABQHWABUB1gACcbgBddC4AXUvuAGyELgBrtC4Aa4vugF6Aa4Abx
ESObgBshC4AbDQuAGwL7gBshC4AbTQuAG0L7gBshC4AbrQuAGyELgBvNC4AbwvuAHWELgBydC4AckvuAHWELgB0dC4AdEvuAHWELgB0tC4AdIvugHUAbIB1hESObgB1hC4AdjQuAHYL7gB1hC4AdrQuAHaL7gB1hC4AdzQuAHcL7oB4AGuAG8REjm4AdYQuAHi0LgB4i+4AdYQuAHk0LgB5C+4AdYQuAHm0LgB5i+4AdYQuAHo0LoB6QGuAG8REjm4AbIQuAHz0LgB8y+4AdYQuAIy0LgCMi+4AlQQuAJD0LgCQy+4AlQQuAJL0LgCSy+4AlQQuAJO0LgCTi+4AlQQuAJQ0LgCUC+4AlQQuAJS0LgCUi+4AlQQuAJW0LgCVi+4AlQQuAJY0LgCWC+4AlQQuAJa0LgCWi+4AlQQuAJc0LgCXC+4AlQQuAJe0LgCXi+4AlQQuAJg0LgCYC+4AlQQuAJi0LoCZAGuAG8REjm6AnUBrgBvERI5ugJ6Aa4AbxESOboChwGuAG8REjm4AdYQuAKO0LgCji+4AdYQuAKP0LgCjy+6ApUBrgBvERI5ugKYAa4AbxESOboCngGyAdYREjm6AqABrgBvERI5ugKiAa4AbxESOboCrgGyAdYREjm6AsABrgBvERI5ugLCAa4AbxESObgB1hC4AsXQuALFL7oCxgGyAdYREjm6AsoBsgHWERI5ugLMAbIB1hESOboCzgGuAG8REjm6AtABrgBvERI5ugLSAa4AbxESOboC1AGuAG8REjm6AwIBrgBvERI5ugMFAa4AbxESOboDDQGuAG8REjm6AxsBrgBvERI5ugMrAa4AbxESOboDLQGuAG8REjm6AzABrgBvERI5uAJUELgDMdC4AzEvuAJUELgDM9C4AzMvugM2Aa4AbxESOboDOAGuAG8REjm4AdYQuAM70LgDOy+6A0EBrgBvERI5ugNEAa4AbxESOboDRgGuAG8REjm6A00BrgBvERI
5ugNQAa4AbxESObgAOBC4A4jcALgAAC+4AAgvuAFKL7gBTS+4AVAvuAFSL7gBVS+4AVcvuAFZL7gBWy+4AV0vuAFfL7gBYS+4AWMvuAFlL7gBaC+4AWovuAFvL7gBci+4AXUvuAF/L7gAiy+4AJAvuACbL7gAnS+4AK8vuAC8L7gAvy+4AMEvuADDL7oCKgOBAAMruAIqELgAV9C4AFcvuAOBELgAZtC4AGYvugByAJABVRESOboAdACQAVUREjm6AHUAkAFVERI5ugB3AJABVRESOboAjgCQAVUREjm6AMgAkAFVERI5ugDgAJABVRESOboA4wOBAioREjm6AOYDgQIqERI5ugDnA4ECKhESOboBCQCQAVUREjm6AQ4AkAFVERI5ugETAJABVRESOboBNwCQAVUREjm6AToAkAFVERI5ugF6AJABVRESOboBkACQAVUREjm6AbgAkAFVERI5ugHKAJABVRESOboB1ACQAVUREjm6AeAAkAFVERI5ugHpAJABVRESOboB/ACQAVUREjm6AgAAkAFVERI5ugICAJABVRESObgCKhC4Ah/QuAIfL7gCKhC4AiHQuAIhL7gCKhC4AiPQuAIqELgCJdC4AiUvugJDAJABVRESOboCVACQAVUREjm6AmQAkAFVERI5ugJ1AJABVRESOboCegCQAVUREjm6AocAkAFVERI5ugKVAJABVRESOboCmACQAVUREjm6Ap4AkAFVERI5ugKgAJABVRESOboCogCQAVUREjm6Aq4AkAFVERI5ugLAAJABVRESOboCwgCQAVUREjm6AsYAkAFVERI5ugLKAJABVRESOboCzACQAVUREjm6As4AkAFVERI5ugLQAJABVRESOboC0gCQAVUREjm6AtQAkAFVERI5ugLvAJABVRESOboC+gCQAVUREjm6Av0AkAFVERI5ugMCAJABVRESOboDBQCQAVUREjm6Aw0AkAFVERI5ugMSAJABVRESOboD
FACQAVUREjm6AxsAkAFVERI5ugMdAJABVRESOboDKwCQAVUREjm6Ay0AkAFVERI5ugMwAJABVRESOboDNgCQAVUREjm6AzgAkAFVERI5ugNBAJABVRESOboDRACQAVUREjm6A0YAkAFVERI5ugNNAJABVRESOboDUACQAVUREjm4A4EQuANR0LgDUS+4A4EQuAOD0LgDgy8wMQEzFgcXMjcXNzIXNzIVNzMXNjsBFjMXNxYXMzcWFwcWFQcWByIHMwYjFwcUBxYzBgcWMxQjFhcHFwcmBxYdARQjFhcHFjMHFBcHFwcWDwEWBwYVFhUHFgcjFhcHFwYjFw8BFjMVJgcyDwEXBxYzFSMmIxUXFScXFScWFwcUFwYHFg8BJiciByYnBycHIjUHFwcvASIHJiMiBycmBycHNCcUJyYnIgcnBgc1ByMiNQYHJwYjJwYjJjUHIycGByciBzUHJiMHJic2NSY1MjUnNDMmJzcnNyY3NjMnNyY/ASc0FyY3IzcmNRcnNjMmNzY1JzQzJzU2Myc3NDcmIzc0JzcnMzciPQEyNzYnFjUiJzUzNzQnNyI1NyY3NDcmNTcmNzQXNTYjPwEnNjUiNzI1JjUyNTcmNzM3Jxc3JzI3NSYjNjcnMjciJzY3NjUXMzcVNjMXNxYVNxYzFjcyFTcXMhU2FxYzNjMXNjMyFzcyFzYzFhc3FzYXFBc2Fwc2FzIXNzMVFwUnBycGKwEGFSMiFQYVJyMGByIHBgcXBiMUFwYVFwcUMzY1MhUyNzIXNjsBMjcmNTQ3JiM1MzIXNjUnNjcyFTcXMjcWFzIXMwcVFhUjJicjBhUyFwYVFDMGBzMUMxUGIxQXFAcUMxUiBwYHIycUBycjJxQjNQYdARQzBxUzFScVFyIVFyIHFhcjFwcWFQcWFQcUFxUHMhUiHQEUFzcyFzQzFDsBMjcXMzI1Jj0BJzY1MxYzNDMWMzcVMjc2NzY3NScyNzQjNzUmJzM0Jzc1J
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
SOboBiAFEAAAREjm4AB8QuAGw0LgBsC+4AB8QuAG00LgBtC+4AB8QuAG90LgBvS+4AB8QuAHA0LgBwC+4AB8QuAHE0LgBxC+4AB8QuAHI0LgByC+4AB8QuAHM0LgAHxC4Ac/QuAIjELgB6tC4AeovuAIwELgB69C4AesvuAIjELgB7dC4Ae0vuAIjELgB79C4Ae8vugH5AUECCxESObgCCxC4AgbQuAIGL7gCCxC4AgjQuAIIL7gCCxC4Ag3QuAINL7oCFAFBAgsREjm6Ah4BQQILERI5uAIjELgCIdC4AiEvugIlAUECCxESObgCIxC4AibQuAImL7oCKQFBAgsREjm4AiMQuAIr0LgCKy+4AgsQuAI60LgCOi+6AkkBRAAAERI5ugJiAUQAABESObgCbxC4AmvQuAJrL7gCbxC4AnHQuAJxL7gCbxC4An7QuAJ+L7gCbxC4AoPQugKRAUQAABESOboCmgFEAAAREjm6Ap0BRAAAERI5ugKfAUQAABESOboCoQFEAAAREjm6AqQBRAAAERI5ugKrAUQAABESOboCrwFEAAAREjm6ArgBRAAAERI5ugLCAUQAABESOboCyQFEAAAREjm6AtMBRAAAERI5ugLpAUQAABESOboC8AFEAAAREjm6AvMBRAAAERI5ugL1AUQAABESOboC9wFEAAAREjm6AvkBRAAAERI5ugL7AUQAABESOboDAgFEAAAREjm6AwUBRAAAERI5ugMJAUQAABESOboDEwFEAAAREjm6AxYBRAAAERI5ugMbAUQAABESOboDJgFEAAAREjm6AysBRAAAERI5ugMuAUQAABESOboDNAFEAAAREjm6AzoBRAAAERI5ugNiAUQAABESOboDZAFEAAAREjm6A2oBRAAAERI5ugNsAUQAABESOboDcAFEAAAREjm6A3MBRAAAERI5ugN1AUQAABESOboDeAFEAAAREjm4AgsQuAN/0LgDfy+6A4ABQQILERI5
uAILELgDgdC4A4EvugOCAUECCxESObgCCxC4A4PQuAODL7oDjQFBAgsREjm4AgsQuAOP0LgDjy+6A5IBQQILERI5ugOUAUECCxESOboDpAFBAgsREjm6A6gBQQILERI5MDEBFBc3Mhc2MxYzNRYzNjM1IzUWMzUWFzUXNRc3FjMnNTIVNzMXNRc3FjsBNTMWFTYzFTM1MxU3MzQzFzYzFjM2MxYzNxQXNjMWOwEyNTIVNjUWFzcXFRQHFhUHFhcHFhUHFhUjFwcWFQYjFjMVIxcUIxYVBiMWFwcWHQEjJiMVFhUiFRYdASMXFSMVMwYVFwcVFxUjFRcVJyMVMwcUFwcXBxcVFCMXBh0BFwYjFxUGBxcGIxcVFCMUMwczFRQjFRcUIxcVBhUyFyMnFRcGIxUUMxUjJxUWFwcUMwcXBh0BFxUiFTIVBiMVFhUHFjMHJyMVFCMXBiMVMhUGFRYzFSIVIyI1BycGIxUzFSMiJyMUIyciBycHJiMVIyI1ByMiNSIVIjUiFSYjFScjFAciJyMUIycGIzUHIicHJxQHFAc0JyIHJwYjJisBIjUHBiM1NCc3JiM2NSI1MjUiJzI1FzUnMjcmNTcmJzY1NCc2MyY9AQMzJzUzNScyNzUiNTI1IjU3JzcnNycyNScyPQEjNTM1JzI1IjUyPQE0JzY1Jic2Nyc3JzYzJic0MyYnNjUnNjUnFhcyNTIXNxcyNxYzNRYVNzMXNjsBFzY7ATQ3FzI1FzIDFBcGBzIdASMGBwYjFSIdAQcGBwYHBgcUFzMyNxYXMjc1IzU0NzU0Jzc1JzUyNxQ7ATI3JiM3FzI1MzIXMxcVFzcWFQYVFBcGFSInFCMXFDM2MzIXNSI9ARYXFjsBNjcmJzU0JzI9ASYjNzUmNSYnJiMmIzU0JzQnMyc1NCcjIgcnNDczNj0BJzUnJiciNTMXMyY1IzUyNzQnByInBiMiJwcWFzI3Fh0BIyY1JjUHFSMiNSMmJyIXF
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
/ERI5ugOfAPICvxESOboDoQDyAr8REjm6A6MA8gK/ERI5ugPDAPICvxESOboDxQDyAr8REjkAuAAAL7gBxi+4AdovuAHhL7gB5S+4Ae0vuAHzL7gB9y+4AfkvuAH/L7oCUADIAAMruAJQELgAmtC4AJovugCbAMgCUBESOboAnwDIAlAREjm4AMgQuACj0LgAyBC4AKfQuADIELgArtC4AK4vuADIELgAsNC4ALAvuADIELgAxdC4AMUvuADIELgAytC4AMovugDMAMgCUBESObgAyBC4AM/QuADPL7gAyBC4ANnQuADZL7gAyBC4ANzQuADcL7gAyBC4AN7QuADIELgA4NC4AOAvuADIELgA4tC6AOkAyAJQERI5ugHmAdoAABESOboB+AHaAAAREjkwMQEzFh0BFCMXFQcXFAcWFRQjFhUGIxcVIxUyFQc0IwcVMwcXFRQjFTMVIxUXFRQjFjM0MxUUIxcHFhUGFTIXIhUXBxQXFSIHFwYjFwcXBh0BFDMVBxQzFSMXFQYVFBcHFhUGFRcGFRcHFhUUIxcVBxcGFRcVFCMXFCMXBxYVFAcWHQEUIxcVBxYVBh0BFwcyFQYjFRcGFRYVBxYVIxcVFCMXFQYHIyI1ByMiJwcnFCM1ByInByInBiMmNQYVJyMUIzQjBycjFTMUIyI1MjUnBhUnBiM0KwEiByYjByI1BiMiJwYrASI9ATQ3JzI9ASc0MzU0IzUyNyc0Nyc2MzQnNyM1NjMmPQEmJzcUMzQ3JjUyNSI9ATciNTciNTI1FzM0NyYnMyc3JzY1IjUyNSM1MjUnNDMnNTQzJzUzJzU3JiM1MzUiNTY1MxUzNTQnMjUiNTcXNzUiJzcnNTQzNCc1NjUnNyY1MjUnNjUiJzUyNzUnMjUiJzM1IzQzNSczJiM1Mxc1JzU2Myc1MycyNSYjNTQ3NCc3BzUyPQEjNTM1IzUzNCM3NSc1IzQ3Jic2OwEWFTcyFzY1Mhc2MzIX
NxYzNjMUFzcUMzQzMhc2MxU3MxUyNRYzNjMVNxYzNjMXNxc0Myc1FjM3JzcUFxQ7ASc3FhUzNyc1MxczJzUzMhc3JzI1FjM3FjM2BSYrAQYHBhUjBhUiBwYHFBcHMhUUBxcHMhUUBxcHFRQXBxUUFxUUIxQHFBcUBxYdARciFRYXFhcVFhcyNxQXNzMUBxYXNjUzFRQXNjcyNzY3JiM1MzI3JzQ3NTQ3NTQnNjcnNTciNSInIgcnBiMiFRYXBhUUFwYHFAcnIic1NCc2NTQnNj0BNCc3NScyNSY9ATciJzc0JzQ3JjU0NyY1NDcnNjMnNDc2NTY1MxUWFxYdATI3MhcUBxQzFRQjFwcWFwYVFBcHFhUWFzYzMhc2NTI9ASc2PQE0JzcnNTQjNDcnNyYnNCczNCcmJxUjBzQjNzUmKwEiBycjBhUWMxUnByMnNTcXMzY1JicGIyc3NQYXFSM1BxUjNCcXMxUnNgcVIzUXMhcHJiM1MhcHNCc3MhcUFxUiFScjByM1NDc1NCc2NTIHMxQXIgcmPQE2BQciJzU3BTMUByYrAQcjNTQFByInNzIhMhUHJiM1BRUjNSEyFwcnMgUVIzUFFSM1FxUjNxc3FhUHJiMHJzUFIyY1FgczFjMVBisBNCcXFSM1BRUjNQcVIyc3FgUXByInNBMyFSMiJwEUMxQrATUyBRUjNQUzFCsBNBcVIzUHFSM0BxQjNQTVByIHBw0GBg0NDQcGBg0UDQcHDg4bFBQbDhUKCwYNBwcHDgoRGw4OFBEDFA4GFBQOFRUOFBQbGxQGBg0NDRQHBwcHDQ0NDQcHDQYGDQ0NBwcNDQ0NBwcNBw0GDQ0NBwcHBxUaYAcNMDoYDSIHDhwoBxwaDgcGUg4NDg4GIy8NDQ4HDg0cMwMOBhMWDgcNB0waFgw6JlINDQ0NGxUcDRUGBg0NBxQUDQILBw0ODgcGBgYNDRQOIgYOBwcIBgcHBwcHBwcODg4HBwcHDg4HD
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
wQREjm6A1YC3AMEERI5ugNZAQgAABESOboDXQEIAAAREjm6A2YBCAAAERI5ugNsAQgAABESOboDeQEIAAAREjm4AoAQuAN+0LgDfi+6A4EBCAAAERI5uAKAELgDhdC4A4UvuAKAELgDh9C4A4cvugOOAoADhRESObgCgBC4A5HQuAORL7oDkgKAA4UREjkwMQEzMhczMjUyFxUiBxcVBxYVBgcWFSMWFSMUFxUHFRcGHQEzFQcXBxYVFCMXFRYVBhUWFQcWFQcXFRQjFhUGFRYVBxcGHQEzFQczFSMVFwcVMxUUIxcUIxcVBxcHFjMUBxcUBxYVFCMWFSIVMhUGFRcHFRcGFRcGIxcVFCMXBhUyFQcXFCMXFTIVBhUWFSMXBhUXBxcHFwYVFxUUIxYXBxUXBxYVBhUWFSMXFQYjFjMHFRcVBxYVBxYVBhUmJwcmIwYjJiMUIycHIjUHIyI1IhUnBycjFwcmIxUmIwcnByYjBiMmJwcnIwc1BgcyFSM1IyIHJiMXIyYjByYjFSYjByMiNQcnFCsBJxUiNQcjJzQzNCc3NCc1Myc3JjU0NycyNSY1MjUiNTQzJzUiNTY1Ij0BMxc1JiM2MyY9ATQzJjUyNyczJzU0Myc3JzcmJzcnNyY1NyY1MzQjNyYnMjUnNyY1MyYnNyc2MyY9ATM1JzI1IzUzJzI9ASczJzU3Ij0BNjU0Izc1NDMnNzUnMjcnNDcnNyc3NCM3NSczNTQnNjUmIzU0Nyc3Iic0MxYzNjMVNjMWMzYzFzcXMzY3FjM3Fhc3IjUyNRcyNxYzMjcUMzUWMzQzFzcWOwE3FzcyFTczFjM2MxQzNDcWFTcVNxc3FzcWMzcWFTY3JzI1FzI3FzYzFjM2ARcUIxQHFDMHFRciHQEUFwcWHQEXIxQzFjMHFxUHMhUHFBciBxUXIh0BFyIdARciFRYdARcjFBcUBxciFRcHFBcGFRQXIh0BFhcHFwcWFwYdARQXFAcVFy
IHFxQHFxQHFRciFRYXMhc3FDsBNxUzNxU3MzcVNjMyFzQ3FzY3Mhc3FjsBMjU0JzI9ASYrASIHJiMGKwEnFAc0JxQjJiMHNCsBBisBIiciByInNzQnNjUiNTcnNyc3JzI3JzQ3NDcWFTI3Mhc2NTI1NCc2PQEnMjU0JzYzJiMiBycHIiciByYrASYnNzQnNyYnNjcmNTQ3FzQzFDsBMjcUMzI3FjsBMhc3FzI3FzI3FzcXMj0BNCc3JzY9ATQnBgc0KwEHNCcGKwEiJxQjNCcUIzUiByInBisBJxQjJiMiByYjIgUVBisBJzQBFSM1FxQrASInNTcWJxUjNQEVIzUTFSM1BTIVIgcmIzUyFzIVJzUXFjMUKwE0JwcXFSInFzMVBiMnJicyBxYzFSMiJzU2NR8BByYjNQQUEBETFQofKwgOBgYLCwoFBQoFGxYLCwsVBQUFBQUbGwUFBQoFCgoKBQoPCgoKCgoKCgoFBQUFCgUFCBIVBQUFBQoFBQoFBRoVBQUFBQUKBQUKCgUFEAIKBQsGBgYQEAoECgYGBQ8EBAoKBAQECgUKBQQKCgQKCi4JPhodDS0SCgULBQsECwUGBBZzChQUCg0iBhkLFR8KBggIGy0GGgobEAQFCwQMCgoFBQUOBy8IDSUEIAoGCiUKCgsPNSQLBgYGEAoFBQoFCgoFBQoFBQsFCgULBgUFBhAFFQkHBQUFBRAGCwUFCwYGBgYGBgYGBgoGCgoKBAQECwsGBQUKCgQECgoKCgQEBAQKCgQEBgoEDw0IBgYGBgYGBgYKDwUFCwQEBAoKCyoBCQIJCgULBQIICwoLNBAUCgsLPw8FBQUaBgoKCwQbBRcODzUKCgsLDwsKBhoEDgglBAUlFRoLGgofCxEOIBoOMAUFGgITBQsFCwQG/NkHBwYGAwMDCgMDBAQEBgcDBwsEBAcGAQQEBAQEBAQDAwMDBwQEBAcHBAQGBAMDAwMEBAcKAwQCBgMDBgMDBgc
UIwYEBxEXBxEmBp0RAgswBw1SEjUREgMHGwcDBQUpDhcGCBcRIhgRGAMRCwYEChYCAwYBBgEUBwMGAwMDAwYDAwMJBQQELwodDAgGUSIDBwQEBwUFBRMDBxgGBAcHBhMMcwcEBAQEBAMDBAQcEQMDHwkLBA4NBggUFhoGBwQGBwoOBxENFQcDAwMRC00DBAdADQ4LFFwDJgMIEwcRBggiKAQGBwsGMgwzAoAFBgMH/c8iuwcDBgEEDZkHAcUENwT+HQcDBw4KCQ8HEcgHBwcDCrgREgaxHwwCHwgWFFwKEh8GAQc9DgoLCgdxDwoiBSIKBAoBCQpJCQUYCggVBRQJIgEJFAUrCgoICwUKPwEOBQ4qBwkKBQUKEzETCgEJCAsFHQEJGAoPCQUPDgUKBQoECg8OChMjBA8YBQoICwUUCQUFAQkKHQkUAwcJDwoJBSIKBQUFHQUYGA8eBA8JJwgMCQoYHhgICw8FBQksGQQeCRIVAQkKBQkFFB0YBQ8ODwgLBRAIEgcFCgUFHQUKCgUFBQUFBRkFGAUdBQUPCgUFExgKCgUFBQUPBAkFBQkJBQUJDg4EBAQJBQ8FBQUFBQkiDRUFGRMUDgQZFAkJCwUKBAoYBQoFCgkFBQ8POQsFBCYGDyIKBAUiCh0KQwsTCgoJBRQJBQUUH1oKBVMICyEeBQodEA0PJxgFClcKExkJFAoJCgwHBRkiBR0dDxgdCgUiCQoKHQUKDg8FCwgKBQUJFSEKE0ksCgoFBQUKBQ4FCgUFDwYJCgUFBQUFBQUOBAkOBQUJBAQEBAkFBQkFAwYJBQUJBAQECQUFBQQGCQUFBQoFBQr+lw4KEFYKEREHBAYVHgcGCBgGB8UOGAowAwcIHQcDBwQlBwMfEQMGCBsHAwcDB0gDBw0GCw8GAwcDBAcUBxgRGQkSDAcrLRlzTgcbCg4NEQYIDhEDDwIDAwMDBwQEBAMDEQQEBgMDBAcDA7QPDAQbCgMDBwQEAwQD
BAcDAxQHBxQYF2AHAwQGFQ0REQ5tFAQXFhAFBQoECgciBAcOKBEYAwcRDj0EBwMDAwMdOBUDBwc2ERl2EgkUBAQEBAcDBwQHBAQEBAcDAwMzDRYaDhEdFhQVEAgJBAQGBQQKAwMEBAQEBwMDAwMDB0sHCgMG/tYEB4QHBwYHCAEGBv6pBwf95wcHLAcEBAM2BwMEBBQHDA8sAwoNIgoDBhYMChgDBwMJCBgDDgsDAAAAI//O/xEErQbnAdADbwNzA3oDfgOEA4wDkgOYA5wDpAOoA7ADtwO8A8ADxgPMA9ID2APcA+ID6gPvA/UD/QQBBAcEDwQTBBcEHAQiBCcELgAABTQnByInBiMmIxUmIwYjFTMVJiMVJicVJxUnByYjFxUiNQcjJxUnByYrARUjJjUGIzUjFSM1ByMUIycGIyYjBiMmIwc0JwYjJisBIhUiNQYVJicHJzU0NyY1NyYnNyY1NyY1Myc3JjU2MyYjNTMnNDMmNTYzJic3Jj0BMxYzNSY1MjUmPQEzJzUzNSM2NSc3NSc1MzUnNRczNSM3NCc3JzcnNTQzJzY9ASc2Myc1NjcnNjMnNTQzNCM3IzU0MzUnNDMnNTY1IiczFzUnNjM1NCM1Mxc1Jic3NCM3JzY9ASc1MjUiNTYzNSY1NyYjNxczNTQzJzYzNSI1NjUmIzUyNTMyFTcXNjM1IzUzMhczNDMXMjcXNxYzNTMyFTczMhUyNTIVMjUWMzUXMzQ3MhczNDMXNjMVNzIXNxc0NzQ3FBcyNxc2MxY7ATIVNzYzFRQXBxYzBhUyFSIVMhciFScVFyIHFhUHFhcGFRQXBiMWHQETIxcVIxUXIgcVMhUiFTIVBxcHFwcXIhUXIh0BMxUjFRciFTIVIh0BFBcGFRYXBgcXBxcGIxYXFCMWFwYVFwYVFyYnIhUiJwcnIgcmIxUmNQcjJwYrAScGKwEUByciFSciAzQrAQc1Bgc0KwEHNQYHNCcGIyInBisBJ
xQjNCMiBzUiByciBycVFyIVFwcyFQcXIxQXIgcUMxQHFh0BFyIdARQHFRYzBiMVMjcWHQEUKwEVMxUiBxUHMhUHFRQzFAcXIgcXIh0BFwcUMwcyFQYVFDMGBxcGBxYVIhUWFyIVFyMXFAcWMwcVFyIVFBcHFBcHFDMUBxcGFRciFRQXBgcWHQEUBx8BMjUyFTI3Mhc3MxcHFBc0MxQXMjcWFzQzFDsBNxUyNxUzNScyNyY9ATciJzMnNDc0IzUzFhczNTQ3NCcyNyc2NycyNSczJzY1JzI3Jj0BNDcmJzI1NCcyNyI1Mj0BJzI3JzYzJzYzFjM3FjsBNzMXMjUyFTY1JzI9AScyPQE0NzUnMjUmIyIHJiMHNCcGIzQjByYjNCc2NScyPQEmNTI3FzU0JzcnNzQnNyc2NyI1NDcUMzI1MhUyNxQ7ATcUMzI1MhU2MzIXNxUyNzIXNzM2NTQnNjUnMj0BJzI1JzcnNTcnIwc0JxQjNQYjJxQjJyIHJicGIyYjByYjBgUVIzUzFhcVJj0BBxUjNRcyFSMiJx8BFCsBJzUyMxcVIyc1BRYVIyInFwcnNQcUMxUjNCc1FxUnNRcyHQEjIic1FzMVIyInNRcVIgc1BxUjNRcVFAc1MwcyHQEiJxcyFxUiJwcyFyMnNQcVIzUzFh0BJjUXFh0BIyY1MgcVIicWFwcmIzUWFzIXIyInMjUHFSM1BzMVByY1MxYzFSMmIzUXFCM1AxUjNRcyFSc1FxUiJzUyFxQjJjUHMhcjJzUyA0wVCBofAQcHCQ4KCQQINA0qMxwJCAcJBAgIBAgQHQEHBBAIGgcICDEUBBEUCAEHCAQCBiUMAgYCBgQdBAwiFxQRBAQEBwUEBAwEBAQECAUIAgsIBAQEBAUFDAQQBAgEBAQQCAwICAwIBAgICAgECAQMBAQMBAQEDAwIBAwSAggEBAQEBBEREQkNEREGDwgJBAgEDAgIBAgIBAQEDAgMDAQMEAwIDA
QIBAQIAgoMBBAREQQEFAQIBAgMCwIEEAQIFBUIBQ8MBAgRBAQgBA0gHAUEDBQECAgPEggGBggIQWIMCQcIGwqVEgQECNpKHQQCBggEBAYGCAgMCAkNCAQEDQUFBAQVBAQIBAYLDQgIBAQEFAgICAgICAwEBAgIBAQEBAQIBAgIBAQEBAQEBAQEBAQjBgQHGQQJCQcHCSEIBBQBBwQVAQcUEAQEGSD6Ax8HKREDCgcZKwoHAwgGBggKEQMYAwcEBhEGAREDAwMDAwMDAwcGAQcEBAMDBwgQDAIDBw4HESwWFgMGBgYDAwUBAwMDBwQOAwMHBAMDAwMDAwMDAwMDAwMDBwMDAwMDAwMHBAcDAwMDAwQEBwMVAwMIBgIMCgcXAyIDDgMHGD0EAwcHDBYGAwMEBAQEAwMGBjkDKQcDBwcFBQcHBAQEBAQHAwMGBAMDAwQEBwMEBAQEBQIHAwcDCRwGCwcDEgYLEQoHBlIDAwMGBwMDARcFAQsKByIGBAMHQTMGAwMDMAsDIgMGAwMDAwMDBARIAwcDCgsDBwcDBwcQDggGHwsdCAYUHBcDAwMDAwMDBwQEDh4HGwQSAhEEEQcGBScHBAYEBxUGOf7NCkQNBBgiClwHBwYBRBEHAxEDtREVEf6pEREHA4sDFW0ODgMwDnQGBgYBERsbBgFYCg1tCncfETMHBQVAGgENERsRAwcRoAYlChhjCgoKAxgMCxdPBxMICBoGBAcHBwQbBCwHEQ6FBwMDBghSB5kOGAoNGwYBB3oHChERBA4RA+8HBgQJCQQECQUECRIJCQQECQUFBQUJBQ4FBQkEBAkJAQgJCQkJBQkFDgkECQUHBwkJEgQEBQUJBRJeT1cgMT4RMwgICi0JBQkWAQgfEgkJBQgFDRkQFgIMCAQEGAMFAgsJEgUJEAoFCQQOBAUNBQUFCQYHFgkJCRIFCRYNJBIFEgQQDwUkCQQFBFoJCQQNCRsFAgsXBQUJBAQJCQQEIA0
FBBYJBRYFDQUSDRIEAwsSEgkFKAUWEhsFCQQSCRIFCQkFBAkSFwkJBQUFBQUFBQUSBAQEBAQJDQ0ECQUFDgUFCg0QCwcHBQUSDQUFCQUadSBHGBkFBA4JBQkXGxYJBAVHlCQGJygtFmz+6wkFCQkSEgkICQkJCUwFFgkOCRIIDhYFCQkfCwcJBCEICy8JFgUfCCUESAkJBAkJCRcDBgQJCQQEBAkDBgQECQUJCwMJBAQG4QMDAwQGAwMDBgQEAwMDAwMDBgMDAwMGAz0RBB4RBBcHCR0GBwQGEwwOBgQKdTUDUgMRAwUFBAYfAwseEQcKEQcDBwcHBwMKGAMEbQMGCAYHGAcUQQcDAxoIBAcUAwcsEQsRAwMHBwMHBwoEBk8REQYEFxIkCAYHHAkLDg0DAwMDBwQHCAUDBAMEBwcEBAQEEQcEBxcGCAMYChgGAR8DAwcvBgEGC04EHiYHAwcpBgQHFwYIAwgGCBoDBgsfAwQHEQ0RMAcXAwMKBwcHBwkdBgQRGAYYBBcREQQ2BwcDBQIEBAQKERgZAgcEFwcKDgoKFhYsBwcDEREHBDkEHAYEBwMHBAQEBwcHAwYDBwQEDSIJEwYEBwMREQoHAxERES0EBwMDAwMDAwoDAwQEBAQHB5wEBAYPBhIFBAQDA0AHByIEBgMDAwMDA4sJEhsfBgMDHg4DBwYEDgcEAwMHAwYEJgYGBA4HAwcEAwMiAwkFBwcGBw0zCg0XIgoEBgMDAwUFBAkFBwUFAwUFGwQYAx8ODgcEKBwVBxgHBwcHAwgFAwMDAwMHB/3SAwMDBwQDIgMGBB8HBQaqCwQDAAAAEf/O/tMFeAdNAZwDNwM8A0IDSQNNA1gDXANgA2QDaANtA3EDeQN9A4EDhQnPugHmAHoAAyu6AvwDQwADK7oBQgJMAAMruAB6ELgAP9C4AD8vuAFCELgBCtC4AQovugAEAD8BChESObgC/BC4AAvQuAALL7gAehC4AffcuAAm
0LgAJi+4AHoQuAAr0LgAehC4AC3QuAAtL7gAehC4ADTQuAA0L7gAehC4ADrQugA7AD8BChESObgAehC4AETQuABEL7gAehC4AEbQuABGL7gAehC4AEjQuABIL7oASwB6AeYREjm6AFAAegHmERI5uAB6ELgAVNC4AFQvugBVAHoB5hESOboAVwB6AeYREjm6AGcAegHmERI5uAB6ELgAadC4AGkvugBqAHoB5hESObgAehC4AHPQuABzL7oAdAB6AeYREjm4AHoQuAB20LgAdi+6AHgAegHmERI5ugB+AHoB5hESObgAehC4AH/QuAB/L7gAehC4AIPQuACDL7gAehC4AIXQuACFL7gAehC4AIfQuACHL7gAehC4AInQuACJL7gAehC4AIzQuACML7gAehC4AJDQuAB6ELgAktC4AJIvuAB6ELgAlNC4AJQvuAB6ELgAl9C4AJcvuAB6ELgAmdC4AJkvuAB6ELgAm9C4AHoQuACg0LgAoC+4AHoQuACi0LgAoi+4AHoQuACl0LgApS+4AHoQuACp0LgAqS+4AHoQuACt0LgArS+4AHoQuAC60LgAui+4AHoQuADD0LgAwy+4AHoQuADH0LgAxy+6ANEAegHmERI5ugDjAD8BChESOUEFAAoDQwAaA0MAAnFBGwA5A0MASQNDAFkDQwBpA0MAeQNDAIkDQwCZA0MAqQNDALkDQwDJA0MA2QNDAOkDQwD5A0MADV26AOsDQwL8ERI5uAFCELgBBtC4AUIQuAEI0LgBCC+4AUIQuAEM0LoBDgJMAUIREjm4AUIQuAEQ0LgBEC+4AUIQuAES0LgBQhC4ARTQuAEUL7gBQhC4ARbQuAEWL7oBGQFCAQoREjm6ARoCTAFCERI5uAFCELgBHNC4ARwvuAFCELgBIdC4ASEvuAFCELgBKtC4ASovuAFCELgBLNC4ASwvugEuAUIBChESObgBQhC4AS/QugEwAD8BChESObgBQhC4ATPQu
AEzL7gBQhC4ATrQuAFCELgBPNC4ATwvuAFCELgBPtC6AUUBQgEKERI5uAFCELgBR9C4AUcvuAFCELgBS9C4AUsvuAFCELgBTtC4AU4vugFaAkwBQhESOboBXAJMAUIREjm6AWMCTAFCERI5ugGAAkwBQhESOboBjAJMAUIREjm4AfcQuAGu0LgB9xC4AbLQuAGyL7gB9xC4AbrQuAG6L7gB9xC4Ab7QuAG+L7gB9xC4AcDQuAHAL7gB9xC4AcLQuAHCL7oBxgB6AfcREjm4AfcQuAHI0LgByC+6AckAegH3ERI5uAH3ELgB0dC4AdEvugHSAHoB9xESObgB5hC4AdTQuAHUL7gB5hC4AdbQuAHWL7gB5hC4AdjQuAHYL7gB5hC4AdrQuAHaL7gB5hC4Ad/QuAHfL7gB5hC4AeHQuAHmELgB49C4AeMvuAHmELgB6NC4AegvuAHmELgB7NC4AewvuAHmELgB8dC4AfEvuAH3ELgB9NC4AfQvuANDELgCBtC4AgYvuAL8ELgCFtC4AhYvuAJMELgCK9C4AisvuAJMELgCL9C4Ai8vuAJMELgCNdC4AjUvuAJMELgCOdC4AjkvuAJMELgCO9C4AjsvuAJMELgCPdC4Aj0vuAJMELgCP9C4Aj8vuAJMELgCRNC4AkQvugJ5A0MC/BESObgC/BC4AozQuAKML7gC/BC4Ao7QuAKOL7gC/BC4ApLQuAKSL7gC/BC4ApXQuAKVL7gC/BC4AprQuAKaL7gC/BC4Ap/QuAKfL7gC/BC4AqTQuAKkL7gDQxC4AtbQuALWL7gDQxC4AtrQuALaL7gDQxC4AtzQuALcL7oC9QA/AQoREjm4AvwQuAL40LgC+C+4AkwQuAMK0LgDCi+4AkwQuAMO0LgDDi+4AkwQuAMS0LgDEi+4AkwQuAMV0LgDFS+4AkwQuAMX0LoDIAA/AQoREjm6AzEDQwL8ERI5uAL8ELgDOtC4AzovuANDELgDQdC4A0
EvugNGA0MC/BESOboDSwA/AQoREjm6A00APwEKERI5uANDELgDUNC4A1AvugNSA0MCBhESOboDVQA/AQoREjm6A1oAPwEKERI5ugNcAD8BChESOboDZgA/AQoREjm6A2gAPwEKERI5ugN2AD8BChESOboDfAA/AQoREjm6A38APwEKERI5ugOBAD8BChESObgBQhC4A4fcALgAAC+4AAMvuAAIL7gADC+4ABgvuAGUL7gA4y+6AwgCVQADK7oABAAAAOMREjm6ADAAAADjERI5ugAxAAAA4xESOboAOwAAAOMREjm6AD8AAADjERI5ugBLAAAA4xESOboAUAAAAOMREjm6AFUAAADjERI5ugBXAAAA4xESOboAZwAAAOMREjm6AGoAAADjERI5ugB0AAAA4xESOboAeAAAAOMREjm6AHsAAADjERI5ugB+AAAA4xESOboAogAAAOMREjm6AKcAAADjERI5ugCsAAAA4xESOboAswAAAOMREjm6ALYAAADjERI5ugDHAAAA4xESOboA0QAAAOMREjm6AOsAAADjERI5ugEOAAAA4xESOboBGQAAAOMREjm6ARoAAADjERI5ugEuAAAA4xESOboBMAAAAOMREjm6ATIAAADjERI5uAMIELgBN9C4ATcvugE6AlUDCBESOboBRQAAAOMREjm6AVoAAADjERI5ugFcAAAA4xESOboBYwAAAOMREjm6AYAAAADjERI5ugGMAAAA4xESObgDCBC4AbzQuAG8L7oBxgJVAwgREjm6AckCVQMIERI5ugHSAlUDCBESOboB9gAAAOMREjm4AlUQuAJS0LgCUi+4AlUQuAJX0LgCVy+4AlUQuAJd0LgCXS+4AlUQuAJj0LgCYy+4AlUQuAJl0LgCZS+4AlUQuAJn0LgCZy+4AlUQuAJt0LgCVRC4Am/QuAJvL7oCeQAAAOMREjm6AvUAAADjERI5uAMIELgC/tC4Av4vuAMIELgDAdC4AwE
vuAMIELgDA9C4AwMvuAMIELgDBdC4AwUvugMgAAAA4xESOboDMQAAAOMREjm6A0EAAADjERI5ugNGAAAA4xESOboDSwAAAOMREjm6A00AAADjERI5ugNSAAAA4xESOboDVQAAAOMREjm6A1oAAADjERI5ugNcAAAA4xESOboDZgAAAOMREjm6A2gAAADjERI5ugN2AAAA4xESOboDfAAAAOMREjm6A38AAADjERI5ugOBAAAA4xESOTAxASMmNTciNSIHJisBFSMmNQYjIicGIycGIyY1BiMnByY1BycGIyI1BgcnBycUIzQjNTMnNjM1Ij0BMxc1JzcmNRczNyI1MjUiNTI3JzI1JzYzJzQzJzUXMyczJjU0Nyc2MzQjNzQnNjUiJzUzJiM3NSc3JjU3Jj0BNyI1NyInNyM1NyI1MzUjNTI1JzcnNTcmNTY1JjU3JicyNSY9ATQzJjU2NSY1NzUnNj0BJiM3NSYjNzUnNxc1JzU0MzQjNDMnNSc1NzUzMhU2Mxc3FjM2MzUnNzMUMzcXNxYzNxQzNzMyFTY3FBc3MhU3FhU3Fhc0MxY7ATI3FjMyNRc2NTMUMzQzFhUHFjMVIxQzFSMVBzIVBhUyFSIdARQzBzIdASIVMh0BIgcXBxcjFhcUIxYzBxU3FyMUFwYjFwYVMhUHFRQzBxUUBxciBxcUIxcVFAcVIgcUMwcUMwcVBiMWFSIHFhUjFwcyFSIHFDMVIycUFwYdARc3MxUiFRYdATIVBxQzFQcVFyMGFRQXIhUWFSIVFhcHFwYjNCMHJyIHJwYBJwYVIicGFSMGIwYHFyIHBiMUFwYHMxUGIxQXBh0BBzIXIhUUFwcyFQcyHQEnBxUXIh0BFxUiFRcHFxUiHQEyFwYjFAcUFwYdARQzFAcXIxYXBxcHFjMHFDMHFBcWFxYXMzcUFzI3FBc3FDM3Mhc2Mxc3FjM3FzM2NxQzNjUXNjc2MzYzNjUmIzUzMhcyNyI1Mjc0
JzIXNj0BJzI9AScyNSY9ATQ3IjU2NScyNTQjNTI3NTQnByYjJxQjNCsBBzUHIwc1IgcnIgcmKwEnFCMmKwEnBh0BFyMUFwcWMwcVFyIHFxQHFxQHFhcyNTMWFQcUFwYHFh0BFyMUFwcWFRQHFyIHFRQXBh0BFyMGIxQzBiMiJxQjNSIHIjUmJyY9ATciNTQ3JzI3JzY9AScyNSczNCc3NCcyNzU0NzQnNjc0Jzc0NzQ3FjsBNxYXFhcHMhUUIxQzBxUUMxUjBgcUFwYHFDsBMjcyFzczFzQzMj0BJzY9AScyNTQnMyYjNCcHIyYnIhUjNCM0MzUmJyMiByMnBzQnIhUmIwYjJxQXMhUjNQcyFQYjNQcUMxUiBzQFFSM1BRYdASMmIzUyNTIHFSM1BxUjNQEVIzUXFSM1BxQrATUXFSInBzMUFxUiJzQFFSM1BRUjNQUVIzUDzwYMBwcGKRMQEAciHyIXKDIgKQELEQwGCg1LHSIoGQdhDTlHOgUXCgoNFRgGDAwHBwwGBgYGBgoHEREGCAsTBhERBgwGBgYGAwkGBgYGCQ4XAwkGCwUFBQsGDAwJCAsLBQULCwsGDAYGDAwGCwUGBgwGEgcNDQ0NBQwRDQQEFw0KChAXDQYNJAUMHQwLCwsMDQUSDQUNRTULCwcdDBAHBWUKdC4HFzQNCUkKOB88DAoUIQRkdAcKDV0GBxALFwwHDQYGDQ0NDR0MCwcMDAwGBwkEBA0GDAYMBgYGBgYMDAYGBw0JCAQEBAQGBgYGBgYCCgwMBgYGBgoKCgcXBgoEBAQMDBwEBgYYHAQLBgYRBQwMBgYMHxtMKQwIbQop/rAGQQMHEQpLBFYrBAYPDgoEBwMGBQUEBwQEAwMDBwQEDg4DAwMHDgQLBwoDBwUFAwMDBgMDAwMHAwcECgsEDgQzEUgfLA0HCgQGDikDBwdOGQIHBxUGAwcEPR4EDQ4qGjIIFQZjCxEECQsKDgMDCg0DBwoDAwMDA
wYDBwQEFRAFGAcfShEEAwMHERgHAwcHBwYTDBgRAwYIQBgVBAQEBAQHBwMDBAQEBAQGEh8HQB4DAwQEAwMDAwMDBgUBAwMDBx4RAxUoAxgEAwcDHR1EAwMDBwYFBAcDBgMDAwMDBw0HBwQKAwoeNwYHBAdIKxsOAwYGAwMKBwQQAwMEMCkUOggFFSwRJRwEBAQEBwMCBR4HAxBJBwYVFQEhBwYBA7EHGwo+AwYIEa4HC8wHBQUOBwoOAVsN/pQpBDEMDgpOB50GAvYENw4lBwdSBgHaCwMJC/3ZBAKvB/02A/7TAQkLBhELCwwFCgQEBAsHBAQEBAwJBhAFBQoLCxEgBQwEESQRCwUFBREKCwUFFgQGBRsbMAslGwUgBgsrCwURFSVABjUFCwsGFQU8GiYPCwoLCwEKSwsKERAQDwsGIAsFGwUKFiAWEAEKHhEHBUoGAQoQBRgJCgUBChEEEQEJBSEbBBYLRhUFBQUREBtlGxo2EQUmChEMBQUFBQUWBBUVBAQEBAoKBAsKExMLBQUEBwYLBQoKBQoFDBAREAsNHgsfDB8HFRoLCwUFCwYLFQsENgsGD1YGRTAMBDYLFQULDAkQCgsGCw8REBuFDAomFSEECxAMChAbBBYLJisKKQIhCQwKEAsLHwwFBQolFgsLBgsLCgYPBwoQBgQLG0kdBRtGCwQREikbNiscBgYRBggHoAMUBwMCCCUhYQYmWAQGETADCwMHCwlOETcDBAYtAw4GBAcHAwcDHwoEEQZZCgoiBwMLHS0IBhMMRwcHBgckDBERBzkRCw0sSywtAxsDAwQEBAMHBAQfBAQKBgYDGQYECQUHCg4eH183BgcHTwNBBg4DBxAEBwMUGAQGBw4WGQQSExUDHwoNMBgKAwYEBAQEBAQDAwMDAwMEBAQDBBQDBwMHByUKCwYRBwQGDgMHHRYRFSIXCAYnBQYIGAYEBwYHBAcGGwcHCAYGBw4RXwMcBAQEBAcKFR7CBB
EGCRMRFw46BwMHEQcDBwcIE/stCQsGASYQICGIJUsfCgQEDxopXAYHBwMHGwcEHBAHBgQpFAcEBAQHMyYUBgsfEQMJCxUvVQM9MBUVBwMFEwc6BAUGBxEEBAQvBwcmBgsRIgMDBAYTBARSEwUNJQMLTwMDrQMD/fQGBhcEBCYHBz0HBywEBgQHBnYHB2MDAxgGBgAy/87+3wXHBzoCBQPkA+gD8AP3A/4EBwQLBA8EFQQZBB0EIQQnBC4ENAQ7BEEESQRPBFYEWgReBGIEagRyBHcEfgSDBIoEkQSVBJsEnwSmBKoErgSyBLcEvQTEBMoEzgTUBNkE3QThBOcE7gTyAAADIyY9ATQzJzU3JzQ3JjU0MyY1NjMnNTM1IjU3FDM3NSM3JzU0MzUjNTM1JzU0MyYjFCM1NDMnNyY1NjUiJzI1Jzc0JzUyNyc2Myc3JzY9ATQjNTc0IzUzJzU2NTQnNyY1NjUnNjUnNyY1NDMnNTcnNjUnNTQzJzQzJzcmNTQ3Jj0BNDMnNTcmNTY9ASc3IjU2MzUnNjUmNTcmNTMnNTQzJzU2NzMyFTczMhc3FzQzFTcyFzcyFzYzFhU2NRczNDMUMzcXMzUjNDMyFSIVFzY1FzYzFDsBMjcWMzcyFTYzMhc2OwEyHQEUBxciHQEXFCMVFDMVIgcXFAcXBiMUFwczFQYjFh0BFhcHNCMUBxYVIhUyHQEHMhUHMhUiFScjFAcWFyMXBxcGFTIVIhUzFSIVFxQjFxUUIxcVIxcVBxYzFSMVMhUGFSM1IxUUFyIVMhUHJwcVMhcHFxUUIxQXFQYVFwcWFSIVFwYVMhcVIgcVFyIVMhcjFTMUIxUXIxYzFSMnFRcVBiMXFSMXIhUWMxUUBxQXBzcVIh0BMxUjFTMVIxQzBxUXFTMUBxYXBisBJjUHIicGFSInBiMiJwcmIwYjNCcHNCMUIyInBiM1ByM1IhUmIwYjNQcmIwYjJwcnFCMXFSYjBxcHNCc
0KwEXByY1IwcXFSMnIxcVIyInBxciFSYjByYjBhMUFwYdARcjFAcGFTIVBxcHFBcGBxYVFAcUFwYdARciFRQXBxcHFBcHFhUUBxciFRYXIgcWFRQHFwcUFyIdARciBxcUBxQXBxcHFhUUBxYVFAcWHQEXIwYVBzIVFAcWOwEWFzQzFzcXNxc3FTcyFzY1Mjc1JzI3JjU2NzQnNj0BNyI1Nj0BNCc1NDcXNDMWMzcUOwE3FDM3FhcWFxUHMhcjFhUUBzIVIhUXIgcXIhUXIh0BFyIVFyIdARciHQEXIxQXBh0BFyMUFwYVFBciHQEWHQEjNSMGHQEUMzI3FhcyNRYXNDMmNTI3MzIXNj0BJjU0NxQ7ATQnNjciNTQ3Jj0BNDcnNzUnNTY3IjUyPQE0JzUyFTI9ATQnNj0BNyI1Mj0BNCc2NTQnNyI1MzQnNSczNCc2PQE0NzQnNjcnNjcmPQE0NzQnNyY1NDcnMj0BJzI9ASYnIyIHJwYjIicGIzQnIxQHFhUHFyIdARQzFAcXBhUXBxcGFRQXIxcVBzIVFAcWHQEHMhUiHQEUFwYVFyIVFBcHFCMmIxQjNCMiByYjIgcnIic2NScyNyczNDcnMjcnMj0BJzI9ASMHNCc1MzIXMzQnNyYrARUXByYnIgc1IgciJyIVIzQrASIHNCMiFxUjNRcyFwcmIzUyFxUjNCc3MgUVIyInNTIFFBciByY9ATMFIzUyBRUjNQUyFwcnMgcVIzUXFSM3BRUjNQUUFxUnNRcyFxQjJicXIhUiJzIHFDMVJzUyMxUjJzcWBxQXFSM0JzQXBisBNzIHFhUjIic1BRUjNQUVIzUHFSM1BTMXFCsBNTQXMhUiBzQjNAcVIyY1HwEVIyI9AQcVIzU0FzIdASIHNRcVIgc1NxYXIzUyFwYVIzU3FyM3MhcjIicyNRYnFSM1BxUjNBcVIzUXFSInNQUzFCsBNAUyHQEjNCcXFhUjJjUXFSM1BxUjNTcy
FxUmPQEHFSM1FxUjNQUXFSMnNQUVIgcmNRYHFSM1AwgnCAgQCAgQEBAICAgQGBAIBw8PHxgYHw8XDAsIEAgICA8LFB8PDxcTBBcRBhcXDxcXDxcXHx8XCAgQEBAYCAgICBAQEBAICBAICBAQEAgIEBAQEAgIEAgQCBAQEAgICAgZHm4IDzdDGxAnCBAgLgghHg8ICF4QDxAQCCc3EBAPBw8QHzsEEAgVGg8IEAhXHhkPQitfDw8PDx8YIA8YBwcPDwgXFw8CDQgPEBAIBwcHDw8XECgIEAgICgYICAgICAgIEBAQCAgICBAQCBAIGBgICAgnCAgPEBAQHw8HHxgYCAgIEAgICRcHGQgIDQsYEBgYEAQUCBgQAw0IDwcPDxAnCAgXFxAQEBgQCBAHDwkWMxQHCCcMOwgOMQINEw0PEAgCDhcYB18KHTkGDwgQDwgQCA8QCAMNRhAnPwgjBCcHD0cICAgPCAg3CAgfCA8HEwUnCAg7FB8OERDiBwQEBAMEBAQEBAQDBAMGAwMDAwYGBgYDAwMDAwMDAwQCAwMDAwMDAwQDBAQEEQMDBgMDAwMEBAMDAwMEBhgiLwQGDhQHBwcYBRlIGAoEBQUDBwMDBwMDAwcpIgMaFgcDBwcDBwEyBxgEBAMDAwMDAwMGAQQEBAQEBAQEBAQEBAQEBAQEBAQEDgcHAx4EBwY3BxRcAxgEBwMUByweGAMHBwcDAwMDBwQEBwcDAwMKBwYDAwQEBAQHAwMDAw0EBAQEBgMKCgMDCwQHAwMDAwcEBAQBHgMODg0+EBRBBggHOgYDAwMDFxQDAwMDBwQEBAQEBAcDAwMDAwMDBgMDMAcDBAMIBhEKBgFALgUDAwQDBAQGBgMDAwMDAwMHDQYIBgMDAw4oAwMUGxwDBwgGAhIYAwcsFi4HG3cHVQYIDggJCFAKGAQXAY4DGgUD/uADBgQREQF9Bwf9WAcBHgQCDQoGWwdRFAMCJwf89gcLIgUGBwwFP
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
yYjNDcnNDcmNTQzJjUyNSI1NjUnNzUnNjUnNjMnNTQzJzY1IjU3JzQzJzUiNTY1JjUzJzY1JzcnNyc2NSc1NDMmJzc1JzcmNTY1JjUzJzU2MyYjNzUnNTcmNTcmNTY1Fhc3FjM2MxYzNDMXNzIVNzMyFTI1FzcXMyc3FjM1FjM3FzcWMzYzFhc3FzM3FTY3IjUzFTMyNxYzJzMWMzcWMzUWMzczMhU3FzQ7ARc1MhU3MxcUIxQXBxQXFSMXBxYVFAcXIhUWFSIVMhUUIxcVMhUGFTIdASMnFRYzBiMWHQEUIxYVIgcXIxcVFCMXBxcHFhcHFwcWFQcWFSMUMwcWFyIVFwcWFSMWFwcXBiMWHQEjFRciFTMVIxciHQEXIxcVBzIdAQYVFDMHFRQjFwcVFyIHFxQHFwcXBxQzBxUXIxUUFwYVFjMVFAcXBzIXFCMmIwYjNQYjJiMGIycHJyMGByYjByYnBzIVIhUnIgcmIyIHNCMVJiMUIycHJisBBycHIjUHIyYjBiM0IxQHJjUHNQcnBycHJiMHJjUGBxciFSciBycGIyYjBgEWFxQHFBcGFRciFRcHFBcGFRciBxUXIgcyFQcWFwYVFBcGHQEXIxcHFwYdARcjFxUUBxYdAQcyFSIVERciFRciHQEUBxQHIicGFSInBgcmKwEGHQEXFQYdARciFRQXIxYVFBciHQEWOwE3FzI1FzYzMhcyNxQXNxUyNTMXMjUXNjUyFzY3FDM2NTY1NjU2NSI1Njc1JzY3NScyPQEnMj0BJzI9ATQ3NTQnNj0BNCc3NCc0NyY9ASM3NCM3NSc2NSc3IzQ3NCczNCc3NCczNCc2NTQnNDc0IzQ3Jic2Myc0NyczNTQnNDc0JzcnMjcmJzY1JzQ3NCc2Nyc0NycyNyY9ATc0JzQ3JzI3JicjBzQjBycUIyYnBycGEzIdASMiJzUzFSM1AxUjNRcVIgcnHwEVIyInMgUUFzczFAcmNTIjFSYjNQ
cVIzUyFxUnIzcWNxUjNQcVIzUHFSM1XQ0OEBIIGiMHCgQECAgJBAQJBRYRCAgIEQQEBAQEFhYFBQUJBAgICAQJDQgICAgICAgIBAQEBAgEBAYPEQQEBAQJBQUJBAQWEgUFBAQECQUFCQkFBQ0JCQUJBAQEDQ0IBAkFBQQNBAQJCQQEBAgFCAUECQkECAgnBy0VGAsmDgkECQQJBAkEBAURXwkREQkLHAUVCBIaCAUGBxYnBBYIFg4DBAkECQgJBAQECwcnBwoeBRoIBQgfCAkJDSseCQQEBA0JBAQJBQkJBQUJBAQJBQkECQQFBQQNBBEHBgQEBAQNBAgEBAkEBAQEBAQEBAQIBQkJCQQEBAkJBQQFCQkEBAkJCQkEBAQECQkEBAQIBA0KBwQEBAQEBAQECA0FBQkEBAQICAkjAQcCBwkECQQBCAgJCSsNEQgKCDQNBQUFFQUICAoDFwQTCw0sCAgKCA0JCQQWBAsHHwMFHhEWCRUJGgkODBoVDScEBBYCDwUIBQgFBAFTAgUEEQMHBAQEBAQEBgEDAwQEBAQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDGEEDBxELBiMGBgcRChERAwMGAwMEBAkFCgcDBB4SAwUZAxkbBxcEEQcUOgMHGhYDGCUmHgMECQMICQMDAwMDAwcEBAcDBgMDBwMHBAQEBAQEBAQEBAcHBAQEBwcEBAQDBAYDAwMHBwcEBAQEAwMEBAQHBwcKAwcHAwQEBwcEBAQDCScREQMHHgQ0FwYHZi8HAwYBVQceBEgEBwNLAw0GAQv+qBQOAykNBhsSAhsHB8ENFQQedA5OB4sH/ukPCiIFIgoECgEJCkkJBRgKCBUFFAkiAQkUBSsKCggLBQo/AQ4FDioHCQoFBQoTMRMKAQkICwUdAQkYCg8JBQ8OBQoFCgQKDw4KEyMEDxgFCggLBRQJBQUBCQodCRQDBwkPCgkFIgoFBQUdBRgYDx4EDwknCAwJChgeGAg
LDwUFCSwZBB4JEhUBCQoFCQUUHRgFDw4PCAsFEAgSBwUKBQUdBQoKBQUFBQUFGQUYBR0FBQ8KBQUTGAoKBQUFBQ8ECQUFCQkFBQkODgQEBAkFDwUFBQUFCSINFQUZExQOBBkUCQkLBQoEChgFCgUKCQUFDw85CwUEJgYPIgoEBSIKHQpDCxMKCgkFFAkFBRQfWgoFUwgLIR4FCh0QDQ8nGAUKVwoTGQkUCgkKDAcFGSIFHR0PGB0KBSIJCgodBQoODwULCAoFBQkVIQoTSSwKCgUFBQoFDgUKBQUPBgkKBQUFBQUFBQ4ECQ4FBQkEBAQECQUFCQUDBgkFBQkEBAQJBQUFBAYJBQUFCgUFCgcdHQUEBgV2BwNVAwcHDBMvIhERIhEzBAYjBgYIBwYGCCkHFxEOHhUDBxgDCAYGCA0iBAP++gcDBwMEOzgRFQQEBgMEAwQGBQoDBwMHGxEECQs8DAMHAxEOBAcDDQMHDgoEBAQKCgoGBAkDBAkDDgMNDiIKMxgEGAoDBw84BBEKAwcDBAcDQQMYBwcGBggKDg0wBQgIBgYIFxELBgQUBwMHBwMHBAYEBx4HEQgGBgQJCwYBAwQHByUUEQYjDgYGAQoOAwcVEREGHAYEBwoNBgFCJB8JCykKBggUCgYBDxcGLRcVBAQEBwMECQMDBv2OBwMHAwMD/loGBigEAwedBwMHsQQDBwkIBQUHBAMsBw5fBAoODQoEBAcHBwoEBAA//87+nAVcBv0BggM4Az4DRQNNA1EDWANgA2kDbQNxA3UDeQN/A4YDjgOSA5oDpwOuA7QDugO+A8IDxgPNA9ED1gPaA98D4wPnA+wD8AP1A/sD/wQDBAgEDgQTBBgEHQQkBC8EMwQ4BD8ERQRJBFAEVQRdBGIEZwRtBHIEdgR8BIAEhASOBJQAAAEnIjcnIhUnByInByI1ByMnBiMnJiMnByYnIwcmJzcmNTcmNTI3IzQzJzc0NyYjNjcmIzQzJic3
JzUWNyY9ATYXJic3JiM3NCc3JzcmNTcmNTY1JjU3JjczJic3JzQzJz8BJic1MjciPwEnNyYnNzMWMzcnNTMnNTMmJzc0JzY3JjU3FhcyNxYXNxc3FhU3JzczFzI3FjMyNxcWNxc3Bhc0FxYXMjcXNjcVNzMWFTY3FzYzFzYzFhU3Mxc0NxcyNxU3FjM3FhcGFTIVIgcXFCMWFwcXBxYHBiMXBxYPARcGIxYHMwcWFScXBiMWBwYHFxQjFxUUJxcVBgcWMwcUFwcXIwcyBxUiFQYXIhUyFxUnFQYXBzIVBxYHFAcWFQcyFQYjFRQzBxUXBhUyFSIVFhUiHQEyFScHFycHFyIVBxYzBhUXIhUWFwYHBgcnIwc1Bi8BByY3ByYnIgciNQcnIjUGJyYnBiMnBiMiJwcmJwYnIicHJwYjNicGJzUGJyInFSc3IwMGFRYXIhUWHQEUFwYHMhUjFh0BBxYdAQcyFRQHFh0BFAcWFRQHFhUHFwcUFwcyFwYVFyIVFBcUBxcVFAcWHQEUFzY7ATcXNDMUMzcVMhc2MzI9ATc1JzI9ATQnNzU0JyMHIyc1NxczNjUXMzUjFSM1Njc1NCcjIgcmIzY3FDM3NTQnNTMyPQEzFBcWFxYzBxQXFjMVIyYrARYVFhUjFjMUFzMyNTIXNxU3FTM3FDMyNxc3FDsBMjcUFzcUOwE3FDsBMjcWMzY3NCM0MyYnMjU0JzY9ASI1MjU0IyYnNyY1IyIHNCM2OwEXNCM0MzQnNyY1MzUmNTcmIzU0IyYjNyY1NCM1NzUnNDcmNScyNycHNTI9AScmIzQ3JzQ3NScyNzY3NSc2NycyNyc2MzU0NzY3JzY1FzMmIyI1NzMXMjc1JzYzNTc1NCM1Mzc0IzYzNCc2NTQnByY1IhUiJyIHJwcnBzUiByYrAQc1IgciJxQjFyMmJwYHFTczFCMXIgc1IwYHFhUHJisBIgcGByMiJzU3IjU0NzQnNj0BJjUzMhc3N
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
gMDAwMKBAQEBgMDAw4RExwLAxgDBgEGAQofBgEDBwYBBxENBBEpBgcGFgYOAwYBGA4HAwcHBAgGBwcXKyQKLAYDBwkLCAYGARkWBxEOMwMEBAMHAwMDAwQEBAMDBAYBAwMDAwMKBAcDAwMDAwMEBAQEBAQEBAMDAwQEBAQEBAQoBAcGBAcXDgoHAwgGBggeB0ciBDoMJwYmGxgHARopHw0EBwMDAwMDAwMDAwMKKRgoGQYHGAYYBwcURAQEBAcHBAQEBAcDBAQHAwMDAwMEBAcDBwcRGwYxFA4+VzARGAQBJQRmCiwDBw4sAw53Bwe4BwMK/qIEBAkCDAoFCQQEBgMJBAQECQkEBgMYCgkJBQkKTAUnCCIEGAoyDAcjBQoICyEJCgUXDwkTCg4KFwVRCgkKCQoJExMKCQUJASdyGDArKQYnnEwFBQkYHRcKBQoOBQUaGkwhfRsFCQUFDhMFBQcHCxEOCgUFDgUFCQQODgkFBQUFBRMFBQUFBQUFBQkJGBMJBQUKCgUTCRMFCgQdExgFKgQJExMMAgUTDhQEDwQYBQkYBQUNIgUFCgkFBQkFBRgMAgUdCQ4FCglfBQUFCSYFERAFEwUTJg4YCQUTCgkKFwgHCQUFBQ4FBQ4FCQULEgkFEwkMAwQEGQUFCgsDGBAaDwQKBQkKEyEJARcKBQkwCwgJNhJCNCJcVGQTBQkFBQQEEwoKCAcFCQQJDgUKBQoKCgoJAQoKBQUKBQUPBQoFBQUFCgUFCQkTCgQFCQQECQkEBwcOBuk+DSYoJgMEBgQvFQcsGxsRJhQIBgYoEhEEhAQGMBEYEQcDBx0SFQcGBghfHTgEFy0MEgQUEQcRehgDBwQDDBMGBggwDAUEBAQEBAcDAwMDBwcDCgcDAwcHAwQiFAQXEQwTBggHBgYIBwYEBwMHBgcLEQUFDQQHAwMDAwMDBAMEBAczGyY9BgcETgMHBAYYKA8GBxgHAw4GAREGBCUcEBiSBDNHIj
APHQcuHeMKBAMDAw0JBAcHPgYGIgMD+wQDAwegBgMDMwf9wgQNBQUGADH/zv63BpoHMQGcA0wDUQNbA18DZQNrA28DcwN4A38DhQOJA44DlQOZA50DpAOqA7IDuAO9A8IDyQPNA9MD1wPbA+ID5gPqA+4D8gP3A/4EAgQIBBEEFgQaBCEEJwQrBC8ENQRABEQESwRPAAABNxYzNxcyNTIXBxcGBxQzFAcUMwYVFBczBxUXFSIVFxQjFRQHFDMVIycHFRQXBhU3MxUiFRYzFCMXBzMUBxYzFAcyFxUXIhUXIhUWMxUWHQEHMhUHFjMHFh0BFyIdARcUIxQXBzIXBhUzBycVFyIHMhUGBzMHFwcWMxUUIxQzFRQjFyIdARQzFCMUFxQjFxUzFSIVMxUiBxcUByI1IhUjNCcHNCMiByYrASIHIjUGBycUBycUIycGFSYnFCsBJyIVJyIHJwcnIhUjJzc1IiciBycHIicUKwE1JzU3NTciNTI1Ij0BNzUHJzc1JzI3NScyNzU0Jzc1JzQ3NCc0NyI9ATQ3NCM2Nyc0NzQnNDcnNTcnNzQjNTM1IzQzJzUzJzYzJzQzJzU0Nyc0Nyc3NScyNyM1NjM0JzY1JzI1Iic3JjU0NyM3Iwc1NyI1NyInNzQjNyYjNDM0IzQzJyMHNDcnNzUHIzU0MzUiJzcjNTI1MhU3FzcWFzQzMhc3FzQ3FzcyFzQ3Mhc3Mhc2MzIXNDczFTMyNxYzNDMnNDczFAUiNQYdARcGHQEUFwYHMhUGBxYVBxciBxcHFyMXFQcyFRQHFyIHFDMHFRcjFwYVFhciBzIVBxcHFRQXFSMiJyMUBxciFRciHQEHMhUHFwcUFwcyFyMUFwcXBxcVMwYdARcGFRciBxYdAQcyFQcWHQEHMhUiHQEXBh0BFyIVFyMXFQcyFxQHFRc2MxQzNxQXNjsBFzcmNSM1FzU2PQE3NTY1ETQ3NTQ3NTY1MxYzFAcWFxYzFhMjFhU
WFyIVFBcHFhcyNTIVMjcXNjsBNxQ7ATI3NjU2NTY1NjU3Njc0NzMXFRYdARQzFSIdARcVBh0BFjsBMjcUFzcWMzcUOwEyNxY7ATI3Jic0NzQnNjUnNyInNDcmPQEnMyc0Nyc3JjU3IjU3JzQ3Jj0BJzMmJzY1JzMnNzQnNzQnNjU0JzcnNDcmPQE3IjU0Nyc1NyI1Nyc3IjU3JzI1JzMnMzUnIhUjJiMiBycHIicHNCciFScHJyMiByYnFCM0JwcnBzQnByIVFyMWFRQjBiMGByY1JyY1Jic1NCcjBzQnBiMmIwYrASYnByMiJwcjJxQjJwc0JwYjJwUUKwE3OwEWMxUGKwE0JxcVIzUHFhUjJjUzFwciJzQHFSM0BxUjNRcyFSc1ITMGFSM1NgUVIic1MgUVIzUHFCMmNTMVByY9ATIXIzcyFyM3MgUWFxUmJzUhFwcmNTQFMxUHJiM1MhcjIj0BFicWFSc1FxUjNTIFMhcjJzUyNxUjNQUzFCsBNAcVIzUFFSM1BRcUKwE1NBcVIicFIzUyBSM1MhcVIjUHMhUjNQUUFyMiPQEHFSM1BTIVBiM1BRQzBhUjNCM0FxUiPQEFFSM1BRQzFSIHNAUUKwEiJxcVIzUFFSM1ITMUKwE0BRYdASMmIzUyNTIFFSM1BxcVJyIHNQUVIzUEzQ2DCA8yWiEmEAgIDQ0GFggIDAUiHQgIBSIODwUFBQ0HGwcNDQ0ICAgIDQ0LAggICAgICAUFBQUIDA8HCAgPDwgICAcHDgcPCA8FBQwJCA4ODggOECQPDw8PCAgPBw8bDBMJCHAPDQeMdwUpFwwPSCVDDVYMDz8bCDeMDHkGCBQOIwgNDUBTDwcPFgcPDwwODQ8iDwYrDwgPGxQNDQ8cBQUPFA8FDw8PDwgWCA8HBwUMBw8PBwcPCA4ODgYGDg4KCw8PBwwFBQUNCAsEGxALBwcHBwsECAgICA8HFBQIFw0KCBQUCQsHBwcHCA4ICA4O
Bx0aEA0NHAZFVkUPdQgeMCkiWw8MCA4UDgExJjwwGyokKggUExYxCAcHDgf8SAMYAwMDAgQDAwQEBA4EAwMDBwQEBAQEBAQDBwQEBAcDAwQFAgMHBAQmBBENBAMDAwMDAwMDAwMDAwMDAwMDAwYDCgoHCgMDBAQEBAcDAwMDAwMDAwMDAwMEAwcRNAYDBxsSEANVBwMfIg4NCwYHBwMCCQQGFQUXJToEDhEOBBgDDREEAwgGBh0TCgcDBCYJFS8OLB8NCyIDAwcODgcHBQULCQswRw4KBwMKCAYPHREaCAMEBAQEBAcEBgcHBAQEBAQEBAQEBAQEBAMDAwcEBAQEBAcDAwMDAwMDAwMDAwcEBAQECwQYAwMDAwMKBAMDBhwLDQcOBSoHOikKFA4DCAYGIwMUBykRChUXAwMDBxgNKTANIikWGgYEEUQHAwcDCwoGCBcUBAsGFCkYAxERVQYIDQEaBwcEUQQIBQgFBwRPB4gKAwtEBwMFBT4G/w4YCg4BKAQHBwX++QYBBwEMA48HCskECghlCgMH0wsEB/3qKQYMJwI1BwQK/ooDAwcDAzAEBgqFCg3kCwT+2BEDDREDXAcBWAYGB7EH/p8EAUoHBwdVBgH+ogcHAtgHB2IGYAcKATUEBAZ7Df6NBwUFAZgGAwcUtwb8XAMBaAcKDgInBwcGATcO/HEDAxQEBwP+KikDMgsNCv6zDUQXEQMHBDkNBxYGEQYGHCs2GykSEQQLRhsFHUkbCwQGEAoHDwYKCwsGCwsWJQoFBQwfCwsQCgwJIQIpCismCxYEGxAKDBALBCEVJgoMhRsQEQ8LBgsKEAkMCwUVCzYEDDBFBlYPBgs2BAsVCwYLBQULCxoVBx8MHwseDQsQERAMBQoFCgoFCwYHBAUFCxMTCgsECgoEBAQEFRUEFgUFBQUFDBEKJgURNhobZRsQEQUFBRVGCxYEGyEFCQERBBEKAQUKCRgFEAoBBkoFBxEeCgEQFiAWC
gUbBQsgBgsPEBARCgtLCgELCwoLDyYaPAUVBgsLBTUGQCUVEQULKwsGIAUbJQswGxsFBgQWBQULChEFBQULESQRBAwFIBELCwoFBRAGCQwEBAQEBwsEBAQKBQwLCxEGCwkBE/YDBwYcFAYLBwcGCy8EAjsSAgc9ChEHERgREQMJEwYLBhEYBzYHBB4HGwQXBxUDGggDCggGBwMHAyIRBAYHEQIqDgoJEg4HAxERDQsHCg4lBxsGCAYYBB4GCAcXBAMYFAYLKQcDBykHESUEIgMpDgQEBAMDFAMHBAYDAx0FJktiIDUBegMYRAMYJRYdDQQGGx9OYP7+IxMxWwMxUAc0LwQEBAQEAwM9Pg1gDBsHiCmjGyMLUCIsGAOPBwMHLAqdFwTkCgcJBQcDAwMDBzAJIAMYDDseCAdKPgYfRSgRBx4KDg4eHQ8OAwcYERgtMh8GOiIHAwcVDQYBDgcGBwMJEwYHCg4ODQQRAwMHCgsRAwcHWApVBwMHGAoHAygDAwMDAwQDEQcECgMDBAQEAwMDAwMEBBgGGAQRgXlxBQVpaRIueA4GAQQHAwMDBgYEBAQEBAQHBwUGBAQzBw0GBA0PBQcDA2kFBQUFBBEOBjkHBs4EBAQHBAMIBQMKIgMHAxgHBwcGBQUKBwUFAxcGEQcRAwcDBgQDAw4FBQY8BwcEByIGBAUBBQUEBhcHAwMKAwMEBAQEBgYUAwMRBwcRAwcDBjIHBxgHiAcpBwcUBwcHBAYGBAQDAxsHChEDBBIJFQYDCgcDETAwBwMEAwYaBwcEAwMNBwcHBjkTBQ4mAwobAwMeBwoKBAvoAwMAAAAo/87+uAVKBvYCBQN7A38DgwOHA4sDjwOVA5wDoQOqA64DsgO2A7oDvwPDA8cDzAPSA9kD3QPhA+oD8wP5A/0EBAQIBBEEFQQbBCAEJQQpBDIENgQ9BEQESAAAATMWHQEUIxcVBxcUBxYVFCMWFQYjFxUjFTIVBzQjBxUzBx
cVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnNTMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NSInNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYBFRcjFRc3FjMVIyInFCM0KwEHFRcjFBciFRQXBh0BFyIVFBcUBxQXBgcWMxUiBxQzBxcjFBcHFxQHFyIVFxQHFyIVFwcWFRQHFh0BBzIXFAcWFwYdARciHQEUMwcVFyIVFDMVIxUXIhUUFxUHFh0BFAcWFRQHFwcXBhUUFzMyNRc3FDMyNRYXNDMXMzI1Fhc2NTQnNyc3NCc2NyI1MyY1NzQnNjMmNTcnNycyNTQnMyc0NzQnNj0BIj0BMxcmIzI9ATQjNTI9AScyNzMWFxYfAhYXFBcWMxQjFzcWMzI1MhcyNxUyNSY1Nyc0NyY1NCM3JjU2PQE0NycyNSczJzU3IjU3Jj0BNyI
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
CIC+4AjYQuAIj0LgCIy+4AjYQuAIn0LgCJy+4AjYQuAIq0LgCKi+4AjYQuAIt0LgCLS+4AjYQuAIw0LgCMC+4AjYQuAI60LgCNhC4AkDQuAI2ELgCQ9C4AkMvuAJeELgCUNC4AlAvuAJeELgCUtC4AlIvuAJeELgCVNC4AlQvuAJeELgCV9C4AlcvuAJeELgCWdC4AlkvuAJeELgCW9C4AlsvuAJeELgCYNC4AmAvuAJeELgCY9C4AmMvuAJeELgCZdC4Al4QuAJn0LgCZy+4Al4QuAJr0LgCay+4Al4QuAJu0LgCbi+4Al4QuAJw0LgCcC+4Al4QuAJy0LgCci+4Al4QuAJ00LgCdC+4AeQQuAJ60LgCei+6AoMAdAEBERI5ugKVAHQBARESOboCnQB0AQEREjm6AqIBswGQERI5ugKkAbMBkBESObgBLhC4AqbcALgAvi+4AMEvuADDL7gAxi+4ANMvuADlL7gA5y+4APEvuADzL7gA9y+4AAIvuAANL7gAEC+4ABcvuAAaL7gAHS+4AB8vuAAhL7gAIy+4ACUvuAAnL7gAKS+4ACsvuAAtL7gAMC+4ADIvuAA1L7gAOC+4AYEvugG+AAkAAyu4AAkQuAAA0LgAAC+4AAkQuAAD0LgAAy+4AAkQuAAE0LgABC+4AAkQuAAG0LgABi+4AAkQuAAT0LgAEy+4AAkQuAAY0LgAGC+4AAkQuAA20LgANi+4AAkQuAA60LgAOi+6AEgACQG+ERI5uAG+ELgAS9C4AEsvugBlAC0A8RESOboAbwAtAPEREjm6AHkALQDxERI5ugCbAC0A8RESOboAnwAtAPEREjm6APQALQDxERI5ugENAC0A8RESOboBFAAtAPEREjm6AUIALQDxERI5uAAJELgBaNC4AWgvuAAJELgBbNC4AWwvuAAJELgBb9C4AW8vugFyAAkBvhESObgACRC4AXPQuAFzL7gACRC4AXfQuAF3L7gACRC4AXrQ
uAF6L7gACRC4AX7QugGOAC0A8RESObgBvhC4AbvQugHSAC0A8RESOboCAAAtAPEREjm6AgIALQDxERI5ugILAC0A8RESOboCfAAtAPEREjm6AoMALQDxERI5ugKVAC0A8RESOboCnQAtAPEREjm6AqIALQDxERI5ugKkAC0A8RESOTAxBSMVBycGIwYnFwYnBhUiJwcnBiMGJwYHJwYjIicHIicGBwYnFCMHJxQjJiMGBycUBycHBicVJyMHNCcmJzY3JiM3JicyNzUmIzcnBzcnByYzJzQjNDc0IyYzNCc3LwEyJzUiNSYzJzQ3JjUmNyc0Myc2NScHNTYzNCM2JyYjNTQzJyM3JzY1JzI3JjUnNwYnNTciNTc0JyY3Iic3BzQ3JzMmNyI1NycmNyc3IicmNyc3JzY3IjU3NCM0MzQnNjcXMjcXNRYzNxYXNzMXNDcyFzcyFzcWFzQ3Mxc1Fhc3FjM2NzYVNjUXNxY/ARYzMjcWMzczFwcXNDcXNxc2NxYzNjcXFgcWFwYVFwYHMxUHMxUHFTI3MxUGBxcHFxYjFjMVBgcfAQcyFwcXBgczFgcXFAcUFxYHFxYHFwcXBhUXIgcXBgc2HQEUBxY3FwcXBgcyFSIHFhciBxYVFwcyFyMWMxYHFxQHFwYHJyMGBycHIg8BIicHIycUIycGIycHJiMHFiMHATUGDwEGDwEXIhUXIhUXBh0BFBciBxcHFwYVFBcHBgcyFQYHFh0BBzIVFAcXBzIXBxQXFhcWFxQXNDMXNjU2NzY1JzY3IicyPQEnMj0BNCM2NTQnNzQnNjcnNDcmJzY9ASczJzU3IjU2Nyc3NSc2NTQnJiMmJyYnIwc0JwcVIzUXFBc0MxYXBiMWFwYVHwEiFRQXIh0BFhUUFwYdAQcyFQcUFwcXFAcXFAcXBzIVFAcXIgcXFQcWHQEHMhcGHQEUIwYjFAcUByY1Iic3JicyNSY9ASczNCc2NyY1NyY1NyYnNjcnN
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
RI5ugPBAKQB9BESObgBdBC4A8fcALgBLC8wMQUGBwYnByYjBzQjNyYnFAcnBgcnBycHJxUnFAcmNSIVIicGDwEnFiMnBycHIgcnBwY1Bgc1BhUmIwYHJg8BNCM0MycGByciByYnDwEnBwYnBgcGJxcGJwYHBic2Myc3Jj0BNjc0JzY1Jwc3NSc2LwE3JzcmNTcmBzc1JzciPQEnNjU0JzU0Nyc1NyM3NSYHNwcnMzQjNycjJzQ3Iic3JzY3IzQ3Jzc0BzY3JzI1IzQ3JyY3JzcnNjcnNyc3Ij0BNwc3Jgc0NyI9ASY3IicyNycHIzU0NzQnNDc1NyI1JjM0IzQ3NCM3JjU0Nyc3IzU2LwE2NSI1PwEXNDcVPwEyFTcXNDM3FzI3FTY3FzY3MwcyNxYzNzUzFCMWFzUXPwEXNjc2FzI3FzcXNjcVNjcXBz8BFzcUNzQ3Mxc0Mxc3NhU2NzYXNjcXNjcWFxQHFxQHFxUHFRciBzIXFQc3FAcUMxYHFwcVFwYHMh0BBxQXBxcHFwcUFwc3FAcUFxQHFQcyFQcXFCMWFwcyHQEHNhcHFBcHFRcHFDMUBxQ3FgcyFRYHFhUHFhUGBxcHHwEHMhUHNh0BBxUXBxU3FSMXFQcXFDMHFxQHFjMUBzYVFwcXFAcXFAcUFxQHFwcyFRQHFwcfAQcVFBcHFRcVBhUzFgczFAcWFxQHFxUHFjcVBgc0DwEGDwE0ASMHNCsBBiMnIgc0IxUzFSIHFBcGBxcUIxcVFyIVFwcyFSIHFhcjFhUzFjMVIgciJxciFRciFRQXIhUWHQEXIhUXIxcVBzIdARQHFwYVBzIdARQHFh0BFyIdARcHFhciBxUUFxQjFhcGHQEUMxQjFwcyFQcUFyMUFwYdARcjFBczNxYXNxYzMjcUMzI3FTI3NCM0NyY1NyY1NDcmJzY3JjUiNTMmNTQnNjMUFzYzMjcVMjc2NTI3JzY3JjU3Jzc1Aic1JicHJwciJwcmJw
YrAScUIyYjBzQjIgc0JwYHFSM1HwEVIyc1BRUjNQcVIzUFMh0BIgc0JzQFFSM1BRQXNjcWFxYzFSIdARQzBxcVFwYVFDMGHQEUBwYHBhUnBzQrAQcnByInByMnJjU2NSYnNgUVIgc1FxUjIic1BxUjJjUFFSIHJzUFFCM1BQcnNRcVIzU3MhcjNTIFMhUnNQcUKwE3EzMGFSM1NhcVIzUHFCMmNTMVByY9ATIXIzcyBRYXFSYnNRczFQcmIzUyFyMiJzUWJxYVJzUXFSM1MgcVIyc3MgcyFyMnNTI3FSM1FxUjNQcXFCsBNTQXFSI1BxcVIyInMgRwBgsFCwUTAxsFBTIPGyAPEgohCxsKGxYmBQQoCA0FHAEGCwoRCwsKCzYQDxcFHAUMCQsGGwUFBRBBCwwKFRE2CgsLCQIFCwYLAQkCCQIrAQoLCwUGBQsGBgEQCwYGAQUFBgYGBQkNEAYKBQYFCwsGBQUFAQoJCgELBQUBCgELBwQFCwoFBQUMCwsECwYFBQUFAQYGBQULBAUKBhAFBQUECAgVBQEQBQYFBgEKBgsGCwUFAQsFBQsLBgoGBgsQAQUFBgsmNhALCwsmCgYLIAYlDQkwCQ0FBQULCgwFCwUEERwKGwYvHAgIBgsgFgsaBiMNCxUVC3cWBQYFCwULBQsGChIwDR4bNwkBMAoLBQsLBgYKBgsGBgUKAQsGBRAFBQYLBgsREAUFBgoFCwwQBQUKCwYBBQoFBQUGBRUaBgYLBQUBCwUBBgYFFhMIBgYLAQYGBQULCwoLCwsLAQsQCwYBCgoLAQYLBQYFGxsBBQUFBgYWAQsLChYbBQELBQUMCwsGBQ0JLCAKFhQSEP06BBEKBzkHERMgCwsTAgQEAwcHAwQEBAQEBAMDBAQKCxEGAwcDEQcEBwMGAwcDAwMDAwMHBAQEAwMDAwQEBAsFAgYBCwcEAwQHAwMDAwMDAwYDAwMYBwoKDhQ2Cwk3BAMHOUEDBwQEBAQ
FCQMEBAMDAxEaGQNEGAQGVU9VJhoDGAoEBAQECSNVSwcRBwMHBw+NBggYEQMGCAYRBAczSrEEghEVEQHVA7sD/mEHBAcDAx8K/loKGQZmHxITCgcEFQMDCgcHDyAzBwcDBCUHAwoLCg4GHAQKBwz+zwoNKAYGAREHCgLiBAcN/YEHAloEDQMKAwd0Bwf98QoOPQcHBC8EBwcFBQOPBwrJBAoIZQoDB/69KQcNJrcEBAcDAzADBgEKhQsO5AoDowQGAweFEQQOEQNcB6AHGwcHB1UGrgQOBgELtwEFAQULBAcFCgIDBQcDAQsEBwQMBQUIBwUDCQUCAQoBAwUEBQgBBgQSAQkBBg8BBQMBBQQBBgQFCgoKDQYDCQQFDQUBCgEFAQUFAQoBCgMsShMKIBUKAQUFCQkLBQEPDwkBBB0KCgohBQodARoOHR4EIhgBBQcLCgoBCRMKGRMKAVkBCgUYJw4NER0KBB8hCgpSBQoBWiETBQUKEwUKCQoTDEMKHgkjBQQLASMOAQYnBQUKOw4PBQYKCQEFCQUBGAoFCgUKCgkUGQQOFRMYBBcNIQoFBQUDAQUBDwYBCQcEBQEMEQoBBgIBCwoGBAEKBQ4EBQMBBgkNGgETBgMMDgIFBQIfBRkBBhAGBQEEAQQFBAoBCgEFAhoBBgMOBgcOCREECwgODw8FGB4TBQoBBQoJFRMJHgUXLAoFBBALCBkcGQoKCwgoAQkQBB4OARkYBR4EBQUJIwUJCwEOCgcCFQodCgkEAQUBChQFCwkJBRkNBAIiEwsNDwoFCgEFCgEFDRAFAQoOCgEYCR4EDAgJChQBMRMLBAUKCQYrDwMNAz8KBQsJCQoqBQEUCAEiChIFGAcJGQUKRwoJAgkFCiEBBSUDCgEBEAEBBAcCBAQKAwcEBwQbAwcJGQMHETcRAxERAx8lB2IZFAMEDkQEJQMXGQMOGCwYAwciDhEzAwgGBj8dFQoNCAYGCCIGBBQRLCUIFy0Q
EgofCgYHEQcDKREEBgQHHQ8GBx8HFggGBgQEBAoDAwMYAwkjBwQUBggHBiokIn4uEwOLDgoVLAgGBwQEJhwGTgdPgyQFHwcGKQEbBgpaEwMHBAQEDxAEBAQEBAcDBwMKDgcHAwQDAwRIBgYDBwcUBwoEBAYLSAMDDQQDAwQRGBgHBwMHBzYfFAcDJhcEAyYsXxgUBAQEBBUEBwcHA4GFDRKhIRpNBwQHMwcHBDoKBQUsBAMDB3QGBiwHBAMRCgoHKQcYBwQDRwcO/n8IBQMKMwYGBgcFBQoHBQUEGAccAwcDBgQDPQcGAwciBwMFAgYFBAcYBwMGBAQGAwoDBAMDAxgDAyIDBwMGMgcHHgcEBwAAABz/zv8RBPkG5wHQAucC6wL+AwQDDwMVA98D5QPtA/ED9gP8BAgEDAQSBBYEGgQeBCIEJwQtBDQEOwQ/BEMERwROAAABNxQzNxYVMzIXNzMyFzczFzQ3FTI3FjM3FzYzFDM2NwcUFwcUFwYHMhUGBzIXBxcHFhcGBxQXBh0BFDMUIxQzBxUzFSMVFDMHFDMHFwcXBxcUIxQzFCMVFjMHFTMVBzMDFRQHMhcGFRQXBgcXFAcWMwcVNxQzBiMUMxQjFBciBxcGHQEiLwEUKwEiByInByYjBhUmNSY1BycGIycVIicHIjUjBiMmNSMHNSIHNCMUIzQjFCsBJxQrATUiBycHJiMHIjUjBisBNTM1IicHJxQrATQjNTI3NCc0MzUiJzciPQEjBycyNyc0NzUiJzQzNCM1NzU0JzcnMjUnNjc1ByM1Mj0BIic3NQcjNjM0JzU3IjU3NSI9ATMnMjUiPQE3Iic3Jic1NyInNzU0JzciPQE3JzcnNjUnMzUjBzU3NSM1NzUnNzQnMzUjNTcjNTQ3NCM0NzUiByM1NDcnNjciJzQ3IjU3IzUyNyInNDcnNyM0Nyc0Nyc2Nyc0NyY9ATcXNjcUFzQzFDsBMjcyFzY1FzI3MhcyNzIXN
zIVMxc1MxUzNTIXNDczFTMyNxc3FTczFzQzFQcyNxc3FTcVNjcVMjcVIxUyFzI3FTI3Mhc2Mxc2NRYFIgcUMxUjNSMGByIHMhUiBxcGBxcGBxcGBxYdAQcyFQcVBzIVIh0BFyIdARciBzIVIhUXFSMVBzIVBxQXBiMVBxcGFRYXBh0BFDMUBxcHFwYVFDMHFRcHFDMHFRQzFjMHFRQzFRYzFSIVFyMUMxYzFBcWOwEXNDcVNxYzFCMUFwcVFhUiFRYXMjc2NzUmJwYVIicHJj0BNDc2NTI3Nj0BJjU0NzQnIxUjNTI1NCc2Nyc0NzQnNjcnNTM1NDcmPQE3IjU0Nyc0NyY9ATciNTI9ATQnNj0BJzcmJzI3JzI9AScyNSc2PQEjNzUjNjcmJzQ3JzI9ASInNzUiJzI9ASYjNTMyFzI3JicmJyIHNCMiJxQjJiMHJwYFFSM1BxYVFhcHFRYVIgciJzY1JisBNRcyHQEiJxcVIgcmNTIXMjcWByIHIzUWBxQzMjcXNzIVMhcHFyMWFyIHFhciHQEXIh0BFBcGHQEUMwcUMxQHFxQHFyMWFyIHFxQjFBcGFRQXBhUXFSMUFwYVFDMUIxcGHQEzFCMVBh0BFBcHFDMHFRciFRcGBzIXIh0BFwcXBxcGBzIVFAcGBzUiByInIic0NyY9ATQ3JzM0JzcnNjUiNTMmJzQ3NCc3Iic3NSInNyY9ATcnNjM1IzQ3JzMnNyI1NycyNyY1NzUnNTQ3NCM3IjUHNDcnNTciNTY1NCc2NzQ3FQUVJiM1FhcWHQEjJjUyBRUjNQUVIicWFwcmIzUWFxQzFSMnIhUmNTI1BxUjNQczFQcmNQUVIzUTFSM1BRUjNQUVIzUXMhUnNRcVIic1MgcXFSIVIzUXFSMiJzUyBxQjNRcjNTIHFSM1FzMGKwE1NAO2GgQEERYHAhUECAEWBAkiCQgHCgkEGwgEByQEBAQEAwUEBAUFBAkJBAgFBQQEBAkJBA
QNCQkJCQkJFgUFBQkJDQsGBAgEBBUFBQQEDQUECQ0ICQ0JCAYHBQUJBgMFH0/nCAUEE54KHAkICQ1oRQgJBgcIExAICQQVDgQEHyINBCMEBBIIBQ0QBQkVFggFEQQCCw0IBAgFFQUEERIQBA0LAgkFBAkEDQkNEQ0EDQ0IDQUFBQkJBAkIDQUIBAkIEAUREQ0JERERBAQEBAQIAhMNBQgNDQQEBA0EBA0ECAQJCQkJBAgNCQkNCBEEBAQJBBEEDAUFBAQEBAgLAggFCAQEBAQMBAQFBwQEBBEWGCQNBR4EBwIHAQ0nBwIECAgBCRURBRU0CQgHHAgSBAcCHhEJBAgJBAkICQgeNi4MOAgECQsPCQgHAiAcCBYR/qRTTQQEBz0UQisDBwYDBwMDCAUDBwYDAwMDBAQEBAQEBwQEBAcHAwMDDgUCBAQEBwoKBwMDAwYGDQcHBwcDAwoLBwcIDxQDAwcPIEg1bhgRDWMUCwQEDg4EDhgVb2UFBgszCAYHHj0sDhRSGAcHCgQbAwcDBwcDAwQODgYDAwMDAwMDAwMDAwMDAwMDAwMNAwMDAwoHBAcHAwMEBAcHBAcECQEDGR0DCQsIDSNeF4YDBwMmGwMUDhUHHwFYCiwKKQMRIgkLEAUEDBMKaQcFBSwDBzMIBgoDFXcEBwMO4QQDBw0OAyQaDgMDDQcDBwUCAwMDBgMHBwcEBAQEBAQDBAMHAwMDAwMKBwcDBgMHDgoKBwcDBwcDAwMCBQQDAwcLBAQHAgUEJhInBAcpLBsDAwMHBwMDAwMDAwMHAwMDAwQCAwcHBAQECgYHBwQEBAQEBAcDBAYHBwcHAwYDBwQEBAQKBgsMMAENBggOSgsLCgT+UAQBnA0LGE4HEgkJHCIDBwceAxsDLQcRDf4/BFID/rIDAvYNFwsOGwYBB18YJgNHAxoFAyEHfgcHdwe7BwUFBAbaBAQJAwsJBQkEBAYDCQQEBAkJBAYDFwkJCQQJCUgEJQg
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
6AGkAuAGaERI5ugBrALgBmhESOboAbQC4AZoREjm6AIEAnAB8ERI5ugCCAJwAfBESObgAnBC4AJrQuACaL7oAnwC4AZoREjm4AJwQuACi0LgAoi+4AJwQuACk0LgApC+4AJwQuACo0LgAqC+4AJwQuACr0LgAqy+4AJwQuACt0LgArS+6ALAAnACaERI5uACcELgAxtC4AMYvugDKALgBmhESObgAnBC4AMzQuADML7gAnBC4AM7QuADOL7gAnBC4ANLQuADSL7oA1ACcAHwREjm4AJwQuADW0LoA5gC4AZoREjm6AOgAuAGaERI5ugDvALgBmhESOboA9AC4AZoREjm6AR0AuAGaERI5ugEgALgBmhESOboBIwC4AZoREjm6ATIAuAGaERI5ugFFALgBmhESOboBRwC4AZoREjm6AUsAuAGaERI5ugFQALgBmhESOboBYQC4AZoREjm6AWoAuAGaERI5ugFsALgBmhESOboBjwC4AZoREjm6AZcAuAGaERI5uAB8ELgCJdC4AiUvuAB8ELgCKdC4AikvuAB8ELgCLtC4Ai4vuAB8ELgCMNC4AHwQuAJ10LgCdS+4AHwQuAJ30LgCdy+4AHwQuAJ60LgCei+4AHwQuAJ+0LgCfi+4AHwQuAKA0LgCgC+4AHwQuAKC0LgCgi+4AHwQuAKF0LgChS+4AHwQuAKI0LgAfBC4Ao7QugMNALgBmhESOboDEQC4AZoREjm6AxMAuAGaERI5ugMVALgBmhESOboDFwC4AZoREjm6AxkAuAGaERI5ugMbALgBmhESOboDIQC4AZoREjm6AycAuAGaERI5ugMpALgBmhESOboDKwC4AZoREjm6Ay0AuAGaERI5ugM3ALgBmhESOboDOQC4AZoREjm6A0YAuAGaERI5ugNJALgBmhESOboDTwC4AZoREjkwMQE3FjM3FzI1MhcHFwYHFDMUBxQzBhUUFzMHFRcVIhUXFCMVFAcUMxUjJwcV
FBcGFTczFSIVFjMUIxcHMxQHFjMUBzIXFRciFRciFRYzFRYdAQcyFQcWMwcWHQEXIh0BFxQjFBcHMhcGFTMHJxUXIgcyFQYHMwcXBxYzFRQjFDMVFCMXIh0BFDMUIxQXFCMXFTMVIhUzFSIHFxQHIjUiFSM0Jwc0IyIHJisBIgciNQYHJxQHJxQjJwYVJicUKwEnIhUnIgcnByciFSMnNzUiJyIHJwciJxQrATUnNTc1NyI1MjUiPQE3NQcnNzUnMjc1JzI3NTQnNzUnNDc0JzQ3Ij0BNDc0IzY3JzQ3NCc0Nyc1Nyc3NCM1MzUjNDMnNTMnNjMnNDMnNTQ3JzQ3Jzc1JzI3IzU2MzQnNjUnMjUiJzcmNTQ3IzcjBzU3IjU3Iic3NCM3JiM0MzQjNDMnIwc0Nyc3NQcjNTQzNSInNyM1MjUyFTcXNxYXNDMyFzcXNDcXNzIXNDcyFzcyFzYzMhc0NzMVMzI3FjM0Myc0NzMUBSMiBxQXBxQXBxcUBxYdARciHQEXIhUUFyMUFwcXBhUXIgcUFwYVFwcUFwYVFwcUFyIdARciHQEUFwYdARciHQEXBxQXFSIdARcjFBcHFxUHFRciFRQXFCMWHQEXIhUWHQEHFyIVFh0BFyIVFBcUBxciHQEHMhcjFAcXIhUUFwcyFSIdARQXNxc2NxY7ATIXNDMUFzcyNTciNTI9AScyNyc2NTQnNjcmNTQ3JzcyNzIXFhUHMhUHFwcVFyIVFBcGFRQXBhUUFwcWFRQHFwYHFBcHFxUUBxYVBzIXMjUXMxc0MzIXNzMyNRcyNxcyNxc3FDMyPQEnNjciJzQ3NCczNCc2NyYnNjUnNycyNSc3JjUmNSYnJjUmJzY3NjUyNzUyNyY1MjcnNj0BNCM0JyYjIgcnByciBycHJicHJiMHJisBIicGEzQ7ARYXFhcHFBciBxUXBiMGByMmIzQzNCc3Jj0BJzM0JzY3JzQ3Jj0BJwUjNTITFSM1FxUjN
TMVIzUFFQciPQEHFSM1BRUjNRcVIzUHFSInFxUiJwcVIzUXFh0BJiM0BxUjNRcVJiM1BRUjJj0BFiEUKwEiJwPNCmkHDCdJGh4MBgYLCwURBgYKBBsXBgYEGwsMBAQECgYWBgoKCgYGBgYLCwkCBgYGBgYGBAQEBAcJDAYGBgwMBgYGBgYLBQwGDAQECQcGCwsLBgsMHAwMDAwGBgwGDBYKDwcGWQwKBnBgBCATCQw6HjUKRgkMMhYGLHAKYQUGEAscBgsKNEIMBQwRBQwMCgsKDRsMBSIMBgwWEAoKDBYEBAwQDAQMDAwMBhEGDAYGBAoGDAwGBgwGCwsLBQULCwgJDAwGCgQEBAoGCQMWDQkGBgYGCQMGBgYGDAYQEAYSCggGEBAHCQYGBgYGCwYGCwsGFxQNCgoWBThENwxeBhgmIhtIDAoGCxELASceMCcWIR0hBhAQEicGBgYLBv2xSyQEAwMDAwMDBgQEBAQEBAQEBAQEBgEDAwMDAwMDAwMDAwMDAwMDAwMKCgMDAwMHBwMDAwYDAwMKDQYDAwQEBwMDAwQEAwMEBAQECgMDDRUGLQYGCBgWGQRLDRgYBAQEBAMHBAQGBQQEBwMPHU1GLwMDAwMDAwMDAwMHBAQHBwQEBgMDAwcEBAQGBAclEQoLBhUUBwoJCw4QEhQHBB4DBQUDBAQHAwMHAwkBCgMNAwMDAwofEAcfFEsBTUcPEAoEBAQDAwMDKVI2BAY3BwYIBhQHBJ8ERw4HDA8iJBYYrksHUxknFwcDBgEEEA8JVmYLBgMDAwMDAwMGBAcDAwP+1AYGSAclClUHAmgEBpMG/bcHyQejBgHFBgFmB1UOAxhZBhsGCAGwEQoJ/oQHAwYBBzIGEQYGHCs2GykSEQQLRhsFHUkbCwQGEAoHDwYKCwsGCwsWJQoFBQwfCwsQCgwJIQIpCismCxYEGxAKDBALBCEVJgoMhRsQEQ8LBgsKEAkMCwUVCzYEDDBFBlYPBg
s2BAsVCwYLBQULCxoVBx8MHwseDQsQERAMBQoFCgoFCwYHBAUFCxMTCgsECgoEBAQEFRUEFgUFBQUFDBEKJgURNhobZRsQEQUFBRVGCxYEGyEFCQERBBEKAQUKCRgFEAoBBkoFBxEeCgEQFiAWCgUbBQsgBgsPEBARCgtLCgELCwoLDyYaPAUVBgsLBTUGQCUVEQULKwsGIAUbJQswGxsFBgQWBQULChEFBQULESQRBAwFIBELCwoFBRAGCQwEBAQEBwsEBAQKBQwLCxEGCwkBE8AzCAYHCBMHBwMHCwkmEQoDEQQDBwgTEQcTCxEHDBMHAwcUDBMHAwcNBAcDMwcDCggGBggbBwMDFQcIDwcHBwcHBg4KBwoKEQQDBwciEQMHAw0LAx9EAyYbGxgDBB4IHgcDGBEYED4NBAoOhAQDMAUFBAQEAwMHAwUFAzPuBAMwByVpBggLLyE7BgcGIwoYA0dHTxQDEQcVIhEDAwcHAwgGEQoEBgcmAx0PByMhESIHFAQWGQYIEQ0DAwQEBAQGBgYDAwMDAzYHEQIxCgQHCg0IBhgpCR8RCwaFDgMHFEcmIhgiGxYFGS8KFCwLTiKPBgQbBxcOIjdYMEQECgMDAwMDBhwHEQMHAwP++joQIyJqLAMHMwQGSwoiLAMIBgcGB04HCg4UMDMDBwYIGwfMB/33AwMDAwMDA04EBgYEBAMDmQMDCgMDHgcHBAcHRwQEOgcDBAQFIAQEHwcEAwoHBQUHCgcHAAAALv/O/uYE/gckAgUDBwMPAxcDHAMoAzEDNQM8A0ADRANIA08DUwNXA10DYQNlA2kDbgNyA3YDfQODA4oDkgOWA5wDoAOkA6sDrwOzA7gDvAPAA8YDygPOA9ID1gPaA+ED5QPqA/EAABMyNxcyNxQzBxc2OwEVBzM3MxUHFzM0NxcHMzI1NjUXBxcyNxUHMhU3FzcyFzI3FzUyFzI3FDM1Mxc1Mhc2MzIVMjUXNjUyFzI3FzY
zMhc2MxQXNjMXNDczMhcGBxYVIxUHFRciFTMVIxUzFSMVFDMVJxcGFRYdASIHFDMHMxUHMhcVBxU3MxUiBzMHFTIVIxUzBiMUMwcVFjMVBiMUFwcUMxQHFwcUFxUGFTIdAQcXBiMVFzcXFCMUMwYdATM1MxQXFCMVMxUiBxcVBzMVBzIdAQcyFQcUMxUjFDMUIxQXBxcHMwYHFhUzNxQzFCMXFCMXFRQjFDMUBxYVMjUXBgcVFAcyFxUjFwYVMhcHFhUHFjMVIh0BMhUHFRQzBxYdARQrASInBiMiJxQjJyIHJisBIhUiJwc0JwcUMxQjIjUzNSMHJyIVIjUjBzQnFAciJwYjJwYjJxUiNQcnBisBJxQrASYnNTciPQE3IzQ3JzQ3NCc3NSInNDMnNzU0JzQ3JzU3Ij0BNDcmNTQ3JzciNTciPQE3NCc3JzU3IjU0Nyc3NCc3NCc0Nyc2NTQnNTcjNTI1JzUyPQE0JzcnNyInNyYjNTY1Jzc0IzYzNCc0Nyc3Ij0BMhUyNyI9ATc1IzUzNSI9ATcnMzUnIhUnNDM1IzU3Iic0NyI1NDcmNTcnNTciPQE0NzMUARcyNxQzNjcyFTY3NjU2PQE3Iic2NSYvASIHJisBNjMmJwcmKwE1MjcWMzUmIwcmJyY1JicmNTQ3Jj0BNyYjNDcnNRc2NxU3MhcyFyIdARc3MhcyNxYVIgcmKwEiByIdARQXFBczNxQXNjcWOwEyNRYzNyYnNzU0IzUyPQE0IzcnByM1NxczNTQnMjUnMjUmIzQzJicmIyYnFCMnIicHJiMiBwYdARY7ARUHJwcXBxUWFxYXFBcVIxUzFjMWFxYXMjUWMxYVBxcWFSIVJwcVFAcUBwYjIicmNTI1JjU0IxQjJwcjByYnFCMnIgcnIgc0KwEGHQEHFhcWFzcWFzMyNxYXNyMnNDsBFRQnIjUyNxQzFDc1MxYVJyMiByc1MzIXNwYVNyY1FhczFQciJzUzFSc1
MjcVByYnMxUiJzUzFSU1MxUlIj0BMxQXJzcXByc1MxU3NTMVByInNTMVJzMHIjc1MxU3NTMVIgc1MxU3NTMVJyInMzIXFSciPQEWFTciJzQzFBcHNCc3MhcGFTcjFBclIzQ7ARQnNTMVNzUzFSc3MzIXFSYlNTMVJzUzFSUnNxYVJTUzFSc1MxU3MxYXFSYXNTMVJzUzFSU1MxU3NTMVJzUyFyc1MxQXFSY3NTMVJzUzMhc3IzQ3MhcUBA8NGxEzBwciBRAGDQcbBwcwBgcOBwcHPQ0GIgMfBzYjDT0MAgcODQcOBg4OBg4FMhkJUQcVFAsDBg4OCxALAyoMBzMKIgcHESwTCA4HDgcOFQ4ODhUVBwciDQ4OBw0GCwINFAcRBA4UFA4VCQwHBxYGFAgHBw4HBwcVFRsGDRsODg4NBwciBwcHFRUHDgcODgcHBwcODg4HBwcHBwcHBgcGBw4HIg0UDQ0HBwcGDg4NBwsDDhQUBw0NBwcVDRsUGw0NDQ1SJToNFRtMBg4HDRcSBw4DMxwNDgcODQ0vIgcODQ4OUQcHDhocBygcDgYiDhg6MA0HXxoWBwcHBw4ODgcNBg4HBw4ODg4HBw4ODgcHDgcHDg4ODgcHBwcUDQ0NBwcUGxsUFA0UFA0UFAUPFAMRFA0NGxEKDQYGBg0HCgoUDRsUFBsNDQcGDhQNBwcHDg4OBwcOBwciBwKLGCRoA2ECAxUeGDMDAwQEDg1VBAcMDwoDByAPBysMAwcNEAgjEwcTBSIvH4EDAwMDCjYDEQchEUojGg8DAw4JCxIGFBMFBQgKDw0KBEcHERQfBwYHBAYdPBgEBwcNCgcDAwcDAwcDBgMHBAsKBBYGMg4olwMKURVBBwNGl2MXCBEiEQcHAwwgNhswBwQwFyYUXjQDGAREBAQlChgHETMVITcsJQMHMwMRFD4UBDYDBwMHBwMHBAoKChNFYD0GLQYHCgsTTPgDBwcKOgcEBgRwChFtAwMYB
AsLDBEGiDMZCRcDA0gOBAsNAxIQBwdjB/2ZAwLABwMHtAMHAywGewoDBzMHfgoDB1UDlhQPOB46DiIFBQYGAeoHCm0IAgYVjw4RBgEH2gcH/mEDBwNtB2MGnBEDEQQpAf4HKQf9wQcECgKNCo8HiwcHBxVqB3sE/ZgOegcbBgEzAwcKmQZfCgYBMwMYCxoHDgUFCwYLBRsFEREGCwUMCgYLBgYKBQsGFgsLCwYGHAsFBQUFBQsLBQUFEBYGCwgICwYGBgsLBgsLBQULQxUiGAoQEScLCwsLDAULEQshCwYCDwUiCxwFCwsGERYLCxYXEAsGHAUMMgsFHAYLFgsGCwsWCxERGQ4LEQsFHAYRBgYFBh0KBQsNCQsGCwYLFhEFDAUGHAUWBgsGBRglFwsLEDMKDAYGERAMEAsMBQYLCwYGBhkCEQYLCwUnLAwGFiYXCwsRCxELBgULJzcHFgsGBgsFBQULCwsGCQIFBgsLCwULCxAFBQwGCwUQCxEGBgYGBhEGBgwhUwsGTgsPEgYJAgUMEC0FBgsRHAkCERYQEQsGCwkCFwsJAgsLCwsGCxEJAhwQBgsGDAoLIQoCEAoBDAsLFBMOAgYWCwwQBgsLERwFIkgcIRwGGhIGEAwWCQIGCxsMCwUFFgsLEQYLFgsWBhwFCwUFDAUWDBAOOwskKgsFDBAXCwVkHw4I+K8DIgMlCgMCIBwJZUk2FFkSAmk0cwMHER8JAwcHBgoHHwQTEwgMGidTnggGBgcKFSxSHgcHBwUFAwMliAQXBwcHDQ8FAwMDIh8XEhUJAwQDBAMDERgKJgoKBwYEBwoHEQYDAwcDA0ojAyIENgQwBkEoJgQHCgYDR11iHgcHAwOqHwYElTBNBR4KBAo2OgpAMQQVUkMHEQMHBwcKFQk0JQ4fLVcjAxYTFQQHAwQDBAMDAwMDAwUFBH17TkUTAwoHBwYIsQMHAwYeBgQEBhcECgQpBxEECwQJBQ4CEgMHBwcfAw
MiAwQEBgMOBy8EBDMHB4wHCgYLEQcEBwQDAy8EBAYlAwMHBwcHBwMHAwQEBAQDAyUOBwcRBwMFBRQiBwQaCwcOAwcICS0GAa0HBjwEBGMDAxQECg4MDwcHCgcHDgMHBQUiAwMHAwMvARADDwEDAyUHBwMEBEgDAyIHBzMRBQkNBRkEBFwHBwoWCQoLAAAs/87++AT9Bv0BggNAA0QDSgNQA2cDbQNxA3UDeQN+A4cDjAOdA6MDpwOrA7IDuAO+A8sD0APUA9sD4QPlA+kD7QP3A/8EBwQMBBEEFwQeBCUELAQwBDQEOQQ9BEEEUgRWAAABMxYHFzI3FzcyFzcyFTczFzYzFxYzFzcWOwE3FhcHFhUHFgciBzMGIxcHFAcWMwYHFjMUIxYXBzMHJgcWHQEUIxYXBxYXBxQXBxcHFg8BFgcGFRYVBxYHIxYXBxcGIxcPARYzFSYHFg8BFwcWFxUjJiMVFxUnFxUjFhcHFBcGBxYPASYjJgcmJwcnByI1BxcHLwEmByYnIgcnJgcnBzQnFCMmJyIHJwYHNQcjIjUGBycGIycGIyY1By8BFAcnIgc1ByYjByYnNjUiNTI1JzQzJic3JzcmNTYXJzcmPwEnNDMmNyc3JjUzJzYXJjc2NSc0Myc1NjMnNzQ3Jic3NCc3JzM3Ij0BFjc2JzI1Iic1Mzc0JzciNTcmNzQ3JjU3Jjc0MzU2Iz8BJzY1IjcyNSY1MjU3IjczNScXNycWNzUmIzY3JzI3Jic2NzY1FzM3FTYzFzcWFTcWMxY3MhU3FzIVNhcWMzYzFzYzFhc3Mhc2MxYXNxc2MxQXNhcHNjMWFzczFTMFIgcWMwYdARciBxcUIxYzMjcUFzQzFjsBNxQ7ATcWMxYXFAcXBxQXBh0BFyIVFBcGFRcGFRQzFRciBxQXBgcWHQEUMwYHFhUiBxUXNzMXIycGBxUXBhUUFwYVFBciBxcGHQEXIh0BFxUiBxciBxUUMxQHFwcUMwc
XIh0BMjUzFSMWFzcUFyMXBxUXIxQXFAcVMhc1JzMXFCMUFzcyFzI1Mxc0OwEVMzI1FzcXNjUWFTY3NTQnNDc0JzY3IjU3JjUHNDcmPQE3Iic1MzQnMjUnMj0BJzM0Jzc1JzU0Myc3Iic1FzM1JzUzNTc0JzI3NSMVIzUzNTQnNjUjNTQ3NScyNyc3JzI3JzU3Iic0NzQnNjciNTcnNTI1NCM2NyYnMj0BJzMmJzI9ATcjNjU0JzUyFzI3JjU3JyM1NzMXMzY9AScyNzIVNxYXNxQ7ASc1FxQjFDsBNjMVNxc1JzI1FhUyNRc0JzY9ATQjNDcnNzUnMjcnFSM1NzQjNSciFSInIgcmKwEVIyYrAQc0Jwc0JwYVIjUiByciBzQrAQc0JxcVIzQjNzUiJwc0KwEHNCMGIyInFCM0KwEnFCMnIgc1IgUVIzUFFyMiJzI3FxUjJzUzFTczFSIHJisBBxQXIyInNycmPQEXNh8BFSMmNRcVIzUHFSM1FxUjNQcyFSM1FwYVIzQnNDcyBRUjJjUXMxQHJyMiBxUXIzQnNTI1FgUXFAciJyEVIzUFFCM1BRUiByInNwUjIic1MiEVIyInNRczFSIHJisBBzQjNzIFFSMiJyEVIzUzMhcHIzQvATIdASc0BxUjNRcVIzUXFCM1BRYzBisBIic1NBcVIgcjNDcWNzMVBhUjNTYHFSMiJx0BIic1FxUjJzcyBxcHIzQnNxcVFAcmNTIXFSMmPQEWFwcnNwcVIzUHIyc3FhcVIzUHFSM1FzIXFhcVIyInIgcjNTcmIzUXFSM1A5kGCgEhBQEKEAgIGwQMBAsCCQsmBBUREQ4GCw8DDgUBCwEKBgUBBAMBBQQGBggEBQQDCwEVAR8BCgsECwcGBAUHBQUMDwEGCwEGCwcFAQYFBAcQAQUFAQcOBxABCwEFCg4DDQYKBRMKBQsBEAYEBgYGAScPDwwKExhrCxsLHwQKBR8KFwgNBiUWUyIQMC8G
BRoVKwseIwoLBRURFQsFCwoGEAoFGyALCzonCgYKGxMGCgsFBgQKBgUFDgYGBQcGAQsOBgkCCgsGBgUDCQkBBwsGBQEFBQEGBQkFAwUJEAIQEAEBFRAIBwoBBQwLBwUBBgUHDAEWAQYGAQsGBgEFCgsBCwEQBAoBBQsBCwQFAQUFAQwEGywbCgYQCwYKFRAWEQ4KFwUbSwQXDwEKHAMLCwYEC1EKGgoLDggVFhUQEAMiAQ4JFUoBCgv9KhAEDQQRAwUBBgYBEB4VKAQGBxEHBBsRHxAfBwQEBAQEBAQEBwcEFQcYBAQDBAMHAwQHBgEEBwMDAwcDBwMGAwMGBAYHAwMDBgMHBwYBBwcHAwoEBAQEBwcECQcEEQMKAwMHCwYIAwMHBBURFAQKBwYEAwoHEQcDJgohAQcEBwoDAwcEBg0DCgYBCgYDAwMDAwMGBgoEBAQDBwMHBAMDBAkGBAcDBgYGAwMEBAQEBAcLBAYBBwcDBAQEBwoHAwQFBQMDAwMDAwMGDRgIBgoEBAQLEQQHCgcKBAUMBCIqIQYEAwcRBgYOCxARBwMDChUKChELDgcKAwMEBwMDCgoEAwcDBwYIDQQMEiYYDQcKCgQJCwQKDQQYER4DAxEDBwYHBBQRAwwCDiUDBEQYA1wDBx8CogT+pQcNBgEIWhEGDnQiERYMBggKBwcHBgQHBB4UGRAeChgtB4wR6wOCBwp+BAMUAxj+8wcKuwoGDg4FAQMHBwsW/oEHBwUMAWUH/i8HAXIDBwYBBP7iDQYBEQFeAwYB5wMGDg0SBgcEBwT9egQGAQGHCrQGCxEKA9MHDhgGhAe7Bv6bBQUFBQcGAYEQCAYGEU8DBwcGgAMGAQYBOgQGAwc6CgMKBAQbDg0GLQQKDiwEBgMODV8OBwQR3QfkB50EIQMLBAQJBAcDAwsXVQMG9wEQAQUGCxEEBQUGCwEMAQsMBRcsiAsFEQIJKwYbIQ0JEBxMIQU3CxwLARwCCQULF
hEbEAEbAlYKCzcjDiECCQoMAgkbLx4IPyEcBQssGxELAQsBEAshVxYBCgYGIQYBCwaDERsFDCULCwsbDAEFCwEoBQ8LBAsGASEBCwYBDwYCFAsECA8FEQEJBQ4FBQUGBQoLBQYFBgYGAQYKCwYOBQoGBQFTCwULCxYFMBgKDBskDREBHCEJEgVIBV47ARALBQscAU4gFhAGBRwQBQsWDAoxARsDHgoyPAsGAQseJAsRBQUMCiYLIRwbDAkKDBYBCgsLBQsbEQsFBgUBCgsLFhscARwLAQsWIQsGGwUBGx4GCAgGCgUFBgoGBQ8LAQoFBAIGCwELBAUFAQUIDAUBBQoGBAgJBQEFCgEHEBHnMxELDRUGBwoHTgYEBgQEBAQEGBQcBwYHDgcGBggfFwQHBi4MKRICBxEKBAMHBDYgJxEHGggVBhEOIgQRAw4KFBUTDxASEgkOEBgRBggHBgQDCgQDQQcUBwoOJQc9EQcDBwMDFBEDAwcRDgMHCQsHDgMRDQcDBBAHCg4OBAQKCgoDBwoOBQUTBQMGAQMHBgEQNAMEBBMDBxQGCAoRBxQKCwMHAw4HAwcKAwsGKRERCgcDDQsKCg4DBx4OBwoHCAYPHQMEGAoRCgcHFAMOChEHBgEGAQgaAwcKBwcGCCUXCwMHBx4HAx8RXhwFBgYDMAYLEQYEEQcDEQsGFQQHAwoDAwoDAwcHFQcDAwMHAwMDBgYHDQ4DBwcGPgoNCwYLAwcEBgsRFAMDAwMHCgMEAwQEAwUFAwYGBgMDBQERFBsHAwQEBAQEBAcDAwQEDgQEIgcHBAoHAwMDAwMDAwMKAwMZEBEKBwcHAwMDMAYEAwcDAwMHAwcLBgYDBwcpBwMIGggGBwcFBRsGCwoHBgcQCAMHBwoEBg4UAwMDBwcKBwMGBykHBAsHBAcHBwoDAwsEBwcDAxQECAYHBwcHBgMDAxQDAwcHBxEKCgcDBQgEBwcRDQYDCQUHCgYHBx8KBwM6Aw
MHSwcRBAcNfgYGBQUGBwQFBgYIFgcDBxsDAxEDBwIIAwNjBgYeBw0LAxEEBAcGBBEHBwAAAABK/87+wgUbB04CAgQHBAsEEAQXBCMEJwQvBDcEOwRFBEoEUARUBFgEXARgBGgEbARzBH4EhwSLBJAElQSeBKIEpgSwBLYEuwTBBMUEyQTQBNQE2gTeBOME6ATsBPIE+AT+BQkFEAUWBRwFJAUsBTMFOgU+BUUFTQVWBV0FagVxBXcFewWCBYgFjAWUBZgFngWkBagFsAW0BboFvwXEAAATMjcyFzcWMzcUMwcWFyY3FzY3FzcXNxc1FzQ3FhcyNTIXNj8BFzQzFzcXNzY3Fzc2FTY3FzY1FjM2NxYzNxQzFCMXNjcXNjcWFz8BFzc2FzI3Mhc1Nhc2NzYXBiMXBxYXFSIHFBcGHQE3BxUXIh8BBxcHFhUHFjcHFRcHNhUfASIVFBcVFiMfAQczBxUUNwczFQcUMwcVMxUWBzIXBxcGBzMWBxcHFDcGBxciFTMWBxcUBxcHFwYHFwcXBzIdAQc3BxYzFAcyHQEWBzIXIgcVNzMVFiMUFxQHFQcyFRQjFDMUBxQzBxYXFAcXBzcVBhUXBhU2FQ8BJxQHNQ8BIjUHJxQjByciBzUGByciDwE3IgcmByMVIzQzJicVJw8BJwYHBiciBycHJwYHNQYHJzcPAScHNCMUByMnFAcnBwY1BgcGJwYHJwYHNCc0Nyc0Nyc1NzUnMjcGJzU3IzQ3NCM0Nyc3NSc2NwY9ATc0JzcnNyc3NCc3IzQ3NCc0NzU3IjU3JzQzNCc3Ij0BNwYnNzQnNzUnNzQjNDM0IzQ3IjU0NyY1NyYnNjcnNyc1NyI1NwY1Jzc1JzcnBzUzJzU3JzQjNyc0NzQjNDcGJzU3JzQ3JzQ3NCc0Nyc3IjU0Nyc3JzUzNTQjNzUnNTY1IzQ3IzQ3Jic0Nyc1NyYjNTY3FD8BNj8BFBMWHQEHMhUHFwcUFwYdARcGIxQ
XBhUXBxYdARQXBxczFQYjFRQHFh0BFyIHFRYVBycjFQcyFwYdARQXFSMiJyMVFBcVBxUXIhUWFwYdARcHFRYzFQYVFhcUFxYzFjM3FjsBMhc2NxQzNjc2NzY3NCc3NSYnNTMyNSI1MjcnMjciNTcHJj0BNxYzMjcmNTciJzcnNzQnNDc1Iic0MzI1JzYzJzcnNDcnMjcnNDc1Iwc1NDc0JzcmNTcnMyc3JzcmPQE3IjU3Jic2NSY1Nyc3NCc3JzI9AScyPQE0JzY3NTQnNDcnMj0BJzI9AQc1MzQjNDcnMjcnNjUnNjUnMjUnNyYjNzU0JzQ3JyMHJyIHJjUHJxQjIicGIycUBzQnBgcnBzQrAQYHFxUHMhUGHQEXIgcWHQEXIh0BFBcHFRQXBhUUFyMUFwYVFBciHQEXIh0BFh0BIycUIxQXFjMUIycjFAcUFwcXBhUUMxUiHQEUBxcHFxQHMhUiFRQXBxcUBxYVFAcyFSMWFxQjBiMiJyIHJicmIzQzJjUyPQE0IzY1FzM1NDcmPQEmPQEXMzc0NzQnNj0BNyYnBzUnMjUWOwE2PQE0JzY9ASYjNTI9ATQnNxYXMzUnMjciNTI9ATQ3Jj0BNDc1NCc2NzQjIhUiJyIHJicHJisBBzUiBycUIycGKwEnFCMiJyIFFSM1BRUjIicHFjsBFSc1BzcyHQEUKwE0JzUWBRUjNQUyFyIVIic0BRcVIgciJzQFByI1BRQXNzMUByY1MiMVJiM1BQcjNCcyByM1MgcVIzUXFSM1FxUjNQ8BIicjByc1FxUjNRczFSIHJzQHFSInByYjNTI3MhcWMxUiBzUHNQcVIzUXFSMiNRcVIyc1BRQzFScjBzY1BRUjNQcVIzUhFxUiFSM0IzUzBwYVIzU3FxUjJjUFFSInNTIhFSM0BRUjNTMyFxUmNTIjFSM1FzIVIyInBRUjNRcVIic1BRUjNTIFFSM1BxUUIzU0FxQzFSM3FxYVIyY1FxY7
ARQzFSMmIzUFFhciJzY1HwEHIic1BRUjIic1BTMVFCsBNTQFMhUiBzQjNRcVIgcmNRYHFSM0JzUWFyM3MjMWFSMiNTIFMh0BIyI9AQUWMxUHIyc2NRczMhUHIzYFMhc3FxUjIicjByc1BzIXIyYjNTMVIic1NAcVIzUfAQcVIzUnIzIVIyInBRUjNQUWHQEjJjUyBRUjNQcUKwEnNwUHJiM1FgcVIzUFMhcjIicyNQcVIzUHMxUHJjUFMhUnNQcUKwE3dQULBgoGEwIbBgUxEAEbIQ4SCyALGwsbFSYBBQMoCA4FGwULCxALDAoLNREOFwEFHAQMCgsFGwYGBhBBCwsKFhA2CwsLCQIFCwULCQIJAisBCgsMBgYBBgoFBRELBgYBBQUGBQYGCg0QBgoFAQUFCwELBQEFBQULCQsLBgULAQsGBQULCgUFAQYNCwsECgUFBQEGBgUFBQYLBAYLBhAGBQUFCQgVBQEQBgYGBQsFAQsFCgUFCgUFCwoFAQsGBQsQBgUGCyY2EAsLCyYKBgsgBiUNCTEIDQUFBgoKDAULBQQSGwobBjAbCAkFCyAWCxoGIw0LFRULdxYFBgULBQsFCwYLEi8NHhs4CTELCwULCgYGCgYLBQUFCwoFBREFBQYLBgoQEAYFBgsGCwwQBQYLCwUGCwYFBQYFFhsGBQsGBgoFBQYFFQETCAYFCwUFBQUBCwsLAQoKCwsBCxALBQsLCwEFCwUFBBsbAQUGBQUFFgoLChYbBgoFBQwLCwYFDggsHwsWExIQZgQEBAQEBwcEDgkFBAQEBAQGAwoRARcDAwQGARsDEQcDBAIGIgQFFgMREQMDAwMDCgcGCAcWJI8tE1sLBwYIERYWQQYEQkJAFREfAw0HDQMYAwQGBw0HBgMUCwQUBAYEBAQEAwoKBwcOFwUHFQcFBQMKBAQHAwQEBwMHBwQEBAQEBAQEBwcEBAQEBAMHBAQHBwQEBAcDAwcFBgcDAwMDBwsHA
wcOAwQECwcDAwMDBwMIBwcLBwQGBAcGDhERAwQDDQ4RHxgHJQ4GBBQQDwQEBAQEBQIDBAQEBAQEBAQEBAQEBAQRAwcDAwMRBgsDAwMDAwcVEQQEBwMDAwMDAwMDAwMDAwMHBxYkAwcIHS0eKAQDGwMUCgcDBAQeBxEGBAQEAwYjFwQEGxgGCxEUFhYNDQcdCAMDBQIVGAcDCgQEBxELBhEGFgYtBgYIEQcDByIDBwYIKREKDBITAycD/bQHBgEDGAMKKUQHBwcDHxQB0gP+YQYEBgUGAc8RBAYFCf6ABAYB9xQOAykNBhsRA/5eBwcHEXMHB0gNsQcUCmkEAxgHBwNwCj0KChEDRAoLFAcDCgciiwkFCAYR3QopBAa7CxEBmBUKCwYD/nYHiAcC7AoYCgoKfgMHBKYDCv0oBgEHAnIH/dIKQQwIHwQfClwHBwYBAe0HMAge/X4HBwH3BxsHNw0UA20KAwo2Fw4HFREUH/0GBwcHDgQbFAMCEwMcAwYB/QMKBwoCjQcIBgeSAwcbJf8GBwcvCgMHHxQYBgP+jQcHBgFoCQURCwoEWAoHGAMF/Z4OFwcDAwIPBBcEBxMFAxYJQQYBVQo6CgcHAxsGAwYBAiQE/roKCgoDAhYHkgcHCgf+ygYTCQnzBwETBwQHBwcEHAMsBxEOAXkLDj0HBwQHJgYECgQGBQoDAwUGAwEKBAcFCwQFCAYFBAkFAwEKAQQFBAUJAQEFBBEBCgEGDwEFBAEFBAcFBQoKCQ4BBQQJAwYOBQEKBgQEAQoBCgIsShMKIBUKBgUJCAwFAQ8OCgUdCgkKIgUKHQEZDx0eAQUiGAUICwoKChMKGRMKAVgJAQUYJw4NERwKBR4iCglSBgoBWiAUBQQKFAQKCgoTC0QJHgkjBQUKASMOBScFBQo7Dg8FBgoKBQkFARgKBQoFCgkKFBgFDhQTGQEFFwwiCgUBBQYCAgQBDgUBCQYEBQENEQoBBQIKAQoFBAEKBQ
4EBQQBBgoNGQETBQMLDgEGBQIdBBkBBRIGBQUBBAQBBQoBCgEFARsBBgMMBgcPCRAEDAgODw8FGB4BEwUKBQoJFRIKHQUYLAoBBQUPDAgYHRkJCgwIJwkQBB0PARgYBR4EBQUKIgUJCwEPCgYCFQodCgkFBQkUBQsJCQUZDQUBIhMKDw4KBQoBBQoBBA4QBQEKDgoBGAkeBAwICQoUATEUCgQFCgkHKg8DDgI/CgULCQkKKwUUCSMJEwQYBwkZBQpICggCCQUKIQUkAgoBAQ8BAQX+1QYHKREDGBVVBywMDyUEDQQGEgMUByMTIgcbEQcECiIHBgYIWAcpBwUIBwMYERcOGBQKCwMHMAcDAwQvGAQiBgYIAxELClgOGANhGTMzHCgDAwQHBwQFLiM9KAsHBhgDDQEDLQMYGDMGGAMFBQoHERsHAxELLAcKBgEIAgMRBEAEChERBwMHIgoHBQgEBAcGAQ0LFAcDEQcRIgQNEwwUEQQGHwcVBgYLBwMOBwYHBwcDBwMEBgEaCAMGAQcGBwQDBwcRBwcDBRolCgcPCQ0GCAcDBwMmCgcJCwUQAwMRBAkFBAQECwcDAwcDBwMEBwMDBxEREREDIxM6Bw4GByIHAwQLBhQiDBMGCwMHCRIzGAMHBAMHAwQMCwQEBBtfCgcHBAcDBxgUNgcHAwcKDxcHGwcIEwMEFhYNIg4OEgkWLgM4HQdpAw4FEywESS4KCgoRCwQiCAYGBxwEBgMDAxtILh1LUX4RAwQEGAcDFAUFGwYEGBEEAwMHBAgCCgMHFBEfBwoeLREGBwQXSwcIBgZSIgcHBwQDAwMDAwMGAwMDAwMDKAcHDgcHKQcGBgdfAwYHBw8FBwowCgoDEQcOChsEBgQHBigHBxQFAgcJCAUFBwMEEQQJCBEHDQQHBwMDIgMDFAcHBAcHCgQEBAYLBwkuBAcDAwcONwcDAwMDDQoHBwMHBwcHAwQpChUHAxIJCgQEBwMDDgMODg4
RBwQHBz0HBQUeBAcDBgYKAwMUBxMFBARBBwcRAwMDBwMEFQMKAwQEBwMHAwYGDQQRFAUFBQUEAxgDGwMUAg8HBwMRAwcHAx8KBwMDAwcDBgYHAwMHHgQDDQQEEQMFCQYBOAYDBwcYBwMHAyUHCgQHBggEBgQKEQMDBg4OBAcDJREOAxEHAwYrBAQYBwoRBxgHBwQKCh4GBQMFBQMEBBUGBgscDQ0HAwQDAyUbFAcYBwcHBgQJBXQHBANHBw4AAABV/87+/AViByAB0AOcA6QDqgO2A7oDwAPEA8gDzAPTA9cD2wPfA+MD5wPtA/ED9QP5A/0EAgQKBA4EFAQbBB8EIwQqBC4EMgQ6BD8EQwRIBEwEUwRXBFsEYARnBGsEbwR2BHwEhASJBI0ElASZBKMEpwSsBLIEtgS9BMEExQTJBM0E1QTmBO0E8QT1BPkE/gUKBREFFwUbBR8FKQUtBTQFOwVABUQFSAVOBVMFVwVbBV8FYwAAARQXNzIXNjMWMzUWMzYzNSM1FjM1Fhc1FzUXNxYzJzUyFTczFzUXNxY7ATUzMhU2MxUzNTMVNzM0Mxc2MxYzNjMWMzcUFzYzFjsBMjUyFTY1Fhc3FxUUBxYVBxYXBxYVBxYVIxcHFhUGIxYzFSMXFCMWFQYjFhcHFh0BIyYjFRYVIhUWHQEjFxUjFTMGFRcHFRcVIxUXFScjFTMHFBcHFwcXFRQjFwYdARcGIxcVBgcXBiMXFRQjFDMHMxUUIxUXFCMXFQYVMhcjJxUXBiMVFDMVIycVFhcHFDMHFwYdARcVIhUyFQYjFRYVBxYzBycjFRQjFwYjFTIVBhUWMxUiFSMiNQcnBiMVMxUjIicjFCMnIgcnByYjFSMiNQcjIjUiFSI1IhUmIxUnIxQHIicjFCMnBiM1ByInBycUBxQHNCciBycGIyYrASI1BwYjNTQnNyYjNjUiNTI1IicyNRc1JzI3JjU3Jic2NTQnNjMmPQEDMyc1MzUn
Mjc1IjUyNSI1Nyc3JzcnMjUnMj0BIzUzNScyNSI1Mj0BNCc2NSYnNjcnNyc2MyYnNDMmJzY1JzY1JxYXMjUyFzcXMjcWMzUWFTczFzY7ARc2OwE0NxcyNRcyBSMiBycjIgcVFxUjFRciBxcVBhUUFyIHFyIHFRQzFAcXBxUUMxUGHQEHMhUiBxUyFSIHFDMHFwcWMwcWHQEHMhUGBwYHIyYnJjUmJzQ3Jic3JzMmJyIHJisBBzQjByInBiMnBisBIicHIjUiBycHJiciBxcUIxYdARQXBisBJisBFRYXFjMUIxUXFQcnIxYzFSMUFyMUFwYVFyMWFxUHFjMVIgcUFyMUFyIdARQHFhcWFyIdARcWMwcUMwcVFzczFScjFCMXFAcWMxQjFhcjFjMUBxYXFBc2Mxc2Mxc3FzI3FBc0MxQzNxQ7ATcXNxUyNxUyNxc3FhcyNTIVMjUyFTI3FzY7ATQ3JzIXMjUnMzQ3NCczNTQ3IzU2Myc1NyInNTI3NCc2NycHNjM0JzY3IzUzMjcnNTQzNCc2PQEnMjUnNjc0IzcmNTI3JzI1JzU0NycyNyc1MxUzNCc3NSM1NyI1NycyNyc2MzQnMjciNTI9AScyPQEnMj0BNDMnMjcjNyc3Ij0BMzU0IzcjNTc1IzU0Nyc3JzYzNCc2NTQnMjU0IzcyFzM1NDcnMzQjNDc0JyMVIiciFScjIgciJwcnBzQrASInByInBhUmJwUUMxQrATUyBxUiByc1BRQzFSMnIhUmNTI1FxQjNQcVIzU3FhcVIzUFByc1BxUjNQUzFSIHIzQ3FSM0BxUjNSEVIzUFIzUyFxUjNQUzFAc1MgcVIzUzByc1BRQjNRcUIzUFFCsBNwcyFxUjNCM1FxUjNQUzBiM1NAUVIyI9ARYlFSM1FxUjNQUVIhUjJzcHJjUWJRUjNQUXFQcjJzUzFxUjJjUFFSM1BxUjNjUXFSM1BzMGFSM1NgUVIzUFFSM1BxQjJjUzF
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
zI1JzI3IzUXMzY3NjMWFQcUFwcWFxYXFCMUMxYXBxYVBxYVFhU3MhUyNxc3FzcVMjcXMjcUOwE3FzcUOwE3FTcXNxc3FDsBNxQzMjcyNyc3NCcyNzUnMj0BNjMnNyY9ATciNTY1JzY1NCcyNyc3NjM0NyI1Njc2PQEmKwEiByInByInIyIHIjUiBzUiBycUIycGKwEnIgcnIhUiJwc0KwEGIxUUBxYVBzIVBxcGFTIVIxcGFRQXIh0BMzcVIhUGFRc3FSMHFBcGIwYHFyIHFDMGBzIVBiMUBxUjBgcjNSYnMzU0IyYrAQcUFyMiJzc1JicXMjc1JicmIyYjNDM0JzcnMjUnMyc1JisBNTcWMzU0JzY1Jic2NSYrAQc1BycGKwEiJwYHJyIHJiMHNCsBBzUiJwcnIgcXBgcyFRQjFwYjFBcGFRciFRcGHQEXBwYHFRcHFBcUIwYjBgcmJzUmJzI1NCcyNSYnNCc3NSY1NCcHNSIHJwcnByciBycUIycGBRUjNQcVByM3BRYzFSMmIzUyFxUjNQUVFAcmNTIXFSM1BRUjNQUXFQcmIzUFByc3FxUjNQUVIzUXFSMiJwcVIzQXMzIdASM0IzQhFSInBRUjNRcjNzIHFSM1BRcVIyc1FxUjNSEyHQEmNQUVIyY1IRQXByInNjUHFAcmPQEzFRQjNTQFFxQHIicHFCM1BRUiByInNxcVIyInNTsBFRQHNCM2BRUjNTMyFSIHIzYHMh0BJzQHFSM1FxUjNQUjJiM3FgUWMwYrASInNTQXFQYrATQ3FiUVIgc0IzUHFSM1BzIVBiM1NAcVIyInFxQHIic1NxYhMh0BJiM1MxUiJzUFMxQXByInIhUjJzY1FgUHJzUFFSMiJzUWBRUnIwYjJzU2NTY1FhcVIgcjNQUVIyc3MgcXFSIHJiM0JRQrATUHFSMiJwUVIic1MgcjNTcWBRUjIjUFFSM1BxUjNQcVIzUFFjMVByM1MiUHIic7AR
cGKwE1NAUVJiM3FgcGFSYjNxYFFSM1FxUjNQUVIzUzFSM0BxQjJjUhFSM1FxUnNjUyMzIdAQYVJiM1MicVIzUHFSM1FwcnNxcVIzUHIzUyBzIVIyInBRYzFCsBJiM1IRUjNQ8BJzcFFSM1BTIVIyInBRQHIzU3MxcHIzQnNQcjJic1FiUVIzUHFRQjNTQlFDMUBzQnMgUzNxQzBxUUMxUjJiM1IRUjNQUUMxUjNyEXFSY1BRQXIzUHFSM1BRUjNQUzFSIHNRcVIzUFFSM1FxUjNQUVIzUyFxUjNQciBzU3MhcVIzUFFSInBRcVIzUyIxYzFSMmNRcUKwEnNRYHFSM1FxUjNQUVIzUXFSM1AhsJEgkKCT4dGBoJNQEuNCQ9TDA/ARIZEgoQE3MrNjwnCZUTWG1YCCQQEBQgASUKERIJCQESCgkKCgoOCxsaAQoMEB4KGxoKFQoKAQkKAw4JCAoJDhYjBg4IARAGBgEGEAIJExMPDRERAQgIERIRChMKCBMBEwoBEAcLCgETAQocCRMSExMBBxMZFAYGAiQTEBABGQIkEwoCEwE2CBMrExASEBMTCBwTCAETaVIQEgktEhkKCJkQskYKI1ATD28BEFUwXBMOHzMGmLIBChATjwEKDBgBECQTCRMBCgEJEwETExQtAhMRChQREwkMDwcIEwkBEwgSAQoKCQoKFBMBCgkDAQoUDgsIBwcBBgoJAQkJCgkCAw8TEggJAQoKEBABEAoBIwEKEAcGAQcTEisHCgklKwcQBwsbAQkSARIKCRUvKQFzPxMLphA+/uw+FAMUAwMDAwceAwUFEREDBwYDAwQYBgMDCwQHFAMOcBsDCgsuFhgRAxQmAgsGHAQHAwclDwkbCg8FAwsQAwcEBggbEQoNCxcVGwcEBwsGFxUDBhUNAxsDBxEGBwQGDhEHEQ4NDgMHAw4HPQcDBwciBgcOEQMEBgQ9ESoJAwMDCAUDBwYLBBUEBAQHAxsEBQYHBxE
UGwMKGBQFBQMLDQgGBwUIBwYBAwYLESIOAxUFCAcKBgEYCgcRFAQDDQsHBAoDBwQRCgcDAwcKAwoHFAMHAw4EBAMFDAMGCwcKBwMCCBQEEQ0ECxcHAwQGBwcHBwYEByEBFAUdCQ8LCQsKBAcDAwMDAwMFBRgDDAkEBAoHAwUIBAciBgYIBwcGJyEDDhskAQcEAwcWJBEGFgwDCgoDBwQFBgQKAwcECwQHBAYDCgMDEBIkCAwMDgYDGAQEDR8DBiYHCwYXFQcRDQQGKQQGJwMgBzMRBgYB3A0LAxMMBFsX/gUODQZFDv27BAIgMAQXGAGDAwcELAf+DAeqAwYBzwfaBgcDEQI0BgH+6gd+CwQHVQT++hEGDhQRAUcHC/6RBwoBkQ4RBgEHyQMKZgf+HQcHBQxzBwFyAwcGAQQ9AwYBsQYNBAb++wawBwYLAwjbBw4YBoQHAUADCwYDCf4YBQUFBQcGAXcIBgYGCQE6AwcHJQemBggFfgMGAaYDAhIDEv6MCwkF0wYB/u0XBAQEHg0EAwoLAkwEDf5kEQYBGAGHEQcFDAMHFBGZDAgE/rAEBgMHuxQGCwsGAi4HA8kDBgH+FgYBBzoNAwoC/QMK/WIRIgcKBwKQBwQRFQn9sgQFASgOBw8GBgLGCAUDB5kHGQkDEwFjBiUK/FkHiwZBBwoCZwaOFAMGjQYNCRkZlwc6BpIRBwqdC4QHB0sHBAUB/bcMFgcRCAYBtAvIBAYDAV4H/QcHBAYBA0gNBAQsBwQDB+4HBwYU/hAHGwcCzQQiBCH9EgoHAwMUDRoFAdkH/o0OFQQCRQQV/S8EBzADAsMD/UcKCBB+BwMVB18G/IUHBxsHlQQHBAc9BwPkBgH8KgMRCEINCw0OegYLCgQiC8kHAWwHmQcGhAEJCgUPCgoLBAoFBQUKBQUFBQUMCAYQBQUKCgoPHQQKBQ8iDwsEBAQQCQoFBRQFBQQaGC0LIhkFHQYKKAoEEBQhPAYxBQoK
BRQFNxgkDgoJCwkCCUUKAQkPDw8OCwUeCgQaBAoUHhQPAQkcEAYERgUBCQ8FFggKBAIIEAQQCQUeGQQUCkEUBQUFDw8ZXhkYMhAEJAkPCgQEBAQFFAUUFAUFBQUKCgUKChIRCgQEBAYGCwUKCgUJBAoPDw8LDRsLHQoeBhMZCQsFBAsFChQJBTIKBQ5QBkAsCwUxChQECQsJDwkLBQoOEA4ZfAsJIxQeBQkQCwkOGQUUCiMoCiUCHwgMCQ8JCx0KBAQKIxQLCQUKCgkGDgYKDgYEChlEGwQZQgkFDxEmGTInGQYGDwUHsQMHBkQaCAcb3QQLJNOBB3gQFRu+HyQgBy4csR8TEgQDAwMHBAQDAwYEAwYDAwMDAwMVHiILaQcHFwcSYgcXByYRBDEXhBcpBAcGC1YWbR8DFXIgB2IHBwcNDQgEBwMGAwMGAwcEBAQEDgQEBAQHAwMHBwMDAwZSBwcDB1UHBgcKdwdLBggUEQMnDB90DQQGOkED2itTA15xcCkVCgoDAwcHAwcEBAQECwQHBwQHBwcDCg4XDgYIEQMKBxQRCxQHAwUJBw0HBwoLBgcDBxcEBwo4Fgc6BggrBA05JxQmFAc7EAcDHwQYERELAw8FAwcNC0pSUgMTIAcHAwcpCgoHBwcKEBIMAjoKBgcbAwMDAwMDAwcHBwcDAwMDAwMDRwcrUwMHFAoEBwsuBxEOBQUOIgMeBwcRBwMHBLthCBxAPXAYAzFlAyUqPXcUByELCgcDAwMDAwMDAwMHBAQHTgQEBwQDCksNBAsDfgMDIgcFBQUFLwQEGwcHTw0EBhEGCgcEBwQDAwMEBAcHBxQHBiwGHBwGBgYDAwMHBwcHBwMEAwMEPQQHBwMFBRgHBQYHDgMHCAkcAQwFBQMGBwcGCgMHDhUEBgYKBwMHBx8KBwMDBgUECgMEBAcHDgQHBgYGAgQEFQMDHgoHAwcLCgcDBQEEDQcRBwMDBAQHBAMDAwcODgYGBwcfD
AUHBwcEBgQHAwoHAwoDBwcEDhELBgcDBwMHEQMHBgQGAwMbBwMJCAYEAgEDBwolBAQGCgcDBwcFAgcHNwYGFwQHAw0DBwUCAwcEAwMDBAQOBwcHAwcDAwQHBwQUEQYDCgcHBAMIDREHAwQDAwMDAxQEBAcGCgYFBQcHGAMRBgQHAwIJBwQGAwMGBwcHEQMODgMDGAcDBwcHAwcHAwMDBwcEBwQDAwcGBg0FBQYHAxUNCAMeARADDwwEBAcEBgMGAQQJBAcGAwMDBw0HBBUNAwMDDgMREQMPBQMLDRgOCgoRBwcKBAoKDQQEDgMDGAMDFAMKBwMDDgMDBwMEBAoHBwcHAwYKAwgFCgcHBAQUBAQHAwNEAwN6BwcAADn/zv7cBWIHGgIFAtMC3ALgAuQC6ALvAvMC9wL7AwIDBgMKAxADFAMYAxwDIAMlAyoDMAM2Az4DRgNQA1YDXANhA2UDagNvA3MDdwN7A38DhQOOA5MDmAOcA6YDqgOwA7QDuAO8A8ADxgPKA88D1QPcA+ID5gPuA/MD9wAAATMWHQEUIxcVBxcUBxYVFCMWFQYjFxUjFTIVBzQjBxUzBxcVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnNTMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NS
InNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYFFxUHFhciFR8BIxYzFhcWMxQjFBcWFwcUFwYHFRcjBhUGBwYHFwYVBhUWOwEXNDMWFzM3FDMyNzU2Nyc2NzYzNjc0NzIXFjMWFxYXFhczNjMyFzY1NCM0MzQnJicmIzQzNSYnJicmPQE0NzY1Njc1MzcnMzUnMjUnMzQnNDc1IzU3MhUyNzY3IjU0MzQjNCcHNCcGIzQjBycjBzQrAQc0IwYHNQYdARcVIyciDwEGByM1JicmIzQnNScmJwc0KwEiByYnBiM0Iwc0KwEnFAUVIgcmKwE1FhcVIzUFFSM1FxUjNQUVIgc1NxYXIzUyBRUjNQUjNTIXMh0BIzQnFwcnNxcVIzUHFSM1NzIFFSInBRUjNRcjNzIHFSM1BxUiBzUHFCMiJx8BNwcmNRcyHQEmNRcUFwciJzY1BxcGIyInNTIXFDsBFSIHJiM0BzMGFSc0FyMmIzcWBxUjJzQFFSM1BRUUIzUzFSIHNQcVIzUzFSM1DwEnNRcVIzUVMxQrATQHFxUiBzQnIzUXFSYjNQcVIic1FxUjNSEyHQEGFSYjNTInFSM1MxcVJjUyBxUjNRcHJzcXFSM1ByM1MgcyFSMiJwcVIzUXFSYjNRcUByM1NzMXByM0JzUHIyYnNRYlFSM1BxQzFAcjNTYHFCMiJxMVIzUFNggkBwcOBwcODg4HBwcPFg4IBw8PHRYWHQ8WCwsHDwgICA8LEh0PDxYSBBYQBhYWDxYWDxYWHR0WBwcPDw8WBwcHBw4ODg4
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
eoChRESOboAOgAAAQgREjm6AEIAAAEIERI5ugBIAAABCBESOboATwAAAQgREjm6AHIAAAEIERI5uAIGELgArNC4AKwvugC6AgYA7xESOboAwwIGAO8REjm4AO8QuADS0LgA0i+6ANMCBgDvERI5uADvELgA19C4ANcvuADvELgA2tC4ANovuADvELgA39C4AN8vuADvELgA5NC4AOQvuADvELgA59C4AOcvuADvELgA6tC4AOovuADvELgA7NC4AOwvuADvELgA89C4AO8QuAD10LgA9S+4AO8QuAD30LgA7xC4APrQuADvELgBBtC4AQYvugD7AO8BBhESObgA7xC4AP3QuAD9L7gA7xC4AP/QuAD/L7gA7xC4AQLQuAECL7oBFQIGAO8REjm6AR0CBgDvERI5uAIGELgBIdC4ASEvuAIGELgBI9C4ASMvugEtAAABCBESOboBMwAAAQgREjm6AT4AAAEIERI5ugF7AAABCBESOboBigAAAQgREjm6AZgB6gKFERI5ugGlAeoChRESObgB6hC4Ab3QuAG9L7gB6hC4AcLQuAHCL7gB6hC4AcTQuAHEL7gB6hC4AcnQuAHJL7gB6hC4AcvQuAHLL7gB6hC4Ac3QuAHNL7gB6hC4AdDQuAHQL7gB6hC4AdbQuAHWL7gB6hC4AdrQuAHqELgB3NC4AdwvuAHqELgB3tC4AeoQuAHg0LgB4C+4AeoQuAHi0LgB4i+4AeoQuAHk0LgB5C+4AeoQuAHt0LgB6hC4AfHQuAHxL7gB6hC4AfbQuAH2L7gB6hC4AfrQuAH6L7gB6hC4AgHQuAIGELgCBNC4AgQvuAIGELgCCNC4AggvuAIGELgCC9C4AgsvuAIGELgCDtC4Ag4vuAIGELgCENC4AgYQuAIS0LgCEi+4AgYQuAIV0LgCFS+4AgYQuAIX0LgCFy+4AgYQuAIb0LgCGy+4AgYQuAIe0LoCKgAAAQgREjm6AkMAAAEIERI5ug
JZAAABCBESOboCWwAAAQgREjm4AoUQuAJ80LgCfC+4AoUQuAJ+0LgCfi+4AoUQuAKB0LgCgS+4AoUQuAKD0LgCgy+4AoUQuAKH0LgChRC4AovQuAKLL7gChRC4ApDQuAKQL7gChRC4ApTQuAKUL7gChRC4ApfQuAKXL7gChRC4ApnQuAKZL7gChRC4Ap7QuAKFELgCpNC4AqQvuAIGELgCz9C4As8vugLZAAABCBESOboC3QAAAQgREjm6AuAAAAEIERI5ugLiAAABCBESOboC5QAAAQgREjm6AugAAAEIERI5ugLrAAABCBESOboC8gAAAQgREjm6AvQAAAEIERI5MDETIyInIyIVIic1MjcnNTcmNTY3JjUzJjUzNCc1NzUnNj0BIzU3JzcmNTQzJzUmNTY1JjU3JjU3JzU0MyY1NjUmNTcnNj0BIzU3IzUzNSc3NSM1NDMnNDMnNTcnNyYjNDcnNDcmNTQzJjUyNSI1NjUnNzUnNjUnNjMnNTQzJzY1IjU3JzQzJzUiNTY1JjUzJzY1JzcnNyc2NSc1NDMmJzc1JzcmNTY1JjUzJzU2MyYjNzUnNTcmNTcmNTY1Fhc3FjM2MxYzNDMXNzIVNzMyFTI1FzcXMyc3FjM1FjM3FzcWMzYzFhc3FzM3FTY3IjUzFTMyNxYzJzMWMzcWMzUWMzczMhU3FzQ7ARc1MhU3MxcUIxQXBxQXFSMXBxYVFAcXIhUWFSIVMhUUIxcVMhUGFTIdASMnFRYzBiMWHQEUIxYVIgcXIxcVFCMXBxcHFhcHFwcWFQcWFSMUMwcWFyIVFwcWFSMWFwcXBiMWHQEjFRciFTMVIxciHQEXIxcVBzIdAQYVFDMHFRQjFwcVFyIHFxQHFwcXBxQzBxUXIxUUFwYVFjMVFAcXBzIXFCMmIwYjNQYjJiMGIycHJyMGByYjByYnBzIVIhUnIgcmIyIHNCMVJiMUIycHJisBBycHIjUHIyYjBiM0IxQHJjU
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
nEvuAJvELgCftC4An4vuAJvELgCg9C6ApEBRAAAERI5ugKaAUQAABESOboCnQFEAAAREjm6Ap8BRAAAERI5ugKhAUQAABESOboCpAFEAAAREjm6AqsBRAAAERI5ugKvAUQAABESOboCuAFEAAAREjm6AsIBRAAAERI5ugLJAUQAABESOboC0wFEAAAREjm6AukBRAAAERI5ugLwAUQAABESOboC8wFEAAAREjm6AvUBRAAAERI5ugL3AUQAABESOboC+QFEAAAREjm6AvsBRAAAERI5ugMCAUQAABESOboDBQFEAAAREjm6AwkBRAAAERI5ugMTAUQAABESOboDFgFEAAAREjm6AxsBRAAAERI5ugMmAUQAABESOboDKwFEAAAREjm6Ay4BRAAAERI5ugM0AUQAABESOboDOgFEAAAREjm6A2IBRAAAERI5ugNkAUQAABESOboDagFEAAAREjm6A2wBRAAAERI5ugNwAUQAABESOboDcwFEAAAREjm6A3UBRAAAERI5ugN4AUQAABESObgCCxC4A3/QuAN/L7oDgAFBAgsREjm4AgsQuAOB0LgDgS+6A4IBQQILERI5uAILELgDg9C4A4MvugONAUECCxESObgCCxC4A4/QuAOPL7oDkgFBAgsREjm6A5QBQQILERI5ugOkAUECCxESOboDqAFBAgsREjkwMQEUFzcyFzYzFjM1FjM2MzUjNRYzNRYXNRc1FzcWMyc1MhU3Mxc1FzcWOwE1MxYVNjMVMzUzFTczNDMXNjMWMzYzFjM3FBc2MxY7ATI1MhU2NRYXNxcVFAcWFQcWFwcWFQcWFSMXBxYVBiMWMxUjFxQjFhUGIxYXBxYdASMmIxUWFSIVFh0BIxcVIxUzBhUXBxUXFSMVFxUnIxUzBxQXBxcHFxUUIxcGHQEXBiMXFQYHFwYjFxUUIxQzBzMVFCMVFxQjFxUGFTIXIycVFwYjFRQzFSMnFRYXBxQzBxcGHQEXFS
IVMhUGIxUWFQcWMwcnIxUUIxcGIxUyFQYVFjMVIhUjIjUHJwYjFTMVIyInIxQjJyIHJwcmIxUjIjUHIyI1IhUiNSIVJiMVJyMUByInIxQjJwYjNQciJwcnFAcUBzQnIgcnBiMmKwEiNQcGIzU0JzcmIzY1IjUyNSInMjUXNScyNyY1NyYnNjU0JzYzJj0BAzMnNTM1JzI3NSI1MjUiNTcnNyc3JzI1JzI9ASM1MzUnMjUiNTI9ATQnNjUmJzY3JzcnNjMmJzQzJic2NSc2NScWFzI1Mhc3FzI3FjM1FhU3Mxc2OwEXNjsBNDcXMjUXMgMUFwYHMh0BIwYHBiMVIh0BBwYHBgcGBxQXMzI3FhcyNzUjNTQ3NTQnNzUnNTI3FDsBMjcmIzcXMjUzMhczFxUXNxYVBhUUFwYVIicUIxcUMzYzMhc1Ij0BFhcWOwE2NyYnNTQnMj0BJiM3NSY1JicmIyYjNTQnNCczJzU0JyMiByc0NzM2PQEnNScmJyI1MxczJjUjNTI3NCcHIicGIyInBxYXMjcWHQEjJjUmNQcVIyI1IyYnIhcVIzQFFSM0JzUXFSInNTIFFSM1FxUjNRcVIic1FxQXFSMiJwcWFSMmNRcWOwEUMxUjJiM1BRUjNTIHIzU3MhcVIzUHFSMiJzUXFSMnNzIzMh0BIyc2NQUyFSIHNCM1BRQjNQcVIgcmNRYXFSM1FxUjNQczBiM1MiMWFSMnNQUUMxUjNCc1BTMyFQcjNhcjNzIXFSM1BxcUBzU0BRUGIzUFMhcjJiM1BzMXFCsBNhczFBcVIzQnHwEHFSM1JyMyFSMiJwcyFxYXFRQrAScUKwEmPQE0NzY3NjczFSM1FxUjNQcVIzUBFAcjNQEVIzUXMhUnNQUVIzQXFSM1BTIdASMnNQcVIzUWJRUnNR8BIzUyBxQjIjUXFSM1FzMXFSIHNCM2BRUjNQFkFwoeIwIHCQoQDAkFCTwOMTsgCgkJCgUJCgQKEiE
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
5ugJdATMAPxESOboCZAEzAD8REjm6AmcBMwA/ERI5uAJzELgCcNC4AnAvuAJCELgCcdC4AnEvuAJCELgCddC4AnUvuAARELgCfdC4An0vuAARELgCf9C4An8vuAARELgCgdC4AoEvuAARELgCg9C4AoMvuAARELgChdC4AoUvuAARELgCiNC4AogvuAB6ELgCldwAuADjL7gAAC+4AAMvuAAIL7gADC+4ABgvuAGUL7oB6wDNAAMrugGYAZ8AAyu4AZgQuAAG0LgABi+4AZgQuAAi0LgAIi+4AZgQuAAk0LgAJC+4AZgQuAAm0LgAJi+4AZgQuAAo0LgAKC+4AZgQuAAt0LgALS+6ADABnwGYERI5ugAxAZ8BmBESOboAOwGfAZgREjm6AD8BnwGYERI5uAGfELgAS9C4AEsvugBQAOMAABESOboAVQDjAAAREjm6AFcA4wAAERI5ugBnAOMAABESOboAagDjAAAREjm6AHgA4wAAERI5ugB7AOMAABESOboAfgDjAAAREjm6AKIA4wAAERI5ugCnAOMAABESOboArADjAAAREjm6ALMA4wAAERI5ugC2AOMAABESObgAzRC4AMTQuADEL7oAxwDNAesREjm4AM0QuADJ0LgAyS+4AM0QuADP0LgAzy+6ANEA4wAAERI5ugDrAOMAABESObgAzRC4AO7QuADuL7gAzRC4APLQuADyL7gAzRC4APfQuADNELgA+dC4APkvugD9AOMAABESObgAzRC4AP/QuAD/L7oBGQDNAesREjm4AesQuAEa0LgBGi+4AesQuAEd0LgBHS+6AS4A4wAAERI5ugEwAOMAABESOboBMgDjAAAREjm6AToA4wAAERI5ugFFAOMAABESOboBWgDjAAAREjm6AWMA4wAAERI5ugGAAOMAABESOboBjAGfAZgREjm4AZgQuAGW0LgBmBC4AZvQuAGbL7gBnxC4AZ3QuAGdL7gB6xC4Ad3QuAHdL7gB
6xC4AeDQuAHgL7gB6xC4AefQuAHnL7oB/QDjAAAREjm4AZ8QuAIQ0LgCEC+4AZ8QuAIS0LgCEi+4AZ8QuAIU0LgCFC+4AZ8QuAIY0LgBnxC4AhrQuAIaL7gBnxC4AhzQuAIcL7gBnxC4Ah/QuAIfL7oCIwDjAAAREjm6AiUA4wAAERI5ugIqAOMAABESOboCLwDjAAAREjm6AjcA4wAAERI5ugI6AOMAABESOboCWADjAAAREjm6AlsA4wAAERI5ugJdAOMAABESOboCZADjAAAREjm6AmcA4wAAERI5MDEBMxYVBzIVMjcWOwE1MxYVNjMyFzYzFzYzFhU2Mxc3FhU3FzYzMhU2Nxc3FzQzFDMVIxcGIxUyHQEjJxUXBxYVJyMHMhUiFTIVIgcXIhUXBiMXFCMXFScjFyMWFRQHFwYjFDMHFBcGFTIXFSMWMwcVFwcWFQcWHQEHMhUHMhcHMxUHMhUjFTMVIhUXBxcVBxYVBhUWFQcWFyIVFh0BFCMWFQYVFhUHFRcGHQEWMwcVFjMHFRcHJxUXFRQjFDMUIxcVFxUHFSMiNQYjJwcmIwYjFRcHIzQjBycHJiMHNCMHIyI1Bgc0JwciNQcmNQcmJxQjJisBIgcmIyIVJwYVIzQjFCMmNTcmIzUzNCM1MzU3IjU2NSI1Mj0BNCM3Ij0BMjUiPQEyNyc3JzMmJzQzJiM3NQcnMzQnNjMnNjUiNTc1NCM/ATQ3JzI3JzQzJzU0NzUyNzQjNzQjNzU2MyY1MjcmNTMnNyI1Mjc0IzUzFzQnNj0BJwcjNTI1Jj0BIjU3NCM1NzUnMzY1NCcyNSY1MjUmJzcnNjMUMzcXMjcXNgcjBwYdARQXBhUWFwcUFwcWFRQHFh0BBzIXFAcXFRQXIhUWHQEUBxYVBh0BFBcUBxYXBgcUMxQHFwYdARQXNjcXMzIXNDczFhc0NxYzMjc2NzY3JzY1JjU0JyYnNCc1NDM2NzY1JzcnNDc0JzcmJ
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
QYjFxUjFTIVBzQjBxUzBxcVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnNTMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NSInNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYFJisBBgcGFSMGFSIHBgcUFwcyFRQHFwcyFRQHFwcVFBcHFRQXFRQjFAcUFxQHFh0BFyIVFhcWFxUWFzI3FBc3MxQHFhc2NTMVFBc2NzI3NjcmIzUzMjcnNDc1NDc1NCc2Nyc1NyI1IiciBycGIyIVFhcGFRQXBgcUByciJzU0JzY1NCc2PQE0Jzc1JzI1Jj0BNyInNzQnNDcmNTQ3JjU0Nyc2Myc0NzY1NjUzFRYXFh0BMjcyFxQHFDMVFCMXBxYXBhUUFwcWFRYXNjMyFzY1Mj0BJzY9ATQnNyc1NCM0Nyc3Jic0JzM0JyYnFSMHNCM3NSYrASIHJy
MGFRYzFScHIyc1NxczNjUmJwYjJzc1BhcVIzUHFSM0JxczFSc2BxUjNRcyFwcmIzUyFwc0JzcyFxQXFSIVJyMHIzU0NzU0JzY1MgczFBciByY9ATYFByInNTcFMxQHJisBByM1NAUHIic3MiEyFQcmIzUFFSM1ITIXBycyBRUjNQUVIzUXFSM3FzcWFQcmIwcnNQUjJjUWBzMWMxUGKwE0JxcVIzUFFSM1BxUjJzcWBRcHIic0EzIVIyInARQzFCsBNTIFFSM1BTMUKwE0FxUjNQcVIzQHFCM1BNUHIgcHDQYGDQ0NBwYGDRQNBwcODhsUFBsOFQoLBg0HBwcOChEbDg4UEQMUDgYUFA4VFQ4UFBsbFAYGDQ0NFAcHBwcNDQ0NBwcNBgYNDQ0HBw0NDQ0HBw0HDQYNDQ0HBwcHFRpgBw0wOhgNIgcOHCgHHBoOBwZSDg0ODgYjLw0NDgcODRwzAw4GExYOBw0HTBoWDDomUg0NDQ0bFRwNFQYGDQ0HFBQNAgsHDQ4OBwYGBg0NFA4iBg4HBwgGBwcHBwcHBw4ODgcHBwcODgcOBhQUBgcHIgcHDg0ODhsOBxsUFAcHBw4HBwgTBRYHBwsKFQ4VFQ4EEQcVDgIMBw0GDQ0OIgcHFBQODg4VDgcOBg0IEywRBwciCjMHDSoCCxAMDQ4HAgsVFAdSCRkyBA4HDQ4HDQcODQcCDD0OIjYHHwMjBw0+BgcHDgcHLwYGHAYNBxAEIgcHMxEbDQ8N/T4GCwNBNlIRFBo4GBEEBwMHBAcDAwMDAwMOBwQHAwMEBBsOGR0UMAoLFA4DIhyHBArkPhAWaEYjBwMHDhsEBxEHBAYGAwMh7wUaBwYHIgIEBgMKDn4XOAkDAwMDAwMDAwMDAwQECwcDBw4DAwgGBAomNgcmGywDBwYLGAoGAwMDAwMDAwcCFpQ4EyMfLAQEBAQEBgMDAw4bGAcbDJsNEQQEGicHBQELEQ0PCR8KBBEEEQMKAyI
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
vuAF/L7gAiy+4AJAvuACbL7gAnS+4AL8vuADBL7gAwy+6AyYAxAADK7oAEACQAVUREjm6AHIAxAMmERI5ugB0AMQDJhESOboAdQDEAyYREjm6AHcAxAMmERI5uADEELgB2ty4AKPcuACE0LgAhC+4AKMQuACI0LgAiC+6AI4AxAMmERI5uACjELgAktC4AJIvuADEELgAnNC4AJwvugDIAMQDJhESOboA4wCQAVUREjm6AQkAkAFVERI5ugEOAJABVRESOboBHQCQAVUREjm6AS0AkAFVERI5ugE3AJABVRESOboBOgCQAVUREjm6AXoAkAFVERI5uAHaELgB0NC4AdAvuAHaELgB1NC4AdQvuAHaELgB19C4AdcvugHtAJABVRESOboCIACQAVUREjm6AmwAkAFVERI5ugKpAJABVRESOboCqwCQAVUREjm6Aq0AkAFVERI5ugKvAJABVRESOboCswCQAVUREjm6Ar4AkAFVERI5ugLCAJABVRESOboCxgCQAVUREjm6AsgAkAFVERI5ugLJAJABVRESOboC4wCQAVUREjm6AvQAkAFVERI5ugL3AJABVRESOboC+QCQAVUREjm6AwIAkAFVERI5ugMJAJABVRESOboDCwCQAVUREjm6Aw4AkAFVERI5ugMRAJABVRESOboDEwCQAVUREjm6AxwAkAFVERI5uAMmELgDHtC4Ax4vuAMmELgDI9C4AyMvuAMmELgDKtC4AyovugMvAMQDJhESObgDJhC4AzTQuAMmELgDOdC4AzkvuAMmELgDO9C4AzsvugNCAMQDJhESObgDJhC4A0fQugNIAMQDJhESObgDJhC4A0nQuANJL7gDJhC4A0vQuAMmELgDTdC4AyYQuANS0LgDUi+6A1UAxAMmERI5ugNYAMQDJhESOboDcADEAyYREjm6A3MAxAMmERI5MDEBMzIHFzI3FzcyFzcyFTczFzYzFxYXMzcWFzM3FhcHFhUHFgcm
BzMGJxcHFAcWFwYHFjMUIxYXBxcHJgcWHQEUIxYXBxYzBxQXBxcHFg8BFgcGFRYVBxYHIxYXBxcGJxcPARYzFSIHMg8BFwcWFxUjJiMVFxUjFxUjFhcHFBcGBxYPASYnIgcmJwcnByY1BxcHLwEiByYjIgcnJgcnBzQnFCMmJyIHJwYHNQcjJjUGBycGIycGIyY1ByMnBgcnIgc1ByYjByYnNjUiNTI1JzQzJic3JzcmNzYzJzcmPwEnNDMmNyM3JjUzJzYzJjc2NSc0Myc1NhcnNzQ3JiM3NCc3JzM3Jj0BMjc2JzI1Iic1Mzc0JzcmNTcmNzQ3JjU3Ijc0FzU2Iz8BJzY1IjcyNSY1MjU3IjcXNycXNycyNzUmIzY3JzI3Jic2NzY1FzM3FTYfATcWFTcWMzI3MhU3FzIVNhcWFzYzFzYzMhc3Fhc2MzIXNxc2FxQXNhcHNjMWFzczFTMFJiMVIzUjBh0BFAcWFwcXBh0BFBcHFBcUMxUUIxcGFRYXBhUUFwYdARciFRcHFhUHFhcHFhUGFRYVBxcUBxcHFBcGFRcVIgcWHQEUFzcyFzY3FzI1MzIVMjc2MzY1IzUyPQEnNTY3JzY1JzI3NCc3JjU0Nyc3JjU3Jzc1Jic3NSY1JicHIycmJwcmJwcmKwEnIgcnIgcnBhcyFxQrATQjNQczFCsBNAUVIzUXMh0BIyInNTMVIzUFMhc2MxYVMhcWMwcXBhUUFxQHFxUUFxUiBxQHFhUGFRQXMjczFAcXFAcXBiMUByM0IzU2PQE3Iic1NDcmJzcnNzQnNDcnNyc3Jj0BNyI9ATQ3Jic2NSI1NDcmNTciNTQ3Jj0BJzY1Jic0BxUjNQcVIzUHFSM1HwEVIyY1FxUiJwUVIzQnBRYVIyY1FxUjNRcVBisBJzQHFjsBFSc1BRUUKwEmPQE3BRQzFSM1MgUzFSM1NAUUKwE1FxUjNRcVIzUWBRcVJzUHFxUHIyc1MwUVIzUHFSM1F
xUjNQUVIzUHFSMmNQcVIzUFFBcVIgciJyIHIic0BxUmNTcWBRUiByYrAQcmJzcWNxYVJzUzFjMVByInMjMVIgc0IzUFFSYjNQUiFSInNTIHMhUjIicfARQrASc1MjMXFSMnNQUVIj0BMgcVIzUHFSM1FxUjNQcVIzUD3wYLASMFAQsRCQgdBQwFDAIJDCkEFxISDwYMEAQPBQEMAQsHBgEFBAEGBQYHCAQGBQQLARcBIgELDAULBwYFBggGBg0QAQcMAQYLBwUBBgUEBxEBBQUBBw4IEQEMAQYLDwMOBgsGFQsFCwERBwUHBgYBKREQDQoVGXMMHQsiBQsGIQoZCQ4GKBdZJREzMwYFHBcuDCAlCwwFFxIWDAUMCwYRCwYcASIMCz8pCwYLHRQGCwwFBgQLBgUGEAEGBgUHBgEMDwYJAgsMBgYFAwkJAQcLBgUBBQUBBgUKBgQGChECEREBARYRCAgLAQUMCwcFAQYFBwwBFwEGBgELBgYBBQsMAQwBEQEFCwEFCwELBQYBBQUBDQQdLx0LBhEMBgsXERcTDwoZBR1QBRgRAQoeBAsMBgUMVgscCwwOCRcXFxERAyUBDwkXTwELC/0sHggKBwoDAwQEBwMDAwMKBwQEBAMDBwQEBAQEBAQEAwcOBAQEBAQLBAQEBwYLB07nGioJNAdmCgeCUSEIRA4OBwkFBwMDBwMHBwMGBgMHBAcDBQgDCho7CgQ9MJUHchNEBgsiEQoNBwgGGEdpBgsGBAqjBwcHAhYKowcEBgFVBv5CDSYGCykrJwoHBAcDAwMDCgMHBwQHBwkLAx4DAwMEAz1+FBEDBQEDBgQHBAQEBA4HBAcDAwMDAgUEBAQEBAQHAwQEBAaxCiILWA4OGAQbGAYBATIDBP73DgQNwgcRBQUEB+AYAwooAu8HAwoD/hoHEQMBPAcO/uoHBBEGLAoGAiARF9AKEQoRCv7cDncDMwcCGQZxAwoKC/55PgQHEgwDGAQDpx
gEDgGsBAYGCAoYASEDIVYLDiUGCBEGAQQ2AwcH/ecHAwErBAcDBu0HBwYBRBEHAxEDtREVEQHVBgZ9Cw0KnAqqCgb2EQEFBgsSBQYGBgsBDAELDAEFFy6ODAYRAgoBLgYBHSIOCREBHFAiBjkMHAEMAh0CCgUMFxEcEhwDWQsMOSQPIwIJCwwCChwxHwlCIh0GAQwuHBILCxILIlsXAQsGBiMFCwaJEhwGCycMCwwcDAEFDAErBhABCwULBgEjCgYQBwIVDAQIEAYSAQoGDwUFBQEFBQsMBQYFBgYFBwsLBg8GCwcGAVcLBgsLFwYyGQsMHCYOERwiChMFSwZiPhEMBQwcUSIWEQYGHREGAQwXDAo0HQQeCzQ+AQsGCx8mCxIFBgwLJwELIh4cDAoKDRcMCwEMBgscEgsGBgUBCwsMFwEdHQEdCwsXIwsGHQUBHCAGCAgGCwYGAQYLBgYQDAoGBQIGCwELAQUGBQYJAQwFBgoGBQEICQUBBgsBCBER8AMKCgUFFA8XBh8HLAYLAw4OFB1JBwcGKSsBHwcjE3ZTOkcOFwQHHjIFBgkZERgmBgQHAwcHAwdiBwQGHRMKBGYUREcLChgHBAYDEQcsJllRCgoECgcITTkGCweIBgFLBwMOPUcYkCEYAxgbCDkUDlMWcjsGKBYQBBEHBwQKAwMDAxEbBwcKBCkHBoAKCgQGBAcDAwMRBgMBBjo2FE8SCQIZAwcVPTYKCwNTmAYEHjcFCAYFDBcEBwaqTxsOAwMHQRFLBw4XJTcRFBgDGAMSNg4GTxMjAxELBggGA0EHAwQCEjsMDgMKCxcOJhQHA1MXBBwKCqcDAykDAyUHAwMHPQcHMAoDBwMJBQkFIgQEGwcKAwZbBwcHBzMKBwUFBAa7AwMDWA4HBiEHBw4HBwcDBwREAwcDByUOAwQEDQMDAykHBw0EBAsDAwYHBQURDg4HCQQEAwcECgUcBxIGBggFBAMDAwMLBg0DBQUDBwM
EAwcEAwMEIgcDBB8DFAQOBwciAwcDBAQDAwQHBAcEEQsLCwoKDQoKGwsLAA//ov7pBMgHcQICAz4DRQNJA1IDVgNaA14DZwNsA3QDeQOCA4wDkgqnuAOTL7gDFy+4ACHcuAAL0LgAIRC4AA3QuAANL7gAIRC4ABDQuAAQL7gAIRC4ABLQuAASL7gAIRC4ABTQuAAUL7gAIRC4ABfQuAAhELgAHNC4ACEQuAAe0LgAHi+4ACEQuAAj0LgAIy+4ACEQuAAk0LgAJC+4ACEQuAAm0LgAJi+4ACEQuAAo0LgAKC+4ACEQuAAq0LgAKi+4ACEQuAAs0LgALC+4ACEQuAAw0LgAMC+4ACEQuAAy0LgAIRC4ADXQuAAhELgAN9C4ADcvugA6AxcAIRESObgAIRC4ADzQuAA8L7gAIRC4AEDQuABAL7gAIRC4AELQuABCL7gAIRC4AEbQuABGL7oASAMXACEREjm4ACEQuABJ0LgASS+4ACEQuABN0LgATS+6AE8DFwAhERI5uAAhELgAUNC4AFAvuAAhELgAU9C4AFMvuAAhELgAVtC4AFYvuAAhELgAWNC4AFgvuAAhELgAWtC4AFovuAAhELgAXdC4AF0vuAAhELgAX9C4AF8vuAAhELgAYtC4AGIvuAAhELgAZNC4AGQvuAAhELgAZtC4AGYvuAAhELgAaNC4ACEQuABq0LgAai+4ACEQuABs0LgAIRC4AG7QuABuL7gAIRC4AHDQuABwL7gAIRC4AHTQuAB0L7gAIRC4AHfQuAB3L7gAIRC4AHnQuAB5L7gAIRC4AHvQuAB7L7gAIRC4AH7QuAB+L7gAIRC4AIDQuAAhELgAgtC4ACEQuACE0LgAhC+4ACEQuACG0LgAIRC4AIrQuACKL7gAIRC4ALrQuAC6L7oAwwMXACEREjm4AxcQuADK0LgAyi+4AxcQuADN0LgAzS+4AxcQuADP0LgAzy+4A5MQuAE+0LgBPi+4AU3QuAFN
L7oA0wFNAIoREjm6APMBTQCKERI5ugD1AU0AihESObgBPhC4AlrcuAD60LgA+i+6APsBPgJaERI5ugEHAT4CWhESOboBFQE+AloREjm6AR0BPgJaERI5ugEjAT4CWhESOboBLQE+AloREjm6ATMBPgJaERI5uAE+ELgBQdC4AUEvuAE+ELgBQ9C4AUMvuAE+ELgBR9C4AT4QuAFJ0LgBSS+4AT4QuAFP0LgBTy+4AT4QuAFS0LgBUi+4AT4QuAFV0LgBVS+4AT4QuAFY0LgBWC+4AT4QuAGG0LgBhi+4AT4QuAGM0LgBjC+4AT4QuAGP0LgBjy+4AT4QuAGR0LgBkS+4AT4QuAGT0LgBky+4AT4QuAGW0LgBli+4AT4QuAGZ0LgBmS+4AT4QuAGc0LgBnC+4AT4QuAGe0LgBni+4AT4QuAGl0LgBpS+4AT4QuAGp0LgBqS+4AloQuAHF0LgDFxC4AfTQuAH0L7oB9gMXACEREjm4AloQuAIc0LgCHC+4AloQuAIe0LgCHi+4AloQuAIi0LgCIi+4AloQuAIl0LgCJS+4AloQuAIp0LgCKS+4AloQuAIt0LgCLS+4AloQuAIx0LgCMS+4AloQuAI10LgCNS+4AloQuAI30LgCNy+4AloQuAI60LgCOi+4AloQuAI80LgCPC+4AloQuAI/0LgCPy+4AloQuAJB0LgCQS+4AloQuAJD0LgCQy+4AloQuAJF0LgCRS+4AloQuAJH0LgCRy+4AloQuAJJ0LgCSS+4AloQuAJM0LgCWhC4Ak7QuAJaELgCUdC4AlEvuAJaELgCU9C4AloQuAJW0LgCVi+4AloQuAJY0LgCWC+4AloQuAJc0LgCXC+4AloQuAJf0LgCXy+4AloQuAJi0LgCYi+4AloQuAJk0LgCZC+4AloQuAJm0LgCZi+4AloQuAJo0LgCaC+4AxcQuAKF0LgChS+4AxcQuAMP0LgDDy+4AxcQuAMS0LgDEi+4AxcQu
AMU0LgDFC+6Az8BTQCKERI5uAJaELgDSNC4A0gvugNUAU0AihESOboDVgFNAIoREjm6A1kBTQCKERI5ugNdAU0AihESObgCWhC4A2XQuANlL7oDbAFNAIoREjm6A3kBTQCKERI5ugOBAU0AihESOboDhgFNAIoREjm6A44BTQCKERI5ugOSAU0AihESObgAIRC4A5TcALgA1C+4AOEvuAEFL7gBCC+4AQovuAEML7gBDy+4AAAvuAAGL7gB0i+4AeYvuAHpL7gB6y+4AfcvuAH5L7gB/C+4Af8vugKAAN0AAyu6Ac4DPQADK7oDBALcAAMruAHOELgAA9C6AAkDPQHOERI5ugAOAz0BzhESOboAOgLcAwQREjm6AEIC3AMEERI5ugBIAtwDBBESOboATwLcAwQREjm6AHIBCAAAERI5uAKAELgAp9C4AKcvugC6AN0CgBESOboAwwDdAoAREjm4AN0QuADS0LgA0i+6ANMA3QKAERI5uADdELgA19C4ANcvuADdELgA2tC4ANovuADdELgA39C4AN8vuADdELgA5NC4AOQvuADdELgA59C4AOcvuADdELgA6tC4AOovuADdELgA7NC4AOwvuADdELgA7tC4AN0QuADz0LgA3RC4APXQuAD1L7gA3RC4APfQuADdELgA+tC4AN0QuAEG0LgBBi+6APsA3QEGERI5uADdELgA/dC4AP0vuADdELgA/9C4AP8vuADdELgBAtC4AQIvugEVAN0CgBESOboBHQDdAoAREjm4AoAQuAEh0LgBIS+4AoAQuAEj0LgBIy+4AoAQuAEn0LgBJy+6AS0BCAAAERI5ugEzAQgAABESOboBPgEIAAAREjm6AXsC3AMEERI5uAMEELgBhtC4AYYvugGKAQgAABESOboBmAM9Ac4REjm6AaUDPQHOERI5uAHOELgBvdC4Ab0vuAHOELgBwtC4AcIvuAHOELgBxNC4AcQvuAHOELgBydC4AckvuA
HOELgBy9C4AcsvuAHOELgB0NC4AdAvuAHOELgB1tC4AdYvuAHOELgB2tC4Ac4QuAHc0LgB3C+4Ac4QuAHe0LgBzhC4AeDQuAHgL7gBzhC4AeLQuAHiL7gBzhC4AeTQuAHkL7gBzhC4Ae3QuAHOELgB8dC4AfEvuAHOELgB9tC4AfYvuAHOELgB+tC4AfovuAHOELgCAdC4AoAQuAJ50LgCeS+4AoAQuAJ90LgCfS+4AoAQuAKC0LgCgi+4AoAQuAKF0LgChS+4AtwQuALZ0LgC2S+4AtwQuALf0LgC3BC4AuHQuALhL7gC3BC4AuPQuAMEELgC99C4AvcvuAMEELgC/NC4AwQQuAMA0LgDAC+4AwQQuAMI0LgDCC+4AwQQuAMN0LgDPRC4AybQuAMmL7gDPRC4AyrQuAMqL7gDPRC4Ay3QuAMtL7gDPRC4Ay/QuAMvL7gDPRC4AzPQuAMzL7gDPRC4AzXQuAM1L7gDPRC4AzfQuAM3L7gDPRC4AznQuAM5L7gDPRC4AzvQuAM7L7oDPwEIAAAREjm6A0cC3AMEERI5ugNUAtwDBBESOboDVgLcAwQREjm6A1kBCAAAERI5ugNdAQgAABESOboDZgEIAAAREjm6A2wBCAAAERI5ugN5AQgAABESObgCgBC4A37QuAN+L7oDgQEIAAAREjm4AoAQuAOF0LgDhS+4AoAQuAOH0LgDhy+6A44CgAOFERI5uAKAELgDkdC4A5EvugOSAoADhRESOTAxATMyFzMyNTIXFSIHFxUHFhUGBxYVIxYVIxQXFQcVFwYdATMVBxcHFhUUIxcVFhUGFRYVBxYVBxcVFCMWFQYVFhUHFwYdATMVBzMVIxUXBxUzFRQjFxQjFxUHFwcWMxQHFxQHFhUUIxYVIhUyFQYVFwcVFwYVFwYjFxUUIxcGFTIVBxcUIxcVMhUGFRYVIxcGFRcHFwcXBhUXFRQjFhcHFRcHFhUGFRYVIxcVBiMWMwcVFxU
HFhUHFhUGFSYnByYjBiMmIxQjJwciNQcjIjUiFScHJyMXByYjFSYjBycHJiMGIyYnBycjBzUGBzIVIzUjIgcmIxcjJiMHJiMVJiMHIyI1BycUKwEnFSI1ByMnNDM0Jzc0JzUzJzcmNTQ3JzI1JjUyNSI1NDMnNSI1NjUiPQEzFzUmIzYzJj0BNDMmNTI3JzMnNTQzJzcnNyYnNyc3JjU3JjUzNCM3JicyNSc3JjUzJic3JzYzJj0BMzUnMjUjNTMnMj0BJzMnNTciPQE2NTQjNzU0Myc3NScyNyc0Nyc3Jzc0Izc1JzM1NCc2NSYjNTQ3JzciJzQzFjM2MxU2MxYzNjMXNxczNjcWMzcWFzciNTI1FzI3FjMyNxQzNRYzNDMXNxY7ATcXNzIVNzMWMzYzFDM0NxYVNxU3FzcXNxYzNxYVNjcnMjUXMjcXNjMWMzYBFxQjFAcUMwcVFyIdARQXBxYdARcjFDMWMwcXFQcyFQcUFyIHFRciHQEXIh0BFyIVFh0BFyMUFxQHFyIVFwcUFwYVFBciHQEWFwcXBxYXBh0BFBcUBxUXIgcXFAcXFAcVFyIVFhcyFzcUOwE3FTM3FTczNxU2MzIXNDcXNjcyFzcWOwEyNTQnMj0BJisBIgcmIwYrAScUBzQnFCMmIwc0KwEGKwEiJyIHIic3NCc2NSI1Nyc3JzcnMjcnNDc0NxYVMjcyFzY1MjU0JzY9AScyNTQnNjMmIyIHJwciJyIHJisBJic3NCc3Jic2NyY1NDcXNDMUOwEyNxQzMjcWOwEyFzcXMjcXMjcXNxcyPQE0JzcnNj0BNCcGBzQrAQc0JwYrASInFCM0JxQjNSIHIicGKwEnFCMmIyIHJiMiBRUGKwEnNAEVIzUXFCsBIic1NxYnFSM1ARUjNRMVIzUFMhUiByYjNTIXMhUnNRcWMxQrATQnBxcVIicXMxUGIycmJzIHFjMVIyInNTY1HwEHJiM1BBQQERMVCh8rCA4G
BgsLCgUFCgUbFgsLCxUFBQUFBRsbBQUFCgUKCgoFCg8KCgoKCgoKCgUFBQUKBQUIEhUFBQUFCgUFCgUFGhUFBQUFBQoFBQoKBQUQAgoFCwYGBhAQCgQKBgYFDwQECgoEBAQKBQoFBAoKBAoKLgk+Gh0NLRIKBQsFCwQLBQYEFnMKFBQKDSIGGQsVHwoGCAgbLQYaChsQBAULBAwKCgUFBQ4HLwgNJQQgCgYKJQoKCw81JAsGBgYQCgUFCgUKCgUFCgUFCwUKBQsGBQUGEAUVCQcFBQUFEAYLBQULBgYGBgYGBgYGCgYKCgoEBAQLCwYFBQoKBAQKCgoKBAQEBAoKBAQGCgQPDQgGBgYGBgYGBgoPBQULBAQECgoLKgEJAgkKBQsFAggLCgs0EBQKCws/DwUFBRoGCgoLBBsFFw4PNQoKCwsPCwoGGgQOCCUEBSUVGgsaCh8LEQ4gGg4wBQUaAhMFCwULBAb82QcHBgYDAwMKAwMEBAQGBwMHCwQEBwYBBAQEBAQEBAMDAwMHBAQEBwcEBAYEAwMDAwQEBwoDBAIGAwMGAwMGBxQjBgQHERcHESYGnRECCzAHDVISNRESAwcbBwMFBSkOFwYIFxEiGBEYAxELBgQKFgIDBgEGARQHAwYDAwMDBgMDAwkFBAQvCh0MCAZRIgMHBAQHBQUFEwMHGAYEBwcGEwxzBwQEBAQEAwMEBBwRAwMfCQsEDg0GCBQWGgYHBAYHCg4HEQ0VBwMDAxELTQMEB0ANDgsUXAMmAwgTBxEGCCIoBAYHCwYyDDMCgAUGAwf9zyK7BwMGAQQNmQcBxQQ3BP4dBwMHDgoJDwcRyAcHBwMKuBESBrEfDAIfCBYUXAoSHwYBBz0OCgsKB3EPCiIFIgoECgEJCkkJBRgKCBUFFAkiAQkUBSsKCggLBQo/AQ4FDioHCQoFBQoTMRMKAQkICwUdAQkYCg8JBQ8OBQoFCgQKDw4KEyMEDxgFCggLBRQJBQUBC
QodCRQDBwkPCgkFIgoFBQUdBRgYDx4EDwknCAwJChgeGAgLDwUFCSwZBB4JEhUBCQoFCQUUHRgFDw4PCAsFEAgSBwUKBQUdBQoKBQUFBQUFGQUYBR0FBQ8KBQUTGAoKBQUFBQ8ECQUFCQkFBQkODgQEBAkFDwUFBQUFCSINFQUZExQOBBkUCQkLBQoEChgFCgUKCQUFDw85CwUEJgYPIgoEBSIKHQpDCxMKCgkFFAkFBRQfWgoFUwgLIR4FCh0QDQ8nGAUKVwoTGQkUCgkKDAcFGSIFHR0PGB0KBSIJCgodBQoODwULCAoFBQkVIQoTSSwKCgUFBQoFDgUKBQUPBgkKBQUFBQUFBQ4ECQ4FBQkEBAQECQUFCQUDBgkFBQkEBAQJBQUFBAYJBQUFCgUFCv6XDgoQVgoREQcEBhUeBwYIGAYHxQ4YCjADBwgdBwMHBCUHAx8RAwYIGwcDBwMHSAMHDQYLDwYDBwMEBxQHGBEZCRIMBystGXNOBxsKDg0RBggOEQMPAgMDAwMHBAQEAwMRBAQGAwMEBwMDtA8MBBsKAwMHBAQDBAMEBwMDFAcHFBgXYAcDBAYVDRERDm0UBBcWEAUFCgQKByIEBw4oERgDBxEOPQQHAwMDAx04FQMHBzYRGXYSCRQEBAQEBwMHBAcEBAQEBwMDAzMNFhoOER0WFBUQCAkEBAYFBAoDAwQEBAQHAwMDAwMHSwcKAwb+1gQHhAcHBgcIAQYG/qkHB/3nBwcsBwQEAzYHAwQEFAcMDywDCg0iCgMGFgwKGAMHAwkIGAMOCwMAAAAj/87/EQStBucB0ANvA3MDegN+A4QDjAOSA5gDnAOkA6gDsAO3A7wDwAPGA8wD0gPYA9wD4gPqA+8D9QP9BAEEBwQPBBMEFwQcBCIEJwQuAAAFNCcHIicGIyYjFSYjBiMVMxUmIxUmJxUnFScHJiMXFSI1ByMnFScHJisBFSMmNQYjNSMVIzUHIxQjJwYjJiMGIy
YjBzQnBiMmKwEiFSI1BhUmJwcnNTQ3JjU3Jic3JjU3JjUzJzcmNTYzJiM1Myc0MyY1NjMmJzcmPQEzFjM1JjUyNSY9ATMnNTM1IzY1Jzc1JzUzNSc1FzM1Izc0JzcnNyc1NDMnNj0BJzYzJzU2Nyc2Myc1NDM0IzcjNTQzNSc0Myc1NjUiJzMXNSc2MzU0IzUzFzUmJzc0IzcnNj0BJzUyNSI1NjM1JjU3JiM3FzM1NDMnNjM1IjU2NSYjNTI1MzIVNxc2MzUjNTMyFzM0MxcyNxc3FjM1MzIVNzMyFTI1MhUyNRYzNRczNDcyFzM0Mxc2MxU3Mhc3FzQ3NDcUFzI3FzYzFjsBMhU3NjMVFBcHFjMGFTIVIhUyFyIVJxUXIgcWFQcWFwYVFBcGIxYdARMjFxUjFRciBxUyFSIVMhUHFwcXBxciFRciHQEzFSMVFyIVMhUiHQEUFwYVFhcGBxcHFwYjFhcUIxYXBhUXBhUXJiciFSInByciByYjFSY1ByMnBisBJwYrARQHJyIVJyIDNCsBBzUGBzQrAQc1Bgc0JwYjIicGKwEnFCM0IyIHNSIHJyIHJxUXIhUXBzIVBxcjFBciBxQzFAcWHQEXIh0BFAcVFjMGIxUyNxYdARQrARUzFSIHFQcyFQcVFDMUBxciBxciHQEXBxQzBzIVBhUUMwYHFwYHFhUiFRYXIhUXIxcUBxYzBxUXIhUUFwcUFwcUMxQHFwYVFyIVFBcGBxYdARQHHwEyNTIVMjcyFzczFwcUFzQzFBcyNxYXNDMUOwE3FTI3FTM1JzI3Jj0BNyInMyc0NzQjNTMWFzM1NDc0JzI3JzY3JzI1JzMnNjUnMjcmPQE0NyYnMjU0JzI3IjUyPQEnMjcnNjMnNjMWMzcWOwE3MxcyNTIVNjUnMj0BJzI9ATQ3NScyNSYjIgcmIwc0JwYjNCMHJiM0JzY1JzI9ASY1MjcXNTQnNyc3NCc3JzY3IjU0NxQzMjUyFTI
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
jUnNyc1NyY1NjUmNTcmJzI1Jj0BNDMmNTY1JjU3NSc2PQEmIzc1JiM3NSc3FzUnNTQzNCM0Myc1JzU3NTMyFTYzFzcWMzYzNSc3MxQzNxc3FjM3FDM3MzIVNjcUFzcyFTcWFTcWFzQzFjsBMjcWMzI1FzY1MxQzNDMWFQcWMxUjFDMVIxUHMhUGFTIVIh0BFDMHMh0BIhUyHQEiBxcHFyMWFxQjFjMHFTcXIxQXBiMXBhUyFQcVFDMHFRQHFyIHFxQjFxUUBxUiBxQzBxQzBxUGIxYVIgcWFSMXBzIVIgcUMxUjJxQXBh0BFzczFSIVFh0BMhUHFDMVBxUXIwYVFBciFRYVIhUWFwcXBiM0IwcnIgcnBgEnBhUiJwYVIwYjBgcXIgcGIxQXBgczFQYjFBcGHQEHMhciFRQXBzIVBzIdAScHFRciHQEXFSIVFwcXFSIdATIXBiMUBxQXBh0BFDMUBxcjFhcHFwcWMwcUMwcUFxYXFhczNxQXMjcUFzcUMzcyFzYzFzcWMzcXMzY3FDM2NRc2NzYzNjM2NSYjNTMyFzI3IjUyNzQnMhc2PQEnMj0BJzI1Jj0BNDciNTY1JzI1NCM1Mjc1NCcHJiMnFCM0KwEHNQcjBzUiByciByYrAScUIyYrAScGHQEXIxQXBxYzBxUXIgcXFAcXFAcWFzI1MxYVBxQXBgcWHQEXIxQXBxYVFAcXIgcVFBcGHQEXIwYjFDMGIyInFCM1IgciNSYnJj0BNyI1NDcnMjcnNj0BJzI1JzM0Jzc0JzI3NTQ3NCc2NzQnNzQ3NDcWOwE3FhcWFwcyFRQjFDMHFRQzFSMGBxQXBgcUOwEyNzIXNzMXNDMyPQEnNj0BJzI1NCczJiM0JwcjJiciFSM0IzQzNSYnIyIHIycHNCciFSYjBiMnFBcyFSM1BzIVBiM1BxQzFSIHNAUVIzUFFh0BIyYjNTI1MgcVIzUHFSM1ARUjNRcVIzUHFCsBNRcVIicHMx
QXFSInNAUVIzUFFSM1BRUjNQPPBgwHBwYpExAQByIfIhcoMiApAQsRDAYKDUsdIigZB2ENOUc6BRcKCg0VGAYMDAcHDAYGBgYGCgcREQYICxMGEREGDAYGBgYDCQYGBgYJDhcDCQYLBQUFCwYMDAkICwsFBQsLCwYMBgYMDAYLBQYGDAYSBw0NDQ0FDBENBAQXDQoKEBcNBg0kBQwdDAsLCwwNBRINBQ1FNQsLBx0MEAcFZQp0LgcXNA0JSQo4HzwMChQhBGR0BwoNXQYHEAsXDAcNBgYNDQ0NHQwLBwwMDAYHCQQEDQYMBgwGBgYGBgwMBgYHDQkIBAQEBAYGBgYGBgIKDAwGBgYGCgoKBxcGCgQEBAwMHAQGBhgcBAsGBhEFDAwGBgwfG0wpDAhtCin+sAZBAwcRCksEVisEBg8OCgQHAwYFBQQHBAQDAwMHBAQODgMDAwcOBAsHCgMHBQUDAwMGAwMDAwcDBwQKCwQOBDMRSB8sDQcKBAYOKQMHB04ZAgcHFQYDBwQ9HgQNDioaMggVBmMLEQQJCwoOAwMKDQMHCgMDAwMDBgMHBAQVEAUYBx9KEQQDAwcRGAcDBwcHBhMMGBEDBghAGBUEBAQEBAcHAwMEBAQEBAYSHwdAHgMDBAQDAwMDAwMGBQEDAwMHHhEDFSgDGAQDBwMdHUQDAwMHBgUEBwMGAwMDAwMHDQcHBAoDCh43BgcEB0grGw4DBgYDAwoHBBADAwQwKRQ6CAUVLBElHAQEBAQHAwIFHgcDEEkHBhUVASEHBgEDsQcbCj4DBggRrgcLzAcFBQ4HCg4BWw3+lCkEMQwOCk4HnQYC9gQ3DiUHB1IGAdoLAwkL/dkEAq8H/TYD/tMBCQsGEQsLDAUKBAQECwcEBAQEDAkGEAUFCgsLESAFDAQRJBELBQUFEQoLBQUWBAYFGxswCyUbBSAGCysLBREVJUAGNQULCwYVBTwaJg8LCgsLAQpLCwoREBAPCwYgCwU
bBQoWIBYQAQoeEQcFSgYBChAFGAkKBQEKEQQRAQkFIRsEFgtGFQUFBREQG2UbGjYRBSYKEQwFBQUFBRYEFRUEBAQECgoECwoTEwsFBQQHBgsFCgoFCgUMEBEQCw0eCx8MHwcVGgsLBQULBgsVCwQ2CwYPVgZFMAwENgsVBQsMCRAKCwYLDxEQG4UMCiYVIQQLEAwKEBsEFgsmKwopAiEJDAoQCwsfDAUFCiUWCwsGCwsKBg8HChAGBAsbSR0FG0YLBBESKRs2KxwGBhEGCAegAxQHAwIIJSFhBiZYBAYRMAMLAwcLCU4RNwMEBi0DDgYEBwcDBwMfCgQRBlkKCiIHAwsdLQgGEwxHBwcGByQMEREHORELDSxLLC0DGwMDBAQEAwcEBB8EBAoGBgMZBgQJBQcKDh4fXzcGBwdPA0EGDgMHEAQHAxQYBAYHDhYZBBITFQMfCg0wGAoDBgQEBAQEBAMDAwMDAwQEBAMEFAMHAwcHJQoLBhEHBAYOAwcdFhEVIhcIBicFBggYBgQHBgcEBwYbBwcIBgYHDhFfAxwEBAQEBwoVHsIEEQYJExEXDjoHAwcRBwMHBwgT+y0JCwYBJhAgIYglSx8KBAQPGilcBgcHAwcbBwQcEAcGBCkUBwQEBAczJhQGCx8RAwkLFS9VAz0wFRUHAwUTBzoEBQYHEQQEBC8HByYGCxEiAwMEBhMEBFITBQ0lAwtPAwOtAwP99AYGFwQEJgcHPQcHLAQGBAcGdgcHYwMDGAYGADL/zv7fBccHOgIFA+QD6APwA/cD/gQHBAsEDwQVBBkEHQQhBCcELgQ0BDsEQQRJBE8EVgRaBF4EYgRqBHIEdwR+BIMEigSRBJUEmwSfBKYEqgSuBLIEtwS9BMQEygTOBNQE2QTdBOEE5wTuBPIAAAMjJj0BNDMnNTcnNDcmNTQzJjU2Myc1MzUiNTcUMzc1IzcnNTQzNSM1MzUnNTQzJiMUIzU0Myc3JjU2NSInMjUn
NzQnNTI3JzYzJzcnNj0BNCM1NzQjNTMnNTY1NCc3JjU2NSc2NSc3JjU0Myc1Nyc2NSc1NDMnNDMnNyY1NDcmPQE0Myc1NyY1Nj0BJzciNTYzNSc2NSY1NyY1Myc1NDMnNTY3MzIVNzMyFzcXNDMVNzIXNzIXNjMWFTY1FzM0MxQzNxczNSM0MzIVIhUXNjUXNjMUOwEyNxYzNzIVNjMyFzY7ATIdARQHFyIdARcUIxUUMxUiBxcUBxcGIxQXBzMVBiMWHQEWFwc0IxQHFhUiFTIdAQcyFQcyFSIVJyMUBxYXIxcHFwYVMhUiFTMVIhUXFCMXFRQjFxUjFxUHFjMVIxUyFQYVIzUjFRQXIhUyFQcnBxUyFwcXFRQjFBcVBhUXBxYVIhUXBhUyFxUiBxUXIhUyFyMVMxQjFRcjFjMVIycVFxUGIxcVIxciFRYzFRQHFBcHNxUiHQEzFSMVMxUjFDMHFRcVMxQHFhcGKwEmNQciJwYVIicGIyInByYjBiM0Jwc0IxQjIicGIzUHIzUiFSYjBiM1ByYjBiMnBycUIxcVJiMHFwc0JzQrARcHJjUjBxcVIycjFxUjIicHFyIVJiMHJiMGExQXBh0BFyMUBwYVMhUHFwcUFwYHFhUUBxQXBh0BFyIVFBcHFwcUFwcWFRQHFyIVFhciBxYVFAcXBxQXIh0BFyIHFxQHFBcHFwcWFRQHFhUUBxYdARcjBhUHMhUUBxY7ARYXNDMXNxc3FzcVNzIXNjUyNzUnMjcmNTY3NCc2PQE3IjU2PQE0JzU0Nxc0MxYzNxQ7ATcUMzcWFxYXFQcyFyMWFRQHMhUiFRciBxciFRciHQEXIhUXIh0BFyIdARcjFBcGHQEXIxQXBhUUFyIdARYdASM1IwYdARQzMjcWFzI1Fhc0MyY1MjczMhc2PQEmNTQ3FDsBNCc2NyI1NDcmPQE0Nyc3NSc1NjciNTI9ATQnNTIVMj0BNCc2PQE3IjUyPQE0JzY1N
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
2Nxc2MzIXNzIXNjc2FzQzNxc0MxYzMjcXNDcXNzYXNRczNxYXFhcGBxQzBxQXIgcVFjMHFTcHFzcWIxUUMxQHFDMUIxQXBxUXIh0BNhUUIxcUBxYVFAcXFAcXBhUXMxcGIxQzBhcUMxUUBxczBxcGFRciBxYVFwc2HQEHMhUHFhcWBzIXBzMUBxcjFgcyFQcXFgcXBzIXFAcXBxcGBzIVBxQzFCMUFwYHJyIHJxUmIwcmJwcjJxQHIicHIicHJicUByMnFSYnByYjBgciNQYVJwcmDwEmIyIHJiMPASc3JxYHJwcnBgcmIwYHJyY3Jic2NSc2NyM1NyM1NzUiByMnNjcnNyc0MzQjNTI3LwE3BjU3JzY3IyY3JzQ3NCc0Nyc0Nyc3JzY1JzI3JzY3Ij0BNDc0BzU3JzY3IjUyNyYnNjcmJzU3BjUzJgc0Nyc0Nyc2NxczNjcXMzY/ATIXNzMXJjMXNjMXNxQzNyY7ARM0KwEiBxYXBh0BFBcGFRYVIhUWHQEXIh0BFBcGHQEUFwcUFwYVFBcGHQEXFQcVFyIHFwcUFwcXBh0BFBciFRQXFAcUFwcUFwcyFQcXIhUUFwYdARciHQEUFzcUOwE3FTcyFzY7ARc0MxcyNTQnNjcmPQE0JzY1JzY3Iic3Jzc0JzI3JzY1NCc2NTQnNyY1NDcnNyc2PQEnMj0BJic3IjU3NCcyNzU0Jzc1JisBJxQjNCsBIicGKwEHJyIHIiciBycHNSIXFSM1MxUjNQMXFAcjJzQXFSM1NBcVIzW4BwEHATAOBQkXAgoKDg4OBggIBhIHNAcDBAcHAxIGAQsOAzASBA4HCQwOCg4HBAcKBAYBEhwRAgcDAgMDBwEGAgcDAQoBBwcHBAQEBgQDDgcEAwQDBQcIBAEGAQUGCw0BCgoBCwYDAgMGAwQBBAQDBAcBAwEFBQIEBAMHBwEEAwoHAQMEAwMFCgQDAwYCAwMHBwQMEgcDCBgnBwYVAREDBwsD
BwcEBw4KDgQHBxYUBh0OEQQDHyAKFjcOGAQIBhAFFAQHAxUBBxMGRw8MBwcLChkBBAQEAwQKAQcDBw0DBwMBCQIJBgQHCwUJBAEDAwkEAwMDAQIEBwQHBQoIBAQFBAMEBAcCBwYVDgEIAQMEAwUFBAMDAQIDAwQHBwEECgMJBwQJDAoPAhoGBgIGAwgBBBEGBQsHAxUBBwRBAwQFBQkICgMDAwMDBAQEBAcDDQMDDQcHAwYEAwMDBgMDBgMDAwMDAwYDAwMDBgMDAxgpAx8GHw8MDg0VIgMHMwMGBAQDAwMEBgYEAwMDBgcKBAcDAwMDAwMDCgQHAwMHAwMDAwMDBwcEBQUYIgQDDhoVEBwHBwMGAQYLCg4HByHLBkoG/xQfAxEKB5kGBuAREQgBCwYBBQkIAQUGCgYFDAEJBgUGBQELAQsGAgUGCgwQBgYLBgEGBgsGCAgGIBwBBR0GCyMXCwsdAR0dARcMCwsBBQYGCxIcCwYMAQsMFw0KCgwcHiILAScLDAYFEgsmHwsGCwE+NAseBB00CgwXDAEGER0GBhEWIlEcDAUMET5iBksFEwoiHBEOJhwMCxkyBhcLCwYLVwEGBwsGDwYLCwcFBgYFBgUMCwUFAQUFBQ8GCgESBhAIBAwVAgcQBgojAQYLBQsBEAYrAQwFAQwcDAsMJwsGHBKJBgsFIwYGCwEXWyILEgsLEhwuDAEGHSJCCR8xHAoCDAsJAiMPJDkMC1kDHBIcERcMBQoCHQIMARwMOQYiUBwBEQkOIh0BBi4BCgIRBgyOLhcFAQwLAQwBCwYGBgUSCwYFARH+rgQVRgUJSEgiLwUQBgQDBgg2BwMVBwYGCA5EFAddawcEAwcfBgoLCgoDBxgHBxASIgYTDDMlHAMDBwQGBAcNDg1PAykRAxQSBgcmEQoUCAYHAwMDAwMDAwMDLAMHKjwGCwcoKRMMEUoZVRcHDl9YjxERBwgTIhERIgcGCAsTBz0HVSUVEQoUC
hgOAwcEBksKBgEHBwoDAwMEBAMHBwcEBAQEGAMDAwP9hA0bBAMptw4HBgYHBwAO/87+6QQOB3ECAgMbAyMDJwMrAzADNwNBA0YDSwNRA1UDWQNdA+O6AWMDBQADK7oBBwMFAWMREjm6ARUDBQFjERI5ugEdAwUBYxESOboBIwMFAWMREjm6AS0DBQFjERI5ugEzAwUBYxESOboBPgMFAWMREjm4AWMQuAFR0LgBUS+4AWMQuAFU0LgBVC+4AWMQuAFX0LgBVy+4AWMQuAFa0LgBWi+4AWMQuAFc0LgBXC+4AWMQuAFe0LgBXi+4AWMQuAFg0LgBYC+4AWMQuAFp0LgBaS+4AWMQuAFr0LgBay+4AWMQuAFt0LgBbS+4AWMQuAFv0LgBby+4AWMQuAFx0LgBcS+4AWMQuAFz0LgBcy+4AWMQuAF10LgBdS+4AWMQuAF30LgBdy+4AWMQuAF50LgBeS+6AXsDBQFjERI5uAFjELgBfdC4AX0vuAFjELgBgNC4AYAvuAFjELgBgtC4AYIvuAFjELgBhNC4AYQvuAFjELgBiNC4AYgvuAFjELgBjdC4AY0vugGYAwUBYxESObgBYxC4AaDQuAGgL7gBYxC4AaPQuAGjL7oBpQMFAWMREjm4AWMQuAGn0LoBsgMFAWMREjm4AwUQuAKp0LgCqS+4AwUQuAKu0LgCri+4AwUQuAKy0LgCsi+4AwUQuAL70LgC+y+4AwUQuAL+0LgC/i+4AwUQuAMD0LgDAy+4AwUQuAMH0LgDBy+4AwUQuAMM0LgBYxC4A1/cALgA1C+4AOEvuAEFL7gBCC+4AQovuAEML7gBDy+4AAAvuAAGL7gB0i+4AeYvuAHpL7gB6y+4AfcvuAH5L7gB/C+4Af8vugAJAAABCBESOboADgAAAQgREjm6ADoAAAEIERI5ugBCAAABCBESOboASAAAAQgREjm6AE8AAAEIERI5ugByAAABCBESOboAugAAAQgREj
m6AMMAAAEIERI5ugDTAAABCBESOboA8wAAAQgREjm6APUAAAEIERI5ugD7AAABCBESOboBBwAAAQgREjm6ARUAAAEIERI5ugEdAAABCBESOboBIwAAAQgREjm6AS0AAAEIERI5ugEzAAABCBESOboBPgAAAQgREjm6AXsAAAEIERI5ugGKAAABCBESOboBmAAAAQgREjm6AaUAAAEIERI5ugGyAAABCBESOboB9gAAAQgREjm6AncAAAEIERI5ugKBAAABCBESOboCvQAAAQgREjm6AyUAAAEIERI5ugMnAAABCBESOboDMAAAAQgREjm6AzMAAAEIERI5ugM8AAABCBESOboDRgAAAQgREjm6A00AAAEIERI5ugNPAAABCBESOboDUwAAAQgREjm6A1UAAAEIERI5ugNbAAABCBESOboDXQAAAQgREjkwMRMjIicjIhUiJzUyNyc1NyY1NjcmNTMmNTM0JzU3NSc2PQEjNTcnNyY1NDMnNSY1NjUmNTcmNTcnNTQzJjU2NSY1Nyc2PQEjNTcjNTM1Jzc1IzU0Myc0Myc1Nyc3JiM0Nyc0NyY1NDMmNTI1IjU2NSc3NSc2NSc2Myc1NDMnNjUiNTcnNDMnNSI1NjUmNTMnNjUnNyc3JzY1JzU0MyYnNzUnNyY1NjUmNTMnNTYzJiM3NSc1NyY1NyY1NjUWFzcWMzYzFjM0Mxc3MhU3MzIVMjUXNxczJzcWMzUWMzcXNxYzNjMWFzcXMzcVNjciNTMVMzI3FjMnMxYzNxYzNRYzNzMyFTcXNDsBFzUyFTczFxQjFBcHFBcVIxcHFhUUBxciFRYVIhUyFRQjFxUyFQYVMh0BIycVFjMGIxYdARQjFhUiBxcjFxUUIxcHFwcWFwcXBxYVBxYVIxQzBxYXIhUXBxYVIxYXBxcGIxYdASMVFyIVMxUjFyIdARcjFxUHMh0BBhUUMwcVFCMXBxUXIgcXFAcXBxcHFDMHFRcjFRQXBhU
WMxUUBxcHMhcUIyYjBiM1BiMmIwYjJwcnIwYHJiMHJicHMhUiFSciByYjIgc0IxUmIxQjJwcmKwEHJwciNQcjJiMGIzQjFAcmNQc1BycHJwcmIwcmNQYHFyIVJyIHJwYjJiMGARYXFAcUFwYVFyIVFwcUFwYVFyIHFRciBzIVBxYXBhUUFwYdARcjFwcXBh0BFyMXFRQHFh0BBzIVIhURFyIVFyIdARQHFAciJwYVIicGByYrAQYdARcVBh0BFyIVFBcjFhUUFyIdARY7ATcXMjUXNjMyFzI3FBc3FTI1MxcyNRc2NTIXNjcUMzY1NjU2NTY1IjU2NzUnNjc1JzI9AScyPQEnMj0BNDc1NCc2PQE0Jzc0JzQ3Jj0BIzc0Izc1JzY1JzcjNDc0JzM0Jzc0JzM0JzY1NCc0NzQjNDcmJzYzJzQ3JzM1NCc0NzQnNycyNyYnNjUnNDc0JzY3JzQ3JzI3Jj0BNzQnNDcnMjcmJyMHNCMHJxQjJicHJwYTMh0BIyInNTMVIzUDFSM1FxUiBycfARUjIicyBRQXNzMUByY1MiMVJiM1BxUjNTIXFScjNxY3FSM1BxUjNQcVIzVdDQ4QEggaIwcKBAQICAkEBAkFFhEICAgRBAQEBAQWFgUFBQkECAgIBAkNCAgICAgICAgEBAQECAQEBg8RBAQEBAkFBQkEBBYSBQUEBAQJBQUJCQUFDQkJBQkEBAQNDQgECQUFBA0EBAkJBAQECAUIBQQJCQQICCcHLRUYCyYOCQQJBAkECQQEBRFfCRERCQscBRUIEhoIBQYHFicEFggWDgMECQQJCAkEBAQLBycHCh4FGggFCB8ICQkNKx4JBAQEDQkEBAkFCQkFBQkEBAkFCQQJBAUFBA0EEQcGBAQEBA0ECAQECQQEBAQEBAQEBAgFCQkJBAQECQkFBAUJCQQECQkJCQQEBAQJCQQEBAgEDQoHBAQEBAQEBAQIDQUFCQQEBAgICSMBBwIHCQQJ
BAEICAkJKw0RCAoINA0FBQUVBQgICgMXBBMLDSwICAoIDQkJBBYECwcfAwUeERYJFQkaCQ4MGhUNJwQEFgIPBQgFCAUEAVMCBQQRAwcEBAQEBAQGAQMDBAQEBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMYQQMHEQsGIwYGBxEKEREDAwYDAwQECQUKBwMEHhIDBRkDGRsHFwQRBxQ6AwcaFgMYJSYeAwQJAwgJAwMDAwMDBwQEBwMGAwMHAwcEBAQEBAQEBAQEBwcEBAQHBwQEBAMEBgMDAwcHBwQEBAQDAwQEBAcHBwoDBwcDBAQHBwQEBAMJJxERAwceBDQXBgdmLwcDBgFVBx4ESAQHA0sDDQYBC/6oFA4DKQ0GGxICGwcHwQ0VBB50Dk4Hiwf+6Q8KIgUiCgQKAQkKSQkFGAoIFQUUCSIBCRQFKwoKCAsFCj8BDgUOKgcJCgUFChMxEwoBCQgLBR0BCRgKDwkFDw4FCgUKBAoPDgoTIwQPGAUKCAsFFAkFBQEJCh0JFAMHCQ8KCQUiCgUFBR0FGBgPHgQPCScIDAkKGB4YCAsPBQUJLBkEHgkSFQEJCgUJBRQdGAUPDg8ICwUQCBIHBQoFBR0FCgoFBQUFBQUZBRgFHQUFDwoFBRMYCgoFBQUFDwQJBQUJCQUFCQ4OBAQECQUPBQUFBQUJIg0VBRkTFA4EGRQJCQsFCgQKGAUKBQoJBQUPDzkLBQQmBg8iCgQFIgodCkMLEwoKCQUUCQUFFB9aCgVTCAshHgUKHRANDycYBQpXChMZCRQKCQoMBwUZIgUdHQ8YHQoFIgkKCh0FCg4PBQsICgUFCRUhChNJLAoKBQUFCgUOBQoFBQ8GCQoFBQUFBQUFDgQJDgUFCQQEBAQJBQUJBQMGCQUFCQQEBAkFBQUEBgkFBQUKBQUKBx0dBQQGBXYHA1UDBwcMEy8iEREiETMEBiMGBggHBgYIKQcXEQ4eFQMHGAMIBgYIDSIEA/76B
wMHAwQ7OBEVBAQGAwQDBAYFCgMHAwcbEQQJCzwMAwcDEQ4EBwMNAwcOCgQEBAoKCgYECQMECQMOAw0OIgozGAQYCgMHDzgEEQoDBwMEBwNBAxgHBwYGCAoODTAFCAgGBggXEQsGBBQHAwcHAwcEBgQHHgcRCAYGBAkLBgEDBAcHJRQRBiMOBgYBCg4DBxUREQYcBgQHCg0GAUIkHwkLKQoGCBQKBgEPFwYtFxUEBAQHAwQJAwMG/Y4HAwcDAwP+WgYGKAQDB50HAwexBAMHCQgFBQcEAywHDl8ECg4NCgQEBwcHCgQEAD//zv6cBVwG/QGCAzgDPgNFA00DUQNYA2ADaQNtA3EDdQN5A38DhgOOA5IDmgOnA64DtAO6A74DwgPGA80D0QPWA9oD3wPjA+cD7APwA/UD+wP/BAMECAQOBBMEGAQdBCQELwQzBDgEPwRFBEkEUARVBF0EYgRnBG0EcgR2BHwEgASEBI4ElAAAASciNyciFScHIicHIjUHIycGIycmIycHJicjByYnNyY1NyY1MjcjNDMnNzQ3JiM2NyYjNDMmJzcnNRY3Jj0BNhcmJzcmIzc0JzcnNyY1NyY1NjUmNTcmNzMmJzcnNDMnPwEmJzUyNyI/ASc3Jic3MxYzNyc1Myc1MyYnNzQnNjcmNTcWFzI3Fhc3FzcWFTcnNzMXMjcWMzI3FxY3FzcGFzQXFhcyNxc2NxU3MxYVNjcXNjMXNjMWFTczFzQ3FzI3FTcWMzcWFwYVMhUiBxcUIxYXBxcHFgcGIxcHFg8BFwYjFgczBxYVJxcGIxYHBgcXFCMXFRQnFxUGBxYzBxQXBxcjBzIHFSIVBhciFTIXFScVBhcHMhUHFgcUBxYVBzIVBiMVFDMHFRcGFTIVIhUWFSIdATIVJwcXJwcXIhUHFjMGFRciFRYXBgcGBycjBzUGLwEHJjcHJiciByI1ByciNQYnJicGIycGIyInByYnBiciJwcnBiM2JwYnNQ
YnIicVJzcjAwYVFhciFRYdARQXBgcyFSMWHQEHFh0BBzIVFAcWHQEUBxYVFAcWFQcXBxQXBzIXBhUXIhUUFxQHFxUUBxYdARQXNjsBNxc0MxQzNxUyFzYzMj0BNzUnMj0BNCc3NTQnIwcjJzU3FzM2NRczNSMVIzU2NzU0JyMiByYjNjcUMzc1NCc1MzI9ATMUFxYXFjMHFBcWMxUjJisBFhUWFSMWMxQXMzI1Mhc3FTcVMzcUMzI3FzcUOwEyNxQXNxQ7ATcUOwEyNxYzNjc0IzQzJicyNTQnNj0BIjUyNTQjJic3JjUjIgc0IzY7ARc0IzQzNCc3JjUzNSY1NyYjNTQjJiM3JjU0IzU3NSc0NyY1JzI3Jwc1Mj0BJyYjNDcnNDc1JzI3Njc1JzY3JzI3JzYzNTQ3NjcnNjUXMyYjIjU3MxcyNzUnNjM1NzU0IzUzNzQjNjM0JzY1NCcHJjUiFSInIgcnBycHNSIHJisBBzUiByInFCMXIyYnBgcVNzMUIxciBzUjBgcWFQcmKwEiBwYHIyInNTciNTQ3NCc2PQEmNTMyFzc1NyI1NyYrASInBisBJwYjIicHIicGBRcHIic1BRUjNCc1FgUzFRQrATU0BSM3MjMWFSMiJzIFFSIHJic1FjMVFCsBJzQ3FgUjNTIFFSc1BxQjNRcjNTIXByc1NzIXMhcjJiM1OwEVIyI9ATQFFSM1BTMUFxUjNCc3FyIHNCsBIgcnNDczBxcHFSM1JwUUKwEnNyEyFSMiJxcVIzUXFSM1BxUjNQcVBisBJzQTFSInBxQrATUXFSM1FxUjNCcFFSM1BRUjNAUVJzcyBRUjNQcUKwE1BxUjIicyJRUnNRcVIzUHFSMiNQUGFSMmJyEXIzUyBxQjIicHFSInNQUzBisBJzYFFjMHFRcHIzUnNQUVIzUHFwcmNR8BBhUiJzUXFh0BJzUHFSInFxUjIic1MgcUBzUWBxQHJjUyNTIHFCsBNRcHJiM
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
cTAUFCRgdFwoFCg4FBRoaTCF9GwUJBQUOEwUFBwcLEQ4KBQUOBQUJBA4OCQUFBQUFEwUFBQUFBQUFCQkYEwkFBQoKBRMJEwUKBB0TGAUqBAkTEwwCBRMOFAQPBBgFCRgFBQ0iBQUKCQUFCQUFGAwCBR0JDgUKCV8FBQUJJgUREAUTBRMmDhgJBRMKCQoXCAcJBQUFDgUFDgUJBQsSCQUTCQwDBAQZBQUKCwMYEBoPBAoFCQoTIQkBFwoFCTALCAk2EkI0IlxUZBMFCQUFBAQTCgoIBwUJBAkOBQoFCgoKCgkBCgoFBQoFBQ8FCgUFBQUKBQUJCRMKBAUJBAQJCQQHBw4G6T4NJigmAwQGBC8VBywbGxEmFAgGBigSEQSEBAYwERgRBwMHHRIVBwYGCF8dOAQXLQwSBBQRBxF6GAMHBAMMEwYGCDAMBQQEBAQEBwMDAwMHBwMKBwMDBwcDBCIUBBcRDBMGCAcGBggHBgQHAwcGBwsRBQUNBAcDAwMDAwMEAwQEBzMbJj0GBwROAwcEBhgoDwYHGAcDDgYBEQYEJRwQGJIEM0ciMA8dBy4d4woEAwMDDQkEBwc+BgYiAwP7BAMDB6AGAwMzB/3CBA0FBQYAMf/O/rcGmgcxAZwDTANRA1sDXwNlA2sDbwNzA3gDfwOFA4kDjgOVA5kDnQOkA6oDsgO4A70DwgPJA80D0wPXA9sD4gPmA+oD7gPyA/cD/gQCBAgEEQQWBBoEIQQnBCsELwQ1BEAERARLBE8AAAE3FjM3FzI1MhcHFwYHFDMUBxQzBhUUFzMHFRcVIhUXFCMVFAcUMxUjJwcVFBcGFTczFSIVFjMUIxcHMxQHFjMUBzIXFRciFRciFRYzFRYdAQcyFQcWMwcWHQEXIh0BFxQjFBcHMhcGFTMHJxUXIgcyFQYHMwcXBxYzFRQjFDMVFCMXIh0BFDMUIxQXFCMXFTMVIhUzFSIHFxQHIjUiFSM0Jwc0IyIHJisBIgci
NQYHJxQHJxQjJwYVJicUKwEnIhUnIgcnByciFSMnNzUiJyIHJwciJxQrATUnNTc1NyI1MjUiPQE3NQcnNzUnMjc1JzI3NTQnNzUnNDc0JzQ3Ij0BNDc0IzY3JzQ3NCc0Nyc1Nyc3NCM1MzUjNDMnNTMnNjMnNDMnNTQ3JzQ3Jzc1JzI3IzU2MzQnNjUnMjUiJzcmNTQ3IzcjBzU3IjU3Iic3NCM3JiM0MzQjNDMnIwc0Nyc3NQcjNTQzNSInNyM1MjUyFTcXNxYXNDMyFzcXNDcXNzIXNDcyFzcyFzYzMhc0NzMVMzI3FjM0Myc0NzMUBSI1Bh0BFwYdARQXBgcyFQYHFhUHFyIHFwcXIxcVBzIVFAcXIgcUMwcVFyMXBhUWFyIHMhUHFwcVFBcVIyInIxQHFyIVFyIdAQcyFQcXBxQXBzIXIxQXBxcHFxUzBh0BFwYVFyIHFh0BBzIVBxYdAQcyFSIdARcGHQEXIhUXIxcVBzIXFAcVFzYzFDM3FBc2OwEXNyY1IzUXNTY9ATc1NjURNDc1NDc1NjUzFjMUBxYXFjMWEyMWFRYXIhUUFwcWFzI1MhUyNxc2OwE3FDsBMjc2NTY1NjU2NTc2NzQ3MxcVFh0BFDMVIh0BFxUGHQEWOwEyNxQXNxYzNxQ7ATI3FjsBMjcmJzQ3NCc2NSc3Iic0NyY9ASczJzQ3JzcmNTciNTcnNDcmPQEnMyYnNjUnMyc3NCc3NCc2NTQnNyc0NyY9ATciNTQ3JzU3IjU3JzciNTcnMjUnMyczNSciFSMmIyIHJwciJwc0JyIVJwcnIyIHJicUIzQnBycHNCcHIhUXIxYVFCMGIwYHJjUnJjUmJzU0JyMHNCcGIyYjBisBJicHIyInByMnFCMnBzQnBiMnBRQrATc7ARYzFQYrATQnFxUjNQcWFSMmNTMXByInNAcVIzQHFSM1FzIVJzUhMwYVIzU2BRUiJzUyBRUjNQcUIyY1MxUHJj0BMhcjN
zIXIzcyBRYXFSYnNSEXByY1NAUzFQcmIzUyFyMiPQEWJxYVJzUXFSM1MgUyFyMnNTI3FSM1BTMUKwE0BxUjNQUVIzUFFxQrATU0FxUiJwUjNTIFIzUyFxUiNQcyFSM1BRQXIyI9AQcVIzUFMhUGIzUFFDMGFSM0IzQXFSI9AQUVIzUFFDMVIgc0BRQrASInFxUjNQUVIzUhMxQrATQFFh0BIyYjNTI1MgUVIzUHFxUnIgc1BRUjNQTNDYMIDzJaISYQCAgNDQYWCAgMBSIdCAgFIg4PBQUFDQcbBw0NDQgICAgNDQsCCAgICAgIBQUFBQgMDwcICA8PCAgIBwcOBw8IDwUFDAkIDg4OCA4QJA8PDw8ICA8HDxsMEwkIcA8NB4x3BSkXDA9IJUMNVgwPPxsIN4wMeQYIFA4jCA0NQFMPBw8WBw8PDA4NDyIPBisPCA8bFA0NDxwFBQ8UDwUPDw8PCBYIDwcHBQwHDw8HBw8IDg4OBgYODgoLDw8HDAUFBQ0ICwQbEAsHBwcHCwQICAgIDwcUFAgXDQoIFBQJCwcHBwcIDggIDg4HHRoQDQ0cBkVWRQ91CB4wKSJbDwwIDhQOATEmPDAbKiQqCBQTFjEIBwcOB/xIAxgDAwMCBAMDBAQEDgQDAwMHBAQEBAQEBAMHBAQEBwMDBAUCAwcEBCYEEQ0EAwMDAwMDAwMDAwMDAwMDAwMDBgMKCgcKAwMEBAQEBwMDAwMDAwMDAwMDAwQDBxE0BgMHGxIQA1UHAx8iDg0LBgcHAwIJBAYVBRclOgQOEQ4EGAMNEQQDCAYGHRMKBwMEJgkVLw4sHw0LIgMDBw4OBwcFBQsJCzBHDgoHAwoIBg8dERoIAwQEBAQEBwQGBwcEBAQEBAQEBAQEBAQEAwMDBwQEBAQEBwMDAwMDAwMDAwMDBwQEBAQLBBgDAwMDAwoEAwMGHAsNBw4FKgc6KQoUDgMIBgYjAxQHKREKFRcDAwMHGA0pMA0iKR
YaBgQRRAcDBwMLCgYIFxQECwYUKRgDERFVBggNARoHBwRRBAgFCAUHBE8HiAoDC0QHAwUFPgb/DhgKDgEoBAcHBf75BgEHAQwDjwcKyQQKCGUKAwfTCwQH/eopBgwnAjUHBAr+igMDBwMDMAQGCoUKDeQLBP7YEQMNEQNcBwFYBgYHsQf+nwQBSgcHB1UGAf6iBwcC2AcHYgZgBwoBNQQEBnsN/o0HBQUBmAYDBxS3BvxcAwFoBwoOAicHBwYBNw78cQMDFAQHA/4qKQMyCw0K/rMNRBcRAwcEOQ0HFgYRBgYcKzYbKRIRBAtGGwUdSRsLBAYQCgcPBgoLCwYLCxYlCgUFDB8LCxAKDAkhAikKKyYLFgQbEAoMEAsEIRUmCgyFGxARDwsGCwoQCQwLBRULNgQMMEUGVg8GCzYECxULBgsFBQsLGhUHHwwfCx4NCxAREAwFCgUKCgULBgcEBQULExMKCwQKCgQEBAQVFQQWBQUFBQUMEQomBRE2GhtlGxARBQUFFUYLFgQbIQUJAREEEQoBBQoJGAUQCgEGSgUHER4KARAWIBYKBRsFCyAGCw8QEBEKC0sKAQsLCgsPJho8BRUGCwsFNQZAJRURBQsrCwYgBRslCzAbGwUGBBYFBQsKEQUFBQsRJBEEDAUgEQsLCgUFEAYJDAQEBAQHCwQEBAoFDAsLEQYLCQET9gMHBhwUBgsHBwYLLwQCOxICBz0KEQcRGBERAwkTBgsGERgHNgcEHgcbBBcHFQMaCAMKCAYHAwcDIhEEBgcRAioOCgkSDgcDERENCwcKDiUHGwYIBhgEHgYIBxcEAxgUBgspBwMHKQcRJQQiAykOBAQEAwMUAwcEBgMDHQUmS2IgNQF6AxhEAxglFh0NBAYbH05g/v4jEzFbAzFQBzQvBAQEBAQDAz0+DWAMGweIKaMbIwtQIiwYA48HAwcsCp0XBOQKBwkFBwMDAwMHMAkgAxgMOx4IB0o+Bh9FKBEHHgo
ODh4dDw4DBxgRGC0yHwY6IgcDBxUNBgEOBwYHAwkTBgcKDg4NBBEDAwcKCxEDBwdYClUHAwcYCgcDKAMDAwMDBAMRBwQKAwMEBAQDAwMDAwQEGAYYBBGBeXEFBWlpEi54DgYBBAcDAwMGBgQEBAQEBAcHBQYEBDMHDQYEDQ8FBwMDaQUFBQUEEQ4GOQcGzgQEBAcEAwgFAwoiAwcDGAcHBwYFBQoHBQUDFwYRBxEDBwMGBAMDDgUFBjwHBwQHIgYEBQEFBQQGFwcDAwoDAwQEBAQGBhQDAxEHBxEDBwMGMgcHGAeIBykHBxQHBwcEBgYEBAMDGwcKEQMEEgkVBgMKBwMRMDAHAwQDBhoHBwQDAw0HBwcGORMFDiYDChsDAx4HCgoEC+gDAwAAACj/zv64BUoG9gIFA3sDfwODA4cDiwOPA5UDnAOhA6oDrgOyA7YDugO/A8MDxwPMA9ID2QPdA+ED6gPzA/kD/QQEBAgEEQQVBBsEIAQlBCkEMgQ2BD0ERARIAAABMxYdARQjFxUHFxQHFhUUIxYVBiMXFSMVMhUHNCMHFTMHFxUUIxUzFSMVFxUUIxYzNDMVFCMXBxYVBhUyFyIVFwcUFxUiBxcGIxcHFwYdARQzFQcUMxUjFxUGFRQXBxYVBhUXBhUXBxYVFCMXFQcXBhUXFRQjFxQjFwcWFRQHFh0BFCMXFQcWFQYdARcHMhUGIxUXBhUWFQcWFSMXFRQjFxUGByMiNQcjIicHJxQjNQciJwciJwYjJjUGFScjFCM0IwcnIxUzFCMiNTI1JwYVJwYjNCsBIgcmIwciNQYjIicGKwEiPQE0NycyPQEnNDM1NCM1MjcnNDcnNjM0JzcjNTYzJj0BJic3FDM0NyY1MjUiPQE3IjU3IjUyNRczNDcmJzMnNyc2NSI1MjUjNTI1JzQzJzU0Myc1Myc1NyYjNTM1IjU2NTMVMzU0JzI1IjU3Fzc1Iic3JzU0MzQnNTY1JzcmNTI1
JzY1Iic1Mjc1JzI1IiczNSM0MzUnMyYjNTMXNSc1NjMnNTMnMjUmIzU0NzQnNwc1Mj0BIzUzNSM1MzQjNzUnNSM0NyYnNjsBFhU3Mhc2NTIXNjMyFzcWMzYzFBc3FDM0MzIXNjMVNzMVMjUWMzYzFTcWMzYzFzcXNDMnNRYzNyc3FBcUOwEnNxYVMzcnNTMXMyc1MzIXNycyNRYzNxYzNgEVFyMVFzcWMxUjIicUIzQrAQcVFyMUFyIVFBcGHQEXIhUUFxQHFBcGBxYzFSIHFDMHFyMUFwcXFAcXIhUXFAcXIhUXBxYVFAcWHQEHMhcUBxYXBh0BFyIdARQzBxUXIhUUMxUjFRciFRQXFQcWHQEUBxYVFAcXBxcGFRQXMzI1FzcUMzI1Fhc0MxczMjUWFzY1NCc3Jzc0JzY3IjUzJjU3NCc2MyY1Nyc3JzI1NCczJzQ3NCc2PQEiPQEzFyYjMj0BNCM1Mj0BJzI3MxYXFh8CFhcUFxYzFCMXNxYzMjUyFzI3FTI1JjU3JzQ3JjU0IzcmNTY9ATQ3JzI1JzMnNTciNTcmPQE3IjUyPQE0Jzc0IzQzNDc0Jzc1NDcnNTQ3Jj0BNyI1NDcnNyc3JjU0JwciNSIHNQc0IwcmJwYHFwYVFBcGBxcHFhUHFBcGFRcUIxcVBhUnJicmNSYnJicmNTQnNCcGFSInBiMiJyMiByYrAQc0KwEXJjUWJRUjNRcVIzUHFSM1FxUjNQcyFSMiJxcyHQEjJjUFFSM0JwUyFxQrATQjNQUVIzUXFSM1FxUjNQcVIzUFFSMiJwcVIicFFSInBRUjNCcFFhUjJjUFFBcjIic1BxUjNQUVIzUFFDMGFSM0IzQFFCsBIj0BNxYHFCsBIicXFSM1BTIXMxUnNRcVIzUFMh0BBiM0JzQFFSM1FxUmIzUWByMmNRYXFSM0JxcjNTIHFDMVByY9ATIHFSM1BRcVIyYjNQUVFCMmIzUXFSM0BR8HJAcHDgcHD
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
2NxU2NxcHPwEXNxQ3NDczFzQzFzc2FTY3Nhc2Nxc2NxYXFAcXFAcXFQcVFyIHMhcVBzcUBxQzFgcXBxUXBgcyHQEHFBcHFwcXBxQXBzcUBxQXFAcVBzIVBxcUIxYXBzIdAQc2FwcUFwcVFwcUMxQHFDcWBzIVFgcWFQcWFQYHFwcfAQcyFQc2HQEHFRcHFTcVIxcVBxcUMwcXFAcWMxQHNhUXBxcUBxcUBxQXFAcXBzIVFAcXBx8BBxUUFwcVFxUGFTMWBzMUBxYXFAcXFQcWNxUGBzQPAQYPATQBIwc0KwEGIyciBzQjFTMVIgcUFwYHFxQjFxUXIhUXBzIVIgcWFyMWFTMWMxUiByInFyIVFyIVFBciFRYdARciFRcjFxUHMh0BFAcXBhUHMh0BFAcWHQEXIh0BFwcWFyIHFRQXFCMWFwYdARQzFCMXBzIVBxQXIxQXBh0BFyMUFzM3Fhc3FjMyNxQzMjcVMjc0IzQ3JjU3JjU0NyYnNjcmNSI1MyY1NCc2MxQXNjMyNxUyNzY1MjcnNjcmNTcnNzUCJzUmJwcnByInByYnBisBJxQjJiMHNCMiBzQnBgcVIzUfARUjJzUFFSM1BxUjNQUyHQEiBzQnNAUVIzUFFBc2NxYXFjMVIh0BFDMHFxUXBhUUMwYdARQHBgcGFScHNCsBBycHIicHIycmNTY1Jic2BRUiBzUXFSMiJzUHFSMmNQUVIgcnNQUUIzUFByc1FxUjNTcyFyM1MgUyFSc1BxQrATcTMwYVIzU2FxUjNQcUIyY1MxUHJj0BMhcjNzIFFhcVJic1FzMVByYjNTIXIyInNRYnFhUnNRcVIzUyBxUjJzcyBzIXIyc1MjcVIzUXFSM1BxcUKwE1NBcVIjUHFxUjIicyBHAGCwULBRMDGwUFMg8bIA8SCiELGwobFiYFBCgIDQUcAQYLChELCwoLNhAPFwUcBQwJCwYbBQUFEEELDAoVETYKCwsJAgULBgsBCQIJ
AisBCgsLBQYFCwYGARALBgYBBQUGBgYFCQ0QBgoFBgULCwYFBQUBCgkKAQsFBQEKAQsHBAULCgUFBQwLCwQLBgUFBQUBBgYFBQsEBQoGEAUFBQQICBUFARAFBgUGAQoGCwYLBQUBCwUFCwsGCgYGCxABBQUGCyY2EAsLCyYKBgsgBiUNCTAJDQUFBQsKDAULBQQRHAobBi8cCAgGCyAWCxoGIw0LFRULdxYFBgULBQsFCwYKEjANHhs3CQEwCgsFCwsGBgoGCwYGBQoBCwYFEAUFBgsGCxEQBQUGCgULDBAFBQoLBgEFCgUFBQYFFRoGBgsFBQELBQEGBgUWEwgGBgsBBgYFBQsLCgsLCwsBCxALBgEKCgsBBgsFBgUbGwEFBQUGBhYBCwsKFhsFAQsFBQwLCwYFDQksIAoWFBIQ/ToEEQoHOQcREyALCxMCBAQDBwcDBAQEBAQEAwMEBAoLEQYDBwMRBwQHAwYDBwMDAwMDAwcEBAQDAwMDBAQECwUCBgELBwQDBAcDAwMDAwMDBgMDAxgHCgoOFDYLCTcEAwc5QQMHBAQEBAUJAwQEAwMDERoZA0QYBAZVT1UmGgMYCgQEBAQJI1VLBxEHAwcHD40GCBgRAwYIBhEEBzNKsQSCERURAdUDuwP+YQcEBwMDHwr+WgoZBmYfEhMKBwQVAwMKBwcPIDMHBwMEJQcDCgsKDgYcBAoHDP7PCg0oBgYBEQcKAuIEBw39gQcCWgQNAwoDB3QHB/3xCg49BwcELwQHBwUFA48HCskECghlCgMH/r0pBw0mtwQEBwMDMAMGAQqFCw7kCgOjBAYDB4URBA4RA1wHoAcbBwcHVQauBA4GAQu3AQUBBQsEBwUKAgMFBwMBCwQHBAwFBQgHBQMJBQIBCgEDBQQFCAEGBBIBCQEGDwEFAwEFBAEGBAUKCgoNBgMJBAUNBQEKAQUBBQUBCgEKAyxKEwogFQoBBQUJCQsFAQ8PCQEEHQoKCiEFC
h0BGg4dHgQiGAEFBwsKCgEJEwoZEwoBWQEKBRgnDg0RHQoEHyEKClIFCgFaIRMFBQoTBQoJChMMQwoeCSMFBAsBIw4BBicFBQo7Dg8FBgoJAQUJBQEYCgUKBQoKCRQZBA4VExgEFw0hCgUFBQMBBQEPBgEJBwQFAQwRCgEGAgELCgYEAQoFDgQFAwEGCQ0aARMGAwwOAgUFAh8FGQEGEAYFAQQBBAUECgEKAQUCGgEGAw4GBw4JEQQLCA4PDwUYHhMFCgEFCgkVEwkeBRcsCgUEEAsIGRwZCgoLCCgBCRAEHg4BGRgFHgQFBQkjBQkLAQ4KBwIVCh0KCQQBBQEKFAULCQkFGQ0EAiITCw0PCgUKAQUKAQUNEAUBCg4KARgJHgQMCAkKFAExEwsEBQoJBisPAw0DPwoFCwkJCioFARQIASIKEgUYBwkZBQpHCgkCCQUKIQEFJQMKAQEQAQEEBwIEBAoDBwQHBBsDBwkZAwcRNxEDEREDHyUHYhkUAwQORAQlAxcZAw4YLBgDByIOETMDCAYGPx0VCg0IBgYIIgYEFBEsJQgXLRASCh8KBgcRBwMpEQQGBAcdDwYHHwcWCAYGBAQECgMDAxgDCSMHBBQGCAcGKiQifi4TA4sOChUsCAYHBAQmHAZOB0+DJAUfBwYpARsGCloTAwcEBAQPEAQEBAQEBwMHAwoOBwcDBAMDBEgGBgMHBxQHCgQEBgtIAwMNBAMDBBEYGAcHAwcHNh8UBwMmFwQDJixfGBQEBAQEFQQHBwcDgYUNEqEhGk0HBAczBwcEOgoFBSwEAwMHdAYGLAcEAxEKCgcpBxgHBANHBw7+fwgFAwozBgYGBwUFCgcFBQQYBxwDBwMGBAM9BwYDByIHAwUCBgUEBxgHAwYEBAYDCgMEAwMDGAMDIgMHAwYyBwceBwQHAAAAHP/O/xEE+QbnAdAC5wLrAv4DBAMPAxUD3wPlA+0D8QP2A/wECAQMBBIEFgQaBB4EIg
QnBC0ENAQ7BD8EQwRHBE4AAAE3FDM3FhUzMhc3MzIXNzMXNDcVMjcWMzcXNjMUMzY3BxQXBxQXBgcyFQYHMhcHFwcWFwYHFBcGHQEUMxQjFDMHFTMVIxUUMwcUMwcXBxcHFxQjFDMUIxUWMwcVMxUHMwMVFAcyFwYVFBcGBxcUBxYzBxU3FDMGIxQzFCMUFyIHFwYdASIvARQrASIHIicHJiMGFSY1JjUHJwYjJxUiJwciNSMGIyY1Iwc1Igc0IxQjNCMUKwEnFCsBNSIHJwcmIwciNSMGKwE1MzUiJwcnFCsBNCM1Mjc0JzQzNSInNyI9ASMHJzI3JzQ3NSInNDM0IzU3NTQnNycyNSc2NzUHIzUyPQEiJzc1ByM2MzQnNTciNTc1Ij0BMycyNSI9ATciJzcmJzU3Iic3NTQnNyI9ATcnNyc2NSczNSMHNTc1IzU3NSc3NCczNSM1NyM1NDc0IzQ3NSIHIzU0Nyc2NyInNDciNTcjNTI3Iic0Nyc3IzQ3JzQ3JzY3JzQ3Jj0BNxc2NxQXNDMUOwEyNzIXNjUXMjcyFzI3Mhc3MhUzFzUzFTM1Mhc0NzMVMzI3FzcVNzMXNDMVBzI3FzcVNxU2NxUyNxUjFTIXMjcVMjcyFzYzFzY1FgUiBxQzFSM1IwYHIgcyFSIHFwYHFwYHFwYHFh0BBzIVBxUHMhUiHQEXIh0BFyIHMhUiFRcVIxUHMhUHFBcGIxUHFwYVFhcGHQEUMxQHFwcXBhUUMwcVFwcUMwcVFDMWMwcVFDMVFjMVIhUXIxQzFjMUFxY7ARc0NxU3FjMUIxQXBxUWFSIVFhcyNzY3NSYnBhUiJwcmPQE0NzY1Mjc2PQEmNTQ3NCcjFSM1MjU0JzY3JzQ3NCc2Nyc1MzU0NyY9ATciNTQ3JzQ3Jj0BNyI1Mj0BNCc2PQEnNyYnMjcnMj0BJzI1JzY9ASM3NSM2NyYnNDcnMj0BIic3NSInMj0BJiM1MzIXMjcmJyY
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
yI9ATc0JzcnNTciNTQ3Jzc0Jzc0JzQ3JzY1NCc1NyM1MjUnNTI9ATQnNyc3Iic3JiM1NjUnNzQjNjM0JzQ3JzciPQEyFTI3Ij0BNzUjNTM1Ij0BNyczNSciFSc0MzUjNTciJzQ3IjU0NyY1Nyc1NyI9ATQ3MxQBFzI3FDM2NzIVNjc2NTY9ATciJzY1Ji8BIgcmKwE2MyYnByYrATUyNxYzNSYjByYnJjUmJyY1NDcmPQE3JiM0Nyc1FzY3FTcyFzIXIh0BFzcyFzI3FhUiByYrASIHIh0BFBcUFzM3FBc2NxY7ATI1FjM3Jic3NTQjNTI9ATQjNycHIzU3FzM1NCcyNScyNSYjNDMmJyYjJicUIyciJwcmIyIHBh0BFjsBFQcnBxcHFRYXFhcUFxUjFTMWMxYXFhcyNRYzFhUHFxYVIhUnBxUUBxQHBiMiJyY1MjUmNTQjFCMnByMHJicUIyciByciBzQrAQYdAQcWFxYXNxYXMzI3Fhc3Iyc0OwEVFCciNTI3FDMUNzUzFhUnIyIHJzUzMhc3BhU3JjUWFzMVByInNTMVJzUyNxUHJiczFSInNTMVJTUzFSUiPQEzFBcnNxcHJzUzFTc1MxUHIic1MxUnMwciNzUzFTc1MxUiBzUzFTc1MxUnIiczMhcVJyI9ARYVNyInNDMUFwc0JzcyFwYVNyMUFyUjNDsBFCc1MxU3NTMVJzczMhcVJiU1MxUnNTMVJSc3FhUlNTMVJzUzFTczFhcVJhc1MxUnNTMVJTUzFTc1MxUnNTIXJzUzFBcVJjc1MxUnNTMyFzcjNDcyFxQEDw0bETMHByIFEAYNBxsHBzAGBw4HBwc9DQYiAx8HNiMNPQwCBw4NBw4GDg4GDgUyGQlRBxUUCwMGDg4LEAsDKgwHMwoiBwcRLBMIDgcOBw4VDg4OFRUHByINDg4HDQYLAg0UBxEEDhQUDhUJDAcHFgYUCAcHDgcHBxUVGwYNGw4ODg0HByIHBw
cVFQcOBw4OBwcHBw4ODgcHBwcHBwcGBwYHDgciDRQNDQcHBwYODg0HCwMOFBQHDQ0HBxUNGxQbDQ0NDVIlOg0VG0wGDgcNFxIHDgMzHA0OBw4NDS8iBw4NDg5RBwcOGhwHKBwOBiIOGDowDQdfGhYHBwcHDg4OBw0GDgcHDg4ODgcHDg4OBwcOBwcODg4OBwcHBxQNDQ0HBxQbGxQUDRQUDRQUBQ8UAxEUDQ0bEQoNBgYGDQcKChQNGxQUGw0NBwYOFA0HBwcODg4HBw4HByIHAosYJGgDYQIDFR4YMwMDBAQODVUEBwwPCgMHIA8HKwwDBw0QCCMTBxMFIi8fgQMDAwMKNgMRByERSiMaDwMDDgkLEgYUEwUFCAoPDQoERwcRFB8HBgcEBh08GAQHBw0KBwMDBwMDBwMGAwcECwoEFgYyDiiXAwpRFUEHA0aXYxcIESIRBwcDDCA2GzAHBDAXJhReNAMYBEQEBCUKGAcRMxUhNywlAwczAxEUPhQENgMHAwcHAwcECgoKE0VgPQYtBgcKCxNM+AMHBwo6BwQGBHAKEW0DAxgECwsMEQaIMxkJFwMDSA4ECw0DEhAHB2MH/ZkDAsAHAwe0AwcDLAZ7CgMHMwd+CgMHVQOWFA84HjoOIgUFBgYB6gcKbQgCBhWPDhEGAQfaBwf+YQMHA20HYwacEQMRBCkB/gcpB/3BBwQKAo0KjweLBwcHFWoHewT9mA56BxsGATMDBwqZBl8KBgEzAxgLGgcOBQULBgsFGwUREQYLBQwKBgsGBgoFCwYWCwsLBgYcCwUFBQUFCwsFBQUQFgYLCAgLBgYGCwsGCwsFBQtDFSIYChARJwsLCwsMBQsRCyELBgIPBSILHAULCwYRFgsLFhcQCwYcBQwyCwUcBgsWCwYLCxYLEREZDgsRCwUcBhEGBgUGHQoFCw0JCwYLBgsWEQUMBQYcBRYGCwYFGCUXCwsQMwoMBgYREAwQCwwFBgsLBgYGGQI
RBgsLBScsDAYWJhcLCxELEQsGBQsnNwcWCwYGCwUFBQsLCwYJAgUGCwsLBQsLEAUFDAYLBRALEQYGBgYGEQYGDCFTCwZOCw8SBgkCBQwQLQUGCxEcCQIRFhARCwYLCQIXCwkCCwsLCwYLEQkCHBAGCwYMCgshCgIQCgEMCwsUEw4CBhYLDBAGCwsRHAUiSBwhHAYaEgYQDBYJAgYLGwwLBQUWCwsRBgsWCxYGHAULBQUMBRYMEA47CyQqCwUMEBcLBWQfDgj4rwMiAyUKAwIgHAllSTYUWRICaTRzAwcRHwkDBwcGCgcfBBMTCAwaJ1OeCAYGBwoVLFIeBwcHBQUDAyWIBBcHBwcNDwUDAwMiHxcSFQkDBAMEAwMRGAomCgoHBgQHCgcRBgMDBwMDSiMDIgQ2BDAGQSgmBAcKBgNHXWIeBwcDA6ofBgSVME0FHgoECjY6CkAxBBVSQwcRAwcHBwoVCTQlDh8tVyMDFhMVBAcDBAMEAwMDAwMDBQUEfXtORRMDCgcHBgixAwcDBh4GBAQGFwQKBCkHEQQLBAkFDgISAwcHBx8DAyIDBAQGAw4HLwQEMwcHjAcKBgsRBwQHBAMDLwQEBiUDAwcHBwcHAwcDBAQEBAMDJQ4HBxEHAwUFFCIHBBoLBw4DBwgJLQYBrQcGPAQEYwMDFAQKDgwPBwcKBwcOAwcFBSIDAwcDAy8BEAMPAQMDJQcHAwQESAMDIgcHMxEFCQ0FGQQEXAcHChYJCgsAACz/zv74BP0G/QGCA0ADRANKA1ADZwNtA3EDdQN5A34DhwOMA50DowOnA6sDsgO4A74DywPQA9QD2wPhA+UD6QPtA/cD/wQHBAwEEQQXBB4EJQQsBDAENAQ5BD0EQQRSBFYAAAEzFgcXMjcXNzIXNzIVNzMXNjMXFjMXNxY7ATcWFwcWFQcWByIHMwYjFwcUBxYzBgcWMxQjFhcHMwcmBxYdARQjFhcHFhcHFBcHFwcWDwEWBwYV
FhUHFgcjFhcHFwYjFw8BFjMVJgcWDwEXBxYXFSMmIxUXFScXFSMWFwcUFwYHFg8BJiMmByYnBycHIjUHFwcvASYHJiciBycmBycHNCcUIyYnIgcnBgc1ByMiNQYHJwYjJwYjJjUHLwEUByciBzUHJiMHJic2NSI1MjUnNDMmJzcnNyY1NhcnNyY/ASc0MyY3JzcmNTMnNhcmNzY1JzQzJzU2Myc3NDcmJzc0JzcnMzciPQEWNzYnMjUiJzUzNzQnNyI1NyY3NDcmNTcmNzQzNTYjPwEnNjUiNzI1JjUyNTciNzM1Jxc3JxY3NSYjNjcnMjcmJzY3NjUXMzcVNjMXNxYVNxYzFjcyFTcXMhU2FxYzNjMXNjMWFzcyFzYzFhc3FzYzFBc2Fwc2MxYXNzMVMwUiBxYzBh0BFyIHFxQjFjMyNxQXNDMWOwE3FDsBNxYzFhcUBxcHFBcGHQEXIhUUFwYVFwYVFDMVFyIHFBcGBxYdARQzBgcWFSIHFRc3MxcjJwYHFRcGFRQXBhUUFyIHFwYdARciHQEXFSIHFyIHFRQzFAcXBxQzBxciHQEyNTMVIxYXNxQXIxcHFRcjFBcUBxUyFzUnMxcUIxQXNzIXMjUzFzQ7ARUzMjUXNxc2NRYVNjc1NCc0NzQnNjciNTcmNQc0NyY9ATciJzUzNCcyNScyPQEnMzQnNzUnNTQzJzciJzUXMzUnNTM1NzQnMjc1IxUjNTM1NCc2NSM1NDc1JzI3JzcnMjcnNTciJzQ3NCc2NyI1Nyc1MjU0IzY3JicyPQEnMyYnMj0BNyM2NTQnNTIXMjcmNTcnIzU3MxczNj0BJzI3MhU3Fhc3FDsBJzUXFCMUOwE2MxU3FzUnMjUWFTI1FzQnNj0BNCM0Nyc3NScyNycVIzU3NCM1JyIVIiciByYrARUjJisBBzQnBzQnBhUiNSIHJyIHNCsBBzQnFxUjNCM3NSInBzQrAQc0IwYjIicUIzQrAScUIyciB
zUiBRUjNQUXIyInMjcXFSMnNTMVNzMVIgcmKwEHFBcjIic3JyY9ARc2HwEVIyY1FxUjNQcVIzUXFSM1BzIVIzUXBhUjNCc0NzIFFSMmNRczFAcnIyIHFRcjNCc1MjUWBRcUByInIRUjNQUUIzUFFSIHIic3BSMiJzUyIRUjIic1FzMVIgcmKwEHNCM3MgUVIyInIRUjNTMyFwcjNC8BMh0BJzQHFSM1FxUjNRcUIzUFFjMGKwEiJzU0FxUiByM0NxY3MxUGFSM1NgcVIyInHQEiJzUXFSMnNzIHFwcjNCc3FxUUByY1MhcVIyY9ARYXByc3BxUjNQcjJzcWFxUjNQcVIzUXMhcWFxUjIiciByM1NyYjNRcVIzUDmQYKASEFAQoQCAgbBAwECwIJCyYEFRERDgYLDwMOBQELAQoGBQEEAwEFBAYGCAQFBAMLARUBHwEKCwQLBwYEBQcFBQwPAQYLAQYLBwUBBgUEBxABBQUBBw4HEAELAQUKDgMNBgoFEwoFCwEQBgQGBgYBJw8PDAoTGGsLGwsfBAoFHwoXCA0GJRZTIhAwLwYFGhUrCx4jCgsFFREVCwULCgYQCgUbIAsLOicKBgobEwYKCwUGBAoGBQUOBgYFBwYBCw4GCQIKCwYGBQMJCQEHCwYFAQUFAQYFCQUDBQkQAhAQAQEVEAgHCgEFDAsHBQEGBQcMARYBBgYBCwYGAQUKCwELARAECgEFCwELBAUBBQUBDAQbLBsKBhALBgoVEBYRDgoXBRtLBBcPAQocAwsLBgQLUQoaCgsOCBUWFRAQAyIBDgkVSgEKC/0qEAQNBBEDBQEGBgEQHhUoBAYHEQcEGxEfEB8HBAQEBAQEBAQHBwQVBxgEBAMEAwcDBAcGAQQHAwMDBwMHAwYDAwYEBgcDAwMGAwcHBgEHBwcDCgQEBAQHBwQJBwQRAwoDAwcLBggDAwcEFREUBAoHBgQDCgcRBwMmCiEBBwQHCgMDBwQGDQMKBg
EKBgMDAwMDAwYGCgQEBAMHAwcEAwMECQYEBwMGBgYDAwQEBAQEBwsEBgEHBwMEBAQHCgcDBAUFAwMDAwMDAwYNGAgGCgQEBAsRBAcKBwoEBQwEIiohBgQDBxEGBg4LEBEHAwMKFQoKEQsOBwoDAwQHAwMKCgQDBwMHBggNBAwSJhgNBwoKBAkLBAoNBBgRHgMDEQMHBgcEFBEDDAIOJQMERBgDXAMHHwKiBP6lBw0GAQhaEQYOdCIRFgwGCAoHBwcGBAcEHhQZEB4KGC0HjBHrA4IHCn4EAxQDGP7zBwq7CgYODgUBAwcHCxb+gQcHBQwBZQf+LwcBcgMHBgEE/uINBgERAV4DBgHnAwYODRIGBwQHBP16BAYBAYcKtAYLEQoD0wcOGAaEB7sG/psFBQUFBwYBgRAIBgYRTwMHBwaAAwYBBgE6BAYDBzoKAwoEBBsODQYtBAoOLAQGAw4NXw4HBBHdB+QHnQQhAwsEBAkEBwMDCxdVAwb3ARABBQYLEQQFBQYLAQwBCwwFFyyICwURAgkrBhshDQkQHEwhBTcLHAsBHAIJBQsWERsQARsCVgoLNyMOIQIJCgwCCRsvHgg/IRwFCywbEQsBCwEQCyFXFgEKBgYhBgELBoMRGwUMJQsLCxsMAQULASgFDwsECwYBIQELBgEPBgIUCwQIDwURAQkFDgUFBQYFCgsFBgUGBgYBBgoLBg4FCgYFAVMLBQsLFgUwGAoMGyQNEQEcIQkSBUgFXjsBEAsFCxwBTiAWEAYFHBAFCxYMCjEBGwMeCjI8CwYBCx4kCxEFBQwKJgshHBsMCQoMFgEKCwsFCxsRCwUGBQEKCwsWGxwBHAsBCxYhCwYbBQEbHgYICAYKBQUGCgYFDwsBCgUEAgYLAQsEBQUBBQgMBQEFCgYECAkFAQUKAQcQEeczEQsNFQYHCgdOBgQGBAQEBAQYFBwHBgcOBwYGCB8XBAcGLgwpEgIHEQoEAwcENiAnEQcaCBU
GEQ4iBBEDDgoUFRMPEBISCQ4QGBEGCAcGBAMKBANBBxQHCg4lBz0RBwMHAwMUEQMDBxEOAwcJCwcOAxENBwMEEAcKDg4EBAoKCgMHCg4FBRMFAwYBAwcGARA0AwQEEwMHFAYIChEHFAoLAwcDDgcDBwoDCwYpEREKBwMNCwoKDgMHHg4HCgcIBg8dAwQYChEKBwcUAw4KEQcGAQYBCBoDBwoHBwYIJRcLAwcHHgcDHxFeHAUGBgMwBgsRBgQRBwMRCwYVBAcDCgMDCgMDBwcVBwMDAwcDAwMGBgcNDgMHBwY+Cg0LBgsDBwQGCxEUAwMDAwcKAwQDBAQDBQUDBgYGAwMFAREUGwcDBAQEBAQEBwMDBAQOBAQiBwcECgcDAwMDAwMDAwoDAxkQEQoHBwcDAwMwBgQDBwMDAwcDBwsGBgMHBykHAwgaCAYHBwUFGwYLCgcGBxAIAwcHCgQGDhQDAwMHBwoHAwYHKQcECwcEBwcHCgMDCwQHBwMDFAQIBgcHBwcGAwMDFAMDBwcHEQoKBwMFCAQHBxENBgMJBQcKBgcHHwoHAzoDAwdLBxEEBw1+BgYFBQYHBAUGBggWBwMHGwMDEQMHAggDA2MGBh4HDQsDEQQEBwYEEQcHAAAAAEr/zv7CBRsHTgICBAcECwQQBBcEIwQnBC8ENwQ7BEUESgRQBFQEWARcBGAEaARsBHMEfgSHBIsEkASVBJ4EogSmBLAEtgS7BMEExQTJBNAE1ATaBN4E4wToBOwE8gT4BP4FCQUQBRYFHAUkBSwFMwU6BT4FRQVNBVYFXQVqBXEFdwV7BYIFiAWMBZQFmAWeBaQFqAWwBbQFugW/BcQAABMyNzIXNxYzNxQzBxYXJjcXNjcXNxc3FzUXNDcWFzI1Mhc2PwEXNDMXNxc3NjcXNzYVNjcXNjUWMzY3FjM3FDMUIxc2Nxc2NxYXPwEXNzYXMjcyFzU2FzY3NhcGIxcHFhcVIgcUFwYdATcHFRci
HwEHFwcWFQcWNwcVFwc2FR8BIhUUFxUWIx8BBzMHFRQ3BzMVBxQzBxUzFRYHMhcHFwYHMxYHFwcUNwYHFyIVMxYHFxQHFwcXBgcXBxcHMh0BBzcHFjMUBzIdARYHMhciBxU3MxUWIxQXFAcVBzIVFCMUMxQHFDMHFhcUBxcHNxUGFRcGFTYVDwEnFAc1DwEiNQcnFCMHJyIHNQYHJyIPATciByYHIxUjNDMmJxUnDwEnBgcGJyIHJwcnBgc1BgcnNw8BJwc0IxQHIycUBycHBjUGBwYnBgcnBgc0JzQ3JzQ3JzU3NScyNwYnNTcjNDc0IzQ3Jzc1JzY3Bj0BNzQnNyc3Jzc0JzcjNDc0JzQ3NTciNTcnNDM0JzciPQE3Bic3NCc3NSc3NCM0MzQjNDciNTQ3JjU3Jic2Nyc3JzU3IjU3BjUnNzUnNycHNTMnNTcnNCM3JzQ3NCM0NwYnNTcnNDcnNDc0JzQ3JzciNTQ3JzcnNTM1NCM3NSc1NjUjNDcjNDcmJzQ3JzU3JiM1NjcUPwE2PwEUExYdAQcyFQcXBxQXBh0BFwYjFBcGFRcHFh0BFBcHFzMVBiMVFAcWHQEXIgcVFhUHJyMVBzIXBh0BFBcVIyInIxUUFxUHFRciFRYXBh0BFwcVFjMVBhUWFxQXFjMWMzcWOwEyFzY3FDM2NzY3Njc0Jzc1Jic1MzI1IjUyNycyNyI1NwcmPQE3FjMyNyY1NyInNyc3NCc0NzUiJzQzMjUnNjMnNyc0NycyNyc0NzUjBzU0NzQnNyY1NyczJzcnNyY9ATciNTcmJzY1JjU3Jzc0JzcnMj0BJzI9ATQnNjc1NCc0NycyPQEnMj0BBzUzNCM0NycyNyc2NSc2NScyNSc3JiM3NTQnNDcnIwcnIgcmNQcnFCMiJwYjJxQHNCcGBycHNCsBBgcXFQcyFQYdARciBxYdARciHQEUFwcVFBcGFRQXIxQXBhUUFyIdARciHQEWHQEjJxQjF
BcWMxQjJyMUBxQXBxcGFRQzFSIdARQHFwcXFAcyFSIVFBcHFxQHFhUUBzIVIxYXFCMGIyInIgcmJyYjNDMmNTI9ATQjNjUXMzU0NyY9ASY9ARczNzQ3NCc2PQE3JicHNScyNRY7ATY9ATQnNj0BJiM1Mj0BNCc3FhczNScyNyI1Mj0BNDcmPQE0NzU0JzY3NCMiFSInIgcmJwcmKwEHNSIHJxQjJwYrAScUIyInIgUVIzUFFSMiJwcWOwEVJzUHNzIdARQrATQnNRYFFSM1BTIXIhUiJzQFFxUiByInNAUHIjUFFBc3MxQHJjUyIxUmIzUFByM0JzIHIzUyBxUjNRcVIzUXFSM1DwEiJyMHJzUXFSM1FzMVIgcnNAcVIicHJiM1MjcyFxYzFSIHNQc1BxUjNRcVIyI1FxUjJzUFFDMVJyMHNjUFFSM1BxUjNSEXFSIVIzQjNTMHBhUjNTcXFSMmNQUVIic1MiEVIzQFFSM1MzIXFSY1MiMVIzUXMhUjIicFFSM1FxUiJzUFFSM1MgUVIzUHFRQjNTQXFDMVIzcXFhUjJjUXFjsBFDMVIyYjNQUWFyInNjUfAQciJzUFFSMiJzUFMxUUKwE1NAUyFSIHNCM1FxUiByY1FgcVIzQnNRYXIzcyMxYVIyI1MgUyHQEjIj0BBRYzFQcjJzY1FzMyFQcjNgUyFzcXFSMiJyMHJzUHMhcjJiM1MxUiJzU0BxUjNR8BBxUjNScjMhUjIicFFSM1BRYdASMmNTIFFSM1BxQrASc3BQcmIzUWBxUjNQUyFyMiJzI1BxUjNQczFQcmNQUyFSc1BxQrATd1BQsGCgYTAhsGBTEQARshDhILIAsbCxsVJgEFAygIDgUbBQsLEAsMCgs1EQ4XAQUcBAwKCwUbBgYGEEELCwoWEDYLCwsJAgULBQsJAgkCKwEKCwwGBgEGCgUFEQsGBgEFBQYFBgYKDRAGCgUBBQULAQsFAQUFBQsJCwsGBQsBCw
YFBQsKBQUBBg0LCwQKBQUFAQYGBQUFBgsEBgsGEAYFBQUJCBUFARAGBgYFCwUBCwUKBQUKBQULCgUBCwYFCxAGBQYLJjYQCwsLJgoGCyAGJQ0JMQgNBQUGCgoMBQsFBBIbChsGMBsICQULIBYLGgYjDQsVFQt3FgUGBQsFCwULBgsSLw0eGzgJMQsLBQsKBgYKBgsFBQULCgUFEQUFBgsGChAQBgUGCwYLDBAFBgsLBQYLBgUFBgUWGwYFCwYGCgUFBgUVARMIBgULBQUFBQELCwsBCgoLCwELEAsFCwsLAQULBQUEGxsBBQYFBQUWCgsKFhsGCgUFDAsLBgUOCCwfCxYTEhBmBAQEBAQHBwQOCQUEBAQEBAYDChEBFwMDBAYBGwMRBwMEAgYiBAUWAxERAwMDAwMKBwYIBxYkjy0TWwsHBggRFhZBBgRCQkAVER8DDQcNAxgDBAYHDQcGAxQLBBQEBgQEBAQDCgoHBw4XBQcVBwUFAwoEBAcDBAQHAwcHBAQEBAQEBAQHBwQEBAQEAwcEBAcHBAQEBwMDBwUGBwMDAwMHCwcDBw4DBAQLBwMDAwMHAwgHBwsHBAYEBwYOEREDBAMNDhEfGAclDgYEFBAPBAQEBAQFAgMEBAQEBAQEBAQEBAQEBBEDBwMDAxEGCwMDAwMDBxURBAQHAwMDAwMDAwMDAwMDAwcHFiQDBwgdLR4oBAMbAxQKBwMEBB4HEQYEBAQDBiMXBAQbGAYLERQWFg0NBx0IAwMFAhUYBwMKBAQHEQsGEQYWBi0GBggRBwMHIgMHBggpEQoMEhMDJwP9tAcGAQMYAwopRAcHBwMfFAHSA/5hBgQGBQYBzxEEBgUJ/oAEBgH3FA4DKQ0GGxED/l4HBwcRcwcHSA2xBxQKaQQDGAcHA3AKPQoKEQNECgsUBwMKByKLCQUIBhHdCikEBrsLEQGYFQoLBgP+dgeIBwLsChgKCgp+AwcEpgMK/SgGAQcCcgf90gp
BDAgfBB8KXAcHBgEB7QcwCB79fgcHAfcHGwc3DRQDbQoDCjYXDgcVERQf/QYHBwcOBBsUAwITAxwDBgH9AwoHCgKNBwgGB5IDBxsl/wYHBy8KAwcfFBgGA/6NBwcGAWgJBRELCgRYCgcYAwX9ng4XBwMDAg8EFwQHEwUDFglBBgFVCjoKBwcDGwYDBgECJAT+ugoKCgMCFgeSBwcKB/7KBhMJCfMHARMHBAcHBwQcAywHEQ4BeQsOPQcHBAcmBgQKBAYFCgMDBQYDAQoEBwULBAUIBgUECQUDAQoBBAUEBQkBAQUEEQEKAQYPAQUEAQUEBwUFCgoJDgEFBAkDBg4FAQoGBAQBCgEKAixKEwogFQoGBQkIDAUBDw4KBR0KCQoiBQodARkPHR4BBSIYBQgLCgoKEwoZEwoBWAkBBRgnDg0RHAoFHiIKCVIGCgFaIBQFBAoUBAoKChMLRAkeCSMFBQoBIw4FJwUFCjsODwUGCgoFCQUBGAoFCgUKCQoUGAUOFBMZAQUXDCIKBQEFBgICBAEOBQEJBgQFAQ0RCgEFAgoBCgUEAQoFDgQFBAEGCg0ZARMFAwsOAQYFAh0EGQEFEgYFBQEEBAEFCgEKAQUBGwEGAwwGBw8JEAQMCA4PDwUYHgETBQoFCgkVEgodBRgsCgEFBQ8MCBgdGQkKDAgnCRAEHQ8BGBgFHgQFBQoiBQkLAQ8KBgIVCh0KCQUFCRQFCwkJBRkNBQEiEwoPDgoFCgEFCgEEDhAFAQoOCgEYCR4EDAgJChQBMRQKBAUKCQcqDwMOAj8KBQsJCQorBRQJIwkTBBgHCRkFCkgKCAIJBQohBSQCCgEBDwEBBf7VBgcpEQMYFVUHLAwPJQQNBAYSAxQHIxMiBxsRBwQKIgcGBghYBykHBQgHAxgRFw4YFAoLAwcwBwMDBC8YBCIGBggDEQsKWA4YA2EZMzMcKAMDBAcHBAUuIz0oCwcGGAMNAQMtAxgYMwYYAwUFCgcR
GwcDEQssBwoGAQgCAxEEQAQKEREHAwciCgcFCAQEBwYBDQsUBwMRBxEiBA0TDBQRBAYfBxUGBgsHAw4HBgcHBwMHAwQGARoIAwYBBwYHBAMHBxEHBwMFGiUKBw8JDQYIBwMHAyYKBwkLBRADAxEECQUEBAQLBwMDBwMHAwQHAwMHEREREQMjEzoHDgYHIgcDBAsGFCIMEwYLAwcJEjMYAwcEAwcDBAwLBAQEG18KBwcEBwMHGBQ2BwcDBwoPFwcbBwgTAwQWFg0iDg4SCRYuAzgdB2kDDgUTLARJLgoKChELBCIIBgYHHAQGAwMDG0guHUtRfhEDBAQYBwMUBQUbBgQYEQQDAwcECAIKAwcUER8HCh4tEQYHBBdLBwgGBlIiBwcHBAMDAwMDAwYDAwMDAwMoBwcOBwcpBwYGB18DBgcHDwUHCjAKCgMRBw4KGwQGBAcGKAcHFAUCBwkIBQUHAwQRBAkIEQcNBAcHAwMiAwMUBwcEBwcKBAQEBgsHCS4EBwMDBw43BwMDAwMNCgcHAwcHBwcDBCkKFQcDEgkKBAQHAwMOAw4ODhEHBAcHPQcFBR4EBwMGBgoDAxQHEwUEBEEHBxEDAwMHAwQVAwoDBAQHAwcDBgYNBBEUBQUFBQQDGAMbAxQCDwcHAxEDBwcDHwoHAwMDBwMGBgcDAwceBAMNBAQRAwUJBgE4BgMHBxgHAwcDJQcKBAcGCAQGBAoRAwMGDg4EBwMlEQ4DEQcDBisEBBgHChEHGAcHBAoKHgYFAwUFAwQEFQYGCxwNDQcDBAMDJRsUBxgHBwcGBAkFdAcEA0cHDgAAAFX/zv78BWIHIAHQA5wDpAOqA7YDugPAA8QDyAPMA9MD1wPbA98D4wPnA+0D8QP1A/kD/QQCBAoEDgQUBBsEHwQjBCoELgQyBDoEPwRDBEgETARTBFcEWwRgBGcEawRvBHYEfASEBIkEjQSUBJkEowSnBKwEsgS2BL0EwQTFBMkEzQTVB
OYE7QTxBPUE+QT+BQoFEQUXBRsFHwUpBS0FNAU7BUAFRAVIBU4FUwVXBVsFXwVjAAABFBc3Mhc2MxYzNRYzNjM1IzUWMzUWFzUXNRc3FjMnNTIVNzMXNRc3FjsBNTMyFTYzFTM1MxU3MzQzFzYzFjM2MxYzNxQXNjMWOwEyNTIVNjUWFzcXFRQHFhUHFhcHFhUHFhUjFwcWFQYjFjMVIxcUIxYVBiMWFwcWHQEjJiMVFhUiFRYdASMXFSMVMwYVFwcVFxUjFRcVJyMVMwcUFwcXBxcVFCMXBh0BFwYjFxUGBxcGIxcVFCMUMwczFRQjFRcUIxcVBhUyFyMnFRcGIxUUMxUjJxUWFwcUMwcXBh0BFxUiFTIVBiMVFhUHFjMHJyMVFCMXBiMVMhUGFRYzFSIVIyI1BycGIxUzFSMiJyMUIyciBycHJiMVIyI1ByMiNSIVIjUiFSYjFScjFAciJyMUIycGIzUHIicHJxQHFAc0JyIHJwYjJisBIjUHBiM1NCc3JiM2NSI1MjUiJzI1FzUnMjcmNTcmJzY1NCc2MyY9AQMzJzUzNScyNzUiNTI1IjU3JzcnNycyNScyPQEjNTM1JzI1IjUyPQE0JzY1Jic2Nyc3JzYzJic0MyYnNjUnNjUnFhcyNTIXNxcyNxYzNRYVNzMXNjsBFzY7ATQ3FzI1FzIFIyIHJyMiBxUXFSMVFyIHFxUGFRQXIgcXIgcVFDMUBxcHFRQzFQYdAQcyFSIHFTIVIgcUMwcXBxYzBxYdAQcyFQYHBgcjJicmNSYnNDcmJzcnMyYnIgcmKwEHNCMHIicGIycGKwEiJwciNSIHJwcmJyIHFxQjFh0BFBcGKwEmKwEVFhcWMxQjFRcVBycjFjMVIxQXIxQXBhUXIxYXFQcWMxUiBxQXIxQXIh0BFAcWFxYXIh0BFxYzBxQzBxUXNzMVJyMUIxcUBxYzFCMWFyMWMxQHFhcUFzYzFzYzFzcXMjcUFzQzFDM3FD
sBNxc3FTI3FTI3FzcWFzI1MhUyNTIVMjcXNjsBNDcnMhcyNSczNDc0JzM1NDcjNTYzJzU3Iic1Mjc0JzY3Jwc2MzQnNjcjNTMyNyc1NDM0JzY9AScyNSc2NzQjNyY1MjcnMjUnNTQ3JzI3JzUzFTM0Jzc1IzU3IjU3JzI3JzYzNCcyNyI1Mj0BJzI9AScyPQE0MycyNyM3JzciPQEzNTQjNyM1NzUjNTQ3JzcnNjM0JzY1NCcyNTQjNzIXMzU0NyczNCM0NzQnIxUiJyIVJyMiByInBycHNCsBIicHIicGFSYnBRQzFCsBNTIHFSIHJzUFFDMVIyciFSY1MjUXFCM1BxUjNTcWFxUjNQUHJzUHFSM1BTMVIgcjNDcVIzQHFSM1IRUjNQUjNTIXFSM1BTMUBzUyBxUjNTMHJzUFFCM1FxQjNQUUKwE3BzIXFSM0IzUXFSM1BTMGIzU0BRUjIj0BFiUVIzUXFSM1BRUiFSMnNwcmNRYlFSM1BRcVByMnNTMXFSMmNQUVIzUHFSM2NRcVIzUHMwYVIzU2BRUjNQUVIzUHFCMmNTMVByY9ATIFIzcyBRUjNQcWFxUmJzUhFwcmNTQFMxUHJiM1MhcHJiM1FxUjNQcVIyInNRYnFhUnNQUWMxQrAScmIzUFMzQnBRUjNTIHFSMnNzIhFSM1BTIXIyc1MjcVIzUFFSM1BxUjNRcVIzUXFjMVIyYjNQcWMxUiFRQzFQYVJzU2NSc1BxcUKwE1NBcVIzQFByc3FxQjNRcVIzQnFzM3FRYzFSIHJic3FxUjJiM3FiUVIgciJxcVIzUXIzcyBRYzFSMnBzQnNQcVJzQXFSIHIicWJTMGKwE1NAUVJiM1FxQjNQUVIzUFMxUHIzUjFSIHJxcVIzUFByc1FyM1MhcjNTIBYxcJHiMCCAgKEAwJBQk8DjE6IQkJCQoFCgkFCRIhAgcFEwkdCAkKNxgEExcKAQgJBQEIKg4BCAIIBCEEDicaGBI
EBAQIBgUFDgQEBAQJBQkCDAkEBAQEBQUOBRMFCQUFBRMKDgkJDgoFCQkJCQUKBQ4FBQ4FBQUODgoEDhUDCgUFBQUFExMTCg4SEgYRCQoFCQUOCQoECgkFBQUOCQ4OBQ4TDgkOBAoEBQkCDA4EEhMTBAUXBQkFCg4MAgUTBAoXFwkGEg4EChIFBCYEDiYgBQQPFwQKCREUCQcHCglKcA4KCAoeDKoUBQUJ+lUgBAMGCQQEBwcKCQ4JCg4JBQQOBQUEBBgFBQoFBwwOCQkEBAQXCQkJCQkJDgUFCQkFBQUEBAoFCQkEBQQFBQYEBQUFBSgHBAkdBAoKCAkKJQkFFwIIBBcCCBcTBAUcJQH2CgYFBgQGAQcHBAYBBwoDAggKBgEHDgQHDhEEBAYBDQkLCgMDDQIIFQQEBBUsKgUHFRcfFQYDEREEBAQPEA4RBgcREREOCBMMAgYaFhQPDQMDBAcGEQseFAcRBwosCAUEEwEEBwcHEQ4iEQoDAg8EDgQVBAQECwYDCh8hAQoDBgMHCAYOCgQEEQYDBwQEEREYAwcDAwcKBAQHBAwFAwoUMxQZFAcDEREYBxEUBAYHBAMHJRgHEQMHBw0QAQcEBgcGFQcGCB4cBAgGBwQHBwoGCwcFBQMDBgETBQMEDQQHDAkHBAMKBgUMAw4HBwQKAwEQBwQECgQEBAcHBAMLAwMHBAcHBAQEBAQDAwkEBgQCAwcEBwMHCgcKBAQKAwMDBwciBw4HAwMDAw0EAwYDBw4EAwcDBwMDAwMRAwYBBBcHBC8MEwcUBwMiCgsGBAcNCxQBAwMHBwQ6AwcO/R4iAwcHHgNtB48RBAaaBwJdAw6IA/2fCgMHB5YHPQQCBQcBHgcHCgf9UgMOBG0HMwMRAeYHBAf+2wYHA9YPBQoNsAYCGQMFBf4FAwoIAZ0GqhH92QcDBwpYHBwCEgf+ZQoRChEKIgMLAR4HBwYDJQ3uAwcGBQG4A/5QBI4HCsgDCgcBOAoD
B/7mA/kpBw0mAjQHAwr+igMDBwQErQMHAw0DdAoGAQuFCg4BPRcOBwcKCRUBEwcH/qUKA6MDBwMHAWUD/hoRAw4RBFwHAQkK5AOSEaYSAwQMEjoOERgKDhcXBncGBgfZBv7sAwcDRAYeAwQwBwcPGQoDDiUDmQ0VDQMg/rEDBwoDJQoRCgMHAS4VBwQNBwfdB90DBw4DFv6FBwUFBAFYBwTrB/5eDgFHChQHDgMHA7cH/vcDDncHB50HBwcgBwcFCgoFBQoFBQkTCgoEBAkFBQUFCQUOBQUJBAQJCQkJCQkJBQkFDgkFCgUHBwkJEwUFBAQKBRNhUloiMkERNQkICy4KBAoXAQghEgoJBQkFDhkQGAIMCQUFGAQFAgsKEgUJEQsFCQUOBAUOBQUFCQcHFwoJCRMEChcOJRMEEwUQEAUlCQUFBF0KCQUOCRwEAwsYBQUJBQQKCQUFIQ0FBRcJBRcFDgQTDhMEAwsTEgoFKgUXEhwFCQUTCRMFCQkFBAkSFwkJBQUFBQUFBQUSBAQEBAQJDQ0ECQUFDgUFCg0RCwcHBQUTDgUFCQQbeiFKGRoFBQ4JBQoXHBcJBQVKmSYGKCovF3ABIAkFCQoSEwkJCgkJCk8EGAkOCRMJDhcFCQkhCwgJBSIHDDEJGAQhCCYFSgoJBQkIChgDBwUJCQUFBQoDBwUFCgUJDAIJBQXsDgMGCwoKBwcGCwYQCAQGIhwGBAcNBAYLAwcDAQkRIgQHBgcKBwcHBxciBggDEQR5oXkBQm6fGYgRAwc+khcHYQwHBAQHBwQEBAcHBwMDAwMHAxEOBhsVEQcNDhEHAj4tBgcEBgQHGwQ0GhNWEgMGLQ0RBwoEAwwTHhUDIgkWRQleEgMHEY8HBwYEGAQHAwYYDBM9AzMHPQQHWykQCAcEBAQEBAcEAwQHAwMDCgcDBgMDAwcHBwcDBgYGAwMJDxEDBxENHwYLBxENBAoHBgcHAyYDByIOBgMfBgsiBgcYE
RgsBgELCQcHFAcKFQYRBwQeBwMLAwkLByYGDgoDBwoHDhEDBwcKBxQHERgDBwoHBwoHMxQHLA4RBgcECgcGSxsRBAcHBgcRGCkHBhEKBAcRBgcDFAoLBgQDBwMHBwcDDQoEBAQEBAYDAwUFCQFRBAYGOQQDAwdVHwMDChcLBx8GBg0KBgcDGAMDBwcEAw0HBwQDBAYBBwYGBgYDAxsHDgMDFAUFBwQDAwcEAw0HBwsGBh4HDgcRBBEEEQQEKQoDBgkEBwQHAwMDJQQEBwMOAw4fBggFBQMDQQ0EAwMOSwcFBgQDAwcKBwNRBAQVCAUDChEGBiIGBgYHBQUKBwUFBCIGDQcHBAMHAwYEAwMOBQYGPQcGAwcEBgMDEQYGCgMHAwcEBgUEBwcbBwcXBAcGAREHAwYEBAYGBgMKAwQDAwMHAwMKBwcHAwMUBAMDBAQNBAYHBAEJBwMDCAoNCgMHAwYQBwYGBgMHBAYKBw4IBhQDAwsDDg0LBxEDDQcRAwMDDQoDAx8HHhEEBAQFCQcOCgMGIQMEDgcDCgQGAwcEAxgHBxsHByUEAwMDBAcYAwMoBwMEMwYlBwAAAHP/uf6nCG4GhAGcA2oDbgNzA3wDgAOHA4sDjwOWA5oDngOiA6cDqwO0A7gDvAPAA8QDygPOA9QD2QPhA+cD7QPzA/cD/gQEBAwEEAQXBB0EIQQlBCsENQQ9BEQESARPBFQEXARjBGgEdgR6BIEEjgSUBJoEogSnBKwEsgS3BLwEwATEBMgE0ATUBNwE4gTpBO0E8QT1BPkE/gUCBQgFEgUWBRoFHgUiBSYFLAU1BTkFPQVBBUcFTQVUBVoFXgVkBWwFegV+BYQFiQWOBZIFlgWcBaAFpAWoBa0FsQW3BbsFvwXFBcwF0wXXBdsF3wXjAAABMxYVBzIVMjcWOwE1MxYXNjMyFzYzFzYzFhU2Mxc3FhU3FzYzMhU2Nxc3FzQzFDMVIxcGIxcyHQEjJxUXBxYXJy
MHMhUiFTIVIgcXIh8BBiMXFCMXFScjFyMWFRYHFwYjFDMHFBcGFTIXFSMWMwcfAQcWFwcWFRcHFhUHMhcHMxcHMhUjFTMVIhUXBxcVBxYXBhUWFwcWFyIXFh0BFiMWFQYVFhUHFRciFRcWMwcVFjMHHwEHJxUfARQjFjMUIx8DBxUjIjUGIycHJiMGIxUXByMmIwcnByYjBzQjByMiNQYHNCcHIjUHJjUHJicWIyYrASIHJiMiFScGFyM0IxQjJic3JiMnMzQjNTM1NyInNiciNTI9ASYjNyI9ATInIj0BMjcnNyczJic0MyYjNycHJzMmJzYzJzY1IjU3JzQjNycmNycyNyc0Myc1Jjc1MjcmIzc0IzcnNjMmNTI3JiczJzciJzI3JiMnMxc0JzYnNScHIzUyNSY9ASI1NzQjNTc1JzM2NTQnMicmNTInJic3JzYzFjM3FzI3FzYFJiMUBxcjFhcHFDMXIhUWFxYXBxYXBxYzFhcjFhcHFhUXBxQXFhc0MxUyNxU2OwE3FDM2NzIXMjcUMzcUMzcVNjU2NzQ3NCM1MjcnNjcnMjUnMjcjNRczNjc2MxYVBxQXBxYXFhcUIxQzFhcHFhUHFhUWFTcyFTI3FzcXNxUyNxcyNxQ7ATcXNxQ7ATcVNxc3FzcUOwE3FDMyNzI3Jzc0JzI3NScyPQE2Myc3Jj0BNyI1NjUnNjU0JzI3Jzc2MzQ3IjU2NzY9ASYrASIHIicHIicjIgciNSIHNSIHJxQjJwYrASciByciFSInBzQrAQYjFRQHFhUHMhUHFwYVMhUjFwYVFBciHQEzNxUiFQYVFzcVIwcUFwYjBgcXIgcUMwYHMhUGIxQHFSMGByM1JiczNTQjJisBBxQXIyInNzUmJxcyNzUmJyYjJiM0MzQnNycyNSczJzUmKwE1NxYzNTQnNjUmJzY1JisBBzUHJwYrASInBgcnIgcmIwc0KwEHNSInByciBxcGBzIVFCMXBiMUFwY
VFyIVFwYdARcHBgcVFwcUFxQjBiMGByYnNSYnMjU0JzI1Jic0Jzc1JjU0Jwc1IgcnBycHJyIHJxQjJwYFFSM1BxUHIzcFFjMVIyYjNTIXFSM1BRUUByY1MhcVIzUFFSM1BRcVByYjNQUHJzcXFSM1BRUjNRcVIyInBxUjNBczMh0BIzQjNCEVIicFFSM1FyM3MgcVIzUFFxUjJzUXFSM1ITIdASY1BRUjJjUhFBcHIic2NQcUByY9ATMVFCM1NAUXFAciJwcUIzUFFSIHIic3FxUjIic1OwEVFAc0IzYFFSM1MzIVIgcjNgcyHQEnNAcVIzUXFSM1BSMmIzcWBRYzBisBIic1NBcVBisBNDcWJRUiBzQjNQcVIzUHMhUGIzU0BxUjIicXFAciJzU3FiEyHQEmIzUzFSInNQUzFBcHIiciFSMnNjUWBQcnNQUVIyInNRYFFScjBiMnNTY1NjUWFxUiByM1BRUjJzcyBxcVIgcmIzQlFCsBNQcVIyInBRUiJzUyByM1NxYFFSMiNQUVIzUHFSM1BxUjNQUWMxUHIzUyJQciJzsBFwYrATU0BRUmIzcWBwYVJiM3FgUVIzUXFSM1BRUjNTMVIzQHFCMmNSEVIzUXFSc2NTIzMh0BBhUmIzUyJxUjNQcVIzUXByc3FxUjNQcjNTIHMhUjIicFFjMUKwEmIzUhFSM1DwEnNwUVIzUFMhUjIicFFAcjNTczFwcjNCc1ByMmJzUWJRUjNQcVFCM1NCUUMxQHNCcyBTM3FDMHFRQzFSMmIzUhFSM1BRQzFSM3IRcVJjUFFBcjNQcVIzUFFSM1BTMVIgc1FxUjNQUVIzUXFSM1BRUjNTIXFSM1ByIHNTcyFxUjNQUVIicFFxUjNTIjFjMVIyY1FxQrASc1FgcVIzUXFSM1BRUjNRcVIzUCGwkSCQoJPh0YGgk1AS40JD1MMD8BEhkSChATcys2PCcJlRNYbVgIJBAQFCABJQoREgkJARIK
CQoKCg4LGxoBCgwQHgobGgoVCgoBCQoDDgkICgkOFiMGDggBEAYGAQYQAgkTEw8NEREBCAgREhEKEwoIEwETCgEQBwsKARMBChwJExITEwEHExkUBgYCJBMQEAEZAiQTCgITATYIEysTEBIQExMIHBMIARNpUhASCS0SGQoImRCyRgojUBMPbwEQVTBcEw4fMwaYsgEKEBOPAQoMGAEQJBMJEwEKAQkTARMTFC0CExEKFBETCQwPBwgTCQETCBIBCgoJCgoUEwEKCQMBChQOCwgHBwEGCgkBCQkKCQIDDxMSCAkBCgoQEAEQCgEjAQoQBwYBBxMSKwcKCSUrBxAHCxsBCRIBEgoJFS8pAXM/EwumED7+7D4UAxQDAwMDBx4DBQUREQMHBgMDBBgGAwMLBAcUAw5wGwMKCy4WGBEDFCYCCwYcBAcDByUPCRsKDwUDCxADBwQGCBsRCg0LFxUbBwQHCwYXFQMGFQ0DGwMHEQYHBAYOEQcRDg0OAwcDDgc9BwMHByIGBw4RAwQGBD0RKgkDAwMIBQMHBgsEFQQEBAcDGwQFBgcHERQbAwoYFAUFAwsNCAYHBQgHBgEDBgsRIg4DFQUIBwoGARgKBxEUBAMNCwcECgMHBBEKBwMDBwoDCgcUAwcDDgQEAwUMAwYLBwoHAwIIFAQRDQQLFwcDBAYHBwcHBgQHIQEUBR0JDwsJCwoEBwMDAwMDAwUFGAMMCQQECgcDBQgEByIGBggHBwYnIQMOGyQBBwQDBxYkEQYWDAMKCgMHBAUGBAoDBwQLBAcEBgMKAwMQEiQIDAwOBgMYBAQNHwMGJgcLBhcVBxENBAYpBAYnAyAHMxEGBgHcDQsDEwwEWxf+BQ4NBkUO/bsEAiAwBBcYAYMDBwQsB/4MB6oDBgHPB9oGBwMRAjQGAf7qB34LBAdVBP76EQYOFBEBRwcL/pEHCgGRDhEGAQfJAwpmB/4dBwcFDHMHAXIDBwYBBD0DBgGxBg0EB
v77BrAHBgsDCNsHDhgGhAcBQAMLBgMJ/hgFBQUFBwYBdwgGBgYJAToDBwclB6YGCAV+AwYBpgMCEgMS/owLCQXTBgH+7RcEBAQeDQQDCgsCTAQN/mQRBgEYAYcRBwUMAwcUEZkMCAT+sAQGAwe7FAYLCwYCLgcDyQMGAf4WBgEHOg0DCgL9Awr9YhEiBwoHApAHBBEVCf2yBAUBKA4HDwYGAsYIBQMHmQcZCQMTAWMGJQr8WQeLBkEHCgJnBo4UAwaNBg0JGRmXBzoGkhEHCp0LhAcHSwcEBQH9twwWBxEIBgG0C8gEBgMBXgf9BwcEBgEDSA0EBCwHBAMH7gcHBhT+EAcbBwLNBCIEIf0SCgcDAxQNGgUB2Qf+jQ4VBAJFBBX9LwQHMAMCwwP9RwoIEH4HAxUHXwb8hQcHGweVBAcEBz0HA+QGAfwqAxEIQg0LDQ56BgsKBCILyQcBbAeZBwaEAQkKBQ8KCgsECgUFBQoFBQUFBQwIBhAFBQoKCg8dBAoFDyIPCwQEBBAJCgUFFAUFBBoYLQsiGQUdBgooCgQQFCE8BjEFCgoFFAU3GCQOCgkLCQIJRQoBCQ8PDw4LBR4KBBoEChQeFA8BCRwQBgRGBQEJDwUWCAoEAggQBBAJBR4ZBBQKQRQFBQUPDxleGRgyEAQkCQ8KBAQEBAUUBRQUBQUFBQoKBQoKEhEKBAQEBgYLBQoKBQkECg8PDwsNGwsdCh4GExkJCwUECwUKFAkFMgoFDlAGQCwLBTEKFAQJCwkPCQsFCg4QDhl8CwkjFB4FCRALCQ4ZBRQKIygKJQIfCAwJDwkLHQoEBAojFAsJBQoKCQYOBgoOBgQKGUQbBBlCCQUPESYZMicZBgYPBQexAwcGRBoIBxvdBAsk04EHeBAVG74fJCAHLhyxHxMSBAMDAwcEBAMDBgQDBgMDAwMDAxUeIgtpBwcXBxJiBxcHJhEEMReEFykEBwYLVhZtHwMVciAHYgcHBw0NCA
QHAwYDAwYDBwQEBAQOBAQEBAcDAwcHAwMDBlIHBwMHVQcGBwp3B0sGCBQRAycMH3QNBAY6QQPaK1MDXnFwKRUKCgMDBwcDBwQEBAQLBAcHBAcHBwMKDhcOBggRAwoHFBELFAcDBQkHDQcHCgsGBwMHFwQHCjgWBzoGCCsEDTknFCYUBzsQBwMfBBgREQsDDwUDBw0LSlJSAxMgBwcDBykKCgcHBwoQEgwCOgoGBxsDAwMDAwMDBwcHBwMDAwMDAwNHBytTAwcUCgQHCy4HEQ4FBQ4iAx4HBxEHAwcEu2EIHEA9cBgDMWUDJSo9dxQHIQsKBwMDAwMDAwMDAwcEBAdOBAQHBAMKSw0ECwN+AwMiBwUFBQUvBAQbBwdPDQQGEQYKBwQHBAMDAwQEBwcHFAcGLAYcHAYGBgMDAwcHBwcHAwQDAwQ9BAcHAwUFGAcFBgcOAwcICRwBDAUFAwYHBwYKAwcOFQQGBgoHAwcHHwoHAwMGBQQKAwQEBwcOBAcGBgYCBAQVAwMeCgcDBwsKBwMFAQQNBxEHAwMEBAcEAwMDBw4OBgYHBx8MBQcHBwQGBAcDCgcDCgMHBwQOEQsGBwMHAwcRAwcGBAYDAxsHAwkIBgQCAQMHCiUEBAYKBwMHBwUCBwc3BgYXBAcDDQMHBQIDBwQDAwMEBA4HBwcDBwMDBAcHBBQRBgMKBwcEAwgNEQcDBAMDAwMDFAQEBwYKBgUFBwcYAxEGBAcDAgkHBAYDAwYHBwcRAw4OAwMYBwMHBwcDBwcDAwMHBwQHBAMDBwYGDQUFBgcDFQ0IAx4BEAMPDAQEBwQGAwYBBAkEBwYDAwMHDQcEFQ0DAwMOAxERAw8FAwsNGA4KChEHBwoECgoNBAQOAwMYAwMUAwoHAwMOAwMHAwQECgcHBwcDBgoDCAUKBwcEBBQEBAcDA0QDA3oHBwAAOf/O/twFYgcaAgUC0wLcAuAC5ALoAu8C8wL3AvsDAgMGAwoDEAMUAxg
DHAMgAyUDKgMwAzYDPgNGA1ADVgNcA2EDZQNqA28DcwN3A3sDfwOFA44DkwOYA5wDpgOqA7ADtAO4A7wDwAPGA8oDzwPVA9wD4gPmA+4D8wP3AAABMxYdARQjFxUHFxQHFhUUIxYVBiMXFSMVMhUHNCMHFTMHFxUUIxUzFSMVFxUUIxYzNDMVFCMXBxYVBhUyFyIVFwcUFxUiBxcGIxcHFwYdARQzFQcUMxUjFxUGFRQXBxYVBhUXBhUXBxYVFCMXFQcXBhUXFRQjFxQjFwcWFRQHFh0BFCMXFQcWFQYdARcHMhUGIxUXBhUWFQcWFSMXFRQjFxUGByMiNQcjIicHJxQjNQciJwciJwYjJjUGFScjFCM0IwcnIxUzFCMiNTI1JwYVJwYjNCsBIgcmIwciNQYjIicGKwEiPQE0NycyPQEnNDM1NCM1MjcnNDcnNjM0JzcjNTYzJj0BJic3FDM0NyY1MjUiPQE3IjU3IjUyNRczNDcmJzMnNyc2NSI1MjUjNTI1JzQzJzU0Myc1Myc1NyYjNTM1IjU2NTMVMzU0JzI1IjU3Fzc1Iic3JzU0MzQnNTY1JzcmNTI1JzY1Iic1Mjc1JzI1IiczNSM0MzUnMyYjNTMXNSc1NjMnNTMnMjUmIzU0NzQnNwc1Mj0BIzUzNSM1MzQjNzUnNSM0NyYnNjsBFhU3Mhc2NTIXNjMyFzcWMzYzFBc3FDM0MzIXNjMVNzMVMjUWMzYzFTcWMzYzFzcXNDMnNRYzNyc3FBcUOwEnNxYVMzcnNTMXMyc1MzIXNycyNRYzNxYzNgUXFQcWFyIVHwEjFjMWFxYzFCMUFxYXBxQXBgcVFyMGFQYHBgcXBhUGFRY7ARc0MxYXMzcUMzI3NTY3JzY3NjM2NzQ3MhcWMxYXFhcWFzM2MzIXNjU0IzQzNCcmJyYjNDM1JicmJyY9ATQ3NjU2NzUzNyczNScyNSczNCc0NzUjNTcyFTI3NjciNTQzNCM0Jwc0
JwYjNCMHJyMHNCsBBzQjBgc1Bh0BFxUjJyIPAQYHIzUmJyYjNCc1JyYnBzQrASIHJicGIzQjBzQrAScUBRUiByYrATUWFxUjNQUVIzUXFSM1BRUiBzU3FhcjNTIFFSM1BSM1MhcyHQEjNCcXByc3FxUjNQcVIzU3MgUVIicFFSM1FyM3MgcVIzUHFSIHNQcUIyInHwE3ByY1FzIdASY1FxQXByInNjUHFwYjIic1MhcUOwEVIgcmIzQHMwYVJzQXIyYjNxYHFSMnNAUVIzUFFRQjNTMVIgc1BxUjNTMVIzUPASc1FxUjNRUzFCsBNAcXFSIHNCcjNRcVJiM1BxUiJzUXFSM1ITIdAQYVJiM1MicVIzUzFxUmNTIHFSM1FwcnNxcVIzUHIzUyBzIVIyInBxUjNRcVJiM1FxQHIzU3MxcHIzQnNQcjJic1FiUVIzUHFDMUByM1NgcUIyInExUjNQU2CCQHBw4HBw4ODgcHBw8WDggHDw8dFhYdDxYLCwcPCAgIDwsSHQ8PFhIEFhAGFhYPFhYPFhYdHRYHBw8PDxYHBwcHDg4ODgcHDgcHDg4OBwcODg4OBwcOCA8HDg4OBwcHBxccZwcPMz4aDiUHDx4rCB4cDwcHWA8PDg8HJTMPDw8IDw8dNwQOCBMZDggOB1IcGA0+KVcPDw8PHhYdDRgICA8PBxYWDwMMBw8PDwcICAgPDxYOJAcPBwcIBgcHBwcHBwcPDw8ICAgIDw8IDwcWFgcHCCUHBw8ODw8dDwgeFhYICAgPBwcJFAYXBwcMChYPFhYPBBIHFg4CDAcPCA8PDiQHBxYWDg4OFg8HDggPCRQvEwcHJQs3Bw0uAgwRDQ4PBwMMFhYHWAobNQUPBw8PBw4IDg8HAwxCDyQ7ByAEJQgPQgcICA8HCDMHBx0IDwcRBSUICDcSHQ4QDvuQBAcVEAMKMwMNBAEkHBAHEQoHAwMNCgMDH0ICGyIDCikJBUAYBBqTLBEEDwgJG
QMJDwkICxARBwoHBwcUFSgrFgrhKAwTLwoDKDMiEw8DLgUYDRwfESIbBBcDBwQHAwMDDQYDAwgDFgEDBwQlBxsMAgMDCx4HAykRBB8JUh8EGAgPJhAVBBEeDQQbDngXBwMzDhcELwwCCgcDESIBOAMHCwkVMzADAcsEMwf98QoNAxIQBwcBShj+AgcHzAcEBrQEBgMsB3oKAwcBUQYB/ukHfgoDB1UDYxMFQAcGAT0YEQclzwcKEQ0RBQEG7gcIBQYBBWgoBAcOCxpmAwMHxQMLBgMKIQQRAQME/n0HdwQGTwNLBH0LEdcOCgcKuyIDBxQL6AkFlgUBXwcBEAcOCBoZlwYiChUEVQeSEQcLnAqFBwdLBwMGAZkKkgcDSw4DAywHAwQH7gYHBxQBowTqAykDH08HBQG7BwcaDh9kBQsXEAwFCyokCzsOEAwWBQwFBQsFHAYWCxYLBhELCxYFBQsMGwsGAgkWDBAGEhoGHCEcSCIFHBELCwYQDAsWBgIOExQLCwwBChACCiELCgwGCwYQHAIJEQsGCwsLCwIJCxcCCQsGCxEQFhECCRwRCwYFLRAMBQIJBhIPC04GC1MhDAYGEQYGBgYGEQsQBQsGDAUFEAsLBQsLCwYFAgkGCwsLBQUFCwYGCxYHNycLBQYLEQsRCwsXJhYGDCwnBQsLBhECGQYGBgsLBgUMCxAMEBEGBgwKMxALCxclGAUGCwYWBRwGBQwFERYLBgsGCwkNCwUKHQYFBgYRBhwFCxELDhkREQsWCwsGCxYLBhwFCzIMBRwGCxAXFgsLFhEGCwsFHAsiBQ8CBgshCxELBQwLCwsLJxEQChgiFUMLBQULCwYLCwYGBgsICAsGFhAFBQULCwUFBQUFCxwGBgsLCxYGCwUKBgYLBgoMBQsGEREFGwULBgsFBQ7fBwMKQh0EJYEYK0J0BgY0ESIHAwcVMw0HKzTdS1GPBxEKkQ8OAwMHCgQEQRsJPgctFEBmGCwiHh
s8Kk9icB8YBAIPIgQaeNY9VQQHlAFcGCQLBB5ZJAhBcAdEDQQGBwcDBwUQAwMHAyUmIgMDCx4HAwUFBAQHBwQEBAQEAwMMCAMOAwo6cF4ZAyVgNgslNhUDBwQEBAQDAwMDAwQEMwMEBw4JDAYGCgcHBwYGGwMEBAcEDQYzAwNiB2AGCwYLEQYDBwQDAy8EBAciBwcEAwMHBwcGBgMDBAcDBwcwBwQLBggHBwMFBRQHDgMHCAkVAw4HBDcHBgcKBRYHAwMGIQoHAwQUCggBBwcEAwcKAwMGMwYGDQ0GFQQRBAMDLAcGNQsDAwgCBz4KBwMNCgYEGAcHBwMCCAYEBwQEFQMPBQMHBwcRAw4OAwMXBgMHBwcDAwcGAwMUBQUHBgMUDAgDHgEQAw8MCgoHAwgJDQQEBwf+UAMDAAAO/87+nATdBpgBggLpAu4C8gL4Av0DAQMFAwkDDwMTAxoDJAMoAfMAuACLL7gAkC+4AJsvuACdL7gAry+4ALwvuAC/L7gAwS+4AMMvuAAAL7gBSi+4AU0vuAFQL7gBUi+4AVUvuAFXL7gBWS+4AVsvuAFdL7gBXy+4AWEvuAFjL7gBZS+4AWgvuAFrL7gBby+4AXIvuAF1L7gBfy+6ABABVQCQERI5ugByAVUAkBESOboAdAFVAJAREjm6AHUBVQCQERI5ugCOAVUAkBESOboAyAFVAJAREjm6AOMBVQCQERI5ugEJAVUAkBESOboBDgFVAJAREjm6ARMBVQCQERI5ugE6AVUAkBESOboBrAFVAJAREjm6AbwBVQCQERI5ugHIAVUAkBESOboBzAFVAJAREjm6AdQBVQCQERI5ugIfAVUAkBESOboCIQFVAJAREjm6AlEBVQCQERI5ugJgAVUAkBESOboCigFVAJAREjm6Ao4BVQCQERI5ugKaAVUAkBESOboCswFVAJAREjm6AsMBVQCQERI5ugLJAVUAkBESOboC3QFVAJAREjm6AucBVQC
QERI5ugMAAVUAkBESOboDBQFVAJAREjm6AwcBVQCQERI5ugMJAVUAkBESOboDEQFVAJAREjm6AxMBVQCQERI5ugMYAVUAkBESOboDIQFVAJAREjm6AyQBVQCQERI5ugMnAVUAkBESOTAxASMmNSciFScHIicHIjUHIycGIycmKwEHJicjByYnNyY1NyY3FjcjNjMnNzY3JiM2NyYjNDMmJzcjNRY1Jj0BNjMmJzcmIzc0JzcnNyY1NyY1NjUmNTcmNxcmJzcnNDMnPwEmJzUyNSI1Nyc3JiM3MxYzNyc1Myc3MyYnNzYnNjcmNTcWMxY3Fhc3FzcyBzcnNzMXFjcWFzI3FxY3FzcUFzQzFjMWNxc2NxU3MzIVNjcXNjMXNjMWFTcfATQ3FzI3FTcWMzcWFwYVMhUiFRcUIxYXBxcHFgcGIxcHFhUHFxQjFgczBxYVIxcGIxYHBhUXFCMXFRQjFxUGBxYzBxQXBxcjBxYVByIHFBcmBzIXFSMVBhcHMhUHFgcUBxYVBxYHFCMVFDMHFRcGFTIVJgcyFSIVBzIHJwcXJwcXJgcVFjMGFRcmFTIXBgcGFScjBzUGIycHJjcHJiMmByY1ByciNQYnJiMGIycGIyInByInBiMmJwcnBic0JwYnNQYnIicHIzUjAxYzFCMWFyMWFxYXFjMVIxQzFjMWMwcUMxQjFBcWMxQHFjMWFxQjFBcVIh0BFDMUBxYzFCMUFwcWMwYHMjcWOwEyPQEnMxY7ARUnByYrAScVMwYjFhcjFxUHFRQHFwcVFyIdARciHQEXIhUXIh0BFyIdARcHFwYVFDMHFRcjFBcyNTIXMjUyFzcVNxYXNDsBMhcyNxYzNDMUOwE2NRczJzQ3NCc3JjU3JzI1JzQ3JzcnMjc1NCcyPQE0JzY9AScyNyYjNTQnNzQnNzQnNDcnMzUnMzY3JzQzNjcnNjc1IzU3MhU3NCc2Nyc2NyI1Mjc1JzY1JzI1Njc0JzI3Jzc1
MjcnNj0BJzI3FTM3Iwc0IzQzNTcjJiMiBycjBzQnBycHIwcnIhUiJwc0KwEGBwYHFRciBxcGBxcGBxQXBwYHFBcVIwYjBgcjJicyNSYjJic3JisBIgcmKwEiFSMnBzUiByYrAQcjNQYFFSInNQUVIzUHFRQrATUFFxUnNQUVIzUHFCM1BxUjNQUVIic1MhcVIzUHFjMVIyc1BTIXFhcVIyYjNQUVIzUBKQUKHwUKEAgIGgUKBQsCCAsmAxUQEQ4FCg8EDgUBCwEKBwYBBQUBAQUFBQYIBAYGBAoBFSAKAQoECgYFBQYIBQQMDwcLBgoGBAEFBAQGDgUFAQYMCBAKBgoNAg0BBQoFARQKBQEKARAGAQUGBgUlEA8LChMWagoaCwEgBQoGHgkWCQwGJBVRIg8vLgYEGhUqCh4hCwoFFRAUCwUKCwUQCgUaIAoLOSUKBQsaEgUKCwQFBAoGBQYPAQYFBQcFCw4GCAILCwUGBQIJCAEGCgUEBgUBBQQKBgQFCRACEAEPARMPAQgHCgEFCwoGBAEGBQYLARUFBgkFBQUBCwsBCwEPAQQKAQUKAQoEBQQFCwMaKhsKBRALBQoVEAEWEQ4JFgUaSQUVEAEJHAMLCgUGCk4KGgoLDAkVFRQQDwMiDQgVSAEKCrUEBwQEFAMEEwkPCxQEBBQKFA4DCgMRAw4EFwgPEAQbCgcDCAkEBwMGBA8CAwcbCgQHBAQOFAoKFRICESIHBQYFBgQEBwQEBAQEBAQEBAQEBAQEBAcDBwQEBBEHCRYKCQsOCggdBxEKCwMHFQYDBAobBwMGBgMHBAQHBwcDAwMGAwcHAwMDAwMEBwMEBAQEBBgDDQMHCQgEDgkmAw0cBwMEBwQIBgQTBQMJGQQRAwMPCQMGBwMKDg0DEQcEBgcEBAcDDgMDFQMGAQoEEQMOAxEbBwMECQsHAzcFJwgTAw0HAw0LBBoFBBUDDhEUEAgDGAQNLAMSBhUNBBUYAwYBGRYHB
wMLBgwTFC0oCwMrAncGAQEDBF8HA/3uERgCXQMfBwMO/X4GAQfFB1IXAQMYAZEFIQMKAxMn/pEE/qMBEAEFBQoRBQYFBgsBDAoLAQUWLIgLBRADCQEsBRwgDQkQG0whBjYLHAsBGwMJBQsWEBsRGwNUCws2Iw8gAgkKDAIJGy8eAQk+IRwFCyscEAEKCxALIVcWCwYFIgULBYMQHAULJQwKDBoMAQULASgFDwsECwUhAQsGAQ8GAhQLBAgPBREBCQUOBQUFBgUKCwUGBQYGBgEGCgsGDgUJBQUBUwoGCwoWBi8YCwsbJA0QGyEJEgVIBV47EAsFCxtOHxYQBgUcEAULFgwKMRsEHQsxOwELBQseJAELEQUFDAomCyEcGgwKCQ0VAQsKCwULGxELBQYBBgsLCxYBGxwBHAsBCxYhCwUcAQYcHgUICAYKBQUGCgYFEAwBCwEFBQMFCgELBQYFBggMBQEFCgYFAQgJBgEGCwEIEBEG9iUEFzAUHCQgRwMOY1gRBwMQIyYDB185GQMjCQQGBAcDBx4EDRwGBBEKAxEHBAYXFQcDFAMKCjYLEQYLEQwSBxQEBwMOBgQREQMHAxUHAw4UBywGCAYYGAcOGwcNBgYGAwcHAwYGAwcEBA4HBAoGAQQGMwYIESkHCgsGFBURDQQJCwMLBwYGCBQHIgMOCAYGCw0YCwZBJQcDER4BFAcuOAcNWQMHBwQEAwcJGQcaIwpEBAYiCwYLFCkDBxgHFxgzBx4SAwoEBxEEBAcGGBsGBgMDBwcHAwQHAwcEBAYFIRwDBzoHCSMHPwUDBx4pGwgDAzMfRGOFA2ZoDxg6BwcLBwMDAwoHBwQoCgYEBAYGDQQGCiwEBwQHOgcHWQYGFwQEWQMHAx8DAzYHAwcDbQcMCwQfA6MHBwAAAAn/zv6yBRsHOgICAtAC1gLaAt4C4gLpAvAC9AW5ugGKAqgAAyu6AQcCqAGKERI5ugEVAqgBihESOboBHQKoAY
oREjm6ASMCqAGKERI5ugEtAqgBihESOboBMwKoAYoREjm6AT4CqAGKERI5uAGKELgBWtC4AVovuAGKELgBXdC4AV0vuAGKELgBYNC4AWAvuAGKELgBZdC4AWUvuAGKELgBadC4AWkvuAGKELgBbdC4AW0vuAGKELgBcNC4AXAvuAGKELgBc9C4AXMvuAGKELgBd9C4AXcvuAGKELgBedC4AXkvugF7AqgBihESObgBihC4AX3QuAF9L7gBihC4AYLQuAGCL7oBmAKoAYoREjm4AYoQuAGg0LgBoC+6AaUCqAGKERI5uAGKELgBp9C4AqgQuAKm0LgCpi+4AqgQuALE0LgCxC+4AqgQuALG0LgCxi+4AqgQuALI0LgCyC+4AqgQuALK0LgCyi+4AqgQuALM0LgCzC+4AYoQuAL23AC4ANQvuADhL7gBBS+4AQgvuAEKL7gBDC+4AQ8vuAAAL7gABi+4AdIvuAHmL7gB6S+4AesvuAH3L7gB+S+4AfwvuAH/L7oChQHqAAMrugDvAgYAAyu4AeoQuAAD0LoACQHqAoUREjm6AA4B6gKFERI5ugA6AAABCBESOboAQgAAAQgREjm6AEgAAAEIERI5ugBPAAABCBESOboAcgAAAQgREjm4AgYQuACs0LgArC+6ALoCBgDvERI5ugDDAgYA7xESObgA7xC4ANLQuADSL7oA0wIGAO8REjm4AO8QuADX0LgA1y+4AO8QuADa0LgA2i+4AO8QuADf0LgA3y+4AO8QuADk0LgA5C+4AO8QuADn0LgA5y+4AO8QuADq0LgA6i+4AO8QuADs0LgA7C+4AO8QuADz0LgA7xC4APXQuAD1L7gA7xC4APfQuADvELgA+tC4AO8QuAEG0LgBBi+6APsA7wEGERI5uADvELgA/dC4AP0vuADvELgA/9C4AP8vuADvELgBAtC4AQIvugEVAgYA7xESOboBHQIGAO8REjm4AgYQuAEh0LgBIS+4AgY
QuAEj0LgBIy+6AS0AAAEIERI5ugEzAAABCBESOboBPgAAAQgREjm6AXsAAAEIERI5ugGKAAABCBESOboBmAHqAoUREjm6AaUB6gKFERI5uAHqELgBvdC4Ab0vuAHqELgBwtC4AcIvuAHqELgBxNC4AcQvuAHqELgBydC4AckvuAHqELgBy9C4AcsvuAHqELgBzdC4Ac0vuAHqELgB0NC4AdAvuAHqELgB1tC4AdYvuAHqELgB2tC4AeoQuAHc0LgB3C+4AeoQuAHe0LgB6hC4AeDQuAHgL7gB6hC4AeLQuAHiL7gB6hC4AeTQuAHkL7gB6hC4Ae3QuAHqELgB8dC4AfEvuAHqELgB9tC4AfYvuAHqELgB+tC4AfovuAHqELgCAdC4AgYQuAIE0LgCBC+4AgYQuAII0LgCCC+4AgYQuAIL0LgCCy+4AgYQuAIO0LgCDi+4AgYQuAIQ0LgCBhC4AhLQuAISL7gCBhC4AhXQuAIVL7gCBhC4AhfQuAIXL7gCBhC4AhvQuAIbL7gCBhC4Ah7QugIqAAABCBESOboCQwAAAQgREjm6AlkAAAEIERI5ugJbAAABCBESObgChRC4AnzQuAJ8L7gChRC4An7QuAJ+L7gChRC4AoHQuAKBL7gChRC4AoPQuAKDL7gChRC4AofQuAKFELgCi9C4AosvuAKFELgCkNC4ApAvuAKFELgClNC4ApQvuAKFELgCl9C4ApcvuAKFELgCmdC4ApkvuAKFELgCntC4AoUQuAKk0LgCpC+4AgYQuALP0LgCzy+6AtkAAAEIERI5ugLdAAABCBESOboC4AAAAQgREjm6AuIAAAEIERI5ugLlAAABCBESOboC6AAAAQgREjm6AusAAAEIERI5ugLyAAABCBESOboC9AAAAQgREjkwMRMjIicjIhUiJzUyNyc1NyY1NjcmNTMmNTM0JzU3NSc2PQEjNTcnNyY1NDMnNSY1NjUmNTcmNTcnNTQzJjU2NSY1
Nyc2PQEjNTcjNTM1Jzc1IzU0Myc0Myc1Nyc3JiM0Nyc0NyY1NDMmNTI1IjU2NSc3NSc2NSc2Myc1NDMnNjUiNTcnNDMnNSI1NjUmNTMnNjUnNyc3JzY1JzU0MyYnNzUnNyY1NjUmNTMnNTYzJiM3NSc1NyY1NyY1NjUWFzcWMzYzFjM0Mxc3MhU3MzIVMjUXNxczJzcWMzUWMzcXNxYzNjMWFzcXMzcVNjciNTMVMzI3FjMnMxYzNxYzNRYzNzMyFTcXNDsBFzUyFTczFxQjFBcHFBcVIxcHFhUUBxciFRYVIhUyFRQjFxUyFQYVMh0BIycVFjMGIxYdARQjFhUiBxcjFxUUIxcHFwcWFwcXBxYVBxYVIxQzBxYXIhUXBxYVIxYXBxcGIxYdASMVFyIVMxUjFyIdARcjFxUHMh0BBhUUMwcVFCMXBxUXIgcXFAcXBxcHFDMHFRcjFRQXBhUWMxUUBxcHMhcUIyYjBiM1BiMmIwYjJwcnIwYHJiMHJicHMhUiFSciByYjIgc0IxUmIxQjJwcmKwEHJwciNQcjJiMGIzQjFAcmNQc1BycHJwcmIwcmNQYHFyIVJyIHJwYjJiMGAScGBycjBzQjByYrAQc0IwcmJxQjIicUKwEiBzQjFAcVIhUXFCMWMwcXFSI1IgcVFyIdARcHFDsBNxU3FDM3FzcUMzcXNzMXNDMWMzcXMjcXNjUyFzI1FwcyHQEGDwEGBwYHBgcGBwYHFh0BFAcWFwYdARQXBh0BFBc2OwE3FTY3FDM3FTI3FjsBMjcWMzI3FDsBNxU3FzcyFzY3FzQ3FTYzMjcmNTQrASIHJwc0JwciJwYjJic0NzY3Njc0NzY3NjcnNzQnNjUnMyc0JxQXFCsBIicXFSM1BRUjNQUVIzUBFSMiPQEWFxUiFSMnNxcVIzWAEBIUFQsgLAgOBgYLCwsGBgsFGxYLCwsWBgYGBgYbGwUFBQsGCwsLBQoQCwsLCwsLCwsGBgYGC
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
7gBORC4AnvQugJ9ATkBSBESObgCmxC4ApHQuAKbELgClNC4ApQvuAKbELgCltC4ApYvuAKbELgCndC4Ap0vuAKbELgCn9C4Ap8vuAKbELgCodC4AqEvugKkAtoCmxESOboCpgLaApsREjm6AqsC2gKbERI5ugKzAtoCmxESOboCtQLaApsREjm6AsAC2gKbERI5uALaELgCxdC4AsUvugLJAtoCmxESOboCzQLaApsREjm6AtcC2gKbERI5ugLdAJABVRESOTAxATMyBxcyNxc3Mhc3MhU3Mxc2MxcWFzM3FhczNxYXBxYVBxYHJgczBicXBxQHFhcGBxYzFCMWFwcXByYHFh0BFCMWFwcWMwcUFwcXBxYPARYHBhUWFQcWByMWFwcXBicXDwEWMxUiBzIPARcHFhcVIyYjFRcVIxcVIxYXBxQXBgcWDwEmJyIHJicHJwcmNQcXBy8BIgcmIyIHJyYHJwc0JxQjJiciBycGBzUHIyY1BgcnBiMnBiMmNQcjJwYHJyIHNQcmIwcmJzY1IjUyNSc0MyYnNyc3Jjc2Myc3Jj8BJzQzJjcjNyY1Myc2MyY3NjUnNDMnNTYXJzc0NyYjNzQnNyczNyY9ATI3NicyNSInNTM3NCc3JjU3Jjc0NyY1NyI3NBc1NiM/ASc2NSI3MjUmNTI1NyI3FzcnFzcnMjc1JiM2NycyNyYnNjc2NRczNxU2HwE3FhU3FjMyNzIVNxcyFTYXFhc2Mxc2MzIXNxYXNjMyFzcXNhcUFzYXBzYzFhc3MxUzBSMGBwYHBgcGFRYVByIVFBcGFRYVFCMnBisBJxQHJiMGIxQXMzYzFhUHFxQHFjMGBzMVIhUGBycjBgcnIgcWOwEyNxYVBhUUMxUiBxQXFhcWMxc0MxcyNzIXNjsBNjc2NzY3NDc1NCcjIicHJiMHNCMHJisBIgcGKwEiNSInJic1NDc0JzY1NCc3NDcWMzI3FzY1MjUnNjUnIgcnBgcnFC
MmIyInNDcmNTQ3FzMyFzcXMjUyFzYzMjU0JyMVIzQnIhUjIiciByInJic3JjU3Jic1MzU2NzQ3MhcyFxUUOwEyFzMyNzMyNyYjJiMmJyYnJicjJyYnByY1JicUBRUjNRUyHQEUKwEnNQUVIzUHFSInNTIHIzU3FhcVIzUHFSM1FxUjNRcUIyY1BzIVIyInFxUjNQcVFCM1NAczNxQzBxUUMxUjJiM1FxQzFSM3BxQXIzUHFSM1FzMVIgc1FxUjNQUVIzUFFSM1BTMVIzU0AxUiFSM1NyI9ATcFFSM1A98GCwEjBQELEQkIHQUMBQwCCQwpBBcSEg8GDBAEDwUBDAELBwYBBQQBBgUGBwgEBgUECwEXASIBCwwFCwcGBQYIBgYNEAEHDAEGCwcFAQYFBAcRAQUFAQcOCBEBDAEGCw8DDgYLBhULBQsBEQcFBwYGASkREA0KFRlzDB0LIgULBiEKGQkOBigXWSURMzMGBRwXLgwgJQsMBRcSFgwFDAsGEQsGHAEiDAs/KQsGCx0UBgsMBQYECwYFBhABBgYFBwYBDA8GCQILDAYGBQMJCQEHCwYFAQUFAQYFCgYEBgoRAhERAQEWEQgICwEFDAsHBQEGBQcMARcBBgYBCwYGAQULDAEMAREBBQsBBQsBCwUGAQUFAQ0EHS8dCwYRDAYLFxEXEw8KGQUdUAUYEQEKHgQLDAYFDFYLHAsMDgkXFxcREQMlAQ8JF08BCwv+ig0LNUo8UgIkAwMbAwMDRgcFCBoRHgcDDQQoKzwVJAcEBAcHAwcHDioVFAcKDRQYDQkLIjA7DAkJAwYrPmZtYxEDEAgeAwYGCCJ5Fjs3NSUlCQ4QEjkZHSEGBxsePAgJGzUiCiUhEwEHBAQEC1MHAwgGF4YaAwMDBzUHMgZUBBISGwsEBBgUIgkLHhgGBwYyIigDBwoEEAcFBRLLCQoKEgcHBAMSEQwWW0AaFAoGKQlrDitAGAgGCAkTCQQWLkchJhc
UEC0QKFMLAWkJBgYOA/4uCY0FAgc5DQMKUBEhBh0HRAcKTQcDBgF/BxsHIQoHBAQUDRkGXg4UA5oDBy4EBwoIEHwGAdUK/f8KAkcJEAcKCgMDA/7GCgb2EQEFBgsSBQYGBgsBDAELDAEFFy6ODAYRAgoBLgYBHSIOCREBHFAiBjkMHAEMAh0CCgUMFxEcEhwDWQsMOSQPIwIJCwwCChwxHwlCIh0GAQwuHBILCxILIlsXAQsGBiMFCwaJEhwGCycMCwwcDAEFDAErBhABCwULBgEjCgYQBwIVDAQIEAYSAQoGDwUFBQEFBQsMBQYFBgYFBwsLBg8GCwcGAVcLBgsLFwYyGQsMHCYOERwiChMFSwZiPhEMBQwcUSIWEQYGHREGAQwXDAo0HQQeCzQ+AQsGCx8mCxIFBgwLJwELIh4cDAoKDRcMCwEMBgscEgsGBgUBCwsMFwEdHQEdCwsXIwsGHQUBHCAGCAgGCwYGAQYLBgYQDAoGBQIGCwELAQUGBQYJAQwFBgoGBQEICQUBBgsBCBERyQcNEzBWGR0wBgQGuRUdDQs1BysDAwMEAwQUQAYNDCAQBwMHLygUCgQHCQMGBAQHWwoOCUMYBgoDbal1Ni8DAwMDAwMjEwYzHWsQmBQRBAIGBAQEBAaCUQQiHyoHERcKDi0LFkEVDwgDAwMECSwXKgEHBwQFBgcDAzYEBjsMHgYDBwMDBwQEIhUtBwQGDAwDByoLPTELBxoKBwSICx0VKIYsBgcKOVtJFBhMLAMYAxgKBwIIAwQKYQsLQAcKBhAHqA0NawMHAw0DBwUCAwMDBAQ9AgIJBwUFRgcHGAMDBwIHAwUFBAQHDQcDFA4EDQQRAwoOGA4KChsDCgoNBAQsCgrTCgosDQcG/a0LDAYGBAMHFwoKAAAAAAAAAAAAAYgAAAGIAAABiAAAAYgAABYUAAAWFAAAFhQAACJYAAAiWAAALRAAADHMAAAxzAAAMcwAADHMAAA3CAAA
O/AAAEWkAABJSAAASUgAAFcMAABkeAAAclgAAH14AACKXAAAlLwAAKh0AAC2kAAAyKAAANREAADURAAA1EQAANREAADURAAA1EQAAOW0AADltAAA/MQAAQ1wAAEeLAABMiwAAUXgAAFQYAABYvgAAW9oAAF+IAABiogAAZagAAGoqAABs7AAAb54AAHNKAAB3iQAAej4AAH8gAACBoQAAhHcAAIhAAACLuwAAj6QAAJIuAACUuwAAmAoAAJgKAACYCgAAmAoAAJgKAACYCgAAmAoAAJ3OAACh+QAApigAAKsoAACwFQAAsrUAALdbAAC6dwAAviUAAME/AADERQAAyMcAAMuJAADOOwAA0ecAANYmAADY2wAA3b0AAOA+AADjFAAA5t0AAOpYAADuQQAA8MsAAPNYAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA
9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAAALgIuAAEAAAAAAAAAIAAAAAEAAAAAAAEADgAgAAEAAAAAAAIABwAuAAEAAAAAAAMAGwA1AAEAAAAAAAQADgBQAAEAAAAAAAUALgBeAAEAAAAAAAYADACMAAEAAAAAAAkABgCYAAEAAAAAAAoAPwCeAAEAAAAAAAwAEADdAAEAAAAAAA0AGgDtAAMAAQQDAAIADAEHAAMAAQQFAAIAEAETAAMAAQQGAAIADAEjAAMAAQQHAAIAEAEvAAMAAQQIAAIAEAE/AAMAAQQJAAAAQAFPAAMAAQQJAAEAHAGPAAMAAQQJAAIADgGrAAMAAQQJAAMANgG5AAMAAQQJAAQAHAHvAAMAAQQJAAUAXAILAAMAAQQJAAYAGAJnAAMAAQQJAAkADAJ/AAMAAQQJAAoAfgKLAAMAAQQJAAwAIAMJAAMAAQQJAA0ANAMpAAMAAQQKAAIADANdAAMAAQQLAAIAEANpAAMAAQQMAAIADAN5AAMAAQQOAAIADAOFAAMAAQQQAAIADgORAAMAAQQTAAIAEgOfAAMAAQQUAAIADAOxAAMAAQQVAAIAEAO9AAMAAQQWAAIADAPNAAMAAQQZAAIADgPZAAMAAQQbAAIAEAPnAAMAAQQdAAIADAP3AAMAAQQfAAIADAQDAAMAAQQkAAIADgQPAAMAAQQtAAIADgQdAAMAAQgKAAIADAQrAAMAAQgWAAIADAQ3AAMAAQwKAAIADARDAAMAAQwMAAIADARPSW1hZ2V4IDIwMTguIEFsbCBSaWdodHMgUmVzZXJ2ZWRXaGl0ZSBPbiBCbGFja1JlZ3VsYXJXaG
l0ZSBPbiBCbGFjazpWZXJzaW9uIDEuMDBXaGl0ZSBPbiBCbGFja1ZlcnNpb24gMS4wMCBOb3ZlbWJlciA2LCAyMDE3LCBpbml0aWFsIHJlbGVhc2VXaGl0ZU9uQmxhY2tJTUFHRVhUaGlzIGZvbnQgd2FzIGNyZWF0ZWQgdXNpbmcgRm9udENyZWF0b3IgNi41IGZyb20gSGlnaC1Mb2dpYy5jb21pbWFnZXgtZm9udHMuY29tRnJlZSBmb3IgcGVyc29uYWwgdXNlIE9OTFkATgBvAHIAbQBhAGwAbwBiAHkBDQBlAGoAbgDpAG4AbwByAG0AYQBsAFMAdABhAG4AZABhAHIAZAOaA7EDvQO/A70DuQO6A6wASQBtAGEAZwBlAHgAIAAyADAAMQA4AC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAFcAaABpAHQAZQAgAE8AbgAgAEIAbABhAGMAawBSAGUAZwB1AGwAYQByAFcAaABpAHQAZQAgAE8AbgAgAEIAbABhAGMAawA6AFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwAFcAaABpAHQAZQAgAE8AbgAgAEIAbABhAGMAawBWAGUAcgBzAGkAbwBuACAAMQAuADAAMAAgAE4AbwB2AGUAbQBiAGUAcgAgADYALAAgADIAMAAxADcALAAgAGkAbgBpAHQAaQBhAGwAIAByAGUAbABlAGEAcwBlAFcAaABpAHQAZQBPAG4AQgBsAGEAYwBrAEkATQBBAEcARQBYAFQAaABpAHMAIABmAG8AbgB0ACAAdwBhAHMAIABjAHIAZQBhAHQAZQBkACAAdQBzAGkAbgBnACAARgBvAG4AdABDAHIAZQBhAHQAbwByACAANgAuADUAIABmAHIAbwBtACAASABpAGcAaAAtAEwAbwBnAGkAYwAuAGMAbwBtAGkAbQBhAGcAZQB4AC0AZgBvAG4AdABzAC4
AYwBvAG0ARgByAGUAZQAgAGYAbwByACAAcABlAHIAcwBvAG4AYQBsACAAdQBzAGUAIABPAE4ATABZAE4AbwByAG0AYQBsAE4AbwByAG0AYQBhAGwAaQBOAG8AcgBtAGEAbABOAG8AcgBtAOEAbABOAG8AcgBtAGEAbABlAFMAdABhAG4AZABhAGEAcgBkAE4AbwByAG0AYQBsAE4AbwByAG0AYQBsAG4AeQBOAG8AcgBtAGEAbAQeBDEESwRHBD0ESwQ5AE4AbwByAG0A4QBsAG4AZQBOAG8AcgBtAGEAbABOAG8AcgBtAGEAbABOAGEAdgBhAGQAbgBvAEEAcgByAHUAbgB0AGEATgBvAHIAbQBhAGwATgBvAHIAbQBhAGwATgBvAHIAbQBhAGwATgBvAHIAbQBhAGwAAAAAAgAAAAAAAP8nAJYAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAABAgACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApACKANoAgwCTAQMBBACNAJcAiADDAN4BBQCeAKoA9QD0APYAogCtAMkAxwCuAGIAYwCQAGQAywBlAMgAygDPAMwAzQDOAOkAZgDTANAA0QCvAGcA8ACRANYA1ADVAGgA6wDtAIkAagBpAGsAbQBsAG4AoABvAHEAcAByAHMAdQB0AHYAdwDqAHgAegB5AHsAfQB8ALgAoQB/AH4AgACBAOwA7gC6ANcA2ADhAQYA2wDcAN0A
4ADZAN8AsgCzALYAtwDEALQAtQDFAIIAwgCHAKsAvgC/ALwA9wEHAQgBCQEKAIwAmACoAJoAmQDvAKUAkgCcAKcAlACVAQsBDAROVUxMB3VuaTAwQjIHdW5pMDBCMwd1bmkwMEI5B3VuaTAyQzkEbGlyYQZwZXNldGEERXVybwlhZmlpNjEzNTIHdW5pRjAwMQd1bmlGMDAyAAAAAAAB//8AAg==');
}
1
0

[torbutton/maint-10.0] Merge remote-tracking branch 'acatgl/40019' into maint-10.0
by sysrqb@torproject.org 09 Oct '20
by sysrqb@torproject.org 09 Oct '20
09 Oct '20
commit dd24967b1bb89e83b656a22ff887eff81946be45
Merge: 3e2e33f1 b98e6fd6
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 20:23:59 2020 +0000
Merge remote-tracking branch 'acatgl/40019' into maint-10.0
chrome/skin/aboutTorFonts.css | 1 +
1 file changed, 1 insertion(+)
1
0

[torbutton/maint-10.0] fixup! Bug 40013: End of year 2020 Fundraising campaign
by sysrqb@torproject.org 09 Oct '20
by sysrqb@torproject.org 09 Oct '20
09 Oct '20
commit b98e6fd6c1370087445a6136b757c29c6cbbfe41
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Oct 9 22:14:06 2020 +0200
fixup! Bug 40013: End of year 2020 Fundraising campaign
Set unicode range of the WhiteonBlack font to Basic Latin
---
chrome/skin/aboutTorFonts.css | 1 +
1 file changed, 1 insertion(+)
diff --git a/chrome/skin/aboutTorFonts.css b/chrome/skin/aboutTorFonts.css
index d7ccd908..844d5842 100644
--- a/chrome/skin/aboutTorFonts.css
+++ b/chrome/skin/aboutTorFonts.css
@@ -5,6 +5,7 @@
* vim: set sw=2 sts=2 ts=8 et syntax=css:
*/
@font-face {
+ unicode-range: U+0000-007F;
font-family: WhiteonBlack; /* https://www.dafont.com/white-on-black.font */
src: url('data:font/ttf;base64,AAEAAAARAQAABAAQTFRTSNhraQIAAAWoAAAA8E9TLzJFB5PDAAABmAAAAGBWRE1Yc2h65wAABpgAAAXgY21hcEABUO8AACIQAAAERmN2dCAAKgAAAAAn0AAAAAJmcGdtBlacNAAAJlgAAAFzZ2FzcP//AAMABB70AAAACGdseWZ3DfufAAAn1AAD6pRoZG14qSDGXwAADHgAABWYaGVhZBPWePoAAAEcAAAANmhoZWEPnwesAAABVAAAACRobXR4BHnw9gAAAfgAAAOwbG9jYQLA16gABBJoAAADtG1heHADahOGAAABeAAAACBuYW1lNiKaSgAEFhwAAAaJcG9zdCsk4moABByoAAACSnByZXC4AAArAAAnzAAAAAQAAQAAAAEAAHrph0hfDzz1ABsIAAAAAADWJjXOAAAAANZ39/3/nP6LCG4HqAAAAAYAAQABAAAAAAABAAAGtP5eAN4I3/+c/4IIbgABAAAAAAAAAAAAAAAAAAAA7AABAAAA7AXkAHMAAAAAAAEAAAAAAAoAAAIADaEAAAAAAAMEYAGQAAUACAWaBTMAAAEbBZoFMwAAA9EAZgISAAACAAUAAAAAAAAAgAAAp1AAAEoAAAAAAAAAAEhMICAAQAAg+wIFmv5mAM0H0AGiIAABEUEAAAAEAAWaAAAAIAAAAtT/zgAAAAAB/AAAAmMAAAMA/84CoAAABTgAAAT1/84GSgAABab/zgLi/84C9gAAAvYAAAQAAAACav+cAw7/zgSb/84C8P/OAjkAAATH/84Drv/OBMz/zgUq/84FA//OBMf/zgUL/84EzP/OBJH/zgT0/84CLQAAAi0AAAP2AAAD9gAAA/YAAAUq/84H4wAABTX/zgUL/8QEzP/OBSr/zgRU/6IEe//OBUb/zgWV/84C4v/OA9z/zgUq/84Ds//OBmj/zgUY/84FKv/OBOX/zgTH/84FC//OBMz/
zgSF/84E6f/OBTD/zgf4/7kFMP/OBKv/zgTp/84C9gAAAjkAAAL2AAAD9gAABAAAAAQAAAAFNf/OBQv/xATM/84FKv/OBFT/ogR7/84FRv/OBZX/zgLi/84D3P/OBSr/zgOz/84GaP/OBRj/zgUq/84E5f/OBMf/zgUL/84EzP/OBIX/zgTp/84FMP/OB/j/uQUw/84Eq//OBOn/zgP2AAAD9gAAA/YAAAP2AAACoAAABHMAAAP2AAAD9gAABO4AAAP2AAAD9gAABAAAAAaKAAACiAAAA7AAAAP2AAAGigAAAp4AAAKiAAAD9gAAA/YAAAP2AAAEAAAABJwAAAQAAAAB/AAABAAAAAP2AAACzgAAA7AAAAasAAAHrAAABqwAAALsAAAGBAAABgQAAAYEAAAGBAAABgQAAAYEAAAIRgAABXcAAAR/AAAEfwAABH8AAAR/AAACkQAAApEAAAKRAAACkQAABe4AAAYSAAAGTgAABk4AAAZOAAAGTgAABk4AAAP2AAAGTgAABd0AAAXdAAAF3QAABd0AAATRAAAEYAAABOMAAAOaAAADmgAAA5oAAAOaAAADmgAAA5oAAAWuAAADiQAAA40AAAONAAADjQAAA40AAAICAAACAgAAAgIAAAICAAAEcwAABFQAAAPyAAAD8gAAA/IAAAPyAAAD8gAAA/YAAAPyAAAEIwAABCMAAAQjAAAEIwAAA2QAAAPyAAADZAAAAgIAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAARUAAAIAAAAAi0AAAItAAACLQAAA44AAAOOAAADjgAAA/YAAAP2AAAEAAAACAAAAAJ3AAACdwAAAVYAAAP2AAAD9gAAB+wAAAUq/84I3wAABdkAAAP2AAAEOQAABesAAAS2AAAD9gAAA/YAAAP2AAACmQAAA/YAAAP2AAAD9gAABDEAAAQ5AAAAAADsTAEBAUwBAQEBAQEBAQEBATsBA
QFMNwFMAUQBMwEBAQEBAUwBRDsBL0wBTAEzNwFMAQEmNwFMAQEBAQEBASEBAQEBAQFEOwEvTAFMATM3AUwBASY3AUwBAQEBAQEBIQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAAEBAQEBAAwA+Aj/AAgACP/+AAkACf/+AAoACv/9AAsAC//9AAwADP/9AA0ADf/9AA4ADv/9AA8AD//8ABAAEP/8ABEAEf/8ABIAEv/8ABMAE//8ABQAFP/7ABUAFf/7ABYAFv/7ABcAF//7ABgAGP/7ABkAGf/6ABoAGv/6ABsAG//6ABwAHP/6AB0AHf/6AB4AHv/5AB8AH//5ACAAIP/5ACEAIf/5ACIAIv/5ACMAI//4ACQAJP/4ACUAJf/4ACYAJv/4ACcAJ//4ACgAKP/3ACkAKf/3ACoAKv/3ACsAKv/3ACwAK//3AC0ALP/2AC4ALf/2AC8ALv/2ADAAL//2ADEAMP/1ADIAMf/1ADMAMv/1ADQAM//1ADUANP/1ADYANf/0ADcANv/0ADgAN//0ADkAOP/0ADoAOf/0ADsAOv/zADwAO//zAD0APP/zAD4APf/zAD8APv/zAEAAP//yAEEAQP/yAEIAQf/yAEMAQv/yAEQAQ//yAEUARP/xAEYARf/xAEcARv/xAEgAR//xAEkASP/xAEoASf/wAEsASv/wAEwAS//wAE0ATP/wAE4ATf/wAE8ATv/vAFAAT//vAFEAUP/vAFIAUf/vAFMAUv/vAFQAU//uAFUAVP/uAFYAVP/uAFcAVf/uAFgAVv/uAFkAV//tAFoAWP/tAFsAWf/tAFwAWv/tAF0AW/
/tAF4AXP/sAF8AXf/sAGAAXv/sAGEAX//sAGIAYP/rAGMAYf/rAGQAYv/rAGUAY//rAGYAZP/rAGcAZf/qAGgAZv/qAGkAZ//qAGoAaP/qAGsAaf/qAGwAav/pAG0Aa//pAG4AbP/pAG8Abf/pAHAAbv/pAHEAb//oAHIAcP/oAHMAcf/oAHQAcv/oAHUAc//oAHYAdP/nAHcAdf/nAHgAdv/nAHkAd//nAHoAeP/nAHsAef/mAHwAev/mAH0Ae//mAH4AfP/mAH8Aff/mAIAAff/lAIEAfv/lAIIAf//lAIMAgP/lAIQAgf/lAIUAgv/kAIYAg//kAIcAhP/kAIgAhf/kAIkAhv/kAIoAh//jAIsAiP/jAIwAif/jAI0Aiv/jAI4Ai//jAI8AjP/iAJAAjf/iAJEAjv/iAJIAj//iAJMAkP/hAJQAkf/hAJUAkv/hAJYAk//hAJcAlP/hAJgAlf/gAJkAlv/gAJoAl//gAJsAmP/gAJwAmf/gAJ0Amv/fAJ4Am//fAJ8AnP/fAKAAnf/fAKEAnv/fAKIAn//eAKMAoP/eAKQAof/eAKUAov/eAKYAo//eAKcApP/dAKgApf/dAKkApv/dAKoAp//dAKsAp//dAKwAqP/cAK0Aqf/cAK4Aqv/cAK8Aq//cALAArP/cALEArf/bALIArv/bALMAr//bALQAsP/bALUAsf/bALYAsv/aALcAs//aALgAtP/aALkAtf/aALoAtv/aALsAt//ZALwAuP/ZAL0Auf/ZAL4Auv/ZAL8Au//ZAMAAvP/YAMEAvf/YAMIAvv/YAMMAv//YAMQAwP/XAMUAwf/XAMYAwv/XAMcAw//XAMgAxP/XAMkAxf/WAMoAxv/WAMsAx//WAMwAyP/WAM0Ayf/WAM4Ayv/VAM8Ay//VANAAzP/VANEAzf/VANIAzv/VANMAz//UANQA0P/UANUA0f/UANYA0f/UANcA0v/UANgA0//TANkA1P/TANo
A1f/TANsA1v/TANwA1//TAN0A2P/SAN4A2f/SAN8A2v/SAOAA2//SAOEA3P/SAOIA3f/RAOMA3v/RAOQA3//RAOUA4P/RAOYA4f/RAOcA4v/QAOgA4//QAOkA5P/QAOoA5f/QAOsA5v/QAOwA5//PAO0A6P/PAO4A6f/PAO8A6v/PAPAA6//PAPEA7P/OAPIA7f/OAPMA7v/OAPQA7//OAPUA8P/NAPYA8f/NAPcA8v/NAPgA8//NAPkA9P/NAPoA9f/MAPsA9v/MAPwA9//MAP0A+P/MAP4A+f/MAP8A+v/LAAAAFwAAAPAJCgMAAgMCAwYGBwYDAwMFAwMFAwMFAwUGBwUFBQQGAgIEBAQFCQUFBQUEBQUGAgMGAwcGBQUFBwUFBgYJBgUFAwMDBAUFBQUFBQQFBQYCAwYDBwYFBQUHBQUGBgkGBQUEBAQEAwUEBAYEBAUHAwQEBwMDBAQEBQUFAgUEAwQICQgDBwcHBwcHCQYFBQUFAwMDAwcHBwcHBwcEBwcHBwcFBQYEBAQEBAQGBAQEBAQCAgICBQUEBAQEBAQEBQUFBQQEBAIFBQUFBQUFBQUFCQICAgQEBAQEBQkDAwIEBAkGCgcEBQcFBAQEAwQEBAUFAAAKCwMAAgMDAwcGCAcEBAQFAwQFBAMGBAUGBwYFBgUGAwMFBQUFCgYFBgYEBgYHAwQGBAgGBQUGBwYGBgYKBgYGBAMEBQUFBgUGBgQGBgcDBAYECAYFBQYHBgYGBgoGBgYFBQUFAwYFBQYFBQUIAwUFCAMDBQUFBQYFAgUFBAUICggECAgICAgICgcGBgYGAwMDAwcICAgICAgFCAcHBwcGBQYFBQUFBQUHBAQEBAQDAwMDBgUFBQUFBQUFBQUFBQQFBAMFBQUFBQUFBQUFCgMDAwQEBAUFBQoDAwIFBQoGCwcFBQcGBQUFAwUFBQUFAAALDAQAAwMDBAcHCQgEBAQGAwQGBAMHBAYHCAcGBwUHAwMF
BQUHCwYGBwYGBgYIAwQHBgkHBgYHCAcGBwcLBwYGBAMEBQYGBgYHBgYGBggDBAcGCQcGBgcIBwYHBwsHBgYFBQUFBAYFBQcFBQYJAwUFCQQEBQUFBgYGAwYFBAUJCwkECAgICAgICwgGBgYGBAQEBAgICQkJCQkFCQgICAgHBgcFBQUFBQUIBQUFBQUDAwMDBgYFBQUFBQUFBgYGBgUFBQMGBgYGBgYGBgYGCwMDAwUFBQUFBgsDAwIFBQsHDAgFBggGBQUFBAUFBQYGAAAMDQQAAwQDBAgHCQgEBAQGBAUGBAMHBQYICAcGBwYHAwMGBgYHDAcGBwcGBwcIAwUIBQoIBwYHCAcHBwgMCAcHBAMEBgYGBwYHBwYHBwgDBQgFCggHBgcIBwcHCAwIBwcGBgYGBAcGBgcGBgYKBAYGCgQEBgYGBgcGAwYGBAYKDAoECQkJCQkJDAgHBwcHBAQEBAkJCQkJCQkGCQkJCQkHBwcFBQUFBQUJBQUFBQUDAwMDBwcGBgYGBgYGBgYGBgUGBQMGBgYGBgYGBgYHDAMDAwUFBQYGBgwEBAIGBgwIDQkGBgkHBgYGBAYGBgYGAAANDgQAAwQEBAgICgkFBQUHBAUHBQQIBQcIBwgHCAcIBAQGBgYIDQcHCAcHBwgJBAYIBQoICAcICQgHCAgNCAgHBQQFBgcHBwcIBwcHCAkEBggFCggIBwgJCAcICA0ICAcGBgYGBAcGBggGBgcLBAYGCwQEBgYGBwcHAwcGBQYLDAsFCgoKCgoKDQkHBwcHBAQEBAoKCgoKCgoGCgoKCgoIBwgGBgYGBgYJBgYGBgYDAwMDBwcGBgYGBgYGBwcHBwYGBgMHBwcHBwcHBwcHDQQEBAYGBgYGBw0EBAIGBg0IDgoGBwoIBgYGBAYGBgcHAAAPEQUABAQFBQoJDAsFBgYIBQYHBgQJBggKCQkJCQgJBAQHBwcJDwkJCQkICAkKBQcKBgwKCQgJCgkICQoPC
gkIBgQGBwgICQkJCQgICQoFBwoGDAoJCAkKCQgJCg8KCQgHBwcHBQgHBwkHBwgMBQcHDAUFBwcHCAkIBAgHBQcNDg0FCwsLCwsLEAoICAgIBQUFBQsLDAwMDAwHDAsLCwsJCAkHBwcHBwcLBwcHBwcEBAQECAgHBwcHBwcHCAgICAYHBgQICAgICAgICAgIDwQEBAcHBwcHCA8FBQMHBw8KEQsHCAsJBwcHBQcHBwgIAAAQEgUABAUFBQoKDQsGBgYIBQYJBgQKBwkKCQoJCggKBAQICAgJEAoJCgoICQoLBQcKBg0KCgkKCwoJCgoQCgkJBgQGCAgICgkKCggJCgsFBwoGDQoKCQoLCgkKChAKCQkICAgIBQkICAoICAgNBQcIDQUFCAgICAkIBAgIBgcNDw0GDAwMDAwMEQsJCQkJBQUFBQwMDQ0NDQ0IDQwMDAwKCQoHBwcHBwcLBwcHBwcEBAQECQkICAgICAgICAgICAcIBwQICAgICAgICAgJEAQEBAcHBwgICBAFBQMICBAKEgwICAwJCAgIBQgICAgIAAAREwYABAUGBgsLDQwGBgYJBQYJBgUKBwoLDAoKCgkLBQUICAgKEQoKCgoICgsMBggLBw4LCgkKDAoKCgsRCwoKBgUGCAkJCgoKCggKCwwGCAsHDgsKCQoMCgoKCxELCgoICAgIBgkICAoICAkOBQgIDgYGCAgICQoJBAkIBggOEA4GDQ0NDQ0NEgwKCgoKBQUFBQ0NDQ0NDQ0IDQwMDAwKCQoICAgICAgMCAgICAgEBAQECQkICAgICAgICQkJCQcIBwQJCQkJCQkJCQkJEQUFBQgICAgICREFBQMICBELEwwICQ0KCAgIBggICAkJAAATFQYABQYGBgwMDw0HBwcKBgcKBwULCAsMDQsLCwoMBQUJCQkMEwsLCwsKCwwNBggMCA8MCwsLDQsLDAwTDAsLBwUHCQoKCwsLCwoLDA0GCAwIDwwLCwsNCw
sMDBMMCwsJCQkJBgsJCQwJCQoQBgkJEAYGCQkJCgsKBQoJBwkQEhAHDg4ODg4OFA0LCwsLBgYGBg4ODw8PDw8JDw4ODg4LCgwJCQkJCQkNCAgICAgFBQUFCwoJCQkJCQkJCgoKCggJCAUKCgoKCgoKCgoKEwUFBQgICAkJChMGBgMJCRMMFQ4JCg4LCQkJBgkJCQoKAAAVFwcABQYHBw4NEQ8ICAgLBggLCAYNCQwODA0MDQwNBgYKCgoNFQ0MDQ0LDA0PBwoOCRENDQwNDg0MDQ4VDgwMCAYICgsLDQwNDQsMDQ8HCg4JEQ0NDA0ODQwNDhUODAwKCgoKBwwKCg0KCgsRBwoKEQcHCgoKCwwLBQsKBwoSFBIIEBAQEBAQFg4MDAwMBwcHBxAQEREREREKEQ8PDw8NCw0JCQkJCQkPCQkJCQkFBQUFDAsKCgoKCgoKCwsLCwkKCQULCwsLCwsLCwsLFQYGBgkJCQoKCxUGBgQKChUOFw8KCxAMCgoKBwoKCgsLAAAYGwgABgcICBAPExEJCQkMBwkNCQcOCw4QDg4PDg0PBwcMDAwOGA8ODg8NDQ8RCAsQChMPDw4OEA4ODxAYEA4OCQcJDAwMDw4ODw0NDxEICxAKEw8PDg4QDg4PEBgQDg4MDAwMCA0MDA8MDAwUCAsMFAgIDAwMDA4MBgwMCAsUFxQJEhISEhISGRANDQ0NCAgICBISExMTExMMExISEhIODQ8LCwsLCwsRCwsLCwsGBgYGDQ0MDAwMDAwMDAwMDAoMCgYMDAwMDAwMDAwNGAcHBwsLCwwMDBgHBwQMDBgQGxIMDRIODAwMCAwMDA0NAAAbHgkABwgJCRIRFRMKCgoOCAoPCggQDBAREhAQEA8RBwcNDQ0RGxEQEBEPDxETCQwRDBYRERAQEhAPERIbEhAQCggKDQ4OERAQEQ8PERMJDBEMFhEREBASEA8REhsSEBANDQ0NCQ8NDRENDQ4WCQwNFgkJDQ0
NDhAOBw4NCQwXGhcKFBQUFBQUHBIPDw8PCQkJCRQUFRUVFRUNFRQUFBQQDxEMDAwMDAwTDAwMDAwHBwcHDw8NDQ0NDQ0NDg4ODgsNCwcODg4ODg4ODg4PGwcHBwwMDA0NDhsICAUNDRsRHhQNDhQQDQ0NCQ0NDQ4OAAAdIAoABwkKChMSFxQKCwsPCQsQCwgRDRETERERERASCAgODg4SHRIRERIQEBMUCw4TDBcSEhERExEQEhMdExERCwgLDg8PEhEREhAQExQLDhMMFxISERETERASEx0TEREODg4OChAODhIODg8YCQ0OGAkKDg4ODxEPBw8OCg0YHBgLFhYWFhYWHhQQEBAQCQkJCRYWFxcXFxcOFxUVFRUREBINDQ0NDQ0VDQ0NDQ0HBwcHEBAODg4ODg4ODw8PDwwODAcPDw8PDw8PDw8QHQgICA0NDQ4ODx0JCQUODh0TIBUODxURDg4OCQ4ODg8PAAAgIwsACAoLCxUUGRcMDAwQCgwSDAkTDhMVExMTExIUCQkQEBAVIBQTExQREhQWDA8VDhoUFBMTFRMSFBUgFRMTDAkMEBAQFBMTFBESFBYMDxUOGhQUExMVExIUFSAVExMQEBAQCxIQEBQQEBAaCg8QGgoLEBAQEBIQCBAQCw8bHxsMGBgYGBgYIRYSEhISCgoKChgYGRkZGRkQGRcXFxcTEhQODg4ODg4XDg4ODg4ICAgIEhEQEBAQEBAQEREREQ4QDggQEBAQEBAQEBARIAkJCQ4ODhAQECAKCgUQECAVIxcQERgTEBAQChAQEBERAAAhJQwACAoMCxYUGhcMDAwRCg0SDAkUDxMVFBQTFBIUCQkQEBAVIRUUFBUTEhUXDBAVDhoVFRQUFRQTFBUhFRMUDAkMEBERFRQUFRMSFRcMEBUOGhUVFBQVFBMUFSEVExQQEBAQCxIQEBQQEBEbCg8QGwsLEBAQERMRCBEQDA8cIBwMGRkZGRkZIhcTExMTCwsL
CxgZGhoaGhoQGhgYGBgUEhQPDw8PDw8XDw8PDw8ICAgIEhIQEBAQEBAQEREREQ4QDggRERERERERERESIQkJCQ8PDxAQESEKCgYQECEVJRgQERgTEBAQCxAQEBERAAAlKQ0ACQsNDBgXHRoNDg4TCw4VDgoWEBYYFhYXFhUXCgoSEhIXJBgXFhcUFRgaDhIYEB4YFxYWGBYVFxglGBYXDgoOEhMTGBcWFxQVGBoOEhgQHhgXFhYYFhUXGCUYFhcSEhISDBUSEhcSEhMeDBESHgwMEhISExUTCRMSDREfIx8OHBwcHBwcJhkVFRUVDAwMDBscHR0dHR0SHRsbGxsWFBcREREREREaEBAQEBAJCQkJFRQSEhISEhISExMTExASEAkTExMTExMTExMUJQoKChAQEBISEyULCwYSEiUYKRsSFBsWEhISDBISEhMUAAAqLw8ACg0PDhsaIR4PEBAVDRAYDwwZExkbGhkZGRgaCwsVFRUbKRsZGRsXGBsdDxQbEiIbGxkZGxkYGhsqGxkaEAwQFRUVGxkZGxcYGx0PFBsSIhsbGRkbGRgaGyobGRoVFRUVDhcVFRoVFRUiDRMVIg4OFRUVFRgVChUVDxMjKCMPICAgICAgKx0YGBgYDQ0NDR8gISEhISEVIR8fHx8ZFxoTExMTExMeExMTExMLCwsLFxcVFRUVFRUVFhYWFhIVEgsVFRUVFRUVFRUXKgsLCxMTExUVFSoNDQcVFSobLx8VFh8ZFRUVDhUVFRYWAAAuMxAACw4QDx4dJCAREREXDhIbEQ0bFRweHBscHBocDQ0XFxceLR0cHB0YGh4gERYeFCUdHhwbHRwaHB4uHhscEQ0RFxcXHRwcHRgaHiARFh4UJR0eHBsdHBocHi4eGxwXFxcXDxoXFxwXFxcmDxUXJg8PFxcXFxsXCxcXEBUmLCYRIyMjIyMjMB8aGhoaDw8PDyIjJCQkJCQXJCIiIiIcGRwVFRUVFRUhFBQUF
BQMDAwMGhkXFxcXFxcXGBgYGBQXFAwXFxcXFxcXFxcZLg0NDRQUFBcXFy4ODggXFy4eMyIXGCIbFxcXDxcXFxgYAAAyNxIADA8SECEfJyMSExMZDxMcEg4eFh4gHx4eHhwfDg4ZGRkgMSAfHiAbHCEjERggFiggIB4eIB4cHyAyIB0fEw4TGRkZIB8eIBscISMRGCAWKCAgHh4gHhwfIDIgHR8ZGRkZEBwZGR8ZGRkpEBcZKRAQGRkZGR0ZDBkZEhcqMCoSJiYmJiYmNCIcHBwcEBAQECUmJycnJycZJyUlJSUeGx8XFxcXFxckFhYWFhYNDQ0NHBsZGRkZGRkZGhoaGhUZFQ0ZGRkZGRkZGRkbMg4ODhYWFhkZGTIPDwgZGTIgNyUZGiUdGRkZEBkZGRoaAAA2PBMADRAUEiMhKiYTFBQbEBUfFA8gGSEjISAiIB8hDw8bGxsjNSMhICMdHiQmExsjGCsiIyAgIyAfISM2IyAhFA8UGxsbIyEgIx0eJCYTGyMYKyIjICAjIB8hIzYjICEbGxsbEh4bGyEbGxssERkbLBISGxsbGx8bDRsbExktNC0UKSkpKSkpOCUeHh4eERERESgpKysrKysbKygoKCghHiEYGBgYGBgmGBgYGBgODg4OHh0bGxsbGxsbHBwcHBcbFw4bGxsbGxsbGxsdNg8PDxgYGBsbGzYREQkbGzUjPCcbHSggGxsbEhsbGxwdAAA6QBUADhEVEyYkLikVFRUdEhYiFRAjGiMlIyMkIyEkEBAdHR0lOSYkIyUfICYoFRwlGi4lJSMjJSMhJCY6JiIkFRAVHR0dJiQjJR8gJigVHCUaLiUlIyMlIyEkJjomIiQdHR0dEyAdHSQdHR0vEhsdLxMTHR0dHSEdDh0dFBswODAVLCwsLCwsPCghISEhExMTEyssLi4uLi4dLisrKysjICMaGhoaGhopGhoaGhoPDw8PIB8dHR0dHR0dHh4eHhkdGQ8dHR0dHR
0dHR0fOhAQEBoaGh0dHToSEgodHTklQCodHysiHR0dEx0dHR4fAABDShgAERQYFiwqNS8YGRkiFBonGRMoHygrKSgpKCYpEhIhISErQisqKCskJiwvGCArHjYrKykoKigmKStDKycpGRMZISIiKyooKyQmLC8YICseNisrKSgqKCYpK0MrJykhISEhFiUhISkhISI3FR8hNxYWISEhIiciESIhFx84QDgYMjIyMjIyRS4mJiYmFhYWFjIzNTU1NTUhNTExMTEoJSkeHh4eHh4wHh4eHh4RERERJSQhISEhISEhIyMjIxwhHBEiIiIiIiIiIiIkQxISEh4eHiEhIkMVFQshIUIrSjEhIzInISEhFiEhISMjAABLUxoAExYbGTEuOzUbHBwmFx0rHBUtIi0wLi0vLSsuFBQlJSUxSjEvLTAoKjI0GyQwIjwwMC4tMC0qLjFLMSwuHBUcJSYmMS8tMCgqMjQbJDAiPDAwLi0wLSouMUsxLC4lJSUlGSolJS4lJSY9GCMlPRkZJSUlJismEyYlGiM/SD8bODg4ODg4TjMqKioqGBgYGDg5Ozs7OzslOzc3NzctKS4iIiIiIiI1ISEhISETExMTKiklJSUlJSUlJycnJyAlIBMmJiYmJiYmJiYpSxQUFCEhISUlJksXFw0lJUowUzclKDcsJSUlGCUlJScoAAAAAAADAAAAAwAAAxYAAQAAAAAAHAADAAEAAAHmAAYBygAAACAA4AADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGE
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
QuAFuL7gBHxC4AXDQuAFwL7gBihC4AXHQuAFxL7oBcgEfAxoREjm4AR8QuAF00LgBdC+4AR8QuAF30LgBdy+4AR8QuAF50LgBeS+4AR8QuAF80LgBfC+4AR8QuAF/0LgBfy+6AYABHwEGERI5uAEfELgBgdC4AYEvuAGKELgBgtC4AYIvuAEfELgBg9C4AYMvuAGKELgBhNC4AYQvuAGKELgBhtC4AYYvuAGKELgBjNC4AYwvuAGKELgBjtC4AY4vuAGKELgBkNC4AZAvuAGKELgBktC4AZIvugGmAQYAwhESObgDGhC4AanQuAMaELgBrdC4Aa0vuAMaELgBs9C4AbMvuAGmELgBtNC4AbQvuAMaELgBuNC4AbgvuAGmELgBudC4AbkvuAMaELgBvNC4AbwvuAGmELgBvdC4Ab0vuAMaELgBv9C4Ab8vuAMaELgBwtC4AcIvugHMAQYAwhESObgDGhC4Ac7QuAHOL7gDGhC4AdPQuAHTL7gBphC4AdTQuAHUL7oB3QEGAMIREjm6Af8BBgDCERI5uAISELgCCtC4AgovuAISELgCFNC4AgvQuAILL7gCEhC4Ag3QuAINL7gCFBC4Ag7QuAISELgCENC4AhAvuAISELgCF9C4AhcvuAISELgCGtC4AhovugI/AQYAwhESOboCQQEGAMIREjm6AkMBBgDCERI5ugJFAQYAwhESOboCSwEGAMIREjm6Ak0BBgDCERI5uAMaELgCUdC4AlEvuAGmELgCUtC4AlIvugJWAQYAwhESOboCWAEGAMIREjm6Al0BBgDCERI5ugJvAQYAwhESOboCdgEGAMIREjm6AngBBgDCERI5ugJ+AQYAwhESOboCgQEGAMIREjm6AokBBgDCERI5ugKSAQYAwhESOboClwEGAMIREjm6AqEBBgDCERI5ugKwAQYAwhESOboCsgEGAMIREjm6ArwBBgDCERI5uAMaELgCwNC4AsAvugLQAQYAwhES
OboC4gEGAMIREjm6Au8BBgDCERI5ugLyAQYAwhESOboDAgEGAMIREjm4AxoQuAMG0LgDBi+4AxoQuAMK0LgDGhC4Aw7QuAGmELgDD9C4AxoQuAMQ0LgDEC+4AxoQuAMT0LgDEy+4AxoQuAMX0LgDFy+4AaYQuAMY0LgDGC+4AG8QuANR3AC4AOMvuAAAL7gAAy+4AAgvuAAML7gAGC+4AZQvugMsAM0AAyu6AZgCOwADK7gBmBC4AAbQuAAGL7oAIADjAAAREjm4AZgQuAAk0LgAJC+4AZgQuAAm0LgAJi+6ADACOwGYERI5ugAxAjsBmBESOboAOQI7AZgREjm6ADsCOwGYERI5ugA/AjsBmBESOboASwI7AZgREjm6AFAA4wAAERI5ugBVAOMAABESOboAVwDjAAAREjm6AGoA4wAAERI5ugB4AOMAABESOboAfgDjAAAREjm6AKwA4wAAERI5ugC2AOMAABESObgAzRC4AMXQuADFL7oAxwDNAywREjm4AM0QuADJ0LgAyS+6ANMA4wAAERI5ugDrAOMAABESObgAzRC4AO7QuADuL7gAzRC4APLQuADyL7gAzRC4APfQuADNELgA+dC4APkvugD9AOMAABESObgAzRC4AP/QuAD/L7gDLBC4ARLQuAESL7gDLBC4ARTQuAEUL7oBGQDjAAAREjm6ARoA4wAAERI5ugEuAOMAABESOboBMADjAAAREjm6ATEA4wAAERI5ugEyAOMAABESOboBYwDjAAAREjm6AWsA4wAAERI5ugFyAOMAABESOboBgADjAAAREjm4AZgQuAGW0LoBpgDjAAAREjm6AcwA4wAAERI5ugHdAOMAABESOboB/wDjAAAREjm4AjsQuAIl0LgCJS+4AjsQuAIn0LgCJy+4AjsQuAIq0LgCKi+4AjsQuAIs0LgCLC+4AjsQuAIv0LgCLy+4AjsQuAIx0LgCMS+4AjsQuAI00LgCNC+4AjsQuAI20
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
C+4AZgQuAAt0LgALS+6ADACkgGYERI5ugAxApIBmBESObgCkhC4ADjQuAA4L7oAOwKSAZgREjm6AD8A4wAAERI5ugBLAOMAABESOboAUADjAAAREjm6AFUA4wAAERI5ugBXAOMAABESOboAagDjAAAREjm6AHgA4wAAERI5ugB7AOMAABESOboAfgDjAAAREjm6AKcA4wAAERI5ugCsAOMAABESOboAswDjAAAREjm6ALYA4wAAERI5ugDHAOMAABESOboA0wDjAAAREjm6AOsA4wAAERI5ugD9AOMAABESOboBGQDjAAAREjm6ARoA4wAAERI5ugEuAOMAABESOboBMADjAAAREjm6ATIA4wAAERI5ugE6AOMAABESOboBRQDjAAAREjm6AWMA4wAAERI5ugGAAOMAABESOboBjADjAAAREjm4AZgQuAGW0LoBoQDjAAAREjm6AbIA4wAAERI5ugHIAOMAABESOboBzQDjAAAREjm6AdIA4wAAERI5ugHUAOMAABESOboB2QDjAAAREjm6AeEA4wAAERI5uAKSELgCiNC4AogvuAKSELgCitC4AoovuAKSELgCjNC4AowvuAKSELgCkNC4ApAvugK5AOMAABESOboC1wDjAAAREjm6AuAA4wAAERI5ugLjAOMAABESOboC5QDjAAAREjm6AvEA4wAAERI5ugLzAOMAABESOboC9wDjAAAREjm6AwEA4wAAERI5ugMJAOMAABESOboDEwDjAAAREjkwMQEzFhUHMhUyNxY7ATUzFhU2MzIXNjMXNjMWFTYzFzcWFTcXNjMyFTY3FzcXNDMUMxUjFwYjFTIdASMnFRcHFhUnIwcyFSIVMhUiBxciFRcGIxcUIxcVJyMXIxYVFAcXBiMUMwcUFwYVMhcVIxYzBxUXBxYVBxYdAQcWFQcyFwczFQcyFSMVMxUiFRcHFxUHFhUiFRYVBxYXIhUyHQEUIxYVBhUWFQcVFyIdARYzBx
UWMwcVFwcnFRcVFCMUMxQjFxUXFQcVIyI1BiMnByYjBiMVFwcjNCMHJwcmIwc0IwcjIjUGBzQnByI1ByY1ByYnFCMmKwEiByYjIhUnBhUjNCMUIyY1NyYjNTM0IzUzNTciNTY1IjUyPQE0IzciPQEyNSI9ATI3JzcnMyYnNDMmIzc1ByczNCc2Myc2NSI1NzU0Izc1NDcnMjcnNDMnNTQ3NTI3NCM3NCM3NTYzJjUyNyY1Myc3IjUyNzQjNTMXNCc2PQEnByM1MjUmPQEiNTc0IzU3NSczNjU0JzI1JjUyNSYnNyc2MxQzNxcyNxc2FxUWFxUjJwYjJjUjFAcWHQEGBwYVMwcnIwYHBhUGBxcGBxYXFBcUFxYXMhc1MxUjFRYXFhczNSczFwcyFTczFRYXFhc3BxUWMxYXBiMGIycHIyciJzQ3JjU2NSI1NyY9ATciJwcmJwciJyMHFxUUFxQHFhUzFSMVFxUWFxQXFhcVBzIVFAcUFxQzNxcyNxYzNjc0JzQ3NCc2PQE0NzY3Mjc2PQEmJyYnJi8BJicmJyYnNjc0NzY1MzIVMjcWFRYXFDM3FzY7ARc0MzIXNjMXNjUzFhU3MjU0JzY1Jzc0JyYnJicHJjU0NyY1NCcjJxQrASInByInIhcWMxUiByYjNBcVIzQHMxcGKwE1NBcVIzQXFSM1BxUjNRcWHQEjJj0BFxUjNQUzFSM1BxYzFCsBJiM1FwcnNxcjJic1FiUjJzcWNxUjNRcVIzUHFSM0ATMVIzU0ARUjNR8BBiM1BxUUIzU0FxUjNRcVIzUHFSM1FzMUKwE0HQEjNQUVIzUHMxUUKwE1NBcVIzUHFSM1AV8GCwYGBiYSDxAGIRwhFiUwHiYBCxALBgoMRxsgJhgGXAw2QzcFFgoKDRQXBgsLBgYLBgYGBgYJBxAQBggKEgYQEAYMBgYGBgMJBgYGBgkNFgMJBgoEBAQKBgwMCQgLCwUFCwsLBgwGBgwMBgoEBgY
MBhEGDAwMDAQMEAwEBBULCgoQFgwGCyEFDBsMCgoKDAwFEQwFDEEzCgsGGwsQBgVfCm4rBhYyCwlFCjQeOAwJEyADX20GCgxYBgcPChYMBgwGBgwMDAwcDAsGCwsLBgcJBAQMBgwFCwYGBgYGDAwGBgYMCQcEBAQEBgYGBgYGAgkLCwUFBQUJCQkGFQYJBAQECwsaBAUFFhoECgYGEQULCwYGDB4aRycMB2cJJ6k6BwcUEQcHBwMDQwspCgMKCj4XNxQHAwYEBgQiRDQhDAkKCjtDEBIDBwoEBAcKCxsKQREKBAkFGwcVKC80AxgHNhAIBwcDAwMGAwYBEQcUHzNKRAsEDQMHDQ0KIxcsSH0DAwMHLwcOIjkHBAchAwMDAyJMKygtMyIoNXUgQ1IjExIQLxUDES0sBwYIBlITDyIRBgYIEREDBAc+EBgDBwofEQQEBAQ6IFsuIAdEBwMKGBEKBwgGBwpOBjwTAgYLCwZwB+cOBg8FB20HRANOC+sKAwrSA/7YChs9ExIGEQkI4wMHBMwHBwcV/rkNBwMRJgS7B9IH/msHDgFzCs8HBQWMBpIEpwrWBEsDBgQD/hoOMAcHBoEKLQoHpQEKDAYSDAwNBQsFBQUMBwUFBQUOCQcSBgYLDAwSIgUMBRInEgwFBQUSCwwFBRcFBgUeHDQMJx4FIgcMLgwFEhcnRQc5BQwLBxcFQBwpEAwLDAwBClELAQsREhERDAUjDAUdBgsXIxcSCyATBwVQBwsRBhkKCwUCChIFEgsFIx0FFwxLFwUFBRIRHW0dHDoSBSkLEgwFBQUFBhcFFxcFBQUFCwsFDAsUFQwFBQQIBwwGCwsGCwUMERIRDA8fDCIMIgcXHAsMBgUMBgwXCwU6CwcQXAdKMw0FOQwXBQsNChELDAYMEBIRHZAMCygXIwYLEgwLER0FFwwpLgsrAyMKDQsRCwwiDAUFCygYDAsGCwwLBxAHCxEGBQwdTh8FHUwLBRIUKx06
Lh4HBxIGCZ0LEgUEBAcIBRYSISARDAUKBwcHIRlSEDBHByU6DxpiVh5LHxsKCgoEKh0OCgoLDhEHBw4TFTIgBxEKDkdPox4GAxFcBgFWEAYEAxEWCQoiBwQGBQQKBhEiSggIBg8dChEOHl4nDytEGz0RAwkTBSofBAQHAwYHBAYIHgwSFhofGQIYJTonxxvaWIY8HCgsDBMKFDdmLjQTNRAOBwQMHRVYQAMDAwMDAwoEBggFBQNBDBIHBB4RMVssGxUGAwgaCQtXDxEEAwMDAwZKBwQGBgZNBwYhAxURBiEHBg0GBhsKCgMFBQQFBQQEBgYGDhEOAwcHAwYHAwczAg8DDwIDBwICBwcKBAQKBwb+ZQ0GBv7dBAQpAwsOHwMHBAYGBwcECgoUBwcEBgYNERGZCgoYBwcHBg0KChcODgA0/87/tQXYBx0CBQK9AsECxwLYAt8C5QLsAvIC+gMAAwcDCwMSAxYDGgMhAykDLwM7A2MDbwN2A3oDfgOCA4cDiwOPA5QDmgOhA6gDrQO7A8EDyAPMA9AD1gPeA+ID5gPrA+8D8wP5BA8EHAQgBCYELgAAATMWHQEUIxcVBxcUBxYVFCMWFQYjFxUjFTIVBzQjBxUzBxcVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnN
TMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NSInNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYFBgcGBwYVFxYXFhcVBiMiBwYHBgcXIxQXIxYzFDMVByciBxYXFhcyNxY7AQcVMhcyNRc0MxUyNzI/ARQzFhcWFzI3NSc3FxQHFTM3NjUmNQc0JyY1NjUmNTM2MzUGIyInNDcUFzM3JyIHIzY1Njc1IzQ3NSM0NzQjJiMmIwc0JwYHBiMnIgcmJyYnJiM1Jj0BNDc2MzQ3NCcyNzY3NCM3NCc3JiM3JzY1JjUmJyY1JiM0JyIHJiciFxUjNRcUFxUnNQc2NxYXFhUUBwYjIicmJzU2NzIXFCMmJxciFSInMgcUMxUnNTIzFSMnNxYHFBcVIzQnNBcGKwE3MgcWFSMiJzUFIzUyBRUUByY1MhcVIzUFFSM1EzMWFSM1NBcyFSIHNCM0BxUjJjUWFzM2MxcVIyInBzY1FxYzBhUWFSIdARQXMjUzFSMXFhUGFQYHJisBNSYnIic0NzY3NjcyFwUWHQEiByYrATU3MhcVIgc1NxYXIzUyFxUjNQUVIzUFIzU3FgUVIzUXFSM1BxUmIzUFMhUjIicHMh0BIzQnFxQjNCM3FgUVIyInBTM3FDMHFRQzFSMmIzUXFDMVIzcHFBcjJj0BBxUjNQUVIzUFMxUiBzUHFwYVIzQjNCEVIicFFSM1MzIVIzUFFSM0BRUjNQUXFSMnNTMVNzMVIgcmKwEHFBcjIic3NSYnFzYXMhc2MxYVFCMmJyY1BxUjNSEyHQ
EmNRcUFwciJzY1BakIJwgIEAgIEBAQCAgIEBgQCAcPDx8YGB8PFwwLCBAICAgPCxQfDw8XEwQXEQYXFw8XFw8XFx8fFwgIEBAQGAgICAgQEBAQCAgQCAgQEBAICBAQEBAICBAIEAgQEBAICAgIGR5vCBA4QxwQJwgQIS4IIR8QBwhgDxAQEAgoNxAQEAgQEB88BBAIFRoQCBAIWB8ZDkQrYA8PDw8fGCAOGQcHDw8IFxcPAg0IDxAQCAcHBw8PFxAoCBAICAoGCAgICAgICBAQEAgICAgQEAgQCBgYCAgIKAgIEBAQECAQCCAYGAgICBAICAoWBhoICA4KGBAYGBAEFAgYEAIOCA8HDw8QJwgIFxcQEBAYEAgQBw8JFjMUCAgoCzwIDjEDDRMNEBAHAw0YGAhfCx06BRAIEBAIDwgQEAgDDUcQKD8IJAQnBw9ICAgIEAcIOAgIIAgQCBIFKAgIPBMgDxEQ/MWJSUgsGxQQQiklKgkSL0YZFRoDAwYDAQYzBBcEBw4bN1ERBBYICgMgNQMmAxQjG06nAysSLQoDEQ4RBwMHR3AUBwowBAQECAUYAwMEDhERBwQDBwMlIBMHDgoDAxEEHQUHDS8qEB8RBAYRGBYuEAUKKRMFHgMDBwgJBwQEBAQGAwMDAxgEKCggcBEYBhwFSQcwBwq/LB8hNCkbNyISHTQQDvEFBQcMBT0DBQkRMwcRA48KBwcHUgcDC0EFBRULCWwKBwUB/v0HBwGLDg4GRQ39ugNiBAoUOQcDBwNxChEZVAMYBAMKCw0RB7cNCwoUAxsEFxciLwdONg0ODjsGIhcXBjQvCAMH/s4sAwcLChQDBD0KDgQSEAcHYgcC7A39DQ4ECgJ8BDMG0AcD/kkHAwYBWAYDB7sHCgQG/s4DBgEBGgsGBAQVDhkFXw0UA5wRCgowAwKuBv1eCwkPkhEEAxECNAYB/uoHdwcLAZUH/igE/voRBg50IhEWDAYICgcHBwYEByE
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
xVfCjUfCxUKIBUVChUVCx81HwsKFR8VCyAVHx8LCxUKEBAVCzX8kgwB9QwMHgwGBhIMBgZCDB48BgELBgwMBgwMBhsDDCQeBgwGEgELBhIMCg4GDAELEwsGJAwYAQsYDCAcBgYGMxUURlQMBt4MBgwGCRUGBioMDHgMMBIGQgZUDAwGAQsBC6IGBh4MDAAC/87/DQTNBr0BTAGoBY24AakvuAGAL7gBqRC4ANnQuADZL7gA69C4AOsvuAGAELgAady4ACrQuAAqL7oABADrACoREjm6AAsA6wAqERI5ugAPAOsAKhESObgBgBC4ABbQuAAWL7oAGAGAAGkREjm6ADABgABpERI5uABpELgAUtC4AFIvuABpELgAVtC4AFYvuABpELgAW9C4AFsvuABpELgAXdC4AF0vuABpELgAYNC4AGAvuABpELgAYtC4AGIvuABpELgAZNC4AGQvuABpELgAZtC4AGYvuABpELgAa9C4AGsvuABpELgAbdC4AGkQuABw0LgAcC+6AHQBgABpERI5ugB9AYAAaRESOboAhAGAAGkREjm6AIcBgABpERI5uAGAELgAidC4AIkvugCKAOsAKhESOboAjQDrACoREjm6AI8A6wAqERI5ugCXAOsAKhESOboAnQDrACoREjm6AKcA6wAqERI5ugCoAOsAKhESOboArADrACoREjm6ALAA6wAqERI5ugC0AOsAKhESObgA2RC4AVjcuAC70LgAuy+4AVgQuAC90LgAvS+6AL4A2QFYERI5uADZELgAxNC4AMQvuADZELgAyNC4AMgvuADZELgAy9C4AMsvuADZELgA0NC4ANAvuADZELgA0tC4ANIvuADZELgA1tC4ANYvuADZELgA29C4ANsvuADZELgA3dC4AN0vuADZELgA39C4AN8vuADZELgA4dC4AOEvuADZELgA49C4AOMvuADZELgA5dC4AOUvuADZELgA6dC4AOkvuADZELgA7dC4AO
0vuADZELgA79C4AO8vuADZELgA8dC4APEvuADZELgA89C4ANkQuAD10LgA9S+4ANkQuAD40LgA2RC4APrQuAD6L7gA2RC4APzQuAD8L7gA2RC4AQnQuAEJL7oBCwDZAVgREjm6ARQA2QFYERI5ugEbANkBWBESOboBKADrACoREjm6ATAA6wAqERI5ugE0AOsAKhESOboBOADrACoREjm6ATsA6wAqERI5ugE/AOsAKhESOboBQADrACoREjm6AUUA6wAqERI5ugFJAOsAKhESObgBWBC4AU/QuAFPL7gBWBC4AVHQuAFRL7gBWBC4AVTQuAFYELgBVtC4AVYvugFgAOsAKhESObgBgBC4AX7QuAF+L7gBgBC4AYLQuAGCL7gBgBC4AYTQuAGAELgBh9C4AYAQuAGK0LgBii+6AZQA6wAqERI5ugGfAOsAKhESObgBWBC4AafQuAGnL7gAaRC4AarcALgAoC+4AKUvuACoL7gArC+4ALAvuACzL7gAtS+4ALkvuAC/L7gAAC+4AAIvuAAEL7gACC+4AAsvuAANL7gADy+4ABEvuAAVL7gAFy+4ABovuAAdL7gAHy+4AUgvugAYAKAAABESOboAMACgAAAREjm6AHQAoAAAERI5ugB9AKAAABESOboAhACgAAAREjm6AIcAoAAAERI5ugCKAKAAABESOboAjQCgAAAREjm6AI8AoAAAERI5ugCXAKAAABESOboAnQCgAAAREjm6AKcAoAAAERI5ugC0AKAAABESOboAvQCgAAAREjm6AL4AoAAAERI5ugDfAKAAABESOboA4QCgAAAREjm6AO8AoAAAERI5ugDxAKAAABESOboA8wCgAAAREjm6APUAoAAAERI5ugD6AKAAABESOboBCgCgAAAREjm6AQsAoAAAERI5ugEUAKAAABESOboBGwCgAAAREjm6ASgAoAAAERI5ugEwAKAAABESOboBNACgAAAREjm6ATgAoAAAERI
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
QuAKrL7gCtxC4Aq7QuAKuL7gCtxC4ArHQuAKxL7gCtxC4ArPQuAK3ELgCtdC4ArUvuAK3ELgCudC4ArkvuAK3ELgCvNC4ArwvuAK3ELgCvtC4Ar4vuAK3ELgCwNC4AsAvuAK3ELgCwtC4AsIvugLKAXACpxESOboC0QFwAqcREjkAuAE9L7gBQS+4AUQvuAFGL7gBSi+4AUwvuAAAL7gAAi+4AAcvuAAJL7gADi+4ABAvuAAUL7gAHy+4ADkvuAA8L7gAPi+4AEAvuABDL7gATC+4AE4vuABQL7gAUy+4AcsvuAHOL7oADwFEAAAREjm6AB0BRAAAERI5ugAhAUQAABESOboAJAFEAAAREjm6AC4BRAAAERI5ugBFAUQAABESOboAbQFEAAAREjm6AIYBRAAAERI5ugCIAUQAABESOboAiwFEAAAREjm6AJIBRAAAERI5ugCWAUQAABESOboAmQFEAAAREjm6AJoBRAAAERI5ugCrAUQAABESOboAvgFEAAAREjm6AMEBRAAAERI5ugDDAUQAABESOboAxwFEAAAREjm6AMoBRAAAERI5ugDgAUQAABESOboA5wFEAAAREjm6AOwBRAAAERI5ugDvAUQAABESOboBBwFEAAAREjm6AQ0BRAAAERI5ugEuAUQAABESOboBOQFEAAAREjm6AVoBRAAAERI5ugFcAUQAABESOboBXQFEAAAREjm6AV8BRAAAERI5ugFkAUQAABESOboBcwFEAAAREjm6AYUBRAAAERI5ugGIAUQAABESOboBsAFEAAAREjm6AdwBRAAAERI5ugIXAUQAABESOboCIAFEAAAREjm6Ak4BRAAAERI5ugJQAUQAABESOboCWQFEAAAREjm6AsoBRAAAERI5ugLNAUQAABESOboC0QFEAAAREjm6AuMBRAAAERI5ugLwAUQAABESOboC8gFEAAAREjkwMQEUFzcyFzYzFjM1FjM2MzUjNRYzNRYXNRc1
FzcWMyc1MhU3Mxc1FzcWOwE1MxYVNjMVMzUzFTczNDMXNjMWMzYzFjM3FBc2MxY7ATI1MhU2NRYXNxcVFAcWFQcWFwcWFQcWFSMXBxYVBiMWMxUjFxQjFhUGIxYXBxYdASMmIxUWFSIVFh0BIxcVIxUzBhUXBxUXFSMVFxUnIxUzBxQXBxcHFxUUIxcGHQEXBiMXFQYHFwYjFxUUIxQzBzMVFCMVFxQjFxUGFTIXIycVFwYjFRQzFSMnFRYXBxQzBxcGHQEXFSIVMhUGIxUWFQcWMwcnIxUUIxcGIxUyFQYVFjMVIhUjIjUHJwYjFTMVIyInIxQjJyIHJwcmIxUjIjUHIyI1IhUiNSIVJiMVJyMUByInIxQjJwYjNQciJwcnFAcUBzQnIgcnBiMmKwEiNQcGIzU0JzcmIzY1IjUyNSInMjUXNScyNyY1NyYnNjU0JzYzJj0BAzMnNTM1JzI3NSI1MjUiNTcnNyc3JzI1JzI9ASM1MzUnMjUiNTI9ATQnNjUmJzY3JzcnNjMmJzQzJic2NSc2NScWFzI1Mhc3FzI3FjM1FhU3Mxc2OwEXNjsBNDcXMjUXMgEVNj8BNj8BJzI1JzI1JzY9ATQnMjcnNyc2NTQnNzY3IjU2NyY9ATciNTQ3JzciJzc0JyYnJic0JxQjJwYVBgcGFRcGBzIXIh0BFyIdARQzBhUUFwcUFwYHFxQHFhcGHQEXIxcVBzIVBgcXBxUXBhUUFxYzFhcWFzM3FBc3NTMVJzQnFCMmJzYzJic2NS8BMjU0JzI9ASY1NCc2PQE3IjU3NCc3JzQ3JzQ3JzciNTQ3JzI3JzU3Jj0BNyInNj0BNDM2MzQ3NDcWFTIXBxYXIhUWHQEXIxQXBgcWFQcWFQcWFwYHFwcyFQYdARQHMhUGHQEXIgcGKwElNTMVATMVIiU1FxQBNTMyFzc0OwEVByInIj0BFjMUNzQjNDsBFSI3NTMVAUUVCRwgAgcICQ8LCQQJOA0uN
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
9C4AfYQuAIC0LgB9hC4AgTQuAIEL7gBnRC4AkTQuAJEL7gBnRC4AkbQuAJGL7oCSwAAAOMREjm6Ak4AAADjERI5ugJQAAAA4xESOTAxASMmNTciNSIHJisBFSMmNQYjIicGIycGIyY1BiMnByY1BycGIyI1BgcnBycUIzQjNTMnNjM1Ij0BMxc1JzcmNRczNyI1MjUiNTI3JzI1JzYzJzQzJzUXMyczJjU0Nyc2MzQjNzQnNjUiJzUzJiM3NSc3JjU3Jj0BNyI1NyInNyM1NyI1MzUjNTI1JzcnNTcmNTY1JjU3JicyNSY9ATQzJjU2NSY1NzUnNj0BJiM3NSYjNzUnNxc1JzU0MzQjNDMnNSc1NzUzMhU2Mxc3FjM2MzUnNzMUMzcXNxYzNxQzNzMyFTY3FBc3MhU3FhU3Fhc0MxY7ATI3FjMyNRc2NTMUMzQzFhUHFjMVIxQzFSMVBzIVBhUyFSIdARQzBzIdASIVMh0BIgcXBxcjFhcUIxYzBxU3FyMUFwYjFwYVMhUHFRQzBxUUBxciBxcUIxcVFAcVIgcUMwcUMwcVBiMWFSIHFhUjFwcyFSIHFDMVIycUFwYdARc3MxUiFRYdATIVBxQzFQcVFyMGFRQXIhUWFSIVFhcHFwYjNCMHJyIHJwYDNCsBFAcGBwYHJyIHJwYHBgcWFyIHFwcUMzcVMjcWOwEyFxUHFRQXFAcXFAcXBhUUFxQHFwcXIh0BFwcVFyIVFwcUFwYdARQXBxciFRQXBgcWFwYdARQ7ATcVMjcWMzQzFjsBNxU3MxcyPQE0JzY9ATQnNj0BJzMnNTQ3IjUzJiczNCc2NTQnNj0BNDcnNjcnNjUmJzY3NCc3JiM2PQEnMzQnNj0BNCMUIycGBRUjNR0BIzUHFSM1Aq8ECQUFBB4NCw0EGRYZEB0kFx0BCAwIBQgJNhQZHRIERgkqMyoDEQgICg8RBAgIBQUIBQQEBAQHBQwMBQYIDgUMDAQJBQUFBQ
MGBAQEBAYKEAIHBQgDAwMHBAkJBgYICAMDCAgIBQkEBAkJBAcDBAQJBQ0FCQkJCQMJDAkDAxEJCAgMEAkFCRoDCRUJBwkHCQkEDQkECTImCAgFFQgMBQNJB1QhBRAmCQc0BygXKwkHDhgDSFMFBwlEBQUMCBEJBQkEBAkJCQkVCQgFCQkJBQUHAwMJBAkDCAUFBAQECQkEBAUJBwUDAwMDBAUFBQUFAgYICAUFBQUICAgEEAQIAwMDCQkVAwUFEhUDBwUFDQQJCQQECRcUNh0JBk4HHnwGBCVYLSw2EQQHBgs9KwsDBAUCAwNHBwgGNSZPGggHBwQEBAQLBwMHBAcDBgoEBAQEBAQEBAcDAwMEBAYDBwoHCUUSAgQGBzMHERsVJQMDAwMDAwMNAwMDAwMDBgMDBwMDBAQEBwcDBAQHBAYDAwMDDjcDIgz+XAMHSAP+0wEJCwYRCwsMBQoEBAQLBwQEBAQMCQYQBQUKCwsRIAUMBBEkEQsFBQURCgsFBRYEBgUbGzALJRsFIAYLKwsFERUlQAY1BQsLBhUFPBomDwsKCwsBCksLChEQEA8LBiALBRsFChYgFhABCh4RBwVKBgEKEAUYCQoFAQoRBBEBCQUhGwQWC0YVBQUFERAbZRsaNhEFJgoRDAUFBQUFFgQVFQQEBAQKCgQLChMTCwUFBAcGCwUKCgUKBQwQERALDR4LHwwfBxUaCwsFBQsGCxULBDYLBg9WBkUwDAQ2CxUFCwwJEAoLBgsPERAbhQwKJhUhBAsQDAoQGwQWCyYrCikCIQkMChALCx8MBQUKJRYLCwYLCwoGDwcKEAYECxtJHQUbRgsEERIpGzYrHAYGEQYIBxEEBhYrHB82AwMDDR8TDxwGKRcYGAMDAwYREQsDHxsDBxEIHREo1woLBwYzBxgDHAoNCxcEBw0LBhMMAwwTB1UGCAYYRE81FhoiBwQEBwMDAwMDAwMbCggGBgcODBIFEwQGGCxPfQQYBh0
hFgUHBgYIIi4dDS0GBysIVAsENhA+e3MGCCkHCg1QdgobAwYG+QoKLwQEBAYGAAAAABj/zv7aBP4HGAIFA3QDeAN9A4EDhQOJA40DkQOXA50DoQOmA6wDsAO+A8QDyAPOA9ID1gPaA+AD5AQxugA9A1EAAyu4AD0QuAAD0LoABgNRAD0REjm4AD0QuAAH0LgAPRC4AArQuAAKL7gAPRC4AA7QuAA9ELgAENC4ABAvuAA9ELgAEtC4AD0QuAAV0LgAFS+6ABgDUQA9ERI5uAA9ELgAGtC6AB8DUQA9ERI5ugAgA1EAPRESObgAPRC4ACLQuAA9ELgAJ9C6ACoDUQA9ERI5uAA9ELgAK9C4ACsvugAuA1EAPRESObgAPRC4ADDQuAAwL7gAPRC4ADLQuAAyL7oANQNRAD0REjm4AD0QuAA50LgAOS+6AEADUQA9ERI5uAA9ELgAQ9C4AEMvugBEA1EAPRESOboATANRAD0REjm4AD0QuABR0LgAUS+6AFIDUQA9ERI5uAA9ELgAVdC4AFUvugBXA1EAPRESObgAPRC4AFjQuAA9ELgAYNC4AGAvugBjA1EAPRESObgAPRC4AGnQugBrA1EAPRESObgAPRC4AGzQuAA9ELgAcdC4AHEvuAA9ELgAc9C6AHUDUQA9ERI5uAA9ELgAdtC6AHgDUQA9ERI5ugB6A1EAPRESObgAPRC4AHzQugB+A1EAPRESObgAPRC4AIDQugCDA1EAPRESObgAPRC4AITQuAA9ELgAiNC4AD0QuACK0LgAii+6AI0DUQA9ERI5uAA9ELgAj9C4AD0QuACV0LgAlS+4AD0QuACX0LgAPRC4AJrQugCbA1EAPRESObgAPRC4AJzQugCfA1EAPRESObgAPRC4AKDQuANRELgB+9C4AfsvugH8A1EAPRESOboB/QNRAD0REjm6A1QDUQA9ERI5uANRELgDVdC6A1YB+wA9ERI5ugNYA1EAPRESObgDURC4
A1nQuANRELgDXNC4A1wvuANRELgDXtC4A14vuANRELgDYdC4A2EvuANRELgDY9C4AD0QuAPm3AC4AAAvuAHGL7gB2i+4AeEvuAHlL7gB7S+4AfMvuAH3L7gB+S+4Af8vugLNAKgAAyu4As0QuACa0LgAmi+6AJsAqALNERI5ugCfAKgCzRESObgAqBC4AKPQuACoELgArtC4AK4vuACoELgAsNC4ALAvuACoELgAxdC4AMUvuACoELgAyNC4AKgQuADK0LgAyi+6AMwAqALNERI5uACoELgAz9C4AM8vuACoELgA2dC4ANkvuACoELgA3NC4ANwvuACoELgA3tC4AKgQuADg0LgA4C+4AKgQuADi0LoA6QCoAs0REjm6AeYB2gAAERI5ugH4AdoAABESObgCzRC4AqjQuAKoL7gCzRC4AqvQuAKrL7gCzRC4Aq3QuAKtL7gCzRC4ArHQuAKxL7gCzRC4ArXQuALNELgCt9C4ArcvuALNELgCudC4As0QuAK70LgCuy+4As0QuAK+0LgCvi+4As0QuALA0LgCzRC4AsPQuALNELgCxdC4AsUvMDEBMxYdARQjFxUHFxQHFhUUIxYVBiMXFSMVMhUHNCMHFTMHFxUUIxUzFSMVFxUUIxYzNDMVFCMXBxYVBhUyFyIVFwcUFxUiBxcGIxcHFwYdARQzFQcUMxUjFxUGFRQXBxYVBhUXBhUXBxYVFCMXFQcXBhUXFRQjFxQjFwcWFRQHFh0BFCMXFQcWFQYdARcHMhUGIxUXBhUWFQcWFSMXFRQjFxUGByMiNQcjIicHJxQjNQciJwciJwYjJjUGFScjFCM0IwcnIxUzFCMiNTI1JwYVJwYjNCsBIgcmIwciNQYjIicGKwEiPQE0NycyPQEnNDM1NCM1MjcnNDcnNjM0JzcjNTYzJj0BJic3FDM0NyY1MjUiPQE3IjU3IjUyNRczNDcmJzMnNyc2NSI1MjUjNTI1JzQzJzU0Myc1M
yc1NyYjNTM1IjU2NTMVMzU0JzI1IjU3Fzc1Iic3JzU0MzQnNTY1JzcmNTI1JzY1Iic1Mjc1JzI1IiczNSM0MzUnMyYjNTMXNSc1NjMnNTMnMjUmIzU0NzQnNwc1Mj0BIzUzNSM1MzQjNzUnNSM0NyYnNjsBFhU3Mhc2NTIXNjMyFzcWMzYzFBc3FDM0MzIXNjMVNzMVMjUWMzYzFTcWMzYzFzcXNDMnNRYzNyc3FBcUOwEnNxYVMzcnNTMXMyc1MzIXNycyNRYzNxYzNgU0KwEHNCMHNSIHNCsBFAc1BgcGIwYHFSIHFwYVFBciBxUUMwcVFyIHFwcUMxYzNjMnNRc1NCc3NCc2PQEjNRc1NCM0Nyc1NzUjBzQjNTI3FDsBNDcnMjciJzY3FTY1FzM3FzI3FzI1FhcWFwYdARciFRQXBh0BFwcVFyIHFDMGFSIHFwcGIwYHBgcGBwYHFyIPAQYVBh0BFyIVMhcUMxUHFjMXNDMyFzI3FDMyNxc3Mxc0MxYzMjcVNzM3FDM2OwEXNjMXNDMVNjc2MzUnNTI3NCc2NyYjNTY9ATQnNzU0JzQ3NCcHIzU0Jwc1IgciJwYrAScUBycHIic2NyM1FzM1JzM2MzYzNjM1NjM2MzYzJzcnNRczNzY1MxUzNDM0IzQzNDcXMzQ3JzUXMjUXMjcnNjM0IzUXNzQnNjUnMjUyNScyNzY1FzUnNjcjNTM1IzUzNSM1NjU0JzY3IyYjNCcmJwciJyYnIgc0JyIHJyIHFSM1BwYVIzUHFSM1FxUjNQcVIzUXFSM1FxUjNQcVByInNQUXFSM0JxcVIzUXFSIHNRcVFCM1NAcVIzUXBxUXIhUnIyIVIzU2NRcyFSMiJxcVIzUHFSIVIzUXFSM1BxUjNQUVIzUHMxUHJzQDFSM1BNUHIgcHDQYGDQ0NBwYGDRQNBwcODhsUFBsOFQoLBg0HBwcOChEbDg4UEQMUDgYUFA4VFQ4UFBsbFAYGDQ0NFA
cHBwcNDQ0NBwcNBgYNDQ0HBw0NDQ0HBw0HDQYNDQ0HBwcHFRpgBw0wOhgNIgcOHCgHHBoOBwZSDg0ODgYjLw0NDgcODRwzAw4GExYOBw0HTBoWDDomUg0NDQ0bFRwNFQYGDQ0HFBQNAgsHDQ4OBwYGBg0NFA4iBg4HBwgGBwcHBwcHBw4ODgcHBwcODgcOBhQUBgcHIgcHDg0ODhsOBxsUFAcHBw4HBwgTBRYHBwsKFQ4VFQ4EEQcVDgIMBw0GDQ0OIgcHFBQODg4VDgcOBg0IEywRBwciCjMHDSoCCxAMDQ4HAgsVFAdSCRkyBA4HDQ4HDQcODQcCDD0OIjYHHwMjBw0+BgcHDgcHLwYGHAYNBxAEIgcHMxEbDQ8N/VMEAwcDBwcNBANBMEoVChgKDAgDCgcGAQcEBAQDAwMOBwrQEAMGAwoDAwcHBwcDBwQHBgMHAwQUAwMDBQEOKxUHAxQHBxEDBDsnIQwEBAQEBAQiBgMHBAsHFwMHEgVDOCsmJCcDEgQTHToiGwQEBQkKAxJQEQoORwQHMywvBxU2EQNIGwMHESYXBAYHCxQHAw4DFAsHCgoDBwQFAgcGCgcDBgYDBwNBBwMHIDUaIBsiGAY3EAsgCQcHBwQKBxEWBQQNGwcDEgMOBxQDBwMEFAMHDgoKFAcDDgMGBwcDDgMGBAoRBgMKAwcbBAQHFAcEERgHBwcHBw4HBwMDCAZHWjwGEyA+bAQHFAMHDgnhBAMEA0sH+QfCB8IHBwfdAwYBAmsDAwooChgKDkEHXANEBAQEBg4HAxQKBwMGAREDCw0EMwYfB/7VAzoDAwcfBgcYDh9kBQsXEAwFCyokCzsOEAwWBQwFBQsFHAYWCxYLBhELCxYFBQsMGwsGAgkWDBAGEhoGHCEcSCIFHBELCwYQDAsWBgIOExQLCwwBChACCiELCgwGCwYQHAIJEQsGCwsLCwIJCxcCCQsGCxEQFhECCRwRCwYFLRAMBQIJBhIPC04
GC1MhDAYGEQYGBgYGEQsQBQsGDAUFEAsLBQsLCwYFAgkGCwsLBQUFCwYGCxYHNycLBQYLEQsRCwsXJhYGDCwnBQsLBhECGQYGBgsLBgUMCxAMEBEGBgwKMxALCxclGAUGCwYWBRwGBQwFERYLBgsGCwkNCwUKHQYFBgYRBhwFCxELDhkREQsWCwsGCxYLBhwFCzIMBRwGCxAXFgsLFhEGCwsFHAsiBQ8CBgshCxELBQwLCwsLJxEQChgiFUMLBQULCwYLCwYGBgsICAsGFhAFBQULCwUFBQUFCxwGBgsLCxYGCwUKBgYLBgoMBQsGEREFGwULBgsFBQ7lAwMDAwMGAwUTBAtHKTQGESgHJhEJCzMDBxEEERENEQcUEQYRAwMIBhQIBgYIBgcDBwYGAREECgMDCgcDAwsrBxgHFRADAw4EBAQHBwQGIBs6BgcHEQQHBhMMCgdcBgsDAxkGMwcDJpNQVS1HIhQRByZYKwgSHgMRA6AKERELAwMGAwcHAwMDAwMDAwMDAwMDAwMDAwIIMwQNBAMDByMGCgcNCwMGAREHBgEGFQMHAwMDCwQEBAcDAwMEBAQiPgYHAwMYKS8iESYbGA0KBwQEDhwGBw4GBwsXAwQUBgcDEQQYBxQOBwoDAwcJDAYHHwcXLQYDAwcRTg4DBAMEEQMGASMoPUJvVAsEByELAwQDBASBBwcHBwMNZgMDLAcHKQcHOgMDDQQELAQHBwR7DQsJDwcDAzMDAwYUAwcDBigHBwcGCwYEBBUOGQUoBwciBwcRBA0UCgQEBwcHbQcHUQQHBAb+QwcHAAAAAC7/zv6cBVwG/QGCAzoDQANEA0gDTgNSA1YDWgNeA2QDaANuA3UDewOBA4kDkQOWA50DpAOsA7MDuQPBA8cDzwPWA9oD3gPiA+YD6wPyA/oEBwQLBBEEFQQZBB0EIgQmBCoELgQ0AAABMzIHFzI3FzcyFzcyFTczFzYzFxYXMzcWFzM3FhcHFhUH
FgcmBzMGJxcHFAcWFwYHFjMUIxYXBxcHJgcWHQEUIxYXBxYzBxQXBxcHFg8BFgcGFRYVBxYHIxYXBxcGJxcPARYzFSIHMg8BFwcWFxUjJiMVFxUjFxUjFhcHFBcGBxYPASYnIgcmJwcnByY1BxcHLwEiByYjIgcnJgcnBzQnFCMmJyIHJwYHNQcjJjUGBycGIycGIyY1ByMnBgcnIgc1ByYjByYnNjUiNTI1JzQzJic3JzcmNzYzJzcmPwEnNDMmNyM3JjUzJzYzJjc2NSc0Myc1NhcnNzQ3JiM3NCc3JzM3Jj0BMjc2JzI1Iic1Mzc0JzcmNTcmNzQ3JjU3Ijc0FzU2Iz8BJzY1IjcyNSY1MjU3IjcXNycXNycyNzUmIzY3JzI3Jic2NzY1FzM3FTYfATcWFTcWMzI3MhU3FzIVNhcWFzYzFzYzMhc3Fhc2MzIXNxc2FxQXNhcHNjMWFzczFTMBBgcGFSIHFRYdARQHFhcyNxQzNzIXMjcXNzIXNjsBNjc0JzI1NCc3Jj0BNyI1Mj0BNj8BNjUXMjUyFTI3MhcyFyIHFh0BFBcyNxYdASMnIw8BIjUiFSMiBxQXFSMmIyIHIjUiByYjIgcmNSIHNCMGFRQXBhUUFyIHFBcyNRYXMxQzMhcWFyIdAQcyFQYHFhUHFwYVFwcyFyIHFwYHBiMmNQciJyYnJic3NCc0Myc1JzI1Jzc0Jzc0JzcnNjU0JzY1JzU3JiM1JiM0IwYHNCMGBzQnByMHNQYdARQXFAcVFyIVFBcGFRQXNzMVIgcWFxYzFjMWFzQ7ARc0MxUyNxc3FzQ3FzI3FTI1NjUyFTc2MzYzNCM2NzUjNRczNCc3IzUzMjcnNTcnNTciJzQ3JzcnNzQnNzUnNTYzJj0BNDcnNjU0JzY1JjUyNTQnMjUnJj0BNjsBFzcmIzU0NzQnNyc3IjUiFSc1JicmIyYnJjU2MzQ3JzUXMjc2NTI3NTI3NCM2MzQnNjM0JzQ3J
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
C0A8RESOboC0wAtAPEREjm6AtgALQDxERI5ugLdAC0A8RESOboC/gAtAPEREjm6AwQALQDxERI5ugMHAC0A8RESOboDDQAtAPEREjm6Aw8ALQDxERI5ugMSAC0A8RESOboDFAAtAPEREjm6AyUALQDxERI5ugMnAC0A8RESOboDKgAtAPEREjm6AzIALQDxERI5ugM6AC0A8RESOTAxASMXBycGIwYnFQYnBhUiJwcnBiMGJwYHJwYjIicHIicGBwYnFCMHJxQjJiMGBycUBycHBicVJyMHNCcmJzY3NCM3NCcyNyc0IzcnBzcnBzQzJzQjNDcmIzQzNCc3LwEyJzUiNSYzJzQ3JjUmNyc0Myc2JzUHNTYzNCM2JzQjNTQzJyM3JzY1JzI3Jic1NwY9ATciNTcmJyY3Iic3BzQ3JzMmNyI1Nyc0Nyc3IicmNyc3JzY3Iic3NCMmMyYnNjcXMjcXNRYzNxYVNzMXNDcyFzcyFzcWFzQ3Mxc1Fhc3FjM2NzYVNjUXNxY/ARYzMjcWMzczFwcXNDcXNxc2NxYzNjcXFAcWFwYVFwYHMxUHMxUHFTI3MxUGBxcHFxQjFDMVBgcfAQcyFQcXBgczFgcXFAcUFxQHFxQHFwcXBhUXIgcXBgc2HQEWBxQ3FQcXBgcyFSIHFhciBxYfAQcyFSMWMxYHFRQHFwYHJyMGBycHIg8BIicHIycUIycGIycHNCMHFiMHAzQjBisBBzQjIgciJwcmJwc0KwEGHQEHBhUGFQYVBgcGBwYVFBcjFBcHFwcVFyMUFyIVFDMUBxciFRcWFTI3FBc2Mxc0NxQXNjMXNxQzNxQ7ATI/ARczNjUyFzI3FzcWFxQHFwcVFyMXIhUXFAcXBhUXBxUWMzI1Fhc0MxUyNxc3FjMyNTIVNxcyNzMUFzc0JzcjBzUyNSc1Mj0BIgcjNTciNTc0JzI1JzciNTI3Ij0BMzYzNjsBNjcVNjcUMzYzJzUmIyIHJxQjJj
UyNTQnNzUmIzY9AScyPQEnMjciPQE3JzI1JzI9ATQnNyc3NCc3NCc3Jzc0JzQzNCM1MzQjNTMVMzU0IzQzNCcyNyczNCc2Nyc0Nyc3NCc3IjU3NScyPQEjNTIVNzQnNjciNTI3JiM3JzcnMzQnNyc2PQEnMjUmJyMHNCcHJwYBFSM1FxUjNQUyFQYjNQcUMxUiBzQFFDMjFjMUBxYVFAcXBh0BByIHIzQ3Njc0PwEFFSM1BxYdASMmIzUyNTIXMxUiBzUHFSM1FxQjNRcVIzUFFSIHJzUFFSM1BQcnNQUyFQc1FxUjNQUjNTIFFSM1A8IMAQsBTRYJDiQDEBEWFhcJDQwKGwxTCwYFDAoEHgkCEBcFThwFGAoPEhcQFwsFCxEGCxwuGwMMBQQGBQsBCwUBCwUBEQsBCwsBBQUGCwEGBgEWAQsGBQYBBQcLDQYBCwgIERUBERACEAkGBQYKBQYBBQYEBQsBBgEJCgIFBgULCwIIBg8MBQYEBQYBEAcGBgoEBQEFCwEMAQYUHAsGCyc9CwsiHAUMEAYLCwUMFhEWBQsMIyALLRYcBQUyMhAkVxYmBw0JGAogBQwFIQscC3AYFAsMEBEoBQYGBQcQAgsFCxUGCwYOAg4KBgsRCA0GAQUGEAcEBQUBBAcLBgsHDw0GBggGBQUGCgULAQsiFgELBAYHAwgGBQUFAQEFBgYHCwELBQ8EEAsGDhMRFgMpCwkCCwYLBhsICRELBSIBCwaRBB0SJhEKBgEDBz0lBwcEMygRN0AfLQ0hHCIHBAQEBwMDAwcEBwMKBAseBgsOBwMRER8GBAcGBAcDHx0+BAciFAMHBAYHHx4RAwcKAwMGAwMDCgMDBwoVMwYqAwMHDhQHAwsDFAcrCAQDBwQEBAYKBwoDBwMDAwYGAwMDCgMEBAQCCAMbCwoNHQUECAUDCBMGASkDKQMDBwkFBwMDAwQCCgcDAwMGBgMDAwcEBwMDBwQHCgcEBAMKCgcFAgM
DBwYEBgMDAwMGAwcEBAcDBwMCBQQFAgUFBwcHCwQEBAcDAwMBGhEHChEHCf5kBJYHAVEHBQYNBwsN/vcDAwsJAwYDAwMDE6IDChUXYA0BKAM3KQMyDA4KPQsJD34HBAetA/2mAwcOAsoD/Q0DDgF9BxEXA/7wBwcBigP+uhEBEgkBCwUBBQkJBQYKBgEGDAEJBgUGBQELAQsGAgQFCgEMEQYGCwYBBgYLBggIBiAcAQUdBgsjFgwLHQEdHQEXDAsLAQUGBgsRHQsGCwsMFw0KCgwcHiILKAsMBgEGEgslIAsGCz8zDB4EHTMLDBcMAQYRHQUHERYiURwMAQYMET5iBkoGEwkjHBEOJhwMCxkyBRgLCwYLVwEGBgoGDwYLCwcFBQcFBgYNCwUFAQUFBQ8GCgERAQYQCAQMFgMHEAYKIwULBQsBEQYqAQwFAQwcDAsMJwsGHBKJBgsGIwUGCwEXWyILEgsLAREcLgwFHSJCCR8xHAoCDAsJAyIPJTgMC1kDHBIcEhcBDAUKAh0BCwEcDDkGIlAdEQkOIh0FLgkCEQYMji4XBQEMCwEMAQsGBQUEEQsGBQERAQcfBAQDAwcECgUFBAQPEBRBpjfNDEQOcTY3aFkKHQ8EBhEEEQMHDg0EBgQHNgMRBQYHBAMEBAQHBQIDAwMDAwMDBwMJBAMDAwMKCgQGCw0HByIDBwoOFBIDESIDOgoGBAQEBAQEBAcDAwMUCAYEEBIUAw0HCgQHAwMGEQQDCg4DFQcKFAQDDjMGBAQDBAMNEaoVBwcELSIDAwcKBA0LCgMHAxUHGwcDCgcDBxgDEyAHBwcFCBUGAQYHBAMHCgcDBAYGAw4GBxEpBwIWEBwDCAYHBggGGwQKAwcDEQcDAwQGBx8DDg0ROhgYEh0YDgYHBAcDCQUEBAMDAwP+8wcHdAMDjgcKESIEAwQGNSbBBAcvGAMRBxMMGwcHDRwbTyK0MwoLCyYTBQ0lBAoEAwoKRwQEewcH
GAYGyAQDAwcKBweWBgMDHgcDCgoHBwsHdwcHAAAa/87/EQT5BucB0AOSA5YDmgOfA6MDqwO1A7oDwAPGA80D0QPVA9sD3wPjA+cD6wPvA/UD+wQDBAkEDQQTAAABFBc3Mhc2MxYzNRYzNjM1IzUWMzUWFzUXNRc3FjMnNTIVNzMXNRc3FjsBNTMWFTYzFTM1MxU3MzQzFzYzFjM2MxYzNxQXNjMWOwEyNTIVNjUWFzcXFRQHFhUHFhcHFhUHFhUjFwcWFQYjFjMVIxcUIxYVBiMWFwcWHQEjJiMVFhUiFRYdASMXFSMVMwYVFwcVFxUjFRcVJyMVMwcUFwcXBxcVFCMXBh0BFwYjFxUGBxcGIxcVFCMUMwczFRQjFRcUIxcVBhUyFyMnFRcGIxUUMxUjJxUWFwcUMwcXBh0BFxUiFTIVBiMVFhUHFjMHJyMVFCMXBiMVMhUGFRYzFSIVIyI1BycGIxUzFSMiJyMUIyciBycHJiMVIyI1ByMiNSIVIjUiFSYjFScjFAciJyMUIycGIzUHIicHJxQHFAc0JyIHJwYjJisBIjUHBiM1NCc3JiM2NSI1MjUiJzI1FzUnMjcmNTcmJzY1NCc2MyY9AQMzJzUzNScyNzUiNTI1IjU3JzcnNycyNScyPQEjNTM1JzI1IjUyPQE0JzY1Jic2Nyc3JzYzJic0MyYnNjUnNjUnFhcyNTIXNxcyNxYzNRYVNzMXNjsBFzY7ATQ3FzI1FzIHNCsBBzQjFCsBBxQXBxYXIhUWHQEHMhciFRQXIgcXFAcXFAcWHQEHMhUHFwYVFBcGBzIVBxQXIgcXBxUXIgcXBxcUBxc3MxQXMjUyFzcXMjcXNxcyNxcyNxc3FDsBFzYzFjM3FzI3FhcWFxQHMhUiHQEUFxQjFBcGFRQXBxQXBxciFRciHQEyFxQHBgcnBiMnByY1Iic0Nyc0NyInNyY1NyYnMjUjBzQjBycjJxQjIicHIicHIyInFCM0IyIHF
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
S+4ATIQuAFb0LgBWy+4ATIQuAFe0LgBXi+4ATIQuAFg0LgBYC+6AWEBMgDYERI5uAEyELgBZtC4ATIQuAFu0LgBbi+4ATIQuAFw0LgBcC+6AY8ATwDYERI5ugGXAE8A2BESObgByRC4AajQuAGoL7gByRC4Aa3QuAGtL7gByRC4Aa/QuAGvL7gByRC4AbHQuAGxL7gByRC4AbPQuAGzL7gByRC4AbXQuAG1L7gByRC4AbjQuAG4L7gByRC4AbrQuAG6L7gByRC4AbzQuAG8L7gByRC4Ab7QuAHJELgBwdC4AckQuAHE0LgByRC4AcbQuAHGL7gByRC4AcvQuAHLL7gB7xC4AfXQuAH1L7oCAwBPANgREjm6AkMATwDYERI5ugJFAE8A2BESOboCSQBPANgREjm6Ak0ATwDYERI5ugJWAE8A2BESOboCZgBPANgREjm6AmgATwDYERI5ugJpAE8A2BESOboCbwBPANgREjm6AnUATwDYERI5ugJ3AE8A2BESOboCeQBPANgREjm6ApIATwDYERI5ugKmAE8A2BESOboCqQBPANgREjm6Aq0ATwDYERI5ugKxAE8A2BESOboCtgBPANgREjm6Ar8ATwDYERI5ugLBAE8A2BESObgByRC4AsLQuALCL7oCwwHJAKEREjm4AckQuALE0LgCxC+6AsUARQHJERI5uAHJELgC0dC4AtEvuAHJELgC2tC4AtovugLbAckAoRESObgByRC4AtzQuALcL7oC3wBPANgREjm6AuEATwDYERI5uAHJELgC4tC4AuIvugLxAE8A2BESOboC8wBPANgREjm6AzgATwDYERI5ugM6AE8A2BESOboDQABPANgREjm6A0IATwDYERI5ugNLAE8A2BESOboDVQBPANgREjm6A1wATwDYERI5ugNhAE8A2BESOboDZgBPANgREjm6A24ATwDYERI5ugN4AE8A2BESOboDewBPANgREjm6A4cATwDYER
I5ugOJAE8A2BESOboDjABPANgREjm6A5EATwDYERI5ugOTAE8A2BESObgBMhC4A5XcALgABy+4AYMvuAGOL7gBky+4AZgvuAGaL7gAuC+6AesBfQADK7gBfRC4AAHQuAABL7oAHAGaALgREjm6AC8BmgC4ERI5ugAxAZoAuBESOboAOAGaALgREjm6AEEBmgC4ERI5ugBWAZoAuBESOboAaQGaALgREjm6AGsBmgC4ERI5ugBtAZoAuBESOboAgQGaALgREjm6AIIBmgC4ERI5ugCfAZoAuBESOboAsAGaALgREjm6AMoBmgC4ERI5ugDUAZoAuBESOboA5gGaALgREjm6AOgBmgC4ERI5ugDvAZoAuBESOboA9AGaALgREjm6AR0BmgC4ERI5ugEgAZoAuBESOboBIwGaALgREjm6ATIBmgC4ERI5ugFFAZoAuBESOboBRwGaALgREjm6AUsBmgC4ERI5ugFQAX0B6xESOboBYQF9AesREjm6AWoBfQHrERI5ugFsAX0B6xESObgBfRC4AX/QuAF9ELgBhdC4AYUvuAF9ELgBiNC4AYgvuAF9ELgBitC4AX0QuAGP0LgBjy+4AX0QuAGR0LgBkS+4AX0QuAGV0LgBlS+4AX0QuAGX0LgBly+4AesQuAHa0LgB2i+4AesQuAHf0LgB3y+4AesQuAHk0LgB5C+4AesQuAHo0LgB6C+6AgMBmgC4ERI5ugJDAZoAuBESOboCRQGaALgREjm6AkkBmgC4ERI5ugJNAZoAuBESOboCVgGaALgREjm6AmYBmgC4ERI5ugJoAZoAuBESOboCaQGaALgREjm6Am8BmgC4ERI5ugJ1AZoAuBESOboCdwGaALgREjm6AnkBmgC4ERI5ugKSAZoAuBESOboCpgGaALgREjm6AqkBmgC4ERI5ugKtAZoAuBESOboCsQGaALgREjm6ArYBmgC4ERI5ugK/AZoAuBESOboCwQGaALgREjm6AsM
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
mNQYHJwYjJwYjJjUHIycUByciBzcHJiMHJic2NSI1MjUnNjMmJzcnNyY1NjMnNyY1Nyc0MyY3IzcmNzMnNjMmNzY1JzQzJzU2Fyc1NjcmIzc0JzcnMzcmNzUyNTYnMjciJzUzNTYnNyY1NyY3NDcmNTciNTQXNTQjPwEnNjUiNTI1JjUyPQEiNxc3Jxc1JzI1NyYjNjUnMjUmJzY3NjUXMzcVNh8BNxYHNxYzMjcyBzcXMhU2FxYXNjMXNjMyFzcWFzYzMhc3FzYXFBc2FxU2MxYXNTMVMwEnIwc0KwEiByIHFBcUIwYHIicGFSIHBgcVFhUWMxYzFQYHBhUXIgcUFwcWFRQHFh0BFyIVFyIdAQcyHQEHMhcUBxYdARciHQEUFxYXFhcWFRYzNxcyNxY7ATI3FjM3FTcUMzcVNjcyFTI1Mjc2NTY1JzY3IjUyPQEnMjc1NDcmPQE3IjU0Nyc0MyczNCcmJyYnNTY3Njc2NyI1NDcmPQE0NycyNTQnNzQnNjU0IzQzNCM0JzY9ASYjNCc0Jwc0JwcmKwEnBhc2NxcyNTIXFhUUBzIVBh0BFyIVFwcXBiMUBycHBhUjNCsBIic1Nyc3Izc1NCc3JzI9ATQjNzUnMjcnMyc3Njc2NzIVMjUyFxUjNTMVIzUXFSM1BRUjNQUVIicXFSM1BxUjNRcVIicXFSM1BQYVIzQnIRUjNQU2OwEWFQcWFwcWHQEXIxQXFAcXBhUUByYjIicmNTQ3JzY3Iic1NAUVIzUXIzUyA28FCh4FCw8IBxoFCgUKAggLJQMVDxENBQsOBA4FAQoKBgUGBQEBBQUFBgcDBgUDCgEVAR4BCgEKBQkFBAUGCAUECw4BBgsBBQoBBQMBBQUEBw8FBQIGDQcPAQsBBQkNAg0GCgUUAQoFCgEPBgUHBQUBJBAOCwoSFmcKGgsBHwULBR0JFgkLBiQUUCEPLgEuBQUZFSkKHSALCgUUEBQKBQoLBQ8KBRofCgo5
ASQKBgoZEgUKCwUBBQQKBgUGDgYFBQYECg0FBwILCwUBBQUCCQgBBgoFBAEFBQEFBAoGBAUIDwIQAQ8BEw8BCAcKAQULCgYEAQUEBgoVBQUBCgYFBQoLCgEPAQULBAoBCgUGBAULBBoqGgoFDwsFChQQARURDgkVBgEaRwUVDwIIGwQKCgUFCk0KGgkLDAgVFBUPDwMhDQcVRwoK/oEKFAcEAwYBRlMEDgwWBRYOFi4HBgYgE0MZSx4pAwMDAwMGBgMDAwMDAwMDAwMDAwQEHAoYJTosPjIHBwgFBggDDxcHAwdOAyJQBQQYVB8OHgMDBAQEBAMICgQEBAcDChEDCgdAFEgDH0w1FgkEBAcHCgMHBAQEBwMDFQQLA5xtBwoHEgwcET0pBx4EAxASQQQEBAQEBAQEBAMYBzMeBwcNTBcDBgMKAwcEBAQHAwMJBQQEBwcMCANBAwcHnApVB8IH/acEAfEGAWIDaQcbBgEzA/2SBAMEAeMH/u0UTwZBAxERBAcDAwMDBwdYBgghOzMHCgcDBgEBQATJBwcG9hEBBQYLEgUGBgYLAQwBCwwBBRcujgwGEQIKAS4GAR0iDgkRARxQIgY5DBwBDAIdAgoFDBcRHBIcA1kLDDkkDyMCCQsMAgocMR8JQiIdBgEMLhwSCwsSCyJbFwELBgYjBQsGiRIcBgsnDAsMHAwBBQwBKwYQAQsFCwYBIwoGEAcCFQwECBAGEgEKBg8FBQUBBQULDAUGBQYGBQcLCwYPBgsHBgFXCwYLCxcGMhkLDBwmDhEcIgoTBUsGYj4RDAUMHFEiFhEGBh0RBgEMFwwKNB0EHgs0PgELBgsfJgsSBQYMCycBCyIeHAwKCg0XDAsBDAYLHBILBgYFAQsLDBcBHR0BHQsLFyMLBh0FARwgBggIBgsGBgEGCwYGEAwKBgUCBgsBCwEFBgUGCQEMBQYKBgUBCAkFAQYLAQgREf6vBgMDBjoIBgoUBAcJBZ87BkRGH
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
gkFBQUKBQUK+KIfAg8IFiZRH7ENCEafGQMGCBQRCwYIBgg/CxS7EQMfAwcGCAcHBk4OIFoEG1wDQwE3EQQbBwMHBAMEAwMDIk8/f/76QD4RkBpEERERLhYEBwNBFA0LDjcvHRI4EAMHCAZEGyoQBAcGFQ9aFRcDAwQEBwMDAwMHBAcKDQcHEQcHAwUZDRQKBwMHBAYHBwMHBwoHCAIHAwMKGwMRCgofAxQOAwoOBA4DFAMDAw0DAwMHBAYBBwoVBAQDKU9HNi4hNhgDBR0HCAZQCwYIDgYcBCQFDQQKAw08OwQHNBMGCCURAwgGDgMDGAQRAxgYAzMlGzAQHAYAACH/zv8bBVwG/QGCApMCmAKeAqICpgKtArMCuQK+AsICyALMAtAC1ALcAu4C/gMCAwwDEAMUAxwDIAMoAzADNAM4AzwDQgNGA1ADhggRuAOHL7gCVC+4AAfQuAAHL7gCVBC4AAjQuAAIL7gCVBC4ADjcuABN0LgATS+4ADgQuABQ0LgAUC+4ADgQuABU0LgAVC+4ADgQuABX0LgAVy+4ADgQuABa0LgAWi+4ADgQuABc0LgAXC+4ADgQuABe0LgAOBC4AGDQuABgL7gAOBC4AGbQuABmL7gAOBC4AGjQuABoL7gAOBC4AGvQuABrL7gAOBC4AG/QuABvL7gAOBC4AHHQuABxL7oAcgJUADgREjm4ADgQuAB10LgAdS+4ADgQuAB30LgAdy+4ADgQuAB70LgAey+4ADgQuAB/0LgAfy+4ADgQuACB0LgAgS+4AlQQuACL0LgAiy+4AlQQuACN0LgAjS+4A4cQuAGy0LgBsi+4AWjQuAFoL7gBshC4AWrQuAFqL7gBshC4AdbcQRsANgHWAEYB1gBWAdYAZgHWAHYB1gCGAdYAlgHWAKYB1gC2AdYAxgHWANYB1gDmAdYA9gHWAA1dQQUABQHWABUB1gACcbgBddC4AXUvuAGyELgBrtC4Aa4vugF6Aa4Abx
ESObgBshC4AbDQuAGwL7gBshC4AbTQuAG0L7gBshC4AbrQuAGyELgBvNC4AbwvuAHWELgBydC4AckvuAHWELgB0dC4AdEvuAHWELgB0tC4AdIvugHUAbIB1hESObgB1hC4AdjQuAHYL7gB1hC4AdrQuAHaL7gB1hC4AdzQuAHcL7oB4AGuAG8REjm4AdYQuAHi0LgB4i+4AdYQuAHk0LgB5C+4AdYQuAHm0LgB5i+4AdYQuAHo0LoB6QGuAG8REjm4AbIQuAHz0LgB8y+4AdYQuAIy0LgCMi+4AlQQuAJD0LgCQy+4AlQQuAJL0LgCSy+4AlQQuAJO0LgCTi+4AlQQuAJQ0LgCUC+4AlQQuAJS0LgCUi+4AlQQuAJW0LgCVi+4AlQQuAJY0LgCWC+4AlQQuAJa0LgCWi+4AlQQuAJc0LgCXC+4AlQQuAJe0LgCXi+4AlQQuAJg0LgCYC+4AlQQuAJi0LoCZAGuAG8REjm6AnUBrgBvERI5ugJ6Aa4AbxESOboChwGuAG8REjm4AdYQuAKO0LgCji+4AdYQuAKP0LgCjy+6ApUBrgBvERI5ugKYAa4AbxESOboCngGyAdYREjm6AqABrgBvERI5ugKiAa4AbxESOboCrgGyAdYREjm6AsABrgBvERI5ugLCAa4AbxESObgB1hC4AsXQuALFL7oCxgGyAdYREjm6AsoBsgHWERI5ugLMAbIB1hESOboCzgGuAG8REjm6AtABrgBvERI5ugLSAa4AbxESOboC1AGuAG8REjm6AwIBrgBvERI5ugMFAa4AbxESOboDDQGuAG8REjm6AxsBrgBvERI5ugMrAa4AbxESOboDLQGuAG8REjm6AzABrgBvERI5uAJUELgDMdC4AzEvuAJUELgDM9C4AzMvugM2Aa4AbxESOboDOAGuAG8REjm4AdYQuAM70LgDOy+6A0EBrgBvERI5ugNEAa4AbxESOboDRgGuAG8REjm6A00BrgBvERI
5ugNQAa4AbxESObgAOBC4A4jcALgAAC+4AAgvuAFKL7gBTS+4AVAvuAFSL7gBVS+4AVcvuAFZL7gBWy+4AV0vuAFfL7gBYS+4AWMvuAFlL7gBaC+4AWovuAFvL7gBci+4AXUvuAF/L7gAiy+4AJAvuACbL7gAnS+4AK8vuAC8L7gAvy+4AMEvuADDL7oCKgOBAAMruAIqELgAV9C4AFcvuAOBELgAZtC4AGYvugByAJABVRESOboAdACQAVUREjm6AHUAkAFVERI5ugB3AJABVRESOboAjgCQAVUREjm6AMgAkAFVERI5ugDgAJABVRESOboA4wOBAioREjm6AOYDgQIqERI5ugDnA4ECKhESOboBCQCQAVUREjm6AQ4AkAFVERI5ugETAJABVRESOboBNwCQAVUREjm6AToAkAFVERI5ugF6AJABVRESOboBkACQAVUREjm6AbgAkAFVERI5ugHKAJABVRESOboB1ACQAVUREjm6AeAAkAFVERI5ugHpAJABVRESOboB/ACQAVUREjm6AgAAkAFVERI5ugICAJABVRESObgCKhC4Ah/QuAIfL7gCKhC4AiHQuAIhL7gCKhC4AiPQuAIqELgCJdC4AiUvugJDAJABVRESOboCVACQAVUREjm6AmQAkAFVERI5ugJ1AJABVRESOboCegCQAVUREjm6AocAkAFVERI5ugKVAJABVRESOboCmACQAVUREjm6Ap4AkAFVERI5ugKgAJABVRESOboCogCQAVUREjm6Aq4AkAFVERI5ugLAAJABVRESOboCwgCQAVUREjm6AsYAkAFVERI5ugLKAJABVRESOboCzACQAVUREjm6As4AkAFVERI5ugLQAJABVRESOboC0gCQAVUREjm6AtQAkAFVERI5ugLvAJABVRESOboC+gCQAVUREjm6Av0AkAFVERI5ugMCAJABVRESOboDBQCQAVUREjm6Aw0AkAFVERI5ugMSAJABVRESOboD
FACQAVUREjm6AxsAkAFVERI5ugMdAJABVRESOboDKwCQAVUREjm6Ay0AkAFVERI5ugMwAJABVRESOboDNgCQAVUREjm6AzgAkAFVERI5ugNBAJABVRESOboDRACQAVUREjm6A0YAkAFVERI5ugNNAJABVRESOboDUACQAVUREjm4A4EQuANR0LgDUS+4A4EQuAOD0LgDgy8wMQEzFgcXMjcXNzIXNzIVNzMXNjsBFjMXNxYXMzcWFwcWFQcWByIHMwYjFwcUBxYzBgcWMxQjFhcHFwcmBxYdARQjFhcHFjMHFBcHFwcWDwEWBwYVFhUHFgcjFhcHFwYjFw8BFjMVJgcyDwEXBxYzFSMmIxUXFScXFScWFwcUFwYHFg8BJiciByYnBycHIjUHFwcvASIHJiMiBycmBycHNCcUJyYnIgcnBgc1ByMiNQYHJwYjJwYjJjUHIycGByciBzUHJiMHJic2NSY1MjUnNDMmJzcnNyY3NjMnNyY/ASc0FyY3IzcmNRcnNjMmNzY1JzQzJzU2Myc3NDcmIzc0JzcnMzciPQEyNzYnFjUiJzUzNzQnNyI1NyY3NDcmNTcmNzQXNTYjPwEnNjUiNzI1JjUyNTcmNzM3Jxc3JzI3NSYjNjcnMjciJzY3NjUXMzcVNjMXNxYVNxYzFjcyFTcXMhU2FxYzNjMXNjMyFzcyFzYzFhc3FzYXFBc2Fwc2FzIXNzMVFwUnBycGKwEGFSMiFQYVJyMGByIHBgcXBiMUFwYVFwcUMzY1MhUyNzIXNjsBMjcmNTQ3JiM1MzIXNjUnNjcyFTcXMjcWFzIXMwcVFhUjJicjBhUyFwYVFDMGBzMUMxUGIxQXFAcUMxUiBwYHIycUBycjJxQjNQYdARQzBxUzFScVFyIVFyIHFhcjFwcWFQcWFQcUFxUHMhUiHQEUFzcyFzQzFDsBMjcXMzI1Jj0BJzY1MxYzNDMWMzcVMjc2NzY3NScyNzQjNzUmJzM0Jzc1J
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
SOboBiAFEAAAREjm4AB8QuAGw0LgBsC+4AB8QuAG00LgBtC+4AB8QuAG90LgBvS+4AB8QuAHA0LgBwC+4AB8QuAHE0LgBxC+4AB8QuAHI0LgByC+4AB8QuAHM0LgAHxC4Ac/QuAIjELgB6tC4AeovuAIwELgB69C4AesvuAIjELgB7dC4Ae0vuAIjELgB79C4Ae8vugH5AUECCxESObgCCxC4AgbQuAIGL7gCCxC4AgjQuAIIL7gCCxC4Ag3QuAINL7oCFAFBAgsREjm6Ah4BQQILERI5uAIjELgCIdC4AiEvugIlAUECCxESObgCIxC4AibQuAImL7oCKQFBAgsREjm4AiMQuAIr0LgCKy+4AgsQuAI60LgCOi+6AkkBRAAAERI5ugJiAUQAABESObgCbxC4AmvQuAJrL7gCbxC4AnHQuAJxL7gCbxC4An7QuAJ+L7gCbxC4AoPQugKRAUQAABESOboCmgFEAAAREjm6Ap0BRAAAERI5ugKfAUQAABESOboCoQFEAAAREjm6AqQBRAAAERI5ugKrAUQAABESOboCrwFEAAAREjm6ArgBRAAAERI5ugLCAUQAABESOboCyQFEAAAREjm6AtMBRAAAERI5ugLpAUQAABESOboC8AFEAAAREjm6AvMBRAAAERI5ugL1AUQAABESOboC9wFEAAAREjm6AvkBRAAAERI5ugL7AUQAABESOboDAgFEAAAREjm6AwUBRAAAERI5ugMJAUQAABESOboDEwFEAAAREjm6AxYBRAAAERI5ugMbAUQAABESOboDJgFEAAAREjm6AysBRAAAERI5ugMuAUQAABESOboDNAFEAAAREjm6AzoBRAAAERI5ugNiAUQAABESOboDZAFEAAAREjm6A2oBRAAAERI5ugNsAUQAABESOboDcAFEAAAREjm6A3MBRAAAERI5ugN1AUQAABESOboDeAFEAAAREjm4AgsQuAN/0LgDfy+6A4ABQQILERI5
uAILELgDgdC4A4EvugOCAUECCxESObgCCxC4A4PQuAODL7oDjQFBAgsREjm4AgsQuAOP0LgDjy+6A5IBQQILERI5ugOUAUECCxESOboDpAFBAgsREjm6A6gBQQILERI5MDEBFBc3Mhc2MxYzNRYzNjM1IzUWMzUWFzUXNRc3FjMnNTIVNzMXNRc3FjsBNTMWFTYzFTM1MxU3MzQzFzYzFjM2MxYzNxQXNjMWOwEyNTIVNjUWFzcXFRQHFhUHFhcHFhUHFhUjFwcWFQYjFjMVIxcUIxYVBiMWFwcWHQEjJiMVFhUiFRYdASMXFSMVMwYVFwcVFxUjFRcVJyMVMwcUFwcXBxcVFCMXBh0BFwYjFxUGBxcGIxcVFCMUMwczFRQjFRcUIxcVBhUyFyMnFRcGIxUUMxUjJxUWFwcUMwcXBh0BFxUiFTIVBiMVFhUHFjMHJyMVFCMXBiMVMhUGFRYzFSIVIyI1BycGIxUzFSMiJyMUIyciBycHJiMVIyI1ByMiNSIVIjUiFSYjFScjFAciJyMUIycGIzUHIicHJxQHFAc0JyIHJwYjJisBIjUHBiM1NCc3JiM2NSI1MjUiJzI1FzUnMjcmNTcmJzY1NCc2MyY9AQMzJzUzNScyNzUiNTI1IjU3JzcnNycyNScyPQEjNTM1JzI1IjUyPQE0JzY1Jic2Nyc3JzYzJic0MyYnNjUnNjUnFhcyNTIXNxcyNxYzNRYVNzMXNjsBFzY7ATQ3FzI1FzIDFBcGBzIdASMGBwYjFSIdAQcGBwYHBgcUFzMyNxYXMjc1IzU0NzU0Jzc1JzUyNxQ7ATI3JiM3FzI1MzIXMxcVFzcWFQYVFBcGFSInFCMXFDM2MzIXNSI9ARYXFjsBNjcmJzU0JzI9ASYjNzUmNSYnJiMmIzU0JzQnMyc1NCcjIgcnNDczNj0BJzUnJiciNTMXMyY1IzUyNzQnByInBiMiJwcWFzI3Fh0BIyY1JjUHFSMiNSMmJyIXF
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
/ERI5ugOfAPICvxESOboDoQDyAr8REjm6A6MA8gK/ERI5ugPDAPICvxESOboDxQDyAr8REjkAuAAAL7gBxi+4AdovuAHhL7gB5S+4Ae0vuAHzL7gB9y+4AfkvuAH/L7oCUADIAAMruAJQELgAmtC4AJovugCbAMgCUBESOboAnwDIAlAREjm4AMgQuACj0LgAyBC4AKfQuADIELgArtC4AK4vuADIELgAsNC4ALAvuADIELgAxdC4AMUvuADIELgAytC4AMovugDMAMgCUBESObgAyBC4AM/QuADPL7gAyBC4ANnQuADZL7gAyBC4ANzQuADcL7gAyBC4AN7QuADIELgA4NC4AOAvuADIELgA4tC6AOkAyAJQERI5ugHmAdoAABESOboB+AHaAAAREjkwMQEzFh0BFCMXFQcXFAcWFRQjFhUGIxcVIxUyFQc0IwcVMwcXFRQjFTMVIxUXFRQjFjM0MxUUIxcHFhUGFTIXIhUXBxQXFSIHFwYjFwcXBh0BFDMVBxQzFSMXFQYVFBcHFhUGFRcGFRcHFhUUIxcVBxcGFRcVFCMXFCMXBxYVFAcWHQEUIxcVBxYVBh0BFwcyFQYjFRcGFRYVBxYVIxcVFCMXFQYHIyI1ByMiJwcnFCM1ByInByInBiMmNQYVJyMUIzQjBycjFTMUIyI1MjUnBhUnBiM0KwEiByYjByI1BiMiJwYrASI9ATQ3JzI9ASc0MzU0IzUyNyc0Nyc2MzQnNyM1NjMmPQEmJzcUMzQ3JjUyNSI9ATciNTciNTI1FzM0NyYnMyc3JzY1IjUyNSM1MjUnNDMnNTQzJzUzJzU3JiM1MzUiNTY1MxUzNTQnMjUiNTcXNzUiJzcnNTQzNCc1NjUnNyY1MjUnNjUiJzUyNzUnMjUiJzM1IzQzNSczJiM1Mxc1JzU2Myc1MycyNSYjNTQ3NCc3BzUyPQEjNTM1IzUzNCM3NSc1IzQ3Jic2OwEWFTcyFzY1Mhc2MzIX
NxYzNjMUFzcUMzQzMhc2MxU3MxUyNRYzNjMVNxYzNjMXNxc0Myc1FjM3JzcUFxQ7ASc3FhUzNyc1MxczJzUzMhc3JzI1FjM3FjM2BSYrAQYHBhUjBhUiBwYHFBcHMhUUBxcHMhUUBxcHFRQXBxUUFxUUIxQHFBcUBxYdARciFRYXFhcVFhcyNxQXNzMUBxYXNjUzFRQXNjcyNzY3JiM1MzI3JzQ3NTQ3NTQnNjcnNTciNSInIgcnBiMiFRYXBhUUFwYHFAcnIic1NCc2NTQnNj0BNCc3NScyNSY9ATciJzc0JzQ3JjU0NyY1NDcnNjMnNDc2NTY1MxUWFxYdATI3MhcUBxQzFRQjFwcWFwYVFBcHFhUWFzYzMhc2NTI9ASc2PQE0JzcnNTQjNDcnNyYnNCczNCcmJxUjBzQjNzUmKwEiBycjBhUWMxUnByMnNTcXMzY1JicGIyc3NQYXFSM1BxUjNCcXMxUnNgcVIzUXMhcHJiM1MhcHNCc3MhcUFxUiFScjByM1NDc1NCc2NTIHMxQXIgcmPQE2BQciJzU3BTMUByYrAQcjNTQFByInNzIhMhUHJiM1BRUjNSEyFwcnMgUVIzUFFSM1FxUjNxc3FhUHJiMHJzUFIyY1FgczFjMVBisBNCcXFSM1BRUjNQcVIyc3FgUXByInNBMyFSMiJwEUMxQrATUyBRUjNQUzFCsBNBcVIzUHFSM0BxQjNQTVByIHBw0GBg0NDQcGBg0UDQcHDg4bFBQbDhUKCwYNBwcHDgoRGw4OFBEDFA4GFBQOFRUOFBQbGxQGBg0NDRQHBwcHDQ0NDQcHDQYGDQ0NBwcNDQ0NBwcNBw0GDQ0NBwcHBxUaYAcNMDoYDSIHDhwoBxwaDgcGUg4NDg4GIy8NDQ4HDg0cMwMOBhMWDgcNB0waFgw6JlINDQ0NGxUcDRUGBg0NBxQUDQILBw0ODgcGBgYNDRQOIgYOBwcIBgcHBwcHBwcODg4HBwcHDg4HD
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
wQREjm6A1YC3AMEERI5ugNZAQgAABESOboDXQEIAAAREjm6A2YBCAAAERI5ugNsAQgAABESOboDeQEIAAAREjm4AoAQuAN+0LgDfi+6A4EBCAAAERI5uAKAELgDhdC4A4UvuAKAELgDh9C4A4cvugOOAoADhRESObgCgBC4A5HQuAORL7oDkgKAA4UREjkwMQEzMhczMjUyFxUiBxcVBxYVBgcWFSMWFSMUFxUHFRcGHQEzFQcXBxYVFCMXFRYVBhUWFQcWFQcXFRQjFhUGFRYVBxcGHQEzFQczFSMVFwcVMxUUIxcUIxcVBxcHFjMUBxcUBxYVFCMWFSIVMhUGFRcHFRcGFRcGIxcVFCMXBhUyFQcXFCMXFTIVBhUWFSMXBhUXBxcHFwYVFxUUIxYXBxUXBxYVBhUWFSMXFQYjFjMHFRcVBxYVBxYVBhUmJwcmIwYjJiMUIycHIjUHIyI1IhUnBycjFwcmIxUmIwcnByYjBiMmJwcnIwc1BgcyFSM1IyIHJiMXIyYjByYjFSYjByMiNQcnFCsBJxUiNQcjJzQzNCc3NCc1Myc3JjU0NycyNSY1MjUiNTQzJzUiNTY1Ij0BMxc1JiM2MyY9ATQzJjUyNyczJzU0Myc3JzcmJzcnNyY1NyY1MzQjNyYnMjUnNyY1MyYnNyc2MyY9ATM1JzI1IzUzJzI9ASczJzU3Ij0BNjU0Izc1NDMnNzUnMjcnNDcnNyc3NCM3NSczNTQnNjUmIzU0Nyc3Iic0MxYzNjMVNjMWMzYzFzcXMzY3FjM3Fhc3IjUyNRcyNxYzMjcUMzUWMzQzFzcWOwE3FzcyFTczFjM2MxQzNDcWFTcVNxc3FzcWMzcWFTY3JzI1FzI3FzYzFjM2ARcUIxQHFDMHFRciHQEUFwcWHQEXIxQzFjMHFxUHMhUHFBciBxUXIh0BFyIdARciFRYdARcjFBcUBxciFRcHFBcGFRQXIh0BFhcHFwcWFwYdARQXFAcVFy
IHFxQHFxQHFRciFRYXMhc3FDsBNxUzNxU3MzcVNjMyFzQ3FzY3Mhc3FjsBMjU0JzI9ASYrASIHJiMGKwEnFAc0JxQjJiMHNCsBBisBIiciByInNzQnNjUiNTcnNyc3JzI3JzQ3NDcWFTI3Mhc2NTI1NCc2PQEnMjU0JzYzJiMiBycHIiciByYrASYnNzQnNyYnNjcmNTQ3FzQzFDsBMjcUMzI3FjsBMhc3FzI3FzI3FzcXMj0BNCc3JzY9ATQnBgc0KwEHNCcGKwEiJxQjNCcUIzUiByInBisBJxQjJiMiByYjIgUVBisBJzQBFSM1FxQrASInNTcWJxUjNQEVIzUTFSM1BTIVIgcmIzUyFzIVJzUXFjMUKwE0JwcXFSInFzMVBiMnJicyBxYzFSMiJzU2NR8BByYjNQQUEBETFQofKwgOBgYLCwoFBQoFGxYLCwsVBQUFBQUbGwUFBQoFCgoKBQoPCgoKCgoKCgoFBQUFCgUFCBIVBQUFBQoFBQoFBRoVBQUFBQUKBQUKCgUFEAIKBQsGBgYQEAoECgYGBQ8EBAoKBAQECgUKBQQKCgQKCi4JPhodDS0SCgULBQsECwUGBBZzChQUCg0iBhkLFR8KBggIGy0GGgobEAQFCwQMCgoFBQUOBy8IDSUEIAoGCiUKCgsPNSQLBgYGEAoFBQoFCgoFBQoFBQsFCgULBgUFBhAFFQkHBQUFBRAGCwUFCwYGBgYGBgYGBgoGCgoKBAQECwsGBQUKCgQECgoKCgQEBAQKCgQEBgoEDw0IBgYGBgYGBgYKDwUFCwQEBAoKCyoBCQIJCgULBQIICwoLNBAUCgsLPw8FBQUaBgoKCwQbBRcODzUKCgsLDwsKBhoEDgglBAUlFRoLGgofCxEOIBoOMAUFGgITBQsFCwQG/NkHBwYGAwMDCgMDBAQEBgcDBwsEBAcGAQQEBAQEBAQDAwMDBwQEBAcHBAQGBAMDAwMEBAcKAwQCBgMDBgMDBgc
UIwYEBxEXBxEmBp0RAgswBw1SEjUREgMHGwcDBQUpDhcGCBcRIhgRGAMRCwYEChYCAwYBBgEUBwMGAwMDAwYDAwMJBQQELwodDAgGUSIDBwQEBwUFBRMDBxgGBAcHBhMMcwcEBAQEBAMDBAQcEQMDHwkLBA4NBggUFhoGBwQGBwoOBxENFQcDAwMRC00DBAdADQ4LFFwDJgMIEwcRBggiKAQGBwsGMgwzAoAFBgMH/c8iuwcDBgEEDZkHAcUENwT+HQcDBw4KCQ8HEcgHBwcDCrgREgaxHwwCHwgWFFwKEh8GAQc9DgoLCgdxDwoiBSIKBAoBCQpJCQUYCggVBRQJIgEJFAUrCgoICwUKPwEOBQ4qBwkKBQUKEzETCgEJCAsFHQEJGAoPCQUPDgUKBQoECg8OChMjBA8YBQoICwUUCQUFAQkKHQkUAwcJDwoJBSIKBQUFHQUYGA8eBA8JJwgMCQoYHhgICw8FBQksGQQeCRIVAQkKBQkFFB0YBQ8ODwgLBRAIEgcFCgUFHQUKCgUFBQUFBRkFGAUdBQUPCgUFExgKCgUFBQUPBAkFBQkJBQUJDg4EBAQJBQ8FBQUFBQkiDRUFGRMUDgQZFAkJCwUKBAoYBQoFCgkFBQ8POQsFBCYGDyIKBAUiCh0KQwsTCgoJBRQJBQUUH1oKBVMICyEeBQodEA0PJxgFClcKExkJFAoJCgwHBRkiBR0dDxgdCgUiCQoKHQUKDg8FCwgKBQUJFSEKE0ksCgoFBQUKBQ4FCgUFDwYJCgUFBQUFBQUOBAkOBQUJBAQEBAkFBQkFAwYJBQUJBAQECQUFBQQGCQUFBQoFBQr+lw4KEFYKEREHBAYVHgcGCBgGB8UOGAowAwcIHQcDBwQlBwMfEQMGCBsHAwcDB0gDBw0GCw8GAwcDBAcUBxgRGQkSDAcrLRlzTgcbCg4NEQYIDhEDDwIDAwMDBwQEBAMDEQQEBgMDBAcDA7QPDAQbCgMDBwQEAwQD
BAcDAxQHBxQYF2AHAwQGFQ0REQ5tFAQXFhAFBQoECgciBAcOKBEYAwcRDj0EBwMDAwMdOBUDBwc2ERl2EgkUBAQEBAcDBwQHBAQEBAcDAwMzDRYaDhEdFhQVEAgJBAQGBQQKAwMEBAQEBwMDAwMDB0sHCgMG/tYEB4QHBwYHCAEGBv6pBwf95wcHLAcEBAM2BwMEBBQHDA8sAwoNIgoDBhYMChgDBwMJCBgDDgsDAAAAI//O/xEErQbnAdADbwNzA3oDfgOEA4wDkgOYA5wDpAOoA7ADtwO8A8ADxgPMA9ID2APcA+ID6gPvA/UD/QQBBAcEDwQTBBcEHAQiBCcELgAABTQnByInBiMmIxUmIwYjFTMVJiMVJicVJxUnByYjFxUiNQcjJxUnByYrARUjJjUGIzUjFSM1ByMUIycGIyYjBiMmIwc0JwYjJisBIhUiNQYVJicHJzU0NyY1NyYnNyY1NyY1Myc3JjU2MyYjNTMnNDMmNTYzJic3Jj0BMxYzNSY1MjUmPQEzJzUzNSM2NSc3NSc1MzUnNRczNSM3NCc3JzcnNTQzJzY9ASc2Myc1NjcnNjMnNTQzNCM3IzU0MzUnNDMnNTY1IiczFzUnNjM1NCM1Mxc1Jic3NCM3JzY9ASc1MjUiNTYzNSY1NyYjNxczNTQzJzYzNSI1NjUmIzUyNTMyFTcXNjM1IzUzMhczNDMXMjcXNxYzNTMyFTczMhUyNTIVMjUWMzUXMzQ3MhczNDMXNjMVNzIXNxc0NzQ3FBcyNxc2MxY7ATIVNzYzFRQXBxYzBhUyFSIVMhciFScVFyIHFhUHFhcGFRQXBiMWHQETIxcVIxUXIgcVMhUiFTIVBxcHFwcXIhUXIh0BMxUjFRciFTIVIh0BFBcGFRYXBgcXBxcGIxYXFCMWFwYVFwYVFyYnIhUiJwcnIgcmIxUmNQcjJwYrAScGKwEUByciFSciAzQrAQc1Bgc0KwEHNQYHNCcGIyInBisBJ
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
AEzL7gBQhC4ATrQuAFCELgBPNC4ATwvuAFCELgBPtC6AUUBQgEKERI5uAFCELgBR9C4AUcvuAFCELgBS9C4AUsvuAFCELgBTtC4AU4vugFaAkwBQhESOboBXAJMAUIREjm6AWMCTAFCERI5ugGAAkwBQhESOboBjAJMAUIREjm4AfcQuAGu0LgB9xC4AbLQuAGyL7gB9xC4AbrQuAG6L7gB9xC4Ab7QuAG+L7gB9xC4AcDQuAHAL7gB9xC4AcLQuAHCL7oBxgB6AfcREjm4AfcQuAHI0LgByC+6AckAegH3ERI5uAH3ELgB0dC4AdEvugHSAHoB9xESObgB5hC4AdTQuAHUL7gB5hC4AdbQuAHWL7gB5hC4AdjQuAHYL7gB5hC4AdrQuAHaL7gB5hC4Ad/QuAHfL7gB5hC4AeHQuAHmELgB49C4AeMvuAHmELgB6NC4AegvuAHmELgB7NC4AewvuAHmELgB8dC4AfEvuAH3ELgB9NC4AfQvuANDELgCBtC4AgYvuAL8ELgCFtC4AhYvuAJMELgCK9C4AisvuAJMELgCL9C4Ai8vuAJMELgCNdC4AjUvuAJMELgCOdC4AjkvuAJMELgCO9C4AjsvuAJMELgCPdC4Aj0vuAJMELgCP9C4Aj8vuAJMELgCRNC4AkQvugJ5A0MC/BESObgC/BC4AozQuAKML7gC/BC4Ao7QuAKOL7gC/BC4ApLQuAKSL7gC/BC4ApXQuAKVL7gC/BC4AprQuAKaL7gC/BC4Ap/QuAKfL7gC/BC4AqTQuAKkL7gDQxC4AtbQuALWL7gDQxC4AtrQuALaL7gDQxC4AtzQuALcL7oC9QA/AQoREjm4AvwQuAL40LgC+C+4AkwQuAMK0LgDCi+4AkwQuAMO0LgDDi+4AkwQuAMS0LgDEi+4AkwQuAMV0LgDFS+4AkwQuAMX0LoDIAA/AQoREjm6AzEDQwL8ERI5uAL8ELgDOtC4AzovuANDELgDQdC4A0
EvugNGA0MC/BESOboDSwA/AQoREjm6A00APwEKERI5uANDELgDUNC4A1AvugNSA0MCBhESOboDVQA/AQoREjm6A1oAPwEKERI5ugNcAD8BChESOboDZgA/AQoREjm6A2gAPwEKERI5ugN2AD8BChESOboDfAA/AQoREjm6A38APwEKERI5ugOBAD8BChESObgBQhC4A4fcALgAAC+4AAMvuAAIL7gADC+4ABgvuAGUL7gA4y+6AwgCVQADK7oABAAAAOMREjm6ADAAAADjERI5ugAxAAAA4xESOboAOwAAAOMREjm6AD8AAADjERI5ugBLAAAA4xESOboAUAAAAOMREjm6AFUAAADjERI5ugBXAAAA4xESOboAZwAAAOMREjm6AGoAAADjERI5ugB0AAAA4xESOboAeAAAAOMREjm6AHsAAADjERI5ugB+AAAA4xESOboAogAAAOMREjm6AKcAAADjERI5ugCsAAAA4xESOboAswAAAOMREjm6ALYAAADjERI5ugDHAAAA4xESOboA0QAAAOMREjm6AOsAAADjERI5ugEOAAAA4xESOboBGQAAAOMREjm6ARoAAADjERI5ugEuAAAA4xESOboBMAAAAOMREjm6ATIAAADjERI5uAMIELgBN9C4ATcvugE6AlUDCBESOboBRQAAAOMREjm6AVoAAADjERI5ugFcAAAA4xESOboBYwAAAOMREjm6AYAAAADjERI5ugGMAAAA4xESObgDCBC4AbzQuAG8L7oBxgJVAwgREjm6AckCVQMIERI5ugHSAlUDCBESOboB9gAAAOMREjm4AlUQuAJS0LgCUi+4AlUQuAJX0LgCVy+4AlUQuAJd0LgCXS+4AlUQuAJj0LgCYy+4AlUQuAJl0LgCZS+4AlUQuAJn0LgCZy+4AlUQuAJt0LgCVRC4Am/QuAJvL7oCeQAAAOMREjm6AvUAAADjERI5uAMIELgC/tC4Av4vuAMIELgDAdC4AwE
vuAMIELgDA9C4AwMvuAMIELgDBdC4AwUvugMgAAAA4xESOboDMQAAAOMREjm6A0EAAADjERI5ugNGAAAA4xESOboDSwAAAOMREjm6A00AAADjERI5ugNSAAAA4xESOboDVQAAAOMREjm6A1oAAADjERI5ugNcAAAA4xESOboDZgAAAOMREjm6A2gAAADjERI5ugN2AAAA4xESOboDfAAAAOMREjm6A38AAADjERI5ugOBAAAA4xESOTAxASMmNTciNSIHJisBFSMmNQYjIicGIycGIyY1BiMnByY1BycGIyI1BgcnBycUIzQjNTMnNjM1Ij0BMxc1JzcmNRczNyI1MjUiNTI3JzI1JzYzJzQzJzUXMyczJjU0Nyc2MzQjNzQnNjUiJzUzJiM3NSc3JjU3Jj0BNyI1NyInNyM1NyI1MzUjNTI1JzcnNTcmNTY1JjU3JicyNSY9ATQzJjU2NSY1NzUnNj0BJiM3NSYjNzUnNxc1JzU0MzQjNDMnNSc1NzUzMhU2Mxc3FjM2MzUnNzMUMzcXNxYzNxQzNzMyFTY3FBc3MhU3FhU3Fhc0MxY7ATI3FjMyNRc2NTMUMzQzFhUHFjMVIxQzFSMVBzIVBhUyFSIdARQzBzIdASIVMh0BIgcXBxcjFhcUIxYzBxU3FyMUFwYjFwYVMhUHFRQzBxUUBxciBxcUIxcVFAcVIgcUMwcUMwcVBiMWFSIHFhUjFwcyFSIHFDMVIycUFwYdARc3MxUiFRYdATIVBxQzFQcVFyMGFRQXIhUWFSIVFhcHFwYjNCMHJyIHJwYBJwYVIicGFSMGIwYHFyIHBiMUFwYHMxUGIxQXBh0BBzIXIhUUFwcyFQcyHQEnBxUXIh0BFxUiFRcHFxUiHQEyFwYjFAcUFwYdARQzFAcXIxYXBxcHFjMHFDMHFBcWFxYXMzcUFzI3FBc3FDM3Mhc2Mxc3FjM3FzM2NxQzNjUXNjc2MzYzNjUmIzUzMhcyNyI1Mjc0
JzIXNj0BJzI9AScyNSY9ATQ3IjU2NScyNTQjNTI3NTQnByYjJxQjNCsBBzUHIwc1IgcnIgcmKwEnFCMmKwEnBh0BFyMUFwcWMwcVFyIHFxQHFxQHFhcyNTMWFQcUFwYHFh0BFyMUFwcWFRQHFyIHFRQXBh0BFyMGIxQzBiMiJxQjNSIHIjUmJyY9ATciNTQ3JzI3JzY9AScyNSczNCc3NCcyNzU0NzQnNjc0Jzc0NzQ3FjsBNxYXFhcHMhUUIxQzBxUUMxUjBgcUFwYHFDsBMjcyFzczFzQzMj0BJzY9AScyNTQnMyYjNCcHIyYnIhUjNCM0MzUmJyMiByMnBzQnIhUmIwYjJxQXMhUjNQcyFQYjNQcUMxUiBzQFFSM1BRYdASMmIzUyNTIHFSM1BxUjNQEVIzUXFSM1BxQrATUXFSInBzMUFxUiJzQFFSM1BRUjNQUVIzUDzwYMBwcGKRMQEAciHyIXKDIgKQELEQwGCg1LHSIoGQdhDTlHOgUXCgoNFRgGDAwHBwwGBgYGBgoHEREGCAsTBhERBgwGBgYGAwkGBgYGCQ4XAwkGCwUFBQsGDAwJCAsLBQULCwsGDAYGDAwGCwUGBgwGEgcNDQ0NBQwRDQQEFw0KChAXDQYNJAUMHQwLCwsMDQUSDQUNRTULCwcdDBAHBWUKdC4HFzQNCUkKOB88DAoUIQRkdAcKDV0GBxALFwwHDQYGDQ0NDR0MCwcMDAwGBwkEBA0GDAYMBgYGBgYMDAYGBw0JCAQEBAQGBgYGBgYCCgwMBgYGBgoKCgcXBgoEBAQMDBwEBgYYHAQLBgYRBQwMBgYMHxtMKQwIbQop/rAGQQMHEQpLBFYrBAYPDgoEBwMGBQUEBwQEAwMDBwQEDg4DAwMHDgQLBwoDBwUFAwMDBgMDAwMHAwcECgsEDgQzEUgfLA0HCgQGDikDBwdOGQIHBxUGAwcEPR4EDQ4qGjIIFQZjCxEECQsKDgMDCg0DBwoDAwMDA
wYDBwQEFRAFGAcfShEEAwMHERgHAwcHBwYTDBgRAwYIQBgVBAQEBAQHBwMDBAQEBAQGEh8HQB4DAwQEAwMDAwMDBgUBAwMDBx4RAxUoAxgEAwcDHR1EAwMDBwYFBAcDBgMDAwMDBw0HBwQKAwoeNwYHBAdIKxsOAwYGAwMKBwQQAwMEMCkUOggFFSwRJRwEBAQEBwMCBR4HAxBJBwYVFQEhBwYBA7EHGwo+AwYIEa4HC8wHBQUOBwoOAVsN/pQpBDEMDgpOB50GAvYENw4lBwdSBgHaCwMJC/3ZBAKvB/02A/7TAQkLBhELCwwFCgQEBAsHBAQEBAwJBhAFBQoLCxEgBQwEESQRCwUFBREKCwUFFgQGBRsbMAslGwUgBgsrCwURFSVABjUFCwsGFQU8GiYPCwoLCwEKSwsKERAQDwsGIAsFGwUKFiAWEAEKHhEHBUoGAQoQBRgJCgUBChEEEQEJBSEbBBYLRhUFBQUREBtlGxo2EQUmChEMBQUFBQUWBBUVBAQEBAoKBAsKExMLBQUEBwYLBQoKBQoFDBAREAsNHgsfDB8HFRoLCwUFCwYLFQsENgsGD1YGRTAMBDYLFQULDAkQCgsGCw8REBuFDAomFSEECxAMChAbBBYLJisKKQIhCQwKEAsLHwwFBQolFgsLBgsLCgYPBwoQBgQLG0kdBRtGCwQREikbNiscBgYRBggHoAMUBwMCCCUhYQYmWAQGETADCwMHCwlOETcDBAYtAw4GBAcHAwcDHwoEEQZZCgoiBwMLHS0IBhMMRwcHBgckDBERBzkRCw0sSywtAxsDAwQEBAMHBAQfBAQKBgYDGQYECQUHCg4eH183BgcHTwNBBg4DBxAEBwMUGAQGBw4WGQQSExUDHwoNMBgKAwYEBAQEBAQDAwMDAwMEBAQDBBQDBwMHByUKCwYRBwQGDgMHHRYRFSIXCAYnBQYIGAYEBwYHBAcGGwcHCAYGBw4RXwMcBAQEBAcKFR7CBB
EGCRMRFw46BwMHEQcDBwcIE/stCQsGASYQICGIJUsfCgQEDxopXAYHBwMHGwcEHBAHBgQpFAcEBAQHMyYUBgsfEQMJCxUvVQM9MBUVBwMFEwc6BAUGBxEEBAQvBwcmBgsRIgMDBAYTBARSEwUNJQMLTwMDrQMD/fQGBhcEBCYHBz0HBywEBgQHBnYHB2MDAxgGBgAy/87+3wXHBzoCBQPkA+gD8AP3A/4EBwQLBA8EFQQZBB0EIQQnBC4ENAQ7BEEESQRPBFYEWgReBGIEagRyBHcEfgSDBIoEkQSVBJsEnwSmBKoErgSyBLcEvQTEBMoEzgTUBNkE3QThBOcE7gTyAAADIyY9ATQzJzU3JzQ3JjU0MyY1NjMnNTM1IjU3FDM3NSM3JzU0MzUjNTM1JzU0MyYjFCM1NDMnNyY1NjUiJzI1Jzc0JzUyNyc2Myc3JzY9ATQjNTc0IzUzJzU2NTQnNyY1NjUnNjUnNyY1NDMnNTcnNjUnNTQzJzQzJzcmNTQ3Jj0BNDMnNTcmNTY9ASc3IjU2MzUnNjUmNTcmNTMnNTQzJzU2NzMyFTczMhc3FzQzFTcyFzcyFzYzFhU2NRczNDMUMzcXMzUjNDMyFSIVFzY1FzYzFDsBMjcWMzcyFTYzMhc2OwEyHQEUBxciHQEXFCMVFDMVIgcXFAcXBiMUFwczFQYjFh0BFhcHNCMUBxYVIhUyHQEHMhUHMhUiFScjFAcWFyMXBxcGFTIVIhUzFSIVFxQjFxUUIxcVIxcVBxYzFSMVMhUGFSM1IxUUFyIVMhUHJwcVMhcHFxUUIxQXFQYVFwcWFSIVFwYVMhcVIgcVFyIVMhcjFTMUIxUXIxYzFSMnFRcVBiMXFSMXIhUWMxUUBxQXBzcVIh0BMxUjFTMVIxQzBxUXFTMUBxYXBisBJjUHIicGFSInBiMiJwcmIwYjNCcHNCMUIyInBiM1ByM1IhUmIwYjNQcmIwYjJwcnFCMXFSYjBxcHNCc
0KwEXByY1IwcXFSMnIxcVIyInBxciFSYjByYjBhMUFwYdARcjFAcGFTIVBxcHFBcGBxYVFAcUFwYdARciFRQXBxcHFBcHFhUUBxciFRYXIgcWFRQHFwcUFyIdARciBxcUBxQXBxcHFhUUBxYVFAcWHQEXIwYVBzIVFAcWOwEWFzQzFzcXNxc3FTcyFzY1Mjc1JzI3JjU2NzQnNj0BNyI1Nj0BNCc1NDcXNDMWMzcUOwE3FDM3FhcWFxUHMhcjFhUUBzIVIhUXIgcXIhUXIh0BFyIVFyIdARciHQEXIxQXBh0BFyMUFwYVFBciHQEWHQEjNSMGHQEUMzI3FhcyNRYXNDMmNTI3MzIXNj0BJjU0NxQ7ATQnNjciNTQ3Jj0BNDcnNzUnNTY3IjUyPQE0JzUyFTI9ATQnNj0BNyI1Mj0BNCc2NTQnNyI1MzQnNSczNCc2PQE0NzQnNjcnNjcmPQE0NzQnNyY1NDcnMj0BJzI9ASYnIyIHJwYjIicGIzQnIxQHFhUHFyIdARQzFAcXBhUXBxcGFRQXIxcVBzIVFAcWHQEHMhUiHQEUFwYVFyIVFBcHFCMmIxQjNCMiByYjIgcnIic2NScyNyczNDcnMjcnMj0BJzI9ASMHNCc1MzIXMzQnNyYrARUXByYnIgc1IgciJyIVIzQrASIHNCMiFxUjNRcyFwcmIzUyFxUjNCc3MgUVIyInNTIFFBciByY9ATMFIzUyBRUjNQUyFwcnMgcVIzUXFSM3BRUjNQUUFxUnNRcyFxQjJicXIhUiJzIHFDMVJzUyMxUjJzcWBxQXFSM0JzQXBisBNzIHFhUjIic1BRUjNQUVIzUHFSM1BTMXFCsBNTQXMhUiBzQjNAcVIyY1HwEVIyI9AQcVIzU0FzIdASIHNRcVIgc1NxYXIzUyFwYVIzU3FyM3MhcjIicyNRYnFSM1BxUjNBcVIzUXFSInNQUzFCsBNAUyHQEjNCcXFhUjJjUXFSM1BxUjNTcy
FxUmPQEHFSM1FxUjNQUXFSMnNQUVIgcmNRYHFSM1AwgnCAgQCAgQEBAICAgQGBAIBw8PHxgYHw8XDAsIEAgICA8LFB8PDxcTBBcRBhcXDxcXDxcXHx8XCAgQEBAYCAgICBAQEBAICBAICBAQEAgIEBAQEAgIEAgQCBAQEAgICAgZHm4IDzdDGxAnCBAgLgghHg8ICF4QDxAQCCc3EBAPBw8QHzsEEAgVGg8IEAhXHhkPQitfDw8PDx8YIA8YBwcPDwgXFw8CDQgPEBAIBwcHDw8XECgIEAgICgYICAgICAgIEBAQCAgICBAQCBAIGBgICAgnCAgPEBAQHw8HHxgYCAgIEAgICRcHGQgIDQsYEBgYEAQUCBgQAw0IDwcPDxAnCAgXFxAQEBgQCBAHDwkWMxQHCCcMOwgOMQINEw0PEAgCDhcYB18KHTkGDwgQDwgQCA8QCAMNRhAnPwgjBCcHD0cICAgPCAg3CAgfCA8HEwUnCAg7FB8OERDiBwQEBAMEBAQEBAQDBAMGAwMDAwYGBgYDAwMDAwMDAwQCAwMDAwMDAwQDBAQEEQMDBgMDAwMEBAMDAwMEBhgiLwQGDhQHBwcYBRlIGAoEBQUDBwMDBwMDAwcpIgMaFgcDBwcDBwEyBxgEBAMDAwMDAwMGAQQEBAQEBAQEBAQEBAQEBAQEBAQEDgcHAx4EBwY3BxRcAxgEBwMUByweGAMHBwcDAwMDBwQEBwcDAwMKBwYDAwQEBAQHAwMDAw0EBAQEBgMKCgMDCwQHAwMDAwcEBAQBHgMODg0+EBRBBggHOgYDAwMDFxQDAwMDBwQEBAQEBAcDAwMDAwMDBgMDMAcDBAMIBhEKBgFALgUDAwQDBAQGBgMDAwMDAwMHDQYIBgMDAw4oAwMUGxwDBwgGAhIYAwcsFi4HG3cHVQYIDggJCFAKGAQXAY4DGgUD/uADBgQREQF9Bwf9WAcBHgQCDQoGWwdRFAMCJwf89gcLIgUGBwwFP
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
yYjNDcnNDcmNTQzJjUyNSI1NjUnNzUnNjUnNjMnNTQzJzY1IjU3JzQzJzUiNTY1JjUzJzY1JzcnNyc2NSc1NDMmJzc1JzcmNTY1JjUzJzU2MyYjNzUnNTcmNTcmNTY1Fhc3FjM2MxYzNDMXNzIVNzMyFTI1FzcXMyc3FjM1FjM3FzcWMzYzFhc3FzM3FTY3IjUzFTMyNxYzJzMWMzcWMzUWMzczMhU3FzQ7ARc1MhU3MxcUIxQXBxQXFSMXBxYVFAcXIhUWFSIVMhUUIxcVMhUGFTIdASMnFRYzBiMWHQEUIxYVIgcXIxcVFCMXBxcHFhcHFwcWFQcWFSMUMwcWFyIVFwcWFSMWFwcXBiMWHQEjFRciFTMVIxciHQEXIxcVBzIdAQYVFDMHFRQjFwcVFyIHFxQHFwcXBxQzBxUXIxUUFwYVFjMVFAcXBzIXFCMmIwYjNQYjJiMGIycHJyMGByYjByYnBzIVIhUnIgcmIyIHNCMVJiMUIycHJisBBycHIjUHIyYjBiM0IxQHJjUHNQcnBycHJiMHJjUGBxciFSciBycGIyYjBgEWFxQHFBcGFRciFRcHFBcGFRciBxUXIgcyFQcWFwYVFBcGHQEXIxcHFwYdARcjFxUUBxYdAQcyFSIVERciFRciHQEUBxQHIicGFSInBgcmKwEGHQEXFQYdARciFRQXIxYVFBciHQEWOwE3FzI1FzYzMhcyNxQXNxUyNTMXMjUXNjUyFzY3FDM2NTY1NjU2NSI1Njc1JzY3NScyPQEnMj0BJzI9ATQ3NTQnNj0BNCc3NCc0NyY9ASM3NCM3NSc2NSc3IzQ3NCczNCc3NCczNCc2NTQnNDc0IzQ3Jic2Myc0NyczNTQnNDc0JzcnMjcmJzY1JzQ3NCc2Nyc0NycyNyY9ATc0JzQ3JzI3JicjBzQjBycUIyYnBycGEzIdASMiJzUzFSM1AxUjNRcVIgcnHwEVIyInMgUUFzczFAcmNTIjFSYjNQ
cVIzUyFxUnIzcWNxUjNQcVIzUHFSM1XQ0OEBIIGiMHCgQECAgJBAQJBRYRCAgIEQQEBAQEFhYFBQUJBAgICAQJDQgICAgICAgIBAQEBAgEBAYPEQQEBAQJBQUJBAQWEgUFBAQECQUFCQkFBQ0JCQUJBAQEDQ0IBAkFBQQNBAQJCQQEBAgFCAUECQkECAgnBy0VGAsmDgkECQQJBAkEBAURXwkREQkLHAUVCBIaCAUGBxYnBBYIFg4DBAkECQgJBAQECwcnBwoeBRoIBQgfCAkJDSseCQQEBA0JBAQJBQkJBQUJBAQJBQkECQQFBQQNBBEHBgQEBAQNBAgEBAkEBAQEBAQEBAQIBQkJCQQEBAkJBQQFCQkEBAkJCQkEBAQECQkEBAQIBA0KBwQEBAQEBAQECA0FBQkEBAQICAkjAQcCBwkECQQBCAgJCSsNEQgKCDQNBQUFFQUICAoDFwQTCw0sCAgKCA0JCQQWBAsHHwMFHhEWCRUJGgkODBoVDScEBBYCDwUIBQgFBAFTAgUEEQMHBAQEBAQEBgEDAwQEBAQDAwMDAwMDAwMDAwMDAwMDAwMDAwMDGEEDBxELBiMGBgcRChERAwMGAwMEBAkFCgcDBB4SAwUZAxkbBxcEEQcUOgMHGhYDGCUmHgMECQMICQMDAwMDAwcEBAcDBgMDBwMHBAQEBAQEBAQEBAcHBAQEBwcEBAQDBAYDAwMHBwcEBAQEAwMEBAQHBwcKAwcHAwQEBwcEBAQDCScREQMHHgQ0FwYHZi8HAwYBVQceBEgEBwNLAw0GAQv+qBQOAykNBhsSAhsHB8ENFQQedA5OB4sH/ukPCiIFIgoECgEJCkkJBRgKCBUFFAkiAQkUBSsKCggLBQo/AQ4FDioHCQoFBQoTMRMKAQkICwUdAQkYCg8JBQ8OBQoFCgQKDw4KEyMEDxgFCggLBRQJBQUBCQodCRQDBwkPCgkFIgoFBQUdBRgYDx4EDwknCAwJChgeGAg
LDwUFCSwZBB4JEhUBCQoFCQUUHRgFDw4PCAsFEAgSBwUKBQUdBQoKBQUFBQUFGQUYBR0FBQ8KBQUTGAoKBQUFBQ8ECQUFCQkFBQkODgQEBAkFDwUFBQUFCSINFQUZExQOBBkUCQkLBQoEChgFCgUKCQUFDw85CwUEJgYPIgoEBSIKHQpDCxMKCgkFFAkFBRQfWgoFUwgLIR4FCh0QDQ8nGAUKVwoTGQkUCgkKDAcFGSIFHR0PGB0KBSIJCgodBQoODwULCAoFBQkVIQoTSSwKCgUFBQoFDgUKBQUPBgkKBQUFBQUFBQ4ECQ4FBQkEBAQECQUFCQUDBgkFBQkEBAQJBQUFBAYJBQUFCgUFCgcdHQUEBgV2BwNVAwcHDBMvIhERIhEzBAYjBgYIBwYGCCkHFxEOHhUDBxgDCAYGCA0iBAP++gcDBwMEOzgRFQQEBgMEAwQGBQoDBwMHGxEECQs8DAMHAxEOBAcDDQMHDgoEBAQKCgoGBAkDBAkDDgMNDiIKMxgEGAoDBw84BBEKAwcDBAcDQQMYBwcGBggKDg0wBQgIBgYIFxELBgQUBwMHBwMHBAYEBx4HEQgGBgQJCwYBAwQHByUUEQYjDgYGAQoOAwcVEREGHAYEBwoNBgFCJB8JCykKBggUCgYBDxcGLRcVBAQEBwMECQMDBv2OBwMHAwMD/loGBigEAwedBwMHsQQDBwkIBQUHBAMsBw5fBAoODQoEBAcHBwoEBAA//87+nAVcBv0BggM4Az4DRQNNA1EDWANgA2kDbQNxA3UDeQN/A4YDjgOSA5oDpwOuA7QDugO+A8IDxgPNA9ED1gPaA98D4wPnA+wD8AP1A/sD/wQDBAgEDgQTBBgEHQQkBC8EMwQ4BD8ERQRJBFAEVQRdBGIEZwRtBHIEdgR8BIAEhASOBJQAAAEnIjcnIhUnByInByI1ByMnBiMnJiMnByYnIwcmJzcmNTcmNTI3IzQzJzc0NyYjNjcmIzQzJic3
JzUWNyY9ATYXJic3JiM3NCc3JzcmNTcmNTY1JjU3JjczJic3JzQzJz8BJic1MjciPwEnNyYnNzMWMzcnNTMnNTMmJzc0JzY3JjU3FhcyNxYXNxc3FhU3JzczFzI3FjMyNxcWNxc3Bhc0FxYXMjcXNjcVNzMWFTY3FzYzFzYzFhU3Mxc0NxcyNxU3FjM3FhcGFTIVIgcXFCMWFwcXBxYHBiMXBxYPARcGIxYHMwcWFScXBiMWBwYHFxQjFxUUJxcVBgcWMwcUFwcXIwcyBxUiFQYXIhUyFxUnFQYXBzIVBxYHFAcWFQcyFQYjFRQzBxUXBhUyFSIVFhUiHQEyFScHFycHFyIVBxYzBhUXIhUWFwYHBgcnIwc1Bi8BByY3ByYnIgciNQcnIjUGJyYnBiMnBiMiJwcmJwYnIicHJwYjNicGJzUGJyInFSc3IwMGFRYXIhUWHQEUFwYHMhUjFh0BBxYdAQcyFRQHFh0BFAcWFRQHFhUHFwcUFwcyFwYVFyIVFBcUBxcVFAcWHQEUFzY7ATcXNDMUMzcVMhc2MzI9ATc1JzI9ATQnNzU0JyMHIyc1NxczNjUXMzUjFSM1Njc1NCcjIgcmIzY3FDM3NTQnNTMyPQEzFBcWFxYzBxQXFjMVIyYrARYVFhUjFjMUFzMyNTIXNxU3FTM3FDMyNxc3FDsBMjcUFzcUOwE3FDsBMjcWMzY3NCM0MyYnMjU0JzY9ASI1MjU0IyYnNyY1IyIHNCM2OwEXNCM0MzQnNyY1MzUmNTcmIzU0IyYjNyY1NCM1NzUnNDcmNScyNycHNTI9AScmIzQ3JzQ3NScyNzY3NSc2NycyNyc2MzU0NzY3JzY1FzMmIyI1NzMXMjc1JzYzNTc1NCM1Mzc0IzYzNCc2NTQnByY1IhUiJyIHJwcnBzUiByYrAQc1IgciJxQjFyMmJwYHFTczFCMXIgc1IwYHFhUHJisBIgcGByMiJzU3IjU0NzQnNj0BJjUzMhc3N
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
gMDAwMKBAQEBgMDAw4RExwLAxgDBgEGAQofBgEDBwYBBxENBBEpBgcGFgYOAwYBGA4HAwcHBAgGBwcXKyQKLAYDBwkLCAYGARkWBxEOMwMEBAMHAwMDAwQEBAMDBAYBAwMDAwMKBAcDAwMDAwMEBAQEBAQEBAMDAwQEBAQEBAQoBAcGBAcXDgoHAwgGBggeB0ciBDoMJwYmGxgHARopHw0EBwMDAwMDAwMDAwMKKRgoGQYHGAYYBwcURAQEBAcHBAQEBAcDBAQHAwMDAwMEBAcDBwcRGwYxFA4+VzARGAQBJQRmCiwDBw4sAw53Bwe4BwMK/qIEBAkCDAoFCQQEBgMJBAQECQkEBgMYCgkJBQkKTAUnCCIEGAoyDAcjBQoICyEJCgUXDwkTCg4KFwVRCgkKCQoJExMKCQUJASdyGDArKQYnnEwFBQkYHRcKBQoOBQUaGkwhfRsFCQUFDhMFBQcHCxEOCgUFDgUFCQQODgkFBQUFBRMFBQUFBQUFBQkJGBMJBQUKCgUTCRMFCgQdExgFKgQJExMMAgUTDhQEDwQYBQkYBQUNIgUFCgkFBQkFBRgMAgUdCQ4FCglfBQUFCSYFERAFEwUTJg4YCQUTCgkKFwgHCQUFBQ4FBQ4FCQULEgkFEwkMAwQEGQUFCgsDGBAaDwQKBQkKEyEJARcKBQkwCwgJNhJCNCJcVGQTBQkFBQQEEwoKCAcFCQQJDgUKBQoKCgoJAQoKBQUKBQUPBQoFBQUFCgUFCQkTCgQFCQQECQkEBwcOBuk+DSYoJgMEBgQvFQcsGxsRJhQIBgYoEhEEhAQGMBEYEQcDBx0SFQcGBghfHTgEFy0MEgQUEQcRehgDBwQDDBMGBggwDAUEBAQEBAcDAwMDBwcDCgcDAwcHAwQiFAQXEQwTBggHBgYIBwYEBwMHBgcLEQUFDQQHAwMDAwMDBAMEBAczGyY9BgcETgMHBAYYKA8GBxgHAw4GAREGBCUcEBiSBDNHIj
APHQcuHeMKBAMDAw0JBAcHPgYGIgMD+wQDAwegBgMDMwf9wgQNBQUGADH/zv63BpoHMQGcA0wDUQNbA18DZQNrA28DcwN4A38DhQOJA44DlQOZA50DpAOqA7IDuAO9A8IDyQPNA9MD1wPbA+ID5gPqA+4D8gP3A/4EAgQIBBEEFgQaBCEEJwQrBC8ENQRABEQESwRPAAABNxYzNxcyNTIXBxcGBxQzFAcUMwYVFBczBxUXFSIVFxQjFRQHFDMVIycHFRQXBhU3MxUiFRYzFCMXBzMUBxYzFAcyFxUXIhUXIhUWMxUWHQEHMhUHFjMHFh0BFyIdARcUIxQXBzIXBhUzBycVFyIHMhUGBzMHFwcWMxUUIxQzFRQjFyIdARQzFCMUFxQjFxUzFSIVMxUiBxcUByI1IhUjNCcHNCMiByYrASIHIjUGBycUBycUIycGFSYnFCsBJyIVJyIHJwcnIhUjJzc1IiciBycHIicUKwE1JzU3NTciNTI1Ij0BNzUHJzc1JzI3NScyNzU0Jzc1JzQ3NCc0NyI9ATQ3NCM2Nyc0NzQnNDcnNTcnNzQjNTM1IzQzJzUzJzYzJzQzJzU0Nyc0Nyc3NScyNyM1NjM0JzY1JzI1Iic3JjU0NyM3Iwc1NyI1NyInNzQjNyYjNDM0IzQzJyMHNDcnNzUHIzU0MzUiJzcjNTI1MhU3FzcWFzQzMhc3FzQ3FzcyFzQ3Mhc3Mhc2MzIXNDczFTMyNxYzNDMnNDczFAUiNQYdARcGHQEUFwYHMhUGBxYVBxciBxcHFyMXFQcyFRQHFyIHFDMHFRcjFwYVFhciBzIVBxcHFRQXFSMiJyMUBxciFRciHQEHMhUHFwcUFwcyFyMUFwcXBxcVMwYdARcGFRciBxYdAQcyFQcWHQEHMhUiHQEXBh0BFyIVFyMXFQcyFxQHFRc2MxQzNxQXNjsBFzcmNSM1FzU2PQE3NTY1ETQ3NTQ3NTY1MxYzFAcWFxYzFhMjFhU
WFyIVFBcHFhcyNTIVMjcXNjsBNxQ7ATI3NjU2NTY1NjU3Njc0NzMXFRYdARQzFSIdARcVBh0BFjsBMjcUFzcWMzcUOwEyNxY7ATI3Jic0NzQnNjUnNyInNDcmPQEnMyc0Nyc3JjU3IjU3JzQ3Jj0BJzMmJzY1JzMnNzQnNzQnNjU0JzcnNDcmPQE3IjU0Nyc1NyI1Nyc3IjU3JzI1JzMnMzUnIhUjJiMiBycHIicHNCciFScHJyMiByYnFCM0JwcnBzQnByIVFyMWFRQjBiMGByY1JyY1Jic1NCcjBzQnBiMmIwYrASYnByMiJwcjJxQjJwc0JwYjJwUUKwE3OwEWMxUGKwE0JxcVIzUHFhUjJjUzFwciJzQHFSM0BxUjNRcyFSc1ITMGFSM1NgUVIic1MgUVIzUHFCMmNTMVByY9ATIXIzcyFyM3MgUWFxUmJzUhFwcmNTQFMxUHJiM1MhcjIj0BFicWFSc1FxUjNTIFMhcjJzUyNxUjNQUzFCsBNAcVIzUFFSM1BRcUKwE1NBcVIicFIzUyBSM1MhcVIjUHMhUjNQUUFyMiPQEHFSM1BTIVBiM1BRQzBhUjNCM0FxUiPQEFFSM1BRQzFSIHNAUUKwEiJxcVIzUFFSM1ITMUKwE0BRYdASMmIzUyNTIFFSM1BxcVJyIHNQUVIzUEzQ2DCA8yWiEmEAgIDQ0GFggIDAUiHQgIBSIODwUFBQ0HGwcNDQ0ICAgIDQ0LAggICAgICAUFBQUIDA8HCAgPDwgICAcHDgcPCA8FBQwJCA4ODggOECQPDw8PCAgPBw8bDBMJCHAPDQeMdwUpFwwPSCVDDVYMDz8bCDeMDHkGCBQOIwgNDUBTDwcPFgcPDwwODQ8iDwYrDwgPGxQNDQ8cBQUPFA8FDw8PDwgWCA8HBwUMBw8PBwcPCA4ODgYGDg4KCw8PBwwFBQUNCAsEGxALBwcHBwsECAgICA8HFBQIFw0KCBQUCQsHBwcHCA4ICA4O
Bx0aEA0NHAZFVkUPdQgeMCkiWw8MCA4UDgExJjwwGyokKggUExYxCAcHDgf8SAMYAwMDAgQDAwQEBA4EAwMDBwQEBAQEBAQDBwQEBAcDAwQFAgMHBAQmBBENBAMDAwMDAwMDAwMDAwMDAwMDAwYDCgoHCgMDBAQEBAcDAwMDAwMDAwMDAwMEAwcRNAYDBxsSEANVBwMfIg4NCwYHBwMCCQQGFQUXJToEDhEOBBgDDREEAwgGBh0TCgcDBCYJFS8OLB8NCyIDAwcODgcHBQULCQswRw4KBwMKCAYPHREaCAMEBAQEBAcEBgcHBAQEBAQEBAQEBAQEBAMDAwcEBAQEBAcDAwMDAwMDAwMDAwcEBAQECwQYAwMDAwMKBAMDBhwLDQcOBSoHOikKFA4DCAYGIwMUBykRChUXAwMDBxgNKTANIikWGgYEEUQHAwcDCwoGCBcUBAsGFCkYAxERVQYIDQEaBwcEUQQIBQgFBwRPB4gKAwtEBwMFBT4G/w4YCg4BKAQHBwX++QYBBwEMA48HCskECghlCgMH0wsEB/3qKQYMJwI1BwQK/ooDAwcDAzAEBgqFCg3kCwT+2BEDDREDXAcBWAYGB7EH/p8EAUoHBwdVBgH+ogcHAtgHB2IGYAcKATUEBAZ7Df6NBwUFAZgGAwcUtwb8XAMBaAcKDgInBwcGATcO/HEDAxQEBwP+KikDMgsNCv6zDUQXEQMHBDkNBxYGEQYGHCs2GykSEQQLRhsFHUkbCwQGEAoHDwYKCwsGCwsWJQoFBQwfCwsQCgwJIQIpCismCxYEGxAKDBALBCEVJgoMhRsQEQ8LBgsKEAkMCwUVCzYEDDBFBlYPBgs2BAsVCwYLBQULCxoVBx8MHwseDQsQERAMBQoFCgoFCwYHBAUFCxMTCgsECgoEBAQEFRUEFgUFBQUFDBEKJgURNhobZRsQEQUFBRVGCxYEGyEFCQERBBEKAQUKCRgFEAoBBkoFBxEeCgEQFiAWC
gUbBQsgBgsPEBARCgtLCgELCwoLDyYaPAUVBgsLBTUGQCUVEQULKwsGIAUbJQswGxsFBgQWBQULChEFBQULESQRBAwFIBELCwoFBRAGCQwEBAQEBwsEBAQKBQwLCxEGCwkBE/YDBwYcFAYLBwcGCy8EAjsSAgc9ChEHERgREQMJEwYLBhEYBzYHBB4HGwQXBxUDGggDCggGBwMHAyIRBAYHEQIqDgoJEg4HAxERDQsHCg4lBxsGCAYYBB4GCAcXBAMYFAYLKQcDBykHESUEIgMpDgQEBAMDFAMHBAYDAx0FJktiIDUBegMYRAMYJRYdDQQGGx9OYP7+IxMxWwMxUAc0LwQEBAQEAwM9Pg1gDBsHiCmjGyMLUCIsGAOPBwMHLAqdFwTkCgcJBQcDAwMDBzAJIAMYDDseCAdKPgYfRSgRBx4KDg4eHQ8OAwcYERgtMh8GOiIHAwcVDQYBDgcGBwMJEwYHCg4ODQQRAwMHCgsRAwcHWApVBwMHGAoHAygDAwMDAwQDEQcECgMDBAQEAwMDAwMEBBgGGAQRgXlxBQVpaRIueA4GAQQHAwMDBgYEBAQEBAQHBwUGBAQzBw0GBA0PBQcDA2kFBQUFBBEOBjkHBs4EBAQHBAMIBQMKIgMHAxgHBwcGBQUKBwUFAxcGEQcRAwcDBgQDAw4FBQY8BwcEByIGBAUBBQUEBhcHAwMKAwMEBAQEBgYUAwMRBwcRAwcDBjIHBxgHiAcpBwcUBwcHBAYGBAQDAxsHChEDBBIJFQYDCgcDETAwBwMEAwYaBwcEAwMNBwcHBjkTBQ4mAwobAwMeBwoKBAvoAwMAAAAo/87+uAVKBvYCBQN7A38DgwOHA4sDjwOVA5wDoQOqA64DsgO2A7oDvwPDA8cDzAPSA9kD3QPhA+oD8wP5A/0EBAQIBBEEFQQbBCAEJQQpBDIENgQ9BEQESAAAATMWHQEUIxcVBxcUBxYVFCMWFQYjFxUjFTIVBzQjBxUzBx
cVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnNTMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NSInNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYBFRcjFRc3FjMVIyInFCM0KwEHFRcjFBciFRQXBh0BFyIVFBcUBxQXBgcWMxUiBxQzBxcjFBcHFxQHFyIVFxQHFyIVFwcWFRQHFh0BBzIXFAcWFwYdARciHQEUMwcVFyIVFDMVIxUXIhUUFxUHFh0BFAcWFRQHFwcXBhUUFzMyNRc3FDMyNRYXNDMXMzI1Fhc2NTQnNyc3NCc2NyI1MyY1NzQnNjMmNTcnNycyNTQnMyc0NzQnNj0BIj0BMxcmIzI9ATQjNTI9AScyNzMWFxYfAhYXFBcWMxQjFzcWMzI1MhcyNxUyNSY1Nyc0NyY1NCM3JjU2PQE0NycyNSczJzU3IjU3Jj0BNyI
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
CIC+4AjYQuAIj0LgCIy+4AjYQuAIn0LgCJy+4AjYQuAIq0LgCKi+4AjYQuAIt0LgCLS+4AjYQuAIw0LgCMC+4AjYQuAI60LgCNhC4AkDQuAI2ELgCQ9C4AkMvuAJeELgCUNC4AlAvuAJeELgCUtC4AlIvuAJeELgCVNC4AlQvuAJeELgCV9C4AlcvuAJeELgCWdC4AlkvuAJeELgCW9C4AlsvuAJeELgCYNC4AmAvuAJeELgCY9C4AmMvuAJeELgCZdC4Al4QuAJn0LgCZy+4Al4QuAJr0LgCay+4Al4QuAJu0LgCbi+4Al4QuAJw0LgCcC+4Al4QuAJy0LgCci+4Al4QuAJ00LgCdC+4AeQQuAJ60LgCei+6AoMAdAEBERI5ugKVAHQBARESOboCnQB0AQEREjm6AqIBswGQERI5ugKkAbMBkBESObgBLhC4AqbcALgAvi+4AMEvuADDL7gAxi+4ANMvuADlL7gA5y+4APEvuADzL7gA9y+4AAIvuAANL7gAEC+4ABcvuAAaL7gAHS+4AB8vuAAhL7gAIy+4ACUvuAAnL7gAKS+4ACsvuAAtL7gAMC+4ADIvuAA1L7gAOC+4AYEvugG+AAkAAyu4AAkQuAAA0LgAAC+4AAkQuAAD0LgAAy+4AAkQuAAE0LgABC+4AAkQuAAG0LgABi+4AAkQuAAT0LgAEy+4AAkQuAAY0LgAGC+4AAkQuAA20LgANi+4AAkQuAA60LgAOi+6AEgACQG+ERI5uAG+ELgAS9C4AEsvugBlAC0A8RESOboAbwAtAPEREjm6AHkALQDxERI5ugCbAC0A8RESOboAnwAtAPEREjm6APQALQDxERI5ugENAC0A8RESOboBFAAtAPEREjm6AUIALQDxERI5uAAJELgBaNC4AWgvuAAJELgBbNC4AWwvuAAJELgBb9C4AW8vugFyAAkBvhESObgACRC4AXPQuAFzL7gACRC4AXfQuAF3L7gACRC4AXrQ
uAF6L7gACRC4AX7QugGOAC0A8RESObgBvhC4AbvQugHSAC0A8RESOboCAAAtAPEREjm6AgIALQDxERI5ugILAC0A8RESOboCfAAtAPEREjm6AoMALQDxERI5ugKVAC0A8RESOboCnQAtAPEREjm6AqIALQDxERI5ugKkAC0A8RESOTAxBSMVBycGIwYnFwYnBhUiJwcnBiMGJwYHJwYjIicHIicGBwYnFCMHJxQjJiMGBycUBycHBicVJyMHNCcmJzY3JiM3JicyNzUmIzcnBzcnByYzJzQjNDc0IyYzNCc3LwEyJzUiNSYzJzQ3JjUmNyc0Myc2NScHNTYzNCM2JyYjNTQzJyM3JzY1JzI3JjUnNwYnNTciNTc0JyY3Iic3BzQ3JzMmNyI1NycmNyc3IicmNyc3JzY3IjU3NCM0MzQnNjcXMjcXNRYzNxYXNzMXNDcyFzcyFzcWFzQ3Mxc1Fhc3FjM2NzYVNjUXNxY/ARYzMjcWMzczFwcXNDcXNxc2NxYzNjcXFgcWFwYVFwYHMxUHMxUHFTI3MxUGBxcHFxYjFjMVBgcfAQcyFwcXBgczFgcXFAcUFxYHFxYHFwcXBhUXIgcXBgc2HQEUBxY3FwcXBgcyFSIHFhciBxYVFwcyFyMWMxYHFxQHFwYHJyMGBycHIg8BIicHIycUIycGIycHJiMHFiMHATUGDwEGDwEXIhUXIhUXBh0BFBciBxcHFwYVFBcHBgcyFQYHFh0BBzIVFAcXBzIXBxQXFhcWFxQXNDMXNjU2NzY1JzY3IicyPQEnMj0BNCM2NTQnNzQnNjcnNDcmJzY9ASczJzU3IjU2Nyc3NSc2NTQnJiMmJyYnIwc0JwcVIzUXFBc0MxYXBiMWFwYVHwEiFRQXIh0BFhUUFwYdAQcyFQcUFwcXFAcXFAcXBzIVFAcXIgcXFQcWHQEHMhcGHQEUIwYjFAcUByY1Iic3JicyNSY9ASczNCc2NyY1NyY1NyYnNjcnN
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
RI5ugPBAKQB9BESObgBdBC4A8fcALgBLC8wMQUGBwYnByYjBzQjNyYnFAcnBgcnBycHJxUnFAcmNSIVIicGDwEnFiMnBycHIgcnBwY1Bgc1BhUmIwYHJg8BNCM0MycGByciByYnDwEnBwYnBgcGJxcGJwYHBic2Myc3Jj0BNjc0JzY1Jwc3NSc2LwE3JzcmNTcmBzc1JzciPQEnNjU0JzU0Nyc1NyM3NSYHNwcnMzQjNycjJzQ3Iic3JzY3IzQ3Jzc0BzY3JzI1IzQ3JyY3JzcnNjcnNyc3Ij0BNwc3Jgc0NyI9ASY3IicyNycHIzU0NzQnNDc1NyI1JjM0IzQ3NCM3JjU0Nyc3IzU2LwE2NSI1PwEXNDcVPwEyFTcXNDM3FzI3FTY3FzY3MwcyNxYzNzUzFCMWFzUXPwEXNjc2FzI3FzcXNjcVNjcXBz8BFzcUNzQ3Mxc0Mxc3NhU2NzYXNjcXNjcWFxQHFxQHFxUHFRciBzIXFQc3FAcUMxYHFwcVFwYHMh0BBxQXBxcHFwcUFwc3FAcUFxQHFQcyFQcXFCMWFwcyHQEHNhcHFBcHFRcHFDMUBxQ3FgcyFRYHFhUHFhUGBxcHHwEHMhUHNh0BBxUXBxU3FSMXFQcXFDMHFxQHFjMUBzYVFwcXFAcXFAcUFxQHFwcyFRQHFwcfAQcVFBcHFRcVBhUzFgczFAcWFxQHFxUHFjcVBgc0DwEGDwE0ASMHNCsBBiMnIgc0IxUzFSIHFBcGBxcUIxcVFyIVFwcyFSIHFhcjFhUzFjMVIgciJxciFRciFRQXIhUWHQEXIhUXIxcVBzIdARQHFwYVBzIdARQHFh0BFyIdARcHFhciBxUUFxQjFhcGHQEUMxQjFwcyFQcUFyMUFwYdARcjFBczNxYXNxYzMjcUMzI3FTI3NCM0NyY1NyY1NDcmJzY3JjUiNTMmNTQnNjMUFzYzMjcVMjc2NTI3JzY3JjU3Jzc1Aic1JicHJwciJwcmJw
YrAScUIyYjBzQjIgc0JwYHFSM1HwEVIyc1BRUjNQcVIzUFMh0BIgc0JzQFFSM1BRQXNjcWFxYzFSIdARQzBxcVFwYVFDMGHQEUBwYHBhUnBzQrAQcnByInByMnJjU2NSYnNgUVIgc1FxUjIic1BxUjJjUFFSIHJzUFFCM1BQcnNRcVIzU3MhcjNTIFMhUnNQcUKwE3EzMGFSM1NhcVIzUHFCMmNTMVByY9ATIXIzcyBRYXFSYnNRczFQcmIzUyFyMiJzUWJxYVJzUXFSM1MgcVIyc3MgcyFyMnNTI3FSM1FxUjNQcXFCsBNTQXFSI1BxcVIyInMgRwBgsFCwUTAxsFBTIPGyAPEgohCxsKGxYmBQQoCA0FHAEGCwoRCwsKCzYQDxcFHAUMCQsGGwUFBRBBCwwKFRE2CgsLCQIFCwYLAQkCCQIrAQoLCwUGBQsGBgEQCwYGAQUFBgYGBQkNEAYKBQYFCwsGBQUFAQoJCgELBQUBCgELBwQFCwoFBQUMCwsECwYFBQUFAQYGBQULBAUKBhAFBQUECAgVBQEQBQYFBgEKBgsGCwUFAQsFBQsLBgoGBgsQAQUFBgsmNhALCwsmCgYLIAYlDQkwCQ0FBQULCgwFCwUEERwKGwYvHAgIBgsgFgsaBiMNCxUVC3cWBQYFCwULBQsGChIwDR4bNwkBMAoLBQsLBgYKBgsGBgUKAQsGBRAFBQYLBgsREAUFBgoFCwwQBQUKCwYBBQoFBQUGBRUaBgYLBQUBCwUBBgYFFhMIBgYLAQYGBQULCwoLCwsLAQsQCwYBCgoLAQYLBQYFGxsBBQUFBgYWAQsLChYbBQELBQUMCwsGBQ0JLCAKFhQSEP06BBEKBzkHERMgCwsTAgQEAwcHAwQEBAQEBAMDBAQKCxEGAwcDEQcEBwMGAwcDAwMDAwMHBAQEAwMDAwQEBAsFAgYBCwcEAwQHAwMDAwMDAwYDAwMYBwoKDhQ2Cwk3BAMHOUEDBwQEBAQ
FCQMEBAMDAxEaGQNEGAQGVU9VJhoDGAoEBAQECSNVSwcRBwMHBw+NBggYEQMGCAYRBAczSrEEghEVEQHVA7sD/mEHBAcDAx8K/loKGQZmHxITCgcEFQMDCgcHDyAzBwcDBCUHAwoLCg4GHAQKBwz+zwoNKAYGAREHCgLiBAcN/YEHAloEDQMKAwd0Bwf98QoOPQcHBC8EBwcFBQOPBwrJBAoIZQoDB/69KQcNJrcEBAcDAzADBgEKhQsO5AoDowQGAweFEQQOEQNcB6AHGwcHB1UGrgQOBgELtwEFAQULBAcFCgIDBQcDAQsEBwQMBQUIBwUDCQUCAQoBAwUEBQgBBgQSAQkBBg8BBQMBBQQBBgQFCgoKDQYDCQQFDQUBCgEFAQUFAQoBCgMsShMKIBUKAQUFCQkLBQEPDwkBBB0KCgohBQodARoOHR4EIhgBBQcLCgoBCRMKGRMKAVkBCgUYJw4NER0KBB8hCgpSBQoBWiETBQUKEwUKCQoTDEMKHgkjBQQLASMOAQYnBQUKOw4PBQYKCQEFCQUBGAoFCgUKCgkUGQQOFRMYBBcNIQoFBQUDAQUBDwYBCQcEBQEMEQoBBgIBCwoGBAEKBQ4EBQMBBgkNGgETBgMMDgIFBQIfBRkBBhAGBQEEAQQFBAoBCgEFAhoBBgMOBgcOCREECwgODw8FGB4TBQoBBQoJFRMJHgUXLAoFBBALCBkcGQoKCwgoAQkQBB4OARkYBR4EBQUJIwUJCwEOCgcCFQodCgkEAQUBChQFCwkJBRkNBAIiEwsNDwoFCgEFCgEFDRAFAQoOCgEYCR4EDAgJChQBMRMLBAUKCQYrDwMNAz8KBQsJCQoqBQEUCAEiChIFGAcJGQUKRwoJAgkFCiEBBSUDCgEBEAEBBAcCBAQKAwcEBwQbAwcJGQMHETcRAxERAx8lB2IZFAMEDkQEJQMXGQMOGCwYAwciDhEzAwgGBj8dFQoNCAYGCCIGBBQRLCUIFy0Q
EgofCgYHEQcDKREEBgQHHQ8GBx8HFggGBgQEBAoDAwMYAwkjBwQUBggHBiokIn4uEwOLDgoVLAgGBwQEJhwGTgdPgyQFHwcGKQEbBgpaEwMHBAQEDxAEBAQEBAcDBwMKDgcHAwQDAwRIBgYDBwcUBwoEBAYLSAMDDQQDAwQRGBgHBwMHBzYfFAcDJhcEAyYsXxgUBAQEBBUEBwcHA4GFDRKhIRpNBwQHMwcHBDoKBQUsBAMDB3QGBiwHBAMRCgoHKQcYBwQDRwcO/n8IBQMKMwYGBgcFBQoHBQUEGAccAwcDBgQDPQcGAwciBwMFAgYFBAcYBwMGBAQGAwoDBAMDAxgDAyIDBwMGMgcHHgcEBwAAABz/zv8RBPkG5wHQAucC6wL+AwQDDwMVA98D5QPtA/ED9gP8BAgEDAQSBBYEGgQeBCIEJwQtBDQEOwQ/BEMERwROAAABNxQzNxYVMzIXNzMyFzczFzQ3FTI3FjM3FzYzFDM2NwcUFwcUFwYHMhUGBzIXBxcHFhcGBxQXBh0BFDMUIxQzBxUzFSMVFDMHFDMHFwcXBxcUIxQzFCMVFjMHFTMVBzMDFRQHMhcGFRQXBgcXFAcWMwcVNxQzBiMUMxQjFBciBxcGHQEiLwEUKwEiByInByYjBhUmNSY1BycGIycVIicHIjUjBiMmNSMHNSIHNCMUIzQjFCsBJxQrATUiBycHJiMHIjUjBisBNTM1IicHJxQrATQjNTI3NCc0MzUiJzciPQEjBycyNyc0NzUiJzQzNCM1NzU0JzcnMjUnNjc1ByM1Mj0BIic3NQcjNjM0JzU3IjU3NSI9ATMnMjUiPQE3Iic3Jic1NyInNzU0JzciPQE3JzcnNjUnMzUjBzU3NSM1NzUnNzQnMzUjNTcjNTQ3NCM0NzUiByM1NDcnNjciJzQ3IjU3IzUyNyInNDcnNyM0Nyc0Nyc2Nyc0NyY9ATcXNjcUFzQzFDsBMjcyFzY1FzI3MhcyNzIXN
zIVMxc1MxUzNTIXNDczFTMyNxc3FTczFzQzFQcyNxc3FTcVNjcVMjcVIxUyFzI3FTI3Mhc2Mxc2NRYFIgcUMxUjNSMGByIHMhUiBxcGBxcGBxcGBxYdAQcyFQcVBzIVIh0BFyIdARciBzIVIhUXFSMVBzIVBxQXBiMVBxcGFRYXBh0BFDMUBxcHFwYVFDMHFRcHFDMHFRQzFjMHFRQzFRYzFSIVFyMUMxYzFBcWOwEXNDcVNxYzFCMUFwcVFhUiFRYXMjc2NzUmJwYVIicHJj0BNDc2NTI3Nj0BJjU0NzQnIxUjNTI1NCc2Nyc0NzQnNjcnNTM1NDcmPQE3IjU0Nyc0NyY9ATciNTI9ATQnNj0BJzcmJzI3JzI9AScyNSc2PQEjNzUjNjcmJzQ3JzI9ASInNzUiJzI9ASYjNTMyFzI3JicmJyIHNCMiJxQjJiMHJwYFFSM1BxYVFhcHFRYVIgciJzY1JisBNRcyHQEiJxcVIgcmNTIXMjcWByIHIzUWBxQzMjcXNzIVMhcHFyMWFyIHFhciHQEXIh0BFBcGHQEUMwcUMxQHFxQHFyMWFyIHFxQjFBcGFRQXBhUXFSMUFwYVFDMUIxcGHQEzFCMVBh0BFBcHFDMHFRciFRcGBzIXIh0BFwcXBxcGBzIVFAcGBzUiByInIic0NyY9ATQ3JzM0JzcnNjUiNTMmJzQ3NCc3Iic3NSInNyY9ATcnNjM1IzQ3JzMnNyI1NycyNyY1NzUnNTQ3NCM3IjUHNDcnNTciNTY1NCc2NzQ3FQUVJiM1FhcWHQEjJjUyBRUjNQUVIicWFwcmIzUWFxQzFSMnIhUmNTI1BxUjNQczFQcmNQUVIzUTFSM1BRUjNQUVIzUXMhUnNRcVIic1MgcXFSIVIzUXFSMiJzUyBxQjNRcjNTIHFSM1FzMGKwE1NAO2GgQEERYHAhUECAEWBAkiCQgHCgkEGwgEByQEBAQEAwUEBAUFBAkJBAgFBQQEBAkJBA
QNCQkJCQkJFgUFBQkJDQsGBAgEBBUFBQQEDQUECQ0ICQ0JCAYHBQUJBgMFH0/nCAUEE54KHAkICQ1oRQgJBgcIExAICQQVDgQEHyINBCMEBBIIBQ0QBQkVFggFEQQCCw0IBAgFFQUEERIQBA0LAgkFBAkEDQkNEQ0EDQ0IDQUFBQkJBAkIDQUIBAkIEAUREQ0JERERBAQEBAQIAhMNBQgNDQQEBA0EBA0ECAQJCQkJBAgNCQkNCBEEBAQJBBEEDAUFBAQEBAgLAggFCAQEBAQMBAQFBwQEBBEWGCQNBR4EBwIHAQ0nBwIECAgBCRURBRU0CQgHHAgSBAcCHhEJBAgJBAkICQgeNi4MOAgECQsPCQgHAiAcCBYR/qRTTQQEBz0UQisDBwYDBwMDCAUDBwYDAwMDBAQEBAQEBwQEBAcHAwMDDgUCBAQEBwoKBwMDAwYGDQcHBwcDAwoLBwcIDxQDAwcPIEg1bhgRDWMUCwQEDg4EDhgVb2UFBgszCAYHHj0sDhRSGAcHCgQbAwcDBwcDAwQODgYDAwMDAwMDAwMDAwMDAwMDAwMNAwMDAwoHBAcHAwMEBAcHBAcECQEDGR0DCQsIDSNeF4YDBwMmGwMUDhUHHwFYCiwKKQMRIgkLEAUEDBMKaQcFBSwDBzMIBgoDFXcEBwMO4QQDBw0OAyQaDgMDDQcDBwUCAwMDBgMHBwcEBAQEBAQDBAMHAwMDAwMKBwcDBgMHDgoKBwcDBwcDAwMCBQQDAwcLBAQHAgUEJhInBAcpLBsDAwMHBwMDAwMDAwMHAwMDAwQCAwcHBAQECgYHBwQEBAQEBAcDBAYHBwcHAwYDBwQEBAQKBgsMMAENBggOSgsLCgT+UAQBnA0LGE4HEgkJHCIDBwceAxsDLQcRDf4/BFID/rIDAvYNFwsOGwYBB18YJgNHAxoFAyEHfgcHdwe7BwUFBAbaBAQJAwsJBQkEBAYDCQQEBAkJBAYDFwkJCQQJCUgEJQg
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
6AGkAuAGaERI5ugBrALgBmhESOboAbQC4AZoREjm6AIEAnAB8ERI5ugCCAJwAfBESObgAnBC4AJrQuACaL7oAnwC4AZoREjm4AJwQuACi0LgAoi+4AJwQuACk0LgApC+4AJwQuACo0LgAqC+4AJwQuACr0LgAqy+4AJwQuACt0LgArS+6ALAAnACaERI5uACcELgAxtC4AMYvugDKALgBmhESObgAnBC4AMzQuADML7gAnBC4AM7QuADOL7gAnBC4ANLQuADSL7oA1ACcAHwREjm4AJwQuADW0LoA5gC4AZoREjm6AOgAuAGaERI5ugDvALgBmhESOboA9AC4AZoREjm6AR0AuAGaERI5ugEgALgBmhESOboBIwC4AZoREjm6ATIAuAGaERI5ugFFALgBmhESOboBRwC4AZoREjm6AUsAuAGaERI5ugFQALgBmhESOboBYQC4AZoREjm6AWoAuAGaERI5ugFsALgBmhESOboBjwC4AZoREjm6AZcAuAGaERI5uAB8ELgCJdC4AiUvuAB8ELgCKdC4AikvuAB8ELgCLtC4Ai4vuAB8ELgCMNC4AHwQuAJ10LgCdS+4AHwQuAJ30LgCdy+4AHwQuAJ60LgCei+4AHwQuAJ+0LgCfi+4AHwQuAKA0LgCgC+4AHwQuAKC0LgCgi+4AHwQuAKF0LgChS+4AHwQuAKI0LgAfBC4Ao7QugMNALgBmhESOboDEQC4AZoREjm6AxMAuAGaERI5ugMVALgBmhESOboDFwC4AZoREjm6AxkAuAGaERI5ugMbALgBmhESOboDIQC4AZoREjm6AycAuAGaERI5ugMpALgBmhESOboDKwC4AZoREjm6Ay0AuAGaERI5ugM3ALgBmhESOboDOQC4AZoREjm6A0YAuAGaERI5ugNJALgBmhESOboDTwC4AZoREjkwMQE3FjM3FzI1MhcHFwYHFDMUBxQzBhUUFzMHFRcVIhUXFCMVFAcUMxUjJwcV
FBcGFTczFSIVFjMUIxcHMxQHFjMUBzIXFRciFRciFRYzFRYdAQcyFQcWMwcWHQEXIh0BFxQjFBcHMhcGFTMHJxUXIgcyFQYHMwcXBxYzFRQjFDMVFCMXIh0BFDMUIxQXFCMXFTMVIhUzFSIHFxQHIjUiFSM0Jwc0IyIHJisBIgciNQYHJxQHJxQjJwYVJicUKwEnIhUnIgcnByciFSMnNzUiJyIHJwciJxQrATUnNTc1NyI1MjUiPQE3NQcnNzUnMjc1JzI3NTQnNzUnNDc0JzQ3Ij0BNDc0IzY3JzQ3NCc0Nyc1Nyc3NCM1MzUjNDMnNTMnNjMnNDMnNTQ3JzQ3Jzc1JzI3IzU2MzQnNjUnMjUiJzcmNTQ3IzcjBzU3IjU3Iic3NCM3JiM0MzQjNDMnIwc0Nyc3NQcjNTQzNSInNyM1MjUyFTcXNxYXNDMyFzcXNDcXNzIXNDcyFzcyFzYzMhc0NzMVMzI3FjM0Myc0NzMUBSMiBxQXBxQXBxcUBxYdARciHQEXIhUUFyMUFwcXBhUXIgcUFwYVFwcUFwYVFwcUFyIdARciHQEUFwYdARciHQEXBxQXFSIdARcjFBcHFxUHFRciFRQXFCMWHQEXIhUWHQEHFyIVFh0BFyIVFBcUBxciHQEHMhcjFAcXIhUUFwcyFSIdARQXNxc2NxY7ATIXNDMUFzcyNTciNTI9AScyNyc2NTQnNjcmNTQ3JzcyNzIXFhUHMhUHFwcVFyIVFBcGFRQXBhUUFwcWFRQHFwYHFBcHFxUUBxYVBzIXMjUXMxc0MzIXNzMyNRcyNxcyNxc3FDMyPQEnNjciJzQ3NCczNCc2NyYnNjUnNycyNSc3JjUmNSYnJjUmJzY3NjUyNzUyNyY1MjcnNj0BNCM0JyYjIgcnByciBycHJicHJiMHJisBIicGEzQ7ARYXFhcHFBciBxUXBiMGByMmIzQzNCc3Jj0BJzM0JzY3JzQ3Jj0BJwUjNTITFSM1FxUjN
TMVIzUFFQciPQEHFSM1BRUjNRcVIzUHFSInFxUiJwcVIzUXFh0BJiM0BxUjNRcVJiM1BRUjJj0BFiEUKwEiJwPNCmkHDCdJGh4MBgYLCwURBgYKBBsXBgYEGwsMBAQECgYWBgoKCgYGBgYLCwkCBgYGBgYGBAQEBAcJDAYGBgwMBgYGBgYLBQwGDAQECQcGCwsLBgsMHAwMDAwGBgwGDBYKDwcGWQwKBnBgBCATCQw6HjUKRgkMMhYGLHAKYQUGEAscBgsKNEIMBQwRBQwMCgsKDRsMBSIMBgwWEAoKDBYEBAwQDAQMDAwMBhEGDAYGBAoGDAwGBgwGCwsLBQULCwgJDAwGCgQEBAoGCQMWDQkGBgYGCQMGBgYGDAYQEAYSCggGEBAHCQYGBgYGCwYGCwsGFxQNCgoWBThENwxeBhgmIhtIDAoGCxELASceMCcWIR0hBhAQEicGBgYLBv2xSyQEAwMDAwMDBgQEBAQEBAQEBAQEBgEDAwMDAwMDAwMDAwMDAwMDAwMKCgMDAwMHBwMDAwYDAwMKDQYDAwQEBwMDAwQEAwMEBAQECgMDDRUGLQYGCBgWGQRLDRgYBAQEBAMHBAQGBQQEBwMPHU1GLwMDAwMDAwMDAwMHBAQHBwQEBgMDAwcEBAQGBAclEQoLBhUUBwoJCw4QEhQHBB4DBQUDBAQHAwMHAwkBCgMNAwMDAwofEAcfFEsBTUcPEAoEBAQDAwMDKVI2BAY3BwYIBhQHBJ8ERw4HDA8iJBYYrksHUxknFwcDBgEEEA8JVmYLBgMDAwMDAwMGBAcDAwP+1AYGSAclClUHAmgEBpMG/bcHyQejBgHFBgFmB1UOAxhZBhsGCAGwEQoJ/oQHAwYBBzIGEQYGHCs2GykSEQQLRhsFHUkbCwQGEAoHDwYKCwsGCwsWJQoFBQwfCwsQCgwJIQIpCismCxYEGxAKDBALBCEVJgoMhRsQEQ8LBgsKEAkMCwUVCzYEDDBFBlYPBg
s2BAsVCwYLBQULCxoVBx8MHwseDQsQERAMBQoFCgoFCwYHBAUFCxMTCgsECgoEBAQEFRUEFgUFBQUFDBEKJgURNhobZRsQEQUFBRVGCxYEGyEFCQERBBEKAQUKCRgFEAoBBkoFBxEeCgEQFiAWCgUbBQsgBgsPEBARCgtLCgELCwoLDyYaPAUVBgsLBTUGQCUVEQULKwsGIAUbJQswGxsFBgQWBQULChEFBQULESQRBAwFIBELCwoFBRAGCQwEBAQEBwsEBAQKBQwLCxEGCwkBE8AzCAYHCBMHBwMHCwkmEQoDEQQDBwgTEQcTCxEHDBMHAwcUDBMHAwcNBAcDMwcDCggGBggbBwMDFQcIDwcHBwcHBg4KBwoKEQQDBwciEQMHAw0LAx9EAyYbGxgDBB4IHgcDGBEYED4NBAoOhAQDMAUFBAQEAwMHAwUFAzPuBAMwByVpBggLLyE7BgcGIwoYA0dHTxQDEQcVIhEDAwcHAwgGEQoEBgcmAx0PByMhESIHFAQWGQYIEQ0DAwQEBAQGBgYDAwMDAzYHEQIxCgQHCg0IBhgpCR8RCwaFDgMHFEcmIhgiGxYFGS8KFCwLTiKPBgQbBxcOIjdYMEQECgMDAwMDBhwHEQMHAwP++joQIyJqLAMHMwQGSwoiLAMIBgcGB04HCg4UMDMDBwYIGwfMB/33AwMDAwMDA04EBgYEBAMDmQMDCgMDHgcHBAcHRwQEOgcDBAQFIAQEHwcEAwoHBQUHCgcHAAAALv/O/uYE/gckAgUDBwMPAxcDHAMoAzEDNQM8A0ADRANIA08DUwNXA10DYQNlA2kDbgNyA3YDfQODA4oDkgOWA5wDoAOkA6sDrwOzA7gDvAPAA8YDygPOA9ID1gPaA+ED5QPqA/EAABMyNxcyNxQzBxc2OwEVBzM3MxUHFzM0NxcHMzI1NjUXBxcyNxUHMhU3FzcyFzI3FzUyFzI3FDM1Mxc1Mhc2MzIVMjUXNjUyFzI3FzY
zMhc2MxQXNjMXNDczMhcGBxYVIxUHFRciFTMVIxUzFSMVFDMVJxcGFRYdASIHFDMHMxUHMhcVBxU3MxUiBzMHFTIVIxUzBiMUMwcVFjMVBiMUFwcUMxQHFwcUFxUGFTIdAQcXBiMVFzcXFCMUMwYdATM1MxQXFCMVMxUiBxcVBzMVBzIdAQcyFQcUMxUjFDMUIxQXBxcHMwYHFhUzNxQzFCMXFCMXFRQjFDMUBxYVMjUXBgcVFAcyFxUjFwYVMhcHFhUHFjMVIh0BMhUHFRQzBxYdARQrASInBiMiJxQjJyIHJisBIhUiJwc0JwcUMxQjIjUzNSMHJyIVIjUjBzQnFAciJwYjJwYjJxUiNQcnBisBJxQrASYnNTciPQE3IzQ3JzQ3NCc3NSInNDMnNzU0JzQ3JzU3Ij0BNDcmNTQ3JzciNTciPQE3NCc3JzU3IjU0Nyc3NCc3NCc0Nyc2NTQnNTcjNTI1JzUyPQE0JzcnNyInNyYjNTY1Jzc0IzYzNCc0Nyc3Ij0BMhUyNyI9ATc1IzUzNSI9ATcnMzUnIhUnNDM1IzU3Iic0NyI1NDcmNTcnNTciPQE0NzMUARcyNxQzNjcyFTY3NjU2PQE3Iic2NSYvASIHJisBNjMmJwcmKwE1MjcWMzUmIwcmJyY1JicmNTQ3Jj0BNyYjNDcnNRc2NxU3MhcyFyIdARc3MhcyNxYVIgcmKwEiByIdARQXFBczNxQXNjcWOwEyNRYzNyYnNzU0IzUyPQE0IzcnByM1NxczNTQnMjUnMjUmIzQzJicmIyYnFCMnIicHJiMiBwYdARY7ARUHJwcXBxUWFxYXFBcVIxUzFjMWFxYXMjUWMxYVBxcWFSIVJwcVFAcUBwYjIicmNTI1JjU0IxQjJwcjByYnFCMnIgcnIgc0KwEGHQEHFhcWFzcWFzMyNxYXNyMnNDsBFRQnIjUyNxQzFDc1MxYVJyMiByc1MzIXNwYVNyY1FhczFQciJzUzFSc1
MjcVByYnMxUiJzUzFSU1MxUlIj0BMxQXJzcXByc1MxU3NTMVByInNTMVJzMHIjc1MxU3NTMVIgc1MxU3NTMVJyInMzIXFSciPQEWFTciJzQzFBcHNCc3MhcGFTcjFBclIzQ7ARQnNTMVNzUzFSc3MzIXFSYlNTMVJzUzFSUnNxYVJTUzFSc1MxU3MxYXFSYXNTMVJzUzFSU1MxU3NTMVJzUyFyc1MxQXFSY3NTMVJzUzMhc3IzQ3MhcUBA8NGxEzBwciBRAGDQcbBwcwBgcOBwcHPQ0GIgMfBzYjDT0MAgcODQcOBg4OBg4FMhkJUQcVFAsDBg4OCxALAyoMBzMKIgcHESwTCA4HDgcOFQ4ODhUVBwciDQ4OBw0GCwINFAcRBA4UFA4VCQwHBxYGFAgHBw4HBwcVFRsGDRsODg4NBwciBwcHFRUHDgcODgcHBwcODg4HBwcHBwcHBgcGBw4HIg0UDQ0HBwcGDg4NBwsDDhQUBw0NBwcVDRsUGw0NDQ1SJToNFRtMBg4HDRcSBw4DMxwNDgcODQ0vIgcODQ4OUQcHDhocBygcDgYiDhg6MA0HXxoWBwcHBw4ODgcNBg4HBw4ODg4HBw4ODgcHDgcHDg4ODgcHBwcUDQ0NBwcUGxsUFA0UFA0UFAUPFAMRFA0NGxEKDQYGBg0HCgoUDRsUFBsNDQcGDhQNBwcHDg4OBwcOBwciBwKLGCRoA2ECAxUeGDMDAwQEDg1VBAcMDwoDByAPBysMAwcNEAgjEwcTBSIvH4EDAwMDCjYDEQchEUojGg8DAw4JCxIGFBMFBQgKDw0KBEcHERQfBwYHBAYdPBgEBwcNCgcDAwcDAwcDBgMHBAsKBBYGMg4olwMKURVBBwNGl2MXCBEiEQcHAwwgNhswBwQwFyYUXjQDGAREBAQlChgHETMVITcsJQMHMwMRFD4UBDYDBwMHBwMHBAoKChNFYD0GLQYHCgsTTPgDBwcKOgcEBgRwChFtAwMYB
AsLDBEGiDMZCRcDA0gOBAsNAxIQBwdjB/2ZAwLABwMHtAMHAywGewoDBzMHfgoDB1UDlhQPOB46DiIFBQYGAeoHCm0IAgYVjw4RBgEH2gcH/mEDBwNtB2MGnBEDEQQpAf4HKQf9wQcECgKNCo8HiwcHBxVqB3sE/ZgOegcbBgEzAwcKmQZfCgYBMwMYCxoHDgUFCwYLBRsFEREGCwUMCgYLBgYKBQsGFgsLCwYGHAsFBQUFBQsLBQUFEBYGCwgICwYGBgsLBgsLBQULQxUiGAoQEScLCwsLDAULEQshCwYCDwUiCxwFCwsGERYLCxYXEAsGHAUMMgsFHAYLFgsGCwsWCxERGQ4LEQsFHAYRBgYFBh0KBQsNCQsGCwYLFhEFDAUGHAUWBgsGBRglFwsLEDMKDAYGERAMEAsMBQYLCwYGBhkCEQYLCwUnLAwGFiYXCwsRCxELBgULJzcHFgsGBgsFBQULCwsGCQIFBgsLCwULCxAFBQwGCwUQCxEGBgYGBhEGBgwhUwsGTgsPEgYJAgUMEC0FBgsRHAkCERYQEQsGCwkCFwsJAgsLCwsGCxEJAhwQBgsGDAoLIQoCEAoBDAsLFBMOAgYWCwwQBgsLERwFIkgcIRwGGhIGEAwWCQIGCxsMCwUFFgsLEQYLFgsWBhwFCwUFDAUWDBAOOwskKgsFDBAXCwVkHw4I+K8DIgMlCgMCIBwJZUk2FFkSAmk0cwMHER8JAwcHBgoHHwQTEwgMGidTnggGBgcKFSxSHgcHBwUFAwMliAQXBwcHDQ8FAwMDIh8XEhUJAwQDBAMDERgKJgoKBwYEBwoHEQYDAwcDA0ojAyIENgQwBkEoJgQHCgYDR11iHgcHAwOqHwYElTBNBR4KBAo2OgpAMQQVUkMHEQMHBwcKFQk0JQ4fLVcjAxYTFQQHAwQDBAMDAwMDAwUFBH17TkUTAwoHBwYIsQMHAwYeBgQEBhcECgQpBxEECwQJBQ4CEgMHBwcfAw
MiAwQEBgMOBy8EBDMHB4wHCgYLEQcEBwQDAy8EBAYlAwMHBwcHBwMHAwQEBAQDAyUOBwcRBwMFBRQiBwQaCwcOAwcICS0GAa0HBjwEBGMDAxQECg4MDwcHCgcHDgMHBQUiAwMHAwMvARADDwEDAyUHBwMEBEgDAyIHBzMRBQkNBRkEBFwHBwoWCQoLAAAs/87++AT9Bv0BggNAA0QDSgNQA2cDbQNxA3UDeQN+A4cDjAOdA6MDpwOrA7IDuAO+A8sD0APUA9sD4QPlA+kD7QP3A/8EBwQMBBEEFwQeBCUELAQwBDQEOQQ9BEEEUgRWAAABMxYHFzI3FzcyFzcyFTczFzYzFxYzFzcWOwE3FhcHFhUHFgciBzMGIxcHFAcWMwYHFjMUIxYXBzMHJgcWHQEUIxYXBxYXBxQXBxcHFg8BFgcGFRYVBxYHIxYXBxcGIxcPARYzFSYHFg8BFwcWFxUjJiMVFxUnFxUjFhcHFBcGBxYPASYjJgcmJwcnByI1BxcHLwEmByYnIgcnJgcnBzQnFCMmJyIHJwYHNQcjIjUGBycGIycGIyY1By8BFAcnIgc1ByYjByYnNjUiNTI1JzQzJic3JzcmNTYXJzcmPwEnNDMmNyc3JjUzJzYXJjc2NSc0Myc1NjMnNzQ3Jic3NCc3JzM3Ij0BFjc2JzI1Iic1Mzc0JzciNTcmNzQ3JjU3Jjc0MzU2Iz8BJzY1IjcyNSY1MjU3IjczNScXNycWNzUmIzY3JzI3Jic2NzY1FzM3FTYzFzcWFTcWMxY3MhU3FzIVNhcWMzYzFzYzFhc3Mhc2MxYXNxc2MxQXNhcHNjMWFzczFTMFIgcWMwYdARciBxcUIxYzMjcUFzQzFjsBNxQ7ATcWMxYXFAcXBxQXBh0BFyIVFBcGFRcGFRQzFRciBxQXBgcWHQEUMwYHFhUiBxUXNzMXIycGBxUXBhUUFwYVFBciBxcGHQEXIh0BFxUiBxciBxUUMxQHFwcUMwc
XIh0BMjUzFSMWFzcUFyMXBxUXIxQXFAcVMhc1JzMXFCMUFzcyFzI1Mxc0OwEVMzI1FzcXNjUWFTY3NTQnNDc0JzY3IjU3JjUHNDcmPQE3Iic1MzQnMjUnMj0BJzM0Jzc1JzU0Myc3Iic1FzM1JzUzNTc0JzI3NSMVIzUzNTQnNjUjNTQ3NScyNyc3JzI3JzU3Iic0NzQnNjciNTcnNTI1NCM2NyYnMj0BJzMmJzI9ATcjNjU0JzUyFzI3JjU3JyM1NzMXMzY9AScyNzIVNxYXNxQ7ASc1FxQjFDsBNjMVNxc1JzI1FhUyNRc0JzY9ATQjNDcnNzUnMjcnFSM1NzQjNSciFSInIgcmKwEVIyYrAQc0Jwc0JwYVIjUiByciBzQrAQc0JxcVIzQjNzUiJwc0KwEHNCMGIyInFCM0KwEnFCMnIgc1IgUVIzUFFyMiJzI3FxUjJzUzFTczFSIHJisBBxQXIyInNycmPQEXNh8BFSMmNRcVIzUHFSM1FxUjNQcyFSM1FwYVIzQnNDcyBRUjJjUXMxQHJyMiBxUXIzQnNTI1FgUXFAciJyEVIzUFFCM1BRUiByInNwUjIic1MiEVIyInNRczFSIHJisBBzQjNzIFFSMiJyEVIzUzMhcHIzQvATIdASc0BxUjNRcVIzUXFCM1BRYzBisBIic1NBcVIgcjNDcWNzMVBhUjNTYHFSMiJx0BIic1FxUjJzcyBxcHIzQnNxcVFAcmNTIXFSMmPQEWFwcnNwcVIzUHIyc3FhcVIzUHFSM1FzIXFhcVIyInIgcjNTcmIzUXFSM1A5kGCgEhBQEKEAgIGwQMBAsCCQsmBBUREQ4GCw8DDgUBCwEKBgUBBAMBBQQGBggEBQQDCwEVAR8BCgsECwcGBAUHBQUMDwEGCwEGCwcFAQYFBAcQAQUFAQcOBxABCwEFCg4DDQYKBRMKBQsBEAYEBgYGAScPDwwKExhrCxsLHwQKBR8KFwgNBiUWUyIQMC8G
BRoVKwseIwoLBRURFQsFCwoGEAoFGyALCzonCgYKGxMGCgsFBgQKBgUFDgYGBQcGAQsOBgkCCgsGBgUDCQkBBwsGBQEFBQEGBQkFAwUJEAIQEAEBFRAIBwoBBQwLBwUBBgUHDAEWAQYGAQsGBgEFCgsBCwEQBAoBBQsBCwQFAQUFAQwEGywbCgYQCwYKFRAWEQ4KFwUbSwQXDwEKHAMLCwYEC1EKGgoLDggVFhUQEAMiAQ4JFUoBCgv9KhAEDQQRAwUBBgYBEB4VKAQGBxEHBBsRHxAfBwQEBAQEBAQEBwcEFQcYBAQDBAMHAwQHBgEEBwMDAwcDBwMGAwMGBAYHAwMDBgMHBwYBBwcHAwoEBAQEBwcECQcEEQMKAwMHCwYIAwMHBBURFAQKBwYEAwoHEQcDJgohAQcEBwoDAwcEBg0DCgYBCgYDAwMDAwMGBgoEBAQDBwMHBAMDBAkGBAcDBgYGAwMEBAQEBAcLBAYBBwcDBAQEBwoHAwQFBQMDAwMDAwMGDRgIBgoEBAQLEQQHCgcKBAUMBCIqIQYEAwcRBgYOCxARBwMDChUKChELDgcKAwMEBwMDCgoEAwcDBwYIDQQMEiYYDQcKCgQJCwQKDQQYER4DAxEDBwYHBBQRAwwCDiUDBEQYA1wDBx8CogT+pQcNBgEIWhEGDnQiERYMBggKBwcHBgQHBB4UGRAeChgtB4wR6wOCBwp+BAMUAxj+8wcKuwoGDg4FAQMHBwsW/oEHBwUMAWUH/i8HAXIDBwYBBP7iDQYBEQFeAwYB5wMGDg0SBgcEBwT9egQGAQGHCrQGCxEKA9MHDhgGhAe7Bv6bBQUFBQcGAYEQCAYGEU8DBwcGgAMGAQYBOgQGAwc6CgMKBAQbDg0GLQQKDiwEBgMODV8OBwQR3QfkB50EIQMLBAQJBAcDAwsXVQMG9wEQAQUGCxEEBQUGCwEMAQsMBRcsiAsFEQIJKwYbIQ0JEBxMIQU3CxwLARwCCQULF
hEbEAEbAlYKCzcjDiECCQoMAgkbLx4IPyEcBQssGxELAQsBEAshVxYBCgYGIQYBCwaDERsFDCULCwsbDAEFCwEoBQ8LBAsGASEBCwYBDwYCFAsECA8FEQEJBQ4FBQUGBQoLBQYFBgYGAQYKCwYOBQoGBQFTCwULCxYFMBgKDBskDREBHCEJEgVIBV47ARALBQscAU4gFhAGBRwQBQsWDAoxARsDHgoyPAsGAQseJAsRBQUMCiYLIRwbDAkKDBYBCgsLBQsbEQsFBgUBCgsLFhscARwLAQsWIQsGGwUBGx4GCAgGCgUFBgoGBQ8LAQoFBAIGCwELBAUFAQUIDAUBBQoGBAgJBQEFCgEHEBHnMxELDRUGBwoHTgYEBgQEBAQEGBQcBwYHDgcGBggfFwQHBi4MKRICBxEKBAMHBDYgJxEHGggVBhEOIgQRAw4KFBUTDxASEgkOEBgRBggHBgQDCgQDQQcUBwoOJQc9EQcDBwMDFBEDAwcRDgMHCQsHDgMRDQcDBBAHCg4OBAQKCgoDBwoOBQUTBQMGAQMHBgEQNAMEBBMDBxQGCAoRBxQKCwMHAw4HAwcKAwsGKRERCgcDDQsKCg4DBx4OBwoHCAYPHQMEGAoRCgcHFAMOChEHBgEGAQgaAwcKBwcGCCUXCwMHBx4HAx8RXhwFBgYDMAYLEQYEEQcDEQsGFQQHAwoDAwoDAwcHFQcDAwMHAwMDBgYHDQ4DBwcGPgoNCwYLAwcEBgsRFAMDAwMHCgMEAwQEAwUFAwYGBgMDBQERFBsHAwQEBAQEBAcDAwQEDgQEIgcHBAoHAwMDAwMDAwMKAwMZEBEKBwcHAwMDMAYEAwcDAwMHAwcLBgYDBwcpBwMIGggGBwcFBRsGCwoHBgcQCAMHBwoEBg4UAwMDBwcKBwMGBykHBAsHBAcHBwoDAwsEBwcDAxQECAYHBwcHBgMDAxQDAwcHBxEKCgcDBQgEBwcRDQYDCQUHCgYHBx8KBwM6Aw
MHSwcRBAcNfgYGBQUGBwQFBgYIFgcDBxsDAxEDBwIIAwNjBgYeBw0LAxEEBAcGBBEHBwAAAABK/87+wgUbB04CAgQHBAsEEAQXBCMEJwQvBDcEOwRFBEoEUARUBFgEXARgBGgEbARzBH4EhwSLBJAElQSeBKIEpgSwBLYEuwTBBMUEyQTQBNQE2gTeBOME6ATsBPIE+AT+BQkFEAUWBRwFJAUsBTMFOgU+BUUFTQVWBV0FagVxBXcFewWCBYgFjAWUBZgFngWkBagFsAW0BboFvwXEAAATMjcyFzcWMzcUMwcWFyY3FzY3FzcXNxc1FzQ3FhcyNTIXNj8BFzQzFzcXNzY3Fzc2FTY3FzY1FjM2NxYzNxQzFCMXNjcXNjcWFz8BFzc2FzI3Mhc1Nhc2NzYXBiMXBxYXFSIHFBcGHQE3BxUXIh8BBxcHFhUHFjcHFRcHNhUfASIVFBcVFiMfAQczBxUUNwczFQcUMwcVMxUWBzIXBxcGBzMWBxcHFDcGBxciFTMWBxcUBxcHFwYHFwcXBzIdAQc3BxYzFAcyHQEWBzIXIgcVNzMVFiMUFxQHFQcyFRQjFDMUBxQzBxYXFAcXBzcVBhUXBhU2FQ8BJxQHNQ8BIjUHJxQjByciBzUGByciDwE3IgcmByMVIzQzJicVJw8BJwYHBiciBycHJwYHNQYHJzcPAScHNCMUByMnFAcnBwY1BgcGJwYHJwYHNCc0Nyc0Nyc1NzUnMjcGJzU3IzQ3NCM0Nyc3NSc2NwY9ATc0JzcnNyc3NCc3IzQ3NCc0NzU3IjU3JzQzNCc3Ij0BNwYnNzQnNzUnNzQjNDM0IzQ3IjU0NyY1NyYnNjcnNyc1NyI1NwY1Jzc1JzcnBzUzJzU3JzQjNyc0NzQjNDcGJzU3JzQ3JzQ3NCc0Nyc3IjU0Nyc3JzUzNTQjNzUnNTY1IzQ3IzQ3Jic0Nyc1NyYjNTY3FD8BNj8BFBMWHQEHMhUHFwcUFwYdARcGIxQ
XBhUXBxYdARQXBxczFQYjFRQHFh0BFyIHFRYVBycjFQcyFwYdARQXFSMiJyMVFBcVBxUXIhUWFwYdARcHFRYzFQYVFhcUFxYzFjM3FjsBMhc2NxQzNjc2NzY3NCc3NSYnNTMyNSI1MjcnMjciNTcHJj0BNxYzMjcmNTciJzcnNzQnNDc1Iic0MzI1JzYzJzcnNDcnMjcnNDc1Iwc1NDc0JzcmNTcnMyc3JzcmPQE3IjU3Jic2NSY1Nyc3NCc3JzI9AScyPQE0JzY3NTQnNDcnMj0BJzI9AQc1MzQjNDcnMjcnNjUnNjUnMjUnNyYjNzU0JzQ3JyMHJyIHJjUHJxQjIicGIycUBzQnBgcnBzQrAQYHFxUHMhUGHQEXIgcWHQEXIh0BFBcHFRQXBhUUFyMUFwYVFBciHQEXIh0BFh0BIycUIxQXFjMUIycjFAcUFwcXBhUUMxUiHQEUBxcHFxQHMhUiFRQXBxcUBxYVFAcyFSMWFxQjBiMiJyIHJicmIzQzJjUyPQE0IzY1FzM1NDcmPQEmPQEXMzc0NzQnNj0BNyYnBzUnMjUWOwE2PQE0JzY9ASYjNTI9ATQnNxYXMzUnMjciNTI9ATQ3Jj0BNDc1NCc2NzQjIhUiJyIHJicHJisBBzUiBycUIycGKwEnFCMiJyIFFSM1BRUjIicHFjsBFSc1BzcyHQEUKwE0JzUWBRUjNQUyFyIVIic0BRcVIgciJzQFByI1BRQXNzMUByY1MiMVJiM1BQcjNCcyByM1MgcVIzUXFSM1FxUjNQ8BIicjByc1FxUjNRczFSIHJzQHFSInByYjNTI3MhcWMxUiBzUHNQcVIzUXFSMiNRcVIyc1BRQzFScjBzY1BRUjNQcVIzUhFxUiFSM0IzUzBwYVIzU3FxUjJjUFFSInNTIhFSM0BRUjNTMyFxUmNTIjFSM1FzIVIyInBRUjNRcVIic1BRUjNTIFFSM1BxUUIzU0FxQzFSM3FxYVIyY1FxY7
ARQzFSMmIzUFFhciJzY1HwEHIic1BRUjIic1BTMVFCsBNTQFMhUiBzQjNRcVIgcmNRYHFSM0JzUWFyM3MjMWFSMiNTIFMh0BIyI9AQUWMxUHIyc2NRczMhUHIzYFMhc3FxUjIicjByc1BzIXIyYjNTMVIic1NAcVIzUfAQcVIzUnIzIVIyInBRUjNQUWHQEjJjUyBRUjNQcUKwEnNwUHJiM1FgcVIzUFMhcjIicyNQcVIzUHMxUHJjUFMhUnNQcUKwE3dQULBgoGEwIbBgUxEAEbIQ4SCyALGwsbFSYBBQMoCA4FGwULCxALDAoLNREOFwEFHAQMCgsFGwYGBhBBCwsKFhA2CwsLCQIFCwULCQIJAisBCgsMBgYBBgoFBRELBgYBBQUGBQYGCg0QBgoFAQUFCwELBQEFBQULCQsLBgULAQsGBQULCgUFAQYNCwsECgUFBQEGBgUFBQYLBAYLBhAGBQUFCQgVBQEQBgYGBQsFAQsFCgUFCgUFCwoFAQsGBQsQBgUGCyY2EAsLCyYKBgsgBiUNCTEIDQUFBgoKDAULBQQSGwobBjAbCAkFCyAWCxoGIw0LFRULdxYFBgULBQsFCwYLEi8NHhs4CTELCwULCgYGCgYLBQUFCwoFBREFBQYLBgoQEAYFBgsGCwwQBQYLCwUGCwYFBQYFFhsGBQsGBgoFBQYFFQETCAYFCwUFBQUBCwsLAQoKCwsBCxALBQsLCwEFCwUFBBsbAQUGBQUFFgoLChYbBgoFBQwLCwYFDggsHwsWExIQZgQEBAQEBwcEDgkFBAQEBAQGAwoRARcDAwQGARsDEQcDBAIGIgQFFgMREQMDAwMDCgcGCAcWJI8tE1sLBwYIERYWQQYEQkJAFREfAw0HDQMYAwQGBw0HBgMUCwQUBAYEBAQEAwoKBwcOFwUHFQcFBQMKBAQHAwQEBwMHBwQEBAQEBAQEBwcEBAQEBAMHBAQHBwQEBAcDAwcFBgcDAwMDBwsHA
wcOAwQECwcDAwMDBwMIBwcLBwQGBAcGDhERAwQDDQ4RHxgHJQ4GBBQQDwQEBAQEBQIDBAQEBAQEBAQEBAQEBAQRAwcDAwMRBgsDAwMDAwcVEQQEBwMDAwMDAwMDAwMDAwMHBxYkAwcIHS0eKAQDGwMUCgcDBAQeBxEGBAQEAwYjFwQEGxgGCxEUFhYNDQcdCAMDBQIVGAcDCgQEBxELBhEGFgYtBgYIEQcDByIDBwYIKREKDBITAycD/bQHBgEDGAMKKUQHBwcDHxQB0gP+YQYEBgUGAc8RBAYFCf6ABAYB9xQOAykNBhsRA/5eBwcHEXMHB0gNsQcUCmkEAxgHBwNwCj0KChEDRAoLFAcDCgciiwkFCAYR3QopBAa7CxEBmBUKCwYD/nYHiAcC7AoYCgoKfgMHBKYDCv0oBgEHAnIH/dIKQQwIHwQfClwHBwYBAe0HMAge/X4HBwH3BxsHNw0UA20KAwo2Fw4HFREUH/0GBwcHDgQbFAMCEwMcAwYB/QMKBwoCjQcIBgeSAwcbJf8GBwcvCgMHHxQYBgP+jQcHBgFoCQURCwoEWAoHGAMF/Z4OFwcDAwIPBBcEBxMFAxYJQQYBVQo6CgcHAxsGAwYBAiQE/roKCgoDAhYHkgcHCgf+ygYTCQnzBwETBwQHBwcEHAMsBxEOAXkLDj0HBwQHJgYECgQGBQoDAwUGAwEKBAcFCwQFCAYFBAkFAwEKAQQFBAUJAQEFBBEBCgEGDwEFBAEFBAcFBQoKCQ4BBQQJAwYOBQEKBgQEAQoBCgIsShMKIBUKBgUJCAwFAQ8OCgUdCgkKIgUKHQEZDx0eAQUiGAUICwoKChMKGRMKAVgJAQUYJw4NERwKBR4iCglSBgoBWiAUBQQKFAQKCgoTC0QJHgkjBQUKASMOBScFBQo7Dg8FBgoKBQkFARgKBQoFCgkKFBgFDhQTGQEFFwwiCgUBBQYCAgQBDgUBCQYEBQENEQoBBQIKAQoFBAEKBQ
4EBQQBBgoNGQETBQMLDgEGBQIdBBkBBRIGBQUBBAQBBQoBCgEFARsBBgMMBgcPCRAEDAgODw8FGB4BEwUKBQoJFRIKHQUYLAoBBQUPDAgYHRkJCgwIJwkQBB0PARgYBR4EBQUKIgUJCwEPCgYCFQodCgkFBQkUBQsJCQUZDQUBIhMKDw4KBQoBBQoBBA4QBQEKDgoBGAkeBAwICQoUATEUCgQFCgkHKg8DDgI/CgULCQkKKwUUCSMJEwQYBwkZBQpICggCCQUKIQUkAgoBAQ8BAQX+1QYHKREDGBVVBywMDyUEDQQGEgMUByMTIgcbEQcECiIHBgYIWAcpBwUIBwMYERcOGBQKCwMHMAcDAwQvGAQiBgYIAxELClgOGANhGTMzHCgDAwQHBwQFLiM9KAsHBhgDDQEDLQMYGDMGGAMFBQoHERsHAxELLAcKBgEIAgMRBEAEChERBwMHIgoHBQgEBAcGAQ0LFAcDEQcRIgQNEwwUEQQGHwcVBgYLBwMOBwYHBwcDBwMEBgEaCAMGAQcGBwQDBwcRBwcDBRolCgcPCQ0GCAcDBwMmCgcJCwUQAwMRBAkFBAQECwcDAwcDBwMEBwMDBxEREREDIxM6Bw4GByIHAwQLBhQiDBMGCwMHCRIzGAMHBAMHAwQMCwQEBBtfCgcHBAcDBxgUNgcHAwcKDxcHGwcIEwMEFhYNIg4OEgkWLgM4HQdpAw4FEywESS4KCgoRCwQiCAYGBxwEBgMDAxtILh1LUX4RAwQEGAcDFAUFGwYEGBEEAwMHBAgCCgMHFBEfBwoeLREGBwQXSwcIBgZSIgcHBwQDAwMDAwMGAwMDAwMDKAcHDgcHKQcGBgdfAwYHBw8FBwowCgoDEQcOChsEBgQHBigHBxQFAgcJCAUFBwMEEQQJCBEHDQQHBwMDIgMDFAcHBAcHCgQEBAYLBwkuBAcDAwcONwcDAwMDDQoHBwMHBwcHAwQpChUHAxIJCgQEBwMDDgMODg4
RBwQHBz0HBQUeBAcDBgYKAwMUBxMFBARBBwcRAwMDBwMEFQMKAwQEBwMHAwYGDQQRFAUFBQUEAxgDGwMUAg8HBwMRAwcHAx8KBwMDAwcDBgYHAwMHHgQDDQQEEQMFCQYBOAYDBwcYBwMHAyUHCgQHBggEBgQKEQMDBg4OBAcDJREOAxEHAwYrBAQYBwoRBxgHBwQKCh4GBQMFBQMEBBUGBgscDQ0HAwQDAyUbFAcYBwcHBgQJBXQHBANHBw4AAABV/87+/AViByAB0AOcA6QDqgO2A7oDwAPEA8gDzAPTA9cD2wPfA+MD5wPtA/ED9QP5A/0EAgQKBA4EFAQbBB8EIwQqBC4EMgQ6BD8EQwRIBEwEUwRXBFsEYARnBGsEbwR2BHwEhASJBI0ElASZBKMEpwSsBLIEtgS9BMEExQTJBM0E1QTmBO0E8QT1BPkE/gUKBREFFwUbBR8FKQUtBTQFOwVABUQFSAVOBVMFVwVbBV8FYwAAARQXNzIXNjMWMzUWMzYzNSM1FjM1Fhc1FzUXNxYzJzUyFTczFzUXNxY7ATUzMhU2MxUzNTMVNzM0Mxc2MxYzNjMWMzcUFzYzFjsBMjUyFTY1Fhc3FxUUBxYVBxYXBxYVBxYVIxcHFhUGIxYzFSMXFCMWFQYjFhcHFh0BIyYjFRYVIhUWHQEjFxUjFTMGFRcHFRcVIxUXFScjFTMHFBcHFwcXFRQjFwYdARcGIxcVBgcXBiMXFRQjFDMHMxUUIxUXFCMXFQYVMhcjJxUXBiMVFDMVIycVFhcHFDMHFwYdARcVIhUyFQYjFRYVBxYzBycjFRQjFwYjFTIVBhUWMxUiFSMiNQcnBiMVMxUjIicjFCMnIgcnByYjFSMiNQcjIjUiFSI1IhUmIxUnIxQHIicjFCMnBiM1ByInBycUBxQHNCciBycGIyYrASI1BwYjNTQnNyYjNjUiNTI1IicyNRc1JzI3JjU3Jic2NTQnNjMmPQEDMyc1MzUn
Mjc1IjUyNSI1Nyc3JzcnMjUnMj0BIzUzNScyNSI1Mj0BNCc2NSYnNjcnNyc2MyYnNDMmJzY1JzY1JxYXMjUyFzcXMjcWMzUWFTczFzY7ARc2OwE0NxcyNRcyBSMiBycjIgcVFxUjFRciBxcVBhUUFyIHFyIHFRQzFAcXBxUUMxUGHQEHMhUiBxUyFSIHFDMHFwcWMwcWHQEHMhUGBwYHIyYnJjUmJzQ3Jic3JzMmJyIHJisBBzQjByInBiMnBisBIicHIjUiBycHJiciBxcUIxYdARQXBisBJisBFRYXFjMUIxUXFQcnIxYzFSMUFyMUFwYVFyMWFxUHFjMVIgcUFyMUFyIdARQHFhcWFyIdARcWMwcUMwcVFzczFScjFCMXFAcWMxQjFhcjFjMUBxYXFBc2Mxc2Mxc3FzI3FBc0MxQzNxQ7ATcXNxUyNxUyNxc3FhcyNTIVMjUyFTI3FzY7ATQ3JzIXMjUnMzQ3NCczNTQ3IzU2Myc1NyInNTI3NCc2NycHNjM0JzY3IzUzMjcnNTQzNCc2PQEnMjUnNjc0IzcmNTI3JzI1JzU0NycyNyc1MxUzNCc3NSM1NyI1NycyNyc2MzQnMjciNTI9AScyPQEnMj0BNDMnMjcjNyc3Ij0BMzU0IzcjNTc1IzU0Nyc3JzYzNCc2NTQnMjU0IzcyFzM1NDcnMzQjNDc0JyMVIiciFScjIgciJwcnBzQrASInByInBhUmJwUUMxQrATUyBxUiByc1BRQzFSMnIhUmNTI1FxQjNQcVIzU3FhcVIzUFByc1BxUjNQUzFSIHIzQ3FSM0BxUjNSEVIzUFIzUyFxUjNQUzFAc1MgcVIzUzByc1BRQjNRcUIzUFFCsBNwcyFxUjNCM1FxUjNQUzBiM1NAUVIyI9ARYlFSM1FxUjNQUVIhUjJzcHJjUWJRUjNQUXFQcjJzUzFxUjJjUFFSM1BxUjNjUXFSM1BzMGFSM1NgUVIzUFFSM1BxQjJjUzF
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
zI1JzI3IzUXMzY3NjMWFQcUFwcWFxYXFCMUMxYXBxYVBxYVFhU3MhUyNxc3FzcVMjcXMjcUOwE3FzcUOwE3FTcXNxc3FDsBNxQzMjcyNyc3NCcyNzUnMj0BNjMnNyY9ATciNTY1JzY1NCcyNyc3NjM0NyI1Njc2PQEmKwEiByInByInIyIHIjUiBzUiBycUIycGKwEnIgcnIhUiJwc0KwEGIxUUBxYVBzIVBxcGFTIVIxcGFRQXIh0BMzcVIhUGFRc3FSMHFBcGIwYHFyIHFDMGBzIVBiMUBxUjBgcjNSYnMzU0IyYrAQcUFyMiJzc1JicXMjc1JicmIyYjNDM0JzcnMjUnMyc1JisBNTcWMzU0JzY1Jic2NSYrAQc1BycGKwEiJwYHJyIHJiMHNCsBBzUiJwcnIgcXBgcyFRQjFwYjFBcGFRciFRcGHQEXBwYHFRcHFBcUIwYjBgcmJzUmJzI1NCcyNSYnNCc3NSY1NCcHNSIHJwcnByciBycUIycGBRUjNQcVByM3BRYzFSMmIzUyFxUjNQUVFAcmNTIXFSM1BRUjNQUXFQcmIzUFByc3FxUjNQUVIzUXFSMiJwcVIzQXMzIdASM0IzQhFSInBRUjNRcjNzIHFSM1BRcVIyc1FxUjNSEyHQEmNQUVIyY1IRQXByInNjUHFAcmPQEzFRQjNTQFFxQHIicHFCM1BRUiByInNxcVIyInNTsBFRQHNCM2BRUjNTMyFSIHIzYHMh0BJzQHFSM1FxUjNQUjJiM3FgUWMwYrASInNTQXFQYrATQ3FiUVIgc0IzUHFSM1BzIVBiM1NAcVIyInFxQHIic1NxYhMh0BJiM1MxUiJzUFMxQXByInIhUjJzY1FgUHJzUFFSMiJzUWBRUnIwYjJzU2NTY1FhcVIgcjNQUVIyc3MgcXFSIHJiM0JRQrATUHFSMiJwUVIic1MgcjNTcWBRUjIjUFFSM1BxUjNQcVIzUFFjMVByM1MiUHIic7AR
cGKwE1NAUVJiM3FgcGFSYjNxYFFSM1FxUjNQUVIzUzFSM0BxQjJjUhFSM1FxUnNjUyMzIdAQYVJiM1MicVIzUHFSM1FwcnNxcVIzUHIzUyBzIVIyInBRYzFCsBJiM1IRUjNQ8BJzcFFSM1BTIVIyInBRQHIzU3MxcHIzQnNQcjJic1FiUVIzUHFRQjNTQlFDMUBzQnMgUzNxQzBxUUMxUjJiM1IRUjNQUUMxUjNyEXFSY1BRQXIzUHFSM1BRUjNQUzFSIHNRcVIzUFFSM1FxUjNQUVIzUyFxUjNQciBzU3MhcVIzUFFSInBRcVIzUyIxYzFSMmNRcUKwEnNRYHFSM1FxUjNQUVIzUXFSM1AhsJEgkKCT4dGBoJNQEuNCQ9TDA/ARIZEgoQE3MrNjwnCZUTWG1YCCQQEBQgASUKERIJCQESCgkKCgoOCxsaAQoMEB4KGxoKFQoKAQkKAw4JCAoJDhYjBg4IARAGBgEGEAIJExMPDRERAQgIERIRChMKCBMBEwoBEAcLCgETAQocCRMSExMBBxMZFAYGAiQTEBABGQIkEwoCEwE2CBMrExASEBMTCBwTCAETaVIQEgktEhkKCJkQskYKI1ATD28BEFUwXBMOHzMGmLIBChATjwEKDBgBECQTCRMBCgEJEwETExQtAhMRChQREwkMDwcIEwkBEwgSAQoKCQoKFBMBCgkDAQoUDgsIBwcBBgoJAQkJCgkCAw8TEggJAQoKEBABEAoBIwEKEAcGAQcTEisHCgklKwcQBwsbAQkSARIKCRUvKQFzPxMLphA+/uw+FAMUAwMDAwceAwUFEREDBwYDAwQYBgMDCwQHFAMOcBsDCgsuFhgRAxQmAgsGHAQHAwclDwkbCg8FAwsQAwcEBggbEQoNCxcVGwcEBwsGFxUDBhUNAxsDBxEGBwQGDhEHEQ4NDgMHAw4HPQcDBwciBgcOEQMEBgQ9ESoJAwMDCAUDBwYLBBUEBAQHAxsEBQYHBxE
UGwMKGBQFBQMLDQgGBwUIBwYBAwYLESIOAxUFCAcKBgEYCgcRFAQDDQsHBAoDBwQRCgcDAwcKAwoHFAMHAw4EBAMFDAMGCwcKBwMCCBQEEQ0ECxcHAwQGBwcHBwYEByEBFAUdCQ8LCQsKBAcDAwMDAwMFBRgDDAkEBAoHAwUIBAciBgYIBwcGJyEDDhskAQcEAwcWJBEGFgwDCgoDBwQFBgQKAwcECwQHBAYDCgMDEBIkCAwMDgYDGAQEDR8DBiYHCwYXFQcRDQQGKQQGJwMgBzMRBgYB3A0LAxMMBFsX/gUODQZFDv27BAIgMAQXGAGDAwcELAf+DAeqAwYBzwfaBgcDEQI0BgH+6gd+CwQHVQT++hEGDhQRAUcHC/6RBwoBkQ4RBgEHyQMKZgf+HQcHBQxzBwFyAwcGAQQ9AwYBsQYNBAb++wawBwYLAwjbBw4YBoQHAUADCwYDCf4YBQUFBQcGAXcIBgYGCQE6AwcHJQemBggFfgMGAaYDAhIDEv6MCwkF0wYB/u0XBAQEHg0EAwoLAkwEDf5kEQYBGAGHEQcFDAMHFBGZDAgE/rAEBgMHuxQGCwsGAi4HA8kDBgH+FgYBBzoNAwoC/QMK/WIRIgcKBwKQBwQRFQn9sgQFASgOBw8GBgLGCAUDB5kHGQkDEwFjBiUK/FkHiwZBBwoCZwaOFAMGjQYNCRkZlwc6BpIRBwqdC4QHB0sHBAUB/bcMFgcRCAYBtAvIBAYDAV4H/QcHBAYBA0gNBAQsBwQDB+4HBwYU/hAHGwcCzQQiBCH9EgoHAwMUDRoFAdkH/o0OFQQCRQQV/S8EBzADAsMD/UcKCBB+BwMVB18G/IUHBxsHlQQHBAc9BwPkBgH8KgMRCEINCw0OegYLCgQiC8kHAWwHmQcGhAEJCgUPCgoLBAoFBQUKBQUFBQUMCAYQBQUKCgoPHQQKBQ8iDwsEBAQQCQoFBRQFBQQaGC0LIhkFHQYKKAoEEBQhPAYxBQoK
BRQFNxgkDgoJCwkCCUUKAQkPDw8OCwUeCgQaBAoUHhQPAQkcEAYERgUBCQ8FFggKBAIIEAQQCQUeGQQUCkEUBQUFDw8ZXhkYMhAEJAkPCgQEBAQFFAUUFAUFBQUKCgUKChIRCgQEBAYGCwUKCgUJBAoPDw8LDRsLHQoeBhMZCQsFBAsFChQJBTIKBQ5QBkAsCwUxChQECQsJDwkLBQoOEA4ZfAsJIxQeBQkQCwkOGQUUCiMoCiUCHwgMCQ8JCx0KBAQKIxQLCQUKCgkGDgYKDgYEChlEGwQZQgkFDxEmGTInGQYGDwUHsQMHBkQaCAcb3QQLJNOBB3gQFRu+HyQgBy4csR8TEgQDAwMHBAQDAwYEAwYDAwMDAwMVHiILaQcHFwcSYgcXByYRBDEXhBcpBAcGC1YWbR8DFXIgB2IHBwcNDQgEBwMGAwMGAwcEBAQEDgQEBAQHAwMHBwMDAwZSBwcDB1UHBgcKdwdLBggUEQMnDB90DQQGOkED2itTA15xcCkVCgoDAwcHAwcEBAQECwQHBwQHBwcDCg4XDgYIEQMKBxQRCxQHAwUJBw0HBwoLBgcDBxcEBwo4Fgc6BggrBA05JxQmFAc7EAcDHwQYERELAw8FAwcNC0pSUgMTIAcHAwcpCgoHBwcKEBIMAjoKBgcbAwMDAwMDAwcHBwcDAwMDAwMDRwcrUwMHFAoEBwsuBxEOBQUOIgMeBwcRBwMHBLthCBxAPXAYAzFlAyUqPXcUByELCgcDAwMDAwMDAwMHBAQHTgQEBwQDCksNBAsDfgMDIgcFBQUFLwQEGwcHTw0EBhEGCgcEBwQDAwMEBAcHBxQHBiwGHBwGBgYDAwMHBwcHBwMEAwMEPQQHBwMFBRgHBQYHDgMHCAkcAQwFBQMGBwcGCgMHDhUEBgYKBwMHBx8KBwMDBgUECgMEBAcHDgQHBgYGAgQEFQMDHgoHAwcLCgcDBQEEDQcRBwMDBAQHBAMDAwcODgYGBwcfD
AUHBwcEBgQHAwoHAwoDBwcEDhELBgcDBwMHEQMHBgQGAwMbBwMJCAYEAgEDBwolBAQGCgcDBwcFAgcHNwYGFwQHAw0DBwUCAwcEAwMDBAQOBwcHAwcDAwQHBwQUEQYDCgcHBAMIDREHAwQDAwMDAxQEBAcGCgYFBQcHGAMRBgQHAwIJBwQGAwMGBwcHEQMODgMDGAcDBwcHAwcHAwMDBwcEBwQDAwcGBg0FBQYHAxUNCAMeARADDwwEBAcEBgMGAQQJBAcGAwMDBw0HBBUNAwMDDgMREQMPBQMLDRgOCgoRBwcKBAoKDQQEDgMDGAMDFAMKBwMDDgMDBwMEBAoHBwcHAwYKAwgFCgcHBAQUBAQHAwNEAwN6BwcAADn/zv7cBWIHGgIFAtMC3ALgAuQC6ALvAvMC9wL7AwIDBgMKAxADFAMYAxwDIAMlAyoDMAM2Az4DRgNQA1YDXANhA2UDagNvA3MDdwN7A38DhQOOA5MDmAOcA6YDqgOwA7QDuAO8A8ADxgPKA88D1QPcA+ID5gPuA/MD9wAAATMWHQEUIxcVBxcUBxYVFCMWFQYjFxUjFTIVBzQjBxUzBxcVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnNTMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NS
InNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYFFxUHFhciFR8BIxYzFhcWMxQjFBcWFwcUFwYHFRcjBhUGBwYHFwYVBhUWOwEXNDMWFzM3FDMyNzU2Nyc2NzYzNjc0NzIXFjMWFxYXFhczNjMyFzY1NCM0MzQnJicmIzQzNSYnJicmPQE0NzY1Njc1MzcnMzUnMjUnMzQnNDc1IzU3MhUyNzY3IjU0MzQjNCcHNCcGIzQjBycjBzQrAQc0IwYHNQYdARcVIyciDwEGByM1JicmIzQnNScmJwc0KwEiByYnBiM0Iwc0KwEnFAUVIgcmKwE1FhcVIzUFFSM1FxUjNQUVIgc1NxYXIzUyBRUjNQUjNTIXMh0BIzQnFwcnNxcVIzUHFSM1NzIFFSInBRUjNRcjNzIHFSM1BxUiBzUHFCMiJx8BNwcmNRcyHQEmNRcUFwciJzY1BxcGIyInNTIXFDsBFSIHJiM0BzMGFSc0FyMmIzcWBxUjJzQFFSM1BRUUIzUzFSIHNQcVIzUzFSM1DwEnNRcVIzUVMxQrATQHFxUiBzQnIzUXFSYjNQcVIic1FxUjNSEyHQEGFSYjNTInFSM1MxcVJjUyBxUjNRcHJzcXFSM1ByM1MgcyFSMiJwcVIzUXFSYjNRcUByM1NzMXByM0JzUHIyYnNRYlFSM1BxQzFAcjNTYHFCMiJxMVIzUFNggkBwcOBwcODg4HBwcPFg4IBw8PHRYWHQ8WCwsHDwgICA8LEh0PDxYSBBYQBhYWDxYWDxYWHR0WBwcPDw8WBwcHBw4ODg4
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
eoChRESOboAOgAAAQgREjm6AEIAAAEIERI5ugBIAAABCBESOboATwAAAQgREjm6AHIAAAEIERI5uAIGELgArNC4AKwvugC6AgYA7xESOboAwwIGAO8REjm4AO8QuADS0LgA0i+6ANMCBgDvERI5uADvELgA19C4ANcvuADvELgA2tC4ANovuADvELgA39C4AN8vuADvELgA5NC4AOQvuADvELgA59C4AOcvuADvELgA6tC4AOovuADvELgA7NC4AOwvuADvELgA89C4AO8QuAD10LgA9S+4AO8QuAD30LgA7xC4APrQuADvELgBBtC4AQYvugD7AO8BBhESObgA7xC4AP3QuAD9L7gA7xC4AP/QuAD/L7gA7xC4AQLQuAECL7oBFQIGAO8REjm6AR0CBgDvERI5uAIGELgBIdC4ASEvuAIGELgBI9C4ASMvugEtAAABCBESOboBMwAAAQgREjm6AT4AAAEIERI5ugF7AAABCBESOboBigAAAQgREjm6AZgB6gKFERI5ugGlAeoChRESObgB6hC4Ab3QuAG9L7gB6hC4AcLQuAHCL7gB6hC4AcTQuAHEL7gB6hC4AcnQuAHJL7gB6hC4AcvQuAHLL7gB6hC4Ac3QuAHNL7gB6hC4AdDQuAHQL7gB6hC4AdbQuAHWL7gB6hC4AdrQuAHqELgB3NC4AdwvuAHqELgB3tC4AeoQuAHg0LgB4C+4AeoQuAHi0LgB4i+4AeoQuAHk0LgB5C+4AeoQuAHt0LgB6hC4AfHQuAHxL7gB6hC4AfbQuAH2L7gB6hC4AfrQuAH6L7gB6hC4AgHQuAIGELgCBNC4AgQvuAIGELgCCNC4AggvuAIGELgCC9C4AgsvuAIGELgCDtC4Ag4vuAIGELgCENC4AgYQuAIS0LgCEi+4AgYQuAIV0LgCFS+4AgYQuAIX0LgCFy+4AgYQuAIb0LgCGy+4AgYQuAIe0LoCKgAAAQgREjm6AkMAAAEIERI5ug
JZAAABCBESOboCWwAAAQgREjm4AoUQuAJ80LgCfC+4AoUQuAJ+0LgCfi+4AoUQuAKB0LgCgS+4AoUQuAKD0LgCgy+4AoUQuAKH0LgChRC4AovQuAKLL7gChRC4ApDQuAKQL7gChRC4ApTQuAKUL7gChRC4ApfQuAKXL7gChRC4ApnQuAKZL7gChRC4Ap7QuAKFELgCpNC4AqQvuAIGELgCz9C4As8vugLZAAABCBESOboC3QAAAQgREjm6AuAAAAEIERI5ugLiAAABCBESOboC5QAAAQgREjm6AugAAAEIERI5ugLrAAABCBESOboC8gAAAQgREjm6AvQAAAEIERI5MDETIyInIyIVIic1MjcnNTcmNTY3JjUzJjUzNCc1NzUnNj0BIzU3JzcmNTQzJzUmNTY1JjU3JjU3JzU0MyY1NjUmNTcnNj0BIzU3IzUzNSc3NSM1NDMnNDMnNTcnNyYjNDcnNDcmNTQzJjUyNSI1NjUnNzUnNjUnNjMnNTQzJzY1IjU3JzQzJzUiNTY1JjUzJzY1JzcnNyc2NSc1NDMmJzc1JzcmNTY1JjUzJzU2MyYjNzUnNTcmNTcmNTY1Fhc3FjM2MxYzNDMXNzIVNzMyFTI1FzcXMyc3FjM1FjM3FzcWMzYzFhc3FzM3FTY3IjUzFTMyNxYzJzMWMzcWMzUWMzczMhU3FzQ7ARc1MhU3MxcUIxQXBxQXFSMXBxYVFAcXIhUWFSIVMhUUIxcVMhUGFTIdASMnFRYzBiMWHQEUIxYVIgcXIxcVFCMXBxcHFhcHFwcWFQcWFSMUMwcWFyIVFwcWFSMWFwcXBiMWHQEjFRciFTMVIxciHQEXIxcVBzIdAQYVFDMHFRQjFwcVFyIHFxQHFwcXBxQzBxUXIxUUFwYVFjMVFAcXBzIXFCMmIwYjNQYjJiMGIycHJyMGByYjByYnBzIVIhUnIgcmIyIHNCMVJiMUIycHJisBBycHIjUHIyYjBiM0IxQHJjU
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
nEvuAJvELgCftC4An4vuAJvELgCg9C6ApEBRAAAERI5ugKaAUQAABESOboCnQFEAAAREjm6Ap8BRAAAERI5ugKhAUQAABESOboCpAFEAAAREjm6AqsBRAAAERI5ugKvAUQAABESOboCuAFEAAAREjm6AsIBRAAAERI5ugLJAUQAABESOboC0wFEAAAREjm6AukBRAAAERI5ugLwAUQAABESOboC8wFEAAAREjm6AvUBRAAAERI5ugL3AUQAABESOboC+QFEAAAREjm6AvsBRAAAERI5ugMCAUQAABESOboDBQFEAAAREjm6AwkBRAAAERI5ugMTAUQAABESOboDFgFEAAAREjm6AxsBRAAAERI5ugMmAUQAABESOboDKwFEAAAREjm6Ay4BRAAAERI5ugM0AUQAABESOboDOgFEAAAREjm6A2IBRAAAERI5ugNkAUQAABESOboDagFEAAAREjm6A2wBRAAAERI5ugNwAUQAABESOboDcwFEAAAREjm6A3UBRAAAERI5ugN4AUQAABESObgCCxC4A3/QuAN/L7oDgAFBAgsREjm4AgsQuAOB0LgDgS+6A4IBQQILERI5uAILELgDg9C4A4MvugONAUECCxESObgCCxC4A4/QuAOPL7oDkgFBAgsREjm6A5QBQQILERI5ugOkAUECCxESOboDqAFBAgsREjkwMQEUFzcyFzYzFjM1FjM2MzUjNRYzNRYXNRc1FzcWMyc1MhU3Mxc1FzcWOwE1MxYVNjMVMzUzFTczNDMXNjMWMzYzFjM3FBc2MxY7ATI1MhU2NRYXNxcVFAcWFQcWFwcWFQcWFSMXBxYVBiMWMxUjFxQjFhUGIxYXBxYdASMmIxUWFSIVFh0BIxcVIxUzBhUXBxUXFSMVFxUnIxUzBxQXBxcHFxUUIxcGHQEXBiMXFQYHFwYjFxUUIxQzBzMVFCMVFxQjFxUGFTIXIycVFwYjFRQzFSMnFRYXBxQzBxcGHQEXFS
IVMhUGIxUWFQcWMwcnIxUUIxcGIxUyFQYVFjMVIhUjIjUHJwYjFTMVIyInIxQjJyIHJwcmIxUjIjUHIyI1IhUiNSIVJiMVJyMUByInIxQjJwYjNQciJwcnFAcUBzQnIgcnBiMmKwEiNQcGIzU0JzcmIzY1IjUyNSInMjUXNScyNyY1NyYnNjU0JzYzJj0BAzMnNTM1JzI3NSI1MjUiNTcnNyc3JzI1JzI9ASM1MzUnMjUiNTI9ATQnNjUmJzY3JzcnNjMmJzQzJic2NSc2NScWFzI1Mhc3FzI3FjM1FhU3Mxc2OwEXNjsBNDcXMjUXMgMUFwYHMh0BIwYHBiMVIh0BBwYHBgcGBxQXMzI3FhcyNzUjNTQ3NTQnNzUnNTI3FDsBMjcmIzcXMjUzMhczFxUXNxYVBhUUFwYVIicUIxcUMzYzMhc1Ij0BFhcWOwE2NyYnNTQnMj0BJiM3NSY1JicmIyYjNTQnNCczJzU0JyMiByc0NzM2PQEnNScmJyI1MxczJjUjNTI3NCcHIicGIyInBxYXMjcWHQEjJjUmNQcVIyI1IyYnIhcVIzQFFSM0JzUXFSInNTIFFSM1FxUjNRcVIic1FxQXFSMiJwcWFSMmNRcWOwEUMxUjJiM1BRUjNTIHIzU3MhcVIzUHFSMiJzUXFSMnNzIzMh0BIyc2NQUyFSIHNCM1BRQjNQcVIgcmNRYXFSM1FxUjNQczBiM1MiMWFSMnNQUUMxUjNCc1BTMyFQcjNhcjNzIXFSM1BxcUBzU0BRUGIzUFMhcjJiM1BzMXFCsBNhczFBcVIzQnHwEHFSM1JyMyFSMiJwcyFxYXFRQrAScUKwEmPQE0NzY3NjczFSM1FxUjNQcVIzUBFAcjNQEVIzUXMhUnNQUVIzQXFSM1BTIdASMnNQcVIzUWJRUnNR8BIzUyBxQjIjUXFSM1FzMXFSIHNCM2BRUjNQFkFwoeIwIHCQoQDAkFCTwOMTsgCgkJCgUJCgQKEiE
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
5ugJdATMAPxESOboCZAEzAD8REjm6AmcBMwA/ERI5uAJzELgCcNC4AnAvuAJCELgCcdC4AnEvuAJCELgCddC4AnUvuAARELgCfdC4An0vuAARELgCf9C4An8vuAARELgCgdC4AoEvuAARELgCg9C4AoMvuAARELgChdC4AoUvuAARELgCiNC4AogvuAB6ELgCldwAuADjL7gAAC+4AAMvuAAIL7gADC+4ABgvuAGUL7oB6wDNAAMrugGYAZ8AAyu4AZgQuAAG0LgABi+4AZgQuAAi0LgAIi+4AZgQuAAk0LgAJC+4AZgQuAAm0LgAJi+4AZgQuAAo0LgAKC+4AZgQuAAt0LgALS+6ADABnwGYERI5ugAxAZ8BmBESOboAOwGfAZgREjm6AD8BnwGYERI5uAGfELgAS9C4AEsvugBQAOMAABESOboAVQDjAAAREjm6AFcA4wAAERI5ugBnAOMAABESOboAagDjAAAREjm6AHgA4wAAERI5ugB7AOMAABESOboAfgDjAAAREjm6AKIA4wAAERI5ugCnAOMAABESOboArADjAAAREjm6ALMA4wAAERI5ugC2AOMAABESObgAzRC4AMTQuADEL7oAxwDNAesREjm4AM0QuADJ0LgAyS+4AM0QuADP0LgAzy+6ANEA4wAAERI5ugDrAOMAABESObgAzRC4AO7QuADuL7gAzRC4APLQuADyL7gAzRC4APfQuADNELgA+dC4APkvugD9AOMAABESObgAzRC4AP/QuAD/L7oBGQDNAesREjm4AesQuAEa0LgBGi+4AesQuAEd0LgBHS+6AS4A4wAAERI5ugEwAOMAABESOboBMgDjAAAREjm6AToA4wAAERI5ugFFAOMAABESOboBWgDjAAAREjm6AWMA4wAAERI5ugGAAOMAABESOboBjAGfAZgREjm4AZgQuAGW0LgBmBC4AZvQuAGbL7gBnxC4AZ3QuAGdL7gB6xC4Ad3QuAHdL7gB
6xC4AeDQuAHgL7gB6xC4AefQuAHnL7oB/QDjAAAREjm4AZ8QuAIQ0LgCEC+4AZ8QuAIS0LgCEi+4AZ8QuAIU0LgCFC+4AZ8QuAIY0LgBnxC4AhrQuAIaL7gBnxC4AhzQuAIcL7gBnxC4Ah/QuAIfL7oCIwDjAAAREjm6AiUA4wAAERI5ugIqAOMAABESOboCLwDjAAAREjm6AjcA4wAAERI5ugI6AOMAABESOboCWADjAAAREjm6AlsA4wAAERI5ugJdAOMAABESOboCZADjAAAREjm6AmcA4wAAERI5MDEBMxYVBzIVMjcWOwE1MxYVNjMyFzYzFzYzFhU2Mxc3FhU3FzYzMhU2Nxc3FzQzFDMVIxcGIxUyHQEjJxUXBxYVJyMHMhUiFTIVIgcXIhUXBiMXFCMXFScjFyMWFRQHFwYjFDMHFBcGFTIXFSMWMwcVFwcWFQcWHQEHMhUHMhcHMxUHMhUjFTMVIhUXBxcVBxYVBhUWFQcWFyIVFh0BFCMWFQYVFhUHFRcGHQEWMwcVFjMHFRcHJxUXFRQjFDMUIxcVFxUHFSMiNQYjJwcmIwYjFRcHIzQjBycHJiMHNCMHIyI1Bgc0JwciNQcmNQcmJxQjJisBIgcmIyIVJwYVIzQjFCMmNTcmIzUzNCM1MzU3IjU2NSI1Mj0BNCM3Ij0BMjUiPQEyNyc3JzMmJzQzJiM3NQcnMzQnNjMnNjUiNTc1NCM/ATQ3JzI3JzQzJzU0NzUyNzQjNzQjNzU2MyY1MjcmNTMnNyI1Mjc0IzUzFzQnNj0BJwcjNTI1Jj0BIjU3NCM1NzUnMzY1NCcyNSY1MjUmJzcnNjMUMzcXMjcXNgcjBwYdARQXBhUWFwcUFwcWFRQHFh0BBzIXFAcXFRQXIhUWHQEUBxYVBh0BFBcUBxYXBgcUMxQHFwYdARQXNjcXMzIXNDczFhc0NxYzMjc2NzY3JzY1JjU0JyYnNCc1NDM2NzY1JzcnNDc0JzcmJ
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
QYjFxUjFTIVBzQjBxUzBxcVFCMVMxUjFRcVFCMWMzQzFRQjFwcWFQYVMhciFRcHFBcVIgcXBiMXBxcGHQEUMxUHFDMVIxcVBhUUFwcWFQYVFwYVFwcWFRQjFxUHFwYVFxUUIxcUIxcHFhUUBxYdARQjFxUHFhUGHQEXBzIVBiMVFwYVFhUHFhUjFxUUIxcVBgcjIjUHIyInBycUIzUHIicHIicGIyY1BhUnIxQjNCMHJyMVMxQjIjUyNScGFScGIzQrASIHJiMHIjUGIyInBisBIj0BNDcnMj0BJzQzNTQjNTI3JzQ3JzYzNCc3IzU2MyY9ASYnNxQzNDcmNTI1Ij0BNyI1NyI1MjUXMzQ3JiczJzcnNjUiNTI1IzUyNSc0Myc1NDMnNTMnNTcmIzUzNSI1NjUzFTM1NCcyNSI1Nxc3NSInNyc1NDM0JzU2NSc3JjUyNSc2NSInNTI3NScyNSInMzUjNDM1JzMmIzUzFzUnNTYzJzUzJzI1JiM1NDc0JzcHNTI9ASM1MzUjNTM0Izc1JzUjNDcmJzY7ARYVNzIXNjUyFzYzMhc3FjM2MxQXNxQzNDMyFzYzFTczFTI1FjM2MxU3FjM2Mxc3FzQzJzUWMzcnNxQXFDsBJzcWFTM3JzUzFzMnNTMyFzcnMjUWMzcWMzYFJisBBgcGFSMGFSIHBgcUFwcyFRQHFwcyFRQHFwcVFBcHFRQXFRQjFAcUFxQHFh0BFyIVFhcWFxUWFzI3FBc3MxQHFhc2NTMVFBc2NzI3NjcmIzUzMjcnNDc1NDc1NCc2Nyc1NyI1IiciBycGIyIVFhcGFRQXBgcUByciJzU0JzY1NCc2PQE0Jzc1JzI1Jj0BNyInNzQnNDcmNTQ3JjU0Nyc2Myc0NzY1NjUzFRYXFh0BMjcyFxQHFDMVFCMXBxYXBhUUFwcWFRYXNjMyFzY1Mj0BJzY9ATQnNyc1NCM0Nyc3Jic0JzM0JyYnFSMHNCM3NSYrASIHJy
MGFRYzFScHIyc1NxczNjUmJwYjJzc1BhcVIzUHFSM0JxczFSc2BxUjNRcyFwcmIzUyFwc0JzcyFxQXFSIVJyMHIzU0NzU0JzY1MgczFBciByY9ATYFByInNTcFMxQHJisBByM1NAUHIic3MiEyFQcmIzUFFSM1ITIXBycyBRUjNQUVIzUXFSM3FzcWFQcmIwcnNQUjJjUWBzMWMxUGKwE0JxcVIzUFFSM1BxUjJzcWBRcHIic0EzIVIyInARQzFCsBNTIFFSM1BTMUKwE0FxUjNQcVIzQHFCM1BNUHIgcHDQYGDQ0NBwYGDRQNBwcODhsUFBsOFQoLBg0HBwcOChEbDg4UEQMUDgYUFA4VFQ4UFBsbFAYGDQ0NFAcHBwcNDQ0NBwcNBgYNDQ0HBw0NDQ0HBw0HDQYNDQ0HBwcHFRpgBw0wOhgNIgcOHCgHHBoOBwZSDg0ODgYjLw0NDgcODRwzAw4GExYOBw0HTBoWDDomUg0NDQ0bFRwNFQYGDQ0HFBQNAgsHDQ4OBwYGBg0NFA4iBg4HBwgGBwcHBwcHBw4ODgcHBwcODgcOBhQUBgcHIgcHDg0ODhsOBxsUFAcHBw4HBwgTBRYHBwsKFQ4VFQ4EEQcVDgIMBw0GDQ0OIgcHFBQODg4VDgcOBg0IEywRBwciCjMHDSoCCxAMDQ4HAgsVFAdSCRkyBA4HDQ4HDQcODQcCDD0OIjYHHwMjBw0+BgcHDgcHLwYGHAYNBxAEIgcHMxEbDQ8N/T4GCwNBNlIRFBo4GBEEBwMHBAcDAwMDAwMOBwQHAwMEBBsOGR0UMAoLFA4DIhyHBArkPhAWaEYjBwMHDhsEBxEHBAYGAwMh7wUaBwYHIgIEBgMKDn4XOAkDAwMDAwMDAwMDAwQECwcDBw4DAwgGBAomNgcmGywDBwYLGAoGAwMDAwMDAwcCFpQ4EyMfLAQEBAQEBgMDAw4bGAcbDJsNEQQEGicHBQELEQ0PCR8KBBEEEQMKAyI
MAgYDSNoDJgMDaQ4YBYMHVQYIDgcKCVALFwMQeCwKChgKBAcHBAowDgMFBRQI/Y0DBgEDAtQVGAsJBA0E/VgDBgEDBwKQBwMLBv6vBwFHBAMOCgb95AcByAdSFQSqBg4DHAYRB/2LBwoRlgQIBQgFBwRPBwKNDn4KBwcH/boHAwUFFwcNBgEDdAMHBgP80AcCTAQHA30GMAeLBwd2Dh9kBQsXEAwFCyokCzsOEAwWBQwFBQsFHAYWCxYLBhELCxYFBQsMGwsGAgkWDBAGEhoGHCEcSCIFHBELCwYQDAsWBgIOExQLCwwBChACCiELCgwGCwYQHAIJEQsGCwsLCwIJCxcCCQsGCxEQFhECCRwRCwYFLRAMBQIJBhIPC04GC1MhDAYGEQYGBgYGEQsQBQsGDAUFEAsLBQsLCwYFAgkGCwsLBQUFCwYGCxYHNycLBQYLEQsRCwsXJhYGDCwnBQsLBhECGQYGBgsLBgUMCxAMEBEGBgwKMxALCxclGAUGCwYWBRwGBQwFERYLBgsGCwkNCwUKHQYFBgYRBhwFCxELDhkREQsWCwsGCxYLBhwFCzIMBRwGCxAXFgsLFhEGCwsFHAsiBQ8CBgshCxELBQwLCwsLJxEQChgiFUMLBQULCwYLCwYGBgsICAsGFhAFBQULCwUFBQUFCxwGBgsLCxYGCwUKBgYLBgoMBQsGEREFGwULBgsFBQ7BAwkjGxsQBWw8YQMHJQQJEgczBwcGBxQOCwYUMFsLBwcMOylfCg4uIGkYB6UuRg8KIBYGBAIGBgsdGQcDBwoRCRJPPEUDB2MGBQkYB0oLFhk2BwsDBwMYBwQEHh0FJi8REVgqRA0DhVEhLgoeCRMEEwQLBhR0GAMTDBQREQcYLxYuBwMDFUkTAxgHdAYLLysFFAcDCA0ulCUDBgYIBwcGFQcIGgYECBMHKSUKBwMDAwQiJRUGCwMTHQYVGAYWFxEGgiUiChcmNEMKAwMHByIHBwUTFAsE
BwMHBwMCEgkPBAQHBhEzBgYNFQsNChgOChgDAw0VBxEEGAcKEQcYFQYDBwcHAwQYAwYBBgclCAYUDAUDDhsOBwMHCgUMBwoGCB8HBwYGBwoDBgQEDgcOEQQEGAMDIgMGAwMGBAcHAwoDMwUGAwgGBA0PBQcDAzYODhEKAwoDIgQRDgb+lQcH/j8DBwdcAwMUBwYsAwMbBwazBwcAAAAw/87+nAVcBv0BggIaAiMCKQItAjUCOQKjAqcCqwKvArUCuQK+AsQCyALPAtYC3wLmAuwC8QL1AvoC/wMHAwsDDwMTAxcDHAMgAy0DMwM/A0QDTANTA1gDXwNlA20DcwN5A30DgQOFA4kKgboBmgETAAMrugJhAncAAyu6AF4B7wADK7gB7xC4AA3QuAANL7oAEAHvAF4REjm4AF4QuAA40LgAXhC4AE3QuABNL7gAXhC4AFTQuABUL7gAXhC4AFfQuABXL7gAXhC4AFrQuABaL7gAXhC4AGDQuABgL7gAXhC4AGbQuABmL7gAXhC4AGjQuABoL7gAXhC4AHHQuABxL7oAcgHvAF4REjm6AHUAXgBoERI5uABeELgAdtC4AHYvugB3AF4AaBESObgAXhC4AHjQuABeELgAe9C4AHsvuABeELgAgdC4AIEvuAETELgA1tC4ANYvugCOANYAaBESObgBExC4AMjQuADIL7gBExC4AMrQuADKL7gBExC4AMzQuADML7gBExC4AM/QuADPL7gBExC4ANjQuAETELgA3NC4ANwvuAETELgA3tC4AN4vuAETELgA4NC4ARMQuADi0LgA4i+4ARMQuADm0LgA5i+4ARMQuADo0LgA6C+4ARMQuADq0LgA6i+4ARMQuADs0LgA7C+4ARMQuADu0LgBExC4APHQuADxL7gBExC4APPQuADzL7gBExC4APbQuAD2L7gBExC4APnQuAD5L7gBExC4APzQuAD8L7gBExC4AP/QuAD/L7gBExC4AQHQu
AEBL7gBExC4AQfQuAEHL7gBExC4AQvQuAELL7gBExC4ARDQuAEQL7gBExC4ARXQuAEVL7gBExC4ARjQuAEYL7gBExC4ARzQuAEcL7gBExC4AR/QuAEfL7gBExC4ASHQuAEhL7gBmhC4ATncuAEi0LgBIi+4ARMQuAEl0LgBJS+4ATkQuAEm0LgBJi+4ARMQuAEp0LgBKS+4ARMQuAEt0LgBLS+4ARMQuAEv0LgBLy+4ARMQuAEx0LgBMS+4ATkQuAEy0LgBMi+4ARMQuAE00LgBORC4ATXQuAE1L7oBNwETAZoREjm6AToBEwGaERI5uAE5ELgBPNC4ATwvuAE5ELgBQtC4AUIvuAETELgBRtC4AUYvugFKARMBmhESObgCYRC4AXXQuAF1L7oBegDWAGgREjm4AZoQuAGH0LgBhy+4AZIQuAGI0LgBiC+4AZoQuAGL0LgBiy+4AZIQuAGM0LgBjC+4AZoQuAGQ0LgBkC+4AZoQuAGU0LgBlC+4AZIQuAGV0LgBlS+4AZoQuAGY0LgBmC+4AZoQuAGc0LgBnC+4AZIQuAGd0LgBnS+4AZoQuAGf0LgBny+4AZIQuAGg0LgBoC+4AZoQuAGi0LgBoi+4AZoQuAGk0LgBpC+4AZoQuAGm0LgBpi+4AZoQuAGo0LgBqC+4AZoQuAGq0LgBqi+4AZIQuAGr0LgBqy+4AZoQuAGs0LgBrC+4AZoQuAGu0LgBri+4AZIQuAGv0LgBry+4AZoQuAGw0LgBsC+4AZoQuAGy0LgBsi+4AmEQuAHX0LgB7xC4AeDQuAHgL7gB7xC4AeTQuAHkL7gB7xC4AenQuAHpL7gB7xC4AezQuAHsL7gB7xC4AfHQuAHxL7gB7xC4AfTQuAH0L7gB7xC4AfbQuAH2L7gB7xC4AfjQuAHvELgB+tC4AfovuAHvELgB/NC4AfwvuAHvELgB/tC4Af4vugIgANYAaBESObgCYRC4AirQuAIqL7gCYRC4Ai
zQuAIsL7gCYRC4AkTQuAJEL7gCYRC4AkbQuAJGL7gCYRC4AkjQuAJIL7gCYRC4AkrQuAJKL7gCYRC4Ak3QuAJNL7gCYRC4AlPQuAJTL7gCYRC4AlXQuAJhELgCV9C4AlcvuAJhELgCWdC4AlkvuAJhELgCZNC4AmEQuAJm0LgCZi+4AncQuAJp0LgCaS+4AncQuAKi0LgCoi+6AmwCdwKiERI5uAJ3ELgCbtC4Am4vuAJ3ELgCcNC4AnAvuAJ3ELgCctC4AnIvuAJ3ELgCetC4AnovuAJ3ELgCfNC4AnwvuAJ3ELgCgdC4AoEvuAJ3ELgChNC4AncQuAKG0LgChi+4AncQuAKI0LgCdxC4Ao3QuAKNL7gCdxC4ApHQuAKRL7gCdxC4ApPQuAJ3ELgCldC4ApUvuAJ3ELgCmNC4ApgvuAJ3ELgCnNC4AncQuAKg0LoCqQDWAGgREjm6AqsA1gBoERI5ugKtANYAaBESOboCrwDWAGgREjm6ArMA1gBoERI5uAJ3ELgCutC4ArovugLCANYAaBESOboCxgDWAGgREjm6AsgA1gBoERI5ugLJANYAaBESOboC4wDWAGgREjm4AmEQuALq0LgC6i+6AvQA1gBoERI5ugL3ANYAaBESOboC+QDWAGgREjm4Ae8QuAL80LgC/C+6AwIA1gBoERI5ugMJAncCohESOboDCwDWAGgREjm6Aw4A1gBoERI5ugMRANYAaBESOboDEwDWAGgREjm6AxwA1gBoERI5ugMvANYAaBESOboDQgJ3AmEREjm4AmEQuANH0LgDRy+6A0gCYQIqERI5ugNTANYAaBESOboDVQDWAGgREjm6A1gA1gBoERI5ugNwAncCuhESOboDcwDWAGgREjm4AF4QuAOL3AC4AAAvuAFKL7gBTS+4AVAvuAFSL7gBVS+4AVcvuAFZL7gBWy+4AV0vuAFfL7gBYS+4AWMvuAFlL7gBaC+4AWsvuAFvL7gBci+4AXU
vuAF/L7gAiy+4AJAvuACbL7gAnS+4AL8vuADBL7gAwy+6AyYAxAADK7oAEACQAVUREjm6AHIAxAMmERI5ugB0AMQDJhESOboAdQDEAyYREjm6AHcAxAMmERI5uADEELgB2ty4AKPcuACE0LgAhC+4AKMQuACI0LgAiC+6AI4AxAMmERI5uACjELgAktC4AJIvuADEELgAnNC4AJwvugDIAMQDJhESOboA4wCQAVUREjm6AQkAkAFVERI5ugEOAJABVRESOboBHQCQAVUREjm6AS0AkAFVERI5ugE3AJABVRESOboBOgCQAVUREjm6AXoAkAFVERI5uAHaELgB0NC4AdAvuAHaELgB1NC4AdQvuAHaELgB19C4AdcvugHtAJABVRESOboCIACQAVUREjm6AmwAkAFVERI5ugKpAJABVRESOboCqwCQAVUREjm6Aq0AkAFVERI5ugKvAJABVRESOboCswCQAVUREjm6Ar4AkAFVERI5ugLCAJABVRESOboCxgCQAVUREjm6AsgAkAFVERI5ugLJAJABVRESOboC4wCQAVUREjm6AvQAkAFVERI5ugL3AJABVRESOboC+QCQAVUREjm6AwIAkAFVERI5ugMJAJABVRESOboDCwCQAVUREjm6Aw4AkAFVERI5ugMRAJABVRESOboDEwCQAVUREjm6AxwAkAFVERI5uAMmELgDHtC4Ax4vuAMmELgDI9C4AyMvuAMmELgDKtC4AyovugMvAMQDJhESObgDJhC4AzTQuAMmELgDOdC4AzkvuAMmELgDO9C4AzsvugNCAMQDJhESObgDJhC4A0fQugNIAMQDJhESObgDJhC4A0nQuANJL7gDJhC4A0vQuAMmELgDTdC4AyYQuANS0LgDUi+6A1UAxAMmERI5ugNYAMQDJhESOboDcADEAyYREjm6A3MAxAMmERI5MDEBMzIHFzI3FzcyFzcyFTczFzYzFxYXMzcWFzM3FhcHFhUHFgcm
BzMGJxcHFAcWFwYHFjMUIxYXBxcHJgcWHQEUIxYXBxYzBxQXBxcHFg8BFgcGFRYVBxYHIxYXBxcGJxcPARYzFSIHMg8BFwcWFxUjJiMVFxUjFxUjFhcHFBcGBxYPASYnIgcmJwcnByY1BxcHLwEiByYjIgcnJgcnBzQnFCMmJyIHJwYHNQcjJjUGBycGIycGIyY1ByMnBgcnIgc1ByYjByYnNjUiNTI1JzQzJic3JzcmNzYzJzcmPwEnNDMmNyM3JjUzJzYzJjc2NSc0Myc1NhcnNzQ3JiM3NCc3JzM3Jj0BMjc2JzI1Iic1Mzc0JzcmNTcmNzQ3JjU3Ijc0FzU2Iz8BJzY1IjcyNSY1MjU3IjcXNycXNycyNzUmIzY3JzI3Jic2NzY1FzM3FTYfATcWFTcWMzI3MhU3FzIVNhcWFzYzFzYzMhc3Fhc2MzIXNxc2FxQXNhcHNjMWFzczFTMFJiMVIzUjBh0BFAcWFwcXBh0BFBcHFBcUMxUUIxcGFRYXBhUUFwYdARciFRcHFhUHFhcHFhUGFRYVBxcUBxcHFBcGFRcVIgcWHQEUFzcyFzY3FzI1MzIVMjc2MzY1IzUyPQEnNTY3JzY1JzI3NCc3JjU0Nyc3JjU3Jzc1Jic3NSY1JicHIycmJwcmJwcmKwEnIgcnIgcnBhcyFxQrATQjNQczFCsBNAUVIzUXMh0BIyInNTMVIzUFMhc2MxYVMhcWMwcXBhUUFxQHFxUUFxUiBxQHFhUGFRQXMjczFAcXFAcXBiMUByM0IzU2PQE3Iic1NDcmJzcnNzQnNDcnNyc3Jj0BNyI9ATQ3Jic2NSI1NDcmNTciNTQ3Jj0BJzY1Jic0BxUjNQcVIzUHFSM1HwEVIyY1FxUiJwUVIzQnBRYVIyY1FxUjNRcVBisBJzQHFjsBFSc1BRUUKwEmPQE3BRQzFSM1MgUzFSM1NAUUKwE1FxUjNRcVIzUWBRcVJzUHFxUHIyc1MwUVIzUHFSM1F
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
HFhUHFhUGFSYnByYjBiMmIxQjJwciNQcjIjUiFScHJyMXByYjFSYjBycHJiMGIyYnBycjBzUGBzIVIzUjIgcmIxcjJiMHJiMVJiMHIyI1BycUKwEnFSI1ByMnNDM0Jzc0JzUzJzcmNTQ3JzI1JjUyNSI1NDMnNSI1NjUiPQEzFzUmIzYzJj0BNDMmNTI3JzMnNTQzJzcnNyYnNyc3JjU3JjUzNCM3JicyNSc3JjUzJic3JzYzJj0BMzUnMjUjNTMnMj0BJzMnNTciPQE2NTQjNzU0Myc3NScyNyc0Nyc3Jzc0Izc1JzM1NCc2NSYjNTQ3JzciJzQzFjM2MxU2MxYzNjMXNxczNjcWMzcWFzciNTI1FzI3FjMyNxQzNRYzNDMXNxY7ATcXNzIVNzMWMzYzFDM0NxYVNxU3FzcXNxYzNxYVNjcnMjUXMjcXNjMWMzYBFxQjFAcUMwcVFyIdARQXBxYdARcjFDMWMwcXFQcyFQcUFyIHFRciHQEXIh0BFyIVFh0BFyMUFxQHFyIVFwcUFwYVFBciHQEWFwcXBxYXBh0BFBcUBxUXIgcXFAcXFAcVFyIVFhcyFzcUOwE3FTM3FTczNxU2MzIXNDcXNjcyFzcWOwEyNTQnMj0BJisBIgcmIwYrAScUBzQnFCMmIwc0KwEGKwEiJyIHIic3NCc2NSI1Nyc3JzcnMjcnNDc0NxYVMjcyFzY1MjU0JzY9AScyNTQnNjMmIyIHJwciJyIHJisBJic3NCc3Jic2NyY1NDcXNDMUOwEyNxQzMjcWOwEyFzcXMjcXMjcXNxcyPQE0JzcnNj0BNCcGBzQrAQc0JwYrASInFCM0JxQjNSIHIicGKwEnFCMmIyIHJiMiBRUGKwEnNAEVIzUXFCsBIic1NxYnFSM1ARUjNRMVIzUFMhUiByYjNTIXMhUnNRcWMxQrATQnBxcVIicXMxUGIycmJzIHFjMVIyInNTY1HwEHJiM1BBQQERMVCh8rCA4G
BgsLCgUFCgUbFgsLCxUFBQUFBRsbBQUFCgUKCgoFCg8KCgoKCgoKCgUFBQUKBQUIEhUFBQUFCgUFCgUFGhUFBQUFBQoFBQoKBQUQAgoFCwYGBhAQCgQKBgYFDwQECgoEBAQKBQoFBAoKBAoKLgk+Gh0NLRIKBQsFCwQLBQYEFnMKFBQKDSIGGQsVHwoGCAgbLQYaChsQBAULBAwKCgUFBQ4HLwgNJQQgCgYKJQoKCw81JAsGBgYQCgUFCgUKCgUFCgUFCwUKBQsGBQUGEAUVCQcFBQUFEAYLBQULBgYGBgYGBgYGCgYKCgoEBAQLCwYFBQoKBAQKCgoKBAQEBAoKBAQGCgQPDQgGBgYGBgYGBgoPBQULBAQECgoLKgEJAgkKBQsFAggLCgs0EBQKCws/DwUFBRoGCgoLBBsFFw4PNQoKCwsPCwoGGgQOCCUEBSUVGgsaCh8LEQ4gGg4wBQUaAhMFCwULBAb82QcHBgYDAwMKAwMEBAQGBwMHCwQEBwYBBAQEBAQEBAMDAwMHBAQEBwcEBAYEAwMDAwQEBwoDBAIGAwMGAwMGBxQjBgQHERcHESYGnRECCzAHDVISNRESAwcbBwMFBSkOFwYIFxEiGBEYAxELBgQKFgIDBgEGARQHAwYDAwMDBgMDAwkFBAQvCh0MCAZRIgMHBAQHBQUFEwMHGAYEBwcGEwxzBwQEBAQEAwMEBBwRAwMfCQsEDg0GCBQWGgYHBAYHCg4HEQ0VBwMDAxELTQMEB0ANDgsUXAMmAwgTBxEGCCIoBAYHCwYyDDMCgAUGAwf9zyK7BwMGAQQNmQcBxQQ3BP4dBwMHDgoJDwcRyAcHBwMKuBESBrEfDAIfCBYUXAoSHwYBBz0OCgsKB3EPCiIFIgoECgEJCkkJBRgKCBUFFAkiAQkUBSsKCggLBQo/AQ4FDioHCQoFBQoTMRMKAQkICwUdAQkYCg8JBQ8OBQoFCgQKDw4KEyMEDxgFCggLBRQJBQUBC
QodCRQDBwkPCgkFIgoFBQUdBRgYDx4EDwknCAwJChgeGAgLDwUFCSwZBB4JEhUBCQoFCQUUHRgFDw4PCAsFEAgSBwUKBQUdBQoKBQUFBQUFGQUYBR0FBQ8KBQUTGAoKBQUFBQ8ECQUFCQkFBQkODgQEBAkFDwUFBQUFCSINFQUZExQOBBkUCQkLBQoEChgFCgUKCQUFDw85CwUEJgYPIgoEBSIKHQpDCxMKCgkFFAkFBRQfWgoFUwgLIR4FCh0QDQ8nGAUKVwoTGQkUCgkKDAcFGSIFHR0PGB0KBSIJCgodBQoODwULCAoFBQkVIQoTSSwKCgUFBQoFDgUKBQUPBgkKBQUFBQUFBQ4ECQ4FBQkEBAQECQUFCQUDBgkFBQkEBAQJBQUFBAYJBQUFCgUFCv6XDgoQVgoREQcEBhUeBwYIGAYHxQ4YCjADBwgdBwMHBCUHAx8RAwYIGwcDBwMHSAMHDQYLDwYDBwMEBxQHGBEZCRIMBystGXNOBxsKDg0RBggOEQMPAgMDAwMHBAQEAwMRBAQGAwMEBwMDtA8MBBsKAwMHBAQDBAMEBwMDFAcHFBgXYAcDBAYVDRERDm0UBBcWEAUFCgQKByIEBw4oERgDBxEOPQQHAwMDAx04FQMHBzYRGXYSCRQEBAQEBwMHBAcEBAQEBwMDAzMNFhoOER0WFBUQCAkEBAYFBAoDAwQEBAQHAwMDAwMHSwcKAwb+1gQHhAcHBgcIAQYG/qkHB/3nBwcsBwQEAzYHAwQEFAcMDywDCg0iCgMGFgwKGAMHAwkIGAMOCwMAAAAj/87/EQStBucB0ANvA3MDegN+A4QDjAOSA5gDnAOkA6gDsAO3A7wDwAPGA8wD0gPYA9wD4gPqA+8D9QP9BAEEBwQPBBMEFwQcBCIEJwQuAAAFNCcHIicGIyYjFSYjBiMVMxUmIxUmJxUnFScHJiMXFSI1ByMnFScHJisBFSMmNQYjNSMVIzUHIxQjJwYjJiMGIy
YjBzQnBiMmKwEiFSI1BhUmJwcnNTQ3JjU3Jic3JjU3JjUzJzcmNTYzJiM1Myc0MyY1NjMmJzcmPQEzFjM1JjUyNSY9ATMnNTM1IzY1Jzc1JzUzNSc1FzM1Izc0JzcnNyc1NDMnNj0BJzYzJzU2Nyc2Myc1NDM0IzcjNTQzNSc0Myc1NjUiJzMXNSc2MzU0IzUzFzUmJzc0IzcnNj0BJzUyNSI1NjM1JjU3JiM3FzM1NDMnNjM1IjU2NSYjNTI1MzIVNxc2MzUjNTMyFzM0MxcyNxc3FjM1MzIVNzMyFTI1MhUyNRYzNRczNDcyFzM0Mxc2MxU3Mhc3FzQ3NDcUFzI3FzYzFjsBMhU3NjMVFBcHFjMGFTIVIhUyFyIVJxUXIgcWFQcWFwYVFBcGIxYdARMjFxUjFRciBxUyFSIVMhUHFwcXBxciFRciHQEzFSMVFyIVMhUiHQEUFwYVFhcGBxcHFwYjFhcUIxYXBhUXBhUXJiciFSInByciByYjFSY1ByMnBisBJwYrARQHJyIVJyIDNCsBBzUGBzQrAQc1Bgc0JwYjIicGKwEnFCM0IyIHNSIHJyIHJxUXIhUXBzIVBxcjFBciBxQzFAcWHQEXIh0BFAcVFjMGIxUyNxYdARQrARUzFSIHFQcyFQcVFDMUBxciBxciHQEXBxQzBzIVBhUUMwYHFwYHFhUiFRYXIhUXIxcUBxYzBxUXIhUUFwcUFwcUMxQHFwYVFyIVFBcGBxYdARQHHwEyNTIVMjcyFzczFwcUFzQzFBcyNxYXNDMUOwE3FTI3FTM1JzI3Jj0BNyInMyc0NzQjNTMWFzM1NDc0JzI3JzY3JzI1JzMnNjUnMjcmPQE0NyYnMjU0JzI3IjUyPQEnMjcnNjMnNjMWMzcWOwE3MxcyNTIVNjUnMj0BJzI9ATQ3NScyNSYjIgcmIwc0JwYjNCMHJiM0JzY1JzI9ASY1MjcXNTQnNyc3NCc3JzY3IjU0NxQzMjUyFTI
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
jUnNyc1NyY1NjUmNTcmJzI1Jj0BNDMmNTY1JjU3NSc2PQEmIzc1JiM3NSc3FzUnNTQzNCM0Myc1JzU3NTMyFTYzFzcWMzYzNSc3MxQzNxc3FjM3FDM3MzIVNjcUFzcyFTcWFTcWFzQzFjsBMjcWMzI1FzY1MxQzNDMWFQcWMxUjFDMVIxUHMhUGFTIVIh0BFDMHMh0BIhUyHQEiBxcHFyMWFxQjFjMHFTcXIxQXBiMXBhUyFQcVFDMHFRQHFyIHFxQjFxUUBxUiBxQzBxQzBxUGIxYVIgcWFSMXBzIVIgcUMxUjJxQXBh0BFzczFSIVFh0BMhUHFDMVBxUXIwYVFBciFRYVIhUWFwcXBiM0IwcnIgcnBgEnBhUiJwYVIwYjBgcXIgcGIxQXBgczFQYjFBcGHQEHMhciFRQXBzIVBzIdAScHFRciHQEXFSIVFwcXFSIdATIXBiMUBxQXBh0BFDMUBxcjFhcHFwcWMwcUMwcUFxYXFhczNxQXMjcUFzcUMzcyFzYzFzcWMzcXMzY3FDM2NRc2NzYzNjM2NSYjNTMyFzI3IjUyNzQnMhc2PQEnMj0BJzI1Jj0BNDciNTY1JzI1NCM1Mjc1NCcHJiMnFCM0KwEHNQcjBzUiByciByYrAScUIyYrAScGHQEXIxQXBxYzBxUXIgcXFAcXFAcWFzI1MxYVBxQXBgcWHQEXIxQXBxYVFAcXIgcVFBcGHQEXIwYjFDMGIyInFCM1IgciNSYnJj0BNyI1NDcnMjcnNj0BJzI1JzM0Jzc0JzI3NTQ3NCc2NzQnNzQ3NDcWOwE3FhcWFwcyFRQjFDMHFRQzFSMGBxQXBgcUOwEyNzIXNzMXNDMyPQEnNj0BJzI1NCczJiM0JwcjJiciFSM0IzQzNSYnIyIHIycHNCciFSYjBiMnFBcyFSM1BzIVBiM1BxQzFSIHNAUVIzUFFh0BIyYjNTI1MgcVIzUHFSM1ARUjNRcVIzUHFCsBNRcVIicHMx
QXFSInNAUVIzUFFSM1BRUjNQPPBgwHBwYpExAQByIfIhcoMiApAQsRDAYKDUsdIigZB2ENOUc6BRcKCg0VGAYMDAcHDAYGBgYGCgcREQYICxMGEREGDAYGBgYDCQYGBgYJDhcDCQYLBQUFCwYMDAkICwsFBQsLCwYMBgYMDAYLBQYGDAYSBw0NDQ0FDBENBAQXDQoKEBcNBg0kBQwdDAsLCwwNBRINBQ1FNQsLBx0MEAcFZQp0LgcXNA0JSQo4HzwMChQhBGR0BwoNXQYHEAsXDAcNBgYNDQ0NHQwLBwwMDAYHCQQEDQYMBgwGBgYGBgwMBgYHDQkIBAQEBAYGBgYGBgIKDAwGBgYGCgoKBxcGCgQEBAwMHAQGBhgcBAsGBhEFDAwGBgwfG0wpDAhtCin+sAZBAwcRCksEVisEBg8OCgQHAwYFBQQHBAQDAwMHBAQODgMDAwcOBAsHCgMHBQUDAwMGAwMDAwcDBwQKCwQOBDMRSB8sDQcKBAYOKQMHB04ZAgcHFQYDBwQ9HgQNDioaMggVBmMLEQQJCwoOAwMKDQMHCgMDAwMDBgMHBAQVEAUYBx9KEQQDAwcRGAcDBwcHBhMMGBEDBghAGBUEBAQEBAcHAwMEBAQEBAYSHwdAHgMDBAQDAwMDAwMGBQEDAwMHHhEDFSgDGAQDBwMdHUQDAwMHBgUEBwMGAwMDAwMHDQcHBAoDCh43BgcEB0grGw4DBgYDAwoHBBADAwQwKRQ6CAUVLBElHAQEBAQHAwIFHgcDEEkHBhUVASEHBgEDsQcbCj4DBggRrgcLzAcFBQ4HCg4BWw3+lCkEMQwOCk4HnQYC9gQ3DiUHB1IGAdoLAwkL/dkEAq8H/TYD/tMBCQsGEQsLDAUKBAQECwcEBAQEDAkGEAUFCgsLESAFDAQRJBELBQUFEQoLBQUWBAYFGxswCyUbBSAGCysLBREVJUAGNQULCwYVBTwaJg8LCgsLAQpLCwoREBAPCwYgCwU
bBQoWIBYQAQoeEQcFSgYBChAFGAkKBQEKEQQRAQkFIRsEFgtGFQUFBREQG2UbGjYRBSYKEQwFBQUFBRYEFRUEBAQECgoECwoTEwsFBQQHBgsFCgoFCgUMEBEQCw0eCx8MHwcVGgsLBQULBgsVCwQ2CwYPVgZFMAwENgsVBQsMCRAKCwYLDxEQG4UMCiYVIQQLEAwKEBsEFgsmKwopAiEJDAoQCwsfDAUFCiUWCwsGCwsKBg8HChAGBAsbSR0FG0YLBBESKRs2KxwGBhEGCAegAxQHAwIIJSFhBiZYBAYRMAMLAwcLCU4RNwMEBi0DDgYEBwcDBwMfCgQRBlkKCiIHAwsdLQgGEwxHBwcGByQMEREHORELDSxLLC0DGwMDBAQEAwcEBB8EBAoGBgMZBgQJBQcKDh4fXzcGBwdPA0EGDgMHEAQHAxQYBAYHDhYZBBITFQMfCg0wGAoDBgQEBAQEBAMDAwMDAwQEBAMEFAMHAwcHJQoLBhEHBAYOAwcdFhEVIhcIBicFBggYBgQHBgcEBwYbBwcIBgYHDhFfAxwEBAQEBwoVHsIEEQYJExEXDjoHAwcRBwMHBwgT+y0JCwYBJhAgIYglSx8KBAQPGilcBgcHAwcbBwQcEAcGBCkUBwQEBAczJhQGCx8RAwkLFS9VAz0wFRUHAwUTBzoEBQYHEQQEBC8HByYGCxEiAwMEBhMEBFITBQ0lAwtPAwOtAwP99AYGFwQEJgcHPQcHLAQGBAcGdgcHYwMDGAYGADL/zv7fBccHOgIFA+QD6APwA/cD/gQHBAsEDwQVBBkEHQQhBCcELgQ0BDsEQQRJBE8EVgRaBF4EYgRqBHIEdwR+BIMEigSRBJUEmwSfBKYEqgSuBLIEtwS9BMQEygTOBNQE2QTdBOEE5wTuBPIAAAMjJj0BNDMnNTcnNDcmNTQzJjU2Myc1MzUiNTcUMzc1IzcnNTQzNSM1MzUnNTQzJiMUIzU0Myc3JjU2NSInMjUn
NzQnNTI3JzYzJzcnNj0BNCM1NzQjNTMnNTY1NCc3JjU2NSc2NSc3JjU0Myc1Nyc2NSc1NDMnNDMnNyY1NDcmPQE0Myc1NyY1Nj0BJzciNTYzNSc2NSY1NyY1Myc1NDMnNTY3MzIVNzMyFzcXNDMVNzIXNzIXNjMWFTY1FzM0MxQzNxczNSM0MzIVIhUXNjUXNjMUOwEyNxYzNzIVNjMyFzY7ATIdARQHFyIdARcUIxUUMxUiBxcUBxcGIxQXBzMVBiMWHQEWFwc0IxQHFhUiFTIdAQcyFQcyFSIVJyMUBxYXIxcHFwYVMhUiFTMVIhUXFCMXFRQjFxUjFxUHFjMVIxUyFQYVIzUjFRQXIhUyFQcnBxUyFwcXFRQjFBcVBhUXBxYVIhUXBhUyFxUiBxUXIhUyFyMVMxQjFRcjFjMVIycVFxUGIxcVIxciFRYzFRQHFBcHNxUiHQEzFSMVMxUjFDMHFRcVMxQHFhcGKwEmNQciJwYVIicGIyInByYjBiM0Jwc0IxQjIicGIzUHIzUiFSYjBiM1ByYjBiMnBycUIxcVJiMHFwc0JzQrARcHJjUjBxcVIycjFxUjIicHFyIVJiMHJiMGExQXBh0BFyMUBwYVMhUHFwcUFwYHFhUUBxQXBh0BFyIVFBcHFwcUFwcWFRQHFyIVFhciBxYVFAcXBxQXIh0BFyIHFxQHFBcHFwcWFRQHFhUUBxYdARcjBhUHMhUUBxY7ARYXNDMXNxc3FzcVNzIXNjUyNzUnMjcmNTY3NCc2PQE3IjU2PQE0JzU0Nxc0MxYzNxQ7ATcUMzcWFxYXFQcyFyMWFRQHMhUiFRciBxciFRciHQEXIhUXIh0BFyIdARcjFBcGHQEXIxQXBhUUFyIdARYdASM1IwYdARQzMjcWFzI1Fhc0MyY1MjczMhc2PQEmNTQ3FDsBNCc2NyI1NDcmPQE0Nyc3NSc1NjciNTI9ATQnNTIVMj0BNCc2PQE3IjUyPQE0JzY1N
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
2Nxc2MzIXNzIXNjc2FzQzNxc0MxYzMjcXNDcXNzYXNRczNxYXFhcGBxQzBxQXIgcVFjMHFTcHFzcWIxUUMxQHFDMUIxQXBxUXIh0BNhUUIxcUBxYVFAcXFAcXBhUXMxcGIxQzBhcUMxUUBxczBxcGFRciBxYVFwc2HQEHMhUHFhcWBzIXBzMUBxcjFgcyFQcXFgcXBzIXFAcXBxcGBzIVBxQzFCMUFwYHJyIHJxUmIwcmJwcjJxQHIicHIicHJicUByMnFSYnByYjBgciNQYVJwcmDwEmIyIHJiMPASc3JxYHJwcnBgcmIwYHJyY3Jic2NSc2NyM1NyM1NzUiByMnNjcnNyc0MzQjNTI3LwE3BjU3JzY3IyY3JzQ3NCc0Nyc0Nyc3JzY1JzI3JzY3Ij0BNDc0BzU3JzY3IjUyNyYnNjcmJzU3BjUzJgc0Nyc0Nyc2NxczNjcXMzY/ATIXNzMXJjMXNjMXNxQzNyY7ARM0KwEiBxYXBh0BFBcGFRYVIhUWHQEXIh0BFBcGHQEUFwcUFwYVFBcGHQEXFQcVFyIHFwcUFwcXBh0BFBciFRQXFAcUFwcUFwcyFQcXIhUUFwYdARciHQEUFzcUOwE3FTcyFzY7ARc0MxcyNTQnNjcmPQE0JzY1JzY3Iic3Jzc0JzI3JzY1NCc2NTQnNyY1NDcnNyc2PQEnMj0BJic3IjU3NCcyNzU0Jzc1JisBJxQjNCsBIicGKwEHJyIHIiciBycHNSIXFSM1MxUjNQMXFAcjJzQXFSM1NBcVIzW4BwEHATAOBQkXAgoKDg4OBggIBhIHNAcDBAcHAxIGAQsOAzASBA4HCQwOCg4HBAcKBAYBEhwRAgcDAgMDBwEGAgcDAQoBBwcHBAQEBgQDDgcEAwQDBQcIBAEGAQUGCw0BCgoBCwYDAgMGAwQBBAQDBAcBAwEFBQIEBAMHBwEEAwoHAQMEAwMFCgQDAwYCAwMHBwQMEgcDCBgnBwYVAREDBwsD
BwcEBw4KDgQHBxYUBh0OEQQDHyAKFjcOGAQIBhAFFAQHAxUBBxMGRw8MBwcLChkBBAQEAwQKAQcDBw0DBwMBCQIJBgQHCwUJBAEDAwkEAwMDAQIEBwQHBQoIBAQFBAMEBAcCBwYVDgEIAQMEAwUFBAMDAQIDAwQHBwEECgMJBwQJDAoPAhoGBgIGAwgBBBEGBQsHAxUBBwRBAwQFBQkICgMDAwMDBAQEBAcDDQMDDQcHAwYEAwMDBgMDBgMDAwMDAwYDAwMDBgMDAxgpAx8GHw8MDg0VIgMHMwMGBAQDAwMEBgYEAwMDBgcKBAcDAwMDAwMDCgQHAwMHAwMDAwMDBwcEBQUYIgQDDhoVEBwHBwMGAQYLCg4HByHLBkoG/xQfAxEKB5kGBuAREQgBCwYBBQkIAQUGCgYFDAEJBgUGBQELAQsGAgUGCgwQBgYLBgEGBgsGCAgGIBwBBR0GCyMXCwsdAR0dARcMCwsBBQYGCxIcCwYMAQsMFw0KCgwcHiILAScLDAYFEgsmHwsGCwE+NAseBB00CgwXDAEGER0GBhEWIlEcDAUMET5iBksFEwoiHBEOJhwMCxkyBhcLCwYLVwEGBwsGDwYLCwcFBgYFBgUMCwUFAQUFBQ8GCgESBhAIBAwVAgcQBgojAQYLBQsBEAYrAQwFAQwcDAsMJwsGHBKJBgsFIwYGCwEXWyILEgsLEhwuDAEGHSJCCR8xHAoCDAsJAiMPJDkMC1kDHBIcERcMBQoCHQIMARwMOQYiUBwBEQkOIh0BBi4BCgIRBgyOLhcFAQwLAQwBCwYGBgUSCwYFARH+rgQVRgUJSEgiLwUQBgQDBgg2BwMVBwYGCA5EFAddawcEAwcfBgoLCgoDBxgHBxASIgYTDDMlHAMDBwQGBAcNDg1PAykRAxQSBgcmEQoUCAYHAwMDAwMDAwMDLAMHKjwGCwcoKRMMEUoZVRcHDl9YjxERBwgTIhERIgcGCAsTBz0HVSUVEQoUC
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
wMHAwQ7OBEVBAQGAwQDBAYFCgMHAwcbEQQJCzwMAwcDEQ4EBwMNAwcOCgQEBAoKCgYECQMECQMOAw0OIgozGAQYCgMHDzgEEQoDBwMEBwNBAxgHBwYGCAoODTAFCAgGBggXEQsGBBQHAwcHAwcEBgQHHgcRCAYGBAkLBgEDBAcHJRQRBiMOBgYBCg4DBxUREQYcBgQHCg0GAUIkHwkLKQoGCBQKBgEPFwYtFxUEBAQHAwQJAwMG/Y4HAwcDAwP+WgYGKAQDB50HAwexBAMHCQgFBQcEAywHDl8ECg4NCgQEBwcHCgQEAD//zv6cBVwG/QGCAzgDPgNFA00DUQNYA2ADaQNtA3EDdQN5A38DhgOOA5IDmgOnA64DtAO6A74DwgPGA80D0QPWA9oD3wPjA+cD7APwA/UD+wP/BAMECAQOBBMEGAQdBCQELwQzBDgEPwRFBEkEUARVBF0EYgRnBG0EcgR2BHwEgASEBI4ElAAAASciNyciFScHIicHIjUHIycGIycmIycHJicjByYnNyY1NyY1MjcjNDMnNzQ3JiM2NyYjNDMmJzcnNRY3Jj0BNhcmJzcmIzc0JzcnNyY1NyY1NjUmNTcmNzMmJzcnNDMnPwEmJzUyNyI/ASc3Jic3MxYzNyc1Myc1MyYnNzQnNjcmNTcWFzI3Fhc3FzcWFTcnNzMXMjcWMzI3FxY3FzcGFzQXFhcyNxc2NxU3MxYVNjcXNjMXNjMWFTczFzQ3FzI3FTcWMzcWFwYVMhUiBxcUIxYXBxcHFgcGIxcHFg8BFwYjFgczBxYVJxcGIxYHBgcXFCMXFRQnFxUGBxYzBxQXBxcjBzIHFSIVBhciFTIXFScVBhcHMhUHFgcUBxYVBzIVBiMVFDMHFRcGFTIVIhUWFSIdATIVJwcXJwcXIhUHFjMGFRciFRYXBgcGBycjBzUGLwEHJjcHJiciByI1ByciNQYnJicGIycGIyInByYnBiciJwcnBiM2JwYnNQ
YnIicVJzcjAwYVFhciFRYdARQXBgcyFSMWHQEHFh0BBzIVFAcWHQEUBxYVFAcWFQcXBxQXBzIXBhUXIhUUFxQHFxUUBxYdARQXNjsBNxc0MxQzNxUyFzYzMj0BNzUnMj0BNCc3NTQnIwcjJzU3FzM2NRczNSMVIzU2NzU0JyMiByYjNjcUMzc1NCc1MzI9ATMUFxYXFjMHFBcWMxUjJisBFhUWFSMWMxQXMzI1Mhc3FTcVMzcUMzI3FzcUOwEyNxQXNxQ7ATcUOwEyNxYzNjc0IzQzJicyNTQnNj0BIjUyNTQjJic3JjUjIgc0IzY7ARc0IzQzNCc3JjUzNSY1NyYjNTQjJiM3JjU0IzU3NSc0NyY1JzI3Jwc1Mj0BJyYjNDcnNDc1JzI3Njc1JzY3JzI3JzYzNTQ3NjcnNjUXMyYjIjU3MxcyNzUnNjM1NzU0IzUzNzQjNjM0JzY1NCcHJjUiFSInIgcnBycHNSIHJisBBzUiByInFCMXIyYnBgcVNzMUIxciBzUjBgcWFQcmKwEiBwYHIyInNTciNTQ3NCc2PQEmNTMyFzc1NyI1NyYrASInBisBJwYjIicHIicGBRcHIic1BRUjNCc1FgUzFRQrATU0BSM3MjMWFSMiJzIFFSIHJic1FjMVFCsBJzQ3FgUjNTIFFSc1BxQjNRcjNTIXByc1NzIXMhcjJiM1OwEVIyI9ATQFFSM1BTMUFxUjNCc3FyIHNCsBIgcnNDczBxcHFSM1JwUUKwEnNyEyFSMiJxcVIzUXFSM1BxUjNQcVBisBJzQTFSInBxQrATUXFSM1FxUjNCcFFSM1BRUjNAUVJzcyBRUjNQcUKwE1BxUjIicyJRUnNRcVIzUHFSMiNQUGFSMmJyEXIzUyBxQjIicHFSInNQUzBisBJzYFFjMHFRcHIzUnNQUVIzUHFwcmNR8BBhUiJzUXFh0BJzUHFSInFxUjIic1MgcUBzUWBxQHJjUyNTIHFCsBNRcHJiM
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
cTAUFCRgdFwoFCg4FBRoaTCF9GwUJBQUOEwUFBwcLEQ4KBQUOBQUJBA4OCQUFBQUFEwUFBQUFBQUFCQkYEwkFBQoKBRMJEwUKBB0TGAUqBAkTEwwCBRMOFAQPBBgFCRgFBQ0iBQUKCQUFCQUFGAwCBR0JDgUKCV8FBQUJJgUREAUTBRMmDhgJBRMKCQoXCAcJBQUFDgUFDgUJBQsSCQUTCQwDBAQZBQUKCwMYEBoPBAoFCQoTIQkBFwoFCTALCAk2EkI0IlxUZBMFCQUFBAQTCgoIBwUJBAkOBQoFCgoKCgkBCgoFBQoFBQ8FCgUFBQUKBQUJCRMKBAUJBAQJCQQHBw4G6T4NJigmAwQGBC8VBywbGxEmFAgGBigSEQSEBAYwERgRBwMHHRIVBwYGCF8dOAQXLQwSBBQRBxF6GAMHBAMMEwYGCDAMBQQEBAQEBwMDAwMHBwMKBwMDBwcDBCIUBBcRDBMGCAcGBggHBgQHAwcGBwsRBQUNBAcDAwMDAwMEAwQEBzMbJj0GBwROAwcEBhgoDwYHGAcDDgYBEQYEJRwQGJIEM0ciMA8dBy4d4woEAwMDDQkEBwc+BgYiAwP7BAMDB6AGAwMzB/3CBA0FBQYAMf/O/rcGmgcxAZwDTANRA1sDXwNlA2sDbwNzA3gDfwOFA4kDjgOVA5kDnQOkA6oDsgO4A70DwgPJA80D0wPXA9sD4gPmA+oD7gPyA/cD/gQCBAgEEQQWBBoEIQQnBCsELwQ1BEAERARLBE8AAAE3FjM3FzI1MhcHFwYHFDMUBxQzBhUUFzMHFRcVIhUXFCMVFAcUMxUjJwcVFBcGFTczFSIVFjMUIxcHMxQHFjMUBzIXFRciFRciFRYzFRYdAQcyFQcWMwcWHQEXIh0BFxQjFBcHMhcGFTMHJxUXIgcyFQYHMwcXBxYzFRQjFDMVFCMXIh0BFDMUIxQXFCMXFTMVIhUzFSIHFxQHIjUiFSM0Jwc0IyIHJisBIgci
NQYHJxQHJxQjJwYVJicUKwEnIhUnIgcnByciFSMnNzUiJyIHJwciJxQrATUnNTc1NyI1MjUiPQE3NQcnNzUnMjc1JzI3NTQnNzUnNDc0JzQ3Ij0BNDc0IzY3JzQ3NCc0Nyc1Nyc3NCM1MzUjNDMnNTMnNjMnNDMnNTQ3JzQ3Jzc1JzI3IzU2MzQnNjUnMjUiJzcmNTQ3IzcjBzU3IjU3Iic3NCM3JiM0MzQjNDMnIwc0Nyc3NQcjNTQzNSInNyM1MjUyFTcXNxYXNDMyFzcXNDcXNzIXNDcyFzcyFzYzMhc0NzMVMzI3FjM0Myc0NzMUBSI1Bh0BFwYdARQXBgcyFQYHFhUHFyIHFwcXIxcVBzIVFAcXIgcUMwcVFyMXBhUWFyIHMhUHFwcVFBcVIyInIxQHFyIVFyIdAQcyFQcXBxQXBzIXIxQXBxcHFxUzBh0BFwYVFyIHFh0BBzIVBxYdAQcyFSIdARcGHQEXIhUXIxcVBzIXFAcVFzYzFDM3FBc2OwEXNyY1IzUXNTY9ATc1NjURNDc1NDc1NjUzFjMUBxYXFjMWEyMWFRYXIhUUFwcWFzI1MhUyNxc2OwE3FDsBMjc2NTY1NjU2NTc2NzQ3MxcVFh0BFDMVIh0BFxUGHQEWOwEyNxQXNxYzNxQ7ATI3FjsBMjcmJzQ3NCc2NSc3Iic0NyY9ASczJzQ3JzcmNTciNTcnNDcmPQEnMyYnNjUnMyc3NCc3NCc2NTQnNyc0NyY9ATciNTQ3JzU3IjU3JzciNTcnMjUnMyczNSciFSMmIyIHJwciJwc0JyIVJwcnIyIHJicUIzQnBycHNCcHIhUXIxYVFCMGIwYHJjUnJjUmJzU0JyMHNCcGIyYjBisBJicHIyInByMnFCMnBzQnBiMnBRQrATc7ARYzFQYrATQnFxUjNQcWFSMmNTMXByInNAcVIzQHFSM1FzIVJzUhMwYVIzU2BRUiJzUyBRUjNQcUIyY1MxUHJj0BMhcjN
zIXIzcyBRYXFSYnNSEXByY1NAUzFQcmIzUyFyMiPQEWJxYVJzUXFSM1MgUyFyMnNTI3FSM1BTMUKwE0BxUjNQUVIzUFFxQrATU0FxUiJwUjNTIFIzUyFxUiNQcyFSM1BRQXIyI9AQcVIzUFMhUGIzUFFDMGFSM0IzQXFSI9AQUVIzUFFDMVIgc0BRQrASInFxUjNQUVIzUhMxQrATQFFh0BIyYjNTI1MgUVIzUHFxUnIgc1BRUjNQTNDYMIDzJaISYQCAgNDQYWCAgMBSIdCAgFIg4PBQUFDQcbBw0NDQgICAgNDQsCCAgICAgIBQUFBQgMDwcICA8PCAgIBwcOBw8IDwUFDAkIDg4OCA4QJA8PDw8ICA8HDxsMEwkIcA8NB4x3BSkXDA9IJUMNVgwPPxsIN4wMeQYIFA4jCA0NQFMPBw8WBw8PDA4NDyIPBisPCA8bFA0NDxwFBQ8UDwUPDw8PCBYIDwcHBQwHDw8HBw8IDg4OBgYODgoLDw8HDAUFBQ0ICwQbEAsHBwcHCwQICAgIDwcUFAgXDQoIFBQJCwcHBwcIDggIDg4HHRoQDQ0cBkVWRQ91CB4wKSJbDwwIDhQOATEmPDAbKiQqCBQTFjEIBwcOB/xIAxgDAwMCBAMDBAQEDgQDAwMHBAQEBAQEBAMHBAQEBwMDBAUCAwcEBCYEEQ0EAwMDAwMDAwMDAwMDAwMDAwMDBgMKCgcKAwMEBAQEBwMDAwMDAwMDAwMDAwQDBxE0BgMHGxIQA1UHAx8iDg0LBgcHAwIJBAYVBRclOgQOEQ4EGAMNEQQDCAYGHRMKBwMEJgkVLw4sHw0LIgMDBw4OBwcFBQsJCzBHDgoHAwoIBg8dERoIAwQEBAQEBwQGBwcEBAQEBAQEBAQEBAQEAwMDBwQEBAQEBwMDAwMDAwMDAwMDBwQEBAQLBBgDAwMDAwoEAwMGHAsNBw4FKgc6KQoUDgMIBgYjAxQHKREKFRcDAwMHGA0pMA0iKR
YaBgQRRAcDBwMLCgYIFxQECwYUKRgDERFVBggNARoHBwRRBAgFCAUHBE8HiAoDC0QHAwUFPgb/DhgKDgEoBAcHBf75BgEHAQwDjwcKyQQKCGUKAwfTCwQH/eopBgwnAjUHBAr+igMDBwMDMAQGCoUKDeQLBP7YEQMNEQNcBwFYBgYHsQf+nwQBSgcHB1UGAf6iBwcC2AcHYgZgBwoBNQQEBnsN/o0HBQUBmAYDBxS3BvxcAwFoBwoOAicHBwYBNw78cQMDFAQHA/4qKQMyCw0K/rMNRBcRAwcEOQ0HFgYRBgYcKzYbKRIRBAtGGwUdSRsLBAYQCgcPBgoLCwYLCxYlCgUFDB8LCxAKDAkhAikKKyYLFgQbEAoMEAsEIRUmCgyFGxARDwsGCwoQCQwLBRULNgQMMEUGVg8GCzYECxULBgsFBQsLGhUHHwwfCx4NCxAREAwFCgUKCgULBgcEBQULExMKCwQKCgQEBAQVFQQWBQUFBQUMEQomBRE2GhtlGxARBQUFFUYLFgQbIQUJAREEEQoBBQoJGAUQCgEGSgUHER4KARAWIBYKBRsFCyAGCw8QEBEKC0sKAQsLCgsPJho8BRUGCwsFNQZAJRURBQsrCwYgBRslCzAbGwUGBBYFBQsKEQUFBQsRJBEEDAUgEQsLCgUFEAYJDAQEBAQHCwQEBAoFDAsLEQYLCQET9gMHBhwUBgsHBwYLLwQCOxICBz0KEQcRGBERAwkTBgsGERgHNgcEHgcbBBcHFQMaCAMKCAYHAwcDIhEEBgcRAioOCgkSDgcDERENCwcKDiUHGwYIBhgEHgYIBxcEAxgUBgspBwMHKQcRJQQiAykOBAQEAwMUAwcEBgMDHQUmS2IgNQF6AxhEAxglFh0NBAYbH05g/v4jEzFbAzFQBzQvBAQEBAQDAz0+DWAMGweIKaMbIwtQIiwYA48HAwcsCp0XBOQKBwkFBwMDAwMHMAkgAxgMOx4IB0o+Bh9FKBEHHgo
ODh4dDw4DBxgRGC0yHwY6IgcDBxUNBgEOBwYHAwkTBgcKDg4NBBEDAwcKCxEDBwdYClUHAwcYCgcDKAMDAwMDBAMRBwQKAwMEBAQDAwMDAwQEGAYYBBGBeXEFBWlpEi54DgYBBAcDAwMGBgQEBAQEBAcHBQYEBDMHDQYEDQ8FBwMDaQUFBQUEEQ4GOQcGzgQEBAcEAwgFAwoiAwcDGAcHBwYFBQoHBQUDFwYRBxEDBwMGBAMDDgUFBjwHBwQHIgYEBQEFBQQGFwcDAwoDAwQEBAQGBhQDAxEHBxEDBwMGMgcHGAeIBykHBxQHBwcEBgYEBAMDGwcKEQMEEgkVBgMKBwMRMDAHAwQDBhoHBwQDAw0HBwcGORMFDiYDChsDAx4HCgoEC+gDAwAAACj/zv64BUoG9gIFA3sDfwODA4cDiwOPA5UDnAOhA6oDrgOyA7YDugO/A8MDxwPMA9ID2QPdA+ED6gPzA/kD/QQEBAgEEQQVBBsEIAQlBCkEMgQ2BD0ERARIAAABMxYdARQjFxUHFxQHFhUUIxYVBiMXFSMVMhUHNCMHFTMHFxUUIxUzFSMVFxUUIxYzNDMVFCMXBxYVBhUyFyIVFwcUFxUiBxcGIxcHFwYdARQzFQcUMxUjFxUGFRQXBxYVBhUXBhUXBxYVFCMXFQcXBhUXFRQjFxQjFwcWFRQHFh0BFCMXFQcWFQYdARcHMhUGIxUXBhUWFQcWFSMXFRQjFxUGByMiNQcjIicHJxQjNQciJwciJwYjJjUGFScjFCM0IwcnIxUzFCMiNTI1JwYVJwYjNCsBIgcmIwciNQYjIicGKwEiPQE0NycyPQEnNDM1NCM1MjcnNDcnNjM0JzcjNTYzJj0BJic3FDM0NyY1MjUiPQE3IjU3IjUyNRczNDcmJzMnNyc2NSI1MjUjNTI1JzQzJzU0Myc1Myc1NyYjNTM1IjU2NTMVMzU0JzI1IjU3Fzc1Iic3JzU0MzQnNTY1JzcmNTI1
JzY1Iic1Mjc1JzI1IiczNSM0MzUnMyYjNTMXNSc1NjMnNTMnMjUmIzU0NzQnNwc1Mj0BIzUzNSM1MzQjNzUnNSM0NyYnNjsBFhU3Mhc2NTIXNjMyFzcWMzYzFBc3FDM0MzIXNjMVNzMVMjUWMzYzFTcWMzYzFzcXNDMnNRYzNyc3FBcUOwEnNxYVMzcnNTMXMyc1MzIXNycyNRYzNxYzNgEVFyMVFzcWMxUjIicUIzQrAQcVFyMUFyIVFBcGHQEXIhUUFxQHFBcGBxYzFSIHFDMHFyMUFwcXFAcXIhUXFAcXIhUXBxYVFAcWHQEHMhcUBxYXBh0BFyIdARQzBxUXIhUUMxUjFRciFRQXFQcWHQEUBxYVFAcXBxcGFRQXMzI1FzcUMzI1Fhc0MxczMjUWFzY1NCc3Jzc0JzY3IjUzJjU3NCc2MyY1Nyc3JzI1NCczJzQ3NCc2PQEiPQEzFyYjMj0BNCM1Mj0BJzI3MxYXFh8CFhcUFxYzFCMXNxYzMjUyFzI3FTI1JjU3JzQ3JjU0IzcmNTY9ATQ3JzI1JzMnNTciNTcmPQE3IjUyPQE0Jzc0IzQzNDc0Jzc1NDcnNTQ3Jj0BNyI1NDcnNyc3JjU0JwciNSIHNQc0IwcmJwYHFwYVFBcGBxcHFhUHFBcGFRcUIxcVBhUnJicmNSYnJicmNTQnNCcGFSInBiMiJyMiByYrAQc0KwEXJjUWJRUjNRcVIzUHFSM1FxUjNQcyFSMiJxcyHQEjJjUFFSM0JwUyFxQrATQjNQUVIzUXFSM1FxUjNQcVIzUFFSMiJwcVIicFFSInBRUjNCcFFhUjJjUFFBcjIic1BxUjNQUVIzUFFDMGFSM0IzQFFCsBIj0BNxYHFCsBIicXFSM1BTIXMxUnNRcVIzUFMh0BBiM0JzQFFSM1FxUmIzUWByMmNRYXFSM0JxcjNTIHFDMVByY9ATIHFSM1BRcVIyYjNQUVFCMmIzUXFSM0BR8HJAcHDgcHD
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
2NxU2NxcHPwEXNxQ3NDczFzQzFzc2FTY3Nhc2Nxc2NxYXFAcXFAcXFQcVFyIHMhcVBzcUBxQzFgcXBxUXBgcyHQEHFBcHFwcXBxQXBzcUBxQXFAcVBzIVBxcUIxYXBzIdAQc2FwcUFwcVFwcUMxQHFDcWBzIVFgcWFQcWFQYHFwcfAQcyFQc2HQEHFRcHFTcVIxcVBxcUMwcXFAcWMxQHNhUXBxcUBxcUBxQXFAcXBzIVFAcXBx8BBxUUFwcVFxUGFTMWBzMUBxYXFAcXFQcWNxUGBzQPAQYPATQBIwc0KwEGIyciBzQjFTMVIgcUFwYHFxQjFxUXIhUXBzIVIgcWFyMWFTMWMxUiByInFyIVFyIVFBciFRYdARciFRcjFxUHMh0BFAcXBhUHMh0BFAcWHQEXIh0BFwcWFyIHFRQXFCMWFwYdARQzFCMXBzIVBxQXIxQXBh0BFyMUFzM3Fhc3FjMyNxQzMjcVMjc0IzQ3JjU3JjU0NyYnNjcmNSI1MyY1NCc2MxQXNjMyNxUyNzY1MjcnNjcmNTcnNzUCJzUmJwcnByInByYnBisBJxQjJiMHNCMiBzQnBgcVIzUfARUjJzUFFSM1BxUjNQUyHQEiBzQnNAUVIzUFFBc2NxYXFjMVIh0BFDMHFxUXBhUUMwYdARQHBgcGFScHNCsBBycHIicHIycmNTY1Jic2BRUiBzUXFSMiJzUHFSMmNQUVIgcnNQUUIzUFByc1FxUjNTcyFyM1MgUyFSc1BxQrATcTMwYVIzU2FxUjNQcUIyY1MxUHJj0BMhcjNzIFFhcVJic1FzMVByYjNTIXIyInNRYnFhUnNRcVIzUyBxUjJzcyBzIXIyc1MjcVIzUXFSM1BxcUKwE1NBcVIjUHFxUjIicyBHAGCwULBRMDGwUFMg8bIA8SCiELGwobFiYFBCgIDQUcAQYLChELCwoLNhAPFwUcBQwJCwYbBQUFEEELDAoVETYKCwsJAgULBgsBCQIJ
AisBCgsLBQYFCwYGARALBgYBBQUGBgYFCQ0QBgoFBgULCwYFBQUBCgkKAQsFBQEKAQsHBAULCgUFBQwLCwQLBgUFBQUBBgYFBQsEBQoGEAUFBQQICBUFARAFBgUGAQoGCwYLBQUBCwUFCwsGCgYGCxABBQUGCyY2EAsLCyYKBgsgBiUNCTAJDQUFBQsKDAULBQQRHAobBi8cCAgGCyAWCxoGIw0LFRULdxYFBgULBQsFCwYKEjANHhs3CQEwCgsFCwsGBgoGCwYGBQoBCwYFEAUFBgsGCxEQBQUGCgULDBAFBQoLBgEFCgUFBQYFFRoGBgsFBQELBQEGBgUWEwgGBgsBBgYFBQsLCgsLCwsBCxALBgEKCgsBBgsFBgUbGwEFBQUGBhYBCwsKFhsFAQsFBQwLCwYFDQksIAoWFBIQ/ToEEQoHOQcREyALCxMCBAQDBwcDBAQEBAQEAwMEBAoLEQYDBwMRBwQHAwYDBwMDAwMDAwcEBAQDAwMDBAQECwUCBgELBwQDBAcDAwMDAwMDBgMDAxgHCgoOFDYLCTcEAwc5QQMHBAQEBAUJAwQEAwMDERoZA0QYBAZVT1UmGgMYCgQEBAQJI1VLBxEHAwcHD40GCBgRAwYIBhEEBzNKsQSCERURAdUDuwP+YQcEBwMDHwr+WgoZBmYfEhMKBwQVAwMKBwcPIDMHBwMEJQcDCgsKDgYcBAoHDP7PCg0oBgYBEQcKAuIEBw39gQcCWgQNAwoDB3QHB/3xCg49BwcELwQHBwUFA48HCskECghlCgMH/r0pBw0mtwQEBwMDMAMGAQqFCw7kCgOjBAYDB4URBA4RA1wHoAcbBwcHVQauBA4GAQu3AQUBBQsEBwUKAgMFBwMBCwQHBAwFBQgHBQMJBQIBCgEDBQQFCAEGBBIBCQEGDwEFAwEFBAEGBAUKCgoNBgMJBAUNBQEKAQUBBQUBCgEKAyxKEwogFQoBBQUJCQsFAQ8PCQEEHQoKCiEFC
h0BGg4dHgQiGAEFBwsKCgEJEwoZEwoBWQEKBRgnDg0RHQoEHyEKClIFCgFaIRMFBQoTBQoJChMMQwoeCSMFBAsBIw4BBicFBQo7Dg8FBgoJAQUJBQEYCgUKBQoKCRQZBA4VExgEFw0hCgUFBQMBBQEPBgEJBwQFAQwRCgEGAgELCgYEAQoFDgQFAwEGCQ0aARMGAwwOAgUFAh8FGQEGEAYFAQQBBAUECgEKAQUCGgEGAw4GBw4JEQQLCA4PDwUYHhMFCgEFCgkVEwkeBRcsCgUEEAsIGRwZCgoLCCgBCRAEHg4BGRgFHgQFBQkjBQkLAQ4KBwIVCh0KCQQBBQEKFAULCQkFGQ0EAiITCw0PCgUKAQUKAQUNEAUBCg4KARgJHgQMCAkKFAExEwsEBQoJBisPAw0DPwoFCwkJCioFARQIASIKEgUYBwkZBQpHCgkCCQUKIQEFJQMKAQEQAQEEBwIEBAoDBwQHBBsDBwkZAwcRNxEDEREDHyUHYhkUAwQORAQlAxcZAw4YLBgDByIOETMDCAYGPx0VCg0IBgYIIgYEFBEsJQgXLRASCh8KBgcRBwMpEQQGBAcdDwYHHwcWCAYGBAQECgMDAxgDCSMHBBQGCAcGKiQifi4TA4sOChUsCAYHBAQmHAZOB0+DJAUfBwYpARsGCloTAwcEBAQPEAQEBAQEBwMHAwoOBwcDBAMDBEgGBgMHBxQHCgQEBgtIAwMNBAMDBBEYGAcHAwcHNh8UBwMmFwQDJixfGBQEBAQEFQQHBwcDgYUNEqEhGk0HBAczBwcEOgoFBSwEAwMHdAYGLAcEAxEKCgcpBxgHBANHBw7+fwgFAwozBgYGBwUFCgcFBQQYBxwDBwMGBAM9BwYDByIHAwUCBgUEBxgHAwYEBAYDCgMEAwMDGAMDIgMHAwYyBwceBwQHAAAAHP/O/xEE+QbnAdAC5wLrAv4DBAMPAxUD3wPlA+0D8QP2A/wECAQMBBIEFgQaBB4EIg
QnBC0ENAQ7BD8EQwRHBE4AAAE3FDM3FhUzMhc3MzIXNzMXNDcVMjcWMzcXNjMUMzY3BxQXBxQXBgcyFQYHMhcHFwcWFwYHFBcGHQEUMxQjFDMHFTMVIxUUMwcUMwcXBxcHFxQjFDMUIxUWMwcVMxUHMwMVFAcyFwYVFBcGBxcUBxYzBxU3FDMGIxQzFCMUFyIHFwYdASIvARQrASIHIicHJiMGFSY1JjUHJwYjJxUiJwciNSMGIyY1Iwc1Igc0IxQjNCMUKwEnFCsBNSIHJwcmIwciNSMGKwE1MzUiJwcnFCsBNCM1Mjc0JzQzNSInNyI9ASMHJzI3JzQ3NSInNDM0IzU3NTQnNycyNSc2NzUHIzUyPQEiJzc1ByM2MzQnNTciNTc1Ij0BMycyNSI9ATciJzcmJzU3Iic3NTQnNyI9ATcnNyc2NSczNSMHNTc1IzU3NSc3NCczNSM1NyM1NDc0IzQ3NSIHIzU0Nyc2NyInNDciNTcjNTI3Iic0Nyc3IzQ3JzQ3JzY3JzQ3Jj0BNxc2NxQXNDMUOwEyNzIXNjUXMjcyFzI3Mhc3MhUzFzUzFTM1Mhc0NzMVMzI3FzcVNzMXNDMVBzI3FzcVNxU2NxUyNxUjFTIXMjcVMjcyFzYzFzY1FgUiBxQzFSM1IwYHIgcyFSIHFwYHFwYHFwYHFh0BBzIVBxUHMhUiHQEXIh0BFyIHMhUiFRcVIxUHMhUHFBcGIxUHFwYVFhcGHQEUMxQHFwcXBhUUMwcVFwcUMwcVFDMWMwcVFDMVFjMVIhUXIxQzFjMUFxY7ARc0NxU3FjMUIxQXBxUWFSIVFhcyNzY3NSYnBhUiJwcmPQE0NzY1Mjc2PQEmNTQ3NCcjFSM1MjU0JzY3JzQ3NCc2Nyc1MzU0NyY9ATciNTQ3JzQ3Jj0BNyI1Mj0BNCc2PQEnNyYnMjcnMj0BJzI1JzY9ASM3NSM2NyYnNDcnMj0BIic3NSInMj0BJiM1MzIXMjcmJyY
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
yI9ATc0JzcnNTciNTQ3Jzc0Jzc0JzQ3JzY1NCc1NyM1MjUnNTI9ATQnNyc3Iic3JiM1NjUnNzQjNjM0JzQ3JzciPQEyFTI3Ij0BNzUjNTM1Ij0BNyczNSciFSc0MzUjNTciJzQ3IjU0NyY1Nyc1NyI9ATQ3MxQBFzI3FDM2NzIVNjc2NTY9ATciJzY1Ji8BIgcmKwE2MyYnByYrATUyNxYzNSYjByYnJjUmJyY1NDcmPQE3JiM0Nyc1FzY3FTcyFzIXIh0BFzcyFzI3FhUiByYrASIHIh0BFBcUFzM3FBc2NxY7ATI1FjM3Jic3NTQjNTI9ATQjNycHIzU3FzM1NCcyNScyNSYjNDMmJyYjJicUIyciJwcmIyIHBh0BFjsBFQcnBxcHFRYXFhcUFxUjFTMWMxYXFhcyNRYzFhUHFxYVIhUnBxUUBxQHBiMiJyY1MjUmNTQjFCMnByMHJicUIyciByciBzQrAQYdAQcWFxYXNxYXMzI3Fhc3Iyc0OwEVFCciNTI3FDMUNzUzFhUnIyIHJzUzMhc3BhU3JjUWFzMVByInNTMVJzUyNxUHJiczFSInNTMVJTUzFSUiPQEzFBcnNxcHJzUzFTc1MxUHIic1MxUnMwciNzUzFTc1MxUiBzUzFTc1MxUnIiczMhcVJyI9ARYVNyInNDMUFwc0JzcyFwYVNyMUFyUjNDsBFCc1MxU3NTMVJzczMhcVJiU1MxUnNTMVJSc3FhUlNTMVJzUzFTczFhcVJhc1MxUnNTMVJTUzFTc1MxUnNTIXJzUzFBcVJjc1MxUnNTMyFzcjNDcyFxQEDw0bETMHByIFEAYNBxsHBzAGBw4HBwc9DQYiAx8HNiMNPQwCBw4NBw4GDg4GDgUyGQlRBxUUCwMGDg4LEAsDKgwHMwoiBwcRLBMIDgcOBw4VDg4OFRUHByINDg4HDQYLAg0UBxEEDhQUDhUJDAcHFgYUCAcHDgcHBxUVGwYNGw4ODg0HByIHBw
cVFQcOBw4OBwcHBw4ODgcHBwcHBwcGBwYHDgciDRQNDQcHBwYODg0HCwMOFBQHDQ0HBxUNGxQbDQ0NDVIlOg0VG0wGDgcNFxIHDgMzHA0OBw4NDS8iBw4NDg5RBwcOGhwHKBwOBiIOGDowDQdfGhYHBwcHDg4OBw0GDgcHDg4ODgcHDg4OBwcOBwcODg4OBwcHBxQNDQ0HBxQbGxQUDRQUDRQUBQ8UAxEUDQ0bEQoNBgYGDQcKChQNGxQUGw0NBwYOFA0HBwcODg4HBw4HByIHAosYJGgDYQIDFR4YMwMDBAQODVUEBwwPCgMHIA8HKwwDBw0QCCMTBxMFIi8fgQMDAwMKNgMRByERSiMaDwMDDgkLEgYUEwUFCAoPDQoERwcRFB8HBgcEBh08GAQHBw0KBwMDBwMDBwMGAwcECwoEFgYyDiiXAwpRFUEHA0aXYxcIESIRBwcDDCA2GzAHBDAXJhReNAMYBEQEBCUKGAcRMxUhNywlAwczAxEUPhQENgMHAwcHAwcECgoKE0VgPQYtBgcKCxNM+AMHBwo6BwQGBHAKEW0DAxgECwsMEQaIMxkJFwMDSA4ECw0DEhAHB2MH/ZkDAsAHAwe0AwcDLAZ7CgMHMwd+CgMHVQOWFA84HjoOIgUFBgYB6gcKbQgCBhWPDhEGAQfaBwf+YQMHA20HYwacEQMRBCkB/gcpB/3BBwQKAo0KjweLBwcHFWoHewT9mA56BxsGATMDBwqZBl8KBgEzAxgLGgcOBQULBgsFGwUREQYLBQwKBgsGBgoFCwYWCwsLBgYcCwUFBQUFCwsFBQUQFgYLCAgLBgYGCwsGCwsFBQtDFSIYChARJwsLCwsMBQsRCyELBgIPBSILHAULCwYRFgsLFhcQCwYcBQwyCwUcBgsWCwYLCxYLEREZDgsRCwUcBhEGBgUGHQoFCw0JCwYLBgsWEQUMBQYcBRYGCwYFGCUXCwsQMwoMBgYREAwQCwwFBgsLBgYGGQI
RBgsLBScsDAYWJhcLCxELEQsGBQsnNwcWCwYGCwUFBQsLCwYJAgUGCwsLBQsLEAUFDAYLBRALEQYGBgYGEQYGDCFTCwZOCw8SBgkCBQwQLQUGCxEcCQIRFhARCwYLCQIXCwkCCwsLCwYLEQkCHBAGCwYMCgshCgIQCgEMCwsUEw4CBhYLDBAGCwsRHAUiSBwhHAYaEgYQDBYJAgYLGwwLBQUWCwsRBgsWCxYGHAULBQUMBRYMEA47CyQqCwUMEBcLBWQfDgj4rwMiAyUKAwIgHAllSTYUWRICaTRzAwcRHwkDBwcGCgcfBBMTCAwaJ1OeCAYGBwoVLFIeBwcHBQUDAyWIBBcHBwcNDwUDAwMiHxcSFQkDBAMEAwMRGAomCgoHBgQHCgcRBgMDBwMDSiMDIgQ2BDAGQSgmBAcKBgNHXWIeBwcDA6ofBgSVME0FHgoECjY6CkAxBBVSQwcRAwcHBwoVCTQlDh8tVyMDFhMVBAcDBAMEAwMDAwMDBQUEfXtORRMDCgcHBgixAwcDBh4GBAQGFwQKBCkHEQQLBAkFDgISAwcHBx8DAyIDBAQGAw4HLwQEMwcHjAcKBgsRBwQHBAMDLwQEBiUDAwcHBwcHAwcDBAQEBAMDJQ4HBxEHAwUFFCIHBBoLBw4DBwgJLQYBrQcGPAQEYwMDFAQKDgwPBwcKBwcOAwcFBSIDAwcDAy8BEAMPAQMDJQcHAwQESAMDIgcHMxEFCQ0FGQQEXAcHChYJCgsAACz/zv74BP0G/QGCA0ADRANKA1ADZwNtA3EDdQN5A34DhwOMA50DowOnA6sDsgO4A74DywPQA9QD2wPhA+UD6QPtA/cD/wQHBAwEEQQXBB4EJQQsBDAENAQ5BD0EQQRSBFYAAAEzFgcXMjcXNzIXNzIVNzMXNjMXFjMXNxY7ATcWFwcWFQcWByIHMwYjFwcUBxYzBgcWMxQjFhcHMwcmBxYdARQjFhcHFhcHFBcHFwcWDwEWBwYV
FhUHFgcjFhcHFwYjFw8BFjMVJgcWDwEXBxYXFSMmIxUXFScXFSMWFwcUFwYHFg8BJiMmByYnBycHIjUHFwcvASYHJiciBycmBycHNCcUIyYnIgcnBgc1ByMiNQYHJwYjJwYjJjUHLwEUByciBzUHJiMHJic2NSI1MjUnNDMmJzcnNyY1NhcnNyY/ASc0MyY3JzcmNTMnNhcmNzY1JzQzJzU2Myc3NDcmJzc0JzcnMzciPQEWNzYnMjUiJzUzNzQnNyI1NyY3NDcmNTcmNzQzNTYjPwEnNjUiNzI1JjUyNTciNzM1Jxc3JxY3NSYjNjcnMjcmJzY3NjUXMzcVNjMXNxYVNxYzFjcyFTcXMhU2FxYzNjMXNjMWFzcyFzYzFhc3FzYzFBc2Fwc2MxYXNzMVMwUiBxYzBh0BFyIHFxQjFjMyNxQXNDMWOwE3FDsBNxYzFhcUBxcHFBcGHQEXIhUUFwYVFwYVFDMVFyIHFBcGBxYdARQzBgcWFSIHFRc3MxcjJwYHFRcGFRQXBhUUFyIHFwYdARciHQEXFSIHFyIHFRQzFAcXBxQzBxciHQEyNTMVIxYXNxQXIxcHFRcjFBcUBxUyFzUnMxcUIxQXNzIXMjUzFzQ7ARUzMjUXNxc2NRYVNjc1NCc0NzQnNjciNTcmNQc0NyY9ATciJzUzNCcyNScyPQEnMzQnNzUnNTQzJzciJzUXMzUnNTM1NzQnMjc1IxUjNTM1NCc2NSM1NDc1JzI3JzcnMjcnNTciJzQ3NCc2NyI1Nyc1MjU0IzY3JicyPQEnMyYnMj0BNyM2NTQnNTIXMjcmNTcnIzU3MxczNj0BJzI3MhU3Fhc3FDsBJzUXFCMUOwE2MxU3FzUnMjUWFTI1FzQnNj0BNCM0Nyc3NScyNycVIzU3NCM1JyIVIiciByYrARUjJisBBzQnBzQnBhUiNSIHJyIHNCsBBzQnFxUjNCM3NSInBzQrAQc0IwYjIicUIzQrAScUIyciB
zUiBRUjNQUXIyInMjcXFSMnNTMVNzMVIgcmKwEHFBcjIic3JyY9ARc2HwEVIyY1FxUjNQcVIzUXFSM1BzIVIzUXBhUjNCc0NzIFFSMmNRczFAcnIyIHFRcjNCc1MjUWBRcUByInIRUjNQUUIzUFFSIHIic3BSMiJzUyIRUjIic1FzMVIgcmKwEHNCM3MgUVIyInIRUjNTMyFwcjNC8BMh0BJzQHFSM1FxUjNRcUIzUFFjMGKwEiJzU0FxUiByM0NxY3MxUGFSM1NgcVIyInHQEiJzUXFSMnNzIHFwcjNCc3FxUUByY1MhcVIyY9ARYXByc3BxUjNQcjJzcWFxUjNQcVIzUXMhcWFxUjIiciByM1NyYjNRcVIzUDmQYKASEFAQoQCAgbBAwECwIJCyYEFRERDgYLDwMOBQELAQoGBQEEAwEFBAYGCAQFBAMLARUBHwEKCwQLBwYEBQcFBQwPAQYLAQYLBwUBBgUEBxABBQUBBw4HEAELAQUKDgMNBgoFEwoFCwEQBgQGBgYBJw8PDAoTGGsLGwsfBAoFHwoXCA0GJRZTIhAwLwYFGhUrCx4jCgsFFREVCwULCgYQCgUbIAsLOicKBgobEwYKCwUGBAoGBQUOBgYFBwYBCw4GCQIKCwYGBQMJCQEHCwYFAQUFAQYFCQUDBQkQAhAQAQEVEAgHCgEFDAsHBQEGBQcMARYBBgYBCwYGAQUKCwELARAECgEFCwELBAUBBQUBDAQbLBsKBhALBgoVEBYRDgoXBRtLBBcPAQocAwsLBgQLUQoaCgsOCBUWFRAQAyIBDgkVSgEKC/0qEAQNBBEDBQEGBgEQHhUoBAYHEQcEGxEfEB8HBAQEBAQEBAQHBwQVBxgEBAMEAwcDBAcGAQQHAwMDBwMHAwYDAwYEBgcDAwMGAwcHBgEHBwcDCgQEBAQHBwQJBwQRAwoDAwcLBggDAwcEFREUBAoHBgQDCgcRBwMmCiEBBwQHCgMDBwQGDQMKBg
EKBgMDAwMDAwYGCgQEBAMHAwcEAwMECQYEBwMGBgYDAwQEBAQEBwsEBgEHBwMEBAQHCgcDBAUFAwMDAwMDAwYNGAgGCgQEBAsRBAcKBwoEBQwEIiohBgQDBxEGBg4LEBEHAwMKFQoKEQsOBwoDAwQHAwMKCgQDBwMHBggNBAwSJhgNBwoKBAkLBAoNBBgRHgMDEQMHBgcEFBEDDAIOJQMERBgDXAMHHwKiBP6lBw0GAQhaEQYOdCIRFgwGCAoHBwcGBAcEHhQZEB4KGC0HjBHrA4IHCn4EAxQDGP7zBwq7CgYODgUBAwcHCxb+gQcHBQwBZQf+LwcBcgMHBgEE/uINBgERAV4DBgHnAwYODRIGBwQHBP16BAYBAYcKtAYLEQoD0wcOGAaEB7sG/psFBQUFBwYBgRAIBgYRTwMHBwaAAwYBBgE6BAYDBzoKAwoEBBsODQYtBAoOLAQGAw4NXw4HBBHdB+QHnQQhAwsEBAkEBwMDCxdVAwb3ARABBQYLEQQFBQYLAQwBCwwFFyyICwURAgkrBhshDQkQHEwhBTcLHAsBHAIJBQsWERsQARsCVgoLNyMOIQIJCgwCCRsvHgg/IRwFCywbEQsBCwEQCyFXFgEKBgYhBgELBoMRGwUMJQsLCxsMAQULASgFDwsECwYBIQELBgEPBgIUCwQIDwURAQkFDgUFBQYFCgsFBgUGBgYBBgoLBg4FCgYFAVMLBQsLFgUwGAoMGyQNEQEcIQkSBUgFXjsBEAsFCxwBTiAWEAYFHBAFCxYMCjEBGwMeCjI8CwYBCx4kCxEFBQwKJgshHBsMCQoMFgEKCwsFCxsRCwUGBQEKCwsWGxwBHAsBCxYhCwYbBQEbHgYICAYKBQUGCgYFDwsBCgUEAgYLAQsEBQUBBQgMBQEFCgYECAkFAQUKAQcQEeczEQsNFQYHCgdOBgQGBAQEBAQYFBwHBgcOBwYGCB8XBAcGLgwpEgIHEQoEAwcENiAnEQcaCBU
GEQ4iBBEDDgoUFRMPEBISCQ4QGBEGCAcGBAMKBANBBxQHCg4lBz0RBwMHAwMUEQMDBxEOAwcJCwcOAxENBwMEEAcKDg4EBAoKCgMHCg4FBRMFAwYBAwcGARA0AwQEEwMHFAYIChEHFAoLAwcDDgcDBwoDCwYpEREKBwMNCwoKDgMHHg4HCgcIBg8dAwQYChEKBwcUAw4KEQcGAQYBCBoDBwoHBwYIJRcLAwcHHgcDHxFeHAUGBgMwBgsRBgQRBwMRCwYVBAcDCgMDCgMDBwcVBwMDAwcDAwMGBgcNDgMHBwY+Cg0LBgsDBwQGCxEUAwMDAwcKAwQDBAQDBQUDBgYGAwMFAREUGwcDBAQEBAQEBwMDBAQOBAQiBwcECgcDAwMDAwMDAwoDAxkQEQoHBwcDAwMwBgQDBwMDAwcDBwsGBgMHBykHAwgaCAYHBwUFGwYLCgcGBxAIAwcHCgQGDhQDAwMHBwoHAwYHKQcECwcEBwcHCgMDCwQHBwMDFAQIBgcHBwcGAwMDFAMDBwcHEQoKBwMFCAQHBxENBgMJBQcKBgcHHwoHAzoDAwdLBxEEBw1+BgYFBQYHBAUGBggWBwMHGwMDEQMHAggDA2MGBh4HDQsDEQQEBwYEEQcHAAAAAEr/zv7CBRsHTgICBAcECwQQBBcEIwQnBC8ENwQ7BEUESgRQBFQEWARcBGAEaARsBHMEfgSHBIsEkASVBJ4EogSmBLAEtgS7BMEExQTJBNAE1ATaBN4E4wToBOwE8gT4BP4FCQUQBRYFHAUkBSwFMwU6BT4FRQVNBVYFXQVqBXEFdwV7BYIFiAWMBZQFmAWeBaQFqAWwBbQFugW/BcQAABMyNzIXNxYzNxQzBxYXJjcXNjcXNxc3FzUXNDcWFzI1Mhc2PwEXNDMXNxc3NjcXNzYVNjcXNjUWMzY3FjM3FDMUIxc2Nxc2NxYXPwEXNzYXMjcyFzU2FzY3NhcGIxcHFhcVIgcUFwYdATcHFRci
HwEHFwcWFQcWNwcVFwc2FR8BIhUUFxUWIx8BBzMHFRQ3BzMVBxQzBxUzFRYHMhcHFwYHMxYHFwcUNwYHFyIVMxYHFxQHFwcXBgcXBxcHMh0BBzcHFjMUBzIdARYHMhciBxU3MxUWIxQXFAcVBzIVFCMUMxQHFDMHFhcUBxcHNxUGFRcGFTYVDwEnFAc1DwEiNQcnFCMHJyIHNQYHJyIPATciByYHIxUjNDMmJxUnDwEnBgcGJyIHJwcnBgc1BgcnNw8BJwc0IxQHIycUBycHBjUGBwYnBgcnBgc0JzQ3JzQ3JzU3NScyNwYnNTcjNDc0IzQ3Jzc1JzY3Bj0BNzQnNyc3Jzc0JzcjNDc0JzQ3NTciNTcnNDM0JzciPQE3Bic3NCc3NSc3NCM0MzQjNDciNTQ3JjU3Jic2Nyc3JzU3IjU3BjUnNzUnNycHNTMnNTcnNCM3JzQ3NCM0NwYnNTcnNDcnNDc0JzQ3JzciNTQ3JzcnNTM1NCM3NSc1NjUjNDcjNDcmJzQ3JzU3JiM1NjcUPwE2PwEUExYdAQcyFQcXBxQXBh0BFwYjFBcGFRcHFh0BFBcHFzMVBiMVFAcWHQEXIgcVFhUHJyMVBzIXBh0BFBcVIyInIxUUFxUHFRciFRYXBh0BFwcVFjMVBhUWFxQXFjMWMzcWOwEyFzY3FDM2NzY3Njc0Jzc1Jic1MzI1IjUyNycyNyI1NwcmPQE3FjMyNyY1NyInNyc3NCc0NzUiJzQzMjUnNjMnNyc0NycyNyc0NzUjBzU0NzQnNyY1NyczJzcnNyY9ATciNTcmJzY1JjU3Jzc0JzcnMj0BJzI9ATQnNjc1NCc0NycyPQEnMj0BBzUzNCM0NycyNyc2NSc2NScyNSc3JiM3NTQnNDcnIwcnIgcmNQcnFCMiJwYjJxQHNCcGBycHNCsBBgcXFQcyFQYdARciBxYdARciHQEUFwcVFBcGFRQXIxQXBhUUFyIdARciHQEWHQEjJxQjF
BcWMxQjJyMUBxQXBxcGFRQzFSIdARQHFwcXFAcyFSIVFBcHFxQHFhUUBzIVIxYXFCMGIyInIgcmJyYjNDMmNTI9ATQjNjUXMzU0NyY9ASY9ARczNzQ3NCc2PQE3JicHNScyNRY7ATY9ATQnNj0BJiM1Mj0BNCc3FhczNScyNyI1Mj0BNDcmPQE0NzU0JzY3NCMiFSInIgcmJwcmKwEHNSIHJxQjJwYrAScUIyInIgUVIzUFFSMiJwcWOwEVJzUHNzIdARQrATQnNRYFFSM1BTIXIhUiJzQFFxUiByInNAUHIjUFFBc3MxQHJjUyIxUmIzUFByM0JzIHIzUyBxUjNRcVIzUXFSM1DwEiJyMHJzUXFSM1FzMVIgcnNAcVIicHJiM1MjcyFxYzFSIHNQc1BxUjNRcVIyI1FxUjJzUFFDMVJyMHNjUFFSM1BxUjNSEXFSIVIzQjNTMHBhUjNTcXFSMmNQUVIic1MiEVIzQFFSM1MzIXFSY1MiMVIzUXMhUjIicFFSM1FxUiJzUFFSM1MgUVIzUHFRQjNTQXFDMVIzcXFhUjJjUXFjsBFDMVIyYjNQUWFyInNjUfAQciJzUFFSMiJzUFMxUUKwE1NAUyFSIHNCM1FxUiByY1FgcVIzQnNRYXIzcyMxYVIyI1MgUyHQEjIj0BBRYzFQcjJzY1FzMyFQcjNgUyFzcXFSMiJyMHJzUHMhcjJiM1MxUiJzU0BxUjNR8BBxUjNScjMhUjIicFFSM1BRYdASMmNTIFFSM1BxQrASc3BQcmIzUWBxUjNQUyFyMiJzI1BxUjNQczFQcmNQUyFSc1BxQrATd1BQsGCgYTAhsGBTEQARshDhILIAsbCxsVJgEFAygIDgUbBQsLEAsMCgs1EQ4XAQUcBAwKCwUbBgYGEEELCwoWEDYLCwsJAgULBQsJAgkCKwEKCwwGBgEGCgUFEQsGBgEFBQYFBgYKDRAGCgUBBQULAQsFAQUFBQsJCwsGBQsBCw
YFBQsKBQUBBg0LCwQKBQUFAQYGBQUFBgsEBgsGEAYFBQUJCBUFARAGBgYFCwUBCwUKBQUKBQULCgUBCwYFCxAGBQYLJjYQCwsLJgoGCyAGJQ0JMQgNBQUGCgoMBQsFBBIbChsGMBsICQULIBYLGgYjDQsVFQt3FgUGBQsFCwULBgsSLw0eGzgJMQsLBQsKBgYKBgsFBQULCgUFEQUFBgsGChAQBgUGCwYLDBAFBgsLBQYLBgUFBgUWGwYFCwYGCgUFBgUVARMIBgULBQUFBQELCwsBCgoLCwELEAsFCwsLAQULBQUEGxsBBQYFBQUWCgsKFhsGCgUFDAsLBgUOCCwfCxYTEhBmBAQEBAQHBwQOCQUEBAQEBAYDChEBFwMDBAYBGwMRBwMEAgYiBAUWAxERAwMDAwMKBwYIBxYkjy0TWwsHBggRFhZBBgRCQkAVER8DDQcNAxgDBAYHDQcGAxQLBBQEBgQEBAQDCgoHBw4XBQcVBwUFAwoEBAcDBAQHAwcHBAQEBAQEBAQHBwQEBAQEAwcEBAcHBAQEBwMDBwUGBwMDAwMHCwcDBw4DBAQLBwMDAwMHAwgHBwsHBAYEBwYOEREDBAMNDhEfGAclDgYEFBAPBAQEBAQFAgMEBAQEBAQEBAQEBAQEBBEDBwMDAxEGCwMDAwMDBxURBAQHAwMDAwMDAwMDAwMDAwcHFiQDBwgdLR4oBAMbAxQKBwMEBB4HEQYEBAQDBiMXBAQbGAYLERQWFg0NBx0IAwMFAhUYBwMKBAQHEQsGEQYWBi0GBggRBwMHIgMHBggpEQoMEhMDJwP9tAcGAQMYAwopRAcHBwMfFAHSA/5hBgQGBQYBzxEEBgUJ/oAEBgH3FA4DKQ0GGxED/l4HBwcRcwcHSA2xBxQKaQQDGAcHA3AKPQoKEQNECgsUBwMKByKLCQUIBhHdCikEBrsLEQGYFQoLBgP+dgeIBwLsChgKCgp+AwcEpgMK/SgGAQcCcgf90gp
BDAgfBB8KXAcHBgEB7QcwCB79fgcHAfcHGwc3DRQDbQoDCjYXDgcVERQf/QYHBwcOBBsUAwITAxwDBgH9AwoHCgKNBwgGB5IDBxsl/wYHBy8KAwcfFBgGA/6NBwcGAWgJBRELCgRYCgcYAwX9ng4XBwMDAg8EFwQHEwUDFglBBgFVCjoKBwcDGwYDBgECJAT+ugoKCgMCFgeSBwcKB/7KBhMJCfMHARMHBAcHBwQcAywHEQ4BeQsOPQcHBAcmBgQKBAYFCgMDBQYDAQoEBwULBAUIBgUECQUDAQoBBAUEBQkBAQUEEQEKAQYPAQUEAQUEBwUFCgoJDgEFBAkDBg4FAQoGBAQBCgEKAixKEwogFQoGBQkIDAUBDw4KBR0KCQoiBQodARkPHR4BBSIYBQgLCgoKEwoZEwoBWAkBBRgnDg0RHAoFHiIKCVIGCgFaIBQFBAoUBAoKChMLRAkeCSMFBQoBIw4FJwUFCjsODwUGCgoFCQUBGAoFCgUKCQoUGAUOFBMZAQUXDCIKBQEFBgICBAEOBQEJBgQFAQ0RCgEFAgoBCgUEAQoFDgQFBAEGCg0ZARMFAwsOAQYFAh0EGQEFEgYFBQEEBAEFCgEKAQUBGwEGAwwGBw8JEAQMCA4PDwUYHgETBQoFCgkVEgodBRgsCgEFBQ8MCBgdGQkKDAgnCRAEHQ8BGBgFHgQFBQoiBQkLAQ8KBgIVCh0KCQUFCRQFCwkJBRkNBQEiEwoPDgoFCgEFCgEEDhAFAQoOCgEYCR4EDAgJChQBMRQKBAUKCQcqDwMOAj8KBQsJCQorBRQJIwkTBBgHCRkFCkgKCAIJBQohBSQCCgEBDwEBBf7VBgcpEQMYFVUHLAwPJQQNBAYSAxQHIxMiBxsRBwQKIgcGBghYBykHBQgHAxgRFw4YFAoLAwcwBwMDBC8YBCIGBggDEQsKWA4YA2EZMzMcKAMDBAcHBAUuIz0oCwcGGAMNAQMtAxgYMwYYAwUFCgcR
GwcDEQssBwoGAQgCAxEEQAQKEREHAwciCgcFCAQEBwYBDQsUBwMRBxEiBA0TDBQRBAYfBxUGBgsHAw4HBgcHBwMHAwQGARoIAwYBBwYHBAMHBxEHBwMFGiUKBw8JDQYIBwMHAyYKBwkLBRADAxEECQUEBAQLBwMDBwMHAwQHAwMHEREREQMjEzoHDgYHIgcDBAsGFCIMEwYLAwcJEjMYAwcEAwcDBAwLBAQEG18KBwcEBwMHGBQ2BwcDBwoPFwcbBwgTAwQWFg0iDg4SCRYuAzgdB2kDDgUTLARJLgoKChELBCIIBgYHHAQGAwMDG0guHUtRfhEDBAQYBwMUBQUbBgQYEQQDAwcECAIKAwcUER8HCh4tEQYHBBdLBwgGBlIiBwcHBAMDAwMDAwYDAwMDAwMoBwcOBwcpBwYGB18DBgcHDwUHCjAKCgMRBw4KGwQGBAcGKAcHFAUCBwkIBQUHAwQRBAkIEQcNBAcHAwMiAwMUBwcEBwcKBAQEBgsHCS4EBwMDBw43BwMDAwMNCgcHAwcHBwcDBCkKFQcDEgkKBAQHAwMOAw4ODhEHBAcHPQcFBR4EBwMGBgoDAxQHEwUEBEEHBxEDAwMHAwQVAwoDBAQHAwcDBgYNBBEUBQUFBQQDGAMbAxQCDwcHAxEDBwcDHwoHAwMDBwMGBgcDAwceBAMNBAQRAwUJBgE4BgMHBxgHAwcDJQcKBAcGCAQGBAoRAwMGDg4EBwMlEQ4DEQcDBisEBBgHChEHGAcHBAoKHgYFAwUFAwQEFQYGCxwNDQcDBAMDJRsUBxgHBwcGBAkFdAcEA0cHDgAAAFX/zv78BWIHIAHQA5wDpAOqA7YDugPAA8QDyAPMA9MD1wPbA98D4wPnA+0D8QP1A/kD/QQCBAoEDgQUBBsEHwQjBCoELgQyBDoEPwRDBEgETARTBFcEWwRgBGcEawRvBHYEfASEBIkEjQSUBJkEowSnBKwEsgS2BL0EwQTFBMkEzQTVB
OYE7QTxBPUE+QT+BQoFEQUXBRsFHwUpBS0FNAU7BUAFRAVIBU4FUwVXBVsFXwVjAAABFBc3Mhc2MxYzNRYzNjM1IzUWMzUWFzUXNRc3FjMnNTIVNzMXNRc3FjsBNTMyFTYzFTM1MxU3MzQzFzYzFjM2MxYzNxQXNjMWOwEyNTIVNjUWFzcXFRQHFhUHFhcHFhUHFhUjFwcWFQYjFjMVIxcUIxYVBiMWFwcWHQEjJiMVFhUiFRYdASMXFSMVMwYVFwcVFxUjFRcVJyMVMwcUFwcXBxcVFCMXBh0BFwYjFxUGBxcGIxcVFCMUMwczFRQjFRcUIxcVBhUyFyMnFRcGIxUUMxUjJxUWFwcUMwcXBh0BFxUiFTIVBiMVFhUHFjMHJyMVFCMXBiMVMhUGFRYzFSIVIyI1BycGIxUzFSMiJyMUIyciBycHJiMVIyI1ByMiNSIVIjUiFSYjFScjFAciJyMUIycGIzUHIicHJxQHFAc0JyIHJwYjJisBIjUHBiM1NCc3JiM2NSI1MjUiJzI1FzUnMjcmNTcmJzY1NCc2MyY9AQMzJzUzNScyNzUiNTI1IjU3JzcnNycyNScyPQEjNTM1JzI1IjUyPQE0JzY1Jic2Nyc3JzYzJic0MyYnNjUnNjUnFhcyNTIXNxcyNxYzNRYVNzMXNjsBFzY7ATQ3FzI1FzIFIyIHJyMiBxUXFSMVFyIHFxUGFRQXIgcXIgcVFDMUBxcHFRQzFQYdAQcyFSIHFTIVIgcUMwcXBxYzBxYdAQcyFQYHBgcjJicmNSYnNDcmJzcnMyYnIgcmKwEHNCMHIicGIycGKwEiJwciNSIHJwcmJyIHFxQjFh0BFBcGKwEmKwEVFhcWMxQjFRcVBycjFjMVIxQXIxQXBhUXIxYXFQcWMxUiBxQXIxQXIh0BFAcWFxYXIh0BFxYzBxQzBxUXNzMVJyMUIxcUBxYzFCMWFyMWMxQHFhcUFzYzFzYzFzcXMjcUFzQzFDM3FD
sBNxc3FTI3FTI3FzcWFzI1MhUyNTIVMjcXNjsBNDcnMhcyNSczNDc0JzM1NDcjNTYzJzU3Iic1Mjc0JzY3Jwc2MzQnNjcjNTMyNyc1NDM0JzY9AScyNSc2NzQjNyY1MjcnMjUnNTQ3JzI3JzUzFTM0Jzc1IzU3IjU3JzI3JzYzNCcyNyI1Mj0BJzI9AScyPQE0MycyNyM3JzciPQEzNTQjNyM1NzUjNTQ3JzcnNjM0JzY1NCcyNTQjNzIXMzU0NyczNCM0NzQnIxUiJyIVJyMiByInBycHNCsBIicHIicGFSYnBRQzFCsBNTIHFSIHJzUFFDMVIyciFSY1MjUXFCM1BxUjNTcWFxUjNQUHJzUHFSM1BTMVIgcjNDcVIzQHFSM1IRUjNQUjNTIXFSM1BTMUBzUyBxUjNTMHJzUFFCM1FxQjNQUUKwE3BzIXFSM0IzUXFSM1BTMGIzU0BRUjIj0BFiUVIzUXFSM1BRUiFSMnNwcmNRYlFSM1BRcVByMnNTMXFSMmNQUVIzUHFSM2NRcVIzUHMwYVIzU2BRUjNQUVIzUHFCMmNTMVByY9ATIFIzcyBRUjNQcWFxUmJzUhFwcmNTQFMxUHJiM1MhcHJiM1FxUjNQcVIyInNRYnFhUnNQUWMxQrAScmIzUFMzQnBRUjNTIHFSMnNzIhFSM1BTIXIyc1MjcVIzUFFSM1BxUjNRcVIzUXFjMVIyYjNQcWMxUiFRQzFQYVJzU2NSc1BxcUKwE1NBcVIzQFByc3FxQjNRcVIzQnFzM3FRYzFSIHJic3FxUjJiM3FiUVIgciJxcVIzUXIzcyBRYzFSMnBzQnNQcVJzQXFSIHIicWJTMGKwE1NAUVJiM1FxQjNQUVIzUFMxUHIzUjFSIHJxcVIzUFByc1FyM1MhcjNTIBYxcJHiMCCAgKEAwJBQk8DjE6IQkJCQoFCgkFCRIhAgcFEwkdCAkKNxgEExcKAQgJBQEIKg4BCAIIBCEEDicaGBI
EBAQIBgUFDgQEBAQJBQkCDAkEBAQEBQUOBRMFCQUFBRMKDgkJDgoFCQkJCQUKBQ4FBQ4FBQUODgoEDhUDCgUFBQUFExMTCg4SEgYRCQoFCQUOCQoECgkFBQUOCQ4OBQ4TDgkOBAoEBQkCDA4EEhMTBAUXBQkFCg4MAgUTBAoXFwkGEg4EChIFBCYEDiYgBQQPFwQKCREUCQcHCglKcA4KCAoeDKoUBQUJ+lUgBAMGCQQEBwcKCQ4JCg4JBQQOBQUEBBgFBQoFBwwOCQkEBAQXCQkJCQkJDgUFCQkFBQUEBAoFCQkEBQQFBQYEBQUFBSgHBAkdBAoKCAkKJQkFFwIIBBcCCBcTBAUcJQH2CgYFBgQGAQcHBAYBBwoDAggKBgEHDgQHDhEEBAYBDQkLCgMDDQIIFQQEBBUsKgUHFRcfFQYDEREEBAQPEA4RBgcREREOCBMMAgYaFhQPDQMDBAcGEQseFAcRBwosCAUEEwEEBwcHEQ4iEQoDAg8EDgQVBAQECwYDCh8hAQoDBgMHCAYOCgQEEQYDBwQEEREYAwcDAwcKBAQHBAwFAwoUMxQZFAcDEREYBxEUBAYHBAMHJRgHEQMHBw0QAQcEBgcGFQcGCB4cBAgGBwQHBwoGCwcFBQMDBgETBQMEDQQHDAkHBAMKBgUMAw4HBwQKAwEQBwQECgQEBAcHBAMLAwMHBAcHBAQEBAQDAwkEBgQCAwcEBwMHCgcKBAQKAwMDBwciBw4HAwMDAw0EAwYDBw4EAwcDBwMDAwMRAwYBBBcHBC8MEwcUBwMiCgsGBAcNCxQBAwMHBwQ6AwcO/R4iAwcHHgNtB48RBAaaBwJdAw6IA/2fCgMHB5YHPQQCBQcBHgcHCgf9UgMOBG0HMwMRAeYHBAf+2wYHA9YPBQoNsAYCGQMFBf4FAwoIAZ0GqhH92QcDBwpYHBwCEgf+ZQoRChEKIgMLAR4HBwYDJQ3uAwcGBQG4A/5QBI4HCsgDCgcBOAoD
B/7mA/kpBw0mAjQHAwr+igMDBwQErQMHAw0DdAoGAQuFCg4BPRcOBwcKCRUBEwcH/qUKA6MDBwMHAWUD/hoRAw4RBFwHAQkK5AOSEaYSAwQMEjoOERgKDhcXBncGBgfZBv7sAwcDRAYeAwQwBwcPGQoDDiUDmQ0VDQMg/rEDBwoDJQoRCgMHAS4VBwQNBwfdB90DBw4DFv6FBwUFBAFYBwTrB/5eDgFHChQHDgMHA7cH/vcDDncHB50HBwcgBwcFCgoFBQoFBQkTCgoEBAkFBQUFCQUOBQUJBAQJCQkJCQkJBQkFDgkFCgUHBwkJEwUFBAQKBRNhUloiMkERNQkICy4KBAoXAQghEgoJBQkFDhkQGAIMCQUFGAQFAgsKEgUJEQsFCQUOBAUOBQUFCQcHFwoJCRMEChcOJRMEEwUQEAUlCQUFBF0KCQUOCRwEAwsYBQUJBQQKCQUFIQ0FBRcJBRcFDgQTDhMEAwsTEgoFKgUXEhwFCQUTCRMFCQkFBAkSFwkJBQUFBQUFBQUSBAQEBAQJDQ0ECQUFDgUFCg0RCwcHBQUTDgUFCQQbeiFKGRoFBQ4JBQoXHBcJBQVKmSYGKCovF3ABIAkFCQoSEwkJCgkJCk8EGAkOCRMJDhcFCQkhCwgJBSIHDDEJGAQhCCYFSgoJBQkIChgDBwUJCQUFBQoDBwUFCgUJDAIJBQXsDgMGCwoKBwcGCwYQCAQGIhwGBAcNBAYLAwcDAQkRIgQHBgcKBwcHBxciBggDEQR5oXkBQm6fGYgRAwc+khcHYQwHBAQHBwQEBAcHBwMDAwMHAxEOBhsVEQcNDhEHAj4tBgcEBgQHGwQ0GhNWEgMGLQ0RBwoEAwwTHhUDIgkWRQleEgMHEY8HBwYEGAQHAwYYDBM9AzMHPQQHWykQCAcEBAQEBAcEAwQHAwMDCgcDBgMDAwcHBwcDBgYGAwMJDxEDBxENHwYLBxENBAoHBgcHAyYDByIOBgMfBgsiBgcYE
RgsBgELCQcHFAcKFQYRBwQeBwMLAwkLByYGDgoDBwoHDhEDBwcKBxQHERgDBwoHBwoHMxQHLA4RBgcECgcGSxsRBAcHBgcRGCkHBhEKBAcRBgcDFAoLBgQDBwMHBwcDDQoEBAQEBAYDAwUFCQFRBAYGOQQDAwdVHwMDChcLBx8GBg0KBgcDGAMDBwcEAw0HBwQDBAYBBwYGBgYDAxsHDgMDFAUFBwQDAwcEAw0HBwsGBh4HDgcRBBEEEQQEKQoDBgkEBwQHAwMDJQQEBwMOAw4fBggFBQMDQQ0EAwMOSwcFBgQDAwcKBwNRBAQVCAUDChEGBiIGBgYHBQUKBwUFBCIGDQcHBAMHAwYEAwMOBQYGPQcGAwcEBgMDEQYGCgMHAwcEBgUEBwcbBwcXBAcGAREHAwYEBAYGBgMKAwQDAwMHAwMKBwcHAwMUBAMDBAQNBAYHBAEJBwMDCAoNCgMHAwYQBwYGBgMHBAYKBw4IBhQDAwsDDg0LBxEDDQcRAwMDDQoDAx8HHhEEBAQFCQcOCgMGIQMEDgcDCgQGAwcEAxgHBxsHByUEAwMDBAcYAwMoBwMEMwYlBwAAAHP/uf6nCG4GhAGcA2oDbgNzA3wDgAOHA4sDjwOWA5oDngOiA6cDqwO0A7gDvAPAA8QDygPOA9QD2QPhA+cD7QPzA/cD/gQEBAwEEAQXBB0EIQQlBCsENQQ9BEQESARPBFQEXARjBGgEdgR6BIEEjgSUBJoEogSnBKwEsgS3BLwEwATEBMgE0ATUBNwE4gTpBO0E8QT1BPkE/gUCBQgFEgUWBRoFHgUiBSYFLAU1BTkFPQVBBUcFTQVUBVoFXgVkBWwFegV+BYQFiQWOBZIFlgWcBaAFpAWoBa0FsQW3BbsFvwXFBcwF0wXXBdsF3wXjAAABMxYVBzIVMjcWOwE1MxYXNjMyFzYzFzYzFhU2Mxc3FhU3FzYzMhU2Nxc3FzQzFDMVIxcGIxcyHQEjJxUXBxYXJy
MHMhUiFTIVIgcXIh8BBiMXFCMXFScjFyMWFRYHFwYjFDMHFBcGFTIXFSMWMwcfAQcWFwcWFRcHFhUHMhcHMxcHMhUjFTMVIhUXBxcVBxYXBhUWFwcWFyIXFh0BFiMWFQYVFhUHFRciFRcWMwcVFjMHHwEHJxUfARQjFjMUIx8DBxUjIjUGIycHJiMGIxUXByMmIwcnByYjBzQjByMiNQYHNCcHIjUHJjUHJicWIyYrASIHJiMiFScGFyM0IxQjJic3JiMnMzQjNTM1NyInNiciNTI9ASYjNyI9ATInIj0BMjcnNyczJic0MyYjNycHJzMmJzYzJzY1IjU3JzQjNycmNycyNyc0Myc1Jjc1MjcmIzc0IzcnNjMmNTI3JiczJzciJzI3JiMnMxc0JzYnNScHIzUyNSY9ASI1NzQjNTc1JzM2NTQnMicmNTInJic3JzYzFjM3FzI3FzYFJiMUBxcjFhcHFDMXIhUWFxYXBxYXBxYzFhcjFhcHFhUXBxQXFhc0MxUyNxU2OwE3FDM2NzIXMjcUMzcUMzcVNjU2NzQ3NCM1MjcnNjcnMjUnMjcjNRczNjc2MxYVBxQXBxYXFhcUIxQzFhcHFhUHFhUWFTcyFTI3FzcXNxUyNxcyNxQ7ATcXNxQ7ATcVNxc3FzcUOwE3FDMyNzI3Jzc0JzI3NScyPQE2Myc3Jj0BNyI1NjUnNjU0JzI3Jzc2MzQ3IjU2NzY9ASYrASIHIicHIicjIgciNSIHNSIHJxQjJwYrASciByciFSInBzQrAQYjFRQHFhUHMhUHFwYVMhUjFwYVFBciHQEzNxUiFQYVFzcVIwcUFwYjBgcXIgcUMwYHMhUGIxQHFSMGByM1JiczNTQjJisBBxQXIyInNzUmJxcyNzUmJyYjJiM0MzQnNycyNSczJzUmKwE1NxYzNTQnNjUmJzY1JisBBzUHJwYrASInBgcnIgcmIwc0KwEHNSInByciBxcGBzIVFCMXBiMUFwY
VFyIVFwYdARcHBgcVFwcUFxQjBiMGByYnNSYnMjU0JzI1Jic0Jzc1JjU0Jwc1IgcnBycHJyIHJxQjJwYFFSM1BxUHIzcFFjMVIyYjNTIXFSM1BRUUByY1MhcVIzUFFSM1BRcVByYjNQUHJzcXFSM1BRUjNRcVIyInBxUjNBczMh0BIzQjNCEVIicFFSM1FyM3MgcVIzUFFxUjJzUXFSM1ITIdASY1BRUjJjUhFBcHIic2NQcUByY9ATMVFCM1NAUXFAciJwcUIzUFFSIHIic3FxUjIic1OwEVFAc0IzYFFSM1MzIVIgcjNgcyHQEnNAcVIzUXFSM1BSMmIzcWBRYzBisBIic1NBcVBisBNDcWJRUiBzQjNQcVIzUHMhUGIzU0BxUjIicXFAciJzU3FiEyHQEmIzUzFSInNQUzFBcHIiciFSMnNjUWBQcnNQUVIyInNRYFFScjBiMnNTY1NjUWFxUiByM1BRUjJzcyBxcVIgcmIzQlFCsBNQcVIyInBRUiJzUyByM1NxYFFSMiNQUVIzUHFSM1BxUjNQUWMxUHIzUyJQciJzsBFwYrATU0BRUmIzcWBwYVJiM3FgUVIzUXFSM1BRUjNTMVIzQHFCMmNSEVIzUXFSc2NTIzMh0BBhUmIzUyJxUjNQcVIzUXByc3FxUjNQcjNTIHMhUjIicFFjMUKwEmIzUhFSM1DwEnNwUVIzUFMhUjIicFFAcjNTczFwcjNCc1ByMmJzUWJRUjNQcVFCM1NCUUMxQHNCcyBTM3FDMHFRQzFSMmIzUhFSM1BRQzFSM3IRcVJjUFFBcjNQcVIzUFFSM1BTMVIgc1FxUjNQUVIzUXFSM1BRUjNTIXFSM1ByIHNTcyFxUjNQUVIicFFxUjNTIjFjMVIyY1FxQrASc1FgcVIzUXFSM1BRUjNRcVIzUCGwkSCQoJPh0YGgk1AS40JD1MMD8BEhkSChATcys2PCcJlRNYbVgIJBAQFCABJQoREgkJARIK
CQoKCg4LGxoBCgwQHgobGgoVCgoBCQoDDgkICgkOFiMGDggBEAYGAQYQAgkTEw8NEREBCAgREhEKEwoIEwETCgEQBwsKARMBChwJExITEwEHExkUBgYCJBMQEAEZAiQTCgITATYIEysTEBIQExMIHBMIARNpUhASCS0SGQoImRCyRgojUBMPbwEQVTBcEw4fMwaYsgEKEBOPAQoMGAEQJBMJEwEKAQkTARMTFC0CExEKFBETCQwPBwgTCQETCBIBCgoJCgoUEwEKCQMBChQOCwgHBwEGCgkBCQkKCQIDDxMSCAkBCgoQEAEQCgEjAQoQBwYBBxMSKwcKCSUrBxAHCxsBCRIBEgoJFS8pAXM/EwumED7+7D4UAxQDAwMDBx4DBQUREQMHBgMDBBgGAwMLBAcUAw5wGwMKCy4WGBEDFCYCCwYcBAcDByUPCRsKDwUDCxADBwQGCBsRCg0LFxUbBwQHCwYXFQMGFQ0DGwMHEQYHBAYOEQcRDg0OAwcDDgc9BwMHByIGBw4RAwQGBD0RKgkDAwMIBQMHBgsEFQQEBAcDGwQFBgcHERQbAwoYFAUFAwsNCAYHBQgHBgEDBgsRIg4DFQUIBwoGARgKBxEUBAMNCwcECgMHBBEKBwMDBwoDCgcUAwcDDgQEAwUMAwYLBwoHAwIIFAQRDQQLFwcDBAYHBwcHBgQHIQEUBR0JDwsJCwoEBwMDAwMDAwUFGAMMCQQECgcDBQgEByIGBggHBwYnIQMOGyQBBwQDBxYkEQYWDAMKCgMHBAUGBAoDBwQLBAcEBgMKAwMQEiQIDAwOBgMYBAQNHwMGJgcLBhcVBxENBAYpBAYnAyAHMxEGBgHcDQsDEwwEWxf+BQ4NBkUO/bsEAiAwBBcYAYMDBwQsB/4MB6oDBgHPB9oGBwMRAjQGAf7qB34LBAdVBP76EQYOFBEBRwcL/pEHCgGRDhEGAQfJAwpmB/4dBwcFDHMHAXIDBwYBBD0DBgGxBg0EB
v77BrAHBgsDCNsHDhgGhAcBQAMLBgMJ/hgFBQUFBwYBdwgGBgYJAToDBwclB6YGCAV+AwYBpgMCEgMS/owLCQXTBgH+7RcEBAQeDQQDCgsCTAQN/mQRBgEYAYcRBwUMAwcUEZkMCAT+sAQGAwe7FAYLCwYCLgcDyQMGAf4WBgEHOg0DCgL9Awr9YhEiBwoHApAHBBEVCf2yBAUBKA4HDwYGAsYIBQMHmQcZCQMTAWMGJQr8WQeLBkEHCgJnBo4UAwaNBg0JGRmXBzoGkhEHCp0LhAcHSwcEBQH9twwWBxEIBgG0C8gEBgMBXgf9BwcEBgEDSA0EBCwHBAMH7gcHBhT+EAcbBwLNBCIEIf0SCgcDAxQNGgUB2Qf+jQ4VBAJFBBX9LwQHMAMCwwP9RwoIEH4HAxUHXwb8hQcHGweVBAcEBz0HA+QGAfwqAxEIQg0LDQ56BgsKBCILyQcBbAeZBwaEAQkKBQ8KCgsECgUFBQoFBQUFBQwIBhAFBQoKCg8dBAoFDyIPCwQEBBAJCgUFFAUFBBoYLQsiGQUdBgooCgQQFCE8BjEFCgoFFAU3GCQOCgkLCQIJRQoBCQ8PDw4LBR4KBBoEChQeFA8BCRwQBgRGBQEJDwUWCAoEAggQBBAJBR4ZBBQKQRQFBQUPDxleGRgyEAQkCQ8KBAQEBAUUBRQUBQUFBQoKBQoKEhEKBAQEBgYLBQoKBQkECg8PDwsNGwsdCh4GExkJCwUECwUKFAkFMgoFDlAGQCwLBTEKFAQJCwkPCQsFCg4QDhl8CwkjFB4FCRALCQ4ZBRQKIygKJQIfCAwJDwkLHQoEBAojFAsJBQoKCQYOBgoOBgQKGUQbBBlCCQUPESYZMicZBgYPBQexAwcGRBoIBxvdBAsk04EHeBAVG74fJCAHLhyxHxMSBAMDAwcEBAMDBgQDBgMDAwMDAxUeIgtpBwcXBxJiBxcHJhEEMReEFykEBwYLVhZtHwMVciAHYgcHBw0NCA
QHAwYDAwYDBwQEBAQOBAQEBAcDAwcHAwMDBlIHBwMHVQcGBwp3B0sGCBQRAycMH3QNBAY6QQPaK1MDXnFwKRUKCgMDBwcDBwQEBAQLBAcHBAcHBwMKDhcOBggRAwoHFBELFAcDBQkHDQcHCgsGBwMHFwQHCjgWBzoGCCsEDTknFCYUBzsQBwMfBBgREQsDDwUDBw0LSlJSAxMgBwcDBykKCgcHBwoQEgwCOgoGBxsDAwMDAwMDBwcHBwMDAwMDAwNHBytTAwcUCgQHCy4HEQ4FBQ4iAx4HBxEHAwcEu2EIHEA9cBgDMWUDJSo9dxQHIQsKBwMDAwMDAwMDAwcEBAdOBAQHBAMKSw0ECwN+AwMiBwUFBQUvBAQbBwdPDQQGEQYKBwQHBAMDAwQEBwcHFAcGLAYcHAYGBgMDAwcHBwcHAwQDAwQ9BAcHAwUFGAcFBgcOAwcICRwBDAUFAwYHBwYKAwcOFQQGBgoHAwcHHwoHAwMGBQQKAwQEBwcOBAcGBgYCBAQVAwMeCgcDBwsKBwMFAQQNBxEHAwMEBAcEAwMDBw4OBgYHBx8MBQcHBwQGBAcDCgcDCgMHBwQOEQsGBwMHAwcRAwcGBAYDAxsHAwkIBgQCAQMHCiUEBAYKBwMHBwUCBwc3BgYXBAcDDQMHBQIDBwQDAwMEBA4HBwcDBwMDBAcHBBQRBgMKBwcEAwgNEQcDBAMDAwMDFAQEBwYKBgUFBwcYAxEGBAcDAgkHBAYDAwYHBwcRAw4OAwMYBwMHBwcDBwcDAwMHBwQHBAMDBwYGDQUFBgcDFQ0IAx4BEAMPDAQEBwQGAwYBBAkEBwYDAwMHDQcEFQ0DAwMOAxERAw8FAwsNGA4KChEHBwoECgoNBAQOAwMYAwMUAwoHAwMOAwMHAwQECgcHBwcDBgoDCAUKBwcEBBQEBAcDA0QDA3oHBwAAOf/O/twFYgcaAgUC0wLcAuAC5ALoAu8C8wL3AvsDAgMGAwoDEAMUAxg
DHAMgAyUDKgMwAzYDPgNGA1ADVgNcA2EDZQNqA28DcwN3A3sDfwOFA44DkwOYA5wDpgOqA7ADtAO4A7wDwAPGA8oDzwPVA9wD4gPmA+4D8wP3AAABMxYdARQjFxUHFxQHFhUUIxYVBiMXFSMVMhUHNCMHFTMHFxUUIxUzFSMVFxUUIxYzNDMVFCMXBxYVBhUyFyIVFwcUFxUiBxcGIxcHFwYdARQzFQcUMxUjFxUGFRQXBxYVBhUXBhUXBxYVFCMXFQcXBhUXFRQjFxQjFwcWFRQHFh0BFCMXFQcWFQYdARcHMhUGIxUXBhUWFQcWFSMXFRQjFxUGByMiNQcjIicHJxQjNQciJwciJwYjJjUGFScjFCM0IwcnIxUzFCMiNTI1JwYVJwYjNCsBIgcmIwciNQYjIicGKwEiPQE0NycyPQEnNDM1NCM1MjcnNDcnNjM0JzcjNTYzJj0BJic3FDM0NyY1MjUiPQE3IjU3IjUyNRczNDcmJzMnNyc2NSI1MjUjNTI1JzQzJzU0Myc1Myc1NyYjNTM1IjU2NTMVMzU0JzI1IjU3Fzc1Iic3JzU0MzQnNTY1JzcmNTI1JzY1Iic1Mjc1JzI1IiczNSM0MzUnMyYjNTMXNSc1NjMnNTMnMjUmIzU0NzQnNwc1Mj0BIzUzNSM1MzQjNzUnNSM0NyYnNjsBFhU3Mhc2NTIXNjMyFzcWMzYzFBc3FDM0MzIXNjMVNzMVMjUWMzYzFTcWMzYzFzcXNDMnNRYzNyc3FBcUOwEnNxYVMzcnNTMXMyc1MzIXNycyNRYzNxYzNgUXFQcWFyIVHwEjFjMWFxYzFCMUFxYXBxQXBgcVFyMGFQYHBgcXBhUGFRY7ARc0MxYXMzcUMzI3NTY3JzY3NjM2NzQ3MhcWMxYXFhcWFzM2MzIXNjU0IzQzNCcmJyYjNDM1JicmJyY9ATQ3NjU2NzUzNyczNScyNSczNCc0NzUjNTcyFTI3NjciNTQzNCM0Jwc0
JwYjNCMHJyMHNCsBBzQjBgc1Bh0BFxUjJyIPAQYHIzUmJyYjNCc1JyYnBzQrASIHJicGIzQjBzQrAScUBRUiByYrATUWFxUjNQUVIzUXFSM1BRUiBzU3FhcjNTIFFSM1BSM1MhcyHQEjNCcXByc3FxUjNQcVIzU3MgUVIicFFSM1FyM3MgcVIzUHFSIHNQcUIyInHwE3ByY1FzIdASY1FxQXByInNjUHFwYjIic1MhcUOwEVIgcmIzQHMwYVJzQXIyYjNxYHFSMnNAUVIzUFFRQjNTMVIgc1BxUjNTMVIzUPASc1FxUjNRUzFCsBNAcXFSIHNCcjNRcVJiM1BxUiJzUXFSM1ITIdAQYVJiM1MicVIzUzFxUmNTIHFSM1FwcnNxcVIzUHIzUyBzIVIyInBxUjNRcVJiM1FxQHIzU3MxcHIzQnNQcjJic1FiUVIzUHFDMUByM1NgcUIyInExUjNQU2CCQHBw4HBw4ODgcHBw8WDggHDw8dFhYdDxYLCwcPCAgIDwsSHQ8PFhIEFhAGFhYPFhYPFhYdHRYHBw8PDxYHBwcHDg4ODgcHDgcHDg4OBwcODg4OBwcOCA8HDg4OBwcHBxccZwcPMz4aDiUHDx4rCB4cDwcHWA8PDg8HJTMPDw8IDw8dNwQOCBMZDggOB1IcGA0+KVcPDw8PHhYdDRgICA8PBxYWDwMMBw8PDwcICAgPDxYOJAcPBwcIBgcHBwcHBwcPDw8ICAgIDw8IDwcWFgcHCCUHBw8ODw8dDwgeFhYICAgPBwcJFAYXBwcMChYPFhYPBBIHFg4CDAcPCA8PDiQHBxYWDg4OFg8HDggPCRQvEwcHJQs3Bw0uAgwRDQ4PBwMMFhYHWAobNQUPBw8PBw4IDg8HAwxCDyQ7ByAEJQgPQgcICA8HCDMHBx0IDwcRBSUICDcSHQ4QDvuQBAcVEAMKMwMNBAEkHBAHEQoHAwMNCgMDH0ICGyIDCikJBUAYBBqTLBEEDwgJG
QMJDwkICxARBwoHBwcUFSgrFgrhKAwTLwoDKDMiEw8DLgUYDRwfESIbBBcDBwQHAwMDDQYDAwgDFgEDBwQlBxsMAgMDCx4HAykRBB8JUh8EGAgPJhAVBBEeDQQbDngXBwMzDhcELwwCCgcDESIBOAMHCwkVMzADAcsEMwf98QoNAxIQBwcBShj+AgcHzAcEBrQEBgMsB3oKAwcBUQYB/ukHfgoDB1UDYxMFQAcGAT0YEQclzwcKEQ0RBQEG7gcIBQYBBWgoBAcOCxpmAwMHxQMLBgMKIQQRAQME/n0HdwQGTwNLBH0LEdcOCgcKuyIDBxQL6AkFlgUBXwcBEAcOCBoZlwYiChUEVQeSEQcLnAqFBwdLBwMGAZkKkgcDSw4DAywHAwQH7gYHBxQBowTqAykDH08HBQG7BwcaDh9kBQsXEAwFCyokCzsOEAwWBQwFBQsFHAYWCxYLBhELCxYFBQsMGwsGAgkWDBAGEhoGHCEcSCIFHBELCwYQDAsWBgIOExQLCwwBChACCiELCgwGCwYQHAIJEQsGCwsLCwIJCxcCCQsGCxEQFhECCRwRCwYFLRAMBQIJBhIPC04GC1MhDAYGEQYGBgYGEQsQBQsGDAUFEAsLBQsLCwYFAgkGCwsLBQUFCwYGCxYHNycLBQYLEQsRCwsXJhYGDCwnBQsLBhECGQYGBgsLBgUMCxAMEBEGBgwKMxALCxclGAUGCwYWBRwGBQwFERYLBgsGCwkNCwUKHQYFBgYRBhwFCxELDhkREQsWCwsGCxYLBhwFCzIMBRwGCxAXFgsLFhEGCwsFHAsiBQ8CBgshCxELBQwLCwsLJxEQChgiFUMLBQULCwYLCwYGBgsICAsGFhAFBQULCwUFBQUFCxwGBgsLCxYGCwUKBgYLBgoMBQsGEREFGwULBgsFBQ7fBwMKQh0EJYEYK0J0BgY0ESIHAwcVMw0HKzTdS1GPBxEKkQ8OAwMHCgQEQRsJPgctFEBmGCwiHh
s8Kk9icB8YBAIPIgQaeNY9VQQHlAFcGCQLBB5ZJAhBcAdEDQQGBwcDBwUQAwMHAyUmIgMDCx4HAwUFBAQHBwQEBAQEAwMMCAMOAwo6cF4ZAyVgNgslNhUDBwQEBAQDAwMDAwQEMwMEBw4JDAYGCgcHBwYGGwMEBAcEDQYzAwNiB2AGCwYLEQYDBwQDAy8EBAciBwcEAwMHBwcGBgMDBAcDBwcwBwQLBggHBwMFBRQHDgMHCAkVAw4HBDcHBgcKBRYHAwMGIQoHAwQUCggBBwcEAwcKAwMGMwYGDQ0GFQQRBAMDLAcGNQsDAwgCBz4KBwMNCgYEGAcHBwMCCAYEBwQEFQMPBQMHBwcRAw4OAwMXBgMHBwcDAwcGAwMUBQUHBgMUDAgDHgEQAw8MCgoHAwgJDQQEBwf+UAMDAAAO/87+nATdBpgBggLpAu4C8gL4Av0DAQMFAwkDDwMTAxoDJAMoAfMAuACLL7gAkC+4AJsvuACdL7gAry+4ALwvuAC/L7gAwS+4AMMvuAAAL7gBSi+4AU0vuAFQL7gBUi+4AVUvuAFXL7gBWS+4AVsvuAFdL7gBXy+4AWEvuAFjL7gBZS+4AWgvuAFrL7gBby+4AXIvuAF1L7gBfy+6ABABVQCQERI5ugByAVUAkBESOboAdAFVAJAREjm6AHUBVQCQERI5ugCOAVUAkBESOboAyAFVAJAREjm6AOMBVQCQERI5ugEJAVUAkBESOboBDgFVAJAREjm6ARMBVQCQERI5ugE6AVUAkBESOboBrAFVAJAREjm6AbwBVQCQERI5ugHIAVUAkBESOboBzAFVAJAREjm6AdQBVQCQERI5ugIfAVUAkBESOboCIQFVAJAREjm6AlEBVQCQERI5ugJgAVUAkBESOboCigFVAJAREjm6Ao4BVQCQERI5ugKaAVUAkBESOboCswFVAJAREjm6AsMBVQCQERI5ugLJAVUAkBESOboC3QFVAJAREjm6AucBVQC
QERI5ugMAAVUAkBESOboDBQFVAJAREjm6AwcBVQCQERI5ugMJAVUAkBESOboDEQFVAJAREjm6AxMBVQCQERI5ugMYAVUAkBESOboDIQFVAJAREjm6AyQBVQCQERI5ugMnAVUAkBESOTAxASMmNSciFScHIicHIjUHIycGIycmKwEHJicjByYnNyY1NyY3FjcjNjMnNzY3JiM2NyYjNDMmJzcjNRY1Jj0BNjMmJzcmIzc0JzcnNyY1NyY1NjUmNTcmNxcmJzcnNDMnPwEmJzUyNSI1Nyc3JiM3MxYzNyc1Myc3MyYnNzYnNjcmNTcWMxY3Fhc3FzcyBzcnNzMXFjcWFzI3FxY3FzcUFzQzFjMWNxc2NxU3MzIVNjcXNjMXNjMWFTcfATQ3FzI3FTcWMzcWFwYVMhUiFRcUIxYXBxcHFgcGIxcHFhUHFxQjFgczBxYVIxcGIxYHBhUXFCMXFRQjFxUGBxYzBxQXBxcjBxYVByIHFBcmBzIXFSMVBhcHMhUHFgcUBxYVBxYHFCMVFDMHFRcGFTIVJgcyFSIVBzIHJwcXJwcXJgcVFjMGFRcmFTIXBgcGFScjBzUGIycHJjcHJiMmByY1ByciNQYnJiMGIycGIyInByInBiMmJwcnBic0JwYnNQYnIicHIzUjAxYzFCMWFyMWFxYXFjMVIxQzFjMWMwcUMxQjFBcWMxQHFjMWFxQjFBcVIh0BFDMUBxYzFCMUFwcWMwYHMjcWOwEyPQEnMxY7ARUnByYrAScVMwYjFhcjFxUHFRQHFwcVFyIdARciHQEXIhUXIh0BFyIdARcHFwYVFDMHFRcjFBcyNTIXMjUyFzcVNxYXNDsBMhcyNxYzNDMUOwE2NRczJzQ3NCc3JjU3JzI1JzQ3JzcnMjc1NCcyPQE0JzY9AScyNyYjNTQnNzQnNzQnNDcnMzUnMzY3JzQzNjcnNjc1IzU3MhU3NCc2Nyc2NyI1Mjc1JzY1JzI1Njc0JzI3Jzc1
MjcnNj0BJzI3FTM3Iwc0IzQzNTcjJiMiBycjBzQnBycHIwcnIhUiJwc0KwEGBwYHFRciBxcGBxcGBxQXBwYHFBcVIwYjBgcjJicyNSYjJic3JisBIgcmKwEiFSMnBzUiByYrAQcjNQYFFSInNQUVIzUHFRQrATUFFxUnNQUVIzUHFCM1BxUjNQUVIic1MhcVIzUHFjMVIyc1BTIXFhcVIyYjNQUVIzUBKQUKHwUKEAgIGgUKBQsCCAsmAxUQEQ4FCg8EDgUBCwEKBwYBBQUBAQUFBQYIBAYGBAoBFSAKAQoECgYFBQYIBQQMDwcLBgoGBAEFBAQGDgUFAQYMCBAKBgoNAg0BBQoFARQKBQEKARAGAQUGBgUlEA8LChMWagoaCwEgBQoGHgkWCQwGJBVRIg8vLgYEGhUqCh4hCwoFFRAUCwUKCwUQCgUaIAoLOSUKBQsaEgUKCwQFBAoGBQYPAQYFBQcFCw4GCAILCwUGBQIJCAEGCgUEBgUBBQQKBgQFCRACEAEPARMPAQgHCgEFCwoGBAEGBQYLARUFBgkFBQUBCwsBCwEPAQQKAQUKAQoEBQQFCwMaKhsKBRALBQoVEAEWEQ4JFgUaSQUVEAEJHAMLCgUGCk4KGgoLDAkVFRQQDwMiDQgVSAEKCrUEBwQEFAMEEwkPCxQEBBQKFA4DCgMRAw4EFwgPEAQbCgcDCAkEBwMGBA8CAwcbCgQHBAQOFAoKFRICESIHBQYFBgQEBwQEBAQEBAQEBAQEBAQEBAcDBwQEBBEHCRYKCQsOCggdBxEKCwMHFQYDBAobBwMGBgMHBAQHBwcDAwMGAwcHAwMDAwMEBwMEBAQEBBgDDQMHCQgEDgkmAw0cBwMEBwQIBgQTBQMJGQQRAwMPCQMGBwMKDg0DEQcEBgcEBAcDDgMDFQMGAQoEEQMOAxEbBwMECQsHAzcFJwgTAw0HAw0LBBoFBBUDDhEUEAgDGAQNLAMSBhUNBBUYAwYBGRYHB
wMLBgwTFC0oCwMrAncGAQEDBF8HA/3uERgCXQMfBwMO/X4GAQfFB1IXAQMYAZEFIQMKAxMn/pEE/qMBEAEFBQoRBQYFBgsBDAoLAQUWLIgLBRADCQEsBRwgDQkQG0whBjYLHAsBGwMJBQsWEBsRGwNUCws2Iw8gAgkKDAIJGy8eAQk+IRwFCyscEAEKCxALIVcWCwYFIgULBYMQHAULJQwKDBoMAQULASgFDwsECwUhAQsGAQ8GAhQLBAgPBREBCQUOBQUFBgUKCwUGBQYGBgEGCgsGDgUJBQUBUwoGCwoWBi8YCwsbJA0QGyEJEgVIBV47EAsFCxtOHxYQBgUcEAULFgwKMRsEHQsxOwELBQseJAELEQUFDAomCyEcGgwKCQ0VAQsKCwULGxELBQYBBgsLCxYBGxwBHAsBCxYhCwUcAQYcHgUICAYKBQUGCgYFEAwBCwEFBQMFCgELBQYFBggMBQEFCgYFAQgJBgEGCwEIEBEG9iUEFzAUHCQgRwMOY1gRBwMQIyYDB185GQMjCQQGBAcDBx4EDRwGBBEKAxEHBAYXFQcDFAMKCjYLEQYLEQwSBxQEBwMOBgQREQMHAxUHAw4UBywGCAYYGAcOGwcNBgYGAwcHAwYGAwcEBA4HBAoGAQQGMwYIESkHCgsGFBURDQQJCwMLBwYGCBQHIgMOCAYGCw0YCwZBJQcDER4BFAcuOAcNWQMHBwQEAwcJGQcaIwpEBAYiCwYLFCkDBxgHFxgzBx4SAwoEBxEEBAcGGBsGBgMDBwcHAwQHAwcEBAYFIRwDBzoHCSMHPwUDBx4pGwgDAzMfRGOFA2ZoDxg6BwcLBwMDAwoHBwQoCgYEBAYGDQQGCiwEBwQHOgcHWQYGFwQEWQMHAx8DAzYHAwcDbQcMCwQfA6MHBwAAAAn/zv6yBRsHOgICAtAC1gLaAt4C4gLpAvAC9AW5ugGKAqgAAyu6AQcCqAGKERI5ugEVAqgBihESOboBHQKoAY
oREjm6ASMCqAGKERI5ugEtAqgBihESOboBMwKoAYoREjm6AT4CqAGKERI5uAGKELgBWtC4AVovuAGKELgBXdC4AV0vuAGKELgBYNC4AWAvuAGKELgBZdC4AWUvuAGKELgBadC4AWkvuAGKELgBbdC4AW0vuAGKELgBcNC4AXAvuAGKELgBc9C4AXMvuAGKELgBd9C4AXcvuAGKELgBedC4AXkvugF7AqgBihESObgBihC4AX3QuAF9L7gBihC4AYLQuAGCL7oBmAKoAYoREjm4AYoQuAGg0LgBoC+6AaUCqAGKERI5uAGKELgBp9C4AqgQuAKm0LgCpi+4AqgQuALE0LgCxC+4AqgQuALG0LgCxi+4AqgQuALI0LgCyC+4AqgQuALK0LgCyi+4AqgQuALM0LgCzC+4AYoQuAL23AC4ANQvuADhL7gBBS+4AQgvuAEKL7gBDC+4AQ8vuAAAL7gABi+4AdIvuAHmL7gB6S+4AesvuAH3L7gB+S+4AfwvuAH/L7oChQHqAAMrugDvAgYAAyu4AeoQuAAD0LoACQHqAoUREjm6AA4B6gKFERI5ugA6AAABCBESOboAQgAAAQgREjm6AEgAAAEIERI5ugBPAAABCBESOboAcgAAAQgREjm4AgYQuACs0LgArC+6ALoCBgDvERI5ugDDAgYA7xESObgA7xC4ANLQuADSL7oA0wIGAO8REjm4AO8QuADX0LgA1y+4AO8QuADa0LgA2i+4AO8QuADf0LgA3y+4AO8QuADk0LgA5C+4AO8QuADn0LgA5y+4AO8QuADq0LgA6i+4AO8QuADs0LgA7C+4AO8QuADz0LgA7xC4APXQuAD1L7gA7xC4APfQuADvELgA+tC4AO8QuAEG0LgBBi+6APsA7wEGERI5uADvELgA/dC4AP0vuADvELgA/9C4AP8vuADvELgBAtC4AQIvugEVAgYA7xESOboBHQIGAO8REjm4AgYQuAEh0LgBIS+4AgY
QuAEj0LgBIy+6AS0AAAEIERI5ugEzAAABCBESOboBPgAAAQgREjm6AXsAAAEIERI5ugGKAAABCBESOboBmAHqAoUREjm6AaUB6gKFERI5uAHqELgBvdC4Ab0vuAHqELgBwtC4AcIvuAHqELgBxNC4AcQvuAHqELgBydC4AckvuAHqELgBy9C4AcsvuAHqELgBzdC4Ac0vuAHqELgB0NC4AdAvuAHqELgB1tC4AdYvuAHqELgB2tC4AeoQuAHc0LgB3C+4AeoQuAHe0LgB6hC4AeDQuAHgL7gB6hC4AeLQuAHiL7gB6hC4AeTQuAHkL7gB6hC4Ae3QuAHqELgB8dC4AfEvuAHqELgB9tC4AfYvuAHqELgB+tC4AfovuAHqELgCAdC4AgYQuAIE0LgCBC+4AgYQuAII0LgCCC+4AgYQuAIL0LgCCy+4AgYQuAIO0LgCDi+4AgYQuAIQ0LgCBhC4AhLQuAISL7gCBhC4AhXQuAIVL7gCBhC4AhfQuAIXL7gCBhC4AhvQuAIbL7gCBhC4Ah7QugIqAAABCBESOboCQwAAAQgREjm6AlkAAAEIERI5ugJbAAABCBESObgChRC4AnzQuAJ8L7gChRC4An7QuAJ+L7gChRC4AoHQuAKBL7gChRC4AoPQuAKDL7gChRC4AofQuAKFELgCi9C4AosvuAKFELgCkNC4ApAvuAKFELgClNC4ApQvuAKFELgCl9C4ApcvuAKFELgCmdC4ApkvuAKFELgCntC4AoUQuAKk0LgCpC+4AgYQuALP0LgCzy+6AtkAAAEIERI5ugLdAAABCBESOboC4AAAAQgREjm6AuIAAAEIERI5ugLlAAABCBESOboC6AAAAQgREjm6AusAAAEIERI5ugLyAAABCBESOboC9AAAAQgREjkwMRMjIicjIhUiJzUyNyc1NyY1NjcmNTMmNTM0JzU3NSc2PQEjNTcnNyY1NDMnNSY1NjUmNTcmNTcnNTQzJjU2NSY1
Nyc2PQEjNTcjNTM1Jzc1IzU0Myc0Myc1Nyc3JiM0Nyc0NyY1NDMmNTI1IjU2NSc3NSc2NSc2Myc1NDMnNjUiNTcnNDMnNSI1NjUmNTMnNjUnNyc3JzY1JzU0MyYnNzUnNyY1NjUmNTMnNTYzJiM3NSc1NyY1NyY1NjUWFzcWMzYzFjM0Mxc3MhU3MzIVMjUXNxczJzcWMzUWMzcXNxYzNjMWFzcXMzcVNjciNTMVMzI3FjMnMxYzNxYzNRYzNzMyFTcXNDsBFzUyFTczFxQjFBcHFBcVIxcHFhUUBxciFRYVIhUyFRQjFxUyFQYVMh0BIycVFjMGIxYdARQjFhUiBxcjFxUUIxcHFwcWFwcXBxYVBxYVIxQzBxYXIhUXBxYVIxYXBxcGIxYdASMVFyIVMxUjFyIdARcjFxUHMh0BBhUUMwcVFCMXBxUXIgcXFAcXBxcHFDMHFRcjFRQXBhUWMxUUBxcHMhcUIyYjBiM1BiMmIwYjJwcnIwYHJiMHJicHMhUiFSciByYjIgc0IxUmIxQjJwcmKwEHJwciNQcjJiMGIzQjFAcmNQc1BycHJwcmIwcmNQYHFyIVJyIHJwYjJiMGAScGBycjBzQjByYrAQc0IwcmJxQjIicUKwEiBzQjFAcVIhUXFCMWMwcXFSI1IgcVFyIdARcHFDsBNxU3FDM3FzcUMzcXNzMXNDMWMzcXMjcXNjUyFzI1FwcyHQEGDwEGBwYHBgcGBwYHFh0BFAcWFwYdARQXBh0BFBc2OwE3FTY3FDM3FTI3FjsBMjcWMzI3FDsBNxU3FzcyFzY3FzQ3FTYzMjcmNTQrASIHJwc0JwciJwYjJic0NzY3Njc0NzY3NjcnNzQnNjUnMyc0JxQXFCsBIicXFSM1BRUjNQUVIzUBFSMiPQEWFxUiFSMnNxcVIzWAEBIUFQsgLAgOBgYLCwsGBgsFGxYLCwsWBgYGBgYbGwUFBQsGCwsLBQoQCwsLCwsLCwsGBgYGC
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
7gBORC4AnvQugJ9ATkBSBESObgCmxC4ApHQuAKbELgClNC4ApQvuAKbELgCltC4ApYvuAKbELgCndC4Ap0vuAKbELgCn9C4Ap8vuAKbELgCodC4AqEvugKkAtoCmxESOboCpgLaApsREjm6AqsC2gKbERI5ugKzAtoCmxESOboCtQLaApsREjm6AsAC2gKbERI5uALaELgCxdC4AsUvugLJAtoCmxESOboCzQLaApsREjm6AtcC2gKbERI5ugLdAJABVRESOTAxATMyBxcyNxc3Mhc3MhU3Mxc2MxcWFzM3FhczNxYXBxYVBxYHJgczBicXBxQHFhcGBxYzFCMWFwcXByYHFh0BFCMWFwcWMwcUFwcXBxYPARYHBhUWFQcWByMWFwcXBicXDwEWMxUiBzIPARcHFhcVIyYjFRcVIxcVIxYXBxQXBgcWDwEmJyIHJicHJwcmNQcXBy8BIgcmIyIHJyYHJwc0JxQjJiciBycGBzUHIyY1BgcnBiMnBiMmNQcjJwYHJyIHNQcmIwcmJzY1IjUyNSc0MyYnNyc3Jjc2Myc3Jj8BJzQzJjcjNyY1Myc2MyY3NjUnNDMnNTYXJzc0NyYjNzQnNyczNyY9ATI3NicyNSInNTM3NCc3JjU3Jjc0NyY1NyI3NBc1NiM/ASc2NSI3MjUmNTI1NyI3FzcnFzcnMjc1JiM2NycyNyYnNjc2NRczNxU2HwE3FhU3FjMyNzIVNxcyFTYXFhc2Mxc2MzIXNxYXNjMyFzcXNhcUFzYXBzYzFhc3MxUzBSMGBwYHBgcGFRYVByIVFBcGFRYVFCMnBisBJxQHJiMGIxQXMzYzFhUHFxQHFjMGBzMVIhUGBycjBgcnIgcWOwEyNxYVBhUUMxUiBxQXFhcWMxc0MxcyNzIXNjsBNjc2NzY3NDc1NCcjIicHJiMHNCMHJisBIgcGKwEiNSInJic1NDc0JzY1NCc3NDcWMzI3FzY1MjUnNjUnIgcnBgcnFC
MmIyInNDcmNTQ3FzMyFzcXMjUyFzYzMjU0JyMVIzQnIhUjIiciByInJic3JjU3Jic1MzU2NzQ3MhcyFxUUOwEyFzMyNzMyNyYjJiMmJyYnJicjJyYnByY1JicUBRUjNRUyHQEUKwEnNQUVIzUHFSInNTIHIzU3FhcVIzUHFSM1FxUjNRcUIyY1BzIVIyInFxUjNQcVFCM1NAczNxQzBxUUMxUjJiM1FxQzFSM3BxQXIzUHFSM1FzMVIgc1FxUjNQUVIzUFFSM1BTMVIzU0AxUiFSM1NyI9ATcFFSM1A98GCwEjBQELEQkIHQUMBQwCCQwpBBcSEg8GDBAEDwUBDAELBwYBBQQBBgUGBwgEBgUECwEXASIBCwwFCwcGBQYIBgYNEAEHDAEGCwcFAQYFBAcRAQUFAQcOCBEBDAEGCw8DDgYLBhULBQsBEQcFBwYGASkREA0KFRlzDB0LIgULBiEKGQkOBigXWSURMzMGBRwXLgwgJQsMBRcSFgwFDAsGEQsGHAEiDAs/KQsGCx0UBgsMBQYECwYFBhABBgYFBwYBDA8GCQILDAYGBQMJCQEHCwYFAQUFAQYFCgYEBgoRAhERAQEWEQgICwEFDAsHBQEGBQcMARcBBgYBCwYGAQULDAEMAREBBQsBBQsBCwUGAQUFAQ0EHS8dCwYRDAYLFxEXEw8KGQUdUAUYEQEKHgQLDAYFDFYLHAsMDgkXFxcREQMlAQ8JF08BCwv+ig0LNUo8UgIkAwMbAwMDRgcFCBoRHgcDDQQoKzwVJAcEBAcHAwcHDioVFAcKDRQYDQkLIjA7DAkJAwYrPmZtYxEDEAgeAwYGCCJ5Fjs3NSUlCQ4QEjkZHSEGBxsePAgJGzUiCiUhEwEHBAQEC1MHAwgGF4YaAwMDBzUHMgZUBBISGwsEBBgUIgkLHhgGBwYyIigDBwoEEAcFBRLLCQoKEgcHBAMSEQwWW0AaFAoGKQlrDitAGAgGCAkTCQQWLkchJhc
UEC0QKFMLAWkJBgYOA/4uCY0FAgc5DQMKUBEhBh0HRAcKTQcDBgF/BxsHIQoHBAQUDRkGXg4UA5oDBy4EBwoIEHwGAdUK/f8KAkcJEAcKCgMDA/7GCgb2EQEFBgsSBQYGBgsBDAELDAEFFy6ODAYRAgoBLgYBHSIOCREBHFAiBjkMHAEMAh0CCgUMFxEcEhwDWQsMOSQPIwIJCwwCChwxHwlCIh0GAQwuHBILCxILIlsXAQsGBiMFCwaJEhwGCycMCwwcDAEFDAErBhABCwULBgEjCgYQBwIVDAQIEAYSAQoGDwUFBQEFBQsMBQYFBgYFBwsLBg8GCwcGAVcLBgsLFwYyGQsMHCYOERwiChMFSwZiPhEMBQwcUSIWEQYGHREGAQwXDAo0HQQeCzQ+AQsGCx8mCxIFBgwLJwELIh4cDAoKDRcMCwEMBgscEgsGBgUBCwsMFwEdHQEdCwsXIwsGHQUBHCAGCAgGCwYGAQYLBgYQDAoGBQIGCwELAQUGBQYJAQwFBgoGBQEICQUBBgsBCBERyQcNEzBWGR0wBgQGuRUdDQs1BysDAwMEAwQUQAYNDCAQBwMHLygUCgQHCQMGBAQHWwoOCUMYBgoDbal1Ni8DAwMDAwMjEwYzHWsQmBQRBAIGBAQEBAaCUQQiHyoHERcKDi0LFkEVDwgDAwMECSwXKgEHBwQFBgcDAzYEBjsMHgYDBwMDBwQEIhUtBwQGDAwDByoLPTELBxoKBwSICx0VKIYsBgcKOVtJFBhMLAMYAxgKBwIIAwQKYQsLQAcKBhAHqA0NawMHAw0DBwUCAwMDBAQ9AgIJBwUFRgcHGAMDBwIHAwUFBAQHDQcDFA4EDQQRAwoOGA4KChsDCgoNBAQsCgrTCgosDQcG/a0LDAYGBAMHFwoKAAAAAAAAAAAAAYgAAAGIAAABiAAAAYgAABYUAAAWFAAAFhQAACJYAAAiWAAALRAAADHMAAAxzAAAMcwAADHMAAA3CAAA
O/AAAEWkAABJSAAASUgAAFcMAABkeAAAclgAAH14AACKXAAAlLwAAKh0AAC2kAAAyKAAANREAADURAAA1EQAANREAADURAAA1EQAAOW0AADltAAA/MQAAQ1wAAEeLAABMiwAAUXgAAFQYAABYvgAAW9oAAF+IAABiogAAZagAAGoqAABs7AAAb54AAHNKAAB3iQAAej4AAH8gAACBoQAAhHcAAIhAAACLuwAAj6QAAJIuAACUuwAAmAoAAJgKAACYCgAAmAoAAJgKAACYCgAAmAoAAJ3OAACh+QAApigAAKsoAACwFQAAsrUAALdbAAC6dwAAviUAAME/AADERQAAyMcAAMuJAADOOwAA0ecAANYmAADY2wAA3b0AAOA+AADjFAAA5t0AAOpYAADuQQAA8MsAAPNYAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA
9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA9qcAAPanAAD2pwAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAPqlAAD6pQAA+qUAAAALgIuAAEAAAAAAAAAIAAAAAEAAAAAAAEADgAgAAEAAAAAAAIABwAuAAEAAAAAAAMAGwA1AAEAAAAAAAQADgBQAAEAAAAAAAUALgBeAAEAAAAAAAYADACMAAEAAAAAAAkABgCYAAEAAAAAAAoAPwCeAAEAAAAAAAwAEADdAAEAAAAAAA0AGgDtAAMAAQQDAAIADAEHAAMAAQQFAAIAEAETAAMAAQQGAAIADAEjAAMAAQQHAAIAEAEvAAMAAQQIAAIAEAE/AAMAAQQJAAAAQAFPAAMAAQQJAAEAHAGPAAMAAQQJAAIADgGrAAMAAQQJAAMANgG5AAMAAQQJAAQAHAHvAAMAAQQJAAUAXAILAAMAAQQJAAYAGAJnAAMAAQQJAAkADAJ/AAMAAQQJAAoAfgKLAAMAAQQJAAwAIAMJAAMAAQQJAA0ANAMpAAMAAQQKAAIADANdAAMAAQQLAAIAEANpAAMAAQQMAAIADAN5AAMAAQQOAAIADAOFAAMAAQQQAAIADgORAAMAAQQTAAIAEgOfAAMAAQQUAAIADAOxAAMAAQQVAAIAEAO9AAMAAQQWAAIADAPNAAMAAQQZAAIADgPZAAMAAQQbAAIAEAPnAAMAAQQdAAIADAP3AAMAAQQfAAIADAQDAAMAAQQkAAIADgQPAAMAAQQtAAIADgQdAAMAAQgKAAIADAQrAAMAAQgWAAIADAQ3AAMAAQwKAAIADARDAAMAAQwMAAIADARPSW1hZ2V4IDIwMTguIEFsbCBSaWdodHMgUmVzZXJ2ZWRXaGl0ZSBPbiBCbGFja1JlZ3VsYXJXaG
l0ZSBPbiBCbGFjazpWZXJzaW9uIDEuMDBXaGl0ZSBPbiBCbGFja1ZlcnNpb24gMS4wMCBOb3ZlbWJlciA2LCAyMDE3LCBpbml0aWFsIHJlbGVhc2VXaGl0ZU9uQmxhY2tJTUFHRVhUaGlzIGZvbnQgd2FzIGNyZWF0ZWQgdXNpbmcgRm9udENyZWF0b3IgNi41IGZyb20gSGlnaC1Mb2dpYy5jb21pbWFnZXgtZm9udHMuY29tRnJlZSBmb3IgcGVyc29uYWwgdXNlIE9OTFkATgBvAHIAbQBhAGwAbwBiAHkBDQBlAGoAbgDpAG4AbwByAG0AYQBsAFMAdABhAG4AZABhAHIAZAOaA7EDvQO/A70DuQO6A6wASQBtAGEAZwBlAHgAIAAyADAAMQA4AC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAFcAaABpAHQAZQAgAE8AbgAgAEIAbABhAGMAawBSAGUAZwB1AGwAYQByAFcAaABpAHQAZQAgAE8AbgAgAEIAbABhAGMAawA6AFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwAFcAaABpAHQAZQAgAE8AbgAgAEIAbABhAGMAawBWAGUAcgBzAGkAbwBuACAAMQAuADAAMAAgAE4AbwB2AGUAbQBiAGUAcgAgADYALAAgADIAMAAxADcALAAgAGkAbgBpAHQAaQBhAGwAIAByAGUAbABlAGEAcwBlAFcAaABpAHQAZQBPAG4AQgBsAGEAYwBrAEkATQBBAEcARQBYAFQAaABpAHMAIABmAG8AbgB0ACAAdwBhAHMAIABjAHIAZQBhAHQAZQBkACAAdQBzAGkAbgBnACAARgBvAG4AdABDAHIAZQBhAHQAbwByACAANgAuADUAIABmAHIAbwBtACAASABpAGcAaAAtAEwAbwBnAGkAYwAuAGMAbwBtAGkAbQBhAGcAZQB4AC0AZgBvAG4AdABzAC4
AYwBvAG0ARgByAGUAZQAgAGYAbwByACAAcABlAHIAcwBvAG4AYQBsACAAdQBzAGUAIABPAE4ATABZAE4AbwByAG0AYQBsAE4AbwByAG0AYQBhAGwAaQBOAG8AcgBtAGEAbABOAG8AcgBtAOEAbABOAG8AcgBtAGEAbABlAFMAdABhAG4AZABhAGEAcgBkAE4AbwByAG0AYQBsAE4AbwByAG0AYQBsAG4AeQBOAG8AcgBtAGEAbAQeBDEESwRHBD0ESwQ5AE4AbwByAG0A4QBsAG4AZQBOAG8AcgBtAGEAbABOAG8AcgBtAGEAbABOAGEAdgBhAGQAbgBvAEEAcgByAHUAbgB0AGEATgBvAHIAbQBhAGwATgBvAHIAbQBhAGwATgBvAHIAbQBhAGwATgBvAHIAbQBhAGwAAAAAAgAAAAAAAP8nAJYAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAABAgACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApACKANoAgwCTAQMBBACNAJcAiADDAN4BBQCeAKoA9QD0APYAogCtAMkAxwCuAGIAYwCQAGQAywBlAMgAygDPAMwAzQDOAOkAZgDTANAA0QCvAGcA8ACRANYA1ADVAGgA6wDtAIkAagBpAGsAbQBsAG4AoABvAHEAcAByAHMAdQB0AHYAdwDqAHgAegB5AHsAfQB8ALgAoQB/AH4AgACBAOwA7gC6ANcA2ADhAQYA2wDcAN0A
4ADZAN8AsgCzALYAtwDEALQAtQDFAIIAwgCHAKsAvgC/ALwA9wEHAQgBCQEKAIwAmACoAJoAmQDvAKUAkgCcAKcAlACVAQsBDAROVUxMB3VuaTAwQjIHdW5pMDBCMwd1bmkwMEI5B3VuaTAyQzkEbGlyYQZwZXNldGEERXVybwlhZmlpNjEzNTIHdW5pRjAwMQd1bmlGMDAyAAAAAAAB//8AAg==');
}
1
0

[tor-browser/tor-browser-82.0b7-10.0-1] Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
by gk@torproject.org 09 Oct '20
by gk@torproject.org 09 Oct '20
09 Oct '20
commit 725f1904a339cf8d54087f502e206fd577ab63cd
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Oct 9 12:55:35 2020 +0200
Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
---
browser/app/profile/000-tor-browser.js | 3 +++
browser/components/BrowserGlue.jsm | 14 ++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 9e5899eb17b0..bbfa6c1b9e5a 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -307,6 +307,9 @@ pref("security.enterprise_roots.enabled", false);
// Don't ping Mozilla for MitM detection, see bug 32321
pref("security.certerrors.mitm.priming.enabled", false);
+// Don't automatically enable enterprise roots, see bug 40166
+pref("security.certerrors.mitm.auto_enable_enterprise_roots", false);
+
// Disable the language pack signing check for now on macOS, see #31942
#ifdef XP_MACOSX
pref("extensions.langpacks.signatures.required", false);
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index c433bfbfc111..9646913cfcfe 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -1362,6 +1362,20 @@ BrowserGlue.prototype = {
// handle any UI migration
this._migrateUI();
+ // Clear possibly auto enabled enterprise_roots prefs (see bug 40166)
+ if (
+ !Services.prefs.getBoolPref(
+ "security.certerrors.mitm.auto_enable_enterprise_roots"
+ ) &&
+ Services.prefs.getBoolPref(
+ "security.enterprise_roots.auto-enabled",
+ false
+ )
+ ) {
+ Services.prefs.clearUserPref("security.enterprise_roots.enabled");
+ Services.prefs.clearUserPref("security.enterprise_roots.auto-enabled");
+ }
+
if (!Services.prefs.prefHasUserValue(PREF_PDFJS_ISDEFAULT_CACHE_STATE)) {
PdfJs.checkIsDefault(this._isNewProfile);
}
1
0

[tor-browser/tor-browser-78.3.0esr-10.5-1] Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
by gk@torproject.org 09 Oct '20
by gk@torproject.org 09 Oct '20
09 Oct '20
commit d77b33abe49d891f86692cdf3f2d1b715db1d8bf
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Oct 9 12:55:35 2020 +0200
Bug 40166: Disable security.certerrors.mitm.auto_enable_enterprise_roots
---
browser/app/profile/000-tor-browser.js | 3 +++
browser/components/BrowserGlue.jsm | 14 ++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 278c368c823c..85e9ae449ce8 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -321,6 +321,9 @@ pref("security.enterprise_roots.enabled", false);
// Don't ping Mozilla for MitM detection, see bug 32321
pref("security.certerrors.mitm.priming.enabled", false);
+// Don't automatically enable enterprise roots, see bug 40166
+pref("security.certerrors.mitm.auto_enable_enterprise_roots", false);
+
// Disable the language pack signing check for now on macOS, see #31942
#ifdef XP_MACOSX
pref("extensions.langpacks.signatures.required", false);
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 057a2121533c..3750230a250b 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -1319,6 +1319,20 @@ BrowserGlue.prototype = {
// handle any UI migration
this._migrateUI();
+ // Clear possibly auto enabled enterprise_roots prefs (see bug 40166)
+ if (
+ !Services.prefs.getBoolPref(
+ "security.certerrors.mitm.auto_enable_enterprise_roots"
+ ) &&
+ Services.prefs.getBoolPref(
+ "security.enterprise_roots.auto-enabled",
+ false
+ )
+ ) {
+ Services.prefs.clearUserPref("security.enterprise_roots.enabled");
+ Services.prefs.clearUserPref("security.enterprise_roots.auto-enabled");
+ }
+
if (!Services.prefs.prefHasUserValue(PREF_PDFJS_ISDEFAULT_CACHE_STATE)) {
PdfJs.checkIsDefault(this._isNewProfile);
}
1
0

[tor-browser/tor-browser-78.3.0esr-10.5-1] Merge remote-tracking branch 'gitlab/merge-requests/61' into tor-browser-78.3.0esr-10.5-1
by gk@torproject.org 09 Oct '20
by gk@torproject.org 09 Oct '20
09 Oct '20
commit 45bb9fefadd6817971f92261b541a68d272daf4b
Merge: e2616e0337ff d77b33abe49d
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 13:04:34 2020 +0000
Merge remote-tracking branch 'gitlab/merge-requests/61' into tor-browser-78.3.0esr-10.5-1
browser/app/profile/000-tor-browser.js | 3 +++
browser/components/BrowserGlue.jsm | 14 ++++++++++++++
2 files changed, 17 insertions(+)
1
0

[tor-browser/tor-browser-82.0b7-10.0-1] squash! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 09 Oct '20
by gk@torproject.org 09 Oct '20
09 Oct '20
commit 6889b3ab842285b9ce46bed72d6cbdfb1e72ea9c
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 07:19:56 2020 +0000
squash! TB4: Tor Browser's Firefox preference overrides.
Bug 40140: Videos stop working with Tor Browser 10.0 on Windows
---
browser/app/profile/000-tor-browser.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 06e9e17086f8..9e5899eb17b0 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -334,6 +334,13 @@ pref("browser.urlbar.update1.searchTips", false);
// is only reported via telemetry (which is disabled).
pref("corroborator.enabled", false);
+// Having the RDD Opus option enabled on Windows breaks videos for us.
+// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
+// tor-browser#40140.
+#ifdef XP_WIN
+pref"media.rdd-opus.enabled", false);
+#endif
+
// Onboarding.
pref("browser.onboarding.tourset-version", 5);
pref("browser.onboarding.newtour", "welcome,privacy,tor-network-9.0,circuit-display,security,expect-differences,onion-services,learn-more");
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-2] squash! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 09 Oct '20
by gk@torproject.org 09 Oct '20
09 Oct '20
commit 46a23f6cf3d28222399d6781bee72d0aec1cbf55
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 07:19:56 2020 +0000
squash! TB4: Tor Browser's Firefox preference overrides.
Bug 40140: Videos stop working with Tor Browser 10.0 on Windows
---
browser/app/profile/000-tor-browser.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 304443230cf0..e1e79f15a5ea 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -350,6 +350,13 @@ pref("browser.urlbar.update1.searchTips", false);
// is only reported via telemetry (which is disabled).
pref("corroborator.enabled", false);
+// Having the RDD Opus option enabled on Windows breaks videos for us.
+// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
+// tor-browser#40140.
+#ifdef XP_WIN
+pref"media.rdd-opus.enabled", false);
+#endif
+
// Onboarding.
pref("browser.onboarding.tourset-version", 5);
pref("browser.onboarding.newtour", "welcome,privacy,tor-network-9.0,circuit-display,security,expect-differences,onion-services,learn-more");
1
0

[tor-browser/tor-browser-78.3.0esr-10.5-1] squash! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 09 Oct '20
by gk@torproject.org 09 Oct '20
09 Oct '20
commit e2616e0337ff24c9e18d2e15c3e9d1b56422f2f5
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 9 07:19:56 2020 +0000
squash! TB4: Tor Browser's Firefox preference overrides.
Bug 40140: Videos stop working with Tor Browser 10.0 on Windows
---
browser/app/profile/000-tor-browser.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 278c368c823c..a1f96251259e 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -348,6 +348,13 @@ pref("browser.urlbar.update1.searchTips", false);
// is only reported via telemetry (which is disabled).
pref("corroborator.enabled", false);
+// Having the RDD Opus option enabled on Windows breaks videos for us.
+// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1667360 and
+// tor-browser#40140.
+#ifdef XP_WIN
+pref"media.rdd-opus.enabled", false);
+#endif
+
// Onboarding.
pref("browser.onboarding.tourset-version", 5);
pref("browser.onboarding.newtour", "welcome,privacy,tor-network-9.0,circuit-display,security,expect-differences,onion-services,learn-more");
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-2] fixup! Bug 10760: Integrate TorButton to TorBrowser core
by sysrqb@torproject.org 09 Oct '20
by sysrqb@torproject.org 09 Oct '20
09 Oct '20
commit 98575e43d350114d3725fcb199755b472298c503
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 02:35:35 2020 +0000
fixup! Bug 10760: Integrate TorButton to TorBrowser core
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index 4e67ee2ef26e..88640a08733b 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit 4e67ee2ef26e28da0f02a0e43e22a61ee33c6d4d
+Subproject commit 88640a08733bd28d359e2327ecc813391ca7f705
1
0

09 Oct '20
commit 3008e828d540c59afb8ded6d54772e89fd5d64ac
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 03:11:19 2020 +0000
Release preparations for 0.2.26
Translations update and version bump
---
src/chrome/locale/fi/network-settings.dtd | 2 +-
src/chrome/locale/fr/network-settings.dtd | 2 +-
src/chrome/locale/fr/torlauncher.properties | 6 +-
src/chrome/locale/ga-IE/network-settings.dtd | 6 +-
src/chrome/locale/hr/torlauncher.properties | 18 ++--
src/chrome/locale/ko/network-settings.dtd | 16 +--
src/chrome/locale/ko/torlauncher.properties | 2 +-
src/chrome/locale/ms/network-settings.dtd | 34 +++---
src/chrome/locale/ms/torlauncher.properties | 2 +-
src/chrome/locale/nl/network-settings.dtd | 2 +-
src/chrome/locale/pt-BR/network-settings.dtd | 6 +-
src/chrome/locale/pt-BR/torlauncher.properties | 4 +-
src/chrome/locale/ru/network-settings.dtd | 56 +++++-----
src/chrome/locale/ru/torlauncher.properties | 106 +++++++++---------
src/chrome/locale/sq/network-settings.dtd | 80 +++++++-------
src/chrome/locale/sq/torlauncher.properties | 100 ++++++++---------
src/chrome/locale/sw/network-settings.dtd | 26 ++---
src/chrome/locale/sw/torlauncher.properties | 144 ++++++++++++-------------
src/chrome/locale/zh-TW/torlauncher.properties | 4 +-
src/install.rdf | 2 +-
20 files changed, 309 insertions(+), 309 deletions(-)
diff --git a/src/chrome/locale/fi/network-settings.dtd b/src/chrome/locale/fi/network-settings.dtd
index 51cc764..e1e2f04 100644
--- a/src/chrome/locale/fi/network-settings.dtd
+++ b/src/chrome/locale/fi/network-settings.dtd
@@ -74,7 +74,7 @@ Tässä saattaa kestää muutama minuutti.">
<!ENTITY torPreferences.provideBridge "Tarjoa silta">
<!ENTITY torPreferences.advanced "Lisätietoja">
<!ENTITY torPreferences.advancedDescription "Määritä kuinka Tor-selain yhdistää internetiin.">
-<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Pilkulla erotetut arvot">
<!ENTITY torPreferences.requestBridgeDialogTitle "Pyydä siltaa">
<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Yhdistetään BridgeDB:hen. Odota hetki.">
<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Ratkaise CAPTCHA jotta voit pyytää sillan.">
diff --git a/src/chrome/locale/fr/network-settings.dtd b/src/chrome/locale/fr/network-settings.dtd
index 8e2c4aa..642634f 100644
--- a/src/chrome/locale/fr/network-settings.dtd
+++ b/src/chrome/locale/fr/network-settings.dtd
@@ -49,7 +49,7 @@
<!ENTITY torsettings.useBridges.label "Saisir des renseignements de pont provenant d’une source fiable">
<!ENTITY torsettings.useBridges.placeholder "type adresse:port (un par ligne)">
-<!ENTITY torsettings.copyLog "Copier le journal Tor dans le presse-papiers">
+<!ENTITY torsettings.copyLog "Copier le journal de Tor dans le presse-papiers">
<!ENTITY torsettings.proxyHelpTitle "Aide sur les mandataires">
<!ENTITY torsettings.proxyHelp1 "Un mandataire local peut être nécessaire lors d’une connexion par un réseau d’entreprise, d’école ou d’université. Si vous n’êtes pas certain si un mandataire est nécessaire, vérifiez les paramètres Internet d’un autre navigateur ou les paramètres réseau de votre système.">
diff --git a/src/chrome/locale/fr/torlauncher.properties b/src/chrome/locale/fr/torlauncher.properties
index bcf84c7..f5c96c7 100644
--- a/src/chrome/locale/fr/torlauncher.properties
+++ b/src/chrome/locale/fr/torlauncher.properties
@@ -4,7 +4,7 @@
torlauncher.error_title=Lanceur Tor
torlauncher.tor_exited_during_startup=Tor s’est fermé pendant le démarrage. Cela peut être dû à une erreur dans votre fichier torrc, un bogue dans Tor ou dans un autre programme de votre système, ou encore à un matériel défectueux. Jusqu’à ce que vous corrigiez le problème sous-jacent et redémarriez Tor, le Navigateur Tor ne démarrera pas.
-torlauncher.tor_exited=Tor s’est fermé de manière imprévue. Cela peut être dû à un bogue dans Tor même, un autre programme dans votre système ou un matériel défectueux. Jusqu’à ce que vous redémarriez Tor, le Navigateur Tor ne pourra atteindre aucun site. Si le problème persiste, veuillez envoyer une copie de votre journal Tor à l’équipe de soutien.
+torlauncher.tor_exited=Tor s’est fermé de manière imprévue. Cela peut être dû à un bogue dans Tor même, un autre programme dans votre système ou un matériel défectueux. Jusqu’à ce que vous redémarriez Tor, le Navigateur Tor ne pourra atteindre aucun site. Si le problème persiste, veuillez envoyer une copie de votre journal de Tor à l’équipe de soutien.
torlauncher.tor_exited2=Redémarrer Tor ne fermera pas les onglets de votre navigateur.
torlauncher.tor_controlconn_failed=Impossible de se connecter au port de contrôle de Tor.
torlauncher.tor_failed_to_start=Échec de démarrage de Tor.
@@ -23,7 +23,7 @@ torlauncher.failed_to_get_settings=Impossible de récupérer les paramètres de
torlauncher.failed_to_save_settings=Impossible d’enregistrer les paramètres de Tor.\n\n%S
torlauncher.ensure_tor_is_running=Veuillez vous assurer que Tor fonctionne.
-torlauncher.error_proxy_addr_missing=Vous devez indiquer une adresse IP ou un nom d'hôte et un numéro de port pour que Tor puisse utiliser un mandataire afin d’accéder à Internet.
+torlauncher.error_proxy_addr_missing=Vous devez indiquer une adresse IP ou un nom d’hôte et un numéro de port pour que Tor puisse utiliser un mandataire afin d’accéder à Internet.
torlauncher.error_proxy_type_missing=Vous devez choisir le type de mandataire.
torlauncher.error_bridges_missing=Vous devez spécifier un ou plusieurs ponts.
torlauncher.error_default_bridges_type_missing=Vous devez sélectionner un type de transport pour les ponts fournis.
@@ -51,7 +51,7 @@ torlauncher.done=Terminé
torlauncher.forAssistance=Pour de l’assistance, contacter %S
torlauncher.forAssistance2=Pour de l’assistance, visiter %S
-torlauncher.copiedNLogMessages=La copie est terminée. %S messages du journal Tor sont prêts à être collés dans un éditeur de texte ou dans un courriel.
+torlauncher.copiedNLogMessages=La copie est terminée. %S messages du journal de Tor sont prêts à être collés dans un éditeur de texte ou dans un courriel.
torlauncher.bootstrapStatus.starting=Démarrage
torlauncher.bootstrapStatus.conn_pt=Connexion au pont
diff --git a/src/chrome/locale/ga-IE/network-settings.dtd b/src/chrome/locale/ga-IE/network-settings.dtd
index 1bb82b0..0250eb0 100644
--- a/src/chrome/locale/ga-IE/network-settings.dtd
+++ b/src/chrome/locale/ga-IE/network-settings.dtd
@@ -67,13 +67,13 @@
<!ENTITY torPreferences.torSettingsDescription "Seolann Brabhsálaí Tor do chuid tráchta thar líonra Tor, líonra faoi stiúir na mílte oibrí deonach timpeall an domhain." >
<!ENTITY torPreferences.learnMore "Tuilleadh Eolais">
<!ENTITY torPreferences.bridges "Droichid">
-<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.bridgesDescription "Cabhraíonn droichid leat teacht ar líonra Tor ó áiteanna ina bhfuil cosc ar Tor. Seans go bhfeidhmeodh droichead amháin níos fearr ná cinn eile, ag brath ar an áit ina bhfuil tú.">
<!ENTITY torPreferences.useBridge "Úsáid droichead">
<!ENTITY torPreferences.requestNewBridge "Iarr Droichead Nua...">
<!ENTITY torPreferences.provideBridge "Soláthair droichead">
<!ENTITY torPreferences.advanced "Ardroghanna">
-<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
-<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.advancedDescription "Cumraigh an tslí a gceanglaíonn Brabhsálaí Tor leis an Idirlíon.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Luachanna camógdheighilte">
<!ENTITY torPreferences.requestBridgeDialogTitle "Iarr Droichead">
<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Ag dul i dteagmháil le BridgeDB. Fan nóiméad.">
<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Réitigh an CAPTCHA le droichead a iarraidh.">
diff --git a/src/chrome/locale/hr/torlauncher.properties b/src/chrome/locale/hr/torlauncher.properties
index 98f60eb..aff6162 100644
--- a/src/chrome/locale/hr/torlauncher.properties
+++ b/src/chrome/locale/hr/torlauncher.properties
@@ -69,15 +69,15 @@ torlauncher.bootstrapStatus.loading_keys=Učitavanje certifikata autoriteta
torlauncher.bootstrapStatus.requesting_descriptors=Zahtjevanje informacija o releju
torlauncher.bootstrapStatus.loading_descriptors=Učitavanje informacija o releju
torlauncher.bootstrapStatus.enough_dirinfo=Gotovo učitavanje informacija o releju
-torlauncher.bootstrapStatus.ap_conn_pt=Gradnja lanaca: Povezivanje s mostom
-torlauncher.bootstrapStatus.ap_conn_done_pt=Gradnja lanaca: Povezano s mostom
-torlauncher.bootstrapStatus.ap_conn_proxy=Gradnja lanaca: Povezivanje s poslužiteljem
-torlauncher.bootstrapStatus.ap_conn_done_proxy=Gradnja lanaca: Povezano s poslužiteljem
-torlauncher.bootstrapStatus.ap_conn=Gradnja lanaca: Povezivanje s Tor relejem
-torlauncher.bootstrapStatus.ap_conn_done=Gradnja lanaca: Povezano s Tor relejem
-torlauncher.bootstrapStatus.ap_handshake=Gradnja lanaca: Pregovaranje s Tor relejem
-torlauncher.bootstrapStatus.ap_handshake_done=Gradnja lanaca: Gotovo pregovaranje s Tor relejem
-torlauncher.bootstrapStatus.circuit_create=Gradnja lanaca: Uspostavljanje Tor lanca
+torlauncher.bootstrapStatus.ap_conn_pt=Gradnja sklopova: Povezivanje s mostom
+torlauncher.bootstrapStatus.ap_conn_done_pt=Gradnja sklopova: Povezano s mostom
+torlauncher.bootstrapStatus.ap_conn_proxy=Gradnja sklopova: Povezivanje s poslužiteljem
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Gradnja sklopova: Povezano s poslužiteljem
+torlauncher.bootstrapStatus.ap_conn=Gradnja sklopova: Povezivanje s Tor relejem
+torlauncher.bootstrapStatus.ap_conn_done=Gradnja sklopova: Povezano s Tor relejem
+torlauncher.bootstrapStatus.ap_handshake=Gradnja sklopova: Pregovaranje s Tor relejem
+torlauncher.bootstrapStatus.ap_handshake_done=Gradnja sklopova: Gotovo pregovaranje s Tor relejem
+torlauncher.bootstrapStatus.circuit_create=Gradnja sklopova: Uspostavljanje Tor lanca
torlauncher.bootstrapStatus.done=Spojen na Tor mrežu!
torlauncher.bootstrapWarning.done=gotovo
diff --git a/src/chrome/locale/ko/network-settings.dtd b/src/chrome/locale/ko/network-settings.dtd
index bf2af2b..3b88cf1 100644
--- a/src/chrome/locale/ko/network-settings.dtd
+++ b/src/chrome/locale/ko/network-settings.dtd
@@ -63,21 +63,21 @@
<!-- #31286 about:preferences strings -->
<!ENTITY torPreferences.categoryTitle "바위 산">
-<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettings "Tor 설정">
<!ENTITY torPreferences.torSettingsDescription "Tor 브라우저는 전세계 수천명의 자원 봉사자에 의해 운영되는 Tor 네트워크와 당신을 연결합니다." >
<!ENTITY torPreferences.learnMore "더 알아보기">
<!ENTITY torPreferences.bridges "중계서버">
-<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
-<!ENTITY torPreferences.useBridge "Use a bridge">
+<!ENTITY torPreferences.bridgesDescription "브리지는 Tor가 차단 된 장소에서 Tor 네트워크에 액세스하는 데 도움이됩니다. 현재 위치에 따라 한 다리가 다른 다리보다 더 잘 작동 할 수 있습니다.">
+<!ENTITY torPreferences.useBridge "다리 사용">
<!ENTITY torPreferences.requestNewBridge "새로운 브릿지 요청하기">
<!ENTITY torPreferences.provideBridge "브릿지를 제공하세요">
<!ENTITY torPreferences.advanced "고급">
-<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
-<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.advancedDescription "Tor 브라우저가 인터넷에 연결하는 방법을 구성하십시오.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "쉼표로 구분 된 값">
<!ENTITY torPreferences.requestBridgeDialogTitle "브릿지 요청하기">
<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "브릿지DB에 연결하고 있으니, 잠시 기다려주세요.">
<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "브릿지를 요청하기 위해 CAPCHA를 풀어주세요.">
<!ENTITY torPreferences.requestBridgeErrorBadSolution "풀이가 맞지 않습니다. 다시 시도해주세요.">
-<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
-<!ENTITY torPreferences.viewLogs "View Logs…">
-<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
+<!ENTITY torPreferences.viewTorLogs "Tor 로그를 봅니다.">
+<!ENTITY torPreferences.viewLogs "로그보기 ...">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor 로그">
diff --git a/src/chrome/locale/ko/torlauncher.properties b/src/chrome/locale/ko/torlauncher.properties
index 2930e1c..5e63d5d 100644
--- a/src/chrome/locale/ko/torlauncher.properties
+++ b/src/chrome/locale/ko/torlauncher.properties
@@ -16,7 +16,7 @@ torlauncher.unable_to_start_tor=Tor를 시작할 수 없습니다.\n\n%S
torlauncher.tor_missing=Tor 실행 파일이 없습니다.
torlauncher.torrc_missing=torrc 파일이 사라졌으며 생성 할 수 없습니다.
torlauncher.datadir_missing=Tor 데이터 디렉토리가 존재하지 않으며 생성할 수 없습니다.
-torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created.
+torlauncher.onionauthdir_missing=Tor onion 인증 디렉토리가 존재하지 않으며 생성 할 수 없습니다.
torlauncher.password_hash_missing=해쉬 암호을 얻어오지 못 하였습니다.
torlauncher.failed_to_get_settings=Tor 설정을 찾을 수 없습니다.\n\n%S
diff --git a/src/chrome/locale/ms/network-settings.dtd b/src/chrome/locale/ms/network-settings.dtd
index 5e37095..5984d7a 100644
--- a/src/chrome/locale/ms/network-settings.dtd
+++ b/src/chrome/locale/ms/network-settings.dtd
@@ -28,16 +28,16 @@
<!ENTITY torsettings.useProxy.checkbox "Saya guna proksi untuk bersambung dengan Internet">
<!ENTITY torsettings.useProxy.type "Jenis Proxy">
<!ENTITY torsettings.useProxy.type.placeholder "pilih sejenis proksi">
-<!ENTITY torsettings.useProxy.address "Address">
+<!ENTITY torsettings.useProxy.address "Alamat">
<!ENTITY torsettings.useProxy.address.placeholder "Alamat IP atau nama hos">
<!ENTITY torsettings.useProxy.port "Port">
-<!ENTITY torsettings.useProxy.username "Username">
+<!ENTITY torsettings.useProxy.username "Nama Pengguna">
<!ENTITY torsettings.useProxy.password "Kata Laluan">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Komputer ini melalui tembok api yang hanya membolehkan sambungan ke port tertentu">
-<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports">
+<!ENTITY torsettings.firewall.allowedPorts "Port Dibenarkan">
<!ENTITY torsettings.useBridges.checkbox "Tor dilarang penggunaannya di negara saya">
<!ENTITY torsettings.useBridges.default "Pilih satu titi terbina-dalam">
<!ENTITY torsettings.useBridges.default.placeholder "pilih satu titi">
@@ -63,21 +63,21 @@
<!-- #31286 about:preferences strings -->
<!ENTITY torPreferences.categoryTitle "Tor">
-<!ENTITY torPreferences.torSettings "Tor Settings">
-<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
-<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.torSettings "Tetapan Tor">
+<!ENTITY torPreferences.torSettingsDescription "Pelayar Tor menghala trafik anda ke dalam Rangkaian Tor, yang dioperasikan oleh beribu-ribu para sukarelawan di serata dunia." >
+<!ENTITY torPreferences.learnMore "Ketahui Lebih Lanjut">
<!ENTITY torPreferences.bridges "Jambatan, ataupun Bridges">
-<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
-<!ENTITY torPreferences.useBridge "Use a bridge">
+<!ENTITY torPreferences.bridgesDescription "Titi membantu anda capai Rangkaian Tor di kawasan yang mana Tor telah disekat. Bergantung pada kedudukan atau lokasi anda, titi ini mungkin berfungsi lebih baik berbanding titi-titi yang lain.">
+<!ENTITY torPreferences.useBridge "Guna satu titi">
<!ENTITY torPreferences.requestNewBridge "Pinta satu Titi Baharu...">
-<!ENTITY torPreferences.provideBridge "Provide a bridge">
-<!ENTITY torPreferences.advanced "Advanced">
-<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
-<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
-<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
-<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!ENTITY torPreferences.provideBridge "Sediakan satu titi">
+<!ENTITY torPreferences.advanced "Lanjutan">
+<!ENTITY torPreferences.advancedDescription "Konfigur bagaimana Pelayar Tor bersambung dengan internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Nilai dipisah-tanda-koma">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Pohon Titi">
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Menghubungi BridgeDB. Tunggu Sebentar.">
<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Selesaikan CAPTCHA untuk meminta satu titi.">
<!ENTITY torPreferences.requestBridgeErrorBadSolution "Jawapan salah. Cuba sekali lagi.">
-<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
-<!ENTITY torPreferences.viewLogs "View Logs…">
-<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
+<!ENTITY torPreferences.viewTorLogs "Lihat log Tor.">
+<!ENTITY torPreferences.viewLogs "Lihat Log...">
+<!ENTITY torPreferences.torLogsDialogTitle "Log Tor">
diff --git a/src/chrome/locale/ms/torlauncher.properties b/src/chrome/locale/ms/torlauncher.properties
index 89232fa..ec97f57 100644
--- a/src/chrome/locale/ms/torlauncher.properties
+++ b/src/chrome/locale/ms/torlauncher.properties
@@ -16,7 +16,7 @@ torlauncher.unable_to_start_tor=Tidak dapat memulakan Tor.\n\n%S
torlauncher.tor_missing=Tor executable hilang.
torlauncher.torrc_missing=Fail torrc hilang dan tidak dapat dicipta.
torlauncher.datadir_missing=Direktori data Tor tidak wujud dan tidak dapat dicipta.
-torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created.
+torlauncher.onionauthdir_missing=Direktori pengesahihan onion Tor tidak wujud atau tidak dapat diciptakan.
torlauncher.password_hash_missing=Gagal untuk mendapatkan kata laluan hashes.
torlauncher.failed_to_get_settings=Gagal mendapatkan tetapan Tor.\n\n%S
diff --git a/src/chrome/locale/nl/network-settings.dtd b/src/chrome/locale/nl/network-settings.dtd
index aa8b25f..f00fee0 100644
--- a/src/chrome/locale/nl/network-settings.dtd
+++ b/src/chrome/locale/nl/network-settings.dtd
@@ -70,7 +70,7 @@
<!ENTITY torPreferences.bridgesDescription "Bridges helpen u toegang te krijgen tot het Tor-netwerk op plaatsen waar Tor is geblokkeerd. Afhankelijke van waar u zich bevindt, werkt de ene bridge mogelijk beter dan de andere.">
<!ENTITY torPreferences.useBridge "Een bridge gebruiken">
<!ENTITY torPreferences.requestNewBridge "Een nieuwe bridge aanvragen…">
-<!ENTITY torPreferences.provideBridge "Een bridge aanbieden">
+<!ENTITY torPreferences.provideBridge "Een bridge opgeven">
<!ENTITY torPreferences.advanced "Geavanceerd">
<!ENTITY torPreferences.advancedDescription "Configureren hoe Tor Browser verbinding maakt met het internet.">
<!ENTITY torPreferences.firewallPortsPlaceholder "Kommagescheiden waarden">
diff --git a/src/chrome/locale/pt-BR/network-settings.dtd b/src/chrome/locale/pt-BR/network-settings.dtd
index b1c40d8..e42d21e 100644
--- a/src/chrome/locale/pt-BR/network-settings.dtd
+++ b/src/chrome/locale/pt-BR/network-settings.dtd
@@ -31,8 +31,8 @@
<!ENTITY torsettings.useProxy.address "Endereço">
<!ENTITY torsettings.useProxy.address.placeholder "Endereço IP ou Servidor">
<!ENTITY torsettings.useProxy.port "Porta">
-<!ENTITY torsettings.useProxy.username "Nome de usuário">
-<!ENTITY torsettings.useProxy.password "Palavra-passe">
+<!ENTITY torsettings.useProxy.username "Usuário">
+<!ENTITY torsettings.useProxy.password "Senha">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
@@ -47,7 +47,7 @@
<!ENTITY torsettings.useBridges.captchaSubmit "Submeter">
<!ENTITY torsettings.useBridges.custom "Ofereça um ponte já conhecida">
<!ENTITY torsettings.useBridges.label "Inserir informações sobre a ponte a partir de uma fonte confiável">
-<!ENTITY torsettings.useBridges.placeholder "digite o endereço : port (um por linha)">
+<!ENTITY torsettings.useBridges.placeholder "digite o endereço : porta (um por linha)">
<!ENTITY torsettings.copyLog "Copiar o registro do Tor na área de transferência">
diff --git a/src/chrome/locale/pt-BR/torlauncher.properties b/src/chrome/locale/pt-BR/torlauncher.properties
index b43ea94..5da7e8f 100644
--- a/src/chrome/locale/pt-BR/torlauncher.properties
+++ b/src/chrome/locale/pt-BR/torlauncher.properties
@@ -14,7 +14,7 @@ torlauncher.tor_bootstrap_failed_details=%1$S falhou (%2$S).
torlauncher.unable_to_start_tor=Impossível iniciar Tor.
torlauncher.tor_missing=Falta o programa de execução de Tor.
-torlauncher.torrc_missing=O arquivo torrc está faltando e não pôde ser criado.
+torlauncher.torrc_missing=O arquivo torrc está ausente e não pôde ser criado.
torlauncher.datadir_missing=O diretório de dados Tor não existe e não pode ser criado.
torlauncher.onionauthdir_missing=O diretório de autenticação de onion do Tor não existe e não pôde ser criado.
torlauncher.password_hash_missing=Falha ao obter a senha criptografada.
@@ -86,7 +86,7 @@ torlauncher.bootstrapWarning.misc=variados
torlauncher.bootstrapWarning.resourcelimit=recursos insuficientes
torlauncher.bootstrapWarning.identity=identidade conflitante
torlauncher.bootstrapWarning.timeout=tempo limite da conexão excedido
-torlauncher.bootstrapWarning.noroute=sem rota para o host
+torlauncher.bootstrapWarning.noroute=sem rota para o hospedeiro
torlauncher.bootstrapWarning.ioerror=erro de leitura/gravação
torlauncher.bootstrapWarning.pt_missing=transportador plugável ausente
diff --git a/src/chrome/locale/ru/network-settings.dtd b/src/chrome/locale/ru/network-settings.dtd
index 03e4f61..980b887 100644
--- a/src/chrome/locale/ru/network-settings.dtd
+++ b/src/chrome/locale/ru/network-settings.dtd
@@ -1,16 +1,16 @@
<!ENTITY torsettings.dialog.title "Настройки сети Tor">
-<!ENTITY torsettings.wizard.title.default "Подключиться к Tor">
-<!ENTITY torsettings.wizard.title.configure "Сетевые настройки Tor">
-<!ENTITY torsettings.wizard.title.connecting "Создать подключение">
+<!ENTITY torsettings.wizard.title.default "Подключение к Tor">
+<!ENTITY torsettings.wizard.title.configure "Настройки сети Tor">
+<!ENTITY torsettings.wizard.title.connecting "Идет подключение">
<!-- For locale picker: -->
-<!ENTITY torlauncher.localePicker.title "Язык браузера Tor">
-<!ENTITY torlauncher.localePicker.prompt "Выберите язык.">
+<!ENTITY torlauncher.localePicker.title "Язык Tor Browser">
+<!ENTITY torlauncher.localePicker.prompt "Пожалуйста, выберите язык.">
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Нажмите "Подключиться", чтобы подключиться к Tor.">
-<!ENTITY torSettings.configurePrompt "Нажмите "Настроить", чтобы уточнить настройки сети, если вы находитесь в стране, запрещающей Tor (такие как Египет, Китай, Турция), или если вы подключаетесь из приватной сети, требующей прокси.">
+<!ENTITY torSettings.connectPrompt "Нажмите "Соединиться" для подключения к Tor.">
+<!ENTITY torSettings.configurePrompt "Нажмите "Настроить" для настройки сети. Это имеет смысл, если вы в стране, запрещающей Tor (например, Египет, Китай, Турция), или если вы подключаетесь из приватной сети, требующей прокси.">
<!ENTITY torSettings.configure "Настроить">
<!ENTITY torSettings.connect "Соединиться">
@@ -18,18 +18,18 @@
<!ENTITY torsettings.startingTor "Ожидание запуска Tor...">
<!ENTITY torsettings.restartTor "Перезапустить Tor">
-<!ENTITY torsettings.reconfigTor "Изменить конфигурацию">
+<!ENTITY torsettings.reconfigTor "Изменить настройки">
-<!ENTITY torsettings.discardSettings.prompt "Вы настроили мосты Tor или ввели локальные настройки прокси-сервера.  Для прямого подключения к сети Tor эти параметры должны быть удалены.">
+<!ENTITY torsettings.discardSettings.prompt "Вы настроили мосты Tor или локальный прокси-сервер. Для прямого подключения к сети Tor эти параметры нужно удалить.">
<!ENTITY torsettings.discardSettings.proceed "Удалить настройки и подключиться">
-<!ENTITY torsettings.optional "Необязательно">
+<!ENTITY torsettings.optional "Дополнительно">
<!ENTITY torsettings.useProxy.checkbox "Я использую прокси для подключения к интернету">
<!ENTITY torsettings.useProxy.type "Тип прокси">
<!ENTITY torsettings.useProxy.type.placeholder "выбор типа прокси">
<!ENTITY torsettings.useProxy.address "Адрес">
-<!ENTITY torsettings.useProxy.address.placeholder "IP-адрес или имя узла">
+<!ENTITY torsettings.useProxy.address.placeholder "IP-адрес или хост">
<!ENTITY torsettings.useProxy.port "Порт">
<!ENTITY torsettings.useProxy.username "Имя пользователя">
<!ENTITY torsettings.useProxy.password "Пароль">
@@ -38,28 +38,28 @@
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Мой брандмауэр разрешает подключения только к определенным портам">
<!ENTITY torsettings.firewall.allowedPorts "Разрешенные порты">
-<!ENTITY torsettings.useBridges.checkbox "Tor запрещён в моей стране">
+<!ENTITY torsettings.useBridges.checkbox "Tor заблокирован в моей стране">
<!ENTITY torsettings.useBridges.default "Выбрать встроенный мост">
<!ENTITY torsettings.useBridges.default.placeholder "выбор моста">
-<!ENTITY torsettings.useBridges.bridgeDB "Запросить мост от torproject.org">
+<!ENTITY torsettings.useBridges.bridgeDB "Запросить мост у torproject.org">
<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Введите символы с изображения">
-<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Перезагрузить защитный код">
-<!ENTITY torsettings.useBridges.captchaSubmit "Передать">
-<!ENTITY torsettings.useBridges.custom "Указать мост, который я знаю">
-<!ENTITY torsettings.useBridges.label "Введите информацию о мосте от доверенного источника.">
+<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Показать другую картинку">
+<!ENTITY torsettings.useBridges.captchaSubmit "ОК">
+<!ENTITY torsettings.useBridges.custom "Указать мост вручную">
+<!ENTITY torsettings.useBridges.label "Укажите данные моста из доверенного источника">
<!ENTITY torsettings.useBridges.placeholder "адрес:порт (по одному в строке)">
<!ENTITY torsettings.copyLog "Скопировать журнал Tor в буфер обмена">
<!ENTITY torsettings.proxyHelpTitle "Помощь по прокси">
-<!ENTITY torsettings.proxyHelp1 "Локальный прокси-сервер может понадобиться при подключении через сеть компаний, школ или университетов. Если вы не уверены в необходимости прокси-сервера, посмотрите настройки Интернета в другом браузере или проверьте сетевые настройки вашей системы.">
+<!ENTITY torsettings.proxyHelp1 "Локальный прокси-сервер может понадобиться при подключении через корпоративную, школьную или университетскую сеть. Если вы не уверены, нужен ли прокси, посмотрите сетевые настройки в другом браузере или проверьте сетевые настройки вашей системы.">
-<!ENTITY torsettings.bridgeHelpTitle "Помощь по ретрансляторам типа мост">
-<!ENTITY torsettings.bridgeHelp1 "Мосты - это непубличные реле, которые затрудняют блокировку соединений с сетью Tor.&#160 Каждый тип моста использует отличный от других метод, чтобы избежать блокировки цезорами. Мосты типа obfs делают ваш трафик похожим на случайный шум, в то время, как мосты типа meed имитируют подключение к службе, отличной от Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Из-за того, как именно страны пытаются блокировать Tor, определённые мосты работают в одних странах, но не работают в других.  Если вы не уверены в том, какие мосты сработает в вашей стране, посетите torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelpTitle "Помощь по мостам (ретрансляторам)">
+<!ENTITY torsettings.bridgeHelp1 "Мосты – непубличные точки-посредники (ретрансляторы), которые затрудняют попытки цензоров блокировать подключения к сети Tor. Каждый тип моста использует отличный от других метод для обхода блокировки. Мосты типа "obfs" делают ваш трафик похожим на случайный шум. Мосты типа "meek" имитируют подключение к сервису, отличному от Tor.">
+<!ENTITY torsettings.bridgeHelp2 "Разные страны по-разному пытаются блокировать Tor. Поэтому те или иные мосты работают в одних странах, но не работают в других. Если не уверены в том, какой мост сработает у вас в стране, посетите torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Пожалуйста, подождите, пока мы установим подключение к сети Tor.  Это может занять несколько минут.">
+<!ENTITY torprogress.pleaseWait "Пожалуйста, подождите, пока мы установим подключение к сети Tor. Это может занять несколько минут.">
<!-- #31286 about:preferences strings -->
<!ENTITY torPreferences.categoryTitle "Tor">
@@ -69,15 +69,15 @@
<!ENTITY torPreferences.bridges "Мосты">
<!ENTITY torPreferences.bridgesDescription "Мосты помогают получить доступ к сети Tor там, где он заблокирован. В зависимости от вашего местонахождения один мост может работать лучше другого.">
<!ENTITY torPreferences.useBridge "Использовать мост">
-<!ENTITY torPreferences.requestNewBridge "Запрос нового моста…">
+<!ENTITY torPreferences.requestNewBridge "Запросить новый мост…">
<!ENTITY torPreferences.provideBridge "Указать свой мост">
<!ENTITY torPreferences.advanced "Дополнительно">
-<!ENTITY torPreferences.advancedDescription "Настройка подключения Tor Browser к интернету.">
-<!ENTITY torPreferences.firewallPortsPlaceholder "Значения, разделённые запятыми">
+<!ENTITY torPreferences.advancedDescription "Настройте подключение Tor Browser к интернету.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Значения, разделенные запятыми">
<!ENTITY torPreferences.requestBridgeDialogTitle "Запрос моста">
<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Обращение к BridgeDB. Пожалуйста, подождите.">
-<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решите CAPTCHA для запроса моста.">
-<!ENTITY torPreferences.requestBridgeErrorBadSolution "Решение не является правильным. Попробуйте ещё раз.">
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решите CAPTCHA для запроса моста">
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Неправильно. Пожалуйста, попробуйте снова.">
<!ENTITY torPreferences.viewTorLogs "Просмотр журнала Tor">
-<!ENTITY torPreferences.viewLogs "Просмотр журнала…">
+<!ENTITY torPreferences.viewLogs "Смотреть журнал…">
<!ENTITY torPreferences.torLogsDialogTitle "Журнал Tor">
diff --git a/src/chrome/locale/ru/torlauncher.properties b/src/chrome/locale/ru/torlauncher.properties
index 543cb96..43f1920 100644
--- a/src/chrome/locale/ru/torlauncher.properties
+++ b/src/chrome/locale/ru/torlauncher.properties
@@ -3,32 +3,32 @@
torlauncher.error_title=Загрузчик Tor
-torlauncher.tor_exited_during_startup=Tor неожиданно завершил работу во время запуска. Это могло произойти из-за ошибки в файле torrc, ошибки в Tor или другой программе в вашей системе, а также из-за неисправности оборудования. Пока вы не устраните причину возникновения проблемы и не перезапустите Tor, Tor Browser не запустится.
-torlauncher.tor_exited=Tor неожиданно завершил работу. Это могло быть вызвано сбоем в самом Tor, другой программой или неисправностью компьютера. Пока Tor не будет перезапущен, просмотр веб-страниц через Tor Browser недоступен. Если проблема не устраняется, пожалуйста, отправьте копию ваших логов Tor нашей команде поддержки.
+torlauncher.tor_exited_during_startup=Tor неожиданно завершил работу при запуске. Это могло произойти из-за ошибки в файле torrc, ошибки в Tor или другой программе у вас в системе, а также из-за неисправного оборудования. Для запуска Tor Browser нужно устранить причину проблемы и перезагрузить Tor.
+torlauncher.tor_exited=Tor неожиданно завершил работу. Это могло быть вызвано сбоем в Tor, в другой программе, а также неисправностью компьютера. Чтобы загружать сайты через Tor Browser, нужно перезапустить Tor. Если проблема останется, пожалуйста, отправьте копию журнала (логов) Tor нашей команде поддержки.
torlauncher.tor_exited2=Перезапуск Тор не закроет вкладки браузера.
-torlauncher.tor_controlconn_failed=Невозможно соединиться с портом управления Tor.
-torlauncher.tor_failed_to_start=Невозможно запустить Tor.
-torlauncher.tor_control_failed=Не удалось установить связь с Tor.
-torlauncher.tor_bootstrap_failed=Тор не удалось установить подключение к сети Tor.
-torlauncher.tor_bootstrap_failed_details=%1$S неудачно (%2$S).
+torlauncher.tor_controlconn_failed=Ошибка соединения с контрольным портом Tor.
+torlauncher.tor_failed_to_start=Ошибка запуска Tor.
+torlauncher.tor_control_failed=Ошибка связи с Tor.
+torlauncher.tor_bootstrap_failed=Ошибка подключения к сети Tor.
+torlauncher.tor_bootstrap_failed_details=Ошибка %1$S (%2$S).
-torlauncher.unable_to_start_tor=Невозможно запустить Tor.\n\n%S
+torlauncher.unable_to_start_tor=Ошибка запуска Tor.\n\n%S
torlauncher.tor_missing=Исполняемый файл Tor отсутствует.
-torlauncher.torrc_missing=torrc файл отсутствует и не может быть создан.
-torlauncher.datadir_missing=Директория данных Tor не существует и не может быть создана.
-torlauncher.onionauthdir_missing=Каталог проверки подлинности Tor не существует и не может быть создан.
-torlauncher.password_hash_missing=Не удается получить хэшированный пароль.
+torlauncher.torrc_missing=Файл torrc отсутствует и не может быть создан.
+torlauncher.datadir_missing=Папка данных Tor отсутствует и не может быть создана.
+torlauncher.onionauthdir_missing=Папка проверки подлинности Tor отсутствует и не может быть создана.
+torlauncher.password_hash_missing=Ошибка получения хэшированного пароля.
-torlauncher.failed_to_get_settings=Не удается загрузить настройки Tor.\n\n%S
-torlauncher.failed_to_save_settings=Не удается сохранить настройки Tor.\n\n%S
-torlauncher.ensure_tor_is_running=Убедитесь, что Tor запущен.
+torlauncher.failed_to_get_settings=Ошибка загрузки настроек Tor.\n\n%S
+torlauncher.failed_to_save_settings=Ошибка сохранения настроек Tor.\n\n%S
+torlauncher.ensure_tor_is_running=Пожалуйста, убедитесь, что Tor запущен.
-torlauncher.error_proxy_addr_missing=Вы должны указать IP-адрес или имя хоста и порт, чтобы настроить Tor и использовать прокси для доступа в Интернет.
-torlauncher.error_proxy_type_missing=Необходимо выбрать тип прокси.
-torlauncher.error_bridges_missing=Необходимо указать один или несколько мостов.
-torlauncher.error_default_bridges_type_missing=Вы должны выбрать тип транспорта предопределенных мостов.
+torlauncher.error_proxy_addr_missing=Вы должны указать IP-адрес (или имя хоста) и порт, чтобы настроить Tor на работу через прокси.
+torlauncher.error_proxy_type_missing=Нужно выбрать тип прокси.
+torlauncher.error_bridges_missing=Нужно указать один или несколько мостов.
+torlauncher.error_default_bridges_type_missing=Нужно выбрать тип транспорта указанных мостов.
torlauncher.error_bridgedb_bridges_missing=Пожалуйста, запросите мост.
-torlauncher.error_bridge_bad_default_type=Предопределенные мосты не поддерживают тип транспорта %S. Пожалуйста, исправьте ваши настройки.
+torlauncher.error_bridge_bad_default_type=Нет мостов с поддержкой типа транспорта %S. Пожалуйста, измените настройки.
torlauncher.bridge_suffix.meek-amazon=(работает в Китае)
torlauncher.bridge_suffix.meek-azure=(работает в Китае)
@@ -37,10 +37,10 @@ torlauncher.request_a_bridge=Запрос моста…
torlauncher.request_a_new_bridge=Запрос нового моста…
torlauncher.contacting_bridgedb=Обращение к BridgeDB. Пожалуйста, подождите.
torlauncher.captcha_prompt=Решите CAPTCHA для запроса моста.
-torlauncher.bad_captcha_solution=Решение не является правильным. Попробуйте еще раз.
-torlauncher.unable_to_get_bridge=Не удалось получить мост из BridgeDB.\n\n%S
-torlauncher.no_meek=Этот браузер не настроен должным образом, что необходимо для получения мостов.
-torlauncher.no_bridges_available=В настоящее время мостов не имеется. Извините.
+torlauncher.bad_captcha_solution=Ошибка. Пожалуйста, попробуйте снова.
+torlauncher.unable_to_get_bridge=Ошибка получения моста из BridgeDB.\n\n%S
+torlauncher.no_meek=Этот браузер не настроен для meek (требуется для получения мостов).
+torlauncher.no_bridges_available=В настоящее время мостов нет. Извините.
torlauncher.connect=Соединиться
torlauncher.restart_tor=Перезапустить Tor
@@ -49,47 +49,47 @@ torlauncher.quit_win=Выход
torlauncher.done=Готово
torlauncher.forAssistance=Для помощи свяжитесь с %S
-torlauncher.forAssistance2=Посетите %S, чтобы получить помощь
+torlauncher.forAssistance2=Для помощи посетите %S
-torlauncher.copiedNLogMessages=Копирование завершено. %S собщение с логами Tor находятся в буфере обмена и могут быть вставлены в текстовый редактор или email.
+torlauncher.copiedNLogMessages=Копирование завершено. %S сообщений с логами Tor находятся в буфере обмена. Можно вставить их в текстовый редактор или email.
-torlauncher.bootstrapStatus.starting=Запускается
+torlauncher.bootstrapStatus.starting=Запуск
torlauncher.bootstrapStatus.conn_pt=Подключение к мосту
torlauncher.bootstrapStatus.conn_done_pt=Подключено к мосту
torlauncher.bootstrapStatus.conn_proxy=Подключение к прокси
torlauncher.bootstrapStatus.conn_done_proxy=Подключено к прокси
-torlauncher.bootstrapStatus.conn=Подключение к ретранслятору Tor
-torlauncher.bootstrapStatus.conn_done=Подключено к ретранслятору Tor
-torlauncher.bootstrapStatus.handshake=Обмен с ретранслятором Tor
-torlauncher.bootstrapStatus.handshake_done=Завершение обмена с ретранслятором Tor
-torlauncher.bootstrapStatus.onehop_create=Создание шифрованного соединения каталогa
+torlauncher.bootstrapStatus.conn=Подключение к узлу Tor
+torlauncher.bootstrapStatus.conn_done=Подключено к узлу Tor
+torlauncher.bootstrapStatus.handshake=Обмен данными с узлом Tor
+torlauncher.bootstrapStatus.handshake_done=Обмен данными с узлом Tor завершен
+torlauncher.bootstrapStatus.onehop_create=Создание шифрованного соединения
torlauncher.bootstrapStatus.requesting_status=Получение статуса сети
-torlauncher.bootstrapStatus.loading_status=Загрузка состояния сети
+torlauncher.bootstrapStatus.loading_status=Загрузка статуса сети
torlauncher.bootstrapStatus.loading_keys=Загрузка сертификатов
-torlauncher.bootstrapStatus.requesting_descriptors=Запрос информации ретранслятора
-torlauncher.bootstrapStatus.loading_descriptors=Загрузка информации ретранслятора
-torlauncher.bootstrapStatus.enough_dirinfo=Завершение загрузки информации ретранслятора
-torlauncher.bootstrapStatus.ap_conn_pt=Создание сети: Подключение к мосту
-torlauncher.bootstrapStatus.ap_conn_done_pt=Создание сети: Подключен к мосту
-torlauncher.bootstrapStatus.ap_conn_proxy=Создание сети: Подключение к прокси
-torlauncher.bootstrapStatus.ap_conn_done_proxy=Создание сети: Подключен к прокси
-torlauncher.bootstrapStatus.ap_conn=Создание сети: Подключение к ретранслятору Tor
-torlauncher.bootstrapStatus.ap_conn_done=Создание сети: Подключен к ретранслятору Tor
-torlauncher.bootstrapStatus.ap_handshake=Создание сети: Обмен с ретранслятором Tor
-torlauncher.bootstrapStatus.ap_handshake_done=Создание сети: Завершение обмена с ретранслятором Tor
-torlauncher.bootstrapStatus.circuit_create=Создание сети: Установка сети Tor
-torlauncher.bootstrapStatus.done=Подключен к сети Tor!
+torlauncher.bootstrapStatus.requesting_descriptors=Запрос данных об узле
+torlauncher.bootstrapStatus.loading_descriptors=Загрузка данных об узле
+torlauncher.bootstrapStatus.enough_dirinfo=Загрузка данных об узле завершена
+torlauncher.bootstrapStatus.ap_conn_pt=Создание цепочки: подключение к мосту
+torlauncher.bootstrapStatus.ap_conn_done_pt=Создание цепочки: подключено к мосту
+torlauncher.bootstrapStatus.ap_conn_proxy=Создание цепочки: подключение к прокси
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Создание цепочки: подключено к прокси
+torlauncher.bootstrapStatus.ap_conn=Создание цепочки: подключение к узлу Tor
+torlauncher.bootstrapStatus.ap_conn_done=Создание цепочки: подключено к узлу Tor
+torlauncher.bootstrapStatus.ap_handshake=Создание цепочки: обмен данными с узлом Tor
+torlauncher.bootstrapStatus.ap_handshake_done=Создание цепочки: обмен данными с узлом Tor завершен
+torlauncher.bootstrapStatus.circuit_create=Создание цепочки Tor
+torlauncher.bootstrapStatus.done=Подключено к сети Tor!
-torlauncher.bootstrapWarning.done=cделано
+torlauncher.bootstrapWarning.done=ok
torlauncher.bootstrapWarning.connectrefused=в подключении отказано
torlauncher.bootstrapWarning.misc=pазное
torlauncher.bootstrapWarning.resourcelimit=нехватка ресурсов
-torlauncher.bootstrapWarning.identity=несоответствие идентификации
+torlauncher.bootstrapWarning.identity=ошибка идентификации
torlauncher.bootstrapWarning.timeout=тайм-аут соединения
-torlauncher.bootstrapWarning.noroute=не указан путь к хосту
-torlauncher.bootstrapWarning.ioerror=ошибка чтения / записи
+torlauncher.bootstrapWarning.noroute=ошибка пути к хосту
+torlauncher.bootstrapWarning.ioerror=ошибка чтения/записи
torlauncher.bootstrapWarning.pt_missing=отсутствует подключаемый транспорт
-torlauncher.nsresult.NS_ERROR_NET_RESET=Соединение с сервером было потеряно.
-torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Не удалось подключиться к серверу.
-torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Не удалось подключиться к прокси.
+torlauncher.nsresult.NS_ERROR_NET_RESET=Соединение с сервером потеряно.
+torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Ошибка подключения к серверу.
+torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Ошибка подключения к прокси.
diff --git a/src/chrome/locale/sq/network-settings.dtd b/src/chrome/locale/sq/network-settings.dtd
index d40c31e..c280461 100644
--- a/src/chrome/locale/sq/network-settings.dtd
+++ b/src/chrome/locale/sq/network-settings.dtd
@@ -1,16 +1,16 @@
<!ENTITY torsettings.dialog.title "Rregullime Rrjeti Tor">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Konfigurimi i Rrjetit të Tor">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.wizard.title.default "Lidhu me Tor-in">
+<!ENTITY torsettings.wizard.title.configure "Rregullime Rrjeti Tor">
+<!ENTITY torsettings.wizard.title.connecting "Vendosje Lidhjeje">
<!-- For locale picker: -->
-<!ENTITY torlauncher.localePicker.title "Gjuha e Tor Browser">
-<!ENTITY torlauncher.localePicker.prompt "Ju lutemi zgjidhni një gjuhë.">
+<!ENTITY torlauncher.localePicker.title "Gjuha e Shfletuesit Tor">
+<!ENTITY torlauncher.localePicker.prompt "Ju lutemi, përzgjidhni një gjuhë.">
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
-<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
+<!ENTITY torSettings.connectPrompt "Që të lidheni me Tor-in, klikoni mbi “Lidhu”.">
+<!ENTITY torSettings.configurePrompt "Klikoni mbi “Formësoje” që të përimtoni rregullime rrjeti, nëse gjendeni në një vend që censuron Tor-in (bie fjala, Egjipt, Kinë, Turqi) ose nëse po lidheni nga një rrjet privat që lyp doemos një ndërmjetës.">
<!ENTITY torSettings.configure "Formësojeni">
<!ENTITY torSettings.connect "Lidhu">
@@ -18,16 +18,16 @@
<!ENTITY torsettings.startingTor "Po pritet që të niset Tor-i…">
<!ENTITY torsettings.restartTor "Riniseni Tor-in">
-<!ENTITY torsettings.reconfigTor "Rikonfiguroni">
+<!ENTITY torsettings.reconfigTor "Riformësojeni">
-<!ENTITY torsettings.discardSettings.prompt "Ju keni konfiguruar urat Tor ose keni futur konfigurimin e proxy-t.  Për të bërë një lidhje të drejtpërdrejtë tek rrjeti Tor, ky konfigurim duhet të hiqet.">
-<!ENTITY torsettings.discardSettings.proceed "Hiqeni Konfigurimin dhe Lidhuni">
+<!ENTITY torsettings.discardSettings.prompt "Keni formësuar ura Tor ose keni dhënë rregullime ndërmjetësi vendor.  Për të bërë një lidhje të drejtpërdrejtë me rrjetin Tor, këto rregullime duhet të hiqen.">
+<!ENTITY torsettings.discardSettings.proceed "Hiqi Rregullimet dhe Lidhu">
<!ENTITY torsettings.optional "Opsional">
<!ENTITY torsettings.useProxy.checkbox "Për t’u lidhur në Internet, unë përdor një ndërmjetës">
-<!ENTITY torsettings.useProxy.type "Proxy Type">
-<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!ENTITY torsettings.useProxy.type "Lloj Ndërmjetësi">
+<!ENTITY torsettings.useProxy.type.placeholder "përzgjidhni një lloj ndërmjetësi">
<!ENTITY torsettings.useProxy.address "Adresë">
<!ENTITY torsettings.useProxy.address.placeholder "Adresë IP ose emër strehë">
<!ENTITY torsettings.useProxy.port "Portë">
@@ -39,45 +39,45 @@
<!ENTITY torsettings.firewall.checkbox "Ky kompjuter kalon përmes një firewall-i, i cili lejon lidhje vetëm me disa porta.">
<!ENTITY torsettings.firewall.allowedPorts "Porta të Lejuara">
<!ENTITY torsettings.useBridges.checkbox "TOR censurohet në vendin tim">
-<!ENTITY torsettings.useBridges.default "Zgjidh një urë të paracaktuar">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.bridgeDB "Request a bridge from torproject.org">
-<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Enter the characters from the image">
-<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Get a new challenge">
+<!ENTITY torsettings.useBridges.default "Përzgjidhni një urë të brendshme">
+<!ENTITY torsettings.useBridges.default.placeholder "përzgjidhni një urë">
+<!ENTITY torsettings.useBridges.bridgeDB "Kërkoni një urë nga torproject.org">
+<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Jepni shenjat prej figure">
+<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Merrni një provë të re">
<!ENTITY torsettings.useBridges.captchaSubmit "Parashtroni">
-<!ENTITY torsettings.useBridges.custom "Mundëso një urë lidhëse që njoh">
+<!ENTITY torsettings.useBridges.custom "Furnizo një urë që njoh">
<!ENTITY torsettings.useBridges.label "Jepni të dhëna ure prej një burimi të besuar.">
<!ENTITY torsettings.useBridges.placeholder "shtypni adresë:portë (një për rresht)">
<!ENTITY torsettings.copyLog "Kopjo Regjistër Tor në Të papastër">
-<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
-<!ENTITY torsettings.proxyHelp1 "A local proxy might be needed when connecting through a company, school, or university network. If you are not sure whether a proxy is needed, look at the Internet settings in another browser or check your system's network settings.">
+<!ENTITY torsettings.proxyHelpTitle "Ndihmë për Ndërmjetës">
+<!ENTITY torsettings.proxyHelp1 "Kur bëhet lidhje përmes një rrjeti shoqërie, shkolle apo universiteti, mund të duhet një ndërmjetës vendor. Nëse s’jeni i sigurt nëse duhet apo jo një ndërmjetës, shihni rregullimet për Internet në një shfletues tjetër ose kontrolloni te rregullimet e rrjetit për sistemin tuaj.">
-<!ENTITY torsettings.bridgeHelpTitle "Bridge Relay Help">
-<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelpTitle "Ndihmë mbi Rele Ura">
+<!ENTITY torsettings.bridgeHelp1 "Urat janë rele jo të pranishme në lista, që e bëjnë më të vështirë bllokimin e lidhjeve me Rrjetin Tor.  Çdo lloj ure përdor një metodë të ndryshme për shmangie censurimi.  Ato me errësim e bëjnë trafikun tuaj të duket si zhurmë e parregullt, dhe ato të llojit “meek” e bëjnë trafikun tuaj të duket sikur po bëhet lidhje me shërbimin e synuar, në vend se me Tor-in.">
+<!ENTITY torsettings.bridgeHelp2 "Për shkak të mënyrave se si disa vende rreken të bllokojnë Tor-in, disa ura funksionojnë në disa nga vendet, por jo në të tjera.  Nëse s’jeni i sigurt se cilat ura funksionojnë në vendin tuaj, vizitoni torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Ju lutemi prisni derisa të vendosim një lidhje me rrjetin e Tor.  Kjo mund të kërkojë disa minuta.">
+<!ENTITY torprogress.pleaseWait "Ju lutemi, prisni, teksa vendosim një lidhje me rrjetin e Tor.  Kjo mund të kërkojë disa minuta.">
<!-- #31286 about:preferences strings -->
<!ENTITY torPreferences.categoryTitle "Tor">
-<!ENTITY torPreferences.torSettings "Tor Settings">
-<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
-<!ENTITY torPreferences.learnMore "Learn More">
-<!ENTITY torPreferences.bridges "Urat">
+<!ENTITY torPreferences.torSettings "Rregullime Tor">
+<!ENTITY torPreferences.torSettingsDescription "Shfletuesi Tor e kalon trafikun tuaj përmes Rrjetit Tor, i mbajtur në këmbë nga mijëra vullnetarë anembanë botës." >
+<!ENTITY torPreferences.learnMore "Mësoni Më Tepër">
+<!ENTITY torPreferences.bridges "Ura">
<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
-<!ENTITY torPreferences.useBridge "Use a bridge">
-<!ENTITY torPreferences.requestNewBridge "Request a New Bridge…">
-<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.useBridge "Përdorni një urë">
+<!ENTITY torPreferences.requestNewBridge "Kërkoni një Urë të Re…">
+<!ENTITY torPreferences.provideBridge "Furnizoni një urë">
<!ENTITY torPreferences.advanced "Të mëtejshme">
-<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
-<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
-<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
-<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
-<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
-<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
-<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
-<!ENTITY torPreferences.viewLogs "View Logs…">
-<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
+<!ENTITY torPreferences.advancedDescription "Formësoni se si lidhet në internet Shfletuesi Tor.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Vlera të ndara me presje">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Kërkoni Urë">
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Po lidhet me BridgeDB. Ju lutemi, Pritni.">
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Që të kërkoni një urë, zgjidhni CAPTCHA-n.">
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Zgjidhja s’është e saktë. Ju lutemi, riprovoni.">
+<!ENTITY torPreferences.viewTorLogs "Shihni regjistrat Tor.">
+<!ENTITY torPreferences.viewLogs "Shihni Regjistra…">
+<!ENTITY torPreferences.torLogsDialogTitle "Regjistra Tor">
diff --git a/src/chrome/locale/sq/torlauncher.properties b/src/chrome/locale/sq/torlauncher.properties
index 091148a..1020442 100644
--- a/src/chrome/locale/sq/torlauncher.properties
+++ b/src/chrome/locale/sq/torlauncher.properties
@@ -3,12 +3,12 @@
torlauncher.error_title=Nisës Tor-i
-torlauncher.tor_exited_during_startup=Tor exited during startup. This might be due to an error in your torrc file, a bug in Tor or another program on your system, or faulty hardware. Until you fix the underlying problem and restart Tor, Tor Browser will not start.
+torlauncher.tor_exited_during_startup=U dol nga Tor-i gjatë nisjes. Kjo mund të ketë ardhur nga një gabim në kartelën tuaj torrc, një e metë në Tor ose në një tjetër program në sistemin tuaj, ose nga hardware me defekt. Pa ndrequr problemin në fjalë dhe rinisur Tor-in, Shfletuesi Tor s’do të niset.
torlauncher.tor_exited=Tor-i reshti së funksionuari papritmas. Kjo mund të jetë për shkak të një të mete të vetë Tor-it, të një tjetër programi në sistemin tuaj, ose defekti në hardware. Derisa ta rinisni Tor-in, Shfletuesi Tor s’do të jetë në gjendje të hapë ndonjë sajt. Nëse problemi vijon, ju lutemi, dërgojini ekipit të asistencës një kopje të Regjistrit të Tor-it tuaj.
-torlauncher.tor_exited2=Rinisja e Tor s'do t'i mbyllë skedat e shfletuesit tuaj.
+torlauncher.tor_exited2=Rinisja e Tor-it s’do t’i mbyllë skedat e shfletuesit tuaj.
torlauncher.tor_controlconn_failed=S’u lidh dot me portë kontrolli Tor.
torlauncher.tor_failed_to_start=Tor-i s’arriti të niset.
-torlauncher.tor_control_failed=Dështim në marrjen në kontroll të Tor.
+torlauncher.tor_control_failed=S’u arri të merrej në kontroll Tor-i.
torlauncher.tor_bootstrap_failed=Tor-i s’arriti të vendosë lidhje me një rrjet Tor.
torlauncher.tor_bootstrap_failed_details=%1$S dështoi (%2$S).
@@ -26,21 +26,21 @@ torlauncher.ensure_tor_is_running=Ju lutemi, sigurohuni që Tor-i po xhiron.
torlauncher.error_proxy_addr_missing=Për ta formësuar Tor-in të përdorë një ndërmjetës për hyrje në Internet, duhet të përcaktoni një adresë IP ose emërstrehë, si edhe një numër porte.
torlauncher.error_proxy_type_missing=Duhet të përzgjidhni llojin e ndërmjetësit.
torlauncher.error_bridges_missing=Duhet të specifikoni një ose më shumë ura.
-torlauncher.error_default_bridges_type_missing=Duhet të përzgjidhni një lloj transport për urat e parashikuara
-torlauncher.error_bridgedb_bridges_missing=Please request a bridge.
-torlauncher.error_bridge_bad_default_type=S'ka ura të parashikuara, që kanë transport të llojit %S, të disponueshme. Ju lutemi ndreqni parametrat tuaj.
+torlauncher.error_default_bridges_type_missing=Duhet të përzgjidhni një lloj transporti për urat e furnizuara.
+torlauncher.error_bridgedb_bridges_missing=Ju lutemi, kërkoni një urë.
+torlauncher.error_bridge_bad_default_type=S’ka gati ura të furnizuara, që kanë transport të llojit %S. Ju lutemi, përimtoni rregullimet tuaja.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(funksionon në Kinë)
+torlauncher.bridge_suffix.meek-azure=(funksionon në Kinë)
-torlauncher.request_a_bridge=Request a Bridge…
-torlauncher.request_a_new_bridge=Request a New Bridge…
-torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait.
-torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge.
-torlauncher.bad_captcha_solution=The solution is not correct. Please try again.
-torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S
-torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges.
-torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
+torlauncher.request_a_bridge=Kërkoni një Urë…
+torlauncher.request_a_new_bridge=Kërkoni një Urë të Re…
+torlauncher.contacting_bridgedb=Po kontaktohet BridgeDB. Ju lutemi, pritni.
+torlauncher.captcha_prompt=Që të kërkoni një urë, zgjidhni CAPTCHA-n.
+torlauncher.bad_captcha_solution=Zgjidhja s’është e saktë. Ju lutemi, riprovoni.
+torlauncher.unable_to_get_bridge=S’arrihet të merret një urë nga BridgeDB.\n\n%S
+torlauncher.no_meek=Ky shfletues s’është formësuar për meek, i cili është i nevojshëm për të marrë ura.
+torlauncher.no_bridges_available=S’ka ura të passhme tani. Na ndjeni.
torlauncher.connect=Lidhu
torlauncher.restart_tor=Riniseni Tor
@@ -49,47 +49,47 @@ torlauncher.quit_win=Dil
torlauncher.done=U bë
torlauncher.forAssistance=Për asistencë, lidhuni me %S
-torlauncher.forAssistance2=Për ndihmë, vizitoni %S
+torlauncher.forAssistance2=Për asistencë, vizitoni %S
-torlauncher.copiedNLogMessages=Kopjimi u krye. Mesazhet e regjistrit të Tor për %S, janë gati për t'u ngjitur në një redaktues teksti, ose në një mesazh e-poste.
+torlauncher.copiedNLogMessages=Kopjimi u krye. Mesazhet e regjistrit të Tor-it për %S janë gati për t’u ngjitur në një përpunues tekstesh, ose në një mesazh email.
torlauncher.bootstrapStatus.starting=Po niset
-torlauncher.bootstrapStatus.conn_pt=Connecting to bridge
-torlauncher.bootstrapStatus.conn_done_pt=Connected to bridge
-torlauncher.bootstrapStatus.conn_proxy=Connecting to proxy
-torlauncher.bootstrapStatus.conn_done_proxy=Connected to proxy
-torlauncher.bootstrapStatus.conn=Connecting to a Tor relay
-torlauncher.bootstrapStatus.conn_done=Connected to a Tor relay
-torlauncher.bootstrapStatus.handshake=Negotiating with a Tor relay
-torlauncher.bootstrapStatus.handshake_done=Finished negotiating with a Tor relay
-torlauncher.bootstrapStatus.onehop_create=Krijimi i një lidhje me direktori të shifruar
-torlauncher.bootstrapStatus.requesting_status=Rigjetja e statusit të rrjetit
-torlauncher.bootstrapStatus.loading_status=Ngarkimi i statusit të rrjetit
-torlauncher.bootstrapStatus.loading_keys=Ngarkimi i certifikatave të autoritetit
-torlauncher.bootstrapStatus.requesting_descriptors=Kërkimi i informacionit të relesë
-torlauncher.bootstrapStatus.loading_descriptors=Ngarkimi i informacionit të relesë
-torlauncher.bootstrapStatus.enough_dirinfo=Finished loading relay information
-torlauncher.bootstrapStatus.ap_conn_pt=Building circuits: Connecting to bridge
-torlauncher.bootstrapStatus.ap_conn_done_pt=Building circuits: Connected to bridge
-torlauncher.bootstrapStatus.ap_conn_proxy=Building circuits: Connecting to proxy
-torlauncher.bootstrapStatus.ap_conn_done_proxy=Building circuits: Connected to proxy
-torlauncher.bootstrapStatus.ap_conn=Building circuits: Connecting to a Tor relay
-torlauncher.bootstrapStatus.ap_conn_done=Building circuits: Connected to a Tor relay
-torlauncher.bootstrapStatus.ap_handshake=Building circuits: Negotiating with a Tor relay
-torlauncher.bootstrapStatus.ap_handshake_done=Building circuits: Finished negotiating with a Tor relay
-torlauncher.bootstrapStatus.circuit_create=Building circuits: Establishing a Tor circuit
-torlauncher.bootstrapStatus.done=I lidhur me rrjetin e Tor!
+torlauncher.bootstrapStatus.conn_pt=Po lidhet me urën
+torlauncher.bootstrapStatus.conn_done_pt=I lidhur me urën
+torlauncher.bootstrapStatus.conn_proxy=Po lidhet me ndërmjetësin
+torlauncher.bootstrapStatus.conn_done_proxy=U lidh te ndërmjetësi
+torlauncher.bootstrapStatus.conn=Po bëhet lidhja me një rele Tor
+torlauncher.bootstrapStatus.conn_done=U bë lidhja me një rele Tor
+torlauncher.bootstrapStatus.handshake=Po negociohet me një rele Tor
+torlauncher.bootstrapStatus.handshake_done=U përfundua së negociuari me një rele Tor
+torlauncher.bootstrapStatus.onehop_create=Po vendoset një lidhje e fshehtëzuar me drejtorinë
+torlauncher.bootstrapStatus.requesting_status=Po merret gjendje rrjeti
+torlauncher.bootstrapStatus.loading_status=Po ngarkohet gjendje rrjeti
+torlauncher.bootstrapStatus.loading_keys=Po ngarkohen dëshmi autoriteti
+torlauncher.bootstrapStatus.requesting_descriptors=Po kërkohen të dhëna releje
+torlauncher.bootstrapStatus.loading_descriptors=Po ngarkohen të dhëna releje
+torlauncher.bootstrapStatus.enough_dirinfo=U përfundua ngarkimi i informacionit mbi relenë
+torlauncher.bootstrapStatus.ap_conn_pt=Po montohen qarqe: Po bëhet lidhja me urën
+torlauncher.bootstrapStatus.ap_conn_done_pt=Po montohen qarqe: U bë lidhja me urën
+torlauncher.bootstrapStatus.ap_conn_proxy=Po montohen qarqe: Po bëhet lidhja me ndërmjetësin
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Po montohen qarqe: U bë lidhja me ndërmjetësin
+torlauncher.bootstrapStatus.ap_conn=Po montohen qarqe: Po bëhet lidhja me një rele Tor
+torlauncher.bootstrapStatus.ap_conn_done=Po montohen qarqe: U bë lidhja me një rele Tor
+torlauncher.bootstrapStatus.ap_handshake=Po montohen qarqe: Po negociohet me një rele Tor
+torlauncher.bootstrapStatus.ap_handshake_done=Po montohen qarqe: U përfundua së negociuari me një rele Tor
+torlauncher.bootstrapStatus.circuit_create=Po montohen qarqe: Po vendoset një qark Tor
+torlauncher.bootstrapStatus.done=I lidhur me rrjetin Tor!
torlauncher.bootstrapWarning.done=kryer
torlauncher.bootstrapWarning.connectrefused=lidhja u refuzua
torlauncher.bootstrapWarning.misc=i përzier
torlauncher.bootstrapWarning.resourcelimit=burime të pamjaftueshme
-torlauncher.bootstrapWarning.identity=mospërputhje identiteti
-torlauncher.bootstrapWarning.timeout=pezullim i lidhjes
-torlauncher.bootstrapWarning.noroute=asnjë rrugë për tek pritësi
+torlauncher.bootstrapWarning.identity=mospërputhje identitetesh
+torlauncher.bootstrapWarning.timeout=mbarim kohe për lidhjen
+torlauncher.bootstrapWarning.noroute=s’ka rrugë për te streha
torlauncher.bootstrapWarning.ioerror=gabim leximi/shkrimi
-torlauncher.bootstrapWarning.pt_missing=mungon transporti me ngulje
+torlauncher.bootstrapWarning.pt_missing=missing pluggable transport
-torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
-torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
-torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
+torlauncher.nsresult.NS_ERROR_NET_RESET=Humbi lidhja me shërbyesin.
+torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=S’u bë dot lidhja me shërbyesin.
+torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=S’u lidh dot me ndërmjetësin.
diff --git a/src/chrome/locale/sw/network-settings.dtd b/src/chrome/locale/sw/network-settings.dtd
index f5f40bd..89988de 100644
--- a/src/chrome/locale/sw/network-settings.dtd
+++ b/src/chrome/locale/sw/network-settings.dtd
@@ -1,10 +1,10 @@
-<!ENTITY torsettings.dialog.title "Tor Network Settings">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.dialog.title "Mipangilio ya mtandao wa Tor">
+<!ENTITY torsettings.wizard.title.default "Unganisha kwenye Tor">
+<!ENTITY torsettings.wizard.title.configure "Mipangilio ya mtandao wa Tor">
+<!ENTITY torsettings.wizard.title.connecting "Kuanzisha Muunganisho">
<!-- For locale picker: -->
-<!ENTITY torlauncher.localePicker.title "Tor Browser Language">
+<!ENTITY torlauncher.localePicker.title "Lugha za Kivinjari cha Tor">
<!ENTITY torlauncher.localePicker.prompt "Please select a language.">
<!-- For "first run" wizard: -->
@@ -17,7 +17,7 @@
<!-- Other: -->
<!ENTITY torsettings.startingTor "Waiting for Tor to start…">
-<!ENTITY torsettings.restartTor "Restart Tor">
+<!ENTITY torsettings.restartTor "Anzisha Tor">
<!ENTITY torsettings.reconfigTor "Reconfigure">
<!ENTITY torsettings.discardSettings.prompt "You have configured Tor bridges or you have entered local proxy settings.  To make a direct connection to the Tor network, these settings must be removed.">
@@ -34,10 +34,10 @@
<!ENTITY torsettings.useProxy.username "Jina la mtumiaji">
<!ENTITY torsettings.useProxy.password "Nywila
nenosiri">
-<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
-<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
+<!ENTITY torsettings.useProxy.type.socks4 "SOKSI 4">
+<!ENTITY torsettings.useProxy.type.socks5 "SOKSI 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
-<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!ENTITY torsettings.firewall.checkbox "Kompyuta hii inaenda kupitia firewall ambayo inaruhusu tu kunganisha kwenye poti flani ">
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -67,18 +67,18 @@ nenosiri">
<!ENTITY torPreferences.torSettings "Tor Settings">
<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
<!ENTITY torPreferences.learnMore "jifunze zaid">
-<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridges "Madaraja">
<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
<!ENTITY torPreferences.useBridge "Use a bridge">
-<!ENTITY torPreferences.requestNewBridge "Request a New Bridge…">
+<!ENTITY torPreferences.requestNewBridge "Ombi la Daraja jipya...">
<!ENTITY torPreferences.provideBridge "Provide a bridge">
<!ENTITY torPreferences.advanced "Iliyoboreshwa">
<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
-<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
-<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Tafuta CAPTCHA kwa maombi ya daraja.">
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Suluhisho sio sahihi. Tafadhali jaribu tena.">
<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
<!ENTITY torPreferences.viewLogs "View Logs…">
<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sw/torlauncher.properties b/src/chrome/locale/sw/torlauncher.properties
index 7fc07c7..baef6bd 100644
--- a/src/chrome/locale/sw/torlauncher.properties
+++ b/src/chrome/locale/sw/torlauncher.properties
@@ -1,95 +1,95 @@
### Copyright (c) 2020, The Tor Project, Inc.
### See LICENSE for licensing information.
-torlauncher.error_title=Tor Launcher
+torlauncher.error_title=Uzinduzi wa Tor
torlauncher.tor_exited_during_startup=Tor exited during startup. This might be due to an error in your torrc file, a bug in Tor or another program on your system, or faulty hardware. Until you fix the underlying problem and restart Tor, Tor Browser will not start.
torlauncher.tor_exited=Tor unexpectedly exited. This might be due to a bug in Tor itself, another program on your system, or faulty hardware. Until you restart Tor, the Tor Browser will not able to reach any websites. If the problem persists, please send a copy of your Tor Log to the support team.
-torlauncher.tor_exited2=Restarting Tor will not close your browser tabs.
-torlauncher.tor_controlconn_failed=Could not connect to Tor control port.
-torlauncher.tor_failed_to_start=Tor failed to start.
-torlauncher.tor_control_failed=Failed to take control of Tor.
-torlauncher.tor_bootstrap_failed=Tor failed to establish a Tor network connection.
-torlauncher.tor_bootstrap_failed_details=%1$S failed (%2$S).
+torlauncher.tor_exited2=Kuanza upya kwa Tor haiwezi kufunga kivinjari chako cha tabo.
+torlauncher.tor_controlconn_failed=Haiwezi kuunganisha kwa Tor kwa kuthibitisha porti.
+torlauncher.tor_failed_to_start=Tor imeshindwa kuanza.
+torlauncher.tor_control_failed=Imeshindwa kuthibiti kwa Tor.
+torlauncher.tor_bootstrap_failed=Kushindwa kuanzisha muunganisho wa mtandao wa Tor.
+torlauncher.tor_bootstrap_failed_details=%1$S imeshindwa (%2$S).
-torlauncher.unable_to_start_tor=Unable to start Tor.\n\n%S
-torlauncher.tor_missing=The Tor executable is missing.
-torlauncher.torrc_missing=The torrc file is missing and could not be created.
-torlauncher.datadir_missing=The Tor data directory does not exist and could not be created.
-torlauncher.onionauthdir_missing=The Tor onion authentication directory does not exist and could not be created.
-torlauncher.password_hash_missing=Failed to get hashed password.
+torlauncher.unable_to_start_tor=Tor haiwezi kuanza.\n\n%S
+torlauncher.tor_missing=Tor inayoweza kutekelezwa imekosekana.
+torlauncher.torrc_missing=Faili la torrc imekosekana na haiwezi kuundwa.
+torlauncher.datadir_missing=Saraka ya data ya Tor haiwezi kuwepo na haijaweza kuundwa.
+torlauncher.onionauthdir_missing=Uthibitisho wa saraka ya Tor onion haipo na haiwezi kuundwa.
+torlauncher.password_hash_missing=Kushindwa kupata nywila ya haraka.
-torlauncher.failed_to_get_settings=Unable to retrieve Tor settings.\n\n%S
-torlauncher.failed_to_save_settings=Unable to save Tor settings.\n\n%S
+torlauncher.failed_to_get_settings=Haiwezi kupata tena mpangilio wa Tor. \n\n%S
+torlauncher.failed_to_save_settings=Kuezesha mpangilio wa kuokoa Tor.\n\n%S
torlauncher.ensure_tor_is_running=Please ensure that Tor is running.
torlauncher.error_proxy_addr_missing=You must specify both an IP address or hostname and a port number to configure Tor to use a proxy to access the Internet.
-torlauncher.error_proxy_type_missing=You must select the proxy type.
-torlauncher.error_bridges_missing=You must specify one or more bridges.
-torlauncher.error_default_bridges_type_missing=You must select a transport type for the provided bridges.
-torlauncher.error_bridgedb_bridges_missing=Please request a bridge.
-torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings.
+torlauncher.error_proxy_type_missing=Lazima uchague aina ya wakala.
+torlauncher.error_bridges_missing=Lazima utaje moja au madaraja zaidi.
+torlauncher.error_default_bridges_type_missing=Lazima utaje aina ya usafiri kwa madaraja yanayotolewa.
+torlauncher.error_bridgedb_bridges_missing=Tafadhali ombi la daraja.
+torlauncher.error_bridge_bad_default_type=Hakuna madaraja yanayotolewa ambayo yana aina ya usafiri %S ambayo yamepatikana. Tafadhali rekebisha mpangilio wako.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(inafanya kazi chini)
+torlauncher.bridge_suffix.meek-azure=(inafanya kazi chini)
-torlauncher.request_a_bridge=Request a Bridge…
-torlauncher.request_a_new_bridge=Request a New Bridge…
-torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait.
-torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge.
-torlauncher.bad_captcha_solution=The solution is not correct. Please try again.
-torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S
-torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges.
-torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
+torlauncher.request_a_bridge=Ombi la daraja...
+torlauncher.request_a_new_bridge=Ombi la Daraja jipya...
+torlauncher.contacting_bridgedb=Kuwasiliana na daraja la DB. Tafadhali subiri.
+torlauncher.captcha_prompt=Tafuta CAPTCHA kwa maombi ya daraja.
+torlauncher.bad_captcha_solution=Suluhisho sio sahihi. Tafadhali jaribu tena.
+torlauncher.unable_to_get_bridge=Haiwezi kupata daraja kutoka Daraja la DB.\n\n%S
+torlauncher.no_meek=Kivinjari hiki hakijaundwa kwa meek, ambayo imehitaji kwa kupata madaraja.
+torlauncher.no_bridges_available=Hakuna madaraja imepatikana katika muda huu. Samahani.
torlauncher.connect=Unganisha
-torlauncher.restart_tor=Restart Tor
+torlauncher.restart_tor=Anzisha Tor
torlauncher.quit=Ondoka
torlauncher.quit_win=toka
torlauncher.done=Imefanywa
-torlauncher.forAssistance=For assistance, contact %S
-torlauncher.forAssistance2=For assistance, visit %S
+torlauncher.forAssistance=Kwa msaada, wasiliana %S
+torlauncher.forAssistance2=Kwa msaada, tembelea %S
-torlauncher.copiedNLogMessages=Copy complete. %S Tor log messages are ready to be pasted into a text editor or an email message.
+torlauncher.copiedNLogMessages=Nakala imemalizika. %S ujumbe wa tunza kumbukumbu ya Tor ipotayari kubandikwa ndani ya mhariri wa maandishi au ujumbe wa barua pepe.
-torlauncher.bootstrapStatus.starting=Starting
-torlauncher.bootstrapStatus.conn_pt=Connecting to bridge
-torlauncher.bootstrapStatus.conn_done_pt=Connected to bridge
-torlauncher.bootstrapStatus.conn_proxy=Connecting to proxy
-torlauncher.bootstrapStatus.conn_done_proxy=Connected to proxy
-torlauncher.bootstrapStatus.conn=Connecting to a Tor relay
-torlauncher.bootstrapStatus.conn_done=Connected to a Tor relay
-torlauncher.bootstrapStatus.handshake=Negotiating with a Tor relay
-torlauncher.bootstrapStatus.handshake_done=Finished negotiating with a Tor relay
-torlauncher.bootstrapStatus.onehop_create=Establishing an encrypted directory connection
-torlauncher.bootstrapStatus.requesting_status=Retrieving network status
-torlauncher.bootstrapStatus.loading_status=Loading network status
-torlauncher.bootstrapStatus.loading_keys=Loading authority certificates
-torlauncher.bootstrapStatus.requesting_descriptors=Requesting relay information
-torlauncher.bootstrapStatus.loading_descriptors=Loading relay information
-torlauncher.bootstrapStatus.enough_dirinfo=Finished loading relay information
-torlauncher.bootstrapStatus.ap_conn_pt=Building circuits: Connecting to bridge
-torlauncher.bootstrapStatus.ap_conn_done_pt=Building circuits: Connected to bridge
-torlauncher.bootstrapStatus.ap_conn_proxy=Building circuits: Connecting to proxy
-torlauncher.bootstrapStatus.ap_conn_done_proxy=Building circuits: Connected to proxy
-torlauncher.bootstrapStatus.ap_conn=Building circuits: Connecting to a Tor relay
-torlauncher.bootstrapStatus.ap_conn_done=Building circuits: Connected to a Tor relay
-torlauncher.bootstrapStatus.ap_handshake=Building circuits: Negotiating with a Tor relay
-torlauncher.bootstrapStatus.ap_handshake_done=Building circuits: Finished negotiating with a Tor relay
-torlauncher.bootstrapStatus.circuit_create=Building circuits: Establishing a Tor circuit
-torlauncher.bootstrapStatus.done=Connected to the Tor network!
+torlauncher.bootstrapStatus.starting=Kuanza
+torlauncher.bootstrapStatus.conn_pt=kuunganisha kwa daraja
+torlauncher.bootstrapStatus.conn_done_pt=Daraja limeungwanishwa
+torlauncher.bootstrapStatus.conn_proxy=Kuunganisha kwa wakala
+torlauncher.bootstrapStatus.conn_done_proxy=Wakala ameunganishwa
+torlauncher.bootstrapStatus.conn=Kuunganisha kwa Tor yenye kuendana
+torlauncher.bootstrapStatus.conn_done=Imeunganishwa kwa Tor yenye kuendana
+torlauncher.bootstrapStatus.handshake=Kujadili kwa Tor yenye kuendana
+torlauncher.bootstrapStatus.handshake_done=Kujadili kumemalizika kwa Tor yenye kuendana
+torlauncher.bootstrapStatus.onehop_create=Kuanzisha kwa msimbo fiche unganisho wa saraka
+torlauncher.bootstrapStatus.requesting_status=Kupata hali ya mtandao
+torlauncher.bootstrapStatus.loading_status=Upakiaji wa hali ya mtandao
+torlauncher.bootstrapStatus.loading_keys=Upakiaji wa mamlaka ya vyeti
+torlauncher.bootstrapStatus.requesting_descriptors=Kuomba kuendana kwa habari
+torlauncher.bootstrapStatus.loading_descriptors=Upakiaji kuendana kwa habari
+torlauncher.bootstrapStatus.enough_dirinfo=Kumaliza kwa upakiaji wa kuenndana na habari
+torlauncher.bootstrapStatus.ap_conn_pt=Kujenga mzunguko: Kuunganisha kwa daraja
+torlauncher.bootstrapStatus.ap_conn_done_pt=Kujenga mzunguko: Kuunganisha kwa daraja
+torlauncher.bootstrapStatus.ap_conn_proxy=Kujenga mzunguko: Kuunganisha kwa wakala
+torlauncher.bootstrapStatus.ap_conn_done_proxy=Kujenga mzunguko: Kuunganisha kwa wakala
+torlauncher.bootstrapStatus.ap_conn=Kujenga mizunguko: Kuunganisha kwa Tor yenye kuendana
+torlauncher.bootstrapStatus.ap_conn_done=Kujenga mizunguko: Kuunganisha kwa Tor yenye kuedana
+torlauncher.bootstrapStatus.ap_handshake=Kujenga mizunguko: Kujadili kwenye Tor yenye kuendana
+torlauncher.bootstrapStatus.ap_handshake_done=Kujenga mizunguko: Kujadili kumeisha kwenye Tor yenye kuendana
+torlauncher.bootstrapStatus.circuit_create=Kujenga mizunguko: Kuanzisha mzunguko wa Tor
+torlauncher.bootstrapStatus.done=Imeunganishwa kwenye mtandao wa Tor!
-torlauncher.bootstrapWarning.done=done
-torlauncher.bootstrapWarning.connectrefused=connection refused
-torlauncher.bootstrapWarning.misc=miscellaneous
-torlauncher.bootstrapWarning.resourcelimit=insufficient resources
-torlauncher.bootstrapWarning.identity=identity mismatch
-torlauncher.bootstrapWarning.timeout=connection timeout
-torlauncher.bootstrapWarning.noroute=no route to host
-torlauncher.bootstrapWarning.ioerror=read/write error
-torlauncher.bootstrapWarning.pt_missing=missing pluggable transport
+torlauncher.bootstrapWarning.done=Kumaliza
+torlauncher.bootstrapWarning.connectrefused=Unganisho limekataliwa
+torlauncher.bootstrapWarning.misc=Anuwai
+torlauncher.bootstrapWarning.resourcelimit=Rasilimali haitoshi
+torlauncher.bootstrapWarning.identity=Utambulisho wa sigana
+torlauncher.bootstrapWarning.timeout=Muda umeisha wa kuunganisha
+torlauncher.bootstrapWarning.noroute=Hakuna njia ya mwenyeji
+torlauncher.bootstrapWarning.ioerror=soma/andika kosa
+torlauncher.bootstrapWarning.pt_missing=Kukosa usafiri unaoweza kuziba
-torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
-torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
-torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
+torlauncher.nsresult.NS_ERROR_NET_RESET=Uunganisho kwenye seva ulipotea.
+torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Haiwezi kunganishwa kwenye seva.
+torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Haiwezi kuunganishwa na wakala.
diff --git a/src/chrome/locale/zh-TW/torlauncher.properties b/src/chrome/locale/zh-TW/torlauncher.properties
index 945d95c..47a0ca0 100644
--- a/src/chrome/locale/zh-TW/torlauncher.properties
+++ b/src/chrome/locale/zh-TW/torlauncher.properties
@@ -3,8 +3,8 @@
torlauncher.error_title=洋蔥路由啟動工具
-torlauncher.tor_exited_during_startup=洋蔥路由程式在啟動過程中意外終止。這可能是由 torcc 設定檔的錯誤、洋蔥路由程式、其他系統程式的漏洞或是硬體缺陷造成。必須先解決潛在的問題並重啟洋蔥路由程式,洋蔥路由瀏覽器才能夠啟動。
-torlauncher.tor_exited=洋蔥路由程式意外地中止了。這有可能是洋蔥路由本身的程式錯誤、您系統上的其它程式或是硬體故障。除非您重新啟動洋蔥路由,否則洋蔥路由瀏覽器將無法連接上任何網站。如果此問題持續發生,請發複製並發送您的洋蔥路由歷程紀錄到支援團隊。
+torlauncher.tor_exited_during_startup=洋蔥瀏覽器在啟動時意外終止。這可能是因為 torrc 設定檔的錯誤、洋蔥瀏覽器本身、您系統上其他程式的漏洞或是硬體故障所造成。必須先解決潛在的問題並重新啟動洋蔥瀏覽器,本程式才能正常運作。
+torlauncher.tor_exited=洋蔥瀏覽器意外終止了。這可能是因為洋蔥瀏覽器本身的程式錯誤、您系統上的其它程式或是硬體故障所造成。除非您重新啟動洋蔥瀏覽器,否則洋蔥瀏覽器將無法連線到任何網站。如果此問題持續發生,請寄送您的洋蔥瀏覽器錯誤報告給支援團隊。
torlauncher.tor_exited2=重新啟動洋蔥路由將不會關閉您瀏覽器的分頁。
torlauncher.tor_controlconn_failed=無法連接至洋蔥路由控制連接埠。
torlauncher.tor_failed_to_start=洋蔥路由無法啟動。
diff --git a/src/install.rdf b/src/install.rdf
index 444654d..3405b47 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -7,7 +7,7 @@
<em:creator>The Tor Project, Inc.</em:creator>
<em:contributor>Pearl Crescent, LLC</em:contributor>
<em:id>tor-launcher(a)torproject.org</em:id>
- <em:version>0.2.25</em:version>
+ <em:version>0.2.26</em:version>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
<em:homepageURL>https://www.torproject.org/projects/torbrowser.html</em:homepageURL>
<em:updateURL>data:text/plain,</em:updateURL>
1
0
commit 88640a08733bd28d359e2327ecc813391ca7f705
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Fri Oct 9 02:31:22 2020 +0000
Translations update
---
chrome/locale/fr/aboutDialog.dtd | 2 +-
chrome/locale/fr/torbutton.properties | 4 ++--
chrome/locale/ms/aboutTor.dtd | 2 +-
chrome/locale/nl/torbutton.properties | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/chrome/locale/fr/aboutDialog.dtd b/chrome/locale/fr/aboutDialog.dtd
index ede97d06..6630cd94 100644
--- a/chrome/locale/fr/aboutDialog.dtd
+++ b/chrome/locale/fr/aboutDialog.dtd
@@ -3,7 +3,7 @@
<!ENTITY project.tpoLink "le &vendorShortName;">
<!ENTITY project.end ", un organisme sans but lucratif qui s’efforce de protéger votre vie privée, vos données personnels et votre liberté en ligne.">
-<!ENTITY help.start "Souhaitez-vous aider ?">
+<!ENTITY help.start "Voulez-vous aider ?">
<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en -->
<!ENTITY help.donateLink "Faites un don">
<!ENTITY help.or "ou">
diff --git a/chrome/locale/fr/torbutton.properties b/chrome/locale/fr/torbutton.properties
index bc04d816..ad54bc52 100644
--- a/chrome/locale/fr/torbutton.properties
+++ b/chrome/locale/fr/torbutton.properties
@@ -29,7 +29,7 @@ torbutton.title.prompt_torbrowser = Renseignements importants sur BoutonTor
torbutton.popup.prompt_torbrowser = Dorénavant, BoutonTor fonctionne différemment : vous ne pouvez plus le désactiver.\n\nNous avons effectué ce changement, car il n’est pas sécuritaire d’utiliser BoutonTor dans un navigateur qui est aussi utilisé pour une navigation sans Tor. Trop de bogues ne pouvaient être réglés autrement.\n\nSi vous voulez continuer à utiliser Firefox normalement, vous devriez désinstaller BoutonTor et télécharger l’offre groupée du Navigateur Tor. Les propriétés de confidentialité du Navigateur Tor sont aussi supérieures à celles de Firefox, même s’il est utilisé avec BoutonTor.\n\nPour enlever BoutonTor, allez dans Outils->Modules complémentaires->Extensions et cliquer sur Supprimer à coté de BoutonTor.
torbutton.popup.short_torbrowser = Renseignements importants sur BoutonTor !\n\nBoutonTor est dorénavant toujours activé.\n\nCliquer sur BoutonTor pour plus de précisons.
-torbutton.popup.confirm_plugins = Les greffons tels que Flash peuvent nuire à la protection de vos données personnels et à votre anonymat.\n\nIls peuvent aussi contourner Tor afin de divulguer votre position actuelle ainsi que votre adresse IP.\n\nSouhaitez-vous vraiment activer les greffons ?\n\n
+torbutton.popup.confirm_plugins = Les greffons tels que Flash peuvent nuire à la protection de vos données personnels et à votre anonymat.\n\nIls peuvent aussi contourner Tor afin de divulguer votre position actuelle ainsi que votre adresse IP.\n\nVoulez-vous vraiment activer les greffons ?\n\n
torbutton.popup.never_ask_again = Ne plus me poser la question.
torbutton.popup.confirm_newnym = Le Navigateur Tor fermera tous les fenêtres et onglets. Les sessions des sites Web seront toutes perdues.\n\nRedémarrer le Navigateur Tor maintenant pour réinitialiser votre identité ?\n\n
@@ -92,7 +92,7 @@ onionServices.rendezvousFailed.longDescription=Détails : %S – Échec de renc
# Tor SOCKS error 0xF4:
onionServices.clientAuthMissing.pageTitle=Une autorisation est exigée
onionServices.clientAuthMissing.header=Le site onion exige une authentification
-onionServices.clientAuthMissing=Le site onion exige une clé, mais aucune n'a été indiquée.
+onionServices.clientAuthMissing=Le site onion exige une clé, mais aucune n’a été indiquée.
onionServices.clientAuthMissing.longDescription=Détails : %S – Le client a téléchargé le descripteur du site demandé, mais n’a pas réussi à déchiffrer son contenu, car il manque les renseignements d’autorisation du client.
# Tor SOCKS error 0xF5:
onionServices.clientAuthIncorrect.pageTitle=Échec d’autorisation
diff --git a/chrome/locale/ms/aboutTor.dtd b/chrome/locale/ms/aboutTor.dtd
index e33fe237..28fd2aaf 100644
--- a/chrome/locale/ms/aboutTor.dtd
+++ b/chrome/locale/ms/aboutTor.dtd
@@ -31,5 +31,5 @@
<!ENTITY aboutTor.donationBanner.buttonA "Dermalah Sekarang">
<!-- End of year 2020 Fundraising campaign -->
-<!ENTITY aboutTor.ey2020.useamask "Guna pelitup separuh muka, guna juga Tor.">
+<!ENTITY aboutTor.ey2020.useamask "Guna pelitup muka, guna juga Tor.">
<!ENTITY aboutTor.ey2020.resistsurveillance "Tangani pandemik pengawasan.">
diff --git a/chrome/locale/nl/torbutton.properties b/chrome/locale/nl/torbutton.properties
index a037f2d0..289200be 100644
--- a/chrome/locale/nl/torbutton.properties
+++ b/chrome/locale/nl/torbutton.properties
@@ -49,7 +49,7 @@ canvas.neverAccessKey=o
profileProblemTitle=%S-profielprobleem
profileReadOnly=U kunt %S niet vanaf een alleen-lezen-bestandssysteem uitvoeren. Kopieer %S naar een andere locatie voordat u het probeert te gebruiken.
profileReadOnlyMac=U kunt %S niet vanaf een alleen-lezen-bestandssysteem uitvoeren. Kopieer %S naar uw map Bureaublad of Programma’s voordat u het probeert te gebruiken.
-profileAccessDenied=%S heeft geen rechten voor toegang tot het profiel. Pas de bestandssysteemmachtigingen aan en probeer het opnieuw.
+profileAccessDenied=%S heeft geen rechten voor toegang tot het profiel. Pas uw rechten van het bestandssysteem aan en probeer het opnieuw.
profileMigrationFailed=Migratie van uw bestaande %S-profiel is mislukt.\nEr worden nieuwe instellingen gebruikt.
# "Downloading update" string for the hamburger menu (see #28885).
1
0

[Git][tpo/applications/fenix][tor-browser-81.1.2-10.0-2] Bug 40072: Disable Tracking Protection
by Matthew Finkel 08 Oct '20
by Matthew Finkel 08 Oct '20
08 Oct '20
Matthew Finkel pushed to branch tor-browser-81.1.2-10.0-2 at The Tor Project / Applications / fenix
Commits:
6afc782a by Matthew Finkel at 2020-10-07T13:21:27+00:00
Bug 40072: Disable Tracking Protection
- - - - -
1 changed file:
- app/src/main/java/org/mozilla/fenix/utils/Settings.kt
Changes:
=====================================
app/src/main/java/org/mozilla/fenix/utils/Settings.kt
=====================================
@@ -387,7 +387,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
var shouldUseTrackingProtection by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_tracking_protection),
- default = true
+ default = false
)
/**
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/6afc782a63776…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/6afc782a63776…
You're receiving this email because of your account on gitlab.torproject.org.
1
0

[tor-browser/tor-browser-82.0b7-10.0-1] fixup! Bug 26961: New user onboarding.
by gk@torproject.org 08 Oct '20
by gk@torproject.org 08 Oct '20
08 Oct '20
commit 30175f1fa9c151a4cd6e5171002d0ff4328c2d3f
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 8 11:51:44 2020 +0200
fixup! Bug 26961: New user onboarding.
Bug 40139: Update Onboarding icon for 10.0
---
browser/extensions/onboarding/content/Onboarding.jsm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/extensions/onboarding/content/Onboarding.jsm b/browser/extensions/onboarding/content/Onboarding.jsm
index b411a3039a3e..9f51fb4bd28a 100644
--- a/browser/extensions/onboarding/content/Onboarding.jsm
+++ b/browser/extensions/onboarding/content/Onboarding.jsm
@@ -909,7 +909,7 @@ class Onboarding {
}
const kOnionURL = "https://3g2upl4pq6kufc4m.onion/"; // DuckDuckGo
- const kLearnMore = "https://www.torproject.org/releases/tor-browser-95/";
+ const kLearnMore = "https://www.torproject.org/releases/tor-browser-10-0/";
let handledTourActionClick = false;
switch (id) {
case "onboarding-overlay-button-icon":
1
0

[tor-browser/tor-browser-78.3.0esr-10.5-1] fixup! Bug 26961: New user onboarding.
by gk@torproject.org 08 Oct '20
by gk@torproject.org 08 Oct '20
08 Oct '20
commit 827222ef3dc5ddd8f247b1861988ad6f29103653
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 8 11:51:44 2020 +0200
fixup! Bug 26961: New user onboarding.
Bug 40139: Update Onboarding icon for 10.0
---
browser/extensions/onboarding/content/Onboarding.jsm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/extensions/onboarding/content/Onboarding.jsm b/browser/extensions/onboarding/content/Onboarding.jsm
index b411a3039a3e..9f51fb4bd28a 100644
--- a/browser/extensions/onboarding/content/Onboarding.jsm
+++ b/browser/extensions/onboarding/content/Onboarding.jsm
@@ -909,7 +909,7 @@ class Onboarding {
}
const kOnionURL = "https://3g2upl4pq6kufc4m.onion/"; // DuckDuckGo
- const kLearnMore = "https://www.torproject.org/releases/tor-browser-95/";
+ const kLearnMore = "https://www.torproject.org/releases/tor-browser-10-0/";
let handledTourActionClick = false;
switch (id) {
case "onboarding-overlay-button-icon":
1
0

[tor-browser/tor-browser-78.3.0esr-10.0-2] fixup! Bug 26961: New user onboarding.
by gk@torproject.org 08 Oct '20
by gk@torproject.org 08 Oct '20
08 Oct '20
commit 866aded0a51a02ef3695ec76dc0df12d3b0651da
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 8 11:51:44 2020 +0200
fixup! Bug 26961: New user onboarding.
Bug 40139: Update Onboarding icon for 10.0
---
browser/extensions/onboarding/content/Onboarding.jsm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/extensions/onboarding/content/Onboarding.jsm b/browser/extensions/onboarding/content/Onboarding.jsm
index b411a3039a3e..9f51fb4bd28a 100644
--- a/browser/extensions/onboarding/content/Onboarding.jsm
+++ b/browser/extensions/onboarding/content/Onboarding.jsm
@@ -909,7 +909,7 @@ class Onboarding {
}
const kOnionURL = "https://3g2upl4pq6kufc4m.onion/"; // DuckDuckGo
- const kLearnMore = "https://www.torproject.org/releases/tor-browser-95/";
+ const kLearnMore = "https://www.torproject.org/releases/tor-browser-10-0/";
let handledTourActionClick = false;
switch (id) {
case "onboarding-overlay-button-icon":
1
0
commit 6f9a7e36846404c17cf2aa59a2143e4af0741d65
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Wed Oct 7 21:04:35 2020 +0000
Pick up Fenix 81.1.2
---
projects/android-components/config | 8 +-
.../gradle-dependencies-list.txt | 4 +-
projects/fenix/config | 8 +-
projects/fenix/gradle-dependencies-list.txt | 340 ++++++++++-----------
projects/geckoview/config | 4 +-
projects/tba-translation/config | 2 +-
6 files changed, 181 insertions(+), 185 deletions(-)
diff --git a/projects/android-components/config b/projects/android-components/config
index 0424b03..e42c0c9 100644
--- a/projects/android-components/config
+++ b/projects/android-components/config
@@ -1,18 +1,18 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
-git_hash: '[% project %]-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-2-build1'
+git_hash: '[% project %]-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
git_url: https://gitlab.torproject.org/tpo/applications/android-components.git
tag_gpg_id: 1
gpg_keyring: torbutton.gpg
var:
- android_components_version: 57.0.6
+ android_components_version: 57.0.7
torbrowser_branch: 10.0
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 4
+ gradle_dependencies_version: 5
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
# Overwrite `glean_parser` for now to fix #40085.
@@ -20,7 +20,7 @@ var:
targets:
nightly:
- git_hash: 'android-components-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-2'
+ git_hash: 'android-components-[% c("var/android_components_version") %]-[% c("var/torbrowser_branch") %]-1'
tag_gpg_id: 0
input_files:
diff --git a/projects/android-components/gradle-dependencies-list.txt b/projects/android-components/gradle-dependencies-list.txt
index ff3b587..a82d51e 100644
--- a/projects/android-components/gradle-dependencies-list.txt
+++ b/projects/android-components/gradle-dependencies-list.txt
@@ -432,8 +432,8 @@ dbc48baf933d7e57eaf7f50c1fabb4c45ecabd0a8bd7a21f5533ab05d1b821d8 | https://maven
3fe97c6a7bf5bb85cd85f1b2b732bece663fce5a87e4406f95334b9c866f3e20 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
e3307e77325cf8e5bd1a4bbfb6f69b1dba208c0cd840ed41438790d6862008da | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/82…
41d405815f5c5c1df8d8f31d61f6a556d0d6b2bc9e02c0f905f41321da1f7f8a | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/82…
-b3acbeebbfca2cb7e6d5afa5c23672debd76679752c124e3ae8aa4c5673cdd12 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
-e6754e5153344bacbbe164b1012743db0378b7253b259a1baaa140564fa2aa32 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+f654485c119c284c7e8132154753e11089254ef27b47abe880e4830abe0bf804 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+9aee6e0f93d25b480c8bce9720f6e9ef73d0e866b1eddf68492805f021076bb3 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
acfb992486c44ecf3727fac3eb7a4ac69e005e8baae2dd4104208265a947bccd | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
71bf43ad7ea24b261bb1e361c0f1d5642bdc4dab5471ca9628d1b7ad754e84a1 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
93b2f27c919b07b927d764726eb64350cb7d480bac9485b9192881a9d5d10f30 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
diff --git a/projects/fenix/config b/projects/fenix/config
index 2ecc2be..79a1ccf 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -1,20 +1,20 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'fenix-[% c("version") %]-[% c("var/build_id") %].tar.gz'
-git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
+git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-2-build1'
git_url: https://gitlab.torproject.org/tpo/applications/fenix.git
tag_gpg_id: 1
gpg_keyring: torbutton.gpg
variant: Beta
var:
- fenix_version: 81.1.1
+ fenix_version: 81.1.2
torbrowser_branch: 10.0
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 6
+ gradle_dependencies_version: 7
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
# Overwrite `glean_parser` for now to fix #40085.
@@ -22,7 +22,7 @@ var:
targets:
nightly:
- git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-1'
+ git_hash: 'tor-browser-[% c("var/fenix_version") %]-[% c("var/torbrowser_branch") %]-2'
tag_gpg_id: 0
variant: Nightly
diff --git a/projects/fenix/gradle-dependencies-list.txt b/projects/fenix/gradle-dependencies-list.txt
index 1a84cab..767330f 100644
--- a/projects/fenix/gradle-dependencies-list.txt
+++ b/projects/fenix/gradle-dependencies-list.txt
@@ -900,180 +900,176 @@ b8740d75ff31c0402f8b75edd26046ddb1c6dcb28e880366b00227d8ec7e1d4b | https://maven
54d1a69f5a00b84bd4bf61ef024e73371b13c2b57c31ebcd6cf7581b18267e3b | https://maven.mozilla.org/maven2/org/mozilla/appservices/syncmanager/61.0.1…
b509686c9eb57b4a89b6ad5482ce99221a41ec8de410427d6a90bc6fc1a8315a | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/61.0.13/tabs-…
0cfa4b1f7e0da13288a81551aafabb7429990957451937c7c1a747f8c7cf22a4 | https://maven.mozilla.org/maven2/org/mozilla/appservices/tabs/61.0.13/tabs-…
-5f6bfe0a609eb050c938b08e4342916b35627e85b8e83b8aafd13d41c227ffc3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-fbdb87b94b98deade6b52c56fa34b7ddb6d8bf1a08abbc27740ca4a089fa75bd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
-5a55d12b1fd3d08d00f9cc87cecbc634a634ed5af5874fb5e5c2fb65ae150410 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/57.…
-6ff7fd4e8848f8cc8531b0e23d0950164695bf7ed67cf6a18613b79218ae9d67 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/57.…
-a506b0242ad46ffd2303760baa5649eb09223c1781adc9b70c4f2d20cbd81875 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-12d83745de13bf270d8a9bc1adbae256fcd5a6e1987d8de29774c463295c213b | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-9a58ee0c8a2f3e8150c2196beefc952e968869f2c654c8a4d5f090451175f16a | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-205a0d47f02614a0b98026c3b3fa3f995f7cf7cfcdd94bd27b8f419ab156df1e | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-fa7956704606a43792c708d7749dd8e003f8f0d3bcc8ae61b2a2aeb4177cd470 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-a6140a973fac305b4bb02dcf63d892728dc6f1a8cc51c109e61f80737ecd00bc | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
-371257933c6ce25b3c19be1460610ac0379461d898d4fee03e892df707ae2483 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-065e0008c3df9321cbc5e5a02e33e1c77be4b5020d3902287dac3ac6f86756d0 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
-8bc0a060ee040bff880f3a6cc57eaa813dca6ee4950c21a343bd7a34ad2b92f5 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/57.0.…
-b1a4e29a36649c1f8035bbdf4cdae49e29e1ebc65a7269dc2cf4ef8f2307636e | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/57.0.…
-31b441240cd7137ee5fbad950ca18fd650f176fc68f469f0c41fa4d60adad324 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/57.0.6…
-05ac663842cffe652760f6aef76cf09b50d1ecb6e149a54b3c23569040a3ca79 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/57.0.6…
-74e46d1d56a4bb2f4cf8275300476e8f55c70770ff50af008a8bdf1a52bfd001 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/57.0.…
-168a59357a7e60855efb7d6df6d314ce518c37c7d2d073c2fd469a305bcc1768 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/57.0.…
-39744aaee8b6aa9183f9ec96d5e960fe55f5ada1963756d555283720e6cc4f98 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/57.0…
-05e44f11fcc5f4652befcc91c0c4125655a75cc860f8006ed5c75ae4640db9e4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/57.0…
-67451ba96f48cb0fdccfdf645283c593a5117b149dc5ebb527a24f457c7dd0f5 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/57.…
-16a9134562515143f14624207c29c5982d9a7a66bee9ba478446fec5390b5e03 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/57.…
-366101efe7a954b82dc9b3cd9e108553871d87d719ccd93c6df3ae2e0d472e04 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/57.0.…
-9e33e29c58789d5c46b18879ad65ac0571b5ef5ab62e07417bfbf51ed47c2479 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/57.0.…
-39a1f741d7fc9760287053c81157caffba1f4a318530ea192d48f45e1f5eaa31 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-187faeae36c484be1d2c67fb71c6e483a1df6e4a5ce1894be9d0ae8a51d1142d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
-88bc2639447874d810900dae880c4dc44a1f5db431ce7e6a0f9dfd21fcd79efa | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/57…
-d725b77b6f6ef112d130ac72c1c72711c4475432ba994ec84b09f8d8fd74f5ba | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/57…
-375062f26e552de415511c0e85f108e847eaa2c353f8f73d79b8fa0a00c0b7fd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-d2a40f302b661c85d0b19a7d8f06ec6263307e016af77687dba53d15c29f54fe | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
-fbb056d3886cf543b68e70c3a31fc05d8a80d8b581e77c50a9d22ff45de3f81d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/57.…
-13bcd372c11400b1b5b03cd14b217f11ca7cb5c945092fe8e06a1a3874c3cc13 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/57.…
-389b0ad314e88bbf7b849cc14739a442ddc8916dbf40d2b28d9caa5197dc015d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-26296f07b0dd9adda37a79129bc7abb9016a1e618b938bccd7285941cf22c3fb | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
-57fd18d3b217015c39cefedfed5a8231191bd5b25945f4c984c476515260c2c2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/57.0…
-7b42d2f927057c466b167ab36c5688ede9fc08a1945af954895c416f9afb516c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/57.0…
-ca24b54e1d01bb0f2dcfa11e92d1f340e5b632e05e2a68ac6a6a76fa7482274a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/57.0.…
-839e32346c8d51db17fd034cea99748abae285c7cba82bb0f15b0d287c9856a2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/57.0.…
-bbe901d57b1e16e6ea12f046337e1c3fdef728f0f400e209a33b170eb7069956 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/57.0.6…
-86e29fac30934d9971b2367744e27e1dd4812adbeb9387388b86105d90c94e23 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/57.0.6…
-86425d68f958653f4ea53e2ecf18ed6ef33aa85382b90dc4cadfbc45dfe1cef1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/57.0.6…
-93d0a9ddc7b281be828ab63d9e38f3b29d88e7e79dc91b567c520b2154c16fee | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/57.0.6…
-4d0677e3e8af4559125239ac5520d5ab2869456b538cdecca69a0b6764a4bbe1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/57.…
-c1f8ed0117eeefead1ec062a2fe459811177b9e6c77dc0ea66eb19b013ee29ff | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/57.…
-2b5332173768e003c5796a74ca6373187271317cd988e2436710903369f457ac | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/57.0.6…
-93cc5a3ea60db9d3a5c55b9eefa6501177cd683f656b680ea52f5474d2f1eac1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/57.0.6…
-21617e6dac8fedac91066962b5c43acc3d7d3aa8c110970eee6a59730f26b59f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/57…
-f40be22734dbf26820039bcaf13f137b231551de807b6a2c1d22d17bb65123c8 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/57…
-5cecb07810e9904bc1d78e5128713a1f0395d68bb23a9e54d5fc439712d97822 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/57.…
-b578cfc404c65c23425cb1e614161126b6ba23dd9f3ddf69f1bf3b818392ad69 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/57.…
-b752b3cfb542ef545e5a2ba85b73866571f7cc023ef33c5837c023e2f1cde688 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-d40c5e8f1685be6a4aae237fc791c1ed9039825a8ad359e43852080a1bfc7534 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
-d14d346433e70d7421d90354fe872648c7792590f0d55616b6260043388a885f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/57…
-d90514f55b1e3913636cc6bfb7f2315af2e9c96d6260c8eb91e7893f9d967abb | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/57…
-824a14ce95db32a21650e7a52089c6a831b721d98692da2c149ea1796f725a98 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/57.0…
-9c51fdaecd82272638cbdc1a3cccbaac2b0a2bc7038d1369c16fba01f0b7998b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/57.0…
-f6626406a628a813a98cd0161f3272e0889f8826d86af808d16b23e794e02c66 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/5…
-077de1941fb61a960cfca42f464ea46b2ea586dce6f72f5c788b7ab28416ac29 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/5…
-78851fa5778ab76e45d499e0779c5b09e2b29459013a62021f14effd8b5204d0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-bc47e999eff0933a4063239a0d9833c7c66bb1b2fbe68b7278b6b124577d6009 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
-ec99a44f4790c551af40bc0adfe9ff935cd8bb4b67e126fa5aa749a4c9433ba6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-1ca2614fe938dbf2cddc607d015475ac0e0071fbd82d44f8b6a83a9ccfec744d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
-d91b5fba16cd43cb3dd2668f16d7d657eea7b4ee32375e8c14a6904b13faabe0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-1b885f9aee719a2377cb4a16438cef620a59a80f93813df704c0c1c49213545e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
-7f5d6a32e28afbfcc05909e3c8679fef539220f45c6acc0ee74c8ee068ecc5b1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/5…
-ce39ef13ce3783d215b34f4632c2aac0e640adc639ebc28a21e61836cf6436fc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/5…
-fa6355a90e334f6f4d25ef07b056e16ad25403f399e9a90bc63ec5f0028da6af | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-c39831a3980470dcf95506afa01f8eda55794a136f13ea48475e44dc659d9ae0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
-c75f368f829f04a7e4b8f673083c58306d5b2ca228af78fee30c86d8f3ceed05 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/57.0…
-b89140ae0ecd08853b1d2e751d767e8f153ed72b7a136cb512274a2c1fbeb7b6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/57.0…
-d94918b35844bbea31ad66b2a26d26723818ffc6380a0881d8a3445029405a1e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/57.0…
-7900d717d33e198d34d39dc32f3e2cb7134c3ae78a4fd45198981959080c94ac | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/57.0…
-1b2ccbddf93c88284c73b4b3644b92ff70f2b62ddc936157821353167ca9cb42 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/57.0.…
-3e0ab866e0ef21c8fa17ecbc849a089631a9ea15cff3fa67fa1fdc0ee04cdc54 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/57.0.…
-7e730c67df298467356c24f1f9968f893b3971b64f7e965557ce073b34d4fba4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-8014f6dc8df78d6a2be02b4d67f971f98884c1374716410c7f3165f7aa1f1ca3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
-7270e4b638e2cf663dcba72fa63aa39d923b0c620fda0d2ef8631675b51f7f10 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/57.…
-8b1da04fac23af9adb6b43452a067b8c4cbe6a39ea51dfa4d85c2c0f6e381104 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/57.…
-ab7652da779fbea7b951c44664452a3e221bf955ccbe4e1863b88d344963ab40 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/57.0.6…
-330502059a238f4e436166a5d7ec0bbb6ca9951928c559cc472c712fbb31e9bc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/57.0.6…
-d912b000fcbe608593782b6417c37c0088e37766eb00557a2bcc68f21183ce9c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/57.0.6/…
-04627d4139825e3554178c6049dca15207e7806731b73117bee2595a03e922df | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/57.0.6/…
-af4fe332e5ccad6c4c4770fd5f25d1a2fa2d56985231c25dd44ae02c570861bc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/57.0.6/f…
-96e74ec517c81c42e4a0e97ba7d534b9392e11fd2008ad9e6f4f2eb00bddc437 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/57.0.6/f…
-b8c57d88b152e7ab8b9c36dd8cb7abb85118dee0f28663afcbd2b2380a7ea393 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-0d0622ddec9cec4669eef180e0e9e5567414afae44f5816a66ea1c8d28a07c7e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
-1f757d03617812c059cbb023b9fa320d9c6dba739b66aacb46c02f0339a46547 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/57.0…
-1df5c4655756c0f3bd648429d3905a6ff7fcc85ba035b0a3a043f72d82f51aaf | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/57.0…
-f8677e5e50c30f186ac473c694b2263adcc5b0d8cec10fdf94e65d46c4804516 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/57.…
-dd9f790e13dbc7f9470da6cf526d4d41790ea247ad1b8ecc35347fbad9e6d319 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/57.…
-e048d388d04e3883e55b5cb9c5a50c43b6e3ad7c11659be487929417612afef5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/57.0.…
-8e75859f5a7a03954a79a2651e4b1f2f3f8269bf7ff6087699f84fe3d5495a7a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/57.0.…
-c9582aef3b2ebc06dba329937afcf5ffce378ed02c5debc7eb58b68cda46f75a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-86f557ffdda8e06afe64f3ba02348191215fe71f21c894a8fb5af98cf25471fd | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
-b75b1b868f3772e9fef9ce40d5912823f90116caaec7dc46540fdac333f4256e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-2ca20001b9037f09655d13ff7387d2fcd57a87ed3fe09cb38bb53ebe6fd0e338 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
-5072447af10b43e49519e447c5f20e683aed8b1527552d89b1edefd13dac6dc1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-e05fb83b19a4e75faec544ab6e61b2dca5756c686d498af06ee9a3159c49752d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
-d628ae3063a463210d2dacd96f8b8b6b4649d99a2fd3f3b85618e1d1b2538e5d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/57.0.6…
-d731877200e808fa376445e3e5eccbcc79d8c82fbb72bac8cb708a027f54035c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/57.0.6…
-ccf0ba0db3bb4f2de02e90a941fc3f62005726298a7facb81fa53ab060c5748c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/57.…
-17d0e97a0983221669ebb9021f2361c34c98d57164ce57bb84f253e3a83adcd4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/57.…
-e0cffe2492ebc285afad787478e1dfcc582580990b080a5960702e12973c7427 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/5…
-58eab8f596877d7fb6509817ce5f7076ccd0d7fa610f5dc9fffec40a2c29b8f2 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/5…
-b5721d1284a1cda0fed50837933294a5e95665fb34f34c1e37156263e3d82750 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-e498921f4c859ac62f53c3cb1406b3c32266b5dda207842bc0fbba36199b6853 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
-74e7c382c163887910091e7916f7fce51cf160134f0ca54d34e3311f80fda908 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/5…
-4302c33eadd987eb5c68a0de462548d99fec91d23e55b09addb7b4d6aa953faf | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/5…
-9d182c04f3f4a84ba43fadefae9e2592890c6e03988b997f8f143f78420ddcfd | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-f528513d28218948ccb3026b1a03b3edabd2a65868218c14191486a0dd6ec581 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
-528eace68a32202ac5c54a644a0dbd72f3ad9941581cc9913ec5e89ef8f8760d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/57.0.6/li…
-87a78de78619d1a608d787c5cb7f6d8e844aa12b40ea23b51458941c6cacad9c | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/57.0.6/li…
-270ea22bc03b84f7b1b6fcb87b2eeb3e31c8e8e8b207ea962db0a9d643579589 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/57.…
-16bb72c57462d72fb623d8af8e95197f2c217b0f1c7fc54354864ac0a3e4641e | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/57.…
-72eb146d4a42333f6721613c6c2856c35bff3eecbceddec7dd150adcde18853a | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
-af78ec8ea0130fee2a2e3592e983b8611bc513a1e977de8da962296df50de284 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
-5464597fd0116f6e799464e42f4a4c90bb746919936138dc3e376b65a3d1a36e | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-f3d1e0006298d3244e6777df1174248afdaa6c14f93561c7f2aae749d122bda9 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
-a8daa7620dd417ce28dc2ef6733bee2d31724d3781c1267c38e1da21e43b43b3 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/5…
-de9321be7e68314100fb643e2a70f7831a3a739e2a8095a48d10f119758fc7d9 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/5…
-502ef281da0b593b459f6797187300c5399a3b705878759605e2033ff2508b05 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/57.0.6/li…
-e163932078a3a7ce43595783ee2e432cfc3f4fe5beeb1f30f12f65b0af4d7eb4 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/57.0.6/li…
-809bfd11357b6dcc11c606e5bc183fbdaa2e13606a30c597c99a0b0e4d5281cb | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-77468e63139d1d7757a12e559cc6df328b7c738a9be1e8ad23a748f91cfeb701 | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
-a483fbb43dbaa8790e21f51e9cfdc919b363f649983bbae807bfb6aeeea780ce | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
-eba3f94fdc31a478b0430df91d15f421937299e86a22e25f3457aebc12dc44ee | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
-1282c766aa075bf869c4e9e12703e8b76c5f24642f291f41b03e609a4a055f40 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-a7759c7f2de7b975b52ee4e13014104f1229e1e6321a67c806e3b128002ac27d | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
-e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/57.0.…
-1d0a604b2edd7a7f98d1fa0368d844c9cc188fd909d18a9bff12f2d1e57b753b | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/57.0.…
-49cd8cc90341373fda6926b67fdacd6fadcbc0108b6c06b434ce57c52ad3fde3 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/57…
-90bf6cb1c15fcccf8719cc616bc672e08663b2a9c41e32676d612a3d33b1f6d6 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/57…
-f719ea6a50d05349c4f1a0104c55e1c449e8297f3203ab56b5492d9d1be0868a | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-d5ac4407e18d2f3a18203c34e12c042e21fe93076ff04620e91d3b92c56fce7b | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
-493612b12a77aa189b3fa5d9f904133312a805817d7c6f1623317b80eb445ab0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/57.0.6…
-fec3f03f0c6fb250a6fa348950374062441598a134f5408845d731256e774d48 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/57.0.6…
-3834748245baf1c50a8a31e01910ef3f22c734e449eb7c428a3590dfeda7c0c0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/57.0…
-725517b0643aeffb70f38dba9332e5ae7ff2ebe2d1a7b917d8a636d4da821e0c | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/57.0…
-019a10b6717f62aa708e3fd7935452ecae6fedfddea440a087c079ebc75a0c7e | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/57.0.6/…
-631482ea9ad809efc9e9de798f0f1a6b38cb7898d5f6d53240058464fbc35717 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/57.0.6/…
-7aeadd17067d28d9aa92c18803854163b549f6d264edba6f01b22607a6027636 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/57.0…
-74f3cf0b5043ad89a448648aef9cd6e3b7aa1e072332fe99b5115b7b4272fb17 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/57.0…
-a1f6f7337713dee6c06027fa65fd6fba9b6d8e043233db85970be2389ebf9c04 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/5…
-25c32ef65067a8faf12bb379b2c2e8b2f944ddae1ea4029810b8dffcc63160a4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/5…
-d49f35d74db7a107ffc6b76d3a3b24a69c559bb11406878841115f0116002b88 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/57…
-9d6f8572791f904cda816cbd03b6828650cb77bcf822a52ab3fd9fa6d8e57c44 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/57…
-21e97bac96209bdc2eebb8fc939b2ed7f8bd3e2f720d772fae45f2cdb40f589d | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/57.…
-2e1dea6d5695b320d557524f714042f746da206a2181bf692c7efcdbf5d7d2e1 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/57.…
-37b9f417c8d67f8bb2efc7b209b386d22927ae096023db4f44c88bf898cfc6bd | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-fe4340378f48d59621199f7b5f498471a1674d2b0478d033dcaa81d0886f474b | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
-8802d772db48d526b8241afe2eb9bc238be4e8e099a25b6cc1cbc0f573dfd85f | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/57.0.6…
-bcea6f3966941122644245ea0913f640a0734d734d56311a0486e0ac7301c282 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/57.0.6…
-22934a560b0bc34f01304efbdccc988d2e0fca039ae577894fcec52a7fdfd88e | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/57.0.…
-9393c54a522b60febf82cd497b1b02ffef03aec6fc02d9cfc27188a19863bf7b | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/57.0.…
-1782bab8651c49971b0c3e29ee8c7c15539db31fb1ad712e574e858e3727f182 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-033bb299eeb3856b3dda10b81ba436ccb84c3ba65cc481c3f229294fe8d8120a | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
-47ea2b6dbdcc4b5e962e124dabee3b72f3dff3c7375923f157c62a670b8c7e6a | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-82bc2dead6b2f24644fe9315a929a6d3fec89abe2ad75b2a0604fb6a43e23709 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
-5d22777052629c0f0ce689a8ffb051bd83103f4ba7a558d2b2645df1b0e0c5a5 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/57.…
-35482b4e765391c1f9e4516dad4fe22fab397371d5f98527f6dfb1c0c4508282 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/57.…
-f0b20de68ace4793cf51d8ecd39bba6356134fa290ec8a3c457ed3e1e100f47f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/57.0.6/ui…
-99ba029088a186e2aa22cd43a9efe4376401f012d4587ba371023f184f195401 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/57.0.6/ui…
-52728c6033d046cda35f0e37e6cc1b62105ec9e19e263d74603ef73d938ec8bb | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/57.0.6/ui-…
-b8f4e6be17baa10ed0f7a6b9c328571e125da2b21a8407dc54c6a2185a2b573c | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/57.0.6/ui-…
-81eb04ab0931b48c0e49782528f197ef2a09ba8480db02b1463f7d56931f858b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/57.0.…
-4c581334228464618e362c4c4401ef1aae461e31da5cfc48ce8412e29a347036 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/57.0.…
-465a618f0723991c14f9b7569289c889572f534a47f98819250585df1dbdcfa0 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/57.0.6/u…
-050fde2edbb43e74951db0f0e564ee0364058e4023e0d2ee24ceeca670acca84 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/57.0.6/u…
+5f6bfe0a609eb050c938b08e4342916b35627e85b8e83b8aafd13d41c227ffc3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+f7b960f8403293774e2525baa17a248980bb66a1597d402c3dd994d2e1faffd3 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-awesomebar/…
+5a55d12b1fd3d08d00f9cc87cecbc634a634ed5af5874fb5e5c2fb65ae150410 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/57.…
+68fe053675190d3488b60ee9a5472cfe4d3f9eb6cf73251162da5e90aac8e729 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-domains/57.…
+1dd2e8cb21d1d48b72bbec5f8978827f0ec40de5a34b0720441731397094b9d7 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+a366a8a7698d5e717445a9cf0cba32c263ab3468538e0039be4fcf71885440d6 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+067543abe32b8c57c50ca08c9250a40563dcd7e8fcc91777beb8f6a3a4280427 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+cd1bef87d7106aac5b269c078e8fc30d924a565176394aa6cfe845e067ab1ee6 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-engine-geck…
+371257933c6ce25b3c19be1460610ac0379461d898d4fee03e892df707ae2483 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+337de5e2ab9c77bd93e4ccd2036722c4e0019b3c9bace33fb11930880fb1d20f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-errorpages/…
+28c81a07de6d7d519be2a63fb0d0389aed84b1a7857037ccba9e4aa752d64700 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/57.0.…
+0b4b2f4fb121b2bc8864ebd36864537040f31b3f1a053d77d219e897c998b4cf | https://maven.mozilla.org/maven2/org/mozilla/components/browser-icons/57.0.…
+31b441240cd7137ee5fbad950ca18fd650f176fc68f469f0c41fa4d60adad324 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/57.0.7…
+2d89061a9312e4d38fa39a232e59d6c16c1587f29c56b34e6e70bd85a77b5f01 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu/57.0.7…
+74e46d1d56a4bb2f4cf8275300476e8f55c70770ff50af008a8bdf1a52bfd001 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/57.0.…
+345dbd71f578b2a3615e7a86f7f9d0b1786edfa21ba9ecf294b48e58e7e08a32 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-menu2/57.0.…
+39744aaee8b6aa9183f9ec96d5e960fe55f5ada1963756d555283720e6cc4f98 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/57.0…
+d15fae48071c32407bca938c0dfdd6f83679439f27ceee509b27e4952c7058b1 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-search/57.0…
+67451ba96f48cb0fdccfdf645283c593a5117b149dc5ebb527a24f457c7dd0f5 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/57.…
+f65da7fce8bb94dfb55b07bab82677428c2169998e1f7924e132dddb7eb9ace9 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-session/57.…
+366101efe7a954b82dc9b3cd9e108553871d87d719ccd93c6df3ae2e0d472e04 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/57.0.…
+ead7e197ec517847f725989e7dba3575892114b8c586dbe58d2dcb2cb6edfefe | https://maven.mozilla.org/maven2/org/mozilla/components/browser-state/57.0.…
+39a1f741d7fc9760287053c81157caffba1f4a318530ea192d48f45e1f5eaa31 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+e22802553715ef7a43c527ea2e77323ee668b918024de7f933ea8cef352f2ba4 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-storage-syn…
+88bc2639447874d810900dae880c4dc44a1f5db431ce7e6a0f9dfd21fcd79efa | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/57…
+a4b06488f68d6e3ec75661341aa505b4c490a483ee0f7a2da86ddb466148cb8f | https://maven.mozilla.org/maven2/org/mozilla/components/browser-tabstray/57…
+375062f26e552de415511c0e85f108e847eaa2c353f8f73d79b8fa0a00c0b7fd | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+c513510cce5042db56b1a0669b4f907345f2066e508ef607defe93c9a9be4546 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-thumbnails/…
+fbb056d3886cf543b68e70c3a31fc05d8a80d8b581e77c50a9d22ff45de3f81d | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/57.…
+c4546168c850a90712a097eff072a00a56bbcd6eccdd7e16d72d1a18cd8dbe20 | https://maven.mozilla.org/maven2/org/mozilla/components/browser-toolbar/57.…
+389b0ad314e88bbf7b849cc14739a442ddc8916dbf40d2b28d9caa5197dc015d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+cdfd32a01705f0ad3016e997c19464fc62287e1c94e209ecf329f97f78af15dc | https://maven.mozilla.org/maven2/org/mozilla/components/concept-awesomebar/…
+57fd18d3b217015c39cefedfed5a8231191bd5b25945f4c984c476515260c2c2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/57.0…
+c2296ca92d8e1f2544204c81ac591026b52c7ef41925a88e7e61f2a954c6f035 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-engine/57.0…
+1bad0185cb4fa997f8843b976a42b648047ee42761c3adb32395940dafca1fc1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/57.0.…
+94e14fb5cbc5a337e01577bc4b3b4ff1f44c3ab4c7c837dffe7851369566d7d2 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-fetch/57.0.…
+bbe901d57b1e16e6ea12f046337e1c3fdef728f0f400e209a33b170eb7069956 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/57.0.7…
+7410a8b18728006b5c46be479778158d788f758897262c93aa4b0f00bb0a1521 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-menu/57.0.7…
+86425d68f958653f4ea53e2ecf18ed6ef33aa85382b90dc4cadfbc45dfe1cef1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/57.0.7…
+34ba5187405ccb4bb19e75d1d84e183e8676447b1e5b597e6bee0c520481207c | https://maven.mozilla.org/maven2/org/mozilla/components/concept-push/57.0.7…
+4d0677e3e8af4559125239ac5520d5ab2869456b538cdecca69a0b6764a4bbe1 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/57.…
+761f9795c8d74c360897732d600402dd6d0a1005f6921ea1638523524cd7640a | https://maven.mozilla.org/maven2/org/mozilla/components/concept-storage/57.…
+2b5332173768e003c5796a74ca6373187271317cd988e2436710903369f457ac | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/57.0.7…
+12aa92e9393c5cc3fa81490d5c4b5c8e80de2383505f3ce1223f789d9b3f394d | https://maven.mozilla.org/maven2/org/mozilla/components/concept-sync/57.0.7…
+21617e6dac8fedac91066962b5c43acc3d7d3aa8c110970eee6a59730f26b59f | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/57…
+3f36cd15046a97ab9d34fb6684d28014fc0dbb50ab81d1995e9d43757fee10ba | https://maven.mozilla.org/maven2/org/mozilla/components/concept-tabstray/57…
+5cecb07810e9904bc1d78e5128713a1f0395d68bb23a9e54d5fc439712d97822 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/57.…
+6b1263f6962e6a487a9b97e72b20fda7ca1869eb74cf55a6f9b32f87943c81b3 | https://maven.mozilla.org/maven2/org/mozilla/components/concept-toolbar/57.…
+b752b3cfb542ef545e5a2ba85b73866571f7cc023ef33c5837c023e2f1cde688 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+d4411f4c8e5fd49ff1083512b97c421c6ef861b0a061cd3b20f18b09c23f613a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts-pu…
+9e2da0973a44b6b1479c49002f12f654bcf436840bd958e1ade106179256b884 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/57…
+fca2019cbbb6821f2d44d8763d045abcfd2439b764f29427ebc00a0eef30bc76 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-accounts/57…
+824a14ce95db32a21650e7a52089c6a831b721d98692da2c149ea1796f725a98 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/57.0…
+fed6ad3e564104cf17f17a43f87d1662500688d3f610e98d77c8f8535db9227b | https://maven.mozilla.org/maven2/org/mozilla/components/feature-addons/57.0…
+f6626406a628a813a98cd0161f3272e0889f8826d86af808d16b23e794e02c66 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/5…
+eb910185a541f3422e0571a1d20f4b4a6b4a7709c178c239442178ac3f939eb8 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-app-links/5…
+78851fa5778ab76e45d499e0779c5b09e2b29459013a62021f14effd8b5204d0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+b34b93fa11ac22d1db753cd3c518bf31e03a9062fe7f6c404904b23ff16d5281 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-awesomebar/…
+ec99a44f4790c551af40bc0adfe9ff935cd8bb4b67e126fa5aa749a4c9433ba6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+4150a564658e1230e6c81d2327847adbf1597f67b9fba3ed92456ad58b871835 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-contextmenu…
+d91b5fba16cd43cb3dd2668f16d7d657eea7b4ee32375e8c14a6904b13faabe0 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+e193afc5ea1d8339e607d76e399267dfcf5921a240bbd966f8cfa18fc70b311e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-customtabs/…
+7f5d6a32e28afbfcc05909e3c8679fef539220f45c6acc0ee74c8ee068ecc5b1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/5…
+41406c0c0c2c6e4337b075cdf59ce10c03de08be48d08040d05fe25b7b42487e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-downloads/5…
+fa6355a90e334f6f4d25ef07b056e16ad25403f399e9a90bc63ec5f0028da6af | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+43b41bb4fed4b93e92a9930e5262636dd24c04b31691de52bf9584c4f45049a4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-findinpage/…
+c75f368f829f04a7e4b8f673083c58306d5b2ca228af78fee30c86d8f3ceed05 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/57.0…
+b81499285e515e50c54287d36b92a9b33c9201aa578641e9393aa55c4a5ccb05 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-intent/57.0…
+d94918b35844bbea31ad66b2a26d26723818ffc6380a0881d8a3445029405a1e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/57.0…
+06eec5063ab9361b66ceda0bcc21b0a2c0929d32fe4518712d59100218e8c744 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-logins/57.0…
+1b2ccbddf93c88284c73b4b3644b92ff70f2b62ddc936157821353167ca9cb42 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/57.0.…
+fdd63ea6bda72b44e432906e2304ffc7380c5f4877bed4c8e35cf9826586c1f5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-media/57.0.…
+7e730c67df298467356c24f1f9968f893b3971b64f7e965557ce073b34d4fba4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+c64ae220671560cddb0188ffac0991da68b5a28ad15ad01eb0f5817f3625ca9d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-privatemode…
+7270e4b638e2cf663dcba72fa63aa39d923b0c620fda0d2ef8631675b51f7f10 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/57.…
+4a0d4f65cd5f05c95add0cf5ecbd313eba3a37e5f8bff54c982287149692c198 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-prompts/57.…
+ab7652da779fbea7b951c44664452a3e221bf955ccbe4e1863b88d344963ab40 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/57.0.7…
+7f49ae36500da9891717262879fd15ec5dcccdbf6c5ce743a22290da2a81a97a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-push/57.0.7…
+d912b000fcbe608593782b6417c37c0088e37766eb00557a2bcc68f21183ce9c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/57.0.7/…
+9694dc1a3e2938f9d046961ec1238ef477b4aa25d38a88fde07d3a2a0c0baa07 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-pwa/57.0.7/…
+af4fe332e5ccad6c4c4770fd5f25d1a2fa2d56985231c25dd44ae02c570861bc | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/57.0.7/f…
+625bdd392457d25677fc0dd9940917560b6d37280c0117808e6049147c06d2ac | https://maven.mozilla.org/maven2/org/mozilla/components/feature-qr/57.0.7/f…
+1d8d3981e1984e95204542a87bb65518873bfe424dbeabfe1707a18d2fafeb78 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+86a2672781f511990eca224650742e42649593c900056398ca673e910e5fb60c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-readerview/…
+1f757d03617812c059cbb023b9fa320d9c6dba739b66aacb46c02f0339a46547 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/57.0…
+c5c88d057fb615d1424a3b364ae73acd6b010d8e0e87cd5be40a70ac263d7892 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-search/57.0…
+f8677e5e50c30f186ac473c694b2263adcc5b0d8cec10fdf94e65d46c4804516 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/57.…
+070fee0ec8b421ed8a8e94759760bc64d4e91d0d863bc253657c4ae0c3550a6f | https://maven.mozilla.org/maven2/org/mozilla/components/feature-session/57.…
+e048d388d04e3883e55b5cb9c5a50c43b6e3ad7c11659be487929417612afef5 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/57.0.…
+fc097fc9fe3da557816bd3f8f00b3fd30b536db5cbbb1ae5b8bfacd6648081e3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-share/57.0.…
+c9582aef3b2ebc06dba329937afcf5ffce378ed02c5debc7eb58b68cda46f75a | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+d0feabe1a6b1bdb880f71e2074a29a032fd95af4225f19927fb8af1cf35d5bd4 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-sitepermiss…
+b75b1b868f3772e9fef9ce40d5912823f90116caaec7dc46540fdac333f4256e | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+fe1616612cf5968a2923886178fce630e89659bdcaddf2089c47d6c5c72ae8ad | https://maven.mozilla.org/maven2/org/mozilla/components/feature-syncedtabs/…
+5072447af10b43e49519e447c5f20e683aed8b1527552d89b1edefd13dac6dc1 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+9598822e46f859cebc277b3c1948413e24beb8bf6026b1de7f22706c5ac20eb3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tab-collect…
+d628ae3063a463210d2dacd96f8b8b6b4649d99a2fd3f3b85618e1d1b2538e5d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/57.0.7…
+1fe9ddd87e90343cd9f431a8889d42a48031844e7e013951894e94a16ed73996 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-tabs/57.0.7…
+ccf0ba0db3bb4f2de02e90a941fc3f62005726298a7facb81fa53ab060c5748c | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/57.…
+964eaaac18eb8e7ab61030341d5b45ecdf82423925edaf7705d85e23780dc990 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-toolbar/57.…
+e0cffe2492ebc285afad787478e1dfcc582580990b080a5960702e12973c7427 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/5…
+046bec45ba286f2c384e252a99568cb17ed17f64466831763cc82b5de27001e3 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-top-sites/5…
+b5721d1284a1cda0fed50837933294a5e95665fb34f34c1e37156263e3d82750 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+046bdd3fa92ae885de544832724cc6b459ede604ff07ccb84df0a77c63cb0d56 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat-r…
+74e7c382c163887910091e7916f7fce51cf160134f0ca54d34e3311f80fda908 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/5…
+d44c3d42f0289e960da61db34f067d74f99d926b9d76cb1b93fcc5d4bd1f721d | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webcompat/5…
+9d182c04f3f4a84ba43fadefae9e2592890c6e03988b997f8f143f78420ddcfd | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+4c014cc610f97b1d5f75fcced17b3b21e09b5b168d4cb858c52e0622075b9bc6 | https://maven.mozilla.org/maven2/org/mozilla/components/feature-webnotifica…
+297bdc9f2cc52bade3efeeff663ab04ab88980940b46d08033bde449f950da6f | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/57.0.7/li…
+74da322dfcebaf0a9529d8e202362fe5acad370c026c4119c8c6bb447d4b9a5d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-crash/57.0.7/li…
+270ea22bc03b84f7b1b6fcb87b2eeb3e31c8e8e8b207ea962db0a9d643579589 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/57.…
+f438e466565d15dd291f1f8697138ade8d801395be824a168c27bcc577fe4652 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-dataprotect/57.…
+72eb146d4a42333f6721613c6c2856c35bff3eecbceddec7dd150adcde18853a | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
+2ebe0b1a9ca60fb2d870ad7ce1eec7b27935889db22e8a030640969078834a3d | https://maven.mozilla.org/maven2/org/mozilla/components/lib-fetch-httpurlco…
+5464597fd0116f6e799464e42f4a4c90bb746919936138dc3e376b65a3d1a36e | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+cc14c4a0c4a311bf7eec092e5d5c4e5784c09be38ebb2d2b8d32c3d0c5c94bef | https://maven.mozilla.org/maven2/org/mozilla/components/lib-publicsuffixlis…
+a8daa7620dd417ce28dc2ef6733bee2d31724d3781c1267c38e1da21e43b43b3 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/5…
+0a4c9a6c6972d0e54a858ec65caade3ae899810fa35475e5d5a5f743ebd03964 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-push-firebase/5…
+502ef281da0b593b459f6797187300c5399a3b705878759605e2033ff2508b05 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/57.0.7/li…
+ac061c9f14d2ee8466e1b022bb461f9458662a5efabcc38ae9c0ed6b935ac701 | https://maven.mozilla.org/maven2/org/mozilla/components/lib-state/57.0.7/li…
+809bfd11357b6dcc11c606e5bc183fbdaa2e13606a30c597c99a0b0e4d5281cb | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+eb0c9cbf164cd587d5a8cf0a7d5432c66c6f9f0d0de3e54dd584094b7d9be726 | https://maven.mozilla.org/maven2/org/mozilla/components/service-digitalasse…
+a483fbb43dbaa8790e21f51e9cfdc919b363f649983bbae807bfb6aeeea780ce | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
+87c6cefc40a5dca772adb723e923363301d5d8843d40e60ac59ea5f270c3a88a | https://maven.mozilla.org/maven2/org/mozilla/components/service-experiments…
+1282c766aa075bf869c4e9e12703e8b76c5f24642f291f41b03e609a4a055f40 | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+cffbfc708ed4d4a7c3c6cd61499a128731728fe6f639c5789ebd684053059c8b | https://maven.mozilla.org/maven2/org/mozilla/components/service-firefox-acc…
+e79f67b5180f06a4680ffea310ceb2c5b0af205a88b3fb1cc76ce96e5b4a7ea7 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/57.0.…
+939501a31ee560e321aee2a71241a7d916a619d79fa1215392ea3856378bd063 | https://maven.mozilla.org/maven2/org/mozilla/components/service-glean/57.0.…
+1407414df4c5439c970e1423106a599c818946c3536d9865caee45a8377d2115 | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/57…
+905886d366c0bc916f24c2ce16629f0d695856944612cc077e579e1571448aac | https://maven.mozilla.org/maven2/org/mozilla/components/service-location/57…
+f719ea6a50d05349c4f1a0104c55e1c449e8297f3203ab56b5492d9d1be0868a | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+d4e6cb9371aa715f13ff74e25a4cf95f3c6f5a50c1af9b1d6d71236a050319e3 | https://maven.mozilla.org/maven2/org/mozilla/components/service-sync-logins…
+4233fd5a2f5089e5d7a835b4047cd4bc83ea3843fba979514a75ad483811c155 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/57.0.7…
+8f6f373efd8131a67016cd80e541539ab1c2b6909e62b69f270210ae7ac6b559 | https://maven.mozilla.org/maven2/org/mozilla/components/support-base/57.0.7…
+3834748245baf1c50a8a31e01910ef3f22c734e449eb7c428a3590dfeda7c0c0 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/57.0…
+2c8fa07ad5665bb715e55a10de02804958551b160c25e72527230ff6776611e3 | https://maven.mozilla.org/maven2/org/mozilla/components/support-images/57.0…
+019a10b6717f62aa708e3fd7935452ecae6fedfddea440a087c079ebc75a0c7e | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/57.0.7/…
+b8f4b5d7098d1c1793b4ab4aa8b64a8fb44a72a4c6aa0a479b7beb618f5870f4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-ktx/57.0.7/…
+7aeadd17067d28d9aa92c18803854163b549f6d264edba6f01b22607a6027636 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/57.0…
+a37bd3ed957ac72178ceb3a011767bdd6e85c8808a1a5351af9f0dda465db440 | https://maven.mozilla.org/maven2/org/mozilla/components/support-locale/57.0…
+bc0ed8e77330270375e6fe4d5793453d40d2d4f77aeae9110b4134a98cf539b6 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/5…
+6a0af6487e59ec6a4fa9cd7be5307d99accb2ec26abe2ffa0f0523cfbd8e8502 | https://maven.mozilla.org/maven2/org/mozilla/components/support-migration/5…
+d49f35d74db7a107ffc6b76d3a3b24a69c559bb11406878841115f0116002b88 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/57…
+099db076785fd75ad48bfe002f08c4a0d464c0f7acc19eaaf245faca909771f9 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rusthttp/57…
+21e97bac96209bdc2eebb8fc939b2ed7f8bd3e2f720d772fae45f2cdb40f589d | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/57.…
+dbf86d3bd39983e494d7d07cafe3eab30ea699fff532aeb66d661876f2e1c243 | https://maven.mozilla.org/maven2/org/mozilla/components/support-rustlog/57.…
+58795c3c6c1dad701cfec9f8dbf4f715eb381481e8d20778107b0bfe95209d04 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+718fef4b5d48cd9f22720c120e7cd036a58ef552ff10e6438ab63f1cc9d6e7e4 | https://maven.mozilla.org/maven2/org/mozilla/components/support-sync-teleme…
+8802d772db48d526b8241afe2eb9bc238be4e8e099a25b6cc1cbc0f573dfd85f | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/57.0.7…
+cb813dea89e6baabd045245a59654a306e48482c60178e376cd44378a63a4c01 | https://maven.mozilla.org/maven2/org/mozilla/components/support-test/57.0.7…
+22934a560b0bc34f01304efbdccc988d2e0fca039ae577894fcec52a7fdfd88e | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/57.0.…
+c0a54cf4564d67f2666627daece7e2fee02974c6f7a0ccdee71cf124851d0bfe | https://maven.mozilla.org/maven2/org/mozilla/components/support-utils/57.0.…
+1782bab8651c49971b0c3e29ee8c7c15539db31fb1ad712e574e858e3727f182 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+3e27886e88f21ca74be523b7f8ab61a5f79d7151448d1ca267d5045abee2f454 | https://maven.mozilla.org/maven2/org/mozilla/components/support-webextensio…
+4173b499da754c1f90c75deaccd164f6baf61b01718e59084c267f167cf327f6 | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+0f5a7bd36f3e9e64f6dafdc9d49591c57f23cc74c4227118a7d2a957219ddd1f | https://maven.mozilla.org/maven2/org/mozilla/components/tooling-glean-gradl…
+5d22777052629c0f0ce689a8ffb051bd83103f4ba7a558d2b2645df1b0e0c5a5 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/57.…
+96bdc3f268716c76989bb9df297b4cc0636fcbf74917e281948c1d07342c3e3f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-autocomplete/57.…
+f0b20de68ace4793cf51d8ecd39bba6356134fa290ec8a3c457ed3e1e100f47f | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/57.0.7/ui…
+27bbdc571ffce43119cba811798899ab561efb6419e35ebcec36cea22069619e | https://maven.mozilla.org/maven2/org/mozilla/components/ui-colors/57.0.7/ui…
+52728c6033d046cda35f0e37e6cc1b62105ec9e19e263d74603ef73d938ec8bb | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/57.0.7/ui-…
+58706d0c3aa601059b10f31eb33d7dbb7381c8294a8ca5f3b53445eee4cc78b4 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-icons/57.0.7/ui-…
+81eb04ab0931b48c0e49782528f197ef2a09ba8480db02b1463f7d56931f858b | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/57.0.…
+f548e10c1d76cd6e2b137fb66aa89d3a5f9241beaff9b3e54807ce44818a5f4c | https://maven.mozilla.org/maven2/org/mozilla/components/ui-tabcounter/57.0.…
+465a618f0723991c14f9b7569289c889572f534a47f98819250585df1dbdcfa0 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/57.0.7/u…
+8637659f0ffc8618cabbdeee8c0cac17478681df821fae3de50b8dfe6360d9c0 | https://maven.mozilla.org/maven2/org/mozilla/components/ui-widgets/57.0.7/u…
dbc48baf933d7e57eaf7f50c1fabb4c45ecabd0a8bd7a21f5533ab05d1b821d8 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
3fe97c6a7bf5bb85cd85f1b2b732bece663fce5a87e4406f95334b9c866f3e20 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-beta/81.0.…
-e3307e77325cf8e5bd1a4bbfb6f69b1dba208c0cd840ed41438790d6862008da | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/82…
-41d405815f5c5c1df8d8f31d61f6a556d0d6b2bc9e02c0f905f41321da1f7f8a | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview-nightly/82…
-b3acbeebbfca2cb7e6d5afa5c23672debd76679752c124e3ae8aa4c5673cdd12 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
-e6754e5153344bacbbe164b1012743db0378b7253b259a1baaa140564fa2aa32 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+f654485c119c284c7e8132154753e11089254ef27b47abe880e4830abe0bf804 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
+9aee6e0f93d25b480c8bce9720f6e9ef73d0e866b1eddf68492805f021076bb3 | https://maven.mozilla.org/maven2/org/mozilla/geckoview/geckoview/81.0.20200…
acfb992486c44ecf3727fac3eb7a4ac69e005e8baae2dd4104208265a947bccd | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
71bf43ad7ea24b261bb1e361c0f1d5642bdc4dab5471ca9628d1b7ad754e84a1 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-forUnitTests/3…
93b2f27c919b07b927d764726eb64350cb7d480bac9485b9192881a9d5d10f30 | https://maven.mozilla.org/maven2/org/mozilla/telemetry/glean-gradle-plugin/…
diff --git a/projects/geckoview/config b/projects/geckoview/config
index 2468f63..d2ce0f6 100644
--- a/projects/geckoview/config
+++ b/projects/geckoview/config
@@ -1,14 +1,14 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'geckoview-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
-git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1-build2'
+git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
gpg_keyring: torbutton.gpg
var:
- geckoview_version: 81.0b9
+ geckoview_version: 81.0.1
torbrowser_branch: 10.0
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
deps:
diff --git a/projects/tba-translation/config b/projects/tba-translation/config
index 3ab638c..8df2663 100644
--- a/projects/tba-translation/config
+++ b/projects/tba-translation/config
@@ -3,5 +3,5 @@ filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
git_url: https://git.torproject.org/translation.git
# We need to bump the commit before releasing but just pointing to a branch
# might cause too much rebuidling of the Firefox part.
-git_hash: 273c5751b135f9d1f6a266b8f66bc43c92976fd9
+git_hash: 428b53e651f16be63b17835cd76474130347c73e
version: '[% c("abbrev") %]'
1
0

[tor-browser-build/maint-10.0a8] Bump gradle dependency versions, changelog fixups, and build3
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit f3968ad15416d7859ea83651d17a220154923eab
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Wed Oct 7 19:32:45 2020 +0000
Bump gradle dependency versions, changelog fixups, and build3
---
projects/android-components/config | 2 +-
projects/fenix/config | 2 +-
projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt | 7 +++----
rbm.conf | 2 +-
4 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/projects/android-components/config b/projects/android-components/config
index 2cbc4d9..e42c0c9 100644
--- a/projects/android-components/config
+++ b/projects/android-components/config
@@ -12,7 +12,7 @@ var:
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 4
+ gradle_dependencies_version: 5
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
# Overwrite `glean_parser` for now to fix #40085.
diff --git a/projects/fenix/config b/projects/fenix/config
index 01b5225..79a1ccf 100644
--- a/projects/fenix/config
+++ b/projects/fenix/config
@@ -14,7 +14,7 @@ var:
container:
use_container: 1
# This should be updated when the list of gradle dependencies is changed.
- gradle_dependencies_version: 6
+ gradle_dependencies_version: 7
# Switch to make it easier to grab all dependencies during a dry-run.
fetch_gradle_dependencies: 0
# Overwrite `glean_parser` for now to fix #40085.
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 0e54d03..f36b366 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -3,7 +3,6 @@ Tor Browser 10.0a8 -- October 8 2020
* Update Fenix to 81.1.2
* Update Tor to 0.4.4.5
* Update NoScript to 11.0.46
- * Update HTTPS Everywhere to 2020.08.13
* Bug 10394: Let Tor Browser update HTTPS Everywhere
* Bug 11154: Disable TLS 1.0 (and 1.1) by default
* Bug 16931: Sanitize the add-on blocklist update URL
@@ -123,9 +122,9 @@ Tor Browser 10.0a8 -- October 8 2020
* Bug 34187: Update zlib to use Android NDK 20
* Bug 40010: Add nss project for application-services [tor-browser-build]
* Bug 40011: Add sqlcipher for application-services [tor-browser-build]
- * Bug 40029: Clean-up all projects to remove fennec bits we don't need for fenix
+ * Bug 40029: Clean-up all projects to remove fennec bits we don't need for fenix [tor-browser-build]
* Bug 40031: Add licenses for kcp-go and smux. [tor-browser-build]
- * Bug 40039: Remove version_path in nss project
+ * Bug 40039: Remove version_path in nss project [tor-browser-build]
* Bug 40040: Wire geckoview, application-services, android-components, and fenix together [tor-browser-build]
* Bug 40054: Adapt build.android script in tor-browser project for fenix [tor-browser-build]
* Bug 40055: Integrate building Glean in offline mode [tor-browser-build]
@@ -142,7 +141,7 @@ Tor Browser 10.0a8 -- October 8 2020
* Bug 40085+40086: classes.dex files are not reproducible in Fenix [tor-browser-build]
* Bug 40087: Deterministically add HTTPS Everywhere into omni.ja [tor-browser-build]
* Bug 40088+40117: Use MOZ_BUILD_DATE for extension manifest timestamps [tor-browser-build]
- * Bug 40093: Ensure application-services libs do not include libc networking symbols
+ * Bug 40093: Ensure application-services libs do not include libc networking symbols [tor-browser-build]
* Bug 40094: Aarch64 fenix rust cross-compilation fails [tor-browser-build]
* Bug 40095: The pattern for the apk variable in build.android is matching too much [tor-browser-build]
* Bug 40101: Pick up Fenix 81.1.1 [tor-browser-build]
diff --git a/rbm.conf b/rbm.conf
index 5d287af..e3649c9 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -25,7 +25,7 @@ buildconf:
var:
torbrowser_version: '10.0a8'
- torbrowser_build: 'build2'
+ torbrowser_build: 'build3'
torbrowser_incremental_from:
- 10.0a7
project_name: tor-browser
1
0

[tor-browser/tor-browser-82.0b7-10.0-1] Revert "fixup! TB4: Tor Browser's Firefox preference overrides."
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 6f0a67881b3163073db96fc6273b3fde4d8d64e5
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Wed Oct 7 13:29:31 2020 +0000
Revert "fixup! TB4: Tor Browser's Firefox preference overrides."
This reverts commit c386fb3312237fd6c0d123ba9aaad662f8740e56.
---
browser/app/profile/000-tor-browser.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 786e77fffd55..06e9e17086f8 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -287,6 +287,8 @@ pref("extensions.htmlaboutaddons.recommendations.enabled", false);
pref("extensions.legacy.exceptions", "{972ce4c6-7e08-4474-a285-3208198ce6fd},torbutton(a)torproject.org");
// Bug 26114: Allow NoScript to access addons.mozilla.org etc.
pref("extensions.webextensions.restrictedDomains", "");
+// Bug 31396: Disable indexedDB WebExtension storage backend.
+pref("extensions.webextensions.ExtensionStorageIDB.enabled", false);
// Bug 28896: Make sure our bundled WebExtensions are running in Private Browsing Mode
pref("extensions.allowPrivateBrowsingByDefault", true);
1
0

07 Oct '20
commit 642fa340ce009dfc5d1c62d98c9cb6ac32af5e27
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Wed Oct 7 15:59:07 2020 +0000
Use geckoview -build1
---
projects/geckoview/config | 2 +-
rbm.conf | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/projects/geckoview/config b/projects/geckoview/config
index 1b1801d..d2ce0f6 100644
--- a/projects/geckoview/config
+++ b/projects/geckoview/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'geckoview-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
-git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1-build2'
+git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/torbrowser_branch") %]-1-build1'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
diff --git a/rbm.conf b/rbm.conf
index 2ec9b33..5d287af 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -25,7 +25,7 @@ buildconf:
var:
torbrowser_version: '10.0a8'
- torbrowser_build: 'build1'
+ torbrowser_build: 'build2'
torbrowser_incremental_from:
- 10.0a7
project_name: tor-browser
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Revert "fixup! TB4: Tor Browser's Firefox preference overrides."
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit f6d5a694b33d08f7e4d955e14a8405a82452bf84
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Wed Oct 7 13:29:31 2020 +0000
Revert "fixup! TB4: Tor Browser's Firefox preference overrides."
This reverts commit c386fb3312237fd6c0d123ba9aaad662f8740e56.
---
browser/app/profile/000-tor-browser.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index 278c368c823c..304443230cf0 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -287,6 +287,8 @@ pref("extensions.htmlaboutaddons.recommendations.enabled", false);
pref("extensions.legacy.exceptions", "{972ce4c6-7e08-4474-a285-3208198ce6fd},torbutton(a)torproject.org");
// Bug 26114: Allow NoScript to access addons.mozilla.org etc.
pref("extensions.webextensions.restrictedDomains", "");
+// Bug 31396: Disable indexedDB WebExtension storage backend.
+pref("extensions.webextensions.ExtensionStorageIDB.enabled", false);
// Bug 28896: Make sure our bundled WebExtensions are running in Private Browsing Mode
pref("extensions.allowPrivateBrowsingByDefault", true);
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 13543: Spoof smooth and powerEfficient for Media Capabilities
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit c4c9fc906fc13926a2b9b3268e85ef01b297922b
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 10 15:08:12 2019 +0200
Bug 13543: Spoof smooth and powerEfficient for Media Capabilities
---
dom/media/mediacapabilities/MediaCapabilities.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/dom/media/mediacapabilities/MediaCapabilities.cpp b/dom/media/mediacapabilities/MediaCapabilities.cpp
index 9f2b0d8463ff..1cc5f0a8ff0f 100644
--- a/dom/media/mediacapabilities/MediaCapabilities.cpp
+++ b/dom/media/mediacapabilities/MediaCapabilities.cpp
@@ -288,6 +288,11 @@ already_AddRefed<Promise> MediaCapabilities::DecodingInfo(
if (aValue.IsReject()) {
p = CapabilitiesPromise::CreateAndReject(
std::move(aValue.RejectValue()), __func__);
+ } else if (nsContentUtils::
+ ShouldResistFingerprinting()) {
+ p = CapabilitiesPromise::CreateAndResolve(
+ MediaCapabilitiesInfo(true, true, false),
+ __func__);
} else {
MOZ_ASSERT(config->IsVideo());
if (StaticPrefs::media_mediacapabilities_from_database()) {
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 31607: App menu items stop working on macOS
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 34092628552a941e22ac5fb2715faf90da3ab1a0
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Thu Oct 3 10:53:43 2019 -0400
Bug 31607: App menu items stop working on macOS
Avoid re-creating the hidden window, since this causes the nsMenuBarX
object that is associated with the app menu to be freed (which in
turn causes all of the app menu items to stop working).
More detail: There should only be one hidden window.
XREMain::XRE_mainRun() contains an explicit call to create the
hidden window and that is the normal path by which it is created.
However, when Tor Launcher's wizard/progress window is opened during
startup, a hidden window is created earlier as a side effect of
calls to nsAppShellService::GetHiddenWindow(). Then, when
XREMain::XRE_mainRun() creates its hidden window, the original one
is freed which also causes the app menu's nsMenuBarX object which
is associated with that window to be destroyed. When that happens,
the menuGroupOwner property within each Cocoa menu items's MenuItemInfo
object is cleared. This breaks the link that is necessary for
NativeMenuItemTarget's menuItemHit method to dispatch a menu item
event.
---
xpfe/appshell/nsAppShellService.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/xpfe/appshell/nsAppShellService.cpp b/xpfe/appshell/nsAppShellService.cpp
index d70fe4e6b239..9c6a09c10a0f 100644
--- a/xpfe/appshell/nsAppShellService.cpp
+++ b/xpfe/appshell/nsAppShellService.cpp
@@ -93,6 +93,10 @@ void nsAppShellService::EnsureHiddenWindow() {
NS_IMETHODIMP
nsAppShellService::CreateHiddenWindow() {
+ if (mHiddenWindow) {
+ return NS_OK;
+ }
+
if (!XRE_IsParentProcess()) {
return NS_ERROR_NOT_IMPLEMENTED;
}
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 32092: Fix Tor Browser Support link in preferences
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 5cca488d2e4ed1021464363a380b807aa62980b6
Author: Alex Catarineu <acat(a)torproject.org>
Date: Tue Oct 15 22:54:10 2019 +0200
Bug 32092: Fix Tor Browser Support link in preferences
---
browser/components/preferences/preferences.js | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index fcb722eea0b2..9e97ca2a2180 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -166,10 +166,7 @@ function init_all() {
gotoPref().then(() => {
let helpButton = document.getElementById("helpButton");
- let helpUrl =
- Services.urlFormatter.formatURLPref("app.support.baseURL") +
- "preferences";
- helpButton.setAttribute("href", helpUrl);
+ helpButton.setAttribute("href", "https://support.torproject.org/tbb");
document.getElementById("addonsButton").addEventListener("click", e => {
if (e.button >= 2) {
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 27604: Fix addon issues when moving TB directory
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 3d7f75d7c006e5e4585fc2a1eca67b78e683b68d
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Oct 30 10:44:48 2019 +0100
Bug 27604: Fix addon issues when moving TB directory
---
toolkit/mozapps/extensions/internal/XPIProvider.jsm | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
index a27888278f77..78c0b0f7c702 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -485,7 +485,7 @@ class XPIState {
// Builds prior to be 1512436 did not include the rootURI property.
// If we're updating from such a build, add that property now.
- if (!("rootURI" in this) && this.file) {
+ if (this.file) {
this.rootURI = getURIForResourceInFile(this.file, "").spec;
}
@@ -498,7 +498,10 @@ class XPIState {
saved.currentModifiedTime != this.lastModifiedTime
) {
this.lastModifiedTime = saved.currentModifiedTime;
- } else if (saved.currentModifiedTime === null) {
+ } else if (
+ saved.currentModifiedTime === null &&
+ (!this.file || !this.file.exists())
+ ) {
this.missing = true;
}
}
@@ -1439,6 +1442,7 @@ var XPIStates = {
if (oldState[loc.name]) {
loc.restore(oldState[loc.name]);
+ changed = changed || loc.path != oldState[loc.name].path;
}
changed = changed || loc.changed;
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 31740: Remove some unnecessary RemoteSettings instances
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit ee5920f60931cc593fcf972c8f34acb0f68ecdc5
Author: Alex Catarineu <acat(a)torproject.org>
Date: Wed Oct 16 23:01:12 2019 +0200
Bug 31740: Remove some unnecessary RemoteSettings instances
More concretely, SearchService.jsm 'hijack-blocklists' and
url-classifier-skip-urls.
Avoid creating instance for 'anti-tracking-url-decoration'.
If prefs are disabling their usage, avoid creating instances for
'cert-revocations' and 'intermediates'.
Do not ship JSON dumps for collections we do not expect to need. For
the ones in the 'main' bucket, this prevents them from being synced
unnecessarily (the code in remote-settings does so for collections
in the main bucket for which a dump or local data exists). For the
collections in the other buckets, we just save some size by not
shipping their dumps.
We also clear the collections database on the v2 -> v3 migration.
---
.../url-classifier/UrlClassifierFeatureBase.cpp | 2 +-
netwerk/url-classifier/components.conf | 6 ------
security/manager/ssl/RemoteSecuritySettings.jsm | 22 ++++++++++++++++++++++
services/settings/IDBHelpers.jsm | 4 ++++
services/settings/dumps/blocklists/moz.build | 1 -
services/settings/dumps/main/moz.build | 6 ------
services/settings/dumps/security-state/moz.build | 1 -
.../components/antitracking/antitracking.manifest | 2 +-
toolkit/components/antitracking/components.conf | 7 -------
toolkit/components/search/SearchService.jsm | 2 --
10 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/netwerk/url-classifier/UrlClassifierFeatureBase.cpp b/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
index 07da1fd07374..48bcc7d10af9 100644
--- a/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
+++ b/netwerk/url-classifier/UrlClassifierFeatureBase.cpp
@@ -78,7 +78,7 @@ void UrlClassifierFeatureBase::InitializePreferences() {
nsCOMPtr<nsIUrlClassifierExceptionListService> exceptionListService =
do_GetService("@mozilla.org/url-classifier/exception-list-service;1");
- if (NS_WARN_IF(!exceptionListService)) {
+ if (!exceptionListService) {
return;
}
diff --git a/netwerk/url-classifier/components.conf b/netwerk/url-classifier/components.conf
index 03a02f0ebeab..b2e667247317 100644
--- a/netwerk/url-classifier/components.conf
+++ b/netwerk/url-classifier/components.conf
@@ -13,10 +13,4 @@ Classes = [
'constructor': 'mozilla::net::ChannelClassifierService::GetSingleton',
'headers': ['mozilla/net/ChannelClassifierService.h'],
},
- {
- 'cid': '{b9f4fd03-9d87-4bfd-9958-85a821750ddc}',
- 'contract_ids': ['@mozilla.org/url-classifier/exception-list-service;1'],
- 'jsm': 'resource://gre/modules/UrlClassifierExceptionListService.jsm',
- 'constructor': 'UrlClassifierExceptionListService',
- },
]
diff --git a/security/manager/ssl/RemoteSecuritySettings.jsm b/security/manager/ssl/RemoteSecuritySettings.jsm
index 3fedd43ed9be..fd2b69bc6a4f 100644
--- a/security/manager/ssl/RemoteSecuritySettings.jsm
+++ b/security/manager/ssl/RemoteSecuritySettings.jsm
@@ -350,6 +350,16 @@ var RemoteSecuritySettings = {
class IntermediatePreloads {
constructor() {
+ this.maybeInit();
+ }
+
+ maybeInit() {
+ if (
+ this.client ||
+ !Services.prefs.getBoolPref(INTERMEDIATES_ENABLED_PREF, true)
+ ) {
+ return;
+ }
this.client = RemoteSettings(
Services.prefs.getCharPref(INTERMEDIATES_COLLECTION_PREF),
{
@@ -379,6 +389,7 @@ class IntermediatePreloads {
);
return;
}
+ this.maybeInit();
// Download attachments that are awaiting download, up to a max.
const maxDownloadsPerRun = Services.prefs.getIntPref(
@@ -709,6 +720,16 @@ function compareFilters(filterA, filterB) {
class CRLiteFilters {
constructor() {
+ this.maybeInit();
+ }
+
+ maybeInit() {
+ if (
+ this.client ||
+ !Services.prefs.getBoolPref(CRLITE_FILTERS_ENABLED_PREF, true)
+ ) {
+ return;
+ }
this.client = RemoteSettings(
Services.prefs.getCharPref(CRLITE_FILTERS_COLLECTION_PREF),
{
@@ -734,6 +755,7 @@ class CRLiteFilters {
);
return;
}
+ this.maybeInit();
let current = await this.client.db.list();
let fullFilters = current.filter(filter => !filter.incremental);
if (fullFilters.length < 1) {
diff --git a/services/settings/IDBHelpers.jsm b/services/settings/IDBHelpers.jsm
index 5dc59c3687ef..010a5ea82987 100644
--- a/services/settings/IDBHelpers.jsm
+++ b/services/settings/IDBHelpers.jsm
@@ -188,6 +188,10 @@ async function openIDB(allowUpgrades = true) {
});
}
if (event.oldVersion < 3) {
+ // Clear existing stores for a fresh start
+ transaction.objectStore("records").clear();
+ transaction.objectStore("timestamps").clear();
+ transaction.objectStore("collections").clear();
// Attachment store
db.createObjectStore("attachments", {
keyPath: ["cid", "attachmentId"],
diff --git a/services/settings/dumps/blocklists/moz.build b/services/settings/dumps/blocklists/moz.build
index 1683ab6aafa4..dd0bad30f19a 100644
--- a/services/settings/dumps/blocklists/moz.build
+++ b/services/settings/dumps/blocklists/moz.build
@@ -9,7 +9,6 @@ with Files('**'):
# The addons blocklist is also in mobile/android/installer/package-manifest.in
FINAL_TARGET_FILES.defaults.settings.blocklists += ['addons-bloomfilters.json',
- 'addons.json',
'gfx.json',
'plugins.json']
diff --git a/services/settings/dumps/main/moz.build b/services/settings/dumps/main/moz.build
index 8e202303e9c8..e25fc4214042 100644
--- a/services/settings/dumps/main/moz.build
+++ b/services/settings/dumps/main/moz.build
@@ -3,16 +3,10 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_TARGET_FILES.defaults.settings.main += [
- 'anti-tracking-url-decoration.json',
'example.json',
'hijack-blocklists.json',
'language-dictionaries.json',
- 'onboarding.json',
- 'search-config.json',
'search-default-override-allowlist.json',
- 'sites-classification.json',
- 'top-sites.json',
- 'url-classifier-skip-urls.json',
]
if CONFIG['MOZ_BUILD_APP'] == 'browser':
diff --git a/services/settings/dumps/security-state/moz.build b/services/settings/dumps/security-state/moz.build
index d8f8227a0278..37410d0fb054 100644
--- a/services/settings/dumps/security-state/moz.build
+++ b/services/settings/dumps/security-state/moz.build
@@ -3,7 +3,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FINAL_TARGET_FILES.defaults.settings['security-state'] += [
- 'intermediates.json',
'onecrl.json',
]
diff --git a/toolkit/components/antitracking/antitracking.manifest b/toolkit/components/antitracking/antitracking.manifest
index 5eb37f9a3f99..872e6af07575 100644
--- a/toolkit/components/antitracking/antitracking.manifest
+++ b/toolkit/components/antitracking/antitracking.manifest
@@ -1 +1 @@
-category profile-after-change URLDecorationAnnotationsService @mozilla.org/tracking-url-decoration-service;1 process=main
+# category profile-after-change URLDecorationAnnotationsService @mozilla.org/tracking-url-decoration-service;1 process=main
diff --git a/toolkit/components/antitracking/components.conf b/toolkit/components/antitracking/components.conf
index 74a8a21277d9..04b2ba1b815f 100644
--- a/toolkit/components/antitracking/components.conf
+++ b/toolkit/components/antitracking/components.conf
@@ -11,13 +11,6 @@ Classes = [
'jsm': 'resource://gre/modules/TrackingDBService.jsm',
'constructor': 'TrackingDBService',
},
- {
- 'cid': '{5874af6d-5719-4e1b-b155-ef4eae7fcb32}',
- 'contract_ids': ['@mozilla.org/tracking-url-decoration-service;1'],
- 'jsm': 'resource://gre/modules/URLDecorationAnnotationsService.jsm',
- 'constructor': 'URLDecorationAnnotationsService',
- 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
- },
{
'cid': '{90d1fd17-2018-4e16-b73c-a04a26fa6dd4}',
'contract_ids': ['@mozilla.org/purge-tracker-service;1'],
diff --git a/toolkit/components/search/SearchService.jsm b/toolkit/components/search/SearchService.jsm
index 86fd01c3b10a..a6d81ed66178 100644
--- a/toolkit/components/search/SearchService.jsm
+++ b/toolkit/components/search/SearchService.jsm
@@ -549,8 +549,6 @@ SearchService.prototype = {
.catch(ex => logConsole.error("_init: failure determining region:", ex))
.finally(() => (this._ensureKnownRegionPromise = null));
- this._setupRemoteSettings().catch(Cu.reportError);
-
await this._loadEngines(cache);
// If we've got this far, but the application is now shutting down,
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 32220: Improve the letterboxing experience
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 891f4add9c36a3c84c282ec27220617dcdf8071f
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Oct 28 17:42:17 2019 -0700
Bug 32220: Improve the letterboxing experience
CSS and JS changes to alter the UX surrounding letterboxing. The
browser element containing page content is now anchored to the bottom
of the toolbar, and the remaining letterbox margin is the same color
as the firefox chrome. The letterbox margin and border are tied to
the currently selected theme.
Also adds a 'needsLetterbox' property to tabbrowser.xml to fix a race
condition present when using the 'isEmpty' property. Using 'isEmpty'
as a proxy for 'needsLetterbox' resulted in over-zealous/unnecessary
letterboxing of about:blank tabs.
---
browser/base/content/browser.css | 8 ++
browser/base/content/tabbrowser-tab.js | 9 +++
browser/themes/shared/tabs.inc.css | 6 ++
.../components/resistfingerprinting/RFPHelper.jsm | 94 +++++++++++++++++++---
4 files changed, 105 insertions(+), 12 deletions(-)
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
index 085e47cad9f0..07694dbd2c30 100644
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -85,6 +85,14 @@ body {
display: none;
}
+
+.browserStack > browser.letterboxing {
+ border-color: var(--chrome-content-separator-color);
+ border-style: solid;
+ border-width : 1px;
+ border-top: none;
+}
+
%ifdef MENUBAR_CAN_AUTOHIDE
#toolbar-menubar[autohide="true"] {
overflow: hidden;
diff --git a/browser/base/content/tabbrowser-tab.js b/browser/base/content/tabbrowser-tab.js
index 183eff1bab86..7f376ab1d122 100644
--- a/browser/base/content/tabbrowser-tab.js
+++ b/browser/base/content/tabbrowser-tab.js
@@ -225,6 +225,15 @@
return true;
}
+ get needsLetterbox() {
+ let browser = this.linkedBrowser;
+ if (isBlankPageURL(browser.currentURI.spec)) {
+ return false;
+ }
+
+ return true;
+ }
+
get lastAccessed() {
return this._lastAccessed == Infinity ? Date.now() : this._lastAccessed;
}
diff --git a/browser/themes/shared/tabs.inc.css b/browser/themes/shared/tabs.inc.css
index b8a117532049..cf8f444b262d 100644
--- a/browser/themes/shared/tabs.inc.css
+++ b/browser/themes/shared/tabs.inc.css
@@ -33,6 +33,12 @@
background-color: #f9f9fa;
}
+/* extend down the toolbar's colors when letterboxing is enabled*/
+#tabbrowser-tabpanels.letterboxing {
+ background-color: var(--toolbar-bgcolor);
+ background-image: var(--toolbar-bgimage);
+}
+
:root[privatebrowsingmode=temporary] #tabbrowser-tabpanels {
/* Value for --in-content-page-background in aboutPrivateBrowsing.css */
background-color: #25003e;
diff --git a/toolkit/components/resistfingerprinting/RFPHelper.jsm b/toolkit/components/resistfingerprinting/RFPHelper.jsm
index 166ad21e9013..9520d8720631 100644
--- a/toolkit/components/resistfingerprinting/RFPHelper.jsm
+++ b/toolkit/components/resistfingerprinting/RFPHelper.jsm
@@ -40,6 +40,7 @@ class _RFPHelper {
// ============================================================================
constructor() {
this._initialized = false;
+ this._borderDimensions = null;
}
init() {
@@ -361,6 +362,24 @@ class _RFPHelper {
});
}
+ getBorderDimensions(aBrowser) {
+ if (this._borderDimensions) {
+ return this._borderDimensions;
+ }
+
+ const win = aBrowser.ownerGlobal;
+ const browserStyle = win.getComputedStyle(aBrowser);
+
+ this._borderDimensions = {
+ top : parseInt(browserStyle.borderTopWidth),
+ right: parseInt(browserStyle.borderRightWidth),
+ bottom : parseInt(browserStyle.borderBottomWidth),
+ left : parseInt(browserStyle.borderLeftWidth),
+ };
+
+ return this._borderDimensions;
+ }
+
_addOrClearContentMargin(aBrowser) {
let tab = aBrowser.getTabBrowser().getTabForBrowser(aBrowser);
@@ -369,9 +388,13 @@ class _RFPHelper {
return;
}
+ // we add the letterboxing class even if the content does not need letterboxing
+ // in which case margins are set such that the borders are hidden
+ aBrowser.classList.add("letterboxing");
+
// We should apply no margin around an empty tab or a tab with system
// principal.
- if (tab.isEmpty || aBrowser.contentPrincipal.isSystemPrincipal) {
+ if (!tab.needsLetterbox || aBrowser.contentPrincipal.isSystemPrincipal) {
this._clearContentViewMargin(aBrowser);
} else {
this._roundContentView(aBrowser);
@@ -539,10 +562,29 @@ class _RFPHelper {
// Calculating the margins around the browser element in order to round the
// content viewport. We will use a 200x100 stepping if the dimension set
// is not given.
- let margins = calcMargins(containerWidth, containerHeight);
+
+ const borderDimensions = this.getBorderDimensions(aBrowser);
+ const marginDims = calcMargins(containerWidth, containerHeight - borderDimensions.top);
+
+ let margins = {
+ top : 0,
+ right : 0,
+ bottom : 0,
+ left : 0,
+ };
+
+ // snap browser element to top
+ margins.top = 0;
+ // and leave 'double' margin at the bottom
+ margins.bottom = 2 * marginDims.height - borderDimensions.bottom;
+ // identical margins left and right
+ margins.right = marginDims.width - borderDimensions.right;
+ margins.left = marginDims.width - borderDimensions.left;
+
+ const marginStyleString = `${margins.top}px ${margins.right}px ${margins.bottom}px ${margins.left}px`;
// If the size of the content is already quantized, we do nothing.
- if (aBrowser.style.margin == `${margins.height}px ${margins.width}px`) {
+ if (aBrowser.style.margin === marginStyleString) {
log("_roundContentView[" + logId + "] is_rounded == true");
if (this._isLetterboxingTesting) {
log(
@@ -563,19 +605,35 @@ class _RFPHelper {
"_roundContentView[" +
logId +
"] setting margins to " +
- margins.width +
- " x " +
- margins.height
+ marginStyleString
);
- // One cannot (easily) control the color of a margin unfortunately.
- // An initial attempt to use a border instead of a margin resulted
- // in offset event dispatching; so for now we use a colorless margin.
- aBrowser.style.margin = `${margins.height}px ${margins.width}px`;
+
+ // The margin background color is determined by the background color of the
+ // window's tabpanels#tabbrowser-tabpanels element
+ aBrowser.style.margin = marginStyleString;
});
}
_clearContentViewMargin(aBrowser) {
+ const borderDimensions = this.getBorderDimensions(aBrowser);
+ // set the margins such that the browser elements border is visible up top, but
+ // are rendered off-screen on the remaining sides
+ let margins = {
+ top : 0,
+ right : -borderDimensions.right,
+ bottom : -borderDimensions.bottom,
+ left : -borderDimensions.left,
+ };
+ const marginStyleString = `${margins.top}px ${margins.right}px ${margins.bottom}px ${margins.left}px`;
+
+ aBrowser.ownerGlobal.requestAnimationFrame(() => {
+ aBrowser.style.margin = marginStyleString;
+ });
+ }
+
+ _removeLetterboxing(aBrowser) {
aBrowser.ownerGlobal.requestAnimationFrame(() => {
+ aBrowser.classList.remove("letterboxing");
aBrowser.style.margin = "";
});
}
@@ -593,6 +651,11 @@ class _RFPHelper {
aWindow.gBrowser.addTabsProgressListener(this);
aWindow.addEventListener("TabOpen", this);
+ const tabPanel = aWindow.document.getElementById("tabbrowser-tabpanels");
+ if (tabPanel) {
+ tabPanel.classList.add("letterboxing");
+ }
+
// Rounding the content viewport.
this._updateMarginsForTabsInWindow(aWindow);
}
@@ -616,10 +679,17 @@ class _RFPHelper {
tabBrowser.removeTabsProgressListener(this);
aWindow.removeEventListener("TabOpen", this);
- // Clear all margins and tooltip for all browsers.
+ // revert tabpanel's background colors to default
+ const tabPanel = aWindow.document.getElementById("tabbrowser-tabpanels");
+ if (tabPanel) {
+ tabPanel.classList.remove("letterboxing");
+ }
+
+ // and revert each browser element to default,
+ // restore default margins and remove letterboxing class
for (let tab of tabBrowser.tabs) {
let browser = tab.linkedBrowser;
- this._clearContentViewMargin(browser);
+ this._removeLetterboxing(browser);
}
}
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 28125 - Prevent non-Necko network connections
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit a4dd1ba88ff56eeef394722f1fa88f76e99c89b4
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Thu Oct 25 19:17:09 2018 +0000
Bug 28125 - Prevent non-Necko network connections
---
.../gecko/media/GeckoMediaDrmBridgeV21.java | 49 +---------------------
.../exoplayer2/upstream/DefaultHttpDataSource.java | 47 ++-------------------
2 files changed, 4 insertions(+), 92 deletions(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
index 3ba59bfd6776..eb57b1013642 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoMediaDrmBridgeV21.java
@@ -488,54 +488,7 @@ public class GeckoMediaDrmBridgeV21 implements GeckoMediaDrm {
@Override
protected Void doInBackground(final Void... params) {
- HttpURLConnection urlConnection = null;
- BufferedReader in = null;
- try {
- URI finalURI = new URI(mURL + "&signedRequest=" + URLEncoder.encode(new String(mDrmRequest), "UTF-8"));
- urlConnection = (HttpURLConnection) ProxySelector.openConnectionWithProxy(finalURI);
- urlConnection.setRequestMethod("POST");
- if (DEBUG) Log.d(LOGTAG, "Provisioning, posting url =" + finalURI.toString());
-
- // Add data
- urlConnection.setRequestProperty("Accept", "*/*");
- urlConnection.setRequestProperty("User-Agent", getCDMUserAgent());
- urlConnection.setRequestProperty("Content-Type", "application/json");
-
- // Execute HTTP Post Request
- urlConnection.connect();
-
- int responseCode = urlConnection.getResponseCode();
- if (responseCode == HttpURLConnection.HTTP_OK) {
- in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), StringUtils.UTF_8));
- String inputLine;
- StringBuffer response = new StringBuffer();
-
- while ((inputLine = in.readLine()) != null) {
- response.append(inputLine);
- }
- in.close();
- mResponseBody = String.valueOf(response).getBytes(StringUtils.UTF_8);
- if (DEBUG) Log.d(LOGTAG, "Provisioning, response received.");
- if (mResponseBody != null) Log.d(LOGTAG, "response length=" + mResponseBody.length);
- } else {
- Log.d(LOGTAG, "Provisioning, server returned HTTP error code :" + responseCode);
- }
- } catch (IOException e) {
- Log.e(LOGTAG, "Got exception during posting provisioning request ...", e);
- } catch (URISyntaxException e) {
- Log.e(LOGTAG, "Got exception during creating uri ...", e);
- } finally {
- if (urlConnection != null) {
- urlConnection.disconnect();
- }
- try {
- if (in != null) {
- in.close();
- }
- } catch (IOException e) {
- Log.e(LOGTAG, "Exception during closing in ...", e);
- }
- }
+ Log.i(LOGTAG, "This is Tor Browser. Skipping.");
return null;
}
diff --git a/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java b/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
index 6e5095b0a4c9..a585e283ed4e 100644
--- a/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
+++ b/mobile/android/geckoview/src/thirdparty/java/org/mozilla/thirdparty/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java
@@ -46,6 +46,7 @@ import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;
import org.mozilla.gecko.util.ProxySelector;
+
/**
* An {@link HttpDataSource} that uses Android's {@link HttpURLConnection}.
*
@@ -516,50 +517,8 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou
boolean followRedirects,
Map<String, String> requestParameters)
throws IOException, URISyntaxException {
- /**
- * Tor Project modified the way the connection object was created. For the sake of
- * simplicity, instead of duplicating the whole file we changed the connection object
- * to use the ProxySelector.
- */
- HttpURLConnection connection = (HttpURLConnection) ProxySelector.openConnectionWithProxy(url.toURI());
-
- connection.setConnectTimeout(connectTimeoutMillis);
- connection.setReadTimeout(readTimeoutMillis);
-
- Map<String, String> requestHeaders = new HashMap<>();
- if (defaultRequestProperties != null) {
- requestHeaders.putAll(defaultRequestProperties.getSnapshot());
- }
- requestHeaders.putAll(requestProperties.getSnapshot());
- requestHeaders.putAll(requestParameters);
-
- for (Map.Entry<String, String> property : requestHeaders.entrySet()) {
- connection.setRequestProperty(property.getKey(), property.getValue());
- }
-
- if (!(position == 0 && length == C.LENGTH_UNSET)) {
- String rangeRequest = "bytes=" + position + "-";
- if (length != C.LENGTH_UNSET) {
- rangeRequest += (position + length - 1);
- }
- connection.setRequestProperty("Range", rangeRequest);
- }
- connection.setRequestProperty("User-Agent", userAgent);
- connection.setRequestProperty("Accept-Encoding", allowGzip ? "gzip" : "identity");
- connection.setInstanceFollowRedirects(followRedirects);
- connection.setDoOutput(httpBody != null);
- connection.setRequestMethod(DataSpec.getStringForHttpMethod(httpMethod));
-
- if (httpBody != null) {
- connection.setFixedLengthStreamingMode(httpBody.length);
- connection.connect();
- OutputStream os = connection.getOutputStream();
- os.write(httpBody);
- os.close();
- } else {
- connection.connect();
- }
- return connection;
+ Log.i(TAG, "This is Tor Browser. Skipping.");
+ throw new IOException();
}
/** Creates an {@link HttpURLConnection} that is connected with the {@code url}. */
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 32658: Create a new MAR signing key
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 9e1cfb5ab679bc28efafbd3bd8b8ddb60b65b8b1
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Jan 17 12:54:31 2020 +0000
Bug 32658: Create a new MAR signing key
It's time for our rotation again: Move the backup key in the front
position and add a new backup key.
---
toolkit/mozapps/update/updater/release_primary.der | Bin 1225 -> 1229 bytes
toolkit/mozapps/update/updater/release_secondary.der | Bin 1225 -> 1229 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/toolkit/mozapps/update/updater/release_primary.der b/toolkit/mozapps/update/updater/release_primary.der
index 1d94f88ad73b..0103a171de88 100644
Binary files a/toolkit/mozapps/update/updater/release_primary.der and b/toolkit/mozapps/update/updater/release_primary.der differ
diff --git a/toolkit/mozapps/update/updater/release_secondary.der b/toolkit/mozapps/update/updater/release_secondary.der
index 474706c4b73c..fcee3944e9b7 100644
Binary files a/toolkit/mozapps/update/updater/release_secondary.der and b/toolkit/mozapps/update/updater/release_secondary.der differ
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 30237: Add v3 onion services client authentication prompt
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit c6814ca41091fbb4ddd0891f26f36fec6c5589a1
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Nov 12 16:11:05 2019 -0500
Bug 30237: Add v3 onion services client authentication prompt
When Tor informs the browser that client authentication is needed,
temporarily load about:blank instead of about:neterror and prompt
for the user's key.
If a correctly formatted key is entered, use Tor's ONION_CLIENT_AUTH_ADD
control port command to add the key (via Torbutton's control port
module) and reload the page.
If the user cancels the prompt, display the standard about:neterror
"Unable to connect" page. This requires a small change to
browser/actors/NetErrorChild.jsm to account for the fact that the
docShell no longer has the failedChannel information. The failedChannel
is used to extract TLS-related error info, which is not applicable
in the case of a canceled .onion authentication prompt.
Add a leaveOpen option to PopupNotifications.show so we can display
error messages within the popup notification doorhanger without
closing the prompt.
Add support for onion services strings to the TorStrings module.
Add support for Tor extended SOCKS errors (Tor proposal 304) to the
socket transport and SOCKS layers. Improved display of all of these
errors will be implemented as part of bug 30025.
Also fixes bug 19757:
Add a "Remember this key" checkbox to the client auth prompt.
Add an "Onion Services Authentication" section within the
about:preferences "Privacy & Security section" to allow
viewing and removal of v3 onion client auth keys that have
been stored on disk.
Also fixes bug 19251: use enhanced error pages for onion service errors.
---
browser/actors/NetErrorChild.jsm | 7 +
browser/base/content/aboutNetError.js | 10 +-
browser/base/content/aboutNetError.xhtml | 1 +
browser/base/content/browser.js | 10 +
browser/base/content/browser.xhtml | 3 +
browser/base/content/tab-content.js | 5 +
browser/components/moz.build | 1 +
.../content/authNotificationIcon.inc.xhtml | 6 +
.../onionservices/content/authPopup.inc.xhtml | 16 ++
.../onionservices/content/authPreferences.css | 20 ++
.../content/authPreferences.inc.xhtml | 19 ++
.../onionservices/content/authPreferences.js | 66 +++++
.../components/onionservices/content/authPrompt.js | 316 +++++++++++++++++++++
.../components/onionservices/content/authUtil.jsm | 47 +++
.../onionservices/content/netError/browser.svg | 3 +
.../onionservices/content/netError/network.svg | 3 +
.../content/netError/onionNetError.css | 65 +++++
.../content/netError/onionNetError.js | 244 ++++++++++++++++
.../onionservices/content/netError/onionsite.svg | 7 +
.../onionservices/content/onionservices.css | 69 +++++
.../onionservices/content/savedKeysDialog.js | 259 +++++++++++++++++
.../onionservices/content/savedKeysDialog.xhtml | 42 +++
browser/components/onionservices/jar.mn | 9 +
browser/components/onionservices/moz.build | 1 +
browser/components/preferences/preferences.xhtml | 1 +
browser/components/preferences/privacy.inc.xhtml | 2 +
browser/components/preferences/privacy.js | 7 +
browser/themes/shared/notification-icons.inc.css | 3 +
docshell/base/nsDocShell.cpp | 81 +++++-
dom/ipc/BrowserParent.cpp | 21 ++
dom/ipc/BrowserParent.h | 3 +
dom/ipc/PBrowser.ipdl | 9 +
js/xpconnect/src/xpc.msg | 10 +
netwerk/base/nsSocketTransport2.cpp | 6 +
netwerk/socket/nsSOCKSIOLayer.cpp | 49 ++++
toolkit/modules/PopupNotifications.jsm | 6 +
toolkit/modules/RemotePageAccessManager.jsm | 1 +
.../lib/environments/frame-script.js | 1 +
xpcom/base/ErrorList.py | 22 ++
39 files changed, 1449 insertions(+), 2 deletions(-)
diff --git a/browser/actors/NetErrorChild.jsm b/browser/actors/NetErrorChild.jsm
index eea7ddd0cf97..58bab60c36f7 100644
--- a/browser/actors/NetErrorChild.jsm
+++ b/browser/actors/NetErrorChild.jsm
@@ -13,6 +13,8 @@ const { RemotePageChild } = ChromeUtils.import(
"resource://gre/actors/RemotePageChild.jsm"
);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
XPCOMUtils.defineLazyServiceGetter(
this,
"gSerializationHelper",
@@ -30,6 +32,7 @@ class NetErrorChild extends RemotePageChild {
"RPMAddToHistogram",
"RPMRecordTelemetryEvent",
"RPMGetHttpResponseHeader",
+ "RPMGetTorStrings",
];
this.exportFunctions(exportableFunctions);
}
@@ -103,4 +106,8 @@ class NetErrorChild extends RemotePageChild {
return "";
}
+
+ RPMGetTorStrings() {
+ return Cu.cloneInto(TorStrings.onionServices, this.contentWindow);
+ }
}
diff --git a/browser/base/content/aboutNetError.js b/browser/base/content/aboutNetError.js
index fd12295b05fd..4e40e53da199 100644
--- a/browser/base/content/aboutNetError.js
+++ b/browser/base/content/aboutNetError.js
@@ -3,6 +3,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env mozilla/frame-script */
+/* import-globals-from ../../components/onionservices/content/netError/onionNetError.js */
const formatter = new Intl.DateTimeFormat("default");
@@ -280,7 +281,10 @@ function initPage() {
errDesc = document.getElementById("ed_generic");
}
- setErrorPageStrings(err);
+ const isOnionError = err.startsWith("onionServices.");
+ if (!isOnionError) {
+ setErrorPageStrings(err);
+ }
var sd = document.getElementById("errorShortDescText");
if (sd) {
@@ -433,6 +437,10 @@ function initPage() {
span.textContent = document.location.hostname;
}
}
+
+ if (isOnionError) {
+ OnionServicesAboutNetError.initPage(document);
+ }
}
function setupErrorUI() {
diff --git a/browser/base/content/aboutNetError.xhtml b/browser/base/content/aboutNetError.xhtml
index 75c95cc17011..4f21e508be0b 100644
--- a/browser/base/content/aboutNetError.xhtml
+++ b/browser/base/content/aboutNetError.xhtml
@@ -215,6 +215,7 @@
</div>
</div>
</body>
+ <script src="chrome://browser/content/onionservices/netError/onionNetError.js"/>
<script src="chrome://browser/content/aboutNetErrorCodes.js"/>
<script src="chrome://browser/content/aboutNetError.js"/>
</html>
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 5235b0670fa8..2fb471e9c15d 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -226,6 +226,11 @@ XPCOMUtils.defineLazyScriptGetter(
["SecurityLevelButton"],
"chrome://browser/content/securitylevel/securityLevel.js"
);
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionAuthPrompt"],
+ "chrome://browser/content/onionservices/authPrompt.js"
+);
XPCOMUtils.defineLazyScriptGetter(
this,
"gEditItemOverlay",
@@ -1865,6 +1870,9 @@ var gBrowserInit = {
// Init the SecuritySettingsButton
SecurityLevelButton.init();
+ // Init the OnionAuthPrompt
+ OnionAuthPrompt.init();
+
// Certain kinds of automigration rely on this notification to complete
// their tasks BEFORE the browser window is shown. SessionStore uses it to
// restore tabs into windows AFTER important parts like gMultiProcessBrowser
@@ -2470,6 +2478,8 @@ var gBrowserInit = {
SecurityLevelButton.uninit();
+ OnionAuthPrompt.uninit();
+
gAccessibilityServiceIndicator.uninit();
AccessibilityRefreshBlocker.uninit();
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index b065ffc5f13f..7ebf56ca5ed1 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -33,6 +33,7 @@
<?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
<?xml-stylesheet href="chrome://torbutton/skin/tor-circuit-display.css" type="text/css"?>
<?xml-stylesheet href="chrome://torbutton/skin/torbutton.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/content/onionservices/onionservices.css" type="text/css"?>
# All DTD information is stored in a separate file so that it can be shared by
# hiddenWindowMac.xhtml.
@@ -654,6 +655,7 @@
#include ../../components/downloads/content/downloadsPanel.inc.xhtml
#include ../../../devtools/startup/enableDevToolsPopup.inc.xhtml
#include ../../components/securitylevel/content/securityLevelPanel.inc.xhtml
+#include ../../components/onionservices/content/authPopup.inc.xhtml
#include browser-allTabsMenu.inc.xhtml
<hbox id="downloads-animation-container">
@@ -1839,6 +1841,7 @@
data-l10n-id="urlbar-indexed-db-notification-anchor"/>
<image id="password-notification-icon" class="notification-anchor-icon login-icon" role="button"
data-l10n-id="urlbar-password-notification-anchor"/>
+#include ../../components/onionservices/content/authNotificationIcon.inc.xhtml
<stack id="plugins-notification-icon" class="notification-anchor-icon" role="button" align="center" data-l10n-id="urlbar-plugins-notification-anchor">
<image class="plugin-icon" />
<image id="plugin-icon-badge" />
diff --git a/browser/base/content/tab-content.js b/browser/base/content/tab-content.js
index 1a01d4a2ded9..79fd7f39243d 100644
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -19,6 +19,9 @@ ChromeUtils.defineModuleGetter(
"BrowserUtils",
"resource://gre/modules/BrowserUtils.jsm"
);
+var { OnionAuthUtil } = ChromeUtils.import(
+ "chrome://browser/content/onionservices/authUtil.jsm"
+);
// BrowserChildGlobal
var global = this;
@@ -73,5 +76,7 @@ if (Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT) {
Services.obs.notifyObservers(this, "tab-content-frameloader-created");
+OnionAuthUtil.addCancelMessageListener(this, docShell);
+
// This is a temporary hack to prevent regressions (bug 1471327).
void content;
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 09e209dc9c3b..b660be047b14 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -41,6 +41,7 @@ DIRS += [
'fxmonitor',
'migration',
'newtab',
+ 'onionservices',
'originattributes',
'pioneer',
'places',
diff --git a/browser/components/onionservices/content/authNotificationIcon.inc.xhtml b/browser/components/onionservices/content/authNotificationIcon.inc.xhtml
new file mode 100644
index 000000000000..91274d612739
--- /dev/null
+++ b/browser/components/onionservices/content/authNotificationIcon.inc.xhtml
@@ -0,0 +1,6 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<image id="tor-clientauth-notification-icon"
+ class="notification-anchor-icon tor-clientauth-icon"
+ role="button"
+ tooltiptext="&torbutton.onionServices.authPrompt.tooltip;"/>
diff --git a/browser/components/onionservices/content/authPopup.inc.xhtml b/browser/components/onionservices/content/authPopup.inc.xhtml
new file mode 100644
index 000000000000..bd0ec3aa0b00
--- /dev/null
+++ b/browser/components/onionservices/content/authPopup.inc.xhtml
@@ -0,0 +1,16 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<popupnotification id="tor-clientauth-notification" hidden="true">
+ <popupnotificationcontent orient="vertical">
+ <description id="tor-clientauth-notification-desc"/>
+ <label id="tor-clientauth-notification-learnmore"
+ class="text-link popup-notification-learnmore-link"
+ is="text-link"/>
+ <html:div>
+ <html:input id="tor-clientauth-notification-key" type="password"/>
+ <html:div id="tor-clientauth-warning"/>
+ <checkbox id="tor-clientauth-persistkey-checkbox"
+ label="&torbutton.onionServices.authPrompt.persistCheckboxLabel;"/>
+ </html:div>
+ </popupnotificationcontent>
+</popupnotification>
diff --git a/browser/components/onionservices/content/authPreferences.css b/browser/components/onionservices/content/authPreferences.css
new file mode 100644
index 000000000000..b3fb79b26ddc
--- /dev/null
+++ b/browser/components/onionservices/content/authPreferences.css
@@ -0,0 +1,20 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+#torOnionServiceKeys-overview-container {
+ margin-right: 30px;
+}
+
+#onionservices-savedkeys-tree treechildren::-moz-tree-cell-text {
+ font-size: 80%;
+}
+
+#onionservices-savedkeys-errorContainer {
+ margin-top: 4px;
+ min-height: 3em;
+}
+
+#onionservices-savedkeys-errorIcon {
+ margin-right: 4px;
+ list-style-image: url("chrome://browser/skin/warning.svg");
+ visibility: hidden;
+}
diff --git a/browser/components/onionservices/content/authPreferences.inc.xhtml b/browser/components/onionservices/content/authPreferences.inc.xhtml
new file mode 100644
index 000000000000..f69c9dde66a2
--- /dev/null
+++ b/browser/components/onionservices/content/authPreferences.inc.xhtml
@@ -0,0 +1,19 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<groupbox id="torOnionServiceKeys" orient="vertical"
+ data-category="panePrivacy" hidden="true">
+ <label><html:h2 id="torOnionServiceKeys-header"/></label>
+ <hbox>
+ <description id="torOnionServiceKeys-overview-container" flex="1">
+ <html:span id="torOnionServiceKeys-overview"
+ class="tail-with-learn-more"/>
+ <label id="torOnionServiceKeys-learnMore" class="learnMore text-link"
+ is="text-link"/>
+ </description>
+ <vbox align="end">
+ <button id="torOnionServiceKeys-savedKeys"
+ is="highlightable-button"
+ class="accessory-button"/>
+ </vbox>
+ </hbox>
+</groupbox>
diff --git a/browser/components/onionservices/content/authPreferences.js b/browser/components/onionservices/content/authPreferences.js
new file mode 100644
index 000000000000..52f8272020cc
--- /dev/null
+++ b/browser/components/onionservices/content/authPreferences.js
@@ -0,0 +1,66 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+/*
+ Onion Services Client Authentication Preferences Code
+
+ Code to handle init and update of onion services authentication section
+ in about:preferences#privacy
+*/
+
+const OnionServicesAuthPreferences = {
+ selector: {
+ groupBox: "#torOnionServiceKeys",
+ header: "#torOnionServiceKeys-header",
+ overview: "#torOnionServiceKeys-overview",
+ learnMore: "#torOnionServiceKeys-learnMore",
+ savedKeysButton: "#torOnionServiceKeys-savedKeys",
+ },
+
+ init() {
+ // populate XUL with localized strings
+ this._populateXUL();
+ },
+
+ _populateXUL() {
+ const groupbox = document.querySelector(this.selector.groupBox);
+
+ let elem = groupbox.querySelector(this.selector.header);
+ elem.textContent = TorStrings.onionServices.authPreferences.header;
+
+ elem = groupbox.querySelector(this.selector.overview);
+ elem.textContent = TorStrings.onionServices.authPreferences.overview;
+
+ elem = groupbox.querySelector(this.selector.learnMore);
+ elem.setAttribute("value", TorStrings.onionServices.learnMore);
+ elem.setAttribute("href", TorStrings.onionServices.learnMoreURL);
+
+ elem = groupbox.querySelector(this.selector.savedKeysButton);
+ elem.setAttribute(
+ "label",
+ TorStrings.onionServices.authPreferences.savedKeys
+ );
+ elem.addEventListener("command", () =>
+ OnionServicesAuthPreferences.onViewSavedKeys()
+ );
+ },
+
+ onViewSavedKeys() {
+ gSubDialog.open(
+ "chrome://browser/content/onionservices/savedKeysDialog.xhtml"
+ );
+ },
+}; // OnionServicesAuthPreferences
+
+Object.defineProperty(this, "OnionServicesAuthPreferences", {
+ value: OnionServicesAuthPreferences,
+ enumerable: true,
+ writable: false,
+});
diff --git a/browser/components/onionservices/content/authPrompt.js b/browser/components/onionservices/content/authPrompt.js
new file mode 100644
index 000000000000..d4a59ac46487
--- /dev/null
+++ b/browser/components/onionservices/content/authPrompt.js
@@ -0,0 +1,316 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ OnionAuthUtil: "chrome://browser/content/onionservices/authUtil.jsm",
+ CommonUtils: "resource://services-common/utils.js",
+ TorStrings: "resource:///modules/TorStrings.jsm",
+});
+
+const OnionAuthPrompt = (function() {
+ // OnionServicesAuthPrompt objects run within the main/chrome process.
+ // aReason is the topic passed within the observer notification that is
+ // causing this auth prompt to be displayed.
+ function OnionServicesAuthPrompt(aBrowser, aFailedURI, aReason, aOnionName) {
+ this._browser = aBrowser;
+ this._failedURI = aFailedURI;
+ this._reasonForPrompt = aReason;
+ this._onionName = aOnionName;
+ }
+
+ OnionServicesAuthPrompt.prototype = {
+ show(aWarningMessage) {
+ let mainAction = {
+ label: TorStrings.onionServices.authPrompt.done,
+ accessKey: TorStrings.onionServices.authPrompt.doneAccessKey,
+ leaveOpen: true, // Callback is responsible for closing the notification.
+ callback: this._onDone.bind(this),
+ };
+
+ let dialogBundle = Services.strings.createBundle(
+ "chrome://global/locale/dialog.properties");
+
+ let cancelAccessKey = dialogBundle.GetStringFromName("accesskey-cancel");
+ if (!cancelAccessKey)
+ cancelAccessKey = "c"; // required by PopupNotifications.show()
+
+ let cancelAction = {
+ label: dialogBundle.GetStringFromName("button-cancel"),
+ accessKey: cancelAccessKey,
+ callback: this._onCancel.bind(this),
+ };
+
+ let _this = this;
+ let options = {
+ autofocus: true,
+ hideClose: true,
+ persistent: true,
+ removeOnDismissal: false,
+ eventCallback(aTopic) {
+ if (aTopic === "showing") {
+ _this._onPromptShowing(aWarningMessage);
+ } else if (aTopic === "shown") {
+ _this._onPromptShown();
+ } else if (aTopic === "removed") {
+ _this._onPromptRemoved();
+ }
+ }
+ };
+
+ this._prompt = PopupNotifications.show(this._browser,
+ OnionAuthUtil.domid.notification, "",
+ OnionAuthUtil.domid.anchor,
+ mainAction, [cancelAction], options);
+ },
+
+ _onPromptShowing(aWarningMessage) {
+ let xulDoc = this._browser.ownerDocument;
+ let descElem = xulDoc.getElementById(OnionAuthUtil.domid.description);
+ if (descElem) {
+ // Handle replacement of the onion name within the localized
+ // string ourselves so we can show the onion name as bold text.
+ // We do this by splitting the localized string and creating
+ // several HTML <span> elements.
+ while (descElem.firstChild)
+ descElem.removeChild(descElem.firstChild);
+
+ let fmtString = TorStrings.onionServices.authPrompt.description;
+ let prefix = "";
+ let suffix = "";
+ const kToReplace = "%S";
+ let idx = fmtString.indexOf(kToReplace);
+ if (idx < 0) {
+ prefix = fmtString;
+ } else {
+ prefix = fmtString.substring(0, idx);
+ suffix = fmtString.substring(idx + kToReplace.length);
+ }
+
+ const kHTMLNS = "http://www.w3.org/1999/xhtml";
+ let span = xulDoc.createElementNS(kHTMLNS, "span");
+ span.textContent = prefix;
+ descElem.appendChild(span);
+ span = xulDoc.createElementNS(kHTMLNS, "span");
+ span.id = OnionAuthUtil.domid.onionNameSpan;
+ span.textContent = this._onionName;
+ descElem.appendChild(span);
+ span = xulDoc.createElementNS(kHTMLNS, "span");
+ span.textContent = suffix;
+ descElem.appendChild(span);
+ }
+
+ // Set "Learn More" label and href.
+ let learnMoreElem = xulDoc.getElementById(OnionAuthUtil.domid.learnMore);
+ if (learnMoreElem) {
+ learnMoreElem.setAttribute("value", TorStrings.onionServices.learnMore);
+ learnMoreElem.setAttribute("href", TorStrings.onionServices.learnMoreURL);
+ }
+
+ this._showWarning(aWarningMessage);
+ let checkboxElem = this._getCheckboxElement();
+ if (checkboxElem) {
+ checkboxElem.checked = false;
+ }
+ },
+
+ _onPromptShown() {
+ let keyElem = this._getKeyElement();
+ if (keyElem) {
+ keyElem.setAttribute("placeholder",
+ TorStrings.onionServices.authPrompt.keyPlaceholder);
+ this._boundOnKeyFieldKeyPress = this._onKeyFieldKeyPress.bind(this);
+ this._boundOnKeyFieldInput = this._onKeyFieldInput.bind(this);
+ keyElem.addEventListener("keypress", this._boundOnKeyFieldKeyPress);
+ keyElem.addEventListener("input", this._boundOnKeyFieldInput);
+ keyElem.focus();
+ }
+ },
+
+ _onPromptRemoved() {
+ if (this._boundOnKeyFieldKeyPress) {
+ let keyElem = this._getKeyElement();
+ if (keyElem) {
+ keyElem.value = "";
+ keyElem.removeEventListener("keypress",
+ this._boundOnKeyFieldKeyPress);
+ this._boundOnKeyFieldKeyPress = undefined;
+ keyElem.removeEventListener("input", this._boundOnKeyFieldInput);
+ this._boundOnKeyFieldInput = undefined;
+ }
+ }
+ },
+
+ _onKeyFieldKeyPress(aEvent) {
+ if (aEvent.keyCode == aEvent.DOM_VK_RETURN) {
+ this._onDone();
+ } else if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) {
+ this._prompt.remove();
+ this._onCancel();
+ }
+ },
+
+ _onKeyFieldInput(aEvent) {
+ this._showWarning(undefined); // Remove the warning.
+ },
+
+ _onDone() {
+ let keyElem = this._getKeyElement();
+ if (!keyElem)
+ return;
+
+ let base64key = this._keyToBase64(keyElem.value);
+ if (!base64key) {
+ this._showWarning(TorStrings.onionServices.authPrompt.invalidKey);
+ return;
+ }
+
+ this._prompt.remove();
+
+ // Use Torbutton's controller module to add the private key to Tor.
+ let controllerFailureMsg =
+ TorStrings.onionServices.authPrompt.failedToSetKey;
+ try {
+ let { controller } =
+ Cu.import("resource://torbutton/modules/tor-control-port.js", {});
+ let torController = controller(aError => {
+ this.show(controllerFailureMsg);
+ });
+ let onionAddr = this._onionName.toLowerCase().replace(/\.onion$/, "");
+ let checkboxElem = this._getCheckboxElement();
+ let isPermanent = (checkboxElem && checkboxElem.checked);
+ torController.onionAuthAdd(onionAddr, base64key, isPermanent)
+ .then(aResponse => {
+ // Success! Reload the page.
+ this._browser.sendMessageToActor(
+ "Browser:Reload",
+ {},
+ "BrowserTab"
+ );
+ })
+ .catch(aError => {
+ if (aError.torMessage)
+ this.show(aError.torMessage);
+ else
+ this.show(controllerFailureMsg);
+ });
+ } catch (e) {
+ this.show(controllerFailureMsg);
+ }
+ },
+
+ _onCancel() {
+ // Arrange for an error page to be displayed.
+ this._browser.messageManager.sendAsyncMessage(
+ OnionAuthUtil.message.authPromptCanceled,
+ {failedURI: this._failedURI.spec,
+ reasonForPrompt: this._reasonForPrompt});
+ },
+
+ _getKeyElement() {
+ let xulDoc = this._browser.ownerDocument;
+ return xulDoc.getElementById(OnionAuthUtil.domid.keyElement);
+ },
+
+ _getCheckboxElement() {
+ let xulDoc = this._browser.ownerDocument;
+ return xulDoc.getElementById(OnionAuthUtil.domid.checkboxElement);
+ },
+
+ _showWarning(aWarningMessage) {
+ let xulDoc = this._browser.ownerDocument;
+ let warningElem =
+ xulDoc.getElementById(OnionAuthUtil.domid.warningElement);
+ let keyElem = this._getKeyElement();
+ if (warningElem) {
+ if (aWarningMessage) {
+ warningElem.textContent = aWarningMessage;
+ warningElem.removeAttribute("hidden");
+ if (keyElem)
+ keyElem.className = "invalid";
+ } else {
+ warningElem.setAttribute("hidden", "true");
+ if (keyElem)
+ keyElem.className = "";
+ }
+ }
+ },
+
+ // Returns undefined if the key is the wrong length or format.
+ _keyToBase64(aKeyString) {
+ if (!aKeyString)
+ return undefined;
+
+ let base64key;
+ if (aKeyString.length == 52) {
+ // The key is probably base32-encoded. Attempt to decode.
+ // Although base32 specifies uppercase letters, we accept lowercase
+ // as well because users may type in lowercase or copy a key out of
+ // a tor onion-auth file (which uses lowercase).
+ let rawKey;
+ try {
+ rawKey = CommonUtils.decodeBase32(aKeyString.toUpperCase());
+ } catch (e) {}
+
+ if (rawKey) try {
+ base64key = btoa(rawKey);
+ } catch (e) {}
+ } else if ((aKeyString.length == 44) &&
+ /^[a-zA-Z0-9+/]*=*$/.test(aKeyString)) {
+ // The key appears to be a correctly formatted base64 value. If not,
+ // tor will return an error when we try to add the key via the
+ // control port.
+ base64key = aKeyString;
+ }
+
+ return base64key;
+ },
+ };
+
+ let retval = {
+ init() {
+ Services.obs.addObserver(this, OnionAuthUtil.topic.clientAuthMissing);
+ Services.obs.addObserver(this, OnionAuthUtil.topic.clientAuthIncorrect);
+ },
+
+ uninit() {
+ Services.obs.removeObserver(this, OnionAuthUtil.topic.clientAuthMissing);
+ Services.obs.removeObserver(this, OnionAuthUtil.topic.clientAuthIncorrect);
+ },
+
+ // aSubject is the DOM Window or browser where the prompt should be shown.
+ // aData contains the .onion name.
+ observe(aSubject, aTopic, aData) {
+ if ((aTopic != OnionAuthUtil.topic.clientAuthMissing) &&
+ (aTopic != OnionAuthUtil.topic.clientAuthIncorrect)) {
+ return;
+ }
+
+ let browser;
+ if (aSubject instanceof Ci.nsIDOMWindow) {
+ let contentWindow = aSubject.QueryInterface(Ci.nsIDOMWindow);
+ browser = contentWindow.docShell.chromeEventHandler;
+ } else {
+ browser = aSubject.QueryInterface(Ci.nsIBrowser);
+ }
+
+ if (!gBrowser.browsers.some(aBrowser => aBrowser == browser)) {
+ return; // This window does not contain the subject browser; ignore.
+ }
+
+ let failedURI = browser.currentURI;
+ let authPrompt = new OnionServicesAuthPrompt(browser, failedURI,
+ aTopic, aData);
+ authPrompt.show(undefined);
+ }
+ };
+
+ return retval;
+})(); /* OnionAuthPrompt */
+
+
+Object.defineProperty(this, "OnionAuthPrompt", {
+ value: OnionAuthPrompt,
+ enumerable: true,
+ writable: false
+});
diff --git a/browser/components/onionservices/content/authUtil.jsm b/browser/components/onionservices/content/authUtil.jsm
new file mode 100644
index 000000000000..c9d83774da1f
--- /dev/null
+++ b/browser/components/onionservices/content/authUtil.jsm
@@ -0,0 +1,47 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "OnionAuthUtil",
+];
+
+var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+const OnionAuthUtil = {
+ topic: {
+ clientAuthMissing: "tor-onion-services-clientauth-missing",
+ clientAuthIncorrect: "tor-onion-services-clientauth-incorrect",
+ },
+ message: {
+ authPromptCanceled: "Tor:OnionServicesAuthPromptCanceled",
+ },
+ domid: {
+ anchor: "tor-clientauth-notification-icon",
+ notification: "tor-clientauth",
+ description: "tor-clientauth-notification-desc",
+ learnMore: "tor-clientauth-notification-learnmore",
+ onionNameSpan: "tor-clientauth-notification-onionname",
+ keyElement: "tor-clientauth-notification-key",
+ warningElement: "tor-clientauth-warning",
+ checkboxElement: "tor-clientauth-persistkey-checkbox",
+ },
+
+ addCancelMessageListener(aTabContent, aDocShell) {
+ aTabContent.addMessageListener(this.message.authPromptCanceled,
+ (aMessage) => {
+ // Upon cancellation of the client authentication prompt, display
+ // the appropriate error page. When calling the docShell
+ // displayLoadError() function, we pass undefined for the failed
+ // channel so that displayLoadError() can determine that it should
+ // not display the client authentication prompt a second time.
+ let failedURI = Services.io.newURI(aMessage.data.failedURI);
+ let reasonForPrompt = aMessage.data.reasonForPrompt;
+ let errorCode =
+ (reasonForPrompt === this.topic.clientAuthMissing) ?
+ Cr.NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH :
+ Cr.NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH;
+ aDocShell.displayLoadError(errorCode, failedURI, undefined, undefined);
+ });
+ },
+};
diff --git a/browser/components/onionservices/content/netError/browser.svg b/browser/components/onionservices/content/netError/browser.svg
new file mode 100644
index 000000000000..b4c433b37bbb
--- /dev/null
+++ b/browser/components/onionservices/content/netError/browser.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="72" height="65" viewBox="0 0 72 65">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M0.0 0.0C0.0 0.0 0.0 65.0 0.0 65.0C0.0 65.0 72.0 65.0 72.0 65.0C72.0 65.0 72.0 0.0 72.0 0.0C72.0 0.0 52.9019692 0.0 52.9019692 0.0C52.9019692 0.0 0.0 0.0 0.0 0.0C0.0 0.0 0.0 0.0 0.0 0.0M65.0 58.0C65.0 58.0 6.0 58.0 6.0 58.0C6.0 58.0 6.0 25.0 6.0 25.0C6.0 25.0 65.0 25.0 65.0 25.0C65.0 25.0 65.0 58.0 65.0 58.0C65.0 58.0 65.0 58.0 65.0 58.0M6.0 10.0C6.0 10.0 10.0 10.0 10.0 10.0C10.0 10.0 10.0 14.0 10.0 14.0C10.0 14.0 6.0 14.0 6.0 14.0C6.0 14.0 6.0 10.0 6.0 10.0C6.0 10.0 6.0 10.0 6.0 10.0M14.0 10.0C14.0 10.0 18.0 10.0 18.0 10.0C18.0 10.0 18.0 14.0 18.0 14.0C18.0 14.0 14.0 14.0 14.0 14.0C14.0 14.0 14.0 10.0 14.0 10.0C14.0 10.0 14.0 10.0 14.0 10.0M22.0 10.0C22.0 10.0 26.0 10.0 26.0 10.0C26.0 10.0 26.0 14.0 26.0 14.0C26.0 14.0 22.0 14.0 22.0 14.0C22.0 14.0 22.0 10.0 22.0 10.0C22.0 10.0 22.0 10.0 22.0 10.0" />
+</svg>
diff --git a/browser/components/onionservices/content/netError/network.svg b/browser/components/onionservices/content/netError/network.svg
new file mode 100644
index 000000000000..808c53dedd09
--- /dev/null
+++ b/browser/components/onionservices/content/netError/network.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="72" height="54" viewBox="0 0 72 54">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M14.0487805 54.0C6.28990244 54.0 0.0 47.3306322 0.0 39.1034585C0.0 32.0105634 4.68716488 26.0867675 10.9481707 24.585103C10.6902 23.574652 10.5365854 22.5107596 10.5365854 21.4138156C10.5365854 14.7292347 15.6471278 9.3103384 21.9512195 9.3103384C24.8076351 9.3103384 27.4126741 10.4393194 29.4146341 12.2780088C32.1344254 5.0777841 38.77452 0.0 46.5365854 0.0C56.7201249 0.0 64.9756098 8.7536733 64.9756098 19.5517479C64.9756098 20.7691677 64.8471688 21.9453428 64.6463415 23.1013144C69.0576849 26.0679606 72.0 31.2693674 72.0 37.2413909C72.0 46.5256603 64.9510244 54.0 56.195122 54.0C56.195122 54.0 14.0487805 54.0 14.0487805 54.0C14.0487805 54.0 14.0487805 54.0 14.0487805 54.0" />
+</svg>
diff --git a/browser/components/onionservices/content/netError/onionNetError.css b/browser/components/onionservices/content/netError/onionNetError.css
new file mode 100644
index 000000000000..58117ab93223
--- /dev/null
+++ b/browser/components/onionservices/content/netError/onionNetError.css
@@ -0,0 +1,65 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+:root {
+ --grey-70: #38383d;
+}
+
+#onionErrorDiagramContainer {
+ margin: 60px auto;
+ width: 460px; /* 3 columns @ 140px plus 2 column gaps @ 20px */
+ display: grid;
+ grid-row-gap: 15px;
+ grid-column-gap: 20px;
+ grid-template-columns: 1fr 1fr 1fr;
+}
+
+#onionErrorDiagramContainer > div {
+ margin: auto;
+ position: relative; /* needed to allow overlay of the ok or error icon */
+}
+
+.onionErrorImage {
+ width: 72px;
+ height: 72px;
+ background-position: center;
+ background-repeat: no-repeat;
+ -moz-context-properties: fill;
+ fill: var(--grey-70);
+}
+
+#onionErrorBrowserImage {
+ background-image: url("browser.svg");
+}
+
+#onionErrorNetworkImage {
+ background-image: url("network.svg");
+}
+
+#onionErrorOnionSiteImage {
+ background-image: url("onionsite.svg");
+}
+
+/* rules to support overlay of the ok or error icon */
+.onionErrorImage[status]::after {
+ content: " ";
+ position: absolute;
+ left: -18px;
+ top: 18px;
+ width: 36px;
+ height: 36px;
+ -moz-context-properties: fill;
+ fill: var(--in-content-page-background);
+ background-color: var(--grey-70);
+ background-repeat: no-repeat;
+ background-position: center;
+ border: 3px solid var(--in-content-page-background);
+ border-radius: 50%;
+}
+
+.onionErrorImage[status="ok"]::after {
+ background-image: url("chrome://global/skin/icons/check.svg");
+}
+
+.onionErrorImage[status="error"]::after {
+ background-image: url("chrome://browser/skin/stop.svg");
+}
diff --git a/browser/components/onionservices/content/netError/onionNetError.js b/browser/components/onionservices/content/netError/onionNetError.js
new file mode 100644
index 000000000000..8fabb3f38eb7
--- /dev/null
+++ b/browser/components/onionservices/content/netError/onionNetError.js
@@ -0,0 +1,244 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+/* eslint-env mozilla/frame-script */
+
+var OnionServicesAboutNetError = {
+ _selector: {
+ header: ".title-text",
+ longDesc: "#errorLongDesc",
+ learnMoreContainer: "#learnMoreContainer",
+ learnMoreLink: "#learnMoreLink",
+ contentContainer: "#errorLongContent",
+ tryAgainButtonContainer: "#netErrorButtonContainer",
+ },
+ _status: {
+ ok: "ok",
+ error: "error",
+ },
+
+ _diagramInfoMap: undefined,
+
+ // Public functions (called from outside this file).
+ //
+ // This initPage() function may need to be updated if the structure of
+ // browser/base/content/aboutNetError.xhtml changes. Specifically, it
+ // references the following elements:
+ // query string parameter e
+ // class title-text
+ // id errorLongDesc
+ // id learnMoreContainer
+ // id learnMoreLink
+ // id errorLongContent
+ initPage(aDoc) {
+ const searchParams = new URLSearchParams(aDoc.documentURI.split("?")[1]);
+ const err = searchParams.get("e");
+
+ const errPrefix = "onionServices.";
+ const errName = err.substring(errPrefix.length);
+
+ this._strings = RPMGetTorStrings();
+
+ const stringsObj = this._strings[errName];
+ if (!stringsObj) {
+ return;
+ }
+
+ this._insertStylesheet(aDoc);
+
+ const pageTitle = stringsObj.pageTitle;
+ const header = stringsObj.header;
+ const longDescription = stringsObj.longDescription; // optional
+ const learnMoreURL = stringsObj.learnMoreURL;
+
+ if (pageTitle) {
+ aDoc.title = pageTitle;
+ }
+
+ if (header) {
+ const headerElem = aDoc.querySelector(this._selector.header);
+ if (headerElem) {
+ headerElem.textContent = header;
+ }
+ }
+
+ const ld = aDoc.querySelector(this._selector.longDesc);
+ if (ld) {
+ if (longDescription) {
+ const hexErr = this._hexErrorFromName(errName);
+ ld.textContent = longDescription.replace("%S", hexErr);
+ } else {
+ // This onion service error does not have a long description. Since
+ // it is set to a generic error string by the code in
+ // browser/base/content/aboutNetError.js, hide it here.
+ ld.style.display = "none";
+ }
+ }
+
+ if (learnMoreURL) {
+ const lmContainer = aDoc.querySelector(this._selector.learnMoreContainer);
+ if (lmContainer) {
+ lmContainer.style.display = "block";
+ }
+ const lmLink = lmContainer.querySelector(this._selector.learnMoreLink);
+ if (lmLink) {
+ lmLink.setAttribute("href", learnMoreURL);
+ }
+ }
+
+ // Remove the "Try Again" button if the user made a typo in the .onion
+ // address since it is not useful in that case.
+ if (errName === "badAddress") {
+ const tryAgainButton = aDoc.querySelector(
+ this._selector.tryAgainButtonContainer
+ );
+ if (tryAgainButton) {
+ tryAgainButton.style.display = "none";
+ }
+ }
+
+ this._insertDiagram(aDoc, errName);
+ }, // initPage()
+
+ _insertStylesheet(aDoc) {
+ const url =
+ "chrome://browser/content/onionservices/netError/onionNetError.css";
+ let linkElem = aDoc.createElement("link");
+ linkElem.rel = "stylesheet";
+ linkElem.href = url;
+ linkElem.type = "text/css";
+ aDoc.head.appendChild(linkElem);
+ },
+
+ _insertDiagram(aDoc, aErrorName) {
+ // The onion error diagram consists of a grid of div elements.
+ // The first row contains three images (Browser, Network, Onionsite) and
+ // the second row contains labels for the images that are in the first row.
+ // The _diagramInfoMap describes for each type of onion service error
+ // whether a small ok or error status icon is overlaid on top of the main
+ // Browser/Network/Onionsite images.
+ if (!this._diagramInfoMap) {
+ this._diagramInfoMap = new Map();
+ this._diagramInfoMap.set("descNotFound", {
+ browser: this._status.ok,
+ network: this._status.ok,
+ onionSite: this._status.error,
+ });
+ this._diagramInfoMap.set("descInvalid", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ this._diagramInfoMap.set("introFailed", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ this._diagramInfoMap.set("rendezvousFailed", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ this._diagramInfoMap.set("clientAuthMissing", {
+ browser: this._status.error,
+ });
+ this._diagramInfoMap.set("clientAuthIncorrect", {
+ browser: this._status.error,
+ });
+ this._diagramInfoMap.set("badAddress", {
+ browser: this._status.error,
+ });
+ this._diagramInfoMap.set("introTimedOut", {
+ browser: this._status.ok,
+ network: this._status.error,
+ });
+ }
+
+ const diagramInfo = this._diagramInfoMap.get(aErrorName);
+
+ const container = this._createDiv(aDoc, "onionErrorDiagramContainer");
+ const imageClass = "onionErrorImage";
+
+ const browserImage = this._createDiv(
+ aDoc,
+ "onionErrorBrowserImage",
+ imageClass,
+ container
+ );
+ if (diagramInfo && diagramInfo.browser) {
+ browserImage.setAttribute("status", diagramInfo.browser);
+ }
+
+ const networkImage = this._createDiv(
+ aDoc,
+ "onionErrorNetworkImage",
+ imageClass,
+ container
+ );
+ if (diagramInfo && diagramInfo.network) {
+ networkImage.setAttribute("status", diagramInfo.network);
+ }
+
+ const onionSiteImage = this._createDiv(
+ aDoc,
+ "onionErrorOnionSiteImage",
+ imageClass,
+ container
+ );
+ if (diagramInfo && diagramInfo.onionSite) {
+ onionSiteImage.setAttribute("status", diagramInfo.onionSite);
+ }
+
+ let labelDiv = this._createDiv(aDoc, undefined, undefined, container);
+ labelDiv.textContent = this._strings.errorPage.browser;
+ labelDiv = this._createDiv(aDoc, undefined, undefined, container);
+ labelDiv.textContent = this._strings.errorPage.network;
+ labelDiv = this._createDiv(aDoc, undefined, undefined, container);
+ labelDiv.textContent = this._strings.errorPage.onionSite;
+
+ const contentContainer = aDoc.querySelector(
+ this._selector.contentContainer
+ );
+ if (contentContainer) {
+ contentContainer.insertBefore(container, contentContainer.firstChild);
+ }
+ }, // _insertDiagram()
+
+ _createDiv(aDoc, aID, aClass, aParentElem) {
+ const div = aDoc.createElement("div");
+ if (aID) {
+ div.id = aID;
+ }
+ if (aClass) {
+ div.setAttribute("class", aClass);
+ }
+ if (aParentElem) {
+ aParentElem.appendChild(div);
+ }
+
+ return div;
+ },
+
+ _hexErrorFromName(aErrorName) {
+ // We do not have access to the original Tor SOCKS error code here, so
+ // perform a reverse mapping from the error name.
+ switch (aErrorName) {
+ case "descNotFound":
+ return "0xF0";
+ case "descInvalid":
+ return "0xF1";
+ case "introFailed":
+ return "0xF2";
+ case "rendezvousFailed":
+ return "0xF3";
+ case "clientAuthMissing":
+ return "0xF4";
+ case "clientAuthIncorrect":
+ return "0xF5";
+ case "badAddress":
+ return "0xF6";
+ case "introTimedOut":
+ return "0xF7";
+ }
+
+ return "";
+ },
+};
diff --git a/browser/components/onionservices/content/netError/onionsite.svg b/browser/components/onionservices/content/netError/onionsite.svg
new file mode 100644
index 000000000000..1f2777e6acc7
--- /dev/null
+++ b/browser/components/onionservices/content/netError/onionsite.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="70" height="63" viewBox="0 0 70 63">
+ <g fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M64.0 2.0C64.0 2.0 4.0 2.0 4.0 2.0C2.8954305 2.0 2.0 2.81148389 2.0 3.8125C2.0 3.8125 2.0 58.1875 2.0 58.1875C2.0 59.1885161 2.8954305 60.0 4.0 60.0C4.0 60.0 36.0 60.0 36.0 60.0C36.0 60.0 36.0 56.375 36.0 56.375C36.0 56.375 6.0 56.375 6.0 56.375C6.0 56.375 6.0 41.875 6.0 41.875C6.0 41.875 38.0 41.875 38.0 41.875C38.0 41.875 38.0 38.25 38.0 38.25C38.0 38.25 6.0 38.25 6.0 38.25C6.0 38.25 6.0 23.75 6.0 23.75C6.0 23.75 62.0 23.75 62.0 23.75C62.0 23.75 62.0 36.4375 62.0 36.4375C62.0 36.4375 66.0 36.4375 66.0 36.4375C66.0 36.4375 66.0 3.8125 66.0 3.8125C66.0 2.81148389 65.1045695 2.0 64.0 2.0C64.0 2.0 64.0 2.0 64.0 2.0M62.0 20.125C62.0 20.125 6.0 20.125 6.0 20.125C6.0 20.125 6.0 5.625 6.0 5.625C6.0 5.625 62.0 5.625 62.0 5.625C62.0 5.625 62.0 20.125 62.0 20.125C62.0 20.125 62.0 20.125 62.0 20.125" />
+ <path d="M24.0 47.0C24.0 47.0 24.0 51.0 24.0 51.0C24.0 51.0 20.0 51.0 20.0 51.0C20.0 51.0 20.0 47.0 20.0 47.0C20.0 47.0 24.0 47.0 24.0 47.0C24.0 47.0 24.0 47.0 24.0 47.0M16.0 47.0C16.0 47.0 16.0 51.0 16.0 51.0C16.0 51.0 12.0 51.0 12.0 51.0C12.0 51.0 12.0 47.0 12.0 47.0C12.0 47.0 16.0 47.0 16.0 47.0C16.0 47.0 16.0 47.0 16.0 47.0M56.0 29.0C56.0 29.0 56.0 33.0 56.0 33.0C56.0 33.0 52.0 33.0 52.0 33.0C52.0 33.0 52.0 29.0 52.0 29.0C52.0 29.0 56.0 29.0 56.0 29.0C56.0 29.0 56.0 29.0 56.0 29.0M48.0 29.0C48.0 29.0 48.0 33.0 48.0 33.0C48.0 33.0 12.0 33.0 12.0 33.0C12.0 33.0 12.0 29.0 12.0 29.0C12.0 29.0 48.0 29.0 48.0 29.0C48.0 29.0 48.0 29.0 48.0 29.0M22.0 11.0C22.0 11.0 22.0 15.0 22.0 15.0C22.0 15.0 10.0 15.0 10.0 15.0C10.0 15.0 10.0 11.0 10.0 11.0C10.0 11.0 22.0 11.0 22.0 11.0C22.0 11.0 22.0 11.0 22.0 11.0M70.0 0.0C70.0 0.0 70.0 36.5 70.0 36.5C70.0 36.5 65.0 36.5 65.0 36.5C65.0 36.5 65.0 4.5 65.0 4.5C65.0 4.5 5.0 4.5 5.0 4.5C5.0 4.5 5.0 58.5 5.0 58.5C5.0 58.5 36.0 58.5 36.0 58.5C36.0 58
.5 36.0 63.0 36.0 63.0C36.0 63.0 0.0 63.0 0.0 63.0C0.0 63.0 0.0 0.0 0.0 0.0C0.0 0.0 70.0 0.0 70.0 0.0C70.0 0.0 70.0 0.0 70.0 0.0M32.0 47.0C32.0 47.0 32.0 51.0 32.0 51.0C32.0 51.0 28.0 51.0 28.0 51.0C28.0 51.0 28.0 47.0 28.0 47.0C28.0 47.0 32.0 47.0 32.0 47.0C32.0 47.0 32.0 47.0 32.0 47.0M54.0 11.0C54.0 11.0 54.0 15.0 54.0 15.0C54.0 15.0 50.0 15.0 50.0 15.0C50.0 15.0 50.0 11.0 50.0 11.0C50.0 11.0 54.0 11.0 54.0 11.0C54.0 11.0 54.0 11.0 54.0 11.0M46.0 11.0C46.0 11.0 46.0 15.0 46.0 15.0C46.0 15.0 42.0 15.0 42.0 15.0C42.0 15.0 42.0 11.0 42.0 11.0C42.0 11.0 46.0 11.0 46.0 11.0C46.0 11.0 46.0 11.0 46.0 11.0M38.0 11.0C38.0 11.0 38.0 15.0 38.0 15.0C38.0 15.0 34.0 15.0 34.0 15.0C34.0 15.0 34.0 11.0 34.0 11.0C34.0 11.0 38.0 11.0 38.0 11.0C38.0 11.0 38.0 11.0 38.0 11.0M30.0 11.0C30.0 11.0 30.0 15.0 30.0 15.0C30.0 15.0 26.0 15.0 26.0 15.0C26.0 15.0 26.0 11.0 26.0 11.0C26.0 11.0 30.0 11.0 30.0 11.0C30.0 11.0 30.0 11.0 30.0 11.0" />
+ <path d="M61.0 46.0C61.0 46.0 59.0 46.0 59.0 46.0C59.0 46.0 59.0 40.0 59.0 40.0C59.0 38.8954305 58.1045695 38.0 57.0 38.0C57.0 38.0 49.0 38.0 49.0 38.0C47.8954305 38.0 47.0 38.8954305 47.0 40.0C47.0 40.0 47.0 46.0 47.0 46.0C47.0 46.0 45.0 46.0 45.0 46.0C43.8954305 46.0 43.0 46.8954305 43.0 48.0C43.0 48.0 43.0 60.0 43.0 60.0C43.0 61.1045695 43.8954305 62.0 45.0 62.0C45.0 62.0 61.0 62.0 61.0 62.0C62.1045695 62.0 63.0 61.1045695 63.0 60.0C63.0 60.0 63.0 48.0 63.0 48.0C63.0 46.8954305 62.1045695 46.0 61.0 46.0C61.0 46.0 61.0 46.0 61.0 46.0M51.0 42.0C51.0 42.0 55.0 42.0 55.0 42.0C55.0 42.0 55.0 46.0 55.0 46.0C55.0 46.0 51.0 46.0 51.0 46.0C51.0 46.0 51.0 42.0 51.0 42.0C51.0 42.0 51.0 42.0 51.0 42.0M59.0 58.0C59.0 58.0 47.0 58.0 47.0 58.0C47.0 58.0 47.0 50.0 47.0 50.0C47.0 50.0 59.0 50.0 59.0 50.0C59.0 50.0 59.0 58.0 59.0 58.0C59.0 58.0 59.0 58.0 59.0 58.0" />
+ </g>
+</svg>
diff --git a/browser/components/onionservices/content/onionservices.css b/browser/components/onionservices/content/onionservices.css
new file mode 100644
index 000000000000..e2621ec8266d
--- /dev/null
+++ b/browser/components/onionservices/content/onionservices.css
@@ -0,0 +1,69 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+@namespace html url("http://www.w3.org/1999/xhtml");
+
+html|*#tor-clientauth-notification-onionname {
+ font-weight: bold;
+}
+
+html|*#tor-clientauth-notification-key {
+ box-sizing: border-box;
+ width: 100%;
+ margin-top: 15px;
+ padding: 6px;
+}
+
+/* Start of rules adapted from
+ * browser/components/newtab/css/activity-stream-mac.css (linux and windows
+ * use the same rules).
+ */
+html|*#tor-clientauth-notification-key.invalid {
+ border: 1px solid #D70022;
+ box-shadow: 0 0 0 1px #D70022, 0 0 0 4px rgba(215, 0, 34, 0.3);
+}
+
+html|*#tor-clientauth-warning {
+ display: inline-block;
+ animation: fade-up-tt 450ms;
+ background: #D70022;
+ border-radius: 2px;
+ color: #FFF;
+ inset-inline-start: 3px;
+ padding: 5px 12px;
+ position: relative;
+ top: 6px;
+ z-index: 1;
+}
+
+html|*#tor-clientauth-warning[hidden] {
+ display: none;
+}
+
+html|*#tor-clientauth-warning::before {
+ background: #D70022;
+ bottom: -8px;
+ content: '.';
+ height: 16px;
+ inset-inline-start: 12px;
+ position: absolute;
+ text-indent: -999px;
+ top: -7px;
+ transform: rotate(45deg);
+ white-space: nowrap;
+ width: 16px;
+ z-index: -1;
+}
+
+@keyframes fade-up-tt {
+ 0% {
+ opacity: 0;
+ transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+/* End of rules adapted from
+ * browser/components/newtab/css/activity-stream-mac.css
+ */
diff --git a/browser/components/onionservices/content/savedKeysDialog.js b/browser/components/onionservices/content/savedKeysDialog.js
new file mode 100644
index 000000000000..b1376bbabe85
--- /dev/null
+++ b/browser/components/onionservices/content/savedKeysDialog.js
@@ -0,0 +1,259 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "controller",
+ "resource://torbutton/modules/tor-control-port.js"
+);
+
+var gOnionServicesSavedKeysDialog = {
+ selector: {
+ dialog: "#onionservices-savedkeys-dialog",
+ intro: "#onionservices-savedkeys-intro",
+ tree: "#onionservices-savedkeys-tree",
+ onionSiteCol: "#onionservices-savedkeys-siteCol",
+ onionKeyCol: "#onionservices-savedkeys-keyCol",
+ errorIcon: "#onionservices-savedkeys-errorIcon",
+ errorMessage: "#onionservices-savedkeys-errorMessage",
+ removeButton: "#onionservices-savedkeys-remove",
+ removeAllButton: "#onionservices-savedkeys-removeall",
+ },
+
+ _tree: undefined,
+ _isBusy: false, // true when loading data, deleting a key, etc.
+
+ // Public functions (called from outside this file).
+ async deleteSelectedKeys() {
+ this._setBusyState(true);
+
+ const indexesToDelete = [];
+ const count = this._tree.view.selection.getRangeCount();
+ for (let i = 0; i < count; ++i) {
+ const minObj = {};
+ const maxObj = {};
+ this._tree.view.selection.getRangeAt(i, minObj, maxObj);
+ for (let idx = minObj.value; idx <= maxObj.value; ++idx) {
+ indexesToDelete.push(idx);
+ }
+ }
+
+ if (indexesToDelete.length > 0) {
+ const controllerFailureMsg =
+ TorStrings.onionServices.authPreferences.failedToRemoveKey;
+ try {
+ const torController = controller(aError => {
+ this._showError(controllerFailureMsg);
+ });
+
+ // Remove in reverse index order to avoid issues caused by index changes.
+ for (let i = indexesToDelete.length - 1; i >= 0; --i) {
+ await this._deleteOneKey(torController, indexesToDelete[i]);
+ }
+ } catch (e) {
+ if (e.torMessage) {
+ this._showError(e.torMessage);
+ } else {
+ this._showError(controllerFailureMsg);
+ }
+ }
+ }
+
+ this._setBusyState(false);
+ },
+
+ async deleteAllKeys() {
+ this._tree.view.selection.selectAll();
+ await this.deleteSelectedKeys();
+ },
+
+ updateButtonsState() {
+ const haveSelection = this._tree.view.selection.getRangeCount() > 0;
+ const dialog = document.querySelector(this.selector.dialog);
+ const removeSelectedBtn = dialog.querySelector(this.selector.removeButton);
+ removeSelectedBtn.disabled = this._isBusy || !haveSelection;
+ const removeAllBtn = dialog.querySelector(this.selector.removeAllButton);
+ removeAllBtn.disabled = this._isBusy || this.rowCount === 0;
+ },
+
+ // Private functions.
+ _onLoad() {
+ document.mozSubdialogReady = this._init();
+ },
+
+ async _init() {
+ await this._populateXUL();
+
+ window.addEventListener("keypress", this._onWindowKeyPress.bind(this));
+
+ // We don't use await here because we want _loadSavedKeys() to run
+ // in the background and not block loading of this dialog.
+ this._loadSavedKeys();
+ },
+
+ async _populateXUL() {
+ const dialog = document.querySelector(this.selector.dialog);
+ const authPrefStrings = TorStrings.onionServices.authPreferences;
+ dialog.setAttribute("title", authPrefStrings.dialogTitle);
+
+ let elem = dialog.querySelector(this.selector.intro);
+ elem.textContent = authPrefStrings.dialogIntro;
+
+ elem = dialog.querySelector(this.selector.onionSiteCol);
+ elem.setAttribute("label", authPrefStrings.onionSite);
+
+ elem = dialog.querySelector(this.selector.onionKeyCol);
+ elem.setAttribute("label", authPrefStrings.onionKey);
+
+ elem = dialog.querySelector(this.selector.removeButton);
+ elem.setAttribute("label", authPrefStrings.remove);
+
+ elem = dialog.querySelector(this.selector.removeAllButton);
+ elem.setAttribute("label", authPrefStrings.removeAll);
+
+ this._tree = dialog.querySelector(this.selector.tree);
+ },
+
+ async _loadSavedKeys() {
+ const controllerFailureMsg =
+ TorStrings.onionServices.authPreferences.failedToGetKeys;
+ this._setBusyState(true);
+
+ try {
+ this._tree.view = this;
+
+ const torController = controller(aError => {
+ this._showError(controllerFailureMsg);
+ });
+
+ const keyInfoList = await torController.onionAuthViewKeys();
+ if (keyInfoList) {
+ // Filter out temporary keys.
+ this._keyInfoList = keyInfoList.filter(aKeyInfo => {
+ if (!aKeyInfo.Flags) {
+ return false;
+ }
+
+ const flags = aKeyInfo.Flags.split(",");
+ return flags.includes("Permanent");
+ });
+
+ // Sort by the .onion address.
+ this._keyInfoList.sort((aObj1, aObj2) => {
+ const hsAddr1 = aObj1.hsAddress.toLowerCase();
+ const hsAddr2 = aObj2.hsAddress.toLowerCase();
+ if (hsAddr1 < hsAddr2) {
+ return -1;
+ }
+ return hsAddr1 > hsAddr2 ? 1 : 0;
+ });
+ }
+
+ // Render the tree content.
+ this._tree.rowCountChanged(0, this.rowCount);
+ } catch (e) {
+ if (e.torMessage) {
+ this._showError(e.torMessage);
+ } else {
+ this._showError(controllerFailureMsg);
+ }
+ }
+
+ this._setBusyState(false);
+ },
+
+ // This method may throw; callers should catch errors.
+ async _deleteOneKey(aTorController, aIndex) {
+ const keyInfoObj = this._keyInfoList[aIndex];
+ await aTorController.onionAuthRemove(keyInfoObj.hsAddress);
+ this._tree.view.selection.clearRange(aIndex, aIndex);
+ this._keyInfoList.splice(aIndex, 1);
+ this._tree.rowCountChanged(aIndex + 1, -1);
+ },
+
+ _setBusyState(aIsBusy) {
+ this._isBusy = aIsBusy;
+ this.updateButtonsState();
+ },
+
+ _onWindowKeyPress(event) {
+ if (event.keyCode === KeyEvent.DOM_VK_ESCAPE) {
+ window.close();
+ } else if (event.keyCode === KeyEvent.DOM_VK_DELETE) {
+ this.deleteSelectedKeys();
+ }
+ },
+
+ _showError(aMessage) {
+ const dialog = document.querySelector(this.selector.dialog);
+ const errorIcon = dialog.querySelector(this.selector.errorIcon);
+ errorIcon.style.visibility = aMessage ? "visible" : "hidden";
+ const errorDesc = dialog.querySelector(this.selector.errorMessage);
+ errorDesc.textContent = aMessage ? aMessage : "";
+ },
+
+ // XUL tree widget view implementation.
+ get rowCount() {
+ return this._keyInfoList ? this._keyInfoList.length : 0;
+ },
+
+ getCellText(aRow, aCol) {
+ let val = "";
+ if (this._keyInfoList && aRow < this._keyInfoList.length) {
+ const keyInfo = this._keyInfoList[aRow];
+ if (aCol.id.endsWith("-siteCol")) {
+ val = keyInfo.hsAddress;
+ } else if (aCol.id.endsWith("-keyCol")) {
+ val = keyInfo.typeAndKey;
+ // Omit keyType because it is always "x25519".
+ const idx = val.indexOf(":");
+ if (idx > 0) {
+ val = val.substring(idx + 1);
+ }
+ }
+ }
+
+ return val;
+ },
+
+ isSeparator(index) {
+ return false;
+ },
+
+ isSorted() {
+ return false;
+ },
+
+ isContainer(index) {
+ return false;
+ },
+
+ setTree(tree) {},
+
+ getImageSrc(row, column) {},
+
+ getCellValue(row, column) {},
+
+ cycleHeader(column) {},
+
+ getRowProperties(row) {
+ return "";
+ },
+
+ getColumnProperties(column) {
+ return "";
+ },
+
+ getCellProperties(row, column) {
+ return "";
+ },
+};
+
+window.addEventListener("load", () => gOnionServicesSavedKeysDialog._onLoad());
diff --git a/browser/components/onionservices/content/savedKeysDialog.xhtml b/browser/components/onionservices/content/savedKeysDialog.xhtml
new file mode 100644
index 000000000000..3db9bb05ea82
--- /dev/null
+++ b/browser/components/onionservices/content/savedKeysDialog.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- Copyright (c) 2020, The Tor Project, Inc. -->
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/content/onionservices/authPreferences.css" type="text/css"?>
+
+<window id="onionservices-savedkeys-dialog"
+ windowtype="OnionServices:SavedKeys"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ style="width: 45em;">
+
+ <script src="chrome://browser/content/onionservices/savedKeysDialog.js"/>
+
+ <vbox id="onionservices-savedkeys" class="contentPane" flex="1">
+ <label id="onionservices-savedkeys-intro"
+ control="onionservices-savedkeys-tree"/>
+ <separator class="thin"/>
+ <tree id="onionservices-savedkeys-tree" flex="1" hidecolumnpicker="true"
+ width="750"
+ style="height: 20em;"
+ onselect="gOnionServicesSavedKeysDialog.updateButtonsState();">
+ <treecols>
+ <treecol id="onionservices-savedkeys-siteCol" flex="1" persist="width"/>
+ <splitter class="tree-splitter"/>
+ <treecol id="onionservices-savedkeys-keyCol" flex="1" persist="width"/>
+ </treecols>
+ <treechildren/>
+ </tree>
+ <hbox id="onionservices-savedkeys-errorContainer" align="baseline" flex="1">
+ <image id="onionservices-savedkeys-errorIcon"/>
+ <description id="onionservices-savedkeys-errorMessage" flex="1"/>
+ </hbox>
+ <separator class="thin"/>
+ <hbox id="onionservices-savedkeys-buttons">
+ <button id="onionservices-savedkeys-remove" disabled="true"
+ oncommand="gOnionServicesSavedKeysDialog.deleteSelectedKeys();"/>
+ <button id="onionservices-savedkeys-removeall"
+ oncommand="gOnionServicesSavedKeysDialog.deleteAllKeys();"/>
+ </hbox>
+ </vbox>
+</window>
diff --git a/browser/components/onionservices/jar.mn b/browser/components/onionservices/jar.mn
new file mode 100644
index 000000000000..9d6ce88d1841
--- /dev/null
+++ b/browser/components/onionservices/jar.mn
@@ -0,0 +1,9 @@
+browser.jar:
+ content/browser/onionservices/authPreferences.css (content/authPreferences.css)
+ content/browser/onionservices/authPreferences.js (content/authPreferences.js)
+ content/browser/onionservices/authPrompt.js (content/authPrompt.js)
+ content/browser/onionservices/authUtil.jsm (content/authUtil.jsm)
+ content/browser/onionservices/netError/ (content/netError/*)
+ content/browser/onionservices/onionservices.css (content/onionservices.css)
+ content/browser/onionservices/savedKeysDialog.js (content/savedKeysDialog.js)
+ content/browser/onionservices/savedKeysDialog.xhtml (content/savedKeysDialog.xhtml)
diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build
new file mode 100644
index 000000000000..7e103239c8d6
--- /dev/null
+++ b/browser/components/onionservices/moz.build
@@ -0,0 +1 @@
+JAR_MANIFESTS += ['jar.mn']
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 514eba207ca3..2997149dbb05 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -12,6 +12,7 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/search.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/containers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
+<?xml-stylesheet href="chrome://browser/content/onionservices/authPreferences.css"?>
<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
index d2a1eeba830e..c6ddcacd4e99 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -499,6 +499,8 @@
<label id="fips-desc" hidden="true" data-l10n-id="forms-master-pw-fips-desc"></label>
</groupbox>
+#include ../onionservices/content/authPreferences.inc.xhtml
+
<!-- The form autofill section is inserted in to this box
after the form autofill extension has initialized. -->
<groupbox id="formAutofillGroupBox"
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index a7cfa47ae4e8..96449906ec79 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -80,6 +80,12 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() {
}
});
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionServicesAuthPreferences"],
+ "chrome://browser/content/onionservices/authPreferences.js"
+);
+
// TODO: module import via ChromeUtils.defineModuleGetter
XPCOMUtils.defineLazyScriptGetter(
this,
@@ -505,6 +511,7 @@ var gPrivacyPane = {
this.trackingProtectionReadPrefs();
this.networkCookieBehaviorReadPrefs();
this._initTrackingProtectionExtensionControl();
+ OnionServicesAuthPreferences.init();
this._initSecurityLevel();
Services.telemetry.setEventRecordingEnabled("pwmgr", true);
diff --git a/browser/themes/shared/notification-icons.inc.css b/browser/themes/shared/notification-icons.inc.css
index 83e2a6623cc7..785a929256fc 100644
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -120,6 +120,9 @@
list-style-image: url(chrome://browser/skin/notification-icons/indexedDB.svg);
}
+/* Reuse Firefox's login (key) icon for the Tor onion services auth. prompt */
+.popup-notification-icon[popupid="tor-clientauth"],
+.tor-clientauth-icon,
.popup-notification-icon[popupid="password"],
.login-icon {
list-style-image: url(chrome://browser/skin/login.svg);
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
index 1c361875ec4c..1ef5ee496399 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -3497,6 +3497,7 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
}
} else {
// Errors requiring simple formatting
+ bool isOnionAuthError = false;
switch (aError) {
case NS_ERROR_MALFORMED_URI:
// URI is malformed
@@ -3579,10 +3580,44 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
// HTTP/2 or HTTP/3 stack detected a protocol error
error = "networkProtocolError";
break;
-
+ case NS_ERROR_TOR_ONION_SVC_NOT_FOUND:
+ error = "onionServices.descNotFound";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_IS_INVALID:
+ error = "onionServices.descInvalid";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_INTRO_FAILED:
+ error = "onionServices.introFailed";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_REND_FAILED:
+ error = "onionServices.rendezvousFailed";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH:
+ error = "onionServices.clientAuthMissing";
+ isOnionAuthError = true;
+ break;
+ case NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH:
+ error = "onionServices.clientAuthIncorrect";
+ isOnionAuthError = true;
+ break;
+ case NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS:
+ error = "onionServices.badAddress";
+ break;
+ case NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT:
+ error = "onionServices.introTimedOut";
+ break;
default:
break;
}
+
+ // The presence of aFailedChannel indicates that we arrived here due to a
+ // failed connection attempt. Note that we will arrive here a second time
+ // if the user cancels the Tor client auth prompt, but in that case we
+ // will not have a failed channel and therefore we will not prompt again.
+ if (isOnionAuthError && aFailedChannel) {
+ // Display about:blank while the Tor client auth prompt is open.
+ errorPage.AssignLiteral("blank");
+ }
}
// If the HTTPS-Only Mode upgraded this request and the upgrade might have
@@ -3665,6 +3700,20 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
nsAutoString str;
rv =
stringBundle->FormatStringFromName(errorDescriptionID, formatStrs, str);
+ if (NS_FAILED(rv)) {
+ // As a fallback, check torbutton.properties for the error string.
+ const char bundleURL[] = "chrome://torbutton/locale/torbutton.properties";
+ nsCOMPtr<nsIStringBundleService> stringBundleService =
+ mozilla::services::GetStringBundleService();
+ if (stringBundleService) {
+ nsCOMPtr<nsIStringBundle> tbStringBundle;
+ if (NS_SUCCEEDED(stringBundleService->CreateBundle(
+ bundleURL, getter_AddRefs(tbStringBundle)))) {
+ rv = tbStringBundle->FormatStringFromName(errorDescriptionID,
+ formatStrs, str);
+ }
+ }
+ }
NS_ENSURE_SUCCESS(rv, rv);
messageStr.Assign(str);
}
@@ -6108,6 +6157,7 @@ nsresult nsDocShell::FilterStatusForErrorPage(
aStatus == NS_ERROR_FILE_ACCESS_DENIED ||
aStatus == NS_ERROR_CORRUPTED_CONTENT ||
aStatus == NS_ERROR_INVALID_CONTENT_ENCODING ||
+ NS_ERROR_GET_MODULE(aStatus) == NS_ERROR_MODULE_TOR ||
NS_ERROR_GET_MODULE(aStatus) == NS_ERROR_MODULE_SECURITY) {
// Errors to be shown for any frame
return aStatus;
@@ -7824,6 +7874,35 @@ nsresult nsDocShell::CreateContentViewer(const nsACString& aContentType,
FireOnLocationChange(this, aRequest, mCurrentURI, locationFlags);
}
+ // Arrange to show a Tor onion service client authentication prompt if
+ // appropriate.
+ if ((mLoadType == LOAD_ERROR_PAGE) && failedChannel) {
+ nsresult status = NS_OK;
+ if (NS_SUCCEEDED(failedChannel->GetStatus(&status)) &&
+ ((status == NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH) ||
+ (status == NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH))) {
+ nsAutoCString onionHost;
+ failedURI->GetHost(onionHost);
+ const char* topic = (status == NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH)
+ ? "tor-onion-services-clientauth-missing"
+ : "tor-onion-services-clientauth-incorrect";
+ if (XRE_IsContentProcess()) {
+ nsCOMPtr<nsIBrowserChild> browserChild = GetBrowserChild();
+ if (browserChild) {
+ static_cast<BrowserChild*>(browserChild.get())
+ ->SendShowOnionServicesAuthPrompt(onionHost, nsCString(topic));
+ }
+ } else {
+ nsCOMPtr<nsPIDOMWindowOuter> browserWin = GetWindow();
+ nsCOMPtr<nsIObserverService> obsSvc = services::GetObserverService();
+ if (browserWin && obsSvc) {
+ obsSvc->NotifyObservers(browserWin, topic,
+ NS_ConvertUTF8toUTF16(onionHost).get());
+ }
+ }
+ }
+ }
+
return NS_OK;
}
diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp
index 04935175f029..caedda626553 100644
--- a/dom/ipc/BrowserParent.cpp
+++ b/dom/ipc/BrowserParent.cpp
@@ -3908,6 +3908,27 @@ mozilla::ipc::IPCResult BrowserParent::RecvShowCanvasPermissionPrompt(
return IPC_OK();
}
+mozilla::ipc::IPCResult BrowserParent::RecvShowOnionServicesAuthPrompt(
+ const nsCString& aOnionName, const nsCString& aTopic) {
+ nsCOMPtr<nsIBrowser> browser =
+ mFrameElement ? mFrameElement->AsBrowser() : nullptr;
+ if (!browser) {
+ // If the tab is being closed, the browser may not be available.
+ // In this case we can ignore the request.
+ return IPC_OK();
+ }
+ nsCOMPtr<nsIObserverService> os = services::GetObserverService();
+ if (!os) {
+ return IPC_FAIL_NO_REASON(this);
+ }
+ nsresult rv = os->NotifyObservers(browser, aTopic.get(),
+ NS_ConvertUTF8toUTF16(aOnionName).get());
+ if (NS_FAILED(rv)) {
+ return IPC_FAIL_NO_REASON(this);
+ }
+ return IPC_OK();
+}
+
mozilla::ipc::IPCResult BrowserParent::RecvVisitURI(nsIURI* aURI,
nsIURI* aLastVisitedURI,
const uint32_t& aFlags) {
diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h
index 63a776755e26..87dba47d43a0 100644
--- a/dom/ipc/BrowserParent.h
+++ b/dom/ipc/BrowserParent.h
@@ -761,6 +761,9 @@ class BrowserParent final : public PBrowserParent,
mozilla::ipc::IPCResult RecvShowCanvasPermissionPrompt(
const nsCString& aOrigin, const bool& aHideDoorHanger);
+ mozilla::ipc::IPCResult RecvShowOnionServicesAuthPrompt(
+ const nsCString& aOnionName, const nsCString& aTopic);
+
mozilla::ipc::IPCResult RecvSetSystemFont(const nsCString& aFontName);
mozilla::ipc::IPCResult RecvGetSystemFont(nsCString* aFontName);
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl
index bf9fefa00c9c..eb50dafd4406 100644
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -596,6 +596,15 @@ parent:
bool aNeedCollectSHistory, uint32_t aFlushId,
bool aIsFinal, uint32_t aEpoch);
+ /**
+ * This function is used to notify the parent that it should display a
+ * onion services client authentication prompt.
+ *
+ * @param aOnionHost The hostname of the .onion that needs authentication.
+ * @param aTopic The reason for the prompt.
+ */
+ async ShowOnionServicesAuthPrompt(nsCString aOnionHost, nsCString aTopic);
+
child:
async NativeSynthesisResponse(uint64_t aObserverId, nsCString aResponse);
async FlushTabState(uint32_t aFlushId, bool aIsFinal);
diff --git a/js/xpconnect/src/xpc.msg b/js/xpconnect/src/xpc.msg
index d884c6a85999..31e5e75ba35c 100644
--- a/js/xpconnect/src/xpc.msg
+++ b/js/xpconnect/src/xpc.msg
@@ -253,5 +253,15 @@ XPC_MSG_DEF(NS_ERROR_FINGERPRINTING_URI , "The URI is fingerprinti
XPC_MSG_DEF(NS_ERROR_CRYPTOMINING_URI , "The URI is cryptomining")
XPC_MSG_DEF(NS_ERROR_SOCIALTRACKING_URI , "The URI is social tracking")
+/* Codes related to Tor */
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_NOT_FOUND , "Tor onion service descriptor cannot be found")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_IS_INVALID , "Tor onion service descriptor is invalid")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_INTRO_FAILED , "Tor onion service introduction failed")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_REND_FAILED , "Tor onion service rendezvous failed")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH, "Tor onion service missing client authorization")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH , "Tor onion service wrong client authorization")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS , "Tor onion service bad address")
+XPC_MSG_DEF(NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT , "Tor onion service introduction timed out")
+
/* Profile manager error codes */
XPC_MSG_DEF(NS_ERROR_DATABASE_CHANGED , "Flushing the profiles to disk would have overwritten changes made elsewhere.")
diff --git a/netwerk/base/nsSocketTransport2.cpp b/netwerk/base/nsSocketTransport2.cpp
index dcf2a33b25f3..97716cf90522 100644
--- a/netwerk/base/nsSocketTransport2.cpp
+++ b/netwerk/base/nsSocketTransport2.cpp
@@ -215,6 +215,12 @@ nsresult ErrorAccordingToNSPR(PRErrorCode errorCode) {
default:
if (psm::IsNSSErrorCode(errorCode)) {
rv = psm::GetXPCOMFromNSSError(errorCode);
+ } else {
+ // If we received a Tor extended error code via SOCKS, pass it through.
+ nsresult res = nsresult(errorCode);
+ if (NS_ERROR_GET_MODULE(res) == NS_ERROR_MODULE_TOR) {
+ rv = res;
+ }
}
break;
diff --git a/netwerk/socket/nsSOCKSIOLayer.cpp b/netwerk/socket/nsSOCKSIOLayer.cpp
index c8b42d142a53..5e16e186a37c 100644
--- a/netwerk/socket/nsSOCKSIOLayer.cpp
+++ b/netwerk/socket/nsSOCKSIOLayer.cpp
@@ -1007,6 +1007,55 @@ PRStatus nsSOCKSSocketInfo::ReadV5ConnectResponseTop() {
"08, Address type not supported."));
c = PR_BAD_ADDRESS_ERROR;
break;
+ case 0xF0: // Tor SOCKS5_HS_NOT_FOUND
+ LOGERROR(
+ ("socks5: connect failed: F0,"
+ " Tor onion service descriptor can not be found."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_NOT_FOUND);
+ break;
+ case 0xF1: // Tor SOCKS5_HS_IS_INVALID
+ LOGERROR(
+ ("socks5: connect failed: F1,"
+ " Tor onion service descriptor is invalid."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_IS_INVALID);
+ break;
+ case 0xF2: // Tor SOCKS5_HS_INTRO_FAILED
+ LOGERROR(
+ ("socks5: connect failed: F2,"
+ " Tor onion service introduction failed."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_INTRO_FAILED);
+ break;
+ case 0xF3: // Tor SOCKS5_HS_REND_FAILED
+ LOGERROR(
+ ("socks5: connect failed: F3,"
+ " Tor onion service rendezvous failed."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_REND_FAILED);
+ break;
+ case 0xF4: // Tor SOCKS5_HS_MISSING_CLIENT_AUTH
+ LOGERROR(
+ ("socks5: connect failed: F4,"
+ " Tor onion service missing client authorization."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH);
+ break;
+ case 0xF5: // Tor SOCKS5_HS_BAD_CLIENT_AUTH
+ LOGERROR(
+ ("socks5: connect failed: F5,"
+ " Tor onion service wrong client authorization."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH);
+ break;
+ case 0xF6: // Tor SOCKS5_HS_BAD_ADDRESS
+ LOGERROR(
+ ("socks5: connect failed: F6,"
+ " Tor onion service bad address."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS);
+ break;
+ case 0xF7: // Tor SOCKS5_HS_INTRO_TIMEDOUT
+ LOGERROR(
+ ("socks5: connect failed: F7,"
+ " Tor onion service introduction timed out."));
+ c = static_cast<uint32_t>(NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT);
+ break;
+
default:
LOGERROR(("socks5: connect failed."));
break;
diff --git a/toolkit/modules/PopupNotifications.jsm b/toolkit/modules/PopupNotifications.jsm
index 2fc54a589969..68f687698cfa 100644
--- a/toolkit/modules/PopupNotifications.jsm
+++ b/toolkit/modules/PopupNotifications.jsm
@@ -406,6 +406,8 @@ PopupNotifications.prototype = {
* will be dismissed instead of removed after running the callback.
* - [optional] disabled (boolean): If this is true, the button
* will be disabled.
+ * - [optional] leaveOpen (boolean): If this is true, the notification
+ * will not be removed after running the callback.
* - [optional] disableHighlight (boolean): If this is true, the button
* will not apply the default highlight style.
* If null, the notification will have a default "OK" action button
@@ -1890,6 +1892,10 @@ PopupNotifications.prototype = {
this._dismiss();
return;
}
+
+ if (action.leaveOpen) {
+ return;
+ }
}
this._remove(notification);
diff --git a/toolkit/modules/RemotePageAccessManager.jsm b/toolkit/modules/RemotePageAccessManager.jsm
index e2e82aaaf6fa..10b200e5def2 100644
--- a/toolkit/modules/RemotePageAccessManager.jsm
+++ b/toolkit/modules/RemotePageAccessManager.jsm
@@ -104,6 +104,7 @@ let RemotePageAccessManager = {
RPMPrefIsLocked: ["security.tls.version.min"],
RPMAddToHistogram: ["*"],
RPMGetHttpResponseHeader: ["*"],
+ RPMGetTorStrings: ["*"],
},
"about:newinstall": {
RPMGetUpdateChannel: ["*"],
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js
index dd5c5fdbe1b0..464e0f654262 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/frame-script.js
@@ -38,5 +38,6 @@ module.exports = {
RPMAddToHistogram: false,
RPMRemoveMessageListener: false,
RPMGetHttpResponseHeader: false,
+ RPMGetTorStrings: false,
},
};
diff --git a/xpcom/base/ErrorList.py b/xpcom/base/ErrorList.py
index 5451127bcffe..2086aeee3ba4 100755
--- a/xpcom/base/ErrorList.py
+++ b/xpcom/base/ErrorList.py
@@ -85,6 +85,7 @@ modules["URL_CLASSIFIER"] = Mod(42)
# ErrorResult gets its own module to reduce the chance of someone accidentally
# defining an error code matching one of the ErrorResult ones.
modules["ERRORRESULT"] = Mod(43)
+modules["TOR"] = Mod(44)
# NS_ERROR_MODULE_GENERAL should be used by modules that do not
# care if return code values overlap. Callers of methods that
@@ -1179,6 +1180,27 @@ with modules["ERRORRESULT"]:
errors["NS_ERROR_INTERNAL_ERRORRESULT_RANGEERROR"] = FAILURE(5)
+# =======================================================================
+# 44: Tor-specific error codes.
+# =======================================================================
+with modules["TOR"]:
+ # Tor onion service descriptor can not be found.
+ errors["NS_ERROR_TOR_ONION_SVC_NOT_FOUND"] = FAILURE(1)
+ # Tor onion service descriptor is invalid.
+ errors["NS_ERROR_TOR_ONION_SVC_IS_INVALID"] = FAILURE(2)
+ # Tor onion service introduction failed.
+ errors["NS_ERROR_TOR_ONION_SVC_INTRO_FAILED"] = FAILURE(3)
+ # Tor onion service rendezvous failed.
+ errors["NS_ERROR_TOR_ONION_SVC_REND_FAILED"] = FAILURE(4)
+ # Tor onion service missing client authorization.
+ errors["NS_ERROR_TOR_ONION_SVC_MISSING_CLIENT_AUTH"] = FAILURE(5)
+ # Tor onion service wrong client authorization.
+ errors["NS_ERROR_TOR_ONION_SVC_BAD_CLIENT_AUTH"] = FAILURE(6)
+ # Tor onion service bad address.
+ errors["NS_ERROR_TOR_ONION_SVC_BAD_ADDRESS"] = FAILURE(7)
+ # Tor onion service introduction timed out.
+ errors["NS_ERROR_TOR_ONION_SVC_INTRO_TIMEDOUT"] = FAILURE(8)
+
# =======================================================================
# 51: NS_ERROR_MODULE_GENERAL
# =======================================================================
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 24796 - Comment out excess permissions from GeckoView
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 2153bb89cfe5c5d9a723b0ad27259527b17cacf8
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Wed Apr 11 17:52:59 2018 +0000
Bug 24796 - Comment out excess permissions from GeckoView
The GeckoView AndroidManifest.xml is not preprocessed unlike Fennec's
manifest, so we can't use the ifdef preprocessor guards around the
permissions we do not want. Commenting the permissions is the
next-best-thing.
---
.../android/geckoview/src/main/AndroidManifest.xml | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/mobile/android/geckoview/src/main/AndroidManifest.xml b/mobile/android/geckoview/src/main/AndroidManifest.xml
index 87ad6dc28047..4c8ab2a9d996 100644
--- a/mobile/android/geckoview/src/main/AndroidManifest.xml
+++ b/mobile/android/geckoview/src/main/AndroidManifest.xml
@@ -6,20 +6,32 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.mozilla.geckoview">
+<!--#ifdef MOZ_ANDROID_NETWORK_STATE-->
+ <!--
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ -->
+<!--#endif-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+<!--#ifdef MOZ_ANDROID_LOCATION-->
+ <!--
<uses-feature
android:name="android.hardware.location"
android:required="false"/>
<uses-feature
android:name="android.hardware.location.gps"
android:required="false"/>
+ -->
+<!--#endif-->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false"/>
+<!--#ifdef MOZ_WEBRTC-->
+ <!-- TODO preprocess AndroidManifest.xml so that we can
+ conditionally include WebRTC permissions based on MOZ_WEBRTC. -->
+ <!--
<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
@@ -28,14 +40,16 @@
android:required="false"/>
<uses-feature
- android:name="android.hardware.audio.low_latency"
+ android:name="android.hardware.camera.any"
android:required="false"/>
<uses-feature
- android:name="android.hardware.microphone"
+ android:name="android.hardware.audio.low_latency"
android:required="false"/>
<uses-feature
- android:name="android.hardware.camera.any"
+ android:name="android.hardware.microphone"
android:required="false"/>
+ -->
+<!--#endif-->
<!-- GeckoView requires OpenGL ES 2.0 -->
<uses-feature
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 955d7440d2c8febc823f0ff1a61e9ff6e076bc01
Author: Amogh Pradeep <amoghbl1(a)gmail.com>
Date: Fri Jun 12 02:07:45 2015 -0400
Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.
See Bug 1357997 for partial uplift.
Also:
Bug 28051 - Use our Orbot for proxying our connections
Bug 31144 - ESR68 Network Code Review
---
.../main/java/org/mozilla/gecko/GeckoAppShell.java | 68 +++++++++++-----------
.../java/org/mozilla/gecko/util/BitmapUtils.java | 7 ---
.../java/org/mozilla/gecko/util/ProxySelector.java | 25 +++++++-
3 files changed, 59 insertions(+), 41 deletions(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
index 995b23316c32..b9ca73bee2eb 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
@@ -1764,39 +1764,41 @@ public class GeckoAppShell {
@WrapForJNI
private static URLConnection getConnection(final String url) {
- try {
- String spec;
- if (url.startsWith("android://")) {
- spec = url.substring(10);
- } else {
- spec = url.substring(8);
- }
-
- // Check if we are loading a package icon.
- try {
- if (spec.startsWith("icon/")) {
- String[] splits = spec.split("/");
- if (splits.length != 2) {
- return null;
- }
- final String pkg = splits[1];
- final PackageManager pm = getApplicationContext().getPackageManager();
- final Drawable d = pm.getApplicationIcon(pkg);
- final Bitmap bitmap = BitmapUtils.getBitmapFromDrawable(d);
- return new BitmapConnection(bitmap);
- }
- } catch (Exception ex) {
- Log.e(LOGTAG, "error", ex);
- }
-
- // if the colon got stripped, put it back
- int colon = spec.indexOf(':');
- if (colon == -1 || colon > spec.indexOf('/')) {
- spec = spec.replaceFirst("/", ":/");
- }
- } catch (Exception ex) {
- return null;
- }
+ // Bug 31144 - Prevent potential proxy-bypass
+
+ //try {
+ // String spec;
+ // if (url.startsWith("android://")) {
+ // spec = url.substring(10);
+ // } else {
+ // spec = url.substring(8);
+ // }
+
+ // // Check if we are loading a package icon.
+ // try {
+ // if (spec.startsWith("icon/")) {
+ // String[] splits = spec.split("/");
+ // if (splits.length != 2) {
+ // return null;
+ // }
+ // final String pkg = splits[1];
+ // final PackageManager pm = getApplicationContext().getPackageManager();
+ // final Drawable d = pm.getApplicationIcon(pkg);
+ // final Bitmap bitmap = BitmapUtils.getBitmapFromDrawable(d);
+ // return new BitmapConnection(bitmap);
+ // }
+ // } catch (Exception ex) {
+ // Log.e(LOGTAG, "error", ex);
+ // }
+
+ // // if the colon got stripped, put it back
+ // int colon = spec.indexOf(':');
+ // if (colon == -1 || colon > spec.indexOf('/')) {
+ // spec = spec.replaceFirst("/", ":/");
+ // }
+ //} catch (Exception ex) {
+ // return null;
+ //}
return null;
}
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java
index 73a69a3abd66..f795dacffb47 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/BitmapUtils.java
@@ -101,13 +101,6 @@ public final class BitmapUtils {
public static Bitmap decodeUrl(final URL url) {
InputStream stream = null;
- try {
- stream = url.openStream();
- } catch (IOException e) {
- Log.w(LOGTAG, "decodeUrl: IOException downloading " + url);
- return null;
- }
-
if (stream == null) {
Log.w(LOGTAG, "decodeUrl: stream not found downloading " + url);
return null;
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
index 3940d3c84249..9515975f680a 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/util/ProxySelector.java
@@ -29,6 +29,10 @@ import java.net.URLConnection;
import java.util.List;
public class ProxySelector {
+ private static final String TOR_PROXY_ADDRESS = "127.0.0.1";
+ private static final int TOR_SOCKS_PROXY_PORT = 9150;
+ private static final int TOR_HTTP_PROXY_PORT = 8218;
+
public static URLConnection openConnectionWithProxy(final URI uri) throws IOException {
java.net.ProxySelector ps = java.net.ProxySelector.getDefault();
Proxy proxy = Proxy.NO_PROXY;
@@ -39,7 +43,26 @@ public class ProxySelector {
}
}
- return uri.toURL().openConnection(proxy);
+ /* Ignore the proxy we found from the VM, only use Tor. We can probably
+ * safely use the logic in this class in the future. */
+ return uri.toURL().openConnection(getProxy());
+ }
+
+ public static Proxy getProxy() {
+ // TODO make configurable
+ return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(TOR_PROXY_ADDRESS, TOR_SOCKS_PROXY_PORT));
+ }
+
+ public static String getProxyHostAddress() {
+ return TOR_PROXY_ADDRESS;
+ }
+
+ public static int getSocksProxyPort() {
+ return TOR_SOCKS_PROXY_PORT;
+ }
+
+ public static int getHttpProxyPort() {
+ return TOR_HTTP_PROXY_PORT;
}
public ProxySelector() {
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 40091: Load HTTPS Everywhere as a builtin addon in desktop
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit e309ed25ea4dad81a18419b7f842a45a29f970a5
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Sep 4 12:34:35 2020 +0200
Bug 40091: Load HTTPS Everywhere as a builtin addon in desktop
This loads HTTPS Everywhere as a builtin addon from a hardcoded
resource:// URI in desktop. It also ensures that the non-builtin
HTTPS Everywhere addon is always uninstalled on browser startup.
The reason of making this desktop-only is that there are some issues
when installing a builtin extension from geckoview side, making
the extension not available on first startup. So, at least for
now we handle the Fenix case separately. See #40118 for a followup
for investigating these.
---
browser/components/BrowserGlue.jsm | 37 ++++++++++++++++++++++
.../mozapps/extensions/internal/XPIProvider.jsm | 13 ++++++++
2 files changed, 50 insertions(+)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 755fcb16cad7..e46c9d873edf 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -62,6 +62,13 @@ XPCOMUtils.defineLazyServiceGetter(
"nsIPushService"
);
+XPCOMUtils.defineLazyServiceGetters(this, {
+ resProto: [
+ "@mozilla.org/network/protocol;1?name=resource",
+ "nsISubstitutingProtocolHandler",
+ ],
+});
+
const PREF_PDFJS_ISDEFAULT_CACHE_STATE = "pdfjs.enabledCache.state";
/**
@@ -722,6 +729,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
DoHController: "resource:///modules/DoHController.jsm",
DownloadsViewableInternally:
"resource:///modules/DownloadsViewableInternally.jsm",
+ ExtensionData: "resource://gre/modules/Extension.jsm",
ExtensionsUI: "resource:///modules/ExtensionsUI.jsm",
FirefoxMonitor: "resource:///modules/FirefoxMonitor.jsm",
FxAccounts: "resource://gre/modules/FxAccounts.jsm",
@@ -1321,6 +1329,35 @@ BrowserGlue.prototype = {
"resource:///modules/themes/alpenglow/"
);
+ // Install https-everywhere builtin addon if needed.
+ (async () => {
+ const HTTPS_EVERYWHERE_ID = "https-everywhere-eff(a)eff.org";
+ const HTTPS_EVERYWHERE_BUILTIN_URL =
+ "resource://torbutton/content/extensions/https-everywhere/";
+ // This does something similar as GeckoViewWebExtension.jsm: it tries
+ // to load the manifest to retrieve the version of the builtin and
+ // compares it to the currently installed one to see whether we need
+ // to install or not. Here we delegate that to
+ // AddonManager.maybeInstallBuiltinAddon.
+ try {
+ const resolvedURI = Services.io.newURI(
+ resProto.resolveURI(Services.io.newURI(HTTPS_EVERYWHERE_BUILTIN_URL))
+ );
+ const extensionData = new ExtensionData(resolvedURI);
+ const manifest = await extensionData.loadManifest();
+
+ await AddonManager.maybeInstallBuiltinAddon(
+ HTTPS_EVERYWHERE_ID,
+ manifest.version,
+ HTTPS_EVERYWHERE_BUILTIN_URL
+ );
+ } catch (e) {
+ const log = Log.repository.getLogger("HttpsEverywhereBuiltinLoader");
+ log.addAppender(new Log.ConsoleAppender(new Log.BasicFormatter()));
+ log.error("Could not install https-everywhere extension", e);
+ }
+ })();
+
if (AppConstants.MOZ_NORMANDY) {
Normandy.init();
}
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
index ad8922dadebf..9c122b16b9f8 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -1491,6 +1491,19 @@ var XPIStates = {
continue;
}
+ // Uninstall HTTPS Everywhere if it is installed in the user profile.
+ if (
+ id === "https-everywhere-eff(a)eff.org" &&
+ loc.name === KEY_APP_PROFILE
+ ) {
+ logger.debug(
+ "Uninstalling the HTTPS Everywhere extension from user profile."
+ );
+ loc.installer.uninstallAddon(id);
+ changed = true;
+ continue;
+ }
+
let xpiState = loc.get(id);
if (!xpiState) {
// If the location is not supported for sideloading, skip new
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 612118641c994565a923703ce5268455a38560d1
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Jul 14 11:15:07 2020 -0400
Bug 33852: Clean up about:logins (LockWise) to avoid mentioning sync, etc.
Hide elements on about:logins that mention sync, "Firefox LockWise", and
Mozilla's LockWise mobile apps.
Disable the "Create New Login" button when security.nocertdb is true.
---
browser/components/aboutlogins/AboutLoginsParent.jsm | 2 ++
browser/components/aboutlogins/content/aboutLogins.css | 8 +++++++-
browser/components/aboutlogins/content/aboutLogins.js | 6 ++++++
.../aboutlogins/content/components/fxaccounts-button.css | 5 +++++
.../components/aboutlogins/content/components/menu-button.css | 10 ++++++++++
5 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/browser/components/aboutlogins/AboutLoginsParent.jsm b/browser/components/aboutlogins/AboutLoginsParent.jsm
index d52981936597..bb0b9aeff1bd 100644
--- a/browser/components/aboutlogins/AboutLoginsParent.jsm
+++ b/browser/components/aboutlogins/AboutLoginsParent.jsm
@@ -63,6 +63,7 @@ const PASSWORD_SYNC_NOTIFICATION_ID = "enable-password-sync";
const HIDE_MOBILE_FOOTER_PREF = "signon.management.page.hideMobileFooter";
const SHOW_PASSWORD_SYNC_NOTIFICATION_PREF =
"signon.management.page.showPasswordSyncNotification";
+const NOCERTDB_PREF = "security.nocertdb";
// about:logins will always use the privileged content process,
// even if it is disabled for other consumers such as about:newtab.
@@ -432,6 +433,7 @@ class AboutLoginsParent extends JSWindowActorParent {
importVisible:
Services.policies.isAllowed("profileImport") &&
AppConstants.platform != "linux",
+ canCreateLogins: !Services.prefs.getBoolPref(NOCERTDB_PREF, false),
});
await AboutLogins._sendAllLoginRelatedObjects(
diff --git a/browser/components/aboutlogins/content/aboutLogins.css b/browser/components/aboutlogins/content/aboutLogins.css
index 7ed29bda8297..dca63da2e649 100644
--- a/browser/components/aboutlogins/content/aboutLogins.css
+++ b/browser/components/aboutlogins/content/aboutLogins.css
@@ -69,6 +69,11 @@ login-item {
grid-area: login;
}
+/* Do not promote Mozilla Sync in Tor Browser. */
+login-intro {
+ display: none !important;
+}
+
#branding-logo {
flex-basis: var(--sidebar-width);
flex-shrink: 0;
@@ -83,7 +88,8 @@ login-item {
}
}
-:root:not(.official-branding) #branding-logo {
+/* Hide "Firefox LockWise" branding in Tor Browser. */
+#branding-logo {
visibility: hidden;
}
diff --git a/browser/components/aboutlogins/content/aboutLogins.js b/browser/components/aboutlogins/content/aboutLogins.js
index a08427b0ae09..1669fba678bd 100644
--- a/browser/components/aboutlogins/content/aboutLogins.js
+++ b/browser/components/aboutlogins/content/aboutLogins.js
@@ -19,6 +19,9 @@ const gElements = {
get loginFooter() {
return this.loginItem.shadowRoot.querySelector("login-footer");
},
+ get createNewLoginButton() {
+ return this.loginList.shadowRoot.querySelector(".create-login-button");
+ },
};
let numberOfLogins = 0;
@@ -100,6 +103,9 @@ window.addEventListener("AboutLoginsChromeToContent", event => {
gElements.loginList.setSortDirection(event.detail.value.selectedSort);
document.documentElement.classList.add("initialized");
gElements.loginList.classList.add("initialized");
+ if (!event.detail.value.canCreateLogins) {
+ gElements.createNewLoginButton.disabled = true;
+ }
break;
}
case "ShowLoginItemError": {
diff --git a/browser/components/aboutlogins/content/components/fxaccounts-button.css b/browser/components/aboutlogins/content/components/fxaccounts-button.css
index aefda548c84d..a02707980158 100644
--- a/browser/components/aboutlogins/content/components/fxaccounts-button.css
+++ b/browser/components/aboutlogins/content/components/fxaccounts-button.css
@@ -8,6 +8,11 @@
align-items: center;
}
+/* Do not promote Mozilla Sync in Tor Browser. */
+.logged-out-view {
+ display: none !important;
+}
+
.fxaccounts-extra-text {
/* Only show at most 3 lines of text to limit the
text from overflowing the header. */
diff --git a/browser/components/aboutlogins/content/components/menu-button.css b/browser/components/aboutlogins/content/components/menu-button.css
index f500edd5ae70..9cb663dc424c 100644
--- a/browser/components/aboutlogins/content/components/menu-button.css
+++ b/browser/components/aboutlogins/content/components/menu-button.css
@@ -89,3 +89,13 @@
.menuitem-mobile-android {
background-image: url("chrome://browser/skin/logo-android.svg");
}
+
+/*
+ * Do not promote LockWise mobile apps in Tor Browser: hide the menu items
+ * and the separator line that precedes them.
+ */
+.menuitem-mobile-android,
+.menuitem-mobile-ios,
+button[data-event-name="AboutLoginsGetHelp"] + hr {
+ display: none !important;
+}
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 32418: Allow updates to be disabled via an enterprise policy.
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit b058e7d3594f0d65b46cb2082b31792b0fc90bfe
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Thu Apr 16 17:07:09 2020 -0400
Bug 32418: Allow updates to be disabled via an enterprise policy.
Restrict the Enterprise Policies mechanism to only consult a
policies.json file (avoiding the Windows Registry and macOS's
file system attributes).
Add a few disabledByPolicy() checks to the update service to
avoid extraneous (and potentially confusing) log messages when
updates are disabled by policy.
Sample content for distribution/policies.json:
{
"policies": {
"DisableAppUpdate": true
}
}
On Linux, avoid reading policies from /etc/firefox/policies/policies.json
---
.../enterprisepolicies/EnterprisePoliciesParent.jsm | 14 ++++++++++++--
toolkit/components/enterprisepolicies/moz.build | 3 +++
toolkit/mozapps/update/UpdateService.jsm | 20 ++++++++++++++++++++
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.jsm b/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.jsm
index 8b0a5170cbdd..38e2c2b36a24 100644
--- a/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.jsm
+++ b/toolkit/components/enterprisepolicies/EnterprisePoliciesParent.jsm
@@ -4,6 +4,10 @@
var EXPORTED_SYMBOLS = ["EnterprisePoliciesManager"];
+// To ensure that policies intended for Firefox or another browser will not
+// be used, Tor Browser only looks for policies in ${InstallDir}/distribution
+#define AVOID_SYSTEM_POLICIES MOZ_PROXY_BYPASS_PROTECTION
+
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
@@ -13,9 +17,11 @@ const { AppConstants } = ChromeUtils.import(
);
XPCOMUtils.defineLazyModuleGetters(this, {
+#ifndef AVOID_SYSTEM_POLICIES
WindowsGPOParser: "resource://gre/modules/policies/WindowsGPOParser.jsm",
macOSPoliciesParser:
"resource://gre/modules/policies/macOSPoliciesParser.jsm",
+#endif
Policies: "resource:///modules/policies/Policies.jsm",
JsonSchemaValidator:
"resource://gre/modules/components-utils/JsonSchemaValidator.jsm",
@@ -137,6 +143,7 @@ EnterprisePoliciesManager.prototype = {
_chooseProvider() {
let provider = null;
+#ifndef AVOID_SYSTEM_POLICIES
if (AppConstants.platform == "win") {
provider = new WindowsGPOPoliciesProvider();
} else if (AppConstants.platform == "macosx") {
@@ -145,6 +152,7 @@ EnterprisePoliciesManager.prototype = {
if (provider && provider.hasPolicies) {
return provider;
}
+#endif
provider = new JSONPoliciesProvider();
if (provider.hasPolicies) {
@@ -495,7 +503,7 @@ class JSONPoliciesProvider {
_getConfigurationFile() {
let configFile = null;
-
+#ifndef AVOID_SYSTEM_POLICIES
if (AppConstants.platform == "linux") {
let systemConfigFile = Cc["@mozilla.org/file/local;1"].createInstance(
Ci.nsIFile
@@ -508,7 +516,7 @@ class JSONPoliciesProvider {
return systemConfigFile;
}
}
-
+#endif
try {
let perUserPath = Services.prefs.getBoolPref(PREF_PER_USER_DIR, false);
if (perUserPath) {
@@ -589,6 +597,7 @@ class JSONPoliciesProvider {
}
}
+#ifndef AVOID_SYSTEM_POLICIES
class WindowsGPOPoliciesProvider {
constructor() {
this._policies = null;
@@ -654,3 +663,4 @@ class macOSPoliciesProvider {
return this._failed;
}
}
+#endif
diff --git a/toolkit/components/enterprisepolicies/moz.build b/toolkit/components/enterprisepolicies/moz.build
index 284089594b2f..b0485aade0e8 100644
--- a/toolkit/components/enterprisepolicies/moz.build
+++ b/toolkit/components/enterprisepolicies/moz.build
@@ -21,6 +21,9 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] != "android":
EXTRA_JS_MODULES += [
'EnterprisePolicies.jsm',
'EnterprisePoliciesContent.jsm',
+ ]
+
+ EXTRA_PP_JS_MODULES += [
'EnterprisePoliciesParent.jsm',
]
diff --git a/toolkit/mozapps/update/UpdateService.jsm b/toolkit/mozapps/update/UpdateService.jsm
index 3338f7f94d72..35f3b6bb3a26 100644
--- a/toolkit/mozapps/update/UpdateService.jsm
+++ b/toolkit/mozapps/update/UpdateService.jsm
@@ -2811,6 +2811,10 @@ UpdateService.prototype = {
_checkForBackgroundUpdates: function AUS__checkForBackgroundUpdates(
isNotify
) {
+ if (this.disabledByPolicy) {
+ return;
+ }
+
this._isNotify = isNotify;
// Histogram IDs:
@@ -3311,6 +3315,14 @@ UpdateService.prototype = {
* See nsIUpdateService.idl
*/
get canApplyUpdates() {
+ if (this.disabledByPolicy) {
+ LOG(
+ "UpdateService.canApplyUpdates - unable to apply updates, " +
+ "the option has been disabled by the administrator."
+ );
+ return false;
+ }
+
return getCanApplyUpdates() && hasUpdateMutex();
},
@@ -3318,6 +3330,14 @@ UpdateService.prototype = {
* See nsIUpdateService.idl
*/
get canStageUpdates() {
+ if (this.disabledByPolicy) {
+ LOG(
+ "UpdateService.canStageUpdates - unable to stage updates, " +
+ "the option has been disabled by the administrator."
+ );
+ return false;
+ }
+
return getCanStageUpdates();
},
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] fixup! Bug 23247: Communicating security expectations for .onion
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit b17829ec5fa8a1719a2443ba8a5c29fc1a8fae8e
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Oct 2 17:23:33 2020 +0200
fixup! Bug 23247: Communicating security expectations for .onion
Fixes 40172: Security UI not updated for non-https .onion pages
---
mobile/android/modules/geckoview/GeckoViewProgress.jsm | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/mobile/android/modules/geckoview/GeckoViewProgress.jsm b/mobile/android/modules/geckoview/GeckoViewProgress.jsm
index 9cfc7bf09b9c..475b7fc19a44 100644
--- a/mobile/android/modules/geckoview/GeckoViewProgress.jsm
+++ b/mobile/android/modules/geckoview/GeckoViewProgress.jsm
@@ -144,6 +144,10 @@ var IdentityHandler = {
result.host = uri.host;
}
+ if (!aBrowser.securityUI.secInfo) {
+ return result;
+ }
+
const cert = aBrowser.securityUI.secInfo.serverCert;
result.certificate = aBrowser.securityUI.secInfo.serverCert.getBase64DERString();
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 21952: Implement Onion-Location
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit d6ce1799bbecf5ce8ea7024624bc57447cf1bb66
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Mar 5 22:16:39 2020 +0100
Bug 21952: Implement Onion-Location
Whenever a valid Onion-Location HTTP header (or corresponding HTML
<meta> http-equiv attribute) is found in a document load, we either
redirect to it (if the user opted-in via preference) or notify the
presence of an onionsite alternative with a badge in the urlbar.
---
browser/base/content/browser.js | 12 ++
browser/base/content/browser.xhtml | 3 +
browser/components/BrowserGlue.jsm | 13 ++
.../onionservices/OnionLocationChild.jsm | 39 +++++
.../onionservices/OnionLocationParent.jsm | 168 +++++++++++++++++++++
.../content/onionlocation-notification-icons.css | 5 +
.../onionservices/content/onionlocation-urlbar.css | 27 ++++
.../content/onionlocation-urlbar.inc.xhtml | 10 ++
.../onionservices/content/onionlocation.svg | 3 +
.../content/onionlocationPreferences.inc.xhtml | 11 ++
.../content/onionlocationPreferences.js | 31 ++++
browser/components/onionservices/jar.mn | 2 +
browser/components/onionservices/moz.build | 2 +
browser/components/preferences/privacy.inc.xhtml | 2 +
browser/components/preferences/privacy.js | 17 +++
browser/themes/shared/notification-icons.inc.css | 2 +
browser/themes/shared/urlbar-searchbar.inc.css | 2 +
dom/base/Document.cpp | 34 ++++-
dom/base/Document.h | 2 +
dom/webidl/Document.webidl | 9 ++
modules/libpref/init/StaticPrefList.yaml | 5 +
xpcom/ds/StaticAtoms.py | 1 +
22 files changed, 399 insertions(+), 1 deletion(-)
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 4a6a4662ffac..f2a3df9e5186 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -45,6 +45,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
NetUtil: "resource://gre/modules/NetUtil.jsm",
NewTabUtils: "resource://gre/modules/NewTabUtils.jsm",
OpenInTabsUtils: "resource:///modules/OpenInTabsUtils.jsm",
+ OnionLocationParent: "resource:///modules/OnionLocationParent.jsm",
PageActions: "resource:///modules/PageActions.jsm",
PageThumbs: "resource://gre/modules/PageThumbs.jsm",
PanelMultiView: "resource:///modules/PanelMultiView.jsm",
@@ -5352,6 +5353,7 @@ var XULBrowserWindow = {
Services.obs.notifyObservers(null, "touchbar-location-change", location);
UpdateBackForwardCommands(gBrowser.webNavigation);
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
+ OnionLocationParent.updateOnionLocationBadge(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
// Bug 1108553 - Cannot rotate images with e10s
@@ -5888,6 +5890,16 @@ const AccessibilityRefreshBlocker = {
var TabsProgressListener = {
onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
+ // Clear OnionLocation UI
+ if (
+ aStateFlags & Ci.nsIWebProgressListener.STATE_START &&
+ aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK &&
+ aRequest &&
+ aWebProgress.isTopLevel
+ ) {
+ OnionLocationParent.onStateChange(aBrowser);
+ }
+
// Collect telemetry data about tab load times.
if (
aWebProgress.isTopLevel &&
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 7ebf56ca5ed1..d1da5de0c263 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -1929,6 +1929,9 @@
onclick="FullZoom.reset();"
tooltip="dynamic-shortcut-tooltip"
hidden="true"/>
+
+#include ../../components/onionservices/content/onionlocation-urlbar.inc.xhtml
+
<box id="pageActionSeparator" class="urlbar-page-action"/>
<image id="pageActionButton"
class="urlbar-icon urlbar-page-action"
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index c2316d212dc5..bb2fc00e6b52 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -429,6 +429,19 @@ let JSWINDOWACTORS = {
allFrames: true,
},
+ OnionLocation: {
+ parent: {
+ moduleURI: "resource:///modules/OnionLocationParent.jsm",
+ },
+ child: {
+ moduleURI: "resource:///modules/OnionLocationChild.jsm",
+ events: {
+ pageshow: { mozSystemGroup: true },
+ },
+ },
+ messageManagerGroups: ["browsers"],
+ },
+
PageInfo: {
child: {
moduleURI: "resource:///actors/PageInfoChild.jsm",
diff --git a/browser/components/onionservices/OnionLocationChild.jsm b/browser/components/onionservices/OnionLocationChild.jsm
new file mode 100644
index 000000000000..9e00054ac56c
--- /dev/null
+++ b/browser/components/onionservices/OnionLocationChild.jsm
@@ -0,0 +1,39 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+var EXPORTED_SYMBOLS = ["OnionLocationChild"];
+
+class OnionLocationChild extends JSWindowActorChild {
+ handleEvent(event) {
+ this.onPageShow(event);
+ }
+
+ onPageShow(event) {
+ if (event.target != this.document) {
+ return;
+ }
+ const onionLocationURI = this.document.onionLocationURI;
+ if (onionLocationURI) {
+ this.sendAsyncMessage("OnionLocation:Set");
+ }
+ }
+
+ receiveMessage(aMessage) {
+ if (aMessage.name == "OnionLocation:Refresh") {
+ const doc = this.document;
+ const docShell = this.docShell;
+ const onionLocationURI = doc.onionLocationURI;
+ const refreshURI = docShell.QueryInterface(Ci.nsIRefreshURI);
+ if (onionLocationURI && refreshURI) {
+ refreshURI.refreshURI(
+ onionLocationURI,
+ doc.nodePrincipal,
+ 0,
+ false,
+ true
+ );
+ }
+ }
+ }
+}
diff --git a/browser/components/onionservices/OnionLocationParent.jsm b/browser/components/onionservices/OnionLocationParent.jsm
new file mode 100644
index 000000000000..f6250e554862
--- /dev/null
+++ b/browser/components/onionservices/OnionLocationParent.jsm
@@ -0,0 +1,168 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+var EXPORTED_SYMBOLS = ["OnionLocationParent"];
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+// Prefs
+const NOTIFICATION_PREF = "privacy.prioritizeonions.showNotification";
+const PRIORITIZE_ONIONS_PREF = "privacy.prioritizeonions.enabled";
+
+// Element IDs
+const ONIONLOCATION_BOX_ID = "onion-location-box";
+const ONIONLOCATION_BUTTON_ID = "onion-location-button";
+const ONIONLOCATION_LABEL_ID = "onion-label";
+
+// Notification IDs
+const NOTIFICATION_ID = "onion-location";
+const NOTIFICATION_ANCHOR_ID = "onionlocation";
+
+// Strings
+const STRING_ONION_AVAILABLE = TorStrings.onionLocation.onionAvailable;
+const NOTIFICATION_CANCEL_LABEL = TorStrings.onionLocation.notNow;
+const NOTIFICATION_CANCEL_ACCESSKEY = TorStrings.onionLocation.notNowAccessKey;
+const NOTIFICATION_OK_LABEL = TorStrings.onionLocation.alwaysPrioritize;
+const NOTIFICATION_OK_ACCESSKEY =
+ TorStrings.onionLocation.alwaysPrioritizeAccessKey;
+const NOTIFICATION_TITLE = TorStrings.onionLocation.tryThis;
+const NOTIFICATION_DESCRIPTION = TorStrings.onionLocation.description;
+const NOTIFICATION_LEARN_MORE_URL = TorStrings.onionLocation.learnMoreURL;
+
+class OnionLocationParent extends JSWindowActorParent {
+ // Listeners are added in BrowserGlue.jsm
+ receiveMessage(aMsg) {
+ switch (aMsg.name) {
+ case "OnionLocation:Set":
+ let browser = this.browsingContext.embedderElement;
+ OnionLocationParent.setOnionLocation(browser);
+ break;
+ }
+ }
+
+ static buttonClick(event) {
+ if (event.button !== 0) {
+ return;
+ }
+ const win = event.target.ownerGlobal;
+ if (win.gBrowser) {
+ const browser = win.gBrowser.selectedBrowser;
+ OnionLocationParent.redirect(browser);
+ }
+ }
+
+ static redirect(browser) {
+ let windowGlobal = browser.browsingContext.currentWindowGlobal;
+ let actor = windowGlobal.getActor("OnionLocation");
+ if (actor) {
+ actor.sendAsyncMessage("OnionLocation:Refresh", {});
+ OnionLocationParent.setDisabled(browser);
+ }
+ }
+
+ static onStateChange(browser) {
+ delete browser._onionLocation;
+ OnionLocationParent.hideNotification(browser);
+ }
+
+ static setOnionLocation(browser) {
+ browser._onionLocation = true;
+ let tabBrowser = browser.getTabBrowser();
+ if (tabBrowser && browser === tabBrowser.selectedBrowser) {
+ OnionLocationParent.updateOnionLocationBadge(browser);
+ }
+ }
+
+ static hideNotification(browser) {
+ const win = browser.ownerGlobal;
+ if (browser._onionLocationPrompt) {
+ win.PopupNotifications.remove(browser._onionLocationPrompt);
+ }
+ }
+
+ static showNotification(browser) {
+ const mustShow = Services.prefs.getBoolPref(NOTIFICATION_PREF, true);
+ if (!mustShow) {
+ return;
+ }
+
+ const win = browser.ownerGlobal;
+ Services.prefs.setBoolPref(NOTIFICATION_PREF, false);
+
+ const mainAction = {
+ label: NOTIFICATION_OK_LABEL,
+ accessKey: NOTIFICATION_OK_ACCESSKEY,
+ callback() {
+ Services.prefs.setBoolPref(PRIORITIZE_ONIONS_PREF, true);
+ OnionLocationParent.redirect(browser);
+ win.openPreferences("privacy-onionservices");
+ },
+ };
+
+ const cancelAction = {
+ label: NOTIFICATION_CANCEL_LABEL,
+ accessKey: NOTIFICATION_CANCEL_ACCESSKEY,
+ callback: () => {},
+ };
+
+ const options = {
+ autofocus: true,
+ persistent: true,
+ removeOnDismissal: false,
+ eventCallback(aTopic) {
+ if (aTopic === "removed") {
+ delete browser._onionLocationPrompt;
+ delete browser.onionpopupnotificationanchor;
+ }
+ },
+ learnMoreURL: NOTIFICATION_LEARN_MORE_URL,
+ displayURI: {
+ hostPort: NOTIFICATION_TITLE, // This is hacky, but allows us to have a title without extra markup/css.
+ },
+ hideClose: true,
+ popupIconClass: "onionlocation-notification-icon",
+ };
+
+ // A hacky way of setting the popup anchor outside the usual url bar icon box
+ // onionlocationpopupnotificationanchor comes from `${ANCHOR_ID}popupnotificationanchor`
+ // From https://searchfox.org/mozilla-esr68/rev/080f9ed47742644d2ff84f7aa0b10aea5c4…
+ browser.onionlocationpopupnotificationanchor = win.document.getElementById(
+ ONIONLOCATION_BUTTON_ID
+ );
+
+ browser._onionLocationPrompt = win.PopupNotifications.show(
+ browser,
+ NOTIFICATION_ID,
+ NOTIFICATION_DESCRIPTION,
+ NOTIFICATION_ANCHOR_ID,
+ mainAction,
+ [cancelAction],
+ options
+ );
+ }
+
+ static setEnabled(browser) {
+ const win = browser.ownerGlobal;
+ const label = win.document.getElementById(ONIONLOCATION_LABEL_ID);
+ label.textContent = STRING_ONION_AVAILABLE;
+ const elem = win.document.getElementById(ONIONLOCATION_BOX_ID);
+ elem.removeAttribute("hidden");
+ }
+
+ static setDisabled(browser) {
+ const win = browser.ownerGlobal;
+ const elem = win.document.getElementById(ONIONLOCATION_BOX_ID);
+ elem.setAttribute("hidden", true);
+ }
+
+ static updateOnionLocationBadge(browser) {
+ if (browser._onionLocation) {
+ OnionLocationParent.setEnabled(browser);
+ OnionLocationParent.showNotification(browser);
+ } else {
+ OnionLocationParent.setDisabled(browser);
+ }
+ }
+}
diff --git a/browser/components/onionservices/content/onionlocation-notification-icons.css b/browser/components/onionservices/content/onionlocation-notification-icons.css
new file mode 100644
index 000000000000..7c8a6d892c6f
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation-notification-icons.css
@@ -0,0 +1,5 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+.onionlocation-notification-icon {
+ display: none;
+}
\ No newline at end of file
diff --git a/browser/components/onionservices/content/onionlocation-urlbar.css b/browser/components/onionservices/content/onionlocation-urlbar.css
new file mode 100644
index 000000000000..91cad5f178d1
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation-urlbar.css
@@ -0,0 +1,27 @@
+/* Copyright (c) 2020, The Tor Project, Inc. */
+
+#onion-location-button {
+ list-style-image: url(chrome://browser/content/onionservices/onionlocation.svg);
+}
+
+#onion-location-box {
+ border-radius: 3px;
+ background-color: #6200A4;
+ padding-left: 5px;
+ padding-right: 5px;
+ color: white;
+ -moz-context-properties: fill;
+ fill: white;
+}
+
+#onion-location-box:hover {
+ background-color: #0060DF !important;
+}
+
+toolbar[brighttext] #onion-location-box {
+ background-color: #9400ff;
+}
+
+toolbar[brighttext] #onion-location-box:hover {
+ background-color: #0060DF !important;
+}
diff --git a/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml b/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
new file mode 100644
index 000000000000..b612a4236f3c
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation-urlbar.inc.xhtml
@@ -0,0 +1,10 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<hbox id="onion-location-box"
+ class="urlbar-icon-wrapper urlbar-page-action"
+ role="button"
+ hidden="true"
+ onclick="OnionLocationParent.buttonClick(event);">
+ <image id="onion-location-button" role="presentation"/>
+ <hbox id="onion-label-container"><label id="onion-label"/></hbox>
+</hbox>
diff --git a/browser/components/onionservices/content/onionlocation.svg b/browser/components/onionservices/content/onionlocation.svg
new file mode 100644
index 000000000000..37f40ac1812f
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocation.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="m8.016411 14.54499v-0.969784c3.071908-0.0089 5.559239-2.501304 5.559239-5.575429 0-3.073903-2.487331-5.566336-5.559239-5.575206v-0.9697843c3.607473 0.00909 6.528802 2.935521 6.528802 6.544991 0 3.609691-2.921329 6.536342-6.528802 6.545213zm0-3.394356c1.732661-0.0091 3.135111-1.415756 3.135111-3.150857 0-1.734878-1.402451-3.141542-3.135111-3.150634v-0.9695626c2.268448 0.00887 4.104895 1.849753 4.104895 4.120197 0 2.270666-1.836447 4.111549-4.104895 4.120419zm0-4.846926c0.9294227 0.00887 1.680545 0.7644289 1.680545 1.696069 0 0.9318627-0.7511226 1.687421-1.680545 1.696291zm-8.016411 1.696069c0 4.418473 3.581527 8.000222 8 8.000222 4.418251 0 8-3.581749 8-8.000222 0-4.418251-3.581749-7.999778-8-7.999778-4.418473 0-8 3.581527-8 7.999778z" />
+</svg>
\ No newline at end of file
diff --git a/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml b/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml
new file mode 100644
index 000000000000..c285f403f99b
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocationPreferences.inc.xhtml
@@ -0,0 +1,11 @@
+# Copyright (c) 2020, The Tor Project, Inc.
+
+<groupbox id="onionServicesGroup" data-category="panePrivacy" data-subcategory="onionservices" hidden="true">
+ <label><html:h2 id="onionServicesTitle"></html:h2></label>
+ <label><label class="tail-with-learn-more" id="prioritizeOnionsDesc"></label><label
+ class="learnMore" is="text-link" id="onionServicesLearnMore"></label></label>
+ <radiogroup id="prioritizeOnionsRadioGroup" aria-labelledby="prioritizeOnionsDesc" preference="privacy.prioritizeonions.enabled">
+ <radio id="onionServicesRadioAlways" value="true"/>
+ <radio id="onionServicesRadioAsk" value="false"/>
+ </radiogroup>
+</groupbox>
diff --git a/browser/components/onionservices/content/onionlocationPreferences.js b/browser/components/onionservices/content/onionlocationPreferences.js
new file mode 100644
index 000000000000..aa569b54721c
--- /dev/null
+++ b/browser/components/onionservices/content/onionlocationPreferences.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+const OnionLocationPreferences = {
+ init() {
+ document.getElementById("onionServicesTitle").textContent =
+ TorStrings.onionLocation.onionServicesTitle;
+ document.getElementById("prioritizeOnionsDesc").textContent =
+ TorStrings.onionLocation.prioritizeOnionsDescription;
+ const learnMore = document.getElementById("onionServicesLearnMore");
+ learnMore.textContent = TorStrings.onionLocation.learnMore;
+ learnMore.href = TorStrings.onionLocation.learnMoreURL;
+ document.getElementById("onionServicesRadioAlways").label =
+ TorStrings.onionLocation.always;
+ document.getElementById("onionServicesRadioAsk").label =
+ TorStrings.onionLocation.askEverytime;
+ },
+};
+
+Object.defineProperty(this, "OnionLocationPreferences", {
+ value: OnionLocationPreferences,
+ enumerable: true,
+ writable: false,
+});
diff --git a/browser/components/onionservices/jar.mn b/browser/components/onionservices/jar.mn
index 9d6ce88d1841..f45b16dc5d29 100644
--- a/browser/components/onionservices/jar.mn
+++ b/browser/components/onionservices/jar.mn
@@ -7,3 +7,5 @@ browser.jar:
content/browser/onionservices/onionservices.css (content/onionservices.css)
content/browser/onionservices/savedKeysDialog.js (content/savedKeysDialog.js)
content/browser/onionservices/savedKeysDialog.xhtml (content/savedKeysDialog.xhtml)
+ content/browser/onionservices/onionlocationPreferences.js (content/onionlocationPreferences.js)
+ content/browser/onionservices/onionlocation.svg (content/onionlocation.svg)
diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build
index e4b6d73f8f40..dfd664df434e 100644
--- a/browser/components/onionservices/moz.build
+++ b/browser/components/onionservices/moz.build
@@ -4,4 +4,6 @@ EXTRA_JS_MODULES += [
'ExtensionMessaging.jsm',
'HttpsEverywhereControl.jsm',
'OnionAliasStore.jsm',
+ 'OnionLocationChild.jsm',
+ 'OnionLocationParent.jsm',
]
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
index c6ddcacd4e99..8bc11e304db5 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -14,6 +14,8 @@
<html:h1 data-l10n-id="privacy-header"/>
</hbox>
+#include ../onionservices/content/onionlocationPreferences.inc.xhtml
+
<!-- Tracking / Content Blocking -->
<groupbox id="trackingGroup" data-category="panePrivacy" hidden="true" aria-describedby="contentBlockingDescription">
<label id="contentBlockingHeader"><html:h2 data-l10n-id="content-blocking-enhanced-tracking-protection"/></label>
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index 96449906ec79..d085ff94e44c 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -93,6 +93,12 @@ XPCOMUtils.defineLazyScriptGetter(
"chrome://browser/content/securitylevel/securityLevel.js"
);
+XPCOMUtils.defineLazyScriptGetter(
+ this,
+ ["OnionLocationPreferences"],
+ "chrome://browser/content/onionservices/onionlocationPreferences.js"
+);
+
XPCOMUtils.defineLazyServiceGetter(
this,
"listManager",
@@ -161,6 +167,9 @@ Preferences.addAll([
// Do not track
{ id: "privacy.donottrackheader.enabled", type: "bool" },
+ // Onion Location
+ { id: "privacy.prioritizeonions.enabled", type: "bool" },
+
// Media
{ id: "media.autoplay.default", type: "int" },
@@ -307,6 +316,13 @@ var gPrivacyPane = {
window.addEventListener("unload", unload);
},
+ /**
+ * Show the OnionLocation preferences UI
+ */
+ _initOnionLocation() {
+ OnionLocationPreferences.init();
+ },
+
/**
* Whether the prompt to restart Firefox should appear when changing the autostart pref.
*/
@@ -513,6 +529,7 @@ var gPrivacyPane = {
this._initTrackingProtectionExtensionControl();
OnionServicesAuthPreferences.init();
this._initSecurityLevel();
+ this._initOnionLocation();
Services.telemetry.setEventRecordingEnabled("pwmgr", true);
diff --git a/browser/themes/shared/notification-icons.inc.css b/browser/themes/shared/notification-icons.inc.css
index 785a929256fc..f504f2f651ac 100644
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -423,3 +423,5 @@ html|*#webRTC-previewVideo {
background: #FFE900 url(chrome://browser/skin/notification-icons/update.svg) no-repeat center;
border-radius: 50%;
}
+
+%include ../../components/onionservices/content/onionlocation-notification-icons.css
\ No newline at end of file
diff --git a/browser/themes/shared/urlbar-searchbar.inc.css b/browser/themes/shared/urlbar-searchbar.inc.css
index 954cf74a14ad..e9832514ed12 100644
--- a/browser/themes/shared/urlbar-searchbar.inc.css
+++ b/browser/themes/shared/urlbar-searchbar.inc.css
@@ -871,3 +871,5 @@
.searchbar-search-button:hover:not([addengines=true]) > .searchbar-search-icon-overlay:-moz-locale-dir(rtl) {
margin-inline: -26px 20px;
}
+
+%include ../../components/onionservices/content/onionlocation-urlbar.css
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index 84217a91514d..ca2ad010d503 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -2578,6 +2578,7 @@ void Document::ResetToURI(nsIURI* aURI, nsILoadGroup* aLoadGroup,
// mDocumentURI.
mDocumentBaseURI = nullptr;
mChromeXHRDocBaseURI = nullptr;
+ mOnionLocationURI = nullptr;
// Check if the current document is the top-level DevTools document.
// For inner DevTools frames, mIsDevToolsDocument will be set when
@@ -6070,6 +6071,22 @@ void Document::GetHeaderData(nsAtom* aHeaderField, nsAString& aData) const {
}
}
+static bool IsValidOnionLocation(nsIURI* aDocumentURI,
+ nsIURI* aOnionLocationURI) {
+ bool isHttpish;
+ nsAutoCString host;
+ return aDocumentURI && aOnionLocationURI &&
+ NS_SUCCEEDED(aDocumentURI->SchemeIs("https", &isHttpish)) &&
+ isHttpish && NS_SUCCEEDED(aDocumentURI->GetAsciiHost(host)) &&
+ !StringEndsWith(host, ".onion"_ns) &&
+ ((NS_SUCCEEDED(aOnionLocationURI->SchemeIs("http", &isHttpish)) &&
+ isHttpish) ||
+ (NS_SUCCEEDED(aOnionLocationURI->SchemeIs("https", &isHttpish)) &&
+ isHttpish)) &&
+ NS_SUCCEEDED(aOnionLocationURI->GetAsciiHost(host)) &&
+ StringEndsWith(host, ".onion"_ns);
+}
+
void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) {
if (!aHeaderField) {
NS_ERROR("null headerField");
@@ -6145,6 +6162,21 @@ void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) {
aHeaderField == nsGkAtoms::handheldFriendly) {
mViewportType = Unknown;
}
+
+ if (aHeaderField == nsGkAtoms::headerOnionLocation && !aData.IsEmpty()) {
+ nsCOMPtr<nsIURI> onionURI;
+ if (NS_SUCCEEDED(NS_NewURI(getter_AddRefs(onionURI), aData)) &&
+ IsValidOnionLocation(Document::GetDocumentURI(), onionURI)) {
+ if (StaticPrefs::privacy_prioritizeonions_enabled()) {
+ nsCOMPtr<nsIRefreshURI> refresher(mDocumentContainer);
+ if (refresher) {
+ refresher->RefreshURI(onionURI, NodePrincipal(), 0, false, true);
+ }
+ } else {
+ mOnionLocationURI = onionURI;
+ }
+ }
+ }
}
void Document::TryChannelCharset(nsIChannel* aChannel, int32_t& aCharsetSource,
@@ -10203,7 +10235,7 @@ void Document::RetrieveRelevantHeaders(nsIChannel* aChannel) {
static const char* const headers[] = {
"default-style", "content-style-type", "content-language",
"content-disposition", "refresh", "x-dns-prefetch-control",
- "x-frame-options",
+ "x-frame-options", "onion-location",
// add more http headers if you need
// XXXbz don't add content-location support without reading bug
// 238654 and its dependencies/dups first.
diff --git a/dom/base/Document.h b/dom/base/Document.h
index ece2539fd286..5e6c47e6f372 100644
--- a/dom/base/Document.h
+++ b/dom/base/Document.h
@@ -3343,6 +3343,7 @@ class Document : public nsINode,
void ReleaseCapture() const;
void MozSetImageElement(const nsAString& aImageElementId, Element* aElement);
nsIURI* GetDocumentURIObject() const;
+ nsIURI* GetOnionLocationURI() const { return mOnionLocationURI; }
// Not const because all the fullscreen goop is not const
const char* GetFullscreenError(CallerType);
bool FullscreenEnabled(CallerType aCallerType) {
@@ -4224,6 +4225,7 @@ class Document : public nsINode,
nsCOMPtr<nsIURI> mChromeXHRDocURI;
nsCOMPtr<nsIURI> mDocumentBaseURI;
nsCOMPtr<nsIURI> mChromeXHRDocBaseURI;
+ nsCOMPtr<nsIURI> mOnionLocationURI;
// The base domain of the document for third-party checks.
nsCString mBaseDomain;
diff --git a/dom/webidl/Document.webidl b/dom/webidl/Document.webidl
index fff35b32cf9a..147c46a4cd3b 100644
--- a/dom/webidl/Document.webidl
+++ b/dom/webidl/Document.webidl
@@ -695,3 +695,12 @@ partial interface Document {
[ChromeOnly, Pure]
readonly attribute nsIPermissionDelegateHandler permDelegateHandler;
};
+
+
+/**
+ * Extension to allows chrome JS to know whether the document has a valid
+ * Onion-Location that we could redirect to.
+ */
+partial interface Document {
+ [ChromeOnly] readonly attribute URI? onionLocationURI;
+};
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index cbaefc649ce7..cbb5af297c53 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -8810,6 +8810,11 @@
value: false
mirror: always
+- name: privacy.prioritizeonions.enabled
+ type: RelaxedAtomicBool
+ value: false
+ mirror: always
+
#---------------------------------------------------------------------------
# Prefs starting with "prompts."
#---------------------------------------------------------------------------
diff --git a/xpcom/ds/StaticAtoms.py b/xpcom/ds/StaticAtoms.py
index e7f6374db660..4004ade02091 100644
--- a/xpcom/ds/StaticAtoms.py
+++ b/xpcom/ds/StaticAtoms.py
@@ -816,6 +816,7 @@ STATIC_ATOMS = [
Atom("oninputsourceschange","oninputsourceschange"),
Atom("oninstall", "oninstall"),
Atom("oninvalid", "oninvalid"),
+ Atom("headerOnionLocation", "onion-location"),
Atom("onkeydown", "onkeydown"),
Atom("onkeypress", "onkeypress"),
Atom("onkeyup", "onkeyup"),
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 28005: Implement .onion alias urlbar rewrites
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit bbd9a042504ba0c93fafbf70e3f13432d65a7fb7
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Feb 13 13:24:33 2020 +0100
Bug 28005: Implement .onion alias urlbar rewrites
A custom HTTPS Everywhere update channel is installed,
which provides rules for locally redirecting some memorable
.tor.onion URLs to non-memorable .onion URLs.
When these redirects occur, we also rewrite the URL in the urlbar
to display the human-memorable hostname instead of the actual
.onion.
Bug 34196: Update site info URL with the onion name
---
browser/actors/ClickHandlerChild.jsm | 20 ++
browser/actors/ClickHandlerParent.jsm | 1 +
browser/actors/ContextMenuChild.jsm | 4 +
browser/base/content/browser-places.js | 12 +-
browser/base/content/browser-siteIdentity.js | 12 +-
browser/base/content/browser.js | 43 ++++-
browser/base/content/nsContextMenu.js | 18 ++
browser/base/content/pageinfo/pageInfo.js | 2 +-
browser/base/content/pageinfo/pageInfo.xhtml | 10 +
browser/base/content/pageinfo/security.js | 17 +-
browser/base/content/tabbrowser.js | 7 +
browser/base/content/utilityOverlay.js | 12 ++
browser/components/BrowserGlue.jsm | 8 +
.../onionservices/ExtensionMessaging.jsm | 77 ++++++++
.../onionservices/HttpsEverywhereControl.jsm | 119 ++++++++++++
.../components/onionservices/OnionAliasStore.jsm | 201 +++++++++++++++++++++
browser/components/onionservices/moz.build | 6 +
browser/components/urlbar/UrlbarInput.jsm | 13 +-
docshell/base/nsDocShell.cpp | 52 ++++++
docshell/base/nsDocShell.h | 6 +
docshell/base/nsDocShellLoadState.cpp | 4 +
docshell/base/nsIDocShell.idl | 5 +
docshell/base/nsIWebNavigation.idl | 5 +
docshell/shistory/SessionHistoryEntry.cpp | 14 ++
docshell/shistory/SessionHistoryEntry.h | 1 +
docshell/shistory/nsISHEntry.idl | 5 +
docshell/shistory/nsSHEntry.cpp | 22 ++-
docshell/shistory/nsSHEntry.h | 1 +
dom/interfaces/base/nsIBrowser.idl | 3 +-
dom/ipc/BrowserChild.cpp | 2 +
dom/ipc/BrowserParent.cpp | 3 +-
dom/ipc/PBrowser.ipdl | 1 +
modules/libpref/init/StaticPrefList.yaml | 6 +
netwerk/dns/effective_tld_names.dat | 2 +
netwerk/ipc/DocumentLoadListener.cpp | 10 +
toolkit/content/widgets/browser-custom-element.js | 13 +-
toolkit/modules/sessionstore/SessionHistory.jsm | 5 +
xpcom/reflect/xptinfo/xptinfo.h | 3 +-
38 files changed, 722 insertions(+), 23 deletions(-)
diff --git a/browser/actors/ClickHandlerChild.jsm b/browser/actors/ClickHandlerChild.jsm
index d5f7f31f3280..1d147bb274f2 100644
--- a/browser/actors/ClickHandlerChild.jsm
+++ b/browser/actors/ClickHandlerChild.jsm
@@ -136,6 +136,26 @@ class ClickHandlerChild extends JSWindowActorChild {
json.originStoragePrincipal = ownerDoc.effectiveStoragePrincipal;
json.triggeringPrincipal = ownerDoc.nodePrincipal;
+ // Check if the link needs to be opened with .tor.onion urlbar rewrites
+ // allowed. Only when the owner doc has onionUrlbarRewritesAllowed = true
+ // and the same origin we should allow this.
+ json.onionUrlbarRewritesAllowed = false;
+ if (this.docShell.onionUrlbarRewritesAllowed) {
+ const sm = Services.scriptSecurityManager;
+ try {
+ let targetURI = Services.io.newURI(href);
+ let isPrivateWin =
+ ownerDoc.nodePrincipal.originAttributes.privateBrowsingId > 0;
+ sm.checkSameOriginURI(
+ docshell.currentDocumentChannel.URI,
+ targetURI,
+ false,
+ isPrivateWin
+ );
+ json.onionUrlbarRewritesAllowed = true;
+ } catch (e) {}
+ }
+
// If a link element is clicked with middle button, user wants to open
// the link somewhere rather than pasting clipboard content. Therefore,
// when it's clicked with middle button, we should prevent multiple
diff --git a/browser/actors/ClickHandlerParent.jsm b/browser/actors/ClickHandlerParent.jsm
index 75509b95ce7f..06d56624e316 100644
--- a/browser/actors/ClickHandlerParent.jsm
+++ b/browser/actors/ClickHandlerParent.jsm
@@ -99,6 +99,7 @@ class ClickHandlerParent extends JSWindowActorParent {
charset: browser.characterSet,
referrerInfo: E10SUtils.deserializeReferrerInfo(data.referrerInfo),
allowMixedContent: data.allowMixedContent,
+ onionUrlbarRewritesAllowed: data.onionUrlbarRewritesAllowed,
isContentWindowPrivate: data.isContentWindowPrivate,
originPrincipal: data.originPrincipal,
originStoragePrincipal: data.originStoragePrincipal,
diff --git a/browser/actors/ContextMenuChild.jsm b/browser/actors/ContextMenuChild.jsm
index 2bb991d16ffc..cd31fa0373e6 100644
--- a/browser/actors/ContextMenuChild.jsm
+++ b/browser/actors/ContextMenuChild.jsm
@@ -575,6 +575,9 @@ class ContextMenuChild extends JSWindowActorChild {
// The same-origin check will be done in nsContextMenu.openLinkInTab.
let parentAllowsMixedContent = !!this.docShell.mixedContentChannel;
+ let parentAllowsOnionUrlbarRewrites = this.docShell
+ .onionUrlbarRewritesAllowed;
+
let disableSetDesktopBackground = null;
// Media related cache info parent needs for saving
@@ -687,6 +690,7 @@ class ContextMenuChild extends JSWindowActorChild {
frameBrowsingContextID,
disableSetDesktopBackground,
parentAllowsMixedContent,
+ parentAllowsOnionUrlbarRewrites,
};
if (context.inFrame && !context.inSrcdocFrame) {
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js
index 6e6ff3958b7c..2e1b4e93d832 100644
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -457,7 +457,8 @@ var PlacesCommandHook = {
*/
async bookmarkPage() {
let browser = gBrowser.selectedBrowser;
- let url = new URL(browser.currentURI.spec);
+ const uri = browser.currentOnionAliasURI || browser.currentURI;
+ let url = new URL(uri.spec);
let info = await PlacesUtils.bookmarks.fetch({ url });
let isNewBookmark = !info;
let showEditUI = !isNewBookmark || StarUI.showForNewBookmarks;
@@ -561,7 +562,7 @@ var PlacesCommandHook = {
tabs.forEach(tab => {
let browser = tab.linkedBrowser;
- let uri = browser.currentURI;
+ let uri = browser.currentOnionAliasURI || browser.currentURI;
let title = browser.contentTitle || tab.label;
let spec = uri.spec;
if (!(spec in uniquePages)) {
@@ -1577,14 +1578,17 @@ var BookmarkingUI = {
},
onLocationChange: function BUI_onLocationChange() {
- if (this._uri && gBrowser.currentURI.equals(this._uri)) {
+ const uri =
+ gBrowser.selectedBrowser.currentOnionAliasURI || gBrowser.currentURI;
+ if (this._uri && uri.equals(this._uri)) {
return;
}
this.updateStarState();
},
updateStarState: function BUI_updateStarState() {
- this._uri = gBrowser.currentURI;
+ this._uri =
+ gBrowser.selectedBrowser.currentOnionAliasURI || gBrowser.currentURI;
this._itemGuids.clear();
let guids = new Set();
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index ad94232b2476..1a9653f3cd0b 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -533,13 +533,13 @@ var gIdentityHandler = {
* nsIURI for which the identity UI should be displayed, already
* processed by createExposableURI.
*/
- updateIdentity(state, uri) {
+ updateIdentity(state, uri, onionAliasURI) {
let shouldHidePopup = this._uri && this._uri.spec != uri.spec;
this._state = state;
// Firstly, populate the state properties required to display the UI. See
// the documentation of the individual properties for details.
- this.setURI(uri);
+ this.setURI(uri, onionAliasURI);
this._secInfo = gBrowser.securityUI.secInfo;
this._isSecureContext = gBrowser.securityUI.isSecureContext;
@@ -625,17 +625,18 @@ var gIdentityHandler = {
* Attempt to provide proper IDN treatment for host names
*/
getEffectiveHost() {
+ let uri = this._onionAliasURI || this._uri;
if (!this._IDNService) {
this._IDNService = Cc["@mozilla.org/network/idn-service;1"].getService(
Ci.nsIIDNService
);
}
try {
- return this._IDNService.convertToDisplayIDN(this._uri.host, {});
+ return this._IDNService.convertToDisplayIDN(uri.host, {});
} catch (e) {
// If something goes wrong (e.g. host is an IP address) just fail back
// to the full domain.
- return this._uri.host;
+ return uri.host;
}
},
@@ -1076,11 +1077,12 @@ var gIdentityHandler = {
this.updateSitePermissions();
},
- setURI(uri) {
+ setURI(uri, onionAliasURI) {
if (uri.schemeIs("view-source")) {
uri = Services.io.newURI(uri.spec.replace(/^view-source:/i, ""));
}
this._uri = uri;
+ this._onionAliasURI = onionAliasURI;
try {
// Account for file: urls and catch when "" is the value
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 2fb471e9c15d..4a6a4662ffac 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -78,6 +78,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
TabCrashHandler: "resource:///modules/ContentCrashHandlers.jsm",
TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm",
Translation: "resource:///modules/translation/TranslationParent.jsm",
+ OnionAliasStore: "resource:///modules/OnionAliasStore.jsm",
UITour: "resource:///modules/UITour.jsm",
UpdateUtils: "resource://gre/modules/UpdateUtils.jsm",
UrlbarInput: "resource:///modules/UrlbarInput.jsm",
@@ -2226,6 +2227,7 @@ var gBrowserInit = {
// [9]: allowInheritPrincipal (bool)
// [10]: csp (nsIContentSecurityPolicy)
// [11]: nsOpenWindowInfo
+ // [12]: onionUrlbarRewritesAllowed (bool)
let userContextId =
window.arguments[5] != undefined
? window.arguments[5]
@@ -2245,7 +2247,8 @@ var gBrowserInit = {
// TODO fix allowInheritPrincipal to default to false.
// Default to true unless explicitly set to false because of bug 1475201.
window.arguments[9] !== false,
- window.arguments[10]
+ window.arguments[10],
+ window.arguments[12]
);
window.focus();
} else {
@@ -3140,7 +3143,8 @@ function loadURI(
forceAboutBlankViewerInCurrent,
triggeringPrincipal,
allowInheritPrincipal = false,
- csp = null
+ csp = null,
+ onionUrlbarRewritesAllowed = false
) {
if (!triggeringPrincipal) {
throw new Error("Must load with a triggering Principal");
@@ -3158,6 +3162,7 @@ function loadURI(
csp,
forceAboutBlankViewerInCurrent,
allowInheritPrincipal,
+ onionUrlbarRewritesAllowed,
});
} catch (e) {
Cu.reportError(e);
@@ -5288,11 +5293,24 @@ var XULBrowserWindow = {
this.reloadCommand.removeAttribute("disabled");
}
+ // The onion memorable alias needs to be used in gURLBar.setURI, but also in
+ // other parts of the code (like the bookmarks UI), so we save it.
+ if (gBrowser.selectedBrowser.onionUrlbarRewritesAllowed) {
+ gBrowser.selectedBrowser.currentOnionAliasURI = OnionAliasStore.getShortURI(
+ aLocationURI
+ );
+ } else {
+ gBrowser.selectedBrowser.currentOnionAliasURI = null;
+ }
+
// We want to update the popup visibility if we received this notification
// via simulated locationchange events such as switching between tabs, however
// if this is a document navigation then PopupNotifications will be updated
// via TabsProgressListener.onLocationChange and we do not want it called twice
- gURLBar.setURI(aLocationURI, aIsSimulated);
+ gURLBar.setURI(
+ gBrowser.selectedBrowser.currentOnionAliasURI || aLocationURI,
+ aIsSimulated
+ );
BookmarkingUI.onLocationChange();
@@ -5468,6 +5486,7 @@ var XULBrowserWindow = {
// Don't need to do anything if the data we use to update the UI hasn't
// changed
let uri = gBrowser.currentURI;
+ let onionAliasURI = gBrowser.selectedBrowser.currentOnionAliasURI;
let spec = uri.spec;
let isSecureContext = gBrowser.securityUI.isSecureContext;
if (
@@ -5491,7 +5510,7 @@ var XULBrowserWindow = {
try {
uri = Services.io.createExposableURI(uri);
} catch (e) {}
- gIdentityHandler.updateIdentity(this._state, uri);
+ gIdentityHandler.updateIdentity(this._state, uri, onionAliasURI);
},
// simulate all change notifications after switching tabs
@@ -6966,6 +6985,21 @@ function handleLinkClick(event, href, linkNode) {
} catch (e) {}
}
+ // Check if the link needs to be opened with .tor.onion urlbar rewrites
+ // allowed. Only when the owner doc has onionUrlbarRewritesAllowed = true
+ // and the same origin we should allow this.
+ let persistOnionUrlbarRewritesAllowedInChildTab = false;
+ if (where == "tab" && gBrowser.docShell.onionUrlbarRewritesAllowed) {
+ const sm = Services.scriptSecurityManager;
+ try {
+ let tURI = makeURI(href);
+ let isPrivateWin =
+ doc.nodePrincipal.originAttributes.privateBrowsingId > 0;
+ sm.checkSameOriginURI(doc.documentURIObject, tURI, false, isPrivateWin);
+ persistOnionUrlbarRewritesAllowedInChildTab = true;
+ } catch (e) {}
+ }
+
let frameID = WebNavigationFrames.getFrameId(doc.defaultView);
urlSecurityCheck(href, doc.nodePrincipal);
@@ -6978,6 +7012,7 @@ function handleLinkClick(event, href, linkNode) {
triggeringPrincipal: doc.nodePrincipal,
csp: doc.csp,
frameID,
+ onionUrlbarRewritesAllowed: persistOnionUrlbarRewritesAllowedInChildTab,
};
// The new tab/window must use the same userContextId
diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js
index aca882954cfd..139f56142c5d 100644
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -58,6 +58,7 @@ function openContextMenu(aMessage, aBrowser, aActor) {
disableSetDesktopBackground: data.disableSetDesktopBackground,
loginFillInfo: data.loginFillInfo,
parentAllowsMixedContent: data.parentAllowsMixedContent,
+ parentAllowsOnionUrlbarRewrites: data.parentAllowsOnionUrlbarRewrites,
userContextId: data.userContextId,
webExtContextData: data.webExtContextData,
};
@@ -1047,6 +1048,7 @@ class nsContextMenu {
triggeringPrincipal: this.principal,
csp: this.csp,
frameID: this.contentData.frameID,
+ onionUrlbarRewritesAllowed: false,
};
for (let p in extra) {
params[p] = extra[p];
@@ -1070,6 +1072,22 @@ class nsContextMenu {
}
params.referrerInfo = referrerInfo;
+
+ // Check if the link needs to be opened with .tor.onion urlbar rewrites
+ // allowed. Only when parent has onionUrlbarRewritesAllowed = true
+ // and the same origin we should allow this.
+ if (this.contentData.parentAllowsOnionUrlbarRewrites) {
+ let referrerURI = this.contentData.documentURIObject;
+ const sm = Services.scriptSecurityManager;
+ try {
+ let targetURI = this.linkURI;
+ let isPrivateWin =
+ this.browser.contentPrincipal.originAttributes.privateBrowsingId > 0;
+ sm.checkSameOriginURI(referrerURI, targetURI, false, isPrivateWin);
+ params.onionUrlbarRewritesAllowed = true;
+ } catch (e) {}
+ }
+
return params;
}
diff --git a/browser/base/content/pageinfo/pageInfo.js b/browser/base/content/pageinfo/pageInfo.js
index 89d6b98899a6..627eb449b32f 100644
--- a/browser/base/content/pageinfo/pageInfo.js
+++ b/browser/base/content/pageinfo/pageInfo.js
@@ -398,7 +398,7 @@ async function onNonMediaPageInfoLoad(browser, pageInfoData, imageInfo) {
);
}
onLoadPermission(uri, principal);
- securityOnLoad(uri, windowInfo);
+ securityOnLoad(uri, windowInfo, browser.currentOnionAliasURI);
}
function resetPageInfo(args) {
diff --git a/browser/base/content/pageinfo/pageInfo.xhtml b/browser/base/content/pageinfo/pageInfo.xhtml
index f40ffd3778d8..a23f2bb5748c 100644
--- a/browser/base/content/pageinfo/pageInfo.xhtml
+++ b/browser/base/content/pageinfo/pageInfo.xhtml
@@ -312,6 +312,16 @@
<input id="security-identity-domain-value" readonly="readonly"/>
</td>
</tr>
+ <!-- Onion Alias -->
+ <tr id="security-view-identity-onionalias-row">
+ <th>
+ <xul:label id="security-view-identity-onionalias"
+ control="security-view-identity-onionalias-value"/>
+ </th>
+ <td>
+ <input id="security-view-identity-onionalias-value" readonly="true"/>
+ </td>
+ </tr>
<!-- Owner -->
<tr>
<th>
diff --git a/browser/base/content/pageinfo/security.js b/browser/base/content/pageinfo/security.js
index b25b125a03ff..b9946f33622f 100644
--- a/browser/base/content/pageinfo/security.js
+++ b/browser/base/content/pageinfo/security.js
@@ -240,7 +240,7 @@ var security = {
},
};
-async function securityOnLoad(uri, windowInfo) {
+async function securityOnLoad(uri, windowInfo, onionAliasURI) {
await security.init(uri, windowInfo);
let info = security.securityInfo;
@@ -253,6 +253,21 @@ async function securityOnLoad(uri, windowInfo) {
}
document.getElementById("securityTab").hidden = false;
+ if (onionAliasURI) {
+ setText(
+ "security-view-identity-onionalias",
+ gTorButtonBundle.GetStringFromName("pageInfo_OnionName")
+ );
+ setText("security-view-identity-onionalias-value", onionAliasURI.host);
+ document.getElementById(
+ "security-view-identity-onionalias-row"
+ ).hidden = false;
+ } else {
+ document.getElementById(
+ "security-view-identity-onionalias-row"
+ ).hidden = true;
+ }
+
/* Set Identity section text */
setText("security-identity-domain-value", windowInfo.hostName);
diff --git a/browser/base/content/tabbrowser.js b/browser/base/content/tabbrowser.js
index ad1fa011dedc..db6c4462f0f6 100644
--- a/browser/base/content/tabbrowser.js
+++ b/browser/base/content/tabbrowser.js
@@ -1563,6 +1563,7 @@
var aRelatedToCurrent;
var aAllowInheritPrincipal;
var aAllowMixedContent;
+ var aOnionUrlbarRewritesAllowed;
var aSkipAnimation;
var aForceNotRemote;
var aPreferredRemoteType;
@@ -1593,6 +1594,7 @@
aRelatedToCurrent = params.relatedToCurrent;
aAllowInheritPrincipal = !!params.allowInheritPrincipal;
aAllowMixedContent = params.allowMixedContent;
+ aOnionUrlbarRewritesAllowed = params.onionUrlbarRewritesAllowed;
aSkipAnimation = params.skipAnimation;
aForceNotRemote = params.forceNotRemote;
aPreferredRemoteType = params.preferredRemoteType;
@@ -1634,6 +1636,7 @@
relatedToCurrent: aRelatedToCurrent,
skipAnimation: aSkipAnimation,
allowMixedContent: aAllowMixedContent,
+ onionUrlbarRewritesAllowed: aOnionUrlbarRewritesAllowed,
forceNotRemote: aForceNotRemote,
createLazyBrowser: aCreateLazyBrowser,
preferredRemoteType: aPreferredRemoteType,
@@ -2435,6 +2438,7 @@
{
allowInheritPrincipal,
allowMixedContent,
+ onionUrlbarRewritesAllowed,
allowThirdPartyFixup,
bulkOrderedOpen,
charset,
@@ -2764,6 +2768,9 @@
if (allowMixedContent) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT;
}
+ if (onionUrlbarRewritesAllowed) {
+ flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES;
+ }
if (!allowInheritPrincipal) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL;
}
diff --git a/browser/base/content/utilityOverlay.js b/browser/base/content/utilityOverlay.js
index cc000a7ceb29..d049a37e3592 100644
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -367,6 +367,7 @@ function openLinkIn(url, where, params) {
var aRelatedToCurrent = params.relatedToCurrent;
var aAllowInheritPrincipal = !!params.allowInheritPrincipal;
var aAllowMixedContent = params.allowMixedContent;
+ var aOnionUrlbarRewritesAllowed = params.onionUrlbarRewritesAllowed;
var aForceAllowDataURI = params.forceAllowDataURI;
var aInBackground = params.inBackground;
var aInitiatingDoc = params.initiatingDoc;
@@ -482,6 +483,11 @@ function openLinkIn(url, where, params) {
].createInstance(Ci.nsISupportsPRBool);
allowThirdPartyFixupSupports.data = aAllowThirdPartyFixup;
+ var onionUrlbarRewritesAllowed = Cc[
+ "@mozilla.org/supports-PRBool;1"
+ ].createInstance(Ci.nsISupportsPRBool);
+ onionUrlbarRewritesAllowed.data = aOnionUrlbarRewritesAllowed;
+
var userContextIdSupports = Cc[
"@mozilla.org/supports-PRUint32;1"
].createInstance(Ci.nsISupportsPRUint32);
@@ -498,6 +504,8 @@ function openLinkIn(url, where, params) {
sa.appendElement(aTriggeringPrincipal);
sa.appendElement(null); // allowInheritPrincipal
sa.appendElement(aCsp);
+ sa.appendElement(null); // nsOpenWindowInfo
+ sa.appendElement(onionUrlbarRewritesAllowed);
const sourceWindow = w || window;
let win;
@@ -614,6 +622,9 @@ function openLinkIn(url, where, params) {
if (aForceAllowDataURI) {
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FORCE_ALLOW_DATA_URI;
}
+ if (aOnionUrlbarRewritesAllowed) {
+ flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES;
+ }
let { URI_INHERITS_SECURITY_CONTEXT } = Ci.nsIProtocolHandler;
if (
@@ -661,6 +672,7 @@ function openLinkIn(url, where, params) {
relatedToCurrent: aRelatedToCurrent,
skipAnimation: aSkipTabAnimation,
allowMixedContent: aAllowMixedContent,
+ onionUrlbarRewritesAllowed: aOnionUrlbarRewritesAllowed,
userContextId: aUserContextId,
originPrincipal: aPrincipal,
originStoragePrincipal: aStoragePrincipal,
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index 2f5e2e2768f1..c2316d212dc5 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -744,6 +744,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
TabCrashHandler: "resource:///modules/ContentCrashHandlers.jsm",
TabUnloader: "resource:///modules/TabUnloader.jsm",
TRRRacer: "resource:///modules/TRRPerformance.jsm",
+ OnionAliasStore: "resource:///modules/OnionAliasStore.jsm",
UIState: "resource://services-sync/UIState.jsm",
WebChannel: "resource://gre/modules/WebChannel.jsm",
WindowsRegistry: "resource://gre/modules/WindowsRegistry.jsm",
@@ -2045,6 +2046,7 @@ BrowserGlue.prototype = {
Normandy.uninit();
RFPHelper.uninit();
+ OnionAliasStore.uninit();
},
// Set up a listener to enable/disable the screenshots extension
@@ -2481,6 +2483,12 @@ BrowserGlue.prototype = {
},
},
+ {
+ task: () => {
+ OnionAliasStore.init();
+ },
+ },
+
{
task: () => {
Blocklist.loadBlocklistAsync();
diff --git a/browser/components/onionservices/ExtensionMessaging.jsm b/browser/components/onionservices/ExtensionMessaging.jsm
new file mode 100644
index 000000000000..c93b8c6edf85
--- /dev/null
+++ b/browser/components/onionservices/ExtensionMessaging.jsm
@@ -0,0 +1,77 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+const EXPORTED_SYMBOLS = ["ExtensionMessaging"];
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { ExtensionUtils } = ChromeUtils.import(
+ "resource://gre/modules/ExtensionUtils.jsm"
+);
+const { MessageChannel } = ChromeUtils.import(
+ "resource://gre/modules/MessageChannel.jsm"
+);
+const { AddonManager } = ChromeUtils.import(
+ "resource://gre/modules/AddonManager.jsm"
+);
+
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ ExtensionParent: "resource://gre/modules/ExtensionParent.jsm",
+});
+
+class ExtensionMessaging {
+ constructor() {
+ this._callback = null;
+ this._handlers = new Map();
+ this._messageManager = Services.cpmm;
+ }
+
+ async sendMessage(message, extensionId) {
+ const addon = await AddonManager.getAddonByID(extensionId);
+ if (!addon) {
+ throw new Error(`extension '${extensionId} does not exist`);
+ }
+ await addon.startupPromise;
+
+ const { torSendExtensionMessage } = ExtensionParent;
+ return torSendExtensionMessage(extensionId, message);
+ }
+
+ unload() {
+ if (this._callback) {
+ this._handlers.clear();
+ this._messageManager.removeMessageListener(
+ "MessageChannel:Response",
+ this._callback
+ );
+ this._callback = null;
+ }
+ }
+
+ _onMessage({ data }) {
+ const channelId = data.messageName;
+ if (this._handlers.has(channelId)) {
+ const { resolve, reject } = this._handlers.get(channelId);
+ this._handlers.delete(channelId);
+ if (data.error) {
+ reject(new Error(data.error.message));
+ } else {
+ resolve(data.value);
+ }
+ }
+ }
+
+ _init() {
+ if (this._callback === null) {
+ this._callback = this._onMessage.bind(this);
+ this._messageManager.addMessageListener(
+ "MessageChannel:Response",
+ this._callback
+ );
+ }
+ }
+}
diff --git a/browser/components/onionservices/HttpsEverywhereControl.jsm b/browser/components/onionservices/HttpsEverywhereControl.jsm
new file mode 100644
index 000000000000..60c3b5fca282
--- /dev/null
+++ b/browser/components/onionservices/HttpsEverywhereControl.jsm
@@ -0,0 +1,119 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+const EXPORTED_SYMBOLS = ["HttpsEverywhereControl"];
+
+const { ExtensionMessaging } = ChromeUtils.import(
+ "resource:///modules/ExtensionMessaging.jsm"
+);
+const { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm");
+
+const EXTENSION_ID = "https-everywhere-eff(a)eff.org";
+const SECUREDROP_TOR_ONION_CHANNEL = {
+ name: "SecureDropTorOnion",
+ jwk: {
+ kty: "RSA",
+ e: "AQAB",
+ n:
+ "p10BbUVc5Xj2S_-MH3bACNBaISo_r9e3PVPyTTjsGsdg2qSXvqUO42fBtpFAy0zUzIGS83v4JjiRdvKJaZTIvbC8AcpymzdsTqujMm8RPTSy3hO_8mXzGa4DEsIB1uNLnUWRBKXvSGCmT9kFyxhTpkYqokNBzafVihTU34tN2Md1xFHnmZGqfYtPtbJLWAa5Z1M11EyR4lIyUxIiPTV9t1XstDbWr3iS83REJrGEFmjG1-BAgx8_lDUTa41799N2yYEhgZud7bL0M3ei8s5OERjiion5uANkUV3-s2QqUZjiVA-XR_HizXjciaUWNd683KqekpNOZ_0STh_UGwpcwU-KwG07QyiCrLrRpz8S_vH8CqGrrcWY3GSzYe9dp34jJdO65oA-G8tK6fMXtvTCFDZI6oNNaXJH71F5J0YbqO2ZqwKYc2WSi0gKVl2wd9roOVjaBmkJqvocntYuNM7t38fDEWHn5KUkmrTbiG68Cy56tDUfpKl3D9Uj4LaMvxJ1tKGvzQ4k_60odT7gIxu6DqYjXUHZpwPsSGBq3njaD7boe4CUXF2K7ViOc87BsKxRNCzDD8OklRjjXzOTOBH3PqFJ93CJ-4ECE5t9STU20aZ8E-2zKB8vjKyCySE4-kcIvBBsnkwVaJTPy9Ft1qYybo-soXEWVEZATANNWklBt8k",
+ },
+ update_path_prefix: "https://securedrop.org/https-everywhere/",
+ scope:
+ "^https?:\\/\\/[a-z0-9-]+(?:\\.[a-z0-9-]+)*\\.securedrop\\.tor\\.onion\\/",
+ replaces_default_rulesets: false,
+};
+
+class HttpsEverywhereControl {
+ constructor() {
+ this._extensionMessaging = null;
+ }
+
+ async _sendMessage(type, object) {
+ return this._extensionMessaging.sendMessage(
+ {
+ type,
+ object,
+ },
+ EXTENSION_ID
+ );
+ }
+
+ static async wait(seconds = 1) {
+ return new Promise(resolve => setTimeout(resolve, seconds * 1000));
+ }
+
+ /**
+ * Installs the .tor.onion update channel in https-everywhere
+ */
+ async installTorOnionUpdateChannel(retries = 5) {
+ this._init();
+
+ // TODO: https-everywhere store is initialized asynchronously, so sending a message
+ // immediately results in a `store.get is undefined` error.
+ // For now, let's wait a bit and retry a few times if there is an error, but perhaps
+ // we could suggest https-everywhere to send a message when that happens and listen
+ // for that here.
+ await HttpsEverywhereControl.wait();
+
+ try {
+ // TODO: we may want a way to "lock" this update channel, so that it cannot be modified
+ // by the user via UI, but I think this is not possible at the time of writing via
+ // the existing messages in https-everywhere.
+ await this._sendMessage(
+ "create_update_channel",
+ SECUREDROP_TOR_ONION_CHANNEL.name
+ );
+ } catch (e) {
+ if (retries <= 0) {
+ throw new Error("Could not install SecureDropTorOnion update channel");
+ }
+ await this.installTorOnionUpdateChannel(retries - 1);
+ return;
+ }
+
+ await this._sendMessage(
+ "update_update_channel",
+ SECUREDROP_TOR_ONION_CHANNEL
+ );
+ }
+
+ /**
+ * Returns the .tor.onion rulesets available in https-everywhere
+ */
+ async getTorOnionRules() {
+ return this._sendMessage("get_simple_rules_ending_with", ".tor.onion");
+ }
+
+ /**
+ * Returns the timestamp of the last .tor.onion update channel update.
+ */
+ async getRulesetTimestamp() {
+ const rulesets = await this._sendMessage("get_ruleset_timestamps");
+ const securedrop =
+ rulesets &&
+ rulesets.find(([{ name }]) => name === SECUREDROP_TOR_ONION_CHANNEL.name);
+ if (securedrop) {
+ const [
+ updateChannel, // This has the same structure as SECUREDROP_TOR_ONION_CHANNEL
+ lastUpdatedTimestamp, // An integer, 0 if the update channel was never updated
+ ] = securedrop;
+ void updateChannel; // Ignore eslint unused warning for ruleset
+ return lastUpdatedTimestamp;
+ }
+ return null;
+ }
+
+ unload() {
+ if (this._extensionMessaging) {
+ this._extensionMessaging.unload();
+ this._extensionMessaging = null;
+ }
+ }
+
+ _init() {
+ if (!this._extensionMessaging) {
+ this._extensionMessaging = new ExtensionMessaging();
+ }
+ }
+}
diff --git a/browser/components/onionservices/OnionAliasStore.jsm b/browser/components/onionservices/OnionAliasStore.jsm
new file mode 100644
index 000000000000..66cf569227bf
--- /dev/null
+++ b/browser/components/onionservices/OnionAliasStore.jsm
@@ -0,0 +1,201 @@
+// Copyright (c) 2020, The Tor Project, Inc.
+
+"use strict";
+
+const EXPORTED_SYMBOLS = ["OnionAliasStore"];
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
+const { setTimeout, clearTimeout } = ChromeUtils.import(
+ "resource://gre/modules/Timer.jsm"
+);
+const { HttpsEverywhereControl } = ChromeUtils.import(
+ "resource:///modules/HttpsEverywhereControl.jsm"
+);
+
+// Logger adapted from CustomizableUI.jsm
+const kPrefOnionAliasDebug = "browser.onionalias.debug";
+XPCOMUtils.defineLazyPreferenceGetter(
+ this,
+ "gDebuggingEnabled",
+ kPrefOnionAliasDebug,
+ false,
+ (pref, oldVal, newVal) => {
+ if (typeof log != "undefined") {
+ log.maxLogLevel = newVal ? "all" : "log";
+ }
+ }
+);
+XPCOMUtils.defineLazyGetter(this, "log", () => {
+ let scope = {};
+ ChromeUtils.import("resource://gre/modules/Console.jsm", scope);
+ let consoleOptions = {
+ maxLogLevel: gDebuggingEnabled ? "all" : "log",
+ prefix: "OnionAlias",
+ };
+ return new scope.ConsoleAPI(consoleOptions);
+});
+
+function observe(topic, callback) {
+ let observer = {
+ observe(aSubject, aTopic, aData) {
+ if (topic === aTopic) {
+ callback(aSubject, aData);
+ }
+ },
+ };
+ Services.obs.addObserver(observer, topic);
+ return () => Services.obs.removeObserver(observer, topic);
+}
+
+class _OnionAliasStore {
+ static get RULESET_CHECK_INTERVAL() {
+ return 1000 * 60; // 1 minute
+ }
+
+ static get RULESET_CHECK_INTERVAL_FAST() {
+ return 1000 * 5; // 5 seconds
+ }
+
+ constructor() {
+ this._onionMap = new Map();
+ this._rulesetTimeout = null;
+ this._removeObserver = () => {};
+ this._canLoadRules = false;
+ this._rulesetTimestamp = null;
+ this._updateChannelInstalled = false;
+ }
+
+ async _periodicRulesetCheck() {
+ // TODO: it would probably be preferable to listen to some message broadcasted by
+ // the https-everywhere extension when some update channel is updated, instead of
+ // polling every N seconds.
+ log.debug("Checking for new rules");
+ const ts = await this.httpsEverywhereControl.getRulesetTimestamp();
+ log.debug(
+ `Found ruleset timestamp ${ts}, current is ${this._rulesetTimestamp}`
+ );
+ if (ts !== this._rulesetTimestamp) {
+ this._rulesetTimestamp = ts;
+ log.debug("New rules found, updating");
+ // We clear the mappings even if we cannot load the rules from https-everywhere,
+ // since we cannot be sure if the stored mappings are correct anymore.
+ this._clear();
+ if (this._canLoadRules) {
+ await this._loadRules();
+ }
+ }
+ // If the timestamp is 0, that means the update channel was not yet updated, so
+ // we schedule a check soon.
+ this._rulesetTimeout = setTimeout(
+ () => this._periodicRulesetCheck(),
+ ts === 0
+ ? _OnionAliasStore.RULESET_CHECK_INTERVAL_FAST
+ : _OnionAliasStore.RULESET_CHECK_INTERVAL
+ );
+ }
+
+ async init() {
+ this.httpsEverywhereControl = new HttpsEverywhereControl();
+
+ // Setup .tor.onion rule loading.
+ // The http observer is a fallback, and is removed in _loadRules() as soon as we are able
+ // to load some rules from HTTPS Everywhere.
+ this._loadHttpObserver();
+ try {
+ await this.httpsEverywhereControl.installTorOnionUpdateChannel();
+ this._updateChannelInstalled = true;
+ await this.httpsEverywhereControl.getTorOnionRules();
+ this._canLoadRules = true;
+ } catch (e) {
+ // Loading rules did not work, probably because "get_simple_rules_ending_with" is not yet
+ // working in https-everywhere. Use an http observer as a fallback for learning the rules.
+ log.debug(`Could not load rules: ${e.message}`);
+ }
+
+ // Setup checker for https-everywhere ruleset updates
+ if (this._updateChannelInstalled) {
+ this._periodicRulesetCheck();
+ }
+ }
+
+ /**
+ * Loads the .tor.onion mappings from https-everywhere.
+ */
+ async _loadRules() {
+ const rules = await this.httpsEverywhereControl.getTorOnionRules();
+ // Remove http observer if we are able to load some rules directly.
+ if (rules.length) {
+ this._removeObserver();
+ this._removeObserver = () => {};
+ }
+ this._clear();
+ log.debug(`Loading ${rules.length} rules`, rules);
+ for (const rule of rules) {
+ // Here we are trusting that the securedrop ruleset follows some conventions so that we can
+ // assume there is a host mapping from `rule.host` to the hostname of the URL in `rule.to`.
+ try {
+ const url = new URL(rule.to);
+ const shortHost = rule.host;
+ const longHost = url.hostname;
+ this._addMapping(shortHost, longHost);
+ } catch (e) {
+ log.error("Could not process rule:", rule);
+ }
+ }
+ }
+
+ /**
+ * Loads a http observer to listen for local redirects for populating
+ * the .tor.onion -> .onion mappings. Should only be used if we cannot ask https-everywhere
+ * directly for the mappings.
+ */
+ _loadHttpObserver() {
+ this._removeObserver = observe("http-on-before-connect", channel => {
+ if (
+ channel.isMainDocumentChannel &&
+ channel.originalURI.host.endsWith(".tor.onion")
+ ) {
+ this._addMapping(channel.originalURI.host, channel.URI.host);
+ }
+ });
+ }
+
+ uninit() {
+ this._clear();
+ this._removeObserver();
+ this._removeObserver = () => {};
+ if (this.httpsEverywhereControl) {
+ this.httpsEverywhereControl.unload();
+ delete this.httpsEverywhereControl;
+ }
+ clearTimeout(this._rulesetTimeout);
+ this._rulesetTimeout = null;
+ this._rulesetTimestamp = null;
+ }
+
+ _clear() {
+ this._onionMap.clear();
+ }
+
+ _addMapping(shortOnionHost, longOnionHost) {
+ this._onionMap.set(longOnionHost, shortOnionHost);
+ }
+
+ getShortURI(onionURI) {
+ if (
+ (onionURI.schemeIs("http") || onionURI.schemeIs("https")) &&
+ this._onionMap.has(onionURI.host)
+ ) {
+ return onionURI
+ .mutate()
+ .setHost(this._onionMap.get(onionURI.host))
+ .finalize();
+ }
+ return null;
+ }
+}
+
+let OnionAliasStore = new _OnionAliasStore();
diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build
index 7e103239c8d6..e4b6d73f8f40 100644
--- a/browser/components/onionservices/moz.build
+++ b/browser/components/onionservices/moz.build
@@ -1 +1,7 @@
JAR_MANIFESTS += ['jar.mn']
+
+EXTRA_JS_MODULES += [
+ 'ExtensionMessaging.jsm',
+ 'HttpsEverywhereControl.jsm',
+ 'OnionAliasStore.jsm',
+]
diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm
index f9711052d015..017463446a58 100644
--- a/browser/components/urlbar/UrlbarInput.jsm
+++ b/browser/components/urlbar/UrlbarInput.jsm
@@ -297,7 +297,10 @@ class UrlbarInput {
// bar if the user has deleted the URL and we'd just put the same URL
// back. See bug 304198.
if (value === null) {
- uri = uri || this.window.gBrowser.currentURI;
+ uri =
+ uri ||
+ this.window.gBrowser.selectedBrowser.currentOnionAliasURI ||
+ this.window.gBrowser.currentURI;
// Strip off usernames and passwords for the location bar
try {
uri = Services.io.createExposableURI(uri);
@@ -1735,7 +1738,13 @@ class UrlbarInput {
}
let uri;
- if (this.getAttribute("pageproxystate") == "valid") {
+ // When we rewrite .onion to an alias, gBrowser.currentURI will be different than
+ // the URI displayed in the urlbar. We need to use the urlbar value to copy the
+ // alias instead of the actual .onion URI that is loaded.
+ if (
+ this.getAttribute("pageproxystate") == "valid" &&
+ !this.window.gBrowser.selectedBrowser.currentOnionAliasURI
+ ) {
uri = this.window.gBrowser.currentURI;
} else {
// The value could be:
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
index 1ef5ee496399..7cc5d6df4819 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -5651,6 +5651,10 @@ void nsDocShell::OnRedirectStateChange(nsIChannel* aOldChannel,
return;
}
+ if (!mOnionUrlbarRewritesAllowed && IsTorOnionRedirect(oldURI, newURI)) {
+ mOnionUrlbarRewritesAllowed = true;
+ }
+
// DocumentChannel adds redirect chain to global history in the parent
// process. The redirect chain can't be queried from the content process, so
// there's no need to update global history here.
@@ -8778,6 +8782,20 @@ nsresult nsDocShell::HandleSameDocumentNavigation(
return NS_OK;
}
+/* static */
+bool nsDocShell::IsTorOnionRedirect(nsIURI* aOldURI, nsIURI* aNewURI) {
+ nsAutoCString oldHost;
+ nsAutoCString newHost;
+ if (aOldURI && aNewURI && NS_SUCCEEDED(aOldURI->GetHost(oldHost)) &&
+ StringEndsWith(oldHost, ".tor.onion"_ns) &&
+ NS_SUCCEEDED(aNewURI->GetHost(newHost)) &&
+ StringEndsWith(newHost, ".onion"_ns) &&
+ !StringEndsWith(newHost, ".tor.onion"_ns)) {
+ return true;
+ }
+ return false;
+}
+
nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState) {
MOZ_ASSERT(aLoadState, "need a load state!");
MOZ_ASSERT(aLoadState->TriggeringPrincipal(),
@@ -8925,6 +8943,30 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState) {
mAllowKeywordFixup =
aLoadState->HasLoadFlags(INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP);
+
+ if (mOnionUrlbarRewritesAllowed) {
+ mOnionUrlbarRewritesAllowed = false;
+ nsCOMPtr<nsIURI> referrer;
+ nsIReferrerInfo* referrerInfo = aLoadState->GetReferrerInfo();
+ if (referrerInfo) {
+ referrerInfo->GetOriginalReferrer(getter_AddRefs(referrer));
+ bool isPrivateWin = false;
+ Document* doc = GetDocument();
+ if (doc) {
+ isPrivateWin =
+ doc->NodePrincipal()->OriginAttributesRef().mPrivateBrowsingId > 0;
+ nsCOMPtr<nsIScriptSecurityManager> secMan =
+ do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID);
+ mOnionUrlbarRewritesAllowed =
+ secMan && NS_SUCCEEDED(secMan->CheckSameOriginURI(
+ aLoadState->URI(), referrer, false, isPrivateWin));
+ }
+ }
+ }
+ mOnionUrlbarRewritesAllowed =
+ mOnionUrlbarRewritesAllowed ||
+ aLoadState->HasLoadFlags(INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES);
+
mURIResultedInDocument = false; // reset the clock...
// See if this is actually a load between two history entries for the same
@@ -11182,6 +11224,7 @@ nsresult nsDocShell::AddToSessionHistory(
HistoryID(), mDynamicallyCreated, originalURI,
resultPrincipalURI, loadReplace, referrerInfo, srcdoc,
srcdocEntry, baseURI, saveLayoutState, expired);
+ entry->SetOnionUrlbarRewritesAllowed(mOnionUrlbarRewritesAllowed);
if (mBrowsingContext->IsTop() && GetSessionHistory()) {
bool shouldPersist = ShouldAddToSessionHistory(aURI, aChannel);
@@ -12930,3 +12973,12 @@ void nsDocShell::SetLoadingSessionHistoryInfo(
const mozilla::dom::LoadingSessionHistoryInfo& aLoadingInfo) {
mLoadingEntry = MakeUnique<LoadingSessionHistoryInfo>(aLoadingInfo);
}
+
+NS_IMETHODIMP
+nsDocShell::GetOnionUrlbarRewritesAllowed(bool* aOnionUrlbarRewritesAllowed) {
+ NS_ENSURE_ARG(aOnionUrlbarRewritesAllowed);
+ *aOnionUrlbarRewritesAllowed =
+ StaticPrefs::browser_urlbar_onionRewrites_enabled() &&
+ mOnionUrlbarRewritesAllowed;
+ return NS_OK;
+}
diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
index 5956b9c926d2..47dd425aea7b 100644
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -153,6 +153,9 @@ class nsDocShell final : public nsDocLoader,
// Whether the load should go through LoadURIDelegate.
INTERNAL_LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE = 0x2000,
+
+ // Whether rewriting the urlbar to a short .onion alias is allowed.
+ INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES = 0x4000,
};
// Event type dispatched by RestorePresentation
@@ -548,6 +551,8 @@ class nsDocShell final : public nsDocLoader,
virtual void DestroyChildren() override;
+ static bool IsTorOnionRedirect(nsIURI* aOldURI, nsIURI* aNewURI);
+
// Overridden from nsDocLoader, this provides more information than the
// normal OnStateChange with flags STATE_REDIRECTING
virtual void OnRedirectStateChange(nsIChannel* aOldChannel,
@@ -1218,6 +1223,7 @@ class nsDocShell final : public nsDocLoader,
bool mCSSErrorReportingEnabled : 1;
bool mAllowAuth : 1;
bool mAllowKeywordFixup : 1;
+ bool mOnionUrlbarRewritesAllowed : 1;
bool mIsOffScreenBrowser : 1;
bool mDisableMetaRefreshWhenInactive : 1;
bool mIsAppTab : 1;
diff --git a/docshell/base/nsDocShellLoadState.cpp b/docshell/base/nsDocShellLoadState.cpp
index 3f919d6123eb..41267b9e08b2 100644
--- a/docshell/base/nsDocShellLoadState.cpp
+++ b/docshell/base/nsDocShellLoadState.cpp
@@ -756,6 +756,10 @@ void nsDocShellLoadState::CalculateLoadURIFlags() {
mLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
}
+ if (oldLoadFlags & nsIWebNavigation::LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES) {
+ mLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES;
+ }
+
if (oldLoadFlags & nsIWebNavigation::LOAD_FLAGS_FIRST_LOAD) {
mLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_FIRST_LOAD;
}
diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl
index 3396ac35b4a4..9cde860f036e 100644
--- a/docshell/base/nsIDocShell.idl
+++ b/docshell/base/nsIDocShell.idl
@@ -978,4 +978,9 @@ interface nsIDocShell : nsIDocShellTreeItem
* until session history state is moved into the parent process.
*/
void persistLayoutHistoryState();
+
+ /**
+ * Whether rewriting the urlbar to a short .onion alias is allowed.
+ */
+ [infallible] readonly attribute boolean onionUrlbarRewritesAllowed;
};
diff --git a/docshell/base/nsIWebNavigation.idl b/docshell/base/nsIWebNavigation.idl
index eff31d352591..fc8185f1b44f 100644
--- a/docshell/base/nsIWebNavigation.idl
+++ b/docshell/base/nsIWebNavigation.idl
@@ -253,6 +253,11 @@ interface nsIWebNavigation : nsISupports
*/
const unsigned long LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE = 0x4000000;
+ /**
+ * Allow rewriting the urlbar to a short .onion alias.
+ */
+ const unsigned long LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES = 0x8000000;
+
/**
* Loads a given URI. This will give priority to loading the requested URI
* in the object implementing this interface. If it can't be loaded here
diff --git a/docshell/shistory/SessionHistoryEntry.cpp b/docshell/shistory/SessionHistoryEntry.cpp
index f218387ce465..fc55a24d39eb 100644
--- a/docshell/shistory/SessionHistoryEntry.cpp
+++ b/docshell/shistory/SessionHistoryEntry.cpp
@@ -565,6 +565,20 @@ SessionHistoryEntry::SetPersist(bool aPersist) {
return NS_OK;
}
+NS_IMETHODIMP
+SessionHistoryEntry::GetOnionUrlbarRewritesAllowed(
+ bool* aOnionUrlbarRewritesAllowed) {
+ *aOnionUrlbarRewritesAllowed = mInfo->mOnionUrlbarRewritesAllowed;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+SessionHistoryEntry::SetOnionUrlbarRewritesAllowed(
+ bool aOnionUrlbarRewritesAllowed) {
+ mInfo->mOnionUrlbarRewritesAllowed = aOnionUrlbarRewritesAllowed;
+ return NS_OK;
+}
+
NS_IMETHODIMP
SessionHistoryEntry::GetScrollPosition(int32_t* aX, int32_t* aY) {
*aX = mInfo->mScrollPositionX;
diff --git a/docshell/shistory/SessionHistoryEntry.h b/docshell/shistory/SessionHistoryEntry.h
index 340c82d653a4..51c1e4956ee0 100644
--- a/docshell/shistory/SessionHistoryEntry.h
+++ b/docshell/shistory/SessionHistoryEntry.h
@@ -96,6 +96,7 @@ class SessionHistoryInfo {
bool mIsSrcdocEntry = false;
bool mScrollRestorationIsManual = false;
bool mPersist = false;
+ bool mOnionUrlbarRewritesAllowed = false;
};
struct LoadingSessionHistoryInfo {
diff --git a/docshell/shistory/nsISHEntry.idl b/docshell/shistory/nsISHEntry.idl
index d17da38f6f38..1354ab9b6340 100644
--- a/docshell/shistory/nsISHEntry.idl
+++ b/docshell/shistory/nsISHEntry.idl
@@ -247,6 +247,11 @@ interface nsISHEntry : nsISupports
*/
[infallible] attribute boolean persist;
+ /**
+ * Whether rewriting the urlbar to a short .onion alias is allowed.
+ */
+ [infallible] attribute boolean onionUrlbarRewritesAllowed;
+
/**
* Set/Get the visual viewport scroll position if session history is
* changed through anchor navigation or pushState.
diff --git a/docshell/shistory/nsSHEntry.cpp b/docshell/shistory/nsSHEntry.cpp
index 99e12abc1fea..4cbf8a869d75 100644
--- a/docshell/shistory/nsSHEntry.cpp
+++ b/docshell/shistory/nsSHEntry.cpp
@@ -45,7 +45,8 @@ nsSHEntry::nsSHEntry()
mScrollRestorationIsManual(false),
mLoadedInThisProcess(false),
mPersist(true),
- mHasUserInteraction(false) {}
+ mHasUserInteraction(false),
+ mOnionUrlbarRewritesAllowed(false) {}
nsSHEntry::nsSHEntry(const nsSHEntry& aOther)
: mShared(aOther.mShared),
@@ -72,7 +73,8 @@ nsSHEntry::nsSHEntry(const nsSHEntry& aOther)
mScrollRestorationIsManual(false),
mLoadedInThisProcess(aOther.mLoadedInThisProcess),
mPersist(aOther.mPersist),
- mHasUserInteraction(false) {}
+ mHasUserInteraction(false),
+ mOnionUrlbarRewritesAllowed(aOther.mOnionUrlbarRewritesAllowed) {}
nsSHEntry::~nsSHEntry() {
// Null out the mParent pointers on all our kids.
@@ -853,6 +855,18 @@ nsSHEntry::SetPersist(bool aPersist) {
return NS_OK;
}
+NS_IMETHODIMP
+nsSHEntry::GetOnionUrlbarRewritesAllowed(bool* aOnionUrlbarRewritesAllowed) {
+ *aOnionUrlbarRewritesAllowed = mOnionUrlbarRewritesAllowed;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsSHEntry::SetOnionUrlbarRewritesAllowed(bool aOnionUrlbarRewritesAllowed) {
+ mOnionUrlbarRewritesAllowed = aOnionUrlbarRewritesAllowed;
+ return NS_OK;
+}
+
NS_IMETHODIMP
nsSHEntry::CreateLoadInfo(nsDocShellLoadState** aLoadState) {
nsCOMPtr<nsIURI> uri = GetURI();
@@ -902,6 +916,10 @@ nsSHEntry::CreateLoadInfo(nsDocShellLoadState** aLoadState) {
} else {
srcdoc = VoidString();
}
+ if (GetOnionUrlbarRewritesAllowed()) {
+ flags |= nsDocShell::InternalLoad::
+ INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES;
+ }
loadState->SetSrcdocData(srcdoc);
loadState->SetBaseURI(baseURI);
loadState->SetLoadFlags(flags);
diff --git a/docshell/shistory/nsSHEntry.h b/docshell/shistory/nsSHEntry.h
index 058f1720fa51..93e1d6696029 100644
--- a/docshell/shistory/nsSHEntry.h
+++ b/docshell/shistory/nsSHEntry.h
@@ -64,6 +64,7 @@ class nsSHEntry : public nsISHEntry {
bool mLoadedInThisProcess;
bool mPersist;
bool mHasUserInteraction;
+ bool mOnionUrlbarRewritesAllowed;
};
#endif /* nsSHEntry_h */
diff --git a/dom/interfaces/base/nsIBrowser.idl b/dom/interfaces/base/nsIBrowser.idl
index d6df6411e97a..868b9675a3c4 100644
--- a/dom/interfaces/base/nsIBrowser.idl
+++ b/dom/interfaces/base/nsIBrowser.idl
@@ -131,7 +131,8 @@ interface nsIBrowser : nsISupports
in boolean aIsSynthetic,
in boolean aHasRequestContextID,
in uint64_t aRequestContextID,
- in AString aContentType);
+ in AString aContentType,
+ in boolean aOnionUrlbarRewritesAllowed);
/**
* Determine what process switching behavior this browser element should have.
diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp
index def948c9c781..17d3fa382626 100644
--- a/dom/ipc/BrowserChild.cpp
+++ b/dom/ipc/BrowserChild.cpp
@@ -3643,6 +3643,8 @@ NS_IMETHODIMP BrowserChild::OnLocationChange(nsIWebProgress* aWebProgress,
docShell->GetMayEnableCharacterEncodingMenu();
locationChangeData->charsetAutodetected() =
docShell->GetCharsetAutodetected();
+ locationChangeData->onionUrlbarRewritesAllowed() =
+ docShell->GetOnionUrlbarRewritesAllowed();
locationChangeData->contentPrincipal() = document->NodePrincipal();
locationChangeData->contentPartitionedPrincipal() =
diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp
index caedda626553..4b4baf0562a0 100644
--- a/dom/ipc/BrowserParent.cpp
+++ b/dom/ipc/BrowserParent.cpp
@@ -2704,7 +2704,8 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnLocationChange(
aLocationChangeData->isSyntheticDocument(),
aLocationChangeData->requestContextID().isSome(),
aLocationChangeData->requestContextID().valueOr(0),
- aLocationChangeData->contentType());
+ aLocationChangeData->contentType(),
+ aLocationChangeData->onionUrlbarRewritesAllowed());
}
GetBrowsingContext()->Top()->GetWebProgress()->OnLocationChange(
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl
index eb50dafd4406..4422bc73c102 100644
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -135,6 +135,7 @@ struct WebProgressLocationChangeData
bool isSyntheticDocument;
bool mayEnableCharacterEncodingMenu;
bool charsetAutodetected;
+ bool onionUrlbarRewritesAllowed;
nsString contentType;
nsString title;
nsString charset;
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index b6d14c7dfcb2..cbaefc649ce7 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -1124,6 +1124,12 @@
value: true
mirror: always
+ # Whether rewriting the urlbar to a short .onion alias is allowed.
+- name: browser.urlbar.onionRewrites.enabled
+ type: RelaxedAtomicBool
+ value: true
+ mirror: always
+
- name: browser.viewport.desktopWidth
type: RelaxedAtomicInt32
value: 980
diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat
index dfe0ed3b50c8..b1f92290297b 100644
--- a/netwerk/dns/effective_tld_names.dat
+++ b/netwerk/dns/effective_tld_names.dat
@@ -5515,6 +5515,8 @@ pro.om
// onion : https://tools.ietf.org/html/rfc7686
onion
+tor.onion
+securedrop.tor.onion
// org : https://en.wikipedia.org/wiki/.org
org
diff --git a/netwerk/ipc/DocumentLoadListener.cpp b/netwerk/ipc/DocumentLoadListener.cpp
index 6d66009238ba..a8353a0b1663 100644
--- a/netwerk/ipc/DocumentLoadListener.cpp
+++ b/netwerk/ipc/DocumentLoadListener.cpp
@@ -2422,6 +2422,16 @@ DocumentLoadListener::AsyncOnChannelRedirect(
mLoadStateLoadType, nsIWebNavigation::LOAD_FLAGS_ALLOW_MIXED_CONTENT));
}
+ // Like the code above for allowing mixed content, we need to check this here
+ // in case the redirect is not handled in the docshell.
+ nsCOMPtr<nsIURI> oldURI, newURI;
+ aOldChannel->GetURI(getter_AddRefs(oldURI));
+ aNewChannel->GetURI(getter_AddRefs(newURI));
+ if (nsDocShell::IsTorOnionRedirect(oldURI, newURI)) {
+ mLoadStateLoadFlags |=
+ nsDocShell::INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES;
+ }
+
// We need the original URI of the current channel to use to open the real
// channel in the content process. Unfortunately we overwrite the original
// uri of the new channel with the original pre-redirect URI, so grab
diff --git a/toolkit/content/widgets/browser-custom-element.js b/toolkit/content/widgets/browser-custom-element.js
index 2af0bea9bdc5..d392ca2ab143 100644
--- a/toolkit/content/widgets/browser-custom-element.js
+++ b/toolkit/content/widgets/browser-custom-element.js
@@ -229,6 +229,8 @@
this._mayEnableCharacterEncodingMenu = null;
+ this._onionUrlbarRewritesAllowed = false;
+
this._charsetAutodetected = false;
this._contentPrincipal = null;
@@ -620,6 +622,12 @@
}
}
+ get onionUrlbarRewritesAllowed() {
+ return this.isRemoteBrowser
+ ? this._onionUrlbarRewritesAllowed
+ : this.docShell.onionUrlbarRewritesAllowed;
+ }
+
get charsetAutodetected() {
return this.isRemoteBrowser
? this._charsetAutodetected
@@ -1191,7 +1199,8 @@
aIsSynthetic,
aHaveRequestContextID,
aRequestContextID,
- aContentType
+ aContentType,
+ aOnionUrlbarRewritesAllowed
) {
if (this.isRemoteBrowser && this.messageManager) {
if (aCharset != null) {
@@ -1214,6 +1223,7 @@
this._contentRequestContextID = aHaveRequestContextID
? aRequestContextID
: null;
+ this._onionUrlbarRewritesAllowed = aOnionUrlbarRewritesAllowed;
}
}
@@ -1600,6 +1610,7 @@
"_contentPrincipal",
"_contentPartitionedPrincipal",
"_isSyntheticDocument",
+ "_onionUrlbarRewritesAllowed",
]
);
}
diff --git a/toolkit/modules/sessionstore/SessionHistory.jsm b/toolkit/modules/sessionstore/SessionHistory.jsm
index f0a3e0e6653d..44ff3e988625 100644
--- a/toolkit/modules/sessionstore/SessionHistory.jsm
+++ b/toolkit/modules/sessionstore/SessionHistory.jsm
@@ -320,6 +320,7 @@ var SessionHistoryInternal = {
}
entry.persist = shEntry.persist;
+ entry.onionUrlbarRewritesAllowed = shEntry.onionUrlbarRewritesAllowed;
return entry;
},
@@ -614,6 +615,10 @@ var SessionHistoryInternal = {
}
}
+ if (entry.onionUrlbarRewritesAllowed) {
+ shEntry.onionUrlbarRewritesAllowed = entry.onionUrlbarRewritesAllowed;
+ }
+
return shEntry;
},
diff --git a/xpcom/reflect/xptinfo/xptinfo.h b/xpcom/reflect/xptinfo/xptinfo.h
index 33b1f25411fd..e8a9d9d9c592 100644
--- a/xpcom/reflect/xptinfo/xptinfo.h
+++ b/xpcom/reflect/xptinfo/xptinfo.h
@@ -513,7 +513,8 @@ static_assert(sizeof(nsXPTMethodInfo) == 8, "wrong size");
#if defined(MOZ_THUNDERBIRD) || defined(MOZ_SUITE)
# define PARAM_BUFFER_COUNT 18
#else
-# define PARAM_BUFFER_COUNT 14
+// The max is currently updateForLocationChange in nsIBrowser.idl
+# define PARAM_BUFFER_COUNT 15
#endif
/**
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 33342: Avoid disconnect search addon error after removal.
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 8605a744cfe6066d307ac93138dcb9fe9a68afde
Author: Alex Catarineu <acat(a)torproject.org>
Date: Fri Mar 13 18:19:30 2020 +0100
Bug 33342: Avoid disconnect search addon error after removal.
We removed the addon in #32767, but it was still being loaded
from addonStartup.json.lz4 and throwing an error on startup
because its resource: location is not available anymore.
---
toolkit/mozapps/extensions/internal/XPIProvider.jsm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
index 78c0b0f7c702..ad8922dadebf 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -970,6 +970,12 @@ var BuiltInLocation = new (class _BuiltInLocation extends XPIStateLocation {
get enumerable() {
return false;
}
+
+ restore(saved) {
+ super.restore(saved);
+ // Bug 33342: avoid restoring disconnect addon from addonStartup.json.lz4.
+ this.removeAddon("disconnect(a)search.mozilla.org");
+ }
})();
/**
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 40125: Expose Security Level pref in GeckoView
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 191814932d77a67a87832917c4f9bfa7d27a1fad
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Mon Sep 14 02:52:28 2020 +0000
Bug 40125: Expose Security Level pref in GeckoView
---
mobile/android/geckoview/api.txt | 3 ++
.../mozilla/geckoview/GeckoRuntimeSettings.java | 33 ++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/mobile/android/geckoview/api.txt b/mobile/android/geckoview/api.txt
index b6d974dda197..e5dec1ff09e9 100644
--- a/mobile/android/geckoview/api.txt
+++ b/mobile/android/geckoview/api.txt
@@ -577,6 +577,7 @@ package org.mozilla.geckoview {
method @Nullable public GeckoRuntime getRuntime();
method @Nullable public Rect getScreenSizeOverride();
method @Nullable public RuntimeTelemetry.Delegate getTelemetryDelegate();
+ method public int getTorSecurityLevel();
method public boolean getUseMaxScreenDepth();
method @Deprecated public boolean getUseMultiprocess();
method public boolean getWebFontsEnabled();
@@ -595,6 +596,7 @@ package org.mozilla.geckoview {
method @NonNull public GeckoRuntimeSettings setLoginAutofillEnabled(boolean);
method @NonNull public GeckoRuntimeSettings setPreferredColorScheme(int);
method @NonNull public GeckoRuntimeSettings setRemoteDebuggingEnabled(boolean);
+ method @NonNull public GeckoRuntimeSettings setTorSecurityLevel(int);
method @NonNull public GeckoRuntimeSettings setWebFontsEnabled(boolean);
method @NonNull public GeckoRuntimeSettings setWebManifestEnabled(boolean);
field public static final int COLOR_SCHEME_DARK = 1;
@@ -630,6 +632,7 @@ package org.mozilla.geckoview {
method @NonNull public GeckoRuntimeSettings.Builder remoteDebuggingEnabled(boolean);
method @NonNull public GeckoRuntimeSettings.Builder screenSizeOverride(int, int);
method @NonNull public GeckoRuntimeSettings.Builder telemetryDelegate(@NonNull RuntimeTelemetry.Delegate);
+ method @NonNull public GeckoRuntimeSettings.Builder torSecurityLevel(int);
method @NonNull public GeckoRuntimeSettings.Builder useMaxScreenDepth(boolean);
method @Deprecated @NonNull public GeckoRuntimeSettings.Builder useMultiprocess(boolean);
method @NonNull public GeckoRuntimeSettings.Builder webFontsEnabled(boolean);
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
index 59ee4e9ca66e..84b58f4ead40 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
@@ -457,6 +457,17 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
getSettings().mForceUserScalable.set(flag);
return this;
}
+
+ /**
+ * Set security level.
+ *
+ * @param level A value determining the security level. Default is 0.
+ * @return This Builder instance.
+ */
+ public @NonNull Builder torSecurityLevel(final int level) {
+ getSettings().mTorSecurityLevel.set(level);
+ return this;
+ }
}
private GeckoRuntime mRuntime;
@@ -507,6 +518,8 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
"browser.tabs.remote.autostart", true);
/* package */ final Pref<Boolean> mAutofillLogins = new Pref<Boolean>(
"signon.autofillForms", true);
+ /* package */ final Pref<Integer> mTorSecurityLevel = new Pref<>(
+ "extensions.torbutton.security_slider", 0);
/* package */ int mPreferredColorScheme = COLOR_SCHEME_SYSTEM;
@@ -1157,6 +1170,26 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
return this;
}
+ /**
+ * Gets the current security level.
+ *
+ * @return current security protection level
+ */
+ public int getTorSecurityLevel() {
+ return mTorSecurityLevel.get();
+ }
+
+ /**
+ * Sets the Tor Security Level.
+ *
+ * @param level security protection level
+ * @return This GeckoRuntimeSettings instance.
+ */
+ public @NonNull GeckoRuntimeSettings setTorSecurityLevel(final int level) {
+ mTorSecurityLevel.commit(level);
+ return this;
+ }
+
@Override // Parcelable
public void writeToParcel(final Parcel out, final int flags) {
super.writeToParcel(out, flags);
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 40002: Remove about:pioneer
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 6e4615ba520e7ca9e702c7f7617e9fb7346d891d
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Fri Aug 14 09:06:33 2020 -0400
Bug 40002: Remove about:pioneer
Firefox Pioneer is an opt-in program in which people volunteer to
participate in studies that collect detailed, sensitive data about
how they use their browser.
---
browser/components/about/AboutRedirector.cpp | 2 --
browser/components/about/components.conf | 1 -
2 files changed, 3 deletions(-)
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp
index 78cb284d3eda..0f81fab8d7f0 100644
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -114,8 +114,6 @@ static const RedirEntry kRedirMap[] = {
nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
- {"pioneer", "chrome://browser/content/pioneer.html",
- nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
#ifdef TOR_BROWSER_UPDATE
{"tbupdate", "chrome://browser/content/abouttbupdate/aboutTBUpdate.xhtml",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf
index d78de142e2e4..8e04467c05da 100644
--- a/browser/components/about/components.conf
+++ b/browser/components/about/components.conf
@@ -14,7 +14,6 @@ pages = [
'logins',
'newinstall',
'newtab',
- 'pioneer',
'pocket-saved',
'pocket-signup',
'policies',
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 40073: Disable remote Public Suffix List fetching
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 4ad548b9cbac6df6d07e7093963d8b6d2d3f9c5b
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Aug 13 11:05:03 2020 +0200
Bug 40073: Disable remote Public Suffix List fetching
In https://bugzilla.mozilla.org/show_bug.cgi?id=1563246 Firefox implemented
fetching the Public Suffix List via RemoteSettings and replacing the default
one at runtime, which we do not want.
---
browser/components/BrowserGlue.jsm | 5 -----
1 file changed, 5 deletions(-)
diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm
index bb2fc00e6b52..755fcb16cad7 100644
--- a/browser/components/BrowserGlue.jsm
+++ b/browser/components/BrowserGlue.jsm
@@ -742,7 +742,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
PluralForm: "resource://gre/modules/PluralForm.jsm",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.jsm",
- PublicSuffixList: "resource://gre/modules/netwerk-dns/PublicSuffixList.jsm",
RemoteSettings: "resource://services-settings/remote-settings.js",
RemoteSecuritySettings:
"resource://gre/modules/psm/RemoteSecuritySettings.jsm",
@@ -2650,10 +2649,6 @@ BrowserGlue.prototype = {
this._addBreachesSyncHandler();
},
- () => {
- PublicSuffixList.init();
- },
-
() => {
RemoteSecuritySettings.init();
},
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 40025: Remove Mozilla add-on install permissions
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit fc59160468ded9482d7389c4b8cd0922f6c130df
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jul 27 18:12:55 2020 +0200
Bug 40025: Remove Mozilla add-on install permissions
---
browser/app/permissions | 5 -----
1 file changed, 5 deletions(-)
diff --git a/browser/app/permissions b/browser/app/permissions
index 4938bd1e22e5..5c4c302f5ba5 100644
--- a/browser/app/permissions
+++ b/browser/app/permissions
@@ -11,11 +11,6 @@
origin uitour 1 https://3g2upl4pq6kufc4m.onion
origin uitour 1 about:tor
-# XPInstall
-origin install 1 https://addons.mozilla.org
-
# Remote troubleshooting
origin remote-troubleshooting 1 https://support.mozilla.org
-# addon install
-origin install 1 https://fpn.firefox.com
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] fixup! Bug 40125: Expose Security Level pref in GeckoView
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 2843608546117ad6d98de6755e6a66745ffec815
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Sat Oct 3 03:25:41 2020 +0000
fixup! Bug 40125: Expose Security Level pref in GeckoView
Bug 40173: Set security_level pref default value as Standard
---
.../src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
index 84b58f4ead40..1df03536e5cd 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java
@@ -519,7 +519,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
/* package */ final Pref<Boolean> mAutofillLogins = new Pref<Boolean>(
"signon.autofillForms", true);
/* package */ final Pref<Integer> mTorSecurityLevel = new Pref<>(
- "extensions.torbutton.security_slider", 0);
+ "extensions.torbutton.security_slider", 4);
/* package */ int mPreferredColorScheme = COLOR_SCHEME_SYSTEM;
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 25741 - TBA: Disable GeckoNetworkManager
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 3d904a641440659752573d959a5bcd5121298bba
Author: Matthew Finkel <Matthew.Finkel(a)gmail.com>
Date: Thu Apr 26 22:22:51 2018 +0000
Bug 25741 - TBA: Disable GeckoNetworkManager
The browser should not need information related to the network
interface or network state, tor should take care of that.
---
.../src/main/java/org/mozilla/geckoview/GeckoRuntime.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
index c908d23229d1..bd26f6782276 100644
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntime.java
@@ -121,7 +121,9 @@ public final class GeckoRuntime implements Parcelable {
mPaused = false;
// Monitor network status and send change notifications to Gecko
// while active.
- GeckoNetworkManager.getInstance().start(GeckoAppShell.getApplicationContext());
+ if (BuildConfig.TOR_BROWSER_VERSION == "") {
+ GeckoNetworkManager.getInstance().start(GeckoAppShell.getApplicationContext());
+ }
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
@@ -129,7 +131,9 @@ public final class GeckoRuntime implements Parcelable {
Log.d(LOGTAG, "Lifecycle: onPause");
mPaused = true;
// Stop monitoring network status while inactive.
- GeckoNetworkManager.getInstance().stop();
+ if (BuildConfig.TOR_BROWSER_VERSION == "") {
+ GeckoNetworkManager.getInstance().stop();
+ }
GeckoThread.onPause();
}
}
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 8c47aee29000809e7714b14610f25d6b38ce2dd2
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Sep 16 15:25:39 2019 -0700
Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
This patch adds a new about:preferences#tor page which allows modifying
bridge, proxy, and firewall settings from within Tor Browser. All of the
functionality present in tor-launcher's Network Configuration panel is
present:
- Setting built-in bridges
- Requesting bridges from BridgeDB via moat
- Using user-provided bridges
- Configuring SOCKS4, SOCKS5, and HTTP/HTTPS proxies
- Setting firewall ports
- Viewing and Copying Tor's logs
- The Networking Settings in General preferences has been removed
---
browser/components/moz.build | 1 +
browser/components/preferences/main.inc.xhtml | 55 --
browser/components/preferences/main.js | 14 -
browser/components/preferences/preferences.js | 9 +
browser/components/preferences/preferences.xhtml | 5 +
browser/components/preferences/privacy.js | 1 +
.../torpreferences/content/parseFunctions.jsm | 89 +++
.../torpreferences/content/requestBridgeDialog.jsm | 202 +++++
.../content/requestBridgeDialog.xhtml | 35 +
.../torpreferences/content/torBridgeSettings.jsm | 325 ++++++++
.../torpreferences/content/torCategory.inc.xhtml | 9 +
.../torpreferences/content/torFirewallSettings.jsm | 72 ++
.../torpreferences/content/torLogDialog.jsm | 66 ++
.../torpreferences/content/torLogDialog.xhtml | 23 +
.../components/torpreferences/content/torPane.js | 857 +++++++++++++++++++++
.../torpreferences/content/torPane.xhtml | 123 +++
.../torpreferences/content/torPreferences.css | 77 ++
.../torpreferences/content/torPreferencesIcon.svg | 5 +
.../torpreferences/content/torProxySettings.jsm | 245 ++++++
browser/components/torpreferences/jar.mn | 14 +
browser/components/torpreferences/moz.build | 1 +
browser/modules/BridgeDB.jsm | 110 +++
browser/modules/TorProtocolService.jsm | 212 +++++
browser/modules/moz.build | 2 +
24 files changed, 2483 insertions(+), 69 deletions(-)
diff --git a/browser/components/moz.build b/browser/components/moz.build
index cb6eeb9164ef..09e209dc9c3b 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -58,6 +58,7 @@ DIRS += [
'syncedtabs',
'uitour',
'urlbar',
+ 'torpreferences',
'translation',
]
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index f7239b4d7342..5789464dcede 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -658,59 +658,4 @@
<label id="cfrFeaturesLearnMore" class="learnMore" data-l10n-id="browsing-cfr-recommendations-learn-more" is="text-link"/>
</hbox>
</groupbox>
-
-<hbox id="networkProxyCategory"
- class="subcategory"
- hidden="true"
- data-category="paneGeneral">
- <html:h1 data-l10n-id="network-settings-title"/>
-</hbox>
-
-<!-- Network Settings-->
-<groupbox id="connectionGroup" data-category="paneGeneral" hidden="true">
- <label class="search-header" hidden="true"><html:h2 data-l10n-id="network-settings-title"/></label>
-
- <hbox align="center">
- <hbox align="center" flex="1">
- <description id="connectionSettingsDescription" control="connectionSettings"/>
- <spacer width="5"/>
- <label id="connectionSettingsLearnMore" class="learnMore" is="text-link"
- data-l10n-id="network-proxy-connection-learn-more">
- </label>
- <separator orient="vertical"/>
- </hbox>
-
- <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
- <hbox>
- <button id="connectionSettings"
- is="highlightable-button"
- class="accessory-button"
- data-l10n-id="network-proxy-connection-settings"
- searchkeywords="doh trr"
- search-l10n-ids="
- connection-window.title,
- connection-proxy-option-no.label,
- connection-proxy-option-auto.label,
- connection-proxy-option-system.label,
- connection-proxy-option-manual.label,
- connection-proxy-http,
- connection-proxy-https,
- connection-proxy-ftp,
- connection-proxy-http-port,
- connection-proxy-socks,
- connection-proxy-socks4,
- connection-proxy-socks5,
- connection-proxy-noproxy,
- connection-proxy-noproxy-desc,
- connection-proxy-http-sharing.label,
- connection-proxy-autotype.label,
- connection-proxy-reload.label,
- connection-proxy-autologin.label,
- connection-proxy-socks-remote-dns.label,
- connection-dns-over-https.label,
- connection-dns-over-https-url-custom.label,
- " />
- </hbox>
- </hbox>
-</groupbox>
</html:template>
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 8afc3e0d5140..54556f474e59 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -370,15 +370,6 @@ var gMainPane = {
});
this.updatePerformanceSettingsBox({ duringChangeEvent: false });
this.displayUseSystemLocale();
- let connectionSettingsLink = document.getElementById(
- "connectionSettingsLearnMore"
- );
- let connectionSettingsUrl =
- Services.urlFormatter.formatURLPref("app.support.baseURL") +
- "prefs-connection-settings";
- connectionSettingsLink.setAttribute("href", connectionSettingsUrl);
- this.updateProxySettingsUI();
- initializeProxyUI(gMainPane);
if (Services.prefs.getBoolPref("intl.multilingual.enabled")) {
gMainPane.initBrowserLocale();
@@ -512,11 +503,6 @@ var gMainPane = {
"change",
gMainPane.updateHardwareAcceleration.bind(gMainPane)
);
- setEventListener(
- "connectionSettings",
- "command",
- gMainPane.showConnections
- );
setEventListener(
"browserContainersCheckbox",
"command",
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 7179fe7ec8b7..fcb722eea0b2 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -13,6 +13,7 @@
/* import-globals-from findInPage.js */
/* import-globals-from ../../base/content/utilityOverlay.js */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
+/* import-globals-from ../torpreferences/content/torPane.js */
"use strict";
@@ -136,6 +137,14 @@ function init_all() {
register_module("paneSync", gSyncPane);
}
register_module("paneSearchResults", gSearchResultsPane);
+ if (gTorPane.enabled) {
+ document.getElementById("category-tor").hidden = false;
+ register_module("paneTor", gTorPane);
+ } else {
+ // Remove the pane from the DOM so it doesn't get incorrectly included in search results.
+ document.getElementById("template-paneTor").remove();
+ }
+
gSearchResultsPane.init();
gMainPane.preInit();
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index f6ff20bacb56..514eba207ca3 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -13,6 +13,7 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/containers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
<!DOCTYPE html [
<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd">
@@ -153,6 +154,9 @@
<image class="category-icon"/>
<label class="category-name" flex="1" data-l10n-id="pane-experimental-title"></label>
</richlistitem>
+
+#include ../torpreferences/content/torCategory.inc.xhtml
+
</richlistbox>
<spacer flex="1"/>
@@ -213,6 +217,7 @@
#include containers.inc.xhtml
#include sync.inc.xhtml
#include experimental.inc.xhtml
+#include ../torpreferences/content/torPane.xhtml
</vbox>
</vbox>
</vbox>
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index 4b426953a51e..a7cfa47ae4e8 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -80,6 +80,7 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() {
}
});
+// TODO: module import via ChromeUtils.defineModuleGetter
XPCOMUtils.defineLazyScriptGetter(
this,
["SecurityLevelPreferences"],
diff --git a/browser/components/torpreferences/content/parseFunctions.jsm b/browser/components/torpreferences/content/parseFunctions.jsm
new file mode 100644
index 000000000000..954759de63a5
--- /dev/null
+++ b/browser/components/torpreferences/content/parseFunctions.jsm
@@ -0,0 +1,89 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "parsePort",
+ "parseAddrPort",
+ "parseUsernamePassword",
+ "parseAddrPortList",
+ "parseBridgeStrings",
+ "parsePortList",
+];
+
+// expects a string representation of an integer from 1 to 65535
+let parsePort = function(aPort) {
+ // ensure port string is a valid positive integer
+ const validIntRegex = /^[0-9]+$/;
+ if (!validIntRegex.test(aPort)) {
+ throw new Error(`Invalid PORT string : '${aPort}'`);
+ }
+
+ // ensure port value is on valid range
+ let port = Number.parseInt(aPort);
+ if (port < 1 || port > 65535) {
+ throw new Error(
+ `Invalid PORT value, needs to be on range [1,65535] : '${port}'`
+ );
+ }
+
+ return port;
+};
+// expects a string in the format: "ADDRESS:PORT"
+let parseAddrPort = function(aAddrColonPort) {
+ let tokens = aAddrColonPort.split(":");
+ if (tokens.length != 2) {
+ throw new Error(`Invalid ADDRESS:PORT string : '${aAddrColonPort}'`);
+ }
+ let address = tokens[0];
+ let port = parsePort(tokens[1]);
+ return [address, port];
+};
+
+// expects a string in the format: "USERNAME:PASSWORD"
+// split on the first colon and any subsequent go into password
+let parseUsernamePassword = function(aUsernameColonPassword) {
+ let colonIndex = aUsernameColonPassword.indexOf(":");
+ if (colonIndex < 0) {
+ // we don't log the contents of the potentially password containing string
+ throw new Error("Invalid USERNAME:PASSWORD string");
+ }
+
+ let username = aUsernameColonPassword.substring(0, colonIndex);
+ let password = aUsernameColonPassword.substring(colonIndex + 1);
+
+ return [username, password];
+};
+
+// expects a string in the format: ADDRESS:PORT,ADDRESS:PORT,...
+// returns array of ports (as ints)
+let parseAddrPortList = function(aAddrPortList) {
+ let addrPorts = aAddrPortList.split(",");
+ // parse ADDRESS:PORT string and only keep the port (second element in returned array)
+ let retval = addrPorts.map(addrPort => parseAddrPort(addrPort)[1]);
+ return retval;
+};
+
+// expects a '/n' or '/r/n' delimited bridge string, which we split and trim
+// each bridge string can also optionally have 'bridge' at the beginning ie:
+// bridge $(type) $(address):$(port) $(certificate)
+// we strip out the 'bridge' prefix here
+let parseBridgeStrings = function(aBridgeStrings) {
+
+ // replace carriage returns ('\r') with new lines ('\n')
+ aBridgeStrings = aBridgeStrings.replace(/\r/g, "\n");
+ // then replace contiguous new lines ('\n') with a single one
+ aBridgeStrings = aBridgeStrings.replace(/[\n]+/g, "\n");
+
+ // split on the newline and for each bridge string: trim, remove starting 'bridge' string
+ // finally discard entries that are empty strings; empty strings could occur if we receive
+ // a new line containing only whitespace
+ let splitStrings = aBridgeStrings.split("\n");
+ return splitStrings.map(val => val.trim().replace(/^bridge\s+/i, ""))
+ .filter(bridgeString => bridgeString != "");
+};
+
+// expecting a ',' delimited list of ints with possible white space between
+// returns an array of ints
+let parsePortList = function(aPortListString) {
+ let splitStrings = aPortListString.split(",");
+ return splitStrings.map(val => parsePort(val.trim()));
+};
diff --git a/browser/components/torpreferences/content/requestBridgeDialog.jsm b/browser/components/torpreferences/content/requestBridgeDialog.jsm
new file mode 100644
index 000000000000..45419d001a7b
--- /dev/null
+++ b/browser/components/torpreferences/content/requestBridgeDialog.jsm
@@ -0,0 +1,202 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["RequestBridgeDialog"];
+
+const { BridgeDB } = ChromeUtils.import("resource:///modules/BridgeDB.jsm");
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class RequestBridgeDialog {
+ constructor() {
+ this._dialog = null;
+ this._submitButton = null;
+ this._dialogDescription = null;
+ this._captchaImage = null;
+ this._captchaEntryTextbox = null;
+ this._captchaRefreshButton = null;
+ this._incorrectCaptchaHbox = null;
+ this._incorrectCaptchaLabel = null;
+ this._bridges = [];
+ this._proxyURI = null;
+ }
+
+ static get selectors() {
+ return {
+ submitButton:
+ "accept" /* not really a selector but a key for dialog's getButton */,
+ dialogDescription: "description#torPreferences-requestBridge-description",
+ captchaImage: "image#torPreferences-requestBridge-captchaImage",
+ captchaEntryTextbox: "input#torPreferences-requestBridge-captchaTextbox",
+ refreshCaptchaButton:
+ "button#torPreferences-requestBridge-refreshCaptchaButton",
+ incorrectCaptchaHbox:
+ "hbox#torPreferences-requestBridge-incorrectCaptchaHbox",
+ incorrectCaptchaLabel:
+ "label#torPreferences-requestBridge-incorrectCaptchaError",
+ };
+ }
+
+ _populateXUL(dialog) {
+ const selectors = RequestBridgeDialog.selectors;
+
+ this._dialog = dialog;
+ const dialogWin = dialog.parentElement;
+ dialogWin.setAttribute(
+ "title",
+ TorStrings.settings.requestBridgeDialogTitle
+ );
+ // user may have opened a Request Bridge dialog in another tab, so update the
+ // CAPTCHA image or close out the dialog if we have a bridge list
+ this._dialog.addEventListener("focusin", () => {
+ const uri = BridgeDB.currentCaptchaImage;
+ const bridges = BridgeDB.currentBridges;
+
+ // new captcha image
+ if (uri) {
+ this._setcaptchaImage(uri);
+ } else if (bridges) {
+ this._bridges = bridges;
+ this._submitButton.disabled = false;
+ this._dialog.cancelDialog();
+ }
+ });
+
+ this._submitButton = this._dialog.getButton(selectors.submitButton);
+ this._submitButton.setAttribute("label", TorStrings.settings.submitCaptcha);
+ this._submitButton.disabled = true;
+ this._dialog.addEventListener("dialogaccept", e => {
+ e.preventDefault();
+ this.onSubmitCaptcha();
+ });
+
+ this._dialogDescription = this._dialog.querySelector(
+ selectors.dialogDescription
+ );
+ this._dialogDescription.textContent =
+ TorStrings.settings.contactingBridgeDB;
+
+ this._captchaImage = this._dialog.querySelector(selectors.captchaImage);
+
+ // request captcha from bridge db
+ BridgeDB.requestNewCaptchaImage(this._proxyURI).then(uri => {
+ this._setcaptchaImage(uri);
+ });
+
+ this._captchaEntryTextbox = this._dialog.querySelector(
+ selectors.captchaEntryTextbox
+ );
+ this._captchaEntryTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.captchaTextboxPlaceholder
+ );
+ this._captchaEntryTextbox.disabled = true;
+ // disable submit if entry textbox is empty
+ this._captchaEntryTextbox.oninput = () => {
+ this._submitButton.disabled = this._captchaEntryTextbox.value == "";
+ };
+
+ this._captchaRefreshButton = this._dialog.querySelector(
+ selectors.refreshCaptchaButton
+ );
+ this._captchaRefreshButton.disabled = true;
+
+ this._incorrectCaptchaHbox = this._dialog.querySelector(
+ selectors.incorrectCaptchaHbox
+ );
+ this._incorrectCaptchaLabel = this._dialog.querySelector(
+ selectors.incorrectCaptchaLabel
+ );
+ this._incorrectCaptchaLabel.setAttribute(
+ "value",
+ TorStrings.settings.incorrectCaptcha
+ );
+
+ return true;
+ }
+
+ _setcaptchaImage(uri) {
+ if (uri != this._captchaImage.src) {
+ this._captchaImage.src = uri;
+ this._dialogDescription.textContent = TorStrings.settings.solveTheCaptcha;
+ this._setUIDisabled(false);
+ this._captchaEntryTextbox.focus();
+ this._captchaEntryTextbox.select();
+ }
+ }
+
+ _setUIDisabled(disabled) {
+ this._submitButton.disabled = this._captchaGuessIsEmpty() || disabled;
+ this._captchaEntryTextbox.disabled = disabled;
+ this._captchaRefreshButton.disabled = disabled;
+ }
+
+ _captchaGuessIsEmpty() {
+ return this._captchaEntryTextbox.value == "";
+ }
+
+ init(window, dialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(dialog);
+ }, 0);
+ }
+
+ close() {
+ BridgeDB.close();
+ }
+
+ /*
+ Event Handlers
+ */
+ onSubmitCaptcha() {
+ let captchaText = this._captchaEntryTextbox.value.trim();
+ // noop if the field is empty
+ if (captchaText == "") {
+ return;
+ }
+
+ // freeze ui while we make request
+ this._setUIDisabled(true);
+ this._incorrectCaptchaHbox.style.visibility = "hidden";
+
+ BridgeDB.submitCaptchaGuess(captchaText)
+ .then(aBridges => {
+ this._bridges = aBridges;
+
+ this._submitButton.disabled = false;
+ // This was successful, but use cancelDialog() to close, since
+ // we intercept the `dialogaccept` event.
+ this._dialog.cancelDialog();
+ })
+ .catch(aError => {
+ this._bridges = [];
+ this._setUIDisabled(false);
+ this._incorrectCaptchaHbox.style.visibility = "visible";
+ });
+ }
+
+ onRefreshCaptcha() {
+ this._setUIDisabled(true);
+ this._captchaImage.src = "";
+ this._dialogDescription.textContent =
+ TorStrings.settings.contactingBridgeDB;
+ this._captchaEntryTextbox.value = "";
+ this._incorrectCaptchaHbox.style.visibility = "hidden";
+
+ BridgeDB.requestNewCaptchaImage(this._proxyURI).then(uri => {
+ this._setcaptchaImage(uri);
+ });
+ }
+
+ openDialog(gSubDialog, aProxyURI, aCloseCallback) {
+ this._proxyURI = aProxyURI;
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/requestBridgeDialog.xhtml",
+ "resizable=yes",
+ this,
+ () => {
+ this.close();
+ aCloseCallback(this._bridges);
+ }
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/requestBridgeDialog.xhtml b/browser/components/torpreferences/content/requestBridgeDialog.xhtml
new file mode 100644
index 000000000000..64c4507807fb
--- /dev/null
+++ b/browser/components/torpreferences/content/requestBridgeDialog.xhtml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-requestBridge-dialog"
+ buttons="accept,cancel">
+ <!-- ok, so ​ is a zero-width space. We need to have *something* in the innerText so that XUL knows how tall the
+ description node is so that it can determine how large to make the dialog element's inner draw area. If we have
+ nothing in the innerText, then it collapse to 0 height, and the contents of the dialog ends up partially hidden >:( -->
+ <description id="torPreferences-requestBridge-description">​</description>
+ <!-- init to transparent 400x125 png -->
+ <image id="torPreferences-requestBridge-captchaImage" flex="1"/>
+ <hbox id="torPreferences-requestBridge-inputHbox">
+ <html:input id="torPreferences-requestBridge-captchaTextbox" type="text" style="-moz-box-flex: 1;"/>
+ <button id="torPreferences-requestBridge-refreshCaptchaButton"
+ image="chrome://browser/skin/reload.svg"
+ oncommand="requestBridgeDialog.onRefreshCaptcha();"/>
+ </hbox>
+ <hbox id="torPreferences-requestBridge-incorrectCaptchaHbox" align="center">
+ <image id="torPreferences-requestBridge-errorIcon" />
+ <label id="torPreferences-requestBridge-incorrectCaptchaError" flex="1"/>
+ </hbox>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let requestBridgeDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-requestBridge-dialog");
+ requestBridgeDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torBridgeSettings.jsm b/browser/components/torpreferences/content/torBridgeSettings.jsm
new file mode 100644
index 000000000000..ceb61d3ec972
--- /dev/null
+++ b/browser/components/torpreferences/content/torBridgeSettings.jsm
@@ -0,0 +1,325 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "TorBridgeSource",
+ "TorBridgeSettings",
+ "makeTorBridgeSettingsNone",
+ "makeTorBridgeSettingsBuiltin",
+ "makeTorBridgeSettingsBridgeDB",
+ "makeTorBridgeSettingsUserProvided",
+];
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+const TorBridgeSource = {
+ NONE: "NONE",
+ BUILTIN: "BUILTIN",
+ BRIDGEDB: "BRIDGEDB",
+ USERPROVIDED: "USERPROVIDED",
+};
+
+class TorBridgeSettings {
+ constructor() {
+ this._bridgeSource = TorBridgeSource.NONE;
+ this._selectedDefaultBridgeType = null;
+ this._bridgeStrings = [];
+ }
+
+ get selectedDefaultBridgeType() {
+ if (this._bridgeSource == TorBridgeSource.BUILTIN) {
+ return this._selectedDefaultBridgeType;
+ }
+ return undefined;
+ }
+
+ get bridgeSource() {
+ return this._bridgeSource;
+ }
+
+ // for display
+ get bridgeStrings() {
+ return this._bridgeStrings.join("\n");
+ }
+
+ // raw
+ get bridgeStringsArray() {
+ return this._bridgeStrings;
+ }
+
+ static get defaultBridgeTypes() {
+ if (TorBridgeSettings._defaultBridgeTypes) {
+ return TorBridgeSettings._defaultBridgeTypes;
+ }
+
+ let bridgeListBranch = Services.prefs.getBranch(
+ TorStrings.preferenceBranches.defaultBridge
+ );
+ let bridgePrefs = bridgeListBranch.getChildList("", {});
+
+ // an unordered set for shoving bridge types into
+ let bridgeTypes = new Set();
+ // look for keys ending in ".N" and treat string before that as the bridge type
+ const pattern = /\.[0-9]+$/;
+ for (const key of bridgePrefs) {
+ const offset = key.search(pattern);
+ if (offset != -1) {
+ const bt = key.substring(0, offset);
+ bridgeTypes.add(bt);
+ }
+ }
+
+ // recommended bridge type goes first in the list
+ let recommendedBridgeType = Services.prefs.getCharPref(
+ TorStrings.preferenceKeys.recommendedBridgeType,
+ null
+ );
+
+ let retval = [];
+ if (recommendedBridgeType && bridgeTypes.has(recommendedBridgeType)) {
+ retval.push(recommendedBridgeType);
+ }
+
+ for (const bridgeType of bridgeTypes.values()) {
+ if (bridgeType != recommendedBridgeType) {
+ retval.push(bridgeType);
+ }
+ }
+
+ // cache off
+ TorBridgeSettings._defaultBridgeTypes = retval;
+ return retval;
+ }
+
+ _readDefaultBridges(aBridgeType) {
+ let bridgeBranch = Services.prefs.getBranch(
+ TorStrings.preferenceBranches.defaultBridge
+ );
+ let bridgeBranchPrefs = bridgeBranch.getChildList("", {});
+
+ let retval = [];
+
+ // regex matches against strings ending in ".N" where N is a positive integer
+ let pattern = /\.[0-9]+$/;
+ for (const key of bridgeBranchPrefs) {
+ // verify the location of the match is the correct offset required for aBridgeType
+ // to fit, and that the string begins with aBridgeType
+ if (
+ key.search(pattern) == aBridgeType.length &&
+ key.startsWith(aBridgeType)
+ ) {
+ let bridgeStr = bridgeBranch.getCharPref(key);
+ retval.push(bridgeStr);
+ }
+ }
+
+ // fisher-yates shuffle
+ // shuffle so that Tor Browser users don't all try the built-in bridges in the same order
+ for (let i = retval.length - 1; i > 0; --i) {
+ // number n such that 0.0 <= n < 1.0
+ const n = Math.random();
+ // integer j such that 0 <= j <= i
+ const j = Math.floor(n * (i + 1));
+
+ // swap values at indices i and j
+ const tmp = retval[i];
+ retval[i] = retval[j];
+ retval[j] = tmp;
+ }
+
+ return retval;
+ }
+
+ _readBridgeDBBridges() {
+ let bridgeBranch = Services.prefs.getBranch(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}`
+ );
+ let bridgeBranchPrefs = bridgeBranch.getChildList("", {});
+ // the child prefs do not come in any particular order so sort the keys
+ // so the values can be compared to what we get out off torrc
+ bridgeBranchPrefs.sort();
+
+ // just assume all of the prefs under the parent point to valid bridge string
+ let retval = bridgeBranchPrefs.map(key =>
+ bridgeBranch.getCharPref(key).trim()
+ );
+
+ return retval;
+ }
+
+ _readTorrcBridges() {
+ let bridgeList = TorProtocolService.readStringArraySetting(
+ TorStrings.configKeys.bridgeList
+ );
+
+ let retval = [];
+ for (const line of bridgeList) {
+ let trimmedLine = line.trim();
+ if (trimmedLine) {
+ retval.push(trimmedLine);
+ }
+ }
+
+ return retval;
+ }
+
+ // analagous to initBridgeSettings()
+ readSettings() {
+ // restore to defaults
+ this._bridgeSource = TorBridgeSource.NONE;
+ this._selectedDefaultBridgeType = null;
+ this._bridgeStrings = [];
+
+ // So the way tor-launcher determines the origin of the configured bridges is a bit
+ // weird and depends on inferring our scenario based on some firefox prefs and the
+ // relationship between the saved list of bridges in about:config vs the list saved in torrc
+
+ // first off, if "extensions.torlauncher.default_bridge_type" is set to one of our
+ // builtin default types (obfs4, meek-azure, snowflake, etc) then we provide the
+ // bridges in "extensions.torlauncher.default_bridge.*" (filtered by our default_bridge_type)
+
+ // next, we compare the list of bridges saved in torrc to the bridges stored in the
+ // "extensions.torlauncher.bridgedb_bridge."" branch. If they match *exactly* then we assume
+ // the bridges were retrieved from BridgeDB and use those. If the torrc list is empty then we know
+ // we have no bridge settings
+
+ // finally, if none of the previous conditions are not met, it is assumed the bridges stored in
+ // torrc are user-provided
+
+ // what we should(?) do once we excise tor-launcher entirely is explicitly store an int/enum in
+ // about:config that tells us which scenario we are in so we don't have to guess
+
+ let defaultBridgeType = Services.prefs.getCharPref(
+ TorStrings.preferenceKeys.defaultBridgeType,
+ null
+ );
+
+ // check if source is BUILTIN
+ if (defaultBridgeType) {
+ this._bridgeStrings = this._readDefaultBridges(defaultBridgeType);
+ this._bridgeSource = TorBridgeSource.BUILTIN;
+ this._selectedDefaultBridgeType = defaultBridgeType;
+ return;
+ }
+
+ let torrcBridges = this._readTorrcBridges();
+
+ // no stored bridges means no bridge is in use
+ if (torrcBridges.length == 0) {
+ this._bridgeStrings = [];
+ this._bridgeSource = TorBridgeSource.NONE;
+ return;
+ }
+
+ let bridgedbBridges = this._readBridgeDBBridges();
+
+ // if these two lists are equal then we got our bridges from bridgedb
+ // ie: same element in identical order
+ let arraysEqual = (left, right) => {
+ if (left.length != right.length) {
+ return false;
+ }
+ const length = left.length;
+ for (let i = 0; i < length; ++i) {
+ if (left[i] != right[i]) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ // agreement between prefs and torrc means bridgedb bridges
+ if (arraysEqual(torrcBridges, bridgedbBridges)) {
+ this._bridgeStrings = torrcBridges;
+ this._bridgeSource = TorBridgeSource.BRIDGEDB;
+ return;
+ }
+
+ // otherwise they must be user provided
+ this._bridgeStrings = torrcBridges;
+ this._bridgeSource = TorBridgeSource.USERPROVIDED;
+ }
+
+ writeSettings() {
+ let settingsObject = new Map();
+
+ // init tor bridge settings to null
+ settingsObject.set(TorStrings.configKeys.useBridges, null);
+ settingsObject.set(TorStrings.configKeys.bridgeList, null);
+
+ // clear bridge related firefox prefs
+ Services.prefs.setCharPref(TorStrings.preferenceKeys.defaultBridgeType, "");
+ let bridgeBranch = Services.prefs.getBranch(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}`
+ );
+ let bridgeBranchPrefs = bridgeBranch.getChildList("", {});
+ for (const pref of bridgeBranchPrefs) {
+ Services.prefs.clearUserPref(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}${pref}`
+ );
+ }
+
+ switch (this._bridgeSource) {
+ case TorBridgeSource.BUILTIN:
+ // set builtin bridge type to use in prefs
+ Services.prefs.setCharPref(
+ TorStrings.preferenceKeys.defaultBridgeType,
+ this._selectedDefaultBridgeType
+ );
+ break;
+ case TorBridgeSource.BRIDGEDB:
+ // save bridges off to prefs
+ for (let i = 0; i < this.bridgeStringsArray.length; ++i) {
+ Services.prefs.setCharPref(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}${i}`,
+ this.bridgeStringsArray[i]
+ );
+ }
+ break;
+ }
+
+ // write over our bridge list if bridges are enabled
+ if (this._bridgeSource != TorBridgeSource.NONE) {
+ settingsObject.set(TorStrings.configKeys.useBridges, true);
+ settingsObject.set(
+ TorStrings.configKeys.bridgeList,
+ this.bridgeStringsArray
+ );
+ }
+ TorProtocolService.writeSettings(settingsObject);
+ }
+}
+
+function makeTorBridgeSettingsNone() {
+ return new TorBridgeSettings();
+}
+
+function makeTorBridgeSettingsBuiltin(aBridgeType) {
+ let retval = new TorBridgeSettings();
+ retval._bridgeSource = TorBridgeSource.BUILTIN;
+ retval._selectedDefaultBridgeType = aBridgeType;
+ retval._bridgeStrings = retval._readDefaultBridges(aBridgeType);
+
+ return retval;
+}
+
+function makeTorBridgeSettingsBridgeDB(aBridges) {
+ let retval = new TorBridgeSettings();
+ retval._bridgeSource = TorBridgeSource.BRIDGEDB;
+ retval._selectedDefaultBridgeType = null;
+ retval._bridgeStrings = aBridges;
+
+ return retval;
+}
+
+function makeTorBridgeSettingsUserProvided(aBridges) {
+ let retval = new TorBridgeSettings();
+ retval._bridgeSource = TorBridgeSource.USERPROVIDED;
+ retval._selectedDefaultBridgeType = null;
+ retval._bridgeStrings = aBridges;
+
+ return retval;
+}
diff --git a/browser/components/torpreferences/content/torCategory.inc.xhtml b/browser/components/torpreferences/content/torCategory.inc.xhtml
new file mode 100644
index 000000000000..abe56200f571
--- /dev/null
+++ b/browser/components/torpreferences/content/torCategory.inc.xhtml
@@ -0,0 +1,9 @@
+<richlistitem id="category-tor"
+ class="category"
+ value="paneTor"
+ helpTopic="prefs-tor"
+ align="center"
+ hidden="true">
+ <image class="category-icon"/>
+ <label id="torPreferences-labelCategory" class="category-name" flex="1" value="Tor"/>
+</richlistitem>
diff --git a/browser/components/torpreferences/content/torFirewallSettings.jsm b/browser/components/torpreferences/content/torFirewallSettings.jsm
new file mode 100644
index 000000000000..e77f18ef2fae
--- /dev/null
+++ b/browser/components/torpreferences/content/torFirewallSettings.jsm
@@ -0,0 +1,72 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "TorFirewallSettings",
+ "makeTorFirewallSettingsNone",
+ "makeTorFirewallSettingsCustom",
+];
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+const { parseAddrPortList } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/parseFunctions.jsm"
+);
+
+class TorFirewallSettings {
+ constructor() {
+ this._allowedPorts = [];
+ }
+
+ get portsConfigurationString() {
+ let portStrings = this._allowedPorts.map(port => `*:${port}`);
+ return portStrings.join(",");
+ }
+
+ get commaSeparatedListString() {
+ return this._allowedPorts.join(",");
+ }
+
+ get hasPorts() {
+ return this._allowedPorts.length > 0;
+ }
+
+ readSettings() {
+ let addressPortList = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.reachableAddresses
+ );
+
+ let allowedPorts = [];
+ if (addressPortList) {
+ allowedPorts = parseAddrPortList(addressPortList);
+ }
+ this._allowedPorts = allowedPorts;
+ }
+
+ writeSettings() {
+ let settingsObject = new Map();
+
+ // init to null so Tor daemon resets if no ports
+ settingsObject.set(TorStrings.configKeys.reachableAddresses, null);
+
+ if (this._allowedPorts.length > 0) {
+ settingsObject.set(
+ TorStrings.configKeys.reachableAddresses,
+ this.portsConfigurationString
+ );
+ }
+
+ TorProtocolService.writeSettings(settingsObject);
+ }
+}
+
+function makeTorFirewallSettingsNone() {
+ return new TorFirewallSettings();
+}
+
+function makeTorFirewallSettingsCustom(aPortsList) {
+ let retval = new TorFirewallSettings();
+ retval._allowedPorts = aPortsList;
+ return retval;
+}
diff --git a/browser/components/torpreferences/content/torLogDialog.jsm b/browser/components/torpreferences/content/torLogDialog.jsm
new file mode 100644
index 000000000000..ba4b76738447
--- /dev/null
+++ b/browser/components/torpreferences/content/torLogDialog.jsm
@@ -0,0 +1,66 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorLogDialog"];
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class TorLogDialog {
+ constructor() {
+ this._dialog = null;
+ this._logTextarea = null;
+ this._copyLogButton = null;
+ }
+
+ static get selectors() {
+ return {
+ copyLogButton: "extra1",
+ logTextarea: "textarea#torPreferences-torDialog-textarea",
+ };
+ }
+
+ _populateXUL(aDialog) {
+ this._dialog = aDialog;
+ const dialogWin = this._dialog.parentElement;
+ dialogWin.setAttribute("title", TorStrings.settings.torLogDialogTitle);
+
+ this._logTextarea = this._dialog.querySelector(
+ TorLogDialog.selectors.logTextarea
+ );
+
+ this._copyLogButton = this._dialog.getButton(
+ TorLogDialog.selectors.copyLogButton
+ );
+ this._copyLogButton.setAttribute("label", TorStrings.settings.copyLog);
+ this._copyLogButton.addEventListener("command", () => {
+ this.copyTorLog();
+ });
+
+ this._logTextarea.value = TorProtocolService.getLog();
+ }
+
+ init(window, aDialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(aDialog);
+ }, 0);
+ }
+
+ copyTorLog() {
+ // Copy tor log messages to the system clipboard.
+ let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
+ Ci.nsIClipboardHelper
+ );
+ clipboard.copyString(this._logTextarea.value);
+ }
+
+ openDialog(gSubDialog) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/torLogDialog.xhtml",
+ "resizable=yes",
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/torLogDialog.xhtml b/browser/components/torpreferences/content/torLogDialog.xhtml
new file mode 100644
index 000000000000..9c17f8132978
--- /dev/null
+++ b/browser/components/torpreferences/content/torLogDialog.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-torLog-dialog"
+ buttons="accept,extra1">
+ <html:textarea
+ id="torPreferences-torDialog-textarea"
+ multiline="true"
+ readonly="true"/>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let torLogDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-torLog-dialog");
+ torLogDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js
new file mode 100644
index 000000000000..49054b5dac6a
--- /dev/null
+++ b/browser/components/torpreferences/content/torPane.js
@@ -0,0 +1,857 @@
+"use strict";
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+
+const {
+ TorBridgeSource,
+ TorBridgeSettings,
+ makeTorBridgeSettingsNone,
+ makeTorBridgeSettingsBuiltin,
+ makeTorBridgeSettingsBridgeDB,
+ makeTorBridgeSettingsUserProvided,
+} = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torBridgeSettings.jsm"
+);
+
+const {
+ TorProxyType,
+ TorProxySettings,
+ makeTorProxySettingsNone,
+ makeTorProxySettingsSocks4,
+ makeTorProxySettingsSocks5,
+ makeTorProxySettingsHTTPS,
+} = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torProxySettings.jsm"
+);
+const {
+ TorFirewallSettings,
+ makeTorFirewallSettingsNone,
+ makeTorFirewallSettingsCustom,
+} = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torFirewallSettings.jsm"
+);
+
+const { TorLogDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torLogDialog.jsm"
+);
+
+const { RequestBridgeDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/requestBridgeDialog.jsm"
+);
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+const { parsePort, parseBridgeStrings, parsePortList } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/parseFunctions.jsm"
+);
+
+/*
+ Tor Pane
+
+ Code for populating the XUL in about:preferences#tor, handling input events, interfacing with tor-launcher
+*/
+const gTorPane = (function() {
+ /* CSS selectors for all of the Tor Network DOM elements we need to access */
+ const selectors = {
+ category: {
+ title: "label#torPreferences-labelCategory",
+ },
+ torPreferences: {
+ header: "h1#torPreferences-header",
+ description: "span#torPreferences-description",
+ learnMore: "label#torPreferences-learnMore",
+ },
+ bridges: {
+ header: "h2#torPreferences-bridges-header",
+ description: "span#torPreferences-bridges-description",
+ learnMore: "label#torPreferences-bridges-learnMore",
+ useBridgeCheckbox: "checkbox#torPreferences-bridges-toggle",
+ bridgeSelectionRadiogroup:
+ "radiogroup#torPreferences-bridges-bridgeSelection",
+ builtinBridgeOption: "radio#torPreferences-bridges-radioBuiltin",
+ builtinBridgeList: "menulist#torPreferences-bridges-builtinList",
+ requestBridgeOption: "radio#torPreferences-bridges-radioRequestBridge",
+ requestBridgeButton: "button#torPreferences-bridges-buttonRequestBridge",
+ requestBridgeTextarea:
+ "textarea#torPreferences-bridges-textareaRequestBridge",
+ provideBridgeOption: "radio#torPreferences-bridges-radioProvideBridge",
+ provideBridgeDescription:
+ "description#torPreferences-bridges-descriptionProvideBridge",
+ provideBridgeTextarea:
+ "textarea#torPreferences-bridges-textareaProvideBridge",
+ },
+ advanced: {
+ header: "h2#torPreferences-advanced-header",
+ description: "span#torPreferences-advanced-description",
+ learnMore: "label#torPreferences-advanced-learnMore",
+ useProxyCheckbox: "checkbox#torPreferences-advanced-toggleProxy",
+ proxyTypeLabel: "label#torPreferences-localProxy-type",
+ proxyTypeList: "menulist#torPreferences-localProxy-builtinList",
+ proxyAddressLabel: "label#torPreferences-localProxy-address",
+ proxyAddressTextbox: "input#torPreferences-localProxy-textboxAddress",
+ proxyPortLabel: "label#torPreferences-localProxy-port",
+ proxyPortTextbox: "input#torPreferences-localProxy-textboxPort",
+ proxyUsernameLabel: "label#torPreferences-localProxy-username",
+ proxyUsernameTextbox: "input#torPreferences-localProxy-textboxUsername",
+ proxyPasswordLabel: "label#torPreferences-localProxy-password",
+ proxyPasswordTextbox: "input#torPreferences-localProxy-textboxPassword",
+ useFirewallCheckbox: "checkbox#torPreferences-advanced-toggleFirewall",
+ firewallAllowedPortsLabel: "label#torPreferences-advanced-allowedPorts",
+ firewallAllowedPortsTextbox:
+ "input#torPreferences-advanced-textboxAllowedPorts",
+ torLogsLabel: "label#torPreferences-torLogs",
+ torLogsButton: "button#torPreferences-buttonTorLogs",
+ },
+ }; /* selectors */
+
+ let retval = {
+ // cached frequently accessed DOM elements
+ _useBridgeCheckbox: null,
+ _bridgeSelectionRadiogroup: null,
+ _builtinBridgeOption: null,
+ _builtinBridgeMenulist: null,
+ _requestBridgeOption: null,
+ _requestBridgeButton: null,
+ _requestBridgeTextarea: null,
+ _provideBridgeOption: null,
+ _provideBridgeTextarea: null,
+ _useProxyCheckbox: null,
+ _proxyTypeLabel: null,
+ _proxyTypeMenulist: null,
+ _proxyAddressLabel: null,
+ _proxyAddressTextbox: null,
+ _proxyPortLabel: null,
+ _proxyPortTextbox: null,
+ _proxyUsernameLabel: null,
+ _proxyUsernameTextbox: null,
+ _proxyPasswordLabel: null,
+ _proxyPasswordTextbox: null,
+ _useFirewallCheckbox: null,
+ _allowedPortsLabel: null,
+ _allowedPortsTextbox: null,
+
+ // tor network settings
+ _bridgeSettings: null,
+ _proxySettings: null,
+ _firewallSettings: null,
+
+ // disables the provided list of elements
+ _setElementsDisabled(elements, disabled) {
+ for (let currentElement of elements) {
+ currentElement.disabled = disabled;
+ }
+ },
+
+ // populate xul with strings and cache the relevant elements
+ _populateXUL() {
+ // saves tor settings to disk when navigate away from about:preferences
+ window.addEventListener("blur", val => {
+ TorProtocolService.flushSettings();
+ });
+
+ document
+ .querySelector(selectors.category.title)
+ .setAttribute("value", TorStrings.settings.categoryTitle);
+
+ let prefpane = document.getElementById("mainPrefPane");
+
+ // Heading
+ prefpane.querySelector(selectors.torPreferences.header).innerText =
+ TorStrings.settings.torPreferencesHeading;
+ prefpane.querySelector(selectors.torPreferences.description).textContent =
+ TorStrings.settings.torPreferencesDescription;
+ {
+ let learnMore = prefpane.querySelector(
+ selectors.torPreferences.learnMore
+ );
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute(
+ "href",
+ TorStrings.settings.learnMoreTorBrowserURL
+ );
+ }
+
+ // Bridge setup
+ prefpane.querySelector(selectors.bridges.header).innerText =
+ TorStrings.settings.bridgesHeading;
+ prefpane.querySelector(selectors.bridges.description).textContent =
+ TorStrings.settings.bridgesDescription;
+ {
+ let learnMore = prefpane.querySelector(selectors.bridges.learnMore);
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute("href", TorStrings.settings.learnMoreBridgesURL);
+ }
+
+ this._useBridgeCheckbox = prefpane.querySelector(
+ selectors.bridges.useBridgeCheckbox
+ );
+ this._useBridgeCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useBridge
+ );
+ this._useBridgeCheckbox.addEventListener("command", e => {
+ const checked = this._useBridgeCheckbox.checked;
+ gTorPane.onToggleBridge(checked).onUpdateBridgeSettings();
+ });
+ this._bridgeSelectionRadiogroup = prefpane.querySelector(
+ selectors.bridges.bridgeSelectionRadiogroup
+ );
+ this._bridgeSelectionRadiogroup.value = TorBridgeSource.BUILTIN;
+ this._bridgeSelectionRadiogroup.addEventListener("command", e => {
+ const value = this._bridgeSelectionRadiogroup.value;
+ gTorPane.onSelectBridgeOption(value).onUpdateBridgeSettings();
+ });
+
+ // Builtin bridges
+ this._builtinBridgeOption = prefpane.querySelector(
+ selectors.bridges.builtinBridgeOption
+ );
+ this._builtinBridgeOption.setAttribute(
+ "label",
+ TorStrings.settings.selectBridge
+ );
+ this._builtinBridgeOption.setAttribute("value", TorBridgeSource.BUILTIN);
+ this._builtinBridgeMenulist = prefpane.querySelector(
+ selectors.bridges.builtinBridgeList
+ );
+ this._builtinBridgeMenulist.addEventListener("command", e => {
+ gTorPane.onUpdateBridgeSettings();
+ });
+
+ // Request bridge
+ this._requestBridgeOption = prefpane.querySelector(
+ selectors.bridges.requestBridgeOption
+ );
+ this._requestBridgeOption.setAttribute(
+ "label",
+ TorStrings.settings.requestBridgeFromTorProject
+ );
+ this._requestBridgeOption.setAttribute("value", TorBridgeSource.BRIDGEDB);
+ this._requestBridgeButton = prefpane.querySelector(
+ selectors.bridges.requestBridgeButton
+ );
+ this._requestBridgeButton.setAttribute(
+ "label",
+ TorStrings.settings.requestNewBridge
+ );
+ this._requestBridgeButton.addEventListener("command", () =>
+ gTorPane.onRequestBridge()
+ );
+ this._requestBridgeTextarea = prefpane.querySelector(
+ selectors.bridges.requestBridgeTextarea
+ );
+
+ // Provide a bridge
+ this._provideBridgeOption = prefpane.querySelector(
+ selectors.bridges.provideBridgeOption
+ );
+ this._provideBridgeOption.setAttribute(
+ "label",
+ TorStrings.settings.provideBridge
+ );
+ this._provideBridgeOption.setAttribute(
+ "value",
+ TorBridgeSource.USERPROVIDED
+ );
+ prefpane.querySelector(
+ selectors.bridges.provideBridgeDescription
+ ).textContent = TorStrings.settings.provideBridgeDirections;
+ this._provideBridgeTextarea = prefpane.querySelector(
+ selectors.bridges.provideBridgeTextarea
+ );
+ this._provideBridgeTextarea.setAttribute(
+ "placeholder",
+ TorStrings.settings.provideBridgePlaceholder
+ );
+ this._provideBridgeTextarea.addEventListener("blur", () => {
+ gTorPane.onUpdateBridgeSettings();
+ });
+
+ // Advanced setup
+ prefpane.querySelector(selectors.advanced.header).innerText =
+ TorStrings.settings.advancedHeading;
+ prefpane.querySelector(selectors.advanced.description).textContent =
+ TorStrings.settings.advancedDescription;
+ {
+ let learnMore = prefpane.querySelector(selectors.advanced.learnMore);
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute(
+ "href",
+ TorStrings.settings.learnMoreNetworkSettingsURL
+ );
+ }
+
+ // Local Proxy
+ this._useProxyCheckbox = prefpane.querySelector(
+ selectors.advanced.useProxyCheckbox
+ );
+ this._useProxyCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useLocalProxy
+ );
+ this._useProxyCheckbox.addEventListener("command", e => {
+ const checked = this._useProxyCheckbox.checked;
+ gTorPane.onToggleProxy(checked).onUpdateProxySettings();
+ });
+ this._proxyTypeLabel = prefpane.querySelector(
+ selectors.advanced.proxyTypeLabel
+ );
+ this._proxyTypeLabel.setAttribute("value", TorStrings.settings.proxyType);
+
+ let mockProxies = [
+ {
+ value: TorProxyType.SOCKS4,
+ label: TorStrings.settings.proxyTypeSOCKS4,
+ },
+ {
+ value: TorProxyType.SOCKS5,
+ label: TorStrings.settings.proxyTypeSOCKS5,
+ },
+ { value: TorProxyType.HTTPS, label: TorStrings.settings.proxyTypeHTTP },
+ ];
+ this._proxyTypeMenulist = prefpane.querySelector(
+ selectors.advanced.proxyTypeList
+ );
+ this._proxyTypeMenulist.addEventListener("command", e => {
+ const value = this._proxyTypeMenulist.value;
+ gTorPane.onSelectProxyType(value).onUpdateProxySettings();
+ });
+ for (let currentProxy of mockProxies) {
+ let menuEntry = document.createXULElement("menuitem");
+ menuEntry.setAttribute("value", currentProxy.value);
+ menuEntry.setAttribute("label", currentProxy.label);
+ this._proxyTypeMenulist
+ .querySelector("menupopup")
+ .appendChild(menuEntry);
+ }
+
+ this._proxyAddressLabel = prefpane.querySelector(
+ selectors.advanced.proxyAddressLabel
+ );
+ this._proxyAddressLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyAddress
+ );
+ this._proxyAddressTextbox = prefpane.querySelector(
+ selectors.advanced.proxyAddressTextbox
+ );
+ this._proxyAddressTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyAddressPlaceholder
+ );
+ this._proxyAddressTextbox.addEventListener("blur", () => {
+ gTorPane.onUpdateProxySettings();
+ });
+ this._proxyPortLabel = prefpane.querySelector(
+ selectors.advanced.proxyPortLabel
+ );
+ this._proxyPortLabel.setAttribute("value", TorStrings.settings.proxyPort);
+ this._proxyPortTextbox = prefpane.querySelector(
+ selectors.advanced.proxyPortTextbox
+ );
+ this._proxyPortTextbox.addEventListener("blur", () => {
+ gTorPane.onUpdateProxySettings();
+ });
+ this._proxyUsernameLabel = prefpane.querySelector(
+ selectors.advanced.proxyUsernameLabel
+ );
+ this._proxyUsernameLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyUsername
+ );
+ this._proxyUsernameTextbox = prefpane.querySelector(
+ selectors.advanced.proxyUsernameTextbox
+ );
+ this._proxyUsernameTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyUsernamePasswordPlaceholder
+ );
+ this._proxyUsernameTextbox.addEventListener("blur", () => {
+ gTorPane.onUpdateProxySettings();
+ });
+ this._proxyPasswordLabel = prefpane.querySelector(
+ selectors.advanced.proxyPasswordLabel
+ );
+ this._proxyPasswordLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyPassword
+ );
+ this._proxyPasswordTextbox = prefpane.querySelector(
+ selectors.advanced.proxyPasswordTextbox
+ );
+ this._proxyPasswordTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyUsernamePasswordPlaceholder
+ );
+ this._proxyPasswordTextbox.addEventListener("blur", () => {
+ gTorPane.onUpdateProxySettings();
+ });
+
+ // Local firewall
+ this._useFirewallCheckbox = prefpane.querySelector(
+ selectors.advanced.useFirewallCheckbox
+ );
+ this._useFirewallCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useFirewall
+ );
+ this._useFirewallCheckbox.addEventListener("command", e => {
+ const checked = this._useFirewallCheckbox.checked;
+ gTorPane.onToggleFirewall(checked).onUpdateFirewallSettings();
+ });
+ this._allowedPortsLabel = prefpane.querySelector(
+ selectors.advanced.firewallAllowedPortsLabel
+ );
+ this._allowedPortsLabel.setAttribute(
+ "value",
+ TorStrings.settings.allowedPorts
+ );
+ this._allowedPortsTextbox = prefpane.querySelector(
+ selectors.advanced.firewallAllowedPortsTextbox
+ );
+ this._allowedPortsTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.allowedPortsPlaceholder
+ );
+ this._allowedPortsTextbox.addEventListener("blur", () => {
+ gTorPane.onUpdateFirewallSettings();
+ });
+
+ // Tor logs
+ prefpane
+ .querySelector(selectors.advanced.torLogsLabel)
+ .setAttribute("value", TorStrings.settings.showTorDaemonLogs);
+ let torLogsButton = prefpane.querySelector(
+ selectors.advanced.torLogsButton
+ );
+ torLogsButton.setAttribute("label", TorStrings.settings.showLogs);
+ torLogsButton.addEventListener("command", () => {
+ gTorPane.onViewTorLogs();
+ });
+
+ // Disable all relevant elements by default
+ this._setElementsDisabled(
+ [
+ this._builtinBridgeOption,
+ this._builtinBridgeMenulist,
+ this._requestBridgeOption,
+ this._requestBridgeButton,
+ this._requestBridgeTextarea,
+ this._provideBridgeOption,
+ this._provideBridgeTextarea,
+ this._proxyTypeLabel,
+ this._proxyTypeMenulist,
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ this._allowedPortsLabel,
+ this._allowedPortsTextbox,
+ ],
+ true
+ );
+
+ // load bridge settings
+ let torBridgeSettings = new TorBridgeSettings();
+ torBridgeSettings.readSettings();
+
+ // populate the bridge list
+ for (let currentBridge of TorBridgeSettings.defaultBridgeTypes) {
+ let menuEntry = document.createXULElement("menuitem");
+ menuEntry.setAttribute("value", currentBridge);
+ menuEntry.setAttribute("label", currentBridge);
+ this._builtinBridgeMenulist
+ .querySelector("menupopup")
+ .appendChild(menuEntry);
+ }
+
+ this.onSelectBridgeOption(torBridgeSettings.bridgeSource);
+ this.onToggleBridge(
+ torBridgeSettings.bridgeSource != TorBridgeSource.NONE
+ );
+ switch (torBridgeSettings.bridgeSource) {
+ case TorBridgeSource.NONE:
+ break;
+ case TorBridgeSource.BUILTIN:
+ this._builtinBridgeMenulist.value =
+ torBridgeSettings.selectedDefaultBridgeType;
+ break;
+ case TorBridgeSource.BRIDGEDB:
+ this._requestBridgeTextarea.value = torBridgeSettings.bridgeStrings;
+ break;
+ case TorBridgeSource.USERPROVIDED:
+ this._provideBridgeTextarea.value = torBridgeSettings.bridgeStrings;
+ break;
+ }
+
+ this._bridgeSettings = torBridgeSettings;
+
+ // load proxy settings
+ let torProxySettings = new TorProxySettings();
+ torProxySettings.readSettings();
+
+ if (torProxySettings.type != TorProxyType.NONE) {
+ this.onToggleProxy(true);
+ this.onSelectProxyType(torProxySettings.type);
+ this._proxyAddressTextbox.value = torProxySettings.address;
+ this._proxyPortTextbox.value = torProxySettings.port;
+ this._proxyUsernameTextbox.value = torProxySettings.username;
+ this._proxyPasswordTextbox.value = torProxySettings.password;
+ }
+
+ this._proxySettings = torProxySettings;
+
+ // load firewall settings
+ let torFirewallSettings = new TorFirewallSettings();
+ torFirewallSettings.readSettings();
+
+ if (torFirewallSettings.hasPorts) {
+ this.onToggleFirewall(true);
+ this._allowedPortsTextbox.value =
+ torFirewallSettings.commaSeparatedListString;
+ }
+
+ this._firewallSettings = torFirewallSettings;
+ },
+
+ init() {
+ this._populateXUL();
+ },
+
+ // whether the page should be present in about:preferences
+ get enabled() {
+ return TorProtocolService.ownsTorDaemon;
+ },
+
+ //
+ // Callbacks
+ //
+
+ // callback when using bridges toggled
+ onToggleBridge(enabled) {
+ this._useBridgeCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ // first disable all the bridge related elements
+ this._setElementsDisabled(
+ [
+ this._builtinBridgeOption,
+ this._builtinBridgeMenulist,
+ this._requestBridgeOption,
+ this._requestBridgeButton,
+ this._requestBridgeTextarea,
+ this._provideBridgeOption,
+ this._provideBridgeTextarea,
+ ],
+ disabled
+ );
+
+ // and selectively re-enable based on the radiogroup's current value
+ if (enabled) {
+ this.onSelectBridgeOption(this._bridgeSelectionRadiogroup.value);
+ } else {
+ this.onSelectBridgeOption(TorBridgeSource.NONE);
+ }
+ return this;
+ },
+
+ // callback when a bridge option is selected
+ onSelectBridgeOption(source) {
+ // disable all of the bridge elements under radio buttons
+ this._setElementsDisabled(
+ [
+ this._builtinBridgeMenulist,
+ this._requestBridgeButton,
+ this._requestBridgeTextarea,
+ this._provideBridgeTextarea,
+ ],
+ true
+ );
+
+ if (source != TorBridgeSource.NONE) {
+ this._bridgeSelectionRadiogroup.value = source;
+ }
+
+ switch (source) {
+ case TorBridgeSource.BUILTIN: {
+ this._setElementsDisabled([this._builtinBridgeMenulist], false);
+ break;
+ }
+ case TorBridgeSource.BRIDGEDB: {
+ this._setElementsDisabled(
+ [this._requestBridgeButton, this._requestBridgeTextarea],
+ false
+ );
+ break;
+ }
+ case TorBridgeSource.USERPROVIDED: {
+ this._setElementsDisabled([this._provideBridgeTextarea], false);
+ break;
+ }
+ }
+ return this;
+ },
+
+ // called when the request bridge button is activated
+ onRequestBridge() {
+ let requestBridgeDialog = new RequestBridgeDialog();
+ requestBridgeDialog.openDialog(
+ gSubDialog,
+ this._proxySettings.proxyURI,
+ aBridges => {
+ if (aBridges.length > 0) {
+ let bridgeSettings = makeTorBridgeSettingsBridgeDB(aBridges);
+ bridgeSettings.writeSettings();
+ this._bridgeSettings = bridgeSettings;
+
+ this._requestBridgeTextarea.value = bridgeSettings.bridgeStrings;
+ }
+ }
+ );
+ return this;
+ },
+
+ // pushes bridge settings from UI to tor
+ onUpdateBridgeSettings() {
+ let bridgeSettings = null;
+
+ let source = this._useBridgeCheckbox.checked
+ ? this._bridgeSelectionRadiogroup.value
+ : TorBridgeSource.NONE;
+ switch (source) {
+ case TorBridgeSource.NONE: {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ break;
+ }
+ case TorBridgeSource.BUILTIN: {
+ // if there is a built-in bridge already selected, use that
+ let bridgeType = this._builtinBridgeMenulist.value;
+ if (bridgeType) {
+ bridgeSettings = makeTorBridgeSettingsBuiltin(bridgeType);
+ } else {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ }
+ break;
+ }
+ case TorBridgeSource.BRIDGEDB: {
+ // if there are bridgedb bridges saved in the text area, use them
+ let bridgeStrings = this._requestBridgeTextarea.value;
+ if (bridgeStrings) {
+ let bridgeStringList = parseBridgeStrings(bridgeStrings);
+ bridgeSettings = makeTorBridgeSettingsBridgeDB(bridgeStringList);
+ } else {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ }
+ break;
+ }
+ case TorBridgeSource.USERPROVIDED: {
+ // if bridges already exist in the text area, use them
+ let bridgeStrings = this._provideBridgeTextarea.value;
+ if (bridgeStrings) {
+ let bridgeStringList = parseBridgeStrings(bridgeStrings);
+ bridgeSettings = makeTorBridgeSettingsUserProvided(
+ bridgeStringList
+ );
+ } else {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ }
+ break;
+ }
+ }
+ bridgeSettings.writeSettings();
+ this._bridgeSettings = bridgeSettings;
+ return this;
+ },
+
+ // callback when proxy is toggled
+ onToggleProxy(enabled) {
+ this._useProxyCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ this._setElementsDisabled(
+ [
+ this._proxyTypeLabel,
+ this._proxyTypeMenulist,
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ disabled
+ );
+ this.onSelectProxyType(this._proxyTypeMenulist.value);
+ return this;
+ },
+
+ // callback when proxy type is changed
+ onSelectProxyType(value) {
+ if (value == "") {
+ value = TorProxyType.NONE;
+ }
+ this._proxyTypeMenulist.value = value;
+ switch (value) {
+ case TorProxyType.NONE: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ true
+ ); // DISABLE
+
+ this._proxyAddressTextbox.value = "";
+ this._proxyPortTextbox.value = "";
+ this._proxyUsernameTextbox.value = "";
+ this._proxyPasswordTextbox.value = "";
+ break;
+ }
+ case TorProxyType.SOCKS4: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ ],
+ false
+ ); // ENABLE
+ this._setElementsDisabled(
+ [
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ true
+ ); // DISABLE
+
+ this._proxyUsernameTextbox.value = "";
+ this._proxyPasswordTextbox.value = "";
+ break;
+ }
+ case TorProxyType.SOCKS5:
+ case TorProxyType.HTTPS: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ false
+ ); // ENABLE
+ break;
+ }
+ }
+ return this;
+ },
+
+ // pushes proxy settings from UI to tor
+ onUpdateProxySettings() {
+ const proxyType = this._useProxyCheckbox.checked
+ ? this._proxyTypeMenulist.value
+ : TorProxyType.NONE;
+ const addressString = this._proxyAddressTextbox.value;
+ const portString = this._proxyPortTextbox.value;
+ const usernameString = this._proxyUsernameTextbox.value;
+ const passwordString = this._proxyPasswordTextbox.value;
+
+ let proxySettings = null;
+
+ switch (proxyType) {
+ case TorProxyType.NONE:
+ proxySettings = makeTorProxySettingsNone();
+ break;
+ case TorProxyType.SOCKS4:
+ proxySettings = makeTorProxySettingsSocks4(
+ addressString,
+ parsePort(portString)
+ );
+ break;
+ case TorProxyType.SOCKS5:
+ proxySettings = makeTorProxySettingsSocks5(
+ addressString,
+ parsePort(portString),
+ usernameString,
+ passwordString
+ );
+ break;
+ case TorProxyType.HTTPS:
+ proxySettings = makeTorProxySettingsHTTPS(
+ addressString,
+ parsePort(portString),
+ usernameString,
+ passwordString
+ );
+ break;
+ }
+
+ proxySettings.writeSettings();
+ this._proxySettings = proxySettings;
+ return this;
+ },
+
+ // callback when firewall proxy is toggled
+ onToggleFirewall(enabled) {
+ this._useFirewallCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ this._setElementsDisabled(
+ [this._allowedPortsLabel, this._allowedPortsTextbox],
+ disabled
+ );
+
+ return this;
+ },
+
+ // pushes firewall settings from UI to tor
+ onUpdateFirewallSettings() {
+ let portListString = this._useFirewallCheckbox.checked
+ ? this._allowedPortsTextbox.value
+ : "";
+ let firewallSettings = null;
+
+ if (portListString) {
+ firewallSettings = makeTorFirewallSettingsCustom(
+ parsePortList(portListString)
+ );
+ } else {
+ firewallSettings = makeTorFirewallSettingsNone();
+ }
+
+ firewallSettings.writeSettings();
+ this._firewallSettings = firewallSettings;
+ return this;
+ },
+
+ onViewTorLogs() {
+ let torLogDialog = new TorLogDialog();
+ torLogDialog.openDialog(gSubDialog);
+ },
+ };
+ return retval;
+})(); /* gTorPane */
diff --git a/browser/components/torpreferences/content/torPane.xhtml b/browser/components/torpreferences/content/torPane.xhtml
new file mode 100644
index 000000000000..3c966b2b3726
--- /dev/null
+++ b/browser/components/torpreferences/content/torPane.xhtml
@@ -0,0 +1,123 @@
+<!-- Tor panel -->
+
+<script type="application/javascript"
+ src="chrome://browser/content/torpreferences/torPane.js"/>
+<html:template id="template-paneTor">
+<hbox id="torPreferencesCategory"
+ class="subcategory"
+ data-category="paneTor"
+ hidden="true">
+ <html:h1 id="torPreferences-header"/>
+</hbox>
+
+<groupbox data-category="paneTor"
+ hidden="true">
+ <description flex="1">
+ <html:span id="torPreferences-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+</groupbox>
+
+<!-- Bridges -->
+<groupbox id="torPreferences-bridges-group"
+ data-category="paneTor"
+ hidden="true">
+ <html:h2 id="torPreferences-bridges-header"/>
+ <description flex="1">
+ <html:span id="torPreferences-bridges-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-bridges-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+ <checkbox id="torPreferences-bridges-toggle"/>
+ <radiogroup id="torPreferences-bridges-bridgeSelection">
+ <hbox class="indent">
+ <radio id="torPreferences-bridges-radioBuiltin"/>
+ <spacer flex="1"/>
+ <menulist id="torPreferences-bridges-builtinList" class="torMarginFix">
+ <menupopup/>
+ </menulist>
+ </hbox>
+ <vbox class="indent">
+ <hbox>
+ <radio id="torPreferences-bridges-radioRequestBridge"/>
+ <space flex="1"/>
+ <button id="torPreferences-bridges-buttonRequestBridge" class="torMarginFix"/>
+ </hbox>
+ <html:textarea
+ id="torPreferences-bridges-textareaRequestBridge"
+ class="indent torMarginFix"
+ multiline="true"
+ rows="3"
+ readonly="true"/>
+ </vbox>
+ <hbox class="indent" flex="1">
+ <vbox flex="1">
+ <radio id="torPreferences-bridges-radioProvideBridge"/>
+ <description id="torPreferences-bridges-descriptionProvideBridge" class="indent"/>
+ <html:textarea
+ id="torPreferences-bridges-textareaProvideBridge"
+ class="indent torMarginFix"
+ multiline="true"
+ rows="3"/>
+ </vbox>
+ </hbox>
+ </radiogroup>
+</groupbox>
+
+<!-- Advanced -->
+<groupbox id="torPreferences-advanced-group"
+ data-category="paneTor"
+ hidden="true">
+ <html:h2 id="torPreferences-advanced-header"/>
+ <description flex="1">
+ <html:span id="torPreferences-advanced-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-advanced-learnMore" class="learnMore text-link" is="text-link" style="display:none"/>
+ </description>
+ <box id="torPreferences-advanced-grid">
+ <!-- Local Proxy -->
+ <hbox class="torPreferences-advanced-checkbox-container">
+ <checkbox id="torPreferences-advanced-toggleProxy"/>
+ </hbox>
+ <hbox class="indent" align="center">
+ <label id="torPreferences-localProxy-type"/>
+ </hbox>
+ <hbox align="center">
+ <spacer flex="1"/>
+ <menulist id="torPreferences-localProxy-builtinList" class="torMarginFix">
+ <menupopup/>
+ </menulist>
+ </hbox>
+ <hbox class="indent" align="center">
+ <label id="torPreferences-localProxy-address"/>
+ </hbox>
+ <hbox align="center">
+ <html:input id="torPreferences-localProxy-textboxAddress" type="text" class="torMarginFix"/>
+ <label id="torPreferences-localProxy-port"/>
+ <!-- proxy-port-input class style pulled from preferences.css and used in the vanilla proxy setup menu -->
+ <html:input id="torPreferences-localProxy-textboxPort" class="proxy-port-input torMarginFix" hidespinbuttons="true" type="number" min="0" max="65535" maxlength="5"/>
+ </hbox>
+ <hbox class="indent" align="center">
+ <label id="torPreferences-localProxy-username"/>
+ </hbox>
+ <hbox align="center">
+ <html:input id="torPreferences-localProxy-textboxUsername" type="text" class="torMarginFix"/>
+ <label id="torPreferences-localProxy-password"/>
+ <html:input id="torPreferences-localProxy-textboxPassword" class="torMarginFix" type="password"/>
+ </hbox>
+ <!-- Firewall -->
+ <hbox class="torPreferences-advanced-checkbox-container">
+ <checkbox id="torPreferences-advanced-toggleFirewall"/>
+ </hbox>
+ <hbox class="indent" align="center">
+ <label id="torPreferences-advanced-allowedPorts"/>
+ </hbox>
+ <hbox align="center">
+ <html:input id="torPreferences-advanced-textboxAllowedPorts" type="text" class="torMarginFix" value="80,443"/>
+ </hbox>
+ </box>
+ <hbox id="torPreferences-torDaemon-hbox" align="center">
+ <label id="torPreferences-torLogs"/>
+ <spacer flex="1"/>
+ <button id="torPreferences-buttonTorLogs" class="torMarginFix"/>
+ </hbox>
+</groupbox>
+</html:template>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css
new file mode 100644
index 000000000000..4dac2c457823
--- /dev/null
+++ b/browser/components/torpreferences/content/torPreferences.css
@@ -0,0 +1,77 @@
+#category-tor > .category-icon {
+ list-style-image: url("chrome://browser/content/torpreferences/torPreferencesIcon.svg");
+}
+
+#torPreferences-advanced-grid {
+ display: grid;
+ grid-template-columns: auto 1fr;
+}
+
+.torPreferences-advanced-checkbox-container {
+ grid-column: 1 / 3;
+}
+
+#torPreferences-localProxy-textboxAddress,
+#torPreferences-localProxy-textboxUsername,
+#torPreferences-localProxy-textboxPassword,
+#torPreferences-advanced-textboxAllowedPorts {
+ -moz-box-flex: 1;
+}
+
+hbox#torPreferences-torDaemon-hbox {
+ margin-top: 20px;
+}
+
+description#torPreferences-requestBridge-description {
+ /*margin-bottom: 1em;*/
+ min-height: 2em;
+}
+
+image#torPreferences-requestBridge-captchaImage {
+ margin: 1em;
+ min-height: 125px;
+}
+
+button#torPreferences-requestBridge-refreshCaptchaButton {
+ min-width: initial;
+}
+
+dialog#torPreferences-requestBridge-dialog > hbox {
+ margin-bottom: 1em;
+}
+
+/*
+ Various elements that really should be lining up don't because they have inconsistent margins
+*/
+.torMarginFix {
+ margin-left : 4px;
+ margin-right : 4px;
+}
+
+/*
+ This hbox is hidden by css here by default so that the
+ xul dialog allocates enough screen space for the error message
+ element, otherwise it gets cut off since dialog's overflow is hidden
+*/
+hbox#torPreferences-requestBridge-incorrectCaptchaHbox {
+ visibility: hidden;
+}
+
+image#torPreferences-requestBridge-errorIcon {
+ list-style-image: url("chrome://browser/skin/warning.svg");
+}
+
+groupbox#torPreferences-bridges-group textarea {
+ white-space: pre;
+ overflow: auto;
+}
+
+textarea#torPreferences-torDialog-textarea {
+ -moz-box-flex: 1;
+ font-family: monospace;
+ font-size: 0.8em;
+ white-space: pre;
+ overflow: auto;
+ /* 10 lines */
+ min-height: 20em;
+}
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torPreferencesIcon.svg b/browser/components/torpreferences/content/torPreferencesIcon.svg
new file mode 100644
index 000000000000..d7895f1107c5
--- /dev/null
+++ b/browser/components/torpreferences/content/torPreferencesIcon.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <g fill="context-fill" fill-opacity="context-fill-opacity" fill-rule="nonzero">
+ <path d="M12.0246161,21.8174863 L12.0246161,20.3628098 C16.6324777,20.3495038 20.3634751,16.6108555 20.3634751,11.9996673 C20.3634751,7.38881189 16.6324777,3.65016355 12.0246161,3.63685757 L12.0246161,2.18218107 C17.4358264,2.1958197 21.8178189,6.58546322 21.8178189,11.9996673 C21.8178189,17.4142042 17.4358264,21.8041803 12.0246161,21.8174863 L12.0246161,21.8174863 Z M12.0246161,16.7259522 C14.623607,16.7123136 16.7272828,14.6023175 16.7272828,11.9996673 C16.7272828,9.39734991 14.623607,7.28735377 12.0246161,7.27371516 L12.0246161,5.81937131 C15.4272884,5.8326773 18.1819593,8.59400123 18.1819593,11.9996673 C18.1819593,15.4056661 15.4272884,18.1669901 12.0246161,18.1802961 L12.0246161,16.7259522 Z M12.0246161,9.45556355 C13.4187503,9.46886953 14.5454344,10.6022066 14.5454344,11.9996673 C14.5454344,13.3974608 13.4187503,14.5307978 12.0246161,14.5441038 L12.0246161,9.45556355 Z M0,11.9996673 C0,18.6273771 5.37229031,24 12,24 C18.6273771,24 24,18.6273771 24,11.9996673 C24,5.37229031
18.6273771,0 12,0 C5.37229031,0 0,5.37229031 0,11.9996673 Z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torProxySettings.jsm b/browser/components/torpreferences/content/torProxySettings.jsm
new file mode 100644
index 000000000000..98bb5e8d5cbf
--- /dev/null
+++ b/browser/components/torpreferences/content/torProxySettings.jsm
@@ -0,0 +1,245 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "TorProxyType",
+ "TorProxySettings",
+ "makeTorProxySettingsNone",
+ "makeTorProxySettingsSocks4",
+ "makeTorProxySettingsSocks5",
+ "makeTorProxySettingsHTTPS",
+];
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+const { parseAddrPort, parseUsernamePassword } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/parseFunctions.jsm"
+);
+
+const TorProxyType = {
+ NONE: "NONE",
+ SOCKS4: "SOCKS4",
+ SOCKS5: "SOCKS5",
+ HTTPS: "HTTPS",
+};
+
+class TorProxySettings {
+ constructor() {
+ this._proxyType = TorProxyType.NONE;
+ this._proxyAddress = undefined;
+ this._proxyPort = undefined;
+ this._proxyUsername = undefined;
+ this._proxyPassword = undefined;
+ }
+
+ get type() {
+ return this._proxyType;
+ }
+ get address() {
+ return this._proxyAddress;
+ }
+ get port() {
+ return this._proxyPort;
+ }
+ get username() {
+ return this._proxyUsername;
+ }
+ get password() {
+ return this._proxyPassword;
+ }
+ get proxyURI() {
+ switch (this._proxyType) {
+ case TorProxyType.SOCKS4:
+ return `socks4a://${this._proxyAddress}:${this._proxyPort}`;
+ case TorProxyType.SOCKS5:
+ if (this._proxyUsername) {
+ return `socks5://${this._proxyUsername}:${this._proxyPassword}@${
+ this._proxyAddress
+ }:${this._proxyPort}`;
+ }
+ return `socks5://${this._proxyAddress}:${this._proxyPort}`;
+ case TorProxyType.HTTPS:
+ if (this._proxyUsername) {
+ return `http://${this._proxyUsername}:${this._proxyPassword}@${
+ this._proxyAddress
+ }:${this._proxyPort}`;
+ }
+ return `http://${this._proxyAddress}:${this._proxyPort}`;
+ }
+ return undefined;
+ }
+
+ // attempts to read proxy settings from Tor daemon
+ readSettings() {
+ // SOCKS4
+ {
+ let addressPort = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks4Proxy
+ );
+ if (addressPort) {
+ // address+port
+ let [proxyAddress, proxyPort] = parseAddrPort(addressPort);
+
+ this._proxyType = TorProxyType.SOCKS4;
+ this._proxyAddress = proxyAddress;
+ this._proxyPort = proxyPort;
+ this._proxyUsername = "";
+ this._proxyPassword = "";
+
+ return;
+ }
+ }
+
+ // SOCKS5
+ {
+ let addressPort = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks5Proxy
+ );
+
+ if (addressPort) {
+ // address+port
+ let [proxyAddress, proxyPort] = parseAddrPort(addressPort);
+ // username
+ let proxyUsername = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks5ProxyUsername
+ );
+ // password
+ let proxyPassword = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks5ProxyPassword
+ );
+
+ this._proxyType = TorProxyType.SOCKS5;
+ this._proxyAddress = proxyAddress;
+ this._proxyPort = proxyPort;
+ this._proxyUsername = proxyUsername;
+ this._proxyPassword = proxyPassword;
+
+ return;
+ }
+ }
+
+ // HTTP
+ {
+ let addressPort = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.httpsProxy
+ );
+
+ if (addressPort) {
+ // address+port
+ let [proxyAddress, proxyPort] = parseAddrPort(addressPort);
+
+ // username:password
+ let proxyAuthenticator = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.httpsProxyAuthenticator
+ );
+
+ let [proxyUsername, proxyPassword] = ["", ""];
+ if (proxyAuthenticator) {
+ [proxyUsername, proxyPassword] = parseUsernamePassword(
+ proxyAuthenticator
+ );
+ }
+
+ this._proxyType = TorProxyType.HTTPS;
+ this._proxyAddress = proxyAddress;
+ this._proxyPort = proxyPort;
+ this._proxyUsername = proxyUsername;
+ this._proxyPassword = proxyPassword;
+ }
+ }
+ // no proxy settings
+ } /* TorProxySettings::ReadFromTor() */
+
+ // attempts to write proxy settings to Tor daemon
+ // throws on error
+ writeSettings() {
+ let settingsObject = new Map();
+
+ // init proxy related settings to null so Tor daemon resets them
+ settingsObject.set(TorStrings.configKeys.socks4Proxy, null);
+ settingsObject.set(TorStrings.configKeys.socks5Proxy, null);
+ settingsObject.set(TorStrings.configKeys.socks5ProxyUsername, null);
+ settingsObject.set(TorStrings.configKeys.socks5ProxyPassword, null);
+ settingsObject.set(TorStrings.configKeys.httpsProxy, null);
+ settingsObject.set(TorStrings.configKeys.httpsProxyAuthenticator, null);
+
+ switch (this._proxyType) {
+ case TorProxyType.SOCKS4:
+ settingsObject.set(
+ TorStrings.configKeys.socks4Proxy,
+ `${this._proxyAddress}:${this._proxyPort}`
+ );
+ break;
+ case TorProxyType.SOCKS5:
+ settingsObject.set(
+ TorStrings.configKeys.socks5Proxy,
+ `${this._proxyAddress}:${this._proxyPort}`
+ );
+ settingsObject.set(
+ TorStrings.configKeys.socks5ProxyUsername,
+ this._proxyUsername
+ );
+ settingsObject.set(
+ TorStrings.configKeys.socks5ProxyPassword,
+ this._proxyPassword
+ );
+ break;
+ case TorProxyType.HTTPS:
+ settingsObject.set(
+ TorStrings.configKeys.httpsProxy,
+ `${this._proxyAddress}:${this._proxyPort}`
+ );
+ settingsObject.set(
+ TorStrings.configKeys.httpsProxyAuthenticator,
+ `${this._proxyUsername}:${this._proxyPassword}`
+ );
+ break;
+ }
+
+ TorProtocolService.writeSettings(settingsObject);
+ } /* TorProxySettings::WriteToTor() */
+}
+
+// factory methods for our various supported proxies
+function makeTorProxySettingsNone() {
+ return new TorProxySettings();
+}
+
+function makeTorProxySettingsSocks4(aProxyAddress, aProxyPort) {
+ let retval = new TorProxySettings();
+ retval._proxyType = TorProxyType.SOCKS4;
+ retval._proxyAddress = aProxyAddress;
+ retval._proxyPort = aProxyPort;
+ return retval;
+}
+
+function makeTorProxySettingsSocks5(
+ aProxyAddress,
+ aProxyPort,
+ aProxyUsername,
+ aProxyPassword
+) {
+ let retval = new TorProxySettings();
+ retval._proxyType = TorProxyType.SOCKS5;
+ retval._proxyAddress = aProxyAddress;
+ retval._proxyPort = aProxyPort;
+ retval._proxyUsername = aProxyUsername;
+ retval._proxyPassword = aProxyPassword;
+ return retval;
+}
+
+function makeTorProxySettingsHTTPS(
+ aProxyAddress,
+ aProxyPort,
+ aProxyUsername,
+ aProxyPassword
+) {
+ let retval = new TorProxySettings();
+ retval._proxyType = TorProxyType.HTTPS;
+ retval._proxyAddress = aProxyAddress;
+ retval._proxyPort = aProxyPort;
+ retval._proxyUsername = aProxyUsername;
+ retval._proxyPassword = aProxyPassword;
+ return retval;
+}
diff --git a/browser/components/torpreferences/jar.mn b/browser/components/torpreferences/jar.mn
new file mode 100644
index 000000000000..857bc9ee3eac
--- /dev/null
+++ b/browser/components/torpreferences/jar.mn
@@ -0,0 +1,14 @@
+browser.jar:
+ content/browser/torpreferences/parseFunctions.jsm (content/parseFunctions.jsm)
+ content/browser/torpreferences/requestBridgeDialog.xhtml (content/requestBridgeDialog.xhtml)
+ content/browser/torpreferences/requestBridgeDialog.jsm (content/requestBridgeDialog.jsm)
+ content/browser/torpreferences/torBridgeSettings.jsm (content/torBridgeSettings.jsm)
+ content/browser/torpreferences/torCategory.inc.xhtml (content/torCategory.inc.xhtml)
+ content/browser/torpreferences/torFirewallSettings.jsm (content/torFirewallSettings.jsm)
+ content/browser/torpreferences/torLogDialog.jsm (content/torLogDialog.jsm)
+ content/browser/torpreferences/torLogDialog.xhtml (content/torLogDialog.xhtml)
+ content/browser/torpreferences/torPane.js (content/torPane.js)
+ content/browser/torpreferences/torPane.xhtml (content/torPane.xhtml)
+ content/browser/torpreferences/torPreferences.css (content/torPreferences.css)
+ content/browser/torpreferences/torPreferencesIcon.svg (content/torPreferencesIcon.svg)
+ content/browser/torpreferences/torProxySettings.jsm (content/torProxySettings.jsm)
diff --git a/browser/components/torpreferences/moz.build b/browser/components/torpreferences/moz.build
new file mode 100644
index 000000000000..7e103239c8d6
--- /dev/null
+++ b/browser/components/torpreferences/moz.build
@@ -0,0 +1 @@
+JAR_MANIFESTS += ['jar.mn']
diff --git a/browser/modules/BridgeDB.jsm b/browser/modules/BridgeDB.jsm
new file mode 100644
index 000000000000..2caa26b4e2e0
--- /dev/null
+++ b/browser/modules/BridgeDB.jsm
@@ -0,0 +1,110 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["BridgeDB"];
+
+const { TorLauncherBridgeDB } = ChromeUtils.import(
+ "resource://torlauncher/modules/tl-bridgedb.jsm"
+);
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+var BridgeDB = {
+ _moatRequestor: null,
+ _currentCaptchaInfo: null,
+ _bridges: null,
+
+ get currentCaptchaImage() {
+ if (this._currentCaptchaInfo) {
+ return this._currentCaptchaInfo.captchaImage;
+ }
+ return null;
+ },
+
+ get currentBridges() {
+ return this._bridges;
+ },
+
+ submitCaptchaGuess(aCaptchaSolution) {
+ if (this._moatRequestor && this._currentCaptchaInfo) {
+ return this._moatRequestor
+ .finishFetch(
+ this._currentCaptchaInfo.transport,
+ this._currentCaptchaInfo.challenge,
+ aCaptchaSolution
+ )
+ .then(aBridgeInfo => {
+ this._moatRequestor.close();
+ this._moatRequestor = null;
+ this._currentCaptchaInfo = null;
+ this._bridges = aBridgeInfo.bridges;
+ // array of bridge strings
+ return this._bridges;
+ });
+ }
+
+ return new Promise((aResponse, aReject) => {
+ aReject(new Error("Invalid _moatRequestor or _currentCaptchaInfo"));
+ });
+ },
+
+ requestNewCaptchaImage(aProxyURI) {
+ // close and clear out existing state on captcha request
+ this.close();
+
+ let transportPlugins = TorProtocolService.readStringArraySetting(
+ TorStrings.configKeys.clientTransportPlugin
+ );
+
+ let meekClientPath;
+ let meekTransport; // We support both "meek" and "meek_lite".
+ let meekClientArgs;
+ // TODO: shouldn't this early out once meek settings are found?
+ for (const line of transportPlugins) {
+ // Parse each ClientTransportPlugin line and look for the meek or
+ // meek_lite transport. This code works a lot like the Tor daemon's
+ // parse_transport_line() function.
+ let tokens = line.split(" ");
+ if (tokens.length > 2 && tokens[1] == "exec") {
+ let transportArray = tokens[0].split(",").map(aStr => aStr.trim());
+ let transport = transportArray.find(
+ aTransport => aTransport === "meek"
+ );
+ if (!transport) {
+ transport = transportArray.find(
+ aTransport => aTransport === "meek_lite"
+ );
+ }
+ if (transport) {
+ meekTransport = transport;
+ meekClientPath = tokens[2];
+ meekClientArgs = tokens.slice(3);
+ }
+ }
+ }
+
+ this._moatRequestor = TorLauncherBridgeDB.createMoatRequestor();
+
+ return this._moatRequestor
+ .init(aProxyURI, meekTransport, meekClientPath, meekClientArgs)
+ .then(() => {
+ // TODO: get this from TorLauncherUtil
+ let bridgeType = "obfs4";
+ return this._moatRequestor.fetchBridges([bridgeType]);
+ })
+ .then(aCaptchaInfo => {
+ // cache off the current captcha info as the challenge is needed for response
+ this._currentCaptchaInfo = aCaptchaInfo;
+ return aCaptchaInfo.captchaImage;
+ });
+ },
+
+ close() {
+ if (this._moatRequestor) {
+ this._moatRequestor.close();
+ this._moatRequestor = null;
+ }
+ this._currentCaptchaInfo = null;
+ },
+};
diff --git a/browser/modules/TorProtocolService.jsm b/browser/modules/TorProtocolService.jsm
new file mode 100644
index 000000000000..b4e6ed9a3253
--- /dev/null
+++ b/browser/modules/TorProtocolService.jsm
@@ -0,0 +1,212 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorProtocolService"];
+
+const { TorLauncherUtil } = ChromeUtils.import(
+ "resource://torlauncher/modules/tl-util.jsm"
+);
+
+var TorProtocolService = {
+ _tlps: Cc["@torproject.org/torlauncher-protocol-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject,
+
+ // maintain a map of tor settings set by Tor Browser so that we don't
+ // repeatedly set the same key/values over and over
+ // this map contains string keys to primitive or array values
+ _settingsCache: new Map(),
+
+ _typeof(aValue) {
+ switch (typeof aValue) {
+ case "boolean":
+ return "boolean";
+ case "string":
+ return "string";
+ case "object":
+ if (aValue == null) {
+ return "null";
+ } else if (Array.isArray(aValue)) {
+ return "array";
+ }
+ return "object";
+ }
+ return "unknown";
+ },
+
+ _assertValidSettingKey(aSetting) {
+ // ensure the 'key' is a string
+ if (typeof aSetting != "string") {
+ throw new Error(
+ `Expected setting of type string but received ${typeof aSetting}`
+ );
+ }
+ },
+
+ _assertValidSetting(aSetting, aValue) {
+ this._assertValidSettingKey(aSetting);
+
+ const valueType = this._typeof(aValue);
+ switch (valueType) {
+ case "boolean":
+ case "string":
+ case "null":
+ return;
+ case "array":
+ for (const element of aValue) {
+ if (typeof element != "string") {
+ throw new Error(
+ `Setting '${aSetting}' array contains value of invalid type '${typeof element}'`
+ );
+ }
+ }
+ return;
+ default:
+ throw new Error(
+ `Invalid object type received for setting '${aSetting}'`
+ );
+ }
+ },
+
+ // takes a Map containing tor settings
+ // throws on error
+ writeSettings(aSettingsObj) {
+ // only write settings that have changed
+ let newSettings = new Map();
+ for (const [setting, value] of aSettingsObj) {
+ let saveSetting = false;
+
+ // make sure we have valid data here
+ this._assertValidSetting(setting, value);
+
+ if (!this._settingsCache.has(setting)) {
+ // no cached setting, so write
+ saveSetting = true;
+ } else {
+ const cachedValue = this._settingsCache.get(setting);
+ if (value != cachedValue) {
+ // compare arrays member-wise
+ if (Array.isArray(value) && Array.isArray(cachedValue)) {
+ if (value.length != cachedValue.length) {
+ saveSetting = true;
+ } else {
+ const arrayLength = value.length;
+ for (let i = 0; i < arrayLength; ++i) {
+ if (value[i] != cachedValue[i]) {
+ saveSetting = true;
+ break;
+ }
+ }
+ }
+ } else {
+ // some other different values
+ saveSetting = true;
+ }
+ }
+ }
+
+ if (saveSetting) {
+ newSettings.set(setting, value);
+ }
+ }
+
+ // only write if new setting to save
+ if (newSettings.size > 0) {
+ // convert settingsObject map to js object for torlauncher-protocol-service
+ let settingsObject = {};
+ for (const [setting, value] of newSettings) {
+ settingsObject[setting] = value;
+ }
+
+ let errorObject = {};
+ if (!this._tlps.TorSetConfWithReply(settingsObject, errorObject)) {
+ throw new Error(errorObject.details);
+ }
+
+ // save settings to cache after successfully writing to Tor
+ for (const [setting, value] of newSettings) {
+ this._settingsCache.set(setting, value);
+ }
+ }
+ },
+
+ _readSetting(aSetting) {
+ this._assertValidSettingKey(aSetting);
+ let reply = this._tlps.TorGetConf(aSetting);
+ if (this._tlps.TorCommandSucceeded(reply)) {
+ return reply.lineArray;
+ }
+ throw new Error(reply.lineArray.join("\n"));
+ },
+
+ _readBoolSetting(aSetting) {
+ let lineArray = this._readSetting(aSetting);
+ if (lineArray.length != 1) {
+ throw new Error(
+ `Expected an array with length 1 but received array of length ${
+ lineArray.length
+ }`
+ );
+ }
+
+ let retval = lineArray[0];
+ switch (retval) {
+ case "0":
+ return false;
+ case "1":
+ return true;
+ default:
+ throw new Error(`Expected boolean (1 or 0) but received '${retval}'`);
+ }
+ },
+
+ _readStringSetting(aSetting) {
+ let lineArray = this._readSetting(aSetting);
+ if (lineArray.length != 1) {
+ throw new Error(
+ `Expected an array with length 1 but received array of length ${
+ lineArray.length
+ }`
+ );
+ }
+ return lineArray[0];
+ },
+
+ _readStringArraySetting(aSetting) {
+ let lineArray = this._readSetting(aSetting);
+ return lineArray;
+ },
+
+ readBoolSetting(aSetting) {
+ let value = this._readBoolSetting(aSetting);
+ this._settingsCache.set(aSetting, value);
+ return value;
+ },
+
+ readStringSetting(aSetting) {
+ let value = this._readStringSetting(aSetting);
+ this._settingsCache.set(aSetting, value);
+ return value;
+ },
+
+ readStringArraySetting(aSetting) {
+ let value = this._readStringArraySetting(aSetting);
+ this._settingsCache.set(aSetting, value);
+ return value;
+ },
+
+ // writes current tor settings to disk
+ flushSettings() {
+ this._tlps.TorSendCommand("SAVECONF");
+ },
+
+ getLog() {
+ let countObj = { value: 0 };
+ let torLog = this._tlps.TorGetLog(countObj);
+ return torLog;
+ },
+
+ // true if we launched and control tor, false if using system tor
+ get ownsTorDaemon() {
+ return TorLauncherUtil.shouldStartAndOwnTor;
+ },
+};
diff --git a/browser/modules/moz.build b/browser/modules/moz.build
index eb77e4f8b101..7a5c26b2e9e1 100644
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -128,6 +128,7 @@ EXTRA_JS_MODULES += [
'AboutNewTab.jsm',
'AppUpdater.jsm',
'AsyncTabSwitcher.jsm',
+ 'BridgeDB.jsm',
'BrowserUsageTelemetry.jsm',
'BrowserWindowTracker.jsm',
'ContentCrashHandlers.jsm',
@@ -153,6 +154,7 @@ EXTRA_JS_MODULES += [
'TabsList.jsm',
'TabUnloader.jsm',
'ThemeVariableMap.jsm',
+ 'TorProtocolService.jsm',
'TorStrings.jsm',
'TransientPrefs.jsm',
'webrtcUI.jsm',
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 40069: Add helpers for message passing with extensions
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit 6f2b3469fea689a5cec24e5742f55723ffb0e71e
Author: Alex Catarineu <acat(a)torproject.org>
Date: Sun Aug 2 19:12:25 2020 +0200
Bug 40069: Add helpers for message passing with extensions
---
toolkit/components/extensions/ExtensionParent.jsm | 47 +++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/toolkit/components/extensions/ExtensionParent.jsm b/toolkit/components/extensions/ExtensionParent.jsm
index b7bf99accb73..33c3359af04c 100644
--- a/toolkit/components/extensions/ExtensionParent.jsm
+++ b/toolkit/components/extensions/ExtensionParent.jsm
@@ -264,6 +264,8 @@ const ProxyMessenger = {
/** @type Map<number, ParentPort> */
ports: new Map(),
+ _torRuntimeMessageListeners: [],
+
init() {
this.conduit = new BroadcastConduit(ProxyMessenger, {
id: "ProxyMessenger",
@@ -326,6 +328,10 @@ const ProxyMessenger = {
},
async recvRuntimeMessage(arg, { sender }) {
+ // We need to listen to some extension messages in Tor Browser
+ for (const listener of this._torRuntimeMessageListeners) {
+ listener(arg);
+ }
arg.firstResponse = true;
let kind = await this.normalizeArgs(arg, sender);
let result = await this.conduit.castRuntimeMessage(kind, arg);
@@ -1870,6 +1876,45 @@ for (let name of StartupCache.STORE_NAMES) {
StartupCache[name] = new CacheStore(name);
}
+async function torSendExtensionMessage(extensionId, message) {
+ // This should broadcast the message to all children "conduits"
+ // listening for a "RuntimeMessage". Those children conduits
+ // will either be extension background pages or other extension
+ // pages listening to browser.runtime.onMessage.
+ const result = await ProxyMessenger.conduit.castRuntimeMessage("messenger", {
+ extensionId,
+ holder: new StructuredCloneHolder(message),
+ firstResponse: true,
+ sender: {
+ id: extensionId,
+ envType: "addon_child",
+ },
+ });
+ return result
+ ? result.value
+ : Promise.reject({ message: ERROR_NO_RECEIVERS });
+}
+
+async function torWaitForExtensionMessage(extensionId, checker) {
+ return new Promise(resolve => {
+ const msgListener = msg => {
+ try {
+ if (msg && msg.extensionId === extensionId) {
+ const deserialized = msg.holder.deserialize({});
+ if (checker(deserialized)) {
+ const idx = ProxyMessenger._torRuntimeMessageListeners.indexOf(
+ msgListener
+ );
+ ProxyMessenger._torRuntimeMessageListeners.splice(idx, 1);
+ resolve(deserialized);
+ }
+ }
+ } catch (e) {}
+ };
+ ProxyMessenger._torRuntimeMessageListeners.push(msgListener);
+ });
+}
+
var ExtensionParent = {
GlobalManager,
HiddenExtensionPage,
@@ -1881,6 +1926,8 @@ var ExtensionParent = {
promiseExtensionViewLoaded,
watchExtensionProxyContextLoad,
DebugUtils,
+ torSendExtensionMessage,
+ torWaitForExtensionMessage,
};
// browserPaintedPromise and browserStartupPromise are promises that
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 12620: TorBrowser regression tests
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit e33944cebc9dbc2816498c4c392a32223dc1706a
Author: Arthur Edelstein <arthuredelstein(a)gmail.com>
Date: Wed Aug 27 16:25:00 2014 -0700
Bug 12620: TorBrowser regression tests
Regression tests for Bug #2950: Make Permissions Manager memory-only
Regression tests for TB4: Tor Browser's Firefox preference overrides.
Note: many more functional tests could be made here
Regression tests for #2874: Block Components.interfaces from content
Bug 18923: Add a script to run all Tor Browser specific tests
Regression tests for Bug #16441: Suppress "Reset Tor Browser" prompt.
---
run-tbb-tests | 60 +++++++++++++++
tbb-tests/browser.ini | 5 ++
tbb-tests/browser_tor_TB4.js | 162 +++++++++++++++++++++++++++++++++++++++
tbb-tests/browser_tor_bug2950.js | 74 ++++++++++++++++++
tbb-tests/mochitest.ini | 3 +
tbb-tests/moz.build | 10 +++
tbb-tests/test_tor_bug2874.html | 25 ++++++
toolkit/toolkit.mozbuild | 3 +-
8 files changed, 341 insertions(+), 1 deletion(-)
diff --git a/run-tbb-tests b/run-tbb-tests
new file mode 100755
index 000000000000..5e266f9ba4cd
--- /dev/null
+++ b/run-tbb-tests
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# This script runs all the Mochitest tests that have been added or
+# modified since the last ffxbld commit.
+#
+# It does not currently run XPCShell tests. We should change this if we
+# start using this type or other types of tests.
+#
+# The logs of the tests are stored in the tbb-tests.log file.
+# Ignored tests are listed in the tbb-tests-ignore.txt file.
+#
+# https://trac.torproject.org/projects/tor/ticket/18923
+
+IFS=$'\n'
+
+if [ -n "$USE_TESTS_LIST" ] && [ -f tbb-tests-list.txt ]
+then
+ echo "Using tests list from file tbb-tests-list.txt"
+ tests=($(cat tbb-tests-list.txt))
+else
+ ffxbld_commit=$(git log -500 --format='%an %H' | grep '^ffxbld ' \
+ | head -1 | cut -d ' ' -f 2)
+
+ tests=($(git diff --name-status "$ffxbld_commit" HEAD | \
+ grep -e '^[AM].*/test_[^/]\+\.\(html\|xul\)$' \
+ -e '^[AM].*/browser_[^/]\+\.js$' \
+ | sed 's/^[AM]\s\+//'))
+fi
+
+echo 'The following tests will be run:'
+for i in "${!tests[@]}"
+do
+ if [ -z "$USE_TESTS_LIST" ] \
+ && grep -q "^${tests[$i]}$" tbb-tests-ignore.txt
+ then
+ unset "tests[$i]"
+ continue
+ fi
+ echo "- ${tests[$i]}"
+done
+
+if [ -n "$WRITE_TESTS_LIST" ]
+then
+ rm -f tbb-tests-list.txt
+ for i in "${!tests[@]}"
+ do
+ echo "${tests[$i]}" >> tbb-tests-list.txt
+ done
+ exit 0
+fi
+
+rm -f tbb-tests.log
+echo $'\n''Starting tests'
+./mach mochitest --log-tbpl tbb-tests.log --setpref security.nocertdb=false \
+ "${tests[@]}"
+
+echo "*************************"
+echo "*************************"
+echo "Summary of failed tests:"
+grep --color=never TEST-UNEXPECTED-FAIL tbb-tests.log
diff --git a/tbb-tests/browser.ini b/tbb-tests/browser.ini
new file mode 100644
index 000000000000..f481660f1417
--- /dev/null
+++ b/tbb-tests/browser.ini
@@ -0,0 +1,5 @@
+[DEFAULT]
+
+[browser_tor_bug2950.js]
+[browser_tor_omnibox.js]
+[browser_tor_TB4.js]
diff --git a/tbb-tests/browser_tor_TB4.js b/tbb-tests/browser_tor_TB4.js
new file mode 100644
index 000000000000..af688bee0226
--- /dev/null
+++ b/tbb-tests/browser_tor_TB4.js
@@ -0,0 +1,162 @@
+// # Test for TB4: Tor Browser's Firefox preference overrides
+// Simple regression tests to check the value of each pref and
+// decides if it is set as expected.
+
+// TODO: Write unit tests to check that each pref setting here
+// causes the browser to have the desired behavior (a big task).
+
+function test() {
+
+let expectedPrefs = [
+ // Disable browser auto updaters and associated homepage notifications
+ ["app.update.auto", false],
+ ["app.update.enabled", false],
+ ["browser.search.update", false],
+ ["browser.rights.3.shown", true],
+ ["browser.startup.homepage_override.mstone", "ignore"],
+ ["startup.homepage_welcome_url", ""],
+ ["startup.homepage_override_url", ""],
+
+ // Disable the "Refresh" prompt that is displayed for stale profiles.
+ ["browser.disableResetPrompt", true],
+
+ // Disk activity: Disable Browsing History Storage
+ ["browser.privatebrowsing.autostart", true],
+ ["browser.cache.disk.enable", false],
+ ["browser.cache.offline.enable", false],
+ ["dom.indexedDB.enabled", false],
+ ["permissions.memory_only", true],
+ ["network.cookie.lifetimePolicy", 2],
+ ["security.nocertdb", true],
+
+ // Disk activity: TBB Directory Isolation
+ ["browser.download.useDownloadDir", false],
+ ["browser.shell.checkDefaultBrowser", false],
+ ["browser.download.manager.addToRecentDocs", false],
+
+ // Misc privacy: Disk
+ ["signon.rememberSignons", false],
+ ["browser.formfill.enable", false],
+ ["signon.autofillForms", false],
+ ["browser.sessionstore.privacy_level", 2],
+ ["media.cache_size", 0],
+
+ // Misc privacy: Remote
+ ["browser.send_pings", false],
+ ["geo.enabled", false],
+ ["geo.wifi.uri", ""],
+ ["browser.search.suggest.enabled", false],
+ ["browser.safebrowsing.malware.enabled", false],
+ ["extensions.ui.lastCategory", "addons://list/extension"],
+ ["datareporting.healthreport.uploadEnabled", false],
+ ["datareporting.policy.dataSubmissionEnabled", false],
+ ["security.mixed_content.block_active_content", false], // Disable until https://bugzilla.mozilla.org/show_bug.cgi?id=878890 is patched
+ ["browser.syncPromoViewsLeftMap", "{\"addons\":0, \"passwords\":0, \"bookmarks\":0}"], // Don't promote sync
+ ["services.sync.engine.prefs", false], // Never sync prefs, addons, or tabs with other browsers
+ ["services.sync.engine.addons", false],
+ ["services.sync.engine.tabs", false],
+ ["extensions.getAddons.cache.enabled", false], // https://blog.mozilla.org/addons/how-to-opt-out-of-add-on-metadata-updates/
+
+ // Fingerprinting
+ ["webgl.min_capability_mode", true],
+ ["webgl.disable-extensions", true],
+ ["dom.battery.enabled", false], // fingerprinting due to differing OS implementations
+ ["browser.display.max_font_attempts",10],
+ ["browser.display.max_font_count",10],
+ ["gfx.downloadable_fonts.fallback_delay", -1],
+ ["browser.startup.homepage_override.buildID", "20100101"],
+
+ // Third party stuff
+ ["network.cookie.cookieBehavior", 1],
+ ["security.enable_tls_session_tickets", false],
+ ["network.http.spdy.enabled", false], // Stores state and may have keepalive issues (both fixable)
+ ["network.http.spdy.enabled.v2", false], // Seems redundant, but just in case
+ ["network.http.spdy.enabled.v3", false], // Seems redundant, but just in case
+
+ // Proxy and proxy security
+ ["network.proxy.socks", "127.0.0.1"],
+ ["network.proxy.socks_port", 9150],
+ ["network.proxy.socks_remote_dns", true],
+ ["network.proxy.no_proxies_on", ""], // For fingerprinting and local service vulns (#10419)
+ ["network.proxy.type", 1],
+ ["network.security.ports.banned", "9050,9051,9150,9151"],
+ ["network.dns.disablePrefetch", true],
+ ["network.protocol-handler.external-default", false],
+ ["network.protocol-handler.external.mailto", false],
+ ["network.protocol-handler.external.news", false],
+ ["network.protocol-handler.external.nntp", false],
+ ["network.protocol-handler.external.snews", false],
+ ["network.protocol-handler.warn-external.mailto", true],
+ ["network.protocol-handler.warn-external.news", true],
+ ["network.protocol-handler.warn-external.nntp", true],
+ ["network.protocol-handler.warn-external.snews", true],
+
+ // Network and performance
+ ["network.http.pipelining", true],
+ ["network.http.pipelining.aggressive", true],
+ ["network.http.pipelining.maxrequests", 12],
+ ["network.http.pipelining.ssl", true],
+ ["network.http.proxy.pipelining", true],
+ ["security.ssl.enable_false_start", true],
+ ["network.http.keep-alive.timeout", 20],
+ ["network.http.connection-retry-timeout", 0],
+ ["network.http.max-persistent-connections-per-proxy", 256],
+ ["network.http.pipelining.reschedule-timeout", 15000],
+ ["network.http.pipelining.read-timeout", 60000],
+ // Hacked pref: Now means "Attempt to pipeline at least this many requests together"
+ ["network.http.pipelining.max-optimistic-requests", 3],
+ ["security.disable_session_identifiers", true],
+
+ // Extension support
+ ["extensions.autoDisableScopes", 0],
+ ["extensions.bootstrappedAddons", "{}"],
+ ["extensions.checkCompatibility.4.*", false],
+ ["extensions.databaseSchema", 3],
+ ["extensions.enabledAddons", "https-everywhere%40eff.org:3.1.4,%7B73a6fe31-595d-460b-a920-fcc0f8843232%7D:2.6.6.1,torbutton%40torproject.org:1.5.2,ubufox%40ubuntu.com:2.6,%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D:17.0.5"],
+ ["extensions.enabledItems", "langpack-en-US@firefox.mozilla.org:,{73a6fe31-595d-460b-a920-fcc0f8843232}:1.9.9.57,{e0204bd5-9d31-402b-a99d-a6aa8ffebdca}:1.2.4,{972ce4c6-7e08-4474-a285-3208198ce6fd}:3.5.8"],
+ ["extensions.enabledScopes", 1],
+ ["extensions.pendingOperations", false],
+ ["xpinstall.whitelist.add", ""],
+ ["xpinstall.whitelist.add.36", ""],
+
+ // Omnibox settings
+ ["keyword.URL", "https://startpage.com/do/search?q="],
+
+ // Hacks/workarounds: Direct2D seems to crash w/ lots of video cards w/ MinGW?
+ // Nvida cards also experience crashes without the second pref set to disabled
+ ["gfx.direct2d.disabled", true],
+ ["layers.acceleration.disabled", true],
+
+ // Security enhancements
+ // https://trac.torproject.org/projects/tor/ticket/9387#comment:17
+ ["javascript.options.ion.content", false],
+ ["javascript.options.baselinejit.content", false],
+ ["javascript.options.asmjs", false],
+ ["javascript.options.typeinference", false],
+
+ // Enable TLS 1.1 and 1.2:
+ // https://trac.torproject.org/projects/tor/ticket/11253
+ ["security.tls.version.max", 3],
+
+ // Version placeholder
+ ["torbrowser.version", "UNKNOWN"],
+
+ ];
+
+let getPref = function (prefName) {
+ let type = gPrefService.getPrefType(prefName);
+ if (type === gPrefService.PREF_INT) return gPrefService.getIntPref(prefName);
+ if (type === gPrefService.PREF_BOOL) return gPrefService.getBoolPref(prefName);
+ if (type === gPrefService.PREF_STRING) return gPrefService.getCharPref(prefName);
+ // Something went wrong.
+ throw new Error("Can't access pref " + prefName);
+};
+
+let testPref = function([key, expectedValue]) {
+ let foundValue = getPref(key);
+ is(foundValue, expectedValue, "Pref '" + key + "' should be '" + expectedValue +"'.");
+};
+
+expectedPrefs.map(testPref);
+
+} // end function test()
diff --git a/tbb-tests/browser_tor_bug2950.js b/tbb-tests/browser_tor_bug2950.js
new file mode 100644
index 000000000000..010cc6356202
--- /dev/null
+++ b/tbb-tests/browser_tor_bug2950.js
@@ -0,0 +1,74 @@
+// # Regression tests for tor Bug #2950, Make Permissions Manager memory-only
+// Ensures that permissions.sqlite file in profile directory is not written to,
+// even when we write a value to Firefox's permissions database.
+
+// The requisite test() function.
+function test() {
+
+// Needed because of asynchronous part later in the test.
+waitForExplicitFinish();
+
+// Shortcut
+let Ci = Components.interfaces;
+
+// ## utility functions
+
+// __uri(spec)__.
+// Creates an nsIURI instance from a spec
+// (string address such as "http://torproject.org").
+let uri = spec => Services.io.newURI(spec, null, null);
+
+// __setPermission(spec, key, value)__.
+// Sets the site permission of type key to value, for the site located at address spec.
+let setPermission = (spec, key, value) => SitePermissions.set(uri(spec), key, value);
+
+// __getPermission(spec, key)__.
+// Reads the site permission value for permission type key, for the site
+// located at address spec.
+let getPermission = (spec, key) => SitePermissions.get(uri(spec), key);
+
+// __profileDirPath__.
+// The Firefox Profile directory. Expected location of various persistent files.
+let profileDirPath = Services.dirsvc.get("ProfD", Components.interfaces.nsIFile).path;
+
+// __fileInProfile(fileName)__.
+// Returns an nsIFile instance corresponding to a file in the Profile directory.
+let fileInProfile = fileName => FileUtils.File(profileDirPath + "/" + fileName);
+
+// ## Now let's run the test.
+
+let SITE = "http://torproject.org",
+ KEY = "popup";
+
+let permissionsFile = fileInProfile("permissions.sqlite"),
+ lastModifiedTime = null,
+ newModifiedTime = null;
+if (permissionsFile.exists()) {
+ lastModifiedTime = permissionsFile.lastModifiedTime;
+}
+// Read the original value of the permission.
+let originalValue = getPermission(SITE, KEY);
+
+// We need to delay by at least 1000 ms, because that's the granularity
+// of file time stamps, it seems.
+window.setTimeout(
+ function () {
+ // Set the permission to a new value.
+ setPermission(SITE, KEY, (originalValue === 0) ? 1 : 0);
+ // Now read back the permission value again.
+ let newReadValue = getPermission(SITE, KEY);
+ // Compare to confirm that the permission
+ // value was successfully changed.
+ isnot(newReadValue, originalValue, "Set a value in permissions db (perhaps in memory).");;
+ // If file existed or now exists, get the current time stamp.
+ if (permissionsFile.exists()) {
+ newModifiedTime = permissionsFile.lastModifiedTime;
+ }
+ // If file was created or modified since we began this test,
+ // then permissions db is not memory only. Complain!
+ is(lastModifiedTime, newModifiedTime, "Don't write to permissions.sqlite file on disk.");
+ // We are done with the test.
+ finish();
+ }, 1100);
+
+} // test()
diff --git a/tbb-tests/mochitest.ini b/tbb-tests/mochitest.ini
new file mode 100644
index 000000000000..cc5172733bbe
--- /dev/null
+++ b/tbb-tests/mochitest.ini
@@ -0,0 +1,3 @@
+[DEFAULT]
+
+[test_tor_bug2874.html]
diff --git a/tbb-tests/moz.build b/tbb-tests/moz.build
new file mode 100644
index 000000000000..de8a41a67a5c
--- /dev/null
+++ b/tbb-tests/moz.build
@@ -0,0 +1,10 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+MOCHITEST_MANIFESTS += ['mochitest.ini']
+
+BROWSER_CHROME_MANIFESTS += [ 'browser.ini' ]
+
diff --git a/tbb-tests/test_tor_bug2874.html b/tbb-tests/test_tor_bug2874.html
new file mode 100644
index 000000000000..c0a956e9f687
--- /dev/null
+++ b/tbb-tests/test_tor_bug2874.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+Tor bug
+https://trac.torproject.org/projects/tor/ticket/2874
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Tor Bug 2874</title>
+ <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script type="application/javascript">
+ is(typeof Components, 'undefined', "The global window object should not expose a Components property to untrusted content.");
+ </script>
+</head>
+<body>
+<a target="_blank" href="https://trac.torproject.org/projects/tor/ticket/2874">Tor Bug 2874</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+</html>
diff --git a/toolkit/toolkit.mozbuild b/toolkit/toolkit.mozbuild
index d092b8b22346..6e35a4602300 100644
--- a/toolkit/toolkit.mozbuild
+++ b/toolkit/toolkit.mozbuild
@@ -96,7 +96,8 @@ if CONFIG['MOZ_WEBRTC'] and CONFIG['COMPILE_ENVIRONMENT']:
]
if CONFIG['ENABLE_TESTS']:
- DIRS += ['/testing/specialpowers']
+ DIRS += ['/testing/specialpowers',
+ '/tbb-tests']
DIRS += [
'/testing/gtest',
1
0

[tor-browser/tor-browser-81.0.1-10.0-1] Bug 28044: Integrate Tor Launcher into tor-browser
by sysrqb@torproject.org 07 Oct '20
by sysrqb@torproject.org 07 Oct '20
07 Oct '20
commit fe6ab7066d3a0ce38a966dd1f593a80d268a0392
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Feb 26 10:07:17 2019 -0500
Bug 28044: Integrate Tor Launcher into tor-browser
Build and package Tor Launcher as part of the browser (similar to
how pdfjs is handled).
If a Tor Launcher extension is present in the user's profile, it is
removed.
---
browser/extensions/moz.build | 5 +++++
browser/installer/package-manifest.in | 5 +++++
toolkit/mozapps/extensions/internal/XPIProvider.jsm | 10 ++++++++++
3 files changed, 20 insertions(+)
diff --git a/browser/extensions/moz.build b/browser/extensions/moz.build
index f71ece63c42d..9787ecf81592 100644
--- a/browser/extensions/moz.build
+++ b/browser/extensions/moz.build
@@ -11,3 +11,8 @@ DIRS += [
'webcompat',
'report-site-issue'
]
+
+if not CONFIG['TOR_BROWSER_DISABLE_TOR_LAUNCHER']:
+ DIRS += [
+ 'tor-launcher',
+ ]
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index 2865597f498e..9cb8a3c65d7b 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -252,6 +252,11 @@
@RESPATH@/browser/chrome/browser.manifest
@RESPATH@/chrome/pdfjs.manifest
@RESPATH@/chrome/pdfjs/*
+#ifndef TOR_BROWSER_DISABLE_TOR_LAUNCHER
+@RESPATH@/browser/chrome/torlauncher.manifest
+@RESPATH@/browser/chrome/torlauncher/*
+@RESPATH@/browser/@PREF_DIR@/torlauncher-prefs.js
+#endif
@RESPATH@/chrome/toolkit@JAREXT@
@RESPATH@/chrome/toolkit.manifest
@RESPATH@/chrome/recording.manifest
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
index 14bbba2b39b9..87e4d3ee9e45 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -1462,6 +1462,16 @@ var XPIStates = {
for (let [id, file] of loc.readAddons()) {
knownIds.delete(id);
+ // Since it is now part of the browser, uninstall the Tor Launcher
+ // extension. This will remove the Tor Launcher .xpi from user
+ // profiles on macOS.
+ if (id === "tor-launcher(a)torproject.org") {
+ logger.debug("Uninstalling the Tor Launcher extension.");
+ loc.installer.uninstallAddon(id);
+ changed = true;
+ continue;
+ }
+
let xpiState = loc.get(id);
if (!xpiState) {
// If the location is not supported for sideloading, skip new
1
0