From 52737f629d9afceccddd0ac6ff1116e8ee37a4f2 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 15 Jan 2023 20:39:07 +0100 Subject: [PATCH 1/5] ENH: Add circle annotation support See #107 --- docs/user/adding-pdf-annotations.md | 28 +++++++++++++++++++++++++++- docs/user/annotation-circle.png | Bin 0 -> 79545 bytes pypdf/generic/_annotations.py | 20 ++++++++++++++++++++ tests/test_generic.py | 28 ++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 docs/user/annotation-circle.png diff --git a/docs/user/adding-pdf-annotations.md b/docs/user/adding-pdf-annotations.md index 54c451547..6644e3100 100644 --- a/docs/user/adding-pdf-annotations.md +++ b/docs/user/adding-pdf-annotations.md @@ -104,7 +104,7 @@ page = reader.pages[0] writer = PdfWriter() writer.add_page(page) -# Add the line +# Add the rectangle annotation = AnnotationBuilder.rectangle( rect=(50, 550, 200, 650), ) @@ -119,6 +119,32 @@ If you want the rectangle to be filled, use the `interiour_color="ff0000"` param This method uses the "square" annotation type of the PDF format. +## Circle + +If you want to add a circle like this: + +![](annotation-circle.png) + +you can use the {py:class}`AnnotationBuilder `: + +```python +pdf_path = os.path.join(RESOURCE_ROOT, "crazyones.pdf") +reader = PdfReader(pdf_path) +page = reader.pages[0] +writer = PdfWriter() +writer.add_page(page) + +# Add the rectangle +annotation = AnnotationBuilder.circle( + rect=(50, 550, 200, 650), +) +writer.add_annotation(page_number=0, annotation=annotation) + +# Write the annotated file to disk +with open("annotated-pdf.pdf", "wb") as fp: + writer.write(fp) +``` + ## Link If you want to add a link, you can use diff --git a/docs/user/annotation-circle.png b/docs/user/annotation-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf8bdf9dd00fac5dcf7626c13dc9fc1e3c4a5df GIT binary patch literal 79545 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

&5*ZXUKcy3iv7>sMdI`cYbZf>=fwl3O zO#)l8BWcfw?!hi1&#Os=VMpcUoCjIRxks(6Z)7i@K&3$iPKJk2*wp#O!Tv@E#6>!7 zY#g1QP2I^dVY6}9Y@?dv*=DazcW%+L|DnOd-#8oB-E`JQDKgZqN{QZk3&$UE>l=HH zJn!!IfI3p~ZL_kz#}&TqMyf4sZ8r0 zlJfE#Y;DCbvmbMS7ws-^-GEb5^YpLu*RG9l9fQOXtHcls`5E;&7vhEOc+=QQeA9Gj*E5G_1(bpuEqBE} zO3g6&(KHiVZr;qw&6Pwh`10k;SU&iz!n{rwb$z1N(2(`m{U*!xgoUvU($D!ccK_?uh}O!tXt3Ztij~yK**pvI0XfkUN1H@xsHl@Bos* zX&%fr9!Ed}8wc(a-~md9q|4wu+1+^R3%4T}Gh~P{r;%*OWo9tCzGvr71>*sHG%n(g z+9$W<=?)TgO7wIO5lhpcr^113!jE;{13w31D@)>{~!Mxdn<&j4k0@` zQ6ecLdn6P}LXqgoG}zUBXAL3n*H2I$>)Ffw8{aKd0HobSrrMd_HbXKrfGy5r;FB zA-&S4Gpkz9;S(k$Sz#?*P`L94G8Z3kngwYl5FF$*l+3~FP6DhDgTv&9&><%$ojv!@ zpvrS_azb{(pP3eJ0x3iTxl`0aNbboZ?B;#=zMh{vEP5n7@4n8Fx99Ll@u{Fer=T~j z3AwE9l?W2j9>qUCT{syzM&M~SM*(m|p8}{RJQ)&v3SwS()Q)hSK7uO?0MGlWSj~Nw z3|r}S8&74)w4Ep>Bxq@kjSoY(A%KU?Xci~U1~H4~2sseWSbdxwQtLhDfyoQdo}@40mmKGUx%O2+9~(L*x-?Y0bGT{TjqIs;wIIC2KehUZYPL z1-ZK{EMHjK=-8fv3J+`$>gd_|1rRu>x=~M;eoyM&Z_!qUUm3de`(<<7m$t4ez&_Xn zethWLk5(0CYKi?tjV6#xP31 zj;2h#a+hw4qvJ3>7Z}1#&^=tg`^y_e4x)@+{jNfWO%E)_!aFVdTF)s1P=PlL%}wIk z*H0`a&Wf8o2n8#G}SXX2awp zlERMbKb&E$U=3p7qe~ByQs4Xj>UNr)9)l&z0#gu6;N?q6NjCt=<68mR=7;Dre4s;< z=Yj#{tHdTwY|zCS1WGOCbkw8#t*_z6WhU*a&PHN1teOaO^*wYgwDmN0<=eim3bo_; zm4!1n{lXl^){UtqauZOTNDqpEfqmC`p$3IL>R&eLhNIJtd-mjItUvbrtJeI!k@tpK zPj-I2F|=!Fba;ZHe?Y(e#=ysJ&Cf#d(wzRrc6Na{-jfqT=VsiJlF?THSiQ6m$wRFR z7oIVmGAM92W36ER7T-hE^b>6@9Z||!JeKQ zfQ~MUuTMyMQg0Mtfe?zOdQ@%j(f<|WlUZF5(UNR0dR(Lh#XiVFivR^BX)5LA&CktM z@pznp!#w8x<2^UX3_&Qfa3{c`i-mx02A2jBOHT#`B_1aEyy;;L0>w4{DQg8ak8gye#K{+D+X6F3+?LJUVBXem-hv-8m-IzOlm39R?*Q$JS9cEQ5O z$qBToq`dsrjT@Od$CTPN0nnm1YF_}Qi-b@l%}~HgeTUsz`S}&;bU#yMtitQPu3nxI z?yL*R$r3?c9v+(RZOaG%6=Z;86u4qFu!HVj*{T*9q!wLQXARr)TuX&7@xTuwn}UsR zDNxBGTo6dIFb&xUI4L3iZ+GhbWC{7h1mJS_1u#E}zt+L2PyPA&zJhu3n9km;?HZ=w zzS`YQbQfU;ARs|o`ZaYOhT+wuU7kfXdc4t`${ED!Q@GL~-JtTc9+mwJr6KZ@Gb!_i zAR0vyfKkzEVM)6vJFT^WTn`OIVFguzS-TlZ^N9%?Eo(7GaXsD5mhSVDSovOgAz zi_1&siL7ya;u9mMX%S2_;#opb0vDi|!>0gMRDn*IL$dsFD*2&@Y2?ue-UPSSDNT|TnfENL=>IWZ%{ zbKk!2_y+N6t8|V&#%Jm8|BioWVwcx38CZS5Ak_mAAlHh!od5c53$G;E?tTxHEir!u zP>+;d8a_I{VfU6T_u+fn^6BX$ohj{i7kVyys%sJno0;qT$XRMyZJlU2p^jlR{{8^tQ9@QbWnW6>zu{cqT#z zV^G>h%fFwV=A>$AIn??AMQP^T>Uh0`H9aM)rLF0-D&uYBAY^jp`9gd*XY2F`W06+)-CG(RB7Bj zpl>Z|!RWVKo9QFb^nC!w9yiF-IofhkLyEY@F<|pjf2;gEGg@&!k_!Op=ip?NNI|Ay z(*z1YSihy$F|wcy!Qw*}6H#CydZ80kHn!>n`-_=H5TZs-p(>h(M#*&zCYxnPXCFeu zgW`51@4lQ>8Sudx_Z?D?SWN^u;Mh{*TBWP-e)lCGHhAXHRx?E;rKScTgwbn_z&$A^ zSL|5SH#n<#m4e}hM5o;Q>UeeXT!dM&uhh87E&l{{!{&{*U|j%!Hf~4=g0wC#C)qi} ztcqKg|2`Kpq1#u`Yl6#C$%MrAIy#D^&GKUmmc$70mY8*Hy5y~+-N-XWnORqnyEyK) zL2Rw6>MTxo#Ac4(4lEnndN=2YSa^UJHQC{eILPOG%i7)Ibw?By6c4((x*`dZloqLO z+_1qM37d!x2jYs*j98ZdBcn4Q;2{E3vL21@7X+0A2nLurD(YvOGqy{gZdqQk;i>Y@ zB=1@KPiLZWr9qT}##OO)E#RD!D59fZR0RmCOv#K_Cwmt<)@^gF;3tq{jFSf>w~(eE z!gy`<^(h~cO3IDuYp;YCtq`wA51)nI$Iin@Og1{Z%KEbDYxv4k(9h6cqihTFq;X>- z&&|*KLez&s#53@@;+GVx_(h0}ak(!cl+f51#2pmXMh|X4dI>3zGjdK)d0^#|4JV*) zNZcOSE{9|4Nmtikf4^_1U8Kjx&_xkFfMEFSQ5^t2{`~p#``dhLi!)gSWwk%gzw{1! zl{_v{m|O%Y+=!nFf;JEue=~v^Div`M>fGudqBHZYb-k%dV=mH@sg0$Tjs~+ zN=jm1)!)0 zbPmk{>RTY$2)axgX*|d`AN6$9ceU}IO`sRhsMHN53ESUG_xAS!N&z#9<${5+^!AJy zgq-iL^>ahn03vJU%9Xet4t+Hmj+}UIGMhFzwsCXf!K*@d`mA>DJj-+`fz_ze;JM#n ziTBg2bwAMr0tE$T&*q&`M!XzwIr1ZSCB4)}HPbwk1rZgOKb^We@r_ii+~nNnf!*PA9rBEfr%@K+PRRGRq1e5 zGht^2dU2>?yuIZhvp)`{%=qeu!$GrKS-nG?>yIkJb2IdX6ue>OA~WJ5qH6H$6rDVo z6TO{o1r-kOO*jL{2~G`1=;K>zP_qzc0w}W6T)uB!Wo=GjS`XP7J-AD#mSCk%dhNjO zz}i6ngg!4WOV-4sw2^L1Wrkty+G3?U@Gzj$*a{?dr0L9mp))=<*5+>xq$6a55fKp} zH3Pc=BBBXruOV!$tTI7c-&`TS&UcuB3U_+J#VX?iy!Zj!Ux=t${%Lup!;L+LEn?iy zkNPj4Sd%|?QVKCD1v(vDlUlclqBT@d*gjDjWNn>%{rVx{gVzS|q0a6s(R4QH0GEn# zMi+KhdQ4JXdk|#UQjqrs%No&+vZM#Q6~!biZjL)Md)4fkCzc zYC>Af1%xh5lgMdkSU`tPki7hRWoBZ2tHAuqEo?(R)qdi~5BlTDANO)~&B@PKLm7qV zjoo%4CB;l!ZP}0 z-zw21N!pJ0Fhn&gzJ;L|>N9=?2kHh7ya2xZF@CMg(0rHm$ref>rgWgXVCFfKkigvd z?knC-PK|_WdE4z}_^Pp-P}v~bLE_kv2E6}2e~er1@so--8tD5kFKZ{l6Xya`-JLY* zt+&YkG_sK#u|aQ$mjEQZdY3N!*q0!5P?%?cJRbguPV%;j6U$3hxRyCq=>5~Uoj;+q z9_oyeG-+36XQoN_7vHkEUbxFJ{-89U`T|56GMw+%?;+iyvUgy>Ls<|dFYaOyt~HR9 zL(GBwxm_Aj1AcJ10OEj-1IkYrWnEP>0W#rmA_e1rFI*0$mdB5M$RJL5T#J-pod!0R z^m-FAJVr(q;Lib@0jUZc%#F}lpqf$~-@k@RZG7~|8**M0iR8@&n%%f45#TJuaX`&D zUne9W+cKm9d~ZrSYA*D|e}G=29YPW`j`x&y5momyv9YGGJnUpk?*JZ|fKnF>4Md=- z$7e}D)NE=G_%Uc9(JQKDZb#LP{1;U6F$}UE{w39t*Y68&yC|?8&>Y zki$HT7d5p9F@eYM11~5+Nj$m$EJWfBoGSS2Sdl#0WsCQ4$e;T1KmhPie|I;qHx8zJ zd^lWefH5SM!yvr{=EFK@^|(6OkGx;9B&IJzc!2nu{Is-wRI<3qH-G`a5{Q2l0g7^PNQZ7vkTMMcE2n33?6h}Di_&u4StGv z(~i*UEGKh{i?u+rKrzTKGK#tu*E*Dfm+)kYMl`Lgyxy0ZNX3_i>z)%!DK)Qeg zq*Zkw5O&$O-DKUHoZRej6JC4vX8wGDqq4Fkm6g`gDZKawaC30pQ+N;r=rhkS*70U{ z{NTrG@02v}l#LQlH9mnxC^B1EDUVU7N+b3Fo0*VyJ#aZZ@vO{D)*|+o#9H@1xAd8{ z{la2t4>n!b-VRCzLQ8AW3EX1L)ZYHpRy%gALrah1rmE-NSstm2K?nfbTFa|9-!HYJ zG$kicNc$Fi5r9(2cJ1AD8M-4h_c00O%>y^A_}X1kXj8-o?f9;DWC#hEt)qtzFAwod z3@VUb?X_}k9-bbGPB13E{OVE@pa^lBqheu9#8;Y`DLcZNb8#|RzW;c4L2gP+T-+sP zw`Lp=?U_}~GomwWwF_Mbn)#%Tu+i9;ac^O{)y2WiE{sr^^z?K|-vTPZ3>ddfSx^u}BgD{I#PNVG` zAj!a{05vdCD51P?K}OHXmcc89YBQwsWMN%npZ3znYPAc zpUcx;sq4r1jD=%`%9r&OHTjQs5y2rr=9tSRcf#t5ge96 z9CwUI9v8m5KMM<_iA-drp;d2=afAfim0aiYhAkv2*lJyt ztkKjA4jzLKcaNBlnU!tP=9K7od`slu7_q3$CL&>{i1IPhK;~d7g9A5<_We~F-lXlo z)AU44GP}ChdrMU7-{HxFIOh0z;u%x7qnqt98`h6ZM=1rP*C9M8D%!87r-x1DPQIr- zJq5WDwvcB5jY5r$?M4VTO1p|SCI-6lNy&c>>u-$vm5v)76lx}*GKIZ)GA0UH>H(3! zYVH9U4Ea8};`n+oEv{gR=NUlBYbgrMl~XRrz4eKhN9YlC2w z!VxAaLiAIBG69Q;G6jG71@&F*Iez%lyz4QF0tEnWL~CTTyw3CC7F{}b_0wyV#UNe7 z&89irJAU1W49GDk68*IFwN4I238ZXEh;MuQcqJT1fa5R=fgZt9hY}L1g8(_=TrF4~ z0~^w@V8WKU7S{*#i;Vl{N^FYYoz5HggnG=f4xdv{vGS;w%bMKu6A~QE|(w+0c6! z^^C$Hs7%$=Jc@Yz>6L2<(y)v_Zgmg?5_h+MUea9Q)Vh6CR8UY*WaA0GMywuK#)aca zFPn5q9e`CX?(#c0p%f3-jQ})**{UIUo=0!hn2;Y&_us{}O_%X9-KN1~aVPM=v9Q;zZCD#s^9^@WQCd@FBA8E}>7&vlSWXn*4t zbC!BlCWr@=XosFvgsGQae>J=MzhQU_)qI{+pc;F4|302% zcT8eAM2L5wGHj~8Ocb==)?6w2zWYJ+0b0nPZP;3C&<#xN%}7s2Wq21=5gwjPe8Cq1=tL(7HP=yOsy9`kPa>y+l|13+_BJ0PG6(cxHJ zQqH%)qrnQ&tLYBJsDN}jqv)P^*bP=ylGU12z!u+6C)|_j>u3J}tls-iSO?$EwYALKOyvPN0uUNhI|I0RC)w)Cn-JOc`1=&%8}PVe>dszcDNM;EC{W`OB@ zU`8=n9lh?u)>d{lOfNzSNjjxu&Z09!G(6l4Igu^nPT9`*AI2 z1|SCjcEYHadYmKJD?ZHr#M0u%l0P`HGI4Z*EW$I3k8Cok^)`bW`h8zfLToI1LhEYs zxe@Tvo9s3T;((@_zY&CBWP+PxQSKY;5*5sSAwAM}!u+U-qn~q&fAk2<@y@NZWS9$H zL>qv_p1$7R`xgI!Y9(p%L6M3w0taciUp@zx4gup9Dk~1A)i5+c7E#Xq9F_dsPG{%< zHi&)3LJLoZlM+26%eFRGW#F8LfnWD7lv?>{Ucfwz?4t1ILwD!5T3B2kN(4a(hn&{< zfgUt^L|eZU_K;H;hV9nW=|>jawNVL^ppZ%heb$?j*ddc z3Av8fzn;a;J0}9&+{SUOF|Mn_HizVuLEwSZ2BtP1>^%8kj=q9ilEK6M`LlnA3s7(R z3__Ap)fyb*y~Cu@o_ckWbrz~}5RG7g_uITi>Iv9q1nsH&Sdf9b(DwCGQk9d0Sj*P| z*&R=xIO|O6W%gmYVMl`#g;&{$C8d4BPYc`FtaAX$6Ex^uT?y^(XsUrd&EgrM<-?9S zs40p29^Xf=Wd({h;6Lc;n5Z6y75gfw?JKgPcge>Ks^l@MRAJM^*_GLY21)PqKnaC_ zmdllFZ_%Gx+uB}Kb_>thVrQozDd`UAf1=Q~mDZ-RJ%y)S_w!eUqJf+bQMU!a!D0m^I<9~ zirAPK6d0fr6=%;&Y8VK6H>q?Bq3Uo?V0V%JFy;!21dbrAE@O*Sv!n&VW$U9q^ap%^ zdtw;yJ>;*%H`-TP%2k8B;!h8k)iV1q&=E@M^=>WEB%o??w7HFOdh6O*@WXUeU-`&e zA1@e>;b?*k1zkH&e3!c_<^9wYiR$z!ncCQ>VaK5FhSCI71(4C<%6+kb9BOK6=AMCm z!X|(>-w!mSf7oplu0s!u>%A4(t#Q%m>*uDO)OTQy5Bt%l(uCU(KmpVaR*$t5b(mOA z6za2u{`sDcY=L&c$F$Sxdvjz~S}`qhvryXNJ^{i+S`$v0@x$1ln5=X@DXGWLzqe-` zCGc}e!KRJB!Sf;T&O|r&Uyzu0%c_?+!S+ZaFiLTL)NaQPgnE%p1WdQUn(-Mg#QCCT z#~rgVWTAHKe6?Tt7Cd^)TuAflpIiDEwRs}eWR}W^vjy5FXW&d|JfTKG(jB`^%7tE?t3Ap5J*_(B5&#B1Ws|Uudkx>@~ivWEDV}zyl@)A4mObj-31!1 zI&|M|2Noe>M7)uvh8x-@6i-npk^tucQn9=IIw)5Sr9E)Z-mjD|5S~3fFMdT z6rAZtT3cIz_kgvLe8JrK`U{SZ9X2++A|eXGed)n9XXh^;Oa(HCDVS(A3EgZ2Dl-1j zPkQN%(1xI39ydfM_(kG)BPW+F`l40~grAFdLpGFX! zF0Y?^?_Ow&2N%yn>bMFLUf+EFY$23Y?SNBh-k!hiy_Byq&oxIIxQ_24nG)^lCXh{* zK_8!~fB`{Rfl)9=;w@~y6?3Z7LU+ER63f;&z`veTg|@dbc<1RYR;g#aU1j~QEEXbf z9o|jUaok9;crrK$e{ApQ=x)46KVzOs zfnpRHNTQJW0J%!{8)T17NC1*RYBh{UarYs_SOwsm|M->+$tI(_-g_Y2@kEz}JAV~E zIa)x>rFad)nQDSZLKy0Iyj@ZWwjtW9mukLy_b9k*2uPT6RxM*Y=XF#lCePh{UBz;0 z|6^dkzeAUPhK9HH(L;=es$N4)?ZDU5HhzD{Rr~}am)7+N3F*j_UZv`8l;8QykUZI- zfCd7H4@=-W1#d1CKVa(vvJPrb4yL^zC?$39z9IFLcpNhfiu$qfxY&j(D7vk3XD^XPVozjUG8r2mx-C2 z(525KdTXAb9tS%0)ZXruY^IEo5~7&C;KnAL?*`X(p1f920Bz_Qr=V3DAy?jmOpNm)in=gk!Jh(9c=!}W zKfK+;K67YiE25lZZxH)wRc8?Bjo1H#J8GW@uVMT8EcJy@NC$qA{Mf?^&Swf!K{%!g z*&0{WvJ-+ZKH{hG^|+HitmarW9*PVwqlY=ff{7Ya%p}j#Fk!;$SaxRSdSri$$EV4} zB=egI5mdMg5>-CZ+jnS-#pDgg2>FR-aOCJ7qLxFJ>P{*#_t0;dgVNtOxJIKrnC@nRC;4G;9@2lHsjIkxY+xch8WeFHy-V1i?RNLE!dJ|Jq zzYXorPTCgd%dGkLC$;sYlo^9q2n4j9J#)tM*%~A}n|-*lLLAD3pAQ6F63@9Yb_&Xr zKDVTArdd!3-16w(3(_#UGx>eIv4OdHe18635SO&iv_F;cr}K*A3pgYDH@Q}vv$DXIBO1t0Oo?WHgE3c>3>P?VvOd|DPz19gsRI$ML8Sc zGkIa|D!Rqp3kzzuk`76}{8GDL|~@^90U8fZ;t@RA||Jdq;1@@vloKPN>td zxu0szqZfTo{VFbENk=FPp2NMfE^rdrb||6+Xz)&r&;IY?wHFrd(G#s|N#o7txyjP5$5<)9&6j@Wm1cv3aAW>uL=7(||4#33_95N`J38sI9W%`F}E?gO~g>JoB<+;}dz(StTv&P*u-1GX_ zO{eL~-d)Mjh)V%kfNO$ffw>|va06u5Ji@eNjj~jbXb_u_10-738WChl3I^;NiF<_= z=I8e<4?CK=b5TuqXL^d4B$=W_F@`lwylH21}<3QYgpjlh4v(x;!OXLE)%m& z+R&DfQRahj}!9ft1WcZgKKaht6KafD=@KX+$n^!MnDCxW6 z^1v}p%CVR@h16XeY0(FUi@Bal;~%0`#eGTWz2(q@EEmQg_wC8*nCxY^Z5t>xB%2No z4QX6N3iWP)A*keieaqwGI>FPg;Nv6UIy)T|bz{hfKUM>D3(9oJcX5N0F-s(c3p{7Y z1X6GCX5i3(ufgnN=9{f_b;`vHOyfO_=_BOFYOhA%yg4$-?o4k>5HOV&U%N)$Z#!I0 zF(L>NZMBGQ@G}%1$j3eh{S2f%ItmB0kJ)B&EReYtfPxLIQX%$vMHddZS^8t?|@5?*)sR;EuokINRqMr3ias~Xp=|> z{P+GH_|-VbRxqH9S2=X>=(U~y(gKWbz?>o6nD5@bTX*|P++>AsGUT&>Kwvqbpz>J# z^>KTY zxB}i!w1oZQ%`YkW0R9k{jGR{H0`3{l?zhSc3Rm57k$gf!!8P6tRv#~?dGe77qDTA7 z22p23vcuK~6oo9qWyD=hgPersuw@)eknQwvDjXM-THKL-ZfGL_A4Qo;y7a{lN&hDy z(y5;~AKcSnKmPwkSJ+M98)J8ciyo*DFCVmF^0Km|8x@uyORPdqS68a>%&zS_?)E~6 zHSy`wlQ;ep5yr>vf4A)j8!cc0$xhl3A_LQ48MOwl=O>MC#opRl8(+TPII1h-sd5iG z0NT(B0$^&6`ZxOFi(DyL@vaVKP0fM6zP-wVC>on{HTR*E!F9z+|MmO#6-r6LW;z}h zjDYw0;9Z8pbpPKWkwZ>Q5x~XIVa&L~x2~R^q`VwZY*Qd9c0qPITHV-e z?D_@EA zy?;`P4+eSF)#n>vdIy81tg4FUcn`aqY9`ok*pGr7(aDXc7igH}M**YrU2(7BeWfuu zHS*9%Ev1p?nf#P1N(_NvJr-Cppeo$Na@VD>5>P3@%(d|OXzPDyZ$8@Mly_Fb9G&aq zP7~`+0YC9`L$O=Pd2ZzFvXOI}Q2m3FEx2UdQRQ>N$UJy;7mhG`0MA-;7T`Nzmp%1s zA^-JdtVGR=2KiAhEC+oyCP5&HtZ3+u4E1{DJ>j{bX;g?haHDoraIT%fYsbX&{<)il zo4qJIa;{$|iRl`jT)rO0>*_N>8=y_*I!!;eL>&41 z6^_iqRzTc;_)rYG6~-gbwyeSvCeKAA%R}*Ms@e`m5%O+`ugxLLgfS=&N z0_ecAe7X4S00vGoaOyh&IBdr>tXi8GrIIo!PN6?0p?7^9Tm<&P4eLbY{GBG#;EfzI9IJ&1xUtUg_eq_G@OTcV3-jiFTeCT zTJ^)ToP92VAhc2Y;kXc1_q5FKT-Em2a3HnQgPz=>M;~jxlqMigK^OzDe+q^YXqjfslN;iE^Db3GS@wOcrg8Hy0krADNP-M z+vwni@-Xe4*$3Z~1#p;n-Q5dDU}pfjmOL>+nY63Q(<;`&69O1upfCX*_#$#2&8%<2 zkY<_2b7)4D;1ObE-DUvr2-^hfuRPoCSbpPYIqrE3epqwI_ZtHbjep=#p-jxLHKDYC zkSh0fo}^D_g`h6Aw-WbaLYqAG>66mPYs;ToYK(XE22QGf9H~ors<+b+tyJD{Jhw6f z;Rlu`=`zn2G=n=KA3&i@V5h38sePzf{X%-zb^&7{^tGSz??i`dh_ybTDrxxLkdFE<&*XelRodHY|iJyOiRQXwph)Y z$8-OL)F|oP{*L6pGkTKD&N)vsg=<|1lQ=Aq`>C&FnMNUhs0H22-2 zX@Gd!rY#76S?&V@px-J!KFQaXGNttG`+AoxU!Ihe#pWv3Z933o$=Aga-2Oi}1~tvFvnk&_YEH1x`;R@82a< zlSUUzHxst@?%b=cOxpcrOCHz(6+PJa`*0#&!Za&O~U5y+wJTm_y_{kxhhvw zo_6F#DNd+uAZa1)CI?F5eEt)bM9?-ZEr2Ywe%NDa`#a@kfqvqXKA2gHpU^JGqFI8i zQl9+vf7)$&acZ6f8A-GdYUHQjV{|?7XVW(>#(vQ@o8B3)weTkreo23Sb)*#7a?rtv zzLI?Xl+=BqG`>YJUCE)kDPDqj>1Ju-gC4LIoS-NZbo_fzKLCw`_6&c}uArryZY#8j z!&~_82EVJTlfiy+b8#K~R*rH3f`&qv4aH&Y5F|lNIyYtd2Kt-@U_; zERUqg0M|ZgB*4HU=(MD8tvV|q7$Yozt3tdBW){NkxT`Hmj<95Vcp#ne9hCpV%a-Ap z?#3gtvwN`T27Fsh>8o(2648`k?QXK-RyVNzGXxERQ|S@Me*_jzp$8Fg6o$pc*o zN`pxbr93-11ap6e#eQiIZp{1mE5Kkr{nQ@lErBk?qQLp!K?`@(i~IK*$dnY}`{&q7 zIO=)*>9=f0m4XIYv(~>fH@D|kCJU;jfBNh22?^EgzrPZkGG(med4v!{n||R{g)GUo z&S}=Bq9mBE4Flz3Xe)>@sLueBCtC!eWj@MQl7_~aBz@rI3rL<1aP0h~KW`?KC9%%9 z1;umwrq}Mmq??w0qIEmS9Do1H$P`k-tDY0AIFSaF@FAs9yc*6W=>JIJqrdz zEX!mg9LN8~vy^@=B|Tk0NGK~g8SK%4y?fP={EWLv#mRVfqtSoYQ0OEb&T>4F|9t%4 zowDTfT-<4Jkz?L*yE|I$IFa?%+n@R7w;b3}l?cZKv3KWS5Q*RDosN#k>ED8#NBIwS z9F2GTqer+Y_#>JeFs*CM2Wo0+rtk9lGX3m3Jh9MS!J+4>K zYDhjN563TEF^R}rL6->$h`f^0Ke@{2#-G72bKz1bGVzhQfaprf7&^`HSs)MyyaciO zm2}p@1*<}!{Y*Zp3#}XY0<@}l>LD-`;k(2K!(kS?u&{vM7C)8M^$t31sMJu6Xw*wd z?d*e{B|GHTS@o#6vu7c-CgrB6@-WJ{orN5Gfl~m9W6%y`o+q{-palnedub1O<4R_7 zgd9~_xx1ysKx+~A18ah`$A{+Ue=%2RKu~2vyG7#j2tWg~iXB~7Uym3GU-E5!2tD?5V}qzlL+-=S!eDs394Pu0v;o z_zb{;tl51>KaH?bq3@pUa|OwTihlazM-(lLfEl7t;x!u^;AxP58W)s+08&lJ85~U+$jL`Tk{qr4>L=A$2sgjss~wokaer-lZ~IX}Ovwbl#1I8| z1Go$5I8#)!!{d%x@T7ltpUl>t2D zu%EwO`H=tLt{le=a+Di3%h+id#ktMCSiX_ zAZUS(Ajc7f#0KoZ9r*l_AtZ5NixV#_Z{}OEw3K=AUk&<}xv9v1yfpd{+EjHQ5w`;K z9=?9vtC|TU2k;-pJKm|UCkHzfURuFwr{(IubhqTL!ULan{;MTMM=@LlVHB?J?#PjO zz~Ahyx?aQ_{BYHQHFgWuiZ2jKG$-ZNHRS0g{Nqc%%zQCR=K1qm7jt(A;ljAMJ!}gN z9g*jp#=r^C(?E|NOY%&+&%=Aq)>Pmw)9SkwciOl0 zT3TCgUhGNt6~VP{M%}+A#Pq_m|FF22nwFI;Z%eQpfB8O6V$(X|J5{@3V>$nWq4585 z&h(R4?fn1kx_NLl$i}haiiEEOl=Eb87o0UahYQy|{V2xQQ*HWLdG_$hyoQF03w@^5 zhmqo;k-KmI8vW$MSe}4)RrUgv`^U|K*bS9@PEl>Z)QSkM8F#{EL^yUczd`wE><^yw z(_f752Mo4Y5}*`Kb;?lT;gmyI7C=MXF4)H48*8rSx=sx~#cu~nj)eA(H!%%T$Jgvi z{@nD#;Y4dnLP2g`Uid=3(sM0DiDXfyht4i=@dtOh@7o7)a!j^6$SwkU{z8o17^9Zkhp`2xC+5fP<7_`L4NIm_f0k$6j zOh>TUT3WNN11dv0)53(}vk2eX09Hu6;2ULIC0;JM-dJwBEFW`P&hUlI%}_YG)G#4~RK983%He_x zXZ&N}bnAo94g{~xzdWBDc);hM8zDf;G1MA06T%)YVnQU+{%|AW;OF4r0Dug{8`qBC zb$vty_Y4f|##BLMbv3uNNUdKv8`J=v27$)t{b9}iec{kuRt^ryOPi7P2YFgj50)9! zQZTsQ^61P0bZ2o66p@Qy6AX?V_d_uW)jhoPW1l{S0IETE z{}{C|imToyryFh|&xt9*4c=)CzM#-EC0;*@udj)I1@t=jJs51-=B|nxrSqDXv-3ra zf5W!U+!U6g2B=ZrFj)F|FLfug-XJQJiiN?&Ms2Ejr#M?uLokv@(` z?j+(iHCXj;+ec}MV*~SZ_Ya~LVQaY)`sRR}lS8C(nBG?=nC2J%u;nbE`=BRoNlefi z>gih2r4qq8BE^iQ1Xm76;)!>|G`eo~Zia7RAvE1?W@X|R#ei0QXs1k#5>c>x906Eg zpiyhr$};}|)DnBN>(L`bkpHK!r1TBlVUtx8`R!64c-ZyUZ^VFO29vO&M)@($8Ga** zDy2tm*sP3RmndG6kJfdSRzJtYbZdk6y#4MaZZBbDjV*HK7(CtJ)@zCCY3I)Mo|ZKm zgD0YcB{{>n-5AY;WJ*=i8r7&`L3H=&WoeS>%QV79Y5X}X-{?*dr3C#LT><@W|K+b% zTe9&{IGyebPz)Ola+7swE0nJ+9#XUWeS2A!x_ZaL(v4$p-R$gsuL|Kd;^2~r43`j+ z+s)j~x9#GCr`KEsGaTdB@Ap1_Xe7kj#KU`#?X>^nsl*s}xfsVM$ydU{W!}S-Q8l2|Z%wnlR`Gft#y>fmzLiY!-%}R)=7wJln;MQCGOxNS z#|`xo;IMRsoxRsxHr4gB#%vYjqzel>EF3;27}+p!)|2g04sQdOV$R`}X62f6P8E#r zf{T*Hg|2xHug}w~?`YPjWqKK=5?Knw}>mB@s2uhlj*>FwiKc*($tRo{6G zgQhjS26vj&i{8<5rEUnjRKd7;Y0`zADMElF`u41mycnAw)BX(3IzOf#&AN&FjVI}x z+~n0Gdz85rrLT`zQ_EZSA3C(QV>E(J|ADLEl)9v}v`NPi^XNeT*ySvbxL1gTbuMGb z)Lyh7qqMjZeAR0!!*ZfyE0}*Yf4_HmlI^vtq~OTliCsZV5L$0M{3>$9ks*AxS$XT~ z{_8F-!$Oi*+H&Z^+-B+QH=7D_)T{Hi$SZUFXjzRRoOaE72);2kmu8JKkwZDV-Yjj{ z&Ui9|vB%$ALCl!yyK(61PPNQJ7KS%x@%%kc$VB!~i%*P1hwAfYFxIGFE_ai?-_$i` z6}6T9Z7bv5sMCIY!Ft|9>D!C%H4$1lFSB@O^UAYCL`B~`6LF1)CK$BY=^0&}>H!6g@*b+A z5QCj?go+TZO^VFdIB@|Mj-;1O^tYQsI#pwmbTjSB*SN5daFc<#RrD4c2lkK|#jBAVwcNbp2WIG3)xFu(qu|(& zONnROD`>YN6bIF3wChG%%%dy5*w^5{q1nTYS%tJ6RaH{Vh4g9)oYClZ(F|iI&(fev zsF}I>B4%YG^8K29nT?GNRCwg?Lcmj-r@Czg&n?G4c-v@UWg(6Lm|v(ORN%ACR|`y& zh-KqmOZGJv#cSQ?jMP@^HH$uZRQ@RE1%1Z%L4|4V@k*0l=J}+`UaD*a&~o8}S^V;y z)%_kHN+O4`=O(7607#U5M{`cWJlcSbpkgmxy0q!{N44@UJhd=LZ0w3h!i!y{V5e_{ zRMV9AZ0a^}Zx#jY;s zx^WLG!>??i94PfZ^}4H+wSVE3M@L)Kgys%huh6q(tz&uNTJ0gRZ?yySa%CfrU3Sdd zSZJ2->1k}$dZrGPM{ELLg$aCwTQ_gYAC?3~cL^%Lv&Q?Jlk+RRj`;a?A1VI?#oc=$ zPM)+T&&1*lCg1cQ9W_uD0+;LQ>&y8u&FQS(jHvEbs~4|Z-j!B*nJ4h&w4Ue7AVaiLRC=X*7}VuJ7YsihZA`Czby<9^QO*vgS&F|g{X zsnBE)B?%~BG_Z!Og0npvTxa&6O%IF`Y$2LIq+p}o_`i1P)Z71x=1R5Z^ zK*NCV9XoQQ&*cbSqVvL%lX7wGgI&&2QTs1lHgrC*m_A)7ie%@Hqj#KchZXuKJmfLg z+9j|wShDO#h0{Uf{_Y2j7qknz8RE}}=JlF5L!$|JO%HGtAiCB4JD_7a>gPuQ^+Su} zVqcDOHxy3eUOMjKTyLBku*0E!h1swXd>H9NCRsMjy~7*Bz=9Y!r{P^hbQ2&OBqWqs z%Aos5S>u6x4k#9onOSUG3OMumvu8$MSptUOFGf3#&lrlGjYzSl*LIzR`x|(bBS;3I zVzE!Fu|a_RU;yBHC8bZ$Q2>(#a`GhQJ`gsf=u|=1fumq%+yDm%zA#938wx&$(bd9} zV~K2&<_P0MiDay+sE+-PuL3T?x%b}UU?fFy_aE$1kTUeRq-%K9z6?5J+3$Krtn_L^ zSgEMpnF3PkPvGH|vopwd#y(>3XlAdIvfE#?D$6s*fRZwPysmIX*~)Vtrl&XVe=lFVXhYr!}pvMELrWZ|GE|p+(F-buvjH!2_klD{rNJho|xjj8^{QyRl`Z z5NEXd6-qJSIrJW3o2a`Fs?h1v1vU94@@E|mvvi=`av!iO|3d3fUdfje{e6t?P1Vlt zx|a0H7-xnKMHmThPBrH18i5)@f@XRuPj%f|SLQxg%jrk~*xp78H*NzEZUnYmr3=^+Ga`C9U%!3(1B)CCDP_1RI?D4vcTO1a zxq-e14-89ekxAt=r4~483wu22xjO~F64ogh;GbsleRe@+8)Qhcp4gcW`kf!W8rWu> zr20+vm1=9^Lv^Eu?*mRy>DxB#&QPim)DL{SCZkkEV7sesu=g1YTe||TtMqF#7=DWL zGc|5^V7sy}t6NM@Z3O-MWO>c#FVM(nbqbFypy8bAFWbL&ugxP{?8t(XGG^KG-8RR% zT`&o$>(cMfKHb>&fX(p?NO|P2vbAviw;h`&*RJh0kx4`p!Fw?id2J+k7@fxL0{RCd z1|Z>n{CMGIwKyo=l`B{F%CK$Zl{0v>X3>Y%E@zjZxPpuiv*FN3f&s0+1mn8(|2*{Od-%JrMJ>kH?KM=iXa?#e=8Z-`m{Z z7atbqmDsJDCp^(FUL4{RWiAw(t1A-zpm|U6x1h!qf-H^fK>`o;WaS5ap0Uy3sy*Gh zbmd7flqNtcN$?)L08m+zbfXgd&sLn$xUz4Z8ijgf_$Cyfp~##@+J%qLN1Ws*zr8=a zw0H_<0+8ngn{}q!A?XLQuy@a%)JF{m4({7$SAEH3$@GSLy366I)dtxTN(RO}OkV1> z_4Rd>zccamrDLN# zyW|ezmhI(u2+`TDy?L+J!vMTFw|keriKC&Okijtk84$i9f)c49MSuh!h#(^vL~I0f5|{z$58=kDQ{Q?(xUr|^-qYN*5($@xw8XX; z!G&LS8S1`brr?yS(NqhOWTI<`Am(29exv>_< ztZd27db1K5+{AlF5&2MVS9boB1X~n2q8o|u{pC)BI2I7$2}c3q>u|M^H$NtDKa5KPyh8CWiI{~0Jd>pyBnsHO&4-OSjrq)%!$MC<<&7nK^_VXu9 zk>qIxzUC(mZ2;5WMIYDhy8RTd+1_44lCQ$+&QIF?wF55g@zU|1ID@YQH&%f!+)Tq7 zXHrex;I@N=7l@e#)VRR85Irl;QhAx&a1gbwo%LIG3Rc9N-jmy% zrtf;@!7h8ji43N*Ae^{`)LFFFXm;?YYIuz?9w3S-rc1*U)MBA?w3iwNB1-!E&vd^o z-A9eHM3BI>r*W`BIl$h5EkNJ_kV8ty*W&l;bM@Lt+W-{1u&8JqvM-tqR}xH)Bm1I9 z>`hC$m7+EDK3VXOmnNSqxVhL`woIZ%Z2VEb)Mg8_!%odNHq*Cy4Wt4i#NtSj%fsTr zd8{KTDY<&}UTi1)nYBOn>*k&ZY?w{~i@oQjOKB!=fb#*tSwI&z8Dha+C3x^~IxE|) z@sICzQL*22j?YT^@!#%H+-k{K%XnzBI&rf4J!M?7IVV8@u%_!De?U+Y^0J- z8EG}`Hs$u{eMkc@%1zv7Nr&}|cp!(VM?nW0ve(&m6!t(%PaHpPTrbEnySMwnt`i)i zo?7tl!Azpe!i5)eeSa}5H)~o_yM>at|B{n_RDQU{*a3oXhH=5=t}=HcYj4x&s4mLl z?5K;3;d0TG1g}I0bnacaAUwmqAW3~9XnBR5>j(*nF4qWn0f=`tNJoGNF zEnSKTAdpKQ^?+J@Suog?eg>nS1EvPd%I#~yjg)0^?@`w>H!>IW?<{IO=BjX0B5cFQ zuw(kec7EDd2OdA>IBlL2j!&=~DzalMjKXq$xy~qZ>Oqo<>y^W6#g z7zWs4bA{A6Lc)fLVD8UeZ%rOEtsoG(bE`s-q5phocQ1hy_#D*T5S`om@m_s1uv(dV zw9%n6wn@O`ZgP1J+j6D|^;32&ZZZw*deD?%-h@(-YM7pV>1I>{V*V{{=6u9LxG>dEFI_~)MP6;`) zH-)#-c=%=%A1CAQDi3px=+~R|VRH?ZJFO|AhUpzFH8Q2QMCX9wpBS3aop=%EOr4WI z>00n`kAu7dlfHgc_$_TGTZGd%4+l6qx#^C^NGPgGS^1PBJNMk%-NEz7yyb9?95 zq&pP0SsGh4OI$jejynK_L#b-{O*(znV(YE+6*#=nr_+BO&l=goke0%$Y^%28mFe8+ z$Nmgy>DR?MXvknjp~{UpLVep-oszsR7pAwh^hpMj;!B*7%&UTlfCx3aE(M;{c=m4Q zUSf`8VZv^8@%@p=ABhxX=^+WjAES=oD}u|LhDvwo<@bMs=5bte$jq{tZk`cvACfL>s6$_bgE=hA&+gO4 zZ;@q^O2+%AO0075Mfjx+DfTVc;*DIfmAe(#0ZjymX9_QG3V@n6hmJHwa*PUq7TZ^X zs93*Y38&gj7+O<|StLtcv8IO)Tvv3gVlj$1rk>3nKDk}Gfw6bLk;`1dlfI&xjyA8tAzwm9<=OSS3!VoQ+%LHzRKSMvuIKiB|9>|nrA@Lbr9m1JqO@qz zK$0X8MOLyBO3EmdSs|5DS)oE9$tt8Fdq$D0WF_nWeBJlw_x=9RV=R-wD6Y_%Els=Qic9ycxhn6Lu64{?j~5h1lOMHnp} z^BZXtrr%;z?(KJ{Ea1ePwD)pb)@5U%*@6(lh<1=nU?0pr0th8gFUg^Y9=0T+OXlw zlDFR2Gr~pFft2N+0LuoIKgS;BO;K>IIE|0RtACd?KH#n0^I!QsNQ2}?7$8o~vv)5o zJI(ZNd}U{GR7AWlx`)h>&d)(ou4BhqaR{g$5g3@2-=(n{;)zL%_bPay4Rpi zLSba5T6e;wc`GmzE#?Y zrAFULS8NI6;{miE z$G7(@alLu74S>T{em}_;Pb+r9WP&583HeYN-TjW6HPjGB_vnEYh8Il<^i;zy7WwW& zS|41ijesZspMkm}K_x^xxm(j&RmyV#jlyNLi}9923(WO*UMI73QuwyebXKWlvChK!`!`%0|9M%TYJ5J= z<>_|r(&hGDEmkFHas-0fap@?}j^F+BR<5B+gqf=v{hb*r9hsE6_al;m(AUHv3X0tUWY#P2%(83T%#4sfqpuF>bNAeaPE)k!_EMBz5 zvzHx4*oJ&ycZ7@CkRej!V0u-pJ6hY?F#LGLf3YBqeh>iCDVI{s;LZ=GIo?#v2EFmGX#SDrL>oaOE8M7OGRa+7$!G}3#Js!*-71x$slY0 zb&P_wpa=9liVS7P!#=#{XAy6Y0=v)=ov-M8xlR_JvsU%8U3{R7=H zhR5SeY!Imkk>U00(-c*`$J&h@@06MGt4#X6>qnxV^SIoQlBaK?=6KdE&( zo__x#Q9}&Wnp5`eJNh*bcTpNgvi{OU&&t&qFU&w3DfznZh|HWg^20k76}g-*zI`zh zg7$Iw+uf_zo$_FjaQw1nnUkAa-}3$Wz%vy_&K|3K)xGnXCBJgWB@M~7;y=6wpFKp= zp-`!yNjUP;AZ0yT8wnm?-5hykyj^(i@x&?$NK8&i+(kF{4*!f-vY^LcnM9KbFvaHl znTPd14oWylXi;-cII>(wGin|C3J%W#Ep>YS5L441?+U5~rPz~Ma_RrxyMMq{ao}Yi zS`}CVuKOJpRW3Mj{^no>L$>dHsEt3|09FKWE#N?;(2qp1 zs*X!cHKIVfe)9RBKYwx$>sYv#=-QQ9zw_xYf6QWIy+FS6;RmJqEYvX*vFX_7GBj&)chx@IZeejG?xU;pWlZG1rrRH{Ki_IWKU<+8TWmb6X(ePp{)#|%22i&bO`I6cV1u(~*_y*xUJxaOnjme13khTtq)o?t?v)Ol z5ly$u$=aNZ)^~=ws2}-3x(Cjm`l~;5=%kh3Nc@Np11>eX9Hg#4P5eV>gI8R2k=G_0dPGoi@r!OxOpo2kw;8T(5W5rIJ*Im%^;JLho7VydBDO6HkQ*7GaQh?05 zvOv+m>AQUf__l_9xFkyScK~9;EUvWCc$E~>2;NGMb9NS>t}J^p29AHy{c)#_XAt~( zM^jJE+-UChA38J->oYWzY!ZXhlrV&Mz!f9o z?Ae$6cUB=r_xWGpthS$eSvzLQul7YDp02+aoKqA&$3q`)`>YCPI4v1b`!(TQVuDea zTTGgBbIR0h(GvqgSB%WAs~yWkfQd)Fk@~u>cgZ$m_&FylgY;||;Zff<%}JTCW)UY| zWw6Q|I%a8mYlBeTEbZTw>dbQP+_`V=edS>8cx$d&!5P3-&hks{|6OuX!}ZJAc8jZw zSDt+wxbE=H52nAyejfjcBlfNf$EAQCky3Fe5>^>prmCd02&?&_Lx<9@^A9X`P0K#c zsf)b9&g*n3)6BGv0NS}39An602CgX?{PXMOXV3cj@Qj$T zCupg$-Xd@Mxq0Z*Gt6jCOZ=C|X70m}e`#utZM~}J_)ENJ2sv01-3deoj=e+lh_2#< zVBfcW`}U{haDLW}_$4o6N#8z@Oy0tDgHbS6Bv_T&#yT^mjajr^f8<%3iT}y6PYFF> z6b_uaUZF&NFwY0zeHcSkfz{D%H*a3i;c(O(pdO4Q!0F)jvuA7Y)Ify(hyGUNdFU2P z;9U51P41aKJ^E;90KlCFQJ~qJoga>YGA=E(@*Y{z^C~!?M+_fMn`{-a0mE9v#J8W^ zE-HJGdvHvQ?@>z4lS><0?26}_Hn@B|7~(H6qsd#_FKB6X`hizDb?hx159=oMgWaIi z<6tgHgDCa-Mf9bYGmY`&odb6z#DQg!jj}wZmPQUAJh&hctFcd{xsl9Z^*svwcaf-> zf@9VLdw|^t33y1MnNM&IYw+BeOnC!fuI%IV!@y+5jl}YT!(Z^XGuPIBK?L!QM?2Gx znLtNg7*CPsbD8x+p==!Qa(dXI{MvNy!}fM|g>zRO*>!f1$}#f~$+L9h;u1l28VrxR zt}oSyx9yNM-nvP5@Zj+y-kpFSFLC|zX6vz9O~na)4n0Yho{F-%hq^i=#l$0J4maNI zr{AM`x_GXwSkH`Jvs1gsrO2rtn%s7n5D4QW0GKH`m{1C!9GNVJis~B@5_VV~ijVg_ zdiRf-jG@AvhryyaxgIAmQxX()H`nfj{oWC^)m9^Su#)tRBcnZ>o!4t=%1Z+Of@Lk& za{aI)?%lgkh%ktbBfejsRVUI%t2(zVlJpN)80*6*;aL%IgNpheucoX6WFJ3jZkDW2Z>-JN${`ijlly7oyeK7&F7B2$0n>=v&V@80dj z_K@9*)OLiWr9WGO!Vsn^Mq0jZa2#bS7`^|)rNzM3Fj^EEyI;x5N}fERST#+VsPM7$ z=dnWZtJ=wWr~5=(&$M58M!HN%U9+HB_l?Pc5 zlQcj;C%Kh~+y3x;a#pVpaYv+3iMGf6Xx&uU!~1_}0g4|-NOrUqT@6$>5J01>i=Zeq zAUT@~)uYIcB0pCR#r*FB_3_uohdecNZ*KUo@oy~?YuV~tuY0!FzO@6Jjh8wex%@ar zDN$mHrp)!#PJ7DAoYzISju3%%&n8G8=^klmI44%|K?4s1M zXr*6Wr?PHyC-hoBy|q^q0MJL~4UD`yL%$nW!u3F$lQd!twu~7KleXG;1PY%9lP$y~ z+6Zja!(*m|xhe-g$nEjBJq^HdO_QVgkrV1qSAINC2mX!urXsipBzqF@1T+L_y7T0ekEV$xS2NuliV|Bsj*7B=&GLJicImXs_7O92^^p^oPciBG z%H{CJ0jh$dF%oC*yn)g}VZAL&5G)3EWS7|}jUN>MeCH&8&IiE`1nfn5t)_fOm$|O} z`;_ZfL`NL&audWfSMKrp=!NQ0gp3cE$VcG_ghETgq97gwlDe-fF`sSl>GqAWC<8!?>6JcopE z>C#h7jD@Hekbh45w03m*@(l{JR;55`qUoltjhdEGFl%61difcJJ)&U4gOg=N_dEYK z?`99)1t9K`VkDi;X~XgqC)qtsbSiF=k-Rdd&|GyZyHiN6iQzU@_hs!HcTHH8ocEwK zvbWo=$?-O`!k(+N-s?3k*-(-Y*>O7m{Q2MHcF_bJ0i6rG zp(L|ueQ=0=XYer;?m}O4Shf68yBWn3C(e6SHdJ&ZPGROZDoIy|&InIbri=6ruQTCQ%29W;ZMurgQp`p_}rN zPG#NtR~#9w*|Ye#;?p`GIU-qCdHEs3*eH+BeBw1mGdYF~q{7HiQ(w9~SbsRKk(`hV z7cZ9BHeKfC+Fo3lv$w6Gs5CG&Xi1ax7qL+u(RLXWkFS8|QZ42go<62*2J)IWstNo~ zx$3;Qgq^y4cKOq%e>h~|COq|3=lFD9_59T1LxBs%KZ#U9?lcTcMANE11U z0?d54J&)Rv>kXbuREok|>J4yMLOr!(viIax3MuEmM_|nSb;YCqY=}+_8Uv+83XxsZ z6s>h!Nu%O$o=Z*VK{oPdjK=Ko9z3pm*qKgIn9hyD$q#e*$LT%Q+iFPTfwnm134oYr zJI_bjTFVADJAlm?AOzqNkb#ZKuuJ~M6MI-*xF{ux>l~lKyz;-|%l{UY!Qm{CToMUZwAS`LZ4hw@;2wU%Mfy zcHzXu?cf7~C=N(z*ZA>261Q)E+1$Jw&K%!3bQXpyw!+b{wpJ4Og<)D460;U1_B1R= z9lAf=N2knMVFkY|X?OreH7v?@rD?@#{QV2+XL!o&z`&)3#07V&h?+nVr#V zIQ0bFJ(PiN@2=590*v$f$Gn)^-bwU!`nH?Cl1<}e+@jy6UZQqDgiv|w*0^zFo7{m_ z`BV%7$W03SWugF#=dv70@VfQsV+~hMXg5F5>u&r;wTJ>W(c;#m$s5umo#Q?U+lR{v zeRS$Q@}`MT14W>iCLC_hss8H@T8P^QA$D$Zr8u5+)K?AP+zk6p&kfw7(^_*Lmm7}i zj)-DG{M3rW=A&%q-ale`kkKH=NclO6D-R#i?tvZC7eQJ%Q%ze@b#rrCt|nXr3I8d& zO=%=3Q;obhY2e7#uvulxM7^Yzr4-3rkKJRUvieRhq!PlkL?Zt`xUOo)WgdS4yPCL+ zTLNG@U>;9Nj6#*D?21U+#f1rYTfFjiJiP|klDKR2r2i?DLm2kifh1IzxcX}&31}ez zYHe*Tf`KPi!20u8NZE+K)*@m+09RbR0uRp*w}olsfFRjklPgrrnOOUrmEpS|(jCQy;MVTjm-Zmd zH7a&Am$Q0u+)^^XuK3cdl=yn=sD;mM-v5Q^E;@DU7^qfg=#lx!EKZ!vkxaa<-Ibi| zv!Pv_q*s?#(VfJy$8)9D%G#^ThhdQMAjiG$yxw!94r@*MkUDkgZi#&H8oT+rb?TnvWDG>{uh$4hI8`?-g~k{~6_xQ71v8N6(iYhMbE28XY7FS@%Ar4}URZ6V zuP?)VfqPcjMWX6gg#&_{igI4VwPU_TT7W?Q&ARNFJR+D_A^O*2@`6bRq7H>B2X zvb~v>r~=AMy(f&Ed)P2kYL-nG9|gnWqRI*bC-H#fbC!}pwuS>^E?it=exZeMfhd*P zeZPQaY#4IYa>0w7nd}Tj{@ohc~6q5tB4zkLpN~EeLDK_=;RR(A1?JS zWE6?*oBeBky@bR1Bn$y#PR&5AWAJu%Mf5XU~i7twWQ=H;Mr61r)MF|6_gLcGV+jB9Y%Bum-|# zmt*C}UY^acy7#ATvc5zTsdYJ`7Ws zw44AkRci3qk^RX4rLBLyD;W8Q*1yuFiZ5>XY5>}!%?)>)CJZEKzL&q>_oy(P6ws(% zc&{b!W;iJGz6!O_=7W2u>Xp-3$xu8>N`*cneNHDm=iTGpCd^vZ8k%_nqv33~Jt$Dp zcFX*83>X@~kKOCtFGSLsIF-LncHs^4(|+?-&X%js3m6q%XWAX001QH{Z(rlzSr>kP zn*tmyD1!dnB8c+v?xowtaMI7Qf(!clY3mx*9|@Fyj|o|iu291Z^5PLI$7^_`%+}8K zJ-T$+vQC8HEWrntcrLgXu%bY`&VPTp{puv74Sj^3`=ai|fj~6I?6OGU|QyxvZ zSHMKgGIo0Wx$Ya86`8m7Bus;F3{NmA56-Qp9T}bRw~~XG6wl~?f1Ba=q^GDpYBs0v zIQN`&ziVu-`FZH8f+ucHNZ4x@bX`cKaALoD>CypMVamGdzx^f|?gS~Po=Slmr?;7@ zzRzF3&Y4PShZyrclF+86AtWAT6+#1IM~#BK{ClDaTbkEP(P;@4MAQz>cX4z3($;pe zunJGGaJJyI+0$^7P*4fUAP?xv1sBa+lXbNo4?GQbQv5G?Qc`s6O{<09 zwx1I{`wZ$bNBntzHv5-F#m9U5zD@1|_`q)g=DGVPijEBu9>JjeSDqe4>X`=0XHW!-?sK^NDQIbZX`MXnD)8x*T)wYOo{sjkfjwp!yn zK48^eh`4QS?2=yL<)7+p17; z+mwC@()M;49yHUS&IXvCpfN+rZ{3OKk~f~`o$GKJDF5F4Po9ek{O`BZ7b=hB2a;S`;G%HiMCHw!el*ik0Z;8;i#C%qMO*;GqF08>O15dA zx@r*s@>jrEaD-pMImP#)7nyYGHB-&oY=TF3e;earMhKS%%?{9gC-y!}mS55b{U5@P z$63xQ!*^D$hiwEZ098huK{5ug*PXf5AxE?9mz|0E(j4=cC1ZU zD4o74>eAyghUzz}P3o0d)+1{8alctc;!)=JJI~ehyH-H4fV?LHVp&lC?Kx>!#VLgL zK@bbBV#K{r9R4BKIV3~##He4bmzapwhZ*Nz!`F6hEuHl@$K}?V0CAC6>z13oheq6+ zJ~%W=wRbfR7u@b*)T|xv+BNk}DN_(JKso}D@;;3_#G}*2mB!fbgi)9aZ$DttF;1KM zh}26XOtR|~RNFN-;Te9ux9i?r6$dT$<%{ z_fu$HRwW+Dj9CeoJzH=4u{qZP=9#zHNpsMkTTh?*Q&L_0t5~3Ss6RCpB8tTj?9>Z; z_hn~@`>jpJqeo_@rP{jxgU2T43P92h67BX!qaVPRbUkZv)ct2lb&{s@$dEO)@b zxJ`~{b0)Fk8nj4oC>bX9phg1tp9W@&^neX*!GPqGTIzB363ODT)6EKpTv=Oqbo!JP zOC~6sd@hpfG$lFnc8}?t@^9Z_H804$F@iH)YCEWKu_+@iwDOga_hhcj)L@)zA=M!# z9)=rlI!0U!Uf#*KB3rKO#b;tZ662e;dlq@x$%L+d(&~2Y86frT+k99pc%gEfU67`! zsi*IY5CRl(=|rlo)=@my-YlyK`bwx&7Mg${wxnd2Tm(N%J%%yjb!(@4>UxW}b} z0&w`-ec#bfPONXUr)OZ{c)b@k2|o>03Qv^}a%z8TfOs*fpCfL8CrJI-F%N@Rd*$xtJkmV9;i9<&2m{sP4%vg zQ@qcy`q4aL*|7B9v7M0}N2B11{t{?~*+InM0ia^fFUTCQZ5>4)8a##|kbnQ|!rupj zpZG7BV>hie>Vo}&FsBlO$FWNn=JnFf@A^1SLQziZ$Ez#mH1$F7qQI%D8k?cmKV^C= zGL@VANA;EAwA+64xa3+hTe%43UjmtjcP}a|a0G!SMWcp3j+)IzL(<+vbo8RcO zQ#(zAyojy6hHEeJ&nh<^CcWcURE_s0pq#{Vd8u@sJ6*|fsHwQwxAl4bVjOHIkB8WM zL(i{_p;~#cVzVpDQJ7UsDhAbr%?IU96C0F`Ww>+G1r5coW%8D`-J9jUZrU_?iospu zQD5V(8p*_Zv`Y-KnO`a*cD4ww^Uv>R;LE(s)!UAwM=BY~uf4v}L__k*E5OAhOXDbL zMDip?W(zj}6|qh1lf!J0WI(6h8J*79I+|2>&j=0?rCn4T)@Al{h2?%8>gbjTEoYg{ z&I)Ha=bvkH8GTrFf-1@ZVl283b@{a}vB_3i`h#hFK#35BfCJePSc>k@p?_bS=0^=4 zWip(Wn{hmb;E-n98nCp@ze zn^48#_grywv}U_84{ApjSRAT6)J%K{-aw#9H|%`vdshuu+(qulruXv07rM{Tb-1Y3 zKEB}InAO;&1KUyg)RD|no6rPRSK;(dX?$<0uqKilMC0MhO1jH5j^;i#aU7UVu%9`z z5z14xv!6=pn_-T@(qrYajE&R+%|D!awST3Qyi1Kx+ki~cq+oke8L7e&Sffqj2j(6r zoO|yBI2oxCLrqGAw&cI8nP@p3U0s1(G8Ddq@m<^k0U~x{j(Y7bTWUDrot?{&+jHUpi$42srVaBSZKLIwE$bX2sURZ2|!x820jKnxAPN8qtb?etp!vU=N0Tjt;7W~>TZ>rGfV2$*H!0xo3dhW#1lxXCEKpEhj zBydc)!Wxw!=z?J>)xqS+QVE?Z;;tE|gnNiF$~_0Bl9CP1JS;ps^zM-q?A(E0X`%@7 z(lJ?1nIp^=Esm9G)Z&@)0|+blqE#_zwZchqo*0Lt-me=Q>7!VN$*)Ux9S+n26!3jK zW})a`*}*t0E6DX3dH==@*HpR54?qwEbd@ zp%m~F*-uxh+j=NQ{#oeeTg%a7G^AdTi##bI{KKFK&B_G@bLoGWsqf?Cv%}gb+NS%P zMT%qWi|8N|Zv4@L3uE2gzkmLGSZ7R3bDBvg#9J6CFYY>Dm@#p4aSJP!Q%~Tm5w7)W z`I61Mg{YL;;S$v2mMR3*4{`(`G+Hx2r38fom60ZbhKKTxfiy9ykzEiHVvy~B*xQIg zAL0NUZBwl@(mS3lo+$;7?KW+0Fx-tS5h>z+YKBdB+$Rl`vx+|?QCBS(!#zxO@po{I znJ(xKu=qFsYw-U1sGV!3PCxpGqslDO`5y18?b*tv*Ax=c9bTq>P0C(F{fbkM#-)wE zBbK)TA&%}S!J{+2@lEBf51q>?5q<9X#!^!)<$>>wIGka zE-sXIzYjK}(}Ce2eJK0f$Bo++DNytI{z`kiaG?I5B2m?c1yZNX_ae}uNg)bf71(h> zz=7(761hcXx)v1?U92NWNXeEU+aEnT%bR{!V7Swerddu#N^@N7g--T|MTb8$LGkik zw6~K;QiiZB1d$(f6Xg&d9Ke=Sm$&=}X6ysZ=-khWHmkxe?f*d;xBoHD%3?MKOD_2z zRV}u5#s+VI$xtm;F2=t8;d0rApdXQ(X>bPvC!ds*k(b{oj%qxg5ASH4h}4V){*M{T zHda028pM>+h>Gpbs;TH2T`S){$ZN&M8H0k}ylp$#^WNAOBxl=n7#AFCSBsX&U?cS! z)7^Lr$QEb`5wiWBM|ZrhQwU%W2| ztd=w<>)f2Wtc`F=4V9h~Vn3T*KX4V`$qTD7GE4@lSW`-tOR0Vzv?=n%rqw!k#O-HM zAqx7`&--!mFP(6i8nNULCnmaJ-_!G_y0~oe%45FPOb$cZr1XXMl7AS5F3(oH-bZ%5 z*Lqb1Psj!qiO2Kv#g#5azCbrEq_b2j@ZOw@`3sZ&BcbKQx-;i1o0`cuJi6bk;*rb5 zgvOk<$+U?hxbX7ws-IKjlFcvgy%4b0s$XOewrlr!$;!KDG&pz9 zJ9pW1_sK6`ix)i+WTDZleZl{L!B8iTA5TVW$_oSWX7{P~?R$Ya2(fl2AW`Psdq~o@}P@MECL?JA8GzbFnerY_RDn9`G3~Fy7c{~ z_w&EB06qek?SFE{wXT|fe+m?|4fqu>NMV{F5w@@ZrdyP>!t8%FZKr|C>}S;LH;?LV z+pM2`mi&qS?W?JVZ1wDotT1uTloiMB49@Rn>@P>$8b-Y9*YDDmD?!A+x;*9G2hyA` zxUG2e&#qql(o4Bc)WF+vN+WGHwXneXdDl}}W&T0W=ZbBZjQ22M8aeJ`M_==BbyRHM zj(6(z=CjJG9%_Hn;X&l@GZ^7R5j}{BPoItMpHm&usn!dVXyG!3$=kYU?WXNC|Y2H2o*Hx0nPx6S>Scl^TsP9)oxDS9 zlk(UJnep>;;y)}owD{J?tzT1qKe@1Y+|PH5-&~FOQ+uEQyPxxS`Ri%^`D5Upy}GX7 zaA{TnUR%w>3@8$RXkr4wUqK@^!)TzBYD8W06s0?(p z*(y%YtqSoR+_XvdgfhM9c)*)mSZtFZmpz)9S>6;@TMfR~&l6Moi?2T;coZwcZEJZm zCX8f^7)I8*dFW6}NC|$sidt1wRiqf;E)JtuSX29+rG*+`!K1H*q~9H!S@2zU>{Pte#G}eiceiVa z$Vw?v9Vbz>Bk0H~ODV_6=?cxHt(j%S5Ai5S?;m3jC5jZ=yE)7OxKgZ$fW=`%qpq&h z?<^0c-YV}CJ}d~v0?ymR{}-?GsVB2IDP8Ww$}rK=gvJ{Scu7;JJ%^0vC1*4k9^ww|6No1P^)JUrecGX*d7n-P0sOQ-Y{D^z|BGxwdLyA4lD{ zHy7DVn)F>5_5y^;XM?SaJ?A}AM`@qBojz^+Nt=w>C!DedG*n8StUr)-$D!{=uU*H! z=^74um=>KZzScr5%PT% zNeP&G0QT6f{BZ6-E34k;H(?D2>BCqU*k}^E1DTn7_w5s8g3K4fLKXW^lpKPLW4QIo zZ*n3$1I5L~D;i)j>EKvbt@WJS<`9N3y+v)!=?VeM>jq1G|MdKxS!>IgwRg9^9!oq2 z=Z)82(IhLJh=i=(z4x&=x8=O++;3@zo)qoHgtklq1wmX4elP&XkING~hUoU&_om0H zmtOYMCI!!u=#lrIx+mJ+S8J9lt+~1?Si6xD@6F?J^D_6_?DEZ8Yr)@VpRCRe;!iv z0f)xbb;0``+6HM;<_HZ185uMk@M)X3Z0Tb*vx3-3<1c_PfA?J9b4c*)xojvPgiXN? zQvwSfH1`FRgcc;$<*;7+_fNx*kF`ss#s1CSo?bB!Kl+DKCkNjT6&xLyAJx5Q&v@%A zJYAjZvDQM(O*X+k!`2roc^Y9V^&z2I}51G70VTeHUY`qZs z#Fe%l`7sGU8@zVd9cidN?RL)nQm1tw$^VRn%V^DpBok?Vl%LIvIBEoZvH`J~-D5al z0JbOs%s74e^nd+3!%LUT$;&f1qV4nN*zXs0`&y13CZC(5Wo)caG!X}6em@N*Y(#8N zv8d!AQ|DR1jxg>No6~4lhkGB`@^n6|jfvTK>(Q1iU9}&Qvhmw4cT2Gb5yN8VH#06S zm6vbGOPAR=M|NGQL0;bnlByBiHaKUk`Oy|+9&UKxSk^H|=Ynp#{QM1E*Q-kHK5#o~ zX;Aacg_m)-5&lT>ht8*& zex1)Q0}Dr*x#_%MNK~{djF?`Bn#^B`vHj+7V0G$l|;` zB;?gRll7&n?$mf6^Q)X`27(LhR6Emc-Tim0+{+e{NfoCxofd#ch&Mp*hR@HLe=AUa zYiUqmPR0TbD!X55QSIY&*H|&P;5N;=#f|#wuDzW1tn@r{Cjq`B+-9jB)}BK^Oq&x-^SuAbnUx$^RL^76df4cVI3aJV(`Hlw zzAqH`O--?-`xGx=rUYgoiV8K_XFFB)M4aPkXRrJhWnadzR0Lyz>E)9BxAU&paMoB# z0}f;yMo-+oe}AHm-6USD1=5as zfNp{;Co@wU_zJWo1hBoO<<_2|#&|rys1SVx;_l%?y7bt);Y;;j{5{K3@+J#N_+BNC@c-6fX;`8dt0!%1@Ra8_!S+?Aoe(&~eb|EF& z6G2XlCNtgQ7{PhL0{5(~yZq9IEh@(b76g2JnmBd@)NCFbTXXeQ>g$2K|*!4!aP~w)Q(o$BVJ<=d%v4wj&op6!zJo2 zlA%54e#hg8G^BCgnD$8PJyi$&$GF>awt_V*UR=d)^=U7Vg<;9a?j1<#uA9EFt7&? zb@)Z*TKK!Kl=;`kwY5nYh5ve$xcgXE?tg6wsZDEpYG{a;!M$cXF~l{v-~ho2m}rT2 zLF6LC%n;7t-||Npcr$a@lBMQ7*Qy%0Iub-yueRU|(73us^c7nycpBMIF4Y!k(-EL@#Utvqc|e3z@Pefx&Az)n|4~v?%RYE8&f<#^ zh>D?M`PLZ;CivwCU$=aC$jPfFCq2CHy88~M^#M6zw+CqU+4Ax9?V7uH4+3vxXWx1F zu%)4au8O3zT{5?OYWa#;79?4d5|H%MW*{BK9)8u>So0urhn$6{+>qsq_1y9Uph$Sm zJk?->A3v`nm}+ZlgWJRgmY>yIO44A+feN%;- zh!Jk03o91XK^T*=YL%5~)~1V*QM6JD%0Z?^pE~93e|AlvNtl>|JKx)^lg7q@b4uGK z74ycKh$kmv(_QW(aqx8XK54fF(Zfm=tV~Ul6}Gpvg%z51PmA90CRVuXDVlqw3rF{s z{yg38{-~uICg&C33BNq}nt9nciC33iaU3-F75+%;en{CD?Std?$%?nDo^I zbrPi?IYL^~DEww6$r19&{+9*aBNO#>`}hA=I8fb9q2}>p=Cp{5*ynEj3v#Yp43NAy zPU2v9)0N*szcBZES%kN;+(AdYOZq(QvMsoax?8^ZKOclA!McM(xJ<6j$6B~Lm2<@^ z2bVRpv}kneCM_Z*?K5I&=+MUdH8qS$@#L%=PT>``p~*<_uwX zU%qJhvD29xv3~MQT~_Be`unFn-rf?YBpco9N91aIdqKx6c$71jZ*#c=-~|%I$f|rTA}6%-B~o>(<@}YJDW0&uQtle55}gM9vOS z;qUEz_x6j59z1xRxJwNro844Z73W@(q3Ixv`C6`CsBNd4sEahOY%Hs5Vjz@&+C!)= z8NGDXKHeD<{hnRDIwq948D9mg_*rT1EURfsDt-H6N-rvV_|SJyXW7%&1|90}-1E=R z%{Ym}E|>oNa5k-5mTOrj@98>YD4evk8t~5qn^r#a1(_ycqGDS;|3bv!z~uCQP*bD% zeO~wo6=6I{X^->nHThCmW8RrNT?5Y$i@F#v(C4_#pw3J0_G$7TyUpU4g4m`L=d9&F zgp@hOFd-0_m@uKI$WY}0E4{!AL^T9~&#%VzXv#|IH>NZo$5u9V&z{<(yTm@^m^)lk z>)(5BxuY}s(zP$1$8Sd^^(1HAb>re)hrVUBIR&}P-~KK95Kes5Bn_i-CNI5w%5lZS z?dLSC54uOK*E87{hK%;hLzci$bMt}5#&nlZ%-;v}U}PF!lws7`V$Wf0Kmv(ilA^%i z#jp|_ysB@gNE@=q!kO%BhT_Ovq8KYb#DxH`B*2vWrwR*qoNcY&v2!QP2qucBPM;R$ zC<0LhUms0j0Y^kJ%cwwB0fzu7|AINgA3b`6qMd0)-hO@~8MaDc7G3;yU(;y$t=AAl zJ3Bc&UpS1To4m3y%vnoMB#1~zu#X%Oxt`^ozuOaeOYo6)Ao*pp4J)blx5ohQ>xlh#I-0_ilEn?~}$2@qD{!+?e_n4k;ZHx3om)Yb|m2W^%fI@<9mO2jXW?tZe?C}ub%X0BA6 zB6~t9Ywq)zlB&Xd719v|MJifgdb7+@Fo->J?3lFZ`3#dxhP*_P8;}9+uYUb$Icbup zl@-cqh{MR5wn{ybFd9h}Xz;b?=zXyjS!7)#6~x-4^UxsQ zQACko^Xq1trGT97I@>B^{?SXb6?G`;-eI^i@2}>*rydW82EpfS*3$EJTLMFZhR*ZG z4*-I{zdx>lBby30gDpSlAic9qZ{ND=8P5UkBvG2;>&tHEZSC51my~A1;ceF^dwMqD zP&RuuQy!Th38<+{zj|R-HYfcN6J+`#5h*l(6gCE}NB0c|r_R+k!3o^wk>CL#(&Pqt zs*o@gbMF>qeC~>>7$vx@$Af^e!lAh zgMz;DUFlO`u1uH|BuXB&X0?lp>=Nyh$tm>c2;+qo08#SmIW>mEz@Az35_IZLZLMvA zYG6O7hh?$FFexyWNk5GI&$Y7@h%EquB2l;arVk&U*3^)8ONfgz0LMLBcoqpqy++1Xex%>9@-g?bm3yeh+5D;K9$~cK# zow-#)oAJcGM3N&dQo|6K^i)^J24L~9UfPLOv*rc|J2je9Xm**Im7Z>M%PDk4$ga0M zQBeRMiul3T)tTW%#WA1eYnN&ezwTingKY6cd;apJeQ9c1+Ogc+4Sl{#mfwj!Xd^Dl zfX(a$VuOB3dD(+UkNEfcmoDND_fl`StV>XBv2E1lRI#fUlVAC;r%gcs_ zPc&vW43}3|VsaVyTDq~0_ClHr96Cky(vyyNyH2eAji2lU<~{t`Zyut&`-blKJsTbT z%h7*+=LwTqYTJQ8(GWu&8-4eR81s+BqoA0R6m(Q~EruNkwOGmD9l(*(o-&ftV*X<% zo~)pBWX$m68KFTzQli|Id!r8SrALLmOQ%B1vkRk?a=5LE&9v^7PLL5y z#ctl@)WOS?DrzKH5MaUV*{?tBrYP05w2Yt(6q#VxE27&jr*!n7at2eRAA1G&$M9rr zzbRABW@k%nHdTp+QD|Hl+r-$1gKO88BkkCrNU8&!X3(b0z?_WFn?>oo@H1!B-`^ka z;i1`U@{zp=GUTM~mrKl$lBz5nlshHJ z4#_Hrcx!7XpINAN<=4PD!};_n{{HZX0S~6R*7v9#X#6`&$=Elw#(i?~EjM0VJo8k3 z#f|Bpk-qyv4H+YtLhtsl*&ne#WQD%UL- z!m2#`Zyyx8cv)fE`Q=lt%0sN2tBwpth$kkR_uIf*)L2;AWa}Wmy)ry3Oty1pAa3Ze zMH43MC@A=hYM9n(QaDN%+B%w=n`M@Nl{`3@Dj2PK)5nj(w2I{9xzNa(*9Xo!QJDT_fmrnaW0Ms3B32k(GOFRc7N z$ikxAl794mJL~Cn3`!~-Z!6opgB@8rd4~4X>*e9IeA(v`qNEwl!CJakq$da4l`^}` z(Xo@#Fv0}Fe^vmE>Tdh3t>BF~iBLFiFR^v5?UQ|5ZFs*2Qvzq#EEod5dgtD~QRKYz zw2(3GPD>l-ma;APjq}V|s_F0VC#~W647c8J84w>~kTO;{p`np@Q^3{n>F~6c3~nMk za4s@ofyHX}C=gL|G%r?JlBU9I z=ez-BXU^kqq%Ht3gdjXeQ?iJLrZd6y_yK`ss;1Kd@C0jaD z=)aseQB5h6^s>3x$ttGvDpw_igFIRi-5c6*z$nbs6wz&yc>b=zH5w7TPso~Rw_U9ueSJASEwt3R7SPI?BgwL=9QWWxpbr|s>_H}%ig+29IAYEpsgUrE71uizYJ;wy+Nh(zQIV@#pjHra>bg zp3Wk)%ltPqS`iJOO^CScq3zQ0_uI%H3e$%p+Yk^!V4_ix?TIp^Zgrrg{!07KIRyR} z6zcweK%qUCEU4SDn06hCHIg<%hSQ1*<7SW#$mr(`uF1){|8J;t{?eS45;of-`7XIG zW(qZqMkUu@emb?_*;A6^K7GcmZc@2(aaI9&pn{0V)_lh`*xAu>HWd(D(lp>rV0A7L zeOnliMaOw5)%QuWhSb)pjUH2Plq7E1&Go_^DC6Z+8EBT6eOFkvqjyJ@-=?9AK4>F} zsrc;bqNV9;0VzFGLcd;tP4%W!!VR|H^$_+D=}&AP7o z-7C3UCf?e7Dz!Au7mJoHBe@G-vV>=#J$IvDZ!XHddOGOsbR%R>8!BfC4bsS4sJk8H zZ9P4c&grQSDSz*oIVUrJK$85lBP9;nNmmG899j^EfI^C;4oMs8XI&*xmyjUkp@#fO z2@GpUYtR!^ag<&hty#uV_hr0BZpclcxehGPuB+*gAz#0J>%ZEpefjR?3Hmjix5Fa@ zulEF?hLW%x%Ah~$e0=HrcIBO$xognWP2LK6{rkguZNFvY)#X`_P>ZwY&P77{p3EP} zU}i_>jO;sMm4|^f2q|v;ZXg;&zp(uV z&Yn+?>F-W3xNUxveavFwEqV-8A^k$d8tUx4F)r>ZMNH+lvX`I0^6L?-jQaa){MfOZ zWzcH<`B$5pKlQ8y-bR+XJI`Cy)$goGXne{UJ?=1o>}@brQ>8b-Op2|p9%^EeKB&}3 ztYn zNSfFF*d7pZnc~Y975gz`4g@1prLRfyeCcX{x}~hsxLF$4u3mL9w_bno%PfXsiflYR z7eSyBz9!ff9fcE>L*z8277$;r3;SG%bQ3?~2? zulOWk7ykN1h0zo4{Kyd|bc1`)=#YwFf$I3|lt4LYs&C1I?qyA3e6!$mMzG$qCw^SP zm4J>xu*lFE3Zkro2Q#;rPp9a?1(AncBU;R3glRZ`-pW!W9`iV#%l*V11t=FI>B!5qpf;(0E|y_o|BUD`Um4bx3lNs+~3nk{O_ zK&2+cM%`_inDAiaxuVmIDicvYijS`{O}2Ij4AgE@$LyxdJJW!UUch{}XQM2D>GNB( z$aH%p0#J73On29H7oFrx_lPYU9MGZt&v${%{v|UOO9ujh0kbmdD&5Z%?!&fEOi|I0 zZ|Wwilpb>Y13G3hQF07)d;dhI7g z_)6hs#oTT3?`k3@hn>WK8XpI&)Y9-n2(5av;{gRIL?#NBcBb871vaD)|Omf+DeIGcYSw zeCdmKV>rgWiG+4oj*atQ!e%r&aw?&i0%u~K#Kc^J!79=3m$&&S={nzrgaalS4aDft zP2B4c3yTlh!$a1B_N`(yle&N4IC=e=8bVsc}L)7)yjyJcoj7u@o9X9ODTZe3^zA!Hh|8||%jF=?lo6b*)p{0`maay&C_*w>lRfeA zh_SifRRk!UVA|4>pfltYi4x+Y^UFW2m1$Tw4DNMcx5GeAb7y8r0lR+bA>Fl?)1L>N zUf@9KJ(Ad7y5kgg$$;PfkkRWYKx^cEAqJ949_>HZ*B803IVW`VWo1cd8{*xfZcX>hNuvoQ%HOAsxDz8N&t zG7Km_eGR=9V|R;M$j2U~*&=c6Q?HFV)u9hc8?R z0jIXI`<^PW$)!9Xpqu{zqxQ?>*!~|_Z+i4iE(Jc=xAm6ta)#Y`03U$!E`y`UCi4&U|8_f~F zT=@G(@T(#vK*E9wyu9;L@B0XxkRcurYvbvwuJ{+SeqyXsGyaSdz14z-LYUS5->|oJ zZD{@ndTUK}Rk)Q?_9g895nR3e6r}I??CL(|KL-3C7^%ZvQZSUtFYx;1ARrrJ zGzL!-h{%EArP#W6V)92}VIjpc!o1>=l3Qt3JuOpqGgNNtyA@=1l#L{g(AJ_>)GJ8X zuAz|xgR%^F0*0jkYz%S0eM-}O#Kw~6Ak2Jo@X;rLo0wV%lLRTMkd6#axye!7rDBZd zeIgcF6NjeAr(o9ReBo;WCBBdDjj2w~YU5r}s&Y{BNs-q3uf62gBO+X{@FqBFmgJiq zn%x>6=A@+mf8(ua4`DBaiGspvz+57dQOm&RyKlhi>>aj9&}VyE{_}pr-Sn-jp48NM zSoWY0BkmtgPZx;@_#Hw_6$T^+#~Y$SV7<+;8s9}T@2Kozcya2d1A1kI6Q=W~(KClZ zz9`^?4@e$cHqv^OrlyU(eayuGFrw~iY8flxK13qwAhb`7k))08x9pbo>}FwcLVkVv z$&*5#0!gFl;Z5^JLIsvy9nTf2Xyr~xcr`$NpW^iY15@oY)#bmz-D2><@#7cM(9%2` z+ME=lxOn*bOIk0EKL|CK(`xJO?dwa6aezpe54^a7b5cwg-C(1z=rZ|KO~FnXrTLZS zUHWKf$ci{z$aEc^bC@Bc)jIsJD{>!YJ98=>4B`#BjuD)i6{^e`BZ*sY zty_t_Q?924T+o)isTEi4#_PzcoGdEZ>B-ZY=H~~3A52e*hmXY`BePOf@tVSkviK8< zJx3tuAmcmO?aLNaDU8WNS)ceZb9=sDs88Ab%ND)N2#VPUT0RH~uftA*`Ww2gE$??1x{0TsJJ<#&ylU3gocE1LQw&Qo+ftr zp`jGLhYX(rpvI!OyXZfv+_nAn>+jqF;1GsWxBG93JX;Z$*K>;~(t6sFL;qJ}XCBvM z-tO_cByC8$BrT$(q%f(ZRFtJ;mnfBFU#5scR9cueYqmC$UD;_kAM~aQ2uC7(fKxNtGGu-zXs|c??ZVP(Ms zg$w()8!nkYKWR|6I=6v=&Ji3v#E6#8C|4S6_2_&Ni#IYVibs0)^=Ik%qi2iiPhnh` zVvMI;oZ^gWiJu8SpaHBhZml=$-JX@iTKPwXDmx(iP}8J{gbbznB%Szc%(jtfUq{c+ zXW(K$ofZwOu(tDl+dt9b^#SD=Gu_i^37gGz5Umb`faM`y6%xXxr>>@UJNfE>LxTDL z18eO((%JE^OK<@jhs%{WR?W8T;YYm+Y#D!TX}PoU>ZlVxm;8`|?sxv3v&PBEVEAya zPtFTYAIJcIqTGco4{U-mO}8)_KU{aZzm&&K*X*BCwB$|Cp7e`$O{B=kc;_ltZ@7Q6 z+$~_;TbBPJNlhE~^OgB_daANIE0wnmybLj%apE>9I|NZf++`g;Oj9Cv&2h$0w`+7J z=p{ysb2c?s#FLcCFK&t{MtgsWV~}PxtS!W)RtD6k^VaM=33E zv;#?v7_p)70L9R$nuUVhk~J+~56SFm=&&j{SaHE65KpK4lDegoAJ&Y885FFmG*oSm z>+HIMc#|S`LsQetMw!G*2|Bxr*rl)tA31zDS`p*~AwiYC$&?O*CihmlusdtNY|y#L3`x}O9=Is95-xV z4tOGngCv}tW#k&(w;?9ZI&wt5b7up8)wJJcmCn1}-?E=h_Ed%R%uH#4hPFvvO`ylo zP#Edqp{bN3D$>rM;Vg2mLj+MjEU7K@EAIj`T)_OWxL7}T$&Qj|2Doovb70?acvQ}H zMHkuV@SfuHGv3sgoZZRE$G)qM)gqgNbJ={(ojJpkYi#u8QKOlYZ<>)(q->dKhxPw1 zPHl{z>(V=H+6-0s76sIpqt5I9OFgUCwP57T!BuU)UfCGgYj9QPC~xE%WIRmR{3uBE zVS#st%D&#GYEaA2^s-U4e)ur+!t!VA+w7i&KG_5W8r_`F3=F0z-a{Gym2hoyceE$U znwtF-qpm+||MY3>u0g0H#{ndeAVqF_?*YR`6c+;w!d0QaZKikw=_%Ka6lLAhdKoCu z(EEw@0DjAGaxt)Qu$K99k6;1+kdK-rkEJd};R$%szH z+@;L}Dm&JF*itoKtYTxuBrhgB$`37}v<*%Xxi#pn${SPFdZ^7?7^vArj|@&WMuHO3 zkG(w}dHL;{kj1{MyYe}y!#E*e83K|fQQE~{+j6%q;a~9N-f<5HU?Og8v|F&9N=FdS zK}27#qT*6g9%1yZ_y*c4nibL69X@(=?8KAD4K0IaU+{dxCI=eqx=wP{R2ielA`lfC z`Rdx*xU(&HDl1=(z2$Rc#zLvt^~a@LlmT^}t{I~{G8s59`&15!lHc##8Mo8SK6r6% zuA|a|5jmw{!LVcSIWe`?E{QV*D-nFZ;*)rAz@#Zt0CRpdzrVvSZphezy4HSRajS;g zyM}X~vvW$2>i&Xv>gZ)Ct*;JWiGF2@*uIN=Wa-2X?N*qmf|D_7+@a#Bu0B84si;*a z7%kx!sa3@kR?OX15noYpacsE3xBR@EWk zcoPAsZr=v`{m|U3GbFt*^yK3@*&BaerG*Z`6xU~q%d1Hi%o%}FW~CVS>j&b#OjMy7 z>t>#q=;1Nn-+$wFS4Odl#PBc^_o*~c$buW7w!s5X-F^6c;l|E=(f}P@H#9dd4eXP~ zbIvAUec!iNc(*aMI=t(91~+cr6dn6Bt&VjKZ<;K=hfeEZZpHIOfMZ2LVAr>cuUXRV z+S)hu^^UKML2+V+N#E!s!Zx9HioF9wi(vggj61zeO}m6B?CdJ)J#BU9Xuh?- z9B|qn9mrft0y>0YCMuar9`nFFecC~w2|15m2e2&!U@^1PcX6l~DFvSgE7@JdbnjJH zrxxc7)R0??4g|bfRiLmILmBf;PnLL>a1P$+#E`|S^t!|>%Lr6>C(oT5)ezuoruXjS z$5970X#R$yeSjtyX3|Z%(pOY|>f#p*LJ}BQRK!KyyJwH(-jvYzwuGTr8tF3xI~Nxt zb91Eb1+V7CnC;vrB9mQJ0OH_K0MRu)s}8yaG9xmsJB zFQS>NHN0#>S(ZoYL}!nQ16+DZ=ef*1V!cf|QaBqtOTr z&0W9Vo=2!@v8C2cQJ$u!C%`C+KoXDC>v?HrJ7-BzbME|>0hI+$MgJ z0rJ%t8)-~moEtvz65-u=40uiW6(8|PqCV{e$?){mD=kGu@j_nQ!`ZNV*RJoTGh4#f z*wWI6ISka;EW|eEdMikWgGFGpgsbCynZ{qcL^02gMwF?lax&`6TB4p*fn+dr2>675 zXC;Y~lEfvSr((ku>NalLv}#nPD0zg!q9Q#jE6sv2wHBX3zoK$n2OX^)-${V*qX(H| zo;=J%UAi)aokhCRNYpNI>Q(&INC+x3UOxj8|8aV}MjK1uWN2H<&Yc>9x0wb8IE=#l z<@;-oh_7{UTDB}3P@48kf-Q`(*@$ggdFga4(|5!PRVckA3&SKj5USHtOKY`vFq`^ zjkYdC5F$M<)#XDXZjlZH_haT=Sf~p$c|}FHFJ3GGVAa;)JFZW5cW>I;@R=j;Y6)kV z_;vom1&)HWxzFswAMtQ|nyL$;$%GIG#$&lZy7OI0y?*p;v_2;cLcyFn%gAU93Q*j1 z1t$I)(#mH^{nxyB`4W>PZ$|%w`-r1o8FkdeM6Jdr=7N?z}BImp`2XeHGFgLjB%enWX^wh zu?_Dah1TX5AJNdT+2}4t$4Zt zSe1;18$t%;CWi+z1Ar>+ecNYPo9`yp(7XmLL_r5D%fC#ia4O9{;C-=+4R7ugj@CX~ zl2cORhaAuqk3jA(Oe-&zfAs0a9b-VG#fk2H%GGDweaC%Aq7t*XJH}`B9okgfJi;EL zUs{nQK2#Vt{q4>vID?80Qcsko;F zBzO&Aq2Cok2pr-2P{6kC+M!O>xz%^RPt)2Xjd~X^=K0o3uFz~Z;|#L9m5=UA-t);) zOYW7Rvs}L(iS}c62N99l_QVv4r|8*1+JID72*W!6dixdKyct*Km(Swo%&1=z z#cuTK=~GcQN!tRa4>GB=gAys>i2ZobdE!=f??zZ)i`;>4O}Nyr#pt#msMfhS+D}pe zz5{^9=&> z&B39VoeQo-q?Ev~!4)R%ct$)AS5jJZd-D(Qser%7c7Mx_rY;zD+ji||jn^KckheMFLRmb)SObel&uvr6`vdcjkcps>d?z*j~+?C4-nv=R)>USd;=Io{Vxv6 zSmyDTg8yRu?nc*Q}=bOyA2Pb*^U8}9t z{w|Wz+kfT^Qs~564dM*QFlg|hz*+BC*=WCe|BteBr?|fe1%nynNWou{PEv!(sP_Ca z2gnE7yC0n@x_ya04 z-k6^G48f05rE$=8o{CS1^V{3y`bRqdgQk4H-2}sX*kCqJa8MwAA1|Qe9tw(2-`w6> z{jE&jK`t4BjM1@VcyYT|~ZXC1#(dcv#GEP=goq2w#gn*dA zbLLDmo)bMiL%*~K_1S`WeC_(GtRJ^`36C>1P|QWzk~UU*Tl(gM82F$jQbJo~FRUm% zyXJ>nKXKDp<_4@6jj)_zqzoZOpsHa=U;T?0v1-GWm30qfEsm((b>O6&C|5wR`=PZ} zcntl)DL|&mbws?h!-o%x0ZLp~gTt2DN~3pWEFF`W9^`vblkA99FyDeV(iF#1f+fpa zo7j}dvQKujxL#JKJNy#@9u^_}&&UXvCgdTD@1GsFFdvnj;Jt9+=hmi)dWtKl3}HPxHS1LJ3X zA%RWwQmvnrx|<9dwAJQ#E?H%O@A>5!3B`2`mQhhx-=gdVWwG~Mbo0b*nOUK>-~Lv# zZe=Z}`tIA$ng9=seT^<8P0rBJkj7C-w<^f-Sm&4*=Z+l{W8F(F1fg}<=-?$qSHqct zC7ss&&r&fhRw_0#E6dr`$(n^{H*S=!8{|CmVe5h^)%^_ZdYXBKzH<__qQST! z>U$>n#!j{!C)?CuI9_qO$4{9r3tb&j4yL6^yw-Kd&E?X>tQ>Ohq%OMrFGR(zZhkDW z>;$=Xv9Y6lef5W4{uhVwBDBKVA+?7uvRmPCQGcPL^(nmmczHMe)khs_5yERkKiTxtpfMun(%fTOf5Pgc zXnaPmRiW~d42z2DbfKUDz=U3)O7gu^o_0X&uixB~iyjVDDPN|^Hd4Bt6Q`5V(r?@g ztMuQczqB*LTKk2C-CsCO)zxstwyOuGp9a_v>`42z+ZFIwVQA+GQ-AuhYg_3&JAa+r zlEDAY=!lf*b|iF{((POBsX95Q7mvOBZtYFk_EZfsZ$WdU)1$F47Hs<^eFyBy4>Ogp z!=^DXD3#-U*swKV8hrOoZ!jAGS5|yu{bC=V5np4}#>FV~UXpjiCmU7=nSz8sJ_$^2 zfN#uA^Sq#!#MZP?K9v5fU$0kS#*Y^Zu*yp1eQ}Ek40m^5|HrLv-4{XSiQ?w3yV*mL z^ou!1L%Xq{zw;YzKtfzd^!52`zuc>-Nq(+)LM1(^+rF(j`T-8wlBZwWhlE(S8=Z|a zJZ*n!?WWjRXgA<#oT?p#{%Y5Yiy42k2%(bU2Ir@Vc>w~Bz{}od<=#@=TRg`!9i9=p zYg;sDjC@3@#JDH+x>MScMjH+pC2=t;$k(rvTSREDPXq$9_0tQV0ZO9R4t;k;y?zYP z8=q!LKmaiTZSXhI^Be;v%>IkP7|bS$K!F>6yUgR$^z!Mc;+4VwJ#5|A+_<=##7h~u z?iCXOsFsf$xzE%~t1aW>TI9DN8z2)VGg&fKdoODX@;El2ag8|Y7=sVsFtDkb0Kme) zh7Gk2?Ba;_h+z$d^x})G2VjtM@Z&Ch3oBK&X~p>uDed-R+uFbvSr&_;^UjeXz$3`! zUE(v9bDh=~kh)uZ2Ds=(|Ds$VyvN$FCVU2mI`vSkZuA*M6sa)wI@$@OqKM#RTJw8E;vS$VjbM9b1z*Gm?l+EYp`gMiQ*}X zr-?nQ-r3ESm^-)Q{;b7D^QVj~FM7pw%1H4sc3mOcak)xrrxaI>`OVEGf8uIs2X~No zj9i0zF8QW_AOpeC$qCCblAlN!ZsHHk_^2qe#HJT(V)3J-fMIKCjorKrQJCUXM8x4k z-Z~&nRuYhvTGLo?QkF=E{LlP5m^!F|L$*tkh^SNgBfCu1A+&&G-L>ZOU(dg#67X%jm;040vD z#A~TXj)dS2pnRPjFJbkQc8w_XzkBxt;?Vnt%~U$>KYt`-{&t0X3E|FD7G5bcO|y%W zY<*lQ>(F_HX07sg^%2l{*&z}V%QYED>5o(DYxyK>Y%5ouz)9T~P$7yt%E!o$EA!8u268m`V!w>fjboyNO*M*!UF>{^CO>&?xhOh30) zx(PZqFW^c>es*)Wi`{zZqJNCGrc_k%P)aVQM^8CA&0fZC=CU9ANx<1RaH$|aiK=l; z^G{Yb?`wXx!;AA7w_fU^9;G1FpUGceuw==o+78KoM|db&&yU_0PR(9lh&r{dkS1IL zHH~ez|4aYvnjRQ^sw)jNwbYg!JI?u)B>{$ae@3h6W2VtqEdwV$bLO}kN2&?t0GTHm zE~YQuw)^>OLI8JygU^HHJ64Q0n$~{`f)>&@NNEvJ+@}y%NNlkfqRWZM!>jLUU8M6N zeQKtodEvSb28jcl)4-j)s`WaDdEWJTi6)4BV$=DOhWE0IQbRbGDZ{OCd%z(~TEVSE zuAB$1Ly@vKD16gk?HmuO)#D8p?)E&5gOaIZSTp30eX$qg*&C}@r{}Wx!q)yKHzQIE zpBR6{u|=fjjvqIrim@zF4Va|0Mt0uwXcbq#Q3r#_kL8d}n`66kar&R?3%xH!gROXY zCu*!`yfy4p*`|D%^Pb1!^<`}=27 zofZ@noI3Thw|6Rk$;fz0@fkDWE!p9raf$S%*n?q}jr=m_*|0a$U1qI7Fu*QJS>bqZ zh*L$dO)aU@w17lmiUE%J#s6$;OS?0c-v4xVcABZqV4nrsi~3o0FbT6+_9TK9m$SQT zPba7hIm}mPR-2hV`jFLfw_K>+$bh?C!O;t zaqirv`ZfP~bkhV3hYFe3fS$y3Vqi8g1RsZIT8Aj!9GZHrt|ROq?&21$iyu|B<5v=+ z#h7fc9Kdp23k&5)aluo#v7~EhFzIbqPbvM_!8WDq!;m5KJ~r@6Ac-!w+BCl2nUYd~ z*3KuVjx|U&hYe^twnjSZydB2BF+2zofk_31B*3u#(haz$A2F4r@7d?<9V4ij@B_Nr;nswpcw)P~G}e}R=PD{BJ4rj2@OFFS|Y zfeAHq_Xu-SGp@_@aoyAS*SFU07Js-1lFu3q z1_iv1c>#&Kq}72_K7T9D6Jq} z`QuLAUqvSl6hj}`ik@=)7$UsChlkdjB9>@%-Q87ud~6@=r9T5GGm1&()tjFJ8_V&n zSXo-$V1PWE$1sE5(&1@c#kXc#%+8zeF@fZV^5xwXL<<()KfaijMyq~Lf1(81Rc1Xt z{YGz25O23=3;gwjr~Zl??ZJc3-xj=GJZnPJ6U(q(Ihs99=DT+`iBMYL-s4@`4kzcP zbhR^CspC#Bc(ks(pnQU!hl<~T>#6BUE0Q8ibFxk+=-u|$+ETUWXvN%t4-($levG?o zI?VUct@)Nwv;A)tzS}hS)7}Xm8zsX|M3xJwwiN-b&CTVnS6q6y_|WD|@+SaD&t36p z`gD2WkclcEE}Toej-UGtX?BJxs8@J8-nWHDeoz~Zt$X)x{^#!Z>=HG}l~E%yX%co1 zH(XA=|Jv5ds%3RvWXF|rSh1T&`i6vDniQWjdne5m6Lp?H_s^T<=Du~xkvmO+Doz!H zz7Rh-`hcVRRykz@r5Hc+?lF$jw$GV9L@8#e)=DHFa*DOg=J+iuR@9oe#xA-=}OD3u5>A*SHwvRs`ddw)-;=2Q6tg_ zbDq~xS3`k-4!4@;iRoE5bLZ7%oH{kpUw$5o1k3&du(z-Ux#%8J3wVZ|h z)y5pGtXVikF=A{VPL0Z@z(tFW%{p;6V9*5nXqN4+%2-kmk&Ih*8lnYw*9{DDnV9z@64a+<<+ptR-1&f_>Uhy?g;E#=6Czq@+;Us zY`8O4W@gO|ZXHt^+S)Gcx$AMrtiLd4M8Nn1{L_Fz7f+sCx^CTxJM$Z!Kc}|ef85jb zV{2=Dpw+Egw`6tc01&J6>YJaNi*)zc@#8Hv!`UJ%EVkTgn0RRG^=EQYl9Uexdq?79 zkz8N+^=p33!afo8@7w&$3Ep`2@y~I6lt&bQb3An7!|uY9!q(A48n)PELH8=@miU>g zu3VKjYee+O442+YSMoUNVcH{s?u;W6NZa)Ca#s|EdNSB&B42YVL?|AtoZjwG*tfc- z=H2SNE3f6e791$zrydHvdF`jp{g_E|;LiLdix<1Pxy_l0c!51X-H@fMmJ&<~1fr$t z5tV~$`UYuPysuKXFvR_<`Y<&1`JO%D|E*1m)%D z_fe7^5#8D=Z1c6JZB14ilIER8{L7e3mblv+jjwSOzFw_s?|Y3>khg2|`}u3ZZ=*Wz Vy0PH>JaH+wIJr6=AK|^>zW@ZG0PO$( literal 0 HcmV?d00001 diff --git a/pypdf/generic/_annotations.py b/pypdf/generic/_annotations.py index c2f43af90..f9f8b44f2 100644 --- a/pypdf/generic/_annotations.py +++ b/pypdf/generic/_annotations.py @@ -210,6 +210,26 @@ def rectangle( return square_obj + @staticmethod + def circle( + rect: Union[RectangleObject, Tuple[float, float, float, float]], + interiour_color: Optional[str] = None, + ) -> DictionaryObject: + circle_obj = DictionaryObject( + { + NameObject("/Type"): NameObject("/Annot"), + NameObject("/Subtype"): NameObject("/Circle"), + NameObject("/Rect"): RectangleObject(rect), + } + ) + + if interiour_color: + circle_obj[NameObject("/IC")] = ArrayObject( + [FloatObject(n) for n in hex_to_rgb(interiour_color)] + ) + + return circle_obj + @staticmethod def link( rect: Union[RectangleObject, Tuple[float, float, float, float]], diff --git a/tests/test_generic.py b/tests/test_generic.py index a59cd3d3e..75bde724d 100644 --- a/tests/test_generic.py +++ b/tests/test_generic.py @@ -798,6 +798,34 @@ def test_annotation_builder_square(): os.remove(target) # comment this out for manual inspection +def test_annotation_builder_circle(): + # Arrange + pdf_path = RESOURCE_ROOT / "crazyones.pdf" + reader = PdfReader(pdf_path) + page = reader.pages[0] + writer = PdfWriter() + writer.add_page(page) + + # Act + circle_annotation = AnnotationBuilder.circle( + rect=(50, 550, 200, 650), interiour_color="ff0000" + ) + writer.add_annotation(0, circle_annotation) + + diameter = 100 + circle_annotation = AnnotationBuilder.circle( + rect=(110, 500, 110 + diameter, 500 + diameter), + ) + writer.add_annotation(0, circle_annotation) + + # Assert: You need to inspect the file manually + target = "annotated-pdf-circle.pdf" + with open(target, "wb") as fp: + writer.write(fp) + + os.remove(target) # comment this out for manual inspection + + def test_annotation_builder_link(): # Arrange pdf_path = RESOURCE_ROOT / "outline-without-title.pdf" From 6f9f56a5696dfde42ca8d1fa444a801cc1ad35bb Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 15 Jan 2023 22:56:14 +0100 Subject: [PATCH 2/5] Fix annotations --- docs/user/adding-pdf-annotations.md | 2 +- pypdf/generic/_annotations.py | 28 +++++++++++++++++++++------- tests/test_generic.py | 4 ++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/user/adding-pdf-annotations.md b/docs/user/adding-pdf-annotations.md index 6644e3100..8acaba799 100644 --- a/docs/user/adding-pdf-annotations.md +++ b/docs/user/adding-pdf-annotations.md @@ -135,7 +135,7 @@ writer = PdfWriter() writer.add_page(page) # Add the rectangle -annotation = AnnotationBuilder.circle( +annotation = AnnotationBuilder.ellipse( rect=(50, 550, 200, 650), ) writer.add_annotation(page_number=0, annotation=annotation) diff --git a/pypdf/generic/_annotations.py b/pypdf/generic/_annotations.py index f9f8b44f2..a757e5ad4 100644 --- a/pypdf/generic/_annotations.py +++ b/pypdf/generic/_annotations.py @@ -185,11 +185,11 @@ def rectangle( """ Draw a rectangle on the PDF. + This method uses the /Square annotation type of the PDF format. + Args: - rect: or array of four - integers specifying the clickable rectangular area + rect: array of four integers specifying the clickable rectangular area ``[xLL, yLL, xUR, yUR]`` - rect: interiour_color: Returns: @@ -211,11 +211,25 @@ def rectangle( return square_obj @staticmethod - def circle( + def ellipse( rect: Union[RectangleObject, Tuple[float, float, float, float]], interiour_color: Optional[str] = None, ) -> DictionaryObject: - circle_obj = DictionaryObject( + """ + Draw a rectangle on the PDF. + + This method uses the /Circle annotation type of the PDF format. + + Args: + rect: array of four integers ``[xLL, yLL, xUR, yUR]`` specifying + the bounding box of the allipse + interiour_color: None or hex code. If None is used, the interiour + is transparent + + Returns: + A dictionary object representing the annotation. + """ + ellipse_obj = DictionaryObject( { NameObject("/Type"): NameObject("/Annot"), NameObject("/Subtype"): NameObject("/Circle"), @@ -224,11 +238,11 @@ def circle( ) if interiour_color: - circle_obj[NameObject("/IC")] = ArrayObject( + ellipse_obj[NameObject("/IC")] = ArrayObject( [FloatObject(n) for n in hex_to_rgb(interiour_color)] ) - return circle_obj + return ellipse_obj @staticmethod def link( diff --git a/tests/test_generic.py b/tests/test_generic.py index 75bde724d..0f719d924 100644 --- a/tests/test_generic.py +++ b/tests/test_generic.py @@ -807,13 +807,13 @@ def test_annotation_builder_circle(): writer.add_page(page) # Act - circle_annotation = AnnotationBuilder.circle( + circle_annotation = AnnotationBuilder.ellipse( rect=(50, 550, 200, 650), interiour_color="ff0000" ) writer.add_annotation(0, circle_annotation) diameter = 100 - circle_annotation = AnnotationBuilder.circle( + circle_annotation = AnnotationBuilder.ellipse( rect=(110, 500, 110 + diameter, 500 + diameter), ) writer.add_annotation(0, circle_annotation) From 99f7fb9696ab9d949195b824b0a54e14f898af1f Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 15 Jan 2023 23:03:11 +0100 Subject: [PATCH 3/5] Fix docstrings --- pypdf/generic/_annotations.py | 39 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/pypdf/generic/_annotations.py b/pypdf/generic/_annotations.py index a757e5ad4..f606ce5e0 100644 --- a/pypdf/generic/_annotations.py +++ b/pypdf/generic/_annotations.py @@ -37,9 +37,9 @@ def text( Add text annotation. Args: - rect: - or array of four integers specifying the clickable rectangular area - ``[xLL, yLL, xUR, yUR]`` + rect: array of four integers ``[xLL, yLL, xUR, yUR]`` + specifying the clickable rectangular area + text: The text that is added to the document open: flags: @@ -76,15 +76,15 @@ def free_text( Args: text: Text to be added - rect: or array of four integers - specifying the clickable rectangular area ``[xLL, yLL, xUR, yUR]`` + rect: array of four integers ``[xLL, yLL, xUR, yUR]`` + specifying the clickable rectangular area font: Name of the Font, e.g. 'Helvetica' bold: Print the text in bold italic: Print the text in italic font_size: How big the text will be, e.g. '14pt' - font_color: Hex-string for the color - border_color: Hex-string for the border color - background_color: Hex-string for the background of the annotation + font_color: Hex-string for the color, e.g. cdcdcd + border_color: Hex-string for the border color, e.g. cdcdcd + background_color: Hex-string for the background of the annotation, e.g. cdcdcd Returns: A dictionary object representing the annotation. @@ -135,9 +135,8 @@ def line( Args: p1: First point p2: Second point - rect: or array of four - integers specifying the clickable rectangular area - ``[xLL, yLL, xUR, yUR]`` + rect: array of four integers ``[xLL, yLL, xUR, yUR]`` + specifying the clickable rectangular area text: Text to be displayed as the line annotation title_bar: Text to be displayed in the title bar of the annotation; by convention this is the name of the author @@ -188,9 +187,10 @@ def rectangle( This method uses the /Square annotation type of the PDF format. Args: - rect: array of four integers specifying the clickable rectangular area - ``[xLL, yLL, xUR, yUR]`` - interiour_color: + rect: array of four integers ``[xLL, yLL, xUR, yUR]`` + specifying the clickable rectangular area + interiour_color: None or hex-string for the color, e.g. cdcdcd + If None is used, the interiour is transparent. Returns: A dictionary object representing the annotation. @@ -222,9 +222,9 @@ def ellipse( Args: rect: array of four integers ``[xLL, yLL, xUR, yUR]`` specifying - the bounding box of the allipse - interiour_color: None or hex code. If None is used, the interiour - is transparent + the bounding box of the ellipse + interiour_color: None or hex-string for the color, e.g. cdcdcd + If None is used, the interiour is transparent. Returns: A dictionary object representing the annotation. @@ -261,9 +261,8 @@ def link( An internal link requires the target_page_index, fit, and fit args. Args: - rect: or array of four - integers specifying the clickable rectangular area - ``[xLL, yLL, xUR, yUR]`` + rect: array of four integers ``[xLL, yLL, xUR, yUR]`` + specifying the clickable rectangular area border: if provided, an array describing border-drawing properties. See the PDF spec for details. No border will be drawn if this argument is omitted. From 7f9726bb451067f9194f0f5fa4a7e7e7a10a886d Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Mon, 16 Jan 2023 21:30:49 +0100 Subject: [PATCH 4/5] black --- pypdf/generic/_annotations.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pypdf/generic/_annotations.py b/pypdf/generic/_annotations.py index a9a08e716..6b3bc7fe4 100644 --- a/pypdf/generic/_annotations.py +++ b/pypdf/generic/_annotations.py @@ -244,7 +244,6 @@ def ellipse( return ellipse_obj - def polygon(vertices: List[Tuple[float, float]]) -> DictionaryObject: if len(vertices) == 0: raise ValueError("A polygon needs at least 1 vertex with two coordinates") From 647f5f211ead85ecbd93c1a50189b79b302acd76 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Wed, 18 Jan 2023 23:00:53 +0100 Subject: [PATCH 5/5] Make method static --- pypdf/generic/_annotations.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pypdf/generic/_annotations.py b/pypdf/generic/_annotations.py index 6b3bc7fe4..7cc772279 100644 --- a/pypdf/generic/_annotations.py +++ b/pypdf/generic/_annotations.py @@ -244,6 +244,7 @@ def ellipse( return ellipse_obj + @staticmethod def polygon(vertices: List[Tuple[float, float]]) -> DictionaryObject: if len(vertices) == 0: raise ValueError("A polygon needs at least 1 vertex with two coordinates")