diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2018-07-12 17:56:32 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2018-07-12 18:03:01 +0200 |
commit | 23d570338e252c715c5a24a1a81fbaf5c8eddcf7 (patch) | |
tree | a4f69f505400a1d203502591bc007b8b98f0a1e7 | |
parent | 5475981bc46d110b91ae695eaf9dc5bcfb8872cb (diff) |
openpgp: Fix reading large chunks of armored data.
- When requesting more data, we need to add what we want to what we
got, not what we previously requested. Note that
`BufferedReader::data(n)` may return more than n bytes, so
requesting n+2 bytes may not return more than when requesting n
bytes.
-rw-r--r-- | openpgp/src/armor.rs | 38 | ||||
-rw-r--r-- | openpgp/tests/data/keys/yuge-key-so-yuge-the-yugest.asc | 1377 |
2 files changed, 1405 insertions, 10 deletions
diff --git a/openpgp/src/armor.rs b/openpgp/src/armor.rs index 931ad44e..2d8932a4 100644 --- a/openpgp/src/armor.rs +++ b/openpgp/src/armor.rs @@ -618,22 +618,21 @@ impl<'a> Read for Reader<'a> { } let (consumed, decoded) = { - // We may have to get some more until we have a + // Try to get enough bytes to fill buf, account for bytes + // filled using our buffer, round up, and add enough for + // the footer. + // + // Later, we may have to get some more until we have a // multiple of four non-whitespace ASCII characters. - let mut get_more = 0; + let mut want = (buf.len() - read + 2) / 3 * 4 + + self.kind.footer_max_len(); // Keep track of how much we got last time to detect // hitting EOF. let mut got = 0; loop { - // Try to get enough bytes to fill buf, account for - // bytes filled using our buffer, round up, and add - // enough for the footer. - let raw = self.source.data((buf.len() - read + 2) / 3 * 4 - + self.kind.footer_max_len() - + get_more)?; - + let raw = self.source.data(want)?; if raw.len() == got { return Err(Error::new(ErrorKind::UnexpectedEof, "Armor footer is missing")); @@ -662,7 +661,7 @@ impl<'a> Read for Reader<'a> { } // Get some more bytes. - get_more += 4 - n % 4; + want = got + 4 - n % 4; } } }; @@ -977,6 +976,25 @@ mod test { } } + #[test] + fn dearmor_yuge() { + let mut file = + File::open("tests/data/keys/yuge-key-so-yuge-the-yugest.asc") + .unwrap(); + let mut r = Reader::new(&mut file, Kind::Any); + let mut dearmored = Vec::<u8>::new(); + r.read_to_end(&mut dearmored).unwrap(); + + let mut file = + File::open("tests/data/keys/yuge-key-so-yuge-the-yugest.asc") + .unwrap(); + let r = Reader::new(&mut file, Kind::Any); + let mut dearmored = Vec::<u8>::new(); + for c in r.bytes() { + dearmored.push(c.unwrap()); + } + } + quickcheck! { fn roundtrip(kind: Kind, payload: Vec<u8>) -> bool { use std::io::Cursor; diff --git a/openpgp/tests/data/keys/yuge-key-so-yuge-the-yugest.asc b/openpgp/tests/data/keys/yuge-key-so-yuge-the-yugest.asc new file mode 100644 index 00000000..efdc9bc9 --- /dev/null +++ b/openpgp/tests/data/keys/yuge-key-so-yuge-the-yugest.asc @@ -0,0 +1,1377 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +xcLYBFsibwwBCACzeH815rWkl1nO84AOc4JwGy0iFQea2oSmhJs1wuu1QeZY04Y0 +RW1HFbKo43WA1s0s0hCuJ4GQGLlGLERz+txz2NzojBLx1aHqiTCux5CtBiNwl1ok +yteLyIqsg+006pA1swLx2rCvO8+x2EPEVT0yfsv5HpFmMc/rXEfcKiP44SUZl30c +c8wE4Vlmh0WS1W5T9PoZVuzSXwhH8DW8fDJx9yPRQd0bTAvKdPJjmDwSsia1hcSd +KtasKx4gCPc8M6Ld2sC8i0M15d3NsiFDPgpQRY/szJNCg86Ju8VBKjaDs239txvo +k/SA4ieBl2ikq0oYzwwSQw07s/LHUirDss5JABEBAAEAB/sFu/3kjQCUx7k44ZLf +41TxnAyvIBjkG8NNRsNmzlmVqwtfHzMUjHtXYBwbRVlFypc3rWaXCfAb2I5i7Zsq +UYOlt/InBAK+82J/Ce8iRoIa5S1QtaVNs6V7c+bqaDS2EiCVdqjLbX9jufeC6TQR +G+Aesup1hUKED2djT8mEAVyw4QMDVP28j6SVazTymN5M3Cx+dcE6cq/m6FsashTR +XxGANTfzz5ri4BLq1qkbJbF347w/NgFb9uwxdnL7CbRCP9xVwl6DTxt3CmOXHEyO +8XRKlBgcrOQ65IDYpj+bYEpJjoYi0jvDtH4/FWyJ/kIfEshzpjs1IVjqc8MmRGJB +8+MBBADj2Ul5pDDIRfSueFqDySCwSFauFE+XP9MYfqIUOzA3ype4LV8iEVWkL6Uy +21eRQLaSU1lB2bgi7GQx9CSuwbDfdcBLTp5MEkekyILIq80Ldv8ATeaCvG1gaLoo +XcAXK4xYcRaNXLOeDioApFzE4w+OYSXLU9pokdmUAKcC9g3W2QQAyaUKpKfFr7/t +mda5e+RMqS9JPwkyFJU0Zru2Wc8QdP8QLiSNEUqjyUvjEjMQ6bW3lvUXqGvhM1XT +lTB0I87Z+zNysV+LzRDPDBeJXZMJ6BsATYJpvmU73zH875P2REimRBX+3YewLO74 +QlIBp8AH3SmEt2iEwYo6grcTvaVIbPED/RO5YCXKgGGpBENLvJ325DUm4tT2qWKI +k9BYyDvBIK5LD8OkdEfg9AVVKwz33CPlSnj/t4xj5OD4yxZZ+Zd4qDO2LDDLOdU2 +hdpcIMieOYq+wZ3x5WXlaN4U9RP673NJ5mxbbBISu0ax/q2M+oeDeo3O8tDuureM +Y0su2nQ0fK0kPyDNIkZ1dHVyYSBQcm9vZmEgPGZ1dHVyYUBleGFtcGxlLm9yZz7C +wHwEEwEKADACmwMFglsibwwFiQHf4gAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQ +f1BjVc0M30AAAJMnCACKE68Km1bigUmsp73r/n5cIGo29YT4FfzdNIw8VqWG3ICe +0y59NtAdF56sGoEfBtkdDv3uXL8UFHRU5kK+armNYAibF6DshmNg4sbj3/75m5TB +KnDg+dC4pF1cnTcJjU+CHj9KPxlS+d5oUjJqADjixTcNGQr22bztdPq8T2TCYycm +12cJPKE2h7d2BT9yRmx8UDxdkgo2yfEIwH+/ov4HkW2Sw5SIFHFUorxIjOlSSbDF +Q31ekuEqtzd6sq7ovOdLGpQyQ50SvZ7KMZ3zjiXsKVsDYS5PmDanadsGyYYp5KD0 +F3m3LR7k5KWZHi552z79oCOA8fxbaFlzVj5kcjsSx8LYBFz5FowBCAC3AaIU5/O3 +7Nzfrh+Lml+LiDklitEygRNgmKE5KzUYVY6q1RFaJEK0CIk1UJ1M1FWoaJFbNgBF +e95ZiZT4NbZTeKyf10HAiYSV8evu5aoyHpvftvg64K7QhNGmKtZVisvBTUeSH5me +6xr0t98XutganAIwckhNbli0MDy8inj3yxyTJTML5/mGELUpQJ4XtXuXjw24DQ2b +D1ctcz/QLVbIW1ldMjWThWcf2VgC7qhfsAgA1ZnHUiPV55dHLh/y1fg9f6m5MkhI +nTvLIdqu2uQytK6ef+4EirgmQBTBBDXFKwztky1DpwHEU3mkXQoec/I1IEwxtk6s +XoqiWcSBjOZrABEBAAEAB/9mOMxPPyz8nJrXeox2Tzl1WBcLqFmoCz9GoprTsxXK +TOgO9krl/gEgTPBPToM+yhA6rIYc27IVHdaaTuZeKqp4P5y0/+jjYi0kEGjIHZMO +wdgxgyNux9f982KjnaPxTkD37XG/5lTJ1utMrHQ57g0N9/ylEQDf93Ym2Bbk/bgK +OID7Doxg7FReHi7HHP8eQxQTpsrOF+1bP1M8w6TRhGSYEWM+RS2yFSU1SGFcKGwM +vqJ97ycvZPs2kgU4mHkNDlRivv2UM4tm4lgA+r4nCKJtTfJXzw6XK7DyfOWvmsNn +H6UnqZb+7YTqhSDsqM+Hfl+dByKC0zey0MmTaU6/fwkBBADgfEw+Tex03HI2M+Jr +HV0rnZMpE0lhNZlgUn63LKTUD7cxgWVZhDDlrOezsK5R72Ma9lXNQRyjcPGg/sJX +TBSyuTZEVy29ILjdRd1PU9BoqZXoJj1xU3+xD5+xnnxu+k2JkbakffSDk7Dk/yHH +ybLD6491wlyiJe78joqNnVtdgQQA0LKhmhCk5f9txmmzjnYL2K5xwNiigGTXM4je +sJ4nbFxb70zM5RKBkVsEHQi7vPjGY57luVTCSMtqn8ByiqyJIlHHeWAGGU22iyfp +C1/qrJ1D13jQ/d5LSZCBS1Vhu8Weu7U3IGUo1wRuRoFCpIGm0NIKL9RMi0WyQqeD +ehq4kesD/2e4cu/ZW6nyy0t5j66+O+41RewBNCS9wZqG98J2xNOlx0axX9VL/GtB +J/EGRHL/Og17I/J5ziaMPcihXEVWpRB2ZgqMqdsBj7Ey9t9eU4huD2AdSzjZMn1V +ngJ/A27BhuIEdZmZhOfENaXH5CEud6zYWoNZcR+wVeV+nGhbPkniRHjCwHwEGAEK +ADACmwQFglz5FowFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M +30AAAJ8ZB/4xKmL2t+7vV5IasY1aR4HQiNWcdFc4IN1NoAAcSYZj5LcZiTHFVnHL +fBFMQTqr1jYZPaqG7p/5/He9VJPXa3qNpOzY5fUndJxREKEnmeTE+fnOrEfYZhVB +b8yVIjVgTi9qFv8q5D16hn1BE1YsqMPJziumzLsa22pJr+c3oRfAq0I2RWzXH3yg +9dq0dRbYIhBqLsxl9ZHmQu1+Kk9Ll2LOEg21HRWToT/D5NBWY8JaUWmJ795sxFPO +ixGENrFXeZ2vbeZ9hrE/DpiVWNWNNs5HdK8m4Z6g944V/Xqe2jQi/pVaKQsqpYIr +vR20iyd5sJcqNUmsmrRkSGBoSIWQ7gXpx8LYBFzv3AwBCAD2EUHFmwmHPrzDvwHr +tmHsFkEsBtANFKKzkUuuNzXTIx6vAWkXoB4pB+ArxAa5r4Z0ni0/OY4EEdnexq8p +8l4m/5Ga/Rd4GwuftybVdNPUZwIcdNBJI1BeN/AWPYtqHxxUa8jZpECdw6NmBfkH +CXOgx6TH2T4QO6Eqkm/6AFDFC2nC4VM/hLNg256odMxV95SqGIF4swweNlKjY/gu +3j0i8smtHCfMrGhDgqEErD4+JEUcTdfO63ZpIsauhC4QhF/lqDY8aYigcjeERrSP +/q9rbDqY/7NC92qEFq97XWAV09fNm9gjj2wbJL7pzTNUTMx4sRTXyrRQ9J7CbHTj +Sb8bABEBAAEAB/9Q7WgGR3Egy99lOYK2NSuLa95PToZKZwkDqbuMNpg7Moe64unf +XUfOEssFWdkkZLgBzqvu6Uztxbkz7YBaeV3B0bffk3GOjMaL5r6c4Wlxp9cn6Ls/ +8p9R/W+2wNMDOewlT7Wk7sJZoKgyu7AlQlSHAmINYENrL1FYIQU24beutechGddy +cjLNAkNOXy8fYGYzXpkKJ+DjYUjTLhcSagqYKoGRjrTtduscu6jLoBUWtZwrWGiQ +JRufQsyHNP3rReUV+WMo8XkjoEOYfah3Bgf97A/ujLUra2gy5mV2thQcCA0B+yfI +cBnNIwdG1g8gVXZps5PkNQd8cxc1hGEGmOTRBAD7pnz0B2rXkhvVYemHkgHOSryO +GNpcZaCEOemxH96ob+vCVPUum/J20LV73p6geG1eUPpR6MzZs7Hb+cpNMhxLQsGM +xe5kEdq3lvWS9gMN3P6DXe6X6DbGsRAGo8jvfrag8PVzkgA/gfh+CmeO0zB/sI22 +KBdOVQb5hDl59kQ/PQQA+lIQs+xsjmbb6Faw7NgcACVLUVx2YPXqrY3n5pAKzf4B +tfwyNBM/xJq/NPo9ZsWQSlZORkEsdrKP0ttI9fuypB0ijouXUH1IMYFQpRLKlxTO +U4DBGxFkdD2m5tPhLh/dnJnmAnfbx2oCv++a+K9UU9KvaAAlR7QcuwS3+VizXTcE +APcgsdxaiPndTP9O5BPKMDYu+K71CANRhrDuaTGkEtwSdFxFEWcvkJfrALtcWJh5 +EHL/3d/vPmrT8JuIoBPkitmY34mkaovuuJT1HbojTZsKXOiWAEnLCLflq080CKtj +yDVwfwEgFSbCZmHRhbc9yj37jeRUnIBc5DeRngAOj5IbQefCwHwEGAEKADACmwQF +glzv3AwFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAMOa +B/9XOkThWrTJnlAauPeXx/myDzILdN5VhrHzKmI9Y+oBRGL2ainENK1tI8Pn+KkJ +31LzwmIu7ld0h+jvm11tKwy+G5S45l1CGqqNIMeFbh9uH0tb7kEHzR+UyO6x1bDk +18OLlnpPcdKQEEVbPAIxLFwOfcsajhSpuNUbowGxMIiEpWdJn1wBOlQHRLHCNr42 +aeg2PANXoQ2MnBf/CBqdJLMTYsRWy3wNkwIpYsRQad6EfQy2soeZQI2dVtuX3vZh +HPGWzH3IFzfQYHS7GnsGw0uQntUCMNDyIvH5zuJcF0grNWCwB44SCg0pHqOwgbkX +Lzw0MsLmN0sBa3pfNuMbkgTNx8LYBFzmoYwBCAC7YNws7qLysQw9WE7zB4h7lByd +2ZDL7dUtcPKjB/SjZouIGewyVwpGVsl81UoCfo5VXFrOy8PH3yX3GkeKWNHd9JBh +9EaDUFQKNEjFPuTF4Lr6W+MqdCjtleHk565zHDT68UBGrIrvrSfTcHzURQtbhMz7 +wC0OSPKk+XRIitblNZdkeumHy5Iki8KSuHeHQqz4sCZ/3e+iClVoNpBOXg0tqJG1 +eQV4wgkNdO2k4ZcQAtbVG7SzyZdoeSiZNfCHcdyyy+PJiEMwP4d4kFNfFyTb6ZqE +1CdoVR3I77oDWmkcrqZkLetokulT2s2EBfmzDb++yByEcbwT3yiOpwKT/qnpABEB +AAEAB/4nDMaV7p2y6kbcufyqFVXSO0nDc8YDWetlbvaCF3RaYVKO6KgazZzsj8Wp +6GFmJ63OCFM8aabBjrXAy49BO8Vw9jjo0Rmo4CLDhaXsxXCz9GPDLUcoX9Dvwp6z +L71ha+12prR4hhjmXjXAkN7S9hip2AFILgK1yWoYC4y6WYTze12fmC5T7zASTd00 +lcCh4MbQ5veFFAly3mOseWjACXkJsw5+F4J6SCjOB8D1Ha52pAvim63tY/5x7GSW +jfV/hFxUMudzYeUeg3jRsmzIg76MSA4CcaqjmRMRfsYqJeIEgQJsatcnED/fQbtt +eO187WUPqbtfKyYrOfTCYyTKWlPpBAD5yI2+AyJb0r6hS68JeTIM7/OYwjKtj4Ss +WpJynLxd05ijreBGqknwPNnueVhChy9o0VWY0jotDuZAzGHyfOD+eC1zZ4iblz4S +PD2i6C4ragmNmWkGwhpsLhf3Wh9YwpLFJy/qzvCIdwfN5zv8DiYMY0UAQN20xg68 +NIh+L8HpEwQAwAq0anUAG3z83EFSIdm01+78phtR/cDz+ZjZIy1o+/Qh/ro5Gtdq +p/mRiA6VmK4duDCKroLLSRmuEve0A8lg2ZHw4UBY8JPb3u120WXrIPSxtfo7YtP4 +EQlbpY3AcK/SpmTkcbNmMaNTh3sebnIhgY3+FiL9+tBOAW6gY1/xXJMD/2nFIBpU +8a/B8vI8XqUvvLvuuKKXgO+eQJ8zSVNP/taZHviMA9OEp3NzR1XBcun+q+g4ucsn +J4AHEQHdHF0cURmVq364ylpslXhP+kBTdbIaLQRHlDzJ7LAbAbhqXEpd1lcsTJdm +O8VRDN7dStKpBkiLAXa5KTDIg89SnknxN3vvSb3CwHwEGAEKADACmwQFglzmoYwF +iQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAOWvB/9lAqRs +ZHsxM/UIWOtYQ1RUkjyWy2lmUF4sh1LJXq2seG+XQg5n9uUtQ4aKVtOB/BRirWRt +c2Cryuwfq44Ml6TBXtqU+vyQAAMlRwB1VPcwDa3nNGBBqQFb2S1CrYZjnCuVtwEp +k1SZz7AFq489MM3nAgp+mgcTzdTzR+13l1v8UmvtAANGNSJmP22okSI4mZ3+96K3 +q7bjAHRcUPJxt8wg1PNX27yLJ+mEDP3GQrii+31Tpd3MdAtGBUAH3SwYJ3vaqq2O +PM+F/xH7AMmdHmhTLUDJS0cqvnS9WoLwJJ0QO2yyjVWNjMfn9HspUHpgGzNiEKxm +YGI3sXM2uC85aGYSx8LYBFzdZwwBCAC9jnTDGspaw0QN2GWM5AfGaytu3wmkS2CT +lQ8BUUrpTvfMZoIFwzlm+UnKWhqTis/ouQ0UMDkFHrc0OVz3ij2vyR3NgL0UVbU/ +OuVk+a2SfkE4OUundfGRba88RI5rb3Df1C1G5bCLWqZ/JQK+hdFAxiiOX3m7emec +QCQ5J/Iip4f/pspfhSwC1C/IrvF2hQVoeA3+GlI48AMs2qXx/BkVtOLAt30xBEA2 ++ZvOZ4KIxxSkBbuGFYVzSAQwzxeWwdiNfN+6iPF588g/ozD6AbTmvgerSX02xlnV +okxhy9wFaxKRaT/pSP49ejgvIV9sCZRFD5Ya23h2fALN5UPkTgq/ABEBAAEAB/0R +OhUadiDVxtE0gOoZt8+NFMhJtzNlHwST5QQMFps8QNT8WoSOiYN5/EXcgfvQVNk4 +STkLEKbd9ECqGlx8kq+wfhKbTovggTmLmYqndplzqs26klpxyaI+mT1HuONImEQl +016aBt3YjFB9VZu+POMbg+bDqaGijClGZf3kw+CZjX/BdFqL0iKWpxsDZPJTiJH4 +I9c7Tqlqq89gFHxEWJ7nAQxW4YwWJoXrGFZbt/5kjsosI/PqU69Wud3syJD5m/Ys +i5CA9rU+nZdByhKVKMvDBI09JIeYtoPxIOXrZHrOC4Z/kOWnCXAM+cKNIBC9x9ts +pNZfpOfZ9RT1FuCtBgVhBADASBUaU4FnOsAjI+blUO8786ktNwbYyrwgJXdo9PVB +WoRaYeytsv8K3JB/NMGC0s9TBxVXhjilYjRhN7lpozI6uGLMjkpnwxeXRsp3bsU0 +It5NxYZZTGeVTzwm5GOoWj9aRP1yfYKiNK3ECIXMDtLDV4C90ZQGVlGLzaDwH9op +qwQA/F8xlIfx9OMriCbuqDx/tzOR3uxNjgEl32xQp7g3s9CCvgPC8jwPWWNtAOre +eOVec5qc1NuacI3YHymiEZNpzUM7jkAMwYipZGeuwixb7RZiuU8T6hgvHZlGYXrl +nUumn+yC9dOoe7y6l/Wq+AjFotRyANcmdRjnobe4eWx7Vz0EALDKS/OfN2t0s82F +xM2Ckn1UJuhaVXOlyH3pCXq0eUqmCkfWpEjZGMALBxZXHDiT1ENZIIMOY5QF4WGr +rIeeGlMZ+YJsxThpC8pEI/XlC8PG2pbMNBbtdfCGbGRYoUVrKyqPM2ZJ8jY9uDb8 +V/NoHV1oFVIiNPr4xOy41eGywjxrQ3nCwHwEGAEKADACmwQFglzdZwwFiQAJOoAW +oQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAOsfB/4oExXnF2pltdDe +hoE8eVxI/gv2UGOEO7JhMoy+ggL0GoIapM8nu4e3GndtvWIygsdNtDXjQKhRZsaE +vxi4mYUxMJcC5SEJjkeNeBpl4JI3SQ/23YAVi1hjSeah0geCGmNjsgiIjDjveBkr +bGtt9dVe19G1M6iUfPQi00jcN6PbnrZa3mMr6C+DJiVQ6za6mT+FS6+CaafW97Rm +gXr0ZQH7tHEBD3B1CzeU2/3k9haw+mHLDKnm3TYs+VRRq7hW1yjyrhrcDPZwLvVC +EoXKNSQjNfJ5frTEmaUj3PddQ8cUsQPT8cEV+ZqkHaz9jJZ38tHt6xv1FVM86lvp +Hj06Pbvxx8LYBFzULIwBCADtDS7c55eKYttDMCeHl3xmszuMqLq4yEhT/JAN/al5 +hIqV0VUv6LWGhMCVYBJH4wlTtvxMkCx3V3e1CxcxEaQhbjrl34l6ffXYZRMhOfza +Wi4tIzZpkp+EJs1+lEN/99seeFbvwJKNkN4Ucc0mZ/HMOYDu376hXDHF3HxlQ/EB +a2jZB+17vFy/D7C5K3JgWi8bsx2TeDx3sYaUDKstl4g138QArS/NlxF77Muao90p +4gBDISpRYTVMsQOiUuMMQKM4gOD0Cce4xEEf183PqeRQ1MLZ2/OJ4qBbec+Jn1Yj +ykHPSh8ago6GF7VWzTp9+BfJbWVu1mdoA226lJRJhejxABEBAAEACACUa0GhLBuU +mKqh2Z+WZMGN58BsJCSslzG57BMhv2WB4PuILAXDNleZfrq5i+pGOh9X2+UB5u8A +VbJslyIRJfN2vvZ/gMMp/32S3E3q6symxfnNZxOlbBkV+9mD3D6a+8uku0HrYM4h +dselU09YMZKSBJr2dP59NyUutgrouG5ILQx/e37KQMBmF+Vqd9CTV8KhQkzx0AwQ +q4FlHXptLDOFMAJiQoC+LFdoPiJ377TB7axM4N0t42Nuq9562TtpqVNVps3CQJ0E +qaClrlXjSPi/M3DvihYnd9NYC2fBDsNRF6rwX9pvbqX/S2N/nT9Aff63HD1A/IyV +mAEEju8B0TAVBAD35URL/sAMr+cc1kLT0SWGt/jHwL631Risk0oPAw97XsuxhWob +eylhQ2njGRStdSpFyQd797S36vtyFGF63SgSF7bWrmbXymOgCjFoIg6DHO5RRUUL +Qxens90GgSfijA7AJn7/JVPvid1waJ4QbAI+zryzi0eCrzDmdF94RxqZUwQA9M0o +dKalPSTWNwyuynlRTo/hgG2BUBMH10KeXW+14gUxYpfhZ0hLxsOw8MQTwhwbEZZG +KfZ416IJVksIZUb+FTfCidaLbWyt+IB44yHGmjs0aP1XFEnTOGRXFFvCOOEm1XDm +jvIWTJhPPUtDgQEdI4VP69vyrkfVI4E6QlrsOCsEAIKKIOPzPc6QkY7oZCZUEIzy +b0mpWUVnzk6Q+xh8lLHXNs9vyUimMbUfBx1InJHRKC19VxV5qEOFqKAcPeP0V0/X +2JirkS5grjdPp/9HGBRmtd/IXWKDY4ex4K80t82rOK5KCz+r+iZmIDj3goA4TTzO +beJCm6F3hnZ7PztkC1p9N+PCwHwEGAEKADACmwQFglzULIwFiQAJOoAWoQRGPg+C +pDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAG3eB/9zH0vzicHNmNh3WvJbfqoS +JdNzDDf7Prt8jKiao4yvrS5Vl0pPxLEhkw5rPmoh+OoBH8oukMYIp6UZbh8GEKIh ++Q8ivAOwK3Cmdrh4WBrqZoc4EWl1B/21p1ysnrQhOtf+eNPpCW7wEWSom2894c1d +GKz7ID/1MaBKRM3hfZtQGFy2GRljZN7O5LVGPx3+D0xf5M619zSoLR40JkCsgKPO +QCHYuVz5XTEZL9pR/r5pG513B+TfEztGPw26ZZQp+dUD0vmt/1QjAjKuY9yeboiQ +gXWMZX5UlBp2EP/TJvfzSWNeuSROLWIChn+RNTtWDxMNa8Edloq5o06hiay67fAe +x8LYBFzK8gwBCAC8iS30tqnkERdYQIhoobQ+OpReaDkWiBxcHp/jFDn84hACoLRD +AXgQsQzB/VIzrXkWhiNtkt/QphH+YkzqIJ1Yjm2UC8GNzUPnpjJ9FAweK5CiJ5Vl +Gaxa7UC4xeKfykkeIxjhc1BvZ1j3ZeKop+qAs7yRJajGSVvwB1gybO4DTDEyRlFa +zfJ7ptcAXGx2V7/Kv0peVSEeyJNwwI55gogxRVYXZyvyvBU4tBlXNXMGWWE6hGMS +zO4sFe7fh9MpBZcpGuBX/NyPepXbqpVXQm5DyBSchCny5puWH96cknLPbw+IQXyQ +R6jF11y+ucghjCZUMDP6AXhTIG7DUzNArK35ABEBAAEAB/91kAzKBYUWo9msvEDT +DdI444pU/CRs+l7Eyovkq14lZEmbed4t0iKuNdjAtlelxcw10VsSHn3Vu1iJCX7w +l3nGGLoXkOUWqSJotmfROsj7nyrHEmvD6ShiYoLzNOHFxfumATiojKFhdk4xpqSZ +imtd6bXxxEvjqSbdG5dRij84ah5PRfP4tj3T4m4Qm5f1v56YYuUQlLwv4wsY/l8a +BUXtjLKoZD6oMfHJsZxoIUpGVKvI2fU9O5Isji49j7ZWqjB6n0PjwLXSzwMkwGRB +Co6BHSq51hZ4YPL5pXbCGx0y0fwUUYR3FoVs/h1Zf45AceY5TX4vOqh/14Cp/wr7 +VzgBBADgWVpH5d28UBX++hmiBcUHmeNT4hTDzsfxDddHe1a4vvdrWy4InPj+canY +xtcr6MKUk0fRto4ePSMsD4a+WudDAi5q0BifdxZMLGPgv2GPCdo2FbFRItAggM2L +nn1JrEUinrLhsSG6AV9OrCafI3yEjm3RoAHWsJJ782RfiarsgQQA1yJjlBiGYLrE +kBcjpzzx3FYV2V8vm9bxJIJ/4oW3pOGUsMhu3gXwB5uBo1eda5BovjXqZ1gOQSep +6fEBWFH68/BMxuYRAaym2nfqH8r3MEOqhAM91y5iAhbiikWlzzs/yFBe2l0UvXHe +qc6wOnhUBa6IZE0wW37yoFnji4WUZXkEANkjFhSzdmApRNxb64MXCyAethmX+Qt+ +Yy+aMP2t0J8iLNjSGaoteTH4LZp5MRVx+tZYuzRFQLW1iPHrow6MEhv+pHTL8Gr5 +b8/4XdhhuvCDtUpFAhkT8nIlGD1FdXYbvoOFgujgXmLoY1ok6k7yzDwMZYvZtYL9 +ofTS3lUAO3TLQ6jCwHwEGAEKADACmwQFglzK8gwFiQAJOoAWoQRGPg+CpDgv5Hqr +PjF/UGNVzQzfQAmQf1BjVc0M30AAABnECACDkuHNBmqe/Wh4PmLncZnmBJaIQPHU +R10+acxOuGq1bxqu7wusDIK+iYXmcdQA0qwpmGm6Hr+0Iy7AxDiBE5VpuleQdQo2 +Zv9M5Y+BXU3uFUpi53eLW68akWDMgdVBJjFi4b0EY7p5MW6a/P6vLsEMlV6UW+cf +YgYeNDaruYmDjEY3uy8efAgitO9sKbeqL6BWHIhUEc/mfVAqnvvbIdmfodmIhMDQ +toeTNafan5SOdgobx6Va4dGD4KtIOAnhMP0pMsz8bkbLhI5TK2yDVCGe2sCaeiao +qfSfzUWNeUUbFX2b0/Lz+574QaX7FttnACTHuxhOa9OjwnqhoNiAoFw4x8LYBFzB +t4wBCADHHXJrYai5IRbBImlfh1NpTfQKqtWgivKu16hwX04c6EyGcrQHVnkWLTio +qPZd2V2IEkBxIShIekNALFTotVm80rJa7qX7jXMO+5sh3rHwadZU5zdqGFd2Nz6r +EvGdOsUhMr95Ai4w0G8H8NxpxyJpO97skDBryv8zgtwq/2EQeafzy1OORy59baBR +8TOGn4RFsnmyLKkG1jEOj7D6DC+c1Ij2PnBtyLA2MsNySm1O2lFJQ/ePN4G8heZC +IC/53fK+OYoI4rD1JA37Y2a8HFft8rvr/JS1ZV7A3RnJVr+Ykr0r4DefA88adEDz +wJ3C97CXos1VQLAe3C95uvDHxxgRABEBAAEAB/9xGa7mg+B81+i+57cHBi1BAYB/ +lq4ltQdIfUM2IUyTavgc3oaYLGw3RpSKaP8YK+HO6t8j43uoP5p3lzbbwDcq5Fte +/3PUwXH7rrtdr8tPDi8qpvN5Fj6H7bVxIx+O+dUDmHneWHi4TYzj69KnWu+W6uUj +Znu6nuH69nftDIar/g2J6VCgX4DrvKmjCyOJDqtE2of6UiDXlzEPvKmDN1l01MZN +vx+HvQgZwTQ0ikHvgR+nkOex4hMXUo4e/DNeTuxzZTlrazelbtsuTO6ACkTYNypp +cNphigmYsY3O6cJP51sC7IuWJOKR7F7WNErXNtMe/s3KJhD/GFYsBxW4qN1hBADw +DZjnWAdlzJ9nW3rP+nRJ3arSyBYseYr+Z/xgujypj/u6hrMhv5Vl2ug8ruOFgoDv +SaOAd6zJoiVqu9ZaP9NIMq8FlboEbJExRXaPc6ivqq1Yby5e9jr16Ajr8KVFCRVV +nt8DeTv5OK6BwvWJHP/mnczDBTn6lNVum+CRzDD4dQQA1Fele8iMOAT0T6iYwXUT +JJiYlYmXGrWJhpV7ONBGYSzIHX04K6E6BGYz400BfsaQtNxRH9wZcx4z8AzXA/au +Jxj5U4zxY9cMsHhq0gzExXHwDjku2HcwYnlT/W4FhRys2VIPEGWKRLftRSYgVV0M +JG+jXaP3gNcbf8t0m7GkTa0D/RFWiiNEW9nHSrOedTJFYoUH7tByKjOkN8pFQYzo +V7BEISkprS+uTMsooNlgedEA1+Rks2nidZaR7wB/v07g6QzctOg5wfDT3VeU6XLq +cf46nyd0LRMBzbdapBZrvY7L0vgJQRUidKV4neXjaNz2LswGwg/ojHVTWrutf2JL +H63HR4HCwHwEGAEKADACmwQFglzBt4wFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNV +zQzfQAmQf1BjVc0M30AAAIp4B/9EP761g5/2QMh5jW5bV0evRZ5mP6bxk6lbp7Aw +p6pXXld4rFtiWypRizY5fae2vS+7Xdw3jZxvRaFM8R97ku9td7EOe0xu120K1/fE +HkOXpb+6l92+40BCaMf0WKWXtS6DiYMDfD9jkOhGmUK/LcwGRFfMk/1cfheov8cf +3j8WVAVRDy3hdN6GeFOeIVvzDTBnkZVUepyiwcQVWNtjuENn93tg8NDt4vDfbeJh +LD3LxUdZjHjvmsr9jxkETGibLLIAMy32ys2ZqWLEJqP8ED/JvBr+7GsEpoEBMsuD +0M+lXucbs7mzCtb+D/lLgrJN+PfQd+iMhKaoGJa6Qe4vMF7ix8LYBFy4fQwBCADI +Nb5bkZtL3R65Xgcnlyy40QrCRmQnKNV365CTQw3zTEzUu71yBVEZQt35eJ9c1qEi +/NdUgBGx07YLW8+NBl3uV704Ih9qIqk7lAB71B9PoI5qMH0HqZhTl5vQHWNFruUq +9S2F8uqSyHmAC7fRArFFNTSSeVcpoeEr8E/PyBe0AVmx/03vBI7e0NWMTDGcTNmO +GpqBLGmKhIL2l7xm3LT9fFKCuencbTRQwjCQ/JzpIKZh+8O+AXzcvJUOVckcClur +nMPiLKjHxoVib0rljr3NQYXtxANM23iSbYdBTM3ZlgRfWTNwEA1wutOpkXMbh0+2 +eTpYWtuyUJx7ByEefw3BABEBAAEAB/4phoQiB/RW6tkJh4giXQeomasKmoEBYkXM +Zq6I7LqDAQtagEoN0S5999GEgdFD9zxavmiHHT0OTiQO/Q7yaCSpX8deUi2D3QaO +1ea3yEpqQJnpSn9UTIfMpsBpjP7fICRmIY48nyKqKSySM1v/3PgZq6xoyQQcHXhP +nbtgFFdePR79aEUO1Wu0XBLJZK1eBrJ3vn/HFd5wErRFGfT3mqLTIAdFsdHSs4ij +r/G7wyr/uM/VL3ajTcIVE8Kn+X2FJauKB596jl/rUeq4rJzqvbN76wlM2JZFz73N +pMTirOl9eRwuJmeAkvkfDIpH8OJgk+3jyNLptCg3P8Jp0xX0zHglBADK/mB7kMPk +xGxR/fvrwimLYujoRS83tQtYoSxy/owNzOZebbHO7fyzbQ9tRcArvKxO+mcZ8/Zl +U843kuNzgjOOgJMSxAh7nE8Eplt1U4FYzFr3/B04Q+6nEbJeBj6rtBhO08N5T95f +Sj+PTvIbs2Z+Ff1MjrikpoKWuE4tIxudpwQA/H1IGtYiyOsbSZ26r2FXJNcfjM08 +za4NfUdiUiKyM3ujj/hPLAp+hx58EDIKAt6Z+oTq1ByjbTXXhoZZKfPNQkdcJyk3 +z3/EdGNFxNI0meAjy8aQMOVxaVkOu6G83WqxHI7eoxMFS82FDddyJ4/JAnKv5To3 +o6siYgN7A8Qy9lcD/RPdktLXxQnrtL0LjlJertIoqfmJXC/lLWEPDPT03i0iT97v +917c71CDBJIIKrDf2AcXbP6C25TXGWqJE+CBYK7sBzsOalMZU94WyfQeJo+7j/if +kzqx7Zj/ckujSswJeCOTopajJMKoR72/atgJYyErwhyxujcoXxIh89NvBrJfQOzC +wHwEGAEKADACmwQFgly4fQwFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQ +f1BjVc0M30AAANlJB/4gIMhMgW79HbaHqVjVP0R6e8kKYmGndmUOS7rsU63XiQ2r +ca7B/0Tdv8igHvt6oITnUbzraCGzW9jq6jJU0+bkd9lWs91o/mVonh+Bl5i9RDfJ +/pO85cRE7r1w440e2cEC4EyQmfYJ79IQTNB2L+D2Y6eck3zAPvSHI/fSzx1HAJEh +pFbpV9JRNzfKTaTh6/2tkgcpneuOKB40FHqsnOU+a9i+SWe3J31alg2pd7wuKcr3 +Na1RMuBDw/WHVkdORIxBFDHxj0MBAA9gQBHyVz0iGmJlOjXqBONzLU8kh0x/kMUa +QhuAQSvMONWzyZtav5r2NrYYxiDoE8e4UB/IupFGx8LYBFyvQowBCAC3q0iMpIVc +E/zaQGBeX6SxWu1R0w+UbeWwTUW93YrijqQ1NtLu+mCXSsE7COxNqkiK2ftioxSR +5avZZJlvmWaMPk7QhvAwcNOI25iaFDF8xAhJRrzyrC63v4KKSA04OJEaex900ltw +K7eLX0ckOHbitTz1Ldz7Gu/YFsaPTe86HFcCfFasPwavZqi4zwRUQ3BZsm1Zz/4y +5wNTRPQvA47Lh9qhVAe6AyeebtTgEoHgVGu9f9MC6ZrZKud+wpzVmXkEWw7umgep +wsA9MXlfp3LYJWwOKZaAuiOvKPET7sGy+gwSUIeX4z+9F9GB8RO+FY1L+ITHsNEa +3J0TijWVv95vABEBAAEAB/9BPW8svfe86EClib5xZ0nJ0cGAkhbzo0G2KQx/z6TY +qtA7MrkkN/19YAlZHedKAxV3dMxtkf3pgQpU0v4JfRTG9g7q1TOWEU2iTFZdTJTz +e3JyDNVq4axKipUk50kC0l0AagGXbm0aX/z3XaWYgRIBn10CvgLDkyLkv9pR5t31 +5qbz8833jrXr992R5+3FOnm5fPpzZFNzTWNGvSvBxoJ9Ckkq8TdB2eW5ccQe4ijW +nuiuGb7VBrTHfNp4V+JcL7BRHTy1FY5aHU+bqoL0etBQFZUhAgfuMX/ttad6NaLq +UKLxMmE1jZBe/MQyFPsPj6BwVtRKQxUs7jgCY+A9TYLJBADPlM4JP1vdp43XLVHw +da6NNNoXmsZT9Wk+OXXISlsjgzgMd+qciiiF5VPJcYbARl0e6nMOQwgGU7tIaMom +1Iakgw8YqHGATpvsWrOtFJim6uR1TY/joUqfR05rWCvUjKJK7MlAOWQE9mabL3XL +bC78yWkL+HgUj55+nnEGFqZvLQQA4oKfNFN83E7QK0AN7yM7vu5bprad0Z0Z7rZT +PYtFY0rmBcVxy9bSAPQh4OvPYU2EdGnkO/W9Hbqnm5j8P0g8HlHAHVqe83XmcW2z +mYUdGyO5JexSpcXaDh6Hqy4Kl7mvnjMpRYtbPLSfYk0O30UxBoIx0HGfK0ivK05m +rLqQJYsD/2C6HJIvmGCpvS6WUG8TawJ1dOUeJ9trgiVqQJNeejgX55r8QVK/Gbfv +Sm6KBVBbmOivChvHZzQI5G24IH4/WdvITYeGYAlzXX1MC1rKttBEcPFDZiiD0/IR +T1w7iBBatvch83BXCu6kYcW9i7pNRTfpAhddWMjUfj+D0cz7qnMEOuDCwHwEGAEK +ADACmwQFglyvQowFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M +30AAAMCsB/9KwrClq7UIw5q8udBk/tnAgsprzzybCmRoA0XS1tUJrfxF46h08f/r +v1R5WdSUIcBAqAKtaQo3PrvNgDII8kUDoX/5E9bJ0eQsDFL+SGFljotbcV/ugPbq +K0Adw5c5/SCi3C35LkQra7XvDZGg46qfpL59ktCBQtdOcy6PW0myeymoQIZbZP4p +fa7+nDnDjVLa4LTV27UnPMQU3bSkq4dYqqhHuzhXx/Ek7DTg8w0aGNn+yrno0KBx +MAX4+euLOAJHPPLUzPnVHubNjtQcyxdT2kimP+4gGIS6blLJNjKitd2dEfjOGOpO +15NTtvBj/GXPdU9cHe2xH1LFoCtbPYfex8LYBFymCAwBCAC6LfaxcIMC9UMB6h1x +0vrH3fLtLmTQ5VWh1Po3itHUYQCsHcDUAAZE6JzaoXnld/8DjffVLJTBIduP9jGm +t2yIByLxyAgd3P0W2D7LQCAyLle0lEuzrdDLqeNPDomMwyne7E3X8WVbA/BdGTdR +e2R8KCI+Vc9EAe3jffvia4O+PfNiVKqcWuvqyqL0XjD85GiBDoWCLc/Yyi7veLuR +fjCFgkANz7HO//tU9St6XogeyqdRBr+GvXB5K0xWPP6v5j+eTM86rwUtWc0zmhsV +4f5r7CNc1N5z94b8BKeTu4eyl4kHPBL/sTXgoYFDfB0mSpmfdLNqCPP1I+Xkf3S9 +NKNNABEBAAEACACYC0to8zp64vMbECeFukgFi3OFURsSIggBxp2lWGAt8h4Lcaz1 +NSPpiJH4VmDnDk0biQg5dlPxOYZGlkdMIIWovTNDgxll0gB6dJUrha4FbSVBGs6L +6UoX2SECghvA8e0y2YZk8QXWA2x7i0lK6NtSLbBxecBviKfO3icjbKxFYoto7Np1 +RPzOWpcLL1Dd/AnODdiitAGFTEdHbrMiUOC0YbqoEulx6GOdhGhgAASMgX6MuoUj +sPpF16zW7fdkO2COFML4miTUbU/sh3QzU5r1Hdu6aCZXz7oli5F5i/FqjWypqzi3 +IGcPcsLFbrxWj6qlVuTxi9FOyq4M2F0UozCBBADlZFgwMLprkh8eVHV7IIx0tt2p +N/AJx+jDIYsy4/o+jhiTVqoyrEAVxf92h2jRWmauxnozeNm8aPzW106CHPdp15M2 +IwBqnIqsEIuN1YMg/wHZRZmyoCgdCmPl5JQ0q59dRhiCaSWaIHWy0zbqIXUYYjMk +QOcyEqwPirMA6KyKbQQAz8Zzz8j5INqB2ZgMbkxcbivppTgAALX/G4P4eZ7MK8Kf +qEcPS6LfUwznwnbfeqjKmmIqFNZor2oyOY9Qm2VP64mZb4yHj70WElzMJfgywNGS +tdg/OA2oU3O8fnwiY2XL6AxZm6UknIzYAk5q2n7PQJNZvdegt7yTbqKCqbGG8GED +/1DPS26OJm4IWDnEqX1ZPMd5jKD9u9lZpxuadvjyf6jy1HHqvPb2YvIlLp1Wq2wc +mTzvKn8Vr9xYIfpEuHQ665kk00/9vsfCBy7Ufjx/pKXAWgtSxFqbTOLlzC/QxYc6 +e4CGj12t6T+Nv2M8aLo5/6KKaM78Lw7QPsp3B3NMqK7aP3bCwHwEGAEKADACmwQF +glymCAwFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAAzU +B/91LDa+cDCSWCvOvqmdLOL6TzaZJLYXbox+vL1NKCf47+zsI+SH28SekhZ7wwzN +dhU7iE2VVem4u75GzOYIfVxTCfc2NM21DzJi5vK1eaZ7cA0Gtxd0/Mg/inQKnFXl +opsL+LKqJ/896y2+UTFe4U5AdUtpEu3XF4ueQwyaZaRNheH0Qg7E5YBBFb02yptm +toNdYdxeNrS/sfZWwQV5erMsdkTsurG5wyhgfmX7LQ9o1nqTWY1aR664E7j2IclB ++G5akP4STOUjuHIdC7uo6kO+pu/iwE+DH/aPU+GJiC6JTk/8gYuXuEm/y/KZhw1u +ZRQocyUpH6SiehgLwk797k3ix8LYBFyczYwBCADECWqI9GywgdnPU980EnTHZsMr +qxxSlZTCTSxtpnChzMBSk9T7fAqWjgP9wEJrhqEAQUDwdIFfk3pDM8ZG05H4xFz4 +eD2frVvw+MRMsZDogj9yu0TCt4dF6UBPZChQxtCn6ILSPuwYYzKFb3nbmJlrKuXu +Tnm7zXXnQsK4oM3GUK+ZCOFvrxPNx6YbXLJLRRMLTN+scpFUY7fPbLPlSFxPd379 +msaJfsvRiswT/w8aJywmwCMkiigFVltq6XxuRyUgFA504hbqWxXZeTHpsZevbTpS +Q2gEBriSebwWPTXvFeShKhZxa/p45q7k2Xyf2ktbU8JxD8qKIiojPm1Di69JABEB +AAEAB/9vgeOlb1L7u4DHW6/UkML4QU224yfDGe557yfcXxYmEq86yXgWbGIhbTp7 +9gZR30xpNrTXkY2dbefXnfWkh+e6FwfDFbIHx7ZKhVYzQbVpa9znR/o+v+IkNB8u +iYwdFlnNiIYRTVVCMfqkx9oKvOxXdxk+ykiYOLBeES1tk5o4uOGtH4zHXmSfajyD +131pNoKHefBAJaKH/QfFLuieHFOa5pouTu1GcNbMpJCPoLAdn7F2K1Nm4NlNCo7V +xgirxiA8B+kXs9bkLU6rn2L0HnPn9AGkboLVCb2ERlWrqyxXN0rA53K5gcFQTMVR +wTtNYsMHkjro/qaCZ2iXEU6LLZT5BADeitHFBAqyriZL5svBhPUICYzip+gjUih4 +p6auxw7u0sBTLMH49CEB9GNDlrlHzD6IgYzrZq2wwTuzeheSivSoOStNexOZYHdA +FrT6PGF3u+U4Pk/H4BaRi0ADgv/VD+r6IashytV9YcM6whpEQsvRfV1SBK0fascW +fHVOgZGaSwQA4YJ09XLw3h+08D317DlCKLcHwPSfgftB2s8AedsDpRAWOJ+86S5C +djk1V4mql7Kq2nYSM934l9vthltzJDvrPpm/Oez8XCnQlkJY4JbK0PJkVAsT+caX +8dx/fkyONOsQeh6t1aUkdT9d3qTvEHzTB5ewBLG1CdtXpmcj1xLDYDsD/jqz8dLy +4Xymo0DEr+0t4/j7rFC3FFHIxu+KfVO9eDqYqjzuGwphQkLDY1GByk0hvLqcaSVA +VvZy2Aua9I8FUUQLZCHCWUBKBQnV5pgFFpYdLz4Lldi/qjrL8/oRSkG5Yhgf4pRr +wYGLE3JgaREV37GEonkdKUsWxz/vRK9HBd8JQovCwHwEGAEKADACmwQFglyczYwF +iQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAL2OB/9bKEVt +NxRfgw/5W7qZpuejGDP2qsb3/OTwoTj1xIKwKZxR02VCRhzTf1VSvERTsUzMtfL/ +XfymGXy7gDXc7n+e2kf6Fmk4T4tmCsXgD2nC5cm7lWf1PufGtUbG8hxpNx3pHnGB +ADQkwjq1VKd6fy9JhwAkm1Qo2vpJnvJeWWb2HG/YHl3b0/2f6cquqBjm9PV2d/un +fR6HTXzfe1CghzajYqmDRGOVPvAp4mgLpknFbNzmp7Yr8M0rPOTG5GwEKyNN3P27 +XJ8DmHL7jxaQCPsysZv1dgVYJgn9GPbFloTOQ8dmVgUUAcoNGBmj8oxwv+MiPQ/N +a63CIIL1JagAauHox8LYBFyTkwwBCACr2IlAfK1ULPR3RWMa7bXysn7TXL3ecSmD +DcUoENbIYe4j83MFfg+BPzTKHEwMzFfg3082/we/ZjheSH3LSm9SIyIefqCfKdPi ++YyTz4cC8Sj+rq3+vP39blwb15TvUYYi8jEXt4YGjL6AN7PSVpMK3tArc4DNmzzx +uAcaacLX8loUgzApX9m5gnRlq84t+qtjv8fXBSdfImVJQWSQHfj4GC6T9C3KUsGr +5EPbi4/q1y+2hAGGPHtDGgsi2RFSQSKbhDDepws4mD0frGfCCY8lJZJ/JOj9lYMb +3ttKz0gc0At+wqfgV21T3xV6WUdzDWadixz5jZt3oom1XDFqR4DFABEBAAEAB/4v +EoGGSKCyDh5pDXi4R6UvdfWHsD/STu0wGPWIpBQxj6HL90PqnT1iCg5LzrSGTPNF +heYNCo70vutx6CmNJjaYKUePUuBsuOhxpCn90zsIc0bnfLHstZhdc32HouYJKCu2 +JuGLvZnY8XS9aoS3eT+OGrqrLFh7+aoYDHDlq1LUE/vjO2p+TSJcLPTpkmbZTNmK +MVJvll+86iBcjdhgEGnvmGY1kRyG9YFK7XK/OvHRnDNwYOySln1dz+Me5a2HTu71 +D96pCyhltpYDahLnD6eQ3mkKppDZ1beTkMJ/R4765bOhtsWLf2uWKLCGdJoCC6dY +Kqefj3mIR8W6swIyauABBADLlh6eShy68mfHN02Pyt7M2pLx/64dSjiuUTGvQ9GM +Rs3gsrbtqmegaia77l0plz23duKdHHnCAn8mWGa5mxA6bBO1IfwSuURZj8ZwURvG +dqoHVdQmhnc+idCerVuauNM15ZcF/b6pMuPaLWBr4ll2IBJtPcT0Ieo4s0CXk8eD +wQQA2BZ5XXvm7rsFcRS1n9/coJpcV2zj04DsCQNEWAI/gTonxMhD1l6idMI28obE +vqzXAILgaLK6vRHe3490cnQpSchTdBSZYasmUSqXncGplRvqhKTB/j0SJ7CCvfvE +s0mumFg5N/wUjuMWhBjgqmpKZMydpurpm5Z//QI2HLoFbgUEAIKRIQWPbHZBjpdZ +3UyH9DHSIJ0ifx5jMRiQKIOz4ov9rWlVa+eNd6QQvJkx2FYyHKhKIBPHkKigEcI7 +/7CQA4APib6k7+5mbNknwxfyf31wd6mZxBBYpdWYvUOwEN8H2Uhr134O6/wHkZwQ +zVfDS0NiTcdEBr5N82+AxjEisOgyRSvCwHwEGAEKADACmwQFglyTkwwFiQAJOoAW +oQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAAMcDB/9TMZ/tX+fTBlGT +ubWcdLwqAppi4AupSdLd3GkeEAsw0VxcTCKW8/bZxzY3oDPUl+Mr7rqGjAXRI74Y +YBQvfyj2kx20S5HqK3ABA11F5pew18t3pGsqbNBhEf1fa8XHciR7T17+CPkvrd51 +O1YwQKY0ZMp8CF3DopybD8rhPUMvI/I4Z1DqyJ55dAkKkn5jofnTllqVk0q2HWTY +SeVLo3X2R5NuHS2wE7h7AsLTSm466TnkT8/FodxhC76/jgEpnW01srdiqMtNTnoU +4vMgLHEwAHp1iFR+9YDpwQFMXmLUVAopps0/5NjwsgsEUTJRS+DAW9ceGBkAqDRY +iNtKKZZ+x8LYBFyKWIwBCAC8sfCUmfQ/VUagXH1cyHfxoGQBDyG3gWSPZIXFEoHj +6Ka+AfeE13hwnXTjrRfnk253qifCoKQYTJuJy3+h7gd+f3IbmLU5Nuaj+/bO2W54 +vW8Vahwt2xaYZySKoq7Driq30+2zeQ3ssPhX0eaiQf4n2KHI+Hp2QOHT9i24hGS2 +DBCORD52GsMGGHMV+dG317SS3w6/gVZTtOJbe0+m8ETo3nFmrQft0tB22KHgFHVJ +qSbJ4WzSjm7utRqDbKysk3li/huW4tdMrFLSMPQebKcfQy5tTq8Y24jHrjzCnC49 +yBGNNO1QiX2EdCrhdtwMEMkHNa8sbUmwoVOhFsIQGb9LABEBAAEAB/9UjQ8WJx4Q +uu9Yr9jkmFdWh94Hs3YSOgKLVimysqZNL1R3033LopkvLP7RfiA1/hQDvtTuGvks +gjc3uV3Je1UUU5sXzod1yanzVNW0vi0IISoDWHaj/YXUaHMxQ9A3knVFxcq/HsEk +i+/bugw0LInr5OApo12MW2pVhfvasEhIYb59c6TbGF04FD9yEaZFxGft3pu79ApG +/gg32A461XVMLXKkbnfrTrD4/15h5qif98H3ti6M7KX+4tSvPITPsDJXoKAdq+mv +DswuHzz4UvwCVuEfpsbTc3mWCW++HAaAByDJiv9XF7U5HTaSXqzMPo2d5M949hFc +wfnIHPDvlPhBBADUj0AEC4eEUTdoAdr8XhduEF1jouXAnMvpp1LnjLTxdMVRvqGE +zGEIpchwBESkyf3Z8Se2EfLMgZLNUbUi+6OLYDqSyNOehzBNUqkMrb1cUKZsLK4F +DyiYhTjkQxZ0Sh6gcGjE31r1KtDzilYZ7uCgk2VFaqLrsJyZ+GC4ML9C8QQA40Ij +/ggyDw1vzmbOQz/Rsh30FMf6x1NsKQj1vVFP4YAsl2/TDeGgZk4AG4fVykTW9VOt +OmDBr/XEEYNfYqtmyOSXtGhXuP+S+QYnD1Fw/lwkmb77GJeQ5WbaoNcnQe2LnuQr +ibHJhzWuueF7dorKfrevcuUeOjLUh6MJ0pk67fsD/38VEZiOf1uS/aiPBD0fJNhG +c6fpwRD6zVw9NsMRUqv/kyE6o7NXf48M5yrxcW/wq6MeyuSXmH/9NLhzzdhJZgv6 +WGieT5DUabLXuqWSktBP4PpGzjefoHCoalARBddYNRJNF2qGkTPj9/aaIXVZbhvm +pcShbegfSo6Op+6+6y5LTLHCwHwEGAEKADACmwQFglyKWIwFiQAJOoAWoQRGPg+C +pDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M30AAABelCACM+Ii8kxZqe18C6C5Ekbh9 +5QSK2BIjLsKzGejJYGCA2SDIHXSiqfMPx+C5YJSPc6+ZfkueTEaTMgdXhpPBCt+i +n0/0bCCVf/zrkpJZa/jXS04Nx8NM0tFe/LY8Sv4HG65pA2T3z8qRwwvZ7K+YqDFT +cvXX2SfRdU+Ghu0EWolP6QZ2hYjof7oPierF1c6a90kfBP6+J78V0zjBNsVKZLHs +CU1Mzvp3SPZZGSDvT0HUdvaxf6H8PK4n9uAZQr7SdZFktvmBXGHo2xYvLRyb1bju +G1Xhuy06Cnc+eP6+dEsLB2qxkOWocG4utpSqoL71BOA/N2OqMV6BmeAc5NTyCKjt +x8LYBFyBHgwBCADA/SdTgV/cXkDLg3A5s/zs1uNKdJSRm/FPB9OkWcJ7yQMInN6j +/618A4AJMouRj9xHFSjA1pPPDqjlh624Xbqm9YP00zQyOVVXD21gKd87FaNxe1XR +zKWm7aaUOKYydTpdM6vdMzcZT2RWs5YNbQ7UYJObZHKsx/K0N+4fGJQDxZ5A0ETN +qF2k9YRIELc4/e3wVoH9G/dzQFLsbgg9vds7sBjubFYnI4GU+QpGD4pTWMxjLe9d +Yjcimjg6/LxLQxT2nKYNcBp6d6/tNL2kiSALjAHNx7A+phlHRs7xWUHXf7+T/Wvf +ayCAysLqczS5yLKgfsSungF3ujFs5iGJj6nFABEBAAEAB/wM14urYduIJXl4UWnB +XTnCZNZBGRrdyZu4H5Q0xohLhme+RfoGvbfEndMCSavB5unIjR7mHiE90QLqKyoj +L5GBFKtQOlGp2ejU30Du+jpRizISFhvy1wRa5EuGZ3Kfvu9ATnTsRkEvXPoXTuH4 +SL6I4VhRKdD7sF51IZel2BPZYEpXEIf3hZB7AcVgOCmdS2DzWnlT94KpP7SfswM9 +gAh6DMprKD2TiIAacw8KNVFbMTWVVMS6DBAnJgvf/+WTdYyK9DmZaEWEzqCnWsh7 +lgJPnVNnW1wN7X9nKlyFs/fFthydlV9vB2+FWB4zXuA2G33v0ZsqE/W/tVvDs95Y +H9QNBAD2g+Qn4zsjokaIUMPigwtZtJbjhTVOCV7G3m1a3VzWgox36IHG0T3WTN5F +8AUIJ+OgYw3z8EdgjY2Si0v98EH2Dmj/v4tqQ8IyiDKVt3Q6brzM/fPVzCDqM/Vq +jTwn/aPDYgyot97KV8VmCzONJDNYKaW495Ao4JgaWXDV3s1LdwQAyGoK3vtcQvVX +6BEJ65PmluQFyWmWUgUvc8l1u5xqS3RTF22pta5qW3Mfq1A1YvgPZUMVWojTF6uj +VY4gTXNMup1AtS1wSU3jQBxPPcziTT5wDI+QBzhfa0PR2cqjNRuNxlMMlgwzXtxv +lOdnXJ9nchpcL/PrwBKEzKNb0OvZi6MD/0E7vpDRY6DL1Cftk0bp/fK2Uxt3AL92 +f3yjvnc3oMIafM3biK4nElkPukFl6xJMqtwJ0TYR3OI1LCIkRHeFxSeHk72GZVcR +jkyHr5grDEI2CU2/qvVHC2DD/EdJS96VqYzIxOpXAAWkXlRDKCheaeBZwqvnwU4h +TGcUNDV9eqM2N+jCwHwEGAEKADACmwQFglyBHgwFiQAJOoAWoQRGPg+CpDgv5Hqr +PjF/UGNVzQzfQAmQf1BjVc0M30AAAB5vB/4lrG/Ik+N0KKVWwwKyHyCto6Solgrr +MEV5Px6WAtMP3C//s26R3hsj4ZPdG9Fu9lZVkmwf7RcmGGmRjRo21e7ytNMuM9tI +zR3pB6MhWnjR8XzFo4DMj+ZRVopk9vjDwswv8CCPlh6hziq8itpG9pDzX+Z5RsP+ +BwtDyJGawiYzA99R+zihPgbtu0b+jQzuecOXeS1Y5p5m/HmVZyL6BWJrdYqz/BPn +gye2YZyTug/2LxcoRfvlG+t9aUHq6ZHK+nsVJwtO2+dyqbV8XJQ5JVbtq2pAubzq +5SkkGo/KW/Ziv1/m6Djm/Ho4CdoLVcdGI6fjxgCZ6YpRRQuCIB4DTvAMx8LYBFx3 +44wBCAC3WmVIN6suXbK8j+b6w2FV94jwYu6esyft3ajDlo/cjVyvrHVUBj4zBt67 +9JzZS+WBSnvlFRkuqQyfq6SEENi5HRZwQ9K3/NQ9Vb3gMew6XkO3CTI+1pPuwsKv +dIyybyqgaQlyN6MFzyGLGZaprAUJAiZlj2Ii4D7IaEsgu5u27P8m8y+CBY2GmGvU +WX979f5xfOSupOmoP8VqYAfG8jkaXuDBk4RUtl9EtALFpcFZx7kuPWd5Zd6ByE+J +mrvaokGODF9Ide3dXQqH5OFmdXYIZdQnAGnCAOHDwkwf9p6RDZN/E0tCcLIzWKGB +tlunEtAvjDMth7sgTbNsHFcN6YCTABEBAAEAB/9E88O/AuBnUWlULDHLAArsz2g6 +LppaKDnN5FwBIe/8G1VN42dEMAzYF69Ps9AAj+BBXQd2wRZ1S7Gpolz+JW+7Pcsg +cQEfm/8dCc+cLmoOEUEZ5mV06DE9yxR38zauK8w2AwpAX9f46UpOC1Nzf3NtTdeu +vdtEDlzN9Rq7tpH6mkbuRIeGcKSdg8UD1lQ8rnWMILVGIyFIpOBPCpCFnrIzQAST +OaJ3y2Ih5ZanWeICLRNzoEU7X1q9u4dGK5AxJUJAk7kcfd0VvmVg9XZW/+x7cqjY +foxFu7j5lbhR1euqS6IL4hizB9RWWwWlo+MLx5k0JagMA33i3PdHwsWjqNYhBADY +5zksudjtTV1MktWX1ZOqQhnbcPvTsJSR/uimxHXWFUIvsqp+eMQQoFm6b8uchlLr +9y7WL49JN0LF3ygPH3nTSD0KaRrHLNQshm5KJfMttodRwA9+tu+C2m5j8cWJaS7N +7+hgpp4rKeohJ4giPt80iyro4lS7xJ1S5ST1Pp2oeQQA2GcJdBL69vQ8Z5MqHkE0 +6gXl8Lf0K230hhS+81H52AVGqEIDM5bKdo6ASyagez7zhyLzTYwvTvWSwqxZuKCX +7pNcLv+7nCaZfuM1E49NdY062PTAdv7vkFch/NWmVlJxmZXa/gACuuhy7R5wXK9d +/3GerQQYE0GRJum0lB7LRmsD/jP1df2qIar1pMTgqk6gOz5rHCZFPdov/c/aLfR2 +5DXgul4m/LK2N1SdAUAxgF+3/RmrOmTvMCoBze/idmK2/8WGLCkkPZjzhMSLJnPd +L+MtDiXYs9AblEF6FdxW383p+/sUjqA8kmNfdMOX5FCuhCIF3/KVfBvtzlBS5O7O +V5X+RHLCwHwEGAEKADACmwQFglx344wFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNV +zQzfQAmQf1BjVc0M30AAAOzCB/99cOIRsEwclM5/lQCvff5BrQznXKk+VNSu2USU +GpzxxK7ASDYyj7/5hRp+yRulWYZDqdA5Xb0fcc/evjNPmU1b3PwfLcb2BGz9JgUF +5tW3GnmFEi7f1NLc4vu+foHPZASarCcUzpYNVgOielTcJ4WmZE1wJzobr7y0xxQN +CkI9iec1dhRKKghijAHxrQOfHN4vkn/geOBKP0xnYce4KHCpwPV6zkxLL9skn6T6 +TJEHNimYcGZQGIApTBHsw7ZRf1OIBFTgqzee5ZhV0YSwtTOtgcB7MIQcnYdN66sZ +GH37UCwzBSxwHgH3uKOQVNJ7W9+5vB2X4fTHp2lWh2PKbfzMx8LYBFxuqQwBCADg +o07tvXCkfuUiYvg4kUjcw6zL6CwWuqKkh4mrbnqZhZdVm1c0qPSsFE1QeRmx6GJG +0BiWD1rgyQ+Rpxd2twkiBLCqhbL/TmYnf7wWhe6oeWJAUHL+pDweFrNtjxXI86F8 +HUAvIqcZtDt1j1qODt4FUmld6FwYrcn/Pmey2CA6UB/mncoewfDEg5abvfsBEJwQ +TBVQu3sXgZY61nwP5eGrsyNDs2H9YiR9OBtBJ2oe2NCBwHYF9aoZTYuQPmp3w6J3 +1oVeN/27Q2Bs31qG49F/D2ysG6a/8KX6mqAboZ2uIgcGRFmPR5mQiTJecTcU5csR +ginMDCiS+ANmvhB1Nr5DABEBAAEACAC52cL6ZIomPio6qeEtg93hcC6tQPgBEgZv +0wcugygBjgontG6Qzdwn5mAU3SxKCbYNWiuNM0T/xrkPy0tZV5PBxlmXqyftnCJe +OYsWo1ZRoqOMDEMntB9c0XE/imr+p7qJ4fVxSd0wIfIzkBfegiRkCMvN+uj/LgF6 +IFpRGAiJ1KVBgjTL49/Z5/BSPHy06ZE86CzntoG8dJjVO2dZfpSzTesJYP2UK9y2 +xjGEaa7A8C+IsBQEqaietDx8yQMZkURHu0wcW/ULJV1bUiruITYRUWrvnr3pT57T +EZGQdUSEm+vDC3o4SiURbPqSwbf8xxFtqhd5MDDUexbyM493fviBBAD86quUiWNl +lg1RGSOwywS05Knc/crCHqOauYUZRQoJ4K/TRCiWCZ2m6kn6hoon7u7M+3uHwrUt +3Wt307IzvMhzyVoLzSc29s97ojEJpmksSA+J/G6HwRsX+r7NgAXfM4ZdXwwYYbLV +HbXpKobH+pJP9q+rsbwW/sH51vbuui1GgwQA42Bh9r2urUMAS9+yH7Y1RXgV7IlL +yrcktm+zgPBsNXUBMhiYCSaFTLMVXvMdU4MHvgfRPkJH4xtwLnIKl6/LXoh9gUAC +Blre1NqMEMl07621Nw7Lo0embfiHeLirZBVQDCWYyGG1ZTlq2lhb57CywhQRcoPd +ypgPNgujG+FpHUEEAKCgdcOAXDp+siRJmg5kljAy+8ROZ44Q8AWeVkkGKVQiWbEO +a/KxNKX+2YmjBdoPDPEJMadryU980JeByk+kd62PfEiveMU9B1or9A6DcnUI1s9A +kXqXqeOtQiNHnQdLMaQP+SfyYMmy28UVBKVFRWwxEDVjxR0845o0PBtQBcbDNWPC +wHwEGAEKADACmwQFglxuqQwFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQ +f1BjVc0M30AAAJMbB/9YGmuWVhYeMY1UsQZ8Qk+3egxkLvy11OoaArFABHW8Uz+X +PMJsIb9sO5kfpnBTD9knvLgrhdbodjbV/tBogNh3KKQeU9EyRqQ1RUcn9PXFGNaZ +WCENDNPE9m5WevtZ16fQCNF277GzCsN+SrJ4ZjsAMOK8+4LtmDSueaTLr1MXJueU +xiwBr009lVT7uPMwLYsZs5KhMnHhM67tzWuncJ76Pa8D9CgY3xuo3Oa1kz7d2iiz +GsjQQIAqf24IIkwAJKZWwBf7A+BYN3nksacOYIcIt5BVEos/GcGxu327AqJYVYbh +P2z3yrG7s20LqFaEQer4cJh0SZZV7oI6iepa/ouKx8LYBFxlbowBCADkVSGPWhzn +/h14irKoA5DP2hVqAA3Bzi+sWBF5HyfAPkbqa9W84iP8dlAQRIQJIumeqMnheOTM +9cSIf97DJQc1lK6am6lTq6QcNnpp3tcenr2qDoGJGNvw7zGnWK9phYFLy0aXupMy +FZZGX2R5EG1iW4fw2YxSjzCoE/FbFofNH52w3I3bNPX/zibNRtk2GyIjb3pZQfei +N6m5m/CBd10tjG58i7IsGbFpBXDCvgYKs7lTfyunbB2So8+Ajo7ZWsO8RfrYDXd8 +PmekNOm/5Df/bKnrlqo6/QuWH8Xy1gbjv76pJG/TavKy43e+eGvSDWI1IhVtCvuH +xssyerZu3goRABEBAAEAB/wI6J1nl297Sbniox63WXRD99FQEnJ29lF72u/LlwCZ +CpT/vndXaEdZKVCUYef450jQLOu7hVj/+jLR1JNfb8lpOMTbOWmQ3yiHBUUfbldc +VXs28FvzemnSa7K3QcmOR2w1BdhaQShPEvKLClvEMXTjGokiR4qnCfkvBaAsGqPv +x9IcsICImDkwItFAKVabi0/G7IqlBehfAGh5dsLoDAmOK7YRZWProkwxQaBi9KRG +nW1suM76Z3QOPxmPb5qX3sbJNhI2QUF4WspafYMxFNoTOjmf6FRmGHGfv7gRkkBN +jWX3ZnEoD9xXNHky8FehL/Ogub+xrVqCKQDlDwGFhallBADkaizRKSC+pURSOiAX +mrIBcooRQ+QuJqH80gOcMQp+VaLZPWRUjhLepFDUZinEsAM/MbzDOljb2UpKojfv +UXG2xlBAW6uuCRJhQpMQj5m+s/Y92K2L2K5K1lJyAetdPyxqX1930jEsPgs7UW6T +Qe3dtrqhL59LPQsWFlkuqgjiUwQA/+hqIhrTdkqehBUlE9CuYHEwiqqWA3WzKZBE +5QC8zc15Ojqz5hMkYBQd3q5fRSINe2sfPygNGoIRwRXjFbjUqT7CbRACGi73StVh +mtsv07FaGpCpnRcI/83IvaLLCcZx8DDmQIoVl7HvUpxW+sAFZ8rbJc4vf+JCdbq6 +DRKBXYsEAJKsvn2sQJpnrpcEKskwV9OFr7asP1VnNYsw04TIaOF6tNTlz9wxmuht +kUcHXUllWVl9S7jIqX9OWvPt0XfyKRAd1FPeBdx67OXtAdkVGefCqnoj09ax880c +yrGDTGyrxpf/4/eluihNieYbxq8CWv1UsE6b3hn3PD7l31UdfAc8NCrCwHwEGAEK +ADACmwQFglxlbowFiQAJOoAWoQRGPg+CpDgv5HqrPjF/UGNVzQzfQAmQf1BjVc0M +30AAAOtoCACwGB7eaNzTXJyV+7l8h9TNukRiHkmwpdcKRlM6rBfs2ITW07h9S747 +/q2Vik8BxcrOEgmx+F8680hrYW5spYZ81ZnirtVTphyc0MbBncPBumYjxi8KSU9S +MFt/GutN1pbuU+mZeahWOYM9R+nIgW6F0Q2QkyAj2V19o71smOJslRCnbMOWmHbZ +CX2jYOujMSmkmZsLGLANgeLs63CXz5g1X+sZi6guiiAvN3XmOlxdz4dvESTtT+LL +mSpzs7uDOIdL2wVY2j+5EZt1Bl0ssNEPDm22w7Ca8VMEwlfCfQK7/eZpNqlIeOND +k3SVJMIVBxlpWhLGrZqhriDlsRdia8I/x8LYBFxcNAwBCADIz5Ett2/bsGscJ4pQ |