From 44214fc8d982d3c7c54254c461c2242814ac0f64 Mon Sep 17 00:00:00 2001 From: Braden Anderson Date: Mon, 21 Nov 2016 00:32:50 -0700 Subject: [PATCH] first stab --- README.md | 19 ++++++++ chapters/.gitignore | 2 + output/.gitignore | 2 + unsong-epub-binder.py | 105 ++++++++++++++++++++++++++++++++++++++++ unsong-footer.html | 2 + unsong-header.html | 110 ++++++++++++++++++++++++++++++++++++++++++ unsong-html-binder.py | 12 +++++ unsong-logo.png | Bin 0 -> 30240 bytes unsong-spider.py | 31 ++++++++++++ 9 files changed, 283 insertions(+) create mode 100644 chapters/.gitignore create mode 100644 output/.gitignore create mode 100644 unsong-epub-binder.py create mode 100644 unsong-footer.html create mode 100644 unsong-header.html create mode 100644 unsong-html-binder.py create mode 100644 unsong-logo.png create mode 100644 unsong-spider.py diff --git a/README.md b/README.md index 8d7b4a6..0ce47b4 100644 --- a/README.md +++ b/README.md @@ -1 +1,20 @@ # unsong-prince + +## Usage + +``` +python unsong-spider.py +``` + +### PDF + +``` +python unsong-html-binder.py +prince output/unsong.html -o output/unsong.pdf +``` + +### EPUB + +``` +python unsong-epub-binder.py +``` diff --git a/chapters/.gitignore b/chapters/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/chapters/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/output/.gitignore b/output/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/output/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/unsong-epub-binder.py b/unsong-epub-binder.py new file mode 100644 index 0000000..b542880 --- /dev/null +++ b/unsong-epub-binder.py @@ -0,0 +1,105 @@ +#!/usr/bin/python +import os, zipfile, glob +from bs4 import BeautifulSoup + +epub = zipfile.ZipFile('output/unsong.epub', 'w') + +# The first file must be named "mimetype" +epub.writestr("mimetype", "application/epub+zip") + +# We need an index file, that lists all other HTML files +# This index file itself is referenced in the META_INF/container.xml +# file +epub.writestr("META-INF/container.xml", ''' + + + +'''); + +# The index file is another XML file, living per convention +# in OEBPS/Content.xml +index_tpl = ''' + + Unsong + Scott Alexander + Scott Alexander + 2016 + en + http://unsongbook.com/ + + + + %(manifest)s + + + %(spine)s + +''' + +# OEBPS/toc.ncx +toc_tpl = ''' + + + + + + + + + + Unsong + + + %(navmap)s + + +''' + +manifest = "" +spine = "" +navmap = "" + +for i, chapter in enumerate(sorted(glob.glob('chapters/*.html'))): + basename = os.path.basename(chapter) + + soup = BeautifulSoup(open(chapter), "lxml", from_encoding="UTF-8") + soup.html['xmlns'] = 'http://www.w3.org/1999/xhtml' + h2 = soup.h2 + del h2['id'] + chapter_title = h2.string.encode("UTF-8") + head = soup.new_tag("head") + title = soup.new_tag("title") + title.append(chapter_title) + head.append(title) + soup.html.insert(0, head) + for font in soup.find_all('font'): + font.unwrap() + epub.writestr('OEBPS/'+basename, soup.prettify().encode("UTF-8")) + + manifest += '' % ( + i+1, basename) + spine += '' % (i+1) + navmap += ''' + + %s + + + +''' % (i+1, i+1, chapter_title, basename) + +# Write the toc +epub.writestr('OEBPS/toc.ncx', toc_tpl % { + 'navmap': navmap, +}) + +# Finally, write the index +epub.writestr('OEBPS/Content.opf', index_tpl % { + 'manifest': manifest, + 'spine': spine, +}) diff --git a/unsong-footer.html b/unsong-footer.html new file mode 100644 index 0000000..308b1d0 --- /dev/null +++ b/unsong-footer.html @@ -0,0 +1,2 @@ + + diff --git a/unsong-header.html b/unsong-header.html new file mode 100644 index 0000000..b6acfa7 --- /dev/null +++ b/unsong-header.html @@ -0,0 +1,110 @@ + + + + +Unsong + + + + +

Unsong

+

by Scott Alexander

diff --git a/unsong-html-binder.py b/unsong-html-binder.py new file mode 100644 index 0000000..08a7a04 --- /dev/null +++ b/unsong-html-binder.py @@ -0,0 +1,12 @@ +#!/usr/bin/python +import sys, os, glob + +f = open('output/unsong.html', 'w') +f.write(open('unsong-header.html', 'r').read()) + +for chapter in sorted(glob.glob('chapters/*.html')): + f.write('
') + f.write(open(chapter).read()) + f.write('
') + +f.write(open('unsong-footer.html', 'r').read()) diff --git a/unsong-logo.png b/unsong-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2795945db1b634ca2e6cb77d4dd6626a2673c5f8 GIT binary patch literal 30240 zcmW(+16*Eh8$a1@VHvBIwQSp~RxK_p*RtKhYSnU2wp+ICTDEQbJMVXXr0V!z&0D!Fg zU0hs6#lp_X?uUh)J-Mv7IJv!}o!NJ5Qvh&Vgs7Wqs2|`7-mPAX$^Z2GBX6hn4v}0< zEW!^rhK8O32~+MTMb^SQ)lMu)Nm!zR%%3n(QGSu{R2fmjk>?S%DYByibAE;oJ#BdA zSk1QF?T)_I&I#?6UO}qI5jqf26J$74Klz~+iIHNh2ln^$ZEQ1(_#;!>1DJ@_-za{( zP(cCrJ^}&^lpP3d0F>J_3L?;p?C+C83T~xnEsRiEck)aam{c^ zK${i7HIwh*1?HImR#`1G8KANr=orI9`3oST0<5Y(gFgbWo`B&16_pzhlnmfXU1|wj zFqC8N(SswE{8ylnnpe_a7m>*UK}(C7lx|EGp8=Q42-+w`gt^N-nULL|6Jz~q1OPH) z-huD->cwpgy?ktpE2<9Nfa$Ou{*BVucq`3uGQFYF*j?H#U-4zZ(}8cDA?Y<$A<)jfS+mU(LG=I<#J_AAAI! z?{3!HHmUvDzxqqV-miC!Tr1=ekH;bf887cfOF!46ygidlQ})OjH)_-4ZmD8BL`kGX zUa{v~?ENtH_HA>G@d-v~?GsRGDFo#i!&Lay1m;$r7E{})WAhFGE}QK-|Is1B z_*n#QjJv*_3BO2ZegOQ;WMdrwKwpBIS!1YLxE~P!Br^T!D@BQ}I|&#&;E6lomOD|N z4Y`8EsC&A^FvXC+`4KxBek=_TqYD|WB%wEC`6oic*`aC?5@(Oj-1WHuUCMsEOrDn`QT4nRZ97oPcm$3;Tq(hWk@as z9ie$c^`x3&_y+*?faj1FX|_N9e^mwlq1K8w7IME2lFCMz_~yix5{;LcI^kIJUNDj? zYj2{&0%I{+NW7o5W1j$lqsN++xvyKSiiZ&?&SbcXvJ|zX?|r3aDNJ+NjmdbGD=fCZ zWCs!#tg9Hg5viz*wt}|Oyi6fEF*PUFA`&+eOpt09EoEGxd<{(#)@ab5+Q#3|vQ@bnQ`l2dQ?_bU2aH9joHFmJ;szJLS^Y)e{liGk zFc7>A+3w!v*e2ShxYR|47>hXM-m7oYsSR1m5$<5_aPGjHCb5ft&Ph>QDa_Kq`V_4r zR+d$#R-qbNh{Nfe!aEv>Co7*Femd-o*?d$IHdj z#1ql8XcQIa7q1qhe7^cTtPx$LukKwg^_fF`s|e{|LdoZ1h{};Vk-B*ie_?2`d7+(# zaIVjnmoWG*-3r~x;<>7sRR&uvedH)6gw<}06jo>@ANR-d1(8y-0XH}e#n4n!E zQ=(cTebmZTeo_F*ZM(URoM&$QCy)Ei3n?9Sq92$5U3L1IEL&eh+HO0pK zkNNxx{0jY}Bcs`)v&o-Q1=;4<_fq##=Tg_|4Rzdf80!k_8cb#XZtLWKIjw844c6iP zlBfMy=WDf88KmsPY;#$20aihyQk+sr`mA|(F}`_y zZ+Z7=Tx*~99wlb z!ykLTL)25JrOolp8-D~|{fr2c4;W@n6k<*#>RTCT-IjB@arnC7F?9n;txoMaDO{>J z2MX<}hLY zqW-$jPxl^P6zx&Md`qUce-}_2n>d?<`u0l5dX(#cgm zcY?i-mgi2sDr>WRS*taA41o{{y$cI3$6dlteCIn) zx9qk<6lyorp1l00rl_Q+@!PoBl-a@VDpR^HdO~sHZX&uZ+QMQD+L~s~$<3|g5=-JJ z-BNR4op@tTyFf#WX~E#wD8H~quEw>-qXyUM)Jm<<+`aAODUoN(E$8vfl5Wf0i_l=( z(r2j8iZf<2rcbg@)px?>VZ{gc2~Rd(%am*!PWoY{U|tZY(Cg+J|ILt032LZC&oUfI zqxX}wy+Y1hnb5eqHay$|e5ApV4epohK%C7U= zGZ|a6#IQSS!gSi0l6;HU<8R>~)4ObNy8OGegQL};l~TcHU~}knDDWCLt=!+7)|^t_ zsAtu9>d{*3X?Ax&l+Hc2a^32Ff%i5$lg=x+(t71#ch`G&vxc|g<4F55Hr%}6N_$$? zqTFI|Epj5dAifehBdq(nJb$+AYuVwNc{RB#eFq;LIQ|-Q6OADb7o8kE9D){dl+Gi> z%eyJ;_;T=EAU^(WoF*OrHT!kA93PLx=YHmBZfr7XGAr>iF|OUlEAQp73B;S^ zCNgS@0O0Wf0Q>?0-~q&-eg^>H%nAU9h5*2q1OWJUu?D?T0AM9ADG4Q+O_=5vJUcc&gR9KsR7Gs9hn?~~vx&3* z+j=%~7MK6=NJJHY; z?JO=Qi!*zBxRUQO{TK*RKebpcIvqgu6t!oLpEy3eyhA&!8sr}Iznejh+d0bD4vrV!^F=1swaiC)`M=d`Q za}i01VZlN}_5C6XP1wb|e|nDVUK$M8~pXatp*+*UV?wnY%RQ`>iUJ- zZy9QPJ_voz0?(Lb)tFX&;a;6r1)t|Q#y(js(8 zF}>Z7MwwJG3gx{EIOp2h+Tc}v{ijAf+js@$&>73%;Zs9TI27<=s9_E!|0(}^Vn@cD zh!W84FG0CsS-Y4AfuzKfoTMz3;#KRBV|FbqHTxK=ZDy5@lzxJ|N9z*nu2Y8a-E^A{ zC(fk_x}HXr>DF1dT#fP1Es>x*n3~QUFE6JR(9_c=N=Zr9&CLGG-QL-4Q&iQ!GU!+% z!NjbTW=`A-*new63;;wi_iy3UaN)wUJ2om4H2-_^ZyaI~*>v`ediFfT^CvDJ0S-x3 zTv5#RtA~9OOffZTaMZ#3*rmB$wZfN@gX2nRO7c;S8Q*ww)8+p0@wlwKcuYR!&z~bF zo(vjU$C)(utJmGig;iX6Y71*yu>vLCv5l({+VOP7Xfm9=6b{!hECb=S=qOVD+pLw- zBz~*g()Ogt{HUng+jpbC6p1X0i%DbUa%+8{UY9;NF3?g|4Tz}pe3;vHZ0y*uC&vym ztkvn|5N;`AL zGRyXJ;P~F%F$;FMVf|9zrK96(v-eURUSjvfA2H^+{Cp+vZwG%(p&T2Zcag%vQt?^z zV|6ukUNgKs?_OMI&`Rb)fQ| zvp>Mwk)7du|New=|9D?BmdwBRPFT3Tiazgw8kHq8uY4~nvZAUmzV7?d$n5lifKF!u2xnI zxTMIK09_)A7;|($TrMv5$C=65kiI@C8ES0s@k_NEH{q4z51UVfZS6j#GKI+}u!vh| zYny4i-Frviv!w5z?7Yr1@4yuAGMe$(%kc57n=q;lRNKZ_;Rd13e9=w(|1Znaqxk<k@sDw|Z~tcVLsky_v>5|5C=WP- z(uQ}sZ0om17C2<&<-6-_mQ*zKBKtGkp5en37SH>RDhiM!DSM(Lq>q!dlN4$8n`)v4 z3J2~I7{6d!RqOnSCgXSEdU<}>lZg$gs9*_?h^RVCY(+#zmy(e|OkgqaaeKJjv4ir{ zEV<$HdA`SRcXz)l(Vz#1fK)aX+$*KKy&)(W4UgJm(p^OcOl(#op9_i?hHMMuFbC?v>mHf>?uo@d>`y^^1}smi2p zmCwg`GZw7Z=IF=D!+RI^>Gbi)CnqGBVG=SjG9BB4aaBg$A?+a{A?asA{mQ~G*Mqkw zOIp1>Jq>*P{27%?CzJH?;qUYq!K*!S0vi#Qj+xoVXR+oxH#kNc3+5RwO*uJKev=(~ z3|i$aEbQ!4xhizzF)|%H4q!h8cUgUD?l%Kx$(@Y+@ub&`qw;23wv6$L>7yGShiB@x zhgW{>GEKlQG!#KVL(Y1w?L`@jgMa)mpCK-E?%)fuJZES4H2|3J`J2&k40KUcZn>m9w1v=az zuwQE@LLlDxxw+rk^q9@z@WGxsJcFwPD+;dkoXSdjX;INmZB@(1{Q2`|XfMOpCs~A?6~=GD z`u5?lq+<0;qvOt4PfyRwe-&^tJ3ITRwWXzF>!M@Fkper+!^>dBsD&RMMvjR5*(wH8*o(0Dk`{N&$}_kUC+3k5B~{*Kk}6?nGq|~3?xV7|L93QMK`~dsr`DA0k$44GF=#$gQ15qLv%|Cr>Lm@{Jq4k3X=Iiaqd>(eptrxEc zAoR*J^IZV}Xr?=+69-O!U-*z*8jmwJUdcP?EKIQ8U0ht;Nk~cfcwBCW;q>-O#4o$ zuFgf$%xw27K%O`pZ3FJO#u>|BtF4}{7P`8+Rw5!m12OaM$x3rYaklY7obs#buZoPd z@}?%f`BKf}m3sUeG_;k1FHq~#wi}B@lglyy#odbUn@;?Y`Y8Uns)1H$h0qh~j;SeF z3M{PbLdCND3JPe!cYW;Qsb*p_t-u_8C+Y5-7o1(#8@UTVfl>kk{F^_yy?uGQ6ED*w zl2Q381$oVTZdrC!hVV{PvB|{39@qz2Q-RNXxDUgzAx00qzPq`pUN|uT z=Fu{-I^clHC2JnnM@A5I8L|_^B>f5EKW(`hJQ04Tdsq*|h1U{@f zRAl4xbDpW`$8q7e7FQ>?ZwR6jF5FcTQzUv&LKzsTqahs*F z$kCSOJ0RB6N@KLF46x^~hU#Djl+W*5_`);-Tx#E=H{*Z|XaDfHOW45UK$KP%o=nhj zdoP(IUl~W1dKaWu6|Set4>2>AI|?bB2jZmB+&BM<)DcF^u7Zf{S}qbn7S<{nORWUq zb6x@q%-w~X0BPc|^WRRw|9aZXbcOP;W$mk3wKgNzIRB=l5kK@s;3xjqkwSSvpi%&C z!`TLhtyge)hKK&Myt$q(P);nIIb{2bM_h zW!0E55&!$1MZbaE#@6;0+?qi{!}8czcnLsWz&SMeyRcsNJh_inwzdf` zckx=eECP3>^W**I-saNM&toL~`qAN$JyUt|!fN#KAHeB+T2HlWd+3~==5Xx}K{ElX zeQ5vIr}KwrcwqnVP>!CC4)MFSbs7suXR*Uzy@cLkfBi@7O)(Y0jdM6f;x1rOyGS0< z%WitQ+=viG!jCs@!Og^+D361QX+P54ZL$XbES-^_{xQ0HV|~qWn5m*nr?!|AB>SNl zBtC6LZJo-b`27rYbab2GC=YYw#8D$*1b2N%9E5iA@XnY6`G%&evvVH8{nL+Q^w30* zJkcTV+o)0@LQ9p*#3#oeP{a-P>Xg+<&|!v`SC*;K#f~`hkPt`oc5Pr1|HhT1!$sDT zl7jCsmc<8pm79GZ) zgRLAL6>r~Hr?pROAHa#gb|Cm6{2(dt{JQiuj(PtHN%ih&#|3vmrLWm1SkuAb;zO4N zO&kRX5hmy7=O2Sn@E0Gv+OUCbNB1ZdI!?l0Qai~U=0YWfh1wVZ8ylOn*?9Vkf|fbH z|MrlPQM#a>kL1$Bd(A4e8$D(U zm5$hi+<%9EI4m6*X?8hVyqS*Vt@sKQ+z1^#Q>kF$w{m_ z&%4tcBqXG9q5Ji~ik|-dvsSl@%^T*#2!5AiZG72S_Y9xMgA0%++t9}sub5STJ%VV! ziXf5yA-rw{B%po+Jg|mubP%nMYu%52_Pf>CfE4%BQyhTDK6fzczF1% zI&Q7c)$XWV$qYTb-zTeC>xihR1fi$nYJ^Yk6_J6U(9pd+1;sCWPJDVaaahvmB(HAE z4GzgDc#QX2CgN0JK}yR#!ak5w#m!awczAd;xiB*$@OuKV0dA1c9pqFEo&z0fM@03)L)x}%?~Q|wNSWln1G}j zsH&`A+{-A*@?Q2?Rk(QF>?E?RHtgo_;j`#G7x}SF_}(s<8$e;cd-v|e^JunA!`k{d z5i9_{=%M1^EK@MBuv9qlK}Z`L8;Q;u_tM`EpC&ndX~mMG-ouf{5ULo9B827cC+HZ& zYT}~s^F^Hs;r7>0xf)lsrZNB!l3bOROWsalNK6G&Bw&)d5KrMoY7r~e-CTgLk-#u; zPI7hjJJ&S>T&7e)LZl#Mm$bB`2Nj!)doLeDOG`^hZ|_!6?fLluTQ+dUQt$y}HYdk; z+F4my=9^nv_`#te&NRxheHUB(nseM-3JrU!zwR#G1op2z2vDU!M{ms!aSojip!SN_;jvgaiRA!Cx_f54Fd6+S6aDw2?+&tZDe*_Yqv_})M_CH0xf zj003r8%`>GU#!$DEG#|(-@bio5mWsaet&}1mofe2lXkdP3grmoIWS4U@} z^(#!vPz(7Pdw_`$$JW)pxS>Cx8?@B?pF6^<%^p^cukUi4k$_zG>WBk&Y1+a?g=aaLdNhCGpx}c zjN#|ZMQPFRO@rWnp!n^9in`>4&)H;GTr#X2%Mn?Zs=%Hlu$1(AE$G)w5YZ8zuHIo` zrVb?lz0P>Wtk*a(G&(A2Ys(Bm8vBhdI8jh?VKS>GgcUuXE7LWnmW@r~aoAi~US966 z{`)t9m8R3~to3e{ckZj}*QX>l6Htr!b+Y8z!s)xwb%KLUyImw8n59C;Jh|Ca%NQ>g z{QT_oCm{j)x@)b>R__fPurt>m=?NwC`H3O)3@C+?5Qhg$+ag2{!->YiMt6S()k*|E zyNb%r8^C^lf}3e!NAwnnW&M8K2qi0ZY}BK{i#*&-E4;jxEXm1eYEwA{5kP=!FvC;gp-R)3B>AA*>uP=Gc)?Xe*L0JR+zP}U&1#x zH5G&b;%Jq9o~!yvn^!jM6*ve`MWu4E4)(?iEcrOMY+Eiud?$Qpc(b!}4C@UJD>g3N zKz)>sjuD9N4^*HDRABau7~Yv}a=?g&a_iV|A{Q1WJ8OL-Wi;cUR#4Lqht{JWG-a1> zLC8EuCbdx3`2}LQPTP8MP+dB35~D~IFVYYxn1Rl$d~Q0@A8JW@$Q=BJ#SkyI^q)8> zYh`6MaJ*2hm7kyARy22{s-cmaOE<)8w<=(zrWRY@X}AvUr(cmlN=%HZtgP(j;h~Qr zW`)2J=JqSu+rWknwX^65{?5Oy8bgAbW11N4F~V9EqZ{|`ok>?LYUQ{pV8_9+#1FMR zjM&5!_=OX`VRqvj(@z1gLcr841KI!x(w@h}Ykx3+$D#Ae08A|ltc?Q9>@+P58{-7a z|4w>q_ALH*Zmw&QEm~l~EoL;MbksoIGQgjsUoj>ENl=FD9F566&u@GaZ5`1fPwx>- zWK>sP9&2iJn96*SgZKCMWt{mup-HlPjU5tH=#D|2lUArgr?=JjOZUf;P5sH>z(50) zpx{f0=V{|!!p{L2ue(uhWyKWEhu?m*AeCl@L+sdb65ZHFSxK#xJweW9G@QWH@cMYvxp#$yiwoO48lvaXq7-&mBpkl^83T%QNLejAVM`^K)w_5K%FR2!t` zyRBE2yHOc^H5QXPJ@3dlUUqPeA3Z6rP~Rfk6#uQ+9>Q z(BVR@K#Neuz|Q>pmzk3zP7^P8GB`LG(HBkDUI0o(-3d&(T>Z2?WH&cAwV(gQyC0#2 z@WvG=yyg~FA(fStS=f9J)+~Wb?1zz5wU41L)nw2~Nm2cs8XD5%p`oRj)l!36`*|j= zhf&@t&wH71SaJ?ll_eK+T@rT zpp=P|la=h@`$bbTgnP{k2PBS&sOTY+*6@;;th!~tJ>42;6qEn*Um5oWo>+dOq@-M( zJ9H|JjEpn^g%>vYL}u@+5F%T*6*5nGPe`?Qy5_vQ-q`P0wN+@^l0IO-*Vd5#X`34Pkp|GrirscWhA_yFBArZ3KUJ zEW#P`nHXC+T{ScUq~`EFYTUQJ8Q-fn9ETJcx($HRXP8!m@j$NNJK9QS)|6A72^xzN z%;>d+qlZ^-zgLf)6iwGrhWujt=mURp#NhUJVQI>k!rjqS*9;MIp7iu|A7v1N<3ne4 z@O3n|h|jzwTE^+!`_%6GpSu5GC`N727i;|9XDn-*VLF7q?R4>QqS!$M}ig zQTRPa>5rhE@nJ7U(|CX6$D;40pa1+>YvA+pd28ngNhY=jWF3`m7sd^G<)pq}y}bnk z0s`v-dYWQ4V_{=7)Nt{Mo@{-5Ua6#`h#M_9-)jki2>Wfzp65SZBpo#HO8Wh5SkG;^ zi27~o4TcvS83=F|$q277M{S^SbG@A_$WQ$oeqs2Zk3pCC$yhJ`pFKQ9SaMcpa3f~ z#YT2wy_S}wdoPK)x|;pnimPwO-W9~7b#-eZOB^AJOt|fMjQ`9_J5TNN%-o#xwMB4S zTMyV-!Vt*3FfjzqJ8JpX-wd=JMo7fkAFYFyPURNQilFqbue9vTAdwwMqw%G49;6*9 zP;GD5$Z(q6e7gee4OM6O1U~j5U864o1Sh7st5{SykUQtK?ww>&*jbd!7fq^G`^O*8 zDK#yr=U9_9UESTFDh&ct4>>2+E=IXBOd%M)i1l;A4^l{L*`#RcQLeMWTDoZMBo^RxU9lI|XoXuLjEH(CWjTzcE zwdC0Y$4}`3?v5ANgdAgn&mH1|-RK97of}SK<<}zWKREQ5=RQoESNB4b3Ad{sCd}f- zO$LEn@Ddc-TO2og!h8YD)~C~EVNhmJOy{!EF;Z8LJG?%aUP(!iXHINxX=$-XV_|=N zV=6gAj(qhXcKvO#-VxwhetwUTY=d;=yTBUFfdW$zF#0Z;cF@8{6E zd3<^>Zy}=s5z6~ufgBVp^lcjezng7%Wk-?8-!Zgq$;fGQ3s ze1dEr9HwK{h?0^LL2)rLL(cc&!jJno70sij)A@=|S}H0kqveoh6@C5muDy%rO`Oef z1X$P(<0?OLL{RMKAx77>(fo}Im#ly;{rzLjA~PLsI4KTA=MJVGsn+0@!?ap{zTw(x zE6C2g0S^ZVKZLw3CueIoZ8@!*GE3&np4ZdMg67JOQLKWUqtJ4KBAp98G>~xG-0)#) z2SlI=k4=xopjnCp3a5Me;42P-hQh|C70LeX-@OwsycgKL0gCbd06A_LD~-^rq5JoP z%i?fkI|JYLC}}e9>z$O8l%vDLLmC*&mbcfZrP=bY{6gH^_5BHCBqS>b8ylhozoZ;2 zEsF^mb9z-qD_8>Rjxq@HjvNXOyR@&{;iJBdcxescw+3mhvwoU?Lo+6QxuUDdKy&)7 z@<<+6Jd^2dB<>w0{tI;(b`igB3;8T!T6t|9ZA<%=fQLK}=m^YtUgag|yf?1!@!Vkv z(=2(Xj@!!t3b>7W`v2rn*!hXkTQ2&D&Qx%F5&S@=m7(W4+%zXACx?lJ1qF&vqu)6H z9o{?+fu?49lM21EGH3?#Kx#0t5Mh6kCHmp?M{nF;Y=NR#rVKK6(Lb$m*p6vzA z^q;+(JD?)X&(=hU^y(|c7rAB)PqJ7-7%VDt)MwX^dcLY-|D|$*b+CDalTYK+Xt7YZ z&6G2Havl0A^7Q?;_I7k}i?6SwI&AmZx8qRTKw*>A<1<6#`uoDKj9MFfV`z7R$66NP zbN{Mduy*_fGV7fkXKniU_X;#|0$f~N?O9nyL!j)b1>+|}&0eluwaFZ#613T6T&Sy? zHFuN~7#JY;l^LIpj}MfGK)Hfi?PHLbhp2P??g#8JR<`fh**PYe*XMpB)Dk~T;ts2o zh2y}D;Ut%*R%+l&6h$gLO9I^nbxqku7`T$wX`#VY%jM~M;LKdziwfPdvs-sMbJ{;S zO!`{zbS7@0YSFK;)crKB{=^cpWaPnPO^QGlJD9nj2?dR=C! z5fc}W1}QQkh+nFPjH}Wb&f1>%I@sUqDBhc9v|{k7*^^(X(d`#b_iEXnGD}s1S-Jtp z0B^f!(1whHy=Bs18j@4Ts0wE08(o#{$?b}&PaO*f&XWIMZbq2awtcyvy>^kODH@E* zXoUUVLG=oMAz>1jegt9!2=k%k?_rBA8v@B=F;UZ)YW?4@569{KP`4vTNYHoSejIUW=R!4u@KWJ z)6{H&Cg-P5IZbtV@PQk#O(w+5_{;@3YRRZ-MW{*zC~9H4N@CKQOVpEHG$R{lI3nkOI1i$9{f(hOyN6PA)DU)t9Ck`|?Y?h<5=# zcpF1rx?B@q(3$&5gf~RQWKsDblQKzmZ7{7|c7?lr?+E7aen4FZtWD-3JN?@VestrP*8LgoK30_f;U>_m$V{qBrqXfD|K@+wPRlX&W(83P&wpsaNps`npOJ zh!<}d7v8Fm>U~P~J%S=ul9lbO9v6!EAfK3>mj|a)hF4}|a}WBX4$nOftr3*GAX$pZ z;P*v8yyfCKcG1(e7IwMs9w-&KQLM?zd6_ zj?Hqzg(?|YhFW0fdcoY$7C_F+>&~AsF74yvlhkR5IB|4SI`N*QPzXMi+)U)9o~Zo| zAp|rJg|9OC#jIEhZcN&LG^69WwB6Bv?ccLi5`q;!=4efZ=No=pTfRTR$(+_iLogSn zY0iRW?O|Uu^+o-%^&n`T>aF~_xR_>kZjQES=CC0)7JCFt!$oIg80doPP3+_2V;E)3 zfZNkaz3{=oK^V9=3c!%TSC>>Y_|~zETsja|+Wa0gRVn_H_$TJfE=LCY6$gi3|Ar3}PNJ&XsO9V2PYCbLpP$#J6c8Zx@(0qOPT>HslY&m3wF?8Rm}vE= z?TwACwS=LFNVQUdJfFw)z6q!n*8T?sh@dhH3oXh-$ScP|yJOkWHNJQ8E)&1-1q}do zPvI}E9yhq)nS_(w7avSwVgX@rA#qI`VG$C3xw^+u27ynER8GwKy%$pScp_pDblBiG zY|uF~0qtt$xCMnp8!llxJG*oh^55t1jbyv&J()m}#_qNs6+Hv<#@T!o40chCJt#Ym zLwJAm(SH1Rund}a?Vwt;+|kjY5KA2ah*Zo~P{?9$?<@p=k&0WL461Krqd*2oH0(ch zzpV`J+)kZQH_(`@{}Ir+hB%vW+6U-YbIntmhNSl6Y}N}+tcqE~nA8#?zT2mU4`4V> zUHRAapj%F)>A&UsC$VNt1T{ux+o@3xy?NynREz9NOG=iAv9K;)8h`BBqJeP_gF5R4 zd@z}Z>jN?byWwqiMIT$AxTY#3kSKhN`N@0sdgj}VM5>GszS;aDg##<1suVX_NR1fq zHqecccy;eppq9moO&nEKm!*$Ng8~EPCyhBr=-hOmhq<*Z_+RMCr%dzdXvihjerCV`60C10R)v{GsZFPZ>vw{!D3m#*>v0_tGILlCaz6s>BQ*uIwjLT zKxv4QiZW_eL#tvQj7Bkl^n;cqg|#hWQw~Q5aes_%|6XXh)wtt2gYBxAvrxl_JFiTxfAYr&!h;3h$iBw zx=#cqA*`D82v`Gmeq;K=n6jBy&uGpsng+-r%{V#+sA;fsD}xiYW#8doVfVefy_%$~SjAIJFlHo4aNpQo@d~-@^_~I zTjA{5vhg}=tv%=S7 ztQx99_b-rKMku2KD=f%nWeu$^tk?LL2%W{AV}n#UH7|T%deWaiLI3{!!v=W3;EEIo zMTMA|%XRY9zMfxQF`yzNi^<9k!cfbKWvMiP$j;f2uq>HpreC3f+mqG4Dc3gSa4lQp z36r@WV!ncUCtkbfSAN(G(@|V9kslb(_Pt}k?8sHx;>!vvRud7hMJ(~ei@fOii6E8L zO{PtE+Kc;+DA1qkqauO8(pzoC_g{n@yGeuJkgcq(Ba4fQWO-eV=k@Z`+$ni@?uS8& z)e7cH{$5{SOGAk;V$VoROB?l-eqkj*ZQ0GI(Xu?OK@;+6lm1FQxM$zs^y|032dt$3 z@D3#>b&smL?o~%)^U(N-pkD{)+00>10!FcxMC+<%di0BB8$&saH zWn1rX@r0yfw||dNqE9_I9Y%g%lh0FYQz}3x;D7(SNRAO3i6l2p&*gG^5JRg%zgDke zE^*=5#rCYQvn^f<8pQu?K0Z;PPAlzdw{}sgM?n=tiKUUAo(JkTpebM6_OP4!_FwX) zbF()hMzf^Wyn~U6$$M&U4!?fcaX12O zsfqfuHj_wD-a@R`>Z%Jey!7B!9^Yn34ssoJ`EZ*bGB%1B8Cq%>KL_V<3Bt) zA_o7Dn2~4}7*=bFBIRw$E-bXq7&SX-<=RP%j6^MKs*MM8ljyBVdtfw)Id1S<4&9-9 z1ODNnxT$I09s+1ogoH?eQF#aL5wp-i3#WZ2zR($C2QVU%Q(77+t%@nLtm^F6UMoRQpMz#Ge|_B$O4DHGl&RkJ7+fz>VigAm6gmVU6yPe<{H z=Wc4&eJzUz@VP;FuwAXA0T8boTepWdT^X*R?F z3+MThy27OWfusg)F!LRB6Jlr1;Ew zh=+&Af55YE4th%1au^?y$isv%_8l9^69-vctOY>Ctw5um1im^=IsrXdS=k2D6CL)C zAB$+i=|NRArnHoC;2V3EX2}T~QBPmr?y`M18gpeNJbJ?!P9YqG!G<*R0u36EDGuzYck z_GjHIwYq_(hjv{vH=m-SCN3{7J|ZC_55*4e2u6?(4-ab{IPrlr$0Qjn7|?*fh>9(H zGCc{HTVnoZxYouQH)vS~GVlxI7))@?u&}T|_MFJbc#5a3pRNz0T-IcT^NWk#n(xz? z??}Ly(9A-{i(-!+O54({An2N|7hOt#M?vb>vqhvYzcnqu{{R@-lNAOUe*0InJt89q zL)Wi(Fq}4BF?&5<&}#p63WJ7~R7w?6%t&L0<1ibO(9pnzkk=eS&j;m@DU++0{9+cm%8L%oBf z3y?Mlkb;?RJ(~W`ZUl$h;|eP@&*Xb} zxu4CT{C(4+qT9X@-q9ff3lHD5Q z0D`E@xr3~e!%OETy_By@uGfD+VHrZs0}JZ&8{lb>t&87DNr+Y2(A5j5=!q~{GO&uC z&1ax+(qgOY>$!9Ng(C)%O2sgr*iI)TR_dOc7O#9j4FGi#kiakh8*5mpUMt4P2tTY0nsC9Q8 zFDe$UkA-KooP9Sb0u9rrq6GS)BTr!M77?XqpXg*$2OHhq=`7P!>oa zQ{%{5c^2}p4_Tp3+3h<-*fB7PYgbfQcy9%!NXY>skeFFQl=h$i$Ho@R!iyhtP^gS>F_R54Ep6%V@P2U{%4?8l%w0fcPs9*fN$vFGy{AJVp=RvSU7&geYEhu=9C^u{&!?>9^X_gY zXOi;Rk*nKSAX*@v{R@up7Oq4a{Zh8=TMfTVrvplk_ za$VE^_it8a@!w%#Vc~u$cqjo&*j8^GkK2qf02+qP`A{QLUdB&^+)sirM20R%n>s+7 zTFgkl(=kg$!@5qp1`O2#tan|(D1(mwYwN6|vf83{|I!`O4JsfaQX(SVp-2lzi%55O zDJ2L3(!Qj^L8QA|l@A}^~^WLBsL70NJzP|o3jH_sUPZmP%8&MO~?M*eIxS3Ul>{&fb4{%3y-ePr| z6!7*ymAX_T3b{%l>^@?ftra@p~ck z5w#L>41^Xx8e$w$CGczh49PFx3D*2m?Z-Q`!{SbxSn(%3!$C)?vZ71b#Y`5YHF zqobl?zXJ`OJCv}eoDf(MLYUjw=z~};h0@g5x1()j#MEY7Z20!=vZ9}#UoIG-VH?cn zO{y!Z$u@nV;f&vM_YUzb>HwIgOH0e%zQc>l`>N4VVdrPWqwRf(EUBS@?oDfZk4B|< zg`C($d+a`h-*qcpp!VuY`XRIb7{msJ>+6W=NjGe`sRCiT%K1JhLR*9GU6F z;@w@9z`oU1sSN*2uh^~(joki;0Ui-H0Ra&{X7pPNx8Njp0GIQ?RE15fy}*}I=xz@5 zIJJx`rwX&!a3Ohdu?B{v893{U-F9YkAeKYNktKl$){-tv@#Af=;ud}9wcJK;KUcg> zC?_E&tYpmB(EXaB1JC)Jp&MU+bAcGT*1a|_Hdcima`P%td$GlXH~p+j&F-W=V|Qvv z9{!^5aBst|I90K#aUpoS>KjC%5c6I(YflVX53vrIvzev&95wX!_iqjk4l*NRVLlIpsfjJu)XJP3H6~&@tSuAQkQ_vv>Z?~_nl4t%30=$2 zm}79mC-7@~WbIsqAaU~HL-@c%ZbrBaiF6-pyu6CGwm^Mu?(at&9Ge{n)a&l6NViY1 zv7~7JW8>oj71h<$xIuSdbdsK#iHd@PVy0Q3cWSPrLGuq2A~9T!7n$L^RkK|;Dj zLm`$C<4SP|jkcp0rlBGS$}ZZP%0<`XmIX`0?L;?q*`gj@YP{C`i1;|s2sei{NvqD! z_s>a4NFwP4o!63}gD-Zhp1$~XH)@(QTHg6B`1QlvZ9qPYgW}Zxw@ET80-pE)&vz&d z4Gr4dc2}`rjna_AKiN8gIRM9$8Tou*|Z9DHH&kB_Io zMsLJCRpASqPdDO5E}%S#x-@}8;W9@#HJO^2DsgNw+g8A9o1?_Z=~EIi2ts~z0!55i zM>`=(g&~rhSdiOv6kx(eg*p3w-~X#ZqJOIp+B|)`ylie^a|;GK7zhr7Isx$gVuN|N z-JGvw*>T;j@$zU2sgwg*V6#C;G#IL~$Jv0Rh|_qv>+yp!!GT7i%qO{2RTmc{HFGoR zmk*W_H>f)&zcecfaN-*vwYIZ!9hj-DU)vy4I&M2GH{+WAL>EYurJ0fQTln`#)gH?& zhK#HEmvk9wS&}=EzfFW|weNqE!$t2kjf{+J#l^*06=K{k|Bbmdz~^Y7`I!ADJH@tU z0=z|eBaVDD9}B>~@tB#l$YGo~Ic9Fyu9rbQ?a%pE-u}DF82ta$#%TLjhYjr1kb`U8>m? zj``e3Iu(9!R3B30pz{9j-;EqPb>olUjB<2;d5jlM!4)jdB<|qA1LHlg-v-6rQ);nr z6CcV5m@t=gc}vc9>3v4vwA$Z>@xNO^tdQ@Rbgs*?;|*~p&^w-xG#p?vjxH3 z0jZNucnxtGH#BiQz3B{==kZjaRASQx|K7#VN+SAsHyt@7g=C4sWJ&ko7@GIROftdW zj_q_<5-2TL^zr0L-WLDjcAy=2i)Q$dgq#=Q&zXcRx9V(L|MS~BEVi4pXvgsY!LW?b z`y_YG6{*K5wz{-bYRDd!3}MP~Xz6UAT(5(Tp%vV&?p^E7AF`FxB0u*cjQ9-HRL7x5SYJRP@`(C*DY!;_+{`5ZA?B*&IH5Cy!4tbr^qj-M zeF0A;}J=L^NwC0i3IT|Z0-{?4rCUhRlY(S zo{IRCl=QTstc;8`_P+h-k5?)8UL=?8K%9W##^X#_u0xNDxPSlt96A=(yXEg0ExQ+b zcK)1Cd8il{#vVUPFcV<1cX|E=QD$+VRF&W`O{*9bgirh=%_@CUQ@FU?@$++pPk4T`Gsjp17HyRn=BGFPv-fIu(mV18T9V8pufcun zar<=!wb#+6hYV-JT>)k)2!XJ5Kk%=7B7&0n;*FAGk}$?lcJ>{PvX04Pis?e73%W<7 zZSCEP8X7MpITMcgZv|$uy+_Bo+tg@Qa>Bj#X%@wyMi0t~6LkfJu$!$EL?|{+_Q2K! ze-$=#nHUv!_jI^^Jr8>z?}--D)m;3h!vLR<@T#t$qE|yr=fj^rCT;EQ9)JIN-ba8C z2vz<=t~+;(=fG03{g9J0-gdU`Y5uowZ+UP0)P~pu1R~lhD!X!z>-9IRx_0q^Q9E*C~Y0`yk4K0_fe;n7pJrkI7IKv zP^je(7`nf7Zm~=|`$Wu04U7_175CBLi+vk;nKhRZFVFnx**EzYFShRYz)9kM2{ta@ z&hG9uG$P?52iU9ijf(}+&%Lq+*od&PnNGY#AzT4=I{O)yvCHN8E3~mRQ5W{|`h5Bj zB07H!)-9g7Tj&y6to$k9M&-7#WM@@OM1Yz5z1Qo^nd3baL<1O@#EH3+6`88^T5vwt zSADUs(ZeRhX>P*_lTV7lhobxgQz)&3S;My9;kQC38vl<7VsdI6@Zi);I&zVIm1k~& zG*5r-dfS!HIU~%v4qqrC&*s_`6tJ{tdT-O^6{h1+CmNTuiW3PEj2Vptb_Ddc88_{s$s&vz zX<2I!RXYcbN0^8O1yR+W9k2xYDA~B27iCwIRdK~Q|Q6#kN z16lUnkBq)s616lUF6a{qtV&wz-8(Cv3hXt;92|&vZne&-9G$f!j-|(gH^HF>FF;} zX#pn$%7-VLbB)(|Q*Z{`ew2-MT0phwA{7D8-Pxwtb^EsVBCd=)b^8!i&OthP@iQf}GK1FOiJg;(SGUOhB zIXPdu-t+OS*G~PD@DCqW-274#6W#y9C-+ukBMaB5Ki?`z9q5JHOeRjKOQ-OlyG{q_SpIZ%8>#Jz2x-) zo9G+?mHUfvEc?Q>75`u=y=nzFyftUTV}g=7WP*iP>s~-Zuen+$%F&+jq-hVM66l(j zGy`xVzR`x+cMVtL#XiTHpfrq&FZ7`mdCF@$U1j%{_f_72`C;YM)+}t-6iWN`1pYRcM3woe_xo^XUwcS;v!JVWNt|Y_`_TbLUA?0H8m%oi2l~SJ~uS>_7*-} zilkqHLO)eWNy#_6p@BgVSu;SQWS;?TOmY@v(hnNA-yKmzU-*$ z?%lAyQP_C(x0Of?A8;TA?;ZBUq<>1!a7F+A93^~Y?r8Jk;ijul2%KnL3;ti(Kx?yQ zB>a6F`G8*T)kQB1?7Gvg_t&M~SyRnAcP z+zUa7;sJAOA@|+%mIeDmd}(kbj~UNVTN@c-3NAut-Mid0f}{2+Ao5dJP0JD$b+ZfM z-5sI3o;X5Wh_L{JI$@Fs`uSRts>bYfa@iqjw#WVMKNZiW*@Qc;jg1Zt@u=zqObm6Z zYGczfjLpuTV`3Ka^}p!g-bP9HNw7MnUG?0vGj%Lm)}eJjL$1Hn)I73=^$pydW*7r@ zYL{D%)Petl7lN=``;aTX=HleEg{ACSI>7;wkhWF*g z?)Xwvp_Q#g*vWd1h+RipyCi#TG$ca!Q;_K5xIvPR8P`k5cPq`VB9%qY zHLUrPrYnkRKFWUSk`K}2%n^Q>${Hx8a$5cLXf&R}-a|NH#@6jAU8LcYoYrM$!GYoN z|FHBkDjLa{SCVTcKa_Ohf*6%DV_W)r*)b(8t??1dWAaxM6J8ny1}ttfKC7&-c@5<# z_4RSFX+y#!AI>a#Dk^}X+`_-94Rd_2PFKxzbad`e#m+Z_3da=@8fp&cq3MS*GBVS) zX~rI>k5h=>6k&w(;uqG~`ssZPCBwa&@a#TmQ?_cA?AY6}lhs?oM=ogIZYJ2->I7%X zWYfS{bI<;m;dseJI&Bzifr8Dza$vM`Y{AwyD4=+d9h;<5Mf$j!+P1)=p7nivrWS*U zp`jrtyFVetq0dN4sxAP7y`bXaVvCy!w>tC359>=XCxg)e;*im;3rwu6D|Cp9lclIW z2#9%*pa(#S7b(PVU1dAgi;RNw`7sx1Y|K36JW<{ZE@47=k8Z{M^yvXKfAzWF%Ks%n z2jDkhU2)L;V`eMqzoGT_HyQJ<&zqL_1i&}o$8#4A^Bs!uUf~D^z(rbD{6{R?+rBb$ z=#>4(ef##px^JZJmUE3DZ)vGf`9%8RVOyXK9*zovu{)CA4s=Iy#fkKELLss*7Y0Ia6_T-0y;?Y4>37soxOTulHMz#cc8Larwcz zy!|Ey73MScqFH9hIm6~3wKT!h_fr5y^rHtNJ>JpSnkfVzAc#9U@_v5C0xq29WqYRR zXJFkbW)o%b^=$ym$`Tp*zoe(@OWUvFJ}BYhb18Gt3AoRfXURoQ?~TVQbHsOk{U>%= zhXu!Vab}6}Ed+K@iyF8+LI%tgHS$J^!BYbkrk9?co|+tbRlBcBC+cP_%NIe_v~t~< zy&P@4zTEi?GewBF=`DT1tnc(KN;u+*NLmZJotO|P9wJlw=4aLD1h(Li_%t@dfuqf? z4MGQ>;c|=-{G=tDFYyg38o0Jmk)}53Zm(L*#b^ur$;u;mVmOdE(Wk{PypB2aCR zfkQz*YaqR<>LdevkvoY`omN)B*=nR zM@Eqt$n#B<{sDXPbYy$h{i49a7)(>6Zk}FMZ#$W8|4a1XR1YSMCQ-zjvr|!`Ccj`0 zq-_7|({~T=FYsjlr@Y`>9c3$w5GE2NDHaPD!53WLG5;~_7P-5(nI7A%Q_v!G!Lr6a zz5ORW!l-QAxnF`)RZ4g)v|j7dQYV2Z9x_B$V+B5|H+z#3K%yjaHAKzJb;KgW!k#`h z?N0m*{Ea$ofQ=k~`SRr(OtYiv*RxYf9$PeFa9V%g29(i@SgS#;R4K2B?H8F!H^_6H!)Ft zlfV9#%wmtY7|y4@%5G=F1>YHxo*vv4Ri~r63-QdM=+ z(tPRL`d_~n%Cs!v&(DvvUQ%0#)jcO%z_a?*y)`OK}X@Kp0gu7#nRoB{E#Crb2ejrHaz zU3*ZnPxGfS{n2ViRdL~$BpKIx1~#t^6gl5`R!y>KYiRB1QA(V<&r&ZR)ZqvoTu{iK zJRwM*=|<7#-j7F#)M_%nr^Q=pYizncmE?!DDBAB^j_kf##UjQXNbee-d+OhWv9`~1 zY_w~CWfkVQ(%@T%yDHeCNGOJ?A7aBzA`#MNh4_Mw#8{?t>gidV+IgCJzw?Y7?qf1| z69GhbJm+`a13UuLWuOL#;^N`yZaG#P+`3z*0sjRq6YYO=+3 z9#<U?+41?SI&RtPmS>g@8*Wn-u2pg>Fci*Ufrk64+^Va)-Fx;6dUhM7C0HE6^V z0|l3X_kNosN;d_b@9AlRS7~W!cEj167HQ+ukx%7s7TP9Vfcq_x{=5y^{6B(!v!~V7 zx`&vpC2@J0Gm168=s}O=rXpatlhF?$8CC!%6eA#5@(}zB79f?USrlvcasqY?BBGf< z8rTEsz%jj;?*$Lov+(?rpV-ZMf-4VtG7-}rF@&b+yii0lp4*kF!JidhN-Bb_rxBZh z^9|i1lKs?#`*Ioivlz&hwb5Gwnp+4|rlg5098VORTWcyVxXxv-nM(<>2R6;#|B^RZ zH%F^SUnIa!viiRT81+(wX`a~78KYjXlsv0LTJ%VgMB0kCZ$msY<~$qWS-mvDzfY9E;JDUp)=$+ z>!nK?u|!Uej+#Qtw*Kwy+r*g9heLof65LBLJldYPS~|LzvTeL9@Om=q)$p~93@mvN z~?^TjP&f3muNaEU>C>j;8 z-ni>ak1ggf*NIZu+n#3n-JyZ>+~E?JVeBdg_ZTr?b|4l4Ty<#~gM~gLiH^rV%!0X!vdr(n0Fb3_S0;#unev+L&>3?aB zMVr#HV1UxobxKx7Bxr_Sm_`$Z;ub30UZ)#d(Bg5wzoDy;s@Y|Zm^B`K4WsLs=^&3o z=qf`@+&9BH)gAHRSr`V>f->81zLH|+8`1Ik93VZl>kxM8fXCAf^6l#YZqo%2z+FyG zP7!A2uNVkuI*iQB%q)Q;whX#VC1j-L+L!HjyBd5xb$)$IdQbToy2O|By%5Gh*s}L_ z`ukM|4lRawtj_Q`UKJ4!sjC+|EaE?WbK+$eJp1#VR`a^DCL1%a zz%a<-ey%(+`NK$_R%_RgI;0-2j%E#gC#-l<@Csm=N}6krSA#c4JAbtL9#l&^TU*F` zBw>o6)wrR8UfBk*y;%{jBMvB`x={n>1Hh`h2vPGfPrM&+U<#k+h+VFqgNhAX$Gfg& z7~L6`T%!EKsQ>PFub}&#II@d>cuv6^P}FD$r{%r>_<@u z_C4z|KOCtrxSY2|bVzVLV<4EMUN(}q`WH;jI{}jhnQ)5wH^tgjAS3vYA|MvpSXSoz z!op%b8NxJnMELmLBH*xH1U4Dt>BT``Wvw13orvdQKn{r5*)X8nhNAD>62L->6-P%= z`*`8Rl$2(%@+@wZe3f7I>+BaAm&wU1VToUHu@glhA+E4CxRJg-%=G9HDNHRoi-k5T z8?VyF8Z4}A9wLR`b`tqE_*VTJ)osQIAbiom5@w1Mh){@uVJ6f%!FsH%Twcc#`I@b^ z#dJUH{yX-ZUl7aDh|@~X&Za0Xb^wVtsNEELqxPBAzErOfIC`01q+XPCt$X`!Z%%}U zMzm=e`cp7=yILx!HP#ELD6b0Rs3Bb$*n$h zy|O%gj3@gIm1=G)i4J&B^G5D4Gylo=I9Pd%gcLPe46~OS895o*wBD;%)!)B;Th70s zHTtx?$FW=e^G6sa2MvljL#HCUO=!wc0v8H-?EeXYF8VLy+V#(23w0oPi2@L7>yc^C zvmtZA)SlnHSDLKR7Z2d4un@O#hG`o&x-X!jOQLKyoNwESn0)v&Hs}5(r7$h+W7opP zA7{ba#9_@YHGn{EetqG{nS%$$PnbTy=E)>3o~yAqJyAL*`#z*^V!!9fo08I!$5_XV zP4B}<)5kVgWJ~wr7c&>HsXk&F+A+>8g~xMx48N|VJaIoaG9F~!oH!Ut{@(eW5q5RA zk?${w!05A>SJ*Hqtx5(nR97c~FRP7^G9&^4>K*6UH=i!3jJcVaP1Io+76uzLL;fyN zvRM(=Yx^%erR}^lFVNq#WKn(mkEX0I183W;`-H~%Jypo*R-CL>eP?2HRkxAb<5u^^ zx81pV*)M`)`Tw%{=0~@gna;BJ-yS#4?!l;k|CFd~r=<;_>7jjN=)8GMl%Y@PYy`0; z&+$?pzWYq}kZg8-O`?@u^@p)j&NUYeJ=ud|{dT7vQ$7upq3g$0HNG|Mrstne{fHk0 z9KJr&5pdF<8Dlm=_k474F_{#W?a4g(@yRETqQ*X?(mimNLH>4rXXm=r=XgddF*wz>I*OUYe_6KRieq9alW#$@|+hR zaIxVzIjgldqem7dCh<9a&-bkv`DKvM8N1U;mMz$?>U8(Fe9HYA-wxA}kMqTJ-Tqf{ zA3kjig`ypA=w32hq+YhW6O>Dl`gZUNPE#6s7u)G7+dOm^Hb_fRVSBHZE3KkJjEag{ z1Z*(ZK&Fa#uo}V1&s;jOIU&-Yq?o-1lKNu^5$y=kMefGL#EcjhpKQQ%hOrN_e+ux_ zX})~fqXLM?Vij*TTSYo3{riW<(Q{e{$Z04l?y>Q?--8SQ5a&etCnwKBXN|OHwdc5x zx|1G728C1jGEh*AI$Vs0^$3gh!Jywql$RG3Iw46Z^*3!{vG-Pg7?hv&5V%?2Ac>Qc zQ|{hmn#YX!<>uU%2*RH|d;U$xZPUG^{M#}zesr`^OY3EiDqEbKRBH==(EA`^PBPr^ z+OBL688JH|>1&rksJKqeWFtgOyH44-fxlnF`}*=&mxJQ@CiG=gI z(4X`3^Mx=ab+$4$UyFpZe-^%d2ljLs6BFjd_qCAX@v#N#=>M|Bsm0Cd1?&+>B(iY= zLWV{_Jg%I&O^nS1aFo%}pN+6o(IL*11&y6wpEbYMfxB?6I1{lt*)ouk!Qd0O0k@>c zpl}sBw-*s%VH0$KCF9}Z+VPEHRt2lci=kW`c_pRU2eH3DrA8B`j9_MHqZiBnz$1zh zP>BA6CEC!C1PBHm&Ahh(BgQi-I%;PEG67QsnjMss6x%!QroyM?^ zaprq3%|3>jv3;J$L);(dA9~ zw)HNw-FS1R*6nZeJ1oZig9EQF)6!)YX6AIroPj?p7OZ6g{?*X4WJqT8Yvqk(pPig+ zdM^Y~+Ol(T`K`h8c9MRs4Z88%L&JuPS;#`Y($Upj0CD8kFZmmD#E&X66bY37atng| z(#5)24>&=Cii=8?0$yXB3-2z`@lEj|2`SpkHs=CMAm4kLaS zZ1fgPF~d1^`s7G!Fern97o8}80@7SM8!lwJe)aUUgIf;#p^kIV`qtXigocL;{R2k~ zM*#%+_MqGFVI>Lch1gLV7{*x;-?J5y1_6lzCLc7AqhP)`H$E|Os-~eaEC*I8Z$D6y z6NWixL!p!_5{Ux|4MR)Qr4%cMd0}HC z!onQ%IG?!8HTYDHTUX$K1=o`W1P33tAaX##;B~QKKg=8X0QX=C{4$gKbJtf|umQ~N z0PeFox^J}-g>C)sUv_{Ja*~9%TLL0AH!p7p3kz$^%+wSU)|x7`z&n_jnA;FW@+tz? zf{cg9=^;qO2XI}}LV|;BDfWYI@Y7&%f}J9uMJn>kCY|{|K@)>+X*D$xjc4Q*`x@mg zmgP2<<$}t0;y~xZx>HPr8H)qoG{1Ms*4HQJ5G&+>^9$eu=K!{Nd~Qx`Xlm+w4fd}_h(>P#a3e_}#v~M6)9}>4g|3LopAGD> zVB7l)r`c@~{1^~OO?FPsZ9)K}Ic)95=DHfax!rzhSG228}}HvB2F927U4WxYfw(n3H%bb?E4mz$sOQ`FFK zC6T14Nk&dyF2_W?xv{w^EJutEGjf31s%UEdB*MkrkNIsfOA#*P4O4NXL7^QEAtC<_ z+l+|`(Jmtc)T!MspmB!+&l;eJ;%7tU$pvW9$_n1B(-uNf_?ldcr=|dR~DXVa9+9#b^`Nenn(32|{fi%Loy)gjQvLau7V5BX(WQ@oLNX9d_#VP<>x5I&QG@;EKj<8n2}9l_YjY^sSXrf*luoqVxWlADCinSmg(x0+c2lTOrooY6mm3A+#|DdOyLqvvO5qcr%zjyXd~9uRmKf^@Qpkx}|9 z4vHvPhT$*S<4E~vUg&|i`?G6ImjFy8a-Po4haIr=QdmfEKqlPbIJ!ZCax_+EWAsnl z1Nj1vc0~2aUKn)bmCX{@6Z$@#1n|!QPvOh9H zy(21mRSH~~S%4`!>*Tve^qAJ}fX8;j%F+_VC|h&$s>+(0N$D699Yw|N4k#)ZgWtag z&oDI{7*6&!Hd|F7vwVhx#2Ps0*;0Baq+-4fE<4_WQLZpUA6xA2{jAJPB~XQzRNlN< zN&-3=_%h*59iz-Qj9ABqxcRnlLuIp25HP{*)I{il@7n}y0i>W^1Oim6{`>dubg(I| zK>d;jgZC*ydO;0J8k+A>QBfgjX^bEgfSKFF3QC^sowc<@SmIpwtAS`*a^rJ$R#O`s zfPNjwsi!d4@P%pr`<(1-Uq0|49Y@G!SzcdV_T2zFA*fnm)Et-qFZ56XXJ@QhuJaTS zGYuXmDefVRc$2;&Y=NX*3s#HeX&5Cm&VsM^3j71I)q1m3^z=UBtg#vJGJ_(M-y~_^ z{J$YgsCVJ;g--PoIb(Exib#GQeTI^`gGn+sZl0*gl{pbjg6+3TqP# zQv%>%A_b8{+}?io3X)R*54ZzY8m*;!G2*hc6HJ8UylPGWmZ zh1NDUtnMlda#Dn+fHN4};^J^7Xt0wn&7?5uRaFawmX9VJz1Svk2U@o;7qxonI+={9u&OWpwyXknH&^uYdp|B4EJm<)yr zIR5#i7t+e}Ei0=vuW$*bJQQ%d8e!1DfRBeK1+ywpfKt8D5IlCXbz>{N$n!vOfI_b! z!5-IQS}Kt66^ zAp2Z8wbcoTmRb+t*%>%cUJ5f5l8DPlNxhp~cUA*1k{uYNAHmY{gB=ji{=eq#e^3Jx zDs=jyr9GvPjV#i8bMx{M7&&31qk_c`pmy;33PUO(SL^Z#Yv0ASfvie;5zpbRC0NQ9 z5HUE1P?w#Hv-4Vbc=$`0n4JhbdgPR^!OoJv@yap$*|)Q3CT!3Wel0h~o5PL(uT%iv z!9QSZ9k9cV8HB}|`W#dhR>*_=tn)Zvz$o&9Kw}3`ShgS2d^{c<9W}U92i+^Qahc*~ z!Um22*iGHJxVT7`l9HMu1kGkOh0G0Xh*!sG99$?hI7GjY|e21{1^z{=$bV?OAsY_VV)5 znu93Q69Kx&3wXQ6&HRV@5Xvv;)Iqt1xHo)?$5u5r!#YzyXuX4S(-SW0LtvdgKmvU+ z1FUzY$6Gr*v?3FOSfuF?o&-3pUA}&;W+}{$ z`T)gx$Ny3@&qZHax-AHHKO5LaD?RJ4bb}-pme$v)Gga7(!Tby8;gO$hZNp%M;)4$E zEHo4ws)%uGeogISSU(qrBs%p_W&&3gZuCn!!klM!qK)8|f~p0>bbJ_N%QFYg*ml6) zT8$PAAlv;aIzSV zr1{8t0baZ=ZRmM>Zm2L2?}k1f9aRE)o}2jc1Zn`hg8~mGPw*f5`uZ^CgHQ9L$r#$H zYMRcz9gqF(Nj+wTKxPG4neYqNIpoB+sfZ~kf&qO1#{4D#aKJDVBA-bB`7Q&Dby0a~ zsgpJ;koW;O22sWBS|9|CdAYlT_f`!zsHMhrOUHV;>K0@_fEW!BxW5xM515GFX7K!P zX~?KI8=#=jG{3nu@Ff`zODiadT<7Ll;o$hue{)UXD~RI%`~Cm-5BPt-|1I`KBMKsY XTriCCtwuAvf(xM_qa(.*?)', re.DOTALL); +contentre = re.compile('
(.*?)