From 3706f38bb200d2b88224ed7140fc417d855410fe Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 16:16:18 +1100 Subject: [PATCH 1/8] Infer bib engine from file contents Add test that the layout of the produced PDF (in particular the file contents is what is expected). --- .gitignore | 7 ++++ R/latex.R | 30 ++++++++++++++++-- man/latexmk.Rd | 11 +++++-- .../bib-inference/backend-bibtex-a.bib | 8 +++++ .../bib-inference/backend-bibtex-expected.pdf | Bin 0 -> 59529 bytes .../bib-inference/backend-bibtex-expected.txt | 13 ++++++++ .../bib-inference/backend-bibtex.tex | 9 ++++++ tests/test-travis/test-bib_inference.R | 18 +++++++++++ 8 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 tests/test-travis/bib-inference/backend-bibtex-a.bib create mode 100644 tests/test-travis/bib-inference/backend-bibtex-expected.pdf create mode 100644 tests/test-travis/bib-inference/backend-bibtex-expected.txt create mode 100644 tests/test-travis/bib-inference/backend-bibtex.tex create mode 100644 tests/test-travis/test-bib_inference.R diff --git a/.gitignore b/.gitignore index 5b6a06525..1e13e09b8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,10 @@ .Rhistory .RData .Ruserdata + +*.aux +*.bbl +*.blg +*.log +*.run.xml + diff --git a/R/latex.R b/R/latex.R index 7e729653d..2351347c7 100644 --- a/R/latex.R +++ b/R/latex.R @@ -21,8 +21,15 @@ #' @param file A LaTeX file path. #' @param engine A LaTeX engine (can be set in the global option #' \code{tinytex.engine}, e.g., \code{options(tinytex.engine = 'xelatex')}). -#' @param bib_engine A bibliography engine (can be set in the global option +#' @param bib_engine A bibliography engine, one of \code{'bibtex'} and +#' \code{'biber'} (can be set in the global option #' \code{tinytex.bib_engine}). +#' If missing, the engine is inferred from the contents of \code{file}: if +#' the file contains \verb{\addbibresource} then the engine is assumed to +#' be \code{biber} unless \verb{backend=biber} occurs in the optional argument +#' to \code{biblatex}, provided the package occurs on one line. Otherwise, +#' the engine is assumed to be \code{bibtex} if \verb{\bibliography} +#' is present in \code{file}. #' @param engine_args Command-line arguments to be passed to \code{engine} (can #' be set in the global option \code{tinytex.engine_args}, e.g., #' \code{options(tinytex.engine_args = '-shell-escape'}). @@ -57,7 +64,26 @@ latexmk = function( } } if (missing(max_times)) max_times = getOption('tinytex.compile.max_times', max_times) - if (missing(bib_engine)) bib_engine = getOption('tinytex.bib_engine', bib_engine) + if (missing(bib_engine)) { + if (is.null(getOption('tinytex.bib_engine'))) { + file_lines = sub('(?2+fF*RZQC|FM#q|@`+4Sl*UXpyTJv?X)~UN| z*G6sBIVbo2h-C$ZspzPgpopjD`j?;>@M!U@_06C-IiYAI4XunFOz;?3>G1ykLD2}C zS~wWm;n4_N=s6e)8X8!CH-zHmhO&3CGt{$$a#^vA;j`YwLkPThM8UQ!4#((1w=*w2 zkiDH#Z&&0}g&b}%v)S7^xNwG;uqru&`~hy=;ks5IW@eZIY@DxmmYCBpmHj=!1i)~7 z1=gK1Q=%fC;yh@&D1&-s=D5fCS+jkcBmUydpq^gtm+JO)4!sOh(5g=QHjA#%#TmxP<%@eVVMjA4Wj znv+7KgtD+g_3(_q!|@;yyxxVt*s&9O?Gs|_60SifH-(S}sC+Xto@{VEo3Z351uU~9F{+*bY*2L6B)aJh8XktFQP$!{(A4_g zjuZPp^`w%PsP6&d5>u1|P(UtMC8R z;e-0DA^m^VQqk4M5RXPy&)5)(M!?$2!O+UV9`Cc*@=!GLhW6Hub_Ry_cyxamQik76 z_4ut_@HA*Y7))$T)buROc&v4CQnDLnYC0X#8|0P-RSpFs1@L2zlA2w-Z?W_$H3?1+^K6WiAj7Otr=;DB< z_1SFyy8GPQr#}rQdM3R8fBlbgp!L7A_iwc{nCKX&8Sq#bnW;aD@`q+-V50u06%z|J zE8bt4nUyn zVf+&XEdw~{{2@h4`}gxtlQDcG>7zyd$bYW>mHvmz_PO?#!^ZIG=a2sX zmSy_0&dBt+F~$!&tp5q-^Jeqsra;f~nHC0y&$jqWfBOHQUVkr`*RyNBhyUA6@;=l=;tD`%j?%C-tBCUt^4npB?$%Gz0CQ zGx3?EKkoi&{KNg@>o14(PfGvF{7L5@X{J9C3?KJ~kHWG2>2}u7uKOeRpYnV@0RDYO z{C&Nk!=qzlV*U4JbgiGSK$Hzz8@?K#=+62M~M}X91m33z+QIgAia7c)Q!RM;C}b zrv=eG?nDR`g@AB8Q2@%Z@>PdmP!HE`Pp$i z3v?IsLoFKs9?vDu{@eF=3K0KyX|UyGd`(S08(j1?9DqPJ0RVQ2)E6>qWEubv@OL1; z^z|=|k9aZ&V;JAvp&!=SA+iZ7!2#B#AB?%3If%wk_9rgj?BAI3x+>`#SIc0)DG4++ z@oeHb-YVbXbwz{M&pMtVUf48AS$m+*?;Ak_ySt}!41BmWLBqFbS>S_HXK=^Lq2F<{ zxIjP=P>_+4(c(aO*8mW#Ilz5&pwXY2_`Se=JJ%W+KpvV2Gy$hp>F@w)$@cF2FAm|Z z0{~=2;YEEmy}{osw}E{DXvg3{s{)sLw;tXVI~@hGy_XvgqXJxk$3U%rfrCK2xxL*O zyN=S*0-c}Uz`xvofj&Y%{)Ikt^Mdin!v_i)z|s{Zqln%`N(2Q0;M)@mU@OPR+tqn; z#Bw^^OGI+?DS6hG&&>;@hI+i@Ku>efb`k%KH{u z0n~%>(n-gJe54G0ZR39UZb3Mv1$qDrc+w;51m``yPt!R~lf%}#g`gF{ak@AUv;_0C)C2&4?A!P5n2X2{0Qjm?v6+}p#M^bwgL;{03l#lMZ(Tj*Et!qS z3-G2>2*C^Rs8dMB+x6P`Sm|}f89k&i|7J9IM(e%WSqTBrhov9H!x32Jj&T0K-S$`} zpSclcZ7FJ$ZZJ-ikTz+Jy1Zk{7aljJ6@&4F;!2RUcJJ%pC6sdVu#J6Fzo{(1B&}!= zt36xro^Z?XI$clllJceGe49n%T1hM11;*nC{Niin`b&gBIxW`J>KvQh8YfY()zB)i{tndOom-UKbZgR3O%- zb%L$)inyp)Y_XNv$I@Vq34w__apJc;ff6ck?^>k z(Q|^BwKLmtMBF!a&*@n?7}!ByXPx;~j}UA2dL7HBdVl<{^uj1~RfnT&Q(0-|209BF-jqfguteh;~^Fg!>=?&bTDYURw7g_S|j zxnP+RAApn=7lX3FDYfzb^Fg=kHz2lv?R|qsmUQliC~X9 z;qoi4ET{_YcloYrl7k62;v|+NUkRDxs7tO~3EH7N(+BU5E6gM+@YtQ*5w2}b<-_M3 zK!vijaM%-ob2)&2-Nu1yJh(DbxukVJ z6sIbzig5@}T)OickbcJq98f6bCM1zlqazvu(*XOXPR7MyiJHly{JyiIjwZCNKsU=% zuk8DPO3aL0CbJ%WQOu6I0$)>{icT7q$&qbpCrd%C5@^1M@`xQy4+6wU6DjpIi3Kp_ z`Ra?R1{z$YB%zFVbv0D|dW%hxjUkU^RDc4SZ!f%gnWe=c$q1|~tJRK*?322b$$E&B zJN&d@+MKqPuPf%WF0-l`h>-|e!huVYwbc1d)iy+Y_mzp;kA!Pbe4U3;ftoKw<%@nA-N>m1-N48Q>UAQsn@c;01(j#P z8v;&8U&MxaVLJ||CY-{28-g8#7yovWn$v1QqF>w08}AS$JPVx_%rwK}ZcF{RpfJGK zyuK1&x=KnX|NIRlNFugE*B|p6J8?#%E`@yfJdyZBY?X*fNwTk2@mRhWqRx!Eh#4J& zo@uHC-)wS^qE@CY(}_o?m%fkoF`WQx);E9itOqf>cB5TG$I0;JQk?#-5}d=`o81}o z8WJ1K%kk`Z-XYMg%)q2v@J>VSEmP|14TMRY$o#5m+-xSbi{hKPL^D^ZGx``-%u!$? z7zbRI%!1ok&s@6O<2}4bs&5u;j*|)^fO|uGnnuYOdDP^MqQnlNB7^gDPmmM{c&YlC z+13NpXVH00TL~*YZQkU$lrnEUqumWuN7K!;l5BXKbpz={oBKf*rZwFA7#zC~D22^- zk-@mGeIhD4o`7*T)_oo>Quu**=1gU`sYGZ&`T7vQeQKMzU3%B3@+tt5c+AD+ru@6f zF5<65M%#DlC)=*`T(mvPI0=+ap&x4uV6Ej1mqzg6nalTuZkPnj_|7t zvE9DjK25=-SE=kFB*Z>&GjHdWHQqVNZTOvt`*9qsmVqgaZ>eQ?fG_u++V;)nU6rTz zd~0#4W4i@+KjuWGeh?UgIj&36XUyVeosJ!pX$}yr(Kkl|vWOpGAJe!4NQ2YY_PQo= znxTi@&jiE(CTcMWebliXJRf{$9hK>P0h~WNV50!835e&S5~cUa>ine+`Q07!yXU=E zKJjiTCiD^x^nUXb-nW}L4eydLcHTTF0Lx+59sA8K> z$fb_W3q`C8*qZTwzG`h!y$0;xcwTYCOJyA3W2|O(cV$qX&>XughUS>r&E!5ms)GCo z=r{+RUj@WTWhPf==9fv}j+lcx z*~7|T;Sv9>uH*t!lsk2K)_sLDB`^S|7*$nEEjUz|xVC)EO+HnG6Q|;!a4maAm1(F^ z|0i4kOMZgsbc*)1_?kNv9KkVI?YqY#aY`2yu`WL<{Vu~A>fBvSA;5i=V!pOaZT z5du|@U@^wG)qre&k1U2!n+&N!|G*nQQJiD$#kOjxOByac`+j{C^H~@1vf(oGmG}9@ z#0Sd;wfyxZ(=MqYW)|@JgK#iKk>EWE*P&|y9|`x|6|!o-N=&<1KbVn7j!V2b8q>=V z1_!&sSj#<4k9QOIbQ?Z9#`p`+d)L*1L5>$EcpRuhv&*Xz(eXyNO#%+7`=3N53<8c8 z_T**qllU#A!MChzaVBTAs#GJ-5rPRTs#WV>rH=3w4f(TqBe$4Vx}ZURP5CgHL=zil zny77aj9f3V%;g5M1D85%2X^pc%I}RY9H1sF2g{sJ2Pz%O0Y+U30Tq)CX zjvlT@$q%>uYF zv0zRd7DJoJ(4W$qBYI5t}uF0hI%sL6lw6lS(fBB*BhMDF81Eo)4gLseWuSQP}B=skdA ziGUx-qR_ir(?}}pA?m2rsjIH$w-Nb1M3R9HiGH60J$1PjAJBB_|Rb~y%fbgahus&OOjB8ELf`pf=)Kt>iVT{aI^E4Hj z=-*29>&fIV{=x9 zs-J5j`h=eC>ziwWq@l}sj=JrxJ*h|8=+(h{KuP>w*$aqt#95FuTb*cNG2l> zhd2J6cBXRI*kOar+&)#>6Zcu^IYtJ}#!hKaaGKeQ|6tp^tEmQ0jpK z>YNB&^%obDgM}I`#z7c`(J%--@3itI>tx$ajlzorz~^9$#E8g9M7mK?I^nb` z2emLbIvf#q<|6wPWJFD`wK2;mu;*nT@2>8k9ILqu1GsWVMwBdst)j51u-s7CZl;!- zfcrT<4;6k&nePuAz?m0?`Ew(@^Rc@!X!(b>KhEViv0_edur*h8FZ>HpPG$=mUsE$~ zacdzx#0kRUdMKiP2#E>b;zB*}HU37v2Nv(jTCsI6k^wSSj#k=KrJxl`t*8}2ib~tb zZmIm@xY}*0zRRhc-d5blp}zo>CG~=B1orIo43aA{+X>HVrHBC%{<@|dbxn-!7!{sU zrWK)b9Gmxx8;wZ000ovPG$dKizOPx_M;&C

+rKGmmsEky%G5m>{ z1I?GyL17R$ol$c<*oT6MJ2P2F_!C-Z^Sf#EfatV_mq%Wg{F+cX6MBH2Pa^;em$w8kkJ97i#+{m zG5nLrLEM?)FgiT7R@envK6_oOnM9O>`Q`@NbH%l;YYbOfpowaFvscahhsrvg3G7Z4 zI1(r`DDg^#g;}y>yamSogD_5Z)?UBY%tYuI$F>r1IIokg3l{oBO}z@1p@b71>L<#Qnn3MM@TDjsl3BL_$;T||ejg5!wAlxJ=sQ1VLHujt>iR89}lsX|u z1VhG{2IWS9Fu1gDNJu5OmT!DQ$f1zx>V|ll_XQ@Dufdvf_$lC=)pJ2 z%bvOf99dBkj;jmTOP5CsKG!t+*3eB!I+}g41Gf$$ZZ^_Ni{u;BUULSP#-Idd#c4+5 z(CP$^wm$tj`!{gmy0nY&K)2ABiDU4Eh1bZkQgnT*;j{F4i;W4#boNTk7Q~oj*GhH& zKplkJh*n0P7~~dbPBvSz%rL}PMWaPK?8upw-Q2IgXE0JW?9n|45?S+RTWnpbS@r0NeovT1 z9(?78n~`xFI@DiLtry&L8GT4GqZH!MgJh~=l+4rl&D>s= z>PSz+6?WPKGVJX4Xj73UDrv$Y5inlJn{a2=M7Hchh4eTN4+am1jU9C!P>CFf{q+Pm z(dmOz)7%^|#6Td8Q7MpCL&oK;&domfd^uhkPW!5zOiEa0D?OzuCDlQv!DDT2EW1o< zLE?_4XI0$_gB!RBcf@?C1N#_r4RhpwMl>Jf7D6H{L zKin%%>FpW@5H3JdN!lB}Czxf!z?=L8ji_1&mznRF-G0b)xA7 zbAx_>FZ&A_*XBh=%jq`ojM3_1ZC)a}Z&qzlvPLKDtL(zVEG7NQP@4dBTXlQEV(Ohe zp!(Mc2Kim$+kI#ao-3|Vsqz7EjQf+m%&$6B8m6A;H_eKmEZFAs$idZZhq^PWHd-D7 zX&pe$XW9BQFpP3LSI+Ms%yKA{-WR}q)l@lMbST|3vg6*9ceWxP4gxN*@M1#ZPm%#B z(u_n|xn8Ui!ciG*eUgtpJP2HTVg`uq-Z)>(?wt0z&1p0)dJm{dXcJ2>;Yom~hjF>< z9cMcgwJpGMor=kji@B(-0uAa(?p@0Iq>X>beARZWuTjJTDW)>RT<9!-Ye%?-+_&!{ z9wg8FxmDS6(>K$whV++=VWr`b>{0L&I+u@@ z+E2g5qHZ2zYWVWYhGlEwO>rCCPn^d+ruK4Km^=NhRO=$3w(Y`2it&YXGqoh zwN)nHDqGcUscOC(*T@<$;=r^^V+%*(#u%dsBrJ;~GV*CIGYh4Q)K+P~a8%f)z(X=0PzWa#KZP?rxWpE+V>H*72u%lXxrZ zW{l?{G(+6hvZ9h@G{^2x$Wk<0-Sg;x#CTm~X2__C%h_eoDU+j@O3l5nn5Fv|Q+v4R zY1e3_gv?-a)`Wjh(fM~yDH0j;^6X`{>%66o<3R&>joV~FB&|R<#~-z01paB+*8KW) zU#1TiBkm_9Q0E2Q=zoffem%imHwnw*L(iJVQCnI}rPC5+LK)nRRnwcwTor^Ykl+-b zqwQ14y~wV2a4vfhugj{ictw)(yy;N&Q6jfGC0XaUi z2wlK&-^RPIqf;^nYpOdZ{WEk>Q5soYv;Ww6cSfge*t6~_&$QD+=Ph(3)!t}kkd)m_OF0+|BB6JO(kVL)L7Tiqi<^ahR5lBiQTrPs z)v^f<8P|FCm=diO^Bg=Zb9`0*Y(1xz3-utZ9KGz2w?i_L$D&9xp3e@qnku*D2CIVw z_>rCwK&bRw?lZT_L2(;5lbW{aS{7HO$B!;oG9PkdPPnw_B_m;q#nklJ&XF=HRo@&U zRS<3<*gDb{Id zh><5sw13?`&^Kv%^CuwGKtTrZvfDFT%f%pJQ!$qH%1CmX?M-sNuvXuz@V#c9z3&L` z)GZz99`?X9ivEUB7EmxuF28YPRG#&FXAjaXNEe(c6A@o)pFEAa+MIMl!hW}e#II1%wzDnH9{F|J zRtayjZ7d87KFhYrBkr>(n&-;CYU%-D^R z6;99u^`<>s{Bf*Vsh5p%3M_O~OMO74!2LaD1ojUWCpN?kawc#Ft$KTtMza(@O3jn)e5&>3N9#Ue&=RONyHZxLkG3fCyi}j#@Ald0 z>;o(__*%wJ%JeH`Yy{W zCC8A4otc=Zrer}em)OVQ^CH+G@!{cPiffJecR&EGwyFOc*!F=W`wxuZFS6|ua3*MI zZ(wI?<6v#~0aW~$OY2#FVBTaDt zeIOC&7(OsOOdr@78a{i2PmCKg+lQopo{gxXsjj>ew+?>;_Y zm4;H(KH&2-^QKTEgK2E#W=Oye{tV z)8*$ty)G&$o`gs6?X>1wb=YVP<4lAD#0=StC0G3+<2F&EJk=$;7`IWGQKbP+244TROVHcKp+5s`U8A;1?80m#Ze(Zf`NSLy#c?7 zs&#Q8V1j`iK>^l%u?fb4ETZU{hlccL&!z=`y@lGU-USUF8WM$kkp?IG7c2q&36`KG zUGYr^9Dv|J2id=^MC81NBa1IBtEvhL3PKp_mxAyOptyzt;M64p_xaKX>nAAC<)b42 z{F|3Ly3+`WU>hWvwQKDy7@hD`4hN42#K)Gk_Y}{DMKY2D8-@>vb`Utc-T~mL0^tEy zH-iTN$cLv97~u=zW9wShawk;xR%aZalM@7*3c?yRSP;;u-UNbAM@uBa2of;>KzDbi z51ug#2nlWgSa&*K1A5oR1|NW?KXKJxMam%SHT%d(O zAH8$x_pkH(zO=EjKLj$~H;Biiz8*jVVs(8&C2S7hJAcu%e?ldI1F%jPNx|^QfI!|< zUTQIM4y1_g)4O~UV3 z9HBu&ifP>b;Ls`P*`Of!T5S-PITAN}8u$yBTgOb*yuB|9RBfImr>x-$*Bi$`hU77Q z&FEcp!zbY$PbpBS0b)7OunSviTHFH-=8XP;=zhQAJX!2|E7!H0y5Q@|&&4(M+owRd zbxVxe3>3mSj#ceArjTBZH8x6W+wM}jD1zDF^h+0`ELkx`Zi@2XZhzlT$T`tB3W1yD z`7hkD^~lDX*|j%bgdi!Wj_-dwgvt4>jb$H~%w#Do{aeLBelB|8a{_SJ3e|2vFNVIZ<~EaU$~L^;I8tQG!$BV z1f&bGpx-K5vNSh4KOWAciMx}+D!pEot`9Bq2(Q6%Dq}^=p>!C$oD{9KD^%`T3u|Lv zi}Q@6V%8d|7vmba6|r@a3`r*i(hLr`NT<>58sA@<+oGx=U969OPdJ4?PL++W7^6Y%(56c7au29c-fH#Kc1q`Uvy z0bHEvq=^!(q^pVEn!8M#TKd^9Tz5b<$6XW~vj{zu>JaI$WQEmYIbZvmqdkE?eg=FN zPMxTQZRmHC=N-7l+lN}xOVrN8SiM;yMD*1$Pb-wz{w0=@%yTVE)snm4=c7!u{+zyi zb|HP= z+Y@lUFHyWe2=%26Vhs~%*ExNil(#D9W>sehz^pZAH9K`ox;~whJN3SqceZJt@fC-A zS{|RoCzwgHH|g2B7ld30!-u7{-5=tR*F%L2iZo{$n=uxd#+(6vTTHdyE8gm`+FIlC44| zex&!Xe6%8=q(jxGjAr@O(iqa~JY?SnBPNHJ@1YVrh@=5$DR`AS!&|M5$;s4{Ynk8RavND=sjyX5kUu7ch8)#qT9?`|FG$jsv*n5?j?u9%wcDsYLOU1RvL4Vd-mhJ$tTQ8KbArLKz0`a)fq zrEBHM5$pF-BuB*HHas}(Hmr$MalH|Yjs7k*8@)ILszxZq3y`MoTEv;-#=+xvq{uRB z!3$OF)D6M|9rfDlh9R5f^_={hcoDnYPiou%H|ouL$D=SVg*}Dz9-;+6McGkUNr;!k zp7BpyVvc)<uS%faj~f4@cN7yE6Sr$yA4)hKb!DEP1LH?Kd4Ia!oR-!W{_q>auSK`N|1h)bTHc5 zDnF?Pp&lWw@e)uk(to3g*6Z%5Fn=~hw=yz%rnnhtbTQMPb`0VygF-xL<)OIx69Gs@ zo(KX^Kpy2TPQghO5 zR%v(l8CU6++UuLU^NNgcE4;A>fvhVw;1r`Q`nCmQUV9&SJScxdK~*gej25|sG&+{RTQCIe?JzKyc$AfuQs2-LUxH4<>XC^ zqnoQTm6D(rm!3^>gYd?6F7#)g0p`7Wq2ZS_v~Ji9(dcATR#=C8Urxm{b{cIgx`ffZ z-jFk-xZMT6^c+P6eZ~r;X{K5WL&XXI3cVzHj1Vh}iaunQq{z0TchVrQp{2ADDDO@q z#abAPvLEiv>K+pIOE5{FyvRUBb+XDh5N#}bXeW%GDKO2yZmnI`biLz;i|=h%HJWod z*)n5u`tMOK@QltIvR_iid~*7LY>C$f7t}of8H|!)TNmmq#VF<_1Nt%PuM#BSDvPT@ za~7V{*mr3#(@9MIxiXo7Ejqv59Go+indujsb{Xn1guYx$jq#D~5?h)?Z`caKD;$mqsGi)yPx5`g$ZB+Dw&;D?nC~lp9Waj8BHL(e!qk1 z!hq<5sw0K?8PP098pX?&!aVlC7ຍ!z};63kigo!`eVnSyww~O! z-s^WgtcX!;CKYZ1(b^MoF=!6A7$#f{QPP_LB{#Am@^2wKvS$yR!iK6_g?EJ+wfJh< z%WbBjVxjBqEb~bP`(_ajHLPv4hEg-Yggr)!qHrhat0jJojF~*$+U0pl%}f2bfW@Z} zwcZC2vv?ZS1?u5na^J*Cmb!Yr5)rzfbaG;Q-in#Iv9{W7u{7QKdfpgJk%#iqO3&Ec1X#WjZgS-SQW=pKOg z^FCc9(p8Dfdj}QsA&^@0t;&395rYNJWgNzJk=|)kI$dXW+{B>G-5C!bPDswmo=7{DoY#N<~7WcbJvWWo2Ii( zKR z#qls$h-TH_)PrpUEh82j#IaF0gbvAf*ZMr4j%g+-e+>k;LK2uX$%fR}xnOs&g`U6u zQHfxVo3z>~N<)#RvF>jFDl~_BZ~9B{>Tw~(Zugj2#2_WoaP`$-8{Vn8IpL-JTl_Br z93q+a+CpKHLW5SDP@842U#cXTr*o=N29e7y#CYZn1R+7?gU4CD^%|78owYia(Sz4TL(AUUQZ4s48bpmQj}CV50Zb@dDJ+m!V>)**xT3rb~?rv^fSNS4TXaI7sdwEvK3W!+19e1j5EvU`~ zv5HEEP3O{`m)dG89yl)Dq{m8jg}HH?XRqJV@Lh7SV5HCox{mv1B&Lam;bmHQTKynF zXM2BjManK6cB#U+YL)GdLjj0QBkuaxguZ?D79?bOuIW;GuDxYiiyQzATK~ebCMAmVGd*Piug{MZ58S{bg%B1;JN6!TKSwzwh-_0*Ajt! z%Z74El+r#vsO$W5ImgW0%YOHaSbYC5$=qXx1j>oV-GKsu!bLc>jw_8Q*MX$2mB*f% zrmU2N3Ekd{$=@VY#7qJE>O!_EMMZ+(V~qWcISg_)PG_N<=e5Gv(by&Vm$5W87~_Cw zBK!K?V^_Y`7}H*JG}JD6fl*rim?G&v2ccq6zbBkxmVqGk6Y+p}jN2YM|6PFWyOch`LbC?C~;#_t618lJFPaWTu8 zAJGaYJ0iTm0_BYy7ORTR4arVZGF|cWnNdDhkusvZCkDgpMtHeVWn+jU0b1qMadfPk z_4yg)7D58T)j)t|+`%(szkXP=teS8bfUXkF{}syRR}pBb#q9UQS;+FOOR#FM5D`B0 zsUNQM4e$9n zgFZWXVr&vOFN4dzRmiN08JPYMBSj1AH)&v1#!FhZ<$K$+~h(a7woVEPC=X_;ikK5LiYuN&Y! z?OmzgP}4-)krbfc4MYAx{%x+ zt@qz(yzb|?9izDxP+=5Dq_EEL=orIU_V z9R^V6jGF~ubgK{=8<3()bYEP4{<@?!WYoA%Dd;HbXTU{yo-KdUpovwSuCr$%(S<$~ z*zqflw5>Kd&*XpOB2!GjWd8mu{7u!P9go!cO{=fDZ&m88kH2c^?PQ)ou0G(`(uN;9 z_Kl?A+HE&R;^Vrqpt-AR9+>vUmu~p}mkUJJw{Aqz{nHIG<2KSb8SO#zctpX5UyErc z7VM*6D7ON7X1VGHx=jc9XsER-<3HZ_k;om18hJ9Y7&t3z=P2if&fMcqp$psA30L#JDeJr;vXWP~l#m z5nKHJ6r!`395l#rVy6m~B`{>_>{avig71p3BeUTUbFz}g7hHUSwanJwEo#SnMM!ur z-3NF7)V0f_nY=G$sEq#ii@RNuU9gs!$Qb-3tiiNOJ(3^eJJ{&JWq$1+Bb^2QFobT5`8HFR;>NUg#yG*i%TT|Y?%TDK4g_1136T}MiSXdiePn%=sU<10a3qb{+$ zb{RX@gknwOlkVFzVAiTIpWyy z6f@PAXDg%^_9dt=xsUo|ClL-0L^n=f8GyXd&T1Z;!Av zn`Tt%rU@oNpbCVFp2{Bu6Y^-rKvOn*O!L5UTdlCWi$XoDCEeJJ6SBRaDhX0gtTa~2 zjuevDJRBNWdW=X#0t_5G-a-NQXfR-DOUnv66ZVFTD4cbnbK$=&Fe#6U9#}m#Xb0*E zhslU3(06BtU)8Bsm%lFNbx&t`LTxa&IVWKGqEa{S3(DNY^7LBPOAX%-Q6Io z2VUZ`Rm({t39>(wD}I$O5?adIgfvu4f*HMeT@zKRS2j_)ZR-dh)ezqG>G(b)E;VE1 z*_MQ{+9kH+myw4pY#QS$a#hzduFFEIU2+%lS~RtOkR3}~I%L7m;I~5vRY~ej7fAbj z->lQ&?*G3id8Z&tqD9fR%r1A?wq4a_n_aeTn_aeT+cvsv+qS)K?S1Y(cc1&tdnew{ zj1`$HGIHie##(dCF_?`HEE3cF30ewB0yotDTC@B9p;YWD^TO~Kt>2KCf?&7Xo5ZXD z#%g(gSvwd?(}}ej^q+ieV3nRS67TIwBN8PEkb|=}b!Oq^MV9z;?$~&5OeX(Fi!e^EEUh=k@E;P&Q;JFOZapKY;bpvB-Ny{J^ zl2k`Q<4Z==-cl+HlM6SD9uv=|LI}@Sxb)fD6KA(cICZ<@{NfA5=$haQ{bAEheZaF7!>Rg_MLCzghBsgQ^)> z{z0n$VgIxLGb!+YNHr_t|3#{q{|~ADzSe(>soB4I_3>#Q z{+&+$qyO@+sr{$R&%yeA8~>uyjLa-7|7r05JDz4_`R*0`lTUxo@_$GQMYVv-XRgoD zMOxaCkL)0CY;HoMX+gsNVB-LTx{|eXg#!zKaCLP>xS~s;-Clk70_Zy1$}CR2H@eo8 zENcph6z309SeTfCB-VraW2&dAy#VcnB-)6iInD=VL==wa_{8<0@R${4?x8+I@HpD zf2ILBxDe!`ASbnEb#)XZ1(UweP6B>`n8}<1Rd#l6{P1lD6}I+|Rw*7P@XKdhK{k6& zo?Tdh$Tcyw00-*;s6uG~OEIiu$E2+;E+&nxEQO6u%?gG_1MgUXH-mYBaRK9M`1(TN*nt~W{AfUq)Yt_4>XQD@7Z4^u z7=aUC3@pv|^`7_aE{x6fjBM`AFAWZceu<@2y)RXLJ?oB4&W-hu+>D&+s~@vO_xSo- z#Wc`NC@l?5-~qj|;=T*y`iD>~-q;=7_qycom`2AicOTfPn*I|L0JHvy)ogW8qr;sa ziAgW(2QonqF%uwA5O(#owRZRQpnmW`xfx}o_xQVuo0tB+RO$f49_O7)b6Zmc2472% z6Ki95uXlkvCngtQklyGie%onZ>Mv}wv;cYpXBi`L8knpft+5%4!3^=0;q_{9+CK z^Kxqm=%GiZ$w*qbjqoa>LJrN<~j;yl3SuMQcBX zwxJFL`1eI-ojknsg+f7eOKozY_c850z^j}TUM$w&ExLENy~v!f}w^F81n0Rn8p zXurU>kMtkuUy`SfbZ@FK)_r%@(-{N5k0P&rDy?K(t~UYbA2ki$eHUzn>V5ZnHhZXy zz0ZekzrT!D;;Z4S#MSk^Kwr8|^ub)h9>5T&efd@7lhJX{ce;gj3&izR1fYjV`U=h z5P}gGs-SJOe7@QzHGj?QL~N9S^Se2a8KGQ~ZYj&MrExtbd#-3VcNKSWlZwv$pkz*B zSUd`frzhXM948?X)60Q_ftV45=O_((?cs6qr^(U^b(z)$B*}Gw_!Ed+mUDCIJ7!Fh zgEL!+3y35Lu9v}y<-{(ugmV1k+Kgb--&p)=~ktfpcR_4D|@CO7Q zwHN6IV5=(ESHt{((x1E3)^8U{A6NcFAB=JQp8T_`wqx-$&A<1l;#ilIj6DhOcy22k z(V4)f13XW$mK@RzhnpSK1Wyeb*cI6#u$_JdaR%AK)!7st`|eFOVClJ=zQtjGSGSPr&QYX6180# ziR6X^>K+^C@$@?dEQe81hszNaWdB2VyXN-&5o4B_iW$payQ8vrYy4p5=!@mo$B0)* zm;0^MOWUo)q%h2#kLLMKz6v`yB<#>N`D6GIXzS0DjK! zjZoLq6KVzJ(+;VbpMQEF&RC~)p@z09%C-*`-71BgCS{_n;^1Vg6g<|HPf+ch*nwU+ zi4}9L4a!E3n!S|hm%+@5`*kJ;uvA#JL@d$6%IAwc{Vl~l2N(=~-t?@f*9MEm7y-SK zvYb}HfaBNdn(i}KvGXtqveZv{Cu zukWfROqL4}TGUUMCWO{Iq8cR-Sog(57fuzTG6dE!qfJc54nqh@7o2-_ckm}-w_G&; zW*+An%a$)QEh)_%-xqUAiz$?f)pS>qZYT}$(xVzp@bvfNnP~|XLp%E$9Hx8!$+(>V z4`h{OWcr{)RsW;y=8~qz=ljzN&}7q!RbWfh9&e;^KKlASlHaS$G985Onjvm5kvf%B!{Y!fK?ZyrQNq% z_Y)?%y%ryFTvd>Qzc`~1jxD6Y+Mh^mRn zvR+}sf>yl4&{(Cj$x0(+(u^hVHAzz{VMvQ6_pd|lAcoyKoi|-R2F!Ox_+PZ~2|@fn zZg5z!lSBd}lEiMRHW&n80vk5bha8%1ykdSIwb1Blc^phMg)mI-UWI6uCVO&R{Yqt^ zDpZMP9A0D@1uj-b@FQ)1#SIkMO2u30+0Lf*AJ|`#(|ImN8sWvSa3Q#TT*62Gs5K~UH!>{ggc|tfwc1i&^*FpH8>?b} zw6j8(#uJ57G~gXEnDUEfC6Ij>xsvCJuQG`!DQ9A*T+O=c%mz2p`dZ&%M8w|t3k^0> zcF_}GC!&;t^-oxai&%ysxnG;l4fWDgJkqNpF&t#RRiS113=UfN(!MOxpsqq{ze$k> zngdcmCW30#ais~n^R7<|cLevT96^%TSye+UV6 zGGDn%^9RjBV#^5zY380?T1DoCa^j(L=S`%C*Nq23`VT`z?><)|UFc*nsUW}2U3QC4 zl$#A9c#}PK3w&f#7Y&5^pq5{>zNe>u+;h?r6DpNbq$Z6?kENZf{Gk2y%eaB$OH5n9 zA5A^LBjB9qK=B;mPSN#@lPqSmt}5L}fvu4ZEeRJhf-C_wj@k(By@*+YS;zx>`gs_q zywYtuqz7osjUAT-7AyP@ERek{L{5xj)?`m_mO3 zOCX)VEpJ5vTib%Cv+EkSV-pK(0is64KKIwcWgCspogX?#rm_jOa7D0$sc?dHzpOn; zcDD_JLRvr?jf*&mYccGmRm<=sDnmu7qlo!1x92P)nRfKACU-WJ3o`j!(o!s_VuWS z?e0dB{A;VTIx<2!XcS-7~ zLL_@4GUP%otq$ST+YB5XD@tA~?U6qQpz`N0-0#hhOrGI0lFur&bix_)G$X8Z1ZGO8QyTv#WWw`|snnyNMiOWahpf_E; zCL+T`zhxCyzayVXi0n*!ZWm!AT2_H6HrTfsB(Jy;Tr0{pm}eO*wpN2Z;ZfeFcOG5F zQlp#b!$q4p&r0c^)i9uAwWWxbsu2JAL2^Ho+B)(ina9O7N-VS-Lwhnx*h45KK- z^n7whx@RT1)#D8zLl#h6EDNP5_S@*EjEg?5bketZoVZo3DgAd-X7er4niFQsO;zSb zGsDDVwDrEkW0`Z3TrB6b>8D97AqA3#EFmO1razkmSeXgEr`a#mvV7UF6(yZ=8|%}F z9mn)h3-Xg4*sHoY!Qa`u{qgqQqVPtBF~>?!#p6e1{c8^MHgsYisFqAc2+0LiC+A^G zL@uV+hv4F-aOu27>a_0t4o z+&2e#XZj^bS0m%?1+R-OoVcPi1bVySAR2%tAdT2R5g=LC+ERy-@u`g$Bc7hPD>&@Xql-_Lbo015wl*LUc933YGopIW zjmi$Mo7QWEQv>Q&Rig1lY96m{ib63Ws-O9aGIGbpwBwNJ2 zrRYh>X47U;cRbETZgP@Pn}gP9#BpZT{cP=Ke^G$1Ife@kj zD#=O38BCuJw5N*OwlRDFwVf{<6Vdl4bF(?O)4P5uPf1pv>Oh&AGI&F?XMK=27DNo{ zqL#nP^H#}A+$tBJU6(0g$b{!2#qNQ8fJVefOOKPM%A*o7Y378+EZ!P}8e303_-u*q zA9I0>6D=dWAf=yLt9Jr8 ztFhr}@G!B5)t1d!%NN6J-2mod%Q}N}X%E}VD{ie?8!wu3-U()^< zAByhnx3Sx?l$68rh2L9+RJkv<@Tx4ibL(P`^u;x zj)i|*HRYalmVYziG(+eGSW!rD-<|;NWm{n>qUmdRmbg(x@Ml|WH}cn)?}i>Q%E(*k ztEm9GYOrw5Y5n#b%Ap64oz+xX#rx`&GwhGg(OLhZyBf;+<%c&rjZSdzLDNf<#PLdx zf@QOT*|_CGmDp~Kt%1=J&S`s8B07ks_G@GsBkZA>zF2g@lQN8&Z*+AMenoFivF2QGR&h5#ky{y7^=Bhe^h5solyPzKLlsLhh2TnEF zT?7LojEJ=pfH~EJuf^=Ki_$^4yb~X&v0u_7?JwL0q#NEWOl(7W@i&bKG4~HZdc*72 zL)X3*NjC@|DC1&l=TZt1x5&a@7Mhcms4O(2DxymfmP}${Z=|94*$ocy^?8rc(9Lm( zvEbIZ(lF5_viDWfu5_!CC(2_F$s)&_5oSVk*?Ov1WxItfw{4(R+pRnKSLQ|q(NBrB z844j4SsXJg5~5rs+P!lopSwn`z@2${H7x+B@D52j3bTiZ?ec@_-H{LKLkr!G}5 zMs)R>NuV7mX4G*0V?I4$MJ$@SIK#Vk!DCs^%N>|SuYzn-9Xub*pz}sf52g96(b`Ar zgyQnUJk39DmO}=KHp{${7TB?U>S6a(eYmvHZR&=SBRU3*GYt@0Nt@Tw6Oh!SZ<+D$ zeZMwt;!YVZ-&TW%Tc(qt6HJ7yE0prx-TH<n=AkR%VWSbE`IY(D}$@;>j3T zaOVTal3TlXBciofi2VU-KwTiA=-`H(+(tA}`n|>LR!nr0_-6GRIQxrPbPhfu^6LY~ zNioDwy(cOu^o(D^ZI>2|hybNkU00Mb+K(=w9N%p2NE+)o%LrDk5X$J<_cZGhZ3eka?C^F3uQs#RuZD?-2m`I7Op7Gn2 zrgnJ-_}+nsX1tGXc7nT9^ydA|{rx}9p5>1yXuQUdKQDeJO@QQ!JqlOVBP~(hw*HXA z8T^56v9ixe)?})jntL_v8N{2!jtqjah^FL>MS7TB*$Bsx1jF9;gY_BfgeQ3J@9qR| z1-#8q>a=Ht>|$3>ZGx3aio*}w}+kXIe86U z_(%S2kVRYj`!T|gFqt0aKLu)J&Lr&CS44}sh8qIFW~vF#03^{|$1Z{@THI?ScS+2u~?ElvKbm~0%%zk+rIewUy9(1;X zq1yVaFx-`)y=G8`&#FCMcqo^xLw51>A8Q7lx|taWni+ll9CWD(i~)k~x~idInwr_iQhkp_$#UF!bf$S?)&0WD z{xh$?ME8m%Zl01gBR3W~TqlZbpuTg{N+VMA<9kuu zze~ifIAa3s#;WU1W<7a#I%$(^;CVV@@!hKGRep(+W1{p2K0Qhl5PbF}Ro_j3P+LL$ z)lawGoJh~lt+T)+A4J~DLue!D8XAQUu2Ud^m%!6V=k|!`?3Z%>g<;Y1pbwerxVw9R z`m)Gfqp4r40!LlxH@)2HG~8TNs+9Q2;_)O6msX`2OW>mN9HRc|^^u^}zIBJ76%UgS zt2JLB;sXjj2{E^M2AlD#j5A#40DdFl|StGF-&hk zM*X!F$~icV9X5*vGd#)&xs8AT9~870ZzWbb-E zPS;q}2Qj*Iy<2e2>+bzC!aLg}_^BENco0zqK?SnV1*$XpmKZCWAcoMEj`dSY0Ck|s zP^)K#%b7o-yuHi9e@<*OzgE+@8{U`Eof6p*7hpc9e0oq0qUcBjw?W2&S|VFSV3dUjAiwg3IrZUtqOcfGDH{&zNWp| z1|zZPc=uQ`S$5yRv^d;w08F=&~v{Wm4PePURk?g@D|yL}kde3K(e?4hjLfU>UmG1x(D?ym{gSY5rQoH0OXi$pKw{ z{Cm%*W;JX_m>Z^`5$aO>$CtntIad2~wu`M)xMu0d=4|Yv^(zS-T5*U~oI!NmLy59z zU-)9A^b2v)V}5PxXYnqRpUZ!&GIwXa6-1 z1{)rSnobhq%;-;hMe66y`$JTlr~qf5subA1NscQa{HUAFLgQL={OQSNhHNHDNSN#P zz;*7&OvNhUFzgo%XqfE_adHUcjn}|4g?SG;AfM@YM9EBNO$*}eIfZbgK;(0x}k)mUbC4tW@Iy)pV#0Dz`SzPnXFHA~=l`E$W z_%9yb=P%HWOsluQkI#m1+fSTFvzu|a`6<-s#%yk7m_Hpsby~&be>J-jzMzVU7OHC9 z!h6;V-d4~%t)Rt`sI~gcyZlO3@?`&vHShGs|JB?)5u-GtI{IA$MQ0m`sN}s-@an(k z?%-&MmGCO=>6E_Q@Sd7IXp2+M4W2xY5=3Ji*TZfAfIX8qOO=%;`S4STA&HBZu9D!g z`w_K$4hgsP8vC?ci^y!+Ya7zstxDZ*x*gJJR|MZv3Z3_}(m;4%CXCmFUg0@z`Oq>s zlChw4^uki6Z-f8heA9Go7ibcv?J85EIs@U=z<({~n|G{Y3gH`*kZcR{ic#7rJ1e%P z?XI;s8?o+04$8}D36W@5R&&f)1w2>-6(?z5UH7J{oux-9+5djZHUh2FM?5<^(SLQhO-C$C3{UA!=*0Q7YiD zWewK7OVrv}l-NRSrx7GeqPYo5s_q9LXXj0#jlc%T$I$p*Es5OrP!x5@3PJhtvL z!L(7Lph+(|h2TqVsq|j#aeC7( zK6kgSElg!ZLO*~LQvTfQrSsFWAMTlB44<3XijnmeWT@x?_fHrv{nEFzb_)i*|8nf< zPVyDsUWMBt4#=32HmkDOoX)`PW5lHlq=7ohUpS4)78OrQlNGrap zV+q63+x0qJl0;#*7{Atf7l>4aQg7!pVi+PNI%6(py1l|Fp`Y>P@WJr!Dk=-`oShsF z+Glj9yeZ9i9-4d;)gw)Aigg;pPT@txbM>cuWl4?S8Cx}k)gG5anNCr9%&5i?q7hn> zqiHaYybe~t4ex2Jl-1hA^u^Q0{DALtWwmqKrQ4gN(k+=r93GLLR_0!%FKSmQN=2m4 z&Q^+SW;MC^#bN=#%*X>M$*UrjJ2-)Fr4#q~f1Y%}zd^B!v~+H4MdlQWV*2H>vTTFK z5#_1pPcExzX%r@9o=)WQU803APjSJg4|kO3fs1)@FlJf#!7Ff7415(yD>ho+_cCZ2 z3euE_6S7Xaw?*-pMS7(GnfU3bOSUHhNOkR3Nq4=# z0=h)VI$>`WE9XOQ!Y^l$j{Cc~7l2G{r!n0Qrq5Ot$9_|=m0k^}AfJtm4X3&^xEtbq z=3q#@q(|gl^IY^kG%kAFypfj6c{%?C{srammLE&}YV)nE609nEG7D?7CO9h@ITY?cFQzpelsB0ZGF*B19>T^X6%Gir zkJB!HiGSSjUSwb4cCPq8I5ppkC1gAeXS_oPuI#@5(VfmTI6M@hB-AidSMhhJYHf$M z8s9;y_0WSVfAsnKZ7XBV$4jFK3nw?Yh(qs zUj~izWlrAEpbZ8;yIrMEQ){R#Yj^NiN+zcw%e?1&twALA$_ngly@x~H#dls47M~WZ zFr zSxA#`5zjjH!SJ6xHjhOsabX&Q%dAe8&!j#*U;Moz)dYC@)G0Ocb05vfsB4op=j-Jz zm(Z}7U-p`J#|(plO_bL_Y4ezCQ-5yuQ4$v-yE&;jJA1xsv)v_gc0!QqZyKmMj)2D}wVlv*Ta9qohk)i(Q#B9tx)Pvv+>y2S5 zg82EkM8k32HA|GNr7$jy5PX5yKO<+S7AwFkiC7KAeXaDJvtwW5<37A_g?Z`OKJA6* zO}a-zNHGgmuRLl!?K@b~>)07|7RJql?x++Sr5iS7>4<_r^I9QM`}>1U@MhV8@n1cg zHCCQV_fZY`VN@35Gln|yK0-ZGCB4WrTGf6~=df7cz=Gn~>p#)I%9ObL{uSno&y@7m z*f0TcQgy7WQJR;<)l_$29yWijj)N|kh){2wfphm`vw4IVmU+mV| zuHD|Lj_do?e}7PaqoExqwx9~Bo`l}otvmY~mvH0E=I^Cg#>UqZh42R4$dGhXv}_>| zpvus|9d1=0$%gasS_xO_@)ixX;ZxS4&nNN*yqp*qR6~r!Wad3uevEDRDt72)t1e zT^!B3An@>afNF}LhV?C3552@jvzRjUu$HugLcj6>llDqGrqDq3DPxD|++dvzy1Hxy zIIC^}L%%C>r~eXo5+0IsqQtv@dTJYvig?j%N+?x%1~RF{Tz3z0rQ_#>i?=(|OA1mE z?wI}S9~u$vAp#h^CdSt^SaN+w$o4@h8@~#rBRyq@AERRTZH(b?nG|fD7PeYp77f+d zl&@Dy-TSA}veuhKsS6q#NIA$MQ$UVPiG(R6281*xkks0IHr_QX`>u6NpE-2}5tWb8 zi%SSY7Qf#DnBpiMaov{QgsoxNRvwEGhELa)$z91E@DDlC>m029-a3V=b-8w4HoW@{ zw@Wf+@EFa6knQLk!Lly#oW?zvXQWF8Z$~TZ5OR12;e|AeAS(#JVkg^`E}Cz%rgCIM z;`%^f=sNP9!=}-<$3+$X;L}aa%>W<4{oAI{7oxaf>!taAszvs3vhnzMjJ3;1e1NJy zWGiP4gFi0CZBS#2GJzlQcd0P+oQBBsPViyW7gy^wHS{UTxHxkY*kCiCUXkreHH!GA zH~F@?ZV%szWxn$Ovne@OIuHv}%gQIiCw`UB)lJpfO2s52h={lJiL#s9=$gsCgq2hR zrTT<>5dDwpWg!Ce_g-N=hjZmS?(%3$Ad8c2?YOfH7!nHK4jeYoL(rsEa&7TH;S|Yd z1z`a-zUcR0M3B?HmbD~EtH+?)S%}?#B=E*d9>d({nUpvM;qk(S=iVEBAGruPUI^}D z%+Km^Lqep%XDD*aAL^p3OErxc?Q_8n*M+_dBoGQo3wY8q-KyGXf}*nSb&!!d<6;#V z*u-&GF<(%Q?+b!)$z5cnD$d%T{qYY?X_1X@<33|WnU%?3 z^eX<8k8DBQt0l3B$|2LmiYYJSGA9C+!Ft+7Y~WV6l@4tq<2f~`;$?Rmo|3L31^leM z`1F2%kWwuMK3JY#z zPy{!Vf1{F0rI;||M z(Pyf)N@c#Qio_@Y<34K*;D@?I(K>1Pgk|()-nU2KQ{n|Jl zQa#q*z2P7J3me|ya+?=(zx)htHQWbyIIbq~4w;np3H1wx_`lgaIn6G+;I^8DcY&WR zl9$mzpB8i1ukVJppTV={>`WPmYs|BhlMuVr2UI~tU_>OLj9;wYltHRyy2qCJ=~^Do zsMx_*Pzi+&h@2IGu#Bk>D!rzSE3Z+mv3B0ERY6~jJF<77pI z4fSF~Vf-t%ppghy`>VSq%@A4okJv-I1Vi(Wr-8sUkw=ula9Gh4PF0ugPb(aJ3nGfG z8A+xB^GB&M0;O);vWxl2TbpVD_XOJ2F`Vn+$*K0yzQic@kUZ?!LlvjGEy=5Tjp0N_ zLW;yiFD_ahDdsjDQ)oxeBoQasAqm_4WxaI8U0Y`#@?NTji;t;th$s8L-f3z~1a-48 zsK8t+x!oy#Aq<)_lVNCSbpmW1BW(;Xr1y~WD)jx%rm4i=Dogwc7I`$`Qlm&U5HK%j zm~YusPvI4_5_>?FZD=w_Be5qj4HpCYW^89l60%x6Pp^&dr+JR1#7s;bG(`jWBfe!l zN*(@hSls)%sk-?A1??4tBEk})@xZIt?<9SuCy~lW-o7Fkj>ypSWGFu$qLf?fugQ@m zr%-RiVmHj=+~NB`2ISh(AFtr5g5(yi$_)g!cWcEaEV%Yci$aQQ(J-1?BA1L=$$^Xp6~Egs z_ERAX&&yjPw!J2&C!{CA;NCPp60uc`C}GN>N+Hne?~x0Sv)8;ZDZOmep(WS)#r|_rqFp!Runa=ZX2*yMv#X}TEsO)yfRuU9o?Y@KiQ)qDY1dQG%mnU7k6w7IaO^A8k_z}?~5^`-JNB+AS(R@d;;HN4U z*Q};XL{#RHc}`KT`8@qL>TX$v;^7lS(%vXQvRwliOTstA?=>>zUJW6H?f-;A%; z90A7#D8SQ);QGOu2+&@*qP!R)M8(t;O>f?QHZPv7nSZR#@B@YjR>Nghirz;u%TEI1Su%o2 zM*PCCPvF5`QAdd%)b7A{k?@8ssxjW_uH~?gMnOU$YcV~)f?APv<_SK<<#Aw`Zu!N6 zx{;7N)3He#&#zL1vD7cuoVa$9zVe2}aw`Iwf@OWx`7R5mNLmN4a&7p;yMt3p$90cM zxaadUJ(H$S^5axrS~P1EyKsi1g{NM!iUV}kQL|CB2=UVd-74vxgMSv0M05sM(sg7& zQp-ni+unO-@##FE4LJ-xM?9L0!zz4NQd5)sTQ5_>$|N9v-dXdnPK$)OK`Y{w%!HQB zM;GUsw%KE3B{f-unq6MBUO)T0#da9ksQY+9THf=-26D?uQ2gTs8(TK=*Rd>Np?S%O zG4TWCF0VC?Zcei}f!3B$0|6*A1E#^-pZzmcL>-QBJ{k{R60E=XK@j7x;dm|zEf=>; zVO(G0tT5N2yiK&#w>_NDk3dU9Dlpbf>QY^r-WP zxIdU}p`BClDZB}phPhU*G8w2puFLL*!n-y%%}RrgC)qg^8b0t1m~JGUo$i zqQfQsUecw+zNkm^S26?~7skTxw3}VhzzA-$(!jdq}mdu*~&~ZA&AjaZz zRqj?Q-Dy)Habu1A$WDUi;8UVI!!V+PiQ4X(vxiqE4F+Z!&`kdkN_MJ|=S1Yw3@N*Z z>}=eVFk>M+_ETWl>|#@=nNo?<9<|xnuQ1=?ftkKN-WoKyk<7>OMG)3F#pU{Cb*Jt| z-Z5qn_$hG>?0M(PD$YaRin6?h8vEo?b&M=>A)mnBdMYB-tJVh}S z7>RoOi5OlEu>lXHGc1v!Y;CjNi%82G1YGEOV#5?aTbskucWjzz%n~MEt%+v{CIqof zt=E%HEghA)WdW$_UAvYfJ~U?+67BVxz=@Wq`n5*OMn5^OCzvn-#N|KMz?@bP&)g>0 z_$1yByOYmp)psd65HBS9*MG?j_ZK7F2zeUzDf>n2u>!cKFZJZ3i2DilKVg({JVT*4 z@SV6mZS_V}KY#SQf{{Ye*XM$1{M?=|O@5!?d#^Y+<k8DThtyeJ6Yt75&#HMkWQr*ro(K198{uz_#Vtm=)xPEU0lI`COu0nwkZ^_k% z1e$^?lzC01k7uX(>$m9&d?iHahA6)JDbjUC^6kRPy!%}2uXw?bx1L3R(8Bb;vPmRU z<3;8Zydq6W3X?2okK|sp`k~otG9lH&$rgXhOf{AQw!wDD!!e1HDs%L&v!@Tpz~21T z-@2bEfHflULp0V6JjjE}y$Mr9D@RH;v9=;yz1Dt9yGn?GuJmKD3ls2rij<<)Tyv@nZ-F!RlLS(Yq$LnLQ^L^2XgAl0^x$X2@`5ZCT`Ye$fCAb$dp3o`meAi(43} z-#h5wj3oC{8DIs@s5sSjXRA&I*kQQ)y1v021kknUXbb<9BK!fP#Rygh+|vDkZkm>@ z7^sOXbADk~9e@$X>A^RKHpeP66#Vkq+y)6J=yCctmE>@z#Pa|}=r_0r%Ad(#Lh#Pv zsYp(Qk#pUyc6ZppJQl5w__g*VS+!O&!y0-yn643yqY0sHNbjBCiqZFjAHQ8>^Rc?= z{86fjRMqpBe-t*e&%EDeRUNfZ`EFwP*rPml&e^w?m@|h=Rmuxoyx015w}rfr*4fp&^u?>4zExjklzt3oGC z7)4lXxcanFt25(Tt#$9$Y%A7X>_N`pK)Pcw0lDLVA(p2kYiovsA~qs5=mbd^*R!!Y z-hr`hQ_r+k!1!Z~8zpoyE?sL59bXh=I(m>osYX8tMKZo4FMp~Br9I^xeZ94KhSzmS zu1$rkxhn+i9Ri5qh6X67e1Zz$ceNQZ*kpjlzHQb}7y#1s?X zZCudmo%RtNxJ%ke8z#XN;KVMzQhTdcTA6mEkqOf8upxm>Pq z?{iYzi=L*hDj5~-ljdASQh6iEu1;COD{ntry3CkN%|iv#po(9}@gdg12Z^D-2SYnj z4h0A50ky}440tLbJGx>|K9=QqcA&`6=2Yr!!^2GCq26qqH23rh9(0}u;=u*I6~#yF zF%C^&OY_;5A)2+#e(M?|VnptMijvG4&Vg?@`sA{EkVW%`$lBIy1*tb_@k7Kkk(!@j&E0$t&2MWZV#B_YU-Fb^HGAy8 z+`vS<``;l>;_5}ZNcx0{B^71+JJhQM5TvsD%quBC)uySj8E?CW;RCzb$~6t#m5 zQAbi<4Olc1y8WNj+==p@8eMt?$@~?(gy{}{06@yo6Sl6PW&;@XSgC%U_8;T}+^1f( z9@AMLWHY<;t=5Ix@!h?=NF=UHmdgNcz!BkG`wFxg1fwb++2?#GmE z`a;+#3c>k*TBb}4|E6O8PnM~?khp|^`nP4O`2XUV(y}o8OEP8npK{3mCYkJyQXCA$rm8CbAN}GQA4DKD~j1zM-YDla;ZF)4x7D{3E^m9Zfd0wX(JO9<8nQ z>5cxGP&TDEr?;ZF{!S^|(%ae?)7#P889SKU8vUcJOz&v!M(;%L`dSD_>YtSMP_BZ(DiL@Zj!co*6v)zP%}H4e)XJnol(7cjW2ImW?4}1Qk5}< zrmkUvl3rT%{h*1Q==`>hSuxQ}fS8%FiJ6(Hk->wppse6NQgFfqK~GM=>KhI}LxNL@ zXP`dFP}o6wFvr$cL3lYeLDg1(Xfiu#v^pmyfK*IOvVAevIPX9PqqO*of!sxV$+GXMVZ5Y3=72ZC$l}intFIX)L30>Tl4senBZ?NHt}uLKl?VBhYFAp|5l8ZVxckgey~8U5`B`tWnh>+p?@2X#3OJwX|L8FYCsddUSFSu&usd| zF3n3<07k%lcv_({3ri8|$(PORwxoi>KU`K&Y)C)4}1{XugPIdS1TDj*wAz@A%%3}t0-yS(s0stPdNt`unIC*>xe z!M9Cir#CqQ%y!YHg)OdY4xU=G0F;5ZT~2!LC0Ei{(!T1fDseJ_h{eQ+T?<<}e2C%w z$j8@J(m^)Aa7=(u3aW5lCc$r(3fOxmrjSl!A`TCL7{WdX-y&LpqzwRsct8n*Jz)_j zy(G`JdnVuvWgj6cK+@#^vg{TLQ9xb`1sQ-0{))Z6!N>AhH=eKEgy|Eq9w^lh(Ay$x z@;yi&0Ysl#&S*C-Y5f2{p21OihV$Xn?+fPje z(a+R#)jn1$2F)btyJjZgHUWq}U<4e+0(y<*R&^r*U-6e>g8|~l6E&glaFxVM{mT&4 zv|1+ApUyQ0P&yk!Ybt8Y`_>*c5;XoH#N?c&OS<*AxLkj%nv0KGOQNU(t5y5wS==7r zk2@O7Ar(IoqYhh)(MoQVAA2wra)%3uc5d6+R^@X+)`jQR#zZQFi%r*zN3!UG{>JQw zk|JCsyo;)FHov8WpArgWj0S~-ls?s~nui2zKX-6$k7LP#6jQpiliuL>D7@=7LHOjc zxnTW9CEAxtSxxJV?Oq9sS75YF#9Q&Zk_tdue-ZU)_NRzHHIZ&Anig9p)LFslPR&g| z?i&{Py`im0^eD@ZjMU}|tl)6ws>fM@wW-jtBuQD<+GyeRa?^UYm$xsydaB{%=7Q5*5AYGQ6bx)y0 z9*PeG7&SxaHp9Mesg(c_5<%%Y?rQF@_yuW`;Aw3J*TzaeAoh5BKMW;i^o`acqMr#* zl&8d#W0hGrBUYqFRa_)cp;<%}T88ZZ8+$I8vW+uo>|1*x7UZvFc8jCnswR?*7!iq6 z-i_FFAxI>s59kx~uHzlX_Euo5xR&V0m~W=w`N6r(AO%L*XUQ=N=?G=S`n}a8&5Ts= zilsIPj~a1%uk?)ll#yYU?NgHege6p^!(xGk9HVu>6Mv0RY%73IqLs0Sslha`e(l&n zhw>xdT-edpI&z%B-E#t^Bq-sdQ;iXxlqir;USEbo>;zKZ5!(l4FRw5$qW*6cK%Je@ z<}6zI`s%T;1J&SCaQ!7#DCaU}JBO;_kGsEs8Pnw19EB{t+q+RL&$-VLT(k63kmckT2q9nB zj_AQO3cGiaI!9!~!#?08+QB`j*u~%LqPG|vB<{X0O&oypg`4qUf-y~ zTaIL$0isv2vQ`O1D53+qRSgBc307J^%*GFaRP&Pzy;t7{vz!i0akI6b7$Ws}rd;{r zxPH_7G=ZHm?~c~SQBptc@)4Zz_1lI63e5q_Z?+j zaL&1mJ9qDW27;5~5 zK*Z!=@BQ4~CF;V*>9nTnnma?Ab)Q6k$X?$i8ifW8aWk3&Up}^gk8*ptrXL616`@!@3WEuwKdvK zTEXf%4fS6bqlRB-2o;180e9ffKPq;X}72?Yw#+_nh)`D(Sj#zM4`v<@}+Y-LePg2)zqU9~IkkU5*ITh-oc+g^r zPv07aoQ|;v56)Zx;kQQv`5s$i9L4EWp3g|C5~|Io8EDPj2+)SscpeED?2ORsxOkH+ zpS?#T-D1NeRNCFbzQxbY$GAyMsg3d*x*Z_()Q_C-V?M6dodu1knfLbRZRx<9{6oV%b+BTk#A&}(qe{o#tag+o^m z5H25hQtLtQ{B#~h)OOs#LCz^5N>CyuHg#v%9x+c2K z)RR#AAn_#)93v7nPW>2&@}~$y0ys~SC^i`$seX#D3S?TBbpHm!+CrT6E8P{oJh(j} z%0_yXIk0TG0VR%9nNOQ=kPKL`ZAYH%K%vMCcas4c`%S%<|3bx2HG6lAIrnoxZs59rI*jC{XlF zsn=!WyF4PJmN~Q8;`r^(B1wOLCbSZ!Ru=y7V{$FuP#v(?VSxMb^ks<>(Y+g{QN3DM z;Mv9lpXjf&>v->s)iNl)Oz%;Z91I(;qO5ZT+al&Wxl5m#cg7+{qtM_UW#q&GW0yL7T&v#yy?}5-`G&@Y@W8U^`93KRelK_^M8Y zp6Z_Z1|xYW%M8g|)kSymq>7DH=l8@m8#^+p(_4h9JZ9v&RSkZwHE9odnr#4{qlv?f4$7krpO^9J~N z*H;(o1)@K!vSggt;pXqW4=g3pp|;lBbI;r@l5RV6B53)btQ%+qXXX}S<1&8A) zH}s3$HbVew+;%y6(J`H1+GusE%27JNSn=oSrFi$+bN01uV|{O?b*j>mt4}dy=|GOY zr-5UJ1fZ06^Cg2?R=MV5K1%HBs^BV`tQVFuINFb1`7~~r!=o1jR#2!T9Z?C7b6RDI z63o;-qkelRczm@0Zy1|w`~s=VQHS%q0p-@&hBzdmRGlu=%((nHirZfLhBa%>N4EU( zf8Kem8W-7Mj2hnDZ!aGD8;-haxg7TCx)UdRHddzGyl?{Bx$WK4Kd%EZVp~89=&vo6 zMKLsa#GSg7o)$Mr5jB~R|9t%ChRZo-RvK*4EObm;kr`a|FFRo7{&c9m@6PI}NJ=^d z%pn+s(!E!XDfca+_#nbrdko`=W@2{;?j}xhvY$+Prrf87Yh1-#8F(l#LygGt(*6Oe z8z_{ou(Hf=Q9ovPdM1q-xX(eJ5f2~VM8CE5++?|Gc+iE@S+?)4JSIgaaeuepAQ z6Jm=M3Wo1CL!2Z6+)O8}%eDO5It2O|ZM#9maOfNg6OPXT)}Omer>uf?v7Wgi^2ygQ z%G02;t+ltnS{hs#3#!UNjqr5Lk_KNV0+Ccg8W_riYu*-|k1kwAH-==(B|Jufa^C8b ze>ZpG#Xwin97E^FM(wX*lewT=rw-j zw59xa*_1~Rj)j)yK;NTz0|#g0zizmt#2RH8jfW3om}v&>_3abh?(HWx5gAv3-oEd# zs$89y)L1aaSVe6WiZiBD zaM7sofO;7oQ?9vbVM{!5(^Y62+2QFMUYjatH{l^P%2{H5+ehB)QF&JaAGq6l%A|oP z2ZwjP^Gt3WQ{{pnE19Ngrx0CY0Jcyc_s8kKvbYC=D&DFAqlDr(5gU{|?IQCi@FmA< z;|((&+smt}FbAr;t~i?4m$0CFed~zEq4N)i!$-LaDrARjndCX`=V3aaRMW3=vkq|> zW1nu{9&2<4L};H!-)BoW>o?p1TcSi;TP~qzG{mm$X34{W`ugh?gAsugM05fIh~oF^ zm$Z#?o6>))2 z{g#9aWLSLWss*G*6W}8}M+=&CB(?djOMyYBj=JVP0i8yfv0X3_&p(ht*kFfY!KoSP z>eaY{$hAs+Owt;vS)62O*AMX2t7J~S>w@W@L$92)!F#T+^*g%)h+2AH;4P#aBcqcv zYUh~*-7D88E#{vFECBhvYDmZETZNfG(#eyD@dB$CL9yGAL-G37H9^jlE7gzzWBnT~ z3$s1V2h{}~x`wb{bf&u2Og1HbO5#>n$FnI4=w5 za2DuGzX!wKg;=Ui&c?B_0KFeIu8eSS_tDEeu$G29=l!I%$mTynD|?965MzKY;|Ot7YZX0-`~g&ygMB zjIwd!g^%Z|Ratc36-Ed44q40=pl0%duTJ$)=k^G8zd`Ez&?5}^l6A=sQjPA^?gDP} zYU)83;}3WHPopilt2}sLlI8Ap_g{}Wy^2>8l4NdNua6_<>8-ozbzpjnHd_F(-J&u^ z)+GPg&ER%{P`b)^m9;`gNZ8tWOY7(hE_z4+&%bTFzXS4J_<&GSNjc=?^ln{qAcU&Z z4H;X>oDz%;&$jGMym|jVqZY8g>x{?68Mg^oCoLk~?^QoHc;#vz&2Ztg?Bcr+8@A!Q z0)F*Y8cu`(JIiTq@jUnH<}~AsS`=NNP_e!>gv%039V{hGi};r^-P9a7Tftu+1sT@y z}TW3<_Lae|WAGQr(vhZLlQlp}&R1~URiseKxL*76XlT*^4w_acb7 zLwd*Nv(4f{Er3bR>_{oczBvI@v=QY?*(4<>w!u6qlx+5nod4xeXEer34xmkVw$2^u zyX$DXJ8jtzKXGo-6akMIY;!XOEVMay`2DI<5UJOJkp!5VnAVaze#`;mrcf7NYdTy! znQeW2prz}IeJS6zal4N)u8TW!(wq7ld2@j>I-5LbXcnn3DW^l%RqcqkC=KVsbmdP+ z!7r>Q#q~xO^}fMFb@ob(dX$R=Fx`+TOOZpH$b0l~W>H zZn<)!+%C9PSh%u%qK0JCB2)*6%*6ThiqA9XN=G$XJ{RiRtL4^s71e-&l2%GUW%myLGO#)=fk4}whQYOQJJKuSEzHV zRVf!=>UIr-%ip|~olw8u4yj&V=2dEQGi5>sl{IBIj<+S8v2!`k`&<(${i4M{fxc=` z)v8LEULu$F!j(6a+jcAgWwW1lFS2y6&yFZYR6uj6ZvilqXj$k40n=u7Na19Xf3kz0 zCNz^1Pz9*26<9^g>u_DE^P*onF$HcYZe&GA0BsUYF5Db;dn^p7c2A%R!7FPS>{5VJ z;n6ZP&W-FWKal%O@mZ!Jv_56Atb|ZRG{28nYg;n&a-B_@OOH}eXCEDHxA~H(M&}Wn zsrUsN1>znpVVgAM!U?H-%7W5K{z`HYx>xt3)_=pWp-ydLJ|;ukWmqQb{mi_iRu6_2 zlB~@kkwDAOEMj?2mIRU#wT_wd8xsCnq%Wuq6S#0CHCNIO%LbdawzIL&d& z>38)5Z{b&E=%@t?+$|^Q%bejSJvP507-!(Y16c}@!s+ofD{{76U=Sa`sZv$EJWju{ zi#?>lBy1n2rlpY}GS8B>W=_B!VKKdu$2jSU6jiA|oloT|SAyvIQegl9(%RZ91l@ zrS^t!&d;6oQfv9Q18$>`)(98X@0C5#Y5|v#-+dx|PJ)N^j4!7*E3l_b}0nDikvc{kXIT@oFiSeLh(Elp{s8w zr&}*#sYdmg!*^9;fCLosdqV(=R;%aR5~~Z%@>`HX7_KW`9^?2~sex z#2!x6`Wl&nG8(P8G3vct+K@3@PlH}AZyD~nF14YexBo&Tf~Ol3>8bjIXAA(s7#L2~ zRJ$tK(91>*B^2D)(Z4F6IIxq$2*e15<#t{p*`u&CsQ3r_+$i9Kll4Aj0cXG_vrV-L z@07$r+m}nzBt`!7B_aBW=qBAv$ip)%d`i_P0@wy zdGzc-TP}#4-+Cn9JAE>`b6n@9+4uGXD?`Yt5F zQ4)6#s7dtEqNP-v{(L4Q#?$(c@GpNKfU+hpSrOMyv=>_@k40YnlCha)pxrlJNTMep z!8;Dc;2sSn&1tZp+I$B0k2b@qTRYcxJwh}WCHrO5&EJzr`KldgNi?)4*Qr4n&uOx$ zGIIa>#S{guSi4N~XZr@tSe?z9kJNo?{Rne`}q+XDOv5u)AVvK7Ep18@hkHv|fmKNERi1nGatA6ZgE z2S}ck&`!R)h)Hd#FV7+mN`FH4FZHH!XWNXJWflTxo+Pzb)J;ek`Bqk7^qEi%7QQh) zYR`^6l-NkTUZQVzrn$=jUaFsW3mZOWQ@j)2IcTKmC-x0OZ>xIuS<(Te6sJEpMau7& zuetJ>KX?J{9Ha8wBWKKaNrMEH>;Zg^(H{~?S&05b=%10uJ3t%dl33-4@ERp4ucF8t zoJisV0l(a7Wm03waKRewY=qC$!We34Mk)JS?rZuq@+A^(e4q%pDhH-ldK-$h4(8Kc|t{Bw3-6MBR z?`I^PVi2x#Pt{X6^j%pcu?VnqrYFc8B@EqTR2frL$l39vEJ#Zs``P>|7sf3&?(?@= zqLVm^R~>PpZ(9m18(+CJk%(CA^!*SXulJ!@K8OZ~*L&)dwllS)ZAAD(I)fm_?Wk4~ zZXx}>p=6>92m=u0av>nH*npJy5IgZxC6gqZ;bHw64;6UoE)Tz56C_Zhp2foIg{&WC z9b#pR#aIta-7JZ(MI@I>I{|X#>7{;3ZGT7q^V$7-qx53hlOI+Nvx9 zOBT3(r!@*aZ7l-*+Prh56`W}Te`_Ma;c|I($ei;8*lmO!8Pv$^U$O3oP8P+_DwQBR zpnlj+1lX{#OI#pQ;S1}?+iV#thyOEQgQZ*gYA#!x(HYEjECS~ls1bfjV$}&t?_$&B zYBBMi%C@DV!p_LzzD1QHAeR|^-vNJbkqL4#7Q@k`&QQuXK?>SHr1#28f?gAb^^&3= zRKfzXPu6G~{Sl2zRWvB9vrhEfoRcqq$fsGwsEC2O3IDLSZsPF}lR=lN%Nu+D;hZug z^L&lhwW$!5%D3q$I}mA^w%`7pzr6OwqkRha3M&9Q!pfG6)$fFxy(p<2>iT=+Tz3^m zEaNL|^xiM8w?Vh~ULljmk3r`Z@+5aHcHel~je3-vp(oB*TAYBLk&e6{lvbC(u&p88 zVtf^Ci(Z6{bU(l@V7bwlRTR7=`7Yw_$!1{^J+J{K(}}^k|C-Y6!nFD#{UH{D5i|?M zpwm;2s#i!aB*{9$e*Gj+lzrk3%?{sAufP@e^mxJ7W9!2K;xBBTRI zKYymdI{**{yZ#H<9Xjm&dCZxF!Ab73e%o!ig9D_67`eG`y}cwnW(eq9q~gM6m=#(* z$E4fseId8*D7np&%IYGbz5`OMy4RqgBGp_v3Efsku%=IRL+i}$akcxWse>q{AvkRz zb}oh=Hk$PINls8XiyvIf{H%^%3*-(>SvUf45@asTVXl- zinru7<T((3U@J&^l4{G61Dc@h1U3=vr3*_=-zkOx=JC!aJsKJkrhns zV&a5$nR{&`jA+>vW{&&TZ-Sx@^eB-4X{`P~Uz1zI9PYWb=%VjpS@FwDLLYG(FT!zD z_dD=Wq2;`vE`Y|ay-|fLhW2!~34FJ;s#ITpId)RnJa;#2vublC53%bM8N?Q{oTa(l zB2iIca)W}rqiA#;A|r#wV{;34E82IGrFHbt>?;&u;FGv>&)p5Ggx{OXBN-7rQ6u5h zkarH9YtG-yNkM-BDmo`TJ~ z!OI(m0Tmgt@BYQO+Hcjl5-R01QbH%&pqzcE)6Tp_%~2nZ(rXAsP@YdA4B*`4`w-t2 zbwe~2Tv{J(J}Zhd`zsl?`OADDlmozh@O{yB`@L)~;@X?0rVL)S2ewNXzP_Dv0CN+4 z$nJ(-&QnYcUex^B*5L50&23`XC35nDW7AtO84W!tBJZ9envWKQ=(Li&b*GWHSTpGf z>8;^GLC-IrZ+e>2ZiR4-wpIjvS4K#UjQ2L|G(fYN{4Hay-?E>O6)uk?=3X-juG{6p zrG`6$zA>P!MDN|}69@55{QN44k41*yt=bmq)&a}%!Eo6i=fFB3Ho0);;b{Y*cyamS z=fb8OpB^@-Zz9|p^;!X^yqvAWmAb2`ce|%+$HTWTOvF|~Of>nI6kaz)M4XDvdqo9a5E{%ZQ7=I=i}xkY2}1{gRrb#pyX z_rXzhi%{=xk54Dmgrogq&~~w&_IbvWzbY3&&TOZVxT>Ghqjv2_dKtuSE=BK@%6()q zeiHd2hXDuBTNkHCm1@I72dvrdLf46UBHa)tMA)o2(y-4bKH+~OCSLHhrTF9csM{;L z3fNG6GKsEqQ$zKX_OTBy-hX~9=BQ32L#06Uu0|I(N#@`Z&9{&RbEo$_ctP!LT_Y7rQBKUK!g_J> z)b=nq+A!fCOy7loFQ-f6pDS@1@^ol(n}TmOEt^MHUQA=2D{j{Xh}3CyjdDa)@&2@t zWQ^BqTzI{F6eMxB zHzpuWzRPphH1V%br9~q9vLX&OB6lyg@SVq681Ms|(%YApcam=_?&c{|$2n)~2Z$)tuiSlu+9$WLJPdSV zoHR|J3u+gC__Zoi}-X;b*($XijX_2F8e(T6F7W zueC?(hLLXPOp|kj#^Zgvx!el)XQZ%&+p_4QhqBC61O=`U$oxKf`W@xTLA74=Br;mL zw^Abb)-C2_9XSbyD((49YL)h$TFoPnI*ot*-?WIi3nuS@k_mdz`?3$HJ==NOapv<^ zj0(qauWmr9qdKKPGewlOvvXUx6M=uGV>3WpVD$|d~r`Kq7c*BAuU z>enS>CJHgiB)NtGVkh#y_x+G`uSi@(J;D7YG1xO#K}@}~VpjcLcb*?9q4744x7?c` z<(0X&Pa@t=5lST4g9x&~gHZ9cyba?7qve}xo-En|Wb&WO!^)+{F!ahWmWg@wj!$_F zU_heuO2}Da$(S^N49{t12IVSV5vEvyR1Dn&m^hr;_zv zv-jp#ce0pkm_O=;>-)9iwV-C%>A`gFxOr{Fa9i`Oc*4ChvNNzBQks81f$3>9=raQHTpqtxqo40&-2RZ@iaG}2Z@U& z1@HYRtkt~beXwu!^CJCKPt^_E6a^kEd?t36{;8N4aq558?h|JrhZmys&zV=so_%bB zz{5k>F&-Whi+@5c&}_mdxod1RFtp$?sg}p>h#BTOn%G8(ir$Er1Z)M}P_W{1&Q0aS zsW;fd8ni8UrXP=o8ejsq!rz`tIl@8pL2gcCdho}ioPWn+e;@7L+!NMjXiYPW>OYVL z4hk)|5LnIpcIK-?jD7oSRMu$6T8)b@>NF%u(PR@gzDP&?JEWmMs_S zYrA2uYR-c&CLFOT%4)GD3yGR%%q>in=e z1nt#Uy~V>Za!7bJmehYbU&CHdf@o86g@$lQn3}>=vjEiA4bTnOvO|JN@K0Ah5)Z`l zwm~{Vq9)UD-T^R8{(JX=`_!muuEuX+Xw(^{ZEC1LNc?*^r@X7B?yduF#|v+aOszv* zEI#-?xlL>s%eY`4&07?cJ@Tb@21ZVAi>e`Ewb75|m~wohylv=ew2(U*ss@3Y8{;|Q z912_h8$6RdF&9L*;mt$nX7L=vS^g1mbJmzDt1F8Z`r*%bXY&G5c7>0>>7}LpqwhJ) zbjegb?2ynN$HP1Y&feh7ShmYuj7Z?n)!paJsof<*Ss$Rm+BAV8tGtP-T zT?SZsWluaG$HGy=+mR?8D2LqC-WgDFq!X!x-=8G7vBvQE2;r$KAS;>;6I)U<5HV?2 zp@qMyh{AghY}O8hNL*WmIRUN}ser0y5P`$Jif2&z$HO2;5l=cA?69uF(o42Cv-Sj& z+_FRVgrOIG1|q(ppyr905fTtpa8B5pqTYaU?s-Z_~ZtRwPOQ8*WGGjzpVLWO&m1;eYKwU!Z={~qb7<5uXHg07R?@-gx% zje9#c%e>pMj5-jL_WXcRQzYN3e7CtSffgxIjk*1h4I`W$bO30Xc9qBy(YWeXVZ%nK zUdZ!fyD0&k?2szF{3Io`7PNC8kDdVSBoZpWwCUoTFuP+hM7eB!KC-x)0Z!74YkmQD zL^(gl^^sm5DkiBCFSUK5Es&xRWX;gtD&F*+IOcexxWjWuT{Dgp+`K<`4YgpEyiN9M zd#Jc4d53x^0*!hLra)SVLQ{Y!nyPxg?lQ}MaO}-D_iRUgg@ey}n8-fP5YBkR#+7zY ze7eR%svS;7L09T%sl`frNLpXh?M~Hc8O+#&lUEo3c+14?xQ&k{0V(?V7iN{A0JIrAn zVcDBG1FxZqf#i>;mD325P;IIFdwEVU#JL>01Z1~5FD0{*IARqTd`r-^TZB9dTd>)H zMPtPD9yVg3eCpOyVMBYov z?95_WFJrP)uvnuslpae(iwcoAP+`R{jw68_NoOF{GV`=(QZVqRt#mPRw>mbt#Nf?k z@;*%2~(w~q79VzP6!Syfjau6_#0ot+4rlAJ|z~>Ri`>umx&TN32pR%9>zhdTcE0IZ<0L@u)?AUL}qzTS% z`Ic&wE!;z&{hZQpRbFcOG2`xK5(uHL6Ken3GzaZyUqAtN)IrMtTS|u*7(6kk%iYF@*#ydeXB9gJ#L6+c|1Xte8lm+l6emkD8N1kn zPjAH98`6cRUT`zp+990!MH462=86J&M^W2v&GshDTb&#v9Ojq5JBB5bLgQk%m3$Fu z+He+CnppOmN7f#8NBs@puzO>~xv=@m<;~Hd*zEuc{JdslL~%Jb z$p+v;e53FYPJW4KDbVL#WSaru0u)ja%ienH5qQ(jqasw+C!haSnj>^Th3Jna5P{+| zT(g@d?r{EUcKf}#eP69?@30ho+Di2;`mXRdmm^oD1SVl{93lHiC$N;3bEHAD-U!+7 z5&Ya%%5f4z4oMSk*0e1ba_!oHPIi;cW2>$HP9;((p%SmG3=V)2#f@nFN*Q5uUP5C@ zP#qftGB$DAC-u6KW%|2fHk0O$EuT-VOZEMWwSy`sy<^OAskcMKVf_T;=AB#y=ol|~ zrz9hWpw$4+8V1e~L+~;`_$#Q~I1;*?vvxYrevei!or^V0NxqrlzfZA;Ka5_|1=`z_ z|2}|K!ub)fSC_RY9VgY_@AD=E>@&r#SV31s(p+Al(&TnF#1f2~j)*1oOqg7Ku&8cEV}0uMd@|JlI8V%&;-rRpyW; zd5KKN%91%6(8!$J*S!?W#QadWDRROnC~KHHR3|}Yr(iv z*hQ?x<6)won@BKqC!fL8c^S1w;DvA`G zx^pc#!Z`>ZIyH1%+v>ThU{+nSySG-8${IAbg6=Z|_C(a&6wA7wTfXeDT3CD?L~jjW z<8~|YQiuYHE_`$he!8_sUqU8)$!EF_WllAzq?Vu*e5~-!Ow;;yVJ64R+79IpP3;sh z1LI7G>P?sl?V;8r)=MbwY zRAp9>!Vg}2;Jn`kvjvV>XMP}gl#Xsto+^98e0IYgDs=Pj8Q;0JZZh-g8NiDXeHwks zjk{?bDybDDKT6;+wAA{B++l030XCC1?>KuaD!;>AL^h|%?Is)3d@=#ABtEbZ7a5bM zKpb!hc^wGr9sNn*2q!^zA85R-RG3@>BkG#i<~7*I#NPM&J6Ye+O>7T9#13OX-Y0#c zJasLq1~(8o)tGVzA8xfj)lL34OtnF{?=9!{;63tR8m+DTKAYd6?0fQhzvRzb)T zQrID-#8ais8iKj@Ug?%0>ntNfe0=ksF#H_b(M()8@+1$PK63wW7Ih=0lCI_-Atn^ zUUS+P<##6>K^0Pzp=Awi@`PFE?rH%x_$wh45t8ldtkdOQ z?NTO09$S#|o)l$mjE$WT&AtE#nB3VP;gut$OGFa~yA>bU$Ue7IqPmN=cIQ9m!+pzr zvg3O$v{3{AEd1Aff_Ce_fXxSJZ2ueF!}wol%Kr)Xh$^V4ipl)LJxb#Lo$mQ(RsLr} z?hhj~0UHa$|Cf+s<@oOta{sIDq5Y5GoT8JlwF&_%`+wV!`w!nEOfU7H!bkuAMLhox z-!XHyGc&gNFN(+RKk1IsKeFTUU%k$M@|^#l*ZBu<{@3^%E5m>BIvgw<|NHhF11t0Y zHP>kYmCL+Dql-dyEmh0=$91?+D2E{t2-FBbU{O*9DCM@Gn%We#G`70M<_~U~*n=fo zv$|*Bf73n5nZ{qMo@qRLO}mjrIB|Jo)Um@*#UKxW4v&rx5P`=mFD@S+0NmW(+W#F4 zn3&J~4CHgWE>a`t1Z7+p2ShLQA>1e+K|C8Mes!V+WJ92NC;K3K$KZER;rCFH_jdqq zZf-)qWCD2x0HAr~|4MS>pmKq2ep`Pqj|ppd0M`frHWI{$1A0_o0a&ZXP39U!^FiYH^}>PoO%8wNI{6C!%7D1M6JwZJ!`i!mcD(s%Ujek} zkt6)o6c2S~nQ%&Pa zYeQTE{#Bavc5I&IQ7NYVhH9#lPv*sVRgWngsn}YXI$BTl>Kq z92rdB>;t_z0aQ?ai+nU2_!>0<4*&#l|93s#-T?^M0LC^qaz0%Fz42A&@MU&(Pew7n z_G=JS{jLu&2z={k&+fsIZ{VIl0QKbHsVm)KpTKN^?nk+=V2PY zk@1lLw`o8PgaywoKE2dl1s z=SFf(0(U)6KwJRN|8Dj7+M)rF)5FjHzTu@#ZrtC$*!d-h89wy0<;eD z-Pt3z5&j0mPPhFa|Bg9(CqWFI=thk~&H46^BHjFgK=2Wf=XHMfLd0_D{X6Z^{TuN2 z5}}$WZ*Da62tJ!H=Wh2c))E@z0ZiR+X8Lc{uplmPaEp%exPphhO^k#LqYYL`gTugS zUM`P~-F$)?HB(?}K6-;VaQ0i|WdzMB<6~3r-luf48R9hLtftNP4b6cwIjbgv>8QBp z=);S#rAOJHGWKWVmM@?7_ihLWAsYcJMZ+okM}+?6_rFfZ%hgxfi;4{lIJ}MTUX==B zxR*6Y)TUAW*o%1slp|V|Rpt&JN*LrUoY?!}Y&%Qu!zB7IYrxeS+*~EU{4l<}TW-O( z*UwG23hBJLo?M{7!GAbd9ys>zK#;X;$kn5-u)E6krW=l0U%9KaASMTSntTMUok9)B zuquL#xMk)z#`J&U`;4;=~^z~}uX;{Z-DZe7@9?4gPia**(7j9Bd zUub?B$q5qx!|N%SJ*DK`v){q#5b zEg1j)sWqzWJ9g=CrngJuvdW?=@VUG^7FIqzOk!8bqcRg-`+KQ}>uV;Z5E7J$HXKio zmCeQ^SD-`d@+>7{-CrVLQXqT|U@ydE@Yyg}K=Qg0vX_qgS(@oR9)er`O_4--SOuZ? z*HAEmP&sLZ!#*h@5ApS@Bj~<#rz^W_D=Y^@NI_ya-YYR*z9b7nxk|=A`+O2Qiw(PM z-0kS4CZ+{8UW4p7J*vpT6*$l|St5JErNjJUn8l=4^nm1v%sBvi6aUU&@_}?#az!en zyaVZEsv@Ub0+%)CiXrD2^XaD6>yfgcgMKVdyr0C!0i7@~yw0Z4T_Z~;se)8$^mpS| z^2U~GKR`sf{$YhWtv(@pC`8-8l80x-mshdr;=Tca z`jY~FR>}V0IK64{O{wH)@sfHorFGKdqB-!Fy~IVWlK9|bu(8;4urWG|ZL_moVcXCy z-Eg-&rV)5(Z3tH8Q$T^_cZG>Zx zcCK#>;$FRol6YnY8v8v1N8df;$5wLIj}KF1?J@}KkFy?w`_EzKhLrhduDN`)N_yq1 zmE)2ajDH$y_j`&w3_v!+RbAAo0sq@mKS$|sm2KoV3|Wk4KQLcUHa66Mlyf6ZN~ zl>#TUBgrHqBdDlP6Ih+%$|)`fge${MpfR3;*lO4Zq#7jxIZ^0SJL1STQ7#ru4E42& z?g-00*#OFDKrbtecU*t^8-mz~zQzAb9e8f(_$kg;VX{u*Hyu=D% z0v(+0+X}C2;fxyc?U4Ju!RVGY?Cl-6hH+(vu#t%K8?z6RCs&uhAy=YiR~veEUAwD> zou-kcYv0;Qh9@;3Z}D=8zJ3V$sEjYxz%y0%>gEElF+(H;cNUzqT+Q-bbaadD`=SRDrMLulpIg15sb%x0u_l_%pZZ#ZfL2BWP#fhfV&wb4~nY8%+X5u}GJ+CVFwLBg_WbL_`~WlWoqK zA)^K(u3W#M`q;APP}>oFAMr&2{zjLw2YWd8D#~pMNEa=LIT4$o<4MMC!9pj8PY->Q zx+9WN3s!@M!=ac;`yP-PxzcsmQb-jFnH=HIu$lYrN$M66n1>kj1R)Y|nblwNG^cW;Qz*WBV9w_<=Y zD}kwtTLhcMK42I;-aO4e|E-_jcK{1F>pzoy`TQXdki$E|m#*n%(EIX-qxLMMp1qzgfo&A<6}&-jfwlSm=R^BfW&SJ#!NSJa4{Qn^d06ct_1qW5O4A zeTXtRY|O3^4^OHiSqQt>JcPUf5;3&_vXWF#W7cS7(G0YT(=|wt)T>S8FiX%vFQrBUv4LSMhz~ z*gANO83TM`fzG>KCmzrT#GTw$K|_4hT5>)%frOA3CJ(bY6c^ukCa!yDnZ7Qu(pi8o zBNCD2t+=UFg;HA9?7(6roaNVO&Uxu)+DdfB?6b3A(GHj-zOViqWOwWOR+o98*b>M# z4r%OW$ZV-_n0m(60Tv%4RF^Cyr;uSvBrIMXHmsv&l`4I+Xfk?Xs_eXh04m+?q7fHr z&Ui%X4TDgP(Q@V6fPaKaw3ZuZiG*r7-h0Io8^27}R`NLnPZ-N7-Ql+(?mYV@)n>TI zo2HS7H@dI;&IW`Kzx$7;MR1< z7>p1s0ql2^Krq}`Csg__qwe1jf)IM3WrCrK4Xi$w`Vq3wQ?r_$(MMdd#I=R=qjEmy zY=dh##L14Gy*UVYRRPUo&7IpSHP+UmdBRyAn2Lg!uvU)ubYgVwe@?w6m>h5B;0Mkv-2$y=%l7TqI#k|Sv^g*B#(8dL@Ik&^I9lFm7bZq~SPTMt$<5W*>ZhBm9&42MEH zzv!zzcjOSf4evZ$sw4NC%XoBhL(~Ao?Lfenn&unrh9EiwM*hv#ayvU^_!l`yLrR0w zOqwEyxj;L&=a(m|oG&4QU1kGzs79mdOB%l1vwu|ng(Tvsj5fRv=29Yc&Pq$XSzvem zlVq@e=Av670G1Oy62oM4!`_?>bv4tz2xWv@wY4Q7SD^^dSmC6zX9wre?$MQa#bhpu zg-}db&`o>M-RAd|F-;=ir{Jr$-qw%A`rf{^nSd$Y63ifX1gu>w3=D-FfzEtWM|Y$T zMy})H-joYozsn?YgtUvY-G9B!mtZeuhXsjYbNvkuWbH7rB&UJ0 zm`Er}gRRlw)!60|eG>;5Yhop(NE|Y*(eOur3gJmDMX7L}uai<%E}VoPg_2Rjn!wqd z1PecKSJ@G4zgcHHuQ!y(>v^@EODxDa(ThUqu|^!}eTA=Fvbk_|Lze^tKyJex@86SFmZiuV>Ve0$wj8tAV%>3G@5F8lqB$pRd)Ktn!%Xp z5r}pUq*QrJHNbWjUEJffZFVK2Fceo;j@I33-5P}CXCgX>W8l>k%}xSKb}Om9#;S2n zMcW3cWDMglWHi0-?Za;4ujp8}y%nV+AN=AD0#qff>{OOcuurB{Z`JZ7m5%9*kHk52 zso6$r#bj=i%Tm37?=p4}L*#g(=JvX?GQ)vndkv?$40=Q%{sKm|<^aQZyezVoQ(tx? zacG=t9okS)S_IXCeBz30Y52aeUAj9#93$86bbLDyT^K`ymW=`MbOvVqXxsNv)U2W9 zn8&iz`c3B=&HXm{n4YAM78&>OnIXGzOMv?0TtlO%%3Il7b?*yZFi~oca`vBor^QMq zAn2bmbbO0g3I{n$N>C@)bHj4+N8aew>+Gt7g98-7fn|jqEEk66c;@URo$2^4t)0(s&kqWa5vi?<`cpP0a zdSk^{XXg;}c_*BHq|}g)uuRDRQQ36>HPvogx>BSINRbHAYX~6$krqLas#Fai0YdMD z4hjV6#Q@R-R60nLDjh*Oh;#%5=^dnZeBr&h zPR`JI#&Okg<6vL=xAwJu;7xdRI8V)*e_ZZKOgtgoTJfDpeJPzU*Yppa`i8cuUD_-2 zk`MdY9eIGWb8UkKIBs2`n~&icI2i69Up>oeQS(IV0u(jlGN zEUEVdn051)iCD6Kj@yt}r{d}u-V4>UThZjFKjl{aG3hWMq~TpHr@h2Y#IwagU7D*p z7?)J1ELi>HOB;QbdXy3>}NOv;Y_vrTI67@FwviW=BR`^k0?O1~c*SjvaaX}RX z$0{pbY|6gqGr}fDJ(p}2US>DO-cO@hcSB3v zGoVc`EueZ&W#IJo9V$zg1t`_s8Dz#4%8W>p^E~^^8_!wLDRN?CsGwyWqKf zZKn#-L_k|o=(HnQ!r3!$fV!2=HAg@z?#4@L{csRM##>RXVjCyu^Fg0@SLz0KZo4U* zp&vWVtDzsAQ;T*#qwXDq-@knnDsZ#oQ;`&Uw31V^QgeYCl}uPm zrtQxdG6g2StR40@xea;8I!} zu}Rf03&vSP=Gt3(d6W$*otcGU4`^>#Jy%fcNi8Q(uyTY~r_s&WMis7aZ~0-u?2NEI zuqQabimX1F*(U6|Y$lWQ`FOX>Ia#AwfjmR!Xo;JEz_veZq?f{w=^>phJnvz;)&53itL#q zWh{Hwe$+%RGc>q=6|x)bC*aELhP1fDgFPW2%ArL1tgjZNX5X&))SNFd(1ampCBpE7 z9P&b=4nq7rUdVSpVl#A4!h~C_g&L>Y3#St;!!S%-%8_CCIyAn7lNmE63ZwP{*2(XL z-rn_+1)8_Dwe0F_@EJjPA~&*I1<`{B^4Ct`DfTk6&HP70u63o)$MK?dd~Y`UZMZbU zT)&q}11ii_b>R9z(0u}fp_AJr4 zWKuP=9H1&8avZb3j=2=jJ{H4oz%GZDY8hfI7Awdg4k5BB0@Ihi@CvvI!c?cBbO&qdR{8gFwPk<$d+yf zj07GA-1c{=w{V)@P`0^^!IyK_k=#JV-A_#NWe@QhAO_*b-o}qR=QCDL0LQv~N#uFd z>~MHQ`>8t60ngea;;Xz7OyjVUb&Gv#Z&x3)UO-XdtLWVl{@BJk!Cl)l2~GdOxJm29 zBDs1B=mF-P^3qBIsm56F(aYM98XoM_Zr}8X2eIiR;-#`8$I~OUlw?hz6;)O z2}mWHA?D3MU_v;mToOLkPM4lB!VU<@&fU&a4rSp*-K}M&PgUIqt{Sn9ai$7SK2=@a zsL9)2NltGfmJFWQWXzjRu=SEEJ7?;K+TVq@RliR3#L=#=%b%zxkdt*9_F8CEjPBPZ~9z>&5mJ26rhLG`=gtH>^5j%#+Trs#>yH6?Npfk*G?9I}KT`zNuEw zP+o0i7yWS*`9jt(F4jL#?{oc$?vb2SbHC& z67oIYjyLP-D#zGm5vIg3c|JXUHe&Z^yerx(`rA;>V_~Qty$Ta?uC_~V*0GAdxzP>e zk1WCqE+>LRd;L*fJDBrv5_EM9U z_3p7P?;3B(3?;nh7sp&OsGwHwwsRqcd0W4uo8Hmx&0f~g7!7YIOz&;l9g{#w9xB@VzH|V zjp<|vi%4oZSr>Y}FpwymXZhC7=cgepW)$wwMzwB zU!~h1^}QiRCWG3PZCGJYc?94{Fv_s9uBAP4biKsaxw28oNc8mk-Sk9`EI{Fkcnllumj?iS-M1Q;m= zJo7f|^@|C08I8W>nuiD`{IPf@veK%McB0Dn@e!@)M-*LV3?;{FWo=OrO7$s;BYt7H zn6fTMvds#Qt97tCMcO@w>2*?ctZac^-Hr2#-6TvYokYoS1>tgz3vPQYbtr}1y&f;K zFR{1c%_(l|pV8Tq_;uIy*X&H5&_5I7@mdekpl54Z*#eDv<8 zY7uM`Dx7^KK(JG$6~60QYV&MGp3td0zR-0f*!}gal#pxNi3;mV*~ZEn)01TqT28Ms zwxi{g;veP@LxZKLeYNj-kzjg?l`i9Pj9HVebx7R3s;SWHPG{`1Glol&MSfs|$F|e{ok`hi+1<$eb8VpK~Y~Md25A=tbM>C$9 zsnC4AtH>bo(3HZlH6VWEWK!tck0weL9(tLP(WuabPwTu+E0=Qm#MDb;M>>_+`zZH0 zD@Kf*iDrW~fZif>0f7SB>G+f71XBucr*t*&8yi zY*hfa7nf*0jW_qYTmhBpASb(&-!9n+STsEVfmz?rU3P@|KBGO2Ci7%`eO4}`(S{Mb z#Ejv&qg-(w`7&?1#*gdk_LKAcTbgMA_FXX4e_IuE$~)) zDao{=*Ri#=V=j$JfVb|ZKW^MwMgRNC>7sdwcJ-2kAR|)dl;ILK49(Yw0MV4&nygDo z=D9Byr3IB8RMQt%Pjc_ZIC~>1Q_UZUjuw`vL{mT`D@>$)7)3u%f1n@T4lgMD0hY?@ z=##vXr!pJ;h!Xs+^eMevq9ZMe`QNbu0bK?2G>v;{_(K&<6j!q)C{fnMM=8$z3 zCn8~UG2<^?DwZlyE2tc@B&x2ULk3td?VA5GPJ~l67}C1;JrTmweR)4M%rzTre>NW3 zk}8>LIZt`b#qMi?4dxjI!?J{B)0eMTX#{C;c*V?mMs7{Et9S0-b6%#gc--*8fnrFp zsT1c(dpB@QI@*_m@MbEbz``nsMVq`ICiZwjE#jW$HC)2vscjv3of_AvcVc>uZ)f9X zKK5O1jZ?fidso2oDU(^v)Y=IH!hO}>>O`3>)wZxJeKBwe;I?@SrG36U2kz8B(L6I*DlPPlK5v)Y8oj&40hh%?+u1*4RjNzPeRAt! zEwEiVLh1B}<&O4g>_z$9RhtLW^zMTnvGn7HOnPk)sfo@o&tAm|Z<QnVSIdzGu{C7XV$ za%0yaZ3t2>bWJn9CuJ+%QG7HrX7{R?nZU=vY*j7{s5ztL3z;IYXJbv@Kw}Xoqmn5S zSkGg0Xk>VEw^I@n2i2sO3Nh%l@ew2))4u(ZdB~zJ)S?%wXG+a{Q4mdu49Ywe?WUEn zlIhL=c*cf@Iyxg!Dt&%ZRdNS@Hkh-a_))gSn8*LA#h~uwXr@cz0_(u-_#MfDs@aS{ z3#d?B%Pz#U!9!6$(ehPju;#-KeoU#7z5*)_1s-{EcvfC+m9iVjTcsl+Y3+gO7>6hx zdW-;QZ>vzmBy}=Hk$9w6>v^%;T3|`#_cW@a%xpnQ4TZ7by>+t}@p0Gd{igUP6SFdd zQ>c=UXvpf;-=b2Sv-Nw_?N_>A8&ZGv@_%ah;(NYyqLQnLdy#k4a`9F62l`#>l3;;> z`Sk!Uj^LB&G0%O@m)n^{tMRTW>~G0#H21xojX9vrg=_0JV_f(+gCm%6E#s5Si!?Z40{ z(aW~i%;nZzNiH*%lVPLbX{C*v4kEIE!deGT{1W(QH{#hTTE6-QeGsPv^R=%%U(Y3UcCXQZom_ zzS@q)?AR=nqex&Qon0)i0uRjw!J)_2K62n6+mGI4?q6>+ z9QqcK&woAHafukpAFKk@-9#PlQGDDdy!PNtA5U#3gXJxC&xs7K=$>PnJR+6Y*7*95 zN1^PKQ*!WN>TEKD#7oOM%o#>jWS1p+2(dr8bK+TD$x_@Gm2jay=xk=9+++)6YnU3l z^sT4o``ulg=N3&$WmX1qBZM$v?TwOy#~i}l=Vj0MHUVyoqrDO7H9YC#IX*;pr8sEF zBVelIjQO|qcxy*P?}u{^i=;c>TFUm3N*Z!~-gnG#Pbd`DZ|bBH&hNNN7#(BxM4eSV z#6fq2Ab4ky$Zx}}*>aKh+}oQR-7PKo@|k|s1KXG-^6{dlo_vJOJl-TYb0Hn_2~L7C z@yZL_3-|j&`^YDIpLk+>`&+>M-4l|O*X}``R6-+-5&3v&kL=U;-Kg=q$myniL!Mg% zB;%XU9B?Dk3FsYBENYI%XRYxQoQf(D+cWInmM*zaWi2w9hU3%Ja=0wF(y?#zUqO68 zGC|seCr(0pyUUId-6uHnJ4I@cmWj%iB?_r>E!OEyM}kck61zwZrm9%&UU}Y>Zsljs z(91Pa2tsOOO=QEW3PyMEfIPCbtLS~hgIBiimgY`<+u~5KrhLyn)et`8coqs+(wh|+ z(LH93oKWf-!S?&vhqLu}B6bf1@&jn8M%R)b`KZ6JLqn~02N>k&S#?G;m?{Y(w7K@X z)~{`z`oE!`tZ=0l4xxP!Jg#igwKIaVdK#-dPu}#9W_35#czS-R@Y9Rf_)b(?KxT3l zs{yV4d>2hZ9=EOhwLS7)Ot~B0z3z@+mNCnGjru76ipID;+vifmmbj+b+*$k$tkE1Z zvl!gVp52>hD#~|y3nDDs>p{b}d0qi(jo}}wdvM{0>)a~q;-83cIuL7A<7vlEz9;Nn zl9=;FVuiWU-7$9%ZN($oCER63>`=6lw}GcP`Hg%W?T{3J90te3?t^aIrFimE*(yne zcB=^{biweXR-}I$TMZ{YKeeQ-ID>MY(klEiGLG$)CBCqO&dmhVjLQP-+cq|hpB>J(+Z!du+-Er70W zdJjMl@gBfs@_O2agPeVFU?A_HWoRtv`as~BL3p`z^dKXe%(#N~Oo5|_z-HjF8k&pR zVFqyZaZD~pkgv>M#Mq_Gbz&h$8Y3iDf ze8;Cf^gLxpbk=O&7};ZIc5=AL%jq1BT!l>0{KGSRHZs}5_VYh*cA0{P{*6FZ^d~Lo ze-p?)xT~n3rFbEb)%s5YSy8M$76bx-K@fnLxY$qfSRjx@2!?P_L|!zc2Z&u9-a$H> zAnj1tGeks4gp^PS8%q;eJ98T(0INOyr#SXMH@|=IFF`C)$Xv)m=$~>}D{MRaUt8JR zAe=3*&FtNN(ZpUzV1L%cg8wZISQswGC=UlDK%O|CES3y8 zJs=kTh4ErRPL>WRdnW);?5`ULDOfr=qhJ;YCjb=dq=NY80T2i#5z@6ZMOiolfWKpb z{Qt4sm3yEF!(xGH!v2cPZ(yLmg8>R-RmVS}f&4F;i)Q{mGxP5g6?V)<*_ z!UHT{{~|^dD~0~|P%du$Gn5NX?TxKSBqd4yiU;5?*8eXkze~D*!*Zbx{}l^1EI(nv zlJs|w{^2Smbx}eW7%nLN|6%#PdVa(5kH!AX%dc3lmGC!~i-{FK^Kvne;a4mg2y>(} zw&3htu&IhoTV+dAX8`=KH5mLnx#7>Whas?aXm3s;^w%W-f6RLLIR+X|_NFc-NGAZd zs-?0PQV-x@YKDCg01Ao<3j(3of`d6B5f|majWz#$XlZYE2Z2HYxbH}a2m_(QB0ymv z7%U1F=K}({goU}VeyaAS|IJ0q3E|*?G{vR>!p0eig{vj6C#c|JV`Gf4v%7$#Wnt+I zz&`&0P2eBU03w3of?}fL;sEZyLGt{>hr1Kfj6@h90wEFp*8?C124iLaW`MtKU?`S@ ziwD5&Up7$)mdW32*j4>z14D(O*f9U%2Zmr7_}vB-5y5T>zxj!a{^0CD1qzFSv0KcqHmC^X z4?n0V6q|g%_<=woe_Rg)0{?+U6dU2+v51O6Ab)ZX24U;?mwSMrV6oq^U?UFv$%b-5 zSlS?+u-gzoNYm02d66$d5A5wx0FjG&!fq%^c4qbfk$=7gDBS_TB_UvOabXcLFbpCN zl!eFwAz*nZb~$3g^4Nb=h=Sy#0RP>^0D#?ooKXlT)L(fDhC)FiBpe*_>Ix+P14^C6 A9RL6T literal 0 HcmV?d00001 diff --git a/tests/test-travis/bib-inference/backend-bibtex-expected.txt b/tests/test-travis/bib-inference/backend-bibtex-expected.txt new file mode 100644 index 000000000..29080ae03 --- /dev/null +++ b/tests/test-travis/bib-inference/backend-bibtex-expected.txt @@ -0,0 +1,13 @@ + R Core Team [1]. + + +References +[1] R Core Team. R: A Language and Environment for Statistical Comput- + ing. R Foundation for Statistical Computing. Vienna, Austria, 2016. url: + https://www.R-project.org/. + + + + + 1 + \ No newline at end of file diff --git a/tests/test-travis/bib-inference/backend-bibtex.tex b/tests/test-travis/bib-inference/backend-bibtex.tex new file mode 100644 index 000000000..4b9311e76 --- /dev/null +++ b/tests/test-travis/bib-inference/backend-bibtex.tex @@ -0,0 +1,9 @@ +\documentclass{article} +\usepackage[backend=bibtex]{biblatex} +\addbibresource{backend-bibtex-a} + +\begin{document} +\textcite{R-base}. +\printbibliography +\end{document} + diff --git a/tests/test-travis/test-bib_inference.R b/tests/test-travis/test-bib_inference.R new file mode 100644 index 000000000..42f633205 --- /dev/null +++ b/tests/test-travis/test-bib_inference.R @@ -0,0 +1,18 @@ +library(testit) + +assert("Bib inference", { + current_wd = getwd() + on.exit(setwd(current_wd), add = TRUE) + setwd("bib-inference") + first_res = is.null(pdflatex("backend-bibtex.tex")) && + if (nzchar(Sys.which('pdftotext'))) { + system('pdftotext -layout backend-bibtex.pdf') + backend_bibtex_text = readLines('backend-bibtex.txt', n = 8L, warn = FALSE) + backend_bibtex_expected = readLines('backend-bibtex-expected.txt', n = 8L, warn = FALSE) + setwd(current_wd) + identical(backend_bibtex_text, + backend_bibtex_expected) + } else { + TRUE # skip test + } +}) From 5e2c2194ac62f707e45f019ac0a928a4e3dea2b0 Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 16:23:16 +1100 Subject: [PATCH 2/8] Properly quote bibtex, biber as args --- R/latex.R | 4 ++-- man/latexmk.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/latex.R b/R/latex.R index 2351347c7..f769916e4 100644 --- a/R/latex.R +++ b/R/latex.R @@ -26,9 +26,9 @@ #' \code{tinytex.bib_engine}). #' If missing, the engine is inferred from the contents of \code{file}: if #' the file contains \verb{\addbibresource} then the engine is assumed to -#' be \code{biber} unless \verb{backend=biber} occurs in the optional argument +#' be \code{'biber'} unless \verb{backend=biber} occurs in the optional argument #' to \code{biblatex}, provided the package occurs on one line. Otherwise, -#' the engine is assumed to be \code{bibtex} if \verb{\bibliography} +#' the engine is assumed to be \code{'bibtex'} if \verb{\bibliography} #' is present in \code{file}. #' @param engine_args Command-line arguments to be passed to \code{engine} (can #' be set in the global option \code{tinytex.engine_args}, e.g., diff --git a/man/latexmk.Rd b/man/latexmk.Rd index a5ebef645..92fa33814 100644 --- a/man/latexmk.Rd +++ b/man/latexmk.Rd @@ -28,9 +28,9 @@ lualatex(...) \code{tinytex.bib_engine}). If missing, the engine is inferred from the contents of \code{file}: if the file contains \verb{\addbibresource} then the engine is assumed to -be \code{biber} unless \verb{backend=biber} occurs in the optional argument +be \code{'biber'} unless \verb{backend=biber} occurs in the optional argument to \code{biblatex}, provided the package occurs on one line. Otherwise, -the engine is assumed to be \code{bibtex} if \verb{\bibliography} +the engine is assumed to be \code{'bibtex'} if \verb{\bibliography} is present in \code{file}.} \item{engine_args}{Command-line arguments to be passed to \code{engine} (can From d121990420ccecff2c134dcf64f34cb44fff02fd Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 16:33:39 +1100 Subject: [PATCH 3/8] Add biber test --- .gitignore | 1 + tests/test-travis/bib-inference/the-biber.tex | 9 +++++++++ tests/test-travis/test-bib_inference.R | 19 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/test-travis/bib-inference/the-biber.tex diff --git a/.gitignore b/.gitignore index 1e13e09b8..69e0fa1dd 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.aux *.bbl *.blg +*.bcf *.log *.run.xml diff --git a/tests/test-travis/bib-inference/the-biber.tex b/tests/test-travis/bib-inference/the-biber.tex new file mode 100644 index 000000000..d593bca35 --- /dev/null +++ b/tests/test-travis/bib-inference/the-biber.tex @@ -0,0 +1,9 @@ +\documentclass{article} +\usepackage{biblatex} + +\addbibresource{backend-bibtex-a.bib} + +\begin{document} +\textcite{R-base}. +\printbibliography +\end{document} diff --git a/tests/test-travis/test-bib_inference.R b/tests/test-travis/test-bib_inference.R index 42f633205..56bd01633 100644 --- a/tests/test-travis/test-bib_inference.R +++ b/tests/test-travis/test-bib_inference.R @@ -1,6 +1,6 @@ library(testit) -assert("Bib inference", { +assert("Bibtex inference", { current_wd = getwd() on.exit(setwd(current_wd), add = TRUE) setwd("bib-inference") @@ -16,3 +16,20 @@ assert("Bib inference", { TRUE # skip test } }) + +assert("Biber inference", { + current_wd = getwd() + on.exit(setwd(current_wd), add = TRUE) + setwd("bib-inference") + first_res = is.null(pdflatex("the-biber.tex")) && + if (nzchar(Sys.which('pdftotext'))) { + system('pdftotext -layout the-biber.pdf') + backend_bibtex_text = readLines('the-biber.txt', n = 8L, warn = FALSE) + backend_bibtex_expected = readLines('backend-bibtex-expected.txt', n = 8L, warn = FALSE) + setwd(current_wd) + identical(backend_bibtex_text, + backend_bibtex_expected) + } else { + TRUE # skip test + } +}) From 4053787405c8897f5bb0296a8381f8b4167e439a Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 16:35:12 +1100 Subject: [PATCH 4/8] (Does pdftotext exist on travis?) --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 3d65984b2..4b1646979 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,3 +14,4 @@ before_install: after_success: - "(curl https://xran.yihui.name/r-xran | bash)" + - Rscript -e 'cat(Sys.which("pdftotext"))' From fcc1f41de33b4e2319ea0d97a97924ffc0b34301 Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 16:41:20 +1100 Subject: [PATCH 5/8] Set back to the current directory --- tests/test-travis/test-bib_inference.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test-travis/test-bib_inference.R b/tests/test-travis/test-bib_inference.R index 56bd01633..db49a7ce0 100644 --- a/tests/test-travis/test-bib_inference.R +++ b/tests/test-travis/test-bib_inference.R @@ -13,6 +13,7 @@ assert("Bibtex inference", { identical(backend_bibtex_text, backend_bibtex_expected) } else { + setwd(current_wd) TRUE # skip test } }) @@ -30,6 +31,7 @@ assert("Biber inference", { identical(backend_bibtex_text, backend_bibtex_expected) } else { + setwd(current_wd) TRUE # skip test } }) From 6fca2bbe16a8ff9193aa096747f8408750b85228 Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 19:48:48 +1100 Subject: [PATCH 6/8] Don't install latex: leave it to the test suite --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4b1646979..76eaae3b2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: r sudo: false +latex: false cache: packages env: From dd7bbf722fdd5c80e152e1927b0ca29e94eac380 Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 20:39:34 +1100 Subject: [PATCH 7/8] Install tiny tex --- tests/test-travis/test-bib_inference.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test-travis/test-bib_inference.R b/tests/test-travis/test-bib_inference.R index db49a7ce0..02c149468 100644 --- a/tests/test-travis/test-bib_inference.R +++ b/tests/test-travis/test-bib_inference.R @@ -1,9 +1,15 @@ library(testit) +if (Sys.which("pdflatex") == "") { + tinytex::install_tinytex() +} + assert("Bibtex inference", { current_wd = getwd() on.exit(setwd(current_wd), add = TRUE) setwd("bib-inference") + + first_res = is.null(pdflatex("backend-bibtex.tex")) && if (nzchar(Sys.which('pdftotext'))) { system('pdftotext -layout backend-bibtex.pdf') From f3e2ca8a09ab4ead2eb2997519f2a12a07ab3779 Mon Sep 17 00:00:00 2001 From: HughParsonage Date: Sat, 10 Feb 2018 20:51:55 +1100 Subject: [PATCH 8/8] RM pdftotext diag (doesn't exist) --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 76eaae3b2..ef099405e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,4 +15,3 @@ before_install: after_success: - "(curl https://xran.yihui.name/r-xran | bash)" - - Rscript -e 'cat(Sys.which("pdftotext"))'