Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191] helo=mx.sourceforge.net) by sfs-ml-1.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1WAegv-0004e8-8k for bitcoin-development@lists.sourceforge.net; Tue, 04 Feb 2014 12:01:25 +0000 Received-SPF: pass (sog-mx-1.v43.ch3.sourceforge.com: domain of gmail.com designates 74.125.83.48 as permitted sender) client-ip=74.125.83.48; envelope-from=mh.in.england@gmail.com; helo=mail-ee0-f48.google.com; Received: from mail-ee0-f48.google.com ([74.125.83.48]) by sog-mx-1.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1WAegt-000786-8u for bitcoin-development@lists.sourceforge.net; Tue, 04 Feb 2014 12:01:25 +0000 Received: by mail-ee0-f48.google.com with SMTP id t10so4207313eei.7 for ; Tue, 04 Feb 2014 04:01:17 -0800 (PST) X-Received: by 10.14.4.67 with SMTP id 43mr2799216eei.70.1391515276928; Tue, 04 Feb 2014 04:01:16 -0800 (PST) Received: from [192.168.1.100] (84-75-251-165.dclient.hispeed.ch. [84.75.251.165]) by mx.google.com with ESMTPSA id g1sm87784027eet.6.2014.02.04.04.01.14 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 04 Feb 2014 04:01:15 -0800 (PST) Sender: Mike Hearn From: Mike Hearn Content-Type: multipart/signed; boundary="Apple-Mail=_9BE00017-DEB6-456A-94B5-B595074C4DE3"; protocol="application/pkcs7-signature"; micalg=sha1 Message-Id: <1D8E0828-D07F-46EF-9F9F-5CA83AA9DB59@plan99.net> Date: Tue, 4 Feb 2014 13:01:12 +0100 To: bitcoin-development@lists.sourceforge.net Mime-Version: 1.0 (Mac OS X Mail 7.1 \(1827\)) X-Mailer: Apple Mail (2.1827) X-Spam-Score: -0.5 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (mh.in.england[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 0.0 T_FRT_LOLITA1 BODY: ReplaceTags: Lolita (1) 1.0 HTML_MESSAGE BODY: HTML included in message 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1WAegt-000786-8u Subject: [Bitcoin-development] bitcoinj 0.11 released, with p2sh, bip39 and payment protocol support X-BeenThere: bitcoin-development@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Feb 2014 12:01:25 -0000 --Apple-Mail=_9BE00017-DEB6-456A-94B5-B595074C4DE3 Content-Type: multipart/alternative; boundary="Apple-Mail=_2E7F6410-F266-438C-8827-0A689511BFFB" --Apple-Mail=_2E7F6410-F266-438C-8827-0A689511BFFB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Hello, I'm pleased to announce the release of bitcoinj 0.11, a library for = writing Bitcoin applications that run on the JVM. BitcoinJ is widely = used across the Bitcoin community; some users include Bitcoin Wallet for = Android, MultiBit, Hive, blockchain.info, the biteasy.com block explorer = (written in Lisp!), Circle, Neo/Bee (Cypriot payment network), = bitpos.me, Bitcoin Touch, BlueMatt's relay network and DNS crawler, = academic advanced contracts research and more. The release-0.11 git tag is signed by Andreas Schildbach's GPG key. The = commit hash is 410d4547a7dd. This paragraph is signed by the same = Bitcoin key as with previous releases (check their release announcements = to establish continuity). Additionally, this email is signed using DKIM = and for the first time, a key that was ID verified by the Swiss = government. Key: 16vSNFP5Acsa6RBbjEA7QYCCRDRGXRFH4m Signature for last paragraph: = H3DvWBqFHPxKW/cdYUdZ6OHjbq6ZtC5PHK4ebpeiE+FqTHyRLJ58BItbC0R2vo77h+DthpQigd= EZ0V8ivSM7VIg=3D Notable changes and new features Thanks to Ken Sedgwick, an implementation of BIP39 ("Mnemonic code for = generating deterministic keys") has been added. This is compatible with = the latest Trezor implementation. Thanks to Mike Belshe, the wallet can now send to P2SH addresses. Thanks to Matt Corallo, the network layer was rewritten from scratch. It = no longer depends on Netty, and it now supports both blocking and = non-blocking sockets. In practice that means Java's built in support for = transparent SSL and SOCKS becomes available again, which in turn means = connecting via Tor is now possible. The new framework is lightweight, = easy to understand and has been running a DNS seed crawler for some = months now. Thanks to Kevin Greene, we've added some support for the BIP70 payment = protocol. Wallet authors can now consume payment requests, check their = signatures and submit payments with the new easy to use PaymentSession = class. The wallet-tool command line UI has support and an article = explains how to use it. Thanks to Miron Cuperman, the wallet can now watch arbitrary addresses = and scripts. The wallet could previously watch an address as long as the = public key was known. Now it's possible to watch for addresses even when = the public key is not known. Also thanks to Miron, Bloom filtering was also improved. The system now = tracks false positive rates and cleans the filter when FP rates get too = high. Unfortunately, some privacy bugs in Bloom filtering remain, which = could (amongst other things) allow a malicious remote peer to test = whether you own a particular key. Thanks to Alex Taylor (bitpos.me), a new PostgreSQL based pruning block = store was added. This block store is fast, and indexes the UTXO set, = allowing for fast lookup of the balance of any given address. A Java 8 based wallet template app is now included. The template is = designed for people writing contract based applications. It provides a = simple app that can be copy/pasted, which connects to the P2P network, = manages a wallet, and provides a GUI that shows progress, balance, = address+qrcode for receiving money and has a button that is used to = empty the wallet out. It's designed to have an attractive and modern = look, with tasteful animations and artwork. Micropayment channels got many big improvements to the API and = implementation. The release in 0.10 can be seen as a beta, in this = release the micropayments code has been taken for a test drive for a = couple of real apps and many rough edges polished as a result. The default USER_THREAD executor can now be replaced, allowing a 1-line = switch of all callbacks onto a thread of your choice instead of needing = to override each callback, each time. This should simplify and clean up = the GUI code of wallet apps significantly. The WalletTool command line app has a more convenient user interface = now. A new DNS seed has been added. The seed is run by Christian Decker, from = ETH Zurich. bitcoinj 0.11 will shortly be available via Maven Central. Please use = the dependency verifier plugin and/or check the PGP signatures on the = uploads, if you use this! Smaller improvements We finished adding nullity annotations to the API. You should now be = able to assume that any method not annotated with @Nullable won't ever = return null values. The WalletAppKit got a bunch of new features and convenience APIs. The wallet will now create inputs with dummy signatures if the private = key for an output is missing, rather than throwing an exception. You can = then edit the input later to substitute in a real signature. This is = useful when the signing is being done elsewhere, outside of the library. In full verification mode, execution of scripts (i.e. checking = signatures) can now be switched off. This is useful if you trust the = source of the chain and just want to calculate the UTXO set. The wallet risk analysis code is now pluggable, better documented and = checks for finality in a more sensible way. Various memory usage and flow control optimisations were made to allow = much larger wallets to sync on Android. The transaction broadcast algorithm was changed to be more robust. Double spend handling in the wallet was improved. Generated signatures now use canonical S values. This will aid a future = hard-forking rule change which bans malleable signatures. Some fixes were made for enable usage with the Orchid Tor library. = Further support for Tor is planned for future releases. Notable bug fixes Some hard-forking full verification bugs were fixed. Thanks to Miron, PeerGroup now performs exponential backoff for peer = connections, for instance if we cannot connect to them or if they = disconnect us. This resolves an annoying bug in which if the library was = configured with a single peer that was down, it would spin in a tight = loop consuming battery. API changes Some functionality of the Wallet class was moved into separate classes = under the wallet package. The micropayments API and protocol changed. New clients/servers are not = compatible with apps running against previous releases. The Wallet sendCoins/completeTx methods no longer return booleans or = null to indicate failure, they now throw InsufficientMoneyException or a = subclass if the transaction cannot be completed. The exception object = typically contains information on how much money is missing. Some mis-named methods in the HD key derivation API were renamed. The WalletEventListener interface has an extra method for watching = scripts now. Peer discovery classes moved under the net.discovery package Any APIs that relied on Netty are now different. New documentation An article on the networking API Info on testing your apps, and how to use regtest mode to make a private = Bitcoin network that allows you to mine blocks instantly. A reference table showing which API's implement which Bitcoin = Improvement Proposals (BIPs). Please note that as I am no longer employed by Google, after 0.11 = signing the Google contributor license agreement will no longer be = necessary. I look forward to welcoming contributions from Andreas = Schildbach now this requirement has gone away. Also, in future I plan to = re-namespace the library from com.google.bitcoin to org.bitcoinj - = auto-migration scripts will be provided when this is done.= --Apple-Mail=_2E7F6410-F266-438C-8827-0A689511BFFB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii Hello,

I'm = pleased to announce the release of bitcoinj 0.11, a library for writing = Bitcoin applications that run on the JVM. BitcoinJ is widely used across = the Bitcoin community; some users include Bitcoin Wallet for Android, = MultiBit, Hive, blockchain.info, the biteasy.com block explorer = (written in Lisp!), Circle, = Neo/Bee (Cypriot payment network), bitpos.meBitcoin Touch, = BlueMatt's relay network and DNS crawler, academic advanced contracts research and more.

The release-0.11 git tag is signed by Andreas = Schildbach's GPG key. The commit hash is 410d4547a7dd. This paragraph is signed = by the same Bitcoin key as with previous releases (check their release = announcements to establish continuity). Additionally, this email is = signed using DKIM and for the first time, a key that was ID verified by = the Swiss government.

Key: 16vSNFP5Acsa6RBbjEA7QYCCRDRGXRFH4m
Signature = for last = paragraph: H3DvWBqFHPxKW/cdYUdZ6OHjbq6ZtC5PHK4ebpeiE+FqTHyRLJ5= 8BItbC0R2vo77h+DthpQigdEZ0V8ivSM7VIg=3D

Notable changes and new = features

  • Thanks = to Ken Sedgwick, an implementation of BIP39 ("Mnemonic code for generating = deterministic keys") has been added. This is compatible with = the latest Trezor implementation.
  • Thanks to Mike Belshe, the = wallet can now send to P2SH addresses.
  • Thanks = to Matt Corallo, the network layer was rewritten from scratch. It no = longer depends on Netty, and it now supports both blocking and = non-blocking sockets. In practice that means Java's built in support for = transparent SSL and SOCKS becomes available again, which in turn means = connecting via Tor is now possible. The new framework is lightweight, = easy to understand and has been running a DNS seed crawler for some = months now.
  • Thanks to Kevin Greene, we've added some = support for the BIP70 payment protocol. Wallet authors can now consume = payment requests, check their signatures and submit payments with the = new easy to use PaymentSession class. The wallet-tool command line UI = has support and an article explains = how to use it.
  • Thanks to Miron Cuperman, the wallet can now = watch arbitrary addresses and scripts. The wallet could previously watch = an address as long as the public key was known. Now it's possible to = watch for addresses even when the public key is not = known.
  • Also thanks to Miron, Bloom filtering was = also improved. The system now tracks false positive rates and cleans the = filter when FP rates get too high. Unfortunately, some privacy bugs in = Bloom filtering remain, which could (amongst other things) allow a = malicious remote peer to test whether you own a particular = key.
  • Thanks to Alex Taylor (bitpos.me), a new PostgreSQL based = pruning block store was added. This block store is fast, and indexes the = UTXO set, allowing for fast lookup of the balance of any given = address.
  • A Java 8 based wallet template app is now = included. The template is designed for people writing contract based = applications. It provides a simple app that can be copy/pasted, which = connects to the P2P network, manages a wallet, and provides a GUI that = shows progress, balance, address+qrcode for receiving money and has a = button that is used to empty the wallet out. It's designed to have an = attractive and modern look, with tasteful animations and = artwork.
  • Micropayment channels got many big = improvements to the API and implementation. The release in 0.10 can be = seen as a beta, in this release the micropayments code has been taken = for a test drive for a couple of real apps and many rough edges polished = as a result.
  • The default USER_THREAD executor can now be = replaced, allowing a 1-line switch of all callbacks onto a thread of = your choice instead of needing to override each callback, each time. = This should simplify and clean up the GUI code of wallet apps = significantly.
  • The WalletTool command line app has a = more convenient user interface now.
  • A new DNS seed has been added. = The seed is run by Christian Decker, from ETH Zurich.
  • bitcoinj 0.11 will shortly be available via Maven Central. Please = use the dependency verifier plugin and/or check the PGP signatures on = the uploads, if you use this!

Smaller = improvements

  • We finished adding nullity annotations to the API. You should now = be able to assume that any method not annotated with @Nullable won't = ever return null values.
  • The WalletAppKit got a bunch of new features and = convenience APIs.
  • The wallet will now create inputs with dummy = signatures if the private key for an output is missing, rather than = throwing an exception. You can then edit the input later to substitute = in a real signature. This is useful when the signing is being done = elsewhere, outside of the library.
  • In full verification mode, = execution of scripts (i.e. checking signatures) can now be switched off. = This is useful if you trust the source of the chain and just want to = calculate the UTXO set.
  • The wallet risk analysis code = is now pluggable, better documented and checks for finality in a more = sensible way.
  • Various memory usage and flow control = optimisations were made to allow much larger wallets to sync on = Android.
  • The transaction broadcast algorithm was = changed to be more robust.
  • Double spend handling in the = wallet was improved.
  • Generated signatures now use = canonical S values. This will aid a future hard-forking rule change = which bans malleable signatures.
  • Some fixes were made for enable = usage with the Orchid Tor library. Further support for Tor is planned = for future releases.

Notable bug = fixes

  • Some = hard-forking full verification bugs were fixed.
  • Thanks = to Miron, PeerGroup now = performs exponential backoff for peer connections, for instance if we = cannot connect to them or if they disconnect us. This resolves an = annoying bug in which if the library was configured with a single peer = that was down, it would spin in a tight loop consuming = battery.

API changes

  • Some functionality of the = Wallet class was moved into separate classes under the wallet = package.
  • The micropayments API and protocol changed. = New clients/servers are not compatible with apps running against = previous releases.
  • The Wallet sendCoins/completeTx methods no = longer return booleans or null to indicate failure, they now throw = InsufficientMoneyException or a subclass if the transaction cannot = be completed. The exception object typically contains information on how = much money is missing.
  • Some mis-named methods in the = HD key derivation API were renamed.
  • The WalletEventListener interface has an extra method for = watching scripts now.
  • Peer discovery classes moved = under the net.discovery package
  • Any APIs that relied on Netty = are now different.

New = documentation

  • An article on the networking API
  • Info on = testing your apps, and how to use regtest mode to make a private Bitcoin = network that allows you to mine blocks instantly.
  • A = reference table showing which API's implement which Bitcoin Improvement = Proposals (BIPs).

Please note that as I = am no longer employed by Google, after 0.11 signing the Google = contributor license agreement will no longer be necessary. I look = forward to welcoming contributions from Andreas Schildbach now this = requirement has gone away. Also, in future I plan to re-namespace the = library from com.google.bitcoin to org.bitcoinj - auto-migration scripts = will be provided when this is done.

= --Apple-Mail=_2E7F6410-F266-438C-8827-0A689511BFFB-- --Apple-Mail=_9BE00017-DEB6-456A-94B5-B595074C4DE3 Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIZmzCCBjQw ggQcoAMCAQICAR4wDQYJKoZIhvcNAQEFBQAwfTELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0 Q29tIEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxKTAn BgNVBAMTIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA3MTAyNDIxMDE1NVoX DTE3MTAyNDIxMDE1NVowgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSsw KQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYDVQQDEy9TdGFy dENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAMcJg8zOLdgasSmkLhOrlr6KMoOMpohBllVHrdRvEg/q6r8jR+EK 75xCGhR8ToREoqe7zM9/UnC6TS2y9UKTpT1v7RSMzR0t6ndl0TWBuUr/UXBhPk+Kmy7bI4yW4urC +y7P3/1/X7U8ocb8VpH/Clt+4iq7nirMcNh6qJR+xjOhV+VHzQMALuGYn5KZmc1NbJQYclsGkDxD z2UbFqE2+6vIZoL+jb9x4Pa5gNf1TwSDkOkikZB1xtB4ZqtXThaABSONdfmv/Z1pua3FYxnCFmdr /+N2JLKutIxMYqQOJebr/f/h5t95m4JgrM3Y/w7YX9d7YAL9jvN4SydHsU6n65cCAwEAAaOCAa0w ggGpMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRTcu2SnODaywFc fH6WNU7y1LhRgjAfBgNVHSMEGDAWgBROC+8apEBbpRdphzDKNGhD0EGu8jBmBggrBgEFBQcBAQRa MFgwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLnN0YXJ0c3NsLmNvbS9jYTAtBggrBgEFBQcwAoYh aHR0cDovL3d3dy5zdGFydHNzbC5jb20vc2ZzY2EuY3J0MFsGA1UdHwRUMFIwJ6AloCOGIWh0dHA6 Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNybDAnoCWgI4YhaHR0cDovL2NybC5zdGFydHNzbC5j b20vc2ZzY2EuY3JsMIGABgNVHSAEeTB3MHUGCysGAQQBgbU3AQIBMGYwLgYIKwYBBQUHAgEWImh0 dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwDQYJKoZIhvcNAQEFBQADggIBAAqDCH14qywG XLhjjF6uHLkjd02hcdh9hrw+VUsv+q1eeQWB21jWj3kJ96AUlPCoEGZ/ynJNScWy6QMVQjbbMXlt UfO4n4bGGdKo3awPWp61tjAFgraLJgDk+DsSvUD6EowjMTNx25GQgyYJ5RPIzKKR9tQW8gGK+2+R HxkUCTbYFnL6kl8Ch507rUdPPipJ9CgJFws3kDS3gOS5WFMxcjO5DwKfKSETEPrHh7p5shuuNktv sv6hxHTLhiMKX893gxdT3XLS9OKmCv87vkINQcNEcIIoFWbP9HORz9v3vQwR4e3ksLc2JZOAFK+s sS5XMEoznzpihEP0PLc4dCBYjbvSD7kxgDwZ+Aj8Q9PkbvE9sIPP7ON0fz095HdThKjiVJe6vofq +n6b1NBc8XdrQvBmunwxD5nvtTW4vtN6VY7mUCmxsCieuoBJ9OlqmsVWQvifIYf40dJPZkk9YgGT zWLpXDSfLSplbY2LL9C9U0ptvjcDjefLTvqSFc7tw1sEhF0n/qpA2r0GpvkLRDmcSwVyPvmjFBGq Up/pNy8ZuPGQmHwFi2/14+xeSUDG2bwnsYJQG2EdJCB6luQ57GEnTA/yKZSTKI8dDQa8Sd3zfXb1 9mOgSF0bBdXbuKhEpuP9wirslFe6fQ1t5j5R0xi72MZ8ikMu1RQZKCyDbMwazlHiMIIGNjCCBR6g AwIBAgIDBnIfMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRD b20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYG A1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBDbGllbnQgQ0EwHhcN MTMwNDIxMDExNDU0WhcNMTQwNDIyMTMyMjMzWjBVMRkwFwYDVQQNExBraUxnVHZjUWRZY0IySldQ MRgwFgYDVQQDDA9taWtlQHBsYW45OS5uZXQxHjAcBgkqhkiG9w0BCQEWD21pa2VAcGxhbjk5Lm5l dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLeGOyJFqq/jERHs+8X/CwcZ+NRs80U dYZOTblQaE5+mELLNCnL+55EWyfre8zUVHXcRdnaGETCC5S5edkBxjDxbfPD6o8R4zIoZyHpxjFd +j98rCEsHUkvjygw2ALGp5vV3pBaLmYa323J4E+VCV6wfpQsBaQgZe9yLE44hRfJ12ObpwVIJrao To6ehX++Kn/tKMhe4WQuPm4gDHGFQHzisIf9/03Dn9kRIeqhxjfIXT6osiQPhdLi76Ijzi2UabHr jGpivhWQoY+hdLTuPsCKw3Z/Mp2K7nGjPPuHIyRshbPys9Epcx/h81XJGTAFqbswHJwfu6tdV0Gp FOHwzq0CAwEAAaOCAtUwggLRMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQGCCsG AQUFBwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQUyEcJY3IWy2yXzEK+hzh7tO19psUwHwYDVR0jBBgw FoAUU3Ltkpzg2ssBXHx+ljVO8tS4UYIwGgYDVR0RBBMwEYEPbWlrZUBwbGFuOTkubmV0MIIBTAYD VR0gBIIBQzCCAT8wggE7BgsrBgEEAYG1NwECAzCCASowLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cu c3RhcnRzc2wuY29tL3BvbGljeS5wZGYwgfcGCCsGAQUFBwICMIHqMCcWIFN0YXJ0Q29tIENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MAMCAQEagb5UaGlzIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQgYWNj b3JkaW5nIHRvIHRoZSBDbGFzcyAxIFZhbGlkYXRpb24gcmVxdWlyZW1lbnRzIG9mIHRoZSBTdGFy dENvbSBDQSBwb2xpY3ksIHJlbGlhbmNlIG9ubHkgZm9yIHRoZSBpbnRlbmRlZCBwdXJwb3NlIGlu IGNvbXBsaWFuY2Ugb2YgdGhlIHJlbHlpbmcgcGFydHkgb2JsaWdhdGlvbnMuMDYGA1UdHwQvMC0w K6ApoCeGJWh0dHA6Ly9jcmwuc3RhcnRzc2wuY29tL2NydHUxLWNybC5jcmwwgY4GCCsGAQUFBwEB BIGBMH8wOQYIKwYBBQUHMAGGLWh0dHA6Ly9vY3NwLnN0YXJ0c3NsLmNvbS9zdWIvY2xhc3MxL2Ns aWVudC9jYTBCBggrBgEFBQcwAoY2aHR0cDovL2FpYS5zdGFydHNzbC5jb20vY2VydHMvc3ViLmNs YXNzMS5jbGllbnQuY2EuY3J0MCMGA1UdEgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tLzAN BgkqhkiG9w0BAQUFAAOCAQEAd9sNcxjNTqAQyyRBCsaZKAQKVlT7zN4wqw8DTfnP4wXh6ycgayxg 5Ga6qy85aitivfMcyJuM7ojAWXBjBAlKIFYL+dlPByWFFVxaAsYD/rhhLP1t+nGHLA06YLtz+pJo icODvOoyxlPTp66qeu/TMT8WTaO5Qpdr0Tn3MLPMwJN7BewLng8zpxoOV/u/xrmpkMV2PwlpTonb L9VNUWYI0VsBG/0MDiLEQw6rg668gMRK06bM8GovzLU7i2z2Q0tz1kKeYKHAluC1N84qrO3V9tkp oNDFPHlGfdmdkJDZeW7gF99+kCQVqr5pIadbp0Tmj7Kttwou1juSa/iaDgoMyDCCBm8wggRXoAMC AQICEADVy4nCkwCb7b0BS9wQlgIwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTATBgNV BAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIwHhcN MTAwMzA4MTQwNTA0WhcNMjUwMzA0MTQwNTA0WjBXMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp c3NTaWduIEFHMTEwLwYDVQQDEyhTd2lzc1NpZ24gU3Vpc3NlSUQgUGxhdGludW0gQ0EgMjAxMCAt IEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4cSEEXIyNDHcWYj3QrVO/5OBfrIU aK4au+FEcSFe4MvQ9/wV3p9DGSTf8vljcgHNPIYo4iHYh8xJVn7HK7PG6yS+JnoQsl5c8DI7UE5Z W/kjfHj45W+rDmyhntQqG7FjPZQoPWdlC2lGkV2NEtenU+U0jXf2NpQw3LiPtF3CjliXr8BdusJk vUm0ItfaJabF4+ygFa9qAm9YLGYaMNck17CoKsCVtDdaFKjBm3ColZeB5GAEZTwdBwFnHNp9fXvn +QuNwhE5wMZT46pVXNbJlCrnEdblmiWEhei9jB5381hSsKai/zLaldVQ/aSu10WYg5KKkUfSWVVS cT+j6PtM2QIDAQABo4ICQzCCAj8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAw HQYDVR0OBBYEFOlEhoCS6k5Qd8nnkghC11/AwiVCMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0ZdHe larp35zMMIH/BgNVHR8EgfcwgfQwR6BFoEOGQWh0dHA6Ly9jcmwuc3dpc3NzaWduLm5ldC81MEFG Q0MwNzg3MTU0NzZGMzhDNUI0NjVEMURFOTVBQUU5REY5Q0NDMIGooIGloIGihoGfbGRhcDovL2Rp cmVjdG9yeS5zd2lzc3NpZ24ubmV0L0NOPTUwQUZDQzA3ODcxNTQ3NkYzOEM1QjQ2NUQxREU5NUFB RTlERjlDQ0MlMkNPPVN3aXNzU2lnbiUyQ0M9Q0g/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9i YXNlP29iamVjdENsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50MGEGA1UdIARaMFgwVgYEVR0gADBO MEwGCCsGAQUFBwIBFkBodHRwOi8vcmVwb3NpdG9yeS5zd2lzc3NpZ24uY29tL1N3aXNzU2lnbi1Q bGF0aW51bS1DUC1DUFMtUjMucGRmMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov L3N3aXNzc2lnbi5uZXQvY2dpLWJpbi9hdXRob3JpdHkvZG93bmxvYWQvNTBBRkNDMDc4NzE1NDc2 RjM4QzVCNDY1RDFERTk1QUFFOURGOUNDQzANBgkqhkiG9w0BAQUFAAOCAgEAOoY+H9Ann9SpqVsH Be34r3tt2coVn5386F0UiH1IhaWNMVZoq0/sKjXuWp+kZrkNAqWwhvk4qghllxtngI7DSG4+1/9S Gnpe8DTvngRHesAzVkbHfCoNqlKGBnjCp6i+cdmzOb3opj0MCd5kQkPksw3YTkBXJDiNaU43YRRX b1uEAgQbizKkBgxZGpjDa4FSs5ry+Yq2rXeaUlPWmCR9wZS5kZ1anyfwyRSmFQK/bPMikCw9ySe2 8Dtz9nMNwZmHNGvhGYUF+F0QHMb+sdbGx6TD465fqdYe5M7/YpElRvS6jKOPScqUZoq0xxrBakc4 XPQgNOCrCRu0PKgROWeUGv3zZw8uY5Xy5DJoe7F7anxEJgTw9A41S0WDh75Iwjr9l91S9IzeiGR3 g6S6hrek98PWjdHmAfIo9FHGCSXbJFfa958h82QKnydUy79enXwRcPbvlw1FoTkBWgc0uceIx3jV MlU7NyE+0PCiMIWM/YBbn0B0KmTYb2hdde8YDGp2M+qbW2wQv1gjC9vtm0Ens1bemN3GgeWQxQXM AYXDJWb+dFy1sOIwvhzp31ei06x4C3EuiQXINzkQdgOL/7b5e5r23M4xWdISv9IEHwPc4IuXJ2NB rB8zk9RmZRcQOjeHdwDM7n+i3FlPjL2/StV28qIuPiwzYjQhzQOBQM+7xd4wggayMIIFmqADAgEC Ag8A3Hz8Etjr03yOomWvEiEwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQ0gxFTATBgNVBAoT DFN3aXNzU2lnbiBBRzExMC8GA1UEAxMoU3dpc3NTaWduIFN1aXNzZUlEIFBsYXRpbnVtIENBIDIw MTAgLSBHMjAeFw0xMzExMjExNDI5NDhaFw0xNDExMjExNDI5NDhaMGcxJzAlBgNVBAMTHk1pY2hh ZWwgSGVhcm4gKEF1dGhlbnRpY2F0aW9uKTEeMBwGCSqGSIb3DQEJARYPbWlrZUBwbGFuOTkubmV0 MRwwGgYDVQQFExMxMzAwLTgwMTUtMTU4Ni05MTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAhgAkK5PH/nRIcQcBZamR4P7jkS96g+ud/Tqi32bElgSzuuW6aWzOE0n/XR5HWf40mDx1 dRj0WM3dt/7Cl1KomoShfIsNxHxcG420vpeoQNQd8r8TokojCX6Y5l+TlAvSPdGhIyEOXG3puryO 4XBZNYHVkZ9fwhC7bau1sbn7mcU2qba/TwkRDGIFSiCml6z8rBMiJ/cSII2QcNgS+ziv82Uhz4i4 GVNPOmegboHkE8qT+gouEeVWMLivXDbAwQF1fBaE75z/Wr+w0K6YJtS7oAbgwIEJpe8/1/OS8HI8 46+02eMxThD+vqwnxcQo+EpicvoqmOsjnLErQG1cTA556QIDAQABo4IDaTCCA2UwTwYDVR0RBEgw RoEPbWlrZUBwbGFuOTkubmV0oDMGCisGAQQBgjcUAgOgJQwjMTMwMC04MDE1LTE1ODYtOTExOEB1 cG4uc3Vpc3NlaWQuY2gwDgYDVR0PAQH/BAQDAgeAMCkGA1UdJQQiMCAGCCsGAQUFBwMCBggrBgEF BQcDBAYKKwYBBAGCNxQCAjAdBgNVHQ4EFgQUp8JGBqJ9qpKjNlth17DhQ+pIAG8wHwYDVR0jBBgw FoAU6USGgJLqTlB3yeeSCELXX8DCJUIwgf8GA1UdHwSB9zCB9DBHoEWgQ4ZBaHR0cDovL2NybC5z d2lzc3NpZ24ubmV0L0U5NDQ4NjgwOTJFQTRFNTA3N0M5RTc5MjA4NDJENzVGQzBDMjI1NDIwgaig gaWggaKGgZ9sZGFwOi8vZGlyZWN0b3J5LnN3aXNzc2lnbi5uZXQvQ049RTk0NDg2ODA5MkVBNEU1 MDc3QzlFNzkyMDg0MkQ3NUZDMEMyMjU0MiUyQ089U3dpc3NTaWduJTJDQz1DSD9jZXJ0aWZpY2F0 ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwgbYG A1UdIASBrjCBqzCBmwYIYIV0BRoBAQIwgY4wTAYIKwYBBQUHAgEWQGh0dHA6Ly9yZXBvc2l0b3J5 LnN3aXNzc2lnbi5jb20vU3dpc3NTaWduLVBsYXRpbnVtLUNQLUNQUy1SMy5wZGYwPgYIKwYBBQUH AgIwMhowU3Vpc3NlSUQgaWRlbnRpdHkgYW5kIGF1dGhlbnRpY2F0aW9uIGNlcnRpZmljYXRlMAsG CWCFdAFZAQEBATCB2wYIKwYBBQUHAQEEgc4wgcswZAYIKwYBBQUHMAKGWGh0dHA6Ly9zd2lzc3Np Z24ubmV0L2NnaS1iaW4vYXV0aG9yaXR5L2Rvd25sb2FkL0U5NDQ4NjgwOTJFQTRFNTA3N0M5RTc5 MjA4NDJENzVGQzBDMjI1NDIwYwYIKwYBBQUHMAGGV2h0dHA6Ly9wbGF0aW51bS1zdWlzc2VpZC1n Mi5vY3NwLnN3aXNzc2lnbi5uZXQvRTk0NDg2ODA5MkVBNEU1MDc3QzlFNzkyMDg0MkQ3NUZDMEMy MjU0MjANBgkqhkiG9w0BAQUFAAOCAQEAQENx9hsahnGo3u/8ksy53OxZkaSISe6e4XT1i/o0qZ6D Kd9noZ2LvbclyyNo3Q9W4TU1pP41yf4JcL25sx1z7U/e9Ze7vTZN/GZ+gv20gaCqm/cQWF19PjzT PqYXvJjGK6euiQzACN/IEjxeuzaiml02jpFnH1VrNvgfib/WQCL9y1dK6aLx9noP3CXCnd0ZWhYI dh1e4NZXetRFKII1z/iAlevHmEdLAv0XgKFA6RnBdxCFdw6E7cz2TUS3m59IkrE3z/3swGV+lg7Q 60ZNMAeskg1+zhNpaY9FyBdRDXk2K43ItgE5Mr8+LCdGwoIofXubME12En6DuOnQ38mqGzGCA0Qw ggNAAgEBMGowVzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzExMC8GA1UEAxMo U3dpc3NTaWduIFN1aXNzZUlEIFBsYXRpbnVtIENBIDIwMTAgLSBHMgIPANx8/BLY69N8jqJlrxIh MAkGBSsOAwIaBQCgggGvMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8X DTE0MDIwNDEyMDExMlowIwYJKoZIhvcNAQkEMRYEFHXhqBtLVOR/JFPXJIJO5CxDW+nuMIGlBgkr BgEEAYI3EAQxgZcwgZQwgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSsw KQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYDVQQDEy9TdGFy dENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQQIDBnIfMIGnBgsqhkiG 9w0BCRACCzGBl6CBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0YXJ0 Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENBAgMGch8wDQYJKoZIhvcN AQEBBQAEggEAB1POyiKlqRl/nKE/qGOMfVNhBRRyaO7IVquDJ+swMvTOmmTVIzjEqdVsO5yOC+hv 2qX/aFx48kZ6cUWNBPITmKPE1KydE/oGe++QewoHXbHypdX5s99/rqqgXeA55b4VbmTPJdJd6Pca +OYmHznzTK+dXNen2UrrPH6G8w5lFLxfOJIrlLv7KHBH0N1o7Um2o/wXTBqtFvt9aPuD9dlhomM1 tLtyXCY2CEZ8uqkELhD1+dFqCJ+QsCdPYoRRMKIrXHf48JwfNkdqxjfngAyf570QQZnZresMK9Au HSIYO2aDdq7C0r/pKfIMZeKsRBufcxNLAigQFLavdhPz2yi45gAAAAAAAA== --Apple-Mail=_9BE00017-DEB6-456A-94B5-B595074C4DE3--