From 41a199717d1883ff239c7f334e96f81799740dd7 Mon Sep 17 00:00:00 2001 From: manetta Date: Wed, 11 Sep 2019 19:44:37 +0200 Subject: [PATCH] renaming all files to etherpump + adding a etherpump readme --- .gitignore | 2 +- README.md | 143 +++++--- bin/{etherdump => etherpump} | 6 +- etherpump.egg-info/PKG-INFO | 10 + etherpump.egg-info/SOURCES.txt | 35 ++ etherpump.egg-info/dependency_links.txt | 1 + etherpump.egg-info/requires.txt | 2 + etherpump.egg-info/top_level.txt | 1 + etherpump.png | Bin 0 -> 66756 bytes {etherdump => etherpump}/__init__.py | 0 {etherdump => etherpump}/commands/__init__.py | 0 .../commands/appendmeta.py | 0 {etherdump => etherpump}/commands/common.py | 0 .../commands/creatediffhtml.py | 2 +- .../commands/deletepad.py | 2 +- {etherdump => etherpump}/commands/dumpcsv.py | 2 +- {etherdump => etherpump}/commands/gethtml.py | 2 +- {etherdump => etherpump}/commands/gettext.py | 2 +- .../commands/html5tidy.py | 0 {etherdump => etherpump}/commands/index.py | 10 +- {etherdump => etherpump}/commands/init.py | 4 +- {etherdump => etherpump}/commands/join.py | 0 {etherdump => etherpump}/commands/list.py | 4 +- .../commands/listauthors.py | 2 +- etherpump/commands/publication.py | 324 ++++++++++++++++++ {etherdump => etherpump}/commands/pull.py | 6 +- .../commands/revisionscount.py | 2 +- {etherdump => etherpump}/commands/sethtml.py | 2 +- {etherdump => etherpump}/commands/settext.py | 2 +- {etherdump => etherpump}/commands/showmeta.py | 0 {etherdump => etherpump}/commands/status.py | 2 +- .../data/templates/index.html | 0 .../data/templates/pad.html | 0 .../data/templates/pad_colors.html | 2 +- .../data/templates/pad_index.html | 0 etherpump/data/templates/publication.html | 42 +++ .../data/templates/rss.xml | 0 setup.py | 22 +- 38 files changed, 556 insertions(+), 78 deletions(-) rename bin/{etherdump => etherpump} (87%) create mode 100644 etherpump.egg-info/PKG-INFO create mode 100644 etherpump.egg-info/SOURCES.txt create mode 100644 etherpump.egg-info/dependency_links.txt create mode 100644 etherpump.egg-info/requires.txt create mode 100644 etherpump.egg-info/top_level.txt create mode 100644 etherpump.png rename {etherdump => etherpump}/__init__.py (100%) rename {etherdump => etherpump}/commands/__init__.py (100%) rename {etherdump => etherpump}/commands/appendmeta.py (100%) rename {etherdump => etherpump}/commands/common.py (100%) rename {etherdump => etherpump}/commands/creatediffhtml.py (94%) rename {etherdump => etherpump}/commands/deletepad.py (94%) rename {etherdump => etherpump}/commands/dumpcsv.py (97%) rename {etherdump => etherpump}/commands/gethtml.py (95%) rename {etherdump => etherpump}/commands/gettext.py (96%) rename {etherdump => etherpump}/commands/html5tidy.py (100%) rename {etherdump => etherpump}/commands/index.py (97%) rename {etherdump => etherpump}/commands/init.py (97%) rename {etherdump => etherpump}/commands/join.py (100%) rename {etherdump => etherpump}/commands/list.py (92%) rename {etherdump => etherpump}/commands/listauthors.py (94%) create mode 100644 etherpump/commands/publication.py rename {etherdump => etherpump}/commands/pull.py (98%) rename {etherdump => etherpump}/commands/revisionscount.py (93%) rename {etherdump => etherpump}/commands/sethtml.py (97%) rename {etherdump => etherpump}/commands/settext.py (97%) rename {etherdump => etherpump}/commands/showmeta.py (100%) rename {etherdump => etherpump}/commands/status.py (98%) rename {etherdump => etherpump}/data/templates/index.html (100%) rename {etherdump => etherpump}/data/templates/pad.html (100%) rename {etherdump => etherpump}/data/templates/pad_colors.html (88%) rename {etherdump => etherpump}/data/templates/pad_index.html (100%) create mode 100644 etherpump/data/templates/publication.html rename {etherdump => etherpump}/data/templates/rss.xml (100%) diff --git a/.gitignore b/.gitignore index 4b37ad7..7410b00 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ build/ venv/ testing/ padinfo.json -.etherdump +.etherpump diff --git a/README.md b/README.md index 6480885..a995289 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,119 @@ -etherdump +etherpump ========= -Tool to publish [etherpad](http://etherpad.org/) pages to files. +![etherpump - pumping text from the etherpad into publications](etherpump.png) +A command-line utility that extends the multi writing and publishing functionalities of the [etherpad](http://etherpad.org/) by exporting the pads in multiple formats. + +Many pads, many networks +------------------------ + +*Etherpump* is a fork of [*etherdump*](https://gitlab.constantvzw.org/aa/etherdump) a command line tool written by [Michael Murtaugh](http://automatist.org/) that converts etherpad pages to files. This fork is made out of curiosities in the tool, a wish to study it and shared sparks of enthusiasm to use it in different situations within Varia. + +Etherpump is a stretched version of etherdump. It introduces features to the initial tool that diffuse actions of *dumping* into *pumping*. Instead of dumping all pads by default, etherpump will be the place for us to write tools, that allow one to use etherpads to edit and curate content for publishing. + +Added features are: + +* opt-in publishing with the `__PUBLISH__` magic word +* the `publication` command, that listens to custom magic words such as `__RELEARN__` + +Etherdump is a tool that is used from the command line. It dumps all pads of one etherpad installation to a folder, saving them as different text files, such as plain text and HTML. It also creates an index file, that allows one to easily navigate through the list of pads. Etherdump follows a document-driven idea of publishing, which means that it converts pads as database entries into pads as files. This seems to be a redundant act of copying, but is actually an important in-between step that allows for many different publishing projects and experiments. + +We started to get to know etherdump through various editions of Relearn and/or the worksessions organized by Constant. Collaborative writing on an etherpad has been an important ingredient for these situations. The habit of using pads branched into the day-to-day practice of Varia, where we use etherpads for all sorts of things, ranging from organising remote-meetings with 10+ people, to writing and designing PDF documents collaboratively. + +After installing etherdump on the Varia server, we collectively decided to not want to publish pads by default. Discussions in the group around the use of etherpads, privacy and ideas of what publishing means, led to a need to have etherdump only start the indexing work after it recognizes a `__PUBLISH__` marker on a pad. We decided to work on a `__PUBLISH__ vs. __NOPUBLISH__` branch of etherdump, which we now fork into **etherpump**. + + +Change log / notes +================== + +**September 2019** + +Forking *etherdump* into *etherpump*. (Work in progress!) + + + +----- + +**May - September 2019** + +Etherdump is used to produce the *Ruminating Relearn* section of the Network Of One's Own 2 (NOOO2) publication. + +A new command is added to make a web publication, based on the custom magic word `__RELEARN__`. + +----- + +**June 2019** + +Multiple conversations around etherdump emerged during Relearn Curved in Varia, Rotterdam. + +Including the idea of executable pads (*etherhooks*), custom magic words, a federated snippet protocol (*etherstekje*) and more. + + + +----- + +**April 2019** + +Installation of etherdump on the Varia server. + + + +----- + +**March 2019** + +The `__PUBLISH__ vs. __NOPUBLISH__` was added to the etherdump repository by *decentral1se*. + + + +----- + +Originally designed for use at: [Constant](http://etherdump.constantvzw.org/). + +More notes can be found in the [git repository of etherdump](https://gitlab.constantvzw.org/aa/etherdump). + + +Install etherpump +================= Requirements ------------- - * python3 - * html5lib - * requests (settext) - * python-dateutil, jinja2 (index subcommand) + +* python3 +* html5lib +* requests (settext) +* python-dateutil, jinja2 (used by the index subcommand) Installation ------------- - pip install python-dateutil jinja2 html5lib - python setup.py install + $ pip install python-dateutil jinja2 html5lib + $ python setup.py install Example --------------- - mkdir mydump - cd myddump - etherdump init -The program then interactively asks some questions: + $ mkdir mydump + $ cd myddump + $ etherdump init - Please type the URL of the etherpad: - http://automatist.local:9001/ - The APIKEY is the contents of the file APIKEY.txt in the etherpad folder - Please paste the APIKEY: - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +The program then interactively asks some questions: -The settings are placed in a file called .etherdump/settings.json and are used (by default) by future commands. +``` + Please type the URL of the etherpad: + + https://pad.vvvvvvaria.org/ + The APIKEY is the contents of the file APIKEY.txt in the etherpad folder + + Please paste the APIKEY: + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` +The settings are placed in a file called .etherdump/settings.json and are used (by default) by future commands. -subcommands +Subcommands ---------- * init @@ -49,32 +127,17 @@ subcommands * revisionscount * index * deletepad +* publication (*etherpump*) To get help on a subcommand: - etherdump revisionscount --help - - -Change log / notes -======================= - -Originally designed for use at: [constant](http://etherdump.constantvzw.org/). - + etherdump revisionscount --help -17 Oct 2016 ------------------------------------------------ -Preparations for [Machine Research](https://machineresearch.wordpress.com/) [2](http://constantvzw.org/site/Machine-Research,2646.html) +License +======= -6 Oct 2017 ----------------------- -Feature request from PW: When deleting a previously public document, generate a page / pages with an explanation (along the lines of "This document was previously public but has been marked .... maybe give links to search"). +GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 -3 Nov 2017 ---------------- -machineresearch seems to be __NOPUBLISH__ but still exists (also in recentchanges) - -Jan 2018 -------------- -Updated files to work with python3 (probably this has broken python2). +See License.txt diff --git a/bin/etherdump b/bin/etherpump similarity index 87% rename from bin/etherdump rename to bin/etherpump index 9bdefee..aee8c00 100755 --- a/bin/etherdump +++ b/bin/etherpump @@ -4,7 +4,7 @@ from __future__ import print_function import sys usage = """Usage: - etherdump CMD + etherpump CMD where CMD could be: pull @@ -20,7 +20,7 @@ where CMD could be: html5tidy For more information on each command try: - etherdump CMD --help + etherpump CMD --help """ @@ -36,7 +36,7 @@ except IndexError: sys.exit(0) try: # http://stackoverflow.com/questions/301134/dynamic-module-import-in-python - cmdmod = __import__("etherdump.commands.%s" % cmd, fromlist=["etherdump.commands"]) + cmdmod = __import__("etherpump.commands.%s" % cmd, fromlist=["etherdump.commands"]) cmdmod.main(args) except ImportError as e: print ("Error performing command '{0}'\n(python said: {1})\n".format(cmd, e)) diff --git a/etherpump.egg-info/PKG-INFO b/etherpump.egg-info/PKG-INFO new file mode 100644 index 0000000..1091436 --- /dev/null +++ b/etherpump.egg-info/PKG-INFO @@ -0,0 +1,10 @@ +Metadata-Version: 1.0 +Name: etherpump +Version: 0.0.1 +Summary: Etherpump an etherpad publishing system +Home-page: https://git.vvvvvvaria.org/varia/etherpump +Author: Varia members +Author-email: info@varia.zone +License: LICENSE.txt +Description: UNKNOWN +Platform: UNKNOWN diff --git a/etherpump.egg-info/SOURCES.txt b/etherpump.egg-info/SOURCES.txt new file mode 100644 index 0000000..5bb57c3 --- /dev/null +++ b/etherpump.egg-info/SOURCES.txt @@ -0,0 +1,35 @@ +README.md +setup.py +bin/etherpump +etherpump/__init__.py +etherpump.egg-info/PKG-INFO +etherpump.egg-info/SOURCES.txt +etherpump.egg-info/dependency_links.txt +etherpump.egg-info/requires.txt +etherpump.egg-info/top_level.txt +etherpump/commands/__init__.py +etherpump/commands/appendmeta.py +etherpump/commands/common.py +etherpump/commands/creatediffhtml.py +etherpump/commands/deletepad.py +etherpump/commands/dumpcsv.py +etherpump/commands/gethtml.py +etherpump/commands/gettext.py +etherpump/commands/html5tidy.py +etherpump/commands/index.py +etherpump/commands/init.py +etherpump/commands/join.py +etherpump/commands/list.py +etherpump/commands/listauthors.py +etherpump/commands/publication.py +etherpump/commands/pull.py +etherpump/commands/revisionscount.py +etherpump/commands/sethtml.py +etherpump/commands/settext.py +etherpump/commands/showmeta.py +etherpump/commands/status.py +etherpump/data/templates/index.html +etherpump/data/templates/pad.html +etherpump/data/templates/pad_colors.html +etherpump/data/templates/pad_index.html +etherpump/data/templates/rss.xml \ No newline at end of file diff --git a/etherpump.egg-info/dependency_links.txt b/etherpump.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/etherpump.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/etherpump.egg-info/requires.txt b/etherpump.egg-info/requires.txt new file mode 100644 index 0000000..da75e56 --- /dev/null +++ b/etherpump.egg-info/requires.txt @@ -0,0 +1,2 @@ +html5lib +jinja2 diff --git a/etherpump.egg-info/top_level.txt b/etherpump.egg-info/top_level.txt new file mode 100644 index 0000000..a9e7107 --- /dev/null +++ b/etherpump.egg-info/top_level.txt @@ -0,0 +1 @@ +etherpump diff --git a/etherpump.png b/etherpump.png new file mode 100644 index 0000000000000000000000000000000000000000..154eca9542d5ccd47ea29f7d1695796fefa9fc30 GIT binary patch literal 66756 zcmV)QK(xP!P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>vawR)*rT=3US^{P`mIF8dv)(~3U*8Gx4OOL5 zTg#NJmtZ`;%iV zzpwto>%qqFkD2d!%g@_lzdzs8;`R2|2S)vUegEU@VfgQv?Ds&wztE}mr|8W3`S*SH zd!UkkUQfUO4)gbOtN!hFe*eq!1Ez2f;Xv81O9_vBn+%{LFe=j^$BuUQ#+X8)2>^_5;8B;$l)F>C3cGWXwSE&XOq8LQv> z#$Q?Ezs*}{_5Ukx`QK$OD0TlEnF~tYZ|43rZ~sNs&iWXodiYRn5VN zOlNq%ejC3|Z4kD$N4(rhyfj|kx! zbGJi`7c55Ta+}T(2N!rejzT3qYvZQ*EX>Q@*1g7EWxVKQrk_4C_fXvr*H9*)24Ste zYn{_KHP9}H9OW#F<;;7Fhmux(X0IN*{z%wdZ=F~QH}ZCM>us*$o9LZ6cfK)sd^fw8 z6+G|;(h@sj1d?(kzR7(&C7*Ur?#Y+iE@h5POo-+_w(g15a)r2x5z6Fq-MMQgqdn|( z3V==SO1cy_2NdGKYpGSf@nWxUQ zrAT@DOm#W!bs(s*TT7=ko3VKc#A}cAyv>{Uot*B`O>qOPvwL|QlD6PdI3sU7n{&oN z@g8ntJ&JElr{DtJTuZ;kJ4i>a%|T-GLCVN00XZFZdlPP4dH2%VNnB~lW9P2`t7?W@ zTZ0dce)sDzc&9^aPQCi#M0paL4e+PUjqmBti6u#{E!8HG_1E|C{m@3f6#Cc;9#30I z>`=KXXxYr9u}LZHGCScZkN20HKoNvQgNMt^q0b}r*1n_vkH4oItUPeE`GNcC#Mbz^ zkuh#*T7D8375$*J#&-OYG;VWt64k1w{*`9-ON+chI?le^@421!;SjVBXi2$u7X&ug z(*;|oz_;ft;6NE4hORfu-Svf9Pv_&v;S3Pva{(wC?gAfxBsV{dHf>vK(g+cM3wI|J z!#e<{x9SA4z-&7=10mGmB)y;f^io8~Cs87!SHcU^_IqgJt-jfI(x%jlTTZ99wk^=# zC@av5LOurX`_T2qxAQZ=c(gSrGE0RjYc8!@_qDhQQF%rDoNOa9xk@~^;w|r!$TqcKl@~yYNM^dQHf{m@ z4tqa7MgkVt(Fc9%^-0=o-eF+(u4huK0B@!}2(qAL+(#$ns#YP=w|g*8kKT+*dly;M zq;eX5w!eH+x;0aCsQ|!44>~4J@D=DbglQaYbA%RZAGf9U2=Fti8xpd%NUSS26g78E z|B}@Kw3UG+5)Q1VW{rJpkQyY}VIaZVp{`(Me&#-|8g0CpASLXXAQ2#$hpLACOyT3? z*E)<0?^6?FM+@+5zsg}Hhn_(t@mse_(M>{^=c(hmQrx>OIu~~3-f#fBpGtr7bKe<) ze9d0FmqP>piFk7V0B8pS{P2-9Q7gn0pHsTg^*IsKdvlFlvZ|#CUj>p52~!L}bsqIX zGu+&6%3LAEt<}P1?lfQyx)2aENEk>3&v4Q(OuNRd#X+qk7#=QhKmx*m4*yhccmS@OR;yU0BejmIQ_*ZWR8+XB+2a#- z*fm;rXMb`Go5s~--5WJ1Z+QkW#NQIxFv9V;wq2ho29=;!tM>oy| zz_*(XZUos6$OV9*r4&#q8>hE3D(&7HFYQ2L{s!FP-ywQ4qgAPG@E8`R&Pak}V53z# zT9M{xG!5jqVet_nz<>%PZ5ZfBgWhNoNBMy&N>K68mk)M78i;eBSS~j?28WO z3NgnZq!Ivh^IQ9v4Geji=0d1~!9)^42xbCH6Hv>g1A=!WGM6lF#qnAUNYeF&gZf}h z8fayESHkC<0t2Fh@8hCSG6pfB>CDbME>SO#)=>bmcLUAaUp$*KZZ`qyJ)yR^;Yjb$ zTOdpBqSaiNz?qgcp>a8ClniJ?y;$ggaw!W%g3pey5SK!a&V^d!5Vq(L0D~l%q(%Y| zK|(HNYXs0l3k|4S!-8#85&UuD8pwv4ZCo%DprZ<)SvoJf5#32u!hGO$T$h5t`P-B; z$P-BdjBq7bH@F2WQs@1X=z9=VRF<91)uLo`6FI~Y7PvX zQO#uKlC}x20;6}H(a$7N8TWv;N6ekF8X6H~5LxE+Q)TccEwZ+EYz`;oU>jF)z&=om zJBy==0f*use(G2)BoaVa00MuP7XUJcvF;0_d+%f`b4Lg}EEpY5iBM##Z%hCcof@VG zD5Ka(E;*&25aWoJ`k=xmUJhVOBLqE@uS^ME83t&^;-~O&3xM!UXHlKU2K5Meqh2>o z?a?R$ZleG^XzWH>2f9=+W7z z3rhy1L zhra5Aw#;A_ac;J;h;Tn88@5OTg5g_}ZTR{|<1v$lW$r0>`wK7at60t{#g%28GI(4*9!%Q2?50`*Hv;~^ne zT+4wZBx|`cUM~@K8E2x^UZR&lLu}KYpvY+W#n#s0;-xDCX&_H@)XGH5HN+r-E{?+3 zQ}pV|CRd4<0DC+1RAEZaO#zI`wNW%!PPjHufS*pDBKUa_m`K}*Lq>gq zb!ZfPA_u#&^ph6BT6O2&boa)Y156j|dcwzh4;Xfh3OFoA9&5b8*tI(5H+x&ei{J`) z(7-^y2?o1-KeC$M0rCU31HVjofoS-AZhD?`fJ@kM?hFJe;AG-bGg6X6<0}%vl5%+P zZ;3ML$-_ZnWVi*D0*GOMi4wl7z}lcYtqTv~&ex|Ku8c7lPg8-0gZ}FP!RH*qzY2(! zD;ca8u^X2rJ75zS*}jni;7b{EXq+^7j3;r>rPUGsehjP}^(y`bF%17sU68{KwLDqC zPIn65wnn6c_Gp9+6p90bL&kZ^P|~OLOM*qFm&=XP-W6=-`tMc-j|*~cy|U_aR-^#x z9kkq(PS{x!7^soFLKEnH`Z~pHTprRLId>p`ngO)w3 z6X<>4x(w11RRkswB~SwVxZI~G4qFKC09M3W{YCUpchgV{H3c*#3CE$BZmeE1@ieW& zDpz#&Mc8giW^0sn5LRX1L!j5u)ap`ig)~F>; zfsRi%A+SLN14(utxOlpj7*MwKB8t%vqo|^9u7(iGO9F#TY%Rncsu(^nv=rza@g_xT zhJtn3vMP+|zTpLHFM!MOsFt`IKQIxL4szdbZOMfZ2ug~84C5%V{xUy`5vd(SUoH}E zt04o1FEua$akwP%u_fTXx1G2i)Ekx@^I%|nNu4W&81Xxl^%buG22lJvVT#xhrj!9{ z=#ZKOA7J1sjD)GC$vOZ4b(%pV7_19Z6?u)P_Pwq0rbSyYpyl*~+!*qG*H9Q2g+y>7ZIt_jRkAmA*O;pevk%ui9FR%;h?o9v;@Xon2F36 z7$k99ox%w~*A;5YYRgI=C%jj&74Q!B(h9N?&6K*l5i04NYxxCc-n-{B?Ley*nJ&~Akb2MJt5akM>mTr=UwQFAvb zZi=K~1vn*q`AwlU!5O|d&_YX=QU?|kngGfYII<)BTQ#Z4nt>tTaK>E=7X=D>>ZYSf z=SX~k90$QZgxPOr+Y9=iEyl^UEz-i;iZrfo~p zxI!f%eWnDRIF}m$El|G-D+Et7$}ULM#CFL8?Mt$8#I*NC)`&fj;))Ge2sKa^F4w~~ zA&s9_Kwi&OjT?+j(DD9HqL#)7a^*T{T6`lVF`z`PtKrpE7<(Q$MVJTCv8#jfQ>_S4 zIq1m2p$6#2=~iw*NeNH@kPZ`faQ)gN5Arw;#trPNwJ_ zq-g=*@0A-u{0n@MLEr2!JCSxhfknt4Yf4gg80hc=278~AD|Wu{~ap< zC~bjDCb-;2fg$m{^=PRK8bEJI{m@vrU+p%TuIVw6NRM9&Z2G$?AFc_?t%}nC`g2D5 z5h$!W>Iaq7r<`ocawA6TJ4jVGroM)M0DbCu>SZxx)H|^Y;PPVy-K3hJ+h1 z5DbUMT~m5OS7G*mB&jhsI*OV<9knquavZXvu&?Ijh%bN#<`$rGr&SBSKs`1HrAxku zN_G^P5TG?&ln*Uk0nFwi(S+p{PC`Av-TTG}*tpZf!mJn$;oxjGjUJJS#=FS)(0bCv zvtw{B7906ML13EEr{MV68i!yN9*FURMuGVoq^j0{p>Hb_zAk-hW032dNM?lhK?a|t zR9Bny21w#{6_sG?DTu9s5V2qqM-XVr5CH}F4OD67rlgAS$R8q1EprhB^cExv-!4fh zm=^o3H4Id216z|RIeiu3k|zja!J|F9RWdhQ#sIo?GJCNu}y z1tTt2)r!wRvyncCa6!%W-~nJ@U?r1t3uq4w7wL47LCh2mqPS|&(C#-!1TRs8r3<<_ zKadL#kzV}ix5zC6omJqBB-f}s z^GyYd1vw{p(NGQZL55&CBH-{T3RiL*MY6;c^w+i zP=EMxfag)I8q;QZRO4Toz#P=XQ0~BQ=`_4l$n}QWt{DSQwh7nC4m?YT8~DgWpPQ;kDLxz!AfcS4IYA@hWT>Z_sC};e+Ql z6CcQ%#0hcBg_>O2?~%>E3%UW(O>K3p0pZn~MmO5shxmCL3siBW158I0fhGC4CL|m2 zh>+&amTUbQCQSi{gbz$#pP^(q6Ui#Foe5zc&xu;dLEK^Gka37*%xKEmNdN&GCX*Hb zO#}S5w6uy^hozo|R<^amoMc`Bb}m&DLag4xd#0@g7Hvzwc5n!6St9YR2kmzOp9VB^ zrPOd=ReO*YGK@Hq9c1y~`jGBVt51M}Nn7WKZ#Uo$wR$3|me3`QkimmN=|)VjUzm*G zz#gLEjhTa0`SDN}piBZ&DBJsOi9lPD@=dTSVh=foslvc(3js8s={07f|f;wmY^kM^lz7UX!u;bpUb;CJ!M@BSDgm`c2m$0(w^u)wHKa( zrd&u(+03Xp6bl`j-k0yYm6kXqAb0J?OFrP6F@iA8N$Mpg25?g0$@ zrs8}6MGj`{7M0ZigMs1)^>*ZRw1WJ;9W6*KZ6`Wc>5eGJ+>*cr;Tq44+AT@<=M95n zUT;W%|EblF{7#BeWDAEti=&IW2JyU`Ye;C39M{h}zm`W3{YC3*s#`p1pkD{U(S_o=Q3X=u{a^qgKTk>cJ zLY3x*-O%rqcFp()>s0QQG>OSOg``;`aSj;X_U-VY;lNHRfTL+HG+BiZ})(R z9SYXBgYtd?xM@|N>!4*3Wewe^O-mJy(h!jQp;ow1ieytb7%58mgfuFy>!7@MqcW;( zpZY-qQ4|Ch15BHCqQEs5x9Qq&m}%%GRiX_(;IZ$ZVHy?!!C1CNPSg?ZA!@TKtOYCc zZo)H{wuABlk?LAAOsd|founG)y%`b=4D;O#nG=fQF>W#3Xl!Uq&=~W@S zqG`PferYcUdcB;>n?J>dzv`&?it6hN%~DZfbP<<_*xOSwpi3JfQiwgG4*~-AdX%XG z+eK$VYXM&tBr&*$wka~|-a3Z;;V7W(4slYV+!_V1)i<;ubs@6AMB-X8QGsBBL^1B1 zzGDs*<+n*t8~vmp!6%0d(6e0Z!lv-EH$XchTdHdaKp?^{Q`Ys{mAqEg&f;&dHZ;2J zYth_SL}C~w>QOT*L@^}@W+X{(NRu$%Fu{?QwAa@aGYk%Oj8AED{pd1`;2r35Djdz) zKL?;a%nLn70Z}i>F48(+56J2g&vuTP`PkS>NCHKu3fz>epL(w&s60KN3UgAq z1%BY|_;1$`I%&SZeXWLYTeRoT^nikWs7S;*d_K83?8X2&R`7-aC>Qjq1)O+j4di;# zFsGq%v^NTBTiQ5)+ryw?M8Tk}S?(!Ll>n=Hrl!;8`P-VW#qzP1)?YvTlYBrlX$KjH zLkso!uvvIjP*r=&V5Gft^X1#6;YTw|NK+FA?SRy37l(Mtr8f~5{u;d0s{dB#3ARiQ z+1Cm|)aqxhfsf2gm1*mn9sv;=RxOyOjdfh&aYQXtdAK3;)BUKuCGEQUSq27Uv7wU3 zji|(*Ju$dsNI=^k+o>6NZy+p2LTh)Jca3@sLWcwN3FH%Mpj_h;10eY7MO}UhLmPhZ z>ss>CUIT53-(0d)YQAX+o8zqyNnioY&O$GcyW1>S9NQK+sAWBEh@lh_XaI<7U{Eye z?H7F3mYvZwQu4D3k)UX_CW52K;MUM}KSxV`fbT%nARs9ZY|1Lyzh3r~X9VU3)O^1Y z8gFX`LL->DP1$vBjiVRsa#>oQZ`zqszjgY)xjd-VzgZftOdEC*S;@Wb)`+5(N4cZH?;kB2oJoV*$n%B}TVAq|RaZlrC$LqlN_ezQcuv(0UTCg`zp=JnrVk?3Dhn9c| z^$`er%9sI;8ulT%a+IxnJ2aI$cU>rMAt`;0G6j#g0nEK2rg?*6Xy_j8G&)?3hSXAc z2j7KE2TnuQ{tJo_Z(`p$HCVt?EzK{!{Unr*YmG*a38c?=K>Re{fC$T{EiS^CV7u1( z@MHP2AL{{)t{EgwA!)v{&G*DI7MYWRjFPLVb?oEw@NHG~(P zZ;EZFHVy$!-`*wvcCrs``v*R7?L_l@lL7i72N!X7PFuAR7D&MxH)=-@i{#GL@=1*( za&KCCrT}nw$TzeP?icajU!-X}yoS5fn)AvUOoOa=Nr8$iZHiiX5#g9Nw4%hiW?{=T z$k7vp;NhuS(@p{Vgim|#5p4!#sDI%mjC`B8&C|7Miq%XACsQu7W`>ld#T(Dpo z=~NXM09NG5@Jfga4DIXEb0tf@l9ofv5llB~%=Ny9IO|*ig(0q~db)&ad72LaR~fj^ zsK&*Kp+qxuoaQ!QY}aw9MjGts!4&)UbcTajixO-TG%PX}CzEo{f{e%*3B)MGw!e`H zz!~BG?@5`Xxe=1c5%3xjsiE{(+>Fi=msq)q{A3&Q%gIh>(= zO_1Hzpn>jJnFHd*IJRZpcTzfDeh>`eQjv_hm2iGPpa(Qx9xO|rGX{4MsT+ci@&a03|*U1$;uFKSV? zYUw*jYE~q!$ejAchkiYvt+SSuAB63Hi|;)({?=p8&s)RvI}HBd6V8Z@0kQTkm-bB&+$@av3V zqWwG|OHvWJN1H{o=8Z`DrWH0(1*pD)$?%(=o~PBG92zo0xHw$R^I%C0q@+!Wk43HT z%3xwSfgi1k;~$O60NnY!HdzEzBJ6-WNhfNLdD9{mT_g&W04t5y7j3%!#;qBRd^Lu9 zAR)RFEal>#pKzP6ZxDg_;#k_ati_s3OO>y-c9xSxQpuPeX;7^KH)|PZ0CXIz0`Cd5 zDuwZhlsdF%hlq|pTjaiV&VTzodlPwr&Z$6$K_8w#j|n->4uEgb zM(Mzr_BBn2j%m*gKC-PLf^+Q$ZF($bl2+|@z1A#Gr?ge-K$uo4^Z@<0c@XUC zgna1n8$HnlXmUmOf8#mGsAp>aA8*vY+f%k{VdFk+i_;1};=;5d3k70nsD^+^E#H72 zAk`>b&kUj_*7tw%fa(bU3F(WtS&%h%|;#?{y4^=NNB8m+R-+%gMgx>FITFX!`l`;_mw{FEX{V zs^8nsN=;Mq@Z{Xz-thA9gM@{>zP&?0KYe_92;~!h00001bW%=J06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmYE+YT{E+YYWr9XB6000McNliru;|U89BQu(a`OE+SAOJ~3 zK~#9!?0t)3t2nZ4OG1D#GQqOJiX)`||H@l03DP}t&fGck*bmg*yA#KGY=@$1Rjpd< zk3asI^ZEJ5dCqg5zaJszOK_g^oaa2}`KON=&G{mn=RAM=bRp+_z6|F%&;M`+gJ(Ej zh!f47=iBMc(2qgYvxG1W&+~OT29U>(`e2xIRoUkKhFhX!YbW7 zm$_-iv^Gt+es-Rt29n7cBp~AwKlGX>O{8w;FhBS>7Aun8lol=l45myQ>!@ibs=1jFAQYSntj4_KAocW2D96Yh~DeJzuc% z{9dJ&THyK*7zt2h-5Lmsg#rbuEi*UQ>DD~%7%8O-oW|`ex6bpsoK8Xhi0al{k^%gI z`NJCsl#iwf@BqN}0Uz?urb%j9lr2$mIbXZ;{0657j1C1B;Ewoeo?X}U9VU~35ec1) z>E#YjaSD>nxHgMwF-S(Uov+_{e(@9G>c_N!ID;UE^6|sdMguJI z_O+=zjF$^WkTzxJe)1g8^9!D&o~a)ZZLI368SH#R_%UHvte!DQM}?Np)B}D_@bP|a zAS{+X_ZTFN@p_>k(dJvZbq-F>^V1)tzLr~t0O@X6L}4Oc8HYMmja+35Td}lpGpA`Nt`?2ljbHMdZA}(yljnmSMMbL{!WbhWlDo$mD>P|pE|(isUgr9f%QP2?5lSLX-M_xz|CjCs(Bl)TFNhqB3IHuH2o1|= zrPOeY~0pBL#c9Bh*+1 z=j@LcLKOHUiXo4?B52shjV{_h%-`Vu4%HCHndI^U4&NYS&Zoj2%^%@2!j{l+!DdP7HFMpZ#n~IrR=|nr_Us8sj!?m;$iTy8_Pc zpWXV@{gScJ3hL`Nz9nCDxIJ~*Ferxhqq&R)l4z*A-l|I~o-goues+wm-tQ)dMJ+~i z`zefxm!v2wtUCGUI5!EEPi~k%@~bgSD*3?9Z~JN{>S0Y#ti36bIM+Z{8j^D73w)lR zJwTSoGw^#>L>p-~NF#l?QK7X+*Xo+yH|%hkhKeYNgRfpjs3n7OVwn;+Bax;xeQJs9=^ZevzR94S#T$&{ia(6~Cd3W`LuyeQUmAY-| z_SDa>$!UxxtjwC`3)iPY;NW`5Tx3lj7)(7xmYV;WAL%4Gp6ACoN$F&;Cc?E@n)E?o zWkxf=V}rkq%Z5Yp5U<$8ni@dsLtHerxVCNK@u30qF+CW1Tu3PB3&$nO2lY=a6rRgg z=lO9Clu%hOL=Wk*&_rgVp-$>GK=q56y_$L?R$-U-nwzfgpN?XwgKBFsJoSLuYh(@< zz!Cf+A%&36G01s-{s0M-K9;ekx~dI@b~3N7GrGC;cdVq0ffDSgRPMStPn%!kM4~{d z8MKjQT%NB(3PPR6Y0>8xsK378k<<+1wdp4c zfwb@(eZm;HlDIXE5tHg~vSiCV_id)NLP#f0t2E-y?Rn1glb2Y&nF~N)TNP+ca5Gn> zHce^_5eloD(a|*H!n8$r9|8fwxaiImWk1opAd+Kl~ZS|FM;n z78(wIc+MgpVOfl%g=Svod-m_F^z%ukQ#k9u{DHfKMo|-MHc^olJm8m(2aSt*G|A_b z&XwEq{CG9fpQi|KD4^2xchyBus(qyG@+<=oGp5uvmu5f97F825fN%#FbBI+DpU?Bf z*~M|eEkuZx$8A|Og84qVWY1s6d47UZTs^|y(wM%R5Rix!pBIl$q4cqJz0wz*FS2vq zzfIE-?S#a!XkCP*-W3H#b2nL!`9dV#*hJ;-5LM?K{X9RzffV8yUy#W3^i5>?IZY{r z)V97KZq4nr_1v0j9v^@&@QI`o3%7Zct{P#tjVFV)0-7S!S0Gnf9cu^@VEv1;g z=|caHWAsy?^gRF70BMGabgVir0=luk)b!FW5FplU&%WQ{6vvRlI7pxOZj9HEETEi% zp!k52>I-7!K|C$Q^*59U!mp{P7(-h0Oz|-!qg+&{-uroeg43Z2PrE3eBQDjx*T@pO z%Q*E&HAz9YNwq00LDL6X2#F<`l1rKijP)v~`1Ud35^v?-3;?{XXwh6qW zq0GX6^@-8X^D~@P5&0G|bPQq48?tWa%tmTyf$GXH(JQUPi1vj1)W-BCU7w`y(`zDF z%_t`aS>uJBU=%=sjI^%nCR@PAG*KUSGd^~A zEV$kdGe)~u4VSaCwxuTRwB%loBh*=DOX}5!pdfi%8^}J(*t`IF%(w`W)KxlNx9js6 zqz~X!zTsqLQqAQgnw;mSI1^Dwnn#1Gpo2D>-*~+N~AC0TN%d|QR77;sJLE+%P{rBWDJExoNrC{#v;lk?CoBg2l}bU z?pwF5-O%@!GBp1*5G4rS z7t9xu7JSI&cEiPxOHMc}Ntk3JR$?Q(0dW1R1V(=y7X?o-NOw=_3-=2DWdZU!e~IV$ z_Z@7z_Sd3-7{W46(#8GQw$6-^b$8)iH?PiFge9qMQ__IjlU|ll;zc{-aCSc9Jl&;B z^B5ufK=_z|LDgEV^SU;GJ`DW#FVuEF1LQpazH?EjF-uw&xZa7B+s$jVL5~y1#pCf_ zP2W2c-J6ri=GbqrZCm(HrFMzNP_DRLOd4<`h?Bx)0=V87a{~n9*Y}~$QqKmH%_aQ9 z?$Bp7cAo#x`JDgK#1h}9`-+l?&z|Gr>t(#wV;uV;BkDG1O!wrX>toH@VzmWA9@^y1OxwX{0k+r=nS`KxQ=Q{&8WUqye~9u>CbuLd48btXR@MJk7is#=&{UF z`o2KvG@96RmDK?>Nnz|)Lw&8+{k_IK3O4yL-ZDWYK?Z`d%R-g)zMu!y3p0t^8qK=b z*PH2aUO1{{P#Yk0O{^`bz%)k*b}{BQ>c;E&a;PV3iI`O0J;AukxtCZFr- z{1{^#IGc26sEtFYmX|;wpNeO2j;r2+Z6yyVHxpPUTy@65-^GVeVQz zyIfn^!KaYid49M6Vaim|%e|^p&_}Zw;|-KmjNm`!)wpRI`=PwQt!CI5s5nh6uFygr z0W7WqN-m=QdlPlzO%t{QJsv77N-bZ{1}eIq2*F=50gyje4A1l9HL*HsLyhCqVEJ=5 zCL^SnhD~}|?{0o~W@F32<~18VLD&owRgW2f3BZ;o`48%L0UQDq+GgUVdFW;6$7UUy zY?|rPTn1EN97ly}*6?q?z_WFpKbiqz5^WVucGh`*v_tA|kQ+3Bf%~L7kqB)*yDdkb z%{0g?N!qtv)Q7l&m^bz9JT{N@HezR`cBY0V#~l^WEI~ zPO7ju`)DTi=X`W-%DSg0xv!?XTrZc7C|vNR^peayhM=@IqfP-Zy7sPj+zq~s*XwEN zd7dBd+-IB|e!8@nE_zgnBPo&&uIe@=NdO@mET^8`0DvTKNGo}~xA!)@-)zxo{5VeB z*!qOG;pseAgj@oV)UAANDU3P}>$<&(D0yP^^Zc+Us5DI`ERr;`6k3bc?GlK$3uqqDcBP<96NCe` zw(hfwPKGAf{+&i52Y+q=-p6Su8oo&DMQ2;6+5+yZuXbJ6S-{QZ(kv$gInR%Kczl7R zDy(!gsgyJy7$QLf)Yh0uTH7Kp37H9uk2wN}Fa+d3UoUuT8ZNxst|2oBOC@HXjV#|j zuMiU+B97%65zmZ?DUSa6&p?pVo$WmTDJ)`8p8*1(CAtU7@kUl+NX9tZLV&dR@gO4( zJ&FS9nq4%8Ap3hWF^`crS~GkWz;TLm{^UVKGZE;WMxI>o;0t{8CkzVz#e;MYh`K)7xC+_mC(-;M>U?mf%E)y zCo06#Z`?%3rE-gZTB|8O=s!RuEnVWeT=gH_u#S;uhs}F+Le_$WVZAZj1zK5N$;M;RToj63c}n#@u@jn2+c~ zGLlu?1i7T>MNqvJ0KA;9_<4S=vo5r@{svTz(E$L20t7XC+n@tx6?lt2!VRu6EcsZY zff(Qrcp-RaiEQJiERVw5A&gOA%<6C?8K7P}U-k3+M8{B_g?=9k6j<6)&sSND5D1Ti zusuIP#X z7^|bJaflYoEJ){?%IM>3Ubm>3&(cDd7%rBL3~_INgvrK zh?yG`9T&xE@8LW@>;Viy^1E=cw%EV2JUWCbO9zRU)@Lnq_LcxV@lh@%dgMmuwxvln2T`^g?=c0lQihF)PwpBB7Fw>a8@H>-noV&yRTkil7Z4 zav591Aqf))fDa8P`-tPij6tCaglBxxIvSx+N0^u?JGJ-oJ#Wr!+}C=cFOPh1iyqmK z7eXQc*tte~2orc3&nP+1k9Zt&7!4}&QqsUg0>P0qU~W&jgR%ug5B0TltFSAqgu$ig z4-67l#)-}4-F5Q@c%6Xx=j=z5Gs~JnXp};1&7ln}ti2MqCFqmDb)FyZ++Bqtm^*kP z5)w^9w1fHziY!hRm`H-gkceI~38R$OitP@w;wppBX$g^;jhIQSJoj_Y z^WQvKksP&CB^xC4(LsPtqY(;_R>p<$rW|@lK1=?G6vss+4N2jNR*A!gidv6314gHu z@mMwF4Bmss(rc7;_q;%n#v{lr2M!X5E3Aq>&fn2_{;O!6p-7_-^%5=S(l!+Z2~7zL z6@>!uAI&SLB?ZGOD&84>v&&%#nziHC zno6KZLw?Hj*bVMZG;yB)Fj`0PlTD+jR$IpAZ56yscT1J_!tkH{4NeCz-eP5qFPj}}>>J=>H|q@lYPN%`wAp!4qM%fu*#?ieJIn2jH+^O*-F#FxkN3KGcH zkWq;uuM%|h8Be<7dH$p4(=R=X%*hT&Y3R0lL)S{az(2KbiLa$geT6y1OF-E@JhTKH zZ6_kxo#4f`bys}r74uj)zgZ_{Gk)QQVo`kjbWmZ5SoSN+z=fr{$8)TBp8q6T*O){$ zj1WZLBIVFZKv1(+u?&iE2YK!?2cxL^x=;! zr<|2q%RG@;UCxjI7e{m*sT99lUs0%COSsm3+c2 z-?Rso{+>$k5iig^$@Tso*reoTwnnis$6M2@oU@tTmWiQzh7#7&9+OvYd6C!OLV7=DI(6A-1 zXqiS*g+#sG+Xc(5+YOM&G-Vb8o=qGx(@}{1Tj`D=WYd%tcrM!{Ocnq%!~d|-`##s; z&-2fn559B)jzl`h3?XQDdEbrq1g`yHoX)`3JXz}cQbw(o){!9jyx&(oE=hriH?FJ_k!p3l6KQYT*E41ve3N5oZ=AY`B%oq zuuY3f4h?H{H0$fDdBFuwH{=!V*>Dg6)sYLW$+*3a@>;fbcq6Y~cOGmYsONwqcrZX7aJ-!jXSKCJ_qcr^_M9qc|x+X(8qU&(4XL!@``& z(VUp$JpY0-7@g24dPOtaX5mRV%QAE;Nh~ZWZ)U@a3){MoOpICK9=^wfKygLW!eC3m zwKG;cMg&u}q!ue!p7%^jDoK$p_xoicKFZgIgLcjnn7(|^cpg_uxG?)%eMmu1MQWvE zTp|@0gwiQ~dY=DN<{06otKBNTwMHbfgxL{iu4h>IEt?J^2Dc5B@?WcS>%4Nsv{M_o zq!JjSDV2EXeOYGG*ECX@TtzQM@#>Y8dEy%|$>jn;0;wd3{;%_+?u%y1Slk%^zqp9I zUXX+?m*>|?w(bk0l10pc&foNT{)xB1Z)2wbPrHHX?CGY&LWA zWn9ddSiITXy3(R9avkyF_NdrM-7N0=0+6vsWY2|HI*djH&hI=g0wtvN`*@qa-|jc4 zpG+>}#I-uOe{Ke+jO_T%wmvTV$qd8rhL0@#*GUWfq{wACf92=-$I?ch^%$0=2FC?L zWg%{Pr6uZQz1y;PT(W4Ue!QJe2;M`y-L|dEfJ*?R;2NUyWlF;NLzB3vWs0L*_(+n+ z4w;bVYhfl>UzZINTjU^kt9@Rn3H(669&w6$L5>*3jra4lLi8YK1>wC+NxCO4G|t8o zCRrAWmGCc-(LQ^{zt;KF@AKM6+H17}IU0B%5k?k~MO(@sek+>|Fgif=g!6AMebz|m zJ;J;1&JdIbBo1)Jd(EQpNo$@g>Hv==b|S$L!ekQ)hY^E<<|n$YUzI*EN9sbUgqbPM z43~RzH_nYRP6W7tK0dN^@|X=Ec?kS4ZB^8cep>he7OuG1BK~rAfzR`|6UP*oSi8Op zND=fCN?Z=I)}hyoU%6`o!1)6w4foA2w4SX=}3^yRzjAzP?v>veMlz+ z^?g<2q6SyeWlGLVyq}k0=-2o2{qCnI8mFH#wzA-|pTwjDgK2YF2MFL?{dm_HmaJZL{yuz)W+gcbT#>9-8bU0E(*Ac9-5)TuZ1k5Q#={j$$S){=Awi4`Ho^Oa~ z{Jh5Q^1NYE%K*ta01%@DGo>_=hqH%|RF zLjVMPM_3_nb=qa|Q2byg3F9l|Y~4ySriuOy`;rKXWe1slw8xItQ4`{LRN1^rnZM!n zV!m#d+wE&}v{h2gOJ=CLbXdp@PIAYL9j&w|%}?r9R!(8)j$S_}W&XE36LxX)T=52C zRh)8Yt9{TM7Ze5wn^yL~K0I8mmS6$k20vP;ue^g>FqC4*F<*zyY!0yWqS^lTJv;bF z8$94;N67;2=a5&p z0RX$?o3DQB`YSn7&q&tdf~v$xgOd_? zaAYU!Zrt3>(BLW^$!7NPef&;il@Xr-6r3b=EDeA6^th$*Ztsguu4YrQl)i zh(#rbR@6#_!H$qcduNREsa@dmA7jqz3Pl#`V=-q6cW9x?$p-2zNIdX$u%p$MbwrB2 zeLvU!xuUXlgVE}?u3V{ou&8$X#OJNKbr2>O@lkxOCXX2+g-zmkxEK+Nhz`-`Mubao zR9va=U1*NW7|(+1_c&TLjZ#$tu`FjKZd2KPs?FRGG(u>rkGgHkA zn|AV`C1WXjS?op@Q1UMFW9>JGn|{ zH(c-3*II0b$5%5yR`kxrfrvo>pQ#;CSKF03bbH}TXCkafbgG>v3^)Bo!N0(?|ryvWxNv9Ix#zf?~Bj)Oh@(wnYr0BokiRts<%N!z<>d+$4GE7L~H2 zk@?{#k^wM%NR(_YsX`36ubvimd3TZKi6OK!dC60EmRrB>0n~YCzs{BzwZ6h%w#Q*W z!B|8KZr4RF?zm&lRTtj7$yrAq0?a13`zMdgt3?GLqkG?RR~IULp8=(88xA6t#rK!% z`|CctjBPF*9i*0s<3x{S6xw^|%q3dc_-*#}ks396m$9=4MsP9tp;1i~#i0AgW&r=_ z5X7kju78LU>~*o^siVXr9wnIaxZIi}WH=%b8omy8nV8NMWtiNzUL5{L~*x6-Wno)#bTHXH2nT8qGBxZYkE zGjOpn9C&o-grF8}jG2k2j>*JpT_`F%KCDp5RtU8JjIwkkZ)@s1wCux6t=#E)DT9$0 ze2=V=3oKI*<7>n1!yr#f3j-1YS%xeRBKSkJ1q_n$^iupq&&!iE^&^W!Puj-|+E=4|r0l1&iDXhn4y7EcB;NJb>QjB)CrvO;)KwrioX zF&?>t*<8C7wG|;s0!d#}X$OTA{3^)--V_g!dOsE~@ z8F>_+!n*7vAVg~hCW*2|>4srZRaF|0C!$-Pl;d-ls7UQ9g;kr`R_w4^guWqe{p`?& zo#}$j?F~_q5sbvi5j4SX>Z#<)x;>EJ0lRRtvX2kKkX`ze8fEZDBJa3e)Ujn{x#1>F ztb6mASEEB_GsWfw5j#yq4cJ2}VNnQ&uNiZQSFG9+>l87{(dVe-7dr-iuM>N%Ek^-2 zhzRX=s6jm`TSRw@Hc601t12}=)>v)swBl&MFXUyEQUpt_v}tAO6)yM)fWzU{k5S?$ zfa#G4FGx(evDFTaWqh1WjEG0j0}kIJjXF}VZW%!NSY&`p>#b}g>I09yNO$pK$pV;1 zxW6TvK+u-v?+g)x@~31@?exN{Sf2z*NO&Hb3s7iP#d^pl?xX_$V*Oq=I54eZ^(ww6 z<8@Cagc2b3u&+cgBv5mfxrIjn-`WVl!Aug|BRrrN?#mWgtlj0ag*b`E;m`!YNJ~Lu zps=!}*vl9i7iBH#L3m>@i3IE#kQ|B@;Ztk^6N*pVSzvU6?FV?Gv%K^kZJo{Q#4@T_ z*tHl0#7^mWd`#D(I?#pm0hES)#F%;@=hXK_wsJVM<#do(5yaJ45uqW@w-Vd58= zXJL~73cJhK?b3Co_*Ab^8oZwdeXrt0Nc?)F$k+gqgfIvhGw7T#Sdr3($m)~@{$mSudTa}|VWLgC?Q$^39dCQ-K%856!L5uKND{jTy};v`k!lBM+- z!X%o_VQU$0*ie9>_!c%@vDSGbJ;g)FA~!PAG6{ly2;uNoTOUe*Z@WiQ-r68c*=W?{SbZ2mo2Uu=;g%&);q^8+O&J)nqy+D1i%SEd#b$II@0DFf2iFq8D?|YBvGYxH70CrQBACqcT4Tj_HUTEsY8DjpQ~NW zNNB{diH-nG48RmzCxK{)9X5kkfX)^mJKz!#hKSrM^VBKWJ*p2PT?J32T|k8Zn7(IOM;ApnW%Wt4>_y+})?J2;CFyup_`(rl#v1Igmh|y3kbUW`&WG%}HwvIKZcl$xTmCe9|JhE5 ze7s(;h}dq{q@nAYQW4O#O4YeZ%{nAZ5_mvIx}j9L=)HYxkIdUjB(@A$)UgChbsUZ* zJs^_8p@-`@PUcO^94$Jo_3!5KUL7J62v6d!Yu>@qwk!!-SjT(l1rnaPaNI=2Z&(h%;X|u6dvE>T9!T7?Mj=uG!s~2 zMJrh?W^RfMki&ivK{KS3t=vJ3S4Pr^L zJ1?H36XN$m(ohNg`(J!tCWkFGPGzPrkWxwKg`Gl$0gtQHmswBq*}WdI%TRS zY7q1}RVLzl>kA7z9vPxgBgD(Pnw4hj%NQfvwI44BsUSi8K)hhft7UYa4xAWKtRuP8 zy}>tq z=dMvI5q`UoBSRfbpQ)qN3R@6Lo`Az_EcZ!(2Ng=nGr5@OG>~YF!a6~LY!9Pd8I(EoP>kgX0>f+uGmW1B!5eh`{PR|#K6KA$ zoQbud*Oja+0LC7BY)i`f!tQ4W*oU@79vh$z8ko#ZGk$*~l?+u+KTTT5KQ3eISCqF- zdAgq*i?mc|Ju=i6LU+ezDP1WL6O4M5fB4prHK7RY%B?q0c998)C%F; zsM3F}>mCYspu|zc7DHX37gyF5WfSk#nL1cY0HluC81;m(;OV**7d<>)#%qT=>0GC& zib`TG9X6&gqZtEIyL9b7tFjDZN!P`;3;9f!RKggYaJw55zmb<^Gz3W6v}h_=6U*U$ zWgHcy(%@%K7FSa0T0tr>slQ_*O>d|v z>S*sO_Wj_H5Q&0DPt|)Ls(mBA=1{%h&cle-LV_pipAXivVWde-cNG?VNe#~zv!_aUvL!jR@qUm#+e0$cth`%uJl;^g%MOq!n@5Qk>F=Pa>K^9|pa5skGw% zHx9y)MkKSd%Y-TAvDy?lSWw$uha~P<(%qWR>+WY7jI=adcS;bpI1eV_W8p5VP1V)e z)=8lCqI%7$jCDwkL8h}VeN<)Pi(^R9RxCvlL31f>>eP{myt!?Fz>F;zhQlYoRaTk@_RE`f+#a}49a(?-AG4@WK$5K7zS9F_cRgORkruk@{ww8 zD>Xn`*8A0aYZ&S(sJT3Dp?eJhgL+&jzhLQ`TiMIy;9sgfx2S=6{f$Mh4mwFKsV^=` z{7Bv|nh4d_*XDS8!}JS95jInA*B^XlCpKD4KK_Rsz=}4CL!ZXSI?3CHZ7}Ks3L;N#uHl@9u8#= zF9dp_iiBf%rg$x~#EcbnEmR|ce1TM9geAy@j3lQm9LyxCtVrX@Eg_Xhs=ob!uz%Qt zv9t&>h{URgZ1L3_N;Z_L zzvU~oQemsEBBh5^I@e-(LaI#A87}LviE9$9wlRHY^6BPcH zX|)hxkEKCK^V&8Dj>qiBXf^@sTG+pO97!M|YZmN!tS(S#hH7=>y>RZg|2$I>6>g|h zDnkifS~#jGpD+k1idFTBZ42dGn_Y^L7#-Z)y*F2~mbM2LIt7}o+KpVq(LjZn!Fs=G zV~tfDK1-R^GGrhOsk6 zFX$M5(RPgVkC!F$GU6AvxJ+15W+HG-9&z1A)JX*Cg3^>_Xbvyhb|k$rAur{39lHNa zNtC)-Q7%otc3pReJDu~417sB5vUVKbVTtlCnua(Q*X=i9P`vgQ*IbsSxvBOjgUEJM zh1yco8VmYQMRMp!nBVuVLbu1cYk_Fin&K-Kl~R>izQFj9>&8Z%;{ z6=`CkGtN$;K|Ulmtt&aJvSI9@lUx%?$|XExz=9!${Vmb@MX#Q)5E1z0M;VCVqAmpl zI+hsjg8?=n!>_vlcT`I`<>`LZGr@1!;hi44Jh3<3b=&SFqKg4DT!xKCW%sq)B9nM2 z76_T^I2q&J8sT40>80N7m4Pn_1;tyn-<2Hp(#7kYj$XL7fx1|gLM5|^Z#%p+n3T&` z*S)Fmts|@tfh0~=oP$W9gi6I2vvIT`viGqiFR~s=@h2fIJYfR(gR*fErKElOGEXG- zZ^j_`M5$9|$j2xhVGj|+WtYo|{dhacB&alWUX1@vAn{LqRv)0wM}T?rsECLTGg!3b z$@D|Nz2Dt{p<*U8^ky5-Iu?Gt?`}qc9M8AE(6V!9#EqxS$~(xPg`y1;)1dbG_(4s# zuV9uEgsXe(yPrsD#_F`U5ExJ=C2A8o6=KzKEZO2dxkU}f;wfsaH>_D# zT6EvYzVwJ#xfh8FdD6G%QF;xr1jz=)oX4~RZ|L#K#g>+iuvR>Of0=Pf6fGZ{5xP7& z$DNn*k8&;sqGRzmt9Xv6+yk}8YPNaZOg53lMB<19@aKEgc_uk%R82Rgf09hk_5L;U z<%RvzRq==)EJctVLY9i6MK8$Bw z6x?EoJ+Cb$m3R*eiY+G6e*h*~BuGs6$4Qs}Z=Y*ku(bLhmo`*7q!uj6&?Z!Gb91-8 z?;Q%XXOfoAW*DH_+TPtZN2ul%KW>Xi3)euD{;c2(Sa3-vT4btr5PDhf zRfSAdooVbdDZ^M4ubN9qvJYBBcAs-Qd@{vD7dNV z5;k*e{pv05S}^-P(DntS6O^;EOzuEM1q1l~28aZ$ak2~jE*Aal`?Z6*tXng3P-t+1 zjsp;KSolZgXzg_R?>fQlVXnQeTUAK23re(B9fY|4vVgnGo$z;%U=Wv3+kVRu%sdeX zEPZG?%L*bbb5RzAip+~VKCfDO9k@wA+ye4ppmOVF!iW%ljylsCNn`TDi|x$^Zn6-` z@v%*bCG5VO!)6;UI3f$|+$s4_VDfE3hct#ASA1L5x;^b>b$eve62~c6AI$*ReO-|) z3t0sMW%6d|QKtvu!4Y8*>MwL$-T;OAT>~L z7eW-M+-?A)bhzG!_d>`IQ`3wIf(oyTw|fIt#aSaZXmTvJv$t+t9qS}wQVSYGYeT1< zvgf4go}Vt8<8{zdd&YHd@etq%7r=CJ#8vjVKoWRmCD>!=743#fM3!0L{(sbtz*Of+ znNsxf>W{*^0qwz^ROXb{)$K$_P2OfegPtx!+GRm`R1p%{>CBunU>MmjQYTk`S#}4dDVQ6G_ zyTN5WO|uY(jjn#w$bHo4vf&T~^&af93Aay2BmC>7|P_S|F-rj49% zT6C@=Kd!clX#t8y5#c&b-xb43kR^KGmjK}$pvYqt;u`Te zpJvMR+|^Awn`w1gfV)0Z$-k_hi%7$K;_u)x(c*>JX|#Sesca_6;%xO3Xul1-kCKVy z3aHUR7cmY+Tt>NEDB1A7_iRzNKqbT=OYAo^Da5i2O$Xna!dRqb@Ys=MZGVIU@~KaZ;;VeViHcGNZG_!{ONVVr{HKS*9FNWLP*Oh(Jq1 zR!JsW{9#SKKp`$IGf_`?bi%C$FWw70bk{P{uLg^Wk$XG#!!A*m1FJvaXhgAmyw#UKsn;2zx7>)(ijlhAvJb$QY!#_2a^P4K_6c{77i?XhlL>r=m(uG{U~s6v9QVjO&QMWNn8TyI5p>rdjRg&V2upGNSwSE%=$L0uH$i&%V- zwU_Pn;!~Q+0y`H}m{by_BTS(r7EFH@@R9dfrIz^*DRr}7ma2B9>;wl;gUDJB9H)!_ zf(aZOE5P?n{6^Js!7eZ-k|m#s6RG7*}3Kcu*qdjMIK+R?J;m=6nYMm39|?th(F90h>h@x!q(-R*|u~ z+A~cN55|*)Sx?(xH1=SC778m&mp#j36@e|^;+85ew$|-owTlKE+jS2Th!RQ~6eNN4 zgR*dg(Z+{oi+)K_{M>m)Vop-ZKXWiTtV}x+jXDqnq_)cA+Lp%{R9jbKQ(aC<%-0A^ zYb~wSLp!wke-_;aDdJ7@9C|ntU>p6s-J0j+HjvVs1+d|q#;z`Eh9Z9jDSeq*#h$I3 zQ11%oESNpMn)?dbBjaun>5z^PLz}r~GeqS803ZNKL_t(zPYg|{EKO6;BzL18F@KRN z?gH%u6z`m_?GFhe4thY*ugl3EiORqh` z%K9Yds8m?WDC97do66T}Cd1CAvkyyRCh!<&qvRt)y-ANaGtp`ZHiRjW#IpnZ|2YiQ zC3iq!g)J-AD1p0}2*au5we%_L_I1*SWmmD`Erwd^mGeFbr)^ziG+YE{HwhBKxn*kp& zXs?4Iv9z|JAprTg3YS)Ott!`I%Q`T!7S+M?K^HMDMNyV^aV`;7)j_&@RbS4szyvq2 zEU}o`8L{LflorbHR%v&ZXp~_frWG`niZl@8i#$?#f#M5y|A_yGy6X|{nr0gY zEUM7>fG#lrKhdqX+xy%%&} zkkvw+lQ8I@F*+p*A8KEDZ+nnFE3eSBr7$BXLO&W~cI;a(H09_w0q!40^CHQo2@B^B z9IfUj8(alidw&=l%ZfKIW0G*7ZN1Jo_`7FPP+Ku3PqI9eM08E0JAAp=b-lStKdUTX zbAb4m4>LoG1}-+dJt!GeMF(kwiRF5(-aAsMtHmC6I#S*Bqm^8ZF3hR##oSZyWkjSMrvxE~`^4x+m81yzO-qx3@XU*OQrh5x*!SC(cNyQwpi1Oi>?m zj3Jgq5{iQv{;ruxTR}0CYxOvOZw}>_N+)ptU(cfMjlhmpBoR^@wIV`naTa7vt8lQG zvT4T{?Dg!?X|{?dQZ6WW&)qbd1?3K-Z|Mnny$8rq?|s>~DcbhW13n@%VmBBsa$?zY z`Grlg9-#(8a%vWP{z%M#OFB}FqqKtMmm}laZCz1Nn)R^I+0D~CTKaHR|53P$es``W zI25qWR%hj!rSi1M&jlWwq&f!S!b@3hVQ_ED?gA;;h0q*gT9@50$w-i16EX1jY2qeY zr^ZhcukS9)$mR>heD@PKN-%C7E-ms{vl`Fct<%Woe+dxNXpRt+V;7fm#1iSSOC<6k zrMW8?vub@MB~j&#<8YpO$+$S}uoemkuUqwvY%4t=RZEScSoMv4E&`_ee&{Iz94j%nI8DS1GiJud7>`@xhz2|TiYyqz%GPW;rSYf6l1P_( zLM3`}naK55pa4k4la5wHgz=(VuJBkdqOFpuTuad%ga3XZb85|YYdG>8OR`wP^i+f4 zK#5+NAWcJM7sw(S!r`+QG!s*37PkpqU?c_??;VzeIQu-gfG>Xw!fTD^*P zY4)=HU7a^{5j@z{rc}G{neTZ+LsET(^(@`<^ik`}2jW|u^R6i6765KF+~3<@>O zAM;=~l3vM>XwZNM^3P>kiCE=*X~0=wJK8!~XI%%L`$%UP{~A29gsZp&2H#iM9kfW8 z*7zw4?(pTNU?H{XrOSJprp>)gJW!3-yXB@j6%5g^i?TiG0_O zVv}46wN{uGg%~J{NlNH^2abwd_NrnT^=)`548S8~)_T9xkh3AQe7)CV)NNL{mV%rV zMD`wYg?H$CL-teAt^F|En|F8LNJdVxLKZ4rWBAatQYt>_T?BOZ37Rw_6H~i5e~6M^ zf%XEmJ&)%PM3e*5SBHeAUB1hZKGv*LLHaT9K!sQ>Mc5^&7B|)K{mgd}%^}el(wzHT zv6$?*{0hrL8(9wnKt404%Zwp0y$hm*c`4zPOZoGeaRkLx>FQCHh7`@oy`yX-m65O7 zcOWYDl`tk>u7E+T-+$v;8u|yL^VS{`QI#QVD=A$c{MaOS2_1zra`QJO#djLduOA)p6%irfsr-`7;YfZ5i zw%08?Zf}KnY6=|=bJ`fgy*=0bRv!%0Y~>#n_K;RgZRdhZGXXxD#4Dx54ymew($Q+E zGLzz}`X{vC*SXu$)8xnDS2tn3a5-qom7efYtG2?iO;yNR+oP`H(TA!GIYJ4Ou&+bm z{X7*}ZTK6Is-nYq0elZ&q=&o`-PWy<2m1*AiJ|O}g6t!AwKdHu4&8{7hTBq85pU7! zqeqq{4^*9vZ*jB(Rhx;vOiwUbV4|aV!F)lt79sX{TULOX=SBrsfN~46#Z?qj;s|J+ z>02u#5@vE?{?Ker@Y7YP!)o57DXE#JJIc67T_Y`-CxBW>(J zVJ~WKsXW!|N@EwOt-Zt@^~I2iZ)u8xE5tZ$r0p+6D@gQ$go4AC%>7=#^4R&pHLhGO zbHl*{qC|?aypU{(_b(Q}#Tm=3_#y(JaH9WB83`gJM}jR`D=n*>$=W095^p~&Ql_ba ztD%m<-zSR)xiO5UfRq%1XbL%i^UO}s3;h1kAZu8+G5SCp$umawQp=zLl1j9S^Pm_> z-)v~v^?Y~xkX==T^3!q)wZRu0U54oeY6V)6#kCe1-g|6>W$k6L81e^= zA8}b22m9OvOstk_tB990%7uDB_j$lo4qB?fNT3V&A13Kc-7R!;nc=UD0gB3@1(nzH( zQi3d_b@n#MJUy`~Ez}{yPytASpnf&9)?$xZMBWoRAzDh3xf1VW>2lA>*c5IZ#zpi@ z<_fiMO#zvuVZ!VfikgJnmGS~guUwW=ifVT9PUPt@2230cFS);ByM!<<& zhL=WrD7JOk`QE4XBIPDK7E)qy!g1B58uBxll^FOf&@b5aV$-K;(H%g3xdtLM6s%WQ&D22o+tsnd}w= z&Bkf)=cS*KKjUuwkXZk2DGOS7o57zhl;yNyG;G<6y57Wa_~a|o6kj0}69C-74kQgX zfb(d0xY#+|+w9pT(T*c)3PCDbxEXwXUba|9?s+EyqX3QY9*@(LU)`8j)&+?4xoD;- zO$=NZDx&depH8%#5)=hTIO<&2%#(0*fu)TP`wIGAhLx4XdfP5@ zO`FL2VO>|3jaeha4f(@~MHYh|EX#0K+AixCdjL~B<%g;9Dw`v%+=Y0-KyfWfv>3VF zkn|8Xi+Ob?vgTIp;Vmenb!9}-bgRj-tBbygg{Ad!Ik6V-hp~x7P@6Zd;TT!F!u3Xo zh@b-8N3CBh?hyTsJH7XhmHy@o-&&lHR0-zl%2{bq)MinYh;alJ1*|5HpgKPGyO-48 zbg8ZI^VWRP#!BOq*Ck~f)e;Ui1EnsPot2}Ak9=3rk2`)6mU^uFRwpTT2i1HnQ{y!- zaX^+~%hRfA1s9lE=p%MFyvCOeYJX%;BH0+jMAi~%d=y1Z%NMqD49oUq{6Q6%qXa%_ zTWO(8$Kt(3F%xWMe0n18R~;gsxCfCWNsDmMt=K7O)@p?NU_?)!j!J7JMT$LKV&>MX z+d31`hnEFY;QzW)c2nV!qoHk{-w}{(xx~nq(e2Sbiv7-QT}|IFwrWK{Z~ANxOWymX zzjv!@*Y~?7drdFw?#ca1zqfn1Tq%3qLWn8hTQ{AKG86TI@*$#=3BrZyJ`(cKb?B{k z>J4(Bn3>G0lNEfIG?exdw7N8E?v~m5jrk|c#MjN+w$28-V$9@Z2%!z3AY_(oIpM2U zH+`ke*5el)8TA7xTg332{TiUl;n!dYXm7#xnO~-$RvpFN#w`X1(!L@3ITrPCB zUJknrEI%Z(u~fA>tJsGUUn$EaOD)#apMpk&hDbJhLgP2|B@u15V#dZ(7gG1E3tFu> zwtw#_*I8V7^RT(K=YS$Om+UUcTR;I(g=?c&B(tz(#wjd>&T{br2#h&oTra00Q_N)uSMzOGwZ-Sq*X5qwt^pD%;WMc)>V+!yJlLNQ8oSY7&4S# zzq~T={qMyHxmJ+IINhd-%OHd7VxrOVZLa*%NST8H2YU}D&7(yzVWQPk+X^h+CmB^L z0t(%34|kPd4pUl$Kg4?JG<&eN0CygDQQk%eKm4AR2aYtaewx zVgcU7G)0LJ+Ak!#=s>%?(syc!60#2}xSDF(R|lkdI%&8fvr!M~uYcop7y#aeECZed{s2o$Pg zpz@h%b}Gy*D9)$@JPq)G|Lm1}s(Ulwh4Oo{RAv(2r;)2&Qe{&q)|*P)DIrB0TvKvP z03>|`e3LkTyd|skekro7FK=rJl>8<)!f}9+IjVN?4Z4W1XKlsB$DP&cX((Ak@9Ye1 zcM_DYy<{0;7A4h>9`BkLwID|+|)=e#%M%l2}R^L#=Q`aC3(=YE)nHupG~SUiYrf4 z7@BfirM=*b|hl(iQNszn417=(PRV~CsCWr{2TTf+{xQ-!liPhjT z3GcZ#DE!MMm`foA`0>Tt`Xyug8Rs(m=S>lZ$Dv{ z=*>p1IcDqDe(i=8_gGh)qGc~xgYSb&>42cRJKT;(sKO_}h;hOigAHkXj>PF;@e)sp zD|!iwr34aq=TM~*Mz-#cw-uCBAZ+>=t; z9dvyS+jbv^(qFDhHBkmi)u0>G7O{hP?9SR4A({(kk{3?aiOSWG*&CCz(38TDSj49R zG$icCVSCRg{y$yeeWh-u|M(rS$lpE+ZVeF3(}>w{6(g8CNP$l--HiVNDpM)Qh917WJ#B9Lo~~UW8xB6Ef9+GR}tONW5GT zy5@v$ZC?T5S`48NSRiq6PO1tb&_&DX(k7DnN!aP%_82*Vgg==|r&jMX7t0DnC8O<& z=BcdKVjy}E^1(re*N1UE59;BSWtSf6%laz8DEXO6E2PvHEeE1ZV*^VS@kj|?Egdzl zk4}kL3@brErpI<#dHs?&Cyadwk_}Sd9wZBsD`scQ60Z+=xM1h&-E70#Nh@bkb2Gp@ z>30I@axMuQO0;%P+jE)R3|yR0{qWX9c&uyJb@SG}@9_U_-8%ROGRu0QMLpW0=ndS3 zoaqMC;KcwMpxWxX4b>EILkT%eUP>A3!-5cfY9Z-kr#DbK!Y(NmburT3N1cC2cj)LR zE0zqhoLi8_-#+|3{l2YeZKZ^%)(5(u+v<_)53VC+aFSTh!TYjrRyw~yq!$8Vd|@wY z9vpE4!#ajKrQH>X3rZJwA%^kxZwPyuByERUoN_X%#_y%JQnl$_)@_KQ7Oi$^zrUdL z7rn8NBiya%rDS6UCdzvqBFV#UE{EyO`y(-9-Sy}?1o`Nq_xNm7fGR_&-!4D~wR~Zf zBcK$SNG!9Pb4s2y-B6?&-Wm0np=O=X3>pdI&+G8+`T@fLVrA<%(O?lK99a~Gb7&{h zLmc%Hcg68b8x!x?!ZKSxC}I|p#?r(lEQp}}W*9A+&qaq<7F*Ju1&VlEd(>r@rYN!T z;bJXXZr|DkSdnBZl5|ZX(W=8Nu%wqvoRH&+2d0aRRy;O{N|va^>C%1kR*24ll8g>K z)8Jk$uOy44N)`a*so>*#1-fcuoO!*QY;k*mUI|*K;;+Im2S-S{&JXdM`-49n`GR6q zb>kp`U$Bu5FuM7$^cJ>-Szstlu?Pom=wWfoP0CGF%TIF2zdrsYU*-}>**Yk>>tHC5 z+DzYO)J9CNKI}?a(z)V37&@0E$swdl zFC4FZQes6+ixN%?a0AEWOv!Xw>`oHTM9^4*W{>HhrClRc@BQ+`u03Tc1YbBymB#vX zlq+@Jmr0mOQp)U-*nG|=Sji-=6*EOtY@}B3N497d#v!tx&5JU(oB3%XaC0IpL8stHRAPtnX&B7*1_0lo9n>A_EhDN3MMhM5 zLwLE5kaDJss2{Qp1WPpc&fIBXVIxbOu3ei;roI^++$ZuZ6&GD;Fo~cX<|P0z4uBGh z`{2qfdK{80Bc-i1l4zFD&UsWJ0zL$Lla>3oFq||Cy)&>$yHn3m2uS9aEb0>MLCse* zcn@nUQZ)IxX1GuAtEdo5LNN24FKsq|;I0;LZ60l_#KK4)7Mt~-RLt5^)FB7+plwze z+D^CC8i_h81&n`eeiYWp>hwqk?=KfLM~j0?g0~g{e?Vq|GVA>dkWcRaP zN0wL+VRJG8z@Nbc>m?Lj06B&^6SudSA-yu6hysT z3`MY4qi?0^u(u0em8F;=iD1VIMc+}n8B^3oQY0?o?oz;30W#2`#t~CZ#uZu@@wGr( z6@fIeFh(gB#E!jMb13~=6qvww+SJ;%TG`?=qOJ~C=^zzUBSHHtg`t)} z%9*!7*bk9EhZ_PG7dt{WI_;eZnSmDxB~jICkM+~ zylYu^Q7ph26DENLaP9UJwrjJa3o5d(;l8nlmmS<)7t)1D+%4uZnp(#=D$izpVGdVg zNRhh9@NxD=!1xpKX(^xRqfC>s{2=6qSTwFZt!-duG`qEXLpA5)N`~zw9{|4(x+^rlT(_O|~wR^G?66N=DKShF3fg zZHt)$oE2FoiEuh|6pKW-uL1zOiW$ivM_JRtkicJ;!Z}RPWjM*c*o^B_RXnp|8ejL8 zvD~_rm8&fFBxp)4Yb8*D5zP@thL?N0T^p5u-~jnQWAp1}NGgAjAKRkTUan&E)Qae0 zVOz-STUTih7SUQ59c^e2;=ZaqF)sLmD z**1ZgDweK%5+unGJkisCE>b@X&<2v7yd;|>v%XSi<2Oei1SCp%slDJUQQ(<%Sl79m z{~vo_qVA}XG;6BZgg^+D1VRXk_kYTpk(pJLPA|5{9{=t6uBNAb`YbvURPK=xmePm; zGCaUbP16p5p`Zgg6EKll75l(9G=@Y+tDIRjlS_pclwsVxdWMwA;5;;M5oERF<)q1` zy|i6m^`)+{D-2)0EE*$_lM6g%+-Pu_>CoijC)?J;D3mlJvQX}-XOi+CmvOM;oo<6P zy0B})M-^3!jn?w>3fzjL-1w9&`Ts(l{==aM9l!35;31Mz<&l>rD$2qP;!L72UPJ`} zWklqvkU5+&jyfoJG8G3aDC@bZVbpE@Fct8jdEM~N8V2ufZymHg80cq2(JBj!R6#t} zA3G&pm~u;QG;tGvlYf{EI<*XKSt&lz2Zc1k_z!1WrJU%Xgdzy?(lE6Tr*QPMmJDRN zS#X*1(6eLmUwtO>(stD+bcIRL_kq7Y%B?VsNg+LfQpzPJJW&~uSgsUN3Ub}W6pC2a zn?ss`u_ngC@r!hX_OhugDU2*0Y+wb!hqGumc8)cl4tjk1z7kc#qo2+@8swk3NkCA z*UmP=$Q3c_P`ac#()bdeQ%wuSL|Bl>N!PjLNWo>Blciq~qBjSc|4^uqznLdI^cON? zF@@aCAw@Dv;h6FCr3|H1+|D{Ypt1ra%otR)*f;zZ@2|frx>Q=8Y!ptVaK8a`lILSK zWdDo6#Tp3}ZP{1YNfk7 z;8^yYSuvYvUUgXID?`YL_FCPFsC8kmV14g0ZU8#5mH6|qfgg4B+p5yZb}@|M_MfnmIE3pyX5 z_@+ogx3H8sc-Wvfu>+@MpUPtLvdA`qE^spx}jk9|hLRZWmgDzh2R zWY)$2RCq+*jmz~%(C6`alTj9CPvgH+6Y=@uo~}r;)h3Ie2?IgFBGVy)Ve|4IubHOAS7^o3KmvOdt3>N)F@%Z$G>XU zT~{4SF!wgtebq#iuLul^L3N9b%;@^Q3&hnJvhQOkWHQlDEaTXn8vs6HbQPiKOlOKX zufbDGi%ejUyqhZu5g<9G1dnkp>?`71H!iNo2w0{#G+i~c$drg@Rzf3Bsaz4Yc*mLC z+S~m*L&$eqTv)y5u2s`&>z~D%Wr097Y)j1%xQxtV+%Sh+VG^F@ACS%oo;3?umCfs{ z%I$=uO*;QgJNt1g_HGM(toq@qWy^WR6DrmIg99Zh=opjixW7YPgw9_@e*+(FA+ z6!Wo8Chr>sj90NFD$VHb%|c;XflmmP2!)WR%ir1m$ZkkY^F@yQ0>^KK`djj4}a?~Y$=z^x$e!; zL<>7rri|-RVQ8JQZ|aaZ06Vl{6zPc44e~OjawxSL5BnR^)8aD9NuqPKbU(RpOv{Q0 z_LbJ2DT_eDZv^!(F`u;){XtX_qpmMpq}=yKLXTgFT(}oSZKPXVuD>hWQFY=eHyA79 z{|Dj+hYZVvFF;$#{VvH~AZa0$mban;ZvI~|pY>frV<@uZdjJl2E6g-hMH ze)isV+nr70oYz%vZv_XH{Bg3aGLwCZOR2J@7QtB&#$#E!S+1vlE_|Tn34I=q38l`x zeL~oKq*IB!drGsSgPvJh1(AqFca@UWi^%Pw1$D##nq9nn2qN8T;%^tC7!&2|m`aR? zv8;KZXfTE~W~`SQHMta_>vn(qOJYVC{zW<&2G*k}bka#t=uAQ$Uq)rsNO*(~&?eT! z9c~@4j~SyGF);@`lZZ^8c_xxC8U5LA+21ge`@emlW7Oq}CdmTM)hJED2LXAwx30)i z{00 z@&(CJe7tu?W|gQDW+8bgK9`3Jl}i`mlt32ewKJL);V@*<0=8M3Qx5$vM`WR=>lW_m zqPd+;+cexN{ghl~7u>LT#NcrTZq~}os4GWpc=*8nVT!PqK~>H^XWpAI|ETlbPA-?) z<8gV|w)L8<1*vG0k|ZYTAfMw8c%Q~?WRm^fk+Z73A?MlOYv?_w#alv1`4iJn*`oc5Ss3>217?&0P|kJ%nFW>NGD0wL5C)s z*$6Nq$cy|-cq-t*qAk?5{Oe^q|3_kYtC;1jwMZsR7}c53HQX9 zVo3BR(a@o!iCY?Zuf1<#WXIBr9ynn!q{EHv{A%LsvngK zuBDljHzpNWPdIorHS$TE5%-yB=9t)w4To$u9~~?{oQ?-`bD0cCqfVSjn1_nFNH(gp zUW$uMWntYk=wk3OWYuO>`JvTyfNK4$QV0=#`K55u_b;Q5Lz*bSt#u>5EW@z$nCg@P zpb`^S^FaekZ-+&|eDY(-lBUvq$DW>#r(zb^YCb*kZ2IMkjCMrI|3OsWV9Dbd3Xf45 z6bkY7$Fwc3opS5k%wA?5;rnoLLhDxAPB{Kq>A}Dd`&w?QDsAsRE^XdkWI}#9pR8^D zXCdy>HtylMs|0+x>y8aUtA%xq5mZ zcXRX&4&e$TWOw05)opmM+m?zI;-T=de0(s}8QHyxv?&TH2s;9RJ&(vOvf-ESW1&UG zUi`2SAgl)NT6sO3V;Q|fXoIVgXTsH&&e;xJV2zej-S@qn1zqU%e1Ov-K&{SHYpnI) z@<9gXr`mj2hU$Hm32eSRkO5hcnK>Oz*dTVIq1IlKuRrlG=7@kApmcyltZDZ?&# z_>8QuGd$Cn!X#@?lIG63KAgA?g{1|i6#$CEyXV|k19_pDLNU+&&~KGHMwNYBY%2x% z|K*`=f6B4)`WMf!PFXhO%p{ea!+JUImtShs!!cS4<6lgsWHPuP3g3I=PA}%qD-lYE z!VcT8z3%zPqq_8YySS;d8bzAAHAk^ge3LPKRODfYJQ_g}+G!tE`k}yHc!f@6Wl|iJ zsR#9uFRm;PlIkP(7bIg+#AuX3g*rp=x%im&39YFQeTZmzDYNg~I3^@7F|TmB0I2_N%J6HM3by^@x30s*>k1o9UHqv+O{fEH8QZ zGLi=>&3U-BUd1!wwt*36ja~KOt`7|bA3La*Vl8oUhmK8n!ko&5a;*KFP}~jY(I2= z>#YW#fUWD3@H%93-eE(`FP|FNpZY-Hs{h&C9YDC|Y)=rLfbW>=YgEIZn(Ovw-xX(=S*Y z=I4`K_b@!G?fJT1U+?#_Xj!PS{Qf1T=L$*x@#AuNoSW%!zC2Ek)9HM!8@h#ZyXiBJ zb8hQ?-S;}Tndxoa3|GJu7Zx=|L~*X|*7in+;!>}9`>Qs3EuF^>RGuqUS|clX?}K8k zG|Ti6ejC@~qzPeEg=RK~GK^}&(y4enw#!73!Ctz{e%h;TdeEUU`RAPgDdOeaoU9qs zV?zgv+~7ynD%(@v#Psp=bLBVb0ZOOx^C0q<#_Xm? z=lqoa)d!x9|GJzX{KO}E)OFL;eY@}L+M0H4XVYRS&8<{4b}JJqcc#nF*;u#de(S2f z89TXx4nopvSMOBCtbM(_zXldhu9Ti9`(+Iza{*eJ4f@f!2V@r0PhtIL0?i_p=*N11 zj?J{z>(t}R$vOijb;-$>RF4NbwT&rVR#1?o5ZkY9+hXs09GOg%ysud;&XTR3mO?ir zX9Ii4YGV%HZKJQ;Hu9JQ_!#j|9JhhK+zk}$Co7xcoCc^*wfsF;M_+>{l?NTe3F0*L zclD%$N)DFJDS6h{{eHjQ^S}2&=M5{S-&>|swtP<}rV+z zL8IzsbOsT`XHb0QrXOx@$2@YPbGxo&I`wIzmt*PbRdiRHWnkqlYuPe!zL1C7~aSh$?sj=GnTAz zo2%+co)_2jmRC=5SX64iDQf_UD1EVdB72y&D^(h6HqPI@>SwzDV*%Ha zJ(g*bXirX%{BOQ&l#ZQmk5fhdkjnXHrDYNdA#W zQT{})rFtS&dj0s2u^EzIC(Fm*V9&EX#|Gvg0(ai?y1agB$7IADS?K*zK&E#^;bjN? z1PHIflW^}**JiH}Od3wOJ1p6XazpreeWM#h92VNt35Egb-J>Op<$az20Ww_ak z>9c~aF_3k`V7H3w1+S5A@9FXJGZQ(@+&}#K%NmHypB4J9?MU8(lH&V&7~X#(fuQ>h zj|-PVt`zw|bFP=~eQ!;67k{jQr=`aYkhK!QWuvf8;hy6?ZV*e4^}TW_;_lED#$DT6 zhx`JaU@Fxw0&b)iLI2kr`kPl-F&zrM%j=cjTawz}zx?+vCGhh5LmcAx)5sa7w?vk? zo0*IhZ^d;z6{|b5IZ*B~0Yh;ArVf7K!k#!4YwF!1@qsn;NUYcoAl9e;f1QLs@V$QcJ6Va@@N zL+s$72D7K=8gvr{jOTLC-_ch-9-MYiFm7)(Rm=|*dp(w)N~R~>^V~3D5L0~aTG3MJ zv2C|yS+4neS#X*!+Euw-f(Om>rK&K+G@v?Zz!XoOyt6PM%5dleto<&DG+ysiQC?7; zG&_p<|EbbX;3%Kyd*}plPF~k^59y7;Lh)9VM8z}AF} zZ`T(_NmdJAV)#{&P2qllB(Fm+37q<97z}9C{@gp9Pq>fG>4wXPtH=j{AG@2GV2@IY zXP%9DvvfB~vMRGO!*EF@ct4Y8F!aKr-+B&D3cIdreX$|6H+yc!U)DhEiE3rvgNEgX zSvTEliiG`++O4KbJag&hcH=hOBh+kAE~u94H*tod=Yw(|I%Af8cmwe#J=spD1Zgf9 z?>+J_I_Ak8fo7VSmXozjbCTR2UXD`z6$GSI*J&Ej*HTL2gwg?}1by9k9ywmVb5mbv zyuV-f=W=_Ir9EF1L{PU3)3ksMd#btm=e8sLliph2X+vOIg{=o~mUAe)X|w{6J)sL# zUFq#VU)THnKWGwZR6!bJIgDezFLCEV4FRGp|H}Q1b{Gph?J(t(@yIJfR z^(0-*x_La7tvR1LJ8JrxPEloTb)%B+db@s2u|{9!C)=>EZcyvyc{75HBx8Nh;1hmE3vMY zk{eM4#nL{51$qWs7dxzt%>MSgUVj)>9$c&7HJ(`LOOjZ`e+hsHSqLzAwG_LYzBJUA z*Z1xH{+Xe&FRbxad$ZCJI<-r;G~0SMR)$XiWSoM&;e8oEMhZ@T`t`kSs@sVi^Ci#B z`4>fFE!o)cJAL#FNl)TEm&fE+P!87?DGPiF7Xrqtwx(i`Ztwka`;M=B-~erWQaJgh zKiys}Bh?@S{p{YsWp|XdS_&%VK9NI~VupWu!K|G}P{_a^r;W}$1(l8e+N@;twbeUq zSAzj$PN^N)WrY(*R#R_6|IU68iJ;WsXf1Ogj+QCfnG}U^bm@3-NxCCa;pMJU1?@Wm~Sp@?0bsEIoEUD=N}e#XIZr8+pups7(J+p1;WvH`CC) z_bfkU`Syz%$PE$Xl2^{yYN|kuyUG*@r^tZ@o$~kr4h2)J@Atqj$m?sA(H5-_oJJ(& zj(?tq7243bP&)MK$1TqUy|zc_chXPwmW8OSbl&Mca{Ha0g`&lc?&|Z3s8aD*4LwGb zx&{*IWK)mtmgouE;dP_zXs9UV8V2NDPdabpeFuy|C|17jl#btrCnn2p)I7`II1t&Y z*w5frE@wyc&LuM1ZcP~soYFQl4nI4rcL=V>1Ti$g>}r93R($;ePx^!?d6-}5bCFb>M| za&``SYZl6ExA#Zy@xn}_ryH7&@MAzVqDVpRbmFOmjJuk8Z9O!*8v_r&A`GyHM|DmA zLE&AWmeZLVOLRuL#YDvb#?L${;bVKk+~m|$=W5$dO~{;1nmwHxd7yaU^Icb*tVp>I zuMlDin>w33{h!Rh=oMqc<|{;IB#SE1vN3W5Ci^_xl^_XXdGctYpHBBaa?v4uI{-^=oP zz3)^*=O>?)qgl;fBcrh^P7@kr^dZJiNYK`0K@1Xs+{+`!NChf~{2wwbPHJ|}9LBGf zzRa;6l%67g^g21KU7a5b%?{le`Y`&+t{4y$0b%I?LWq@e^w@{W2U5 z)tL3UG}E8RJTRqwQh>)f&fo9*^Z9$g9WK=Pu;JdWm@0v;R^T3VY~HW5WJGDf;{lK& zi6kYnp`+hOiNX7FxxZyfaSbf)TwOmd9EZ?r<_{hSBbRf74=y*vClBB>kn)v)=N^}@ zldymEp^&Eh@pZh%xe>aAJSfMcyOjYf^Tw~@#wjY?uRoh-pT(r$R@fY7Kew1?QVld! z*Pp>bKB~;B=H!@*3NkI*vjCn{X@->~B(PYR<@Jpqep~WKy;TiQ$4`}vRQA@<%O(S< z%{Fh{Hcx?smQFtf9nDl<%Z_fS{kSR2e(paNJ+Hrxfk1ZjxTO#LIa4mrhz*n$HBXh0 zOUy0Lx_Z>SJ*#i@tL26;3uydkbd2FFg^?ZIlAVPHEHVs4Rw!2>P-zZ<8J4w@3sYS# zNQj0(K?7*gSIn&YEnh54bU^Tf71LP#rYPq*8y|V^Eq>RE`kG$ZZn*h_#D`lp@Xr{u zAy7)v&G>7s`1{qgy(CPU2GajqZ3XZHlaGCuB%NKo{>8I+uWnmrZm5fqz#GgVP}u{0 z!p!f?SIu}cWLQ7z6vLiGDVtta#jkQgzX&g4?KPfF2;;BsrDrm|#RXn#X>2syFK_V% zL<^D$t5;0199sdJkT(D&zaQ+Tyjd2it+(maY}IDB{8GIyOGu4#0~dw;HwL>e)3hUk zELHXR@=QPmNu=&)BoNp-GQXWMSb#F+uY|=K$38c$HRImVxpfQzV$}>Zo-hh<6A!xV zK-c4WrCfoMhab$HxiQJn1oDGGd72g=4RS%0VtjsYFLZ+<7O2BCXgyQOe5+n}84X_8 z^SmFp0hilN;sFq=k9UQ-fjP+Nw=PRw?UdjjQ_nC9q5r?B;=aDF!}W#ihmtIYgJ2{= znb&|n+yg-3IC0r8rS8TlRL4qiigA>-fzCzn7sHqs)xrJfXZ5__UO%X=f9TYy9O9tD zeu)0!`JNFa2X13w;fNdwF3)iN?v=kF#bQH3<4&5&4mT2g5?BC^|H|b%`r;M#H(q~o zhJ#UYjS{V?87%>e z=bVchQmh<+vTrWP>2~BOsA)MdWpug>)aypt9xaDw8751@4#@3NeW^Xs@ny^idGQAY zV^6h54Y1#KLh0R*ZBg;U^KIm+8^@LHa;A7pwGoFF@;dZ9Q~us2wr zC|DVeJa6yY^J|fe`Oz_Dv=ZFgTEWW0!j9;E|4&}{IW)LiNg>wRx7<909=UXe=rDFuGwFPbhs#`pzTQ-Sel0;^MwQ%3E;<3DuGnri zJ6s?ZIWvPYuorH z-0wkaihS|frVoKct-TEN0Yova;7p8wI|SXyRWjCX=#{vY7nvrkh@j@f!FW+%xxN0N z3qMm{Lx1QrEsq-%Bm%l*pRff1Y$q@d5AFq@s_OEf+zFk@s<}|6dRgAL`UIu) zeCZixXG894k%-f2=F?Be$c!d1oLNpFDPd@MIpxG)2OeC-avkv! zH{`=(&}H82o>)p-*J2s}glxiwA#_7ga0_7n^Mh9=(dW}uGRwK9txr6?*mrrWyXkHd z+|mX>)6kS%#Tzwr%9eM&D!=~?)wfHT`GPkh*v_t5iHCOIk_|n@wI4`;RZlnqP7$j6b_T4Y4pZ0}VQ(Br+-b`Ch$;A{}Em&ey5rc1+o|olvPWPFG)c;yk|Wh&lX z-+A}fDO;`z9?XemPoPIJ$8-5aw(e8fC=yt`Pc|>JZOO82pyRS(^YonE&p^OEJLg#x zry`GetFx}PtzGMVa`nnYLX=|V$YKF*|4|XRpbuB^zH!wsOtf<=`{Zu#x%X*-uzMsU zt|wGdLqwrlWY7Pl2r_7!7Y1?(qm75=_zy*6U39ZSG2*pM)6bYTU~x$XwwU^20>Kjs z9$KGy2LYA+jm*^Rk z2h)}h@`y|lvx~@-FNG4N2+C;*ahy5Wek0|(P-iJ=u1dtsQ35L=rc+h{Q+&|X1vZ$l zSnZ>x3t5BBUG`wD7QL76@o{lkHltdY$dzD7`=khCSG#SLYgA+)sw&2=|4A{U)#(qq zoGXevbe|gpi=W2)*Yk?yG?b}We(Tni>ag?nIA3x~imgL2q*Y2wX*f>b-#P~wN84Y{ z*<(8n)#2^FTd^fUe$3)24qxD(&D3k+KYrwu+tA#Llxg223I}V65>uznOc;7ns>0)d zh;}mo!G-1pa)*`kY!(WZVh)^LiNXbrpy-s%34vCr@_s@t=*yH$>Uaeq8!<|LBnmSs zk-=mRUTHvmHf4)3;-K1}`69k;|e4w*w&MeMJv9-w` zlwwU3>d*FMYnN#N%KJJx|N9NSbo9?xU?41}V%YG+V1|1lx?RTbV=^A9QO}=&=XISZ zeo!*Lx3=F-HNf-Ffy$kP>}aGXtLq<(Q~ulx(z5rhr!3DYH3S;*zH@s{7;pTMuzE>T zQzAk+X7j-T`=JODIdlU#j&eyWN1=)OPK9;x(3p5si$hf-a^12|6E@j0F!k{BICD@6 zro_{HLcP43S=cVUf~VWy}a&CNgY?M^>}(@xAK1J=os@ zPh+8y?n*N`b~!k!cjJU^RHSqYqr})nF{$9X7gB3uR2aH2${Eiz)d$(5Gb%_@1gV7b zP%+W)rb_HA4Q67R6U+@%jHX5a=i~9wQ03=#;4w# z@|3@lf02Q3apBV?7JhLmQZ_69B6XGh*j6S z6{m>;EJ1)$4)j;i=9KU=NaT8TcZD({2i{GQXgX+}#R7^bkU+^@IhRUJeMFQb(T_Z! zWsqEpLMBHp?>ZmCSQc}o$l4nM)EqqihmYoSX%c!6%Q+t zzB|csOgZ}_7k~^+M-h8Ih|$d)xw3rtq-O^l{DW7hk~s)ap|G7zylqv4<^t&ra9Yc7sbngz?109KPL`r>+gLsX}SAcqe+ zMnN*yXNR`+LD{aakw0=FE(aAUANx?JzeDuYxz#ZU4eT#iFdj!t-kQ2M{hnDSreJJL-84x% zxT>mYm^O>O9@!V@E&poZhNu?)XcJ$Dt|&i(%8Vkwep0pn1g*$Fb3B7LZ1a{x~RVa8b%Bw4S}s2GY9 zZMPx{{qUNTkiOY_zGuU^&0m*sjQ4jev*AHD!kN{*qch#JHs?O%WF|0>daCQyjeN1Q zjf(pY%j+#_=$|H8cg&j*YPQZkr>W|UWm*X@^($2>mJH@w2C>)c3Jehj!(?f*UnjDd zw%>XxQcefm&~unvTKoP%fPICLs8DfxOxE$3#YPHLDADbu5*JDLu@JEVQ>NOEpOW)> zpG7^UoQw1vmYQTU5iRQ4m^+JVhKb@tsykLDQ6rF#vebAW`Zpqnq$+8ey=gp%^5r6i zR0Js-?2gnVLDN<#x&3h~qikqsk?g~Z z$Mkc?jA@rFR_$aeS(VctIy0u0`QW%)_S%#~twsP}e=iRicX=~e~w^~)-HM-|8bn6P&K6@)CQc~6H{rw`=lr3P~LJz1jV6b(V8V&#+s4rUYe`{L+I zB=ru*rp+EFf|1}}5@GI`;20@)jSF3ZIVF8B552%LEk?~z=^wJ4r7u3jMT;Vy^CNm4 zqJW8Vh@L0N@foN!Yq3=vyz7#&L^JkBmKBu~VsT?cXDDbPh{PvH*}^38CnRg(sbjU39?j z@GKRuy!y0Mr_Wy29nrvUQ#W-p0MeMov@>Ycc2FKr2KGp(D)01-yEU`p$tzjp`O=^@ zXaD2U{b`Y3jXUZlhYtc*zlLxZDncE&`XHfWVnU#;6ZTC$_SpHG<}$X0vLdKNnLvll z$HZ_DDY7hI%`b3A)}%=QbSlj|MZRQcfi3 zO2Dgj)w%IOoG=yW)C1_FO>((a97=G)<%>nz(6H0ft8dZx@=(ML^Apz@v0RlqXW45L zROQOU0*y&Tem?ZH5-lMUTWTtvmX!veDJX02-5^wE!v%0wWzM80?S^G|J}nstTgH7d zWFvffpIhE~+n($N#Av(CM2e-P5HnfF3)L_b07xG{Nwc2U>+@P|fK=O#dF3(v=mCFY zOh^Bv#t0p-`*W+V8@_j6u~;xtezpSulJ>nQgCp}ZGueIp7s(viM*M#M?dkU4ip+cPcU!%z8CfaDO|k=|W=P8Za#SCp5t9%-Fg~Af4wk_^*y!o|K#f#WzKePxm z?>5KCPjpy$%sxjUgFW&1ANoyFL#MJjF<7KwC5!3xAsD5v-fOTiLH{Q!)BH@;J`df? zV0@~q431D~DrkR{e+!82bHJr_vLo`&25#!uJL!Szg#x$+a*^D%+9LO{;6gUhs7(Z-FSH|9(?3uT@ zUD|Kbbw2i+DaYA1TwbrUA9I`4eZDUCu?{V{kW6FNP(x~4Buv7$iNBxG@R{DQwW;PbQ}*s^R8$Q^ zE<_(4uYgTBGRzMQCSOi4FtIPZDZ=|#UyeqWi~UyU1QkKJMw@`9jGAjE4AE6&J=ja} zF)^Zd_JPWZGfIkBMVYpvSsRTa2R3~y#Wy!Fw?Ad;s{pV^Dbbs6Ie92YSz#G3O0lw0 zmT0e3s_biSFVkk0x^`ocbUqLxggyFv)UOxHY7@~X3iIQfFydkk!X2$B)ZQ46ywgn7I@{7krklO4; z3J5&3Zl$OYl`FOKc-7JYWN8W)O~M2%P(LS@%&)1)z`b22t=_MLA07=9&c0A{^ng)t zTD6*1fTWG>FMGC7Ia@r(?t2D8Zn)*)#FbKwakqf;WwxcldaIUvt0$Yuea^BiK~@bF z6E-nb?aCmlZk@@g0~uadJxI`O^#H*sI0#P5`Sy4OpyGXbZrfCCot+vA9=qwWuiG~_ z5J}|pypEtiMFzaevB-432yib{2Ls;gMMcUkwh%7~cXep{zOwqy!bl}VJtxU*O) zUMLy3sW!O^XO~B;m!n7bF(?-6(1Klel2*rI$%oup`j=GuE>V{febur!@Tu{~#X-xE zuZRs=$;3;=E~-Uzog9AXj!?O1c7_cA=v%NV2Y(UUV^|DZJMJNX^RQ&7PWjOZS4@jB z5qT9Lx0+zitSMe-z8Yn1gT^Sk3+dtd5FsNH4eMt`RwR=p6FU;_qZt=|zbXq~QFHXI z9bUY#(PJ6(&hklMnxisyrI^s>r|dhbmMcTBMsIp9nYWJKx4mSpUzfhBE*EQ;DhhRF z^mNVX{5$&r%lnq!-c$HA?~W+fw7&n;U`xSw$%G@GN)2Y8!73n0*aBCbKxCnm2HPDACPDS0X8I^p8(cb= z9h67d?e553G6O?tA|lag>&Q^Xd{p(?QQfWi45?~Mx&J|(}6Kk_PbaC#qvH(&+tSmaB;xIxv>kN z;%NaQ{PehNwZO)~*?Fl>e~GTMKeL6uP7VPuj&-NnK zoQ-pCH6TH)WyOcapv;fa$B7cmdVI4(%M}C2Fx@K-q)Lj4N`@a<)W8+!OSDRDsXEQy zkF#q69k6gYZe8DV@-!G4DXvIb zMSo`ctK)WSu}bme171Zjhld<>g6CqJ;7H`m(K}0rp|M}hFEkblf_aCv3U*_%nsq;NhyP^6#^K(10`B={3GVab zkIA{Va(I&{)4Z!JK6K5C0KJRJLy;^q9FZgJGRay9w$E6oicUVG;6$;UzeLp_1YkGp z96HlFKNcbehw&{IaaO9p-3kUZrqiVI5jND>YFoDoRpsi!phI7BmL<6QQj#NXAeoP) z*4Q-S(f2G1PV+IDjCgx@Akd2lG|`TT;BV$+wNOW@MmGTtRFxPMf|ZNAHxxO7abzR6 zt4^(-xgf8NTc!B8G&MQl>7LVlHsB7J@*l`+2CDPd?)us4j`+1u8 zwx8_KxiFUDJ7vvx^t=`8ig@FB6Vb%^?Qxc{)2TKzO9#?$JF;k5Q=V6T_-fH->y>pi z=~wT2DL7Gv0xEUEv-*f2u$h;BQ2(WRor6dFV0Z!9w2ytNA`8HivONBKbdGj8%K|kr za;ABf&9B%Tz2idLpjZb8y-e=-`l5_$d?9`z4{|J;uy!DdWn8GX`i;!xEY#Bw55Pg_ zfx4WTiIZDTmZCu|WTLQ+NqBd-_GU|ISr3O_V^k`SAu-Gn8RY?ZfhI=DW_P+7<%%+5 z*F&M8J5HKoF#<rkI(1ZpfU)n(rNP9;`2VY7u)B?o`-1_ zH#GoVK%&1MD8cdv`oh|{39CaRzq7cuS$^5p8)e1RuDqk?kA+kG_{an;9xB}ELVFk< zAkOp|Uyy?+J%*o2n|Gz3cKi|j_~UQrX=UU3&@alrx>6$=x}&Fv9CLDMo&lh5*b@8r^X+SssX4MSzqc@hLt~ zhWzhYLGQ7(?UUbnVD%3?t}Bu@;xPb>MkE7rY3Q8xkGpy2Fggp=xj(HrN&lW>(lcP!`}1>$;UAFAK2%1I2=+x?L&| zia_2Ne-QFTgCb zx@aH~VrGiC&h@c~8{wEm=<7nXUNW^~Po~gq+mD}AuS1t*lV;D^8uF!5b@aN!(X`{} zB$!ZC8RTocDmMTgn`P^EG3g=tG!RX(u9hlv-#=t0it3rn+_HQ>UCpDj^<`le6HvNh zJkHb?eA}4OoEbIPDew{n?)uEI8%R^hqN-42U@scb>^4wsIMB#;#sH#KTf@9$O!Wo! zGrO~ZyTckgRgjc38x_n311)~52baVn>0)gZKzz^x$(p}JK^JE015k{NQk&S#8*@x6 zBB_9elB`T88d3N^8Ki z@3H2`^#?lW16cZ}nkN*Nos~fm!cGh2#>$%m1zS=%W}o%`aj<9IBntabG5^mFoQob- z7niIwYKnb{x1f8D!03!gHnx%hroua=ttFG!;=mt7qzSiexpm==&2|&}?M|0v7(CKd zLB54zg0W8?b+n`BCKf)}D+wku=T#TmvU{+v_k{w-$(FZsmJL6a&B*JqwVYyA4xnCL zJYTbBpL72nR?xv>g9GDwq+X@u;MKbR&N=YK5zl4 z`2az1e18Yx6U#tgCX5{_sEi7zQK+1)Fz+)NA@?A;w<70+Lz6V@U6C!9%p@6Brse`_ zhSOh5?w#51WW)XNXuohrE z(k0jmg%PNC?VL~fz}LXJQ*{GH@_7RBl)$G~2{MIS(dltrkH~@e-ZLQ=Uqlm*C6B$6 z9&u?>e0)*L9Ii-OMTI-QeUIl?_E944(y>4(8OO>ES7V(oj*>o9?h&x8IKwZ~pJWwQ z%8C%2BypQ{!$V*6$n)_)S$eW$0IOE#V<~BrZGF*Qd8Vad<-7|mjAcIkY~HZ#+GgX= zHc>ACDWardBNuJ!xpBhWYWK0Xj21UxUc|15RqxZTJrKt zC=2p&@Dzh49iJ02R3;o3>L)VDy2sM(B8U}H({3IYme+>p%jw)qOaaR*pC@MXhG^NT zYWjY*kHkPIzH-U_`mLk%=5J(0sX8iyxX))zO!Q)^kjXGGJNC&Xp~pSsqm5*ea#PU5 z^96F)p5y>gpzv1B^R)&)Qcd4Zu~xpkTPBU3=nX?9kA9X3L@AK41^^g7S0?Sn+)07*naR6`+GejmhMICK=2RaocDPG!f0CDTt=wFN#xwFfyz`FL6l0~Yt(*HoeB zua1uI{X#KfV+ECs)$w={WM?XH3Iss413fZL!xR6ZgczK*6l1tDWTnc1nR&b$F$pXIfgd0ga|3^U!ZNx?kp)lFO{d3p4&~;w}NVf%d~V z@&?{rN^)zw(6Kh;7rGaxQ^w$X&vnlv)5W^H^SZy-Y@W*URIMyWAfS@(-*%r(=dqRc z?$h~pZkq!~-oCvhyQ6SY4G@%4jV>_zHFWZ~6P&s8yJg0rCwnrt64ySP9XxE%@r7Nx8-!JmS(#=uts$`J#O@a zr;}YN)Vah!v;;wy_it5f9|Y(-a;CNHWmcw}w8zv6b530m;%Wnh7l;cw`U9<|=F}`$ zMZnRw+MA-FQn8NJ<9*(Ev_WN_=NgSwi8)`|P=)Q<&O%zs{y-H5Qashn?a6f3F+mmp*)@BDqs z@5}W@=aniFlo+=cB&>$_oBov#)#09+4w(3DYim!^O z7uA{cS&BCsRJ!f3FrPYxgUz)f8C@>4Zf=zEj^Bq)cXn_w7oX7Kuo~f#IZaq19#LjJ{szZ;Db71+Q*Ye2Ws&#!z*;iCFeFaXmq|3?!o)t1)r; zxH_Z}Z2DEL=j18qzYvz5z$NENAFC zoK7IUvy7JCHrrpm6zNNhAbFPq4MBc;0+d?*}u4Fmy*O#rqBgTw8RUu_i& z5|dx4gf3guruj(19#B}bj16iy$DFsktt4NXATfx!MT=1_^QahI758Dy$%G+>?3)YW zqETdPVjqf&N)}a%qdqD2HDM7ldc=8*T>uNE2iuoP|4GsJ^lhtrZ`hNUA3c!7v-GZt zkB!HpQyk6F#G*(_juG4u1FH+^)*huy?Y=)bbWjlCk>IIry_>jWMF(!W$)tmc8SDZK z64^tUareBPM=C|0f8hz`}8)7}%`3xTYWqIE^OZgFc_Ro#Je|o-$ z=R${PS}AT&&|vLM5&30B0n3s{EE z>G#68?@Nst+axnVKQoaomY)nau}&)6qsB41Uen7?xGRHv!C1Xh&_lzLWnK2Q zuBk?4>AxD$2Gt7|)ajY&z*Ll*Q%O=YWvTF(*GStflz1zqaoCttnj+a5q(rCsa!w57 zw-Ft?3J8MY?-$_-4?s8R3Kf~M7ArIlBx`mWs*T(L0<4r@nAwOD>kfm#q_tuhW)|vc z+ZkJNUeO{vem#_3-&Hl4l83ESnXhaytD70`!|S>`uW~U#)dxYz$8^pgz0=~@B{Iis zApi!G#ohy2^}(L{O@V(vkC_w+!IN9_y(|`L@uP+@>zanwR)Dsfl}=IWa&+!yg~X$7 zaGXP(>&>iOm!ELSxat5T*YRWnmAJs#bB@bVK*88#ywPNSU1zu-rYrfQH~W;0j2s6> zab9K9W76iuM1bEi7Xd- zv*wZcFW?ZQoYUV^bKJhCz5sU0@sjVEKm+(xBO2I_@=q$B`&||;01<%6EX%f3WYA>k z8=A5!mF_d|y<<0NqR=~8Y1YzX+&?k>Hz%OjfTHHqE8??EY!gI^s}d{VCLshW%XHa2 zwxN`MD`1k#4{(Q$w2kimMNn>V`HHiO?J*YoF&bRJVCEK|*b^clp+Ru?nAQ1W2B80lOE9-OhtIEq`o+6C?x->EhExMAU zkMi>8z4fdLjByFY7pSL_qpf*v!VR#V2QGDEPpVG0ixg{5FA3iwpM)gXY_{`9wXr!W z=l1QtDa-Tl^hUCCzGgVzuEX+uG4c=)p`Wb%%~A-roJDOdh7m&Z!KiYC8Aml5Acwmm z+?Y2?nclPd0@cI^_+NyiEK|B*{{ah}i_aY1^A@2Hd}S*lh^Z29r%g^M`r%3+5wO|xj&U{>wcFe&u2h!iLujG$*ZCNHM&<9Mzh!zINggI;;g~-)+km3s1KP7VXCQ9|to%j*$|5Qx>39EjR7>JsHM^Ygh`F1-KoUE^5(8{&s25NTDcKZrYT zu><_PEnA1as|qOqIBpn>*<*NNdk+lNSdy31Wg6LG5IU+tSFzb%P-P>_vLo4rP%W)l zDYU3XnPOl8U`^n(K!VH%rK8m2vnkRc9mC?1IY^np{}NhsQzToHChot^l6C=gg`#Mu ze9Fs`d#MOrUPqskgicxC)}!PvBax(ve3VMFgcBGxoe(;lR2={vmWocFDOm9r$4pSV zjJneNrrd}B#{J&2kn~cDHT!lK$VvVhCeW&bPj}wy+qdF4=loHDl$v#`Z7<|LB1}&? z6EY}l;?6ze8v%2Kj50m_X&ZiLrCpWCq4HE=G}&AF1D+pp$(*qH@z9|5`HvgA|D7z0 zUcgNfpAzfaH7d>#>{w;VU0$A9FmhA2Vg0ct6;|9ir*eDX+Qff%cj($ooLJE}WvmRj zXMsm98C?gR5N8gq1{2DXF+21*!qV#zZHk1Zl)p&7TM3=BMD#DE9O3|ltt$-rf#_CB zYh5}o$`p1RNqIt?C=WrMGU4@6(4*I2TI}`}B7(6~K#q6;j5PbaqBuWWGZqXh!JOQO za=fdq|D}wY+gNj7Z_?hatnA&^2{$e{t5G}Qh-0Tb29@jm^{j>p_;*G+SmrpHI)RaF z6C+P53O3K7`i`P|6f8TR&y^Gzm=l|QhZ+xMCOhx+43v&m&*$sJnlfThGHU87vLb$g*k~Em?eS~ zDNWW96HFm&2)fBQmxVE@zK?N{hcFyhuMMMgq(}y$lew=HB>^nLNicbXX<8>py0UEt zzTS_uz!2X|P>`AviiP5%dlvXd1w6u|jQnz{=|T!u6?Qkc{=PKrEXLDVpSh=~+Y5Gt zQ}OA)dB0DTFT9_Vn>}=A8wnnrV<|{5Q71|r)dodpDyV1EwR7Lpr`!3Et-t(EW|Tt# z5XdCUirXmh5fu7*M{^3*YPXT!cvbfw2&sxtFta^CR`9`ppX%+OHINoM5~mT_uIvkW zWmiVd6DYHUO3Mdmh4~baDgyg5onW8fxI=knn9L}HMlL7W?HKtwvgnNU^y&&zoKl+v z{}ij>Na0}SgMcSdVjDjg2+M>@PWOQ^#^)*KUPS&os;`3RkcspzCK6mxT2&;A>MrmY z&#IRdw>iq98#HpPtx?*l4f5-;o6GyM=YH1faj`*L32os2`W@$ln%lJ$H~rWKVxHGV zhjtw6Ju|H9k@6|NUXVftK9!;~^gu8Gp@gb63i4H$FAK2F^UNeDs<8@u-FCe$&nxIt zz6mSHt11lH>6y^pLT?PY#yn!X3MoB8{On~5%XwG*rRDQK`Dn883Z~;snnjs#kC#C> z=AbA&YE)h;5~#P~!d(}uOC=vYM%;QLnJxnG;8oP0AEWZgA30Bg5-B31beM=I(l`m_ zN>C>$J{8oC;^Pp%$u*Sh-F^Jq!NZy7kXGh;tk*7lDv{b+S3S`ay6y|15(1&9TKGd|XU+@Gj`?TdLzxnq#}Jl$kXzRfzl! zIHrOUjZY*86c~b^uY?vrV>11^B-t^_3m-a8lEKLWk~wD5WpU6yrowL~Rtv`q)-8X* z0EAsgPTuxvgQj}`_+}sVPckTkF0;JFutJgupOqgBRz5tHC+9DLNeu@((E!U}}AiurZCT(K9whojm03OU> zkp_Mjavy%%s+cy>by2_M-N?WHUcwG_8((g{W2v{6+C=WGkEV?1SWiPXtOd$Cs9F5!G;1@Q{fT%43$TtF62TDE-@R zy0UhdDWhC(pp^*WFwucJblEuh@^SaCOjPYuZ3lDQ(rL+&p8!)+G5KcoqcW24x@;%L zqpME!9tY(1`A^oIz%Naq9Jg2yZM9y%KP~Un!f@*C^hFYVV5*GO=>~!k0s0;tEIPT| z(PE;Eow6@Kx8xUkbneL8SPChx`;Uqh`ep6jiom_EdNX1sJ&tCUF^Hi!<}3)HY{&bh zZu?tsyUXtz8Tb1@qof>0L5rqLnm%d&hpD63Kz3foXE-DBlLGBvsa3qH*GASG(aNK` zw5e<9VDa$n5Gg3XY@ZgwUz$!0BbUO*?qiuC3z5#lsnx9sMXw?wQ4ib4n*jp_&bvW${4W!Z3(3}ZsvfMv`+d9?gd ziK~WAD2GJpMn?hx&o7?UE9Rp*8Bpp!lbnAcJiJV6`b_yRVcbAn%p=;t14EaX_ z2*KEVX3cV8y*h{n6$5ByrB<86A%jB&ofspj(a*w~$Q+cf6k8q@7&@)YJ+tyeWt()2 z9*sCQt{`S@+0^(8BYUnM^WmLT?5^0DcVJs;>1>4ek zJa2Zo{W2G)s=}cDklK9q0vx$m!2HQN&Q>Fb@2cgu|Fefh2oV#Q_F^2zHcE6p?G6$o zvWEIo73BIHcs>3$h}*15{be$j9d1qF>c|Iuiz;n(=9aE*4N1jAQ@Kq!7C4m#S{w z;{({lfFWTogEX?{`n;6P=!vEZ10piIRJ${82}aT)pw=W z?yoClQ`=NsF&&&H9uQKB^?ZFlq(DX2Qo*sVX79mT(g0d@%kOr$A35ARznmJhi$ARb z$8hbssha+QjPyJ+2foP?4y#0iFOZhUm|_BTxr$E~v-857u49iw(8=lI#%#1%>&J>k zROL8x?`ACzB)gOqjOsvK340#$J9QB}wAFMv5e$0fc?N36Z39guyzfay#=&A9KcSG&6tdIy&w7+L^Vr?YvXqJU0Cxl+RU#D_ z7m9dlJ&UB0I|!W390QR#!~(G8QE)JSC>$_r5IEQD0Its;BS%&X3CwTBr+Qnmf-BW_ z>1=nlO7*;VTQx1#sYHiK=^RXU(4B8oBYUL9kXA`vzzBG=&uEf0{ljwyK9I7}$W zTjP`=6cgyJIn_$c(Krtbfg;wF- z84$zCs0717>}>!v!c6UyX?a;0+96KV4bSWA`mGW5ASjr}wf{R1Jiwp~ z<|q25YN@N3LqQw&v*2bxoZbEmXnC;z z9)C2A_6=+`fXVMmAOkKI$S0#uY&X*QC_x@%+Q?Mt1pz$I-pWwg1BD85r!0D8rA zvcTld9|42H|91WMg1nx;R`{TlfYJb)MNT%E6C@3*Ov8pRVq-PxvIg-jGbhMd$-wk5 zyDknD!(;n8Ty1@pMH%Hl{;T`7Jd@dBl02$L&1N?%TeS`x5}?N4!Pxs=R*({L4wz+M z^shepUT#l-zK3W*L@^erD3-oyo&i45n15``n+M~5-mkGDpQObLxhEM2_MEvZV%@uS z`R(8Fs7e(&^Zj%ekRXo~S&3T&TP_FDH6zAcaFzVU0mQQ}7>>oAexd$g@q^;0MI1FD<4oY&n`p%sxVRJFM(y?3D;hg zA!gI>Ba18-pGjCMW)>F7UB_EYJZuN!QDkKVpc`e6J@NITaa#0|t_6jcwl^b;s0>9estXjaX}Z$bn{} z4VM^6s%#zx9Af(de>BHzC%#hM+IXBmdW*fkS%!j*8OLImp+`$EP1tiO#fCDNfO3n~ z{=1AL*oZ01KWqgBSY$z&TRp2Mvy4yM^Yz=m{y}l0p!;0=EI_rDhTp}FsDrh+Ja`ha z1CJENYQt!ov3(}sVatRSmrcNb;(!m3aIg9gHGv3l@-RxIHMmgCQGQ zJr$56qjX_Yv;L0w=uxAmkg77FYfrY*`7L|qe2Kq&koqvmTsT^&F2GxcE!QqLm?VAu>6L)VR&Aj&p+I3`ga=3&c!*_qC}WRI!?Yk zL}o!qfp?4%mxEi0H2*v)$@6GBZrV% z#UzdtK$s%FUQNj`jnaIKz{`{n_Yk%FpjS`lhQT;YvJW4|@=iFU8#@4}eWFrFbZV&5 z2zk{RGMa9a4?$HQ1dNSce*6EAfAQlq@+`tCF-UT7*3u`aRptL+Wxqrey$FjzWe5aD zaOey*@%l0O-yq(}%N_x{lvEs}CP!#MbzO6*oexU&hDVFo)wBTcblutwTeofKK8{%s zD=;5c$82v$>{ED`D-N__VbV#c5w4Y^AU6tGktFH_O)-Gcn``1V8vpso1~!|q zGfn|S2x$ZNPuONG&0NL^uyd4-2SbF$RmSho%D85$My#e8Wu#?r^9L>B!T3~! zW1k8CltT~I{J-|DM7?d?S_c3Zkm4c<7ATk|f%kvP;w%8E%+}jGoyIoK^vgJoopEg* zo$X(eIUnm+9m4Cmo8qS&tVOnYHX!qW23z6S0k<0E8DnXIW4WoZrOHpf%uBQL7uW~ei=o zgs65|5}FWD3HNFa3z`$n)x~Oax=m-7*Q`G$!Juf2-IPV$ML?vFfCnF;;g4lwkQVN^ zv6#eJ-P`88ZIbK&%Ty`C4l`g(q?3lI$vQU4T-RrRk@N|oNwW|!$e#cS>*iQF5SBg< zE--9;ur4t6@Zbn`K#{ecW{zzssqkf@#pP8sXXTJ&9dJC<+;fOJ%XxsPY?4Jh$c6`F zg4VPo)8qKB3rYD?@--3O2a1%NG8RnG6&PyG8@jM9*L$~vx0FQ%A$S6<1D#Xfq~l*! zH1r4k?|^|3j-Cw-$h9LW|HxccWa_zmeddr5dPJ)&Sq*GKlCYr$*B2ymTwwf>BpRv_ zd`hd_-`Q5(%R}~wV-t1!d3W9ebOdl2hMr((-F-5z^@r*+8_y7ygy(BO71amfC@-|~ zecCV!m-%)LHc>lR)}e(Hpwo76XA2T+NYp@>LY>w?+{VcFySaom%epvpx4wSrIQ zu|1$`AlfxI=6INl%-S`qNhR4SJl6?H7i!ti|8Pyj%G9KSfCDlpIAA8B{t@(40f<8Y z7Xh082GfOF?;np|nI;w#Nv2J*jvb4IL1YlJt&}~1Y-t&Fh+j3eKaTTfEISpyG=sRL zc9rk_30g(S+a8>^DNW!YOlwPHP+Ace=1~w2=0GF*G zorMbs$YMy3LpSJD+6BoXD^2Rnxtlr|OL-%9pw{a%^+cRKq$v1HLul1VebeB~hBxp| zO9JY~lmNk3md=fNj((XS;3E2#T7 z{m*<=Q6K6ddBG~P>@-T?YvAU4kIt=A8%qVeRD+z_x~L6=j2-B>hG76-1zCendMqNF z5zQU>Q@}ISB1i{_oYzEi6&|!h@$UCveZOvmk zQDoV?pj3`8-(#uju1r$ZZ`e^1?;6MOVOZG4%cB8n&hv2=zM;;Aqz!|L&(94fZOcZ%ncCVL^o*<+}+sWs9?~_jR{W9!7I4+NEI{|$Z3U@=4}BY zS^4nMBtP5}h6Wz;nwPb`6qd~YbauuBd^(Nc=;g#LC~~f$q5LzDol5)-H;^Q}ih|7| zp~O8OpJnEylH};C3e=Gv^#PN`TQ}^bRD8|>BQ?fC5u5rxpe5|`L{8ZTp7ti@!;FVN zbkGF3DiAs3IY#m{1K!iU7^@4YAsudM$>f%l9S&jOq&t6nrH%8Xs?A@d#mcer^zF%2 zR?mSlV(OuC7=<%Q96vTEhL)C$GK*Yyd~ahws3 znSjtxVTa)Yut;?*2NN{%pjQx+1HBD2;4%dENbC>`pEGVF5N1iV=a8mr0Mk;(Ca8@s z_9$gd2R;(Ust-HcLuvt~NQF3)Sdii96M6(Z&)Q^2Ltv3^mK)p4&Vwa?S=4)D>yE?L zsd@1rFYyfmfAru!m#OyGeN6P2v_CyGKe9gOA#aieBM7UmpF(I@g;g( zo*!+$$59-XRDh`3AWfPY_Nb_SfgRQPKa~&pzA=dm?c4!-k*t_~jN-|A(6|K0^7YBL znFn&SkbGqvisu*9or0$DU4+n2UN6;)6SHF5maYMv4J5i@1nz@sR={%2jb zH2I`5qL8c?f88vvWf>IA5SPXs##6pI0TK^ok|bO8&Jy7B9Cp5R4C+0J^58ZLRG{9y316HCC!tZl zw>vDb;;V6-FBZIR*qDPPQf0#6j-7CmIkvSqxsJdez}FF<(;dX$N$cIntoX)S?5TvD z*eqF0nq;eXN{&aT0`+>pij_2*&(d+i0F8V}GP;>NSIAB!jxbbDeDd9bEJ;0AMr+Xt z+Y>+o)lZOoeNN`8>(1)*09Nkk}B@6Db z#Bb`!`r~Q1nr0x&TV^I6Pu6rD_@s)aO z-#~D90Cc8ij>jS0(WZAg2J$+led()8{B^X7TP`bAmwZ#k z21G5SQpVu+2|6rgwhi=fWms-&96dlb5B5|GXdEhNun@B19p3&MjImtI{gh z9z#d@!I${+#ou~f{=I`81Uz^?W(l@jHzP&sB?1U|KFv-D)E0>h2LSNWxdp(KUo77$r#C+Ze#m#k1xm$ zhi|k*0g0+#KpcvKFbl0GhH2=v(+$s#dU&PvaA7mIT>NouqP~ zB>4$=L(m_Y`j{oj$q7{XW2<)Ww1W@DwyMk0$-tCa%Xy&0?{-rEcEi0dBfXx-J_ZS{ z20VVjMFj^D1n9yn?rIuUygVKA@Uh>rWYx)cBx}lvCbj%nZ?Vn(BY z)x_YG8YoT(q6qt*WS4*E}j%HM4m0RNPO{5)c1Wl9B?sYy-u=+YH zzr(!Y$aRwv;w<#TXKsJuf-isr5rThVcs222sMvt}^M;?|yAtqzyKw;%*NdtFN3odHsL6VOXye-*e8J5p1ggEuV=S^-= ztt#;!#`@>YmyfUXRvhL4scABG^1}oI7PCtZ%&(NEg)Ykm0kh)9wwFp(U0;#LqQ^7% z?I!TX?hd+BW&)z7$fH;DyxefQ7_8;>E}X@kLO|6+%Q$>re@c$=Sw@Z$|Fr-)HzznJ zPVR-xBE?xe>)J zXg|x_*@kEtPckp-_){VQaz_Dy>IS0}T>vDyXa4Kpo|Y z+}N&F3wxCxxWlj%l5B~8pnlYVtHsQSPxMI{{cKS4;$3z!IB2jqT;Hl`!m81$m}~FV z1V}5um)lXPJ0%AYfh*lfK|1NNtGb~YXse0e)DJSSrrQMUr})QcAU)kzbdeydAVE(A(4g48Pla-tL1|$$Ci_$EOJZyWAOl9h7z>C zWtMElQ~9&~IjZ+&quW$LpgQ#aZ5o~xDDK8AxS;H_Cy}7x35 zeZysyoTLK>(vcRkW`h+Bs0Ld}Q6;FNO;1ml$<3|?e*%!>86|4boPj(AYlqOTRZ^Ocs zyC;e9s4eU*vuV>NH;(cpH%j~u#t+DkkPMqy z&9iZd!X%Ovu3+gw(eNB{IHEU942K?w?ZjhOH4fFtE*l`FCAe3sy?k^l4(4-E_|bhV zB5OrsydHEHsvjnW2k?Zw(qz##Yp7ZxWx$HJmMxz2 z8o9NLKW^kdxkSU3N~=px z0q=_+`|;@J!8c|x!ZwaHxqK=kNhr5gd)8KXFCdZ<|J(dP{)bEB$00=Z3NaC~y6xf0 zkMbkd2e$Qt!XdR%6`whFxA8AjaO`P^fJHc?V|j>B~^b`>j3C4oM)(gr)0s zkTstDVsZ=yK)SI`coT~WOzn*v!9Zbf49Y5^JSBdmcyN9o#XK7Xo?M&KZ+s(eNkzv6 z29I1W?ji3>^+BGoa^U2EQ=r_`szIq2K6Z-b!E85LYRMYpM=tT-_4usTT|0)3lv%sP zFBW~ukHbZZ?Jyfzzxc^|fLAg10_3dviyT^4k$u6W21mAjv2IxOTm$bM&{Y4pfTpim z;-E5hTF+*Et5yR(n7Ec$zGLDz{1tX5;=wrwOIwKE(Rr@NaOAQm?w9K>h!dIa; z{z_Fu4}-J^pwXCMHVF`|agB4k8ay&UE-|~nI-z=RyN&?5j~=&GrXWX3{Gy>DKL&BM zR2jN1n%5l`x>^EHNdq5ObTohT+Qq^$dVz>65vz>f6r32%f<_&&zk=E0((Oa2Dp&;H zyM3WGmqVIUNsbb~a(+m7+%wf9i&C8{2N`g%@`A4969A1Xv`gMv;xr9{^?f`*e@)oI z5kayShYs_&tn0_xKGL0IwnZbi#IGL;W(ogND>7V{WkXR-ksL9n%VU@fKndf>qASoV zdBXr0%)rz;}R!?;`@pqA)C#6;ctZII~2anUMPj@x^z8V{n# z#tg&CAvSKS?&Z)?;xpvOvC7Sc1(IbHan5*%er$nE3%e={(!EyL*jG94aGX#)!=Onz z+Gy%Ikn3%n(JzSyh}$Yt;OZqlN1b$#A6EGK6;_gT5@}LjJ5l)_RTLN?RRgU_LXQP= zc-75SZ!OrPH6)=sX(>m5o=lg%U$19Bz>y*9_tIUJ_|@YfM0}WS)+0HYrkz-WaYixp zh(qPDa^Yra7pQN28GP7bh^f7=$K^J4v8u@1+r8?C84a0150T*Nw{O|SmiVNx3xr<@ zc?g!&N1`OK33@c6UJtkrys@AN$SgpDta1au;taz_ZIlW_Q!C`jF6{^M0|)l5TEF|W zSK^b!EMz*L1J#LT7d-2eur@<2Z=|UYPLapbqBX)(9p6T?;t7;9haFT z)+Yv!m_Nae6qCRbzskJvQ{eca#E}eKL|7fy^YsH)ysB@>;}c=HsBP8hI}P4yXyZ6y zn+9+smu?;c>Ml^_5aBP-BV`mR@$2NoIV`hlvze28Jq{+vvRm7B{XSJ7=BB~Plg5$R z?07>DDt1_d^>M(^TDn+gt}wJCAnRw5+~2JpB|%F3iUI782cHK?n>u92f^-{%6X5jF zitL=WID(VPy4&zN-m76FnOvN}4f}Lx-sF}izr-&d>mL@C8IBv;p3diF@j>q6$ScPI zTdQp+R+JnRNgldDW>4*g=4VsP7&x7iL@1s)iV$dtPu^oW7|#cB+Uz!UN{*VX0Am+5 zP#ZN!XKplYc)61$$BsbUZouDP=|Dmd_@zjTl=$QU+g(5>di)2q;XJzskebLtIb#$a z&7H(ftLlT4BMGi6oHJltcZvshraBeeVTmtLLM&YeeG(4!G;)l$J1O4=M@1yg7&1`l zkZvS5Cn>juR1OE#gBW|v5?bY|val`jDdW=jm(y=I7(XU)cJqK4f}pzn;Jm@{1B@~W zryk$J?9j6^kS}pupKky?ylkv?C{<~zN_^Jzz!!L*Qe?AsOyfC_o6xj|yq>glEKd?g z3nOvH*apXGGQ>0iaZs&p>mB5LSeHkdk{l&IZ#)p^5yxj74`v}CJtRmfuoLX9O8gAF z;c%{37EDe+I7S!-H}&Kr-mWvC4w+}?5Z4GKVs&U?{SGw9ssoZXeCby29{8o(IX2f zLwCVh8ZjUzBo>iQ1w$u6JsZQm%Ma9L7xK0;me-a9De)Eht6|ubAxq3y0nnC-)>Y_# z=>p-Z6iK;3IT>gs(P3yd$|91U76$np9erx$MQN}~eA?)>QZs_7g!TBE-y#iM?jOlk z+*`cz!TdoNj;ZVQh@Kt*wF*nJg2LnYji`iR76mZGI+mhx^(gUKqh*c47JDI6flXkO z25oR^YU+jF^qw@QRq(Q<8sZ$)kcsr+YF+^=Z^t)uXOsB3qAB0!5}!1b5aFHWb>aj4 zNZYDdIh++9O#^Z02s@@pkT{e)`f*&ypd9VaEON_nkp<&N1@}ezi&a}~We6$pi7Uti z4}N^PuM}u2usf_1HCaDtX(b}9;5KM@N}p8=$MFtPRc60)hE0KGMs<8YSD`+{4=T6w z5}!4!*pLPYmBWgU>Z6y=ZAM~p%&@t7qtX!&xjtzP0K}>b)Kq~;Xio}n3Oo!Tfnu68 z0e%C4{4Csqs@B41=9<-|>51W40 zNScM3(JUzHBkY0-4U+LCMN7BDCk`V5zSy_(5-Ug`EQy+(AIS!4-$F7Z@3a~f`eZgZ zUQDs{5cLUC0o*#FV8Fk7m$6r6#arT2$3jB`&Kbb|Xw^I$Mb=Mxj>EqrRW1~QDHCf zwWjoYbq_TbgzA0=f)kqw#yWxuiH*5sYjQlYqizXa+xg=O_KnAJJaQ0rz1M5b4vQZN$Sp$+ zm=0-O^?O4{u`4L?C58}DRrlOOA#>c*0Ypn7w=2Gv_qY?hLFlZW2XbE*kAf0kIh5oM z3s+T^Zh~Af-cxp%@Z2C)M76&j^0YmlJMPaOza(mQDnY?WpW zpkm)q;u{Si9lt@&P9iKjv{}=ny%jd>Z)bR7Lp4*`Orf^xi>a&mL)Yxlt^(&nSrTs`+13b=XaEx zDe*m{2N+f(m-P?s8~pC2OzI`RXY8t+{z{biH=-m;i4rABeDf$M+Y%-IfAKGBna4dF Shq)U70000 ('foo', '.bar.baz') """ + m = re.search(r"^(.*?)(\..*)$", x) + if m: + return m.groups() + else: + return x, '' + +def base (x): + return splitextlong(x)[0] + +def excerpt (t, chars=25): + if len(t) > chars: + t = t[:chars] + "..." + return t + +def absurl (url, base=None): + if not url.startswith("http"): + return base + url + return url + +def url_base (url): + (scheme, netloc, path, params, query, fragment) = urlparse(url) + path, _ = os.path.split(path.lstrip("/")) + ret = urlunparse((scheme, netloc, path, None, None, None)) + if ret: + ret += "/" + return ret + +def datetimeformat (t, format='%Y-%m-%d %H:%M:%S'): + if type(t) == str: + dt = dateutil.parser.parse(t) + return dt.strftime(format) + else: + return time.strftime(format, time.localtime(t)) + +def main (args): + p = ArgumentParser("Convert dumped files to a document via a template.") + + p.add_argument("input", nargs="+", help="Files to list (.meta.json files)") + + p.add_argument("--templatepath", default=None, help="path to find templates, default: built-in") + p.add_argument("--template", default="publication.html", help="template name, built-ins include publication.html; default: publication.html") + p.add_argument("--padinfo", default=".etherpump/settings.json", help="settings, default: ./.etherdump/settings.json") + # p.add_argument("--zerorevs", default=False, action="store_true", help="include pads with zero revisions, default: False (i.e. pads with no revisions are skipped)") + + p.add_argument("--order", default="padid", help="order, possible values: padid, pad (no group name), lastedited, (number of) authors, revisions, default: padid") + p.add_argument("--reverse", default=False, action="store_true", help="reverse order, default: False (reverse chrono)") + p.add_argument("--limit", type=int, default=0, help="limit to number of items, default: 0 (no limit)") + p.add_argument("--skip", default=None, type=int, help="skip this many items, default: None") + + p.add_argument("--content", default=False, action="store_true", help="rss: include (full) content tag, default: False") + p.add_argument("--link", default="diffhtml,html,text", help="link variable will be to this version, can be comma-delim list, use first avail, default: diffhtml,html,text") + p.add_argument("--linkbase", default=None, help="base url to use for links, default: try to use the feedurl") + p.add_argument("--output", default=None, help="output, default: stdout") + + p.add_argument("--files", default=False, action="store_true", help="include files (experimental)") + + pg = p.add_argument_group('template variables') + pg.add_argument("--feedurl", default="feed.xml", help="rss: to use as feeds own (self) link, default: feed.xml") + pg.add_argument("--siteurl", default=None, help="rss: to use as channel's site link, default: the etherpad url") + pg.add_argument("--title", default="etherpump", help="title for document or rss feed channel title, default: etherdump") + pg.add_argument("--description", default="", help="rss: channel description, default: empty") + pg.add_argument("--language", default="en-US", help="rss: feed language, default: en-US") + pg.add_argument("--updatePeriod", default="daily", help="rss: updatePeriod, possible values: hourly, daily, weekly, monthly, yearly; default: daily") + pg.add_argument("--updateFrequency", default=1, type=int, help="rss: update frequency within the update period (where 2 would mean twice per period); default: 1") + pg.add_argument("--generator", default="https://gitlab.com/activearchives/etherpump", help="generator, default: https://gitlab.com/activearchives/etherdump") + pg.add_argument("--timestamp", default=None, help="timestamp, default: now (e.g. 2015-12-01 12:30:00)") + pg.add_argument("--next", default=None, help="next link, default: None)") + pg.add_argument("--prev", default=None, help="prev link, default: None") + + args = p.parse_args(args) + + tmpath = args.templatepath + # Default path for template is the built-in data/templates + if tmpath == None: + tmpath = os.path.split(os.path.abspath(__file__))[0] + tmpath = os.path.split(tmpath)[0] + tmpath = os.path.join(tmpath, "data", "templates") + + env = Environment(loader=FileSystemLoader(tmpath)) + env.filters["excerpt"] = excerpt + env.filters["datetimeformat"] = datetimeformat + template = env.get_template(args.template) + + info = loadpadinfo(args.padinfo) + + inputs = args.input + inputs.sort() + # Use "base" to strip (longest) extensions + # inputs = group(inputs, base) + + def wrappath (p): + path = "./{0}".format(p) + ext = os.path.splitext(p)[1][1:] + return { + "url": path, + "path": path, + "code": 200, + "type": ext + } + + def metaforpaths (paths): + ret = {} + pid = base(paths[0]) + ret['pad'] = ret['padid'] = pid + ret['versions'] = [wrappath(x) for x in paths] + lastedited = None + for p in paths: + mtime = os.stat(p).st_mtime + if lastedited == None or mtime > lastedited: + lastedited = mtime + ret["lastedited_iso"] = datetime.fromtimestamp(lastedited).strftime("%Y-%m-%dT%H:%M:%S") + ret["lastedited_raw"] = mtime + return ret + + def loadmeta(p): + # Consider a set of grouped files + # Otherwise, create a "dummy" one that wraps all the files as versions + if p.endswith(".meta.json"): + with open(p) as f: + return json.load(f) + # # IF there is a .meta.json, load it & MERGE with other files + # if ret: + # # TODO: merge with other files + # for p in paths: + # if "./"+p not in ret['versions']: + # ret['versions'].append(wrappath(p)) + # return ret + # else: + # return metaforpaths(paths) + + def fixdates (padmeta): + d = dateutil.parser.parse(padmeta["lastedited_iso"]) + padmeta["lastedited"] = d + padmeta["lastedited_822"] = d.strftime("%a, %d %b %Y %H:%M:%S +0000") + return padmeta + + pads = map(loadmeta, inputs) + pads = [x for x in pads if x != None] + pads = map(fixdates, pads) + args.pads = list(pads) + + def could_have_base (x, y): + return x == y or (x.startswith(y) and x[len(y):].startswith(".")) + + def get_best_pad (x): + for pb in padbases: + p = pads_by_base[pb] + if could_have_base(x, pb): + return p + + def has_version (padinfo, path): + return [x for x in padinfo['versions'] if 'path' in x and x['path'] == "./"+path] + + if args.files: + inputs = args.input + inputs.sort() + removelist = [] + + pads_by_base = {} + for p in args.pads: + # print ("Trying padid", p['padid'], file=sys.stderr) + padbase = os.path.splitext(p['padid'])[0] + pads_by_base[padbase] = p + padbases = list(pads_by_base.keys()) + # SORT THEM LONGEST FIRST TO ensure that LONGEST MATCHES MATCH + padbases.sort(key=lambda x: len(x), reverse=True) + # print ("PADBASES", file=sys.stderr) + # for pb in padbases: + # print (" ", pb, file=sys.stderr) + print ("pairing input files with pads", file=sys.stderr) + for x in inputs: + # pair input with a pad if possible + xbasename = os.path.basename(x) + p = get_best_pad(xbasename) + if p: + if not has_version(p, x): + print ("Grouping file {0} with pad {1}".format(x, p['padid']), file=sys.stderr) + p['versions'].append(wrappath(x)) + else: + print ("Skipping existing version {0} ({1})...".format(x, p['padid']), file=sys.stderr) + removelist.append(x) + # Removed Matches files + for x in removelist: + inputs.remove(x) + print ("Remaining files:", file=sys.stderr) + for x in inputs: + print (x, file=sys.stderr) + print (file=sys.stderr) + # Add "fake" pads for remaining files + for x in inputs: + args.pads.append(metaforpaths([x])) + + if args.timestamp == None: + args.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + padurlbase = re.sub(r"api/1.2.9/$", "p/", info["apiurl"]) + # if type(padurlbase) == unicode: + # padurlbase = padurlbase.encode("utf-8") + args.siteurl = args.siteurl or padurlbase + args.utcnow = datetime.utcnow().strftime("%a, %d %b %Y %H:%M:%S +0000") + + # order items & apply limit + if args.order == "lastedited": + args.pads.sort(key=lambda x: x.get("lastedited_iso"), reverse=args.reverse) + elif args.order == "pad": + args.pads.sort(key=lambda x: x.get("pad"), reverse=args.reverse) + elif args.order == "padid": + args.pads.sort(key=lambda x: x.get("padid"), reverse=args.reverse) + elif args.order == "revisions": + args.pads.sort(key=lambda x: x.get("revisions"), reverse=args.reverse) + elif args.order == "authors": + args.pads.sort(key=lambda x: len(x.get("authors")), reverse=args.reverse) + elif args.order == "custom": + + # TODO: make this list non-static, but a variable that can be given from the CLI + + customorder = [ + 'nooo.relearn.preamble', + 'nooo.relearn.activating.the.archive', + 'nooo.relearn.call.for.proposals', + 'nooo.relearn.call.for.proposals-proposal-footnote', + 'nooo.relearn.colophon'] + order = [] + for x in customorder: + for pad in args.pads: + if pad["padid"] == x: + order.append(pad) + args.pads = order + else: + raise Exception("That ordering is not implemented!") + + if args.limit: + args.pads = args.pads[:args.limit] + + # add versions_by_type, add in full text + # add link (based on args.link) + linkversions = args.link.split(",") + linkbase = args.linkbase or url_base(args.feedurl) + # print ("linkbase", linkbase, args.linkbase, args.feedurl) + + for p in args.pads: + versions_by_type = {} + p["versions_by_type"] = versions_by_type + for v in p["versions"]: + t = v["type"] + versions_by_type[t] = v + + if "text" in versions_by_type: + # try: + with open (versions_by_type["text"]["path"]) as f: + content = f.read() + # print('content:', content) + # [Relearn] Add pandoc command here? + html = pypandoc.convert_text(content, 'html', format='md') + # print('html:', html) + p["text"] = html + # except FileNotFoundError: + # p['text'] = 'ERROR' + + # ADD IN LINK TO PAD AS "link" + for v in linkversions: + if v in versions_by_type: + vdata = versions_by_type[v] + try: + if v == "pad" or os.path.exists(vdata["path"]): + p["link"] = absurl(vdata["url"], linkbase) + break + except KeyError as e: + pass + + if args.output: + with open(args.output, "w") as f: + print (template.render(vars(args)), file=f) + else: + print (template.render(vars(args))) diff --git a/etherdump/commands/pull.py b/etherpump/commands/pull.py similarity index 98% rename from etherdump/commands/pull.py rename to etherpump/commands/pull.py index 8b54460..91ae2bd 100644 --- a/etherdump/commands/pull.py +++ b/etherpump/commands/pull.py @@ -12,9 +12,9 @@ except ImportError: from urllib.parse import urlencode, quote from urllib.request import urlopen, URLError, HTTPError -from etherdump.commands.common import * +from etherpump.commands.common import * from time import sleep -from etherdump.commands.html5tidy import html5tidy +from etherpump.commands.html5tidy import html5tidy import html5lib from xml.etree import ElementTree as ET from fnmatch import fnmatch @@ -47,7 +47,7 @@ def main (args): p.add_argument("padid", nargs="*", default=[]) p.add_argument("--glob", default=False, help="download pads matching a glob pattern") - p.add_argument("--padinfo", default=".etherdump/settings.json", help="settings, default: .etherdump/settings.json") + p.add_argument("--padinfo", default=".etherpump/settings.json", help="settings, default: .etherpump/settings.json") p.add_argument("--zerorevs", default=False, action="store_true", help="include pads with zero revisions, default: False (i.e. pads with no revisions are skipped)") p.add_argument("--pub", default="p", help="folder to store files for public pads, default: p") p.add_argument("--group", default="g", help="folder to store files for group pads, default: g") diff --git a/etherdump/commands/revisionscount.py b/etherpump/commands/revisionscount.py similarity index 93% rename from etherdump/commands/revisionscount.py rename to etherpump/commands/revisionscount.py index 6612894..15ec72f 100644 --- a/etherdump/commands/revisionscount.py +++ b/etherpump/commands/revisionscount.py @@ -7,7 +7,7 @@ from urllib2 import urlopen, HTTPError, URLError def main(args): p = ArgumentParser("call getRevisionsCount for the given padid") p.add_argument("padid", help="the padid") - p.add_argument("--padinfo", default=".etherdump/settings.json", help="settings, default: .etherdump/settings.json") + p.add_argument("--padinfo", default=".etherpump/settings.json", help="settings, default: .etherdump/settings.json") p.add_argument("--showurl", default=False, action="store_true") args = p.parse_args(args) diff --git a/etherdump/commands/sethtml.py b/etherpump/commands/sethtml.py similarity index 97% rename from etherdump/commands/sethtml.py rename to etherpump/commands/sethtml.py index 7b6a0cf..6180d48 100644 --- a/etherdump/commands/sethtml.py +++ b/etherpump/commands/sethtml.py @@ -12,7 +12,7 @@ def main(args): p = ArgumentParser("calls the setHTML API function for the given padid") p.add_argument("padid", help="the padid") p.add_argument("--html", default=None, help="html, default: read from stdin") - p.add_argument("--padinfo", default=".etherdump/settings.json", help="settings, default: .etherdump/settings.json") + p.add_argument("--padinfo", default=".etherpump/settings.json", help="settings, default: .etherdump/settings.json") p.add_argument("--showurl", default=False, action="store_true") # p.add_argument("--format", default="text", help="output format, can be: text, json; default: text") p.add_argument("--create", default=False, action="store_true", help="flag to create pad if necessary") diff --git a/etherdump/commands/settext.py b/etherpump/commands/settext.py similarity index 97% rename from etherdump/commands/settext.py rename to etherpump/commands/settext.py index b96cf1f..97f0555 100644 --- a/etherdump/commands/settext.py +++ b/etherpump/commands/settext.py @@ -20,7 +20,7 @@ def main(args): p = ArgumentParser("calls the getText API function for the given padid") p.add_argument("padid", help="the padid") p.add_argument("--text", default=None, help="text, default: read from stdin") - p.add_argument("--padinfo", default=".etherdump/settings.json", help="settings, default: .etherdump/settings.json") + p.add_argument("--padinfo", default=".etherpump/settings.json", help="settings, default: .etherdump/settings.json") p.add_argument("--showurl", default=False, action="store_true") # p.add_argument("--format", default="text", help="output format, can be: text, json; default: text") p.add_argument("--create", default=False, action="store_true", help="flag to create pad if necessary") diff --git a/etherdump/commands/showmeta.py b/etherpump/commands/showmeta.py similarity index 100% rename from etherdump/commands/showmeta.py rename to etherpump/commands/showmeta.py diff --git a/etherdump/commands/status.py b/etherpump/commands/status.py similarity index 98% rename from etherdump/commands/status.py rename to etherpump/commands/status.py index e2961f0..605769a 100644 --- a/etherdump/commands/status.py +++ b/etherpump/commands/status.py @@ -61,7 +61,7 @@ def ignore_p (path, settings=None): def main (args): p = ArgumentParser("Check for pads that have changed since last sync (according to .meta.json)") # p.add_argument("padid", nargs="*", default=[]) - p.add_argument("--padinfo", default=".etherdump/settings.json", help="settings, default: .etherdump/settings.json") + p.add_argument("--padinfo", default=".etherpump/settings.json", help="settings, default: .etherdump/settings.json") p.add_argument("--zerorevs", default=False, action="store_true", help="include pads with zero revisions, default: False (i.e. pads with no revisions are skipped)") p.add_argument("--pub", default=".", help="folder to store files for public pads, default: pub") p.add_argument("--group", default="g", help="folder to store files for group pads, default: g") diff --git a/etherdump/data/templates/index.html b/etherpump/data/templates/index.html similarity index 100% rename from etherdump/data/templates/index.html rename to etherpump/data/templates/index.html diff --git a/etherdump/data/templates/pad.html b/etherpump/data/templates/pad.html similarity index 100% rename from etherdump/data/templates/pad.html rename to etherpump/data/templates/pad.html diff --git a/etherdump/data/templates/pad_colors.html b/etherpump/data/templates/pad_colors.html similarity index 88% rename from etherdump/data/templates/pad_colors.html rename to etherpump/data/templates/pad_colors.html index 39cdf25..44b7e36 100644 --- a/etherdump/data/templates/pad_colors.html +++ b/etherpump/data/templates/pad_colors.html @@ -10,7 +10,7 @@ {{ html }} -