�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!thbrk.tri000064400002135172152525207440006417 0ustar00[=rt} T 8  ( nn N0,&vHP *eO e  1O (]ZT T   Ry $  2 2$  P _     3jy   I  RhV  ! ~:  {=4q lIP}bz}:" ~ z=  a\!  9 xdwV 99`\g kl@ttr)z)@s{s>)scwt&onVy#^s&pm)x#LK6W)7Ew#v#jtftj)_6\ /zU TX 5WNu#et3cWN6E^68Q 7Q]6Cb=j2c<j[ b$FM#K;m5n2Sb0Qf@`1yPf/6X:-VJg':mOfDiIgHgf9m/ ?`GgFgo>`EgCi7v"Bi:4n,3n{,Ai]|Z{v. !z8mmv+|*|)|(|3A'|z<R7Y{xxi{&|R{{{%}{{V{{ ~~,~~\;~~R{\{h{}z'}%}.!}~*}1P|1} 5OI5KEurE..D /laD/IHIk0H^/\lO//MK55'f&C>|XjCP>>~M KH{11P!hZa|`|WUK7BYJlVwhz6BtvhhgFEQ T('D80zoPyCmmnKLlmX8xXs]\Qn}rkw/Jq,jwIlgg+fg?i{Kp*{uHG<%$e{d{;R c{&` :>_^3. 21 & [AyX@-C)!s&b{QjS R]PjOj=\9$545 Nj {M#Mj0jM1;;>1<<1"@ULy!Q{dk@Ud 5qUXTO`>Jfn1eZS LYSH  }N`AYWTqsIfgHx' G sA3AgqW:V:X4H]4~%w%x7g~|yq^jjB]Vue |A$c|}#S_]R_\d  {zz0jvQ_/jpP_]lxC t dob"rA.joU ns@<G0n),!-j"8mgK.HCvlk5Bvv>=<fjw(.$;5}a`i_:29 D5 hDD'E?v2$ EElnnH 7<<}-[T-l4-nxGM-LK z1--fe F,-Ei,,D,,5,,T,B, ,djcjP[,,,,,, ,1,|J,,^xv,8,B,{,l,x@,,,g,+.gHnFr*.y\41rx\114,,K,.,!1&.%.@41./1..411rl.J0j4r0bo011ow]v]00O.0 0~.mr 00ih^ 0l444a1~k` D 6soV+ ]u] R\qlPplE"D 00#0 + U+@B Zt]f '= QN  WD" 9M -s P       ,: T< LAC96 5 =)M   /K18S IU.79X0%MbX[<I5YGXVV)_ 4$: ;_  MC  $ M EFRa# X[_8 N  J   R  hR I Z k sh  5  sH        b  ?  >   R2$ u F iS4 3   +& *T "  )d!   `_N'zuM'('Q& DldR @ L:P&O&lC.K:xZ|yAB.8 8; w EBZr9ZZOpoPRU}W|{nmlk1~ut^}qbh[#;o8e+ba-+q=}0"Zdi*<j/;i/-VTs%BgfN`Df/0W/(]\A$BPrr0c/n]0Y0\/:,+'X0.b0%7D06&rG3AH2...2-.6..G.  v.w.%.  kL @ O.4Wk '  ,    5/R .a 1 )  AA lXlhG'XccA15   S q WB[_&>=_; 7vFJIH]G$&q$ nWLF>$sY'hE O 7A@{@z@{] xDssK~wDVuF3C?a[>yC[g 2@U~amrQgN% [[f[{E  s{8  j 5 j{  z I X! h R  l[zi2s qSX@ RX ' A@bpJoKzz/IgzC: Bz6 F? >  hH qb D .ED9z54$# Y`= bk8x"b!`bPOjz&ieTbxg  _- 2%i { d:}i ^ c: 2g|]gg g E\E 5 5`|w`7Ctb:a:f ZsYXW" "V' + E  _ _#      7 4 f   v $ $iP  ' #  n     }[ L L | gH |  gU L- e$ | }2 v |$M  e -Z   (  1 L r) r r \\f %P fa  n e 1  %  1 1 2  1 f 1 1 e Z1 0  1  . =f oe oh l =   - L  (G ,  ^  w   {+ * )  p  < ;  7  3  ( 9   g l o | U w ]  I u[ Gr U Z G   q v i  u    { n l Q ' ] ] X Sd V %c U %0 T % B S & Z /  P 'm R & ]Y k  j ]W S ]  H JG J<  < / ]b p F / i  ; {c : {. -/ E / 8   ]  1 * 4 :A 6 y ]t ] ] ]$ ) (   '  6 1 #  I  0 7 9  7`  & W 3 :, D   + h  N    W { 3 - -_  % Y  p p  " B B " Z~ @ M \LK !  6 v . _  p p  6 }  z y     , kt  WJI   s C    x    4  H  @ ? !  E : > =  E .  Z j  F j   $ 4 F O  I D t g g j X s 5 y 2 1 z . x X X  j X X X   4 A } 4 B   m X  L { 5  K | 4 2  P   P z 5  /r > / i  0 >2 f C > 0n 8V X 1 f C~j F] J C ~ > >~  c ~ ~~  z ~~~~~ &~^~x U X / ?  I mc~H m~~~_ DV~G N~~ ~C z~q < v~~a~~ D~ ^~~ |  ~ ~ i  ;m 8   w~ ii Fg \ J w~ ~ W~ ~ ~ qb  i( F N^ D4 H q iu ;3 H lf  i i  it ;h U. 7 G- ' + 6 G i i  8 i U5 G  i H i i w i re  l i  q  U q q i $ r C q q   q q qs ; M q d s r s   # r ~ r A r r U r r~ u  r q q* s   C % s s s  so w } } P r S ra U L  L u L u y u w q S % u r ul wk w b n  ` V V \ D w $ V Sp u b R hQ hP h L 2  w C w[ VW wO h B {Z VA { @ { T }  S } Y V i 0 O } X V & w  A % 9 A EN hF }M h CE }? { w } [ } C ,    < } ; }  Z : } % 9 } : hJ h B h ^  ) G h > { = {&  8 } 9 . \" 9% 6 6   2  6 9 d ^ $ # a a/ >  % " , a !  a K T @ ] > >! K K > a a  e a > { > v d A K   ! u     > t c A 8 * q t  n s p W V K | l { U P o T P  n  {E { 7 k m K   z + V2 { * V H  f e J J 1    M i  L h  3  + 9+ [DS I  R  kC     )      $  :-  a, ; &      m % ~B  : Q  Q k ; $~ Q } Q   I ba ` QA y Q 3[x Q  @ POw Q< S( S_ s  Q Q lr Q x;  l: 9 ZN3 G 3 9 # g& ^Y xX% ^  Q  Qj Q  q C  C ; q F N >= g$ ^ I \ g   Z s q O E0  j   Z   q , 0 ,  g t g/ E p 7. u O  u u  j  z z t t t > j t k u 654 y , p v v , y { v 8 z { y v e 0 v  * P r u x u v 2 { v } v  y' 7 v r = v } 9 8 9 v }l z z {  | |_* | ~  ZZ Y   | z K q   "     _ B| 5 | | | } ?k>k | |TTs }^*   w 9I [= 0 y sH 4={ 5S 1 o T :   |v U n u U m  y K  f x Kt c g e l X KI R JI Q r 9 q b h g Ta k X X= ( Q d 0  P j X *% 4p  b Y  pIO  P 0          ' i X&  ` GI   8  )% DW  = W     0< W 732! CW% NU a"7 +; W(,  /$BWMU]#18 :\ );LU>"WV/+G UFUEU AW27UR\kF ($ @0/FA1Hs/OOO.#:u R %-u>"`"=^H,`#qQ&Q+  y NRVS65l': SvcTv RRdR1R~!R~Z  d~ RgdPR0i0`f0eO?mXV'i= <vGd1G{MGMM{2G s& {luPG]Tr&SPf9a{NptP2kGX\Mp)gOfL^HGLl2G/@L4L%LPMqP5j}W$!L;LLLF6}2OL|wVDCUvB#!{8 zcwA-@4L[Ly9dd/n7 G 6 b3o0aa"kE[L,K.noqJ*)8Z[Y8 wt`!kpj_ReQr(RRRf'sojjnjjj2e?hjIlf1Rgj:~_l +xsSjEBrRvvvssfU?>y;& %6 Y: 0 5  \ y,   38E3u}a% Zo%9ou(K+! \|a7E d/w d3q_^ d$ {agBxay)''K1'=Ke dd/Jed]XNdxddddT7dzB/AdNOATNHvTp[jf ,u[RiWoEYtFQN7DY%S  M7>" Hs. T$Sme3@ Ld3HNs}XVoUoGs  - ~[  L Fsc3CYTpF}QX ( w ? ="!` z D Sp#w`?6 lkp37sQg 2zggkkalkhkA`2`lR m:gDk1 3grg`#4 ?l]l>gog,;\l[l*S&SngZl<V0V 2Prmkbk 7OrrG:4GmgLrnq9" m&S6=qq/55rScqqe &Z!54rIr#S"SYXq$qGZG~sq<2GMoGGkZZo)GGG~ood%K0r  ;o<ooGooy)oooomN o9o x)lN sUNsc%M.H u_YsK|3ssyy u F^y[(^ |1||Ggg||yusg|yOyyn33&(33yyy3aaa&Z(]ayT&Va1ys|33gtt&\EegtTfbyWppyYRat~|-|XaaJggVp,?~Doy;3t{zanzzLQaa]%kzjzwTs8%}>vT=tt}rPOuTC}iz<K+}hztTu}}}J5S}M}72q4: }_)US`}9;vS$zhvJB5(GAfHFr0/}!}}T}1@S~2~.~O~  F?*53S I~s~l HB~~6~r- w~ ~5Z~'!f*'&"!!=- Y-#~-  V]t K   [ L KKK V Y%Yae1epY9x w KUT!aa$$~YTasodwnjYeYY`aaa}a!apa$rq6pmj9BdldTjF^Ijaaagf`}D<BSiF**|DehF{D]IJ:bHQ]*P]*HzG@N_udGcGEI>H*M_YuD. ?_H/=- '9GF4&;)H(HCY3CBAAz78A,*62#@G>$#l#150#"zz#!+ t%y#&#v#u# t   .t t#f\R'E[2  ZYXW* SV55l@6@<>p?{k2{km+3& {RO !! ;X3@`LW?2FL;K[O [wwmzo b ~PwF   wlz FR Z+ x  {RA2'L 9zRq4`9WyTA1c$xTCjk}m hTgTiktWnVn}Pb$p4E)FAPFFrU^iAB:I))69sC~.#KgKvS]igYmBXm\iagLx@(D)r"uSKxKKtSR,`gSK!"nSKQ "PfUOK|KKSK[W+*JxeU2ZWkSodUU_U USWWUWTWMY>=SW-Y  [Y IYHY_GY%W _fN <-%Y;3$NW'lO?_t_0#9_-8_ON./.< }}:8 7_5b~4b,fb-bb6_'b~ 'b D&bzb b9kbXbS~ b=9~~ibbcb~p~}~c(yc~phc;}Xc={cHc cc;c(c c(c(cvzjNIu cb^$c\&X+AQn[&64-LccyiXcQ@,]$>R7PtW+6?i=]=R yMIdOmd<RZ&de;Radde#ddd:f3Tl2Tddd:d/d"5d?ex9i5i%1reV/eEQwDQU/$ t!1tT/9f8fd&+.S/R/F/4/K/CQt!eesBQ]] rJ/*DDfk5f^fzzYf rfk ^A(Zyr|f{f1ff<Qqf  pfofGfkf!fRhfgf)ff( 'VJjPPRefdfk&`gcffk]1j0jjP!LjjP [j^8jV_ggj@gYgaa.g~?[gzIgaHg[ VVaV jj?Gg waXFggz"7XUOz_a{aZzzu{*{ixXL|aXX``K #+.l`a`wa|-|`0``@|siHjz--U|u NjC``5|=y-t6u?Wf0{=xG>fL5eL   s5wGVfLtskFjF6~689EiFC<;KvG5T43yo)'w$!:_^f(dLcL7-RB0oQhF%^^ R/o:D$gF:%#A]^\^[^ S, TDw+ S}& Rr3l TsqpP3O.2%bonZY2X"Sp!M1z<TH g.4n4*tIHGJ4FvlX~irzg`=H+6zzps+VqmEd9W%:Q%g%%?cJE:q/:6%n:Wkn?:_E\cMwbefvW}ew|vjWWiu5%lq\WYecntX`[ec;c=DU /Q<HDPK]H4Pa)X&Cr!xB9$ZS:aqbnLx4R`,_pN!ka+EE~C LVano^UJa a'0a!Ma]UW }k{\8$zTak*ya7$x4,!!A!nkwQmk8kpovkLK[fohkgkwoJkId&0dk3,goPosOo>voouH%0@FoEo2,0.Do>?u>/...>uGJGCoo>o$2#2-.r.#B).=p<pd X"2!222#7Bt(.Ip(22tep p Hd27Rup1pp XppZpqq^ XF2*XX22XFeI!uu7q^Ip q q&(#&j|qq.;7ZZtDTz]W/\\wjqqcri]"=T;rr=WWDr99yrri1rrrsvo`+Rrxr^irr=fq]9:9_C9*RncE ss\m~e[5s# 3AdrrwcwspG sbassss4Msh@2sws}wLsl|wk?D 93MF g{wTC /2" 3jzw>B Tssss*,NNLs.Z7-% pwowKuw$ J2M1M)N(N T0M  *v?v$v,'N 6:S v^$!!vv?6$6v4)v<v$$i8)nvv+'  iN  :@6^<:JP%+RvS'b  'OvbvKfV,';+dyk@ 5wkyK'tlifszy^baY ,XXbQ)Q}tkddWV4iwOkVbUTSVRh|tFkQ`PN!##k#vQZAkt{tPON_Pz##QQX/*#LsY#]###B%%/71f%\re6y #6##%%(J|S%d|WQLR%F((`YVQ(%RA5@IW@(A<(bH(D(((D(UD?4= DTc>4<!^!F7a!nD8^~$6;W(!m#K!j!E:d9Bm!t5!lkj&~l!4hG(.oldvv&xh3 !Y!-Div 2  /u |qphol'x,0~ 1 u%  u|6vg| 6 Q[PY ML&[$$$!$" w]p vC4{5w'e$e$:$  $z$$;$B$^$:r+Ma* )k us$$$$$ R Rjk{{k,La RNMQjt Rp&m*XkXo&eeXr R(j;K=fMkk[Peeeh%Rej%Xe,%%l*cEeG. aPaj,^%g%V%2%,>xUx%%X'XxbEe ]%eg%xxx}|F.@xx{x'' x/c+>RDD4<'v8'xz?'t'%%u%T%QDE.8RC4~PDxx6''*k&&&=+7R7M_&$o.c5y?)k&&/&x&&&(kB4_9w&&Q&&?'m6&m&&%m#"!/v++4+3+or&W&h _YYWvr<((<V^(*<f<L)qqY(((q(Z:Y:"X:`)_)W:;)(Yn(\)*(!(H*]*V:w*[)U:)S)YYq 9A* 9 9v)i(O)N) 2,1,(e(d(>(0,qq>]T:~)K),-,,J),I),,? ,*>* >~{_6   8 8a_,8,^,,?--=`?\?~z=6t=h-j=--=>rO-h- V V Vqnu`~ggpg}  e--mu _AZp)pgJnPd gGwddNY@ 0  ~fX  Cc 2IHw=;;.MdLd<:.8OInH  " J2Qm!-JF   HnCwE !o <I#D k <Um"}#"""""m"#@#\@###|##"#}#\""9.!#"c"""A#"U.9R|$# ?Ki##Q3# k#WUxiw vuoVi'#t lBi`sU ?2# 1# ;#k\#0# Tzji&#2  u8 2 )g ) )%#/# 5].# 2;-#Xt bF[ .S,# .+#q Q2q 6 27e = .t  Q Ds  .c 6  ^n# R |  S |#" 6sf (# = S E  c D #"Y R R  !a R Rs  = =q  N  = =#  =  p 0# _ r a#e! #!} X X` P | { !A yd  y  ! d %# =h#c o h### # U# y# U# Xn## ### T@#_ O ### U T Ua f U#! @ P  f## T ># 1#n! T  T p! ##S z T= ~ # = ^ O#Y @!EX V R m YU #T # g C!-< # ] uL #,![ ] fW \ f# \!u?!EQ l YP +!I!XK 2 &#x o z w  O B!-v u k Yj Y j t >!b " H!Xi YM!Uh Y! #$#$ N u b!O #$ 2!O'!71 & !b Z!Og Yf Y K#$   #$&!7 9!g 7!O#!l#$8!g#$#$#$ V!U#$ J!U !v !` 6 #' A!O j !!g /!g.!g#' !z!S;!b!S!!S p!l!]!] #$!e!!+!v !]-!g (#'!~!!!9!~!!#'z#'y#'!\ g#'Gq#'!!!F !7 !! u!g!! !q!!6 !!!9!\!!!!!! !v 4#'#'!""=!!! ":!!!!a!*!h !"E!!!r"*":"D")!h": vA !!5 !"+4 3 (!h !h! !!"=!!!!!  !!t"! j!L!!%!h!$!h!0 !Fn"Z #(!"/! ! #(!F! `#(!! ! !! #( #(:#(   #(! #( "! #(!!!Q!! !~!& #(!o `#( #( #( #(" " m"Z "!o!!! }!&""h"!!!! !"!"! #( #({!3!z!3t"E"" d"p!"x!!c"pg"B!C "0"AZ!A!C"#s"EK!!5"y!3!y!31!!w!|!&" "1!":!P9!P#)#)r"E! !Y!!!#)#)v!q"E4"!#-!Y"!T" #)" #)N""!!k" 0!" !$#)!#)"#J!")"DX#-M" #)!#)!9#)W#-V#-+"5!#)" S" !#)!U#-#+L"#+#+""(2"!#+!"("D" !!#+!<#+!""R""1#+#+*"5#)#*!#+!n" #+#*"!#+#*!"!{#+/"#*!# $"]# !#+!#+#"]!#-R#-"" ! #*"s!P#* #*!<"##*#*""##*"&#*#8#*#+"#*#*!!!"n#!#+!,#+,";""!"!!# " ""B!"##"8"!#*#*#*!#*#*u#,7"!#8"4"n"n!"!#,!"P$O!'"6""B#z"#?"o&"!"s#l"""p#,f"o#,"!N#,!%"""""l#,"k#,"#l#j#,""G"o#vi#,e""tE"!#?"(#z!q""b"""t"l#?a" ""`""{#?_""y#0#v^"!v#,"]"\""#"E"tS"W#,""#0#0S"t"##T","y#@"U"y"O""!"#"[""y""!#0""|#@"y".#0 #0I"#"M#@MM#t #0"#@H""V#t"2#0"t###T,#"##"gTG""f####t""V""T#"##F"E"R#"##0x#q#0P#/"#/D""!.#/"#0#0@#/?#/C""T"T"T#i"To!#"#i|P>#/"U#=#/"T"#/!#/3#/"#"!#/w#q#2.#/-#/"+#/T#"#/n!V!#/!!u#/5"i#zBh#!4yBH##2"T#"e""#2!{Pt#"##`s#!#/!#m#x#"#"#"#/"#/Y!- U#=# [W##+# a#`# !N!!!"?!Q""c#"#b##V##n#/""G# F# X!r#"G"z+$##&<&$&4$>3$>$&#H"#%#H##I#J#$]#J;&#:&."&$|$##L*$# $#u&#]#####Y#q#^#c$(_#]#c#?#-&P##]#f#O#"##&"2#[# #\#c##g"##~#]"##$"T#}#]## &"L##LLLp#L#"##"L &L&$Q$Q!u#$|###M#LS#6#u$(##Ll#k## &j#L#K#$ALLR#6$\Q#6#n&L#X"L#X#U"##U#[Lv##jL$L#p$Z#g#$Y$Y#[#$#u$A"LK## ##xu#"#$$k""#$kf#$Y"#$[#5##'$YN####{#e#$?$J#d##B$#p$#$[##u$J###@$\$\&#_&&$$$%<$$$&#P####@&#x#I$$$%$C&$"$E$D#+$''$''(('#(K$ '''#$ ''$ B&'(*'(A$k'j''''aT'S''$ 9#G$UA&@&,&"#D$*$I$#&$e$?&&#`&!#D$! #D$?$G$p$$$e&$>&8#G7#G6#G$p)&5#G#D=&$(&##G$,&#&'&2#G&&1#G$$$&#$&$U$0#G$".#G^%I#T&#Dn%J&$$#$%(&#&%$W#&#&#&$%&[%X&r%E$,&$ $#&&$$!#$$&$&$ $$&&$&$&&&&$Q%E#R&% y$#l$%]%Iq${p$&$& Z%X$&_&% %~$&%7% $&$l&%m%J#S&%#S&$%&x$o$&#&#&$${z#&$L#~%7#&k$#&&%0u%=4%$.&$<&1%$$%kw#$E$&%0#&%0S%di$$&}%7J%v&v#&t%=&$%kj$#&s%=D$#&#&&R%d$F&&$V%L#d%|%7$%9%;B%%#&&%y&U%LF%%%$3%N%n8%;%&90%%%$&qA%#&&9c%&&&%&&$$M%n%%%$$%$$%$%%%h$g$&&%I%v$|%.%=%b%(%<% $Z %C%,%. % %$%$%$V%$%$%%%%$ %%%%!'%%$;%%-%%$%$%$$^%$%$+%.$%S$%%%%%%$&&a%%D$D% %&&% $Z%%*%$%$%%$%z$&%S%D$&{&%:%$%#&$&&^&^`%_%%%D&%& $b&%%%%$P%$S&W%$%%%H7%%%!%T%%%%%\%&$`%& Y%X%6%%&%%&5%& $%Q%%& %P%O%$&f&%%C$%%L%%&%&K%$%&H%&%3%%$%G%$&& %g&%B&&%&O%& $&&&$%$%@%?%>%$$&&#%% & "%!%%%F& $&%%%&#&&&&$z&%%$&%$$&&$%$&%&&&%%&;%&m$&%&%$%&%&&4%%M&4|%m{%m&$%3%t%%e&$&$%%%&&s%%%K&%%p%&&|$&o%&;&%:&&D&&y& %$&&2&$&/&$&)&$&%&,$&%M&&&%{&%&$&$&$&%%%&&%3&%?&&$&&&Y&R+&& 'w%v%7&%&`&%%[&%&T&1&&&&@&o&&~&%@&&L&%&r&`4&#(&6&0&3&#&&'&(&"&&' &{&&u'&!&l%&$$c$&'5&&(&&*&j&}h&/&%&2&.&&%&g&&K' &f&&&>&Pa&E%& &k%$$$$i&}%&e&&[&2$R&&`&ED&Zb%&%$$Z&2\&Y&Px&O& &_%%_&&(&X&%&W&%&$&u&B&t&l&%&C&V&S&&%&$a$%&U&q&T&&N& ?&^%Q&I&1&&>&%&n&%&A&t$&H&M& &W&m&P&F& &E&@&&%&&&&%&%z&K&XL&C&Z#&&&J&X&%|&&:&&(&d&c&&&Q&X&&!G&X&&&.&.-&&%_&%&&&%V&& &&+&%W&%&,&'Z=&9&'Z%'"'Y}&%&%,&%^&$&<&$&$&%&&%o&&'&5' %&&&%&&,&&g&)&%&&&K&%&]&&&;&&&##&'#$&&5&$8&%&' &' &' &&&'&' &&%&' &X&&' &T&$'#-#R!&S&&E&$T&#q$H#?$'$#'$'&&#$''S#%#%%&&&"'g&&<'*'k&'1''S'%'k&&&'''%&&&&&' &&'V& '&' 'R' 'f'w&'m'w'm&&'p&'f''V'V't'*&&&'|'&'&'&'g&'p&''2'p','-&'s''}'7'0'2%'V't'3'2+'}'m$'2''''|'|i'&+'}'''''s'\'&'''s'2's'&''+&'+'&'|&p'+'@+''?(M+~$#(;c(;'h''&'&'b(;''*'^&''&''+&'('\''&''''j&''3'H''3'''''''w$ ''(X(' '+(&'W(++#('\''x(-v$ #(y'}''+''z(J'R(y]('E$(($(8'(QG''#(-u(-\(''F(J#(( (t(-'''|++u+^*+}+^22+''+A+2'+''*'+ , r'2+D+}$,,+,, '+u''.+'+#+L$'B(8#+C'v4(i3(i+((H(mf$e$q'(mp'o'g(8()d$[$'(R'(D$|$+'\++(P'K$Z${$A'+(m'+(m+(+s(4'(+''+''B'v()(m'(4''Y(V(!((m''(()(m (n(4Q(}@''h+<(cm(4'Q(V'()8(0(,(>6(17(0'((s`(@'+(>('_(@V(VP(}^(@O(}9(g((( '(M(~'(o;(c('(0(l'5(1(:(c'~(@#(~'(o#(oz(oy(o'n(o+-(p'(g((g/(l.(l'(oN(}(l(4'(o%((q+'0(o'(s('(pa(o'(o#(oJ(~(I(~$((('+(b'q(#(*(p'K(((''j('(?()U('(o#(U(o((( (>(=(()(((5('(('(>('(('(2(1((('+((+( ((:)(((&((b(f(f('}+()((('+(+((I+(s)0((+'+(('(:(0((6+"(+ +(((((:'x+(()U(e))(_((: + +(z(),+(+), +(w( +(((=+(,((()8())(()K((:(((((Y++())H((n+(+(()(()t(z((+(N+(+)H(+(K)*((c)(|+b)`((_()(((()))a(()a(L()a()2(U(K((({({)%(+_(((Y(^((a(()[(*)[))*()[)$)()*)')*((()i)'()a({()(((((l)N(()g)()g))() )x)))$)N)^)C)h)h))^)[)i(5)g(_)[)[(e)()[()h())))&))y)y)C)C)h)1)((}){y)()h)CX(()[)[()[)[))?((p)gw)#(*)y)m)6)u)5?*(v)hn)()D))mx)A(|){>*=*)r()y<* V);'*&*()m){){(z)m)rt)5()h)1)s)5)'*(m)r)5(T+)mT)+)m7)(+)X)R6)()y~)y)r(+2)+l)@("*(+)+(+)W*=+;* )4+U);+)J)j4)/)B++()mv)#q)5.)()m)+))\)%+)P))z+))p)a))_* %*$*)L)|-))3)//)|k)j))f)!*),)*U+))))0))G)()))*Q))+)+p+i)F)h))l):* *ag)W)** )))zN*9* ])f)))))E))z*U\)M*)h*)Y*8* D)***9)Y* 5* **(* (*)4)[)Z)#*J*I*))H* *Pe)+)V+S))*fR)Q)**Q)*9)Z+)b* )P))* **M)(* +O))))*)*a*f* *Po+)9+)*C**P*B*)+d+)+)+(+*P))*5)+*)**P)+(+*)+))+(+)@+*f*))**)h*P)D+)+))+)**)F++)+)A+*) +)**)*)**))********)**+Y))/+**"*)))*1*+*****))*1*;+)+**7*+)6+*)*)*1+** +***** +)** +)+)+*+*)+**i***i*l)*"**k*<*)+*s+**k)+*|*l*@*|**^**8**`*u*`*+*s*i*A***n***;+ *++**`******%*+***+++*y*ya+=)+u+ **2*s+*k*N*kp++ ~**+*|+{**nX*&_+>**H*v*U*t*T*-*0s**]+`+=*+V+_g*+4+h++N++*"*U+_+f+f*^+>+,*0)+W*&*}*S*n++)+G*vm*l*z+*+_*+ K+*J+**+)+R+_*)+*+k*+j*3+*2+o+*@+&+M+*+0+y+*+#+%)+++++* +)+"+%'*+)+Q+_'i**K+L+*'*/+*Q+x+*Y+!* *+1P+d+1w+h*+**+O+d)+v+*i+++'+"',d+I++*+"+*+*++r+q+*q+*r++t,*u+''e*%+*+*+d*+*+$+"F**+d(+', ++,,+7**+,*'*+,*+ + ++:''' + +,*,\+'*, c+E+!D+![++),?*b+*+*+,, ',+:+W'>*, 9++]+1,b+]Z+C+!,28+, 7+*Y++c+I+W*+<,+*+2*'+*+W'2*+6+.B+!2*+5+=*+*r224+,22<*;*2222++'v2..A+!+:*@+!.'2.+G***22'2'9+o+T*+.***+'[+++221++*+I222.2+'U'2'+,{'E2.'22#2*++**(L+('(+.|++e2({+m,p)T))*<*p)+,**.+.l,p..+,%,%z+.,(,(++]+2*{**w+2(+4K++31++4J+H+2a4,1++3<+3++2t3.F4G+.E4M+D42++22+ 4,22*'..*',z'y+u,7+'+,&,&*'++.,z+,&.+++w,+',?,~,n*'+ 'k,.'',c''''+'+'-x+b,*'a,++&'++k+*--v,++ -,,t,7},n+,+,-+ke,,c+-+--+-W, *',,'+kj,+kp,o,+,,+k./Ts,+,+kr,+k./V, +kd,^,+kP,../.,,,3.V߿/߾/../L/߽/-,F߱/q,߰/A,H,3n,G,3,r,/1/+k//[,@,b.W.?,.,<--,^-..+1., .i,<,a.W],h,.,-,O,S-R-,..A.+,Z,Y. ,U,TY,X. .>,,y,s%,x+.+...g,,.;,.,!,1,E,.,5.,0.+.,_,(, ,,d.',_,+,,x.,,\,,,\,- ,#.&,,?,--=,c.$,x,,K.f.D.,", ,#,,-\X,+,,U,+.J.,T,,e,S,R,,Q,C.`.,.0,EN.M.,:,,L.I.+.,.F.4,B.E.:,9,- ,,7.- ,3,,.,.2,,.,/,E- ,b.,.-1 ,,k.- -3-#,`--#8,-'7,,5,--',,6,.-3*.).,-1,.-15,-- ". .-0-,--0. -0,-%.---,..- .,..-,.--.#.,.,.,-,|..-%--,. - -.#.-.- -N,w.#,.#.-%,,..#-!-- .-.,.-=-],. . ,.-?,-]----9,..-,.,..&,.-#-,-&-,-4.-,---<-6-;-$--5-(-(-p-p.&-3->-J--/-L--.&-E-~--~-M-,.%-D---F-D-F-;-o--_-$--_-,.%,.%--P.%.%-M-=-z.+--b-_-a--(.(-_--.+-A-.(-V-A------f-[-m--D---x-@--f--v-K-E-D-n--8.(---y.(.)--.(-y.-VE.b-j---.).)---.)--.)-M-d.(-..(-Y.(--.(.(-y.)-H.)-0.(g.CV.l-w--vj--B-----.B-."---}--d-D--d-|-L,LN.Uh.B. .U.lM.U.n.-f.Cz-{.?D,_x-C,_e.C/,`--/--.1--i-J.-.?,C.bG.a-Q.>K,Lw-.,`-r.>--.>t--O--d--i--u--.@p--.>~-n--{.>T.O,l.OI.-J.>m-y--e.>B.g.>.>-.@o-.t--:.>s--.>3.wr.@-.>-.>q.@Q.OP.O-.@-.@l.@Z.jk.@..+.-.XF.a,I.9.q<.oO.O,T.6.v,.1.x0.x. .,@.j8.q7.q5.v2.w,.,.,.,^.,.,^.,._.\,.W.jv-,.A.g,.,.,..."-,.H.X-+.-..-g.-m.4.v-I. --. ^.\@.h-..$.].\. ./;.o.....!-.2-.-.-./2-.-.?.h&,o.2/q/.Rd..8/5>.hc...-....J.H...-.,.,D.-..\.\`...+..*..-.-.[.%,o . .-..0.=.-..-x. ....:.-...}-.}..-.-......`. ..).......-.!..e. .-.(..o.,?.-..X..R...ߨ/^.....߅/g./O.....߹/!,..]. /.9.'.߄/g...,=..$.#..!-|...5.522-....Y.,C-.ߗ/.n..7..ߖ/+a2.Y./U.4..K...2ߎ,;ߋ//)/.a....N.-.ߧ/^//...|/*2N/,42/U+2+~22߼/../O.+2߮,5,$,;.x.߸/!.w.+c22߷/('2u/@.+2//a/*-2.B2.N2-2.2.2. 2. 2.2.2ߍ,I,C߻/t/@p/c,W.2/b2}/߶/(`.A/U,G/{2w/,߳/2k/^.Qj/].Q߲/V2/k2i/o/h/ߌ,IM//bQ/./{ߥ/c,/b,M/ߺ/n/./{m/Y/<///bߛ/s߭,5./{ߊ../ߵ/(/ /ߡ/k//ߠ/k_.A߀,Ub,W:/xv/,.12/.2ߤ/cX/0 =0 40x.*03/#0/:0-0-/iC00 0B000,,0- //00, /"0!0.0)030/@0\0l2.2.G/P2,D2R2/2a2/.0/.0>/O200_0//.///(03/0$ 0$//0%.2.0%./0$0\/H2J2 //./0/i0.I2/92F2///0/0/00000.04./000t0.000.0./06/A.0/./$/$/2/0/0/A0/}/00A2/o2<2/ޚ0/.0;20޿0/0޾0/A08080r0/A//ޙ0//F2//o206޽0012/0/0/0/020/a2/}//{2/+204T1>0/2/00/0/O/0000//A/0ޠ00001>޼0޹00Yޟ0O1\ޞ0/42%2$20Y#2E1o000@1=1c޸0000N71}L1b0 0dD1o/K1b00N1\ު0/0ާ0t0޵/00Uޑ0|61}51}021޷/ 1C1o޶/41~31~ް0 1ި0ޯ0J1b01-10C1 00]0ޖ1ަ0tޓ0rޒ0r0}1޴/00J0ތ0yީ0ގ0ލ00b1 ސ0|r1 00/0ޕ1ޔ100/2޳/o02ޏ0ޱ//202މ12ދ0yn0/20://22j00/2/20o2/2/2޲/0Q2220_0v//2_1%ފ1ޮ/0 2w1u/޻2/1޺20;2V1)/2ޭ/ރ1q1 ނ1ށ1ެ/ޫ/02ޣ0ޢ0ޡ0i000ވ1,0އ1ޝ0ކ1ޅ1m0l0ހ11p1!A1,c1#U1)0S/~1/2/20S2ޥ2ޜ0@0RY1|1{1^1%X101!/0`01!k1!}1(1/1!S0Ag0\1([1(f001Z1(h1!R0A=1201,1 1F)1ޛ0<1210;120p01!?0Re0#1s"1s'1/0ޘ0.0`ޤ202b1#a1#+0*010ޗ20R2z11y11:12x10M20x2B1p91202ބ20210201(02`1#0z21L0pt211s20202d002W1(0212]2020211V01p1>1p1F2201p12 1L1221T21T20O021VQ21Q2@2 1221021C21C1312:122:2ݭ121A22111p1J121n221B22Aݬ10-211Y2BM2ݠ120T20<21x222C12CI2H2G21A0OF20M202ݥ2$2022A2A822B1d2Bݟ1ݹ2z110220821x22ݡ1W!212ݝ1]102 2ݤ2ݛ2ݸ1U02221 2ݚ121A12z21ݘ1ݓ1ݷ1U1`1W1212ݗ10O22ݜ1]ݶ1Uݕ1ݔ10202&2%211112ݙ1ݵ2z22ݴ2zݐ21211ݣ2222212݇2,ݖ1ݎ1݋21{2 20R2 21111݂1݅2E1&1&ݏ2݄2E1&ݱ2{27ݰ2d4ݍ12~2ݒ1v112݊2ݯ2q1o1221hx1݆2,62L1hݮ2O+s1w1121&݌21*22 20>1&22c41&e2;+12121&52L2 1L411t142_N+u1z27#3F21*2112322%4ݿ1h1/22݁1ݾ1h01&ݽ1hݑ11&2r1ݫ2h1221221|1C4#121821 2p1݀12ݼ1hk111112112111211:+n122T4 m1b1a1݉1+4S4 ݈1g1112*1}1+3D*3D22-j132_@4%f1|1112391(2l1)2D2}"3Fi11 21S21^21F22<3D11%3E`1&3D݃12?4%13AR4 Q4 3^4 ]4 \4 2}B4#>4%y12(2D=4%[4 Z4 '2D24)13A03B+$3E 2323A24)339423&3/3B 4/Y4 ݻ2X4 13A2++ 24)ݺ2.3B1y224-3B2+42+W4 4/V4 ܳ3ݳ2ݲ23+3&2]4/12+,3Bܾ134;ܲ33 3Hݪ23ݩ242ݨ233HU4 23ܸ3-3ݧ2224/2L+3+ +3H333+Z2J3H2W3H48322{'ܽ1ݦ2ܷ3-3Hܼ493'~+J1q2ݢ2+l+N+K+a++c33++33++p+3../N3/. 3/.3/34;3000P1[1r1E1 12p32ܻ4934J24+ܩ21103C4Jݞ24W3N2+481481,1111`4=4223Y23]4;4343o4<43}4-43V9W04 3ܿ+34:4ܮ329]334s 334_44s4!3455ܨ21<4'ܹ3)ܧ3243+4'ܺ4:+43ܥ3ܖ22O43ܴ2ܣ32\2ܒ3ܛ432܂33 4Zy4Uܭ33#3!ܤ32k43t3$ܦ334:4!243432i3)94'܁3܏31302ܕ2x4U܎3184'ܚ4ܶ4:ܱ22943܍31ܰ2+43ܢ3ܙ4ܵ4:74'2K4'2`4'܉22/4'2F4'14'!4'24'4'܈2܌31܋314>w2n4i3=3R3@3P3 4|44'k3Q24'܇2^2܊31j3Q܆2\2ܑ3Z3ܐ3i3Qܡ3U3s3$܅2~4>v2f4}}4>܄2h3Q4<4Ka4K܃222e4}4444g4|[2$9K334644Y342X3'246m4iN44\۽432442d44+443s9R3"9Q 3246464T39R463_444444hM42h443c42]22244&2L4246%2W33V39RR433S3!9Q3Q443 3#9K4h124x39Q9Q4ۼ4472473 4b4o434_9d443ۺ34\4b4o4o3 82۴3v۳3v47474747724x4747ܯ2ۧ5S474722 39dP4ܬ29dܫ2443۹3474762,35235ܪ212ۦ5S35y۸52222323۵5ܠ2423253ܟ22474747ܞ254ܝ2ܜ23S547+3*3)334l1(34_3S34l2P2ۢ5hP۪54E3ۡ4@495h32ܘ2ܗ22P2+1ۮ5G4&5|I34l+43544۩53 352A2!5342E344l+43 2g3 3 2j33q3w32232܀3l4343l444ۭ5Gܔ54L4*ۗ4ۜ34$53 ܓ23:ە4D۟44m۠4@|3l{3lz3l4.5 423l4f4G23lu3lۛ323l۝5m39cr3lq3l35mے4Sp3l34m54u5~ۑ4Sې4Vo3l39c363ll3lۉ4y49c4N9c4A439c4m4m424m554m4mۆ434m4k4ۈ4nn43H3l3R3ld3lc3lb3lی54T54x435ۖ443544d4K4yۇ4n4w4۔4D54mp5j545ۿ5ۏ4Vۋ5ۅ4ۀ5u}5z5m4ۊ54y4v5Q5O4344C4B4۾5o5jK445!35J4A4x4dl444k4s5i5ur5i{4I4244@4z4H4j445 4{54e4?42ۻ5>4G45 5n24F4545w5*524r55534y4D422/.4545i4~5u|5zq5ig55525f4E4u5Q2422355b445 a49448:5448484484448889>:5؋:4h4:W899l؊:4:W4:Wؘ9yؗ9y8:W89)؇9 :W؆9 888d4e49l44tY440554T5855354549l49l۶3:555I56539l9l51533M4۲3W54q4t5N555ێ5X4[5/595H.5S58K5;۱3Q55R5=`585H-55a5#c4V55-5=ۍ5O5>555Z5۰35$5ۯ35.5575Z5A5_5^545\L455;B5;435(5۬375P55)55[5*5"ۨ5(54535\35ۄ5N5>68۫356"ۥ5ۃ555M5 5M,5c14H55w6m'526$5]5ۤ5t5ۣ5ۂ5354545۞5ہ54'545ۚ5]5ۙ5ۘ59m25M450445>6$3545&5245ۓ54C5+5c5L5"6=6H6<686=!6/629m6< 6/5596255 5596J6JJ5E4"9m54~9m 554539m6!55`۷9m29m6)64 9m6!6H5O9m49m5S9mw9m5P9m449m5(9m\9m5&9m5 9m 55@5545E6N6549n5555D5E59t5C5E=56O9u69uھ6 ڼ5ڑ665X59n56F5X59n6B49n<559n6I6J656B5ڽ6 56F6C6- 5;5 6F56F56N5 9n59n56B49n66C556B56U566Uڵ56^5X6B6B6-56^5ڱ659t696-56M6Mښ56X6u6I5ژ5%9o$9o#9o59q"9o6G6Cڠ6ڻ56L9qڴ56G56F5Q6F6-506G696Gڬ6ڰ6ڟ669ڳ5556Gڗ559o9q6G5U6Gڧ65ڦ6ګ667.5<9o6 9q6G6G59o5O9oڥ5ڜ6ڤ55w659o56G6G9o59o69o59o59o59oڣ6659o59oں56ڐ5ړ6ڹ5ڒ659o69oڀ6 6|ڢ66G9o59o59o7'6bڈ66`6{ڏ5ڍ66n7>6F6s6ڸ5څ6ڄ6&7$7*5.6#7*ڷ57/!6{6|ځ6ڶ55666x6f6j6e%76X76Y77ڃ67ڲ9w6 9w76b6Q6yگ9w66|6ڮ9w7 77Ia666ڇ66ڌ6ڋ6N6چ6w6f656ڭ9w59w67Yڪ9wڂ6ک9wg7&ڨ9w6A6~6j6i67IM669w5S9w7/6&9wڊ6{6p7#o7#ڡ9wL6l666ڙ9zn7#r67k6f7&W659zږ9z66e6`6d667CV667&y77;659wڞ9wڝ9w679wm7#ڕ9z67#ڔ9z_6@7"?7"b676 9z667>7=K659zڎ9zJ66C776]9z=7=97Aډ9z57Cv76Z9zu7t7U6673F76g76m7]707a<767$7q^67h7#T73S7347CR73\706z9z}9z69z87Az9z77A7M;767[70.766{7I76Q757q77u7H76H67uZ70E7D7Y7027F17F07F767M7f867G7P757O7567577Q77a67-7A757H69{پ877n7,767569{6:7669{9}7c9{6:6C778 B769{6p769{X9{869{7s69{69{76+7ٽ87`7666756#77H9}69{7769{39{9}69{7w77s6W7789}67"67٥7٣7٢77wټ877K77wٶ76}87y7y77ٻ877y7:67:67~7V7:8ٺ77tٸ7ٵ7٤7778 7 7 86887387_767:7t77:77F88777ٞ7ٗ7c78 7 7ٿ8ٹ7ٝ77t٬7|8ٔ77٪7ٙ8 7 ٘8 7 7ٜ877/9|69|7ٖ7cٛ8ٚ877*9|778)9|(9|7:7ٓ77776e7ُ7,6G9|6_9|7U7٫7|69|69|7 9|7 ٠87 77٭77Y7ٱ79|7J9|69|ْ77^9|7h89|ٟ877749|7q9|9|88888ٮ87s7,7878ٰ8ٕ8 ٧87s8 07887}88[8hٯ8ّ72869|٩769|o89|788\878 ٨7ن8/78c8.7َ7ِ8 h8ه85٦8n8#87977"87778'77ٷ7i89318777!877ٌ87789 9"77768738م8ك8/68١888J78ٍ7l7k7ٴ7ٳ7ً8ي87878s8H78g88$8Tى8r8Hق8/ٲ7e778578ل85p878]8{m8U878T8y8BJ8jf8j79(93q8HF878\8{8_99"D8Ud7P8QC8U78585[8و8(9Z8789r9(x8BI8j9r968{8ف8/w8Bz8ـ8/88v8Bu8t8O8QG878~878Q8Y8E8@8}8?888N8QS8888*8B8|8A858i:8'7-79M8+8)L896979&99c8K8798Y988&7 9%95^8H899/%798>9$7b848i9a8,7789*8)=9`8)8)9595798999i9&:1 9%9%9/8*89.9:yX87H9~_89/W8V879~9~7?9~<979~9~787738i59.9~89i7e9~79~7:9~69~79~79~79~7`9~7i9~79779~879~89~4889~؛9s79~;989879~8f9~8Z9~89~R9~ث98Z9698798849N9N9غ4ب988ؚ9s؈48ؖ988G9~ء4839~ؙ9s8+9~ا4ؓ9t:999890ص94؞98757989ؾ88ع4ؽ88:Y9Nظ4ؠ49ؿ:Y{804:z80ؒ9؝98:Y4:Yش9ئ4إ4ؼ8y:ػ89&849س99ذ988ط:Yآ98@88r:b9898m579448ؕ99999929؜9د99خ989s:P9l578ز98]9O9929 8 89 8 979a998W8Z8dn:)8#94:)89D:@8888j888897998m989q:8999Y8dح98499j:+k:)9X8dp:W8dK:x9؟99<9i:+3u9J:x899933n9G9 U82T8>:`9:|d:i92 9:|h:+9e9I4;3C:@c:iF9 S889945s56,96898:e55g:+69S:`4:e6777'88t8b89!9=9x<9x8:e8:i69_`:i8c9:e(99999_:i^:i%988W+99*999a)9;N;];]9;\;N9:*9:99959_9\;?9"9'9&9999$99:#;?9;?9:( ;?;\::ض:aت8R:EI8]:k99Z8:a4:e؅:e\:kة89r:89ZQ:EH839!9[:k9ر:a: 999888:a:29198:E8:(79Zؔ94:}ج:a8:a98:a99:9:/98:a9؄:f؃:f:999::6؂:f89 999ؤ8أ8ؑ98K:kؐ99:؏909؎9؁:f؍9 ;b؀:f88:f;b9:}9: :9:،9-:}:9~:f}:f9.99|:f;b9:38:f99;^w:h;^v:h;b9;b949؉99:9:u:h8:h99;^:9:ho:h:x:f::;׫:9:3:9;^8:h9;^96:h ;^:f:h:V:l8O:l;:9ׯ;49::9999::4;&:E:m9,:m::=:::9:le:hB:m:A;:::2@;:<~<;3;:<6<~p;:z@</@o;:;J<:x<<=:;Kn;;e;K;:;Km;;};t;(@@< < l;k;j;i;:P;;@9;Jf;8;Je;|;t{;t:;֠O=>O<=5=A>Zֹ@ =a_==%=$==#===D===d;@>H<>H<>H=x>H=g=>H>H"=<=>K<<<=F<>Kս=t=C<=Q<=tA==@==g>H=d<ճ==G<=?==>H<=<=;=>K=C<տ=r=gվ=r ===)=Q<====d=+>N==F=>N<===I> ծ=Z<=Qդ==>Qխ=Z=Z=j>H=>Nյ>Tղ==J>Tի>[=G=vմ={<=Ֆ===P={ձ={ժ>[Յ=b>Nը=է=զ==ե==== >N<=ն>Qբ=oՕ=ա=o==}===գ==W>\=r>\՚=ՠ=pՄ=b<==՟=p=B@=&@<_@=t=[Ց=_հ>TՐ=_ՙ=՘=Y>Ս>FF@<@O>)==<@<@<@Ճ=b=1@ջպ<`>@<@]>@@չ<՞>^Ղ=՝>^K>;ո<Ձ===_>====՗=՜>^՛>^Ն>l=.>lշ<=k@=@<@J=@I==>==>a>N>)=>3==x>}>n=>lh>">==w>G==>;F=R>,Q>,|>n>>H=q>f>?>-==>=>q>>V>>U>>p>Ք>`P>,:=o>=P>l~>lX?v>qu>qt>qS?s>q>9>=>>'>1>r>qe>d>{>ng>"Փ>`Ւ>`<>`7>I=? >>,==>Տ>`T>>6>In>m>>=>,0>l>=?M?z>nW?Վ>`(?>k> =?>'?>y?>9=>L?=?>>=?>?>d>?S>?>m>@8?>p>><=>`Ջ>`=4@=?5?=@@><@=c@<@>=h@k>%>z=q@$>zկ@ >d>><@=|@=@?O=@<@>@Պ@#>z?> >>Չ@j>Ո@Շ@i>>2=@>B=@y@>D=@?U>v?e>>B??Y>B>Y>s&>6>0>6?>?[">6Դ?]?a>2?,Գ?]>>?`Թ>?OԬ?Ծ>x>? >>?U4?=@=@?aԽ>xԫ???G>+?a>??n>|?nԊ?C?n?U>?`Ժ>|?,!>6>>|>t>D?@.Ԧ?>C?,?>??U??E>A3???`D>A ?C>Aԉ?CB>A???Ը>>@>ԡ?F>>>>2?>??h>T@)/?.?>?>=?S@)>@t?>Y>A>A? >@>A>=>A >=? >?%R@)Ԟ?j??????_>>X>?>>>>$??%?O?/?_>?Ԡ?Fԝ?j<>Ac@=@Բ?gԱ?g=@԰?g=@\@Ԛ?P?ԯ?g[@ԙ?Pԩ>>Ԩ>>??%N?/=@> @> @[@ ;@>@>@+@?_ԗ?>>>Ԗ?*@)@>@>@Ԕ?>u@>vf>@w>>@>/@@Z?*ԧ>Ԓ@?_?Ԝ?ԛ?Q@-l@#Ԍ?~??d>?dԋ??dԣ??d?@ >v>@?7@@>@4M@4k@#}?x@?V>P@->vԑ?-?pY?*ԓ??dԢ?j@#Ԑ?-D@Wv>ԏ?-e>>??d??>?>b@u@C@WԻ?r@Ԏ?-??L@5>]@>?Կ>vԟ?>7@i@(>h@h@(?4?d>B?p?4>H?rԵ?u>[?uԷ?r>@>z@>]@@s@?@>r?pԼ?p>?u<>@@>?t@I@7@>g@K@5?4@Զ?r?1@?@w8??\@a?ԍ?-`?X@_?W@>@w:?r@,?4@F9?.?-?q@p@AZBF+?;>?M@E?@d>~@/?*?#@[Ԫ@H@7@s3@F>@ԥ@c@0?t@E@~A6@E?@cb@07?Ԯ?u?E?@9ԭ?uԤ@'?o@$@d@s5@E@}ԇ??F@0?@})@c@n?Q?@n"@[Ԇ?2@F@ @(@c?(@?L@?f?@@!@[?@?"@ԅ??EԄ?@Ԉ@@Ԙ@ԃ?^@0@@9&?]@0Ԃ?@@@%?? @[@@9@1ԁ?Ԁ??@@; ?M@1@;@;@@@1@@??@>@@Aԕ@?@@;@@???@@|?@ ?M@{@z@@@Ӹ?Ӱ;UA@@A@@?@ӳB@A?AVhA@?@?@Ӭ?@@(@?M?@@rAw@@\@2>@2Ӫ;@@AoӏAJ@i@@7Aӯ;@uA?@?G@2ӷ?ӶAVy@?3@?c@ӵAVn@ӴAVӉA]m@?@A\B3V@2ӛ@U@2?L@>@2Ә@g@?? @2>@d@?@???@?i>@?N@J@<?G@<???i???i@6@ӲB>@G@<@?@;?i{A%?d@?y@Ӯ;;@1@@F@<ӗ@qAwӫ?Ӗ@yAEE@@T@@@<?Q@<ӐAD@=@<@ӇAd?@ҵ?@U@ӆAd\A@@d@?@@cA@@ @?@ӜC???@F;?[@jA@A@ @??ӌAW@&C2;@;AAB@*C@OCӅAdҴ?AA?@??ӄCZ@ӔCbA?@ӋAW:e??F??:e; A:AE;S@???"AbwALAvALuAL;9;:$::Z;AiBaA;CABB ӁC;S<&;G> A?K???@@ZAgӀC!Ab;CA}C?> B?B~BSB??GB@C@C@BcCCdBsBGBsCdBqABqBBGCxC @AgAAѩCѨCAGBAC GѼC{CѻC{BCmDclDcB;BBY@ӾBoA}nA}өCӨCҧ@^B6AҦ@^|Aqe@Z@AqBC!mA}BBA@ӽBA?ӼB%BA@BӧCӻBӦCӥC;BlA}B;@BBC!@AӤCA<BӣCӒC@VC@#AqA?җBBB@CB@AqӢC5AҖBnAAB6C0;4AAӡC?B@jCBV@??ӊC@!CB;C$B#B@BsAq@|CAA@C!B@BC!;ҺBOQAB?C$@$A#CAB;PAҰA@ CABkBpCB mAAACҩBnA BaBAC$@$@RCiCDAB AvA?C@CB ҡB BүAB @B B`CC#OA;ҹBO;CҨBn]CA?A]?ҠA`BNACAҮAMALAґBBA/AKA;AB=BN.AҐB?AC#JAIAҏA>AHAҎA=AҟAC#C#ҲB@zC?CBC%A҈B,C#҇B,B-C%ABAvB-A}B\B,AҷC% Bv<AұBATBA~B|BCҍBAA+AAiBA*A[BhBA)AAC#C#(A_@RC AmC Ҝ@қ@;C uB'AAC @C 9C 8C 7C AA BvҶC%?jC%A@CAA!C ;C 1C A0C AC Қ@AAAABD@&C C"TBA0C @C C zB}AC"yB}A)C A Bҙ@AVC ;C ҌBC"C ҊB)rBA;AAAXA^@lBAA&C"@C";C"fBҋBSBCD!LB\@C"AfC @C C C C C"xB}B&B҉B)C"BBqB҃BAB)ҾAҽAJBRB&QB&HB?ABzB҂BFAQ҆BҁBBBOBIBAEAAPB&;BiD)ҼAwB}ҀB;C"?eC"A/BҭBGһA GNBAAQAeAMBҿABd@BGBCCBdҸA!C7?BABBBKB\CBC7ҬBCzҫB@B0C7C7.BGBiB>AҪBҞAyҝAyGA~BDAhD)@G G@GD[CAGѱCCD"C}D[@EBeB49BBBdB4G:BҥB@6B@AyCҘAyCzGҤBBiAAy5BҳC&AC&cB4ABBIC&ҕAyҔAyңC& GғAytBsBbB4>B=B-BѰC8BpC'oC'ҢC&AC&AC'AaC&,BkC'AC&XBC1BAC&dAZDYD҅C&҄C&2BBBjC'B!C&AC'gC'ҒAyBC'3BAvB4WB@B4VB]C'0BBBCAC'UB*BCZC'AB%BYC'Cѷ@CcAAC&{C&+B@BBB B_XDBvC&BC&ѧCBZBWD'BB4BG$BѶ@BC'B9C6B9C')BBC'&BCB_GB2C'<BC#BGGB_B_AѭCBzBB@BB|BBC6?(B4C6ӱBC6BC67BBjBњACD@GѬCCuD;;C3CB;tD"BCC@CB_GACDӞљAӝѓDF@ӓіDCѦCѕDCєDCAC@GG@ApAA'AAAnABBBBsDGCpE!CiDFB-DMA'BC>CC,DMCBB2rDνHF~GC=HGC;C;FH CH HΛHzCDH CCCCC@BC@ΟHjCλHGGζGG^JοGεGuHtHGHC=GBF6CUκHΞHjH μHΚHzGGCяDIѠCCC2ѾGD@GG&D}ќCCRCџCCѽGѫCўCюDIђC-GѳCGLD-CGѪC@GGB?G@GѲCGGGDG@CѝCQCB@GG~CBTCћCёC-ѺG8C7C%D}ѯCCByѵGѴGѹGѮCѸG{By@CCrGKD-VDgBTGGzBy}C@GUDgCC,GyByGCmGјCBBGTDgBGCGSDiCbDiCD0PDiѥCBCC`GCgGѤCBGDGDoѣCFDoBGBGCaEDoCDAD5"DBD0CJGAGCCC=B|C<B@D5 DDD!DDCaьDV:BxGѢCCDB^GGDJDDC?D5DCCыDVъDVщDVC9BxCBxDD;BшDVDCхDYDDJDC DѡCDCE$>D6CD/aDeCCчDVCDJCCxD\`DeDKфDYCD_De^DewD\]De\De[DeBeDeNDmDC4D?3D?уDY2D?MDmvD\CDCтDYBD\CD\qD\pD\DBDeoD\nD\BDCDсDYDD1D?D.DрDYBD6BVD6DDKkDdDSDSjDdB'DdgDdfDdeDdCRDmDCCCzDCCJDm6D6CDCDIDmHDmDD0DG/DG5DDKCDADdbDdїGBG.DGD,DBGDDѐGC>GCDCDэGCDGED-DEEEDD&EмE#пDOCGцGкE(CGзE+BGGCGжDqDNEID`Df+DGЭD_DjD^@GCGCGD/EHCtG*DC|GЪDb)DOGDGDbE:CGеDqDIE+DDлE#ЩDbЫEHШELЬD_(DоDOйE('DХEPC_D$DED[DCEDGDdGCGУEWG#DФEPDDDDCDЗDЖDЧEL DnEmEГEE`FІF'FЅF'3DFFFwF-F6 FMFFE*"D'F@vF-ЄF'uF-&F@EaEEtFEDFOEDϾElDϽElDFOЃF'DFfF6 FMF FMEDFЂF'ЁF'ЀF'F'FOFtF-sF0DF0%F@FDmF0EDϨFE*EsFfEaFϧFElF0ϦGFMkF0~F'}F'FjF0EEG3DF0fF0DjF0EF0\F0FEF [F0$F@ZF0DF0DF0SF0DERF0FEF0CEFE5F0JF0F,EIF0 FGEAFHF0DF0EF0ϼFDF05F0FEFFDF0ϤEFDiEDgEύF~FDF0ϸE0F0ϷE>EϯF=EFϮEFϭE<E;EEFFϫFϥGόFFϋF϶FψG/ϵFϡFFGϬFϠFϪFϴFϣEF@G}FGEFGEF~ϳFρG4ϲFFGυG2ϱFEGEGFaGEFFHFHEEFGF5FϟFτG2FFGFHFHEFFHϕFRFGϞFϢEiFFGϔFRϊF~nGNχG/ЇGEvGFHFDGϛF1σEE}GGHϜGEGF!G~G<DGFHϖGENFHϿF FH-G,GDGxGEmGNwGE(GEGgCVϚF1F=FDG!GeFEGFGπG4ϐG#QF}G<EGGEGGE)GEGϙF1ϓG FHG|GGtFqFGsFqHFGHH HI/KGJGGGΰJGJϝGF/GGCGG(GΕJF9GFGϑGFJGGΪJHkH GFFuGFhCTΐHGEGφGrFqEGEGFGGFpGFGFGFq5GΔJoFqF2GzGyGΩJFGC2CTGjHEGvGGH GFGFGH GFFqlFqkFqHbI6ΏHwHFFzHΎH΍HGGuGGΨJΈCO·COyH=HH;FjGcGFGbGvHGFF<HFGFaGH&HFsH_G)H#HfI=YFH;FFFFH;`GrHFEGG]GEGFGFGGIGXFHG^GG$FBH;H;IH}HH}qHBrB3GFBX΅H@HGH}FFFGGHHBJ@C\ΆCOVHBHGIEGHίJCe?HUHEGFGCѿCFCb@(H#CTHιJDBEF&FVFFEEGGfJJJ΄HJ'H'%GI#EQH[θJήJaF.EFFPH[έJ΃HάJBFJAFCJ&H',FηJIHWI#OH[J+FC,JJNH[CJ#H`F.ΫJFJGI"HGΓJIIG?F.!H]F.ΒJ$GCβJ\F.HGH>HH HC ΑJG-JξJC7JC4JHVHFzJHC GHC(GHH[F.4HIFJYZF.H;H3H5H2H1HHI,HI,GGGHΊJFHHHΉJGlHIoJr:HGoGHFHJH4K%KOH OHH.H/ O OHGH+HGH-OKAH6IJ!KOGbOKKH5KH/KKH H? HB HBH/JKHH/KK?O$KH6#KK6KMH+ΧJΦJ΂H΁HΥJSHRHΤJHGo΀HHIGHCI;IyH9HͨIIfIxͺIBIHΣJͧIHIFJC&JMHLHΝJI@͝IH~HKH͡II͠IΜJIJH͜IC)JI3IxGtH͹IFHͽIyΙJ͑IEHpH8HIfI8͸IG7HIfIGHoHΘJΗJ}HGI@DHFH|HGQͿIxGJnHGt͐II8mHHQJ{J6H0H!GG HhI`HZI`~GlHHGVJxJI3GQHGSJCRJGtbJGͦIJvJF JGqJHJiJI3/H!HZCJ HZI9eJI? HhdJG&H HhGZI8FrJI8WJI8.H!GJ-H!FH!IgͫII`HH#JI9GcJHKJ HZGcJI?IiI GJHzI HXJ}IHIg*H!I?I ͥIͤII&I&HI9I&IImͷIͶIͪI͘IIsGJGJGJ͗IGJI ͖I͕II kIPIJ3I&I ͅII9GI HII2͔IHGI IsI ͵IHH͓IIiI&Ii͒IIs͌II&tJIs̈́I͋IHII I2͊IjIPPIYGI ʹI{IHJI ̓IGJ͂ÍIHJI2I&FJ|IzIHJpJͳIFJeJ)I IIsH{JJcJ*G9JxIHJHJRJ4wIQJ4G\JoJHJHPJJWIpvIUJ0VIp?HJKmnJIsJYJ/mJlJIOIYHJrJXJ/dJ)iJqJbJ*=IaJ*IJ6TJ0IJ^LJ:ͲIK,JHJͱI̭J_0J^SJ0;IHaJHJ>HHJJKJ:JHK,,Ja(H$IJ/hJNJ6HJJIJ?ͰIMJ6HbJH]JͼJͯIFJUͻJͮIHcJHJI]JͭIHJ?H.J<IHJͬIGJ?ͣJIJJUJ͢J̬J_gJJ JK%EJUDJU_J.H/JU'H$&H$^J.K%IAJUIWJ]HIͩIH^J!JI@JU J IeJ]:II͉II͈I9J] J 8I[͇I+JaII7I[III6I[5I[]J.4I[J"̸K8I\J.͟J͞J J͆I J JH8H8HI[J.JH83I[ZJ.̷K8HIHCÌIIIHHJ͛JIGpI͚J͙JHJHJ2I[JHJI͏J͎J͍JJJ$HJK$IJJIJHIJJHIK$J2KeIJJ&IIJHJH1I[IJJ J&KJIK)J"HK̯J[IJIJyJJIIJ JIJK.J JJ$IJKJ IKIK)IvJIJK̻K5J$̮J[IKK.uJIJIJIH̡KKILJfJJK̞KHJIJKIKJIKJ KI0JI5J̺K5`J̠KIJIKJI0JKlKHK+I%J̕KTI>J̔KTkKKI7JK*JJ̆JzWJInJK*K+K*̦K VJ̥K ̝KK+IJIJ̛KQI̾K3/J.J̽K3̼K3̶K:KJ:K;KI{JKK*-JGJJKIK;KIJIBJI[K;̵K:InJ̴K:KwJ̙KR*J)JK̳K:̈I̲JS̫K;sJ̪K;̱JSKJ̓JGJ̰JS̚KQ̘KR̊JwJvHK%JJ=H̗KR̐J̅JzI̖KȐJ̉JẇȊJYJJJ̒JJ[JvJJJ̍J̄HXJ$J#J̃H̀JPKNG"JIJZK^rJJ{JzJTJ:K KJZuJqJG9K UKdbJ}JFGpJOOG%HFHFHǑJΖ^KVGyJGJKdIJw̋JCOKNH~JJTK^HII_IJJMIIJJo̎J|JaJJjJ5OIK`̂J`J]KVxJEKrtJ́JHJK=JK^"KJmJ8H*DKr\KVSJ2K(Ka?KpKhK1K7H*JcJHK`MIGGK`LIGCKrJJKLHJJ0K OL [KV4OJ~JoJ̨KP̧KPnJKhJJKIG/KjJmJK<JJJK!K>KpKc6H*=Kp'KaH2OHAIKP<Kp;Kp̤KPKEL5̣KPKLAJpJJpIJpJ JJ/Jp.K*K̢KPJpIKPIJpJpHAKc̟KPIKPJxKp̜KPL KIJpIaJpJpJpKKvIJpJJpJJpI4JpRKjIJpJpKJp̿JpJJpKIJp˵L&̹JpIJpKJ0JpJ:JpiJ̩JpKHIHIH7QKjhJ_JKgJ)KKHMKqH7˲L9HIL*JKjHMJJpJIJpJZJpfJJJpeJJJKNKjJKo˨K KK(˧K dJJJHIJKoJKKgJH7JJIKgKqKXOJOL*K-JOˣL\I"KjFKoKYJJJKL*JKo˱L9KL=˟LhKL\˴L&˞LhKLKgBKocJ˚L˙LHI˕LL9LWKMhAKo@KoKcQiOgOiOrQ]QeKiQfO_KKlPOvKOKWKKPKKOOKcKOdOˇL-KvKOKKPPPhNKOQhQeOKKQhPUOKONQkQkOQkMPKKqPhOO3OJOOOˬKJˆL-uLN-O˄LOtLNLpL|˻K˃LOWLHO˦KOˎLvJL`KO˿J,OOJAO˽ONL1ML1˼OKLvKKO+O˘Ky˺K˹K˗KyKO&OOVLJOK˸KOK˫KKLHOKOHKK O˭JILL&LK˖Ky˥K˾JK#LˢK[H%OJOO OKKHKKLKKKK&KK/LKJH K˪JˍKqL ˤKOKLMvpL 5LLMSˡK[ˌKULKJLKLOO^LIKOAKt`L]LI\LO˅LˊLBL@Kt4LOOKOˉLˈLKLO˂LˀL7L+LTLSL˶OK6O˩LJL7OKFO_L[LOKfLZLO˳OOKLˁL~L7LLJLJ}L7LL|L7KLO{L7zL7ELKBL˰OxLwLJLJL/MoL"˯ODLˮOvLJOKLLO˔L˓LJKKLLLL~LBIK0L?KyL˒LsLKZL,L(My>KnL"KQLJmL"ˠLJMK'L{LYL+L˝O˜O&L{KtLJrL;L#M"M-Ly/L M)KKˑLːLLˏLKL.LgLLmLM)L7MyKMMM-M)M-KLMM'lLM9L4LyLKM9KLˋL8L:LM7LLbM9LKkLfLaLeLjLLLHLdLGLiLLLPcLPLMMbL2L1LLLLL"LKLLLM6LXLMKL MMLLLOLMLhLKLMLGLMdLMQMsFLKLMdM MMLLtMM#hLMsM2RLM2LM.M.M'LMʸL M*LMuMuLMK}OLM MHKuOMMHLKOLOLLLOLL MCLLL?O MML OLOLxOLOM(LQOM#LOLO=OʵMʱLMuʰLL<OLjOLʣMLOMQ3OʯM@LM@LOʩMʴMʳMʷLM MLMM%M$MMʬMʲLLLʮLMMʭLʨM4ʧM4ʫMMMʦMʽMʐMʤMMrLMMUO/ʥML:MM!MʞO&MʼMLMrʡMʿMʓMjLMʛLLHMM9MM}NLLMLMMMrMrLMʋMMMMʝO&MMLpMMʢMMMMʊMVLLMAMʠMʔMAʙO)ʜO(ʏM*MLMMMMʇMMMʚLMLM|NKO(qMMfO8M?MMYMMtMWsMWLN5ʆMrMpMʒMjMPN-ʑMʅMLMMN\fMUʉMVKPMMMMMAʘO)MMMM{N zN MMLMON-LMKMMuNm)OLYOyN ʍMʌMeMUKN5MOL^OʄMiOOʗO)ʎM*uMMDMxN wN MLHOLOLOMTMMOM3MLOLOOʈMʃMiʂMiOjMLOM=OM>OMMwMOTMMOiM~MMOLOʾO^NʁMi6NZNcNDNsOYNGMFMMNR5NOOhOSMbOMNS]NʖO*LOMP ʻOMO7ʺOMPaOnO6NN7O-MȼKOXP ʹO#CNLO#aNJO:`NMNNNgOOP`OAO~hO7MNOPʕO*_M^M_NNPN}ʶO#ȻK@O~rOmO6MOM@O*LO*M1O,M{O*1MʀO,RNM9O*LO#LO#M O#.MN9N}gO7MNkʪO#IO:MlO,NN?Me*MlO6LO#LO#0MM$O#/NkHO:(MN=MO:MkO6EO:MO:bMMMʟO#<N]MMMM O,MpO,>MevO,-M=MeNMN_;N]N=:N9NdO9)MNN] NNj\M[MMtM4N_'MMO9MMM3N_2N_QO9XM"NO@WMO@!NVMBO;O@MLO9NO9NOMO9N8NNGNeM[O9N;NGMN NMMN67NMOBNLNEAO;@O;NGUMNQNNNNNvN,OBN|OBNjM,O<+O<N>MN/OBNNCMO<MO<NvNNNNUNNMNON6NN6MCO;MO;OCNO;NXNN6NNN4NNN<NNeNNOCMO;NMcO;Ng&O=%O=NNNNNuNNN?OCOCNONNlNNNNHMOC$O=NX NHNXNCNUNOC NHNNgNs#O=OIN{NzNNt NHN{OMO=NkN O=OGO=NN>NzNNNNzNPNOENN O=NJOGNsOGNNHNIOGNHNHNtNNNPNNNNNZNsNNNVOINNN0OGO=NɲNN{NxNxNNzNNɫONOINOOINNN]OIɷOɭOɬONOɡOMɤNNONOENPOEN@OEɱNMOEɥO NNɝNNOEN(OENOqɪONOcNOtɓNɼOLɐNNOɻOLNOfɶNNO ɣNəNɌOdɋOdNOdcOUNOdOMɠOMNNWOpɊNKKɏNɄOdNuOKɗOcɒNOJɈNOKɟOMNOJɞOMɆNɇNɃNɺOLɹOLɰNɵNNOOJNrOJɸOLNOOJɉNɴNKNzOJO5OjNOLNOLɘNɦOLɿOKɾOKPNOLɢOLOXɯNɽOKɮN}Ou~OXɅNMOU{OjZM|OuɜNNOɳNNOɂNɩOGOzROa8MMOɨOɧOM OVOpMOMDOMOqOMOIMPBPMO7M.QEFOzoOpOɁOMOMOM OMOMON+ONONoOBOYMMOP%PONONEOoONO<ONpOQOaNONONONONONO2OɛObɀOTPdPnONPɚOb]PNOLMmOSP,O|\PXOKOUQ4O!POLONObNOɖObNO-K[PKmQENO'QYKMɕObHMɔObNONOb"KɑObNObNOɎObɍObOO`UOOPJMO7KEPMOOPK]O OK+O|KK;O1O&QYPtQo%QYMPOWP6M5MPPOP$QYK O4MQqOQq0OK!K#QY*K)KOQzPxzOyOOK OKDOCOxOKwOvOKO>O?OP@P3MKKOuOtOOOMPxK}PPMO>OOKxO=OPOFOȬNOPO*OPLlOKOP:OKkOJȶP9O/MPKPKHP=GOP=QgKKH OPOP HPjOJGKiOKKȣPMOfOȫNKJxKK6ȢPȃOxKPK˷PLL%PLQg˛LMxOmQgO"OPRPeOCOGP ȑQP KxQgOQgȪPNP;QgMOOQgȩPȐQMOMM#"P#P.!P#P% P#PP8QPQP%OPOPOPP!QPKP*PȂOxOP. QP*P%P/OP(PPPP P)OP,PP#OQP1PP-P-Q QP1PP QOQQQ,R P QlOPtPtțPWȹOPKQlO.ȊQ.~QPPQRȚPWPOQlȡPP!PtOPtȉQ.ȜPOP P PKOPPQlKȈPnP?OAP_QlQl}QP[PPoQPPQRPfQPPXP PXP PQQrP P ȠPȸOKxP PtO.ȟPOPKPVQ/|P\OșOAoQOP)QuP{PnQPXOPXȷOQuZPuȅQ/KBPyP^PX?PcȿOO.xP^>PcPXOKQuwP^ȇPnȆPnKoQuYPO.{P\zP\QuFPPPuPQuPPPOO QuAPPPSPRPOQu8Q8PQ8PoPEPPyQ\rPP~Q\2PqPTQyȵPDP=QtsPȨPȧP<Qt7PȴPQ@RȳPgP]UOPQȲPtPpQXPPQyPPuOQv]QV\QVȱPȦPWPVPȰP6PCPȯP1PQQyȾQvQQyȮPPdQȭPȽQvȥPQR P)QVMPȤPKQvOPȺQvfP]ȘPS*QPPP6P,POQvȗPSPQv.Q}JPHȝQvQQP:Qv)QPQOPPHPȞPvPFPwPFPQ%QȖPSQAȕPS$QQGeP]ȔPSQ-Q}QPqQ}IPHHPHPPPȓPSȒPS0QOPSQPPQ+PPQ}R.QQQGȏPSGPHȎPSȍPSQPPPȌPSQPPFP@PF+QPQmPFOP;Q{ QQlPFP6kPFdQTjPFiPF:Q{QAȋPSPQAQNPR.cQT(QbQTP:aQTPQxPKQx9Q{ȄQxQP:O^QxPMPhPFPmQ{`QT Q_QTLPQ'Q&QPPQȁQxȀQx5Q{O1Q3QPQQ4Q{QFQQx(QǻQFP:P*QxǺQFP+QxQPQx^QxPQx3Q{QOjQrRPPQ|KSQQQǸQJ @Q|ǷQJKoKWOKKQQRHKuP$RRKR2OfQxǿR2OPKQ|QaRPzQ|PsPQQ-POQQ|Q[PǗR<DzQZPQ|DZQZǖR<QQs/Q|[w\_\\\_[[[m\Q[ \QcQQ[QǬQQ\[}[QRG[j\[_\Q \[[N\'\\[[\\5\\[[[\[\\[o\[j_QQ[\/[QQQQR$QzR)ǹQQQjQQR$ǡQjQWR$QR$QR)ǑQ[ǐQQPQǫQ[P[[O[P[[[[ǝRTǪQǣQQQQQQQQ[QP[QQ [QQPQQLJR4P[Q[ǼPǙR&[Q&[QQP[[[[Q.[[ǯR6[ǏQǜRTP[QQ[QQDžRFRDRPP[QPO[QǶPǧR:R'QǩQRORQR,RRcdžR4ǴR5dzR5ǠQm[ǾR3ǟQm[R[RǮR6RMRǘR&P[ǃRcǦR:ǭR6ǢQR\RRP[LjQǎQǥR:Q^R,P[[[DŽRF[Q)R5ǽR3[ǤR:ǍR-PR3[ǵR3njR-Q[ǚR*QR*xQ[QR6R%RaǒRaQRaQQQ[NJRavR[QO[Q[QQR[Q[Ǩ[ljRaNjQQ[sRQIR*yRoRuRBwQ]RR?RRRqR}RCǕR*QQQsRQ=[Ǟ[ǰR5Q@[kRBR ?RHQ3RnRRoRbRxQ[ǔR*Ǜ[[mR~[ǓR*}[=RVRrR<RRSR[AR Q[ǂ[0Rw*Sǁ[ǀ[tRB{[\RPQaRxRrRjRRcRR.R2Rn@R7R)SR{RRdRRSR_RYR,SXR;RD6Rz[dRR$[R[R;[R]RSRiRRUR+S^R1Rnq[OQ(R`RsRv>RhRRp[GQ`Rx/RwRNRQRR7[RRgRRl[R8[RW[TRR[RAR[RRR[9RWRR'R`ZRRRRzRQ[RSN[M[fRReRRSDRRRSL[CRSS SSSRSSRSRRQRRRE[RK[RS3:RDRxSRSJ[RQRR[SSJSRSDRs[R8[Rj[SRTAƦT*SJƥT*SSRT6RT RSI[Q[RRSRRSS'R5[F[ƤR}T ƣRS;T;ƜT;ƙRƢT6ƘRƂSR RSwS]&SS@SXƁSRR%SRSR SSSYSRRS$SRS#SRSSSb S S"SRSSSSSSRS,RSYS*SSSƿSR!SSHSSSSvSSbRS SWSSƪTRƵTSSTUSSƲS(RSSƹS"ƸS"SƴTƛT=RSRSưSSxSj^TqSƠRƯSƳTƻSƺS\RSƕTSSSW[R[ [UR[[qTYR[R[R[[5TR[STzR[R[[S[R[USTS[TSyTLR[[pTYR[4TSs[S@[S[ETS[[ƀTLTS[DTTT TSSSSUBTS[SsSm[Ƭ[0TSSTSƫ[/TSRTLATSzTT.T3TSz@TSS)S3S)>TSeTT!S?TSTTS%[;T SgSgTƨ[Ƨ[T-TTS}T S SƗ[R[:T9TT$TTƖ[8TTTT,TTR[TS7Tơ[R[S>[S [Ƒ[SƐ[R[Ə[ST$T4TcT$TDTfTS0[Ƌ[Ɗ[S[T$|[TSE[ŬTS STcTTMU6TTS[S[STS([TTd[TdT"[TbTTŶTHTſTS[[źTS[_[TU4TdTDS2[S+[TTTŸTžTTUTS[TŲU[ťUŴTVS[[[TU U"TT.[ūTT[SC[[TUŹT(TōTSl[ŵTH'TŷTTZ[[Tu[ųTVŌTţTTT[T][SR[ŢTŠTTC[U5UTS[Ž[řTnSQ[S[T[&TS[ŕTS[ŻUS[TUTTUHŋTxŇUŤUpTT.UTNT%T$TcUTU/U-[#T,["TU!TU(TSUUTkUTkUUşTűUToUUT4UTU/ŘTnŰUSR[ŔTśU/U-USUUxTUUʼnTUUůUŊTxŮUŭUT=USUU)[œT~UHTyUvTT[ [UUňTŁUFU[T[Sr[T[ŪUU+UTuUTUxoTũUTUŀUFŞTŨUŧUŦU[R[T[ŚU/T[S[ŝTwTIU3HU3uTUV ToUxtUxXUmWUmTUmUUTU{ŒTrUTU{nUMUdSA[[VUUUOWBTU UWHUaUNWBUV0JUqTUU >UŜT2UUQV ;TLUd1UCUsőT9TšUTUU!V-KUdŐTTUqTMUfTGUqŗU\UU<U0TT=UU~ŅUŏTTUłUU~qUńUTTUŖUTUT}U|UTFUrBUsŃU[U+U'bUAUsTiUUU(UaUEUr:ThUeT{UV48TDUr-UT"VUVzU'UUeUV4!VU}yUYW?TW?SW?VE U9U VUEVU+VŎT@VdTgUTUsUU}TUUgUbVEUVEmUUQUUlU,UkU*U'ż[T[ U9`UT3[U_U?V RW?jUV`U.UUUQW?UUg^UPW?]UUT[T[UT}[UUT[U V VUVIT[U#UVU}V^V^TH[UyV^T|[UV`ņ[<V UU[TWV U3VIU[VIUUVRUV3UUUV3VUXTV &WUUUW"XqVVV[Ud[T[Uk[U0[Z[WUU#VV^UXVWVWWUXWXWW5U7V !XqUFUVW.X%WWfXW0UW@W XqVUXV6V"XWWRWHX9UUWWXV[VWR4UģVVV/V[VmU4V$UgVHV4VUV"UzVĨVUĢV3UTUV=V0U/V"UV/ĚVyUWQWQ.V"TV"U&V$UV"%V$VH$V$UUWRV&UV#V$UPV$V& V$ VHęVyV&V&V&V6VV$UAWEUWEWQUWE)V"UWEVVVV$ VHU VHV&V:įV}UVHWKUVTWKVVzWKUWKUHV$WFWFVZVW)ĿVZV$VUćVWFĮV}WKWEWKWFV~WVULWEVV:UWEUWEVWKĭV}WFWFVVĆVUVWFVVħVVĦVVVVUVV:IJV{UWEľVZUWEļVV2VăVbyUıV{WKĂVbWK~VrV}VijVrUVqVāUuVĻVVIWUVJVĽVİV{lVkVVVUVVVV]VrVrVsV%VrĺVĐVxUĬWUīWUĘVėVWSWSĪWUĖVĹVĕVēVĀUVV|VpVĥVeV%ġVsVtVWWĤVUVVW*ĸVďVV WSV#WS\VVVUVCV WS`V1ĒVVVķVVW1WSUWSV(WSVXVdV%UVĠVVWWSĄWXVVĶWSĵWSğVĜVčU_V1ČUbVxaVxĞVĩWWMVĝVVNV8VVVVĔVVwVđVċUVoVĊU@VěVĴWSV=WX{WYTVCZV8[VUWWVzWWVRWWVWWĎWWUWWKW-mW\HVJVWXVDWXUWYwWYGVvWYVW-VW->WOV^WY=WO<WOĉWWĈWWW WfW(VW5pWY?VLVIVFW-|WX9Wh8WhoWYVXRVFW\UW(7W/VjW\VWEW.V:WWUąWW6W5WcW(VHW(.VX-VX VWhnWYWhVUW9WW#4VX X^W(W6WWDW.WW.WWiW\UVW#YW+V+W#SVV|W#CWWXW+]W(BWRVQVWWWW+NW+AWhW_gW_VW_VW_VW+VW_UVW_VW_3W4W9VW_ WW6WVVVVX2W4XWXXUW WUUl[UWMWU4PVV[V5[UU[U0VV&[OVX[VW_XU[U[V[ WVZ[WV[V[V[X ôUV[X&X W [;[WUX:[X&X UX'V[ãWXXsWVWX XXWWAUWXZUW*Xn)XnUUX XêXPSW}éXPUWUXWrXKWqRW}WX]XJWqDX:WV[,[\XX)CXQW~WjXWXAX9WUWkXXXXVXXYS(Xn7Y'XnUX@XXhY=6YUX'WX)óWaXáWUXnåUU$XnàWÃWâWÞXWîXNXÝXWäUÄWXW XiUXXWXUßXUUÈXiòWaÚXaPW~ UvWwXf UtXu XXY|UXÂWXWU~WÌWoWXÁWÀWUWXrWWXíXNÑW"VXfWXWXUUXWW|XmWXkXèXQXÐW"ËWoUXsXu0WWìXNçXQÏW"ÇXlUW XhÙXaÎXhlWW^XWXUXÆXlWXuWæXQUXQÍXhoXÊWoXÉWo'XWVX8XjW×Xg5XqWX4XX.X/WXUXUXXY~WEXWXWYX.X.X}WX.iWhWÿX.&X"XWXXUXWpXpWgXÖXgXXOWnÕXgnXXXþX.ÔXgW+XWfXÓXgWXX.XXeX,YWXýXYAYüX{XzX-XûXúXõXdXUXcXñXXNWn+YÒXgXY>X=XMWnùX<XøX÷XöXXX@!XyXðXïXWXëXWGXWXVXXXWXWWyXLWnYQWXWnYQÜXYÛXX WWXØXxXYHXWXWXWXWXYYWX+[Ws[#[ÅXU[X[Wk[WX2X[1XYZWk[[XYGXFX[[EXWYU[W[W[W8[W [(W3YWyXXXDYW[X[X7[YWkW[#Y>X2[XYXXW[W[XWWX%WXWkX X Y?XsX}Y?XvX XXXXYC XYCXXqYCY]W[f[X[²Yb[YlX$W¨YXY>XXXXYKYIXXYlYYHXWbXX X§YWY>WXWY>XWY]YZ˜X±Y XX]XXXX&YCXYCY>a[WXY®XI`[BXWX¾Y?XX¹Y_[Y]WYZX¸YXYZYZXXYCXrX^[Y_W[[T[WM[XY_Y_µYXXXW>[—XX[­XIX[ªY©Y¦YX;[W[XWj[ƒX¤Y•YY£YY¢Y YW¥YXX¡YŸYY†YXW“YXj[X[*[”YyY’YYq[Y[…YvY‚X´YžY‹[oY)X³YYYYYY$Y&pYYYY}YnY)€X‘ZuYDWYc`YkYŠ[YCYOXjY?YWY^xYVY^ŒY)[W[X[XX[½X0YUX[Y.YPYYUYY'X[[YUXXX>YYYtYDX)[[W}[[YB[[[YY4YUXYUYUYUX[Y[ X[Yc[YcY0[Yc_YX[OYXYZ2¼X0XYUZZiYXY'‰YF[XYUˆYYUYUr[QYZYUYW[cY*W[TYLY»X0XSYUYUX[X[XNYUYG[ ‡YN[ 8YS[ ¿XYYYEYhY^Y%q[gYR[ KY)ZTfY~[X[}[]Y%XYYy[ m[|[l[Y[M[ Y[ =YXbY*Z"YjE[0Z/ZZZbYo[{[e[d[D[aY*Y [„Yz[\Y%7YYY[ZZT<YX-[Y[Z<º[X[·[XYYZ]Z<Y:Z/C[¶[œY$Y›Yw[Z]X[A[@[YW[X[X[°[¯[YZW[šYY1[¬[«[s[Y [[Y%X[Z#YB[X[Y[X[J[Z[X[Y[™YY[XSYZ9ZYY"[Z2YYX[I[–YY [Y[|[9Z/YYZ/H[[{ZX[G[X[[Z4Y;[ZZ[[7Y-[Ž[Y[Z[xZZZ}[Z[0YZYZ YZ6Z/Y1YZYZZ"Z`[5\8\[YsYZZZ ZYYb[)[]\,YzZ![YwZ[{|[vZa[)_[5Z[[\{[Z&Z[!ZKZY[ [.YYG[!ZZ[#ZZoZYY5[ZYY+Yz(YZDY[Y[#Z?[#Y'Y Zp4[ZcZ,Y[ZZeZ&YYZ_*YzZZRZYYzZY [$Z3[Z_ZZ_YZDZZ7ZZZYZZIZ.ZmZSZZi ZDZPZ%Y[ZMZe [$Z7ZG[$ZZfZZ.ZZZ ZpZpZpZrZrZ}[EZ|ZZZZi[CZYZZA[.Z7[$[Y[$[*ZZ\[CZe\]sZ[.[.[[[EZ|[[CZM[CmZZ-[PZ[.lZYZZoZ [>\Z ZZ[D[*d[TZZZ0[*Z[Z-ZHZy[ZCZZI,[PZZUZZZnZ [*PZ[*[ZP[*[[[YZ[[I[Nx[Z=\Z[UZ ZS[UZZZ[&ZYZ[&ZZ[[&ZZg[DOZY[ZZ[NZ)Z)ZZZaZ[&[[&[&ZZ Z[n[TZ[Z[&c[T[&[[[[Q[zZ[[p[[&Y[[&Z)Z)8[QjZ[GZZK[&Z[[&[ [9Z[&[&[+FZ[&iZZ)\^\^Z[Y[Yx[ZA[&Y[[&N[[Y][Yh[i]Yp[L[1\Y[ [d[zW[9[\Yr[Y[Y[Z)Z[Y[Y[Z [Y[ QhZZ[[Z[ZW[K[1Z[3[\[Z\Z[Z[d[[Zl[\Y\[\]Zk\\ZY\7[WY\J[1Z\[ZZZ[+6[Wh]YZ2[\V\\Zk[Z\Zz[#[^[f\1[\e\[[[iZ[15[WZ\Z\0[\[Z\Z\XZ[6\\\R\Q\Z\['\.\[?\\"[^![^\ Q[ \M\Q/[\[i[F\Q_\\Q_ QQ\\\[[4[WQYZ\Z\Y[Y[Q[Qc_QZ[Qb\ZQ]]QZ[Y[[Z[\\[[ZZZZZ[\[S\uZQZ[QQj_QYZtZQ[Q\[QZ[Q\\\[[\sZ\Q3]t~ZQ\\\\rZZ ZQ\zZ\[[A[Z[[[\ \Q[\[\qZQ\r\Q^\QQk[\\[\[9Z*QRR/R#|RjRR\2]t4\QST T)SgTu[T[\^STb\T\\UW>XmXY<YYY[[tEZDZ[\[[[Z[/[d\[@+[X*[X\[*[7\\\[)[XCZ]>[8Z*[\BZAZ@Z\?Z\\([X]Q]dZ|Z[\<Z'[Xo\\]Q;ZE]C&[X\]Q[[%[XwQ\D]Cc\]dQf\]>MZLZ]d\QQ[_Z:Z9Z7]r~]d[[[vQ\n\\$[Xk\5`\5\\\<\M\\H\I\I\\G\;`\L\L\\F\0\P\-\QB]h \Rk\k`4`\,`k`-\ `\R\J`u_\^\Y\Yk`_B`_`_Yk`-`k\U`_\i\B``t\k``;_``D`__[[\A]hT]6@]h\:]q^ZR]B]Z?]hI],]0\5Z.\6]r&]+%]+][\4Z^^y\\\\\-[_[s\,[$]+]x\S]6_][q\[H_\]n[[Q_\^u[y\H],Q_Qj_[B_[_ ]H__[X_\\]Tx\Z\b]n]]\][a]n`]n[Q\Q_Qg_\Z]qQ]BQ\[_P]B]H/\[_\x_[_u\[_[__\t__Q[Q\]%t\]T1]u]QQ\]x\]u\]u_[_Ql_[]-]\]%+]u[Q^J_[QY]n\]nQQQoQ\]]\&[Q]#]A^!_ ]]^0p]][]["]AZ]<Q}]j|]j{]j]z]j\]\\]j)]v\&\]]*]u\]`!]Am] ]QQs]jr]jQq]j]N]\]jk]jY]]]^%\\_];_^\r_\;_Z_[_\_]_^\]]]Z]e]]m^#]z];]o\]{^]z]\]\_\_]^]#]]]^-]]\]]]]]]|]]]]]]z]]]]]z[p\]]]]]a[]]]]].]] _z^\]]]]]]]7^]]|]| ^ ^~^C^z]_]^}\_[[\]^z]n^@d^^}o\m^@]]]]\_}^C_\]__%](^]^z]w_\V^G^]y_]_\_]_\__U^G]__^B^_^U_'^Q^v_%^6_S^_6j^S^[X_]___6^_*^_^ ^|^C^,__^z]3F^&^]H^^^#^l^@^]3T^Gi^SP^vE^&_\_^,9^]E^,^6b^I^c]3_H`^[^j_S^6]3^,[_]]3^,^_G^_^,^]W^_]J_]^>^___^6]_]D__3_\_]'_h^S_y^:x^:]^^c8^_3^4^^a^I` w^:_]^Z^j^,]^v^:W^A^]^c^^^\u^:_k^7^S^@^\%^]^`^IR^\Y^j?^t^:^^/^.^^s^:` g^_^]S^^\__$^6^` \^^^O^N^\_X^_I^_5^]>^:\s^:]^__4^]__k3^]` ~__k:^]^^_^^M^-^_^^D^C^__]_2^_^]^=^_k^N^#^_ 1^_L^],__ ,^]]^^"_^^R_]_^9_^H__^._^k_^J_^p_<_K^_x"_}__^^!_\\__^;_^g_0__^_^_]__N^Z^^]^___=`__i___^_x_^_^__xt]^^__^[`]._x__i\^__^_\h__i\q_]_+`^___s]*`_ _ __x__x_]F^)`^m]\^^\\_R___]`__&`^`^` `^ `^w`_```j]^d_]___]_`w`^Q_w_^__^\``^<]d`^^r__ _:p_:f^q_m_$_#^]]Q_]]N_u]^[_Vv_b`__G_>`l_$\_`^.`i]P_]`E`e^`^_`c`k_$H_/]_a`7_^o_/_n_``_.`K^J^C_```<^\``O_M_u]``Z_V_+`+_l`7^_GX````_B_W`^`4_G_/`8\d__F_/^_I^^K__W_B_]_G_*_lA__\fV`\d_'_``^` 5_`E3_\f`7)_\` ^b_` _ `._6_^` (__^_` ]` 2_U`T`^` ^$` ]_ `_|_`?Y`\_` ;^_{_0__g` z__^` 1_\e_D_`E`8^__^_^__y_` ` _f_x_`?D`_J`^` ``-_^_ `_` `?@`_e`#,_^` ` ` u_``#^`_\e?`^` ``#_`#`_\_`` ^` ^` `^~`_r^L` >`_`` `S`_Q8`"=`_`&`^`\p_W`"`g``_[6_b`"%`\j^`_5`_`"[n\n^`\L`k k k $`_k :`]=]]]^s\n^_r`\j\`_`_2k#`^=_w___-_O_F__\m``'_`kk]`_`9___"`!` `__`_````k`k`\D`\m`Va``<``\X\X`<_X__d_`x`x\J``__\X__`````_z_j`+jjZk`j.j`&`I'`G``Ki`Mj+jhjBk~k`1k\X#j`S\o"jk5kj@k`S k-j`Hj*jh`/`_k`a`a!jkj=kik`9kkkjSi&`G`ijjk kk`ik\l\,`v`kka`9``e`/``y`t```a`v_`z^a\o``\kkk`aA ka`v\l`v_\o`a a _pk_`s`uaaa _+k`zaaP`vkk`a5\h\+k\4`va|`f`_e`kk\7\h`|a`agaR`a5q`k```_kkza5\c`vkaYa`a_k\Ck`aS{`\@k````\h3`\h`)` `)`aT-``)maN\h2`/an.an`anaH`*an````)~``aT`ca `aRa `a a wa>p`\kk``)_`)\h}`ka\`laN_)`)ja`)_a a a \9`)`)`)kkb`d`_a`a va>^a ^a`Ja k\Kk`}a kYak`a\aa_Ka\a c`a a]ZaS``)`jk`kk`k`k`k`a>a4kra>`aU`aU`aMa9`a a`[`a ]aU` a `aW`aWHaV`aOR`BatN`FadVaWDaeiaOUa[Cae,`Q`aa+`haOXaLa9WaGaVa&a*Aata a`}aa&aEadya``P`#a1xa"a1`aaKa6@av`WaTa[?av>avaaaMa=avJa^oaahanaIa^aF`a`a`a[Oa[`a`k`a`aaa^`a<k7`a/aaa`a``a3a``!a?aaZ a?asaaa^`a^:aaFaJaaRa aj1k0k`ka)kaa(kaaaaa"a9a&k6`5`;k%kab7b(aJb(aabEaaaambSa?ka$k8aaE`kaa`k'kaaaabaajbEaZaab(aa4kaaabaoaaaSa ajaaaa aaEacac aaaaqawaaJaaaaaaaaaaaaaa0aaaaaaaaab"a~aaaaaaaaaaaaaaaaaa(k abak aaaaak aaaaTaabab.abaaaaa}aMaaablb[aaaaaaak"aPaana aa@aaak"k"abb:auab8aabla@aa}aaaabiaab6b aaYk"b.a}ab@b[bbb#bbebaba~bb%bbb}bab8ybaa{bk!b8azbvbrbabbbcb"bubb%bjbb6ab cab>bbb b!qb b1b$bBbafk!bcbb<k!bab6b>b6k!b b>bk!ak!ahk!abbsabbb+bbkb bkpb ab<bkb'bk!alk!bmk!b@b bibbbcbb'bsxbbaak!YcaobUbbkbbabbbTbbmbkQb&k#bbb^bXcbmbbab'nbb=bak#bFbabbkbmbPbbb9bbb|k#k#bk#bk#btbPb&\cMb)a]k#Jc bcbqmbbbbUk#bUb[cbbibbbb|abk#ak#b|Zcb|b bbdbk#b k#b|bZk#bbbLb)b0k#ak#bcb bCb|bec`bc,Ic c}bbb|bbk#Gbbbbb k#)bbk%bc$bb cb.b Eb9b,k+bwc/bbck+ b'k+#bbcbbBbDbbFbclc/bcmc-cs8bbc7bFccAbgb bk%bcbbc}k%cl@btk'fbbcbk%|k%bb k%sk'b k%ak'Wc bVc1c%bDcbc4c"3c"wk%bVk'lk'ebccbckk'bk'ak%c cONk*?bdbCbhk'bk'b+k'(b`k'Sc>b=cc|_k'^k' b]k'Rcak*7c bek'bLk'+bbk'Ok'Kk*bk*6c Hk**b2c"b<cc0c%;cb/c%cbacc&bbk*b5c bk*bk*bcck*-k*bc ccZbc ccZc|cccbnbcncnbc|c~bccccccAc c5bcrc2c2:ccc6c|ccc;bc+bcc.c crc@c>c>ddEccccNcNc2ccbccdddc%cicccccc#cdcxctbbbkcict"cicccccLd:&k-cUk-!cic@bc~bc~cc~k-cccgc"cbcc<cbccc\c ciciccbk-bk-c,ck-cibk-bmk-bk-cxccxck-cck-bk-c2k-cckcck-cdc2k-ccd=cibcicidciccofcceidcdcccecXccXd d&cck-cxccPk-ccccccejcccceie8ce)ejccd0cceccecccck0cccfck0c$c{eYfcc{eremcwebk0}c|cc{dc{eecXeck0k0cck0k0k0cccck0cedck0ck0ccck0c~ccd!ceccc/k0d cek0ddd cddde`d9_d9dYeXdsLeuedGqcdGpc]eBdVCdoedSdSedeUFcEc;d6ddee&die%d8d OdJ:dd@dheKe\edAdVde5dgeReQeJePedefe7d ee3ecedWe2dd*dVeddddddd.d6dUe)ddNdJdOd(d'dd9ddd-d6Tede1dIeee,d6Ge ddMdJce0ddde+ddDee de de e d dHed edd$eceede=ee+ eddPeedd/d<ee+$ddQe#dcedceddeddwddedDe+eeddeeedede}eeed"ddddeedd4e!ddZededdded dddeddddddddidedd|ddededed|eddeddeedddee@esedXddAefeeeFdAe0eddePede<deedeeeededeeee<ddeePdeeQdfeeedsdee(e{eeddXleeZe ece(deeeyeeNeeneefeeQe{eefefe0e2fe{deeMeedesdceIeeedeSeZee!eecdxe=eie9ke/deeeee?eIfd'eedchceffeeeceeSerdde_feSeeccfcfeefcfecfwe=eftcdcfmeje/]ef\efeeXeNdeie/eeeafOenve=gcedeeeeyf5ofcfcfNeneeqcengsJeeufemeLee1ffeeefgmfIeegEegepc^feTfegmewhQegtgmzhKfgJevhXegWeNg_eeegeeefegmegegm[eleeeVeNfeyhKef7ede8eefgkevhQegeege egce8ZeYeBeAee,egck1ef;fck1GfDedk1d4k1eeck1Rekbe8dSk1ae8d)k1dRk1QekdOk1d9k1dhk1dk1Ked`k1ck1dk1dk1dk1Ff@edk1dk1f#fqdk1dk1Tf~fe;k1cfetf4dk1e;k1e=k1SfUf8e{fCf4zf>eef`e8efefPekufeIf<f=ef?fHfefeUfMf;f1ef1f?e:f14f0fefek1eSk1k1k1-f3e!fH6ffe5f,f!'f/fef$f)#f)fdfdeff.f7efd+f!&f%ffeef f0f fHe*f")f"ffeff"fefekfftfef.f9feefffffDfUffffSf0fff?fB2eefflffxffg fzffEfffff)ffff fff(f"fff\f[fff]g,fkfBfkfff ffffEfyg fff_fgffffeffffkf6fyfkfJg fFg fNffgfxf`f^fgf1fkffggfkfg)fkffZfIfff-ff6f\gfffIfNfTJeff%gf)ffDffghBf&ffeffff6fDff fKg ffef ffgfPg2hff6f ff&ffifffggffgffTgqegf6Ief<ffff;ffPfmfffff1gfffYffhBfffffggcfk2e8k2cyk2feWk2ffk2k2ek2ffe`k2efPck2pefk2g fXgegek2eek2dk2ek2ek2e]k2fk2fk2ek2fhfogfek2ek2ek2ek2f3k2fk2foffk2ffk2fjk2k2fk2fk2k2g_gPggCefBefCffNffg]gngfgfgflffpfflfWgffgk2ggk2gggfggg^ggg9fhHgOg&f~hHfghgfgfhgf)ghhcghg?fbg>fg:gKfg aggRg6g*g*hgg5ghhgg<g@g?gDg@gZhjggng=Ng&g"gAggFg=gGeqhVg4g=gzggh}hHgoh7gGgChgrg/gk36gggShgQghgQuhUgrfggrje8f<g|7f=fguegufhV3g{mhVgrgr5g8gue}k3ggk3;g|4g8g9k3exguehVgAk3k3k32g{k3ieg_hg/fhegXhbfhfhk3g0hge:f/g~1h(gCthU+hd'g&g%g.g~"ggBggO-hb*hd)hdk3k3gLhdgk3h'$hdshUgLrhUghigg,hbgtgC hiUg[g`ggBh'g hlgL hlgL hlghhggggZghgYgTggggSgh5fgg]g\g!gfgVgRgggQgggghggggggggMgggghh5gVfhZgh#LghfgHggggYGghehZdhZgghhh5gh5gg*h5MgghZghghZggEhZDhZhFgh8hwehZAhZggghhhhggggh h@hZhhggVg(hhfhZhghg)h g8hhhhghhh4hghhkgkhZhMgghZgh]ghSgMh4hshShhhhhh>hghhhhgvhkhh hhMhhnhhhphshhjgjghghkhghkghSh`jhkgh!k7hhhBh0hMfk4hkhkhShk hkg!k4|k4{k4ek4k6hk6h>h`xk4ek4ghk6jg[k4g4k4k7ek4j"gk40k4jhzhhcifh:k6hj"g`k4hh@gbk4k6#k4h`h^j"g{k4g3k4hk4gk4k6 k4hh/bifk7hk7hhjgjsi0h/miYh/liYh`UipjYiQgk4hjhghih-h~h?ghhyiygk4jkiZfhhgiZXiQhri0hh-jjgk6hnk6hk6k6hhhbhjjeiZh/h/TipyhhRhhiojhhNi}k5gk5MhcEiiJhBit?ihhk5k5Qhk5wi.vi.>hPh?ui.DiiOio3h2hk5jk5gi}fk5ha4im~haKiRhik5hik5k5gk5gjfk5=h+i6g0k5Lhcgk5gk5}ha<i|hahh{ha/h.hhhti.hfiRIh;i$hAithhh'iIHiRhim:igk5gk5h k5i.i5GiRFiR#hhik5k5hk5h k5hjDhi*i6jiKi-hjij+i@iihhi"hii3j!hhii iGij<hhijiiiij<hjxj#hhi hii jMijMj&iIj,hi#i iijji7i kGiiBi3ijziyi~jhiiii&i\inih hhj#hhxj#i]ihhiihihiziiqj#iipj#iWi9iaihi^ii;iOiDi)iziii(izi7i7hi5j)hiz[in hZinoj#imiii`ihh]inhj&WinVin_ihnj#h^ihhYj$hjj$i]ihi@i1i>ii1hdj$ hi@h?j$i1i<j$hj&Sj$i?i?hj)i*ihhpj$h~ihhiCj&hj&1j)@j&i>0j)hsj)ij)i?ihj$i;ij1j1hj&hj&iN9j&i]ii;j8j&iiihi hiiiiWi%j)iiihj*iiiEiiiihij*iNiiiij1i;iiijijjiihj*i j*j*ij*j*j*j2ii(hj*iihj* j*hj*iiij2jj4ikj*j:jj:j*hirii8j*iej*iiiijWi jQj2ij2j2jicj4ijWizj*ij2i;j*ij*xijIj[jj{jij8oji`jQjjmjk`G`hljihijQinjjXjQicj8jj4`hj4ijhij?jii%`Nij9jiijOij8j4jOjUiuj=Hjiuj9ijXijXikJBiGj@kJij9ii k8hvk8jOij9h1k8jj=jsjkhk8igk8k8igj=fj=k8dj5wicj5h6k8i k8iEk8UjiQk87k86k8iHk8ik8hk@2jk$`NejBk8k8ik8ik8Djik8jjBbj5vkHik8ik8ik8k8ik@ikHk@Zi4`[Qjj.kH^kHhk@PjjTkK`jBk@Aik@;kKTjik@k@ik8k8ik8Sjk8?jF_jBYiik8ik8k8k8>jFNjXi,jaj5Cj k8`Hk}`g7`HRjk`jjm`oj+kkjek3`[1jkk0k`Qjk=jF<jF`Q`lJjjij`g/k`JkijkOjjTkik(kMjjkjLjkkjj_k`Q`$kjjikjl `lk9j)jjjk9jkFj6`HkkBjEj`,kk}lem4k9jmkkk9WjkkB`ojhk9jkVjikBjjkkk9k9hk9kk9}kBktj|kBsj]kI{kBjj%jhkBijrj\kIjkjl jAjj\jkikIl kqjkjjkIk9pjjljjykIj3kIjlNk9hk9jk9`>jkkkl8ljkjijl kKjl?kikl jlkjl jk kk;jjVklYlYkjijkjjjijhj`qjjkUkd\0jl`r\2`Tk_jljklNkllkk\!`\4__`aXaKjjaZjababbk:k^blbzkelibbrk\chkakl?cefgThAhhLh*jjljjk?khlk7kbj#lijkgkl|lxk=hjjijlkRkzl<l<l<~l|gkMwk=ltkskkukykepkxk]kx|lk,kokZjkZl{llk.kk.ukhjkhk(lvk=ikCklkk?kKlnk$qk\dlmk$`klicllkkHlGlk{kkkYkjQkk9lZkveljbk`Dkjk?hkC k k>lkelkjkkSkW kkkkjokkRkW`Qkjgklkl}}~|l}8}4~_~~klkk~\]llm~j}~}ll+~}O~}~j}}}{l$~>zl$~a(~:~}|~|~y}}~y~o~\lj}n~kNlkOljjl9m klfkl8m7mllmlj~_jlk6mjjNlmmklkjjkm mmmjkkllmAlmmlCml mk(ljlFlm$jlxmm KllflJlml5mlm ln lnjkk=l}lm? lnElmDllm0kCllmm m7l lmlm lnlKmlEmkllm&mm3km?lm$mAnm3kllmQktmkmkmm-klmPm m?,klm?myllm?lkYl4lw3lwn:lnll2lwklwm3lkmQlnlm+kn*klmOmNll/lw)k(k'kl.lwlmcl &kl ll}j}klwmNmNll#lwk}j}m:m}m;m`m3lm<m<n m9mr}}k}kmOmOn}mmmcmn3mmm`mm%kk}k&}l5}lk3}n k<}k}k}l>}mlmmImcI}m;mkt}m`lk}mnl-}lU}mk}umzllmlZlm;mbma}lm;l;mmhMln ll=mh:n1m9nmmYmvlllm\mwm5sldmcmlmrlm-n mm{bmlpn Vmmn UmllTmKm8lqlplLlolXm8mm lllOm-m6mmn Amilhlml`mel_mmnGmU^mmLlal5m]mm`n%m#mJm8@mmm7mmm&mwn.!m\m m4nmmw0mQn FmUmlmwl3nWln.[mn8Zmln$EmU?m2nSmmmlnmLn ln mPm8m8n mmmn: n:lmunmm.mmmn,mln;mm l lnn=Cn Bn mn mnmmmlmDmU+m}$m"mnnm*mmn)mn8(mmmmn0'mlmmmn=mn=n0}}mUnmYnln;n;l}}k}mn$nn[m}l}l}mP}n0m}n7nm}mm<}mD} mm}mmmnim}ml/}m}nms}nmmnnmn0n*nKn}}mn%nfnKnSm}mm} mn0l}nnSnmm}nim}m}nFnm}nnnoWnnn?nn"o nnCnoynn8n}n%nnnnn}}}mn nn-nmnfnnnUnsnnjnGmnnXn^n]n n<nnknnnnn^nnn<nmnnZnannnXnSnnqnpnnyn&nanonnonqnnrnnnnnnnPnnn~n~nngnnnqnnnanynnqnunnznnnnnnqnn6nq}nannqnmnnnm}nKn{nnnnnnUn}onnnnm}nB}nnZnnn4}nnnnno }nq}nn}nn"}no}o }nnroRn&}gnAnno o=o$n#}nnT}nO}<o$n4}ynnnLnn[n^onpnln|ofnAn}n}noin>ne}nt}nz}n}n}nohn>nnnVnknnnGnn[nnnnnnnnNnDnnOogjndobcobBoXon}nnqnMnDnno>ofoo%nAoqoRGo2o:nEEopoUoo ocooe_odooU7nnognnn]n\noc[n~nWonoUnodmoUnoUno/onnZodooQUo,9nETo,bobozovaobnofnoVoDo4n1n3n,oaoo+oaPoeoox}w}*oj)oj$o`oboooQoopXooSo,oyp6ooopXooopov}FoCou}0nt}Yod@oo.os}?oo|pnon}6n"on}o`pn }ooo#oo!pe}oRo,-oVooVn}opo}n}non}o;oooV(oVoo{poooopL}pK}'oVopoJ}n#oooomoo ooq&oVoo8oPp8onopopo+poYp ooop%oVo=omoookooLo"o>om ooPppoo=o"op o/oo6oPo=oVo^o"ooPoo/oXooqpTo:oo}ooPooooXopZo; o/o?pNpioo:o?npbpZo/pTo7o/o}ootpZooo/ppnpZpbooo^pNopNoBpoXp!pppnpimpI}lpoppUop2ppqoppsopZp pZpNo/puH}oAoAosoXo}oXop oXppjp+o}ooBpgn}puooD}o;5}opNn}opipNo}oo)pupopun}pMoO}o.}pgo@}pgoAp p$poApop|pHopo pjpjop|oo}oZ}oj}pHp~p}pp?pMop pgop$p|pooApp|oAp?oApgp|p<op}psqYop+ooLorpWp}n}ooKooooppopp}}{pq2p6qlpp2opqpqpPq7`poppp)pRppqppPpp{pUopq@qppppptqp\p>qpQphqcp4qnMpkpppqFqDp:oCpqqp[p.qpEq0pKp^p-qp?qoq p,qpOpGpq\ppqpBp9oqpNppyqGoqn=qqppqpq<q qp[qZqoqoq}p!} q qo}p7qn/qnqppp4}o}qqpq q\qpppqGpqpqq.App(}}pqqqqqq~}}}pp'}q%qv}p qu}qq t}pqpqqp-}qpW}p}qpi}qprqqppqr+J}r)py}qq3q3qp}p}p};}o}rqqpqjpqqrrrpr5pq'q}qppqDrr5qXpqqXqppKpprppr)ppqqq qprqqqrq&q}q+r%q}pprq$q}qppq^r:r+q^#q}qq~qr8}q~q"q}qqr3q~rprrqPr3qNqq~rr;q^qqoq!q}q^pr3 q}pM}5}p}qr p{}q+}RrR{qqN*}})}r3r(}QrRq'}q-qp}p}xq}lqqr!qSq+rqer;q]qqzqqrpv}r=}q^qqp}p}pw}p}}aqVwqq }kqp}qqq}qqpq^q`qVr=}q=r=bqSqr&qqp}nqp}pg}sp}Pqq)s}r=sr.qsrArqrk0qr?qqsqqmqq}pX}q(sr?qqr"qrSr~qr.rqOqqrEr.pr.r._qqqqrWXrqqUqoWrqr.r.NrW]qqrG4rqrYsqr.qtrD>qqqqqqgqyrDqrDqr.pqpr.r.qq@rjq\qvrDVriqq1rEq4rE?rr.[rGZrGTqo1q/qr7Sqo;rq'r7r7pr7qr7YrP<rYr8q)r8Fra:rqrYqrPr7qGrP3rErar7r7r7r7}p}urDtrDq}8}q;r7qbr7s r7r7pr8pr89rs=qrrhq qr8rcrgqqqr7-rIp}7}q }rs5rs#q}}rIr}r8qE}r8p}fqq}r}eqq }q<}MrXq}6}qs .s,rI|}LrXq}q}5}q}dqr(sIrnHrn+rZr0s rq}!sqU}qs# qr~q}r<}q}rLsrrr~r,rGrnrNr^qrncqDrnrerrd*rZKrX rJrXqqvqqCrnrJrXrssrGsr'r`rrrqrprrr^rrvsdrrwrprjrrusrr{'s r)rdrrvslrysEsErzrsesrBrns&s Arnqrns7r$ sr-rr0sr$r s"rOs"r,rrryrr]s%sesqis"ss7r-rrd%s s$s #s svr-rrr-rsrsrvsvqr,rsslrzsss%qs%rrsrorrossss(srsHsqs"sss r rqsrDss(rbr ssr ssDsrr,srrusr7r,rssruss3rr*r s r rss r|qsr s s sssrqr rq}rs2}rssr rrsq[}s/si{srr)spsr|sXss<swrsr&}srrsq}ru}rr r rscs:s r "}rQ}r}rszsrrq}xrrsqz}rYsrsr}nsfsVrtss&sr}sr~}r }lsrq}oss-srsisssssYsTs'}}sSsmsfysrsrsr}}rv}t"tns.ths t!s9fsttt{t/sPt{tt`tFut2tDrRrrSs'rs5utqtqtttsIus8ttqt~tWs0s:tdsws[srsPssrjsrsss,sqsrrrrxrmrssrrxrscsvsrrrs~russZs}rrsrrrrssassgs Osesrx`tNsss,ssJs`HsrrxssTrx|rrxs)sss_t<tsUss4sBssVs0sst }sWt 2t ro}sdsssIs`Gsr}DsxrsssyRsrx-sstr}ssQs4syr}r:}tt=Fst3sy.t ssss'}sZsr}ss"s+sCsxr}!s;tr},s%t}Mssq}tr}r}:sr}t\tLs1s*s ststr}0ss?ttsWtYts }k}s]}b}9sKss sEss>tstt$tUtttrt8ststt?tsHt/sAttTtTst#7ss't&tt#tss)sss=t@tttstt3t3tstttstt6ssOt5sshttPtPstttt tstttt tsBttstQst(tttVs;s8st3tt[t^tst|u tttttts@s@usDttsusu~tt{t*tttsts8ssst^tsu tt tttssDs;ttVssttt tsCsstt ts@tsBtt%ttQtett&ttstustsutttt[ssCsa}stut>t]sJtt[tpsDtttu~tuts#tt)t)sRsRt_trs`}sss}ttt^}thuttMtttt}]}s}t)s}s u|ts}t)s}tD}us1}tstus}vuXs}sNs}s}t9t}duFrtstqt^uq}tuZu}gu]}ttutus}t}tX}tY}t$}usNsNt9tu[YttuZot\t[tsuttwtkucuFttfu]sttNu~uuuXttLut)u=uXtt}UtVutu2u]uqttt}ttnts}juKutmthu[buFtustu2pts }ttiuu0u{u}3ttMu5uLZusTtCuuueu6u9_u"u!uvu_uu uuruu3u%ujujuvuuu:ttuuitutuu@}}u&ui}+uEujv t7}u&t}Ruu_tututuQu}Pu}s}uiuty}}t}*uEv uMugvui)uEvuu(uEu&}u&u?}u'uEO}ut}uu}t}u}u_J}ut}unu;}t}ut}umum}uumuvuvuMvt}%}uu$}&uEvu[}u9}u2}uIvvuuuvuvvuvvvv}uunuuuvvvvfvLvvuuvuvuuvLvu6u*u6u}uu}u}uvuvuulv}uuvt}vuvu}uvvvu}t}v+vlu<}vvuvLuvAuvvfvvvuvu6u6}uud}vw=uv uuv v_uvvvuvuvLvuvuvvNvvvuvvvv~w4vvuw_ v )w@v vvvvvVw^wwbEvPv(w@KvvxAuvvvYvv_v6uv4v5v3vvqv2vvnvvGvKv2}vS|vSmvvvAevruvv\vSuhvRlvvXvvdv9Zv_vvvruvv`vOvjvvvDvv;vbvxvvSv&v3vF\v0vv2{vBvqzvBvvFv2vvivvavfvuvgvR^vDvYv8vuv~vv vkv[v0vvFv@vyvBqvxvBpvavxvTv%vJvd3wXvv1vvFHvvw8wvFWvvNv5wwvBAvcv9uv7tv7w#wwOvCvuv]vvIvd'wDvVvGvvyvv&ovCwL@vwwd2wuvsv7v?vvrv7Bv wS$vv4wvwS7vvtv7vv}uc}}wv}uwOu}&wDu9}vuvv%MwG>v=v<v0v;vw&v%vwLu}u}}u}u}u}wHwFvkwLwFw#nv7vv7u}}u}v%v}uwGwpw"wQu}us}u}:vu}wpvCwG}wHv}}FwGv(}v$}x8v&}9v wav$v,v(wGxKwIwawBwavH}v$v;}uwQuwQ6wNwvq}v}vc}wwKxJwxIxIwxJxKxJw~wew wwvwNv{wNv'wx<wvww wwwwvxOwxOwwwwwlyvx8wv,wU}xhvwK.vxw#v"vT}vvv-vS}vvv$vwgv$wwwwww,vv'R}vwN/wN+v*vvwQ}vwu}wxkN}vv!vvvvvwcvwv}vv vvvxhv}vv}vk}wv} vvsvwwgvwx'ww}xh }wuvuvx,v}u}wE}vzxkvxkx'w*wcx=qxxTaxwcpxx&`xvvwXyx[y"Eyx=x0w.wcxTvwx3w]w@ywTwx,BwUyOyxxxAw_x?yw$vx0xvDyxwnxxXwWyQydx\w[w^xNySwvy"wYy"My;x.w|xcxx+w xjx&wx4wwwx+xxmxwwvyw xjwwxwwwwwxvwxwwxjwx}x4PyxRwwxjxvxmvxmw~wwgwwx+wxwwwww>wx+bxwqwhxww>wvwvlxvx}wx.wvtwx+w\x+vaxjxjw>wjx 2x2wxww>ww>xvwHyfwux~Kyw>}wswGyw>wx~w>:w|w6yv$xbxqxkx>yrwexw8w4y3y)xn9wxuxrix xr{w1x2/x1xt0xGwxVxnx~wwwzwmx~xQx#xb"xbwwwwx~!xbxow=ywx~wx.x1x{Fywnww5w<ywwwwwLwwwyJywBwwxGwy-xGwww}wv}5yxBw{IyvwwCw8yw7yu}x:x(xnxxuxy!xv}v}v}x:,y!xZv}y6xtwxwVwwx:x:w}xNw{%wsw}x+y!xxwws}yPy*y!x{yw}xw}w}yw{}xy! wsywwwxZx wsxwsy}xxxx}x$y6yw}w}w}xxaxwsxyxyyxyyyxhyyyx'y!&y!xxHyyxyxxwyyyyxyyxyjyyxyyxxy y5y/xxxxxyxyy yx xy/wxy-xyyyy5yx x xxxyy/y5xx"xxy-xxyy-xxxwy5y-xy5xxy ymyRxy5xxxSwxxxx|x xyyxy$yy% xxxyUz%xxxyyYxxwxx|y%xx~ykx^y4xxwxww}wk}y4Z}y}ykzynwWy$wby$yxxywlxyxxxy4Y}yxwa}V}y4xly4y:yy{xw}w}w}yy4xysxyL}w}yyxxykw}wt}C}v}wX}xw}xxw}xjynx}qyhxF}wQ}xx}xxhyxpyhnyumyuyyayx}xxx}yBz8yrxx}x}xI}xydyQyyxxPydcyOyd@z0lyuXz!9yXby?y\oyhy*{;5{'y(yy]yJy*yHybyL.{9yXzexdxdxyxyPyJx:{&yyTy*{&xz!8yXAz8y$z07yKIx4{'yJy6yK+yMyy`yyNyyzy y,yyxxkyzfxxxy>y\!yOgyxd]yy)y,ZyxdHxxz!yly,{?MyLywxyy'{&yz*yMyy&y,jyzGxyyyzy{Ovxyc\yy2{?uxyxRyytyex-{9[yyx}yzcyyyYyWxVxyycyy yOzyvyyyyWyWyiyzx<}yyyxg}xhyy{Cx}z y}xyyzxyyyxy}yz yxO}yyxo}yz yf}}x}Uxy{Cy7zz{zcz{}}x}zxm}TxSxxh} {Cy}x}x,}xn}z {Fyoyy{F yzbzByn}y }{Fyz y>{Fyzp{FyyRxzy }yt{Ya}zRzC`}zy_}^}yt}y{FFz'zyzz z y{zyziEz'z yyyzyy{Hy{H{zyzzyzy{Y{0zyzyzyzzizzz{Zyy{HyDz'{0y0}Cz'K}z{0x}yy}z yz$yz$zszz{y9}zz=}<}z{n{ z{lz9zPy0z'mz7lz7i|hz?gz?z{z<|zzZ{y{Zy{Zzkz$zzzEU{"z5{p{zzH={){z{":{(zzz { ({z{z{Mz{.z9{(zsfz?{z{_z{J<{#z"z({>{{Jy{L{yKz{'{>{JzyzzDyzkzzzky{{zz-yo{zzzzy{Jy{Lz{Jz{Jz{zy{Lzz|zz{\zyX{&{>z%{>zz${>z6z^{>z.ziz.yg{>z{Lzz;zzR{g^ztzE{*{WzPzdz>z{\z{\zz{z{SzSy{>{g{5{z.z1zMz1zzz1{n~zzz.yzWzF{Wz.]z@xzz&{PwzQ{#zzD{*y{Wzz{nzy{Wzszz{W\z@cz>TzM[zy{Wzzz6}z{| q{zzSzMaz4zz@zR{{C{z{n|z{Wz{VzFe| z;{P{#{zzzZz#{Uz]zG{-0zO%{Pzz1z1 zTzYz`z4Az zTzzKzJzz[z42{z{zzvzI{uzz@zzB{4zz/z?zzI{zz| -{zz{1{b| RzM{izz| zAzz]| zF{->{/zOzfz"{U{zyzk{j{JzJH{{;{z3| z| O| ;}yV}y/}zN{{=z{-{3}z{2}|z zz{{z1}0},{{[{=/}yN},}y})}{{z`}yY}|||y}3z }y}}y}{zH}|zb}z&{8{yg}z|+{{v{z$|z|{z}!|y}y}{7zZ}{{{b||{{_{{}}z}|{{{{Z|z/}{m|yz}|x|x{m|||j{`{|N|z| {|||{u{K||j}_|{{j{|{u}b|{E}b{j}_{{k{_|7|{m||}j{|"6||{z|$M|{]|{{7{{RL|{{{|${zz| {|z|z/|z|z{z|{z|{{{{{|}{|%|{{|'{{{{j{{{|zD|{!||z|{{z|z||"{ |{2{2{2~{{zz{2*||<|o|'{{}j|8|+{z|'|{0|%{}|%}r{{|2|2{| |x|{2z{{zz{ {2|+ {2{ {2{ |||W|r}{z/{2{+||||8z}{|{zK|{|{{|{|q|b}l{|8|+||w}wz}|8{A{2{{2z}{2z{}rz|{h|||{w}{}{#}j{{}|+{}|+s|u|7{/|}n{g}}nr|u{y}}p{}|{}{}|7{}y{|y|}|{|7|7}l|u|}p||}n{{{|}lv}w||}{}}}}q{||[|| }}|,|||?|}||C|A|Ai{u}xh{}p}|M}~|L~~ ~|}|A};l2|*~b~|5|U| |W||X|C|Y~ |)|Zp{|A|\}L}a~{}}G|^}M||L}L}L}L{4}Lt}xc{e||b{{}{^}.g{||Y||}:{}x}L]}.{>}L{5}L}u}d|m}}LZ|{T}L}Ld||{P}L}d}Lo}{}L}L|>}{I}LV|{||}LJ|)Q|.}d{x}L{v}L}df{N|||P|.|y}<{F}u|o|tI|)||O|.L||}{}LX||s}S|H||||}|}WR|G|<|D|r8}=}2||]||i}>F|C|r/}7}=K|||:|U||y||||}u}d{}u{}d||}dE}|E}>}B|r| }{}|}'|.}-|T|A|r@|r,|)} 9|W}(} }1||}3}3|=}|(}}^$}Q} }|B|}}}}|D~R|}>+|l}?|r|R~m~gn}}m}}#}Q;|} }}^l}}k}}~|l1|} &||=~~h~v|}}}}v~{f}}}|0}}|}}"}Q*||R||s}]|}k~g}x~a}}~h~} }}S||=w~A} }`}}!}Q}^t~_}}C}}~v }r}] }~R|B|R~hv~~qd }V|D~g|U}}Z~Wl\}}}|}Vl~m}}=}5~ll|[}M|T|b}|~}|}}V~r~k}V}v%}~s6}K|c}d~5}}|_}4}_~XTl%4~|}}~3}}}+}|q}}V0}~k~k}}~|}{W}}B}{V}}|{}3~~k~J|c^~X{}}V|}}{}Y~W|}~k{}}c~|z}}~|}|H}F~E~|B}l|}2~|}||}k~k|x}L|T9~}~s~r~r~sl ~k}2}|}Sl%}~~D\}=}|}|}|}|}lm~m}nno0op5o8}l!ll!kl!pqKqvrrrstltt`uvuuvwx6l!x~iyy.~ {%{D~}K}}|}~<~~x|~&~|@})~}~~x}7}}~[~l~i(~ ,};~}}~~i:~|}@~}2~l~x~~|}l!}l!}|l!~|0}~i-~ ~. ~I%~}|}}~[?~}A}~x}|}~|} ,'~~il~~Il~il~i/~}!}|,}~~}~}|.}|}V}5~I~`c;~~)g~5,~h~ :~}~~!%o~~!Icl~$h~~5lh~$xong);~h$ea$V~Mdah`~k~M~~~M~}}{l/~}~-Y-~:{)xP~|||O~~M~M~}/~}~~{}+k~X~~nl{1~o~Y~MN~~|{|~}{l |}A{~|{~^+l/{}*}@|}>||}*|{~}|l~~M~M~[~~M}l.|6~~m~W~ +~V~{{U~l.I~l~}{~A{}L{0)$H~G~k~j~l|l|}|i~*l$~R~ ~n~l.Q~*h~g;}~+~l)~~|~u~f;)}*g~* ~~}~f~~~~|e~*q~p~ul~O~~}I~|V~l~O~~~=~=~V~$~L~~}y~~=}~}Oz}y}>~*}>~~wb}~~FcTg=~}~}m~~?=$6~}7~}e~g#}>}=~"!t| O|e}}M{}==}}i~ebb|}ee~a&>~erQl-~~~Z}~'bTgqQ`4e2&d~~%~~-I}%pQ/Hs~m}\'l}~_4~~['^4~%1;h0;Y}d]4O>7~}) .H~|!? ?N~cI}WQK75~x,Iw~HXo~n~D)~;Q8:Q48~EW+MJP~XWd=7PJ38*Mpv~K~^W~K65t~cC)B)dt28YA)~55~~E~P@)~[~Lo)M~(M~ois=EdZ}{ZG{VUT}L~h~~ty&{'Ns~kS &NjR GZ~ ~t$FFE%N$Nc<)<:K#N?"NDMji8}`w ~t ~tUvNN<Di#<E@s9vw~E|x{jtz Ejj~m o5jOsExn~lTZ?}tg~bBaB`UYDO(twv]'~vv)>ywuvMLE utf7N9-?ml8e+6xtV_sTkX&\[!S1=(*$ f#:ARqvs!!F! LG!,dqOL0/Q8^.!Db8]Fh=P!\ _!#[ _CCNB f.NAm FkLm#j(`_ _jdMC5k@Y!UfKk&oMNobMbJ |nC_ {|~UI%BUH)r|UG){{d}145l<5}u)^qph^)FfK):lKY5^4~}{l3W2 ))% YY"uD^Wo WN.{x8.ZPqr<YU0priT3]n hTS\ ]E3X;w8~T0Q3f D3F}WRm zNC(lHAv:+kMzP6uO6Oy9$E9jeLzI;'FC+[B:d4tMKzXGA\P5ds9+CGYSJC6`J@HZ_cIJB7FH2h0oorop0MA:4gIskyni?HRN6JHH/.z;W+*a(#>H1hU`M}bx",M R<H3JHu{=H3ggy8HR-zR 5wc/J 5b)P'quwaqvzv`w XP&PTuT%Py$PTy|_* zT zmTT^qP!PrPP8YssGYY//ijnqiT0n0}qq~#sB!m3 f6GuEPVjtEYxp~# Y}j 8xu+!$m7xMv\Rnh0F/x pqxM0pr,MM~Rl:RRvkR~,amvp<@7~F~QM~Mv~a~~~~z w[iZNE}zwNJ~04lQQwE"|z4G~1E/C~O]Uh\Q~-/AEP~-YDF~1~*@I~0+;@B~OgT8 (? (MEAAw1Sf>K)>7>'s#N,\ [ oV6xZ6(Zpg\\*#kjiw~o}XTFT("~Kcgbg&[6K"Nag5K4~kKU!K3;7`2~  KK~OK'`g$}0K 6~L[_gU/~ K~7~ K'~K~*~[ yxl^.w{-@,H!v$oQ;jXWVD`i>~zRd~& p*@8=D9g%"g DiG p:<Dmproqw8d8& msspbx 4qurqT{swB|iqw]Es__^o_al{k_rW_N]oG3w_ `tHxQj~{PMO39?2&ViF#>2EKxK7LOC UFl" D68@V3)}nT`BSZ2bZ} WR OR*L.Hii-HW(}1W`Iy5J7}=7nIcm0 JAI,H J J+H/ J%<;5hgfwR6I5eIdzycwv4*u1(u'}&v'bOu%v~%$c=ZX! ~,"YBX |1q|%qJ8c||fX@E1|Q]:SSboBMn]!Qfd;ME|||w|@v5|!Mzra{ v!qamxUddyMcdvwtic{z{ah`hed 3A]{[\UTo^b?^_F*M~{us}{|{]EShcRQ gc! Bc*ZK@3Yl^XWD:J&k^>65VPON4I 8+?3-,I=<#%.E; 9 /8 (?!'?+I/ H74jGE3z.CB A* ./9 )"8&%U:z- n2n$!  !pCp F_*Z[p0&j&bl.1  _ [^z7Ha(fMn{tR-xGML.u|uu::1=6 C| 1- LLLp===->-LL=Kh=520== =u==blkX=P~Dllnu]mu\sji@a`lu}rkPPkA[h/ ugH2}5]O]tPPP+X.]V3ZiUYk|*~|@Af\TugggxW~RZ9|3~wqe_^DK=%JR&dv33LXpHokM7 ;c01 O3]'C#+<%,9WQe"+GR8/FE|L:PI6 w Q ONrLB LS43U&U!+-,{p'+pxe5 2me'z Qy&n.QrrEun&0_dt*_lEW/\,DW^8% +=m13?t|)^p(eNyd drZ_Axl%@?<<vd_}{z>`h$-+v-2|:%Y|zn}}-Wo=zXJvtw[Hm} |+ &kV!BXut}Gc Zy_:,)`Z{;s:7r:>8bE^a(UtEM9*(PTt pY_w] l<lIglK6]q::lk$l'U?T?5ll@+CulS?l=lflll^R?Q?^hP??+geBul|l{l>+zldAuylW>H=O?!4uL[K1JQ##wee;NM>`q^ICQ;v;s.`cq^}Cr.|T=qpbo8  Pg=:L2eqD<>}"#&+2449J:4;;@BGGJGOQDO[_${kk^ ;k-#e_``.]_LK}zR1 "|8l *$#d_$j-R.QNu"Tmq *"(Sm "p(M h#"$q  #E#\#pppp)nu"""^G p "P[((D(*.ZH$$(CJ.B'qgml))')Jp)p"FiF'f''N5P 4?LP"'>LI02N)1N)%%!F1P.&(:-&*-=L)-0D'Y-4',&': %j&:X-fV%e%%J%e 1W-%V-l<;U-l!--en:e^nf0:%%0 1e 1e9%` 1 187eO--666^bhht~Q{,3zdy,G,lv`,/x/^',,3,3u,tqd,,-,E,a,W3353bBB3383s,,mtsl,rBdH/ss/ssss33B8833B8E/D/ss/U/U+Ussssssss&U/A/BssssBss@/2U%U9$U#U89U UUQss@/ss4/ss!U5Uss0/%/9ssssssssssQss9ss99x9qUssU9UssssvwssssussssQQssssssss~o55}ss~ss||s~su99pn< Members Chanop Silpa-Anan Pattara Kiatisevi Poonlap Veerathanabutr Vuthichai Ampornaramveth COPYING000064400000063637152530412260005616 0ustar00 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! README000064400000002112152530412260005420 0ustar00General Information =================== LibThai is a set of Thai language support routines aimed to ease developers' tasks to incorporate Thai language support in their applications. It includes important Thai-specific functions e.g. word breaking, input and output methods as well as basic character and string supports. LibThai is an Open Source and collaborative effort initiated by Thai Linux Working Group and opened for all contributors. LibThai includes Thai language support routines: - Thai character set support: TIS 620, ISO/IEC 10646 - Thai character properties - Thai string manipulators - Thai string collation - Thai word breaking - Thai cell clustering - Thai input method - Thai output method More information about LibThai can be found at its official web site: http://linux.thai.net/projects/libthai/ or via e-mail thai-linux-foss-devel@googlegroups.com Installation ============ See the file 'INSTALL'. License ======= LibThai is copyrighted by its authors and licensed under terms of the GNU Lesser Public License (LGPL) - see file COPYING for details. ChangeLog000064400000362650152530412260006332 0ustar002017-10-25 Theppitak Karoonboonyanan * NEWS: === Version 0.1.27 === 2017-10-25 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-geo.txt: * data/tdict-history.txt: * data/tdict-ict.txt: * data/tdict-lang-ethnic.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: - Add words. * data/tdict-proper.txt: - Correct order for some entries. 2017-08-07 Theppitak Karoonboonyanan Strip prefix for C source files in doc * doc/Doxyfile.in: - Append "@top_srcdir@/src" and "@top_srcdir@/tests" to STRIP_FROM_PATH, so that references to source directories in the generated document do not capture full build path. Defect caught by Debian Reproducible 2017-06-29 Theppitak Karoonboonyanan Remove duplicated dict entry. * data/tdict-common.txt: - Remove 'ดัมพ์' which is already in tdict-std. * data/tdict-common.txt: * data/tdict-spell.txt: - Move 'ดั๊มพ์' from tdict-common to tdict-spell. 2017-06-29 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-geo.txt: * data/tdict-ict.txt: * data/tdict-lang-ethnic.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: - Add words. 2016-12-14 Theppitak Karoonboonyanan * NEWS: === Version 0.1.26 === 2016-12-14 Theppitak Karoonboonyanan Include git-version-gen in tarball * Makefile.am: - Add build-aux/git-version-gen to EXTRA_DIST. 2016-12-14 Theppitak Karoonboonyanan Move word. * data/tdict-common.txt, data/tdict-ict.txt: - Move 'แอดมิน' from tdict-common to tdict-ict. 2016-12-14 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-geo.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: - Add words. 2016-07-09 Theppitak Karoonboonyanan Move some uncommon compound names out of tdict-std dictionary. * data/tdict-std.txt, data/tdict-std-compound.txt: - Move 'กระดองหาย', 'กระดาดขาว', 'นางรำ', 'นางหงส์' to tdict-std-compound. 2016-07-08 Theppitak Karoonboonyanan Move compounds out of tdict-std dictionary. * data/tdict-std.txt: - Remove long compound 'ตะลึงพรึงเพริด'. - Keep only 'สะพรึง' instead of 'สะพรึงกลัว'. * data/tdict-std.txt, data/tdict-std-compound.txt: - Move compounds 'ตะลุ่มนก', 'ตากวาง', 'ตานนกกด' to tdict-std-compound. 2016-07-08 Theppitak Karoonboonyanan Match git tag with version pattern. * build-aux/git-version-gen: - Apply --match pattern to git-describe to prevent confusion with other tags. - Drop unused LF var. 2016-07-07 Theppitak Karoonboonyanan Use versioning based on Git snapshot. * Makefile.am: - Add dist-hook to generate VERSION file on tarball generation. * +build-aux/git-version-gen: - Add script to generate version based on 'git describe' if in git tree, or using VERSION file if in release tarball. * configure.ac: - Call git-version-gen to get package version. 2016-06-28 Theppitak Karoonboonyanan * configure.ac, NEWS: === Version 0.1.25 === 2016-06-28 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: - Add words. 2016-06-27 Theppitak Karoonboonyanan Document about multi-thread use. * src/thbrk/thbrk.c (th_brk_new): - Add documentation about deleting after use, and about creating/destroying word breaker instance in critical sections. 2016-06-26 Theppitak Karoonboonyanan Use 'wc' prefix instead of suffix for wide-char word break APIs. To be consistent with other modules, wide-char APIs should be prefixed, not suffixed with 'wc'. * include/thai/thwbrk.h: * src/libthai.c: * src/libthai.def: * src/libthai.map: * src/thwbrk/thwbrk.c: * tests/test_thwbrk.c: - Rename th_brk_find_breaks_wc() -> th_brk_wc_find_breaks(). - Rename th_brk_insert_breaks_wc() -> th_brk_wc_insert_breaks(). 2016-06-25 Theppitak Karoonboonyanan Rename the new APIs to be more meaningful. The methods for ThBrk I proposed to Mark Brown in our discussion were too confusing. Before they get public, let's pick more meaningful names instead: - th_brk_brk() -> th_brk_find_breaks() - th_brk_brk_line() -> th_brk_insert_breaks() - th_brk_wbrk() -> th_brk_find_breaks_wc() - th_brk_wbrk_line() -> th_brk_insert_breaks_wc() * include/thai/thbrk.h: * include/thai/thwbrk.h: * src/libthai.c: * src/libthai.def: * src/libthai.map: * src/thbrk/thbrk.c: * src/thwbrk/thwbrk.c: * tests/test_thbrk.c: * tests/test_thwbrk.c: - Rename functions as listed above. - Rename the 'n' argument in the functions to indicate whose size it describes. 2016-06-24 Theppitak Karoonboonyanan Add function deprecation warnings. * include/thai/thailib.h: - Add TH_DEPRECATED and TH_DEPRECATED_FOR() macros, taken from GLib. * include/thai/thbrk.h (th_brk, th_brk_line): * include/thai/thwbrk.h (th_wbrk, th_wbrk_line): - Apply TH_DEPRECATED_FOR() to deprecated functions, with suggestions for alternatives. 2016-06-24 Theppitak Karoonboonyanan Update tests to test new APIs. * tests/test_thbrk.c (main), tests/test_thwbk.c (main): - Create, use, and free ThBrk instance with the new APIs instead of the deprecated ones. 2016-06-23 Theppitak Karoonboonyanan Update documentation for API deprecation. * src/thbrk/thbrk.c, src/thwbrk/thwbrk.c: - Add info for deprecated functions. - Add availability info for new functions. * src/thinp/thinp.c: - Add availability info for th_validate_leveled(). * src/libthai.c: - Add missing link to th_validate_leveled(). 2016-06-23 Theppitak Karoonboonyanan Update library versioning. * configure.ac: - Bump library versions to reflect the added API. 2016-06-22 Mark Brown Implement a new thread-safe interface for word break. To achieve more thread-safety without depending on mutex mechanisms, a new set of APIs is added so that the client can create a shared instance of word break engine by him/herself under appropriate mutex. Then, the word break functions can be safely called in parallel using the shared engine. * include/thai/thbrk.h: * include/thai/thwbrk.h: * src/libthai.c: * src/libthai.def: * src/libthai.map: - Add new exported APIs: th_brk_new(), th_brk_delete(), th_brk_brk(), th_brk_brk_line(), th_brk_wbrk(), th_brk_wbrk_line(). * src/thbrk/brk-common.h, src/thbrk/brk-common.c (-brk_on_unload, -brk_get_dict, +brk_load_default_dict): - Remove old shared dict management. It's to be as part of ThBrk implementation in ThBrk layer instead. - The logic for finding and loading dictionary at default paths is still retained here. * src/thbrk/thbrk.c (th_brk_new, th_brk_delete): - Implement ThBrk (de)allocation, with dictionary loading at specified path or at default paths if not specified. * src/thbrk/brk-maximal.h, src/thbrk/brk-maximal.c (struct _BrkEnv, brk_env_new): - Add ThBrk engine as a member of BrkEnv. * src/thbrk/brk-maximal.c (brk_root_pool): - Access dict trie from ThBrk in BrkEnv instead of getting shared dict directly. * src/thbrk/thbrk.c (th_brk -> th_brk_brk, th_brk_line -> th_brk_brk_line): * src/thwbrk/thwbrk.c (th_wbrk -> th_brk_wbrk, th_wbrk_line -> th_brk_wbrk_line): - Modify old functions to new ones by adding ThBrk* parameter. * src/thbrk/Makefile.am, +src/thbrk/thbrk-priv.h, src/thbrk/thbrk.c (brk_get_shared_brk, brk_free_shared_brk): - Add functions for managing the shared engine to preserve old behavior. * src/libthai.c (_libthai_on_unload): - Call brk_free_shared_brk() on unload. * src/thbrk/thbrk.c (th_brk, th_brk_line): * src/thwbrk/thwbrk.c (th_wbrk, th_wbrk_line): - Provide old APIs as wrappers to the new APIs, for backward compatibility. Merging pull request #1. 2016-05-02 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-common.txt: * data/tdict-spell.txt: Add words. 2016-03-28 Theppitak Karoonboonyanan Do not test word breaking if dict is disabled. * tests/Makefile.am: - Only add test-thbrk.sh and test-thwbrk.sh to TESTS when dictionary is enabled. 2016-03-03 Theppitak Karoonboonyanan Get rid of unused variable. * src/thrend/thrend.c (tis620_0_shape_table_): - Comment out unused variable reported by GCC 6. 2016-01-28 Theppitak Karoonboonyanan Make source more readable. * src/thbrk/brk-common.c (brk_get_dict): - Break assignment and comparison chain on reading LIBTHAI_DICTDIR environment. 2016-01-20 Theppitak Karoonboonyanan Fix compilation error with GCC 6 * include/thai/thctype.h (_th_bitmsk): - Use unsigned int instead of unsigned short for bitmask base, as GCC 6 takes ~0 as -1 for unsigned short, and causes compilation error for scim-thai. Thanks Martin Michlmayr for the report via Debian #811690 http://bugs.debian.org/811690 2016-01-20 Theppitak Karoonboonyanan * configure.ac: Post-release version suffix added. 2015-11-22 Theppitak Karoonboonyanan * configure.ac: - Bump library revision to reflect code changes. * configure.ac, NEWS: === Version 0.1.24 === 2015-11-22 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2015-11-22 Theppitak Karoonboonyanan Fix infinite loop introduced by recent optimization. * src/thbrk/brk-maximal.c (brk_recover_try): - Update 'pool' correctly when deleting matched BrkPool node. brk_pool_delete_node() cannot be started at pool_tail indeed. Thanks Zack Weinberg for the report via Debian #805703 http://bugs.debian.org/805703 2015-11-22 Theppitak Karoonboonyanan * configure.ac: Post-release version suffix added. 2015-10-22 Theppitak Karoonboonyanan * configure.ac: - Bump library revision to reflect code changes. * configure.ac, NEWS: === Version 0.1.23 === 2015-10-21 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-country.txt: * data/tdict-ict.txt: * data/tdict-lang-ethnic.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: Add words. 2015-10-16 Theppitak Karoonboonyanan Share BrkEnv longer. The code before the threadsafe commit used to initialize the free list earlier in th_brk() and then called brk_maximal_do() multiple times. This allowed the free list to be shared among all such calls. The threadsafe commit did it deep in brk_maximal_do_impl(), limiting the share within the single brk_maximal_do() call only. We should widen the use to be the same as previously done. * src/thbrk/brk-maximal.h (+brk_env_new, +brk_env_free): - Re-add initialization/quit functions in terms of BrkEnv. - Add BrkEnv* arg to brk_maximal_do(). * src/thbrk/brk-maximal.c (brk_env_init -> brk_env_new, brk_env_destroy -> brk_env_free): - Turn the init/destroy functions into new/free version. * src/thbrk/brk-maximal.c (brk_maximal_do, brk_maximal_do_impl): - Add the BrkEnv* arg and use it instead of the locally created one. * src/thbrk/thbrk.c (th_brk): - Create BrkEnv object at start and free it at end. - Add the env arg to brk_maximal_do() calls. This appears to save more 2.4% of the total runtime and makes it on par with the code before the threadsafe commit again. 2015-10-14 Theppitak Karoonboonyanan Call brk_pool_match() linearly. * src/thbrk/brk-maximal.c (brk_maximal_do_impl, brk_recover_try): - Start next brk_pool_match() on node next to previously matched one, instead of the pool head, making the match O(n) instead of O(n^2). - [brk_maximal_do_impl] Also prevent using the deleted node to start the next round. - [brk_recover_try] Also start brk_pool_delete_node() on the pool tail, making it also linear. This is not possible for brk_maximal_do_impl, as the node to be deleted is not fixed. This appears to save time by 8.85% on brk_pool_match() calls, lowering its bottleneck rank by 2 positions, and saves time by 0.0388% of total run time. 2015-10-14 Theppitak Karoonboonyanan Declare variable inside block. * src/thbrk/brk-maximal.c (brk_maximal_do_impl, brk_recover_try): - Move "BrkPool *match" declaration into the block it's used. 2015-10-12 Theppitak Karoonboonyanan Declare const arg for brk_pool_match(). * src/thbrk/brk-maximal.c (brk_pool_match): - Add const-ness to the read-only 'node' arg. 2015-10-11 Theppitak Karoonboonyanan Minor optimization on brk_pool_match(). Callgrind reports brk_pool_match() among top bottlenecks. So, try to optimize it as we can. * src/thbrk/brk-maximal.c (brk_pool_match): - Instead of sharing the loop for two different cases, check the case once and run loop for each case separately, to minimize branching down to a single time. - Evaluate the unchanged 'node->shot.brk_pos[node_cur_pos - 1]' expression only once, instead of on every round. This appears to save time by 9.3% for total brk_pool_match() calls, and by 0.067% of total run time. 2015-10-11 Theppitak Karoonboonyanan Fix 'make check' error on long path names. * tests/thsort.c (main): - Increase file name buffers from 64 to 512, to afford long path names in command-line arguments. 2015-10-10 Theppitak Karoonboonyanan Replace static global free-list with local one. The static global free-list in brk-maximal.c makes it not thread-safe. * src/thbrk/brk-maximal.c: - Add type BrkEnv to keep break pool free list, with brk_env_init() and brk_env_destroy() methods. - (brk_pool_node_new, brk_pool_node_free, brk_pool_free, brk_pool_delete, brk_root_pool, brk_recover_try, brk_recover): Add (BrkEnv *) arg to relevant functions and use it properly. - (brk_maximal_do): Create and destroy BrkEnv instance for use locally. Pass it to the required function calls. - (brk_pool_delete -> brk_pool_delete_node): Rename function to avoid confusion with brk_pool_free(). * src/thbrk/brk-maximal.c: * src/thbrk/brk-maximal.h: * src/thbrk/thbrk.c: - Get rid of now-unnecessary brk_maximal_init() and brk_maximal_quit(). Thanks Behdad Esfahbod for the report. 2015-09-07 Theppitak Karoonboonyanan Fix doxygen version checking. * configure.ac: - Correctly compare doxygen versions. Simple expr comparison didn't work with version 1.8.10. Taken from Petr Gajdos 's patch for libdatrie. 2015-06-04 Theppitak Karoonboonyanan Protect against invalid array access. * src/thbrk/thbrk.c (th_brk): - Add a condition to protect against accessing pos[-1] which may be caused by a failure in brk_maximal_do() on the first Thai chunk, which makes cur_pos remain 0. Thanks Behdad Esfahbod for the report. 2015-06-04 Theppitak Karoonboonyanan * configure.ac: Post-release version suffix added. 2015-05-08 Theppitak Karoonboonyanan * configure.ac, NEWS: === Version 0.1.22 === 2015-05-08 Theppitak Karoonboonyanan * configure.ac: Bump library revision, due to code change. 2015-05-08 Theppitak Karoonboonyanan Fix 'make distcheck' failure. * doc/Makefile.am: - Remove doxygen db file on clean. 2015-05-06 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-common.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2015-05-06 Theppitak Karoonboonyanan Use my Gmail e-mail address everywhere. * AUTHORS: * include/thai/thailib.h: * include/thai/thbrk.h: * include/thai/thcell.h: * include/thai/thcoll.h: * include/thai/thctype.h: * include/thai/thinp.h: * include/thai/thrend.h: * include/thai/thstr.h: * include/thai/thwbrk.h: * include/thai/thwchar.h: * include/thai/thwcoll.h: * include/thai/thwctype.h: * include/thai/thwinp.h: * include/thai/thwrend.h: * include/thai/thwstr.h: * include/thai/tis.h: * include/thai/wtt.h: * man/man3/libthai.3: * man/man3/thctype.3: * man/man3/wtt.3: * man/template.3: * src/libthai.c: * src/thbrk/brk-common.c: * src/thbrk/brk-common.h: * src/thbrk/brk-ctype.c: * src/thbrk/brk-ctype.h: * src/thbrk/brk-maximal.c: * src/thbrk/brk-maximal.h: * src/thbrk/thbrk.c: * src/thcell/thcell.c: * src/thcoll/cweight.c: * src/thcoll/cweight.h: * src/thcoll/thcoll.c: * src/thctype/thctype.c: * src/thctype/wtt.c: * src/thinp/thinp.c: * src/thrend/thrend.c: * src/thstr/thstr.c: * src/thwbrk/thwbrk.c: * src/thwchar/thwchar.c: * src/thwctype/thwctype.c: * src/thwstr/thwstr.c: * tests/thsort.c: - Replace my e-mail address with the Gmail one. 2015-05-06 Theppitak Karoonboonyanan More LIKELY/UNLIKELY hints. * src/thbrk/brk-maximal.c (brk_recover): - Add UNLIKELY to recovery history hits, reducing time by 0.03% 2015-05-06 Theppitak Karoonboonyanan Split LIKELY/UNLIKELY to a separate header. This prevents modules from depending on brk-common.h, which provides low-level APIs for breaker backends. * src/thbrk/Makefile.am, src/thbrk/brk-common.h +src/thbrk/thbrk-utils.h: - Move LIKELY/UNLIKELY macro definitions from brk-common.h to a new header thbrk-utils.h * src/thbrk/brk-common.c, src/thbrk/brk-maximal.c, src/thbrk/thbrk.c: - Include thbrk-utils.h instead of brk-common.h for LIKELY/UNLIKELY. 2015-05-04 Theppitak Karoonboonyanan More LIKELY/UNLIKELY hints. * src/thbrk/thbrk.c (th_brk_line): - Add UNLIKELY() on error conditions. Note: adding UNLIKELY() to th_brk() first if-statement makes it slower, which is weird. So, not added there. 2015-05-02 Theppitak Karoonboonyanan * configure.ac: Bump library revision, due to code change. 2015-05-02 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-common.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: Add words. 2015-04-30 Theppitak Karoonboonyanan Catch error on break hints allocation. * src/thbrk/brk-maximal.c (brk_maximal_do): - Do not continue if brkpos_hints allocation fails. 2015-04-30 Theppitak Karoonboonyanan Do TIS-to-Unicode conversion only once on word breaking. * src/thbrk/brk-maximal.c (brk_maximal_do): - Convert input string to Unicode before passing to brk_maximal_do_impl(). * src/thbrk/brk-maximal.c (brk_maximal_do_impl, brk_recover, brk_recover_try): - Redeclare to accept wide char string. - Do not call th_tis2uni() on every input char. This appears to reduce word breaking time by 0.28% on test case. Thanks edgehogapp@gmail.com for the suggestion. https://groups.google.com/forum/#!topic/thai-linux-foss-devel/Be-OLMRYF7M 2015-04-29 Theppitak Karoonboonyanan Bump doxygen required version. * configure.ac: - Bump doxygen required version to 1.8.8, according to recent Doxyfile update. 2015-03-07 Theppitak Karoonboonyanan Also check for 'trietool' (without -0.2 suffix) * configure.ac: - Check for both trietool-0.2 (for libdatrie < 0.2.9) and trietool (for libdatrie >= 0.2.9) utility. 2015-03-06 Theppitak Karoonboonyanan Update Doxyfile. * doc/Doxyfile.in: - Updated for doxygen 1.8.8 with 'doxygen -u'. 2015-03-06 Theppitak Karoonboonyanan Fix compiler warning. * src/thbrk/brk-maximal.c (brk_recover): - Initialize last_brk_pos on declaration. 2015-02-05 Theppitak Karoonboonyanan Disable timestamp in Doxygen-generated doc. * doc/Doxyfile.in: - Set HTML_TIMESTAMP to NO to make the document reproducible. (reported by Debian Reproducible) 2015-02-04 Theppitak Karoonboonyanan Micro-optimize with likely/unlikely hints. * src/thbrk/brk-common.h: - Add LIKELY() and UNLIKELY() macros based on compiler extension. * src/thbrk/brk-common.c (brk_get_dict): * src/thbrk/brk-maximal.c (brk_maximal_do_impl, brk_root_pool, brk_shot_init, brk_pool_node_new, best_brk_new): - Use LIKELY() and UNLIKELY() where it is known to be so, mostly for one-time initialization and failure handling. Callgrind says it does help speed up a little bit. 2014-12-16 Theppitak Karoonboonyanan Update word break dictionary. * data/tdict-city.txt: * data/tdict-collection.txt: * data/tdict-common.txt: * data/tdict-country.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: Add words. 2014-08-23 Theppitak Karoonboonyanan * configure.ac: Post-release version suffix added. 2014-08-21 Theppitak Karoonboonyanan * configure.ac, NEWS: === Version 0.1.21 === 2014-08-19 Theppitak Karoonboonyanan Be more careful about CFLAGS. * src/Makefile.am: - Add $(DATRIE_CFLAGS) to CFLAGS so that thbrk/brk-common.h included from libthai.c can safely find datrie/trie.h header. 2014-08-19 Theppitak Karoonboonyanan Fix build failure due to missing header. * src/Makefile.am: - Add CFLAGS so that thbrk/brk-common.h included from libthai.c can find thai/thctype.h header. 2014-08-18 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2014-08-09 Theppitak Karoonboonyanan thbrk: Be greedy when recovering from error. * src/thbrk/brk-maximal.c (brk_recover_try): - Loop to match as many words as possible on every node picked from pool, to increase the chance of early sufficient words matched, and to avoid too much possibility exploration. 2014-08-09 Theppitak Karoonboonyanan Minor optimization. Callgrind says brk_recover_try() is the most frequently called. So, try to optimize it as we can. * src/thbrk/brk-maximal.c (brk_recover, brk_recover_try): - Only return the last break position instead of all. * src/thbrk/brk-maximal.c (brk_recover_try): - Remove unneeded assignment on is_terminal for the case in which its value is irrelevant. - Remove unneeded check on is_terminal where its value is known. 2014-08-09 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c: - Add missing #include . 2014-08-05 Theppitak Karoonboonyanan Code clean up. * src/thbrk/brk-maximal.c (brk_shot_init): - Split assignment and if-condition. * src/thbrk/brk-maximal.c (brk_pool_free_node -> brk_pool_node_free): - Rename the function to obj-action form, in accordance with brk_pool_node_new(). - Add forward declaration for it. 2014-08-04 Theppitak Karoonboonyanan Refactor common thbrk code into brk-common. This prevents mutual dependency between brk-* and thbrk. * src/thbrk/Makefile.am: * src/thbrk/thbrk-private.h -> src/thbrk/brk-common.h: - Rename file, as thbrk-private.h contains only functions for common brk-* codes. - Rename thbrk_* functions back to brk_*. * src/thbrk/Makefile.am: * src/thbrk/thbrk.c: * +src/thbrk/brk-common.c: - Move common thbrk_* functions implementations to brk-common.c. - Rename the functions according to changes in brk-common.h. * src/thbrk/brk-maximal.c: - Update #include for thbrk-private.h to brk-common.h. - Update calls to thbrk_* to brk_*. - Remove #include's previously used by the common code. * src/libthai.c (_libthai_on_unload): - Update #include for thbrk-private.h to brk-common.h. - Update call to thbrk_on_unload() to brk_on_unload(). 2014-08-03 Theppitak Karoonboonyanan Move brk_get_dict() to common thbrk code. * src/thbrk/brk-maximal.c, src/thbrk/thbrk-private.h: - Move brk_get_dict() declaration to thbrk-private.h. - Rename the function to thbrk_get_dict() for consistency. * src/thbrk/brk-maximal.c, src/thbrk/thbrk.c: - Move implementation of brk_get_dict() to thbrk.c. - Rename function & variable accordingly. * src/thbrk/brk-maximal.c (brk_root_pool): - Rename function call to thbrk_get_dict(). * src/thbrk/brk-maximal.h, src/thbrk/brk-maximal.c, src/thbrk/thbrk.c: - Move implementation of brk_maximal_on_unload() to thbrk_on_unload(). - Remove brk_maximal_on_unload() which is no longer needed. 2014-08-03 Theppitak Karoonboonyanan Rename th_brkpos_hints() to thbrk_brkpos_hints(). * src/thbrk/thbrk-private.h, src/thbrk/thbrk.c, src/thbrk/brk-maximal.c: - Change function prefix for consistency. 2014-08-03 Theppitak Karoonboonyanan Move th_brkpos_hints() to common thbrk code. This is a preparation for alternative word break algorithms. * src/thbrk/brk-maximal.c, src/thbrk/thbrk-private.h: - Move declaration of th_brkpos_hints() to thbrk-private.h. * src/thbrk/brk-maximal.c: - Include thbrk-private.h to get th_brkpos_hints() declaration. * src/thbrk/brk-maximal.c, src/thbrk/thbrk.c: - Move implementation of th_brkpos_hints() to thbrk.c. 2014-07-31 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-lang-ethnic.txt: Add words. 2014-06-30 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-geo.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. * data/tdict-std.txt: - Remove rare word 'จอแส' which causes wrong segmentation for 'จอแสดงผล' as 'จอแส|ดง|ผล'. 2014-03-06 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-spell.txt: Add words. * data/tdict-common.txt: - Remove 'บ๊วย' which duplicates an entry in tdict-std.txt. * data/tdict-proper.txt, data/tdict-district.txt: - Move 'กรือเซะ' from tdict-proper.txt to tdict-district.txt. * data/tdict-proper.txt, data/tdict-geo.txt: - Move 'แอตแลนติส' from tdict-proper.txt to tdict-geo.txt. 2014-01-11 Theppitak Karoonboonyanan Fix warning in test suite. * tests/test_thbrk.c (main): - Fix compiler warning on unused return value from fgets(). Caught by debian package building with test suites enabled. 2013-12-21 Theppitak Karoonboonyanan * data/tdict-std-compound.txt, data/tdict-std.txt: - Move 'ชุติมา' from -std-compound to -std. 2013-12-21 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2013-12-21 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. 2013-10-25 Theppitak Karoonboonyanan * configure.ac, NEWS: === Version 0.1.20 === 2013-10-25 Theppitak Karoonboonyanan Fix warnings in tests. * tests/test_thwbrk.c (main): - Do some useful checks for 'unicodeCutCodeLength' unused var. - Cast (size_t) returned value of wcslen() to (long) and use "%ld" format to print it. - Remove trailing spaces in source. 2013-10-25 Theppitak Karoonboonyanan Fix warnings in tests. * tests/test_thwchar.c (main): - Cast (thchar_t *) to (char *) to fix signedness differences. - Cast (thwchar_t) to (unsigned long) for "%lx" string format. - Cast (size_t) return values from wcslen() and strlen() to long, and use "%ld" format to print them. - Replace 'outputLength' var with 'tisLength' and 'uniLength' and do some useful checks on return values of th_tis2uni_line() and th_uni2tis_line(). 2013-10-25 Theppitak Karoonboonyanan Fix warnings in tests. * tests/test_thinp.c (test_th_validate): - Cast (thchar_t *) to (char *), to fix signedness differences. * tests/thsort.c (readData): - Cast (size_t) to (long) and use "%ld" format to print it. - Redeclare maxData from int to size_t, to match that of nData. 2013-10-24 Theppitak Karoonboonyanan * README: Remove version-specific text. 2013-10-22 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-geo.txt: * data/tdict-history.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: Add words. 2013-09-24 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2013-09-23 Theppitak Karoonboonyanan Check for doxygen required version. * configure.ac: - When doxygen-doc is enabled, also check doxygen version. 2013-09-23 Theppitak Karoonboonyanan Update Doxyfile. * doc/Doxyfile.in: - Updated with 'doxygen -u'. 2013-09-23 Theppitak Karoonboonyanan Fix automake warnings. * src/thbrk/Makefile.am: * src/thcell/Makefile.am: * src/thcoll/Makefile.am: * src/thctype/Makefile.am: * src/thinp/Makefile.am: * src/thrend/Makefile.am: * src/thstr/Makefile.am: * src/thwbrk/Makefile.am: * src/thwchar/Makefile.am: * src/thwctype/Makefile.am: * src/thwstr/Makefile.am: * tests/Makefile.am: - Replace deprecated INCLUDES with AM_CPPFLAGS. 2013-08-02 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: Add words. * data/tdict-std.txt: Remove 'พาส' whose use is rare and which potentially causes ambiguity like in 'พาสมองเสื่อม'. 2013-02-24 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-geo.txt: * data/tdict-ict.txt: * data/tdict-lang-ethnic.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2013-02-24 Theppitak Karoonboonyanan Remove compound words that potentially cause ambiguity. * data/tdict-std-compound.txt: - Remove 'มีหน้า' which can cause 'มีหน้า|ที่' instead of 'มี|หน้าที่'. - Remove 'ลืมตา' which can cause 'ลืมตา|มหา' instead of 'ลืม|ตาม|หา'. 2013-02-24 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. 2013-01-29 Theppitak Karoonboonyanan * configure.ac, NEWS: === Version 0.1.19 === 2013-01-28 Theppitak Karoonboonyanan Modernize autoconf & switch to XZ tarball compression. * configure.in -> configure.ac: - Rename file for modern autoconf. - Replace deprecated AC_INIT() form with PACKAGE, VERSION form. - Use AC_CONFIG_SRCDIR() instead for the old AC_INIT() form. - Add AC_CONFIG_MACRO_DIR(). - Replace deprecated AC_INIT_AUTOMAKE() form with OPTIONS form, passing "dist-xz no-dist-gzip" options to switch to XZ tarball. * Makefile.am: - Add "-I m4" to ACLOCAL_AMFLAGS, as suggested by libtool. 2013-01-28 Theppitak Karoonboonyanan Change th_validate() default level back to ISC_STRICT. * src/thinp/thinp.c (th_validate): - Change ISC level back from ISC_BASICCHECK to ISC_STRICT. ISC_BASICCHECK fails 'make check', and the previous value ISC_STRICT should be better for general input with correction. 2013-01-28 Theppitak Karoonboonyanan * data/tdict-science.txt: Fix typo. 2013-01-27 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-ict.txt: * data/tdict-science.txt: * data/tdict-geo.txt: * data/tdict-lang-ethnic.txt: * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-district.txt: Add words. * data/tdict-std-compound.txt: Drop loose compound 'สว่างไสว'. 2012-11-07 Theppitak Karoonboonyanan Add input method API for correction with levels. * include/thai/thinp.h: * src/libthai.def: * src/libthai.map (+th_validate_leveled): - Add API for input validation with strictness arg. * src/thinp/thinp.c (th_validate, th_validate_leveled): - Convert old th_validate() code to th_validate_leveled() and replace the hard-coded ISC_STRICT with the arg. - Make the old th_validate() a wrapper to th_validate_leveled() with default param (ISC_BASICCHECK, not ISC_STRICT, though). * configure.in: - Bump library versions to reflect the added API. 2012-11-07 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-science.txt: * data/tdict-ict.txt: * data/tdict-lang-ethnic.txt: Add words. 2012-10-16 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-district.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-science.txt: Add words. 2012-07-30 Theppitak Karoonboonyanan * doc/Doxyfile.in: Upgrade to doxygen 1.8.1.2 format. 2012-07-29 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: Add words. 2012-07-30 Theppitak Karoonboonyanan * doc/Doxyfile.in: Upgrade to doxygen 1.8.1.2 format. 2012-06-15 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. 2012-06-12 Theppitak Karoonboonyanan * configure.in, NEWS: === Version 0.1.18 === 2012-06-12 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-lang-ethnic.txt: * data/tdict-proper.txt: Add words. 2012-06-11 Theppitak Karoonboonyanan * data/tdict-std.txt: Remove some prefix-words as found during working on thailatex hyphenation. 2012-06-10 Theppitak Karoonboonyanan * data/tdict-common.txt: * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-ict.txt: Add words. 2012-06-08 Theppitak Karoonboonyanan * configure.in: Belated post-release version suffix added. 2012-06-08 Theppitak Karoonboonyanan * data/tdict-city.txt: * data/tdict-common.txt: * data/tdict-ict.txt: * data/tdict-proper.txt: * data/tdict-spell.txt: Add words. 2012-03-07 Theppitak Karoonboonyanan * data/tdict-std-compound.txt, data/tdict-std.txt: Fix typos. 2012-02-24 Theppitak Karoonboonyanan * data/tdict-common.txt: Add words. 2012-02-21 Theppitak Karoonboonyanan * configure.in, NEWS: === Version 0.1.17 === 2012-02-21 Theppitak Karoonboonyanan * configure.in: Bump library revision, due to code change. 2012-02-21 Theppitak Karoonboonyanan * tests/test_thbrk.c, tests/test_thwbrk.c: Add acronym to the tests. 2012-02-21 Theppitak Karoonboonyanan * data/tdict-history.txt: * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-spell.txt: * data/tdict-ict.txt: * data/tdict-common.txt: Add words. 2012-02-20 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (th_brk): Do not break last Thai chunk with dictionary if it's acronym. 2012-02-14 Theppitak Karoonboonyanan * data/tdict-history.txt: * data/tdict-spell.txt: * data/tdict-common.txt: Add words. * data/tdict-geo.txt: Fix typo. 2012-02-08 Theppitak Karoonboonyanan * data/tdict-history.txt: * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-science.txt: * data/tdict-geo.txt: * data/tdict-ict.txt: * data/tdict-spell.txt: * data/tdict-district.txt: * data/tdict-common.txt: Add words. 2012-02-07 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (th_brk): Handle Thai acronyms by detecting groups of <= 3 Thai characters + '.'. Thanks John Tapsell for the report and initial patch. 2012-02-07 Theppitak Karoonboonyanan * src/thrend/thrend.c (th_render_cell_): Reformat source a little bit. 2012-01-18 Theppitak Karoonboonyanan * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-science.txt: * data/tdict-ict.txt: * data/tdict-common.txt: Add words. * data/tdic-proper.txt, data/tdict-history.txt: Move "ศรีวิชัย" to -history. 2012-01-18 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. 2011-11-05 Theppitak Karoonboonyanan * configure.in, NEWS: === Version 0.1.16 === 2011-11-05 Theppitak Karoonboonyanan * configure.in: - Remove remaining '$Id'. - Remove unnecessary AC_SUBST(VERSION). 2011-11-05 Theppitak Karoonboonyanan * -TODO: Removed, the plan is obsolete. 2011-11-05 Theppitak Karoonboonyanan * README: Update project URL & e-mail. * configure.in: Use googlegroups as bug report address. 2011-11-05 Theppitak Karoonboonyanan * configure.in: Add bug report address. 2011-11-05 Theppitak Karoonboonyanan * data/tdict-history.txt: * data/tdict-proper.txt: * data/tdict-spell.txt: * data/tdict-common.txt: Add words. * data/tdict-country.txt: Use more popular short name for Saudi Arabia. 2011-10-25 Theppitak Karoonboonyanan * data/tdict-common.txt, data/tdict-city.txt: "ไดฟุกุ" is city name. 2011-10-25 Theppitak Karoonboonyanan * data/tdict-science.txt: * data/tdict-common.txt: Add words. 2011-09-03 Theppitak Karoonboonyanan * data/tdict-proper.txt: * data/tdict-common.txt: Add words. * data/tdict-std.txt: Remove "มาย" which is rare but can potentially cause ambiguity (e.g. "มายกร่าง"). A valid compound, "เมามาย" is already in tdict-std-compound.txt. 2011-07-19 Theppitak Karoonboonyanan * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-geo.txt: * data/tdict-ict.txt: * data/tdict-common.txt: Add words. * data/tdict-std-compound.txt: Remove loose compound. * data/tdict-std.txt: - Remove rare words which potentially cause ambiguities. - Remove a duplicated entry. 2011-06-08 Theppitak Karoonboonyanan * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-science.txt: * data/tdict-geo.txt: * data/tdict-ict.txt: * data/tdict-spell.txt: * data/tdict-common.txt: * data/tdict-lang-ethnic.txt: Add words. 2011-06-08 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. 2011-03-24 Theppitak Karoonboonyanan * configure.in, NEWS: === Version 0.1.15 === 2011-03-24 Theppitak Karoonboonyanan * data/tdict-history.txt: * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-science.txt: * data/tdict-spell.txt: * data/tdict-district.txt: * data/tdict-common.txt: Add words. 2011-03-22 Theppitak Karoonboonyanan * data/tdict-proper.txt: * data/tdict-science.txt: * data/tdict-spell.txt: * data/tdict-district.txt: * data/tdict-common.txt: Add words. 2011-03-22 Theppitak Karoonboonyanan * data/tdict-history.txt: * data/tdict-proper.txt: * data/tdict-district.txt: Move 2 names from proper, district to history. * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-district.txt: * data/tdict-common.txt: Add words. 2011-03-20 Theppitak Karoonboonyanan * data/tdict-district.txt: * data/tdict-history.txt: Move "หริภุญชัย" from district to history list. * data/tdict-city.txt: Change "ฟูกุโอกะ" to "ฟูกูโอกะ", which is statistically more popular. * data/tdict-history.txt: * data/tdict-proper.txt: * data/tdict-city.txt: * data/tdict-science.txt: * data/tdict-geo.txt: * data/tdict-spell.txt: * data/tdict-common.txt: Add words. 2011-03-15 Theppitak Karoonboonyanan Split historical names out of tdict-city.txt and tdict-district.txt. * data/Makefile.am: * +data/tdict-history.txt: * data/tdict-city.txt: * data/tdict-district.txt: Split historical names into tdict-history.txt. * data/tdict-city.txt: * data/tdict-geo.txt: * data/tdict-lang-ethnic.txt: Move 2 names from tdict-city.txt to tdict-geo.txt and tdict-lang-ethnic.txt. 2011-03-15 Theppitak Karoonboonyanan Split tdict-country.txt and tdict-city.txt out of tdict-geo.txt and let tdict-geo.txt keeps only geographical names. * data/Makefile.am: * +data/tdict-country.txt: * +data/tdict-city.txt: * data/tdict-geo.txt: - Split country names into tdict-country.txt - Split city names into tdict-city.txt * data/tdict-geo.txt: * data/tdict-lang-ethnic.txt: - Split language/etchnic names into tdict-lang-ethnic.txt 2011-03-15 Theppitak Karoonboonyanan * data/tdict-proper.txt: * data/tdict-common.txt: * data/tdict-geo.txt: Add words. 2011-03-14 Theppitak Karoonboonyanan * data/tdict-spell.txt: * data/tdict-proper.txt: * data/tdict-common.txt: * data/tdict-geo.txt: Add words. 2011-03-09 Theppitak Karoonboonyanan * data/tdict-ict.txt: * data/tdict-district.txt: * data/tdict-common.txt: * data/tdict-science.txt: Add words. 2010-12-27 Theppitak Karoonboonyanan Adjust dictionary, as per Widhaya's feedback: http://groups.google.com/group/thai-linux-foss-devel/browse_thread/ thread/986f74d786c9bace * data/tdict-std-compound.txt: * data/tdict-std-common.txt: - Remove some compounds that may cause potential ambiguities. * data/tdict-spell.txt: * data/tdict-common.txt: - Add words. 2010-12-23 Theppitak Karoonboonyanan * data/tdict-{common,geo}.txt: Add words. 2010-05-17 Theppitak Karoonboonyanan * data/tdict-{district,common,science}.txt: Add words. 2010-03-14 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. Turn off manpages generation * doc/Doxyfile.in: Turn GENERATE_MAN off. * doc/Makefile.am: Remove man targets. 2010-02-28 Theppitak Karoonboonyanan * configure.in: Bump library revision. * configure.in, NEWS: === Version 0.1.14 === 2010-02-28 Theppitak Karoonboonyanan * data/tdict-{ict,proper,common}.txt: Add words. 2010-02-28 Theppitak Karoonboonyanan * src/thcoll/cweight.c (char_weight_tbl_): Replace TIS-620 characters in comments with character names. * src/thctype/thctype.c (_th_ctype_tbl, _th_chlevel_tbl): Remove non-TIS-620 characters from comments. Convert source to UTF-8. 2010-02-27 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_get_dict): Limit path[] scope. 2010-02-27 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_get_dict): Print some warning when dictionary opening fails. 2010-02-27 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_get_dict): Do not try to open dictionary again if once tried. Multiple failing trials degraded performance. 2010-02-25 Theppitak Karoonboonyanan * include/thai/*.h, src/*.c, src/*/*.c: Add my e-mail address to license header as the contact address. * src/thctype/wtt.c, * src/thctype/thctype.c, * src/thcoll/cweight.h, * src/thcoll/cweight.c, * src/thwctype/thwctype.c: Add editor modeline. 2010-02-24 Theppitak Karoonboonyanan * src/thinp/thinp.c, * src/thrend/thrend.c, * src/thcoll/thcoll.c, * src/thcoll/cweight.c, * src/thwstr/thwstr.c, * src/thwchar/thwchar.c, * src/thwbrk/thwbrk.c, * src/thstr/thstr.c, * src/thcell/thcell.c: Reformat source. Add editor modeline. 2010-02-24 Theppitak Karoonboonyanan * tests/thsort.c: Yet another GPL header leftover removal. Update my e-mail address. 2010-02-24 Theppitak Karoonboonyanan Replace with a rewritten one, so we can enforce the license. * include/thai/tis.h: Rewritten based on Unicode names, with TIS_ prefix. * src/thinp/thinp.c (corrections, th_validate), * src/thrend/thrend.c (shiftdown_tone_ad, shiftdownleft_tone_ad, shiftleft_tone_ad, shiftdown_bv_bd, tailcutcons, th_render_cell_, th_render_cell_tis), * src/thbrk/brk-maximal.c (th_brkpos_hints), * src/thcell/thcell.c (th_next_cell, th_prev_cell), * tests/test_thcell.c (test_ans_nodecomp_am, test_ans_decomp_am): Update character names to the new TIS_* ones. 2010-02-24 Theppitak Karoonboonyanan * include/thai/*.h, src/*.c, src/*/*.c, * Makefile.am, include/Makefile.am, include/thai/Makefile.am, * src/Makefile.am, src/*/Makefile.am, * tests/*.c, tests/*.sh, * tests/Makefile.am, * data/Makefile.am, * man/template.3, man/man3/*.3, * man/Makefile.am, man/man3/Makefile.am: Remove CVS $Id in all files. * src/thctype/wtt.c: Fix file name in comment. 2010-02-24 Theppitak Karoonboonyanan * include/thai/*.h, src/*.c, src/*/*.c: Add license header to every source file. 2010-02-23 Theppitak Karoonboonyanan * doc/Makefile.am: The added *.c dependencies must be from src/*/*.c, not include/thai/*.c. Silly copy-and-paste error. 2010-02-23 Theppitak Karoonboonyanan * doc/Makefile.am: Add *.c to doxygen.stamp dependency, as the doc comments have been moved there. 2010-02-17 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_root_pool): Fail if brk_get_dict() returns NULL. 2010-02-17 Theppitak Karoonboonyanan * data/tdict-{ict,proper,common,science}.txt: Add words. 2010-01-30 Theppitak Karoonboonyanan * src/thcoll/cweight.c, src/thcoll/cweight.h, src/thcoll/thcoll.c: Remove GPL header left over. The library is LGPL. 2010-01-25 Theppitak Karoonboonyanan * src/brk-maximal.c (brk_root_pool): Fail if brk_pool_node_new() returns NULL. * src/brk-maximal.c (brk_maximal_do_impl): Fail if best_brk_new() returns NULL. 2010-01-25 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. 2010-01-15 Theppitak Karoonboonyanan * configure.in: Bump library revision. * configure.in, NEWS: === Version 0.1.13 === 2010-01-15 Theppitak Karoonboonyanan * configure.in: Add 'AC_CONFIG_MACRO_DIR([m4])' for the new libtool. 2010-01-15 Theppitak Karoonboonyanan * src/thwchar/thwchar.c (th_tis2uni_line, th_uni2tis_line): Fix type of 'result' argument to match that in header file, so doxygen recognizes and generates doc for it. 2010-01-15 Theppitak Karoonboonyanan * data/tdict-{proper,common}.txt: Add words. 2010-01-14 Theppitak Karoonboonyanan * include/thai/thctype.h, src/thctype/thctype.c: Replace non-portable isascii() with most-significant bit check. 2010-01-14 Theppitak Karoonboonyanan * data/tdict-{common,geo}.txt: Add words. 2010-01-14 Theppitak Karoonboonyanan * include/thai/thailib.h, src/libthai.c: Move more doc comments. 2010-01-09 Theppitak Karoonboonyanan Move documentation from *.h to *.c, so libthai developers have the doc at hand. Users can still read the doxygen-generated doc BTW. * include/thai/*.h, src/*/*.c: Move doc comments from *.h to *.c. * doc/Doxyfile.in: Set INPUT to @top_srcdir@. 2010-01-08 Theppitak Karoonboonyanan * data/tdict-{proper,common,geo}.txt: Add words. 2010-01-08 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_shot_init): Return failure/success status. * src/thbrk/brk-maximal.c (brk_pool_node_new): Check & handle return code from brk_shot_init(). 2010-01-08 Theppitak Karoonboonyanan * src/thwbrk/thwbrk.c (th_wbrk, th_wbrk_line): Rewritten, for harmony with the rests of the source, plus potential integer overflow vulnerability removed. 2010-01-08 Theppitak Karoonboonyanan Fix potential integer overflow vulnerabilities. Thanks Tim Starling for pointing out. * src/thbrk/thbrk.c (th_brk_line): Return zero if malloc size overflows or malloc fails. * src/thbrk/brk-maximal.c (best_brk_new): Return NULL if malloc size overflows. 2009-08-22 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. * data/tdict-std-compound.txt: Remove loose compounds. * data/tdict-{ict,district,proper,common,science,lang-ethnic,geo}.txt: Add words. 2009-06-18 Theppitak Karoonboonyanan * configure.in: Bump library revision. * configure.in, NEWS: === Version 0.1.12 === 2009-06-18 Theppitak Karoonboonyanan * data/tdict-std-compound.txt: Remove loose compounds. 2009-06-18 Theppitak Karoonboonyanan * data/tdict-std-compound.txt: Remove loose compounds. * data/tdict-{ict,district,proper,common,science,geo}.txt: Add words. 2009-06-17 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl, best_brk_contest): Back out weighted scoring for solution contest, as it sometimes tries too hard to minimize word count, even though another solution with more known words can match more text and results in smaller unknown zone. Accidental words problem, which this scheme tried to address, has already been alleviated with increased recovery threshold. 2009-06-17 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl): Add break pos at string end and let it enter the contest, instead of backing it out by moving back str_pos as done in previous commit. That commit just missed the point. Doing the right thing also guarantees consistency with the case when some text of valid words is appended to the string. 2009-06-17 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl): Set str_pos for cases that fail at string end back to the last progress position, to prevent it from wrongly winning the contest over some good candidates. 2009-06-17 Theppitak Karoonboonyanan * src/tkbrk/brk-maximal.c (RECOVERED_WORDS): Increase recovery threshold, 2 is too few and can trigger wrong recovery position too easily. 2009-06-15 Theppitak Karoonboonyanan * data/Makefile.am, +data/tdict-lang-ethnic.txt: Add a new category. * data/tdict-{common,geo}.txt, data/tdict-lang-ethnic.txt: Move some words to the new category. * data/tdict-{lang-ethnic,ict,spell,proper,common,science,geo}.txt: Add words. * data/tdict-std.txt: Remove a duplicated compound. 2009-06-13 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (best_brk_contest): Compare penalties with '<=' like in previous code, instead of '<', to retain longest-matching effect in case of equal scores. 2009-06-10 Theppitak Karoonboonyanan * data/tdict-std-compound.txt: Remove loose compounds. * data/tdict-{common,proper}.txt: Move a proper noun to tdict-proper. * data/tdict-{ict,spell,district,proper,common,science,geo}.txt: Add words. 2009-06-10 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl, best_brk_contest): Use weighted scoring, rather than parameters prioritization, to choose better solution. 2009-06-10 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl): When recovering from error, try to recover from the position next to the last break, rather than right at the crash position. We care the input string, not what it's being partially matched against. 2009-06-10 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_recover): When checking a character in text, brk pos returned from brk_recover_try() are relative to 'text + p', not 'text'. 2009-06-10 Theppitak Karoonboonyanan Split normal word break and recovery routines apart. * src/thbrk/brk-maximal.c (brk_maximal_do_impl, +brk_recover_try): - Split brk_maximal_do_impl() into itself with (do_recover == 1) and brk_recover_try() with (do_recover == 0), for logic simplification. - Strip unnecessary tasks like best break contests and penalties from brk_recover_try(). All it needs is existence of a solution, regardless of its quality. - Use memcpy() to copy brk pos arrays instead of for loop. * src/thbrk/brk-maximal.c (brk_maximal_do, brk_recover): - Adjust calls to brk_maximal_do_impl() and brk_recover_try() according to the changed prototypes. 2009-06-10 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl): Add one missing change for last commit. 2009-06-10 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maximal_do_impl): Update 'shot' after 'node' is changed, instead of referencing through the possibly new 'node' value, for code readability. 2009-06-10 Theppitak Karoonboonyanan Beautify code. * src/thbrk/brk-maximal.c (th_brkpos_hints): Adjust indents. * src/thbrk/brk-maximal.c (brk_recover): Adjust brackets. 2009-06-10 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (th_brkpos_hints): Add check for cases like 'เฉพาะ'. 2009-06-07 Theppitak Karoonboonyanan * configure.in: Remove obsolete Win32 checking stuffs. 2009-06-07 Theppitak Karoonboonyanan Add symbol versioning. * configure.in: Check for -version-script support in linker. * +src/libthai.map: Add symbol map. * src/Makefile.am: - Conditionally supply -version-script, if supported, or -export-symbols otherwise, to linker. - Conditionally specify libthai.map or libthai.def as libthai.la dependency, according to corresponding linker option applied. - Include libthai.map in EXTRA_DISTS. 2009-06-05 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (th_brkpos_hints): Fix comment style to C, not C++. 2009-06-05 Theppitak Karoonboonyanan Fix wrong case of syllable like 'ช็อก'. * src/thbrk/brk-maximal.c (th_brkpos_hints): - The case of SARA E/AE with next third character as MAITAIKHU should not apply when the MAITAIKHU is followed by O ANG or WO WAEN. That's a signature of new syllable, such as 'ช็อก'. - Add the case of syllable like 'ช็อก' or 'ช็วก'. 2009-06-05 Theppitak Karoonboonyanan Refactor so brk hints is prepared only once per brk_maximal_do() call. * src/thbrk/brk-maximal.c (brk_maximal_do, +brk_maximal_do_impl): Split implementation code into _impl() function, and let the original brk_maximal_do() be a wrapper doing necessary preparations. * src/thbrk/brk-maximal.c (brk_recover): Call brk_maximal_do_impl() instead of brk_maximal_do(), passing the appropriate brk hints subarray to it. * src/thbrk/brk-maximal.{c,h} (brk_maximal_do): * src/thbrk/thbrk.c (th_brk): Drop the do_recover arg from brk_maximal_do(), as it's now a wrapper which can seed initial condition for the mutual recursion. * src/thbrk/brk-maximal.c (th_brkpos_hints): Add prototype. 2009-06-04 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (th_isleadable -> th_brkpos_hints): - Turn simple leadable check into a pre-processed break position hinting. Instead of doing the complicated checks on every loop, now the clients just check the prepared boolean array. - Add more complicated cases, such as Thai composite vowels. * src/thbrk/brk-maximal.c (brk_recover): - Change prototype to accept brk pos hints, so it doesn't need to be recalculated. - Drop additional checks of preceeding ldvowel, as it's already covered by the brk pos hints. * src/thbrk/brk-maximal.c (brk_maximal_do): - Pre-calculate brk pos hints on entry, and free it on exit. - Check the hints instead of calling the obsolete th_isleadable(). - Pass the hints to brk_recover(). 2009-06-03 Theppitak Karoonboonyanan * data/tdict-{ict,proper,common,science,geo}.txt: Add words. 2009-05-27 Theppitak Karoonboonyanan * data/tdict-{std-compound,common}.txt: Remove some loose compounds. * data/tdict-common.txt: Reorder some words. * data/tdict-{ict,proper,common,science,geo}.txt: Add words. 2009-05-24 Theppitak Karoonboonyanan * src/Makefile.am: Refactor and add sublibs to libthai.la dependencies, so the final library gets rebuilt when its sub-libraries are changed. 2009-05-22 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (th_isleadable): Consonant following MAITAIKHU is not always unleadable, such as after "ก็". So, drop the case. 2009-05-18 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (th_isleadable): Also check for certain vowels like MAITAIKHU, MAIHUNAKAT, SARA UEE in previous cell for non-leadable consonants. * src/thbrk/brk-maximal.c (brk_maximal_do, brk_recover): Adjust th_isleadable() calls according to prototype change. 2009-05-16 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (th_isleadable): Prohibit consonants with THANTHAKHAT from being leadable. * src/thbrk/brk-maximal.c (brk_maximal_do, brk_recover): Adjust th_isleadable() calls according to prototype change. 2009-05-15 Theppitak Karoonboonyanan * data/tdict-{ict,proper,common,science,geo}.txt: Add words. 2009-05-13 Theppitak Karoonboonyanan * data/Makefile.am, data/tdict-*.txt: Convert wordlists from TIS-620 to UTF-8, for easy management with modern tools. 2009-05-13 Theppitak Karoonboonyanan * data/tdict-std-compound.txt: Remove some loose compounds. * data/tdict-{ict,spell,district,proper,common,science,geo}.txt: Add words. 2009-05-07 Theppitak Karoonboonyanan * data/tdict-{ict,district,proper,common,science,geo}.txt: Add words. * data/tdict-proper.txt: Sort some words properly. 2009-04-29 Theppitak Karoonboonyanan * data/tdict-{ict,proper,common,science,geo}.txt: Add words. 2009-04-22 Theppitak Karoonboonyanan * configure.in: Post-release version prefix added. * data/tdict-{ict,district,proper,common,geo}.txt: Add words. * data/tdict-{common,collection}.txt: Move some collection of words to appropriate category. 2009-04-06 Theppitak Karoonboonyanan * configure.in: Bump library revision. * configure.in, NEWS: === Version 0.1.11 === 2009-04-05 Theppitak Karoonboonyanan * data/tdict-{ict,district,proper,common,science,geo}.txt: Add words. 2009-03-31 Theppitak Karoonboonyanan * configure.in: Post-release version suffix added. * libthai.pc.in: Require datrie-0.2 privately, to avoid exposing it unnecessarily to applications. This had even caused upgrading problem when libdatrie with different soname versions are loaded simultaneously, one from the application, and the other from libthai. And with libdatrie poor symbols handling, this had caused name clash. Thanks Loic Minier for pointing out the cause. 2009-03-30 Theppitak Karoonboonyanan * libthai.pc.in: Requires datrie-0.2 instead of datrie. * configure.in: Bump library revision. * configure.in, NEWS: === Version 0.1.10 === 2009-03-30 Theppitak Karoonboonyanan * tdict-{common,district,ict,proper}.txt: Add words. * tdict-std.txt: Remove 2 potentially ambiguous words. 2009-03-30 Theppitak Karoonboonyanan * tdict-{district,proper,common,geo}.txt: Add words. * tdict-collection.txt: Add another variant of "x" transcription. 2009-03-20 Theppitak Karoonboonyanan * data/tdict-std-compound.txt: Removed potentially ambiguous word. * data/tdict-{ict,district,science}.txt: Add words. 2009-03-12 Theppitak Karoonboonyanan * data/tdict-{common,geo,ict,spell}.txt: Add words. Move word from -common to -spell as appropriate. 2009-01-21 Theppitak Karoonboonyanan First SVN commit. * data/tdict-{common,geo}.txt: Add words. 2009-01-08 Theppitak Karoonboonyanan * data/tdict-common.txt, data/tdict-proper.txt: Move more proper nouns from tdict-common. * data/tdict-{collection,common,district,geo,ict,proper,science, spell}.txt: Add words. 2008-12-28 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_get_dict): Move comment to proper place. 2008-12-28 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_get_dict): Adjust code so that brk_dict is not checked twice for normal cases. 2008-12-28 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_maxmimal_do): Call trie_state_is_single() instead of trie_state_is_leaf() when a state is known to be terminal, eliminating redundant check. (Requires libdatrie >= 0.1.99.2+cvs20081228) 2008-12-27 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_shot_init, brk_shot_reuse, best_brk_contest): Use memcpy() to copy arrays, rather than iteration via array index. Yet another minor performance improvement. * src/thbrk/brk-maximal.c (brk_shot_reuse): Re-allocate 'brk_pos' array only when growing, and never bother shrinking it. 2008-12-26 Theppitak Karoonboonyanan Reuse break pool nodes more deeply, improving performance a little bit. (Requires libdatrie >= 0.1.99.2+cvs20081226) * src/thbrk/brk-maximal.c (brk_shot_copy -> brk_shot_init, +brk_shot_reuse): Split brk_shot_copy() into brk_shot_init() and brk_shot_reuse(). The former is for newly created nodes, while the latter is for reusing old nodes, with memory reallocation minimized. * src/thbrk/brk-maximal.c (brk_pool_node_new): Separately call brk_shot_init() and brk_shot_reuse() per case. * src/thbrk/brk-maximal.c (brk_pool_free): Do not destruct BrkShot member. Keep it for further reuses. * src/thbrk/brk-maximal.c (brk_pool_allocator_clear): ..And actually destruct it here. * src/thbrk/brk-maximal.c (brk_root_pool): Save one malloc() call for temporary 'root_shot'. 2008-12-26 Theppitak Karoonboonyanan * src/thbrk/brk-maximal.c (brk_pool_get_node, brk_maximal_do): Get rid of unused arg 's' for brk_pool_get_node(). 2008-12-26 Theppitak Karoonboonyanan * data/tdict-ict.txt: Add words. 2008-12-23 Theppitak Karoonboonyanan Add housekeeping routine to clean up dictionary. * src/Makefile.am, src/dummy.c -> libthai.c, src/libthai.def: Add destructor function in .fini section, to be called on library unload. * src/thbrk/Makefile.am, +src/thbrk/thbrk-private.h, src/thbrk/thbrk.c (thbrk_on_unload): Add on-unload function for thbrk module. * src/thbrk/brk-maximal.h, src/thbrk/brk-maximal.c (brk_get_dict, brk_maximal_on_unload): - Move 'brk_dict' static var from function to file scope - Add on-unload function to clean up dictionary 2008-12-23 Theppitak Karoonboonyanan * src/brk-maximal.c (brk_maximal_do): Adjust if-block a little bit. 2008-12-23 Theppitak Karoonboonyanan * data/tdict-{geo,ict}.txt: Add words. 2008-12-17 Theppitak Karoonboonyanan * data/Makefile.am, +data/tdict-proper.txt, data/tdict-common.txt: Split proper nouns from tdict-common.txt into a new list. * data/tdict-{common,proper}.txt: Add words 2008-12-16 Theppitak Karoonboonyanan * data/Makefile.am: No need to install 'thbrk.abm' any more. 2008-12-15 Theppitak Karoonboonyanan * data/tdict-{common,geo,ict}.txt: Add words. 2008-12-15 Theppitak Karoonboonyanan Switch to libdatrie 0.2. (Requires libdatrie >= 0.1.99.2) * configure.in: - Check for 'trietool-0.2' binary instead of 'trietool' - Check for 'datrie-0.2' pkg-config instead of 'datrie' * src/thbrk/brk-maximal.c: - Replace 'SBTrie' with 'Trie' - Replace 'SBTrieState' with 'TrieState' - Replace 'sb_trie_*' function calls with corresponding 'trie_*' - For 'sb_trie_state_walk()', also convert TIS-620 char to UCS-4 before actually walking - For 'sb_trie_open()', replace with 'trie_new_from_file()', plus dir + path combined * data/Makefile.am: - Replace '*.br' and '*.tl' targets with '*.tri' - Add '-e tis-620' command-line argument to trietool * data/Makefile.am, data/thbrk.sbm -> data/thbrk.abm: - Replace 'thbrk.sbm' (TIS-620) with 'thbrk.abm' (Unicode) * tests/Makefile.am: - Add 'libthwchar.la' where 'libthbrk.la' is used, as th_tis2uni() is required there 2008-06-24 Theppitak Karoonboonyanan * configure.in, Makefile.am: Add --disable-dict option to prevent dictionary data generation. 2007-10-18 Theppitak Karoonboonyanan * include/thai/thctype.h: * src/thcell/thcell.c: * src/thcoll/cweight.c: * src/thcoll/cweight.h: * src/thcoll/thcoll.c: * src/thctype/thctype.c: * src/thctype/wtt.c: * src/thinp/thinp.c: * src/thrend/thrend.c: * src/thstr/thstr.c: * src/thwchar/thwchar.c: * src/thwstr/thwstr.c: Update my e-mail address. 2007-10-17 Theppitak Karoonboonyanan * src/libthai.def: List only symbols in plain format, for Mac build. Thanks Vee Satayamas for the report. * src/Makefile.am: Add libthai.def as libthai_la_DEPENDENCIES. 2007-08-28 Theppitak Karoonboonyanan * NEWS: === Version 0.1.9 === 2007-08-28 Theppitak Karoonboonyanan * tests/test_thbrk.c (main), tests/test_thwbrk.c (main): Update check values, according to the new compound words support. 2007-08-28 Theppitak Karoonboonyanan * doc/Doxyfile.in: Update for doxygen 1.5.3. 2007-08-22 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (O Ang - Ho Nokhuk) * data/tdict-{common,spell}.txt: Add words. 2007-08-15 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (Ho Hip) * data/tdict-{common,geo}.txt: Add words. 2007-08-07 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (So Sua) * data/tdict-{common,district,geo,spell}.txt: Add words. 2007-07-20 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (Wo Waen - So Rusi) * data/tdict-{common,ict,scicence,spell}.txt: Add words. 2007-07-12 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (Ro Rua - Lu) * data/tdict-{common,science}.txt: Add words. * data/tdict-district.txt: Move non-province names to the bottom, so they are separated from provinces. Add two more names. 2007-07-09 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (Mo Ma - Yo Yak) * data/tdict-{common,geo,ict,science,spell}.txt: Add words. 2007-07-06 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (Pho Phan - Pho Samphao) * data/tdict-{common,spell,ict}.txt: Add words. 2007-06-30 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove rare words. Rearrange and add compounds. (Tho Thahan - Fo Fa) * data/tdict-{common,spell}.txt: Add words. 2007-06-25 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Remove more rare words. Move some compound words from -std to -std-compound. Add some missing entries found. (Restarted from Ko Kai - Tho Thung. We need more space to continue adding compounds from last commit.) * data/tdict-{common,ict}.txt: Add words. 2007-06-21 Theppitak Karoonboonyanan * data/tdict-std[-compound].txt: Add more compound words. Move some compound words from -std to -std-compound. Remove some rare entries, to make room for more entries. (~80% done) * data/tdict-{common,ict}.txt: Add words. 2007-06-18 Theppitak Karoonboonyanan * data/Makefile.am, +data/tdict-std-compound.txt, data/tdict-std.txt: Split compound words into a new file. Selectively add compound words. (Half done.) * data/tdict-{common,ict,science,spell}.txt: Add words. 2007-06-12 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (th_brk): Don't break between CR and LF. Remove last break if at string end. * tests/test_th[w]brk.c (main): Update test values. 2007-06-11 Theppitak Karoonboonyanan Redesign itemization code for th_brk(), aiming at Unicode UAX #14 compatiblity. * src/thbrk/Makefile.am, +src/thbrk/brk-ctype.{c,h}: Add character classification table, as well as operation table for breaking between all class combinations. * src/thbrk/thbrk.c (th_brk): Rewrite the itemization code, based on the break class table. * tests/test_th[w]brk.c (main): Update test values. 2007-06-08 Theppitak Karoonboonyanan * configure.in: Post-release version bump. * data/tdict-{std,common}.txt: Add words. 2007-03-03 Theppitak Karoonboonyanan * NEWS: Updated. === Version 0.1.8 === 2007-03-03 Theppitak Karoonboonyanan * tests/test_thbrk.c (main), tests/test_thwbrk.c (main): Fix word break check values, as white space handling has now been changed. 2007-03-03 Theppitak Karoonboonyanan * configure.in: Add AC_LIBTOOL_WIN32_DLL as required for Win32. * src/Makefile.am (libthai_la_LDFLAGS): Always pass -no-undefined to enforce all resolved symbols. Thanks Loïc Minier. 2007-03-03 Theppitak Karoonboonyanan * src/Makefile.am (EXTRA_DIST, libthai_la_LDFLAGS), +src/libthai.def: Add -export-symbols flag to limit exported symbols. Thanks Loïc Minier for suggestion. * src/thwstr/thwstr.c (th_wthaichunk): Declare the non-extern func as static. 2007-03-02 Theppitak Karoonboonyanan * data/tdict-common.txt: Added words. 2007-02-04 Theppitak Karoonboonyanan Yet another fix to white space bug in th_brk(), as spotted by Suppachoke Santiwitchaya. This is just temporary fix for use while the planned redesign does not happen. * src/thbrk/thbrk.c (th_brk): Allow break between Thai punct and white space. * src/thbrk/thbrk.c (is_breakable): Allow break between punct and white space. Remove rule that inhibited break between space and MAIYAMOK. It was not sufficient anyway, as the space before MAIYAMOK was still wrapped. * ChangeLog: Fix wrong date in previous commit. 2007-02-02 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (is_breakable): Allow break before white space. This fixes wrong treatment of whitespace in HTML in mozlibthai component, which caused glitches in webpages. 2007-01-13 Theppitak Karoonboonyanan * data/tdict-{common,geo,std}.txt: Added words. 2006-10-14 Theppitak Karoonboonyanan * configure.in: Post-release version bump. 2006-10-14 Theppitak Karoonboonyanan * ChangeLog: Converted to UTF-8. * NEWS: Updated. === Version 0.1.7 === 2006-10-14 Theppitak Karoonboonyanan * data/Makefile.am: Specify LC_ALL=C to make sure 'sort' always works. 2006-10-14 Theppitak Karoonboonyanan Fix 'make distcheck', plus a little enhancement on dict location. * src/thbrk/brk-maximal.c (brk_get_dict): Try openning dict at $LIBTHAI_DICTDIR environment before the default location. * tests/Makefile.am, +tests/test-thbrk.sh, +tests/test-thwbrk.sh: Added wrapper scripts to call test_th[w]brk programs with LIBTHAI_DICTDIR set to trie in build tree. * data/Makefile.am (EXTRA_DIST): Do not ship the auto-generated tdict.txt in source. 2006-10-14 Theppitak Karoonboonyanan * tests/test_thbrk.c (main), tests/test_thwbrk.c (main): Rearrange source. Remove some unnecessary variables. Adjust style. Fix warnings. 2006-10-13 Theppitak Karoonboonyanan * tests/test_thbrk.c (main), tests/test_thwbrk.c (main): Fix checking value for the length of the output from th_[w]brk_line() tests. 2006-10-11 Theppitak Karoonboonyanan * data/tdict-std.txt: Added some compound words. * data/tdict-{common,ict}.txt: Added words. 2006-10-01 Theppitak Karoonboonyanan * data/tdict-std.txt: Added some compound words. * data/tdict-{common,ict}.txt: Added words. 2006-09-19 Theppitak Karoonboonyanan * src/thbrk/Makefile.am (libthbrk_la_SOURCES), src/thbrk/thbrk.c, +src/thbrk/brk-maximal.{h,c}: Split low-level mechanisms to brk-maximal module. * -src/thbrk/cttex.c, -src/thbrk/dict2state.c: Removed unused files. 2006-09-19 Theppitak Karoonboonyanan * data/tdict-std.txt: Removed rare word (ยาจนก) which potentially causes wierd ambiguity. Added some more compound words. * data/tdict-{common,ict,spell}.txt: Added words. 2006-09-17 Theppitak Karoonboonyanan * TODO: Updated plan. Cleared what have been done. 2006-09-17 Theppitak Karoonboonyanan * data/tdict-std.txt: Removed rare words (มาระ, มาริ) which potentially cause weird ambiguities. Added some more compound words. * data/tdict-{common,geo}.txt: Added words. 2006-09-15 Theppitak Karoonboonyanan * data/tdict-std.txt: Added some compound words. * data/tdict-{common,district,geo,ict,spell}.txt: Added words. 2006-09-12 Theppitak Karoonboonyanan * data/tdict-std.txt: Removed rare word (มมาก) which potentially causes ambiguity. Moved entry (มาย) into its compound forms, as it alone can cause ambiguity. Added some more compound words. * data/tdict-{common,geo,ict,spell}.txt: Added words. 2006-09-11 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): Used is_breakable() to determine breakability at the end of Thai chunk, instead of hard-coded condition. * src/thbrk/thbrk.c (is_breakable): Added condition for Thai chunk ending. Also added condition so text is not breakable right after period, comma and semicolon. * data/tdict-std.txt: Broke "{เมทิล|เอทิล}แอลกอฮอล์" into two words. * data/tdict-{common,geo,science,spell}.txt: Added words. 2006-09-11 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (is_breakable): Added non-breakable cases: space + Mai Yamok; * + {right parenthesis|Khomut|...}. 2006-09-11 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (th_brk, is_breakable): Do not break after certain punctuations like left quote, left parenthesis, etc., also covering Paiyan Yai sequence. * data/tdict-common.txt: Removed Paiyan Yai. Added some more words. 2006-09-11 Theppitak Karoonboonyanan * data/tdict-std.txt: Removed rare word (ทิวสะ) that caused weird ambiguities. Added some compound words. * data/tdict-{common,geo,ict,spell}.txt: Added words. 2006-09-07 Theppitak Karoonboonyanan * data/tdict-{std,common,district,geo,ict,science,spell}.txt: Added words. 2006-09-06 Theppitak Karoonboonyanan * data/tdict-std.txt: Removed two rare words (การก, ผลอ) that caused weird ambiguities. Added some compound words. * data/tdict-{common,district,geo,ict,science}.txt: Added words. 2006-09-05 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_recover): Guarded against accessing beyond string end. * data/tdict-{std,common,geo,ict}.txt: Added more entries. 2006-09-03 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): Adjusted condition in previous change a little bit. 2006-09-03 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): (Optimization) In recovery mode, stop immediately when first solution is found. 2006-09-02 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_recover, brk_do): (Optimization) Remembered previous recovery result for reuse, cutting off a few repeated recoveries at the same position. * data/tdict-{std,common}.txt: Added entries. 2006-09-01 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (best_brk_contest): Adjusted condition so that equally scored solution that comes later overrides previous one. Longest matching is preferred as a result for such situation. * data/tdict-std.txt: Added three more words. 2006-09-01 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (th_isleadable): RU and LU are also leadable. And don't bother checking for Thai digits. They are never passed. * src/thbrk/thbrk.c (brk_do): Fixed wrong choosing of nodes with error at end of string. Added penalty for such cases, and made sure the break position is not marked. * data/tdict-{std,science,ict,common}.txt: Added & removed entries. 2006-09-01 Theppitak Karoonboonyanan * data/Makefile.am, +data/tdict-collection.txt, data/tdict-common.txt: Split collection sets into tdict-collection. * data/Makefile.am, +data/tdict-spell.txt, data/tdict-std.txt: Split common typos or variations into tdict-spell. * data/tdict-{std,common,ict,district,geo,science}.txt: Moved more words out of tdict-std. Removed more redundant entries. Fixed typos. Added more words. 2006-09-01 Theppitak Karoonboonyanan * src/thbrk/Makefile.am (dictdatadir): Added variable missed during the tdict split. * data/tdict-{std,ict,common}.txt: Moved some words out of tdict-std. Removed duplicated and redundant entries. Added some more words. 2006-08-31 Theppitak Karoonboonyanan * configure.in, Makefile.am, src/thbrk/Makefile.am, +data/Makefile.am, src/thbrk/tdict.sbm -> data/tdict.sbm, src/thbrk/tdict.txt -> data/tdict-{common,district,geo,ict,science,std}.txt: Moved tdict generation from source to data directory. 2006-08-31 Theppitak Karoonboonyanan === merged from datrie_wbrk-branch into HEAD === 2006-08-30 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): (Optimization) Unified the recovered node immediately. Chance is that it gets superseded, rather than picked up in later loop. Rearranged code to eliminate source duplications. 2006-08-30 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): (Optimization) When unifying converted nodes, clear all matches rather than just the first. 2006-08-30 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): (Optimization) When successfully recovered, stop walking immediately, increasing chance to be superseded earlier by better candidate. Also removed unnecessary check for str_pos < len, because it's guaranteed by brk_recover() when return value is not -1. 2006-08-29 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (+brk_pool_allocator_use, brk_pool_allocator_clear): Guarded the free list with ref count, for thread safety. * src/thbrk/thbrk.c (th_brk): Requested to use the break pool allocator at the beginning. 2006-08-29 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_pool_node_new, brk_pool_free_node): ~(Optimization) Kept freed BrkPool nodes for reuse in next allocation, reducing calls to malloc(). * src/thbrk/thbrk.c (+brk_pool_allocator_clear, th_brk): Cleared the free list when work is done. 2006-08-29 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): Calculated penalty for unrecoverable string with (len - recent break), not (strlen(s) - recent break). 2006-08-29 Theppitak Karoonboonyanan * configure.in (LT_REVISION): Incremented library revision. * src/thbrk/thbrk.c (brk_do): (Optimization) Do not contest best break when trie walking crashes in recover mode. It won't win recovery criterion anyway. Also got rid of one inner loop condition. 2006-08-29 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_recover): Do not try to recover after a leading vowel. 2006-08-26 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (th_brk): Tokenized mixed Thai-English text and called brk_do() chunk by chunk. * src/thbrk/thbrk.c (brk_do, brk_recover): Accepted string and length rather than null-terminated string, to support chunk-wise breaking. 2006-08-26 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_pool_delete): Adjusted code, for tiny performance improvement, esp. when deleting first node. 2006-08-25 Theppitak Karoonboonyanan * src/thbrk/tdict.txt: Manually revised word list. Removed some archaic or obsolete words. Added some new terms. 2006-08-24 Theppitak Karoonboonyanan * src/thbrk/thbrk.c: s/penulty/penalty/. :-P 2006-08-24 Theppitak Karoonboonyanan * src/thbrk/thbrk.c (brk_do): Calculated penalty more accurately by measuring distance from recent break pos, rather than the crash pos. Also added penalty on recovery failure. * src/thbrk/thbrk.c (best_brk_contest): Fixed boolean expression by adding parentheses. 2006-08-23 Theppitak Karoonboonyanan * libthai.pc.in: Added datrie to Requires. * src/thbrk/Makefile.am: Removed old dict before rebuilding. * src/thbrk/thbrk.c (th_brk_line): Added implementation. * src/thbrk/thbrk.c (brk_do): Be satisfied with terminal state only if the following character can begin a word. * src/thbrk/thbrk.c (BrkShot, BestBrk, brk_root_pool, brk_do, brk_shot_copy, best_brk_new, best_brk_contest): Added penulty on crash recovery, and considered it when contesting shots. This can prevent long crash shots from showing up as maximally matched. 2006-08-22 Theppitak Karoonboonyanan === begin of datrie_wbrk-branch === * configure.in, src/thbrk/Makefile.am, src/thbrk/thbrk.c, +src/thbrk/thbrk.sbm: Replaced old thbrk from cttex with my new version written from scratch. 2006-08-22 Theppitak Karoonboonyanan * configure.in: Post-release version bump. 2006-08-05 Theppitak Karoonboonyanan * NEWS, configure.in: Version 0.1.6. 2006-08-05 Theppitak Karoonboonyanan * configure.in: Update library version info, according to recent API additions. 2006-08-02 Theppitak Karoonboonyanan * configure.in: Disable debug by default. 2006-08-02 Theppitak Karoonboonyanan * configure.in: Enable doxygen by default. * configure.in, doc/Makefile.am: Use htmldocdir variable instead of pkgdocdir/docdir. Let default behavior install html under html/ subdir. * configure.in, Makefile.am: Exclude man/ subdir, and use doxygen-generated man pages instead. * doc/Doxyfile.in: Disable SHOW_INCLUDE_FILES, as showing include files included from the documented file just confuses readers in the man pages. 2006-08-02 Theppitak Karoonboonyanan * include/thai/thctype.h, man/man3/thctype.3: Clarify character level 2 and 3 in the document. 2006-08-02 Theppitak Karoonboonyanan * src/thinp/thinp.c: Use WTTOp enum instead of int, as per recent change in wtt.h 2006-08-01 Theppitak Karoonboonyanan * doc/Makefile.am: Rearrange the man pages. 2006-08-01 Theppitak Karoonboonyanan * doc/Makefile.am, doc/Doxyfile.in: Generate man links and selectively install man pages. 2006-08-01 Theppitak Karoonboonyanan * doc/Makefile.am: Use html.stamp target to prevent unneccessary generation of document. 2006-08-01 Theppitak Karoonboonyanan * include/thai/thctype.h: Fix HTML errors in documentation comments. * include/thai/thctype.h, man/man3/thctype.3: Fix typo. * include/thai/thrend.h: Fix errors in doxygen tags in comments. 2006-08-01 Theppitak Karoonboonyanan * include/thai/wtt.h, src/thctype/wtt.c: Add documentation from wtt.3. Use enum instead of #define. * man/man3/wtt.c: Revised. 2006-08-01 Theppitak Karoonboonyanan * include/thai/thctype.h: Add documentation taken from thctype.3. * man/man3/thctype.3: Revised. * doc/Doxyfile.in: Append "include" to STRIP_FROM_PATH. 2006-07-31 Theppitak Karoonboonyanan * include/thailib.h: Add main page using content from libthai.3. * man/man3/libthai.3: Fix typos. 2006-07-31 Theppitak Karoonboonyanan * include/thai/{thbrk,thcoll}.h: Fix typos in comments. * include/thai/{thwbrk,thwchar,thwcoll,thwctype,thwstr}.h: Edit comments for documentation. * include/thai/thwctype.h, src/thwctype/thwctype.c: Add missing functions corresponding to thctype: th_wcisthdiac, th_wcistaillesscons, th_wcisovershootcons, th_wcisundershootcons, th_wcisundersplitcons. 2006-07-31 Theppitak Karoonboonyanan * configure.in, Makefile.am, +doc/, +doc/Doxyfile.in, +doc/Makefile.am: Add document generation with doxygen. * include/thai/{thailib,thbrk,thcell,thcoll,thctype,thinp,thrend, thstr}.h: Edit comments for documentation. 2006-07-03 Theppitak Karoonboonyanan * src/thcoll/cweight.c (th_char_weight_()): Remove unnecessary check of c's range that always yields true. * src/thwchar/thwchar.c (uni2thai_ext_()): Fix loop condition that always yielded true due to range of data type. 2006-07-03 Theppitak Karoonboonyanan * src/thinp/thinp.c, src/thrend/thrend.c: Add missing . 2006-05-04 Theppitak Karoonboonyanan * configure.in, src/Makefile.am: Add check and condition for Win32 build with cygwin/mingw. 2006-03-13 Theppitak Karoonboonyanan * NEWS, configure.in: Version 0.1.5. 2006-03-13 Theppitak Karoonboonyanan * tests/test_thwbrk.c: Allocate more buffer for th_brk_line() output, fixing bogus bug that blocks the test. 2006-03-13 Theppitak Karoonboonyanan * tests/test_thwbrk.c: Print out the strings in problem when the result from th_brk_line() and th_wbrk_line() do not match. 2006-03-13 Theppitak Karoonboonyanan * tests/test_thcell.c: Fix bug in test_th_prev_cell() due to wrong variable referencing. 2006-02-18 Theppitak Karoonboonyanan * src/tkbrk/Makefile.am: Remove map.c from cttex sources, to fix compiling bug caused by building map.o with and without libtool. 2006-02-18 Theppitak Karoonboonyanan * configure.in, src/Makefile.am: Add -version-info into LDFLAGS. We start maintaining library version info from now on. 2005-10-28 Theppitak Karoonboonyanan * COPYING: Update FSF address. 2005-10-09 Theppitak Karoonboonyanan * configure.in: Formatted configure options help strings with AC_HELP_STRING(). Used --disable/--enable help style rather than --enable with default yes or no. 2005-03-15 Theppitak Karoonboonyanan * src/thrend/thrend.c: Add Mac PUAs for baseless Tho Than and Yo Ying, as well as lowered version of lower marks. * tests/test_thrend.c: Update tester accodingly. 2005-03-02 Pattara Kiatisevi * src/thbrk/: Debug information (default commented out) Some new words added to tdict.txt 2005-01-13 Pattara Kiatisevi * src/thbrk/thbrk.c: A space is considered and returned as a breakable point 2004-10-16 Theppitak Karoonboonyanan * NEWS, configure.in: Version 0.1.4. 2004-10-13 Theppitak Karoonboonyanan * src/thstr/thstr.c (th_normalize): Handle char of "Level 3". * src/thinp/thinp.c (th_validate): Handle correction of char of "Level 3". 2004-10-13 Theppitak Karoonboonyanan * src/thcell/thcell.c (th_next_cell): Check for acell.hilo before placing repeated SARA AM into the same cell. * tests/test_thcell.c: Add test case for repeated SARA AM. 2004-10-12 Theppitak Karoonboonyanan * tests/test_thctype.c (test_bool_funcs): Rewrite if-do-while loops with clearer while loops. Get rid of warning of range checking. * tests/test_thbrk.c, tests/test_thwbrk.c, test_thwchar.c: Add missing string.h includes. 2004-10-12 Theppitak Karoonboonyanan Handle the case of NIKHAHIT and MAITAIKHU, which can be in either above or top level. This behavior is defined as "level 3" in th_chlevel() returning value. * src/thcell/thcell.c (th_next_cell, th_prev_cell): Conditionally place character of weight 3 at above or top level. * src/thctype/thctype.h (th_chlevel): Document the "level 3". * src/thctype/thctype.c (_th_chlevel_tbl): Change levels of NIKHAHIT and MAITAIKHU to 3. * tests/test_thcell.c, tests/test_thrend.c: Add the test cases of NIKHAHIT and MAITAIKHU at top level. 2004-05-15 Pattara Kiatisevi * set the mode of cttex to firstmode=1 (we want it fast) 2004-04-08 Theppitak Karoonboonyanan * AUTHORS: Update e-mail addresses. 2004-02-22 Theppitak Karoonboonyanan * tests/test_thrend.c: Update check values as per new blank base glyph. * NEWS, configure.in: Version 0.1.3 2004-01-20 Theppitak Karoonboonyanan * include/thai/thrend.h, src/thrend/thrend.c: Use TH_BLANK_BASE_GLYPH as a base for floating upper/lower vowels. 2003-09-10 Theppitak Karoonboonyanan *** Stop using CVS-generated ChangeLog, as it's hard to read *** * include/thai/Makefile.am: List the missing thwstr.h. * man/man3/Makefile.am: Add EXTRA_DIST to include missing man pages. * man/template.3, man/man3/*.3: Change my e-mail address. * tests/test-thcoll.sh: Also remove out.txt, to pass 'make distcheck'. * TODO: Add TODO about normalization rules. * NEWS, configure.in: Version 0.1.2. 2003-03-23 Sunday 20:26 Theppitak Karoonboonyanan * ChangeLog (1.55), src/thctype/wtt.c (1.3): Fix TACio_op_[] data for (FV1,NON) and (FV1,LV). 2003-03-23 Sunday 20:23 Theppitak Karoonboonyanan * ChangeLog (1.54), include/thai/thcell.h (1.6), src/thcell/thcell.c (1.7): Add th_cell_init() function. 2003-02-02 Sunday 15:45 Pattara Kiatisevi * debian/: ex.package.doc-base (1.2), files (1.2), libthai0.postinst.debhelper (1.2), libthai0.postrm.debhelper (1.2), libthai0.substvars (1.2): -some more bullshits 2003-02-02 Sunday 15:44 Pattara Kiatisevi * debian/: conffiles.ex (1.2), cron.d.ex (1.2), emacsen-install.ex (1.2), emacsen-remove.ex (1.2), emacsen-startup.ex (1.2), init.d.ex (1.2), manpage.1.ex (1.2), manpage.sgml.ex (1.2), menu.ex (1.2), postinst.ex (1.2), postrm.ex (1.2), preinst.ex (1.2), prerm.ex (1.2), shlibs.local.ex (1.2), watch.ex (1.2): -remove these bullshits 2003-02-02 Sunday 15:35 Pattara Kiatisevi * debian/: README.Debian (1.1), changelog (1.1), conffiles.ex (1.1), control (1.1), copyright (1.1), cron.d.ex (1.1), dirs (1.1), docs (1.1), emacsen-install.ex (1.1), emacsen-remove.ex (1.1), emacsen-startup.ex (1.1), ex.package.doc-base (1.1), files (1.1), init.d.ex (1.1), libthai-dev.dirs (1.1), libthai-dev.files (1.1), libthai0.dirs (1.1), libthai0.files (1.1), libthai0.postinst.debhelper (1.1), libthai0.postrm.debhelper (1.1), libthai0.substvars (1.1), manpage.1.ex (1.1), manpage.sgml.ex (1.1), menu.ex (1.1), postinst.ex (1.1), postrm.ex (1.1), preinst.ex (1.1), prerm.ex (1.1), rules (1.1), shlibs.local.ex (1.1), watch.ex (1.1): -let's debianize it 2002-09-20 Friday 21:40 Theppitak Karoonboonyanan * libthai.pc.in (1.2): Fix Cflags to not descend to thai/ subdir in include path 2001-10-03 Wednesday 21:52 poonlap * man/man3/libthai.3 (1.1): Main manpage. 2001-09-30 Sunday 21:03 Theppitak Karoonboonyanan * ChangeLog (1.53), configure.in (1.18), include/thai/thwstr.h (1.2), src/Makefile.am (1.13), src/thwstr/.cvsignore (1.1), src/thwstr/Makefile.am (1.1), src/thwstr/thwstr.c (1.1): Add a quick-and-dirty implementation of thwstr. 2001-09-30 Sunday 18:48 Theppitak Karoonboonyanan * ChangeLog (1.52), tests/test_thwchar.c (1.4): Add tests for uni<->win/mac conversion. Use stderr in output messages. 2001-09-25 Tuesday 19:26 Theppitak Karoonboonyanan * ChangeLog (1.51), Makefile.am (1.4), configure.in (1.17), man/.cvsignore (1.1), man/Makefile.am (1.1), man/man3/.cvsignore (1.1), man/man3/Makefile.am (1.1): Add Makefiles for man pages. 2001-09-22 Saturday 15:19 poonlap * src/Makefile.am (1.12): Thwbrk is not listed in the library(typo-error), fixed. 2001-09-17 Monday 08:53 Theppitak Karoonboonyanan * AUTHORS (1.4), ChangeLog (1.50), include/thai/thwinp.h (1.4): Add K.Poonlap to AUTHORS. Rename thwciscompose() to thwcisaccept(). 2001-09-16 Sunday 21:59 poonlap * man/: template.3 (1.1), man3/thctype.3 (1.1), man3/wtt.3 (1.1): Create first man pages for thctype.3, wtt.3 Also template.3 2001-09-14 Friday 21:36 Theppitak Karoonboonyanan * ChangeLog (1.48), configure.in (1.16), include/thai/thwctype.h (1.3), src/Makefile.am (1.11), src/thwctype/.cvsignore (1.1), src/thwctype/Makefile.am (1.1), ChangeLog (1.49), src/thwctype/thwctype.c (1.1): Add a quick implementation of thwctype. 2001-09-14 Friday 21:07 Theppitak Karoonboonyanan * tests/: test_thbrk.c (1.5), test_thcell.c (1.5): Fix warning. 2001-09-14 Friday 21:05 Theppitak Karoonboonyanan * ChangeLog (1.47), src/thwchar/Makefile.am (1.3), src/thwchar/hashtbl.c (1.2), src/thwchar/hashtbl.h (1.2), src/thwchar/thwchar.c (1.7): Remove hashing. Use simple linear search, to get rid of memory leak. 2001-09-14 Friday 20:48 Theppitak Karoonboonyanan * ChangeLog (1.46), include/thai/thwchar.h (1.8), src/thwchar/thwchar.c (1.6): Use lazy creation for hash tables. 2001-09-14 Friday 00:54 Theppitak Karoonboonyanan * ChangeLog (1.45), include/thai/thwchar.h (1.7), src/thwchar/Makefile.am (1.2), src/thwchar/hashtbl.c (1.1), src/thwchar/hashtbl.h (1.1), src/thwchar/thwchar.c (1.5): Implement uni2winthai(), uni2macthai() with hash table added in hashtbl.[ch]. 2001-08-22 Wednesday 11:41 Theppitak Karoonboonyanan * ChangeLog (1.44), include/thai/wtt.h (1.2), src/thcell/thcell.c (1.6), src/thctype/wtt.c (1.2), src/thinp/thinp.c (1.8), src/thrend/thrend.c (1.10), src/thstr/thstr.c (1.3), src/thwchar/thwchar.c (1.4): Add comments. Check naming convention. Refine coding style. 2001-08-14 Tuesday 13:18 Theppitak Karoonboonyanan * ChangeLog (1.43), NEWS (1.5) (utags: r0_1_1): Release Version 0.1.1. 2001-08-14 Tuesday 13:16 Theppitak Karoonboonyanan * ChangeLog (1.42): Prepare to release Version 0.1.1. 2001-08-14 Tuesday 13:14 Theppitak Karoonboonyanan * configure.ac (1.3): Remove configure.ac. 2001-08-14 Tuesday 13:11 Theppitak Karoonboonyanan * configure.in (1.15), include/thai/thctype.h (1.8), src/dummy.c (1.2), src/thbrk/dict2state.c (1.3), src/thcoll/cweight.c (1.3), src/thcoll/cweight.h (1.3), src/thinp/thinp.c (1.7), src/thstr/thstr.c (1.2) (utags: r0_1_1): Require autoconf 2.50. Add --enable-ansi and --enable-debug flags. Turn on all warnings. Fix warnings. 2001-08-13 Monday 13:07 Theppitak Karoonboonyanan * ChangeLog (1.41), NEWS (1.4), README (1.6, r0_1_1), TODO (1.2, r0_1_1), configure.ac (1.2), configure.in (1.14): Version 0.1.1 2001-08-10 Friday 18:09 Theppitak Karoonboonyanan * ChangeLog (1.40), src/thrend/thrend.c (1.9, r0_1_1): Merge special case of NIKHAHIT with tone/ad in general. 2001-08-10 Friday 18:07 Theppitak Karoonboonyanan * ChangeLog (1.39), include/thai/thrend.h (1.8, r0_1_1), src/thrend/thrend.c (1.8), tests/Makefile.am (1.10, r0_1_1), tests/test_thrend.c (1.1, r0_1_1): Add test suite for thrend. Fix bugs in thrend: th_chlevel() typo; treat NIKHAHIT and MAITAIKHU with shift_left_tone_ad() in th_render_cell(); also shift top-level character left when collapsed with NIKHAHIT split from SARA_AM. 2001-08-10 Friday 15:25 Theppitak Karoonboonyanan * ChangeLog (1.38), include/thai/thcell.h (1.5, r0_1_1), src/thcell/thcell.c (1.5, r0_1_1): Allow null pointer to struct thcell_t to be passed in th_next_cell() and th_prev_cell(), where no cell data will be written back. 2001-08-09 Thursday 20:33 Theppitak Karoonboonyanan * ChangeLog (1.37), tests/test_thcell.c (1.4, r0_1_1), tests/test_thstr.c (1.3, r0_1_1): Add header comments. 2001-08-09 Thursday 20:27 Theppitak Karoonboonyanan * ChangeLog (1.35), tests/Makefile.am (1.9), ChangeLog (1.36), tests/test_thinp.c (1.1, r0_1_1): Add thinp test suite. 2001-08-09 Thursday 18:52 Theppitak Karoonboonyanan * ChangeLog (1.34), include/thai/thcell.h (1.4), src/thcell/thcell.c (1.4), src/thrend/thrend.c (1.7), tests/test_thcell.c (1.3): Change return types and arguments of thcell functions to reduce information redundancy. 2001-08-09 Thursday 18:13 Theppitak Karoonboonyanan * ChangeLog (1.33), tests/test_thcell.c (1.2): Add test_th_make_cells(). 2001-08-09 Thursday 17:55 Theppitak Karoonboonyanan * ChangeLog (1.32), tests/Makefile.am (1.8), tests/test_thcell.c (1.1): Add thcell test suite. 2001-08-09 Thursday 00:57 Theppitak Karoonboonyanan * ChangeLog (1.31), include/thai/thcell.h (1.3), include/thai/thinp.h (1.8, r0_1_1), include/thai/thrend.h (1.7), src/thcell/thcell.c (1.3), src/thinp/thinp.c (1.6), src/thrend/thrend.c (1.6): Rename struct thcell to struct thcell_t, for naming consistency. 2001-08-09 Thursday 00:52 Theppitak Karoonboonyanan * ChangeLog (1.30), include/thai/thinp.h (1.7), src/thinp/thinp.c (1.5): Change th_validate() to use a cell as context. Define struct thinpconv_t for describing input buffer conversion. 2001-08-08 Wednesday 20:58 Theppitak Karoonboonyanan * ChangeLog (1.29), include/thai/thcell.h (1.2), src/thcell/thcell.c (1.2): Add th_prev_cell(). 2001-08-08 Wednesday 19:49 Theppitak Karoonboonyanan * ChangeLog (1.28), autogen.sh (1.4, r0_1_1), configure.ac (1.1): Add result checking in autogen.sh. Add configure.ac for autoconf 2.50+. 2001-08-08 Wednesday 19:39 Theppitak Karoonboonyanan * ChangeLog (1.27), configure.in (1.13), include/thai/Makefile.am (1.5, r0_1_1), include/thai/thcell.h (1.1), include/thai/thrend.h (1.6), src/Makefile.am (1.10, r0_1_1), src/thcell/.cvsignore (1.1, r0_1_1), src/thcell/Makefile.am (1.1, r0_1_1), src/thcell/thcell.c (1.1), src/thrend/thrend.c (1.5): Split thcell functions into a separate module. 2001-08-08 Wednesday 11:45 Theppitak Karoonboonyanan * ChangeLog (1.26), src/thrend/thrend.c (1.4): Add guards for cells without base or hilo char. 2001-08-07 Tuesday 19:43 Theppitak Karoonboonyanan * ChangeLog (1.25), src/thinp/thinp.c (1.4): Remove uncommon predefined sequence correction. 2001-08-07 Tuesday 19:40 Theppitak Karoonboonyanan * ChangeLog (1.24), include/thai/thrend.h (1.5), include/thai/tis.h (1.2, r0_1_1), src/thrend/thrend.c (1.3): Fix NULL redefinition in tis.h. Change rendering function API to return total glyphs. Implement Win/Mac shaping. Implement string rendering functions. 2001-08-07 Tuesday 17:29 Theppitak Karoonboonyanan * ChangeLog (1.23), include/thai/thrend.h (1.4), src/thrend/thrend.c (1.2): Treat SARA_AM cases. Add is_decomp_am argument to determine its appearance. Redefine WTT "cell" for decomposed SARA_AM case. Add code for plain TIS rendering with SARA_AM concerned. 2001-08-07 Tuesday 16:12 Theppitak Karoonboonyanan * ChangeLog (1.22), include/thai/thctype.h (1.7), src/thctype/thctype.c (1.7, r0_1_1), tests/test_thctype.c (1.2, r0_1_1): Add consonant shapes classification in thctype, for the use of elegant renderers. 2001-08-06 Monday 21:08 Theppitak Karoonboonyanan * ChangeLog (1.21), configure.in (1.12), include/thai/thrend.h (1.3), src/Makefile.am (1.9), src/thinp/thinp.c (1.3), src/thrend/.cvsignore (1.1, r0_1_1), src/thrend/Makefile.am (1.1, r0_1_1), src/thrend/thrend.c (1.1): Add partial implementation for thrend (cell clustering). Change cell definition (WTT hilo byte encoding is too complicated). Use menomic TIS character names in thinp.c. 2001-08-05 Sunday 19:42 Theppitak Karoonboonyanan * ChangeLog (1.20), include/thai/thinp.h (1.6), src/thinp/thinp.c (1.2): Change th_validate() to take more context. Define conversion mechanism more deliberately. Implement th_validate(). 2001-08-04 Saturday 23:04 Pattara Kiatisevi * ChangeLog (1.19, r0_1_0): -before release 0.1.0 2001-08-04 Saturday 22:46 Theppitak Karoonboonyanan * include/thai/thailib.h (1.5, r0_1_1, r0_1_0): Resolve conflict. 2001-08-04 Saturday 22:32 Pattara Kiatisevi * include/thai/thailib.h (1.4): -sunCC prefers ((thchar_t) ~0) than ~((thchar_t) 0) (from P'Thep) 2001-08-04 Saturday 22:26 Pattara Kiatisevi * src/thwbrk/thwbrk.c (1.5), tests/test_thbrk.c (1.4) (utags: r0_1_1, r0_1_0): -casting 2001-08-04 Saturday 22:11 Pattara Kiatisevi * tests/test_thwbrk.c (1.3, r0_1_1, r0_1_0): -casting 2001-08-04 Saturday 22:08 Pattara Kiatisevi * tests/test_thwchar.c (1.3, r0_1_1, r0_1_0): -change comments to C-style 2001-08-04 Saturday 21:59 Pattara Kiatisevi * src/thbrk/thbrk.c (1.8, r0_1_1, r0_1_0): -fix missing casting between char * and unsigned char * 2001-08-04 Saturday 21:58 Theppitak Karoonboonyanan * include/thai/thwchar.h (1.6, r0_1_1, r0_1_0): Remove duplicated macro THCHAR_ERR (already defined in thailib.h) 2001-08-04 Saturday 21:45 Pattara Kiatisevi * src/: thbrk/thbrk.c (1.7), thwbrk/thwbrk.c (1.4): -change comments to C-style :( 2001-08-04 Saturday 21:40 Pattara Kiatisevi * tests/test_thbrk.c (1.3): -change comments to C-style :( 2001-08-04 Saturday 21:24 Theppitak Karoonboonyanan * tests/test_thstr.c (1.2, r0_1_0): Fix signed/unsigned char warning. 2001-08-04 Saturday 20:57 Theppitak Karoonboonyanan * src/thctype/thctype.c (1.6, r0_1_0): Remove weird characters. 2001-08-04 Saturday 20:41 Pattara Kiatisevi * ChangeLog (1.18): -hmm, do I always need to commit this ChangeLog? 2001-08-04 Saturday 20:35 Pattara Kiatisevi * tests/test_thwchar.c (1.2): -remove wprintf, useless 2001-08-04 Saturday 20:29 Theppitak Karoonboonyanan * ChangeLog (1.17), NEWS (1.3, r0_1_0): More detailed info in NEWS. 2001-08-04 Saturday 20:16 Pattara Kiatisevi * NEWS (1.2), README (1.5, r0_1_0): -move release information to NEWS 2001-08-04 Saturday 20:11 Pattara Kiatisevi * README (1.4): -more info in RELEASE INFORMATION 2001-08-04 Saturday 20:07 Pattara Kiatisevi * README (1.3), AUTHORS (1.3, r0_1_1, r0_1_0): -more descriptive 2001-08-04 Saturday 20:04 Theppitak Karoonboonyanan * configure.in (1.11), include/thai/Makefile.am (1.4), include/thai/thinp.h (1.5), include/thai/wtt.h (1.1, r0_1_1), src/Makefile.am (1.8), src/thctype/Makefile.am (1.2, r0_1_1), src/thctype/wtt.c (1.1, r0_1_1), src/thinp/.cvsignore (1.1, r0_1_1), src/thinp/Makefile.am (1.1, r0_1_1), src/thinp/thinp.c (1.1) (utags: r0_1_0): Add WTT 2.0 tables. Partially implement thinp. 2001-08-04 Saturday 18:08 Theppitak Karoonboonyanan * AUTHORS (1.2), ChangeLog (1.16), README (1.2), TODO (1.1, r0_1_0), configure.in (1.10): Release first version 0.1.0 2001-08-03 Friday 18:20 Theppitak Karoonboonyanan * ChangeLog (1.15), src/thbrk/Makefile.am (1.7, r0_1_1, r0_1_0), src/thbrk/cttex.c (1.3, r0_1_1, r0_1_0), src/thbrk/thbrk.c (1.6), tests/Makefile.am (1.7, r0_1_0): Make thbrk and cttex use thstr instead of fixline() and adj(). Fix a memory leak. 2001-08-03 Friday 17:51 Theppitak Karoonboonyanan * ChangeLog (1.14), configure.in (1.9), include/thai/Makefile.am (1.3), include/thai/thstr.h (1.1, r0_1_1, r0_1_0), include/thai/thwstr.h (1.1, r0_1_1, r0_1_0), src/Makefile.am (1.7), src/thctype/thctype.c (1.5), src/thstr/.cvsignore (1.1, r0_1_1, r0_1_0), src/thstr/Makefile.am (1.1, r0_1_1, r0_1_0), src/thstr/thstr.c (1.1, r0_1_0), tests/.cvsignore (1.5, r0_1_1, r0_1_0), tests/Makefile.am (1.6), tests/test_thstr.c (1.1): Add thstr, thwstr API set. Add th_normalize() implementation (extracted from cttex). Fix level table for top characters in thctype. 2001-08-01 Wednesday 20:13 Pattara Kiatisevi * src/thwbrk/thwbrk.c (1.3): -new implementation, not convert cutCode to tis620 back and forth 2001-08-01 Wednesday 05:21 Pattara Kiatisevi * tests/test_thbrk.c (1.2): -cosmetic on error messages 2001-08-01 Wednesday 05:20 Pattara Kiatisevi * src/thbrk/thbrk.c (1.5): -fix const casting problem 2001-07-31 Tuesday 22:03 Theppitak Karoonboonyanan * ChangeLog (1.13), src/thwbrk/thwbrk.c (1.2), tests/test_thwbrk.c (1.2): Fix changes affected by the revised thwchar. 2001-07-31 Tuesday 22:01 Theppitak Karoonboonyanan * src/thwchar/thwchar.c (1.3, r0_1_1, r0_1_0): Revise thwchar. 2001-07-31 Tuesday 20:51 Theppitak Karoonboonyanan * tests/test_thctype.c (1.1, r0_1_0): Add test_thctype.c to repository. 2001-07-31 Tuesday 20:50 Theppitak Karoonboonyanan * ChangeLog (1.12), tests/.cvsignore (1.4): Add .cvsignore entries in tests/. 2001-07-31 Tuesday 20:47 Theppitak Karoonboonyanan * include/thai/thctype.h (1.6, r0_1_0), src/thctype/thctype.c (1.4), tests/Makefile.am (1.5): Add test program for thctype. Fix many bugs in thctype. 2001-07-31 Tuesday 18:14 Theppitak Karoonboonyanan * ChangeLog (1.11), include/thai/thctype.h (1.5), src/thcoll/thcoll.c (1.3, r0_1_1, r0_1_0), src/thctype/thctype.c (1.3): Refine thctype interface & implementation (remove win/mac checking, add combining char checking, fix vowel class bitmasks). Make thcoll use thctype. 2001-07-30 Monday 18:43 Pattara Kiatisevi * src/thwbrk/.cvsignore (1.1, r0_1_1, r0_1_0): -.cvsignore 2001-07-30 Monday 18:42 Pattara Kiatisevi * configure.in (1.8): -add thwbrk 2001-07-30 Monday 18:41 Pattara Kiatisevi * tests/: Makefile.am (1.4), test_thwbrk.c (1.1), test_thwchar.c (1.1): -test drivers for thwbrk and thwchar 2001-07-30 Monday 18:40 Pattara Kiatisevi * src/thwbrk/: Makefile.am (1.1, r0_1_1, r0_1_0), thwbrk.c (1.1): -thwbrk implementation 2001-07-30 Monday 18:38 Pattara Kiatisevi * src/: Makefile.am (1.6), thwchar/thwchar.c (1.2): -thwchar uni2tis620-0 implementation 2001-07-30 Monday 18:37 Pattara Kiatisevi * include/thai/: thbrk.h (1.4, r0_1_1, r0_1_0), thwbrk.h (1.3, r0_1_1, r0_1_0), thwchar.h (1.5): -add new interfaces and descriptions. 2001-07-27 Friday 17:43 Theppitak Karoonboonyanan * configure.in (1.7), include/thai/thwchar.h (1.4), src/Makefile.am (1.5), src/thwchar/.cvsignore (1.1, r0_1_1, r0_1_0), src/thwchar/Makefile.am (1.1, r0_1_1, r0_1_0), src/thwchar/thwchar.c (1.1): Add half-implementation of thwchar. 2001-07-27 Friday 17:17 Theppitak Karoonboonyanan * ChangeLog (1.10), src/thbrk/.cvsignore (1.4, r0_1_1, r0_1_0), tests/.cvsignore (1.3): Update .cvsignore's in accordance with test_thbrk 2001-07-27 Friday 17:12 Theppitak Karoonboonyanan * src/thbrk/Makefile.am (1.6), src/thbrk/test_thbrk.c (1.5), tests/Makefile.am (1.3), tests/test_thbrk.c (1.1): Move test_thbrk to tests/. 2001-07-25 Wednesday 09:11 Theppitak Karoonboonyanan * .cvsignore (1.3, r0_1_1, r0_1_0), ChangeLog (1.9), include/.cvsignore (1.2, r0_1_1, r0_1_0), include/thai/.cvsignore (1.2, r0_1_1, r0_1_0), src/.cvsignore (1.2, r0_1_1, r0_1_0), src/thbrk/.cvsignore (1.3), src/thcoll/.cvsignore (1.2, r0_1_1, r0_1_0), src/thctype/.cvsignore (1.2, r0_1_1, r0_1_0), tests/.cvsignore (1.2): List more auto-generated files to .cvsignore's. 2001-07-25 Wednesday 04:31 Pattara Kiatisevi * include/thai/thbrk.h (1.3), src/thbrk/test_thbrk.c (1.4), src/thbrk/thbrk.c (1.4): -modified the th_brk_line to accept cutCode as char* instead of int. -modified according to the changed interface the test program. 2001-07-24 Tuesday 21:23 Theppitak Karoonboonyanan * Makefile.am (1.3, r0_1_1, r0_1_0), configure.in (1.6), libthai.pc.in (1.1, r0_1_1, r0_1_0): Add pkg-config metadata. 2001-07-24 Tuesday 20:14 Theppitak Karoonboonyanan * autogen.sh (1.3, r0_1_0): Remove ineffective warning message about 'configure'. 2001-07-24 Tuesday 20:00 Theppitak Karoonboonyanan * include/.cvsignore (1.1), include/thai/.cvsignore (1.1), src/.cvsignore (1.1), src/thbrk/.cvsignore (1.2), src/thcoll/.cvsignore (1.1), src/thctype/.cvsignore (1.1), tests/.cvsignore (1.1): Add .cvsignore to subdirs. 2001-07-24 Tuesday 19:51 Theppitak Karoonboonyanan * COPYING (1.3, r0_1_1, r0_1_0), src/thbrk/Makefile (1.3): Change license to LGPL. Remove excessive Makefile. 2001-07-24 Tuesday 19:49 Theppitak Karoonboonyanan * autogen.sh (1.2), configure.in (1.5), src/thbrk/Makefile (1.2): Remove 'configure' invoking from autogen.sh, output some message. 2001-07-24 Tuesday 19:41 Theppitak Karoonboonyanan * .cvsignore (1.2), COPYING (1.2), ChangeLog (1.8), INSTALL (1.2), Makefile.in (1.7), aclocal.m4 (1.3), config.guess (1.2), config.sub (1.2), configure (1.4), install-sh (1.2), ltmain.sh (1.2), missing (1.2), mkinstalldirs (1.2), include/Makefile.in (1.6), include/thai/Makefile.in (1.6), src/Makefile.in (1.6), src/thbrk/Makefile.in (1.6), src/thcoll/Makefile.in (1.6), src/thctype/Makefile.in (1.5), tests/Makefile.in (1.6): Remove autotool-generated files. 2001-07-24 Tuesday 19:31 Theppitak Karoonboonyanan * .cvsignore (1.1), Makefile.in (1.6), autogen.sh (1.1), include/Makefile.in (1.5), include/thai/Makefile.in (1.5), src/Makefile.in (1.5), src/thbrk/Makefile.in (1.5), src/thcoll/Makefile.in (1.5), src/thctype/Makefile.in (1.4), tests/Makefile.in (1.5): Add .cvsignore and autogen.sh 2001-07-23 Monday 04:44 Pattara Kiatisevi * src/thbrk/Makefile.am (1.5): -changed to use dynamic link instead of static for test_thwbk 2001-07-23 Monday 04:32 Pattara Kiatisevi * src/thbrk/: test_thbrk.c (1.3), thbrk.c (1.3): -fix the segfault in char* stuff 2001-07-23 Monday 04:30 Pattara Kiatisevi * src/thbrk/.cvsignore (1.1): -testing 2001-07-19 Thursday 06:43 Pattara Kiatisevi * src/thbrk/test_thbrk.c (1.2): -change to be non-interactive unless "-i" option is specified. -still segfault, not yet finished 2001-07-17 Tuesday 12:23 Chanop Silpa-Anan * ChangeLog (1.7): latest updated 2001-07-17 Tuesday 12:20 Chanop Silpa-Anan * src/thbrk/: Makefile.am (1.4), Makefile.in (1.4): merge map.c and map.h into one target, save typo error 2001-07-17 Tuesday 12:00 Chanop Silpa-Anan * src/thbrk/: Makefile.am (1.3), Makefile.in (1.3), map.c (1.2), map.h (1.2): Dynamically generate map.c and map.h in a build directory. Remove map.c and map.h from the repository. 2001-07-17 Tuesday 10:54 Theppitak Karoonboonyanan * Makefile.in (1.5), include/Makefile.in (1.4), include/thai/Makefile.in (1.4), src/Makefile.in (1.4), src/thbrk/Makefile.am (1.2), src/thbrk/Makefile.in (1.2), src/thcoll/Makefile.in (1.4), src/thctype/Makefile.in (1.3), tests/Makefile.in (1.4): Fix dependencies for test_thbrk, so map.c won't always be rebuilt. 2001-07-17 Tuesday 05:30 Pattara Kiatisevi * ChangeLog (1.6): -ChangeLog is now automatically generated by manually run ../bin/cvs2cl.pl :) 2001-07-17 Tuesday 05:27 Pattara Kiatisevi * ChangeLog (1.5): -add cvs2cl.pl 2001-07-16 Monday 17:54 Theppitak Karoonboonyanan * ChangeLog (1.4), Makefile.in (1.4), aclocal.m4 (1.2), configure (1.3), configure.in (1.4), include/Makefile.in (1.3), include/thai/Makefile.in (1.3), src/Makefile.am (1.4), src/Makefile.in (1.3), src/thbrk/Makefile.am (1.1), src/thbrk/Makefile.in (1.1), src/thbrk/Makefile.ott (1.1, r0_1_1, r0_1_0), src/thbrk/cttex.c (1.2), src/thbrk/dict2state.c (1.2, r0_1_0), src/thbrk/map.c (1.1), src/thbrk/map.h (1.1), src/thbrk/thbrk.c (1.2), src/thcoll/Makefile.in (1.3), src/thctype/Makefile.in (1.2), tests/Makefile.in (1.3): Add automake files for building thbrk. 2001-07-15 Sunday 23:35 Pattara Kiatisevi * include/thai/thbrk.h (1.2): -add th_brk_line interface 2001-07-15 Sunday 23:31 Pattara Kiatisevi * src/thbrk/: Makefile (1.1), README.TXT (1.1, r0_1_1, r0_1_0), cttex.c (1.1), dict2state.c (1.1), tdict.txt (1.1, r0_1_1, r0_1_0), test_thbrk.c (1.1), thbrk.c (1.1): -first version. -wrapper for P'Hui's cttex. 2001-07-09 Monday 21:54 Pattara Kiatisevi * src/thbrk/tdict-preparation/: Makefile (1.1), README.TXT (1.1), dictsort (1.1), dictsort.c (1.1), tdict.local (1.1), tdict.nonsorted (1.1), tdict.org (1.1), tdict.txt (1.1), nectec/adjv.txt (1.1), nectec/archaic.txt (1.1), nectec/conj.txt (1.1), nectec/exclam.txt (1.1), nectec/formal.txt (1.1), nectec/idiom.txt (1.1), nectec/local.txt (1.1), nectec/nibat.txt (1.1), nectec/nouns.txt (1.1), nectec/obsolete.txt (1.1), nectec/poem.txt (1.1), nectec/prefix.txt (1.1), nectec/prep.txt (1.1), nectec/pron.txt (1.1), nectec/raja.txt (1.1), nectec/riheads.txt (1.1), nectec/riheads_org.txt (1.1), nectec/riwords.txt (1.1), nectec/riwords_org.txt (1.1), nectec/slang.txt (1.1), nectec/suffix.txt (1.1), nectec/verb.txt (1.1) (utags: r0_1_1, r0_1_0): -tdict.txt preparation part from cttex with some modifications 2001-06-15 Friday 19:01 Theppitak Karoonboonyanan * ChangeLog (1.3), Makefile.in (1.3), include/thai/thctype.h (1.4), src/thctype/thctype.c (1.2): Add th_isdiac() API. Add function body for thctype functions. 2001-06-14 Thursday 10:29 Theppitak Karoonboonyanan * ChangeLog (1.2): Add ChangeLog item. 2001-06-13 Wednesday 22:35 Theppitak Karoonboonyanan * Makefile.in (1.2), configure (1.2), configure.in (1.3), include/Makefile.in (1.2), include/thai/Makefile.in (1.2), include/thai/thctype.h (1.3), src/Makefile.am (1.3), src/Makefile.in (1.2), src/blank.c (1.2), src/dummy.c (1.1, r0_1_0), src/thcoll/Makefile.in (1.2), src/thctype/Makefile.am (1.1), src/thctype/Makefile.in (1.1), src/thctype/thctype.c (1.1), tests/Makefile.in (1.2): Add thctype implementation (first draft, so dirty) 2001-06-12 Tuesday 20:18 Theppitak Karoonboonyanan * Makefile.am (1.2), configure.in (1.2), include/Makefile.am (1.2, r0_1_1, r0_1_0), include/thai/Makefile.am (1.2), src/Makefile.am (1.2), src/thcoll/Makefile.am (1.2, r0_1_1, r0_1_0), tests/Makefile.am (1.2): Add $Id: ChangeLog,v 1.171 2009-01-08 14:58:07 thep Exp $ 2001-06-12 Tuesday 20:14 Theppitak Karoonboonyanan * src/thcoll/cweight.c (1.2, r0_1_0), src/thcoll/cweight.h (1.2, r0_1_0), src/thcoll/thcoll.c (1.2), tests/test-thcoll.sh (1.2, r0_1_1, r0_1_0), tests/thsort.c (1.2, r0_1_1, r0_1_0): Add $Id: ChangeLog,v 1.171 2009-01-08 14:58:07 thep Exp $ 2001-06-12 Tuesday 20:12 Theppitak Karoonboonyanan * AUTHORS (1.1), COPYING (1.1), ChangeLog (1.1), INSTALL (1.1), Makefile.am (1.1), Makefile.in (1.1), NEWS (1.1), README (1.1), aclocal.m4 (1.1), config.guess (1.1), config.sub (1.1), configure (1.1), configure.in (1.1), install-sh (1.1), ltmain.sh (1.1), missing (1.1), mkinstalldirs (1.1), include/Makefile.am (1.1), include/Makefile.in (1.1), include/thai/Makefile.am (1.1), include/thai/Makefile.in (1.1), src/Makefile.am (1.1), src/Makefile.in (1.1), src/blank.c (1.1), src/cweight.c (1.2), src/cweight.h (1.2), src/thcoll.c (1.2), src/thcoll/Makefile.am (1.1), src/thcoll/Makefile.in (1.1), src/thcoll/cweight.c (1.1), src/thcoll/cweight.h (1.1), src/thcoll/thcoll.c (1.1), tests/Makefile.am (1.1), tests/Makefile.in (1.1), tests/sorted.txt (1.1, r0_1_1, r0_1_0), tests/test-thcoll.sh (1.1): add building system 2001-06-11 Monday 21:16 Theppitak Karoonboonyanan * src/cweight.c (1.1), src/cweight.h (1.1), src/thcoll.c (1.1), tests/sorttest.txt (1.1, r0_1_1, r0_1_0), tests/thsort.c (1.1): add a draft thcoll implementation 2001-05-18 Friday 11:51 Theppitak Karoonboonyanan * include/thai/: thailib.h (1.3), thcoll.h (1.3, r0_1_1, r0_1_0), thinp.h (1.4), thwcoll.h (1.3, r0_1_1, r0_1_0), thwinp.h (1.3, r0_1_1, r0_1_0): size_t definition in , strict_t to thstrict_t in 2001-05-18 Friday 01:15 Theppitak Karoonboonyanan * include/thai/thinp.h (1.3): Change the spec (comment) of th_validate() 2001-05-18 Friday 01:07 Theppitak Karoonboonyanan * include/thai/thwchar.h (1.3): fix arg & return types of uni2* 2001-05-18 Friday 01:04 Theppitak Karoonboonyanan * include/thai/thbrk.h (1.1): use thbrk.h for 8-bit code, to prevent confusion 2001-05-18 Friday 00:58 Theppitak Karoonboonyanan * include/thai/: thailib.h (1.2), thcoll.h (1.2), thctype.h (1.2), thinp.h (1.2), thrend.h (1.2, r0_1_0), thwbrk.h (1.2), thwchar.h (1.2), thwcoll.h (1.2), thwctype.h (1.2, r0_1_1, r0_1_0), thwinp.h (1.2), thwrend.h (1.2, r0_1_1, r0_1_0): Add comments. Fix many declarations. Add thglyph_t. 2001-05-17 Thursday 23:12 Theppitak Karoonboonyanan * include/thai/: thailib.h (1.1.1.1), thcoll.h (1.1.1.1), thctype.h (1.1.1.1), thinp.h (1.1.1.1), thrend.h (1.1.1.1), thwbrk.h (1.1.1.1), thwchar.h (1.1.1.1), thwcoll.h (1.1.1.1), thwctype.h (1.1.1.1), thwinp.h (1.1.1.1), thwrend.h (1.1.1.1), tis.h (1.1.1.1, r0_1_0) (utags: libthai_0_1): first draft API 2001-05-17 Thursday 23:12 Theppitak Karoonboonyanan * include/thai/: thailib.h (1.1), thcoll.h (1.1), thctype.h (1.1), thinp.h (1.1), thrend.h (1.1), thwbrk.h (1.1), thwchar.h (1.1), thwcoll.h (1.1), thwctype.h (1.1), thwinp.h (1.1), thwrend.h (1.1), tis.h (1.1): Initial revision