From 735b59fb1345079ff3bffee1bce606eb34db8295 Mon Sep 17 00:00:00 2001 From: Hironori Kitagawa Date: Sun, 4 Dec 2011 13:39:55 +0900 Subject: [PATCH] =?utf8?q?commit=200cc44c6=20=E3=81=AB=E5=9F=BA=E3=81=A5?= =?utf8?q?=E3=81=8D=E7=B4=B0=E3=81=8B=E3=81=84=E7=82=B9=E3=82=92=E4=BF=AE?= =?utf8?q?=E6=AD=A3=EF=BC=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- doc/ajt-devel-ltja.pdf | Bin 644646 -> 644148 bytes doc/ajt-devel-ltja.tex | 2552 ++++++++++++++++++++++++------------------------ 2 files changed, 1277 insertions(+), 1275 deletions(-) diff --git a/doc/ajt-devel-ltja.pdf b/doc/ajt-devel-ltja.pdf index e1614df587991012ce0503d2aade917ec14bd79d..568800f3d4721a28d983be0387fe52e8bda2bd6a 100644 GIT binary patch delta 78107 zcma%?Q*$l=lWt?%wrwXnwr$&X^2WxFZSB~$ZQHh;%vYys>dehlP5*?x>b0JJN~1qd03F0_;c?9HfiWpdaTndU|I_yxI>2`d7ymd`V&m`$k{YSdzf1?r9(tcx}Lu;zbQ} z8lYJH$buUnWp?gAVj(o#O$3bpO#uM@YtB(!?)#xiA)!@3qhth zP&hMH2b#rSi0Et15Q0eH|(Grp#w;xWF`=`}vx#8{3unsZJtZRn+x zI*#}ZV&=M93^4Y#0l-TPD6R9~H7wyxojKu!U9_SpqS-Tu2NtfXQJNMWClrwTh`AkZ zO5&i0@oLSCYyL(u!F5a*s@!1i=DYnJ1-uuYX6++bR3?V0o3GnOx-;rj-|&Z3b)aoY z0uUEZgO#7Y>ef#egCOUxEI-nT)xk{0YQn7QqIN^_V=G407r1FAf zd6<1iblq}xFqw;BYhp(%wS$Y6{Fb?s_27Kt!P$l0uONY#CyAG{HPpnA2&mi91Kmvc zR`^GiF?nO(A{{i8c7Pqx1oNX?KZSclqB+-I<>td)C}6{!48q}?h8KJytSa7*vDCTI zLT15w%o3}BXDO97$5z;BWi-_oB`Y@d18m3i*XfflwO1F+IgUuko1T1MM{r0a!acYD~+!-@dk z-XRd<@XM?!=|P2OrJ|#%cTB!7QvnT zqP6JNp+Z}n+SV4Ac5rVM48b;0#YtjZK{;Tp?si~Pd3s!)UehND9PZaBTZ&8TNzXXm z2iPeo$#0r9YsbLlu?8kxTj|9(9TOT0K^L9mHu>A(sAHYBdUV&IUpRY_H!u_~o;j4y z7o_`M!C>D{%|rRAS%k>Xomk?<>k`^0N-iFxrLK2%Q-Dh4S&h#vRXmL-uE{POKI6C# z#CQ42_pz?DknNIcH#)`({6k}vCD^VH3*d&E?Q4cSo#ccQPe<}^tvx6_VhM>qfC$}O zCVPc{Y5FypxWQ%g;2B*7B!x_ENrC2=Mg? zCWDuAWmL~)%gKE{uBG&V551{F7!jR?;+gdo*BWmDT?LL#m9H&)G`b#EuhfoYA*~t5 z(bis=oHvy}8D@LD>||Rz%YiEHklBtQ?fz$rhtI4%r)RZ4tt2sFp%lbOi2?W_54!dZ zbgaU2AkRICrlf=jGgAMi4oRaO4j?M=(!3n_=X*DAc7ZVB%TWTZeY6b<>2H^G045|^ zda3Z;C?uZm{Ddlg;In^Z()ZsQ;hdVPHgySvL8X&|_S}n{?NV7RQqx4MJD9OiJH~H`lPj+#%b~BgsZu= zsXc6{wK?wO=?7U*o>)W?-pK6Q%^|)m#n*aHST(6@b)G8si&!A2E~PNe9q9ZlCV0%Z zWhl{FLt1h#otpL`TlnuoSQ@xT&G{)3`0DIbZEt5pZ$#Hs&nJ z0#|P982v(0d87T>H`GxU_zspOPJ*O@rblKj-uHZi1}DCMQhu3dA&1FC#u$Bb zd6~zaPjaN|t(@uxwg44G>5tbiA`B_b`FA`qB=7P&v8~M2^1qq1H$PM+Eex_+ae~9@ zHuDSWM9mQ8?s6r6igNJ!L+vPZptum_SSn5ljex-K@Z!J@TQx9!%!;oTlg4257Sc`M zhL^p)y!EH;Yg|(kN{{UN5)vD%I;l33%c`Rw=xg8cldx&%HvwuhVxvWS5|o(vX-OBH zR>i_S*bes-TsD!|iIxcwF_FFg4Iqln|>>8X`h%VtN$ zgK@DwTJ&y^J|-1OO2)J_c5Q*xq@=ZM$tf67hA3v-x14#%(!f5f34`ZGsz;7tj}zC{ z1diBA4<`E)7l70nb_$?4Xo5Y<%)J@e#{FxVMY^R3TAD|1DUaDXjXVNc2d%r z34gcUM}5=?{qqn^<-N*YFn`9dmdW&;cwJp9DX8Ley99L>-RD@mCwSP7F**bZ{9cR{ z7g4sX!r1VX=whPleyTqEr?chism}59o#0AN2TF0 z&xx4MHu|QD=ySatkh@~DVqqU|lwHdQ&;g1q_e=T$R+qJ*Av25gb1jZE3?76mnMw&s zBQKYFZdnIFdT)74QWEK6Of|ck1@>tDdg-g?6PhI*{;SsYiM^y-eFyLWxH@9N_(-{= zeQiyV2EhG<3jM+x;HI)YnXJM2pM8FiTvh)lJdo(-?(blwA*cl#6N<7D7O}T+pM$JP z)+eqUs&isG(S4tb%N6&r+#MY4uwrTmlyU62$pok4@n*Vf*jMFH)LtSJR|x7`@n&G@ zO3S_<&bMu$$n< zyxws`!VDkJ>LcpU5b5NiPDnW2o+0i$T`X93xqcN6G!c@F1gRn9TI2US$kNnt0QJtLpcA;xlC4R+_e$ouon=ioiGd? zl?@kR8R<=UE&Ixtg59>cvNySNAk0cAz<}(5)Agw#yw%IAE+6f6KHZcDU{ehW{sN`TBjBBi&^N|S`4Wox8n07Wza6S#(z>~bn>|J8h~&J zQ&Kz5yiX1IQOv=Nrjr539!z*Xr*^fnUTk;{mtIVGDyP%kMth92`Ft+Usyc9)&2;<^ z6zc&eU=*pcGSHv+VBvf`q8Z*R0AOb$7%KKOFWjC&Quc2P=DCfP7Y`ix*haJSJ!tWQ z-veHhMYWE(i(l$!f|$wdZiR^5aEpHTzse8)^{|dkB`fBRHku+T9@@CyiE;<}$HyFM zl2pp^uAL69EHWhb;hl=Q8R|vc#$C6hYkBW8XB?j)b(a@Mf9abBG77?9;&AkN5GuPb zR{_b(Xu`dnOD@*Ko=3cgpO5!V0I+C02tpDbA_4h-Q!*P9JJ4WwW&T=9TkhKee%*8}H(grX$Jjzjji`w9Tr z=y3zpfpbDmvdDUGo{(|WnU&5~i6oHOMHNRP*b(qNB=G^v7p2#fVa)&+)U5QiRuool zu?;!FH1o^zDumHeAEMTNpZc00#W5LbjQ&}8irz`-8k~#?QQ~z+GO9bUHplF2_GKq4`}$|EAV&W|G_S#v3-tCKmP^hZzuJc&d*Bb z2MbleO+*A*^*wcQ9hi{u{-~D=XK{TK9kHlW@y#sPqTRdZtY?6)8ugaM-0|ttb0@PE zvtDOB3?&^)7>$$_)AEh*NFCL%4N7!tVq-$w*P+ux>+g_pOS@EHKi1h3-wd%Q4kkg* zW}@`&^!7rl{z9D)RAn_m+J43Qf@V*y!!&}*F|Kov<)Ptt9^r$v) zQciP4O%PTSpDBPO+_e2qH)jGyqoqD!C_)NwkO-LXh_P%T*co{=YH>b3mk0~F2#a-j zeE=Nuv{-Jj(#D4V<`s9kcDoPjJEoqvBiqqziwU^D0)j0ZTKc(E0v3kjmaHn*9}?Fc z+S^@lQB<$mrpEICMo{Y)^sA@{2nZTe6a1?gX;{MRt0ussGE};_&FT>py#{r_-nz+g zOfg$@nNXY^!+f1oBqQdW2x0syh@j5e^8Hn}4P3lmnEWkD@KY=GwLuX)rs&@fbCS&F z$53|ZORI+1%5edxc&R5Y?jnfJTOng42o-Hqw~DSSFHUG-NKVFXSE7{FD?DXq;Q(7h zBQvV-(E)YM>4kFV1s!JYu-@69^4~Mtb&Se2DVtTE`^YaBk!{b4D#@g*V5+KMRQ+J) z0m;ri_D7kPOd0T6oAePJWVVmhmSlgfN$f~C6{GOnsb=uMJtn-Yq)D{s%;5S*&uxE` zjL@-wk(0d9WdM!?QkvK$xEBY$ag}29p>jp6pKK))*)We&Jwpi@)!TlwDBj-NVefza zH3#D@b1|l|{k@tIdQfK!6LcsG?PL62lr-GT%{LeF(AuIv(586Xlf`?gLu-oWcI+&D zOfr#L0!`Oa^WKK=pH6UoxmBznUvjJ&jOMEtR9JGH)Bv;Nd^_ShJEfiAy#G>Q0p|G& zt`VdvtbtcyLranGixFDA+DGS1>(XaueJNIjihiD#L|Q>!J5TIV6-$B|*83HuN3E)4 z`wqJNj&m3I>+vrsbN?!dSNOfNY77CI3xY}7q$#1IW3A{aV=Z2>nIq2B4at2-KQ?iV z+i`fo<$yW21C2MJqLkZoLc@_c;WIBT1MwPd-#}2T5;}?|3_WV?v><*gGvjHrf8St+O;CTIB;%D zF7wnpn1L{uWJN#q>oz23n|>Hf0-nGOiVy01jwlyoXtnZ z5atWBOWMkAkY*#Y~i_(BjC;+nHNekLo+Z(VR?eeknpaQ1=?OP1e zddy*qeP5-?vI<)+Qg-v5)Zh%vyp^$Ceul`uCcwAg&pz%rXTsSmMr!AaKxp>W;a*V; zWTMapIRS(ImFfd_X4NYW$<7EmY~9DE#OktKnz1It+<6IuQYlAXm5H z^%U-LP_${QRhR2gCk6@b8KI{YEoyX|!=ZxlapQM_ zyj#h_cgO02wXSs!6AE^mu;UrLZDzGyUPGS|AiAuy#sQomc5E&0thiZoz^?{Nw=ML7 zyH)_5yhe5Fo0mVia7-7}sX?ULT@Oyt?0-hk(4_ozs;#bO`r*FILbV$d*`NgnjgrK~ z>R4HCngbj!0iF2>hrAo$Fvj=Sf*==VQDYrSciNA=+PFr&^bI!_EIhPW_m>O3FZrn} zDko=Ox!YuD8&6o-o~aa>gSZWw40T2P$2AvBIi6+4SJaesud{(ZF|V&`Jh)Xbm*Nm_ z8(|B6s!g+}OXGgxvU{X|`LM6fUY7h6oyuOBOaVrmD+=Qq#VE> zFU_5s2QHs0@-xF5Q{2EqyRSeNmEoFk35bkm_^=G~$-kWlbxms{ch+-sD-Ab*r;pzr zY5~tAF-iV!ulL&q7NL5QNwMpLC}W;jH~Z*Kn4?*3&4Y@eYJWAWg-aUh5)|nec?XN& z8M%s63axV-hGfm|dT!1Pm)=%nRZQFtBi<*-PAZLhQEyb7EK2M2CyTf94%z#A1{5pN zGt{^BVD=ooR;|*iZrlb8X?}XO>75oOmI1tR;VqVF)IJ!Pd%i>Z5dtE^3U! z9Ihv-QXm_(>Fp}N?6=Jr9s@Ea4eLzf89X~LC7qrjJ(YnW!uLnYVEb9!+7-2;e5Lj} z_DW(RO*OP^e%}8#k_032Up?=>jHpWOv7uM*;Y3#ulEzRJAb@NmBcAqe8Uo|==3A^ zcv|P&>>0ML)S(3E{5w1y19?5ZNT)jQUWihd?Y-Vkb5edJKb_XW_9E}d1tqj_zwmjJ$6<;&cu zxq~BLn+Z29vjvS?Tb{b0f%_Y)!>aV#DV)uh@8ha=*;C~kQk;y>TcweHt8};~mf#`X z^4f8;Ju$G^ojDk&i59K6ARRC3$j{pCy3jf1r#{1Bk}~z*9)HV%F{nbk!VjMs%(b#A zi}i4IO`^)!YBv0nty?!1761a&c%}4VO_-4c7PFlw1 zu-a6T{Qk~Aa{FG*ZDkB!o+Rv=Da9m-PMv>vnTQJ4A6})++7BOpFJlcl;CCzkbzbpBJlI@najGt!aif1(dvt(fasCHRmH zWZlg_2C?9C&J=>#B?651dt&r+6|6A&tu>PoBGQ*1dG_nS3nfnVp@F(~balS^kY&~S z#)s6{co%3WpXrY1DDXaMP+*~W)A+66X1vTyE?H$28nl6g`+i;d`4WbMY^=xYYbDMU zxp7L_qxJmryxWdVaW`SvI(5*IasJkO*jRDZMIhKP>-KRqYWt6{tNE%}kBkVI)!JXa ziSO6__(hs>y~}|mJ>Cnpab~Kh9%> z_`Qs7_pD4*NJ9d|EbQq0JY7!C_MT1V-ES*kRui30_F5g)V&dko%paTrbbsC+KGR+u z7E>bk%hKt9W1`J*QKr6dwD|yTs+kHQuA0E{%@BBZHHx(E=ko$kFQer9v9i3B> z(FA+I%2H&Ek*oc3F%F=`ZO{|9r^h&bg9-Vz^ob?Dj&1FoP-3+B&QJ+S)(2rAr725l^fMhNmbvlQ|=7jq|(vJ@lb8J2Hh4d)}yAEuL z(Q?*E;jPt+2K~D0*tO=XwcgEog?02@Pu~wA2TQ$7r_;ye+o5axG~$YXylIoUlIxXj zVJmIjI0gWOT3Vm#V3x7fz)(rbh)Rj`q7UUK`aNEaar#HzL0i4Duh#^LP2PH#i5=z@ z?9ed73^tUCb!D;2jEwgFE&WC$LnDle9h@Z^yy=p2lmmv4_wu)&TWLE$~6XW#hr$TE}?_bpg$NP2K9No<& zAX|#sSWXJ`;9c33xMN*4w<0pL?b|=|xb!QmJk)m6_CkDdGHyo3683NmqwLR(-&=83 zyw%j4&^Z{z*YbS~q^o}{X{369(c$N;b0$}fPHo#^eS{%Q%g=`5Mx|$pDj0FBr`VG9 zG$R30&6eS%vRxvtRyp@y)+;`~CKT|dP85pjh&P;W3}5+fcI-$JKA6~THD70Lg}pQS zVSIDn5Se~Vv1@UJKhd$3x!v)eon|jLPkXR&@D^Oe5j}fXT|{B1GnMkWX~rH$7&rf7 z5eGdX5hW|)5Y$dHvlcbn-H&cH4xqKX&JFZS3t3mnSU`3mI!wOv<*l!+?i}Awf*GEj(1(Nmkai$2zSFPLA$G(0yNc!&3TIj9gd<6iBa!%yq zN+K0#2DX@Rw(3sT4Tx6F)MJ zMxmn=HmjNKEVLC5R?HI{73$t|v)$iqCgNZt4i3`|No?o`g0gC`u$!TcKvAvD zFY1@mk)PnJ6Vnxzlt~`oOnbp(Gz!VDJ#?iMzF3sP*{*z)spQ9Kx9zt%-%KPeQ zogaLzHB?O)RClvS0vW(@T*=j^BG<{-RILBU(7VZD7FDtQ`2*{d8RgM(qX^^j0USsp zH7%0XeJPz$BY@ydk?svI4Th#{(6Lg8T(*h>_hxt?OMnYA4r&!YA(IwqaE7~W33<=D z5KTsit4XadHBMnCCw4RBNC15Tp zJQPds5lZKYt>v_1T?9MLT9?iyx&6st)#=y^TjgX?UvV_q*i>tC>++F>q5~&h;$jIZ zYVJVU5`D_C;s*e;ULIpLda|aPL#l-+6=g~mruSW4`txOvYXqTq?kK8S!8K4*X=;y+ zYAZO01<_xcCHhK(51)<_E=hk2`nEZxaG>L2mbzPvA4RfYb)0e6;Cz51xdh^w=oD7& zi#ro?<)s(LtJ6r<2&ILQ{pTYIqkZHiS&&_6>`bIor5vz8wq~dWB;G70x2baH9-MCuikR0QGBD^W8wA=Bxc#bh&o)?XtU~ptfe#grV|+KAO$fJ121TD9bbzg8`V zC``whUkL?5{<57XXyr1^yh%J--47pA{O)Ed3jXG~c?*%90|A3z-t0!rvntIv_Eia| zQ5^_+!;Kn6FovQJh@jnq`}LlXvK8fhDl9B|1RcPENXX|7`rwZsme7!}EbXo0Vrc1s zOsKYUH4BMJj%I;L3Z1;SfEB~JGbDBv3P)3_&F40&8=1!fmtjRkH)WhVy+c^i5Q8kjO|B;tJmm=Djut}g>7ytUJJQCFfm zM!keh~kmzX!P+0QO!7$znqbzZ-I;*JR~Ew{oVV`1yF_Vk-s~SlP`9?vLubJF z3q_H{D;+EsmArUUf#H6zw)TMaNZ{%ravZ_Z-pZwdFCt|Jx|4t7|nQc+w2pPLBg zX3^BdA5#Tbi`T6bPr0p8%lh|_ zObu(5%g5j$t0nfw?ya-e@Acm_FiR%*m6a{Hm=`>%K)6n8!@YxCG=0h)mbvlI&o*fo zx@da$I&xCQYQUGL2qISR9xb4(Re;K2z+FUKXK(Eg2ppZ`1X@`=G;Da1UBM#~GW3=cxCr#N%y7!C4ojr{9Cc^@P zS=qad^u9|=l|SU_ZU9Koj5HZ<<7Wm5q-5-ugDJEq@YtgG~Op`lKCAk%2mm( z0@D4^x^zZ4ZM8mWDY}y)QQBmm!9J`S9@*h>jv+?xD?fQ&D%!L^l^l^pfypWM#$gn` zaF}uFNtxwVw$S;8KDFd~Fc9){7%Xih&Ie>UOhJ9(6VN8CnY+Rv{d|-4RI;`FI9a-Q59 zcvK{93Enl(!O#%ui6XaP@zK>3bY@D?JB_FOQJb%Br{*%FGp06=G)G*bIT%%hqI9D^WM^H z!_z0Vs6dM1uJM~S8S^bnxA*NpGlNzi53{y}S@-e$G}@Z>3&dPe>YH>y|35gDn~VGZ z#HrnQopEIC^t-iZa|kW+D9>Oxpi@szSZz};=Hbz{Z@_OLy!W?R#iHHP%X*Chyp~g` z(uGt}4h`yhKi*1dyMFJdn6ZFmF#|l?`QhkSfVaww{?F57TAsgp+MmNtLPl#=YQ3Ln zRzSO8T^2&X@6YIQyn+Ak@%3gJp+Hy95WN@T{lhh58opwu&_bF+udaUw4R|f1fgB9Z z-L3$&=PJw&UmSPne{Rz%XD(~>;?5wSL{1C|fu@EJcneE^ldI+_kZiNX6pOy;ahyDT zfd9{n34h75(IYexX`@gCIw|W63q)kTMOW~#R>j=S+3ojcP}PV%@UOgSC>pI+Ge?$F zY!yCS^coRd3Wvo$GFP(cKlu8)r<%!orTlKRzQp|=wB38*cc%@GWp*F{5Mj*d zk%L#~d`$6CA8HA(@kks{tOE(W9L*Q4MsnY7(F#;W87f@8dBw_%FbNv65Q;8G`v>0MZ6Z``xr3hJZ`O`ty{PVkU%Xhnm2H1(k~Fts(o#OznI-*|$H# ztPh^~8#`sh{t(qGIth~L`HeaO4hYadzxBEPa>1B}g@28Z1m;}smOiAmjbg9d)6B7& zw)J&_Wrn7TE_Tl?*)!W;u*V+JpJlWJf&`?RkwJ+?JQVMOgAl8<2Ggy(h7eT1+u;ip zXn{UkRFHW17?ev(B2(2?9{b$V;e(QQ+^K`Z7s3!GS!C!4a1knD^6WwY#&S>En@pn! z1+EgI`5tOmFw2y%gVP~QAh7=Uwv}i>JHb-54Q?0+eWFR#88w%^SS}XbaDGqk`e$jh zHR&Qhon+_Dk&(cPfbi|G^p{>c&g_2awZvSa1JfI1wt#&);uejq`5hRFzssRk!gqpw z4+sy0i*$T^E`s8qDuQkT6!7K(cIYbponJ&ontW!=sqVu-b&xY$8+Q4E6ImdWt8J1r z({ZSqrie#8KO$!dnkC$edG*onKKz4q2YHZXN)`_v1(cb>MSBzqK_usn4>Bo=lK88e z5-g;9a+0`N$o`#ZTMU{oOn+&OTWC?j(c}jNEg0k!p}%|&lkJcLSS{4G8#eRT8e!6^ zDROp`3#-UX?m@uavB`Icroa)E)4uq^AdeI2tZm`tR77^hwng1ph+I&?LiR(rA`ptO zgkweAQ=`I_*o3ad8bQNb?-j4mZ1uyj%^m~NrX-veK<<}Kyq=)8GqHIx$P0;d#&mur zIWXQtQ`?~gXf-eZ&CX0GpGVfZUCEWdf#c^M{8la$qP>G>a9O#HJgjbG`0)w~R!l1} zc|67Q{w_`)xI?2;tf3O3D3}}C7TfzC9f!=N(0Z1Ke?)MS=FkmLDEQH!741Q5J!r=z z!CP6B1CM*T;tG9j)wQh(KqV!FA65st3mJoQ`?nq;w5rhn-C)+`b9mxNE3OFrpw%Xj zDHJY}Wf+tx$Gjm<>T0fYPhQK&ufCP?lASA{On0 zW4yn;TwC#)5;J8+D&Vz31f3AGLtn}brgQVds;{Vu0`~3r ztTe40G!Jk9;}D=6ZU$7i{Xy=YE|XzOEW^-!dfg7vv!znt%ErIS6SW+qe~8&ms+ zYif{}LekcfB?xaOI#xS3ILM}Dr65`NFy%v1|?6SYMuSqQ}j&}qk> z^Q7r;M9V=jy{1nf z8YkJ8Pz!or!TcR-NwAuDC#HO7QxZ(*dUmp6kK#IeYmJxrJLf_vRok$c$j}>TrX_|t zxpAYzVzRB#EL<1#`GCzds@5`{*`1Cj+QHoJx?0&LkXp$i zn!X(X!4P#Skgw)iEnE1gT+_2+_V(|pZuY^2Fp0YDpJ`>Tax~;@E9w+(wmEXPyBb#8 zJ-=zianuQ{aMJ0naT+jf6KKW{;i1YNTUV&^U6<3>v}sJ+?A>gmLpW_`4RGVBgKM#D zN+nSPh5|~Uep`9Ms6vFZsPK%M)gFM&8kU7usP6Sfjnv{#=sPQ%$Fnz8 z8G*^_Tr!LIU4iIWX@qLYD*s}m#h==R=C_}6(Ry{v5pbKRBMsnra6SLU#zuHCK?g>j zO8dYi+~Y0=ShY~bsxbwAInVbhPf1WFiH9fTyTlZhWTC||-+Jz%ybaP_oyTS+u;_b$ z;pqU;ZM(@1to>kRznH(wO~kYChH)M1kzwU6x#ccTxUjHIHO#y8mM@h^aQvsXtR{Z_ zD?>2z(0L=)pBOqSpW`QAG#Fm$rXxpPVfpuMo%)E=lmnDlRFOs2(918M+ymf4PMgIT zA(_9&dBsj4DchcQ%Ppc2pjz;O#yVPGDED^hidwIc#&fzl;yn zN+HB3TJ>Z8-M2Z@n}r~ILw1$O%Sgm;2b%1ovf?&q5Z&i=fy-=wZpokeLS_OpdD&5EU)}keDdIWQaa{ zh9RP=iar;wkgo@^p4he9zj^bOyFyme`dpx)`YWF%K`?? zA&7ZSyhaiY>dGgl;vmPJSF4dxO#J@ z@&(a#Fqf%y(o)lK78c+DB?93S3Mh)3J$D^5`N8v9@l1==9vgZt7;oM*L!i-ypw1&V z6hG02PZYDe66N#wB7yq{E3GN29YF8Mq&v! z8}J-dyfm3Bs7dts>55KcNY4wHA}ozJrqtZ>xyU|c)KWi;ZNWQ$^ki@HyoG}3rIxV! z!V|W)8_U>2D@!}!EI5p~sbELkcr9F$4lFZ{`S-}R`r?7aJz$Bfje(0cNJdIvSL zl)>j#kd74Bc^3R0@6t>T%9AFi&ElIYu*2Mj-?X>VLu7I}Dy*vdr@{&J@@iqvTxLln zl`B)HWG>7tsVeS(`pTSL)9VS_Y6j>-K8rBNr-*vjmr9s&6Kd+@&u0np-M|znW>qeUC%DXTa`9?8g-3qaVaE59sF}R3ebQ!*qNgbUK_${IJ*bw+zp1%~J}WwV zM_a4?jgoQ~Z&_C}|BEM+@~R7UvqUYw^uZmoQr+?@)p(Vi2Ers2-%i=K0AF=bW64=h z^x0P6jgADgSxn zaKj<)Gm!~EOx8J_h1FnoyC`^}AYt^>33}5t0+_cI`lDmp?UjJWl&0E1wpjK1vINnp zeM%R9A<#Z62?0y?rOskrRQsX2|d^LbH&hl^Kkx?ZfzQn|z()bXMZD2B#KSsUoph;;W9oJJy(qj2a})#JYdP zHC?`?r@AtyyOJD@#&}ANt#e#YDlV4R2B86Q^yFUrsLo zhD}{iKb7tqUNGFehAZqeJapx^B8B8|ZyQ5LiJhX(tj-Rz@!rHnb$1nSFRNatll~;N zoM^T9&PmeG!7n)C{LEO(&y3$-AUMCkS)?@1=4rrJz7}Fxb;{Obg3Y5%Np{)HvcdKofU~E}#kY1nq#Bv_f>x4Q4T))~1{M zRj6eJd1?OGqP(8P|J#P%bzc6<{PxCB6*CecGb>@na98dkJVfH8v~qhy{R%prec_j; z)68UkS0Jpd;qTILm2Vw>6oE4?q&F5Gt1M)2q(2*p zUe@RTNp`#kha&8^0bY;>=_pl4F^ih~ zJ1PC~`aP3~;|v%(PE0;-6>v0Xw3vC$;XUE&tsdy7Sj!KhrcZJk31Qi8_|2 zv!4ms(yQ+0YAHic1T?c`vnnrB_2XSNO|aCdukf7kse+**ruZrHGiIEqvm!2gGEM1} zlKUQkdV^;bR0J6W2|JMK0;{wIG0uq)Y*pGF>aE$*-$EnA3H9qDqym3H+h-sj*%G8D zSb`ZF6$65!_qa(#h<5v3YsTB#0x&?Nu_z<3YP&G_iQxu72lqYAz49fw%*n-}z~*Sg zia;81W>D@5*hN8)t3e9{(W*4SAmCmR5Q0}l&jKZwo-_}FT!otO$B{~bLDH?bQoD$e z#LLDghGwne4F`wCmFMPlF7|yU{S=5iXRP^zo&b19$OK3bh$&UVczaGnq3u8pFeVwN z5$Hk_u*x7DZ{ntch-SzxwfWVqX9Wz#uqJl|lJ}WV#M`*w7DOXEC`9zbs4GZ&Km^{Q zO1XGpxR!#LdzZmi-*+NE)W7XK z1%T4Rlb}p&_U|`$q}{ll+j`Z3D;Kl{k`p^Tf!M7Is=I=utgXG5u*}5F-;qiqQ|{6e zjvh@Mj}i8GFf}~32yuZbWp=Q%N`)PXG_<8`QRH5g$HdI66T32Q>%nY5X{zkOHIYE) zPms>GC#oPER4IPDsg=5F@^In*K$D2mN%xQo zn{_h9Pf#s2@+A9Kh`!CV^lz1RTSxgm4+E7zevXfKP!Xdz=h=k^+D;%Vv%*5u!Kx{Y zZDgzP0-H&Ewj5lVd|CIWvc5<^2aM3Gx>>JKU3^;yj}q~Chc+!Xp8V!+AFo^SbmcJ| z%RpiJpqs(YR=&VkR}Y#cYLPQ^)^+m+P~@9Z8N3T3V^=H{+$03_sjTA(Ji z>a#5y`72VQ2R$h8`@Im)a$ip z`Wf$AY*Mr>o5=s8l(48;0oXctZ}0uKpI>!hS^GlKj|By`^t!ywsn>3v+XwH(6M7X5 z7=J-Aa27#+i_XfkT%RjF{0z8lWpqnu7mUnCIX79Z<5o}Dc;z1_Gv~*Bal~9M;$rX4 z0_dj+lHSgDYca$(^-9G5R1cQrG`=MFV7R;_9FP7NW9Jm439xPHuIjRF+qThV+qP}| zW!tuGblJ9T+pfBOCuZhhW+LW1Wkx<`Mr7<*dwpvMzT;%wT^|}~9|Q0sDwzN}(dUlJ za_MmqW%sd1O&K!pM@?@HQgXhu^k74BOJ9^D)z3r^{+weoefk0U(q(U>g>z*@qLK@= zAldV3775b$#V1|5kEU}QA~$GVdXEO%Qr)N6(9?zI(G)2^$})805{2lC9+^E8dIzEm z4sguxPvs0m%qgWE zhc;dC3{AG91OOcMwDb3|ktS=y09uFH46&9#$N}EMf|;`|F@ytNmt*>2jn1>Z>ZEPy z48i8_BXxSDWJ1rBVVKn%qDqk?rteL3N!a*ASVibQfQ3I2rRku<6 zo~ns6=CD*rQ*EZghTUIIM~Jo*g|`e%Qa$B(c>+l|$N=H*kDl+TIt~FF)9i_)7Hbx4 zxEZap#jI(4g*i|1?BiP~H|{f(tn$4f)W1f?Wak-5V`O@VBhH2tTb~&*w8go43-$Fd zkyc!q#}8KaXp%HFXKl*UN=n}bickE>PZr;MQx3k0+is+yS1ZVcEpn1kqQiq_=;892 zDTA&Q2mq5_={#n~Uy8GjjhNZ>mV-!ZcF-7L3tm&v?jat2sN!?@z)@paM0Y%ienl-@ zPQH<^+)H|(1+E`J4#~D~I0ptrDcomCLY@Mc4Uw|5P3yw8^6C2q=(=k4Z4q;%Xljg} z1ava$BgGDK{lzMXsiq2Pm>)#}kpW_WW_v1RG=KyJ%Tvld7Ny3Oo}JFh)2m9(%+=p2 zGPT|d4zVkd;02Zus*um8`;yTcFg>t0<|OF=DH=0*^+Nq3X|lSWlhKN%Nspc`&o<23 z{?*qn{Z7f1<{aC3On+-5w}%B_lUVzIw^uxYGE(iVtUJ5o;kxI8dQfdeZ+?o8CZ`d4 z1pwQ=TDZOT9_;Yhf2TfXf2ddqkNTb{+;ze|<(Hw5hg=kjz%m?{t_m2r zhQ#ZD#FL>w-8c(kS6>teH6&c!a+b$QcM*K%XYm+=fikf*{+}r$|8{nUmQaiwYy=Dh z|Gnek`Cmm93lqyf0t@ipb=Chbs6>0hmZlwc>x23oylPI1w3lJlwiP^0C!qt|IGJG0 z7;TKK2R{Pki7NT;dV3_a8}ACV_2QNsFT9t64yj zY~PI>rBBg^H~km$+q&gzYoFa~rJeKDZn|U-|L%+E0brr$k*|Beh(9dmr^w5qO6~{d zYw31#LK4|RJ%fHuZe?x4)_t*_?S4N zH4ia`4U>li46%aD%|7?-qz{lVAN@Bm^gS~@3G^}vkk1mMRUa-r4Q;0eM#b76!lZg4 zQ6C2fWPm_xnMU04f}~T2L?xe}AZV0Fd5y)81*ruc8o2R&Q42HCSH4OzhZb4@&MI+=!~JHV-*k{?M5XT0-Sh@<=9Ir!HF!*jJp zzO>tXV-r+&BwL>Ql|;@Ta_?EzD5BxxN@az}va6UzY&yuJliEQYk>+wUl6?z4s%cBE)?c6~2VJG(VGjh zeV*47`X32}VEXS*E5I7vR66P3V(5JegV!X^BFekMTTw#VG*3?-KtI$NQTU4S>>ok$9 znndTe1&}DNgxqF0;Z?DN=o3CwJ3#+?152(jMkenDELRJ*+$yFIBdR9%NH4X`9*ji% zB?{JVN4TBG9Yq3Ma(ds-<2>!AaihU6)#i{Ax4wssGA~k`d#&e^tC&`aH7#x+79zJkP(W?;pm-)h&4BJ#xvef_ zQqg;Z4E-I*3#xnFFgM1G4VX3)Z6MpjYY6)d)ZO8DQ2PUCcp&y}m$poja#>p=gb9*e z7n1mpfM&$&sL$aXMr}`B^=tyEGSr4UgPltFTtI*mgyr z1sYmIu0+cMevStzQ3YdDu5KM>VesKgk%l6Q0w1w`h+PhL{>$|KlI~yhKAuTwt6fQ9mgxSgXG6A6&w2C%PN#a%WWk+CX-<8?Uu;{-rw3UhfF_%%^gi7O2Sc%PO z^Vimw#hy-ivE{(#mmDMAFn^~@c#1&jqLimo;Mgc>^urYba+?o51Hk1G2vxEqF7g<9 zD_|(|SXK6})hPva4Ac~G1;ICOW#w;5M6O}Dyw#2}$y2V7T><1#F6n2Ih2{@mm?P>) zzsO5>2N_RaERVgUyt`U&0Mz~b2bt1TE4~Y?%|_*UbogMc7`-pA2G-Rw{1kfvnx#t| z9P%o&#_@_viB?$>v>THoo0(fVsK4KydE|CWX=Qn%=&4x(cVYtUt$SedXDH zHz0tv2uk}Pn*y#(a7d=-VL+z2(tpW{rjK1VH`eFy3RS@pfAraRu@_b$fiVxJapGJB zJtzOLNYb{dy1e~9Q_;FBdiO9(6GdJ3Or5;j&}OIdolqbIoytAk+9>E3rnIsOdh}H{ z+&GY+;$Rz5^k5RfipBd8+=8>7Dl-VEXtusCjxsoWM2J310l@q*vn3G?)D58jLQ(Lad;eK2=Ri_Fs5-GMGW|X8$u5#mk-ID| zvlvHmW&jYNicj#%vWwvM0cJnV1$xBgvcr^soeR7K_6+{=L^pPPlVRR>(IT((LpqGHrp5Po z1V>W~t8Xt=56iLQ8g?#NUgD6=VOTe$Az`k+V ztpk=Dc^gue*KD4KkT(uBj(mxKF6ET9yeVC{>8&7*%jB?nt(V`zJ%pWi(BiarOqUK> zs9Hd^kfB%CQ|yUl8Q-7V0tyI6>fruZcFu~SqEs(9R58%GsS1rHq8%b<+Dh>b$Y=h^ zxFEvxLhEbJ5J*^;GNYak_fZ|Pdl!8g&jDn`R`=~Ah8e6;wq;!KwAnKBNBy413`TMD zt_aua3iE!rR_iC^Q>Oh#Pp>~B;GM~y2Pwd)Hap528F)@Lk&c?ehxLXtwX830RES8^ ziHq?6?sY+9i5zv)s_`t|R@+~-4?|RiE$~Lun~m}Us=2pF*cnWmdWO$iMzi`o!~($1 z84bD;2qEES{$+-0$Y-k@!(a6BJ70qDO*oRrtHGq0tcOE5EhPMLmahYe+OW250Q2$5U2@E+0Sh1meu zIV}W)*^-WGkEu2d22D+ZDS9b}33ob=uuus*`67`En}P9Tna>rXA5R7w*CoKGx+K^H z!e;ZpL*th_-gBW_%45;SrXnqqReKA_dLjqO3h-9z%j&8Qn>9_QR|nmY2QBd6n1K&} zy<}2_Fr42B!$2S~=>=&oH95RvZSeg zCRQO_lXyX}PTf>9FH-odtOh6LKaAh^a)jvz62H65F?KB#+#I1n`ibVI+~yixRj;P^ zJmhWOh@pqDSRLL}LBC$IQOEXI%)@meRvi6IkO|o7_7C>Rp5lxa zf)1pxQE(fy#u6u#9&#U6mZ9Zj2q?37s!3Le1i&^mI(qj|2Ofs(YRqor)|?ug3E8(h za6#BE?eg3!#=vV%T1Ci#^QLKXoj!wjG`xaZ7t2gC@p9VC7Q}rDK;m0*!(_OxFXH zjSuQ$rTBST1OYXLj@F78OFo=|^*xnLtv-(Y#;amxB;KZRQzo+upPcB}>Kg<#J7f;! z?O9+#6w<{Wqq94$ge$A!T<5%8Kmr8ET)2$gU-_FH7EcA^=;#v4h$k-DX&FoUVv|VY*zn z;S%`%m@F_qS0k|)Q8_tgy4JCfR>DB;(H}PQs((n84<}oQvRGOX{{(V47nIR~c)O&v zu5?55iv26o6Md@^(<-6L2I~4H+nwXo=y2+s4#)}g zhg3yq3*cy#K1p-wRGK_DTOVi!4wT1QZ~Pw8_~hormL8qfhR2Oc8JoC@`M|Kppeb$u zqIgsM%vwT!W1cb>5}UkKj@0L3Nu01xZ-Y#*!7pr&xFQ0VCpXUN$qkh=rT1Eg-?4-z z?sXU}sK(2;57M5@PofYaRDkJ^ABk&G7Q#R$4%xC$ZY%+qmJC)cHd~SCrvki)rWh8K92)SWw(_q z`!$_yx3s6?Lf;wOOx@Y^)A{P>dwWt*z$AvcLwrw&AhH8L@pxVc?OVvza^=hSbSDcVbava7D7v*O_$3+Md*j-SLv{^CQRKv5jdTC-BNg$t z0DQ+$tKP;HLDo&4KuroFj+IC&_u}`>jcCJrcT3*;nilN=4*&;Nz;bryv%3-|u!Stoj3b?j#hHoH*wC4k76VOFUW zK7HUaNd6JJtLmW5T?anK1^kH#H&rUCgrz;QOKc|QP#4#J99igr)J^Y(6c~Qe3lP~a zIJ{iD(keL5rd^1z5>mbJQer@GI*xQwd`2V^0$GIV%dw?{1+#Me;}B*Ws|l{-AWPAs zrK4rmxF>k&I)$gZL7d(=%Z|5_=2P4Fp!xaoeQ*Rw6%0T8f5;%5?Ej|>0w7>v;b8cW znoC_cW46Q{cYJ#J_!xYu4&X3AEi~Zntt3ufqm+V+1 z&&f%hp9e(rfY;|*JAvGLVD!Qu_HRR42#d#~+8)5i75zQnp5621LIetC?>?91{w2~; z(@*K~g`Xbq{XAl4$KU;RZ?Ly7Qm6Vh5!<837HOFetnK^h`*tNFX;r(!$RU4sL$Jgx z{)Co`DIvE@*39y#EQNZlxb?ed?(y(8G`DwE_K1+MNqgbOpzNXUhr@26({ z;%*RZ1c6ZEvpN-EWd*`xP`Cf0BT00QzkfwMJ+FZGOfHZ8-F4`7a@Gy^6gRplqMn6C z(c@dRwy5N1QwtOPO=+iiaDxZk#p7O*c~PYl6=kN3JMAJOhXkD{u1%eG;UptR(sC~# zol@}8IH$+#G^widSdp*{Gys6e8B;PylKS0~G_7R#9I(i{Il>eAkg!#$qV`zXc9A zMeLlF_grF69t24QX>9j`42yZKP+ml6V}<1;72X6w8Km0a7izXWM{Ph8ap%^A^!zhw z!a5X#?KS`(Qq_6H3yYd&l6mhc`+MwwHycrLV=9LWGjD*m3sKbe+54-_7ra3W(L`=z z2d-6&1-MAV4!?Sn5W-xZBM@7$2MJ@ONE96S(^Bh6Fjt|7prTi4Q7wT3Z|dkz_={*b zwgNCbVZ?YIFdd~Ju(@-K^J@xd!X>}OkJE1aQ$3*1I_UR&Rq}PlZaB5UvX0E(JJ78u zNt4dvW}T(Y=Hf?|l*LVV(yWbowVW~=HfXfghY9d^;%Xc-)M{gyvH8lVE%6&H=9Fzn z6nB1*;9^%WQVAP0>_A!7`tmAI0sT@CL(qMHD+rYAI5CD89^q9&770Ou_H?xE_uvx< z{whHKF+;n3i_)8vvHv#@v?xKYNgv1}9&`;?5IB`^uDHE-|JIbQ^S8B^9~)w5WWHR- z)}JR&iTF$luPCe2wvfkvmW8H}PKr#TdD-Uhn6vywOJ@xb#Ii`B1VQlV4lSW6;aG~~ zRy_j2=f1!6yLEY_)%h_itEHs=dp7PN_yU0WP}lYlr1|&UDR@m(;$Sde`(4I+BP`Ee z_*)?(bppW_iC6s@#-Q-GG{TO-KN98QEGpy}NGrX0a(hTCvx3=$l#1p7_E<50VwqV; zIh2DAU}P+!%}rLM+y40#z;=QmL`nX(?F3_Bm}3CZw}+Es1W}E6cAJQ4SnSt!K8Vn+Kg#kbm8hU? z39xX*Nx~7De47;Uk|3-pKdYX2y5Fc)8EG%cIuC3viNdd5&#b7aAIDyHG5+xUf@54* zW|BPzKeF7D=hUXFS7T$-%yUG)Dj-~&m@iyQo}L+PX{g7OT;$%hWJTwcs_v?+qf3QW zn`u5%ucT6W>6Y!e20JA^s6x+au&9=Z0+1TPgbfgNxFFmc{PA;eJR*(9#+VN?2x4I* zDboC|=4nT-09jT2Qc0`)=Ie~IgT0Ta57n1ETTS7-!-N(&=lxYX*4RXs?7Fb@fm%CT zi~E*p?=SSFrJL%7*UFwWOs+C-`Ls?rbG8Dqnu3FP(i-FfvdpBYGA2Zfv{sQt)8 zySYPur?2Ju;uE>s${0b=8>;evM^eX@F}i47CV-|FOJq}i|LFJ+F(=VA*WdO z*5HN@&IqdI>$gHfKKH7p6{48uGc@Th{V_hP;Jf^%b1aFE zF!54ASV&R-`OF~6@}q+BJDUZ6TG~;(=}01}soYmz!nRaee)M~-GbacF>p(jlRoQ(` zew&N#^L7uWdFE1*o`ZbpxqgYeu(;c~W_&1;{2GdxUM0}@;|AEVDt=kfwNMIh>Y4Uz z^%)pp^S;C9r4W;k3eyIPV{f;levBM>sr@2gBt}f9X`N=LwcIVn-LD8kVTPF)x_VM9 z2W~)Jz!RgNhhG$(pE!xM3sG~g(;N0N3DECb@n`DTv!jh>%IpejU>_-P2od6M&~S;< zXiN^aZuXY8Pz3V zXg#X~O~B463Yb2#UN~y&Ca~pj+z5Z&LW@#&Oq=9i||Hz7`TWM z5;s?hM_Dli<`KBVdyo8-9Ms>kkxmK_K#58Z(#^F_92dlz{-kjXf5IzpZkq}9Br7f}n$F4^Nf$~V zc7L)^)RsF^G$J2aHnGTZNeVB3RoFt3GuXi*+%>RE-DKc>HGeJ3kb86E1nX$bXHqJH zc2xGMIki=WP8X_j?hNECmxlxmoLedp=Pi%7AwKYa_aqs;bg-Kk??EFf^{*6 zu@mOHtaC^1WFbiRbUt&#TzPoveKij?YGkvqq9ntbc6yIsgQqwq)?X8lD0?J*7*(ox zfH>=Z$&3rs9L!ULqU^2O@BU|TTv$xw5ic9rFMC@}$ps`wDZp^o!WLw5yy1=accPys zy_u?tSMGGRFRuHoBF3h`Y)Ad!xHCSk)A|q@b*YxYv-Cv(1GZxO9m0jclJEBUT~)rS z@yYH&Q1DuM)Ioo@(PTcLBQ6X#Wn!3AEkL?d2ENg!E_dwN0D_CDE9SQmgf2!Qq~rLF zTO5yLPJ^)OcD;B(Hg>B^V;4*5xXC7-sQ6N> zCkmdqI(M}>`AizIR=g9X(7C$U1xpmMhrvgi&2w{A{cQhb3O5l@joq)6OYu~E04_5u zR~a1t@pNIdf~wQKa4s|#AP)tn-JRd7Pc+x>G1P@-&>P4@mC58|9!hBvuTSl!xD z`dRwLIyq4!1$={-n2A_lDn8yZa7PxYm;yRZu-HpaH@#~j2@&bQ65s4BwR$Eb4p|@t@119R=3ciQI@7 z_3?8QkFK+}@3Q=6mj-HvGDb3%on**^cpkitdbAo z@}&yR0{fcj}7rC`*6X!Nk9=}0(V z5RzI|6-=m&;7U3jVcqF3;y@m%7%KpynwOjE zG3sd%1ZR-J3aIObt}jJ49ocgzvzarT3khs$#@yN8q06)gQQpbK=8lVjrkHV;}b^|#@RWY}VB=?5dCICoYG=B2s~pD2Er ziS@G5BhI&sbzp!ke$0-Fx*qUjx)u~h6Zha5qd!J){Rc4lNveY~(^cwCnA>0Ox$Yi8 zj}EXuhre&vIu?xc5Z)nIPFjckdfy50Xc))Il0Q8j`x#+!qM;)ri$(CRnWV8ne|zeo z3Va#B<4ibUWfaq$yVhJ6lPH;`Vft-9)RdRg&sJxEsD5$SxWal1V ztw-&?1xVg~%b}l71*5Hz1|DfO2k7Vsw9X#SVwanrm+)F?#;F11Lt}ang(QWBrP{mj zXMoTFgM^c9SL(lm_89zO1`OO}4Z$!%?FMXM;xb=ik+MlrZ$YjlEuh5iFkajphZZ)( z+L)cIxZ2wrW)ApHQ!|U)Nj1tz=Gr=|k$u4J60ywjfLsze%_#v!77#H3n!%vL4AD}r-UR(W`(wHzj9DZ-Qu%Z-a-%9K%^GHOvZu%K}T{}gG zg06vOZiCU=b~XcY;WkjZLO+r}D}C=?n&IqN6@|>krY2XgvLR%FX(CRB@PFwL1T2iK?EjGrQLQZzi_;O`eWA9f&@X^O98jsCB;Z!*`DCwofh^q` z!az{0oY3?Ac$}!czgP2p{)j|5{W|*DAKjrdPW~nJdGpi$dA9%ncz)fTZFKlYB5z|j zrs4xSl0;AwW~r(wKs?$$U$5>bR3r=SdcI%3$kW5a8hK|#3*XnaAr3qm5`@~hFeN0d z?DQng>lP=jsDl6i3QAIixAl2gUO@j#X2J>w(Ejhv2ZXvi#2GM3*87ue^j-c06QCRn z@z3X)uLzb~Ns54UHqQ@emVi`Y7RQo{u}$!b>tk$_3}_nDv9gp#Va zV6342^pbGlv)O2+bDLeoZ!{JDVR<6%s4G*rP{=~8hkiiI8T}{r&iZxqkhD4iB0UiO zj+{rnJXAFPez4F~h8sfMvqK@%IF~_mH%3$c_%P!RW8{4N+?cG{JbPS^!ppY@2TgbJ zn!kwu&)4c;0E_P0XaET+TH?4htBa3gD@A8nvHVF_u$?W&u-3muQySqFnK>QT2@>EL$E&*Tvx(2eTnP1sdQ)LlvzzPmRr?lfJVoF!fI z^g>A%E(-n610{KVE+#mK>xi%VuD^}n12E~dR|CMtn-r!-!2r$2IA^>i8`J0J@&m6t zl1L_sz7UMEcyB^1FnnmswObgLY)J{_I23Uy{-Y{P;?Ytyv263D1YwQ3T3N2(mkOqG z6^*U@h9{@6kUrMuM%a=$Wj&}Fico;v{`WutFQcq_%&w-%dA398k*C5*;@&=f}} z>qLzEvI_ha$Wq`0SqIo`qGxeoD3{+<8N{I3m*ohhD@a)tU6h+%SJbhVpieb1*QYlA zhQG2fb^W=3G91gf{My1j;rm8$amJibTt1r{)xPk*9 z3V!l5HFvhYfrPh$h#3Ac1uE>y1}450av(_`dg%YfDHxQTY#-*NQg{|dI@h*cxG{YF z++=V+7KzO*nDiQap5?=u`isE$IfN#JB8Gyg(Y0?_&bOoHk?9T6>ALCyu^j)Wmorh+ zwIgQ@TqrYphrlM-897!hXRU49jw}Em^Ni{$vpX4|Y|Uw<&mdoaQ%$(mRn4y4I34TA zRvyluPbbSp>1~HL#jR0Mhl)Iwt=Au{RZt~m_tgqYKG>WO+;@_fX24!+RuL_ItSev? zoYt47U^6G{jl%LLH^`0&W*fLrUASsH*lvhOky%Fyw{QO(xLFgOKXdjFMREaP4zgq~ z&xc(Y(V!ap2RuDL!ymwPoA47}a+>21_H6;D^2$q1em@3zLV(25h;tuykk~RTa3Vzk zJInTq*83`kX}2v)FJF%<;nig~n5y&kj6R5P%fc?&;FN1+pss40O zSy(Okg4dHzkwbjKgcN5)j;#rh;O7kNlH5Do$>sJ)2oD*tS81}8A}YRm#%~@{t8c0q z0~Xh-Xk0g>z&k@k<4${M@P?tUM?JPt0Uak_cDyFS+xWZM((<&aE=Us6iQr$a6W-G? zB-?2t!Ay`sI22VU;zi_D!Lr#>rD&y6sVPP$&4qJJ7SrH?y!n@5&io!=pv2=_h#qx9 zdd+MGd2HxL7-QAP*Nc2A%eV)FsaRI32xWLqgb{QUM}`~lV|z65B0umq_X2~fkIp>9 zN4a5YJEBL~H3Rn(r@Q-pC%gTpKlfM}9qPg`x)m!^a%@iRR%#`+d%N(O>EAS;ck+@L zZmBRS|2TY+ZDViijm=EJ{fY>RNn!jX?iGi?UmcWUKkqN^&#=rJlTc+kbN_C)bZjtE z!(5>BSPTYcYt1(hh!byP3yKJp;ffObdg2w7E`M&><^k{-pOx(#z&A}j*ZH}3!=$w z-#*ZYrqFFp9qn|H*ib*k+vv4KuJ>5CrRnW@jo7pmK%+OL238aHsj5?D62xNj#=+Q+ z*%>*PZ5QZ*0CXkgE3{mAI+u*qN>3xfcu%vV`cGh~h$iqi44PO<@db*cd-6Rw8jjbd zs7t zPl)7jb-=xYD)R+OXgCVeG@pP+Qz(PQ$kY+5bD-Bk79ggKhL2peKYE~|o~bnQ(p>rI z4HSN#Snyan;!ehPR4r$yq-mumNm>~kLKO*~Zdaz3cp?EHsp}BP_UlpZ|Lbu?dd-g_ z9!bj|#if;+hmNj%B9)y_qRgGtL^Z@$K@*R%%x8!nj|R5K_~XkpXe;oN` zs)2;|$?`!yKtqX8eG9MC#i1G}g~qrU46HJee8?=0VP1|kD>jJ49Z8H45m)CD2Vsf5 zneWzVo!JcNofoFagWHNBH~;eo1IRraU2er>YfFk(akH?)>&h~u{Tw*9S;OIZCNK0U z`R=1dw&E8@pi1E;+TTt`8N?hFjR%PWxT9@Mrh9^PTuv zb-GOhXRqPVu zxW5e`2zp?0#+=i#ZmX;Krswmav0TEet46E!+$nd-g<7gmrX3%NygemN_AFtmep(k; z60=&!XpuKoO4S|fWvrOp7|v>>DqR7NKSrerHLQuZ#5z-b>Rk6z6=zGcXbwf4j#xbh z9i9iuX$1;dzwt-?k!(jR*4O%MAAmu7vbzJQ|FjfPVzH^KK&5K_9RXFko%@Mq&ZSRd z!nfFF52`GEW>dwmQuU&q1}C@`CF6pSI}@1JpM3+xrH5bqtDb($Ab^V8xABXB4Kvy{ z0dIF}6}F)bH_8Rb2e*d?w<=TGa**W%gnW@y89+^x%P}4|m;1LFk*ayzf%CGVJ`@H3 zRjWRRLM+!)iQ{BDX;GG8f=E5WpZZPUU$;#&Wl%UfgcFi37JR&haK3@|W&UsWQ#JZR z?vk*)P)CaJ{?w`Bn?r?gU;X?6Tzti;Uao9$_(ee6LUzZ6R}-|lRH93Jr+u@62QZV3 z^_Z_Gf$~NE%in@)D~>4@I#0BT{l8Lx9dt9I^O?pj5r-yv(W?GhkUeA6(bl zCBW+pi&JkNwQSjTIF&Yxq?AgpdwJWW*C7@U%ybked8I*D6d&8;2-$uY`x-JaF}pm&7eH3Z`(O&Kd!XnhnDTu>UqhSi%9mGcQ{ zbtc*wcj{5m1>GXz*U;MdWOjhJmj1@Y=1pkEWDxmi*q25&jN$j;XUfv0?5DGu72?GO zqZrhbWSt$4vsemR7Zj*BC3G)1*rbP0d5_YgXw?e0oADKkweAwtwABXNtW*C{P zP}c{7q#_S?K8zq<)PKjAe2*s&fgyOJP`>4QCvK%$p{g)x9)&Y*3X*;WPeAPLP50gc z{8lnevKi|G4Qx2DzX6lwSb=9t9Np?1+}kB)_zO#$A3uybCe{VK_~})*_ZliLRS>Gt ziPJ8j%{Dm*Pm2`G3$H*Y=i_TZcPusbHO#+KzHT^v&#()kL?m{=XF>00`q}bn)I&OA zSQB~kF!)Za%2&c?&s4Z;uuIRqPZYZKG;N66{@kZ73`F5TXaGP}Z&KYqK&W1h*EWh- z?yJ3eh-~GtW#@nJOb|SJ9)$#LOoZCK00C!du~9eWPg7vO2eoG*74E%Eh4LtpXmoQW zVu70dz?RgSlkp;260ZH`E|zY_hB(d1y>B0@wx)0BrZKC6KK8<^rl#J`&q;T(f>h~t zG|!W4gdm~Iq5wB4HCN_7aFH_JxZawNv&9{A+5~&JQ;okNyb`M3q7ZbYQqS#29dV^x zcbrBcd7*PkEn{fgkONOfiT4B=sLJ>LW~ba|+6Ys-58bhJ&9&H&E@wP#)xISIeJM3; z{!x=nfP|lDZ56S3*|(wH>{TDH1j`m>4?MP$mM|ODfd?cVVHOituPz6Q-dI=VLwZAhk*b0wE)ZGwT-ZL( zd||3|>MLiiWJ^v(L=6$|shmSv#JWmqoV;17c}Je_cd0&LBTXlcyVx8E;psWv zn(A!jRqi7qi2^iNg?Ma;DW^%tH&>|cD=?FSoE?Xq1mzU(;J|8c#6tXqLt zp#tP5DBTFa)j|fnw5}D29*Y&;1-C5Hs=hgTYr)hOe)(bf`W5Fmoa0zJdMcN@4yM@5 z$O%m|-SXlXKP~UBergZSIvyswGX497{Mt&D%XK?aa}G6ARH{o@T9jqcAD`H<8&29@ znvZb`x8~6Z(HAMYAyehr?`}wYd{7|2j<1)TYhC!O>%FxtF)JSh`K)sZcihFeL-0swnPb zi--SocL1?K1Q3LN$TKuEldPVyciZ||*#dgfH}HGD4zO?aoB}fkNCAJ{AMnr)PM`Vz zxg;L+Ca-F}Z{*k;SCediQpLV~2Lzx&4sU+EK5FfL?yjCzT6cUs+lELzV(*?W>{|c1 z^%?rER&HAP`7r|@KetMLjqdm`z5a&j_Ut}}(ev*hJb0zTl(qxgN!TXrzDI`XqmK3S z9+_9d4d#iMSHkmmD+SEFK7OX^0W1}ff`-VAV=e;-*tOo+2n+J#{*rWU95WC|IKO0{oe=jzjn=JDH=Sj|^{DH$=<0j0ycY zo797y$xI2|gzEab7$ak!y?r&Ko|F(1WTgA)80Rn{dqF8}y8w~o+3x6d!#G95sp7YG zKVLUq&*5lt&%YDhShTeXN@mXU)LsRMit7FfG45x zz0-^F_KcWe_I3V%UvOc;5`i)kBEHVV&=dNnlJm%5G=tP^CWOCCr=xKQ=mr8_pz2ph z6K@gtilhvPAtXJm;T*E3*zkAOgk;` zi?EJELjb4x%FIBMlM6&blzNy9!eEnP7})V?@SA-1;6BED&?j=pp<Cxj)Yf#pz*Dq=9biVn_zvs4tUzpvP1% z1incgV=At}vGU#AFWTB~0{#hWidbXlR5Lq>^Gf+s;lx$~#?)#ea4MPJ@+MxCJ9DR_ zgxoaCAt-Iq4U~tYYcpz3=MbcbG&H9q5J}-6V)XHl?};Ia$qbT;tyC;td@VX zgsYrP9&E8#EQO3Igk?sszk}hs<)w$>*%(pHe&u)-1;{^M5I4RgLUy6m7h5LWs8#`; z@by}$8Q=2Dx7d|l`W?83R9>FiRqZfq*#SzeHTsIFv^tmG!>~}IrvpzaE<@gtk=S$}Z-=vGm2BYDoI^vzERMM$o>WZ>-c_*Fr3XO||zbtoq zI;C|T&S^$|H(_q-6>HZbBMst7rq#x>w=e`aVk)~wZ)M3a(8FDP7U$Ar$011x71Ts6 ztd833ma!i;GR;rps^kY(7jr7C2Y|)Pzc^z_=SE565%~R1|h>B8gMo zuF(D&qg6_F{rz(kiFBn;s#6;YP$CQI|#hNMh|hl9fCGyfjgVD|PkQ_!Scw7l{*robajK?oz@qyXo!lPxh}ekkkFxW$x<`>i?7bK%TP17fMvglal|tt{UV20?3*;x@&AxLiiX?FJHjG`koi7J#W+Ko_?Rl5>s= zvZPb0s{x~L&aNbDF!`7ax}U=rwH)O6>J!fulk}hG?jE9_<^>3fg*$xQbQtxH(=nF+QVRRkD1-8hPlga2DoUcc7&B z;blsVkRd6@06=MGwL-Dc9~**7X3=Vva{v{xO2DK%(Q~K_z&VP}s6CTp*`lXd2h?rp2j{#`;w7OWt9jXLI)qvj zpC|P1)*eYB6aK6RMtZL$6vV-0CXL{;HcULAqxp~f(bdv_!7Q12JOnY?y?rRUmL1iu z$_WjgSg&9m$O!Ck%=yOsg-Xb6>c)y~GQABC_#5+PP9VBw-j5RBq7D6BU^zZ|<&a!>Lh0pJQuQaHrUq9qIm#QeYyzrS2_bq`H&cwxoQ||uG28SbhHest*@jt3g|&+h;m1rTSH*;qF&8-#;sW9bD>es zvt=AjwhwrU1e`e~wz%Q^>ITM2W(^E|w@+r|xp)>Wj~pn$#HV*=%+9)YpkYtt2~}x$ zYUsfiy}GP4rro+yX2$veYI5|T>&Un1?UANTku-!dK(o4pb}Y+}Wu>z>1)nXJ(f>pE z3@~0GC=|gd5BW=DPo{g4b|vj+us_F_1|qHAS^P!A6-boKI)$<`IT4#){?TNGs!v!$ z9C~Jb)v@+3x96Vy237z_F8OSLOJQ1>oLf;vSV@F9s8PDekYzRwfJ?FDxMaK=uV`av zer9gU^|4%DZQVTq%HMQKo?&CyRIj8GO=yjn%K5&+j-+mY}>YN z+Y{Tilaue)sXAxxs_*~ms;;iC?tWHZ_jLo%n1Y>qPO}}tZn3o;gW{?hK2;Z+$#!#Z z9Q0mpmU16ey8%#e2P%!U_I!Mr$37S7rR~9ucg`M3&)22uOu`EV3&2%6C(l#Iykv$e z58N_%&SKLYnYx`g5Q^Bvojt?K4^qFrV<|c8I^uCS>%S5S-NFc6*rh*{5x*{0^s4~J zvKrxotXa5_xDF4S@p@`Tyow%!1vsaK_QVOBqLrH$P2p+@O0#junbV`$DQ!J zSo(M^ag}*PiaZHi=*W51I7Ot{?T>M)i#*Fs?}F9hO~o}0-ZAUW zZyT5z9hz`yZ%eAI@1SBDht+#4es>4JQg^9p3RH( zq~ICv&D`JY9_0~NiFZ_sNZIYzimI`j^zl|jQ+1U;9eaD?uFS8uG=R$BDGF_j+gpL5 z4a7*vrSFb;CBZxC%3HKzQt^H7Q4FN8Yd{CBuBG+DhcNaNJg4izyHP&?`?QXKPs>8P z3A)&UKbHqEk3vUW%@(Yd_TfAM+UZwqimhD%SCU3$_Iu+X;ZE|^X}#m*$+14O8*eAi zc-sTAYMzfvy`*JDo$e5KS>4susyDg4k+GG}@V(0I!nXQRmwU+O$m`^g2?hNkUBi{u z+XnE_VSdYlFk>xjar+MtSS#fvll`_d(*g6I;mC#I(OtVkhy@fG0mESL^3RCMq8TFC zcLB;yjcXrec}b*y{pF@^+-put{K%{tb?l*W8&X39Cvnw|EF_PC(tDXDudV9}WJ)@7 zduu&w!6pl%bZGaiz+mP4S?M0L&}Ms|gr$C8YozyOXH*mk`uBXJYo33D4_F8S{jjB@be z!}XOXq^XsEx{2&L%Se&;#u!gFS%GJOw4!PC^fiK9)EFh~jcwruEtQ#f*|)y|kISek z-z3`h5E{me^=cfz5s0s`Dke|hn^zKQ_7c>}P*q#!sebCv5>rw8w*}c1w{XJ1d+ow% zlWD0Td&~Jbs?1^wOzF9NX3F=dZE(!RGf<1*G%;Vlc-y)_<(TM}P{p(rYG}dl z@2WKpQq^JI#N}voT1Jvc)S8RDBS+ntBzJGA9AV{0P zk&0xzp(-)wI2LU#FHcZ*@$r~telc1!?NgM zuw!VkA0-j?tqA9g-zBM4&Mpnl7vE71(x3dH_QwYQ*}Pz2;{1OT9t6zH4F7x8aDqq# z5&8;E?dnfKFJtNaeP_+S zj1Nz#iXk-y9!=hbaDs^sQlAN{p%U=d+FoMq!suXnw6M#7zP8j^Ks5O~dKkvqLJT#1^K{ZUgJ zlATlmz0A}Z4#lIZR6ypGXbV6N9EeHRHp4okOQ z;fJKY#ig42m#C9s;iV{UN{cjiv9cKFv0k)|jg!15zKM#dZ^;fZTiOd)qg{1jU$)9@ z8E@*d;;h;<&~wy!iw>28JHhn^tYbsHZow1)!uSH|`jZCDWL<);t0NL$qz0mLa$c3w zBxaMTT%I){EE_+wW)Ftb)=Es~OxZW*mip{5PC8{@En0Su#(ic*0!7j02pkMpOrpcT zu_iv11ikg(;gy?4k^-M3t?VIqtIzKy0mF4$CAVZSL0{sHB9Lt?f6p)?(#L!(LMxX6 zKAR;^OL9aI)9@3+3L7>I-Ig@iMRUa1)@=CZPdcJzn$-oUX2KRC&~riNO*fRB6u);W z%59Y#PsrQM9QmkD@9;|9FRYpFMvi1;15|V8$)-Ok;)&vY2G<`*LCltHTkxE9l^Yj9 zQT9@Cm5UTp1+%N(>RvGq7dXeH!dANgl6=w<-8qA#%r*)ph`i<3=!iJ#dMH!Ut672? zXo>W6I3=|Wo-Sakv^r=Wb@1hWR`R*G3uIPk^vPIXSs92M43r^huP?f7+cAS$qCgB+ zT=OyT*kVg1tg&^M{YIKtTZX3^MFu5>b8>H)ETi(yY?&7VV{J9Ir{!=F|jB-DFoqyLHlaA$XF)B9AEg7)>7)_A! z?Zw05ev16VR^{48b+TMK>GJpEWyi}uWu#p;#IT*`JRuavKURq8Nmfvro35(1SIaf| zK`>k~A#n>Zc6}yd#%2M=n|LokL#{vAX7UJhEpi_bRsizvxSS~>O-vfKfp8(3eC8!K zvOtwGcY3X1Qg7@0_TgCq5jRFgY?`5PGaCzURo4Z( zW2Mq)9#TE2sF?qlX`sbm`_=_p03}YqG2*I&sF(%~mYfQpx{X1x_+$#aCYfxyP>wrMLU1vnUU4zXe9LAG~T8mX|<)u5HDGeRW`R@jP_WI zg(VK_#fMC2o!Vo8=x4aLTSoo2_1*Gt=&v0WrLtT)?%|L97oKz0*jb7eb}Fz($1Uo? zrP5<6#ZtGJ!D!5d#En|pp*ruxSTlVA-BjztDFraXGmQUrrv#z)f)V2tXQFHXYEKj$ z6z76dW!F|Y>sy%;cF#$`!wF(OFnx1^^-jyny@9CQvvCjEG@1o4kI$YQghbV!fL&xl zH2$#&{BFM|cVt@essAWrcL66#ys*& z@2;Oh>K-CGlV`>&qtkx;&kO9gIembrSc~LnT`(WF>_Bb=YBVnE;p0+Kd;@g3Yk%AO z5~IX#UzH$Xlb1;SmPoKj`);fW;)I1ba^L~MgpW83K#|?F{V?O4-B7G;94an+WVy}z4cf+XC&4Xr|K?OLZ1p=k4cm7xZd!C@QN7csoF1lpMq zNVX+BJd)*WM-hCNzPIH^yNXLfUOWxJo44O2(Uh$p?i|w=!tuzqo%d~6XdJbZ%OWn@ zbQ^(k_Z}UNFCB6)6+gm?snNRdRAR%Dr-0?TIIgzX-w~5LRFnP>_qyN&M^nn7Mo{AU z{jx=CkHu|^@8`S}sbx_^<;m>qUTw!e5ehXEt$W(Ou_baYY!=*FAK!zetT9%Ath1~E zc1?P9ShszCsmxmYGj~b3>nfWnO(q(PYC(`-!J)JMyaqXEm;@JimQ9~AjqZ`?p>EC` zwQr41brL@1;Gq4u(|D&Dw5bF95_PpGG%mv9Cn3jBa&DA7Tr<9>N}vn=J~>DR7P;|6N?3BkJB7kEePs%y%Z6c|mN5WUW4K zg3NEMwCp(hXb%58wuMgXay!|`PzY{{v(Gwn1sbNiB(H-C&Tw;Q1&(SSPgwxqI9(FQ zy^I&x>mo{Lb8sf2$OVd$gvRzJ$?tXL&D)5+G97R*Mkpw2j+o8LRjChn_6pv-mf7lN z?UltKbj#Rvdd51>z9lHh#2P1asr2)FmL7I#b9N=bXCvdacwKtBDC(r4vPTKV7B^&2v8PTzd z+}kYb{kn9r!J|3)z1lnxX1?$jbFMh9XtrQO(MdDE|DPfRJK+sFF}7i#@mxa$9*0op>qR(XcY0sSeQw^0+!sH zv*Si#C$g%jZIODwCa>hck8_vyQoGIz0+aO@Uz)*bPS|HcBOp<-NojOXvevmY8%7{! zd)=#>sqC!5odCx!VVH>dO9AmD;*V<_M+7BDWJEIA#x?G4;UyXG9Y=Myi&MqC6L#n2 zi)Q}LME$vz7GfCyO664SPAfouIg%tSCr`KewQ|x4%z1)mf`qL-;e`N%gKu)lP=g-B zL$$&QW^JfFQDLFWizxPbjL8o@2Jr9`&C*H@JiG5S$1$dvu_QSGq1l+utd2&Irr11x z=<={Vlk+t2Va@PDt#>$0CwDF)Pdq2ZtzSsYo@M=eI++BRf-SComCiY7@3rV(U!W6p zz4iX?H}9DVXS80a*O!BrZ4cB@BM2zgSe2Lh>xSHp6y~JqWSj|4oMed&vSesmWCo*# z8bTt)R^^x>eF&q&sd$-GK<13!{2Rl&$q{71s7LzqlIiWv!3{{20}f=@k+m+@W(j_w zS{a6!qA39Y?>6Ax8(EMXb?F`8(u=p@^-rPD|ET}0YU7<5F8moj9pEB7v>B2fL+~Am z=uq_j*8P>VY#99H`Vohw54?|WL5UpX;$Dh;0qdt}ZReGdZz2-`KI+jLMA) zV{Q9veaP*&`l=x266fPWk0gihp@Dg%U@hpIy4M9TYnq{wFb>2XDl1hPQnj-`%W!7r ze`lhtYWN-qbLC{!z^tvm$b}w+cn^g+p`pXOXj7DRg!0t1^}JPU@^^elkEyQ~%I@8Y zQfNkr$0I^tUXa$8z3-A@uB9&SKChPXK!w+Q7Tyq1cG=mS zGIBe`Rjv<I(ZMF9k{Oct6Vdo%Vq`MN%yK2y4tU<6)+ z29p#ph@65=xyLb(KqosPv_wzIdJ4XuuVLn}N*di7%o&I1G=CLDV&|i>&^QROI4gpG zV#56(1tSuiVTnean-t^}MxR3<!D%7i+)W6VPuA)8EGd| zjQ|NNSw%&7Q(3n2ZC*G}OlPeSOo%>GJrRc5J`aulGb4dlTK@vFVK;$ed~ znct0D{dxrPVgD|1{<6mpy-%o_X(xvl^{_Lo#O#r+S-p9m7f`v}O@p}@1%`W$D4rDZ z*Q3uOYkjXje?)F`jmo`f>9YO&gxb-%#RK>nomt9~V6oYg(HA5U(_3u3t}6kr z%Z@YE*U{Qx7u-HiOj#t+Ojp46F@6%Yif-@x7DDs)I5*s~zs;0)CQ-U%^6-)*%iwGf zSEu2pj-MhDB0{5!^K z@v%XnBd|?v9hQ%Q&d4#;&alDLKQgl(R;@?;+ym1vh9U;rL<)keSX8zvogfpooh32X{EioiovHP94H!qFH` zHKC&I(){bwR=A?Ultqj9#^FS*OLHtDVz*J3Wjez>WVA=KclQ+Y;_^MAk!x0$wlm_O zl&~z_$ICc_+@rNHV9&2Y~4r60*BG}%e^M!`%FuLW^*f)fxd3VGX3&)j zKzg|(sENels%hGO)e}tSklf2twh0u;2&xG4^9I9$A_><6#TPnE&rq&|T*1S;<5OEBEy`+U zZyv-dG#9BeP71HCTDe!0Er8$2&YUC86;%H1ZCskh85ZYnN8DQc2XVnh3)zaL;G5D` zQlpNbl9P_)e%Oxey3*!V-Tg1X%|pSR-0PLy34@lvCzuPUIqo|2!iyXS%5`G~`&!X{ zuM+O-VUHCMPF2;LAo6C(#3w}g^qoUwawgJhBNml2th)c!9)G7v3;}X7ke#Sv;g>N5 z@iwb!y^T)qhB+NggOd&gPbTyqcPsy%Inb&mwy?U*{(ZME+=D!IP0 z+u!9DBjjb`f2`1M5dolSo1%=X^!6kYZCkvDTJ|;!abx_<|HJNR7A8~1N58vVsl1Z9 zV?1GCANXhd@9>ufmFOkP)q(0HoGihSzod;#gS4dnhjJSlRhUAns1vUO-v~GrpZlUN3MMx@D=Hun6YIDB_vl>t^d%C- ze&t_wja5?c)7?I!=*vd8dJAa*RKuB|O(iPHTe~Uni4EX0Zb?dKNiHb)-C?@ba}wYu zOKM*4?Q~hqZjAj?C9n)BQqF#T+@T9%ELxB-+!}ALuy<>bn0&8bmof>CP8JfcXtgS6 z-=pVJV|uhFGC#n@h{I|taBujtr^`SU#AA~P4(TXb z5t8SeddTWB;_s~Wze^}h3xf&%Tl`l*$YLT4E0Cxki0=E7;VR>QD3=+;OY6gi*QY&>8$vq54rTV&^CNoWy<>9^W(A4e* z3o1dwU#0=lY&IEe2oKa*e{HJVewBmu*kQ45^IgoRtwuGflG#ISrdnKa{SFcj8?!l9 z94)&n*441xWGg~qW)LZw!^u( z&#Z{4JA)1kW0z4trNzJm!Jc{i6u>XuUsQN^i`rB&b=7rkZU3t z)et6{+}^3ZssSN4NS?>u++efWJ0}XQdR{b{Ro$nUi-7rb&DH2|b`=~%#uo;BtS4b=q2wQhN z32iJF7cQXOYP8+evY0x}7z}b~ok|vgw|+XVY)fjRM*aTb*6k=QDaJ3u)_nBx+qk+f zy(G`=-E*kUDw6+ii}E8g=8{zA`VHth&9s|l z=p}v~65w6>d?d&_H>v~ftFH?`C_t}71&*u3>#T>_8^)IDX?JTXmDAiw=jtx{FNfXTjT7S_oCV#8Sab z@g0HI*51qhzv1;qt(Cj)S-f*G?I*S~ZNN9-adtS8RKaVreAnh&47UHF2uho;Z9-F{ z^dq6F^BI-mRyMPDR9c;ok`mJ2A_3N){HQ>vBb_^JP$CPdZ3@EMfX@}i$D0RoYw7(N zqKOB`ejSD-ml}F);j3I!Zhtyn#vpf1O~E8(2G+LjB|Ev!Dr`u-NN(JEcpRf8OF1gl z9`CN`y3tl})iLkmU0=}bFuX5U=yxOxRE1ZnqWf;j!2@4UcPmN*%T(lCH~>CDQBLl% z=#8oz-%gnDII4JhCy&~L?xwUypnU$JknfJqCl!hQ?!zgfO=9;>mN(BY z`lK)CX$}r+W05$B!HFrA{Dxe|(6B7C6gBNtry;NZ5T^OJHA?r#r#|e>e$%v4tVI|p z`GuwK>m+;B?8+||_n-a|>hRGJO256e?EHNK!zY` zzTGF(#wYxljkb*@GtD6>zGhWJkH6(Sen!|ts83kC=6X($OB6`Hv92) zCy||_hNsPYQSvxdMxS++I3`B52&cX!G28WJUY^)0pl~f|2jUAp{R#6!*4(@D(KDTmCd89(pu2l^z} z90n5;nq^wkrU-GK7VM0-yIcwzD2t zTA9tIY9vK>&aUGqL+Dfn?sZ2S#&OHV7+l=c6dok9E(j3tF*wcC&*AfLLF*anX(Vp6 z*T#+8dyd##z(B8+HX3Oq&rd`qezx07UDUNRm_}x{Vt-}}Zg(PEJ3qqxRyq_XQVG#b z`XAadLBBIx{6zno=r~wD+K52DfvTP{>5@c&31ziz68nOMWDoYNtde^egkSOe+H+C4 z90NN@!V2JaW{ZQbU<=U2*2E$3erE-*F%woi?EP1lx}K!EA_ohkn*N|E0`r({e%WB< zFamuh%uxH&{j3mq*ug->rb;BiJX<-ut0KDIZNrz?Q0}e^OpbFX>E3>AVV9m>z~G@l zRdX#}SRj>esIv)p8Se3V zE1kI;y9^v}%I4kcRBzjHa%NL>d&PupIU(&RDiX94yR;p>Ews%`I?B`Ql?+ps3%NvH z!4tRAUC>h3$^DnErc`v(TX9wjRI_2`J3o8);mm6q=?6mm`hNalvydF=y)!q&fP1r2 za%{5eiUT9=Q7PvMsW9%?4V2-F>f(ko|2sXj?f#lm@?g8kxmEdm+ykMA=7%(*-?3ZQ z?xvk)A8FFnjXyg^eSS4lljaRaZoIs<|2X!&jhCG?viY8-{0(XJS&=#A}w?CIes3$(BdQtsfq<6SCZFKc-v*-bj#$ymDF+m`n8-`Tq1L$AJpY9ur3zv(OaW1~FiO zS9w)26gn2}b|-{<`c<*K6(NKToQU{)Na6&i%p?qy@kgT#FCEpiOVr8)g4vE8pxfi@*b3;tQj-i03m@@ zr$qIzdB&jb(kN`62@BN!HQ-*w0a?CWj5@+#=}e7}2=QyS;3kuUi8|*u1OWt2K;B=H zT7)+4kUR?WxE@XU9tvv)`He#5KLf3E^gaaketC)Gd!HoMoMQxwMnI``wLxH^_Eww3 zThRjU<5y|unr-Mqa15DbWj~IQ-k&2#9ObJ7l7RXCB)pd413EARA3;N1u(^b?NG7$uCRkXAik8yS+Vl^VZCUcei~^ z{fZzIJg8vO{y?JNiK6R1E`laj_YG<>s5L4UDnYNKT zi%6ZDxZB$n@tD(*JNp^(j;Vg}liQ6@Ux zq5e6>5%?t`IK;)?1XYT*w0gi1*_7r%5U`{*a*Bj18n-+J5kQiWq$Uxdz+0ZX9!mcv z<46|RlBrXsYRw6t#g-E{jEPc=XYsF{jYsiHCs6?61}sv5`{zQ!$+AS(+dVDK9*W=Q zTS{34SpISCf4M2Jtk&X!0d;r>LKH6o2|erx!?=mp$5{;O=p|5`ulrA z(<3Ni8c^1}BA^@icb;JMC7y!<0poAr6GEA=HfJ2TMGcOlzYi_npI*N>P@zeK3+DJN zx)-JXn>=ZZf!Q5hTG#+fOiS8GdcCRA)w#;dp{Ul^T$00D>q)1*(Mle|XkJw&ytR{( z!9Iq{KJ53?jG!4#B@k>5H7=X z=v7*UH!~6e`hNB`NkNCA4cx?Gu7^VLJGS-ik|@DZa(@H7#!Em2^c)ZZZoh`M!u;An zos&Q>ScWQ+79v# zv03ypf|&zj32QKNXN>Umvl;#-g^hsMO$^GnIFZ4?SZu(8=fL&DLk5k)csK(~{Jrs? zgpvpv7EKv-gmI$|cRdtFGZo;6PU@8*ImFA=?-j3y=I0mMG${=KtT&^w4KdKu1vm(q zo27Q|;jM~v-1&!RX#Km<9@4>h6&`{UUn=)4#~vc+^mSo}j-4T1N;}f;d5E(`QRi#% zsK!=te|2Z4np}829yIXihS#Nq4=DdE`_B?Yhg|u&RX*aMd(dl$k-HJ*v7skdjB0*& zF)ync;W9G(*yxNGuRHjj>Gm7ormr@Q&jII*UWg@<`WSns1?(7+2pVp?GLs1AK(t%^ z8=lC{Vgj=LCf0d9PEJ^+=wn=Pi8eo~>6E?M9d0qVu&0+|O}Q-GMcPL+itj}^QS}ec zrPz0~Kqz?x4qk47xKJc^E^*?b8fs}&@y!DJrD%G=DCfPM?D9{*9T|dtN?7c#A80I#xBdd{-6q*@sIMgJ69X!QOz<#=* z;x1=Te0!N2%R&g)sj^JYef{fGRCt)IE;8EUr5rl$6`~2_;bXyi(Uw?<&`TUP{DHue zd$2>8yIm)5<9&DQFD&k+S_M6qOCqqoOnBNz$A#;%5Jd84qHyITq_PiyVirh`&{Ahe$NAJ)SZX8r z9zZ~IHDH|I@OqP#TS{AM4Rm7FJXq55XLAy`U&u}Um$}U2Oh`(Po4ktQZU18j*}PbO zvms-D<$YrZn&O8o4YDgO=r9`aUS#keBf{~V7*UVVhGgKVqFziXiHWC40WFu|y7N4Y zR%ZGNJ$lagQ(p=cmzCt#e;8qQ7lgT#%qboxvPhP}7 zwDYIkmHK9RFz2EF5+6w80rJ(7hD>s=P9sjZYFE^-+A?U! z>Q>&Ov>0k^3>r11Q`B2yo>`B8Ltt_qE5}6Iu$mTtV)Z!6WhkEHANS|lf>i2B8re5J zlTL9vWyFTVtRqsW!y|EQx7iitm<6w{;%AM-7SZ$b!K)HGjtxrcgx(u)iDWu%dq?b} zEI3YQTb61Q>U*m9aAQhTUBf`NX;_d)`Sq=0_Wt8q@srUZCnwKJYw!VTV%+&cn<$@^ zEK+9xH99Q9BeT-_Eg1w~W|Q*o!}mnD-7dQIg1Kk46S^7883{$A?tC@^2~klKW%IdG zOVx0Uk=9xA;jaS(z>7n%k;GkiVAkUjHz9GKyn-$7ykR!=HgSLJkl!gG6I_t$r5Ax7 z)F(Ai6F*IP(u#AEbvu`0nR|&ErPXV$L3A6y+1ku9!V~%*;^%s^MPOY}x@&ho&J%d^ zuzH$(cK^G%8X(6L!o(==2ewO1RwH2B;=5~e!wF+)vE^Vu2#{>=$3A=8d^E)4mX(h8 z;8-tM9fLp#iQ8-Q<9L&=~E&1Z)oIpQIP#&`w0Cg}a28_4afqwJ zo65;XL#(hVXQCw-lUtm4?4wi4hDp>PC$?|b^XXH(zPyFZ(ljQZ(It{R{|+2+I8P{G z2%zgkAKzG6wr=fd$Wev)3CG`u`IP{I0$*!7H{qfVup)i5ev1vkVYo^o@ zU_C3kYL)DBdc?k%t2Dt)an3V0HF|HIvBBaa-x^&~4VH@L8Cxtri!_Ro7;=&D=r6aS zX4amD8QVP)q|74#G=w0B?k+lGxJwa9iK8GD|DPTAp@|1RdwLHP1N72=uwxc zSmHL(&0cgj$IY-2=lg(Q{a~*rD67U`UH8#b^_y__o52*PCO7n_#3B)FjzSXTgvF0@vOO?Eav5x+ZV>g&o*K5DbAWm%DsmBkI9B9Psi z)<%LENxaRl%?&N3S)iqRBlXS@8HgcjcCEEN)_7iOU64vA8fUjUdkX7vk|f=*hPsoP zUjdZC1u<)h$`+`i*p##pvsy%U@v4alAH`jW)q*a@i#Up~OEk|^;pu>=j;KpK*7b0B zAC{3A*|+A5F;t3!TK1K0c%SeUzywK z;AAtY(P*P1;HgyKl(!QhkBj?!dd^@O&m$Mq1n09J7v6D;4>qEYyJ@G!tDFURP7N$* z|86p=^)gd=MM1eIx>Er1<*H>!CkW}C7JQ2@o=<5Hs$A7umo26_tlgq>?X(*62Vb|c zK}y09?4gTmhtcMZOm{(JrSx3d))zRfI;QVXfq#Zq%g{~(_8%`XBhBEz;C6`F{<3-M zC%J!kHp@Q<0)`gm?aLymZuY{?bS4jfuoo*Nl3GM2SR*nY2M=H~MY-utj*Ue${(Z&u zLYcV&xGC&y{-RaIUoh1A^8Czq<=E;wUh1H|M2A%d+FvQ9-znc!XvQN&(5gX;Pz(RE zx5p`X3Y`DrexzWl<^<0}%gE?&#q|QOKzgubs_TLtAd?Ze|K%YB;i=c8zTltZ_2`8e z7E@CM16-nwml%M#>|;-1p}jIYOIo7CNceDi5@=AwN|G@l95xGYUEe(ydVckH0$2W( zJQxwh$DUrpX^oQEG_6UQOpnFMcd#`_PM^QC4g#g_n093(BV)Nw{q*@V_4#KX!Jw!* z-|Oq!WR0WfZI~-gBQLK`2M4Rb*m>lGR0o5TZWj3R5HSGI(vs-}&otyvv#n$*Bq$g+ zvX{h_k{ah86?iu05)Qt}OWxSg2RaSf-&$&Ckm5TTZL8=jt)d|C)r-;Enxwq3+_+@` zSvXa{cHRq4^Zi?wHZBuVmeKj+o~hZl{6X~W!L=q2j>l*<&Mow&T$(H8IEr?#GGAI# z+S@{b+7WOg`AEvcKiDe-t~{+pXu-Gj7GA-ffSsb%cBb;4)`uHH@(Kxp$69=JT0UOZ zfLO^z(e@ru7R_cd#08yuJthhB5XMt7K26`Hm?f{|XsiQ{P9@{Dr$z!_8F5+U^ENt2 zf#bRS>^d-6P*=aJyy{$F{qqiRFSQm@y5T7=wFES*t~K+!)wPa@u=RzpC+xc zYB^xzKYl)2?;N^*UBR~bt}Xj8#{@rZh`->KY+!sAu>SUhb{!CSFZh-XT1``6FNSTY zyalv&R@`+@A1^ih(PAAieKE9&VWVGy6%%PD?KK}gt?lP!N@ansPe_s`i+L?UuiL}v zLoA}iI1ap*g7mNCh(n|DbzkQUjY2R5WVd_W4(457ff0B_Fj*fv@n$Dns88%`^@u%1 zwS|T(scZ0zZ}Jw${0d+X_w&K;X7V)If(6`GDc#r?slI#sk&=w=5U^1nwdfMxZ^jK7 zgk*;Ulf@54S^?1*6|xl@tu}aI7hfA#_w?14vm|?fpALB$ zQO5m_Rj?1>p8DhKAEakw^N*9q$3Ci91lGHdx50K|$EE567&;-~ z2Q2vixdIkeM&|#HE6{F>HtvXfe5XdLC)rnk1y{?J|D)p4^vi?UQZBZrPaOCm64T5V z5FlmWBjw6pFqg#cAtB0;j0~g1_jMZ^!|(H&1EBx&JpsW33vKr?p!s|LWMmugdAHIt zHUgM)1Ne&P3A%siVZEM%WTEZEetkXf)9ZchPrN_V13pZ5cSUN^KKI`N{K*ncy}x3v zd-%TIh>8R#FGtSlsVM%uSqBc*5ZrFgGZUXed5hD+@h%|^lnl=FZkv1F!4-zM{g~{r z0Y!S_6om?0orQ=m1~0hSy5CQqGf9eYvj6-VsYz!&wouC*5)}s_Q=hM#u}ERQk#_wd z)l{E@xal)l5h{viyAf^wHr6PXBM=Q9_T28P49O5NiuiPY0TT){eNvybKF;u15&`XX zV&Dzh<~8yW05u|ptLC^0kQl21e@b!Z15~%5O4YMcy7w? zr(f4urV|agvK`;Xhsg8zB#1AtW#mf2bN5iTnLzgP9guCtVMKFT`n7L?2py$1kA=9< zF;8R6o}lxrIcyP4u!jH!gezUgjA&S#X>Qe%SfqajYPr!+4}%f{O9w6X(8@0dG1;9-Jah#1e&Jo#NKhIfQglKX0^{0J0XASRp!b0~O(m@#&d#eTfTCN`Ffhxo~QZ^upKm|=E@cBy0J6N&H-hEz zPe78Jjw~ef{hpay)1Fd^xr=h6a(G<{_=)b6{3f&3DSr)0(yfSgZa{$4j{0ZA@-)qT z`?b}@5FT4k+FB_DdAHs?<^}_QzTpS%_nG0o^N`Q9O?XJ3_=g@csU_pk<^KKIHe}DE zHHgI4#bk5nCJ^?GveUCD2872-O~Ekbo;)zJ_}0(ZYW`&c>_ev;TyHuntLf;;IAswr zr6Sb6t<8k%XUp4*-GJPPp?bS#pmbi%nF+I|zSDv@lS_NB#7Gkh=6^iU1WLNLZ%-uM zfJ*(cA^WPnp{Sp8?%xmiZU;t|byt6R408A*@nxm^04!~87@3963g9cCc)Y|>#vt{+ znOJX@XtM>97yn|%*0FX^sOzAekzNR-05%QYb}&ZVA?~BS&6rd5Q+~XOKUe_0E@UAw zn(Oa6&boznN0-qnNUdKf3^d=>9vWI2Sbn}P&l^(uVnQ8<#-&0bTB?cdAiB_6XXkWAm!Y{IwmV%3`uWOj)Dh1Jgt$R zPQLT(m40_}pd+M3>Qrj46oLey5xsVnJ~pGDocO_l$Ue#q04zvbd^e6LE4czgQz27^k1mi@EFcORzW-c?Zx&SNnmu+p8XELYg)+M?zKs0j_|Q&T zW{(N=afQ-B)(UbTQ0XBN91&;Lyw7?HHnsm z9&*NUp_{0EEKsMFd8tgMsz?5qsMgQb$)S0uBe_#))?xg3w`Hvm>5j3A{2)5yx)tP> z2_H;Z$|75cZUgew-cBOAsby3y!8GTRmUMLePn$Gn`0H!Kdgvo;&}06fdCPa)6DUCb zeA2Cm74VZJIqmk9v<#dz)+kwRpdO4@iI&$;E6pS{m(nhAa*AKzLvoFW6F?i2tw&6s zn;y+S40u^co0uSec(Isn3gz=YHz_FAX?J%`E%+@JlrFs_`!q_CQOhmezwSDm7;^u` zi9IbBK?VvwJM4T2#G3?hN76a_r~C?qas+H84KQA>IfOZ^vm41`cv3sS}D7?z~sjQ)x57#Ld-1k)i z9e|ebLDnYYxZKKiQ_GkhXqBuC&xkcsk(hru35oqoXVZe)1I6Ns6d*eauPw_snoePf z*veSbL1Y0bXwlEeSceD?6R8Mu>Y$(ubal&jTr?tj_?P*dF%QH=PHzYzwI6Oh;#E?eD4qvdg~wpLj07^;n<6Z1 z(stP9g~te(X)r8(l)_jY8SK&spGh7VA(sd76ObL5by5qnFs{;G;4$_K2W@vP33=oQ z%dIkAI>M|XjmcGW+2ZJ9F2gu^1VD)P@IqZnz=b6vH2ZEa4>!p%q>uNH6@9csgVH%K zgApajB_krU)`%w-8;Dwqr>Q;;m?6+{%F3SHYTT~&38!SB`WeH0Wz-Rmmt2d5>Q23L zkrUHF_)cJ#M)=p<7sC*QtEMPlKjTn`5}8JAHALDNtUYuzavmk8p$|IT5kRgkhfLMK zlIoi;{EcIY9Pv#v@G-+$`0>nNY*ACLZg-ytMx90mSDdlSs+!s4drQqJ;a*X)r@Ytv zUqzH}7WuDHY|YG+k1=LYB9fy}Q$btjmAN_eZU>tm^}jBADnRp?SyUhLep~{H$XZRL zeOn45#Ij_Yt3uX7=!Q~(3s58f%okLyi~pEcI51F6UZpC+5PU@2Ef?Aj+DJ=@8O^o4 zr}|@)1gy2^K2J%2&6;mFZ6wN}%fwDYTa0A~pjI23vCGHSO89v+bkG>A3vS7mE-i0m zp&p>n9SF~#u6iu}6EN#BT@}Z5Rd{q3u)aVlq3fhj6Fsi08^^L52Q-hSH5}I)8@V@M z5G^Nh!Wo4Nnyqy_{8|C~m!gKyi4JBFY?*YvCWdtcPUtkez-7oLamrJ;d8kWWnq->b z#Vc2FR|pd+``93bp|ic2Ru7uBTZ^ZZOX~FJDxDe2T1M({tzqo(pnpvJY7GZc04xui zWVCQll4Pn{@qUiIRX~vgUR*rvGC^i??E{r8J=? z?{Fpx%{Ybhvew-?>`}#;VWyQG9HRzuyu*t;UEX3fhpiL90$4~TaFx)$tF~!Z$FJ~0 zPx^*Ow`&h{i|wvb5QID3+!!hJJ~%cUoc^BvoyOj8s8040^{WRMQAq%zQRM~ah6!4( zMaXj$_d!MP4_40uSmAT|T~d->f>X{!^x#J7lyZ9X=M57OWiq5?9^)Yo$Wc~Ho!@gHD1&3feL$5R2IpI7m}k)dWjTEcx-Q06*Yb zN=TGZGMb!kxvy-*WOjdEGz2&p$AFJt$OSEyvH&FnA8Mi76L??fnrjr ze9GIZ*DRaSdY{b&v)s5WNDYia4fq|@GP^?fh5=ybmV`h3hj>222YsmEV-#Qkh!?RZ*75oqy1M0!XVUd{o?+TJip!f$ zyblKZf(Ha0XC!?lzwnh0nk_89t7N{z^>SS&l-iAvBwJK9Cqh`N*u^FMqTRZ>*0=8kpMs0C0m~kBMYF3UyS)yJFZL>SJZQJPJq?3+1wr$(CZQHh!>A7`p%}h<*srhz(z&^G2TJO8o z1GREJn@YSVX6-JWSvGe6NQG-n>DEDzJNq;F)&v?356_2g*}Yb{F75h}zVvp`!+#4Kqv8OAHSou>Ne%tje6Qd9#U+}YDf)tx+r*|R^pNg%4O$j` zx)eT@FoAG?`*rGGrMjNMj?gQLze98q?|@a%dXf@clPl!57Q2G(n8s8BA)A8tPG5Vk zO2Za4mH+iBq2;k9DI0ecll-(~N36LLun!z(Fs)A3ZPIY!2sVwZ3WHk%7X{3YQ~7_! zqa8UOlf%4LLXv88ACjM!Gd^msf z*0pGqh93+fp`4^=sfb{{;hv+OzI1TsL>33>E0)N!nKQXjkG|KNf^QEZgnHy*Ndlfd zsF3_@BKZh|Cn=mzwy|Bw-aE%5g`R9yJJJP}LJDgZ_NCFm7>nm}Y>Q|go3Qh5A*G8H zv-(L^`P+#&4Jp#_buU3*Mmv^CurFy4H;4R_mWzDS?w&Dq@uJWQPog6J>_-**D(EL+ zcD55*v&z>tt)bm~fwXs)@A;DS;sBlkmgicwR)_5k4uE0sG5@6?BHXST-NI9!%R5=L zcg+flm&E4Hnd^nocY`DO!5xDWQR#`F>|5T{w-h)V+ef_IF{(H{d{*x+u^L!s? zC$PW(wU{Ut#|z<9&95_(g*GIiMD=P;_=Ot)^?98Iyv}}g|9C$rG6WudLbzTJ1i19k{*-FjDFgL zqZo+yu|3he`V{umRqY+#rc#4^HvS?9#@xML;K3h#%2j-642NCO;^Ny5whPW0f@iA* zO)p#)Uj(d=4leD|gGJkS50GBBZiwt!^%H^5ue-OTFDNzIc@9|9xPTTEfP>@ziny~e zGqe1EnLr&nW07-QH?Tfpa8T93RBD<=}oiwj&2)y2kzeV5PMnEu1XmB+u9 zz6zVkrmvist_>m{QdS}9scm&gBf)8VoA_WWImq8C>qm*;#u`ujg?+@VjA%7kPyWDeN7V zx3|XH)BQnsyD$8kyHLPdr8F2{xg4~!}zK%YI? zzNu4+zrERY`0im7k8mD6W5;ku(Ekl6HNXkni{Lx^;ik}nn54s71SnbUI<>D~QSd0; zw~@Y$)NQ82VrSLUG*2&DA2Dls&i9H4@HC=PbS(!Jx2`|hZ@j)GoPgHAb;{nK+6_b) zBn#Mo@6|E4&U7=9M+Eu9RAgIrwb{A z^EO!}#`AX`8M{UFlDvYq%JjRX`Lg$ebcyilC3jrr1<*qJjRoBlj=PK9a+s`c-u53@ zNE|I(aWhkLL#&KM%`oiwud3f3*l)b_8hbpL^yUFg@9Dc+*+e@3vJrM}3jSH9ELr|c zQ^m}4bTqgPUpw}w5+MQ>)d`C8730Mp9=Gu>5LXXYAj;bT0CAMFl;we&y@j4)Cr9^j*w?F!lY?zASBp*lts-wi(OuA$`#Ng+IoR}<6gnS zR`3Q!+`5!)-XJa2E3Wh_}i5*u+HNZ=G?^K z?r4KE5bMLCxHNS^cw|(o5f11^ za6%(C`R_-&UPQHliDeF1(XOfGGDG<(p{Pz{I)wcvwec^I5`^1+r&XyQs7XVp?OK?}~EU zZqHQE?AS~9C{GNzkk#7)bsgq6Vk>Ba=@5`MW&$J+6>fqX0h<$Q>Qy$#8P|(b+dl~L zPCr~w&!RS$OxRe^*qX~7=F%a0@KhHKb$3DCNxv9^t61KC!i7qIYK1=UO%h?_h8b2XB&*G+8al*Z@+NvcLPqjKb zJa~>3)s1>+cv9U-r7)=p-D&J78_^h@*Lr}(GI5~9!iw>revLxiMaowuu`a69S1^S(SYWf7$mUQdQ z_(ynKdDpF4!r<1c_np~x3$0jI(kKKYCVVR*O-e3!J%fMU>c}<8eFM~XMfT#bsjV;y@a_~hYM6>%)Cr6U@{;*gP)8Wr0&M&-oEH|gBD3c+)KLmsC zpdub8(cbALia{m2RitWn{@Way@a*lR<5i7=X!;8wWNrkfe*O{&YttVIl7R&6FMGX8p{ZPss=KKdu~ zo10p4@_WFZd>L38bLY9;*Le;xz17*H#EfH#ya+H|xTY+LutLe{YA-(%#jE8awX}0I3YdFqJh$MmRC=Yup3^WbAtEq2N3roWJG&qm zYX{apvR6P2`52QqAeByUw%1iO6w>J8r4>(=gdBU8zIo)=w(+<%m zr05*q97-BGC&5R0m%Cl>bO85X*RrSmVG(x}XT)>c?>b(mabOca^59*f`J8M7MHjmN zaq;qm2|xWLL$I*ojxV!TP+{qb>%d}efC7o|#5*fE?`u>8kF~z~ydG)1S!;A>9d$1B z&SVa+q2G1mr(j=5f;5c}BVTVnMmyIZ4HBe-S6*>8;66fnj1$2*16sNH343#ys!-tslU4Eh-M@%1xF{|>Xw0s8Jy81`^j?tTQ9=uTeo!-;et_mey>=)57d$%f#8(~EI3Ae zlp_lM({3|MZb_&N6jiKzs_T}|{{gpz6Ig}VT1IP`fF}ZGDJ6dB^XGnhs2F0E8Pmp{34ec8sa77ztfF5Q zdTK-YrH1V@1TTbr0wb?+;qy2?>zQ5bVJPqB$(B{Y#5uNM#Yh$`X#%Icy4F|lzjS5D zda$e5X)dX^YlMy4=|H{Xme9|D%GAH#I;6KV8winKFegR2v)84NQ<84l02}BGYo5}E zWl6qvuphRm%Er8KgZI1or$^svTi7XJn|4mo|CV7qx6rx?!?;ydcPiBD^qS95%UrqJ z1m}1T{{Ay|#*{ZhT2(KHp*3b}$8op!d#3WGfYVdAOTxit83}fMbhC?v$&hDn#+sg0 z$N0DT03yrTg9}|xFwTKTAJDwBtbs`VeA@Z4)I8TZ-fYeouE1}RnFNl}_q$Jq6*tgs zznpj)Wb(yRZwJ%W;co)(U4(HbWS$*>d02>~euX4?j(f*2>Bpy>*In zl2y7u2mh^ISRa3eQr7c&mdyzIq@m>#Hb4#ItM{U7Y>Ig}3HUPR1d@x5G%RPXxSmhk z@mAONxCq8sHhqVsrI^^t>*Xp*>lJ6xb2dt|1hViPcPqQC95U5oC*5oyrB$8XDz$w( zc8R)&gpXB|NzXa)^wV#wKut|9M0`(k=#*Yost3>Zd1>w6#a1%9l(Gk-e(6D=mzZ}8 z>f{A9pZE(pz`{qw1C`B)7S~?`2gpZp)tQB+2hpa?DZzN>1o}5)N|8udE{cp@$`zbl zAW9LN84!!N6q#w0?)ku*#uQBUW*S&9EiDIO*5|p;&;63jLC=|e~UYPzsrkbuLXmXf#RT|q&if%AbDD931WtaJRj|202$S|z^Z;5^9F zt77JQ%8|S@?-i1m+a|6%Nt+rbg6%iyyhkkC{kxm9wJ$L3@iU$OXw>6m`M>N2RxW1t z|JH7Zds|}zBoe3+N`INzGiuD+B#31WMnhP8Moj1);ji&`IA9QqvnN|V%4h-Yyg$HSOy90WAxXw#*UfySH`|1c)Ek2IVhZ7d&c3i#l zjEnp?RNaaUf(s}PPquQyOZuIk^%wIg#UhaVqckBUju38mru4AAw%w_nIfmP-WKzSb71E~uhlI1#uGmY+ycC$aA zPH6VYhtnjlnKQx;*#|eWb;G*M;12ZRn6&W9Iu%Vop$`5H>3G(lv(GaW*Zs?WR%cso z(|;>=s*FinvY1^p$U!{V3$J` zp{98_Op;asbRs2g%fIjEV)OPS2E{QnT(3HJF&KwzL-G+jYPZn>KL@a#{}VF3 z8?7Clc@Q3H44b_73lmEAHXw{?*HDrYWep|?8BE|F zxb$sUh)hvJJvmYx7Bli%^+q48^tCw)FF(T~Ppl5dpeZe4>Cdn?i%@pTBN$yg+N+!Z z?0q|CHt-9EP0fRhq}V3PSioM1Z?E&;Htq$u`m3Lp^CbV7Di2fjx2e}Slu{r2y|nkV zq!9zuvAB=#^caZyhpaes7U4r>#kT~7saR`Io_xN+e9Y)6)XV)S)R@>Dd#AY;g_EBY zzdHgrq55&LNqA{*Irxe!mhm=BOv97><1#n-+5$I*OPT_WQ=C4Uegd!#qI{?*c`!sy z{oBvjT%1Akqyc+R54=ZW)^E);TvL*S$1sI(tuxklr9$jS8eF3(u%?_vrIG=a4Tj#Y8#8~#_F@<{1(1J>y z4{`qK3ZvfvR3DkHU}79}xke~;Z!k??Wuq@Fxg}KELd?FTY4dfp^_?V6M0fpa9P9xLS4&vG;nMKZ;y|YK|N`; z?k!|Pl`~7R%0cGwCC1iP3Oz-CyoB4rvko(Or_ekDGHkFH7D9gET&ex%UstKMyun;+v>6 zz8rpGa{?|(-0rlt@8g-uF~{O8l9O257ww-#r-qy=gWFq=MC7zGi zLgrJ@XSl{{i}w&B!dePqEBkSTGZZ2wH)C+Y8sZopeB(lnz=8tNXa7p8OyJ8 zz+X13)5gIXaugaia}KZ>T(!Ji5O&qhtT+A z3)Avfjpy+97LihS4{L%M+d};BfnrUU1)U>0!-g}i6S_g1a0uq3-@A$P)qXky8uhIR1Ag(Ho(&bZ*LON0bQ!(4xj$)S2f$a&IRqxV1|ld&v0VC)9bteKX~e$mU;Yf^Weq2|#!cl3yegG{u9Mi-6uyR-E=dM4_>xT36w z?CHQvAMN!WtAdn2N|73`!tlX4DpVyb?4kFG-=e@9YcKo_0}23$w#7lEny57__V*!w zqqr6~8sTGeS=2N5SzLVIF}v^$#2O$j-9aVRJFBv1ID6a{x8n_(jkC!jyh&|TGaoGD zUuSppy4q-kD0=d2kkcMoxM~OqK|f7;pw(zy>R%5c$@XiZ*DE;Uw$H6^<5nn=s}~lZ z0m-iE@6dH-717;%CvC=y*|mtQ3Fu}J_HxKz@Q{+m84_?lfx2O#F^h(zJ)}SwF#??c zSW6B_nIj|);o^0aklpR*`9Mtr_Y>~%n^wch@tFARo>=YyEpkTdW6Me-YgxWgo;m|u zm}m4qa_}uQ(Ez%68uh%O!GE^%k z{xDzpgq)VhWBlR*IeO0RGag!athgVmp})c;^ViNa&ZVm^Oy(R&=A2uhS_zx$bVHb1 z?7~neRm!=c6E9$@FS2BH`|#$Mkw%XkYDQnx$1RLB%9i!UeA8G`tk*`rd0`d33i?R~ z+NG^`$s|A$G*LTJT@Jg>W6FbEu|=b_l0g+$?r0<22*UKv_?ikolH7@`CmWu;HWpC2 zK})Atq`Bzf`HsUA+$!C8uaFMy*>HJ|8wY3O`XXGmWdT5Fn98%z5ojP~*u!_|9cLKh zX;ka*hx?-7M+f*t29^(vTIP1c3LMb?gaB1*mlQai5j}X=nGuOJ)T_`A;=^>)#2ISM z(xAj&o6rkrxO-SFoBU?&CI^ug+}^2F1LJxAVg}j!&_^0Kz#@S;gV;}?RUSEtVT^62 z8fI$8WdNl7+5pb*V6d!CtA2=dLUwArk_(2unY~!KV4yg!O_AJ3Tbx)6mghG&nH&kL z?IdK9KXh6tJJ=&dUnHYt{yN@!1DA=JioxM*+`MG>Zpo}vQh|yaN`c=glvbYLK*meh zV|LU9@87qoF~dJ-Z1Xhsy@Iw#+M9?blz5Jc_N=P?{_Y%X)p~1ZS1LT zLjbL3R1#c{h88~L)5i+mjn?uE16y4K&)4Vj^a`CtgHvUKNIH+SM=qb$YJ0}f73{@$ z%R{2-ZIDOW_*e-y60*yQ?elmcyRnLKR-(lb8=r`SE5@{keCC%gc}JjUcJ-a5JePT> zl1rMp5NFD}vG+i2+aMdO58y}7Hbs1{AOL2H3^nTetODU=O`RGOd34sY&o0t{ABe9s!7?= z3*xRMPf3@JhOtoO@h+HD8yo7PyVj5QzIISy9)#zY+fYoi6$2Vstu%rPqSG)E>^yZy z8Nr%*C66%rKSg$}YwYuUpBlNg_r*x39W3~Ye3ylESF#yTOTU;I0R3*8&9#BugPozX zCHXI?_hr`a|5FpkA)Ng$L>?;_2lIa`h6My*on4$v4Q*jPRts=joamaEkJM$Tp#C@# zs%oE+Bzc!AC47@+j6+{Z{NB|q_5Nn(lIMtE<~D)}-x3Cj%~=>+U;>hTc#FGGXE|8NF0^iCcY9Fp#GT^R)O%1Y{?m#ZdpEANa33 zM}npY*bBr~pw@7RF=L%8qce?5Fz{bEWU}LWQyWeA$!4pA$aEqJB zH8g6>*H}$=`?nsgHxx5K>eM>)rJz%sw)~rDykau)ig_yIwFNaj-(f!c?WkiyBN3hkdc4ET?Z5oNtUeH=ng=^fww_1fzTbuwgwUHj)iOOa z!{ws8ifh7BgwBXzoksWT+FvNwnDB;(jibpZD9<99n%L~ zj#%I!P2po;HHdITFdlTtWeZB4h?mm)Pn(()RuVcwGo$WRYdX#3aRllhF|moK0a)v9 zzATuH9_Z8AW1{V0Lv0SdM1CQncD-p|8C@k*X5xZfO; zXB)}ftR)1!jq_;;2DPPm_ob}W;f9dMTW5)ZTFVRv^wF8{dio6$+Nou^H++2zCEbD8 z&Kk58wA+TnvcWaDisoCE+@PcJCS)veE-5=>ahmo%qYn1%->xCtZ%$LAnSaDtCLaKS zfjp@p_L6%X84Wmq`4pOsP@AeBR0E#Dy{N86Y_;)*p+bsQIB664U56-^_#_YQB$a z@GzL=--?44o3mg;@H)t&*QAcH!B+-|bj0-Yh9~!JW@LXb1%LSWK@?dvepk&)xTVrA z*3~|yW4`{`Lr?!5d*Ja=Nh4!7b~#z?x!)y3-WL~&KOyPVzSOw7qn4;%0bl2*;im5* z51V7^jg#s=R9g%>dAoFCpHUG>v{zy|arymwhxv$tY(AD*O!k%Vmi0BMlP;=UimDd%K_1s{s?&Kz4IVxxjy57c$e7vtL-<#-EQZ$uGULSj zxNQW+&p>~v{Hx-IXN>-`<;U6_l3cjQgpu}kzEhb%=p^zMbfQ4M0mPUU6&1wTesIl% z2CHep;jr(;i&Qk|a}P3St+^tILJ)$ZPms)1O6S!aeT6{kFFgM#Dfsqm(>N6at7NJJrh;LEF zvjr=2VCJzDmQv;pIbxxhV)>TY=drlFhMSsD#!)$yb|UMnPD)PtbbK{H*qwEpcrg)r z2G803Rd8+~+j8T$k%KQorOT*SPBu>p21D#8X@QK=bM;!w_q~-%ST$-Y?!twz`VS`I zU=hsebzzW_)MGAz;Y3lBHjc;)UCDa`GX7}r86G+R(Ns+{(^*N>A0ZQVVT%VB!)K2c z0*M51^d343OZcSwd)=UbDJ=$XIsX$ZI$?0Qc|{MGW!7hUA+9epr~pG*7y*p!hzJ#m zcH392DYn@d_*5`Kl-gkM?5NI5x;ff*F)7(Azo_)s3sc^3L5({vw#iYD_RL%g|eijiCRqpHz2O7!wowz9uKa%YEf^A28yn5b1J z?peo^@*-_gUj_Dbd)#z?&%H<(Sy!|K?q8XW7Zqngnxf|=Hdx6bmH$`rpf{D zP~YnM@o68iXx)1NGxuL=;_1iM<7G;$Ne9m@|2e7W#UnQw)>a|M$XBp{Lt{~;v`QBC zQGynzUjv2R>%HSYiy|43>oB~j^Fo=#VgA6*MHYZzqMFJ&+QH3FJ1xxSQuPQ>IpG@E z(`bY!?v&VbcJn_uRN}Ao+jk5?pd_~)mG}fks1c;4iWkm*{&`z~ zAZk)FeP+G7>eK$V!N)=5Y_21>B1JLi1(T_@E+mN(h?fzLn5XiaK;O84?;|5_X+1Z%H_&g>x&f!?74)$i#pxJ`Hs2| zuU2+Vzymd0)kOtdgJ@$pd{R%Tey?<7*dMnBCsF4NaUCUXXdW_CGcB9esT7%)svl5E4acm>pnQtnR4i0VFB9o!1e|ST!94i;)Gxd8=Q+*aV>2RDu@XFve?7{ ziO1rJIv)kM9AYulSqxSkDO{MbEIIN9yE75qa4 zlN1UD+ZD|ko0vPS(^<}o3AAH#gpxDsdX0F)D3U*CRjCxXY*Vm5zKzT9a7poVk8VN; zZOfQ@vq@Q~&oQP^J6UJje;gkM?GQ^fD!MYF6I%-dSL!x1@ z&Llx)=j3JAa=OyFR32VQ<2|P?UaUU@D4i=OJJeU-i^1%mn`E4quKsNW&NvCZA?uTF zwtzYG201)klP*pV+l24bS_n20+*-g`h3$km znV;P*LMvlgFzAx*L8Vp>Aw z|KilH8ri0FW5BB@*D6g$^3yynvlS?}q?`-wDOemNfy3cRQ&gknzK9hAxR*C9*$ISS z>N96t?8)n*RlfG8F5BsrvP)S8v6aj(N)Oi)>IaB#GrU;(eEOo*gmI6?XSvPZhc^S# zh@eolVEFVUkbJQ@t>#d1r5li{*q?T8=4KR0E377h92Y8=B&spQLO)ck4%OgQ$_htE zH|rif9xBi`)Lrjw|9*Q12*X%tiQ2R5&7xVMTzRkLKuydK5w0!flMnFMgnxwo>(jF`pGtNcvMqocnMSN*NA6v_ zHMi(Pw=_dW;}R&W8{3t#l(?VRRq`E9%DhO7b)d=I;taOEy~w@<5+7bsQRAydf2WON zYM!|gUGVXtWMX>QU0-{a#ezd@R%QzY9lU%7a?Et^ZNprXdFVZH4yneHl-@h0x}`%v zi}{4q&{2L~Vs% zgsaOFsvwz%X5NntO2E6HLZh>;WND-_Q_5fO4VqdmQsi{09^S)sT*f(48}*lK6VWlg z==BlUfPfRDj^5y1BBZUpOIaL?a}0aid)ra-=+H6HJTz`AjF*$e*i$?ukdaB}eD%a~ zq`!82xu5UK@t51U%SRmk(lu3Mp~2>&-t0Io-|0@`sf(sWMAGb&7&OA=vMjtEBh}u+ zL*=-iHCFpTx@G22$DP=8|BD3XUGM{2;TYD`&g4JU^S>{9BP&>DE~ft)Mgx3|DxMCe zjPgcS$}YByazxBbOpIcdPR=ewTpS#XGNyLsE*3=0|F22)|1QoeG^OovIgvZx)UTHb zq#Vt-L{XvP_kXiNXc0*`Sy(@3^GLlvx-KjsTW;r0!Ibl6+WLo}Pz7IUPfc(B-;R(!>Pew+Grf3W15{8uf6H5KSRaPOY1 z6zDKYZ@Xv(VC5_RV*p73|40y4r&L_VV`u%HvYN_w7%GSmFVp#<%NXVW2kmx2OF^db z5BDGPiZpl?%Wk-AbSnd}LS_mf%-Cv0Gx%XsX(xo;Fa_ir>|U&RcnHXmWJ~`d=^cOJ zI|S9`yav)Bsex>-$z+{nsAQdSC~k=dThruXk%4q#p!OBU!Oc=*{5_N(%|AyM8!RAS zCsGGuoogeKT{9HT~f?3A%}*zGQTG^X+zurrI50lQEJK5HywoRQ#6)n| z-*6gEy1&cB>@02Op&|QH54{g#{cDVcVZYDinNLwv$*sRrx2L_oENxv%ptQ5eDdzkQ zOS`+9+uN%~PqHeH>LC+fMmQ>+DQQG6_IF+P15jBbIf4S>em-z@N;%@l{XGwDk2xPW*q-J$w(aTZT>vv>& zC;RBH+imv&Np&M@CtYhzGss=xO6Aai_U|U&U>&qT@sG+Yaiq?=(h5WaF_|WUq z6J#7@{^@MqAL=RmDTopT%))3&fFoJeTe%qCJeT;76!B#uL6Y>}+z{wkNylm;8xT)o z3FH`_(pX;{9mg}%XN!(Fh_Aj=&Bdw68yulClrmXldiD9*u^yH`PD06Y8s$)Fpkn^q z;Y+ro0zBMUnWqg*nVSsI13}&at8|68SlmuqVk+*i=stM!&>X*Hqu{4%0elbj=--to zw^VWp(5Ny^;=)1G!+b&^r}&Wev6keu_rs1BB!-(rP=sQU2WPQ(t>HxVbhGV;K2C}h z5|hJ}{_V30@G$6Tkhh5#$RkVuk)4v~G&{iDKR>l-B)1~ds6SAs(uD1Wn6 ze5YE$jH-&qwX!R^n?#F`>q;P=+8yE_S>C0$_W$iN#U~*txFS6>N3o%OUKLUuP9t_CgwoxK&~(Q=*;ldqmiuk>*vXV zr{MTmWX?}cZ;6=kVjyCVrH|5iv*-!GQ}k6>&h*S(+V{&Nn*OYV{sL;9xCLRxD?X?a zGYSXpIO>m?QZT(|M{=gm$HChD-CtqbrnPYNb=yk6Z`OH==@=@^xD6K+h_51|^2R}1 zZZRIm2gI0qoDPyuKPN=mN@}Cpq}!;zY%z6&ZKd|O?1eaQPXG`^+u%zOQao|DZqKE@ zJf;Vgn874vi>Xzv@pkWZLvFNYzDnZ>Joc;V^!#SuKmqVPjE^pGZAV}Ct1skHDyOpN(ygnKBONa=xIX*IQ=0LOeJF|8oF2B!|ibF-K^Ma%Rrl#>D#RSB1#z+ z^d3r~@s!0s`YHdF4yU^c1)QT{qYYA-3=pr@)?!)i<~X9`lL!uCOs{icJJH^Wuw1=M zcbUg#eG{Mumv}705}z1wpJ)_Z81}fDtmIPmRGeF}dfEJ(tF&@yE5u*xn|k!h;=N>d zI!c2IYbf3fg8q{DH0_3zkliJ#;T;x1Ef4h}rn5e~;A5`~+w-T3Iy#yE-&VNELY^otub3Mj`azJRtqsQ49ePSwMi zIJCsC7MDXh^&{e$UKRukT=Nx|iosW?Hoqsis1baMtRfkzi~B22R+1^J6hVs+UY#Ze z-sYH#{b&`#{#)HB5SLRlE5G)Wc|+u+$W0AuwO2cfwmsfmr*uu{&4Mo?tkqjtFrt9j zwnO1f@AT@V8^~`ga0>rkTKZPsX5JIdDK>6929m(tj^-C48UtQ&cmN^bau=wJv4LB* zcPz1a7L$IouCu=Rkt3c8b>6d>db0s5Zljp!qka+kI7)}QMP^XTo+-)~AuCZc!7-#6 zMp7Gt0ekLjHc`V_BS9*h0>W(k-)josUa;STCnc z$J~}vBE|X_$prc3QX0|E-!c^KW`oMair>H?mncUA z!(&$!D`zIbGUQ#o2Ga{I&&?1EbMMfz0I_JG$K zzw{dyi`K*BzXJriINN6_WO%L1nMjNXWP`nBKi0o7T_(8V5(psLFk6V#rCiZ@#KxdZ z8xiq>C`CF?zvcO@P4`^kK?$O+!6!g9Tw$sbSgrGIE3PbC^2P(ty>r%#XraU$O9d|u z%WlvMx?A26YL#*cFXBzRkV(sVGtL6;M%iU7PMuN}3_0bI73^B}AlKVkqg7(xDMS5RmSY zmhO`7?rx+z9P;P=UiI}~KcDYEYu!6@XYKQx=j^-ZuDhSv_Z(*tqhmDfcCqB!gEdDo zi6Pp8Z9a#X?Q}YEJ4ABSc~UYY7%fk2@UYN^m|ZKPFmbZX)OWQ^e^AKP(e5Mty%qhg zq#iCA`2`*zK8?n+yA>GqedZ24)(d@B>DjmybJl3@<^*Z5-&Tb*mBWZ#HxOiqF?v_8 z^KyGl6VO%MG+tb)rgAd|Y>NRg(8n$3CoBsdK*LhPII5;tna}Ihct6mkb5_KVzKLiW zIyZ7?(QKBLXP|0avHn=BD>3GQ~Ba?)B!l``|w0%4aN`ny~O=KA)|$+7B) z;m7(W!UaXbWgK&8U*L z;08=ZnX&S!^u6L@bv_18AXd5QZ6n<@m{Q~<_`IvA8;h?Wcp-NC4&=*z&9Jol&{u0- zq%p3_y*t3V@ zm0Hl|0#Kc{Az6ElV<#J2rkWt1u$Yh{y2~Eek0RSy1`)(Ol1M}bb%Pe|Caj_u^@e?y z%#yXYXnpmLtX{=v{sY;3x`dUVY6%E*8&)105|JQf;bh!6N3=R}oMto-fW=?y$H+f~ zGH4@U$B#`_U_HJ^y0;dadiH2Dn3w*W#q=v!g15Ii+ov;GxA4xz1D4Sb;b3vuIXQl6 z9D+Y@uYlZts4=J{!GUE!`*kY@{ILcH0B|RVSUQ63*`zHE9Kn)cBO7CIv=u3=;4f1S zE^Z(v-(STG_m~C@lfvF@aFxTP@Nap4wc+ID{kz)XzBZMvD)6bWzifd&?g{V3kCsq_ z7ZG4nb~1GQOUIFTDk*Ja?f93b!!Ge_+&m!Af32;kY*B+R{b$@$BmMHios<9IF~BSMo&PT}ZmWMM#s&NXu?j2r za>Rd#{WQJL3zeT7;QRg|#`Q;!y?26F`31|t#mo2iLNND56|ysY0J1YeC9*T(wAimU zTzr3uDzqv@Y`9;xoPUfe@fyUZ|8nwpLG1s1wv5W&8pKO-2>UOg@eev9ALwVGasq$G z`aNU*U1uEAvT`7)e0cLk-;N@&>j5(Jyns1>33w{Epp{KFE~;fSp)*1BQ<$`{T|9IwD?b*5;BmB(6^pA*_Wa9D)X zq@eOr9V{9OM78OvolkJb!vThfmDtJssloE#Av=$IY!wrDj+x zA&)8;J}H(qlW};p zx)}&euOc!ejCvN)9}HHa47DS#{pvNPxO7B?yH5S)gXj`N%Oh`JEq zZclY?KkrOB6idI3lOXQKKe*i1F%1Jd|1G~holZKwRm)(iLCC2KF!pF7K z12Sy(fhjE^Tzky+o>kb`yO)(vmMJb1=0a!KTfo^ZfK^JuW@(N*Ry!+Q^!1DJUuXDbaC)iE)q&tu)ZR zW2V5AOQY?~8f_P0ng`7O%9byBGacEG^HeWP7kt& zcM7PIyGP*UP6WOXqwDcR5{g(Ww zgL`5go9>(DO-USPx2C$c^4U=(RO|)~zb#S`+_=}Ag1}Li_%4`W&G$V|WVjoYRq+M{ zQ6^J`>Yb&DlHvQ-|11ye15#5eF9fBjNLZ;@-9=sfRfA7Y3e zESaF82)l)<#P;e6@$jK6rd9a1g;|-{sDJy}C+h&>Bw)oZ2Xt7HX=<@Hc9gct^X9PQ zswIC5!n$pJV_+j9!g!mlO^Hh-jF$zzL0gWBa0`*JQiH1WL-N}4_4^~Jm!n$j*_rj! zAT$XvDF|03bT3yWI9i^6?=^`>H6WBO(G=P)(T9%}bYjf3mK&+4t!UV>+3v19tx!oV zsLXuN>v`!cm`5;Bh34zU9TDxVTa$_ckZ=`4BQdfuZ4o}28#}pn(@=mp)fXl^_|~SW zt9Tp!ZNyMb5z;-SgXgnVg?DX{p!ldG-9UumQ)6_xg;xKOeR#5HM|Gs=66>+kjh=i^ z;1(YTS;AKp=kfm45E8Ge&5ANHvno};aDylPK^wQBXJYdx*ywZ;-h}{o^f6LQLa)oq z`Ahos>!s%z`-kd>;5fz5V{_e`FcEov9gOEp@)J#cRS>x{v#PL-J(f8;JH7q}3`0Eq z;sZyu{%=pms$f-ECB9hR@Nv;Ik?PmO_6OP!lu((SdaTmWe^k^4G1y+43xh+b>Tvd8 z$9c8z__XZ=wLHj@up{1KM+Z?;o~@J8v0xMTs{x)@SHAoJFO*}F1%_M7zwidHyT%rE zHm_fDPC{@57G)Bvn%j03Gap`yKQ{|!GXoAhf9WTX+>({;+lpB?Tts6qdd;nq$R-KW z08G;hpevndS`awtU@m5w1lb7__FtmIymsTco>?rM4v=9WjwVOGdWeLWfIu)WqMzC& z;KiqfzRSAL=b~k_IWG>mzECamM{-#`UZ8Uo(uTZTt%_lOuk^~d^e97FK48?dRIZ$+te>=Ezp9@-A#o;XNSoje1vBQA}Bgi={NECLH)g+9o-a zS!Z@^@SIi{esp7Z2H-+0GczG2O&h$>fW7v8r!tS|X~kWAP)30MZ2zMNPT5vX0(6d6 zG&?ZU5fc~P4Ihc!1Bt^@~MI)RUu7nLdaKb*sla=pC^EXXO#_VY8 zX1R6MOT>J?nn?0`C`TIJPAya>)WP;$4wn(cuYg(HdXeknn|AM4n7DzlewhG%Erwa? z4_D`6-mm?iaJDOR;C*|fs#`!qf!_gzR?$-m-F@06Xz;AdCOBOYHwp@;c%WoPC4`>- zd|VI$?V_?i`lQ(tIGlNth#R#W;R}GI+1171L!(_GD!t#d&=@MI08Cls4!0)Xb-X@-az1@}}Xbo)46?XNF zr+(ti%+AS*(xW)6%}40VHolGAmJ$KEP?490I`XlYt{Czyn=&M}Gf+oHrIyz6>E1n; zDvMBeb{HMxl?U+c%P2QXzD9>xaqannFB0bz%kczbBB>al>gCfQk~WZQ2a<}(Xft+s zp-*Erdg>Zd^0a~=VfdytLC~v#l2Jr~Hq%da5>`AsJ2|t}w~D%X(b3jhUy~V9o=+W4 zf`;wgsh&8Tm#zqn9?HK`YzULt6j)cf(0a1RtV7bgbGKHTHtGy?krA5M$0NKQd8c<^ zlx)1LJf`efd8D8X&5%9Z;StVf_;fr2we-ZEZ1^&SGg;qK6JFR-#UfRsA6J@0H5YZ1 z?>j{?UZ0gKMWo7G#Bw6KW$g$FN1Zt>(ls1@4c|!o66l=1Jl;d<_qsv7|FU$c?2Adx zg)#^0ar*hbFy!j=(g(Yi0xKZmMl*6h^!(G#kZXJ+^E%kDzM)XMO3dqV6Z<}}74)Ge zG*_QiLSEHS^SA&^Njg#OQ)RDG51JHU{>%j1P=2)zoAJ7~ZV8exQQuRb-<$f`r|YTT zsYqm2i>pv=r=CajZ7(YXN4rmtIr;+Yg+f-keeXroW+a$5aq#SxWXjqK;bf8$;S-+d zbW%kQdkupJW4`74&jal$RsL-tRv@iVCcy#*S}sFx3FLYt$XtVsCy#MTzCcBJ0c-bq zE_ogzcy)8VWWb&CX@|?RE@VGMjCpQp!c{Em(Wo_|-IsiWSq3LapdH5KR~KZY!4w@= zcT|T0HTG}3hxWMZhhglE;LwR8>r?K0?HcOwwehtthBLYN6)m_1GgQyT7zY+a)0+J9 zfv$xRw5yX{)&!35cX@FgT6^(V9>vq`!t&3%gg+_zd%^j8ee}eXkc(!9`%r`;uC^&2 zov`m(!JI5RUt5Oj)i~wK2VT+9=+6ed{^q`z zBSkl1pY3J{3a9*)CoEgKE@#>c80#%a?aWEXg~IGM9>7elLuz3yHN=(mZu6C+!2%&G zSl@Lq36bxdJC&Dis}Nvgf$<#AD~`$zK6W$;GlD9zd-vVd)p1_ST>W^tuMI4Y#rDBI z*Y`(iwu2^f+VR@;++8Gx*>#P5>H@W}PfW>CJGGr%$U>L+$*->uUE;+HzYbMDCQW=x z#YZLa$}nuE0piAf%|wbqByO=qxv7a$M$;Q^%QEx@29g`qTG9iJde@^=3_j~Yt+%Ls zaCa3C=d_}8T|o03mE#?C{@&nvemFMZPI^$EvsD`3j8Qd|Jwrd8+jF;_(ocUeAZW0c zdtlX7fIOsU1sLyv`Fm?HP8;h5p(8h7Bl z=(hYa6;=6r05fSMK*cM%H+V!Sy=F6@`a9p-<9-oh>9TH$eb7`iX*YW%R&h>qTgxNm zk@z^$5>MmcIcNEbgox@Wa2!RBnm`;I-VH;UDexd6f$#t!5H;c;_f^EH_>TA&y$n{l zkjZzZ5P3rbY1V39U8!(L_3p6KC&>v?LBG)?nljd|f=_!qnF=*aiprr10^AOo_@WMa z&7sPcq2k+GlWT`*YTK+fn^=M8O|`EJMczVGZqC*X)sAL{hO)m)hlulUKe*N4xyI3L zKYhh^x3HY!ra1euY zhD9p*EuH+Co!?8$3jyiLzYyaAvj0eq@9PW=5y_bFA7a2i<+;&hNb&y=1O7*u`Aa&u z2RB+9fF${^#DISwwg^CS`Hk2g)e|oeQvE-~I5>ZZGWQZQ6+|liHC_%LUM}AMm0 zAwWV1>25==ln_GE4EfcDkLM5Ym2EvJAK-u4a{n~Fmx}uUiqXIL=&ow$MFSpY6 z5=ETqH#{z0u3vaOAl{$gzv1zMc>nvf9F=h7sEQQ7;c@bE{Da4SS3LE1$<%LnJfJ`E zOBF)pC;1JJo9}1U6%fG3#eEMRi2F`e`OoVZ{y|QxR2l6b>R=czl%y# zR}^>-R`zJ;uc*{wcg7r?cN43CnAkyd?Cf+5Yzj8Ul6S%_fL@Xx$j)&$!|VUCP_Z|# zwFMiqNgG%?fTQQXq5`q*@K}CWa{@V|8JbY(A$R)IkNUYg{C~9N|6M-E%YAoJ{;Hni z;rba`08T#kAD63pPT23NR=KvO1MX9tx8KxHsF@9F_NWbgQ2L432$3*add(oGfSqLAU4?*czA0Xq`O=~c2+4tz1tO;Sl66<9h~XcDu|pG)A3bp`hmnA(=OmS zsvZ$7K&7)AMef~~U?5jfWUK(L%1kT))r9m}jIc8W z{&qTsFH^k-Yf7;4@DQ{W`CC}VBW7Ou8O1Ei8!WOQ<=c}A`z9wm$UlOED7ujMJHNO< zqe^H-L*`#g#r|A&_L_ME1H&7!Un2&FUruolq>&bgn3f{;4Zm0NfKW(v4J23ycu%7I z6h16`LCm-=<)zm%##S^(w3Cc*|8P=AVsX9=jCZ0)rm86=#*8#>bQnm+3FGW>h97pl zV465}*ga$rIH)*3jpB((KuYm!c6$>WZ_3}EpXTNy7e>uooLsC#H9TnEGVLiHgL=3s zQ6%&B?0Q_DZhX5qv>ZVge%-;QC+O~Qt9v}7s6WxiRvKhd979HCV;Th2ye^wc;O;q| zvX?81N8Pnot4|!?SKE(vu(c{$BNW4?P)jEk1ih7ANT&)weT;@v2T9VmQs0)g64jrCPmS(V`e#OGbPY3K6|Gv7`)rdDMX|MlDT?CR!qCnAMp2TXdy)$??#( zZ&qMFMRz9>f>AprAuT=Txc6gOlT3|jvs)LHWiWIsovyLGXEHqStBuVw{YJ=w;%%sU&~X?|iqfZ0gcFD;la%Jy87g!aZ4+2^W7vGc zKDcLl;ht(>oP)Fo1i{;W8e5-8AHl^_0Je+MrJ!wuk$cY9o&+?(OA!@SJ(aO%iIb74 z{A!7e#M`SM+8mL~Roof3zWA1Oxkx2WCpLu4by5?ItEl9~Gg&BUj(w2FF37GzB-PM_ zK+cxi3T+@Shz=H5^EZlevIOgjYGw%3_G?VL-+qgoHZr&s9NNu(orHHuaWVP^Yd1Nw zLgG{;U&4u>&dL&oD7OiZXVvQo{Ff2Y?;0FuZ{(HGXyH4t0TG}q9N*ETj92^1UyZrt z)mqpik!dlFlfvPPr7yU$fMH$vO2{i;%Y6jbIEx1$%^o-=v9n#G3<}3lmpBB0VSTxp zk*KOk!>)|AP1~zT{qh3cjHx#?z}X&7T7{!Wyjp8veKAt65~bgN3sbyV6_&DN)BvJV z_aArCntRK-kUmY~h$R)mpS*T8o>rQd5O;`|5tb_j9+!e>Hip90nl;BljA#9FO%Slb*) zehay}x;bPEeYW0HI*?}&B{}1@Ldx^8yrl0V;Um;xiwe1qZ?Be@jn5w-IC&ODZYhAjfUyRtk zJRV-A;hH#63)C}jYZtoG$m{Oc)m+$|?Ma%%ORP;%Hz+oWCa`kcSw`&6!lyl1ZN=m( z-_skqqz=@J2mrIl%r=(E?g|*%Xw+b&tb|$#0&u$qPhT8|;03H|Jf*mVdz|(-mb%kO z1TxSh6=N+jV7$SxA?(SC^SZ>RJvFDJfL~BTxv>^N2wOg67=T1^2<%-d$`Z_#NL9iO zmqiRXQF}5sU)zuQ)u_0_WNTtvt$+3i73A}$kKEWVJ{H(1g?S^T90ttF>Iq(7U+0-# zue(BUGpn1qTZXnlGP-!ac#m+^ot5yHcoDF@7zkqfdk3B#x^ybZNS63H@DfN;x8edv^$EFnf@LLkg69{#p zT=r~RoKbG@=|gpfX*EZ!b-HBJR|x0UZ(cMOm^wL>$FiyQT;w)*8{{2d$YDktMR~q% z-}5(;7IHtnIbFCxk%m5u_Z{HTyoR@YfjouByrp4;RknU|eTkiAKkM~JE7Ug+j9JbxKkCb}A}ugieN$dFKN=5>b}Nms5}ueD*#4YTd8;>eYd)Sg z?AC-;c4I>a5fr!<9S^mVnX;BKZVb(`Q!ldC(mdto{2J$1Ca;^ur7YC^JHei`RY(Eo_TX1ov7{2C2eZB2np7z7nb47vklxu(+2 z`Roh1eje&xZbS|Gc7_fY9u1Ir%cqWyRj=)%+Mm#$20)=_$Fy}?LOLeAu;)_KB$943 zvZEISIG0aL*hUrrxGT)cQ`((7wB<>XP3}0w#oB=;-_)tCDT^bXT)=_#Qx;HLpIXl4 zTH|)^P3;Hm*pTb(kbTw;JL3u4Nv>^o9NpK@ao{PtlDr!_xF_xNmMpkg+BENjihi1PcJ3Aak zc|2N671>ta@yOLphN-HL#>$3r5TgfETf)%o?OnJ?Tiis=Hf<0Tcs11YOe|u&H_R=k z3tKsq{e9uJR{C-)+x9v{Kaz>Wr|enfwq!MHcssc6xCU6TVy^3!$6vx+5AhiDnDQ5i z*eHItuOH|$-6Qsi6iGHipTrZMWa)vL>xlkpN&4(t5hC?&r`m!hQhXsQGP2Hj z+b&~x?bTjFte2xTZ-OkBlzDA)`dG^?*nFBZB`__|vcc3C%~S%AgX}JH?n|Lux#CO- ztEK0a3(2&XBaTu68L2syW-9EAB%r*Nn%Ba z@0!cXD@`BSwXCm44l6!bxQ32clk2B@3|&L|HZ>e&Px6d<5fbAK_UFa_PNU_4>eAoQDXYM$4|A=Fuy^|9`^jhyEqkIpzNTgEqWrFBA$CvW+5;v5TF?%KR8rul#izn)8tDO7 zAt=QhWW@H_#gB0W8RUF*Vj}b;7X`WmP!edtfrIVODtl0TwVrolkyImafg@f#l5j05 zixY2=^%SR)CC5XH^;B@ENGyzkP?~ln1ZzW{Kgi~P3D}`BpmU}q46l!)j4^amVQ)VL z00Y1~7e-8+Eel0cQ^(drQjdI!rqo7~BW#A@wGP=ppAqW^1bhnG`x!Wb=-R+XM4?*^Dyekf?XqF!@PE|`i@G2;W zwHk`9A4v%NGes-CMa7MV4x--82=kweTH^)Sgzc%dG1x_$9l*s2(q&UNcLV?RiA`Ob z1HcL3&}DmJW8--D&0h<-ytuP9vAH|o{rf;tTae?fd`3b{oLh=hTwIEso0nZmN*W}| z$HxKW260RAhzSGkHG%vu8{Hpz$=!2tyg!7*e@WsWM^)SCsN%Kn$3_zk1no|Symnvi zG7;!;FpTh>BsVQhbm=m*?099k;*tWBNePG6nx2~CNx-m7k&-3=H}qf#@*F`-R`i{> zl;{I|oD@-m`Tcb0=Is9b<$R(;gTsRFgXU+fzB)y=d$ppDpr8>{DtM4BqE!MtTRrp|)Ntl@uIeW8~wU{Y#?jSub!!BjUHguwwdm1FD#L&e#%0sPGKR7Uj8JbQv+iqD{|+(l z&$HOG$ywmFtI7H6YMI zJbpPX-jbsC7PHsO^ecwI89doJtp;3Wlegc|`wA8xe5{ORmJ$h(Tg~CX4qdV$1A|5V z-ATCDUwN`iB!Xg{rXk&9YVq>MT~HY|`-_%M>?|hI9`~l^(QFfQoGk7-f2&DmBKU;v zF{C5b{xfOxJg`+dr4Hs$_p-KRhETP*Z#|iadw}1gw-Z?5iHvPm_WLx;FP;>6_N)MD z=WQ)kg$VTARo$neqP#rV*yU*hS9N2H2AXHCr@e4>k=iTf2O!JVo~k%IE0ete%(Dx_ zSQnj#IXzjU!^PR#9vY+Ob{!C5lcnqT6$VNjX(0hG(2{dE9m~wwt(R7AAsyfpTzXJd z*J&CNda_8??K^P=kG@17f~6cM+Bfp3XOtm$;p5+Jf_* zmTKh(Gs$Jr;gFS+*%zo22I0v3aP7I4zbXLwRB^k3o!8Od&R&(!#O= zvg`}p6f7>!`V>UlWZGJ2nub57igq&moZz)L*g3zX6L+e_j(IR?i5x>!6*9 z8kqgGM5my_a_eAI^u5WnW;WX*uJmeU+OlgUIzvhgrRP1pnJmi)F_R=bWs7?py;dq$ z+Pku>ay7_?Yj|H&W#*WsL6vG)!&^)>!fS!}0>SWcv$lW7 zH>ygbCT(=sc;(tUajK&Rc5BE|i3Ej$h1osJ6SvPttq!mE@gtdUit^1Uz7jB;DmX1{ zH~ItGl zksYk(X01+F99<8>&72B$Wzqq4QU%>_W<#GI5M{_M2q0V4>fu{VQfk?bo$ZB(rdvPW ztEmGvv@BQcUb{d}Y zr+)LGYekvY?W?kOSOM|wIYk+dW(LeaF;DnAUp(7_z^{uobG1T&)St=8?GM$(f_e3v ze=CdGE0vPaUJ6R0#C#j_=H{AU@4xTh_|hV@U2pz$tUs3xPt4F*$cQIRK5X#DkQ>xM z$pXJ5Kru>fjG8DGQsI0-;dk-~8;Td%q_2nI2RYtNp11gqpzW6XB5aR6?&kxVOm~=Q zDLrc5UUGXXmbR9O`a_zyCCrzTRZ&q>M;xUfxLzUhA z)mcBNF=IW7qC+Igv^C+YrpyuJX=GUm)ZY>5TC!8N-OFu{D*ZQsM`3I~Bqq4rAqF0r@nPbREU*iYS) zSJ&u&sDq2=t&6r2OO&ZCRQmuc1_y7V+$eJLlF11)pZ8pUX#7SDE90P-M~wnH;S#DdCnHm?%NW7DFXy zM@lnXrG&3OLgm!8{9KwfYpv_3eJl%tB@o%baMOS%^rO*I+vgahKLhYfuQ7I?;D-H) z&3~7}nJt1aH|rnL+i+UfJ3SUqA`7MWV1MM&J!ivibaeW}O3}XWEj!kL?Zu__Iad5P zmqhUaMho(3xuWF=^sOOG)f5U!guam-s*xQM1DA0$nT@MU92Y`+wi!n&F1C9iV6n(o zxFA$W3%dF-0tcUG%NodQ2%E80ux$K;5LdCg)`Mdr`c{VR1qsTwm6%R!&ZEwG7@7Ph zQ6d5-o(BdbB-(vs@(31HhX2S{wp0)DmHEYxb z(oRcy(=dosCnQwK#a(#?5$#gK1XoAfO)G83+}(O-A^BkZKo21K5UD^R;N<`l3DpB@ zIeTc%MCw3zmKt&XX^iMXCu9lIc|a#KJ*J{ML+`A#0|MmFr13GSa{XfAzE>>$ zT>`lo9ifS+B5yR!cm=@#YCEg_<*LnNro?L@A(fUjv2kzBOB@k*VtZQ=0@=2%vjZJ8 zob1~$Y5`b*55B~96aKnc6_+qNI2nE)EhjKmFtA^H*}bUuhIDQfnD+~$SQhs5NWU{Wj5 zEE1YbH64o?fHA*N-OBq-Nd@EeyzBP(*BQ6*ZyS&bVFY)+J$|9=ym1z#K@*!NeyIce z9*xlhn=zQVw<`sqg)Q9@f31NSO}vdS|I069RWr)@FDO6fO2mLSNJVW`%&*Bpn(m21 zgx?sp)Na)^?_`;^l83SGkiy4zy8twn|1vZJdn!_vrJD7g=fcZ>vTTYuX~1ZUKGEu< z(*T%}LH*t4L_>Y9%u+uZ7N#x4(&{!h!lR6=><_V^JbTvBshhre#6idH6Mcpd10bHn$us9DC?jyHQl^y4PbhK9 z4)B`;l*sdiqdd=};5(Lra3nOC@TH|smF2O=dcJGYjTv(v^WnvdRi7w>1%S*ihD$RM!~T(>`S!26WaJ6Is0eT48UHYNyY5gN+$ z1PDqQ%SkKPx#AbGT6c{F3yO5xD&46ktkYkq68VXu{}Cu{+}u_x0@ ze3hQe!ic_j;Fj&5BZ6@U6ra`Jv*SLKH=z# z`A=XbJ~@^FbGklJ933w{$Bv8I$bRCl%@oNh$c~p@@yI{4j}`%t4F*9b8@hF@yr&i& zt?7f_A+y;pN>67=c*a!4ws@R1w!exAp?W-JKOXdi zh~v?bpER(Expvl@ssF;zm0|>}lKN|%dQQt{84!3e5ff!4F`!+@*^eI0yz-(?GD_HZ zYl?9*ylC{n47*{6_q+ zsFqdIj>7;O1l{W_X+T>0XV9|=Wi|{qq8xwKF;OoV#NAmO_*a_+mX8sGf1Y zY5T~Ex4*aUOkJI8TH^3g?NDM)qf`&|)=_y&6eLIen^n;TEdy{!J62Szbhj`LVR>Bg zAa_;y$KhS4n?H_e6jmqcS$TvqJ~u<%QB+sl-yxLC`UK&SP0yPkhJO@kAqqLY+IFS% z)OaK=)kliK49v%`Dp}E(ffiw#xrL0Zb~!Z_Gpc~poTt96hC~{~PbqNl++MZB(flO! za)m#`OjbHRlMblX>DoeAX-H4*c`O-&TG#$e|Ax96RvP@WYZ({C^i8xl|h=09< zCY})ks$5ycko_?!Yy@7F;!tyAN7!N%cb|{gG#R9!p$FigfY~tDz}Ymy&~44?*!?&&8l1=@DqlKy#&M<&3e@hcOi4r&bX+NZTg8`N12VFi=lFa zOti1N0~>K^ljy`D>bm4eQq82gc3*0=(4o~z0FwdYLT1cPy{F?+Sx;sA#{noq*L=y4 zD*2kl+5$kw*OURv(IePZX>T^!lzqYP?1%EAY(wphLOZAE5EI)~71)3jlohXpw@vQ> z0C@X^-fFI)UE0GJf(e__@5H9%UdC@f!_$}Fp04W7``=t&op z{+gXKU{nRq7Jn6s5d#eEl~t)aDjB!}1Y=v^?zGOl*H(+YOP3lQ2#<2jRSC7cY)n$J z;But|m}MGgpGn+;sV8?t98kV?R7eR=@~`nJz>acwuAcOeO_1@;`Ns(Bu90H>cPaxK zQ-EkXGw^=Gm<8nwc1uGICmM%!XZXPt@r7ENdWO1j>x`}|ob@Rh(hnt8Pkq#clznVL*YLHi~DH63v4!wp-Iu3UatB-{TM`{k3EZAeZ{*){$C37s|L zYGPxRdsM8yVJ5@4E~PzO*|PgIL8_2W8rLKqF0Z@%R_IA34p zn;L}Fa3x1n+YNPr$q4RrFYwtYKU&|Z4~@H2Hq8`{uO9iJQY$0hzV*cBUR4|hnf-{w zuM#mN1Z2b)V)UX>)ebz3q8hnWA`(Iah9dE)fTe{}Z_jgcrJ_koHal*;uWQ@{ z#P%KEn>`NvbOejVEVLmnCS2|#=UVwb9E7lrTQM-%?Q@NWAy5Wf(^GR;Tb2$xSr0!L zihXX7$cm*UkbiT+115;bCj_m6K$M*@_}EgsbT|w?TKjeAhqiSdq8>=2Yi-Ww4;qhr z{>}rf>olCYxkc_~%cY05|MszlS~aH0sye+^oQ-YjHtby8R3r3Uj4{8`<+hZ!^VwzW zCBlA(aL!Q51Z(oOi>m71yG9eNn&HrI!c4l_A|A~>CjF2Effs($*w30+Q zg{gOk&~A-Y`Mg5MLi#)`rMxg5cK7j%>b%%s_CR?~-{5Z@!r1(8El*X+0uxRVzW1i@ zHVQa{b$NG6@}&Ze>0!={`25|HzH?o-N)eQ7hDMBcY>g2k)rgh^#H`cLFlNpBQOKLpF{y1b@)Hly|Z1+a42)_ zTu|}WX_qWk3nh~{#TG@wIgtq7r1AuttSD?NLs_3wGSk-Blbbumf%RFQ)bWe6%J>m{ zKhl<7KPGw*<g;rCF*3~u3ewxq<_BEdwkk~YS+#Pp3(cH&CFIuK zC}dK$v6ILUAw_*>)e~C}i%H!$(+x9Jv-7(RV=O4~+|>u6@=^@c$Tq@|C7%RQ8U7O2 z$3VsM=aMA}r|1r2pw^MKxngTtG4#m!vznUyiKGg$^-5+DZI2+WHy4|kwhB6efI&IP zz1c<6Eaz@=*0l~kqeA+iLTQ@QkG#__OxIL9#M5&Z8F#0rW8$Q%4Oa;6AQ9sd?y|zi z>F$iHfid<5x~67}d*D-(Zb^Rm!;Uj}_SV{r?i}6vAcUp~VEjlu{2j3_qS9W~90s~E zG|WKy>pB^>1=%S+*5}~Ssl|WLq?vOnpf}UPrFWXt8xI@5TN`;=e_D5;*>Hhj5T=s0 zAl0y9eO{YC=UygW%{0fgf17IFa66Ryq(+D(AGy3|n0=T5yMrZo5H$m5>rl+t(*5za zC$c$1?D3r%aIJtx#xL4q!!!Y<5Mt8GA%?i_-$W)bWRV22mA^SQ9fiRw9Vm;m_zX0QoAW5Q+Ow{L?=pnq zli93)e-M&G8ZqZ`D3w=D<#{9%yE;BD%0MZ5&CHTeP=Sv_VycHZd(y|O(C5-p^vMav%-;98C?pNwMf;E5RI<=*GOCW~o?(`V~5t!`7j>kPB1 zK@lzn>}1Zvn{pDznK9hXCUi9dvOHe6d6PLYSRizdp4%gmZ85Mxkdi|&WB|)SDNUSG zyo&?hI65(gP`P5Z5BAc@9N0%$MkmD_>EazfI#h4(ov^nAf6bwI%RI~(oZc6x0gpi( zdgn{g<=BR~pBGiL)3!SA$)Fla0YP3=>5JoSE%R>Zn_UQY4zg&2oC)w-4`})A!MnPL zf)=#b{kHD$t1LIy7jfXi~J z5zS9PsRKhm(9SA{UWMd9KrX{Pm)%P!m5O^N&7ixG@|hMz{ux^hg{a*__OZ|li|fWQ z+$rI(gmHx=gKMd5Q_`3K{nly>yTMtnw4})>mWGNw2+TOOZY7#9D`RxZf5H+OHa`$N zf=y#2_01xB%l0ATX!WF*gNXlx?7;Z0&gNG2 zgX~YqFYl}68SbMsItLFQO^uciB&FGK`E4$y5|qq%?mW3)_?3H3@5tt-zHhFL?*mePr9 zgBd+q+T3!p7a^zg7ZBqlybUv7yr2qabijt-<-L|oz zivbWnPeixw5?-VS0!SAj!s?!zFDx&qIzK;El+=sA#O&OQuL>99l69i`nuC7*rUP=J zNv7dg=jGnBr3DrH+YTp1K{~v)xje|sROUrP^#d}|_$Q07M$7W$F%5#^eX2b71DXzM- za^Rf#;V1j@oa&ov9aAYT>7fZZ?+>WCAe1eRev8i#Q2x`Od4BY+{CCEK_JQ5hkW+Pb zShK)uG#@Tot*;`UK^w022Hjm5X8iXB-zQs1?=^`UffL}g^gH4wBSd1eK_IS)>zc=P ziD0hpw!QIc_pq~8rfHe%}PZ$|%h9R?MV!3H2fVp~c9 z+fY~=HboxpL~FDe?m{j+y?l~!n<;<2dUbl3CoVsrFzEG=v9a2xlsM!s3E--djs zZfDZetg%|Xo_fmtu4i7h76Z!EJkmk`;{9{mq^S1EWzLBDSFbL!{iO69cUZ`MqxfK@c7c#n29gF$~A|EAN$YI8hLqb{>W+o$7^ImK^y!ir75Q4F_x!>g?O1(K&4 zFksYve=c$-tH-FCMrwfC≥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 T6mqnO*gzmE4UL$BIO_iZPc5(g diff --git a/doc/ajt-devel-ltja.tex b/doc/ajt-devel-ltja.tex index 81309a0..2f0652a 100644 --- a/doc/ajt-devel-ltja.tex +++ b/doc/ajt-devel-ltja.tex @@ -1,1275 +1,1277 @@ -%#!lualatex ajt-devel-ltja -\documentclass{ajt} - -%%% Packages used in this paper - -%%% Font setting for \LuaTeX; this is extract from ajt.cls -\makeatletter - \if@print - \RequirePackage{fontspec,xunicode} - \RequirePackage{luatextra} - \setmainfont[Mapping=tex-text]{Palatino LT Std} - \setsansfont[Mapping=tex-text]{Optima LT Std} - \else - \RequirePackage{fontspec,luatextra} - \setmainfont[Mapping=tex-text]{TeX Gyre Pagella} % \simeq Palatino - \fi - -%%% LuaTeX-ja -\usepackage{luatexja,luatexja-fontspec} -\ltjsetparameter{jacharrange={-3,-8}} -\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.92489] file:ipam.ttf:jfm=ujis}{} -\DeclareFontShape{JY3}{gt}{m}{n}{<-> s*[0.92489] file:ipag.ttf:jfm=ujis}{} -% quick hack: monospaced Japanese font by \ttfamily -\DeclareKanjiFamily{JY3}{\ttdefault}{}{} -\DeclareFontShape{JY3}{\ttdefault}{m}{n}{<-> s*[0.92489] file:ipag.ttf:jfm=mono}{} - -%%% LTXexample environment -\usepackage{showexpl,lltjlisting} -\lstset{basicstyle=\ttfamily\small, width=0.3\textwidth, basewidth=.5em} - -%%% Verbatim environment -\usepackage{fancyvrb} -\CustomVerbatimEnvironment{code}{Verbatim}% -{numbers=left,xleftmargin=1.5em,baselinestretch=1.069,fontsize=\small} -\CustomVerbatimEnvironment{codewithoutnum}{Verbatim}% -{xleftmargin=1.5em,baselinestretch=1.069,fontsize=\small} -\CustomVerbatimEnvironment{codewithoutnumsmall}{Verbatim}% -{xleftmargin=1.5em,baselinestretch=1.0,fontsize=\footnotesize} -\DefineShortVerb{\|} - -%%% Others -\usepackage{mflogo,booktabs} -\definecolor{grayx}{gray}{0.85} -\hyphenation{ - kanjiskip - xkanjiskip - Okumura -} - -%%% Mandatory article metadata %%% -\title{Development of \LuaTeX-ja package} -\author[北川 弘典]{Hironori Kitagawa} -\address{\LuaTeX-ja project team} -\email{h\_kitagawa2001@yahoo.co.jp} - -\keywords{\TeX, p\TeX, \LuaTeX, \LuaTeX-ja, Japanese} -\abstract{% -\LuaTeX-ja package is a macro package for typesetting Japanese -documents under \LuaTeX. The package has more flexibility of -typesetting than \pTeX, which is widely used Japanese extension of \TeX, -and has corrected some unwanted features of \pTeX. -In this paper, we describe specifications, the current status and some -internal processing methods of \LuaTeX-ja. -} - -\newcommand{\parname}[1]{\textsf{#1}} -\newcommand{\jstrut}{\vrule width0pt height\cht depth\cdp} -\newcommand{\imagfm}[1]{\ifvmode\leavevmode\fi% - \hbox{\fboxsep=0pt\fbox{\setbox0=\hbox{#1}\copy0\kern-\wd0 - \smash{\vrule width \wd0 height 0.4pt depth0.4pt}}}} -\begin{document} - -%%% Do not forget to start with \maketitle! -\maketitle - -\section{Introduction} -\subsection{History} -To typeset Japanese documents with \TeX, ASCII \pTeX~\cite{ptex} has -been widely used in Japan. There are other methods---for example, using -Omega and OTP~\cite{omega}, or with the CJK package---to do so, however, -these alternative methods did not become majority. The author thinks -that this is because \pTeX\ enables us to produce high-quality documents -(e.g.,~supporting vertical typesetting), and the appearance of \pTeX\ is -earlier than that of alternatives described above. - -However, \pTeX\ has been left behind from the extensions of \TeX\ such -as \eTeX\ and \pdfTeX, and the diffusion of UTF-8 encoding. In recent -years, the situation has become better, by development of -|ptexenc|~\cite{ptexenc} by Nobuyuki Tsuchimura (\hbox{土村展之}), -$\varepsilon$-\pTeX~\cite{eptex} by the author,~and u\pTeX~\cite{uptex} -by Takuji Tanaka (田中琢爾). However, continuing this approach, namely, -to develop an engine extension localized for Japanese, is not wise. This -approach needs lots of work for \emph{each} engine. In addition, if we -use \LuaTeX, the necessity of an engine extension is getting smaller -because \LuaTeX\ has an ability to hook \TeX's internal process by using -Lua callbacks. - -Before our \LuaTeX-ja project, there were several experimental attempts to typeset -Japanese documents with \LuaTeX. Here we cite three examples: -\begin{itemize} -\item |luaums.sty|~\cite{luaums} developed by the author. This - experimental package is for creating a certain Japanese-based presentation - with \LuaTeX. -\item the \emph{luajalayout} package~\cite{luajalayout}, formerly known as the - \emph{jafontspec} package, by Kazuki Maeda (前田一貴). This package is based on - \LaTeXe\ and \emph{fontspec} package. -\item the \emph{luajp-test} package~\cite{luajp-test}, a test package made by - Atsuhito Kohda (香田温人), based on articles on the web page~\cite{joylua}. -\end{itemize} -However, these packages are based on \LaTeXe, and do not have much -ability to control the typesetting rule. And it is inefficient that more -than one person 【one people だと,一つの民族と取られかねないので】 separately develop similar packages. Development of the -\LuaTeX-ja package is started initially by the author and Kazuki Maeda, because of -these situations. - -\subsection{Development policy of \LuaTeX-ja} -\label{ssec-pol} -The first aim of \LuaTeX-ja project was to implement features (from the -`primitive' level) of \pTeX\ as macros under \LuaTeX, therefore \LuaTeX-ja is -much affected by \pTeX. However, as development proceeded, some -technical/conceptual difficulties arose. Hence we changed the aim -of the project as follows: -\begin{itemize} -\item\emph{\LuaTeX-ja offers at least the same flexibility of - typesetting that p\TeX\ has.} - - We are not satisfied with the ability of producing (PDF) outputs conformed to - JIS~X~4051~\cite{jisx4051}, the Japanese Industrial Standard for - typesetting, or to a technical note~\cite{w3c} by W3C; - if one wants to produce very incoherent outputs for some reason, it - should be possible. -In this point, previous attempts of Japanese typesetting with \LuaTeX\ - which we cited in the previous subsection are inadequate. - -\pTeX\ has some flexibility of typesetting, by changing internal - parameters such as |\kanjiskip| or |\prebreakpenalty|, and by using - custom JFM (Japanese TFM). Therefore we decided to include these - functionality to \LuaTeX-ja. - -\item\emph{\LuaTeX-ja isn't mere re-implementation or porting of \pTeX; - some (technically and/or conceptually) inconvenient features of - \pTeX\ are modified.} - - We describe this point in more detail at the next section. -\end{itemize} - - -\subsection{Overview of the processes} -\label{ssec-over} -We describe an outline of \LuaTeX-ja's process in order. - -\begin{itemize} -\item In the |process_input_buffer| callback: treatment of line-break - after a Japanese character (in Subsection~\ref{ssec-line}). - -\item In the |hyphenate| callback: font replacement. - -\LuaTeX-ja looks into for each \textit{glyph\_node}~$p$ in the horizontal list. If - the character represented by $p$ is considered as a Japanese - character, the font used at $p$ is replaced by the value of - |\ltj@curjfnt|, an attribute for `the current Japanese font' - at~$p$. - -Furthermore, the subtype of $p$ is subtracted by 1 to suppress - hyphenation around~$p$ by \LuaTeX, because later processes of - \LuaTeX-ja take care of all things about Japanese characters. - -\item In |pre_linebreak_filter| and |hpack_filter| callbacks: - -\begin{enumerate} -\item \LuaTeX-ja has its own stack system, and the current horizontal - list is traversed in this stage to determine what the level of - \LuaTeX-ja's internal stack at the end of the list is. We will - discuss it in Subsection~\ref{ssec-stack}. - -\item In this stage, \LuaTeX-ja inserts glues/kerns for Japanese - typesetting in the list. This is the core routine of \LuaTeX-ja. - We will discuss it in Subsections - \ref{ssec-jglue}~and~\ref{ssec-jspec} . - -\item To make a match between a metric and a real font, sometimes - adjustment of the position of (Japanese) glyphs are performed. - We will discuss it in Subsection~\ref{ssec-width}. -\end{enumerate} -\item In the |mlist_to_hlist| callback: treatment of Japanese characters - in math formulas. This stage is similar to adjustment of the - position of glyphs (see above), so we omit to describe this stage - from this paper. -\end{itemize} - -In this paper, a \emph{alphabetic character} means a non-Japanese -character. Similarly, we use the word an \emph{alphabetic font} as the -counterpart of a Japanese font. - -\subsection{Contents of this paper} -Here we describe the contents of the rest of this paper briefly. In -Section~\ref{sec:differences_with_ptex}, we describe major differences -between \pTeX\ and \LuaTeX-ja. The next section, -Section~\ref{sec:distinction_of_characters}, is concentrated on a -problem how we distinguish between Japanese characters and alphabetic -characters. In Section~\ref{sec:current_status}, we show current -development status of the package. Finally, in -Section~\ref{sec:implementation}, we describe some internal routines of -\LuaTeX-ja. - -\subsection{General information of the project} -This \LuaTeX-ja project is hosted by SourceForge.jp. The official wiki -is located on -\url{http://sourceforge.jp/projects/luatex-ja/wiki/}. There is -no stable version on October 22, 2011, however a set of developer sources can be -obtained from the git repository. Members of the project team are as follows -(in random order): Hironori Kitagawa, Kazuki Maeda, Takayuki Yato, -Yusuke Kuroki, Noriyuki Abe, Munehiro Yamamoto, Tomoaki Honda, -and~Shuzaburo Saito. - - -\section{Major differences with \pTeX} -\label{sec:differences_with_ptex} -In this section, we explain several major differences between \pTeX\ -and our \LuaTeX-ja. For general information of Japanese typesetting and the -overview of \pTeX, please see Okumura~\cite{ptexjp}. - - -\subsection{Names of control sequences} -\label{ssec-csname} Because \pTeX\ is an engine modification of Knuth's -original \TeX82 engine, some of the additional primitives take a form that is -very difficult to be simulated by a macro. For example, an additional -primitive |\prebreakpenalty|$\langle\hbox{\it -char\_code}\rangle$|[=]|$\langle\hbox{\it penalty}\rangle$ in \pTeX\ -sets the amount of penalty inserted before a character whose code is -$\langle\hbox{\it char\_code}\rangle$ to $\langle\hbox{\it -penalty}\rangle$, and this form |\prebreakpenalty|$\langle\hbox{\it -char\_code}\rangle$ can be also used for retrieving the value. - -Moreover, there are some internal parameters of \pTeX\ which values of them at the end of a -horizontal box or that of a paragraph are valid in whole box or -paragraph. However, the implementation of these parameters in -\LuaTeX-ja is not so easy; we will discuss it in Subsection~\ref{ssec-stack}. - -From the two problems discussed above, the assignment and retrieval -of most parameters in \LuaTeX-ja are summarized into the following -three control sequences: -\begin{itemize} -\item |\ltjsetparameter{|$\langle\hbox{\it - name}\rangle$|=|$\langle\hbox{\it value}\rangle$|,...}|: for local - assignment. -\item |\ltjglobalsetparameter|: for global assignment. Note that these two control - sequences obey the value of |\globaldefs| primitive. -\item |\ltjgetparameter{|$\langle\hbox{\it - name}\rangle$|}[{|$\langle\hbox{\it optional - argument}\rangle$|}]|: for retrieval. The returned value is always - a string. -\end{itemize} - -\subsection{Line-break after a Japanese character} -\label{ssec-line} - -Japanese texts can break lines almost everywhere, in contrast with -alphabetic texts can break lines only between words (or use -hyphenation). Hence, \pTeX's input processor is modified so that a -line-break after a Japanese character doesn't emit a space. However, -there is no way to customize the input processor of \LuaTeX, other than -to hack its CWEB-source. All a macro package can do is to modify an input line before -when \LuaTeX\ begin to process it, inside the |process_input_buffer| -callback. - -Hence, in \LuaTeX-ja, a comment letter (we reserve U+FFFFF for this -purpose) will be appended to an input line, if this line ends with a Japanese -character.\footnote{Strictly speaking, it also requires that the catcode -of the end-line character is 5~(\emph{end-of-line}). This condition is -useful under the verbatim environment.} One might jump to a conclusion -that the treatment of a line-break by \pTeX\ and that of \LuaTeX-ja are -totally same, however they are different in the respect that \LuaTeX-ja's -judgment whether a comment letter will be appended the line is done -\emph{before} the line is actually processed by \LuaTeX. - -Figure~\ref{fig-linebreak} shows an example of this situation; the -command at the first line marks most of Japanese characters as -`non-Japanese characters'. In other words, from that command onward, the -letter `あ' will be treated as an alphabetic character by -\LuaTeX-ja. Then, it is natural to have a space between `あ' and `y' in -the output, where the actual output 【of the first example /* 以下の figure 環境と連動*/】 in the figure does not so. This is -because `あ' is considered a Japanese character by \LuaTeX-ja, -when \LuaTeX-ja does the decision whether U+FFFFF will be added to the -input line~2. - -\begin{figure} -\begin{LTXexample} -\font\x=IPAMincho \x -\ltjsetparameter{jacharrange={-6}}xあ -y%\qquad xあy\qquad x あ y%%%【とかにしないと,空白が空いているかどうかよくわからない】 -\end{LTXexample} -\caption{A notable sample showing the treatment of a line-break after a -Japanese character.}\label{fig-linebreak} -\end{figure} - -\subsection{Separation between `real' fonts and metrics} -\label{ssec-sepmet} - -Traditionally, most Japanese fonts used in typesetting are not -proportional, that is, most glyphs have same size (in most cases, -square-shaped). Hence, it is not rare that the contents of different -JFMs are essentially same, and only differ in their names. For example, -|min10.tfm| and |goth10.tfm|, which are JFMs shipped with \pTeX\ for -seriffed \emph{mincho} family and sans-seriffed \emph{gothic} family, -differ their |FAMILY| and |FACE| only. Moreover, |jis.tfm| and -|jisg.tfm|, which is included in the \emph{jis} font metric, which is -used in \emph{jsclasses}~\cite{jsclasses} by Haruhiko Okumura (奥村晴彦), -are totally same as binary files. Considering this situation, we -decided to separate `real' fonts and metrics used for them in -\LuaTeX-ja. Typical declarations of Japanese fonts in the style of plain -\TeX\ are shown in Figure~\ref{fig-jfdef}. We would like to add several -remarks: -\begin{itemize} -\item A control sequence |\jfont| must be used for Japanese fonts, instead of |\font|. -\item \LuaTeX-ja automatically loads the \emph{luaotfload} package, so - \hbox{\tt file:} and \hbox{\tt name:} prefixes, and various font features can be - used as the first line in Figure~\ref{fig-jfdef}. -\item The |jfm| key specifies the metric for the font. In - Figure~\ref{fig-jfdef}, |\foo| and |\bar| will use a metric stored in a - Lua script named |jfm-ujis.lua|. This metric is the standard - metric in \LuaTeX-ja, and is based on JFMs used in the \emph{otf} - package~\cite{otf} (hence almost all characters are square-shaped). -\item The \hbox{\tt psft:} prefix can be used to specify name-only, non-embedded - fonts. When one displays a pdf with these fonts, actual fonts which - will be used for them depend on a pdf reader. -\end{itemize} -The specification of a metric for \LuaTeX-ja is similar to that of a JFM -(see \cite{ptexjp}); characters are grouped into several classes, the -size information of characters are specified for each class, and -glue/kern insertions are specified for each pair of classes. Although -the author have not tried, it may be possible to develop a program that -`converts' a JFM to a metric for \LuaTeX-ja. \LuaTeX-ja offers three -metrics by default; |jfm-ujis.lua|, |jfm-jis.lua| based on the -\emph{jis} font metric, and |jfm-min.lua| based on old |min10.tfm|. - -Note that |-kern| in features -is important, because kerning information from a real font itself will -clash with glue/kern information from the metric. - -\begin{figure} -\begin{verbatim} -\jfont\foo=file:ipam.ttf:jfm=ujis;script=latn;-kern;+jp04 at 12pt -\jfont\bar=psft:Ryumin-Light:jfm=ujis at 10pt -\end{verbatim} -\caption{Typical declarations of Japanese fonts.} -\label{fig-jfdef} -\end{figure} - -\subsection{Insertion of glues/kerns for Japanese typesetting: timing} -\label{ssec-jglue} - -As described in \cite{luatexref}, \LuaTeX's kerning and ligaturing -processes are totally different from those of \TeX82. \TeX82's process is -done just when a (sequence of) character is appended to the current -list. Thus we can interrupt this process by writing as -|f{}irm|. However, \LuaTeX's process is \emph{node-based}, that is, the -process will be done when a horizontal box or a paragraph is ended, so -|f{}irm| and |firm| yield same outputs under \LuaTeX. - -The situation for Japanese characters is more complicated. -Glues (and kerns) which are needed for Japanese -typesetting are divided into the following three categories: -\begin{itemize} -\item Glue (or kern) from the metric of Japanese fonts (\emph{JFM glue}, - for short). - -\item Default glue between a Japanese character and an alphabetic - character (we say \emph{xkanjiskip}, for short), usually 1/4 of - full-width (\emph{shibuaki}) with some stretch and shrink for - justifying each line. -\item Default glue between two consecutive Japanese characters - (\emph{kanjiskip}, for short). The main reason of this glue is to - enable breaking lines almost everywhere in Japanese texts. In most - cases, its natural width is zero, and some stretch/shrink for - justifying each line. -\end{itemize} -In \pTeX, these three kinds of glues are treated differently. A JFM glue -is inserted when a (sequence of) Japanese character is appended to the -current list, same as the case of alphabetic characters in \TeX82. This -means that one can interrupt the insertion process by saying |{}|. A -\emph{xkanjiskip} is inserted just before `hpack' or line-breaking of a -paragraph; this timing is somewhat similar to that of \LuaTeX's kerning -process. Finally, A \emph{kanjiskip} is not appeared as a node anywhere; -only appears implicitly in calculation of the width of a horizontal box, -that of breaking lines, and the actual output process to a DVI -file. These specifications have made \pTeX's behavior very hard to -understand. - -\LuaTeX-ja inserts glues in all three categories simultaneously inside -|hpack_filter| and |pre_linebreak_filter| callbacks. The reasons of -this specification are to behave like alphabetic characters in \LuaTeX\ -(as described in the first paragraph in this subsection), and to clarify -the specification for \LuaTeX-ja's process. - -\subsection{Insertion of glues/kerns for Japanese typesetting: specification} -\label{ssec-jspec} - -\begin{table} -\caption{Examples of differences between \pTeX\ and \LuaTeX-ja.} -\label{tab-jfmglue} -\begin{center} -\begin{tabular}{llllllll} -\toprule -&\multicolumn{1}{c}{(1)}&\multicolumn{1}{c}{(2)}&\multicolumn{1}{c}{(3)}&\multicolumn{1}{c}{(4)}\\ -Input &|あ】{}【〕\/〔| &|い』\/a| &|う)\hbox{}(| &|え]\special{}ï¼»|\\\midrule -\pTeX &あ】\hbox{}【〕\hbox{}〔&い』\/a &う)\hbox{}( &え]\hbox{}ï¼»\\ -\LuaTeX-ja &あ】{}【〕\/〔 &い』\/a &う)\hbox{}( &え]\special{}ï¼»\\ -\bottomrule -\end{tabular} -\end{center} -\end{table} - -\begin{figure} -\begin{center} -\fontsize{40}{40}\selectfont -\imagfm{\jstrut あ}% -\imagfm{\jstrut 】\inhibitglue}% -\imagfm{\jstrut\kern.5\zw}% -\imagfm{\jstrut\kern.5\zw}% -\imagfm{\jstrut\inhibitglue【}% -\imagfm{\jstrut 〕\inhibitglue}% -\imagfm{\jstrut\kern.5\zw}% -\imagfm{\jstrut\kern.5\zw}% -\imagfm{\jstrut\inhibitglue〔}% -\end{center} -\caption{Detail of the output of \pTeX\ in the input~(1) in Table~\ref{tab-jfmglue}.} -\label{fig-ptexjfm} -\end{figure} - -Now we will take a look at the insertion process itself through four points. - -\begin{description} -\item[Ignored nodes] -As noted in the previous subsection, the insertion process in \pTeX\ can - be interrupted by saying |{}| or anything else.\footnote{This - is why some tricks like \texttt{ちょ\char`\{\char`\}っと} for - \texttt{min10.tfm} and other `old' JFMs work.} This leads the - second row in Table~\ref{tab-jfmglue}, or - Figure~\ref{fig-ptexjfm}. Here `the process is interrupted' - means that \pTeX\ does not think the letter `】\inhibitglue' - is followed by `\inhibitglue【', hence two half-width glues - are inserted between `】\inhibitglue' and `\inhibitglue【', - where the left one is from `】\inhibitglue' and the right one - is from `\inhibitglue【'. - - On the other hand, in \LuaTeX-ja, the process is done inside - |hpack_filter| and |pre_linebreak_filter| callbacks. Hence, - \emph{anything that does not make any node will be - ignored}\ in \LuaTeX-ja, as shown in (1) in - Table~\ref{tab-jfmglue}. \LuaTeX-ja also ignores any nodes - which does not make any contribution to current horizontal - list---\emph{ins\_node}, \emph{adjust\_node}, - \emph{mark\_node}, \emph{whatsit\_node} and - \emph{penalty\_node}---, as shown in (4). - - -By the way, around a \emph{glyph\_node} $p$ there may be some nodes - attached to~$p$. These are an accent and kerns for - moving it to the right place, and a kern from the italic - correction\footnote{\TeX82 (and \LuaTeX) does not distinguish - between explicit kern and a kern for italic correction. To - distinguish them, an additional subtype for a kern is introduced - in \pTeX. On the other hand, \LuaTeX-ja uses an additional attribute and - redefines \texttt{\char`\\/} to set this attribute.} for $p$. It is natural that - these attachments should be ignored inside the process. Hence - \LuaTeX-ja takes this approach, as the latest version of - \pTeX\ (version~p3.2). This explains (2) in the Table~\ref{tab-jfmglue}. - -Summarizing the above, one should put an empty horizontal box |\hbox{}| to - where he/she wants to interrupt the insertion process in - \LuaTeX-ja as (3) in the Table~\ref{tab-jfmglue}. - -\item[Fonts with the same metric] -Recall that \LuaTeX-ja separates `real' fonts and metrics, as in Subsection~\ref{ssec-sepmet}. -Consider the following input, where all Japanese fonts use same metric - (in \LuaTeX-ja), and |\gt| selects \emph{gothic} family for - the current Japanese font family: -\begin{quote} -\begin{verbatim} -明朝)\gt (ゴシック -\end{verbatim} -\end{quote} -If the above input is processed by \pTeX, because the insertion process is - interrupt by |\gt|, the result looks like -\begin{quote} -\mc 明朝)\hbox{}\gt (ゴシック -\end{quote} -However this seems to be unnatural, since two Japanese fonts in the - output use the same metric, i.e.,~the same - typesetting rule. Hence, we decided that Japanese fonts with - the same metric are treated as one font in the insertion - process of \LuaTeX-ja. Thus, the output from the above input - in \LuaTeX-ja looks like: -\begin{quote} -\mc 明朝)\gt (ゴシック -\end{quote} -One might have the situation that this default behavior is not - suitable. \LuaTeX-ja offers a way to handle this situation, but - we leave it to the manual~\cite{man}. - -\item[Fonts with different metrics] -The case where two adjacent Japanese characters use different metrics - and/or different size is similar. Consider the following - input where the \emph{mincho} family and the \emph{gothic} - family use different metrics: -\begin{quote} -\begin{verbatim} -漢)\gt (漢)\large (大 -\end{verbatim} -\end{quote} -As the previous paragraph, this input yields the following, by \pTeX: -\begin{quote} -\mc 漢)\hbox{}\gt (漢)\hbox{}\large (大 -\end{quote} -We had thought that amounts of spaces between parentheses in the above output - are too much. Hence we have changed the default behavior of - \LuaTeX-ja, so that the amount of a glue between two Japanese - characters with different metrics is the \emph{average} of a glue - from the left character and that from the right - character. For example, Figure~\ref{fig-diffmet} shows the - output from the above input. The width of glue indicated `(1)' is - $(a/2 + a/2)/2 = 0.5a$, and the width of glue indicated `(2)' - is $(a/2 + 1.2a/2)/2 = 0.55a$. This default behavior can be - changed by \textsf{differentmet} 【綴り間違い?】 parameter of \LuaTeX-ja. - -\begin{figure} -\begin{center} -\fontsize{40}{40}\selectfont -\imagfm{\jstrut\smash{% - \vtop{\lineskiplimit=\maxdimen\lineskip2pt\halign{#\cræ¼¢\cr - \small\vrule height .5ex depth .5ex\hrulefill\ \lower.5ex\hbox{$a$}\ - \hrulefill\vrule height .5ex depth .5ex\cr}}}}% -\imagfm{\jstrut )\inhibitglue}% -\hbox to .5\zw{\hss\normalsize (1)\hss}% -\imagfm{\jstrut\inhibitglue\gt (}% -\imagfm{\jstrut\gt æ¼¢}% -\imagfm{\jstrut\gt )\inhibitglue}% -\hbox to .55\zw{\hss\normalsize (2)\hss}% -\imagfm{\fontsize{48}{48}\selectfont\jstrut\gt\inhibitglue (}% -\imagfm{\fontsize{48}{48}\selectfont\jstrut\smash{% - \vtop{\lineskiplimit=\maxdimen\lineskip2pt\halign{#\cr\gt 大\cr - \small\vrule height .5ex depth .5ex\hrulefill\ \lower.5ex\hbox{$1.2a$}\ - \hrulefill\vrule height .5ex depth .5ex\cr}}}} -\end{center} -\caption{Fonts with different metrics.} -\label{fig-diffmet} -\end{figure} - -\item[\emph{kanjiskip} and \emph{xkanjiskip}] -In \pTeX, the value of \emph{xkanjiskip} is controlled by a skip named - |\xkanjiskip|. A well-known defect of this implementation is - that the value of \emph{xkanjiskip} is not connected with the - size of the current Japanese font. It seems that |EXTRASPACE|, - |EXTRASTRETCH|, |EXTRASHRINK| parameters in a JFM are - reserved for specifying the default value of - \emph{xkanjiskip} in a unit of the design size, but \pTeX\ - did not use these parameters, actually. - -Considering this situation of p\TeX, \LuaTeX-ja can use the value of - \emph{xkanjiskip} that specified in a metric. If the value of - \emph{xkanjiskip} on user side (this is the value of - \textsf{xkanjiskip} parameter of |\ltjsetparameter|) is - |\maxdimen|, then \LuaTeX-ja uses the specification from - the current used metric as the actual value of - \emph{xkanjiskip}. This description also applies for \emph{kanjiskip}. -\end{description} - -\section{Distinction of characters} -\label{sec:distinction_of_characters} Since \LuaTeX\ can handle Unicode -characters natively, it is a major problem that how we distinguish -Japanese characters and alphabetic characters. For example, the -multiplication sign (U+00D7) exists both in ISO-8859-1 (hence in Latin-1 -Supplement in Unicode) and in the basic Japanese character set -JIS~X~0208. It is not desirable that this character is always treated as -an alphabetic character, because this symbol is often used in the sense -of `negative' in Japan. - -\subsection{Character ranges} -Before we describe the approach taken in \LuaTeX-ja, we review the -approach taken by u\pTeX. u\pTeX\ extends the |\kcatcode| primitive in -\pTeX, to use this primitive for setting how a character is treated -among alphabetic characters~(15), \emph{kanji}~(16), \emph{kana}~(17), -【kanji は 16 で出てるけど,2 箇所出現?】 \emph{kanji}, \emph{Hangul}~(17), or~\emph{other CJK characters}~(18). -The assignment to |\kcatcode| can be done by a Unicode -block.\footnote{There are some exceptions. For example, U+FF00--FFEF -(Halfwidth and Fullwidth Forms) are divided into three blocks in recent -u\pTeX.} - -\LuaTeX-ja adopted a different approach. There are many Unicode blocks - in Basic Multilingual Plane which are not included in - Japanese fonts, therefore it is inconvenient if we process by a Unicode - block. Furthermore, JIS~X~0208 are not just union of Unicode - blocks; for example, the intersection of JIS~X~0208 and - Latin-1 Supplement is shown in - Table~\ref{tab-inter}. Considering these two points, to - customize the range of Japanese characters in \LuaTeX-ja, one - has to define ranges of character codes in his/her source in advance. - - -\begin{table} -\caption{Intersection of JIS~X~0208 and Latin-1 Supplement.} -\label{tab-inter} -\begin{center} -\begin{tabular}{llll} -\ltjjachar"A7 (U+00A7),& -\ltjjachar"A8 (U+00A8),& -\ltjjachar"B0 (U+00B0),& -\ltjjachar"B1 (U+00B1),\\ -\ltjjachar"B4 (U+00B4),& -\ltjjachar"B6 (U+00B6),& -\ltjjachar"D7 (U+00D7),& -\ltjjachar"F7 (U+00F7) -\end{tabular} -\end{center} -\end{table} - - -We note that \LuaTeX-ja offers two additional control sequences, - |\ltjjachar| and |\ltjalchar|. They are similar to |\char| - primitive, however |\ltjjachar| always yields a Japanese character, provided that - the argument is more than or equal to 128, and |\ltjalchar| always - yields an alphabetic character, regardless of the argument. - -\subsection{Default setting of ranges} -Patches for plain \TeX\ and \LaTeXe\ of \LuaTeX-ja predefine eight character -ranges, as shown in Table~\ref{tab-chrrng}. Almost of these ranges are -just the union of Unicode blocks, and determined from the Adobe-Japan1-6 -character collection~\cite{aj16}, and JIS~X~0208. Among these eight ranges, -the ranges~2, 3, 6, 7, and~8 are considered ranges of Japanese -characters, and others are considered ranges of alphabetic -characters.\footnote{Note that ranges 3~and~8 are considered ranges of -alphabetic characters in this paper.} We remark on ranges 2~and~8: -\begin{description} -\item[The range~2] -JIS~X~0208 includes Greek letters and Cyrillic letters, however, these - letters cannot be used for typesetting Greek or Russian, of - course. Hence it is reasonable that Greek letters and - Cyrillic consist another character range. -\item[The range~8] -If one wants to use 8-bit TFMs, such as T1 or TS1 encodings, he should - mark this range~8 as a range of alphabetic characters by -\begin{quote} -|\ltjsetparameter{jacharrange={-8}}| -\end{quote} -This is because some 8-bit TFMs have a glyph in this range; for example, - the character `\OE' is located at |"D7| in the T1 encoding. %" -\end{description} - - -\begin{table} -\caption{Predefined ranges in \LuaTeX-ja.} -\label{tab-chrrng} -\begin{center} -\begin{tabular}{@{\bf}rl} -1&(Additional) Latin characters which are not belonged in the range~8.\\ -2&Greek and Cyrillic letters.\\ -3&Punctuations and miscellaneous symbols.\\ -4&Unicode blocks which does not intersect with Adobe-Japan1-6.\\ -5&Surrogates and supplementary private use Areas.\\ -6&Characters used in Japanese typesetting.\\ -7&Characters possibly used in CJK typesetting, but not in Japanese.\\ -8&Characters in Table~\ref{tab-inter}. -\end{tabular} -\end{center} -\end{table} - -\subsection{Control sequences producing Unicode characters} -\label{ssec-unichar} - -The \emph{fontspec} package\footnote{Preciously saying, it is the -\emph{xunicode} package, originally a package for \XeTeX and -automatically loaded by the \emph{fontspec} package.} offers various -control sequences that produce Unicode characters. However, these -control sequences as it stands cannot work correctly with the default -range setting of \LuaTeX-ja. For example, |\textquotedblleft| is just -an abbreviation of |\char"201C\relax|, and the character U+201C (LEFT %" -DOUBLE QUOTATION MARK) is treated as an Japanese character, because it -belongs to the range~3. This problem is resolved by using |\ltjalchar| -instead of the |\char| primitive. It is included in an optional package -named \texttt{luatexja-\penalty0fontspec.sty}. Figure~\ref{fig-unitxt} -shows several ways to typeset a character, both as a Japanese character -and as an alphabetic characters. - -\begin{figure} -\begin{LTXexample} -×, \char`×, % depend on range setting -\ltjalchar`×, % alphabetic char -\ltjjachar`×, % Japanese char -\texttimes % alph. char (by fontspec) -\end{LTXexample} -\caption{Control sequences producing a Unicode character.} -\label{fig-unitxt} -\end{figure} - -The situation looks similar in math formulas, but in fact it differs. -Each control sequence that represents an ordinary symbol defined by the -\emph{unicode-math} package is just synonym of a character. For example, -the meaning of |\otimes| is just the character U+2297 (CIRCLED TIMES), -which is included in the range~3. However, it is difficult to define a -control sequence like |\ltjalUmathchar| as a counterpart of -|\Umathchar|, since an input like `|\sum^\ltjalUmathchar ...|' has to be -permitted. - -However, we couldn't develop a satisfactory solution to this problem in -time for this paper, due to a lack of time. We are just testing a -solution below: -\begin{itemize} -\item \LuaTeX-ja has a list of character codes which will be always treated as - alphabetic characters in math mode. Considering 8-bit TFMs for - math symbols, this list includes natural numbers between |"80| and - |"FF| by default. -\item Redefine internal commands defined in the \emph{unicode-math} - package so that -codes of characters which are mentioned in the \emph{unicode-math} - package will be included in the list. -\end{itemize} - - -We would like to extend treatments described in this subsection to 8-bit -font encodings, but we leave it to further development too. - -\section{Current status of development} -\label{sec:current_status} -At the moment, \LuaTeX-ja can be used under plain \TeX, and under -\LaTeXe. Generally speaking, one only has to read |luatexja.sty|, by -|\input| command or |\usepackage| (in~\LaTeXe), if you merely want to -typeset Japanese characters. We look more details by parts. - -\subsection{`Engine extension'} -The lowest part of \LuaTeX-ja corresponds to the \pTeX\ extension as -\emph{an engine extension of \TeX}\@. 【なんとなく,ピリオド直後の空白が小さく見える.補正で直るか?】 We, the project members, think that -this part is almost done. There is one more feature of \LuaTeX-ja which -we are going to explain: - -\begin{description} -\item[Shifting baseline] -In order to make a match between Japanese fonts and alphabetic fonts, - sometimes shifting the baseline of alphabetic characters may - be needed. \pTeX\ has a dimension |\ybaselineshift|, which - corresponds to the amount of shifting down the baseline of alphabetic - characters. This is useful for Japanese-based documents, but - not for documents mainly in languages with alphabetic - characters. - -Hence, \LuaTeX-ja extends \pTeX's |\ybaselineshift| to Japanese - characters. Namely, \LuaTeX-ja offers two parameters, - \textsf{yjabaselineshift} and \textsf{yalbaselineshift}, for the - amount of shifting the baseline of Japanese characters and - that of alphabetic characters, respectively. -\begin{figure} -\begin{center} -\fontsize{40}{40}\selectfont\fboxsep0mm -\vrule width 0.9\textwidth height0.4pt depth0.4pt\kern-0.9\textwidth -\hbox to 0.9\linewidth{% -\hfil -\raise-10pt\imagfm{\jstrut æ¼¢}% -\raise-10pt\imagfm{\jstrut 字}\hskip.25\zw% -\imagfm{p}% -\imagfm{h}% -\hfil\hfil -\imagfm{\jstrut æ¼¢}% -\imagfm{\jstrut 字}\hskip.25\zw% -\raise-10pt\imagfm{p}% -\raise-10pt\imagfm{h}% -\hfil -} -\end{center} - -\caption{First example of shifting baseline.} -\label{fig-bls} -\end{figure} - -\begin{figure} -\begin{center} -\fontsize{30}{30}\selectfont\fboxsep0mm -\vrule width 0.9\textwidth height0.4pt depth0.4pt\kern-0.9\textwidth -\hbox to 0.9\linewidth{% -\hfil -\imagfm{a}% -\imagfm{b}\hskip.25\zw% -\imagfm{\jstrut 本}% -\imagfm{\jstrut 文}\hskip.33333\zw% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut\inhibitglue (}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut 注}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut 釈}\hskip.1666667\zw% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont c}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont o}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont m}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont m}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont e}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont n}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont t}% -\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut )\inhibitglue}% -\hskip.33333\zw% -\imagfm{\jstrut 本}% -\imagfm{\jstrut 文}% -\hfil -} -\end{center} - -\caption{Second example of shifting baseline.} -\label{fig-small} -\end{figure} - -An example output is shown in Figure~\ref{fig-bls}. The left half is the - output when \textsf{yjabaselineshift} is positive, hence the - baseline of Japanese characters is shifted down. On the other - hand, the right half is the output when - \textsf{yalbaselineshift} is positive, hence the baseline of - alphabetic characters is shifted down. Figure~\ref{fig-small} - shows an interesting use of these parameters. - -\end{description} -Note that \LuaTeX-ja doesn't support vertical typesetting, \emph{tategaki}, for now. - -\subsection{Patches for plain \TeX\ and \LaTeXe} -\pTeX\ has a patch for plain \TeX, namely |ptex.tex|, that for \LaTeXe\ -macro (this patch and \LaTeXe\ consist \emph{p\LaTeXe}), and -|kinsoku.tex| which includes the default setting of \emph{kinsoku -shori}, the Japanese hyphenation. We ported them to \LuaTeX-ja, except -the codes related to vertical typesetting, because \LuaTeX-ja doesn't -support vertical typesetting yet. We remark one point related to the -porting: -\begin{description} - -\item[Behavior of\/ {\tt\char92fontfamily\/}] -The control sequence |\fontfamily| in p\LaTeXe\ changes the current alphabetic - font family and/or the current Japanese font family, - depending the argument. More concretely, - |\fontfamily{|$\langle\hbox{\it arg\/}\rangle$|}| changes the - current alphabetic font family to $\langle\hbox{\it - arg\/}\rangle$, if and only if one of the following - conditions are satisfied: -\begin{itemize} -\item An alphabetic font family named $\langle\hbox{\it arg\/}\rangle$ in - \emph{some} alphabetic encoding is already defined in the document. -\item There exists an alphabetic encoding $\langle\hbox{\it - enc\/}\rangle$ already defined in the document such that a font - definition file $\langle\hbox{\it enc\/}\rangle\langle\hbox{\it - arg\/}\rangle$|.fd| (all lowercase) exists. -\end{itemize} -The same criterion is used for changing Japanese font family. - -To work this behavior well, it is required that a list of all (alphabetic) encodings defined - already in the document. However, since \LuaTeX-ja - is loaded as a package, \LuaTeX-ja cannot have this list. - Hence \LuaTeX-ja adopted a different approach, namely - |\fontfamily{|$\langle\hbox{\it arg\/}\rangle$|}| changes the - current alphabetic font family to $\langle\hbox{\it - arg\/}\rangle$, if and only if: -\begin{itemize} -\item An alphabetic font family named $\langle\hbox{\it arg\/}\rangle$ - in the current alphabetic encoding $\langle\hbox{\it - enc\/}\rangle$ is already defined in the document. -\item A font definition file $\langle\hbox{\it enc\/}\rangle\langle\hbox{\it - arg\/}\rangle$|.fd| (all lowercase) exists. -\end{itemize} - - -\end{description} - - - -\subsection{Classes for Japanese documents} -To produce `high-quality' Japanese documents, we need not only that -Japanese characters are correctly placed, but also class files for -Japanese documents. Two major families of classes are widely used in Japan: -\emph{jclasses} which is distributed with the official p\LaTeXe\ macros, -and \emph{jsclasses}. At the present, \LuaTeX-ja -simply contains their counterparts: \emph{ltjclasses} and -\emph{ltjsclasses}. However, the policy on classes is not determined -now, and we hope to have another family of classes which are useful for -commercial printing. In the author's opinion, \emph{ltjclasses} is -better to stay as an example of porting of class files for \pTeX\ to -\LuaTeX-ja. - -\subsection{Patches for packages} -Apart from patches for the \LaTeXe~kernel and classes for Japanese -documents, we need to make patches for several packages. At the present, -we considered the following packages, and made patches or porting for -the former two packages. - -\begin{description} -\item[The \emph{fontspec} package] The \emph{fontspec} package is built - on NFSS2, hence control sequences offered by the - \emph{fontspec} package, such as |\setmainfont|, are only - effective for alphabetic fonts if \LuaTeX-ja is loaded. - \texttt{luatexja-\penalty0fontspec.sty} (not automatically - loaded) offers these counterparts for Japanese fonts, with - additional `j' in the name of control sequences, such as - |\setmainjfont|. As described in - Subsection~\ref{ssec-unichar}, it also includes a patch for - control sequences producing Unicode characters. - -\item[The \emph{otf} package] -This package is widely used in \pTeX\ for typesetting characters which is -not in JIS~X~0208, and for using more than one weight in \emph{mincho} -and \emph{gothic} font families. Therefore \LuaTeX-ja supports features -in the \emph{otf} package, by loading \texttt{luatexja-\penalty0otf.sty} - manually. Note that characters by |\UTF{}| and - |\CID{}| are not appended to the current list as a - \emph{glyph\_node}, to avoid from callbacks by the - \emph{luaotfload} package. We have another remark; |\CID| - does not work with TrueType fonts, since |\CID| uses the - conversion table between CID and the glyph order of the - current Japanese font. - -\item[The \emph{listings} package] -It is known for users of \pTeX\ that there is a patch |jlisting.sty| for - the \emph{listings} package, to use Japanese characters in - the |lstlisting| environment. Generally speaking, it also can - be used in \LuaTeX-ja. However, it seems to be that a - Japanese character after a space does not receive any process - of the \emph{listings} package; this is inconvenient when we - use the \emph{showexpl} package. - -There is another way to use over 256 characters with the - \emph{listings} package (described in \cite{apl}). However, - this method is not suitable for Japanese, since the number of - Japanese characters is very large. We hope that the - \emph{listings} package will be able to handle all characters above - 256 without any patch, in the future. - - -\end{description} - - - -\section{Implementation} -\label{sec:implementation} -\subsection{Handling of Japanese fonts} -In \pTeX, there are three slots for maintaining current fonts, namely -|\font| for alphabetic fonts, |\jfont| for Japanese fonts (in horizontal -direction) and |\tfont| for Japanese fonts (in vertical direction). With -these slots, we can manage the current font for alphabetic characters -and that for Japanese characters separately in \pTeX. However, \LuaTeX\ -has only one slot for maintaining the current font, as \TeX82. This -situation leads a problem: how can we maintain the `current Japanese -font'? - -There are three approaches for this problem. One approach is to make a -mapping table from alphabetic fonts to corresponding Japanese fonts -(here we don't assume that NFSS2 is available). Another approach is -that we always use composite fonts with alphabetic fonts and Japanese -fonts. The third approach is that the information of the current -Japanese font is stored in an attribute. We adopted the third approach, -since \LuaTeX-ja is much affected by \pTeX\ as we noted in -Subsection~\ref{ssec-pol}. - -As in Figure~\ref{fig-jfdef}, \LuaTeX-ja uses |\jfont| for defining -Japanese fonts, as \pTeX. However, because the information of the current -Japanese font is stored into an attribute, control sequences defined by -|\jfont| (e.g.,~|\foo| and |\bar| in Figure~\ref{fig-jfdef}) is -not representing a font by the means of \TeX82. In other words, each of -these control sequences is just an assignment to an attribute, therefore -they cannot be an argument of |\the|, |\fontname|, nor |\textfont|. - - -Callbacks by the \emph{luaotfload} package, e.g.,~replacement of glyphs -according to OpenType font features, are performed just after `Examination of -stack level' (see Subsections -\ref{ssec-over}~and~\ref{ssec-stack}). Also note that calculation of -character classes for each Japanese character is done \emph{after} the -these callbacks for now. - -\subsection{Stack management} -\label{ssec-stack} - -As we noted in Subsection~\ref{ssec-csname}, parameters that the values -at the end of a horizontal box or that of a paragraph are valid in -whole box or paragraph, such as \emph{kanjiskip}, cannot be implemented -by internal integers or registers of other types in \TeX. We explain it -in this subsection. - -\begin{figure} -\begin{lstlisting} -void package(int c) -{ - ... - d = box_max_depth; - unsave(); - save_ptr -= 4; - if (cur_list.mode_field == -hmode) { - cur_box = filtered_hpack(cur_list.head_field, - cur_list.tail_field, saved_value(1), - saved_level(1), grp, saved_level(2)); - subtype(cur_box) = HLIST_SUBTYPE_HBOX; - } else { -\end{lstlisting} -\caption{An extract of a CWEB-source \texttt{tex/packaging.w} of \LuaTeX.} -\label{fig-ltsrc} -\end{figure} - -Figure~\ref{fig-ltsrc} is an extract of a CWEB-source -\texttt{tex/packaging.w} of \LuaTeX\ (SVN revision 4358). This function -is called just when an explicit |\hbox{...}| or |\vbox{...}| is ended, and -the function |filtered_hpack()| is where the |hpack_filter| and then the -actual `hpack' process are performed. Notice that the |unsave()| -function is called before |filtered_hpack()|. This is the problem; -because of |unsave()|, we can retrieve only the values of registers -\emph{outside} the box, even in the |hpack_filter| callback. - -To cope with this problem, \LuaTeX-ja has its own stack system, based on -Lua codes in \cite{stack-mail}. Furthermore, \emph{whatsit} nodes whose -\emph{user\_id} is 30112 (\emph{stack\_node}, for short) will be -appended to the current horizontal list each time the current stack -level is incremented, and their values are the values of -|\currentgrouplevel| at that time. In the beginning of the |hpack_filter| -callback, the list in question is traversed to determine whether the -stack level at the end of the list and that outside the box coincides. - -Let $x$ be the value of |\currentgrouplevel|, and $y$ be the current -stack level, both inside the |hpack_filter| callback, i.e.,~outside a -horizontal box. Consider a list which represents the content of the box, -then we have: -\begin{itemize} -\item A \emph{stack\_node} whose value is $x+1$ (because all materials - in the box are included in a group |\hbox{...}|, the value of - |\currentgrouplevel| inside the box is at least $x+1$) in the list - corresponds to an assignment related to the stack system in just - top-level of the list, like -\begin{quote} -\begin{verbatim} -\hbox{...(assignment)...} -\end{verbatim} -\end{quote} -In this case, the current stack level is incremented to $y+1$ after the assignment. -\item A \emph{stack\_node} whose value is more than $x+1$ in the list corresponds -to an assignment inside another group contained in the box. For example, - the following input creates -a \emph{stack\_node} whose value is $x+3=(x+1)+2$: -\begin{quote} -\begin{verbatim} -\hbox{...{...{...(assignment)}...}...} -\end{verbatim} -\end{quote} -\end{itemize} -Thus, we can conclude that the stack level at the end of the list is -$y+1$, if and only if there is a \emph{stack\_node} whose value is -$x+1$. Otherwise, the stack level is just $y$. - -\subsection{Adjustment of the position of Japanese characters} -\label{ssec-width} - -The size of a glyph specified in a metric and that of a real font -usually differ. For example, the letter `\inhibitglue【' is half-width -in |jfm-ujis.lua| or |jis.tfm|, while this letter is full-width like `【' -in most TrueType fonts used in Japanese typesetting, such as -IPA~Mincho. Hence the adjustment of position of such glyphs is -needed. In the context of \pTeX, this process was performed using virtual fonts. - -On the other hand, Lua\TeX-ja does the adjustment by encapsuling a glyph -into a horizontal box. There are two main reasons why we adopted this -method; one is that we feared Lua codes for coexisting with callbacks by -the |luaotfload| package would be large if we use virtual fonts, and the -other is to cope with shifting of the baseline of characters at the -same time. - -\begin{figure} -\begin{center}\unitlength=9pt\small -\begin{picture}(15,12)(-1,-3) - -\color{grayx}% real glyph -\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} - -\color{black}% real glyph :step1 -\thicklines -\put(-1,-1.5){\line(0,1){7}\line(0,-1){2.5}} -\put(5,-1.5){\line(0,1){7}\line(0,-1){2.5}} -\put(-1,5.5){\line(1,0){6}} -\put(-1,-4){\line(1,0){6}} -\put(-1,0){\makebox(0,0)[r]{\strut$R$\,}} - -\thicklines -\put(0,0){\vector(0,1){9}\line(0,-1){3}\vector(1,0){12}} -\put(12,9){\makebox(0,0)[rt]{\strut$M$\,}} -\put(12,0){\line(0,1){9}\vector(0,-1){3}} -\put(0,9){\line(1,0){12}} -\put(0,-3){\line(1,0){12}} -\put(0.2,4.5){\makebox(0,0)[l]{\texttt{height}}} -\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}} -\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}} - -\thicklines -\put(3,0){\line(0,1){7}\line(0,-1){2.5}\line(1,0){6}} -\put(9,0){\line(0,1){7}\line(0,-1){2.5}} -\put(3,7){\line(1,0){6}} -\put(3,-2.5){\line(1,0){6}} -\newsavebox{\eqdist} -\savebox{\eqdist}(0,0)[c]{% - \thinlines - \put(-0.08,0.2){\line(0,-1){0.4}}% - \put(0.08,0.2){\line(0,-1){0.4}}} -\put(1.5,0){\usebox{\eqdist}} -\put(10.5,0){\usebox{\eqdist}} - -\thicklines -\put(3,-1.5){\vector(-1,0){4}} -\put(1,-1.7){\makebox(0,0)[t]{\texttt{left}}} -\put(3,0){\vector(0,-1){1.5}} -\put(3.2,-0.75){\makebox(0,0)[l]{\texttt{down}}} -\end{picture} -\end{center} -\caption{The position of the `real' glyph.} -\label{fig-pos} -\end{figure} - -Figure~\ref{fig-pos} shows the adjustment process. A large square $M$ is -the imaginary body specified in the metric, and a vertical -rectangle is the imaginary body of a real glyph. First, the real glyph -is aligned with respect to the width of $M$. In the figure, the real -glyph is aligned `middle'; this setting is useful for the full-width -middle dot `・'. We have other settings, `left' and `right'. -Furthermore, it is shifted according to the value of |left| and |down|, -which are specified in the metric, for fine adjustment. -The final position of the real glyph -is shown by the gray rectangle~$R$. If the amount of shifting the baseline is -not zero, $M$ (and hence the real glyph) is shifted by that amount. - -We would like to remark briefly on the vertical position of a real -glyph. A JFM (or a metric used in \LuaTeX-ja) and a real font used for -it may have different height or depth. In that case, it may look better -if the real glyph is shifted vertically to match the height-depth ratio -specified in the metric, while any vertical adjustment except the -adjustment by the |down| value does not performed in the present -implementation of \LuaTeX-ja . This situation is carefully studied by -Otobe~\cite{min10}. Here the policy on this problem is not determined -now, however we would like to offer several solutions in future -development. - - -\subsection{Further notes on metrics for \LuaTeX-ja} -\label{ssec-jfmnote} -\begin{description} -\item[Proportional typesetting] -Some fonts are proportional, that is, each glyphs in those fonts have - its own width. An example of proportional fonts is - IPA~P~Mincho. Using these fonts in \pTeX\ is very - hard, since one needs to make a dedicated JFM for a real font. - -\LuaTeX-ja supports these proportional fonts; specifying the |width| of - a character class in a metric to |"prop"| makes the width of - each character in this class that of a glyph in a real font. -If no JFM glue is needed, one simply has to use |jfm-prop.lua|. The - following is an example: -\begin{LTXexample} -\jfont\pr=file:ipamp.ttf:jfm=prop at 3.25mm -あいうえお\\\pr{}あいうえお -\end{LTXexample} - -\item[Scaling by metrics] -Because of virtual fonts, even if one specifies to use |min10.tfm| or - |jis.tfm| at 10\,pt in \pTeX, the actual size of real fonts used in - dviwares for these JFMs are 9.62216\,pt. Hence, for - example, if one wants to use 3.25\,mm Japanese - fonts and 10\,pt alphabetic fonts in \pTeX, - he/she needs to scale a Japanese font by -\[ - \frac{3.25\,\mathrm{mm}}{10\,\mathrm{pt}\cdot 0.962216}\simeq 0.961 -\] -in declarations of Japanese fonts. - -\LuaTeX-ja didn't support such scaling of glyphs by metrics, so one has - to adjust the size argument for |\jfont| manually. Continuing - the previous example, for using 3.25\,mm Japanese - fonts and 10\,pt alphabetic fonts in \LuaTeX-ja, -he/she needs to scale a Japanese font by -3.25\,mm${}/{}$10\,pt${}\simeq{}$0.92487. -\end{description} - -\section{Conclusion} -We have discussed about our \LuaTeX-ja package, which is much affected -by \pTeX. For now, it can be used for experimental use, however there -are much refinements which are needed for regular use. The author hopes -that this paper and \LuaTeX-ja project contribute the typesetting Japanese, -and possibly other Asian languages, under \LuaTeX. - -\section*{Acknowledgements} -The author would like to thank Ken Nakano and Hideaki Togashi for their -development and management of ASCII \pTeX. The author is very grateful to Haruhiko -Okumura for his leadership in the Japanese \TeX\ community. The author -is also very grateful to members of \LuaTeX-ja project team for their -valuable cooperation in development. - -%%% The style of the bibiliogrphy is `amsplain'. -\providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace} -\providecommand{\href}[2]{#2} -\begin{thebibliography}{99} - -\bibitem{aj16} -Adobe Systems Incorporated, \emph{Adobe-Japan1-6 Character Collection - for CID-Keyed Fonts}, Technical Note~\#5078, 2004. -\newblock\url{http://partners.adobe.com/public/developer/en/font/5078.Adobe-Japan1-6.pdf} - -\bibitem{ptex} -ASCII MEDIA WORKS, アスキー日本語\TeX\ (\pTeX). \newblock\url{http://ascii.asciimw.jp/pb/ptex/} - -\bibitem{apl} -John Baker, \emph{Typesetting UTF8 APL code with the \LaTeX\ lstlisting package}. -\newblock\url{http://bakerjd99.wordpress.com/2011/08/15/} - -\bibitem{omega} -Jin-Hwan~Cho and Haruhiko Okumura, \emph{Typesetting CJK Languages with Omega}, -\TeX, XML, and Digital Typography, Lecture Notes in Computer Science, vol.~3130, -Springer, 2004, 139--148. - -\bibitem{joylua} -Yannis Haralambous. \emph{The Joy of \LuaTeX}. \newblock\url{http://luatex.bluwiki.com/} - -\bibitem{jisx4051} -Japanese Industrial Standards Committee. \emph{JIS~X~4051: Formatting - rules for Japanese documents}, 1993, 1995, 2004. - -\bibitem{eptex} -北川弘典, $\varepsilon$-\pTeX についてのwiki. -\newblock\url{http://sourceforge.jp/projects/eptex/wiki/FrontPage} - -\bibitem{luaums} -北川弘典, \LuaTeX で日本語. -\newblock\url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=378} - -\bibitem{luatexref} -\LuaTeX\ development team, \emph{The \LuaTeX\ reference}. -\newblock\url{http://www.luatex.org/svn/trunk/manual/luatexref-t.pdf} (snapshot of SVN trunk) - -\bibitem{man} -\LuaTeX-ja project team, \emph{The \LuaTeX-ja package}. \newblock -Not completed for now. \newblock Available at |doc/man-en.pdf| (in English) or - |doc/man-ja.pdf| (in Japanese) -in the Git repository. - -\bibitem{luajp-test} -香田温人, \LuaTeX と日本語. -\newblock\url{http://www1.pm.tokushima-u.ac.jp/~kohda/tex/luatex-old.html} - -\bibitem{luajalayout} -前田一貴, luajalayout パッケージ---Lua\LaTeX によ - る日本語組版---. -\newblock\url{http://www-is.amp.i.kyoto-u.ac.jp/lab/kmaeda/lualatex/luajalayout/} - -\bibitem{jsclasses} -奥村晴彦, p\LaTeXe 新ドキュメントクラス. -\newblock\url{http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/} - -\bibitem{ptexjp} -Haruhiko Okumura, \emph{\pTeX\ and Japanese Typesetting}, - The Asian Journal of \TeX\ \textbf{2}~(2008), 43--51. - -\bibitem{min10} -乙部厳己, min10フォントについて. -\newblock\url{http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf} - -\bibitem{otf} -齋藤修三郎, Open Type Font用VF. -\newblock\url{http://psitau.kitunebi.com/otf.html} - -\bibitem{stack-mail} -Jonathan Sauer, \emph{[Dev-luatex] tex.currentgrouplevel}. -\newblock\url{http://www.ntg.nl/pipermail/dev-luatex/2008-August/001765.html} - -\bibitem{uptex} -Takuji Tanaka, \emph{u\pTeX, up\LaTeX---unicode version of \pTeX, p\LaTeX}. -\newblock\url{http://homepage3.nifty.com/ttk/comp/tex/uptex_en.html} - -\bibitem{ptexenc} -Nobuyuki Tsuchimura and Yusuke Kuroki, \emph{Development of Japanese \TeX\ Environment}, - The Asian Journal of \TeX\ \textbf{2}~(2008), 53--62. - -\bibitem{w3c} -W3C Working Group, \emph{Requirements for Japanese Text Layout}. -\newblock\url{http://www.w3.org/TR/jlreq/} -\end{thebibliography} - -\end{document} +%#!lualatex ajt-devel-ltja +\documentclass{ajt} + +%%% Packages used in this paper + +%%% Font setting for \LuaTeX; this is extract from ajt.cls +\makeatletter + \if@print + \RequirePackage{fontspec,xunicode} + \RequirePackage{luatextra} + \setmainfont[Mapping=tex-text]{Palatino LT Std} + \setsansfont[Mapping=tex-text]{Optima LT Std} + \else + \RequirePackage{fontspec,luatextra} + \setmainfont[Mapping=tex-text]{TeX Gyre Pagella} % \simeq Palatino + \fi + +%%% LuaTeX-ja +\usepackage{luatexja,luatexja-fontspec} +\ltjsetparameter{jacharrange={-3,-8}} +\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.92489] file:ipam.ttf:jfm=ujis}{} +\DeclareFontShape{JY3}{gt}{m}{n}{<-> s*[0.92489] file:ipag.ttf:jfm=ujis}{} +% quick hack: monospaced Japanese font by \ttfamily +\DeclareKanjiFamily{JY3}{\ttdefault}{}{} +\DeclareFontShape{JY3}{\ttdefault}{m}{n}{<-> s*[0.92489] file:ipag.ttf:jfm=mono}{} + +%%% LTXexample environment +\usepackage{showexpl,lltjlisting} +\lstset{basicstyle=\ttfamily\small, width=0.3\textwidth, basewidth=.5em} + +%%% Verbatim environment +\usepackage{fancyvrb} +\CustomVerbatimEnvironment{code}{Verbatim}% +{numbers=left,xleftmargin=1.5em,baselinestretch=1.069,fontsize=\small} +\CustomVerbatimEnvironment{codewithoutnum}{Verbatim}% +{xleftmargin=1.5em,baselinestretch=1.069,fontsize=\small} +\CustomVerbatimEnvironment{codewithoutnumsmall}{Verbatim}% +{xleftmargin=1.5em,baselinestretch=1.0,fontsize=\footnotesize} +\DefineShortVerb{\|} + +%%% Others +\usepackage{mflogo,booktabs} +\definecolor{grayx}{gray}{0.85} +\hyphenation{ + kanjiskip + xkanjiskip + Okumura +} + +%%% Mandatory article metadata %%% +\title{Development of \LuaTeX-ja package} +\author[北川 弘典]{Hironori Kitagawa} +\address{\LuaTeX-ja project team} +\email{h\_kitagawa2001@yahoo.co.jp} + +\keywords{\TeX, p\TeX, \LuaTeX, \LuaTeX-ja, Japanese} +\abstract{% +\LuaTeX-ja package is a macro package for typesetting Japanese +documents under \LuaTeX. The package has more flexibility of +typesetting than \pTeX, which is widely used Japanese extension of \TeX, +and has corrected some unwanted features of \pTeX. +In this paper, we describe specifications, the current status and some +internal processing methods of \LuaTeX-ja. +} + +\newcommand{\parname}[1]{\textsf{#1}} +\newcommand{\jstrut}{\vrule width0pt height\cht depth\cdp} +\newcommand{\imagfm}[1]{\ifvmode\leavevmode\fi% + \hbox{\fboxsep=0pt\fbox{\setbox0=\hbox{#1}\copy0\kern-\wd0 + \smash{\vrule width \wd0 height 0.4pt depth0.4pt}}}} +\begin{document} + +%%% Do not forget to start with \maketitle! +\maketitle + +\section{Introduction} +\subsection{History} +To typeset Japanese documents with \TeX, ASCII \pTeX~\cite{ptex} has +been widely used in Japan. There are other methods---for example, using +Omega and OTP~\cite{omega}, or with the CJK package---to do so, however, +these alternative methods did not become majority. The author thinks +that this is because \pTeX\ enables us to produce high-quality documents +(e.g.,~supporting vertical typesetting), and the appearance of \pTeX\ is +earlier than that of alternatives described above. + +However, \pTeX\ has been left behind from the extensions of \TeX\ such +as \eTeX\ and \pdfTeX, and the diffusion of UTF-8 encoding. In recent +years, the situation has become better, by development of +|ptexenc|~\cite{ptexenc} by Nobuyuki Tsuchimura (\hbox{土村展之}), +$\varepsilon$-\pTeX~\cite{eptex} by the author,~and u\pTeX~\cite{uptex} +by Takuji Tanaka (田中琢爾). However, continuing this approach, namely, +to develop an engine extension localized for Japanese, is not wise. This +approach needs lots of work for \emph{each} engine. In addition, if we +use \LuaTeX, the necessity of an engine extension is getting smaller +because \LuaTeX\ has an ability to hook \TeX's internal process by using +Lua callbacks. + +Before our \LuaTeX-ja project, there were several experimental attempts to typeset +Japanese documents with \LuaTeX. Here we cite three examples: +\begin{itemize} +\item |luaums.sty|~\cite{luaums} developed by the author. This + experimental package is for creating a certain Japanese-based presentation + with \LuaTeX. +\item the \emph{luajalayout} package~\cite{luajalayout}, formerly known as the + \emph{jafontspec} package, by Kazuki Maeda (前田一貴). This package is based on + \LaTeXe\ and \emph{fontspec} package. +\item the \emph{luajp-test} package~\cite{luajp-test}, a test package made by + Atsuhito Kohda (香田温人), based on articles on the web page~\cite{joylua}. +\end{itemize} +However, these packages are based on \LaTeXe, and do not have much +ability to control the typesetting rule. And it is inefficient that more +than one person separately develop similar packages. Development of the +\LuaTeX-ja package is started initially by the author and Kazuki Maeda, because of +these situations. + +\subsection{Development policy of \LuaTeX-ja} +\label{ssec-pol} +The first aim of \LuaTeX-ja project was to implement features (from the +`primitive' level) of \pTeX\ as macros under \LuaTeX, therefore \LuaTeX-ja is +much affected by \pTeX. However, as development proceeded, some +technical/conceptual difficulties arose. Hence we changed the aim +of the project as follows: +\begin{itemize} +\item\emph{\LuaTeX-ja offers at least the same flexibility of + typesetting that p\TeX\ has.} + + We are not satisfied with the ability of producing (PDF) outputs conformed to + JIS~X~4051~\cite{jisx4051}, the Japanese Industrial Standard for + typesetting, or to a technical note~\cite{w3c} by W3C; + if one wants to produce very incoherent outputs for some reason, it + should be possible. +In this point, previous attempts of Japanese typesetting with \LuaTeX\ + which we cited in the previous subsection are inadequate. + +\pTeX\ has some flexibility of typesetting, by changing internal + parameters such as |\kanjiskip| or |\prebreakpenalty|, and by using + custom JFM (Japanese TFM). Therefore we decided to include these + functionality to \LuaTeX-ja. + +\item\emph{\LuaTeX-ja isn't mere re-implementation or porting of \pTeX; + some (technically and/or conceptually) inconvenient features of + \pTeX\ are modified.} + + We describe this point in more detail at the next section. +\end{itemize} + + +\subsection{Overview of the processes} +\label{ssec-over} +We describe an outline of \LuaTeX-ja's process in order. + +\begin{itemize} +\item In the |process_input_buffer| callback: treatment of line-break + after a Japanese character (in Subsection~\ref{ssec-line}). + +\item In the |hyphenate| callback: font replacement. + +\LuaTeX-ja looks into for each \textit{glyph\_node}~$p$ in the horizontal list. If + the character represented by $p$ is considered as a Japanese + character, the font used at $p$ is replaced by the value of + |\ltj@curjfnt|, an attribute for `the current Japanese font' + at~$p$. + +Furthermore, the subtype of $p$ is subtracted by 1 to suppress + hyphenation around~$p$ by \LuaTeX, because later processes of + \LuaTeX-ja take care of all things about Japanese characters. + +\item In |pre_linebreak_filter| and |hpack_filter| callbacks: + +\begin{enumerate} +\item \LuaTeX-ja has its own stack system, and the current horizontal + list is traversed in this stage to determine what the level of + \LuaTeX-ja's internal stack at the end of the list is. We will + discuss it in Subsection~\ref{ssec-stack}. + +\item In this stage, \LuaTeX-ja inserts glues/kerns for Japanese + typesetting in the list. This is the core routine of \LuaTeX-ja. + We will discuss it in Subsections + \ref{ssec-jglue}~and~\ref{ssec-jspec} . + +\item To make a match between a metric and a real font, sometimes + adjustment of the position of (Japanese) glyphs are performed. + We will discuss it in Subsection~\ref{ssec-width}. +\end{enumerate} +\item In the |mlist_to_hlist| callback: treatment of Japanese characters + in math formulas. This stage is similar to adjustment of the + position of glyphs (see above), so we omit to describe this stage + from this paper. +\end{itemize} + +In this paper, a \emph{alphabetic character} means a non-Japanese +character. Similarly, we use the word an \emph{alphabetic font} as the +counterpart of a Japanese font. + +\subsection{Contents of this paper} +Here we describe the contents of the rest of this paper briefly. In +Section~\ref{sec:differences_with_ptex}, we describe major differences +between \pTeX\ and \LuaTeX-ja. The next section, +Section~\ref{sec:distinction_of_characters}, is concentrated on a +problem how we distinguish between Japanese characters and alphabetic +characters. In Section~\ref{sec:current_status}, we show current +development status of the package. Finally, in +Section~\ref{sec:implementation}, we describe some internal routines of +\LuaTeX-ja. + +\subsection{General information of the project} +This \LuaTeX-ja project is hosted by SourceForge.jp. The official wiki +is located on +\url{http://sourceforge.jp/projects/luatex-ja/wiki/}. There is +no stable version on October 22, 2011, however a set of developer sources can be +obtained from the git repository. Members of the project team are as follows +(in random order): Hironori Kitagawa, Kazuki Maeda, Takayuki Yato, +Yusuke Kuroki, Noriyuki Abe, Munehiro Yamamoto, Tomoaki Honda, +and~Shuzaburo Saito. + + +\section{Major differences with \pTeX} +\label{sec:differences_with_ptex} +In this section, we explain several major differences between \pTeX\ +and our \LuaTeX-ja. For general information of Japanese typesetting and the +overview of \pTeX, please see Okumura~\cite{ptexjp}. + + +\subsection{Names of control sequences} +\label{ssec-csname} Because \pTeX\ is an engine modification of Knuth's +original \TeX82 engine, some of the additional primitives take a form that is +very difficult to be simulated by a macro. For example, an additional +primitive |\prebreakpenalty|$\langle\hbox{\it +char\_code}\rangle$|[=]|$\langle\hbox{\it penalty}\rangle$ in \pTeX\ +sets the amount of penalty inserted before a character whose code is +$\langle\hbox{\it char\_code}\rangle$ to $\langle\hbox{\it +penalty}\rangle$, and this form |\prebreakpenalty|$\langle\hbox{\it +char\_code}\rangle$ can be also used for retrieving the value. + +Moreover, there are some internal parameters of \pTeX\ which values of them at the end of a +horizontal box or that of a paragraph are valid in whole box or +paragraph. However, the implementation of these parameters in +\LuaTeX-ja is not so easy; we will discuss it in Subsection~\ref{ssec-stack}. + +From the two problems discussed above, the assignment and retrieval +of most parameters in \LuaTeX-ja are summarized into the following +three control sequences: +\begin{itemize} +\item |\ltjsetparameter{|$\langle\hbox{\it + name}\rangle$|=|$\langle\hbox{\it value}\rangle$|,...}|: for local + assignment. +\item |\ltjglobalsetparameter|: for global assignment. Note that these two control + sequences obey the value of |\globaldefs| primitive. +\item |\ltjgetparameter{|$\langle\hbox{\it + name}\rangle$|}[{|$\langle\hbox{\it optional + argument}\rangle$|}]|: for retrieval. The returned value is always + a string. +\end{itemize} + +\subsection{Line-break after a Japanese character} +\label{ssec-line} + +Japanese texts can break lines almost everywhere, in contrast with +alphabetic texts can break lines only between words (or use +hyphenation). Hence, \pTeX's input processor is modified so that a +line-break after a Japanese character doesn't emit a space. However, +there is no way to customize the input processor of \LuaTeX, other than +to hack its CWEB-source. All a macro package can do is to modify an input line before +when \LuaTeX\ begin to process it, inside the |process_input_buffer| +callback. + +Hence, in \LuaTeX-ja, a comment letter (we reserve U+FFFFF for this +purpose) will be appended to an input line, if this line ends with a Japanese +character.\footnote{Strictly speaking, it also requires that the catcode +of the end-line character is 5~(\emph{end-of-line}). This condition is +useful under the verbatim environment.} One might jump to a conclusion +that the treatment of a line-break by \pTeX\ and that of \LuaTeX-ja are +totally same, however they are different in the respect that \LuaTeX-ja's +judgment whether a comment letter will be appended the line is done +\emph{before} the line is actually processed by \LuaTeX. + +Figure~\ref{fig-linebreak} shows an example of this situation; the +command at the first line marks most of Japanese characters as +`non-Japanese characters'. In other words, from that command onward, the +letter `あ' will be treated as an alphabetic character by +\LuaTeX-ja. Then, it is natural to have a space between `あ' and `y' in +the output (as the second example in the figure), +where the actual output of the first example in the figure does not so. This is +because `あ' at the input line~2 is considered a Japanese character by \LuaTeX-ja, +when \LuaTeX-ja does the decision whether U+FFFFF will be added to the +input line~2. + +\begin{figure} +\begin{LTXexample} +\font\x=IPAMincho \x +\ltjsetparameter{jacharrange={-6}}xあ +y\qquad xあ +y +\end{LTXexample} +\caption{A notable sample showing the treatment of a line-break after a +Japanese character.}\label{fig-linebreak} +\end{figure} + +\subsection{Separation between `real' fonts and metrics} +\label{ssec-sepmet} + +Traditionally, most Japanese fonts used in typesetting are not +proportional, that is, most glyphs have same size (in most cases, +square-shaped). Hence, it is not rare that the contents of different +JFMs are essentially same, and only differ in their names. For example, +|min10.tfm| and |goth10.tfm|, which are JFMs shipped with \pTeX\ for +seriffed \emph{mincho} family and sans-seriffed \emph{gothic} family, +differ their |FAMILY| and |FACE| only. Moreover, |jis.tfm| and +|jisg.tfm|, which is included in the \emph{jis} font metric, which is +used in \emph{jsclasses}~\cite{jsclasses} by Haruhiko Okumura (奥村晴彦), +are totally same as binary files. Considering this situation, we +decided to separate `real' fonts and metrics used for them in +\LuaTeX-ja. Typical declarations of Japanese fonts in the style of plain +\TeX\ are shown in Figure~\ref{fig-jfdef}. We would like to add several +remarks: +\begin{itemize} +\item A control sequence |\jfont| must be used for Japanese fonts, instead of |\font|. +\item \LuaTeX-ja automatically loads the \emph{luaotfload} package, so + \hbox{\tt file:} and \hbox{\tt name:} prefixes, and various font features can be + used as the first line in Figure~\ref{fig-jfdef}. +\item The |jfm| key specifies the metric for the font. In + Figure~\ref{fig-jfdef}, |\foo| and |\bar| will use a metric stored in a + Lua script named |jfm-ujis.lua|. This metric is the standard + metric in \LuaTeX-ja, and is based on JFMs used in the \emph{otf} + package~\cite{otf} (hence almost all characters are square-shaped). +\item The \hbox{\tt psft:} prefix can be used to specify name-only, non-embedded + fonts. When one displays a pdf with these fonts, actual fonts which + will be used for them depend on a pdf reader. +\end{itemize} +The specification of a metric for \LuaTeX-ja is similar to that of a JFM +(see \cite{ptexjp}); characters are grouped into several classes, the +size information of characters are specified for each class, and +glue/kern insertions are specified for each pair of classes. Although +the author have not tried, it may be possible to develop a program that +`converts' a JFM to a metric for \LuaTeX-ja. \LuaTeX-ja offers three +metrics by default; |jfm-ujis.lua|, |jfm-jis.lua| based on the +\emph{jis} font metric, and |jfm-min.lua| based on old |min10.tfm|. + +Note that |-kern| in features +is important, because kerning information from a real font itself will +clash with glue/kern information from the metric. + +\begin{figure} +\begin{verbatim} +\jfont\foo=file:ipam.ttf:jfm=ujis;script=latn;-kern;+jp04 at 12pt +\jfont\bar=psft:Ryumin-Light:jfm=ujis at 10pt +\end{verbatim} +\caption{Typical declarations of Japanese fonts.} +\label{fig-jfdef} +\end{figure} + +\subsection{Insertion of glues/kerns for Japanese typesetting: timing} +\label{ssec-jglue} + +As described in \cite{luatexref}, \LuaTeX's kerning and ligaturing +processes are totally different from those of \TeX82. \TeX82's process is +done just when a (sequence of) character is appended to the current +list. Thus we can interrupt this process by writing as +|f{}irm|. However, \LuaTeX's process is \emph{node-based}, that is, the +process will be done when a horizontal box or a paragraph is ended, so +|f{}irm| and |firm| yield same outputs under \LuaTeX. + +The situation for Japanese characters is more complicated. +Glues (and kerns) which are needed for Japanese +typesetting are divided into the following three categories: +\begin{itemize} +\item Glue (or kern) from the metric of Japanese fonts (\emph{JFM glue}, + for short). + +\item Default glue between a Japanese character and an alphabetic + character (we say \emph{xkanjiskip}, for short), usually 1/4 of + full-width (\emph{shibuaki}) with some stretch and shrink for + justifying each line. +\item Default glue between two consecutive Japanese characters + (\emph{kanjiskip}, for short). The main reason of this glue is to + enable breaking lines almost everywhere in Japanese texts. In most + cases, its natural width is zero, and some stretch/shrink for + justifying each line. +\end{itemize} +In \pTeX, these three kinds of glues are treated differently. A JFM glue +is inserted when a (sequence of) Japanese character is appended to the +current list, same as the case of alphabetic characters in \TeX82. This +means that one can interrupt the insertion process by saying |{}|. A +\emph{xkanjiskip} is inserted just before `hpack' or line-breaking of a +paragraph; this timing is somewhat similar to that of \LuaTeX's kerning +process. Finally, A \emph{kanjiskip} is not appeared as a node anywhere; +only appears implicitly in calculation of the width of a horizontal box, +that of breaking lines, and the actual output process to a DVI +file. These specifications have made \pTeX's behavior very hard to +understand. + +\LuaTeX-ja inserts glues in all three categories simultaneously inside +|hpack_filter| and |pre_linebreak_filter| callbacks. The reasons of +this specification are to behave like alphabetic characters in \LuaTeX\ +(as described in the first paragraph in this subsection), and to clarify +the specification for \LuaTeX-ja's process. + +\subsection{Insertion of glues/kerns for Japanese typesetting: specification} +\label{ssec-jspec} + +\begin{table} +\caption{Examples of differences between \pTeX\ and \LuaTeX-ja.} +\label{tab-jfmglue} +\begin{center} +\begin{tabular}{llllllll} +\toprule +&\multicolumn{1}{c}{(1)}&\multicolumn{1}{c}{(2)}&\multicolumn{1}{c}{(3)}&\multicolumn{1}{c}{(4)}\\ +Input &|あ】{}【〕\/〔| &|い』\/a| &|う)\hbox{}(| &|え]\special{}ï¼»|\\\midrule +\pTeX &あ】\hbox{}【〕\hbox{}〔&い』\/a &う)\hbox{}( &え]\hbox{}ï¼»\\ +\LuaTeX-ja &あ】{}【〕\/〔 &い』\/a &う)\hbox{}( &え]\special{}ï¼»\\ +\bottomrule +\end{tabular} +\end{center} +\end{table} + +\begin{figure} +\begin{center} +\fontsize{40}{40}\selectfont +\imagfm{\jstrut あ}% +\imagfm{\jstrut 】\inhibitglue}% +\imagfm{\jstrut\kern.5\zw}% +\imagfm{\jstrut\kern.5\zw}% +\imagfm{\jstrut\inhibitglue【}% +\imagfm{\jstrut 〕\inhibitglue}% +\imagfm{\jstrut\kern.5\zw}% +\imagfm{\jstrut\kern.5\zw}% +\imagfm{\jstrut\inhibitglue〔}% +\end{center} +\caption{Detail of the output of \pTeX\ in the input~(1) in Table~\ref{tab-jfmglue}.} +\label{fig-ptexjfm} +\end{figure} + +Now we will take a look at the insertion process itself through four points. + +\begin{description} +\item[Ignored nodes] +As noted in the previous subsection, the insertion process in \pTeX\ can + be interrupted by saying |{}| or anything else.\footnote{This + is why some tricks like \texttt{ちょ\char`\{\char`\}っと} for + \texttt{min10.tfm} and other `old' JFMs work.} This leads the + second row in Table~\ref{tab-jfmglue}, or + Figure~\ref{fig-ptexjfm}. Here `the process is interrupted' + means that \pTeX\ does not think the letter `】\inhibitglue' + is followed by `\inhibitglue【', hence two half-width glues + are inserted between `】\inhibitglue' and `\inhibitglue【', + where the left one is from `】\inhibitglue' and the right one + is from `\inhibitglue【'. + + On the other hand, in \LuaTeX-ja, the process is done inside + |hpack_filter| and |pre_linebreak_filter| callbacks. Hence, + \emph{anything that does not make any node will be + ignored}\ in \LuaTeX-ja, as shown in (1) in + Table~\ref{tab-jfmglue}. \LuaTeX-ja also ignores any nodes + which does not make any contribution to current horizontal + list---\emph{ins\_node}, \emph{adjust\_node}, + \emph{mark\_node}, \emph{whatsit\_node} and + \emph{penalty\_node}---, as shown in (4). + + +By the way, around a \emph{glyph\_node} $p$ there may be some nodes + attached to~$p$. These are an accent and kerns for + moving it to the right place, and a kern from the italic + correction\footnote{\TeX82 (and \LuaTeX) does not distinguish + between explicit kern and a kern for italic correction. To + distinguish them, an additional subtype for a kern is introduced + in \pTeX. On the other hand, \LuaTeX-ja uses an additional attribute and + redefines \texttt{\char`\\/} to set this attribute.} for $p$. It is natural that + these attachments should be ignored inside the process. Hence + \LuaTeX-ja takes this approach, as the latest version of + \pTeX\ (version~p3.2). This explains (2) in the Table~\ref{tab-jfmglue}. + +Summarizing the above, one should put an empty horizontal box |\hbox{}| to + where he/she wants to interrupt the insertion process in + \LuaTeX-ja as (3) in the Table~\ref{tab-jfmglue}. + +\item[Fonts with the same metric] +Recall that \LuaTeX-ja separates `real' fonts and metrics, as in Subsection~\ref{ssec-sepmet}. +Consider the following input, where all Japanese fonts use same metric + (in \LuaTeX-ja), and |\gt| selects \emph{gothic} family for + the current Japanese font family: +\begin{quote} +\begin{verbatim} +明朝)\gt (ゴシック +\end{verbatim} +\end{quote} +If the above input is processed by \pTeX, because the insertion process is + interrupt by |\gt|, the result looks like +\begin{quote} +\mc 明朝)\hbox{}\gt (ゴシック +\end{quote} +However this seems to be unnatural, since two Japanese fonts in the + output use the same metric, i.e.,~the same + typesetting rule. Hence, we decided that Japanese fonts with + the same metric are treated as one font in the insertion + process of \LuaTeX-ja. Thus, the output from the above input + in \LuaTeX-ja looks like: +\begin{quote} +\mc 明朝)\gt (ゴシック +\end{quote} +One might have the situation that this default behavior is not + suitable. \LuaTeX-ja offers a way to handle this situation, but + we leave it to the manual~\cite{man}. + +\item[Fonts with different metrics] +The case where two adjacent Japanese characters use different metrics + and/or different size is similar. Consider the following + input where the \emph{mincho} family and the \emph{gothic} + family use different metrics: +\begin{quote} +\begin{verbatim} +漢)\gt (漢)\large (大 +\end{verbatim} +\end{quote} +As the previous paragraph, this input yields the following, by \pTeX: +\begin{quote} +\mc 漢)\hbox{}\gt (漢)\hbox{}\large (大 +\end{quote} +We had thought that amounts of spaces between parentheses in the above output + are too much. Hence we have changed the default behavior of + \LuaTeX-ja, so that the amount of a glue between two Japanese + characters with different metrics is the \emph{average} of a glue + from the left character and that from the right + character. For example, Figure~\ref{fig-diffmet} shows the + output from the above input. The width of glue indicated `(1)' is + $(a/2 + a/2)/2 = 0.5a$, and the width of glue indicated `(2)' + is $(a/2 + 1.2a/2)/2 = 0.55a$. This default behavior can be + changed by \textsf{differentjfm} parameter of \LuaTeX-ja. + +\begin{figure} +\begin{center} +\fontsize{40}{40}\selectfont +\imagfm{\jstrut\smash{% + \vtop{\lineskiplimit=\maxdimen\lineskip2pt\halign{#\cræ¼¢\cr + \small\vrule height .5ex depth .5ex\hrulefill\ \lower.5ex\hbox{$a$}\ + \hrulefill\vrule height .5ex depth .5ex\cr}}}}% +\imagfm{\jstrut )\inhibitglue}% +\hbox to .5\zw{\hss\normalsize (1)\hss}% +\imagfm{\jstrut\inhibitglue\gt (}% +\imagfm{\jstrut\gt æ¼¢}% +\imagfm{\jstrut\gt )\inhibitglue}% +\hbox to .55\zw{\hss\normalsize (2)\hss}% +\imagfm{\fontsize{48}{48}\selectfont\jstrut\gt\inhibitglue (}% +\imagfm{\fontsize{48}{48}\selectfont\jstrut\smash{% + \vtop{\lineskiplimit=\maxdimen\lineskip2pt\halign{#\cr\gt 大\cr + \small\vrule height .5ex depth .5ex\hrulefill\ \lower.5ex\hbox{$1.2a$}\ + \hrulefill\vrule height .5ex depth .5ex\cr}}}} +\end{center} +\caption{Fonts with different metrics.} +\label{fig-diffmet} +\end{figure} + +\item[\emph{kanjiskip} and \emph{xkanjiskip}] +In \pTeX, the value of \emph{xkanjiskip} is controlled by a skip named + |\xkanjiskip|. A well-known defect of this implementation is + that the value of \emph{xkanjiskip} is not connected with the + size of the current Japanese font. It seems that |EXTRASPACE|, + |EXTRASTRETCH|, |EXTRASHRINK| parameters in a JFM are + reserved for specifying the default value of + \emph{xkanjiskip} in a unit of the design size, but \pTeX\ + did not use these parameters, actually. + +Considering this situation of p\TeX, \LuaTeX-ja can use the value of + \emph{xkanjiskip} that specified in a metric. If the value of + \emph{xkanjiskip} on user side (this is the value of + \textsf{xkanjiskip} parameter of |\ltjsetparameter|) is + |\maxdimen|, then \LuaTeX-ja uses the specification from + the current used metric as the actual value of + \emph{xkanjiskip}. This description also applies for \emph{kanjiskip}. +\end{description} + +\section{Distinction of characters} +\label{sec:distinction_of_characters} Since \LuaTeX\ can handle Unicode +characters natively, it is a major problem that how we distinguish +Japanese characters and alphabetic characters. For example, the +multiplication sign (U+00D7) exists both in ISO-8859-1 (hence in Latin-1 +Supplement in Unicode) and in the basic Japanese character set +JIS~X~0208. It is not desirable that this character is always treated as +an alphabetic character, because this symbol is often used in the sense +of `negative' in Japan. + +\subsection{Character ranges} +Before we describe the approach taken in \LuaTeX-ja, we review the +approach taken by u\pTeX. u\pTeX\ extends the |\kcatcode| primitive in +\pTeX, to use this primitive for setting how a character is treated +among alphabetic characters~(15), \emph{kanji}~(16), \emph{kana}~(17), +\emph{Hangul}~(17), or~\emph{other CJK characters}~(18). +The assignment to |\kcatcode| can be done by a Unicode +block.\footnote{There are some exceptions. For example, U+FF00--FFEF +(Halfwidth and Fullwidth Forms) are divided into three blocks in recent +u\pTeX.} + +\LuaTeX-ja adopted a different approach. There are many Unicode blocks + in Basic Multilingual Plane which are not included in + Japanese fonts, therefore it is inconvenient if we process by a Unicode + block. Furthermore, JIS~X~0208 are not just union of Unicode + blocks; for example, the intersection of JIS~X~0208 and + Latin-1 Supplement is shown in + Table~\ref{tab-inter}. Considering these two points, to + customize the range of Japanese characters in \LuaTeX-ja, one + has to define ranges of character codes in his/her source in advance. + + +\begin{table} +\caption{Intersection of JIS~X~0208 and Latin-1 Supplement.} +\label{tab-inter} +\begin{center} +\begin{tabular}{llll} +\ltjjachar"A7 (U+00A7),& +\ltjjachar"A8 (U+00A8),& +\ltjjachar"B0 (U+00B0),& +\ltjjachar"B1 (U+00B1),\\ +\ltjjachar"B4 (U+00B4),& +\ltjjachar"B6 (U+00B6),& +\ltjjachar"D7 (U+00D7),& +\ltjjachar"F7 (U+00F7) +\end{tabular} +\end{center} +\end{table} + + +We note that \LuaTeX-ja offers two additional control sequences, + |\ltjjachar| and |\ltjalchar|. They are similar to |\char| + primitive, however |\ltjjachar| always yields a Japanese character, provided that + the argument is more than or equal to 128, and |\ltjalchar| always + yields an alphabetic character, regardless of the argument. + +\subsection{Default setting of ranges} +Patches for plain \TeX\ and \LaTeXe\ of \LuaTeX-ja predefine eight character +ranges, as shown in Table~\ref{tab-chrrng}. Almost of these ranges are +just the union of Unicode blocks, and determined from the Adobe-Japan1-6 +character collection~\cite{aj16}, and JIS~X~0208. Among these eight ranges, +the ranges~2, 3, 6, 7, and~8 are considered ranges of Japanese +characters, and others are considered ranges of alphabetic +characters.\footnote{Note that ranges 3~and~8 are considered ranges of +alphabetic characters in this paper.} We remark on ranges 2~and~8: +\begin{description} +\item[The range~2] +JIS~X~0208 includes Greek letters and Cyrillic letters, however, these + letters cannot be used for typesetting Greek or Russian, of + course. Hence it is reasonable that Greek letters and + Cyrillic consist another character range. +\item[The range~8] +If one wants to use 8-bit TFMs, such as T1 or TS1 encodings, he should + mark this range~8 as a range of alphabetic characters by +\begin{quote} +|\ltjsetparameter{jacharrange={-8}}| +\end{quote} +This is because some 8-bit TFMs have a glyph in this range; for example, + the character `\OE' is located at |"D7| in the T1 encoding. %" +\end{description} + + +\begin{table} +\caption{Predefined ranges in \LuaTeX-ja.} +\label{tab-chrrng} +\begin{center} +\begin{tabular}{@{\bf}rl} +1&(Additional) Latin characters which are not belonged in the range~8.\\ +2&Greek and Cyrillic letters.\\ +3&Punctuations and miscellaneous symbols.\\ +4&Unicode blocks which does not intersect with Adobe-Japan1-6.\\ +5&Surrogates and supplementary private use Areas.\\ +6&Characters used in Japanese typesetting.\\ +7&Characters possibly used in CJK typesetting, but not in Japanese.\\ +8&Characters in Table~\ref{tab-inter}. +\end{tabular} +\end{center} +\end{table} + +\subsection{Control sequences producing Unicode characters} +\label{ssec-unichar} + +The \emph{fontspec} package\footnote{Preciously saying, it is the +\emph{xunicode} package, originally a package for \XeTeX and +automatically loaded by the \emph{fontspec} package.} offers various +control sequences that produce Unicode characters. However, these +control sequences as it stands cannot work correctly with the default +range setting of \LuaTeX-ja. For example, |\textquotedblleft| is just +an abbreviation of |\char"201C\relax|, and the character U+201C (LEFT %" +DOUBLE QUOTATION MARK) is treated as an Japanese character, because it +belongs to the range~3. This problem is resolved by using |\ltjalchar| +instead of the |\char| primitive. It is included in an optional package +named \texttt{luatexja-\penalty0fontspec.sty}. Figure~\ref{fig-unitxt} +shows several ways to typeset a character, both as a Japanese character +and as an alphabetic characters. + +\begin{figure} +\begin{LTXexample} +×, \char`×, % depend on range setting +\ltjalchar`×, % alphabetic char +\ltjjachar`×, % Japanese char +\texttimes % alph. char (by fontspec) +\end{LTXexample} +\caption{Control sequences producing a Unicode character.} +\label{fig-unitxt} +\end{figure} + +The situation looks similar in math formulas, but in fact it differs. +Each control sequence that represents an ordinary symbol defined by the +\emph{unicode-math} package is just synonym of a character. For example, +the meaning of |\otimes| is just the character U+2297 (CIRCLED TIMES), +which is included in the range~3. However, it is difficult to define a +control sequence like |\ltjalUmathchar| as a counterpart of +|\Umathchar|, since an input like `|\sum^\ltjalUmathchar ...|' has to be +permitted. + +However, we couldn't develop a satisfactory solution to this problem in +time for this paper, due to a lack of time. We are just testing a +solution below: +\begin{itemize} +\item \LuaTeX-ja has a list of character codes which will be always treated as + alphabetic characters in math mode. Considering 8-bit TFMs for + math symbols, this list includes natural numbers between |"80| and + |"FF| by default. +\item Redefine internal commands defined in the \emph{unicode-math} + package so that +codes of characters which are mentioned in the \emph{unicode-math} + package will be included in the list. +\end{itemize} + + +We would like to extend treatments described in this subsection to 8-bit +font encodings, but we leave it to further development too. + +\section{Current status of development} +\label{sec:current_status} +At the moment, \LuaTeX-ja can be used under plain \TeX, and under +\LaTeXe. Generally speaking, one only has to read |luatexja.sty|, by +|\input| command or |\usepackage| (in~\LaTeXe), if you merely want to +typeset Japanese characters. We look more details by parts. + +\subsection{`Engine extension'} +The lowest part of \LuaTeX-ja corresponds to the \pTeX\ extension as +\emph{an engine extension of \TeX}\@. We, the project members, think that +this part is almost done. There is one more feature of \LuaTeX-ja which +we are going to explain: + +\begin{description} +\item[Shifting baseline] +In order to make a match between Japanese fonts and alphabetic fonts, + sometimes shifting the baseline of alphabetic characters may + be needed. \pTeX\ has a dimension |\ybaselineshift|, which + corresponds to the amount of shifting down the baseline of alphabetic + characters. This is useful for Japanese-based documents, but + not for documents mainly in languages with alphabetic + characters. + +Hence, \LuaTeX-ja extends \pTeX's |\ybaselineshift| to Japanese + characters. Namely, \LuaTeX-ja offers two parameters, + \textsf{yjabaselineshift} and \textsf{yalbaselineshift}, for the + amount of shifting the baseline of Japanese characters and + that of alphabetic characters, respectively. +\begin{figure} +\begin{center} +\fontsize{40}{40}\selectfont\fboxsep0mm +\vrule width 0.9\textwidth height0.4pt depth0.4pt\kern-0.9\textwidth +\hbox to 0.9\linewidth{% +\hfil +\raise-10pt\imagfm{\jstrut æ¼¢}% +\raise-10pt\imagfm{\jstrut 字}\hskip.25\zw% +\imagfm{p}% +\imagfm{h}% +\hfil\hfil +\imagfm{\jstrut æ¼¢}% +\imagfm{\jstrut 字}\hskip.25\zw% +\raise-10pt\imagfm{p}% +\raise-10pt\imagfm{h}% +\hfil +} +\end{center} + +\caption{First example of shifting baseline.} +\label{fig-bls} +\end{figure} + +\begin{figure} +\begin{center} +\fontsize{30}{30}\selectfont\fboxsep0mm +\vrule width 0.9\textwidth height0.4pt depth0.4pt\kern-0.9\textwidth +\hbox to 0.9\linewidth{% +\hfil +\imagfm{a}% +\imagfm{b}\hskip.25\zw% +\imagfm{\jstrut 本}% +\imagfm{\jstrut 文}\hskip.33333\zw% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut\inhibitglue (}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut 注}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut 釈}\hskip.1666667\zw% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont c}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont o}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont m}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont m}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont e}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont n}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont t}% +\raise3.514582pt\imagfm{\fontsize{20}{20}\selectfont\jstrut )\inhibitglue}% +\hskip.33333\zw% +\imagfm{\jstrut 本}% +\imagfm{\jstrut 文}% +\hfil +} +\end{center} + +\caption{Second example of shifting baseline.} +\label{fig-small} +\end{figure} + +An example output is shown in Figure~\ref{fig-bls}. The left half is the + output when \textsf{yjabaselineshift} is positive, hence the + baseline of Japanese characters is shifted down. On the other + hand, the right half is the output when + \textsf{yalbaselineshift} is positive, hence the baseline of + alphabetic characters is shifted down. Figure~\ref{fig-small} + shows an interesting use of these parameters. + +\end{description} +Note that \LuaTeX-ja doesn't support vertical typesetting, \emph{tategaki}, for now. + +\subsection{Patches for plain \TeX\ and \LaTeXe} +\pTeX\ has a patch for plain \TeX, namely |ptex.tex|, that for \LaTeXe\ +macro (this patch and \LaTeXe\ consist \emph{p\LaTeXe}), and +|kinsoku.tex| which includes the default setting of \emph{kinsoku +shori}, the Japanese hyphenation. We ported them to \LuaTeX-ja, except +the codes related to vertical typesetting, because \LuaTeX-ja doesn't +support vertical typesetting yet. We remark one point related to the +porting: +\begin{description} + +\item[Behavior of\/ {\tt\char92fontfamily\/}] +The control sequence |\fontfamily| in p\LaTeXe\ changes the current alphabetic + font family and/or the current Japanese font family, + depending the argument. More concretely, + |\fontfamily{|$\langle\hbox{\it arg\/}\rangle$|}| changes the + current alphabetic font family to $\langle\hbox{\it + arg\/}\rangle$, if and only if one of the following + conditions are satisfied: +\begin{itemize} +\item An alphabetic font family named $\langle\hbox{\it arg\/}\rangle$ in + \emph{some} alphabetic encoding is already defined in the document. +\item There exists an alphabetic encoding $\langle\hbox{\it + enc\/}\rangle$ already defined in the document such that a font + definition file $\langle\hbox{\it enc\/}\rangle\langle\hbox{\it + arg\/}\rangle$|.fd| (all lowercase) exists. +\end{itemize} +The same criterion is used for changing Japanese font family. + +To work this behavior well, it is required that a list of all (alphabetic) encodings defined + already in the document. However, since \LuaTeX-ja + is loaded as a package, \LuaTeX-ja cannot have this list. + Hence \LuaTeX-ja adopted a different approach, namely + |\fontfamily{|$\langle\hbox{\it arg\/}\rangle$|}| changes the + current alphabetic font family to $\langle\hbox{\it + arg\/}\rangle$, if and only if: +\begin{itemize} +\item An alphabetic font family named $\langle\hbox{\it arg\/}\rangle$ + in the current alphabetic encoding $\langle\hbox{\it + enc\/}\rangle$ is already defined in the document. +\item A font definition file $\langle\hbox{\it enc\/}\rangle\langle\hbox{\it + arg\/}\rangle$|.fd| (all lowercase) exists. +\end{itemize} + + +\end{description} + + + +\subsection{Classes for Japanese documents} +To produce `high-quality' Japanese documents, we need not only that +Japanese characters are correctly placed, but also class files for +Japanese documents. Two major families of classes are widely used in Japan: +\emph{jclasses} which is distributed with the official p\LaTeXe\ macros, +and \emph{jsclasses}. At the present, \LuaTeX-ja +simply contains their counterparts: \emph{ltjclasses} and +\emph{ltjsclasses}. However, the policy on classes is not determined +now, and we hope to have another family of classes which are useful for +commercial printing. In the author's opinion, \emph{ltjclasses} is +better to stay as an example of porting of class files for \pTeX\ to +\LuaTeX-ja. + +\subsection{Patches for packages} +Apart from patches for the \LaTeXe~kernel and classes for Japanese +documents, we need to make patches for several packages. At the present, +we considered the following packages, and made patches or porting for +the former two packages. + +\begin{description} +\item[The \emph{fontspec} package] The \emph{fontspec} package is built + on NFSS2, hence control sequences offered by the + \emph{fontspec} package, such as |\setmainfont|, are only + effective for alphabetic fonts if \LuaTeX-ja is loaded. + \texttt{luatexja-\penalty0fontspec.sty} (not automatically + loaded) offers these counterparts for Japanese fonts, with + additional `j' in the name of control sequences, such as + |\setmainjfont|. As described in + Subsection~\ref{ssec-unichar}, it also includes a patch for + control sequences producing Unicode characters. + +\item[The \emph{otf} package] +This package is widely used in \pTeX\ for typesetting characters which is +not in JIS~X~0208, and for using more than one weight in \emph{mincho} +and \emph{gothic} font families. Therefore \LuaTeX-ja supports features +in the \emph{otf} package, by loading \texttt{luatexja-\penalty0otf.sty} + manually. Note that characters by |\UTF{}| and + |\CID{}| are not appended to the current list as a + \emph{glyph\_node}, to avoid from callbacks by the + \emph{luaotfload} package. We have another remark; |\CID| + does not work with TrueType fonts, since |\CID| uses the + conversion table between CID and the glyph order of the + current Japanese font. + +\item[The \emph{listings} package] +It is known for users of \pTeX\ that there is a patch |jlisting.sty| for + the \emph{listings} package, to use Japanese characters in + the |lstlisting| environment. Generally speaking, it also can + be used in \LuaTeX-ja. However, it seems to be that a + Japanese character after a space does not receive any process + of the \emph{listings} package; this is inconvenient when we + use the \emph{showexpl} package. + +There is another way to use characters whose code are above 256 with the + \emph{listings} package (described in \cite{apl}). However, + this method is not suitable for Japanese, since the number of + Japanese characters is very large. We hope that the + \emph{listings} package will be able to handle all characters above + 256 without any patch, in the future. + + +\end{description} + + + +\section{Implementation} +\label{sec:implementation} +\subsection{Handling of Japanese fonts} +In \pTeX, there are three slots for maintaining current fonts, namely +|\font| for alphabetic fonts, |\jfont| for Japanese fonts (in horizontal +direction) and |\tfont| for Japanese fonts (in vertical direction). With +these slots, we can manage the current font for alphabetic characters +and that for Japanese characters separately in \pTeX. However, \LuaTeX\ +has only one slot for maintaining the current font, as \TeX82. This +situation leads a problem: how can we maintain the `current Japanese +font'? + +There are three approaches for this problem. One approach is to make a +mapping table from alphabetic fonts to corresponding Japanese fonts +(here we don't assume that NFSS2 is available). Another approach is +that we always use composite fonts with alphabetic fonts and Japanese +fonts. The third approach is that the information of the current +Japanese font is stored in an attribute. We adopted the third approach, +since \LuaTeX-ja is much affected by \pTeX\ as we noted in +Subsection~\ref{ssec-pol}. + +As in Figure~\ref{fig-jfdef}, \LuaTeX-ja uses |\jfont| for defining +Japanese fonts, as \pTeX. However, because the information of the current +Japanese font is stored into an attribute, control sequences defined by +|\jfont| (e.g.,~|\foo| and |\bar| in Figure~\ref{fig-jfdef}) is +not representing a font by the means of \TeX82. In other words, each of +these control sequences is just an assignment to an attribute, therefore +they cannot be an argument of |\the|, |\fontname|, nor |\textfont|. + + +Callbacks by the \emph{luaotfload} package, e.g.,~replacement of glyphs +according to OpenType font features, are performed just after `Examination of +stack level' (see Subsections +\ref{ssec-over}~and~\ref{ssec-stack}). Also note that calculation of +character classes for each Japanese character is done \emph{after} the +these callbacks for now. + +\subsection{Stack management} +\label{ssec-stack} + +As we noted in Subsection~\ref{ssec-csname}, parameters that the values +at the end of a horizontal box or that of a paragraph are valid in +whole box or paragraph, such as \emph{kanjiskip}, cannot be implemented +by internal integers or registers of other types in \TeX. We explain it +in this subsection. + +\begin{figure} +\begin{lstlisting} +void package(int c) +{ + ... + d = box_max_depth; + unsave(); + save_ptr -= 4; + if (cur_list.mode_field == -hmode) { + cur_box = filtered_hpack(cur_list.head_field, + cur_list.tail_field, saved_value(1), + saved_level(1), grp, saved_level(2)); + subtype(cur_box) = HLIST_SUBTYPE_HBOX; + } else { +\end{lstlisting} +\caption{An extract of a CWEB-source \texttt{tex/packaging.w} of \LuaTeX.} +\label{fig-ltsrc} +\end{figure} + +Figure~\ref{fig-ltsrc} is an extract of a CWEB-source +\texttt{tex/packaging.w} of \LuaTeX\ (SVN revision 4358). This function +is called just when an explicit |\hbox{...}| or |\vbox{...}| is ended, and +the function |filtered_hpack()| is where the |hpack_filter| and then the +actual `hpack' process are performed. Notice that the |unsave()| +function is called before |filtered_hpack()|. This is the problem; +because of |unsave()|, we can retrieve only the values of registers +\emph{outside} the box, even in the |hpack_filter| callback. + +To cope with this problem, \LuaTeX-ja has its own stack system, based on +Lua codes in \cite{stack-mail}. Furthermore, \emph{whatsit} nodes whose +\emph{user\_id} is 30112 (\emph{stack\_node}, for short) will be +appended to the current horizontal list each time the current stack +level is incremented, and their values are the values of +|\currentgrouplevel| at that time. In the beginning of the |hpack_filter| +callback, the list in question is traversed to determine whether the +stack level at the end of the list and that outside the box coincides. + +Let $x$ be the value of |\currentgrouplevel|, and $y$ be the current +stack level, both inside the |hpack_filter| callback, i.e.,~outside a +horizontal box. Consider a list which represents the content of the box, +then we have: +\begin{itemize} +\item A \emph{stack\_node} whose value is $x+1$ (because all materials + in the box are included in a group |\hbox{...}|, the value of + |\currentgrouplevel| inside the box is at least $x+1$) in the list + corresponds to an assignment related to the stack system in just + top-level of the list, like +\begin{quote} +\begin{verbatim} +\hbox{...(assignment)...} +\end{verbatim} +\end{quote} +In this case, the current stack level is incremented to $y+1$ after the assignment. +\item A \emph{stack\_node} whose value is more than $x+1$ in the list corresponds +to an assignment inside another group contained in the box. For example, + the following input creates +a \emph{stack\_node} whose value is $x+3=(x+1)+2$: +\begin{quote} +\begin{verbatim} +\hbox{...{...{...(assignment)}...}...} +\end{verbatim} +\end{quote} +\end{itemize} +Thus, we can conclude that the stack level at the end of the list is +$y+1$, if and only if there is a \emph{stack\_node} whose value is +$x+1$. Otherwise, the stack level is just $y$. + +\subsection{Adjustment of the position of Japanese characters} +\label{ssec-width} + +The size of a glyph specified in a metric and that of a real font +usually differ. For example, the letter `\inhibitglue【' is half-width +in |jfm-ujis.lua| or |jis.tfm|, while this letter is full-width like `【' +in most TrueType fonts used in Japanese typesetting, such as +IPA~Mincho. Hence the adjustment of position of such glyphs is +needed. In the context of \pTeX, this process was performed using virtual fonts. + +On the other hand, Lua\TeX-ja does the adjustment by encapsulating a glyph +into a horizontal box. There are two main reasons why we adopted this +method; one is that we feared Lua codes for coexisting with callbacks by +the |luaotfload| package would be large if we use virtual fonts, and the +other is to cope with shifting of the baseline of characters at the +same time. + +\begin{figure} +\begin{center}\unitlength=9pt\small +\begin{picture}(15,12)(-1,-3) + +\color{grayx}% real glyph +\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} + +\color{black}% real glyph :step1 +\thicklines +\put(-1,-1.5){\line(0,1){7}\line(0,-1){2.5}} +\put(5,-1.5){\line(0,1){7}\line(0,-1){2.5}} +\put(-1,5.5){\line(1,0){6}} +\put(-1,-4){\line(1,0){6}} +\put(-1,0){\makebox(0,0)[r]{\strut$R$\,}} + +\thicklines +\put(0,0){\vector(0,1){9}\line(0,-1){3}\vector(1,0){12}} +\put(12,9){\makebox(0,0)[rt]{\strut$M$\,}} +\put(12,0){\line(0,1){9}\vector(0,-1){3}} +\put(0,9){\line(1,0){12}} +\put(0,-3){\line(1,0){12}} +\put(0.2,4.5){\makebox(0,0)[l]{\texttt{height}}} +\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}} +\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}} + +\thicklines +\put(3,0){\line(0,1){7}\line(0,-1){2.5}\line(1,0){6}} +\put(9,0){\line(0,1){7}\line(0,-1){2.5}} +\put(3,7){\line(1,0){6}} +\put(3,-2.5){\line(1,0){6}} +\newsavebox{\eqdist} +\savebox{\eqdist}(0,0)[c]{% + \thinlines + \put(-0.08,0.2){\line(0,-1){0.4}}% + \put(0.08,0.2){\line(0,-1){0.4}}} +\put(1.5,0){\usebox{\eqdist}} +\put(10.5,0){\usebox{\eqdist}} + +\thicklines +\put(3,-1.5){\vector(-1,0){4}} +\put(1,-1.7){\makebox(0,0)[t]{\texttt{left}}} +\put(3,0){\vector(0,-1){1.5}} +\put(3.2,-0.75){\makebox(0,0)[l]{\texttt{down}}} +\end{picture} +\end{center} +\caption{The position of the `real' glyph.} +\label{fig-pos} +\end{figure} + +Figure~\ref{fig-pos} shows the adjustment process. A large square $M$ is +the imaginary body specified in the metric, and a vertical +rectangle is the imaginary body of a real glyph. First, the real glyph +is aligned with respect to the width of $M$. In the figure, the real +glyph is aligned `middle'; this setting is useful for the full-width +middle dot `・'. We have other settings, `left' and `right'. +Furthermore, it is shifted according to the value of |left| and |down|, +which are specified in the metric, for fine adjustment. +The final position of the real glyph +is shown by the gray rectangle~$R$. If the amount of shifting the baseline is +not zero, $M$ (and hence the real glyph) is shifted by that amount. + +We would like to remark briefly on the vertical position of a real +glyph. A JFM (or a metric used in \LuaTeX-ja) and a real font used for +it may have different height or depth. In that case, it may look better +if the real glyph is shifted vertically to match the height-depth ratio +specified in the metric, while any vertical adjustment except the +adjustment by the |down| value does not performed in the present +implementation of \LuaTeX-ja . This situation is carefully studied by +Otobe~\cite{min10}. Here the policy on this problem is not determined +now, however we would like to offer several solutions in future +development. + + +\subsection{Further notes on metrics for \LuaTeX-ja} +\label{ssec-jfmnote} +\begin{description} +\item[Proportional typesetting] +Some fonts are proportional, that is, each glyphs in those fonts have + its own width. An example of proportional fonts is + IPA~P~Mincho. Using these fonts in \pTeX\ is very + hard, since one needs to make a dedicated JFM for a real font. + +\LuaTeX-ja supports these proportional fonts; specifying the |width| of + a character class in a metric to |"prop"| makes the width of + each character in this class that of a glyph in a real font. +If no JFM glue is needed, one simply has to use |jfm-prop.lua|. The + following is an example: +\begin{LTXexample} +\jfont\pr=file:ipamp.ttf:jfm=prop at 3.25mm +あいうえお\\\pr{}あいうえお +\end{LTXexample} + +\item[Scaling by metrics] +Because of virtual fonts, even if one specifies to use |min10.tfm| or + |jis.tfm| at 10\,pt in \pTeX, the actual size of real fonts used in + dviwares for these JFMs are 9.62216\,pt. Hence, for + example, if one wants to use 3.25\,mm Japanese + fonts and 10\,pt alphabetic fonts in \pTeX, + he/she needs to scale a Japanese font by +\[ + \frac{3.25\,\mathrm{mm}}{10\,\mathrm{pt}\cdot 0.962216}\simeq 0.961 +\] +in declarations of Japanese fonts. + +\LuaTeX-ja didn't support such scaling of glyphs by metrics, so one has + to adjust the size argument for |\jfont| manually. Continuing + the previous example, for using 3.25\,mm Japanese + fonts and 10\,pt alphabetic fonts in \LuaTeX-ja, +he/she needs to scale a Japanese font by +3.25\,mm${}/{}$10\,pt${}\simeq{}$0.92487. +\end{description} + +\section{Conclusion} +We have discussed about our \LuaTeX-ja package, which is much affected +by \pTeX. For now, it can be used for experimental use, however there +are much refinements which are needed for regular use. The author hopes +that this paper and \LuaTeX-ja project contribute the typesetting Japanese, +and possibly other Asian languages, under \LuaTeX. + +\section*{Acknowledgments} +The author would like to thank Ken Nakano and Hideaki Togashi for their +development and management of ASCII \pTeX. The author is very grateful to Haruhiko +Okumura for his leadership in the Japanese \TeX\ community. The author +is also very grateful to members of \LuaTeX-ja project team for their +valuable cooperation in development. + +%%% The style of the bibiliogrphy is `amsplain'. +\providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace} +\providecommand{\href}[2]{#2} +\begin{thebibliography}{99} + +\bibitem{aj16} +Adobe Systems Incorporated, \emph{Adobe-Japan1-6 Character Collection + for CID-Keyed Fonts}, Technical Note~\#5078, 2004. +\newblock\url{http://partners.adobe.com/public/developer/en/font/5078.Adobe-Japan1-6.pdf} + +\bibitem{ptex} +ASCII MEDIA WORKS, アスキー日本語\TeX\ (\pTeX). \newblock\url{http://ascii.asciimw.jp/pb/ptex/} + +\bibitem{apl} +John Baker, \emph{Typesetting UTF8 APL code with the \LaTeX\ lstlisting package}. +\newblock\url{http://bakerjd99.wordpress.com/2011/08/15/} + +\bibitem{omega} +Jin-Hwan~Cho and Haruhiko Okumura, \emph{Typesetting CJK Languages with Omega}, +\TeX, XML, and Digital Typography, Lecture Notes in Computer Science, vol.~3130, +Springer, 2004, 139--148. + +\bibitem{joylua} +Yannis Haralambous. \emph{The Joy of \LuaTeX}. \newblock\url{http://luatex.bluwiki.com/} + +\bibitem{jisx4051} +Japanese Industrial Standards Committee. \emph{JIS~X~4051: Formatting + rules for Japanese documents}, 1993, 1995, 2004. + +\bibitem{eptex} +北川弘典, $\varepsilon$-\pTeX についてのwiki. +\newblock\url{http://sourceforge.jp/projects/eptex/wiki/FrontPage} + +\bibitem{luaums} +北川弘典, \LuaTeX で日本語. +\newblock\url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=378} + +\bibitem{luatexref} +\LuaTeX\ development team, \emph{The \LuaTeX\ reference}. +\newblock\url{http://www.luatex.org/svn/trunk/manual/luatexref-t.pdf} (snapshot of SVN trunk) + +\bibitem{man} +\LuaTeX-ja project team, \emph{The \LuaTeX-ja package}. \newblock +Not completed for now. \newblock Available at |doc/man-en.pdf| (in English) or + |doc/man-ja.pdf| (in Japanese) +in the Git repository. + +\bibitem{luajp-test} +香田温人, \LuaTeX と日本語. +\newblock\url{http://www1.pm.tokushima-u.ac.jp/~kohda/tex/luatex-old.html} + +\bibitem{luajalayout} +前田一貴, luajalayout パッケージ---Lua\LaTeX によ + る日本語組版---. +\newblock\url{http://www-is.amp.i.kyoto-u.ac.jp/lab/kmaeda/lualatex/luajalayout/} + +\bibitem{jsclasses} +奥村晴彦, p\LaTeXe 新ドキュメントクラス. +\newblock\url{http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/} + +\bibitem{ptexjp} +Haruhiko Okumura, \emph{\pTeX\ and Japanese Typesetting}, + The Asian Journal of \TeX\ \textbf{2}~(2008), 43--51. + +\bibitem{min10} +乙部厳己, min10フォントについて. +\newblock\url{http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf} + +\bibitem{otf} +齋藤修三郎, Open Type Font用VF. +\newblock\url{http://psitau.kitunebi.com/otf.html} + +\bibitem{stack-mail} +Jonathan Sauer, \emph{[Dev-luatex] tex.currentgrouplevel}. +\newblock\url{http://www.ntg.nl/pipermail/dev-luatex/2008-August/001765.html} + +\bibitem{uptex} +Takuji Tanaka, \emph{u\pTeX, up\LaTeX---unicode version of \pTeX, p\LaTeX}. +\newblock\url{http://homepage3.nifty.com/ttk/comp/tex/uptex_en.html} + +\bibitem{ptexenc} +Nobuyuki Tsuchimura and Yusuke Kuroki, \emph{Development of Japanese \TeX\ Environment}, + The Asian Journal of \TeX\ \textbf{2}~(2008), 53--62. + +\bibitem{w3c} +W3C Working Group, \emph{Requirements for Japanese Text Layout}. +\newblock\url{http://www.w3.org/TR/jlreq/} +\end{thebibliography} + +\end{document} -- 2.11.0