From 145626550396ebfb1ee66f8942e07ab6a63c1ba8 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 8 Dec 2009 16:42:38 +0000 Subject: [PATCH] Merge from V5_1_3_BR branch (07/12/09) --- Makefile.am | 10 + configure.ac | 16 +- doc/Makefile.am | 31 +- doc/dev_guide.pdf | Bin 88787 -> 0 bytes doc/dev_guide.txt | 303 ---------------- doc/doxyfile.in | 74 ++++ doc/index.doc | 666 +++++++++++++++++++++++++++++++++++ doc/static/doxygen.css | 170 +++++++++ doc/static/footer.html | 12 + doc/static/header.html | 12 + src/PYHELLOGUI/PYHELLOGUI.py | 13 +- 11 files changed, 991 insertions(+), 316 deletions(-) delete mode 100644 doc/dev_guide.pdf delete mode 100644 doc/dev_guide.txt create mode 100755 doc/doxyfile.in create mode 100644 doc/index.doc create mode 100755 doc/static/doxygen.css create mode 100755 doc/static/footer.html create mode 100755 doc/static/header.html diff --git a/Makefile.am b/Makefile.am index 3eead60..baf9fc9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -41,3 +41,13 @@ EXTRA_DIST += \ dist-hook: rm -rf `find $(distdir) -name CVS` + +usr_docs: + (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs) + +docs: usr_docs + +dev_docs: + (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs) + + diff --git a/configure.ac b/configure.ac index e109a99..c31f543 100644 --- a/configure.ac +++ b/configure.ac @@ -146,6 +146,14 @@ echo CHECK_QT +echo +echo --------------------------------------------- +echo Testing html generators +echo --------------------------------------------- +echo + +CHECK_HTML_GENERATORS + echo echo --------------------------------------------- echo Testing Kernel @@ -169,13 +177,12 @@ echo --------------------------------------------- echo CHECK_CORBA_IN_GUI + if test "x${CORBA_IN_GUI}" != "xyes"; then - echo "failed : For configure PYHELLO1 module necessary full GUI !" + echo "failed : For configure PYHELLO module necessary full GUI !" exit fi - - echo echo --------------------------------------------- echo Summary @@ -183,7 +190,7 @@ echo --------------------------------------------- echo echo Configure -variables="python_ok omniORB_ok qt_ok Kernel_ok" +variables="python_ok omniORB_ok qt_ok doxygen_ok Kernel_ok" for var in $variables do @@ -224,6 +231,7 @@ AC_OUTPUT([ \ bin/runAppli \ bin/Makefile \ doc/Makefile \ + doc/doxyfile \ src/Makefile \ src/PYHELLO/Makefile \ src/PYHELLOGUI/Makefile \ diff --git a/doc/Makefile.am b/doc/Makefile.am index 6e3f6da..58b662c 100755 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -21,6 +21,33 @@ # include $(top_srcdir)/adm_local/unix/make_common_starter.am -dist_doc_DATA = dev_guide.pdf +EXTRA_DIST += static -EXTRA_DIST += dev_guide.txt +usr_docs: doxyfile + $(DOXYGEN) doxyfile + +docs: usr_docs + +dev_docs: + +clean-local: + @for filen in `find . -maxdepth 1` ; do \ + case $${filen} in \ + ./Makefile | ./doxyfile ) ;; \ + . | .. ) ;; \ + *) echo "Removing $${filen}" ; rm -rf $${filen} ;; \ + esac ; \ + done ; + +install-data-local: usr_docs + $(INSTALL) -d $(DESTDIR)$(docdir)/gui/PYHELLO + @for filen in `find . -maxdepth 1` ; do \ + case $${filen} in \ + ./Makefile | ./doxyfile | ./doxyfile.bak ) ;; \ + . | .. ) ;; \ + *) echo "Installing $${filen}" ; cp -rp $${filen} $(DESTDIR)$(docdir)/gui/PYHELLO ;;\ + esac ; \ + done ; + +uninstall-local: + rm -rf $(DESTDIR)$(docdir)/gui/PYHELLO diff --git a/doc/dev_guide.pdf b/doc/dev_guide.pdf deleted file mode 100644 index a459804b2a42131245f7cc727267ef35897315a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88787 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%0A-~mY zdk&A==(h_eK=p}Kl|Ja74XA^oAFZo#zj+>v1s?|$sTTRIKc`i~Uob@~q)D4*4_v!T zv8*)u&6$op*iS{jq{li|G6uu);{l$*B@Gl@|0Km%ZQh) z`&xYntr9m#4GNX|gfa+a$!;&xt}!T8x4>R^E_WWV)O5BmtkZblHQ8}jlHBK|udUjv zd!ux*_$Upves7s?m#$ylTWi-Tm((C_=GP?b=zSIk3iBrCB+XMWI3sDP_p$wPc< z2bN+nQ;DXZckPSL^yzNyrb;1+;ZYR4029J}?ja{+Wdi#USj;hw9&P3phN)AI&i7~& z)u#j+@)W^@3wbc2<#~tVyPmo0$?g~TO)lU*N491OUbf$`PR#NI)us~iyCgBGg(Zrl znByfqkJqh4gl9gUP+H1Ch?L~OlED{L8JBvj-n(PkMkIXkK7q2>2!Os zGlmJ%W@79sTdA}S53ZJ>jh3}6s+GH*N!}AeeQY7D;Uf<2>P=-gj1S|Tj9vVd52DaX zA2+(xTDc6xv$%Ey6hr1R+}bwp=0CdzFZvR}3EIAXN88zu|3kY>b87d8#NxC>qNn-l zN?Z&Kv#RqR>VEW#+*u^I+D)VP1O%@c$*&q zCFt>WRqz<9Gs#-7o~dF>q_^G;(U_OASz8pv-a z+m1kbWIj+u{`hs{^3@@R_z1uCH3t3X*F^Di=1@Rm19ZU_H@*hwkhixG-ZAD0U<$?0 z@Ma2ptY$o&?$f?`!QvX`dzO1|Ux{*E#8*?G)h$eDg!PZVdDxyp#)`*pP2u3QE0Dxa zJU8GAx}9N!Qb=9b<8PNjJZ@WCvy>4VavK{AK(^v=ViI7`ie>L(vdX(nFca6I3N zn&Z_PP-3Ks`7pJx*@)F^!r0ky?_F$VR-O}DmHz#;c(AM)j_!N+km#gJv9bQucTe^w zMb;rI5bx1w^x(l(WmF$#y~Jem6&;X`U%Hw9u;#sY)jMf~cVj(nwJMN3yB;jEBkPr? z*hq?LrC6LDA06I0_kNNipQiA2Ce(|a<({o`4WvKrYU7TXIl|>SQloc>`@Y6ABcCU2 zJqkIH)T{9K`wiNyJqdC)viYU#0tv#T+Phy4r|&ym645a$rX<9=D)qwr0x2an8q?lv z2>7DEw&n0eH}po@(js&ZGS3FTL0Fj$S=*N>n_z)k0*@WC<;Q%?#;kY2PyIts{c+pY zaM;a_Vxz4gklIpC`n$2b1{0636`A`Ja`GcxU44p}P=~!a(3@#4_X<_8?1H?Z4pXLh zi-RrVaJe$5_bCH{fmvJV#R;3wQ@V04OU)%Sx!T?9w{MC>|m<-6UiKaln5 z*1x#!MwM2#D7qF2>qAEOE--T`YG}JiI(rxQ>h&0;YTNEdG!ZwGpu|(-2}~rkwB478 z>4u(KlRZ}}tv1x>`}THp+`@V#aG9dbZzg_OdM&VXZwaL-v6o0!%LkpCGaNf~a#}7A}TSRF7?p;~JXZ=+}8Q6?G+aU*$42f=&5rWEU`9qa2z6 zoc+29>k-0z`j2Dh_~Fo>Got7F;V0AYuYNf6f30ylJMZs@UwOjEzx2alzk7G*0YdtFq({|fkb@9rF6E+~|R9jJ!;JLTWqyK{g!xj9(C=K}xk-u+j=zq@zm z0doO$ebDoK>7T=gzcSZ97askTlK$n~nSbTpaet2zFn=6$1RO%BeQc^H$3}ne_aEMV zw}kWGo>=KIl5;Ubzw7c3Z~u|2vtaIg*b|rkk92{`xDx|BANFiX=MQiHk*l*xwew*) z{!v!IVLt!B)md@p`IyhPT%G^+Y~$G<-u@$3XPXnxhdn!%=nrrIQC9zGR*)ZudTK&} zuNem71P;eKx%*+45ZL#D6H^n)2`tZnpgzF1rMA0o(AnL9pW%Fb)6&2GlhI=Qjad z9X~$#ae9RUfg}vX4mp0!_0v5kl=J)3(|4S}y4NXEP6$wrdUnqS1@4b`SaN`lAx>MI zLYzM30&@WrPoHpe!dTePAb+$zZNULO?mGvN`T(xSb-Lf%oxX*!gMsI#_b1oCg!tFD z&k5vA{{O%K&t&kE$iL@RFf{?A{^{|L?~n`7#PJ_DkRLg_vO|vTk{w7AK|!1+Hu|S4 zjDs6!dHlT`?>GkR`UDaN7|baIa6TCfXaMZ21!{yr$Is7jvjIlJ3HSx4bWdBK-v8B# zuHO>-m(9{^(Wr`{qyfUeed-#XD2;i2M&z}ah_a{f1mah$_*3_pY;=v4Lb-p z84dWPpy1;V;rI(?2cUuT`am2I?vozEfHWTr#03S4yN^$0JN^n!8^Aa?fJacSV+oz! z!`Ok6<`Z>5VL;Ld`1(1HnK=0%@cFOy)B){LC=B`b@J}i z5>DHlTz@jY?>-q|ldxk(I8R2@(<=vyP3*TnC{PQ)0mu*- z&ww{jHsGM_(_#DMH}}a12^iqXsC$Cy6yfRh803`9Uw5aY|97${!!P^E^#uJ-7}$Se z@A%!n{rj2z>HR514(KuKr`OXb$6bShkB8vz-8z{&juXbf(8_r{4M0!kisN?dfGY<~ zJwNsHSPR?`;2=cM37!+qPhr1fKb@?;Ph=-zJEjNxLBPN)0U-bWlj~&u_)B2F-~ILb zRD0jGaf0~t{wM97JUxZ@{`7>_>67oOIJJahk)Gb2v|vA(LfKE|*6#}W>Fue2I8R!h zTz@jOA3h%!V3WXf29&4(*Z+sKw~UTt*Rq7o%;hpOm6@5DnVFfHnVF%?%*ukUj1Q>9Du>;&ofPWQWz5qjo0dS{T z|CIh!lL^oqU0P_MsMFGsUzk2vr zpMSN-0q7a!JO<#_h@L~oj*xz2HzS?K44(WO`sdk&MzRd2{ecZbbWI>{-v&toPa=|jU1;0$~7n) zl;6-01jrIHzsduepTM7G{wKUXbbUxa)RV7;V!%o- zaKR^|Rwviz+5xaYTY)g}vfubVP@b^nfI;jgkX1N5a4sj#0({`Fn@_?sz9_0rF3yUe zY~Pemp7PI|pzOTZ%};D#H%C{uAOavudn+iAhur*^c)y6GFs=_Z?5}Kf#PgB}re{#V zzdy&pTvS3m1*-J;H>%EoSoOu!M(w!3Oy6@+j!nv_>#&0R#ve1$&ciZc!P)v z_Iu?6RDtK>BcLCM_ZVL|CKK@iQ8*>=6I7u++>hW?XyYRfh;sRr?c=fg=lDRkw+EQQ zFL$uuXTM??;K5+ww@O!4n84tw;~=2!Z& z&4kaGAIi=q;JzTU$WPhN$H3JZd^MgY^4L?vB1LWAmPpKqZl*`W(#MZj8f0;Uvvc{@ zNjo?$)y^W;+0Y*m;ZPir;Y!@a*C|K!Wp}Gf`P)xovh}a^sf{W*Yx0_W6~k&0QS0=Y zhaC#4zi+I0*??=B=XpAGm9#Oa3sZ1J1BFn`ieBz(N>=T{%H1m#f6d8OeY;+@--#zG z@SpDsXse6Pzy*3x-x;_`DB_}7fC)BXDKVu}72MbN0o4;i}pZ$L3bny%`W}Bap7Jo(Kv=ox31kVby*3} z`h+Nz#LV1OW-R8phzKIy&K-OvPstSz+WZi@1%B8B-Ye_6vbFFCS+8Okeuigcu;$Zq z8lN?8CubOJpzFS3W4SjlU5|YcY|||@!SQokIbYMgr>C^P%$tI60ALpNDx~uWGN6Bl(EAc%U$TX&oNiL($=!Nc{wd0yKb?mLtRKFOm7P{L+Aa2D2f#bun>~F+lLJpGiVv=j- zLnnLvsFHu!+{VnkD42-!Z<(o6amuosKS1qK;4`~Exg{~*4SAIdnrrt*|a^nISDnV6_6C{6by8jfrwQ?UN{gGmWhjCbCl?TZ> zPMz2dQk#GzyCdtI)QG_1?uI?{WwD60oqn#5#;iS~u;z?K z83{y0R79-g8ld|pA=2Icf)mr+AXtQOVlnJ}Yxtq?1ftg%OKq!m3y^GqR3eG-)_gN- z=uSF9{g%mVERiaMNzG1nJXKPXKU~8N9F5muHx=OFGbFsb@tAdFR0DOP7F3f^dzLs@ zOCo(2d~x-RLcBR7cORfZ7B`L#eMr%y+U8ET@LO~@DQhI58W%Nyc4}Oyzn(v!*PxC3 zFy``zy%g{Fq1m@DW`9cElrsMyl8 zN*EOGTsa#BzvdY3gMUSqm5&WkUd5AHrk2@M`x!5XsCl!G5ahYW>A}_G#W6pN!LWIi z#EM&KpDdkF-+1Q@r>blGQp3JJR#7egTXlrb2=5|af(q7)HBU6WiJbF&X$HspR&2~&Zhd`PfMd-+L2sG$ zZTS^F>)O~i@G37Om?{m)%sUdB9nKG9(!m z@Gel02E7~vWqW-K$14R}Dz3M7*pklV^R_2!(VdU-lg%xrMhG%e-*i_dz$9O-Er;EB8R|=c5h})erMGH$ec%#*C4nhy%)k?$dTjEga z(!sOI@`0qZVwFq1DsV~}E$3*_b){XQTs6{-9Wk+mnX=elc)nUD^z6s;%`P6u-`klU zlYZzxR^$Blb5(_t;k ztzqg^qoN0GGu@3ixtysVO|FvDUuP3-wPPr3-_TRZphiY_pzu&E=R8#}#}9F0X=mbI2-0Jaz5KadQ4)7G_%Mmi_=#p&$yA{#al4np=zf2@vez%)O;B)MX& z1Y9YO%wp}y`wl0egCgQ6&Llo0xxmjypw8LCK|A95>j14*RIpC{2B;nmApr%RR9I*N z*<-=Y;}yC0Jm^Bm)fc>zHjvvT+O}O(bWUJ)0rvBZay(eFBN=bf;b2wlAP*&VNZpG# zX3L%u7j)h#fO%fPldfI!P%pz{s$F7X(-_iIwR`lbA#YgG_dsuS9or+Tap7XRys=yi zNmLMGtIO~wRiZCfVBi_`@<^aEiCv+f{1Rib9es5)ajj0Q?vM!k29fpdUmY<+Dv^Kocr`RMlLzF#+Ky zS->R5<}1ZwaEN=S%7K^|zMg!q*Is&j*X~@&OLkpe3Y>-MMVz_jFgOo8U$hoV@w2s? z^lU1%FO68VAATW6-d}Op;D%#~ALP)B!{$0?UNTzqCI84PLfVue-=zO$hMl^q$*I4L z_s!wdslj}v)aAv2aB(KiiG5enncjhQctMk4ne)u%H+q7+i%pE{f~n?Qbx8@og(^4_ zaoO2keBG&Oy}8~P%gYIa2AqePXRDypRXhRKKpXuFlQ*VANiE58LFkRZX^9;gW?7ln4*0O;a)docC_I5T@K5UO5#v!qH(6K*#LKeRFL6M* zdLUbB@Ao@k;ysNG;4g2^;7U{}YsqMvqjX`z;YB#X@O32Z;UeLaCH2jy#TmN?Wsvl&FFpwJc) z44tD7sXRjZJUwlf(+fpXiNT?ws+A)_wJM-N`*K4;9=;)^ocQfUnpZlq1b}^qn$cbgvw`S+9SKFkWB7i;)P2;>H@g&U5rK{P%To();$N07_XVLVkhE0<9=XfoUSW-=;JX@AYYn(ZQY_Ci6CB6WKtQZjEjUO!<{Reu zD0_^VxhF;8A}!~9{hdB@`!YkdRWVVEC_{mME^_)+g}=M=LyYMDcJo*+ml@7VzQ>Tx zw&$1?<(K(Vhnv2)ylMjK`76%j6KBq_XqhSYI3Y7x9hjsqJ@_D*SF%0R+AUUGFKrq9 z+lY4%KQ@^ZV52I9#=ZIaWGHtGW#)y>IE<1i3Ga`Z%IL0HS9Mt4IH{=z6Z$1sNo+0_ z#3};rpEtcE2Tt9TTi=*_*{i@cu|Q^(`y8srJzQZMxetgDT@SE9bRy}J*k>;1wLh@( z>fUyLqrYWtsvgYpYE;l+SH8>hrb?QQCavxZ44y7KkAN~eyCp5EY`n?KdP`*Vd)Jbh zLHV_voZ-i?q_3v89`OADYq~j@g9caXMw2p#KWK5yaIQlr(?H4hIlR{q4bBuf3~}Pe z8362*7(8Xh!wzm+k@tuvFeQcPMHYP!$|I8S5TS~2I9+x3OOmhx)`99d+pv-;Xr0Yw zK}8?WA7+nIY8~j`0ET$FQEt8YPS-%JVdrLhnf@zdz%I47#dFt3oF`&WM3Q=0E|y-8 ztOAOb&|1eW#at3m^-*zo<#O<~?Q8Fvz>e?SfmMo~HZ+4-%wXVEaXC%@xP%H+r(O4b z^-pMJwk5V-#aAiMW1Msp$;#5HQ!z6`MlrpeGj}5FYY*MPBx%?}Nxex;-SO4xbXb$$ z9uh$&yQ56~(r=}C7LAB#veKBj3N;jYqV4<9X`y4}>}9K@6*2X1e4ABsvzEQjPfy*9 zyA*hVlQH*mEuVq6pk^Wke|whPIT`!-+5fy|TGBG{VV=9tzhTlb?VKfjg@DSn@Vm%@ z@US)2qigSBN!E5A@<%lE4QB7lL(Mm|Jl&nB8$|12*)vgE+}{>gVEfr+fvT42Ilq?7Ypml~7$3@@KRNUGkvjTHH(4Gj?tSXu zw1jt*SL(1m#Jn6lMrAE}!{%5BV|G4--&(SuzDuzOJ@J0#anHRIvP7EwO>_X6K-=#w zE@Kb;5D;K#=SB=RuE#g%oOdB*LJI-O*eQ?uCbo`AuV!OsSq}LJ{RYJN|pxrfN}uMO=c|Kl&F7e z&6d}V5+>$w@H~^l>oDWi^qau1xcUZPwKSqh88q)p`lkrVV9tgcL)%I(3SnA%XxlIk zw)A?Mg{JqDqh*-42=(X^k@!d-$i|kdp}pcZNe}1!>|G|8{<4@>M-oS|R)<7-getp? z)XGPMEM}hz=op`XX`0hES&X8Tcd=y$l3{4b=5T7y+YwVKHg3N_^?DV*HVx>TQNIxv z#UZb#G9MAkHeS$d1ij$?c5WjPa84YUpXcVQdaO|JD%=^<1afhihQ1%mCnlhTh#rQy z(;TD^&T4o58QMnNiY20Rn43$)62*K7&IUA!Uxti0d$CThpr$z-j5)Dy3avWAv`{XQ zZ8@1+Cx)A9dg#;{7R0MLoWL1N&OC#J4o+HbBNG#BQ>bzuKfE)l+DXYCTbJ^A2dEnR zR)sD2Qwl4Mb?a;5;qjX2wxr!Rjr>|STT*pi{10CaGJQoIB-|I1tD1tdOgGOUWyi1X z*pJ7`GE36}Mp}v5)C4RhmJGB_P*vX9ZJb+Mhfg@6z#|d4)sIVTuO!Hc3VUQ?5y^JB zZC<0oR{aYVX05Lvl)fdG%W_HGbX@h9W##D)V%e<@?CzX@X`7+dWaX_2H<=#SYIN~- zRui?X%Fu3YrHX<1p)(7QcG1wVd^hI#_J$&Tr2{Gn93URU5k66(r&@x$nCoZaw476{ znMxxq71qs}%4|ZNZbjd`?lyG=Ng~Io^9;ex>|%v93P^{v!5qde!MiDih|-Ej5cdkkdeOFz4I{>utfIY!P8pUay8hLU8G zE1~0zi;kuDD>%?c%^ddKIdLY=auV^MQ#h8~J4#IHZPe~y4Wz0gPAue-;^!E*nElp2 z3MRH1>^`nfhnNa)*b%%xBMXGKv8NRFLy2yOlK8zToVY!BWh9y{owx&jF*hRX`XtD} zyz%%_;3-Y?U1Kx(JdCb}%IS`j&r(asuzJA9nYuopbsgXD-O+G{mr=pks2#M^>0RFq zp_~h%*DBQq@+4@kHOC}_tFbGa03D|2m>!KbA#~I=SEky*7X`$HH+G~>i)TrEuS_wq ziVlT4RbjZlvP1f4REwnZnM0*7~M(de5#ulM@g;@A!@U`>`K5s_WT za>oaf9|Zc}5PtrPqT}C$pFgAyVG}1KM+t35pXPPU<1&)5|x${mQbP+k`YvA z0C;HuDvxGP1k8We5d2HpiiQawI7Gwv2Pt3xkn1^^Spm{k0!~JMq^(#v09Azy?8Qwi z%*+9Y?5r?!fBN}TM#J!@Py!&6Yhff{Yi4co#|sP)!nRTUgAKyassHOF0B8Vc!`#5} zk3tbSod}&coiv>sojjc~of@46odKN@oiUvWof(}uodumOogJMcoim*W#ow0*P^UB@ zVEC6F*MACZ0b=C-O?LPPp%~zyW?}?%^|!wofB?f6HvesY~yW_km6saZ@G_fe5RjYJ|5D1 zs=YR>bY5d8`}3+th^-(SL&*E`?D3H3#Bm5}3C-YkA^qJ0mZ_<4a*(jwzQ9%JgNFU( zpC<6HY6bPjhXR6*f`y8Ng*I#i+BdlT$dN^ewFm0t9?_E^0@7d$Fa5F%0W(t(F6;x54LL*UxAOn}ro1q}zeEQphpx9shQSuS{C z0F>a@@49*UiFXs=?nzh#bPgqf03Zg+l-tQcxU2fA7R%FD`~1 z6AA?cED%Umo+}(5Xg7@ha4)2PJDdV&FcA#&+#qM!&!)5v$zSdPAOt}IvYqrPQvk#p zvPA;1t@MT%;Sc2fvqu7`xAY}57})!?2U8+Cu!aC^7ZTWLT4taZMPW)~ za+*>IRqBT-&#rK)lexsK^?AAhQ!GI? zo#e<49>t2%qZaR?76)+k{4k#*^Bda+CLQr3^lIj}X~f|8<{vbOY9*P;4+q(ISLhav zRL6Ek)Qkl8-=CT9_eG(jFsKgNum*+M>R{-PQB1v*hhc`PpHWIm^J!v4LfJ?3e;jGD zhq$=&eW(O#Jne46EL=wA-xsecl<;kKoYW>KjE~$KpnbhQ+YG^?lS#C)wV6aa(F>T+ z_9HozZOC>QnABTzZJ%C}Jxt5cwK7nIQKcB+`P%0cX?I3#LeF0zS8fE4Yo$SXY2U=U z@Fu~g$SAW{R`T|nmX&|kzS#nVul)j)06PtOP_jNwZzN~D@9noTKaJ<*vvbp~j*QZ= z6lZO+=NqnBaYKjttF54@&0+bZ8F$6_l__E<)8Rf~_iIQoj+7ENDjc*N$x?MaYQ(Ni z2X-Z@9+D-IFXelLTuN=7so=aH7);owHE*S=j4Eo$58dKgCjCxz{Ob`=QI0Z+M#tVF zh3E1~c^NCH8F-oFbi^M>bkIfQfVH|?$pdl4*RqB zBZA=NW#~m3K3>0kn608;3#M=77!Ix!pkP!F;}g%XSsfhBBB{9bT>Wn@%=)3rwcwX# z5276P;7mj1ZQN0T94=!nG6D*7pFpBA@s6U5OwwMdt~cSPGL^>r zlaO*A5x2jI5?m>!XZ5Qtiv)xTu%KS65d3gSERU6!yCY+Fx&;U~KW!I@#8y;STks0h ztyD_r^YvPfomj9RN5sI_TCP%t+#Vp z%p0OeX6!90$&xKHyA*GEjrEuetE6DF9`=rVkJ<3zjn<6C-!vu&ab@J$hC{``v@1%l*bOSu>NCGyti%BGa?UX)Cne5KyhUgPzG^l|Nmf0Q zy%qx>2#aicKt@wW(>rpoQC$t-k8=O2W#3?eC{G_>&@C2Tr`guOYYM!Z%& zoZ&bS+x{NY&qn+Qr6zH>#^G2~=A;}8XD`Y<(}0GIE4%T}RXl2nwd@uBL%G~6f^+fM zHr(_6)X{ASo)K376d!v8Hx~>u-L|fo7=j$Ls$X9HY)qdixADg27>GybU?eT(m1r@ zRPfV0u8o_oDb2OcH>I@o?!lWJla*q;&&vQ1j(z{a)@) zoOJcCz^)y3=Zr2`itg(mZ_8v~LLTBaRBXVoiztz>Yt{mti|D`(CXE=fD>KEw`0V65 zfADa%op+EP4P#t3q%RI#so()IX5U4wYA#Rfh%3Czx{3IXE=kGX>jvk{5&Ag_yteCFS@Z= zEvrYdaWWLgZ7+*Ku)_-4qvoGRB?BO_LS1{Os8?tj9R+qv)qAK~IZf_!gCgyznjd6i7WnND&8hY$MIG5O}){~RS0&j*er>oF|<~Q2> zu4`sZ42mfrIE=v4I$-mIPtvJ#S~W@3LR;Q+Av%zkRm$osN39BX`D2twDCf|#Y4_3m z^@!^p1L*ek!%R>xN7QO(4GFblU@IcMo{SZ%2-zkCEJ*r`&JgUxO=}D*<^*0Y z1W9}h?RR5!FROY11lV|`YbREa63T%Z@dw%ajOp*8K5kc-&#}Q$BGW!Fe6UB1@|zL0 z+!#sRGjL)Sn4`(_Ag-01Qqt@MraW((0&lz}N2d!_TZ5UDvbPZ1nhBd;>zBU5^hKdg zqSGZ+V*7?8H6d{@h*IQHxidM9MDRq$9xDde66XvWf3;2yo*~5HOKaiUvUu~5!pv^ z%{et^`uO1IrX=uQ2p&bqqnEJ2|$)&Hbz&US=)Ai4q4Jk1Va5ujk-9 zJ3|B&$m%liJN^xSvctdMmU1OiokPq7cCdsv#kr;bm+ClG*@wEflC) zfrfuwP2|H$OXl4&JRBrQ8J+P_hfm!mNPVj$b#XGfbu^F5A%U4QZUE2bI`Xr#Yq9zO zcjo$;tg(=EMtrt7iJA~eNcp0YfUI}g*gV!M`pj5Sp?ukC=JFiXr8gR{1IR!1h4k@| zc6hN^Sz`Yb11~n4k?tDBeJEyqOUQozc;%uePQ7k+h1fGSCBAO?%1Q8+xKs8#^o+Z+TBlPYk5w6O%^w#>~% zU7>`dKDzjE_ckc#FPc5-%_`J}_hc-w{MlKfDj%Fc%L}>=L%l)oa@amvavh9|wWs^e z-C-S@==N!)RS)Bdxahg-n&g4c0Qn3w3j(f zhP=ga{1_8vkL28ba`Q=eUe*2HN4a{QR(_1lvG(QCSPO%%DkVY5(j_C0E;14OGWWn; zkwwiK5`0VAoge2lP8>(U^X`(il8gLKx@P3EEP5NoJ@n(*yKUETqcV4?y+iJaWaZTE zSXJr2iU=-rZ=3q=*z=9#8W} z4V!Ov9WEj2i3cF$qHNE-#@0O4T8>2IKoFfRrfAg75Sjn;eCrAr2{)?BM5>KD5xgve zeF>X#Awq1X_cs5^>DgZNhPeawjGE@UP-rWna7XpM8mV`2sslN7C)#^MGm%JTi~cS# zzvx}nR9%ody{x1Twb*Aw|R_9jzI14is&M z@NqSB5Y6(db0gy<=(Ir=jR~*S>ob*}n~BqgZn%?;Fv9$ARW_^pE+N0TghG2`uZEN} zA_B*c8utX3Mh2>gHmPjA=@JPV6Z*Se0XiO?MRbN=Kw0(3CP_h_$&LvR&&z14(8-M& zG982|yA*DRht z&5&_9F#@Xu*3o%LhVhJEd3v(NTi%V}0lS!JKZVJ-rR8m~K0!2HcP@Ru={h{L#DDB9 z`c2ay^DyS*7}1y|>HT@vj@0-h7miWPG?~x4&Qzx?SKlm8pX=8M{I^`(+~wE(bVrATxiefvI6Lgv;! z%+1)Y;H8S$?F&SdYD$Iy8_roWa%5T+`{~sTpIVtNZ7Z^CSrlRVqXUrZ;aNPhE}g;< z19L1tPn-K>F}itaOQ1KXP|86zs{k!VIq_Mgl!1Uulx11Pbfo-B9lITB8b@E_w|x=_ z<}$=GUE4SZuvaJxA#|P8AhrS`TU{|^jwPnjEOnH{wnhVC~eTorcoz)!#WMmIsxr|4s zn6*qooEa9PHalSqoDgfoRGYe_5mUKg6obN5rX~xFYNi2vBSKw`l{l6I>veM#_E`8& z)q3{`m3CuY9GW@t&ijQvl$xajXr$@g%+ekAUyg#?wXKqtHo}Ixdt2KE?s?)f;nap& zF=e*Tb~~Bycwm)CqX9w{zl?v_CNLHn*L!rcfqp9@ffhPjDN=|VB{C2cX>VAj@Ik)>h0t_;)Re>pTa|YZEs=4R5!ADEpcQkEV0EDCtJ#G$)EXRs{5xlt9n8v<* zgPQHD;rSMP1dqG>T3$!Dj5CXwI7j%9n7HzR{w|@rcqfyiJZ@i&7E?JZv&6W0j~-#S zh_J=DqF6h@c+UR4Nc&gnLqGFfD7HxG`6K)=`7D8F)(-17g@);y1ULiMa6J$)aliY2^rCD3> zY8v_WZ@Zck9KL(^no-XWf)5G4Jxap7NI?hRf4q^Qz;_Nb$9?)@_h^Wyg2Zi91h$hI zb>~ixe0NZ%ZRiQN(-z3DM#Q88nF$+~o!9_6w&6a8sm?WR9PD^{5U@9r9WZuS3S^4dE?F46F2fKq=WLaV5cV5TrTW(!( z#9&U!cQ}~fUZwi=x7=XJHj*#+vntLeeB2ovYr-ba41!~2UHsqqCh7_4%}ocMMU`RG zW~>@mX%5F^aORG`D0hd$?POWTs%&p4NhPuts>-p6T#wzPw;!Sp1}L@A=<_Qeg-#W9 z9S}SSNagy>>Jp<(4nKA(Rn#EgZMIgy#ww?Lotk#)?IFpdbp`syR1oq_ohg;hp158$ z=?rMvU)}82Rywif{S98^^Np0sBD(BMQYa<1n7%W{+0||wyhN<36p*oY`wCyp_tvkl z@OPn>TGYJq-U!eAI+CPeua&Nkl$wB!3e~9yE|%#ywFg<~9Gjo{j|~b61AL1Uw0HKY z(y*3hsonCgP(x?mvR)XLyPdW7S>47BOOO>!&grJkR}DpT6V|&Aj8~fq9iYM5+Q%JH0m>IpFAn8DYu%UljeJlBU%733dkg{Qc0e!`wyb&k7Bov3o1 z^FB!`uk?6uTiZKYA8??$@0p|?{HC62^0?fGzrsziJFZeDfJgJy^jHJGeLZwyuj*6c z3$`6Qi{u*ynTyt32f{7-;Y4Z}+n-D7X|l+rW8jobDUX#&gnL80BJItuaB8 ze>pp~Up-f){&B>n<**Fm!9r0zHGAIh%I)rpi$p?$icUCy8Hk$Y1Uv}a-!QW zb@5jzS4icJ}WKVw%C}JKEC>7u1GL?HzWsbgoF5^ zCv?%GIV#D@9EyCiS^xcfSzh5bKx{kU^-vrLcZen}g-_X8%5ZAPJgSgtZ z6bUQ9?!qy*f#;UFY~1K}_mRCWIJJFJ3Rv02onD;554ST&F^#CcLCeSWbcz|?RLzqd zeb`XFrBiy zSYru=z(V%GO&U&2xCm`3*@X@_uD|SM&h8#ER&_2oHH3a_+Ds^7P8r+E5vJH^J{DJ` zDw~~gxN<=onBz~}?PXeft8OOC-JDW(^zQjyoIdbOv`QwXztd+k7tx|7B$ZU7AZ5d+aNH2ZNU_?oJUIS)?B1Dm(AW7lc3Qw5%m zb?9Z!7?lh9gBGGhd&(;_DVa6&o@+96+(jOIxXWVoWDn&|3(}`!)~!`d(LEC z<<-x}=Kw)=6tM`5Cw~W+_!VqDbE}xh$sI!&?Yr?V)A!p`P({+W?}x(4?=cB)DeUUB zcehVxZ$@L|FA;2lXTvNY@Zw7`@kEEBWy@`-*Ge5`VrIE!xcZUJe7nv*EEcvU-Ke~k z{`fv`&NB`1K(LD?mQRjBeZcJ{T7lD%!q~a+V_m!E5(y@&QM2kCq3mk33{uU_;c;1xG)Z$+ly%n7`oy}iJ zy*-`1fuo77wTY?o-zmpGGywpB?*xGGUFclt-2eYT{vX(05$2yj{y(Fa{Clez8ymxa z;`jh%<^MSP=T0+#%q_?N7{^z%QvR}p1)flmUv;A>vEZqWLF#xrkAwn)K@bpLZ%*LP zO=3!BEXgPo22BD_up1;<(LiljD3w!CpscO}b_!aYsve@%i*E6C2W0$Aq(W7scL}$y zrbg;>lf`eU^^te0)hsve@GGfVIDz#S>OT3vJ_E;K0%fu!$7O%+#uZd78q}~9u)ur+ zNf0!USpIED)w5>*PLR51!A%&#IJx`)dFqXD;&LpIr{G`TM7#-p^|2Qy7VwvlFxSPN z=POzU;3yH&8yJHmsKPGFZH@w+?Z9D72NRNo3;-h)5cQI=e-)spl8{qWjsgDQ!uVC% zQ_5(-9mEXoU1I$U*aD?rz8aaoE~8&FDq&9l*ZAka;@u%iw`!+qd8RdA%KVmlF~Tg? zr?P&BGY{|{f2aU`tZdqF|JB5pKGf`4Nu#1*xrj0mvkELIgc)g4_YH2Wu{aVaoCsmC zBX5Wg6rA`HPiz~jgE zfmlM7$hH>ZVAac$Dn&y@P_F1%^(}UyqbatpdeBe;F{PuwYWHs6j4GU`eE3fr9lgcL z7mqk#kd`cl!5#Zli;hYgECW@Nw`hH*)L%P#ojxxc`>N)G=T>A!-GsBT=xgw5AqC{r z#@2fQvH2v${5FPPv!=r*Cfk-AE$llIIN!y4imA}DKw@Td<uGYCE;>r>a}Gk=p^PxobSD_FWqgR(MAR&jxVW8k-h2Ug;s6uVTsM zeB#fkniWW@51-oO)xiP#DwswUz4To7?eC>w|3zy-&h^AKM))B`mAM~A#LQrfb13dM)l^8nfo{oe5#gH~p~QW7FnET)ca z_mIpA(*Rcbt_(}WrB++>S@8Tc7>Ki_gU;dwH%HJYj+2;I^E0Jky}1wd2CKuyqBJ@$ zy)G6dExdARUDup%W`i#;_;6Eq*SICEjpeaRJq?~iR4iNT--P>+yJagUY&!fP9?jU| z#`v?gO>;)7jr2U$+L9sr9X390{6<-ye7B4@GRaw&p?B#Db05@rKc)}RZUt-`NSO24 z4z%xVwy2un(JTActzb>bG%`sND@bJ;>vIC)pLGQ;VL=Z&!cia#158^l6kGF;^AEjS zu9g?@l9*B z;73lGR;}f_7LYZVhD|*Q)0=HM2)rA`3VA#{n-!Gg&YQR+m)%CJzjdBKsT$Di9{rmC?6mTlH zI$S0{u5YfcA<{H}aN1jGjC$E7%+6EemZy|D+lsbOCQsH}ujwaNmuzMeF*H6*MltikZ;e;@Rhl7OpWZHN^2#EZIwk z)iI8$G1|)vtr>2sof?`RPi~D=irObvp&4*r-;&*~;3ahKBeAO?5iAhNDGnB8k{aG* zPrdao3GYNtrEz(PI0K?-+%Y_66x8ki1kwFW_v+3*4T6$pZ zXa;Axy%8=Z)M0arGf%|kv`s#E4;>!GF8gAm0(od}c%v?0)A)M`BuoR5w;k>C0Fh$h zEucPXH?`=DM=!2sZOG3=%5XL*5<}8Zh0QLUEyGXhA5|M^4zZTK138Cd>d`2hi5 z+5Ua_UrawBG!M)Fl)~3)qMWtS&>Yj*IVT+$g&Aq@XBUAnSAVgi|K%OW1omplrb z?yQXw=IyZ5Pd?-KtwTfF#YM+Z*3YKTk+RQkHs(eK7uS5?uB;EVQ~YB7RoT!pvk#xC z6`-HhGHB+8JBGJ@jfqpCi)h1vEvAe7Km$EOXtIWAm;7JAVa<%3{LAy3zx>v7$g3Xv z{Cd5!-a|4&Wo}U}ZZ-4vD*c(FMBh~BqIzBTDYxVo`8gEr_cVYj2J7a}IuOSr3UinW%mzMKL4U3~>8G&VLA&mLcH8nPaw3j-Lfg^b?~Xy#pro+rCH`*sAS zH|!fPkP??zn;$}Q%vXN8C%NOTL5Mu`7ol??&mF!&;5_tap)4TJ*-s=cP=DQXL&NlkUs_2fC9A_KtakU z60E=O0iut&0-&De{GWO;e`?(F-CZlsVSnVuNfz?mDOkMW8@`WXu4(vr+kLS0_ut43 z4j)c?iiXBbet!$W?*#q`!Czx|55kw2>xn* zo%*z1xST$Z)8ty~alM&Vz4$ERTU^EF1hJ_OD4Fsri2nTY{+NB2`#VhhHBM{nl5XkK zVR&bn!k5|2zTOEU14H9eP0TcvFXGeo=hy>Z`e)72Tkf$RIuk$>$!}%qX{TT=*XUWC z(?=WPbM|$oAgMV&=~)k!x8&Voq;-%FkE&EB=~)v8YnF|FtK9*Op6KVrJA zACCxr<;G`!+ymZc|L5bcFDMO8j|C<#^1rW#e@_ogJR5+QPW!1~b+Y^71m5<1lzOjc ze~y=+;j_^o9V0M@YGpMt9U?TnDWEH#Q)O@|fJneo8mr}zS$#xB5A%l2My#jX{gC~Si783I-OVu2(Ovp8seUF(gpy-jr|>}59+FF2Pq5lA3m(~Q+M zdn(QSe~i6TkSI~KU|F_x%eHOXwr$&0w`|+CZQHhOn{)fU?&*FL(;Xd=A9?aOKTbxT zz1AY7=f;S)^{qI7{1}MecqHrcYKJJgfcijT@7J&{L+@Ax+ljr)i+y0 z8W(>hH{e=87J<~Zg%a_YQ?WfWr;rvS&!6a#9<&?45)aX0)=^R_srlB--c2%!RPkdWs?+ZA-5$sRVgEA znJ_o1m-XKF9Yu8Xv`wH}c+883TMuR|hb+avf1l-l&V>DgazEk0{~$qYE)>i`>B#7{ zQ1eTI5>j-~(E<&k1UG19TOElecKri?u^`J>M%|T^3ZCU08giT|99&YEn;N}y{Y@m1 zpg?rL@4iOv^1`1h)BrSntnUIt2g43YPB!s;3dmWHi<1`{S4+yLlkTRKH) z_2HoTAgfo1H#xIpOU@8)Ts%7rqG>b9zo@F45u={;96i%L&KtV7fgR(nh#-u-)wOn$ zr7GZOUUZRf=t)bX?^qV;SKjF%MkQ*tpIYd=va2jRllggY^H~s&&BuKLt3fGIe45=9 zu!CK}*6*c^i*DD>u)JQ!Un-+GD(rj(Xu-!XPK9IXh7)8`8SiPbwf`_Z7`+3BUG3^7 zqQT&n0b#_MycH?)BUJW7%_p26hvR+>}LJsZtNK(i&X?dObLqz|0)}^Md}M zN>^k>fmEa~Ms9bXp$KxJ#5|ijDQYKX2OS(rqQjKB5kY?HKJwo@vo7xVzicdtO+1K1 z_=z}8Hu^52u`F1dELo(uDIclZAxd|>%v1ou{t=0f;7JXz9pMR+&!3`JW26&5^J2!_ z-*%yXmU@PcqOz^!pExrK%7-xu5{_vPJ8v!Wuu-95YY|4pU>Va|7c9-=8C#f|fR7Q? zic9L#SzKsTC{)I(?Lf>jq@QPYD#u(#OF5i(h&d^3SNl8u9qY8zVTFrZnw>oqtFT+N zKR=M_Q!??lOZk(oP#yNi-<5nhIPGnSK}9PAV|04IQaBZ6djS2{NEL|ZrKY&=?9Q`UWJosNfCgq zn;8zJvlrQH#L&SR@Zq-$FOGDaqL{jld6i^PU`)$8zIwRvE=x9=P4 zyslri)eyULl&MziZqRMki>Wb7pemukcFDR8K*5Y%W})>){SXveF- znlsi`l9QGzj}wum|AMNJA@m21jl9lq9L}lL#L{7V8tSNve`Dd4Vn<@6PbFl0#;PP6 zAlqasFrjOGRiir;Y@n&XlX2mEFW3vx`MFmaVGe#QERI+U3oiUtmQFT{bKh!5N0L>-2cO;3xQV9S_uX!DGGMfxOMsu4Hts$BUwf9D`9N1_rIUP@p1+=Xa=>@q&R~5JF^4mMz^V^=J%*=NfKP1c$^Uua zRWaAYD2l{a80U0!c2m4hxF90NCf{D>grIJ;rgZXWC+=j1L@|WCkbiY~i!wB~u(TfF zcioOw#!{!ZJ}zC3;V|zV9Cd;BD;tSx+TS^u9(jGIbso4okqGJosi#a3=1zE85`|70 z0r`8Yu&!nJadl)@^An_Wm2HL|*Bwg(of6|E&b(X9HMCa%Liz8xxFeJ51TW}2X;=k} zmCf!rN>D>HTNNZRm)Z^Jn&>)R%tjiwYzRooI#+yk33 zPQ)q8ZJqh0a8YVTsB^N9AjyplR715*DQFIkZ{)`;lUP;Pb}rFGA10DV`$rI~lG1=n zX$GvLDF*5Ovi!giYKF1&-=PKJ1ndLdwir>L!18w0;+>mSQl(|3GTOM)GqNRPU?uRu zZMLZ-M1tl(u@!2u=rBrKsQ3dLOYP)c97@okQw*8EPzdmgj1(kvj?9A-t?Bgi_CkkLPq_0HgIn!=5GU{v^+d%AZi$Z(BInx}7QItWS*6zEwX6WA|R zCJ51&R56L=A84d-c|+s33cKTQo0ywKSdQ4qTE2E>HQj$aEv{q1I6+O>buQM>7D>|m zzy(Yq;aaw4taAX<;=#(Nj!dy}rhQDiJVPw&+^XPzOty$(zqr=j3z1amP6>Zukm^jdtiq}Q=hf{0cHLrnHU3LpUf;pz(XGMv?yKnGojH{Pf z5^ashokm|cAh{YtiQ}p|=m=Pruycc0zL`wy+WneVJ$Jbmu+oSTFplfc(*+&%3qK=C zG$htAQ=2{!Fy71?SMS51nU5OY2#(%E`N|jOd)pNkS_<#cz5CgLR&=yo`{hv>*lrEv zfE42fE2#?yM%Fp)j&64iVo@6(4_9fq2YB$_Ogf=`D`i>NRL9g52>0CcGz2oFt75aZ zC=#^TKO4~aYi!1Y7(XTINF{N`)HKd6nb^5xNLJ=&pu8B`YG6BPuy0v&^|TJz=aQEy1AXeGf&6BaaNP9U-ohqG~o8qSXt9aiW>DFJf0@j#D@ zFKYq}Xj}2CQq$}qSkE5MUB*b}v&)F>Y%(-(OFXY1mE}IH_+j^6$5rgOBBK&dL;?Ex zNy#WNc4k(}R-@_{9DSSaPm?a0>5U8_JU~B@<3$$LJZp5to&kVHCQOGOusrlO!8H!y zcvD{yI#(tAjtj}nV{xEY6x$vF%W27**3Myk8qHE$y2?oG#hd0WEvhgU@6n(YhR6-msf!BqrPXdR_pWt-BJcn5mHRnR?<&aYpthd zM(uX^7z@r1I2-K9DFTDQ9lNmcS+b4+j%@=yV=Ai78SAGTz($`9VL zLy7-&n(bhKkgO5dL2l)aPR%0rMSIMb^Gv&{Fxt#wy^`oc^zI4ZHh~o_Acp72_g=nL zkwz}HJ$os=@Rp$0JHhaRmuB}~>f;@!zcK!^3+Uad7{5X*=DXvAWcPML`LbyXAHUAeQ!2^ptRuo#mkGVjR z#4p7|#cF)(Y4`ShWe6N=3T)Pt^hQUV0Z|Z?%`NO>foxLG@6p~r;7B6EP~&IS$=Mu4 z(|G-OzLG!#Lht#T4mVLnbt=@`=myiIJ>5;Lrug#k;~;DsIG&f`GlvXzHPj)}|zoa5)7&VIJT z>I~ahcXCo)IcBu)AwL43!osOVpn-+-s#RjzMN@OQ#p^Hv5Rx92t1(7Qch%2mbIKmZ zuO!JA!W{yoJ(_gJStvYETia%eI{35f^Y8ORu|Kv1%i9bYwwu5|=X{f&)TB7^4zRZ^ zta%es&yGF;RWf<^-NKXkOv$ax;Fqf0@$2J@%QIOLPrGB>lJK`cSJ~ z;xB7_sZ-Y{pC9?g%;pYo7+ zrHMXSX0yQuuBnwarmvmAu*Y;<7g8uX7BUY{9`n-&5K&n}K_j5!dU}j>=SjDX;tG;^ z{M3~}r+>}X8Cr0sojGd@ARl(~mnkx!1s4&*+@oq7_~EU7#W+lUna z7h0h-n9Vb=7QAnCpgmbwG*63gj3sJE-2`$_7XBU|2qrrGFkL#3N6wv^rL6E_JY5gM zPOcV3RB_y!hpe5X3B~|q`vtb#<(2T31o0ga@lX>g+{_c+CtAnMV`svnCw8=)8uRB= z9y4Y|Lu_>aoOYxv>-nkgScb{ScK1_wuAQn}*QCL4tR0m$qQ?Ct6+u8>~09SH02`}}J^>p{9ZIcQ2%6Oa2k*Vdv=F1ZJ(1}W$L^+M-k zUF*Tpilnltz#u%b#A`C>+FA#j{}S?WDE%@UU&&)oxi!TUfPCpDVffPD#~0w)QT!mKQFlrW1Z)hCkd)uKTm(j#;5D`#QC zW5A4y5ir=hl3T3vChvu=+TVNoD@yKPyO(@#gF}5;YfMP}%-oQ#`dsEID+1@$a+J!ZDjiGWeeh=PNNaiaN{F zEa9Pn%W^D8m@LoPqgE9F*Z8oFh?l=2unW-O4xexmRLB}K=fzK)+F=~I5OmUC79Hk2 zG$47!Em}HakNTPJScuUbN)IH%GMn#X{07QZ{3l6ZOIHjSQdf=osiiZD)}b@Wm;Vt-&{*%mTZtGHI{RO`QZT<7yMbf;OALt>XOSsw*Gv3 z+jSh|8|>M?A}LV^`_rb}{6soNOSot0ORPDQC`QQMRuZi!*OW&=3ffZLM@*c^ckM~6 zp)1den1=4@tU><4@~EiFO&*V>v{yVCu7%Pg_C&o>!?Ehn%CS0)VvKFoyZR9MSf*j3 zt4cw0r+{N6PmxpN?_@pnVH7X`5t-W<7FDMPkU{lm~lK@iBU{M#e&lfS$LN8WOU90gEbRMD0c8q&&TUr zd2uS`$SHEprjs_u?(C2`8gU8i(_G^@z`&Hfg_yYfsNKyZN+>WsR8&l@-$OM>U1z@^ zere1wd3&@??q2}2dy6RQ#kOpmxz0Ot)HMi><-a{0n+NN4p4+Ch&xLo;Ik@OFXyTSp zg^f&RiGx2Xgma>sZwJ&B~}T^a5ELu-d6u}00>9UV{216f`v3Ert( z$~T#~shr$>TdoMIx}%6j?t1eSAfZtW;xb2A2a!ukR>kG~&O=j*MfmU6jr$KNSxmPC zJhU-tGR&?Knd8-pV81+^(V`+rQU5)QwtT10%qkT)B@_RCDU)bs&-M-=*`Jh@aUI*X z9`$j`V-IddQ!n#P$;Ix*zr(0Ob2!IW=Mk?JqlSZ`mx7ofhBCI+6nypthXTr~O>70a z@KhmZA!&ezjQhzgpPJVpjnJj zXTY*Y9wez`i&nX6A_2$GFgk+U4~nai9SJdgXyz2qJu#T+3I%Um!N3>g$Hxx-*kH$! zY-O-S{WYwaOH!o#<3H1ySTVqQ^`p31AaB6LB2xzQPNTl`P9AvUK=!hJ<}Rr$3<) zdCxlH+zwW%;L`#(LU3oc{wLx%}E@DyP|=!^$u(?}q-WGnudkmqaMmF0Jq{$oI`F zDos2c{`Rwcd>C;A^dKv%kOoXGo4P9dc(mV=?vohXrM_I?M}d%L(xPmBaH&BSAM4=~ zvJfWz`6l&-KBZ{&H0@?e3Ya|{9Sj+XDXJ4<*&Uge?fU}3jS~V;4;m!|+?M{`Bb9c< zbtC73-t|vPXZq1h~-zO2Xn~JqyffO8N4KyFou*zQqpbJ)PMcwOy6vOxPrZ z7d+>+&P+Q9y?mp6I?(-A*e<~a)HcS@5oVuA2ol&dek2^KL-JFIQ;1!w-MpOe7NWd}`x~gfMW6?DvSqzP=;ssX z{Y;`_y?5cI&n5X?ew%B;|Z&&HFo`)XCU7Vv*hK} z31phL@HjU*jb%@O~4e-m)<+|9dc%>%@Z-dD-Z6}%SYbe^ESbmEp+lVF>} zaKaLPyNOz@=hJbAjzjnI6?#-e14Smn&kijPM6kBP3Ab)4QUf{)1%!p_79OC%^qL`I z?h`E#`l&5u2)^<;kH$V@XN)~&9hEI~2J7ChBSS0o88W`-x$Z)-aGg90&>T7bc_-n^ zITjysC7xfq7321+VBO=ny_!2#Zo#WnAKfrHd-oliM}Y^1lRHy`ITE$U>!25<7xR|v zY(+@+(~R8$Y|-$8ElX3> zZqFRIx{pYM!wcON;cXR&^+sN(?YVn6NEn=)`yCx`X`@8F5`4#@fzrwZ!b^+6`G0DR zNQAxzg8gDYT5yIFjw&%3Endz^T^uS~_r|@-nY^Dmv1I4XkFyI11i+ro0kcuIV4Z8G zk_!nQf=KP=L3EWZ1Lt{j%Qd4vNq@LWCgsyPT8Y~%QobKh0#i{lo2NTk9Q^IK}X9+oCT5tc1NhL4-`QF zSo&`LQ51iB4un(Z2`oQE6vBgndOo|cH*xFMl=o)f8glb8OB@8jz`s7^gRWy3r{>ukydrG#npDWd$oIZEv;#)-&NdJQ&M z{ZIOjl43~keBM^30ZyP2^k-3+8@@q=^ldgeVi&~>?y8%Y^=-%mMLoM#H6esM8h1S7?gspA44v}JFwz2U?kY- ze2Yn|TPG#aAeBxQSzo6m$!oY})4i%g*H|$kLhxp3h#eReAV;~rUu7kC*q&bo8)Bbe zs8}uQ^&SUL8zXoY=>QIv%+o=y1JrYV(}o0%D=Xn25g58e_i+GE+91tySV@9;Xtp#I8++D zqq4oBZKyZvWpi#O5IPQK>x)K!uAhYn5sK4PBeY6?$H<2+z#POMMowKcgZfrwM)Xrw zRt!4K$9*jV8OZ~ioF^rVgvB(JE?`^om;BQ^N3#1<67=%2CVf)?+FDbQI;0*(}j>O|So3 zQ95p@4Ic)X#3!q-&jQP2H=p4Viz0TQPW9*~bU;v1Jrs!A0noZbxVa2>b_%HR(NU4 zMnQ9vNDO5{`Z|)GYdNb4#7$*>->9wB7Qq7Pp$XS!8ITzQ9WWPRa^)3OM=iH-lCAK( z;`Q#8kVmrnT}(86W}xxRA+%3*_NOhlQ<;~`;AtM`jf6vl7qVQ*zTLQpJ`HlJN6!ir zvogFR7RXIR=sd@9j914t;V#TJq9Hu~63jC36OQk|+_<_FX*NaA*AzK#tRYw0HGfS` zXkUuN-5~AZm)Bj@lTWz3MA+#Sww2P{Yt4KMF4=jAt}%vnnF98cUgPunOyW}Q$(I~6;@rU%f*O#=*VcXwG&=lFz9B#MD zy}2U_&#dYAFFnYhhMulI3C7JZ`ph~8Z@&M%2Nv(8NlA}x6D^YJgnoKCY5t8}_W`{Q)6 zpuTZQGnySeMB3p^tG35{#~SBN2!;!E3eQW=o)vT)qE1+nERPvK9&_#AljUOpZp2CT zQ}KXb%6W5g*pJ|;Y=h$!u{^ESJ+A6=vWrfoO-|^wVq4K;U)n|>_CSkG>v?JwONYf} zY78=x&w6VS^azWOsXe@E^Yvi$xZe2g_(qf=_hxOcEZmuogJYRn&$=0>8l9KxFeI9D zm)LFEK(WH-Q!^_8^g;ywc4wPCa+m1ZVAvUa(gb~X6WCFC6c$z#2*nso_OpOoIfxbV zWSVd=*U(9?lM;?r1WB<~hm-3s_)geh)*OKSSAW6-ek3Tt zZhjcA-MRO*6J$irNaFSev)#D01&zN(tXv{`1fuFzLXALGy`i=~&uIKQ*KjWA2rrxJ zrO16oh0;<>^@=X5DEi|+8dZL!k$(X{EH-f}a;`2ckofMbBlbrh_qid1k_%2m zgbD>Z5rGkoB{&cBn}yn4JeXY}6v-QW;R%KuVCxnl>9$|#n|AU+)ZCHi+<585O}zHV zk@+m}26cL`y-EVZfvn4W2PRyo81?eWP9?_#r4}sLB{a)K+5Jf%RHo~*TAWcwY527TE&ZuN30e?OQ423E zO$S5N7cmmNa6h9GW{&c}8MsRsSgFZfmBAU(bB{9SdCo%I|5?*B&(5Yf6X`fhPA<(U zcH=ANUMyyQ=AohV-_pZhO#YmZH{bC)oFrn*%0;hXo2kxRI$SXG(yXvAKyZ`>gP74C zrRhs(KyovAGHOp3T&5Zg+>&UQZRjt?Fji71?O-aJHCz+Cp@&_zWo#Iy&0N`s#C~OU znnd01R8%Oe>irs2{dGNlER5Hx83K#@BRrdeOt4N{omF14Whvp`!vXR|hyw#W4XjaI zk)6?m7Ani1cIy`ZcE9a`gH@ERp5K8o4f}ZvS&o1RqpC$S`aNg~t_G{<2<1wr5?%nY zbu&cC;+0zklWM|RRjR+AZOqvAvyt%!E&b9d0l9+3^m3t0uKAisT`b#i+3xhsI*kEc z;c?gu>HBel4nTBx``&vPm&T@);ZU#JEg-bvXw@jxDSaC?#sXR`(B8{JdX^#XdH)DG z{hsw=VC&9QDLh`mVWyI9B|othO!>?uL$R$ThM6A|nEI@+5eQnRYKPsBd_4?F*Lj1njzT9Gqs+w zmD-bTM>K<64KX&U@KTayl*tbDPPLv7gLcS?7>JO&?vHCM4kHlM-fv0(CI!ciwL7)9 zn%s;0T&quNDdCF%`lQeRj1Soc4(e6_Ty1x)9}LD%bz|*w(QWXFvq`0+8Kzosr~cB0 zY4`H_q4blgH&%f+hg!UX^4lVdCUDCCnj=FcH5`3FJIZ zDhN%2k2aoWE5qSm;TV>hken~L+Q5u)qVRbACNgaB-pL6Pwq)X4IFwnuy2jGk4zB?F zAkwCS{M(1Zm9x&LKCUmGK}YL-Q3MI2r>lbcK z)Z1H1WR^D!vn=GYk>IgKtE&GAT@4@w+gi_kFMrqs?p_Xt}TCXN`r3} zh#ebB^K#@m@ZC0ZJ10^?M!kI4y52L`yq4@a0=96YiD!_ zKAN$OEtA<_UdD?QQIhrPwhSmT13*+DYMfp&9E3kt9o@p#yVSxvG{lDh7|PEjt|)@> zqJ1kVo}%~NArt>DKH@mda&K5@)nrkTay5;Fa4xf?;5$83_0Rw)DrU?k6bRl#12K8I zGR8z`-6{WwsC(s!xK_u9TMb0fY2#Y9WF;AcCg-G1B=P9q57!^m#7kxkFJe`a=IA`Y zObrP<;(ZSemy)!|K>8HH_0DJBwC$agv81k79Kv8$YaOMP_oSTLWJSeIMq0v4@atm_ z@6fP~Ig-I+rhMnNlE}SD>{IUPL(az2Lb&O7|UA zqx+(8++LgL9KlorA^DK%6bCEDI3Cuzb$x|Fd9VpQre3wz<yb1CmQBNbIDpDQ%Hh{0^{6LtrzJ5=H8piSGE)!l;-_`p%nf% z<%hTY`S30oW4*`~2nVj_2@=@ny1zwp6-w3=d6isCGnJS;rj`y$ z=KQZCdjn*$?=oMj?{{c}0+h|^&V;nUcHb&wU5j{9brs&;$wKjn8Ud*my@+x)%WfAo zpb899Zodfpo+DA$Gtr=PoN22!GGFnxwf>tS5|!fKIPS}gM*I75dm zZDblZ`%P)EgT+d#MfX*K2Pr zT>|#eJvAKlF51eWi4=Pua~)j0R5@ZC$5fD>Iifgx#Z2lNfxXNTwO6F1QhlHJUKT{%o>I5p;W1e zpfr;26b|1MFVxOyV5|uy(fsG=-Eb>;&3<% z_O)gu8>alK#8TU%?J#Wq3!`k5EzALypv~88!mPZXiQM>`dJKy_l&}$v&^MXR4Dq+? zom-hO%87o>x*xlj2n%C7YrB{zN#BDu&v>3w!Ws0(Y?E%a)a{cCO_&H3i4;JV&b;XO z#Blq02Le6npHz>wC~=e9q9^Y9CrO(i_m~kE=Y3%lS$42my#NN(R>@141=RZM3TqjM z)kl#pR`PqEfMfCIS`=9lqy$>q*0I@9fRy<+od^~@NcTj!jyF+1f|@6(1F}vvACD1h zh3j=`h;w#8DKnR0RWY$+b)a@lat)x#0BR?N%@mvsBc=Mfn~~s~Gc6OG~ zTq39$U{;wz7TqYLU$1`W6{$@JU<&5gPI6wQ+Kl9aLiEO=ksucIKAs(17@1EExc13I z9GMI$$-LH*t%}mw>pCUi#dDP(4tg@61k78&J4xE=I+5?TFfvtFna%$UG{tO3EFhZw z)Km(fu8r%em6Y<)X5BJBtF*TlNi`m?f8)1S1!?JWak_xAC55gBal5gDo`WDeKw0C4 zR;9DmbI$a_TYz#?mj6vK{tamy@(t%S$4-&uVn3`y7C@BZUR``B?&!~+v=|Z0`Ba1a6)3s4u2XGNhg|;Xz zTe=2hN9ndP>+Ty>Dc^o}@#gk3bLt5%^;p7b`s=)g>&>R7YEzgn2nBocbQ&j2_m)fe z174l&v(N6sHi^5E@OQUWk8s%1X%LNhrscWQsJmcdNq>L$J?ri_l{$ujc4_d zQ~0*&C0x$I1ZEEqJT}kAGw!6T=7v#q@q>5(rWkYubBR5H>(y$pn;-Y^%~jn=l?EX{ zOjx^(EPIVS0sms-DJRR@;)BVs=1ti9-XZCPCmAUT`;yb<^v`k&VD$_6**~ApWSXg_ zzMU+{tTtypkyDXnYy``4lfpsRl&6b%oL#ii!7RqYwZW%%Ey1c3Ol)TNSsQ8spF(W& zyU|rI$>poa_F#He(L0!yL(KyMl22^@=<;2~R$gCI)ucXoH1!`fCO^23$$eOf5MvR^IE)VsG57nu}`TLmWUv{Nocw_QpizN>lv1RbHKeP_A{~>lz zp!*+c2UR-t|L89Kr{KZb&i21*9{!mg{;3}R<8n2jGqt8OwR3U&5A}n&hrPLp?Y~Nc zCEfpYK-k%u(EV>b5cVdH7IwyT4s;GKcFrcohSvWfiufOk|8zzC$LfDR|DOU0CkuBv zCu;*I^M5J{XLCmr6FO%%yZ?|%xcz^%6937P{#Uy6zxT-hYafFCzoD!DqYv?~m;A40 z@t>>z6)t6A{3qe~zlBQ^-MEu~KS!g5jg6(8H;u7R*Sv0{tT8y)*+)3`v5B+<#mcOc zyJO;LFxDGh;l_7}Q5J5W-oJWsKYV(Ae{f&0O9{ zNFdOFq<|?qLi8a4sEMT~hKmm%0}J-VgD6oz6T$iv74`WcuR-{O0PEVC!it!Mlaiq2 z1$JH^gSa>f0d!G&^hA*S6S$_3ZQ(@#I^>g>rf^mVaWBBo39k3)lX4OAj!wYPe>nF+ z(FeNpb9U^8tk?fo|k0l3nTu?7CkOo~JAhk+3Pz;Wf>{*oQTK0Xbk1Gzhpz5`^5 zfD;c)!`u6FBm_LgvD2W>jQ@s~`?0Bsb+(@iZ2L9;vK0MF3T^M(`u=M9JNL$l_HzU3 z6ah~m-`^@St?lkO8^GB&efBnLl9yp^=|b)wfdL2o!u5AA?f1}w1G7);VAuzBc=Z27 z3?jh&vi{B7)I;N!y!hax%=q&2o9%T3lV=AqxpMo>t?7;UHN3MMkr_q4fmVlthJ+4u z2yQ#&vs?LHP!w7t!r6n^5)2CmmY0(&!=tcevL^<63j|~z06c;2^L7Xk5QHFxas%m` zCPuIq_DuNs$T~1&PwW-+OGE)s{0t@T0}wxC3kS~I?3DllIR7Et;`sIxS40QE_##CF zFn)sHcLf0X4(%IgQ~Z~9D24b0CIA?_herYBpYg+=;rxP60^zs)cbD*K2XYvM;D;{@ z@eY0vbo2X{onV#^!Odw2FRT;j1Age-^H&t2rg2yAZI>&*D(dO^4+}_o8QINd`=EM$VKfgY^(aOff&0jtO31V8qfI?$bv5E7D+oP5LQtNld`ZgwBCC8 zOS!JeqdC#~V7b|w?K=-AZtDrvl$>7aynGc>_0AKA**}RQ$kw^qF7&f|2BUBNg-vJ1 zOJ2+s#P*ojv?Bw9O8?F(0H1B|;$^lBJi!+x{6r&@Ct z#Gh1pH904yaBt;)ngLVs3|Q4yjFQO0Rg@HY$*y| z?g9s#ogGZ*zB)fLr--#bF;(3Mg>Ig?Gdd6m5)y}`<}#+-zqbwTA)QdTN>C!ni;qsN z2ML@56p}P*yd#aZjbBasgu4mC@~5WGxjwa)%>mrp*yMANkJFT1Ds>7Kzc;X>GYT`M z{1g&aLY&bp1*`SV!kXqooolt0c1_Jdby>qcj)#_G|4wi2LHPGKHTtxHuljXtj9IcI zcOgvL2Ts+W#<;cuC&J10T{M?{Z6&1mO8B{+>{l(GhZ7i^5&Lx_baLe(FWo5`eAkC zlI+>)>r2lp#<{Kc!>6l*FT51nMl|9|f!e8}MtsboJ(5MxCDmnAItgOr<~)V$MDfm) zw|oHg3DWltX&REK!o{+DzXC9PYFI(LllsPR$ZBlH)=F76va`N3dL{1O`i>8nTHQ!s z?-zlQ&p@^_*5W_&&xh zx1moN@?5W>CLRAW3utA-YHF z9R{vdFD3OP`k1r4gS+=GHKI`4iiQ4&n#5T>a22@8;dgU)4%x;GN1{zt=Mn#_!-yb-yz>cJTt@R`+GRuS=T=weK62Gu1Dq?!v; zxZlNQQ6gR%wOYLhg#~FxEJS}_)}Z&8G#UQ1xUU#^wWV#w{IoR6l;|ckX4W^|gvlx$CQ#Mam=QLE7M_^?$*y8HNYr{xbPtNm z*IR0Fn0P;2$uXirxXoPHX(p@MJqSKjo*Y7QhArtbnrDzXE-ts>$@%IqH* z?9(#&!Ywp(y|V^CI_gnC==}#&Ysw^oS0wk^2K$e!dMePArwtWK@lAJ_hcgccuHM)- zyyw;IjHs>~(C%F&Mf$YmI)IW*`9D8-@n_@PtUb|1EHovd6eMa}^b(h@?7}N6-ba6D zE5S&l`Z{m${^<$trhBef8>3lUyf zbe4S1_OA;KXb)0OiWtpIqkXywMXXi#j_{rocGPcXuKwArbIY*v9&3*&?>T>t$qO>= z3`MUOxcThx6v(*jlY9$sBwh70nHHXTzo0SfpBr0KNiqNeTVjhgER?Bu_4C%{+e~Y@ zgL1S7mfxdmj@eG=3+c2ymI?R%YRH{%S^ISQ>%2Me2CO}b&O4*5;@d6PzAx_pC<%Sh zOO4^l1479a5D-7KDxfV02|qjBMEuFdNSKCnPBnw0@FCdMY)ei}zy z3(dPD!^bqa^DbI9YU*KFEJ$JbbqrOqT{EOtX!m6T?l*L_5!;zksD0*08gkHuBdaEc zh}iLyOkI zx7_%GQ4>lGs*BUrcg%`tY;d}yb1ofoS-F+8=6(+N?<&xKq^KFPoftbnqyaq@1uyjd zk|nqsZk1IH5oBJa8J1k*RPlR=wRucuPlSlrkSBqG35207ri)};XN)mMBPdoXDKiw@ z1`E6pqJg4POmVERlNZ>fmC3?pH-$(_Ruz+DCFQz{$;xv|UWe)x&yd}+f(qtSzHVb- zd3{S&7HNaxJ@O_BN)_klaYJCO`CS^*86^W>Z__h8EEf$FEt~Bv*<)y6g8vU^UjY{7 z(mjqKs30mzi71PJH0&<1q)173Nl7k9cQ;B4NQiVwgCL~{k_ys@(gK1~5=tr|{NLRL zFUxwr-}n7}?( zhwEteKm{JW7Zf~&D`|g6On&X-71%wu?#dRj@TfmDFt5sKqkERaoH0L9E_$Q<)W^>! zB=WDwww`DYh*G96w-+ncyi3(9s&IKJ_mn7~9_O1b*9hEY-28}@HmlOwi+0J6A9_Ko zdR{0n7TnO&R9qF-`9e&XI0MO@*;&`gERwk{{=_#wbhWx^84q};+tl0jl~;}rXNFmo zk&IX%Ie}Y>@lw>7M>ltP8;FormM(<8kHNstwQna(oWPaQqx-E&iP1Zoj8+l$_3q{N zaI8@8s;Bn-dGkuSgC=(w64Fgq6`H@=v$1?9_`vNXDx;_R;#(iba+c892RX2X$AxrJ z>bVbHJKQZROV3ih%k>!1s=Gq{<(tvNz;`JyKGA#cHVI31Zk`dMUAo8JReO7N!*6wc z>1W$ih1<0&Kk1)mD-$OxYr89`RZ{Cc4c4>U>mL{>l5uZ#a-TeY)jEbiIsRhGehW=WhB?XgLcFhr23}-x;yZ;(7Y%6@R9E<-~b%pw3xp zC3y(#}(Lm zN`V_T*}C1;_Ug;Tcf1Wj2cPhkC-s4e?z=0oKNAY4ySe;q`hC}5yx-)l7&PZMVNV=Z z8u_iHrh58`laI&#{rKpV{w~_O)b#+-&61gu7sMA=;1=4MeOCQ7;voxCR8;d_rPqGB zgs91A%yDk!>N!-8aO+)|t9Ui66Otfr3Ds`u6|g!h9YUX4_k6fBPD#Gzr}z?Mwu`IB zm}k54+RKGF%Vo6{Nf9xc?UWqTm0xBVrBwtoGC7hLW|#N}3hb&ov%@B)?*?RinPP+S zdw*yDP#3hl91FjoeOldw!Su3yh*>`EQ{LzTay2epscg^4Q{SGOO6nV*pfJQg8A(VK zA|bmiKL3+m1wx%GEr7oTWAPwlTuPT7PE3&ItFHF0xhXjLP-sGk!eExzTa(1{&a=fO z;_rT2~GwN5CSKWlBbJsHj^;pf|EF0J6sFWv^NERTKng^G0Wxs9jg zbEo9%5a=V%l{fUB)K?s4BLvspw{_5uLG7+RCuk#5qWjs(w$a62EfyW8xYq9YB1e5n zvm*U`{*s#<_s4!B z6UXw+)o?18N`sdELfQwo{3aPRfnT^dZk**W&rx!G6IsXXT~7{jcq)~Q7gzF?>VozB zxu5tJ0qSn^g5Let=5z95s_u=2V0l&XCC;}Sz1Hu1=&x?fbg_%_W0&5&OJ>g~=l$J0 zX2-XJe%6n_Y$R0obRns+`-?BToUh& zu=hPSo);8WpfEOf(U`xP|2S!5>-PEOYVtc;im9qI@pYWs+DuyP&?21>ifW=zy~>HG z%Bt3@RmN;Dx5q6+T5XbbxHD}QD95I~+8fiSS!7DdoQaw!UkZ#{cdG=oO3!m!pPb*X zX1B-@XWxE~GykJ`s@<(;c)AUj4s5xRt_9lpAV%g*_TbS|+Z43&%b{3nz5tFWnK4+W&Q4ZR+-twYzau*qp97+ar`jimkprfrsn<;LpYU6T#zk%|BNm zIIJn>r9X(bi4(dR;is3sLypjgKwuS^JG4<&OC~I zncDNr{k~D-+rV&lTcgX74VENX9{DYiV_>!qoLv!34AMkG^|qV6>0S3zNWpg+2Jco} zzha|n{Gz?WaOG@O0r+xPGv{r*3qEGcye4x6+20)PXJl&pALh8oNhNH##Z3K}Jpb0{ zm7lg-91-66CC&8kcKYU4FO{B0q+-1eynSCD=X9CfSd&$^WUham!X@{kbU`lqzC@?} z)4HyVK(=dvU&zEsS=19t9iuZA(u9=d&Lk8}aMo+Bt7z=9*mgYwTM2q)m8}Plb1CKz zI~rEn3i$2*_((X0JMN&Q>c+~?I|~(A34S+m9=}|kWj|hU-LEW@%sV_JgDo7F(!*8b z_jVK%ml;}BIQMRB`?Fwc<@2meoY9b}{_iF6(_9_II4A2}+NZ8r%cI5`!;A2~iNt2wbr%dxa|_BcqfNL4C>D=IiuZCT_r zz?^De@Czuk6v{QLtY+KIp2yNI+ryyLYddg~5vpO^DaYC_E8nT|1L!Q-g_{_a9G`U| zIW0LsOF2LHb9_wJg_C_sMHgbVlC@Oh5;I%j_wpV^C+K88icL&SXw5!vA7y%1tInTS zj3>JS>xNpKmg-r@Sbx0Us6_l*^f_N=r&XDrKFzV4-_i2Vzg#r7~6tobbL(0V*HcT zn1XbRdzq&CmiSTcSe!eGB<0S$W0C4sl$7aYl*bLroykt;$0hgF51Ol~;SD@hZ6W%F zgyr(1_ymoM%9@V~^nDcxXRciT)u71KUZfbz-OB+6pJX~ILe5Ou1s$yYx*OYB>xfIE z!V&N$GxLo!n?64Fsw_zXAqjL%S(%wwnc0_ZV6dZu{e-y^7M@(Oh?X}I8H1Kzo0QNQ z@``*qkR6+BBoFVjhUx-^Cexf&;t4`-PEHjt3|1_z6tAPD8k?wrEzjKW*>~jw)K54* zQ7bC3(`il1yUa;uVBN}!c|nIv@6OwTo~^YvBTrz%=fxKDl2Q_suUPW2D?(lyw-p9N zR&8D-?Wtp!d~7MG_VQksafzP7rzhe~7FEuycSs=_jgIx>;rc7>GtbOw_bdAK+^(^m zO@icZL{;?fWww^{J$AD8R(dAX$iY4xpz?9bYvQ}^7t%ib#HZP`aBm0P9o^fImG+t* z_70yBC86IhtyXKwUw8`Oya^k7^^rYi*pA*yYIpMiGk5Xgl=xDEX~e0LT31!Js8xxE zdQ%_Aw^xSGWjpsrO87rf^IR&3c~<9L;H$f<+zNa>SI=UXw|cXK@9JxhN!yMUiS6Hn z%R9zi#_|H(-M?6!L`H#cI=yNXG|G|dah6Q&cE9+_?zO?rKG~wO%z`(IOlNAjS7=d3 zQbE&nja7Y6=+A*~ZZ=6oTi$KU&7TIH!zl1a^{VGT?K|Aeow!`ZMl;b@Jdv~XZqB2a zeQ&+EEy059(-Q&fcks_q$=a95Yf=gah2AewX@76b{rM`AG@f95%9wNn?&BNwMe+xv z+vpqfW=dC#-WjP9BL`uTQl#L94ZJjct+@#nDa=$hPwvC5SGc>ZKAKb4CVi--rO7o!}yl;@Wr#lCv8ukw#9z4boE4XE!H__VQcw!WFdHvU6nVd zF1*0y(@LNiJrVmbh1IX>k)Uk2Fcx8HK1uIz3JK^O_KA=Cnv*9LPw}0&s_SP`BuPn$ z#lfs%>U*ZQsr_8Y5|y02^Nc>$M18Xf+va|fJuV-gu-J*YeY%(vSVU%cRXEi+oxU@Y zmhJkIFpyZs{&~&)*IOQB7bJ&=Hq(~&r$6q;z^W>-tM?UfhX%&qUYe61# zI?j)YsaRhVb+)Sgl*bO-c$x{Jqnf_HSergUMakpZ)hD`Ci<9M8PjpAHHTVShIh*Vk zpP2eoPh8q&e$Q{-O46%@1RHLN$9Tzu9M8;lY9t>ejvrix+%&K>?3? z_V@bsOHBHlbM!fw`3bP-&$BlSy?;M+^^CnI=nc+~uUL166Hbg_-GT+{bF1^0au}b% znhJq6P%Z|q_gtEuK2aL7e`y=Gf;~igH{^W7jVfB#6{2gI#bduTgKEbD=IdJcTN}Bg?zpUO585*g3Hme^b$+>gh zUYH`uPZ(s>TF(T^Iia`oJBU&T#NKLg!kBGs@Y()_q3Q30pct)MYpgcyT?aR;eKx<- z<(`kvKqmUe#xLIcsewytvOy-IQ@TY!omIy)70`JSn~(SR;~;XQozO=#J)48$k9GnG zcSo)&6I9{sJq~23@{tn-O1<)9FWtK3FgwW5x-YixRkBNecICr0`*L4B)|tSU2IuYF zNLq0d#u{-K&vJ5Xb*P?`TxY+}1Nu_WHW?`U{Up@6Y_|}ruWgI{f$GcJRDyTrWbX)O z=Zx{4cRirNR?mE>jaPe0-knMKxWxY8;oKhkt`9rOnKPwH^aL>9fS9mTt2gX!$=|H` zxvysOZR)gL>y{oF_gBMhJ?BwEXN%EA0LPx4YJR>4%N|C(f>Z|q3G}PBj%xHUC`G_-8%_h%&TJ(2HyZ>loWB5l` z3ZsrOR<2l!iy`{*tcWKu{Vi6%c%IHWc^Uo@@?tUdy^GwHo<3+QP;>!WIPzt4jPlj#Fn(mpFr;ut@m`J~7w0DfVF_ z`g>+*J)NI<+^-)G)w-RAtM+jxaUEzcOPFo2xZ5;cs;2G6f%0-X-1Zgxn6*Ewov_T=y~H476zY9z2bR^@6q%B&=n6 zcy`g&LF#JMwFlr94Vlc*@)P(q5qLHx-1v~Lb*h`REc%mAZ+xh20pVj=dB9?p@PPuD4o7m}lZ8h-g=nyCD)I12h*(GIiP;y1mwbl4(NLVh2MgM1@46`?V|I6IPen-a&ph4zSd*+kRdw6qS`_>YR#I{- z0VGo8(!G~1;fqYT%h*MQUG;;j?~)74sBp!9OkC_#l-b!J&TwA1#1}Jr^M2OI!+VeL z=AV*`T!`KwnW{TAlgNJ~uz-q@{AEc1d3C{OiU-LipG;rjrRlxinD75xbWJM&uT)E2 zecQK^qn%FX=}L1dqh8GLiHN2%d=Xv`ysI*_C7JU}6GJRaBcQ^m6MoFLO)MgNoea5| zKmFO4=&3$zch~7CWyuV$q-9qQbIWKN5aIK&)KB3lcM0#)3ds)`wsKL>YJ44cli(PN zk@KC;Rj7Mc#@1kofDp9|Dh*m5#zEFHAQQzuJku43#MBBORt7cA3t4e<`MD#$oOA z2AeaK9_?&U+3)DonCO>hwuS?1BzaXp^&+9dMOtL)%3eRy>(l@k{E)sd1p8XW)RNsWLXi6_PnU#J%gL za*ZystxKA!**Xl{-71VCNz<1MD~1q0&xW`6z)+rl{Ibl(TGHq;WAV4xck*nD9$OR- zI+cQ=!rT~nWd{o*RR>dpQ%7x{b;u|3kpM4z57NwvLrbRoO|$XrTpVi|gdXd~LSg6S zf8)0+amhW8%Zq|C#9!BRUt`$%v^+|@%Nc?FlX|Y)n`sQ5YlQ83BGJdYt=G?gl7$oq z_2+TI&Rptu8J@g!Pn7Kk3)B6YXTuNrWP7;O_xZaUWb%Yg@)&b#FlERRFm;*EF_msD zH+LjjY?EVMAaYo~BrL=Cfy%!87hg8EfmW8fRGYeRQP-mps}HNwaG6yVY??cN(5AhbtK`{9X%xS02vL65kMSBA=X+ zcDY(CaOSJc`=P=sS%jkM1lVVYRedz`!XFi~twxu=YN&rQxj<;nNMhQ4S*)yCuqD}$ z1J==}+#mJi-feIs5l9Q~vDb3S1MvsN@To0egT^_%jX53$_6wUm1dkvW>ZW_lw*!s=JY;=u6ABSR&6Fh!K{mn_pc&=Om z|MQcjAHe6Yl+uQC*r;Erdz5TTWCANt#(zt#|Gl}4Y}fd+Q$5eeDJQ6fl@c z<0JObSmb{&HzxUB=EJik4KU7+icPY2I*eR5Hn!)&)5(QNw^j7S8b{VW9_Wd_a!tP5 z{6dJTTs2ou|NMPdi;%6ikj3n?iafj($tEh_vh$1t9((BbyT01vR4j%Lku1LSE_0(G zu&kH4vnU%?%A#;?ne(^()!Vzz-v^%aoDFDw667{_d*b0Y0l!ZYdr@UWB(4=1>|YuR z!YHjOoL9RS+3N1wN?TKl8$+s{m#bZjaLz1QJ5bkF**}ii_h{~OSJ#lfqhoB;^fYlUbw=4XD~&tf;n4%lr@kQL z`RNqu_(y%3Be9j2Bh=BMT)G*k^bp=)R|Phv`^jD3%wc3GD%)98P#;u zmm1#L`6@?lCGB3%&zx4Aez?smtIq36#F`r79X-OBv+bd&4op%8%629R%YO>(l_<)H(&~>Wc=_$rfDDIr$oHfX% zFl03xx}zwre$8^>$MdIeST+`G`g=lbIpcS|mYDHMy5FaZmXCm1dA`qs%OL z_ak?cl8aHzZ8thEzUUHlsDXjOW{+pySuJgngxt)I$Fd!#;`+XyjjhV5)UCb5*E`FX zqOz;wIrh=o;j=#WoK8pw%_m|tA;HyY%djuz39mz<7r0XWt=K8ZSBs-`M@uH(!6&w! z>k=oo65S%tcYM|s6B3_AE@a?8O7m@9PG+(P2RAaq?cyatYe|up%O&Fpq<8NzJ)z^9 z)z5d1X1;758k*j~8Jc^U6kZkIcGhzSW_%;ld+_J5ZZ%_#r~h3@f>@=2y=AfYxwY`O zx~$`oB^fHzt_kvr^c#b(JpHEWvg@MH!Cf8c$f$9sYVOHc_7(AUzLexHY43`>NFp(- z642(u&NVAFeH%`7w&&*FRx+L`pRWEnQX2Q9c-)6KT2$J05^p4^y5Qoz(4@-LH+tU^ z`0T51N!@6=d77^8iS&8MXIOVTbldgG zL{@<={f$!tBFim&xk0F32zStamz%Fs`8M zybiY|oSDNj$hvpF@n7yJqD)wS$nt?okaxfLTEHEK?5jeHQi?=fLf}h29{5rdhTB6vA^vOshvZG_`L|mj`o7K0O1Z$3o;D@?9M(IOA z^F~yDCuAH#LVGS!Hnx%$Mr*ji<6ih_&Nk^<8R|*@#`&DumEI+6iJ$R#&-bV0Q;+YL zwU$G6Zp2o1k)(;&HgktZ4NRm^7P%~q%>RT?weM_)r@9TTn4GjvFC+Wj))#ToGhC%a zhH`^7S;Of`sm`6t*xax6AFP1NR->=1$gY)~aQMA@%fE4ARPh(Qwxq?m+-1Tk;|t@g z96X^vYSeD{ps1Q z`~n7P++_{U**lTy?KssoJyGZ>&(fRU?)eY zL}7LeTVZVk>m4y4XGMu$>V`@`d?aYH;)?i`y`DZ+v5#?&Q)XanQNNnD$5KA``#QDo z4y)$X*6(Ds?hDGnf;Dz79%mAYUH91-9`q7E8W+?(MXXFKrvRV+ajEK-AaE(F>Dk>; zHvjVBxF-px^+uA)(wFFdRe6@!Pj`I&RMD`zFi*bg==7$nZ~?6XsUq0|P`=`-@*q|VpBY=^ep3lHXrxTeCY5;myj_Qn*dAA2jg zU65%kfjIqYMU1Iwc>%rV?~SW6knUu<7qqwdy-#?TLS>_zH0PtK_wel0H?vO`rZ|aW1U+M{O-(7EVwdX*n)6w& zSVUin^{VsdW01bP79qqvS*~D*&x9eKa>w6o``1<^O z*^n!j2`w`M_RDL3($?3_+&)|7DgS}I{+p41z0r=y=lBad%eT@YwNrkkloU2R4Ap(v zZny6|f)NoFIw@%wYYUy7enoesm@Piz)aYRJ2{NUwYbDI|c1m_Q6QRsJpL^PS8+`kw zeOt=`-Cj}p^6u3*eS9hIq;_dcI8gjg+J(vHXlNvDU7u>>~v=2bV9;?8HC)JUcK?-u!ff zz?kf8&Bc=E@hz;}=ZoV%8oe}k&?{pS7e6EO^j*+`)9&lVV%1_v6(djLHenJbNhObY z25RxwqgBqS@*k3)BΝ?MK~y$Jb(*%r~ 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 diff --git a/doc/dev_guide.txt b/doc/dev_guide.txt deleted file mode 100644 index 82e54ec..0000000 --- a/doc/dev_guide.txt +++ /dev/null @@ -1,303 +0,0 @@ - -.. _pysalome: - -================================================================ -Guide for the development of a SALOME module in Python -================================================================ - -The purpose of this document is to describe briefly the different steps in the development of a SALOME module -in Python. - -Steps in construction of the example module -==================================================== -The example module chosen to illustrate the process to construct a module is extremely simple. -It will contain a single component and this component will have a single service called getBanner that -will accept a character string as the sole argument and that will return a character string obtained by -concatenation of “Hello” and the input chain. This component will be completed by a graphic GUI written in PyQt. - -The different steps in the development will be as follows: - - - create a module tree structure - - create a SALOME component that can be loaded by a Python container - - configure the module so that the component is known to SALOME - - add a graphic GUI - -Create the module tree structure -======================================= -Firstly, we will simply put a SALOME component written in Python and that can be loaded by a Python -container, into the example module. An idl interface and a Python implementation of the component will be -all that are necessary. -The following file structure is necessary so that this can be implemented in a SALOME module:: - - + PYHELLO1_SRC - + build_configure - + configure.ac - + Makefile.am - + adm_local - + Makefile.am - + unix - + Makefile.am - + make_common_starter.am - + config_files - + Makefile.am - + check_PYHELLO.m4 - + bin - + Makefile.am - + VERSION.in - + runAppli.in - + myrunSalome.py - + idl - + Makefile.am - + PYHELLO_Gen.idl - + src - + Makefile.am - + PYHELLO - + Makefile.am - + PYHELLO.py - + doc - -The module name is PYHELLO, the component name is PYHELLO and all the files will be put in a directory named PYHELLO1_SRC. -All files are essential except for VERSION.in, runAppli.in and runSalome.py. -VERSION.in is used to document the module, it must give its version and its compatibilities or -incompatibilities with other modules. Therefore, it is strongly recommended but is not essential for operation. -The runAppli.in and runSalome.py files are not essential but make the example easier to use. - -**Warning**: the files of the basic platform (KERNEL) must not be copied to initialise a module tree structure. -It is usually preferable to copy files from another module such as GEOM or MED. - -Implementation of automake, configure --------------------------------------- -SALOME uses autoconf and automake to build the configure script that is used for the installation to test -the system configuration and to preconfigure the module construction Makefile files. -The build_configure file contains a procedure that starts from configure.ac and uses automake to build -the configure script. -automake starts from Makefile.am files to build Makefile.in files. -All files with an "in" extension are skeletons that will be transformed by the configure process. - -Almost all files used for this process are located in the basic platform that is referenced by the -KERNEL_ROOT_DIR environment variable as well as GUI_ROOT_DIR for the graphical user interface (GUI). -However, some files must be modified as a function of the target -module. This is the case for build_configure and configure.ac files that usually need to be adapted. - -The basic files for configuration of the KERNEL module and other modules are collected in the salome_adm -directory of the KERNEL module. However, in order to be able to use the CORBA objects of the KERNEL module, -the files in the salome_adm directory have to be overwritten, using the make_common_starter.am file in -the adm_local directory of the example module. - -config_files is a directory in which the m4 files that are used to test the configuration of the system in the -configure process can be placed. If the salome_adm files are not sufficient, others can be added in adm_local. - -The idl directory --------------------------------------- -The idl directory requires a Makefile.am that must make the compilation of the idl PYHELLO_Gen.idl file -and install all the generated files in the right module installation directories. The BASE_IDL_FILES target has -to be modified to reach this goal. - -The idl file itself must define a CORBA module for which the name must be different from the module -name to avoid name conflicts and define a CORBA interface that is derived at least from the Component interface -of the Engines module. -The name of the CORBA module will be PYHELLO_ORB and the name of the interface will be PYHELLO_Gen. - -The src directory --------------------------------------- -The src directory will contain all components and the GUI for the module. Each of these entities must have -its own directory. - -For the moment, the module will only contain a single directory for the engine of the PYHELLO component -and its name will be PYHELLO. - -The Makefile.am will simply trigger the path of sub-directories described by the SUBDIRS target. - -The PYHELLO directory -''''''''''''''''''''''' -This directory contains the Python module that represents the component and therefore contains the PYHELLO class -and a Makefile.am file that simply exports the PYHELLO.py module into the installation directory of the SALOME module. - -The PYHELLO.py module contains the PYHELLO class that is derived from the PYHELLO_Gen interface of the CORBA -PYHELLO_ORB_POA module and the SALOME_ComponentPy_i class of the SALOME_ComponentPy module. - -The doc directory --------------------------------------- -This contains nothing for the moment. It could contain this document. - -The bin directory --------------------------------------- -VERSION.in is used to document the module, it must define its version and its compatibilities -or incompatibilities with other modules. Therefore, it is strongly recommended but is not essential for operation. - -The runAppli.in file is the equivalent of the runSalome in the KERNEL module configured to implement the KERNEL -module and this PYHELLO module. - -The myrunSalome.py file is the file of the KERNEL module modified to run only with a Python container, -with the test function that creates the PYHELLO component instead of a MED component, -and automatic completion in Python. - -Creating a component that can be loaded by a container -====================================================== -The files presented above are sufficient to build and install the PYHELLO1_SRC module, to start -the SALOME platform composed of the KERNEL and PYHELLO1 modules, and to request the Python container -to load a PYHELLO component. - -All the following steps are only possible if the SALOME prerequisite software is accessible in the module -developer environment. - -Construction, installation ---------------------------------- -In PYHELLO1_SRC, enter:: - - export KERNEL_ROOT_DIR= - ./build_configure - -Go into ../PYHELLO1_BUILD and enter:: - - ../PYHELLO1_SRC/configure --prefix= - make - make install - -Running the platform -------------------------------- -Move into the and enter:: - - ./bin/salome/runAppli - -This command runs SALOME configured for KERNEL and the PYHELLO1 module. At the end of running, -the user sees a Python interpreter configured for SALOME that provides access to SALOME CORBA objects. - -runAppli is a shell that executes a Python script, by passing arguments to it in a command line:: - - python -i $PYHELLO_ROOT_DIR/bin/salome/myrunSalome.py --modules=PYHELLO --killall - -These arguments state that the myrunSalome.py script located in the PYHELLO module will be used, that the PYHELLO -component will be activated and all SALOME processes that existed before the run will be killed. - -This command will not function unless the following environment variables have previously been set:: - - export KERNEL_ROOT_DIR= - export PYHELLO_ROOT_DIR= - -**Warning**: it is possible that the SALOME run will not reach the end. In some circumstances, the time to -start CORBA servers may be long and could exceed the timeout. If the reason for -this is that the time to load dynamic libraries is long, it is possible that a second run immediately -afterwards will be successful. - -Loading the example component ------------------------------------- -The PYHELLO_ORB module has to be imported before making a request to load the component into the Python -container, to obtain access to methods of the component. This Python container was made accessible -in the runSalome.py by means of the container variable:: - - import PYHELLO_ORB - c=container.load_impl("PYHELLO","PYHELLO") - c.makeBanner("Christian") - -The last instruction must return ‘Hello Christian’. - -Proceed as follows to see CORBA objects created by these actions:: - - clt.showNS() - -Declared SALOME component -============================== -For the moment, the PYHELLO component was loaded by making a direct request to the Python container. This is -not the standard method for loading a component. The normal method uses the LifeCycle service that uses -catalog services to identify the component and its properties and then calls the requested container to load the component. - -Before this method can be used, the component must be declared in a catalog in the XML format, for which -the name must be Catalog.xml. In our case, it will be PYHELLOCatalog.xml. This catalog will be stored in -the resources directory. - -Updated tree structure:: - - + PYHELLO1_SRC - + build_configure - + configure.ac - + Makefile.am - + adm_local - + bin - + idl - + src - + doc - + resources - + PYHELLOCatalog.xml - -The remainder of the files are identical, apart from adding the resources directory and the PYHELLOCatalog.xml file. -However, the Makefile.am has to be modified so that the catalog is actually installed in the installation -directory. It simply needs to be specified in the salomeres_SCRIPTS target. - -Construction, installation ---------------------------------- -There is no need to do another configure to take account of this modification. -All that is necessary is to enter PYHELLO1_BUILD and then:: - - ./config.status - make - make install - -Starting the platform -------------------------------- -The platform is started in the same way as before. Go into PYHELLO1_INSTALL and do:: - - ./bin/salome/runAppli - -Loading the example component ------------------------------------- -The method of loading the component is not very different from that described above. The services of the -LifeCycle module are used in this case instead of calling the container directly. -The call sequence is contained in the runSalome.Py test function. :: - - c=test(clt) - c.makeBanner("Christian") - -The test function creates the LifeCycle. It then asks for the PYHELLO component to be loaded in the FactoryServerPy container:: - - def test(clt): - """ - Test function that creates an instance of PYHELLO component - usage : pyhello=test(clt) - """ - import LifeCycleCORBA - lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb) - import PYHELLO_ORB - pyhello = lcc.FindOrLoadComponent("FactoryServerPy", "PYHELLO") - return pyhello - -Loading from the application interface (IAPP) ----------------------------------------------------------- -Before a component can be loaded dynamically using the IAPP components bar, the icon representing the -component will have to be declared in the catalog. -It is declared by simply adding a line for the icon to the component catalog:: - - PYHELLO.png - -and putting the corresponding file in the module resources directory. - -Adding a graphic GUI -=========================== -The next step to complete the module consists of adding a graphic interface to the PYHELLO component, that will -be written in Python using the Qt widgets library. This graphic interface must be integrated into the SALOME -application interface (IAPP), and therefore must respect some constraints that we will see. - -Firstly note the contour of the GUI of a component. The behaviour of the GUI is given by a Python module -that has a standard name GUI.py. It must propose conventional entry points that the IAPP will use to -activate this GUI or to inform it of specific events. GUI commands are activated through a menu bar and a -button bar that are integrated into the menu bar and into the IAPP button bar. - -Python module implanting the behaviour of the GUI ------------------------------------------------------ -The behaviour of the PYHELLO component GUI is implanted in the Python PYHELLOGUI.py module in the -PYHELLOGUI sub-directory. The Makefile.am located in the src directory must be updated to include -the PYHELLOGUI subdirectory. A Makefile.am must be added into the PYHELLOGUI subdirectory. -Important targets are salomescript_SCRIPTS and salomeres_DATA. - -The salomescript_SCRIPTS target must be updated with the name of the Python modules to be made visible in Salome, in other -words mainly so that they are importable (Python import command). - -The salomeres_DATA target must be updated with the names of files that are used for multi-linguism. - -Menu bar and button bar ----------------------------------- -The menu bar and button bar for the PYHELLO component are dynamically added when importing the PYHELLOGUI module. -They are created by calling the Python functions createMenu, createAction and createTool from the sgPyQt SALOME -interface object. Every action must have a unique id. -Some icons are used. They must be installed in the resources directory. - diff --git a/doc/doxyfile.in b/doc/doxyfile.in new file mode 100755 index 0000000..436dfae --- /dev/null +++ b/doc/doxyfile.in @@ -0,0 +1,74 @@ +# Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +# +# Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +# +# 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. +# +# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "PYHELLO sample module reference manual v.@VERSION@" +OUTPUT_DIRECTORY = . +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +TAB_SIZE = 5 + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES + +#--------------------------------------------------------------------------- +#Input related options +#--------------------------------------------------------------------------- +INPUT = @srcdir@ +FILE_PATTERNS = *.doc +EXCLUDE = +IMAGE_PATH = @srcdir@/images +EXAMPLE_PATH = + +#--------------------------------------------------------------------------- +#HTML related options +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_HEADER = @srcdir@/static/header.html +HTML_FOOTER = @srcdir@/static/footer.html +#HTML_STYLESHEET = @srcdir@/static/doxygen.css +TOC_EXPAND = YES +DISABLE_INDEX = NO +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 + +#--------------------------------------------------------------------------- +#LaTeX related option +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO + +#--------------------------------------------------------------------------- +#RTF related options +#--------------------------------------------------------------------------- +GENERATE_RTF = NO + +#--------------------------------------------------------------------------- +#External reference options +#--------------------------------------------------------------------------- +TAGFILES = +ALLEXTERNALS = NO diff --git a/doc/index.doc b/doc/index.doc new file mode 100644 index 0000000..c181c2b --- /dev/null +++ b/doc/index.doc @@ -0,0 +1,666 @@ +/*! + +\mainpage Introduction to PYHELLO sample module + +The purpose of the \b PYHELLO module is to describe briefly the different +steps in the development of a SALOME module in Python. + +Contents: +- \subpage dev_steps +- \subpage tree_structure +- \subpage build_proc_files +- \subpage idl_dir +- \subpage src_dir +- \subpage bin_dir +- \subpage doc_dir +- \subpage build_procedure +- \subpage run_procedure +- \subpage load_module +- \subpage catalog_def +- \subpage load_lcc +- \subpage load_iapp + +\ref dev_steps ">> Next" + +\page dev_steps Steps in construction of the example module + +The example module chosen to illustrate the process of SALOME module +development is extremely simple. The module contains a single +component and this component provides a single service called \b +makeBanner that accepts a character string as the sole argument and +that returns a character string obtained by the concatenation of a +'Hello' and the input string. The component also provides a simple +GUI. + +The steps in the development are as follows: +- create a module tree structure +- create a SALOME component that can be loaded by a Python SALOME container +- configure the module so that the component is known to SALOME +- add a graphic GUI + +\ref main "<< Previous"
\ref tree_structure ">> Next" + +\page tree_structure Create the module tree structure + +The first step in the development process is the creation of the +module tree file structure. The typical SALOME module usually includes +some set of the configuration files (used in the build procedure of a +module), Makefiles, IDL file that provides a definition of a CORBA +services implemented in a module and a set of source Python files +which implement the module CORBA engine and (optionally) its GUI. + +The following file structure is typical for the SALOME module: + +

++ PYHELLO1_SRC
+   + build_configure
+   + configure.ac
+   + Makefile.am
+   + adm_local
+     + Makefile.am
+     + unix
+       + Makefile.am
+       + make_common_starter.am
+       + config_files
+         + Makefile.am
+         + check_PYHELLO.m4
+   + bin
+     + Makefile.am
+     + VERSION.in
+     + runAppli.in
+     + myrunSalome.py
+   + idl
+     + Makefile.am
+     + PYHELLO_Gen.idl
+   + src
+     + Makefile.am
+     + PYHELLO
+       + Makefile.am
+       + PYHELLO.py
+       + PYHELLO_utils.py
+     + PYHELLOGUI
+       + Makefile.am
+       + PYHELLOGUI.py
+       + PYHELLO_msg_en.ts
+       + PYHELLO_icons.ts
+   + resources
+     + Makefile.am
+     + PYHELLO.png
+     + PYHELLO_small.png
+     + ExecPYHELLO.png
+     + handshake.png
+     + stop.png
+     + PYHELLOCatalog.xml.in
+     + SalomeApp.xml
+   + doc
+     + Makefile.am
+     + doxyfile.in
+     + index.doc
+
+ +Note that other files can be optionally present. For example, in some +SALOME modules sources tree you can find such files as AUTHORS, +INSTALL, ChangeLog, COPYING, NEWS, README, etc. Some files are +specific only for this PYHELLO sample module, for example PNG images +in the resources directory which are used in the GUI dialog boxes etc. + +The usual way of the sources directory tree structure initial creation +is to copy it from the existing SALOME module. + +\warning The files of the platform base module (KERNEL) must not be +copied to initialise a module tree structure. It is usually preferable +to copy files from another module such as GEOM or MED. + +The module name is PYHELLO, the component name is PYHELLO and all the +files are put in a directory named PYHELLO1_SRC. +Below is a short description of these files. Note, that files with .in +suffix are the autoconf templates from which the actual files are +generated during the build procedure. + +- build_configure, configure.ac, Makefile.am, make_common_starter.am + +These files are a part of the build system based on GNU +automake/autoconf auto-tools. These files define the build procedure, +namely, compilation and installation rules like compiler and linker +options, installation destination folder, package version etc. + +- adm_local/unix/config_files/check_PYHELLO.m4 + +The files in this directory are also a part of the GNU auto-tools +-based build procedure. The scripts written in m4 language are usually +used to test an availability of some 3rd-party pre-requisite product, +compiler feature, different configuration options. + +- bin/VERSION.in + +This file is used to document the module, it must give its version (at +least) and (optionally) compatibilities or incompatibilities with +other modules. This file is strongly recommended but is not essential +for operation of the module. + +- bin/runAppli.in +- bin/runSalome.py + +These files are not essential but make the example easier to +use. These are scripts that can be used to run SALOME session with +PYHELLO module. + +- idl/PYHELLO_Gen.idl + +This is the CORBA IDL definition of the services implemented by SALOME +PYHELLO module. + +- src/PYHELLO/PYHELLO.py +- src/PYHELLO/PYHELLO_utils.py + +These files provide the implementation of a CORBA engine of the +PYHELLO module. In particular, this is an implementation of the +services defined in the PYHELLO_Gen.idl file. + +- src/PYHELLOGUI/PYHELLOGUI.py + +The src/PYHELLOGUI is an optional directory that provides an +implementation of PYHELLO module's GUI. Strictly speaking, the +GUI is optional for each SALOME module. In some cases it's +enough to implement CORBA engine only. Then, the services of the +module will be avaiable in a CORBA environment. The module can be +loaded to the SALOME container and its services can be used in the +Supervisor computation schemas, in Python scripts or/and refer to it +in other modules. A GUI is necessary in the cases if it is planned to +access to the module functionality from the SALOME GUI session via +menu actions, dialog boxes and so on. + +- src/PYHELLOGUI/PYHELLO_msg_en.ts +- src/PYHELLOGUI/PYHELLO_icons.ts + +These files provide a description (internationalization) of GUI +resources of the PYHELLO module. PYHELLO_msg_en.ts provides an English +translation of the string resources used in a module. PYHELLO_icons.ts +defines images and icons resources used within the GUI of the +PYHELLO module. Please refer to Qt linguist documentation for more +details. + +- resources/PYHELLO.png +- resources/PYHELLO_small.png +- resources/ExecPYHELLO.png +- resources/handshake.png +- resources/stop.png + +The resources folder usually includes different resource files used +within the SALOME module. For example, PYHELLO.png file provides an icon +of PYHELLO module to be shown in the SALOME GUI desktop. ExecPYHELLO.png is +an icon for the makeBanner() function used in the menu and +toolbar. The icons handshake.png and stop.png are used in the dialog +boxes and PYHELLO_small.png icon is used to display in the Object +browser for root PYHELLO entity. + +- resources/PYHELLOCatalog.xml.in + +The XML description of the CORBA services provided by the PYHELLO +module. This file is parsed by Supervisor and YACS module to generate +the list of service nodes to be used in the calculation schemas. The +simplest way to create this file is to use Catalog Generator utility +provided by the SALOME KERNEL module, that can automatically generate +XML description file from the IDL file. + +- resources/SalomeApp.xml + +This file is essential for the module. It provides some parameters of +the module which define module behavior in SALOME. In particular it +should provide a section with the name corresponding to the name of a +module ("PYHELLO" in this case) with the following parameters: +\code +
+ + + +
+\endcode + +The "name" parameter defines GUI name of a module. The "icon" +parameter defines a GUI icon of a module. The parameter "library" +specifies the name of the C++ library representing the front-end of +the module in the SALOME GUI desktop. The Python modules which do not +implement its own C++ front-end GUI library should specify +"SalomePyQtGUI" value in this parameter. + +The section "resources" also specifies the directory that contains +resources of a module (icons, translation files, etc). + +\code +
+ +
+\endcode + +- doc/doxyfile.in + +The Doxygen configuration file. The Doxygen is used to build this +documentation. The file doxyfile.in provides a rules for the +generation of module documentation. + +- doc/index.doc + +An input file for the Doxygen, which provides a source of this documentation. + +\ref dev_steps "<< Previous"
\ref build_proc_files ">> Next" + +\page build_proc_files Build procedure input files + +SALOME uses autoconf and automake GNU auto-tools to build the +modules. The configure script is used for the build procedure to test +the system configuration and to pre-configure the module construction +Makefile files. + +The \b build_configure script provides a procedure that uses \b +configure.ac and set of \b Makefile.am files as input and uses autoconf +to generate the configure script and automake to generate Makefile.in +files. + +The files with an .in extension are the skeletons that are the input +of the configure script (to be more precise, these files should be +listed in the end of the configure.ac file in the AC_OUTPUT() +autoconf macro) and are transformed by the configure process. + +Almost all files used for this process are located in the platform +base module KERNEL that is referenced by the KERNEL_ROOT_DIR +environment variable, namely in its salome_adm sub-folder. +Similarly, the GUI_ROOT_DIR environment variable is used for the +graphical user interface (GUI), that also provides a set of +configuration utilities (m4 files) in its adm_local folder. However, +some files must be modified as a function of the target module. This +is the case for build_configure and configure.ac files which usually +need to be adapted to the module needs. + +The file \b make_common_starter.am file in the adm_local directory of +the example module provides basic build rules to be used in other +Makefile.am files. To refer to this file in the Makefile.am it is +necessary to use "include" clause: + +\code +include $(top_srcdir)/adm_local/unix/make_common_starter.am +\endcode + +The adm_local/unix/config_files is a directory in which the m4 files +that are used to test the configuration of the system in the configure +process can be placed. If the salome_adm files are not sufficient, +additional configuration files can be put to the adm_local directory. + +\ref tree_structure "<< Previous"
\ref idl_dir ">> Next" + +\page idl_dir The idl directory + +The idl directory requires a Makefile.am that must make the +compilation of the idl PYHELLO_Gen.idl file and install all the +generated files into the correct module installation directories. The +BASEIDL_FILES target has to be modified to reach this goal. + +The idl file itself must define a CORBA module for which the name must +be different from the module name to avoid name conflicts and define a +CORBA interface that is derived at least from the Component interface +of the Engines module. The name of the CORBA module will be +\b PYHELLO_ORB and the name of the interface will be \b PYHELLO_Gen. + +\ref build_proc_files "<< Previous"
\ref src_dir ">> Next" + +\page src_dir The src directory + +The src contains all source files required to build and install CORBA +engine and (optionally) GUI of the module. Each of these entities usually +has (but this is not actually obligatory) its own directory. + +The Makefile.am simply triggers the path of sub-directories described +by the SUBDIRS target. + +- The src/PYHELLO directory + +This directory contains the Python files that implement the engine +of the module. The Makefile.am defines the rules used to install these +files to the destination folder. The name of the module +engine Python file is predefined and should be set as .py +where is a name of the module. In the case of the PYHELLO +module, the name of the engine Python script should be PYHELLO.so. + +The PYHELLO.py Python script implements PYHELLO class that is derived +from the PYHELLO_Gen interface of the PYHELLO_ORB__POA CORBA module, +the SALOME_ComponentPy_i class (base implementation of SALOME +Python module engine exported by the KERNEL module) and +SALOME_DriverPy_i class that provides base implementation of +persistence mechanism. + +In particular, PYHELLO class implements makeBanner() function that is +defined in the IDL interface PYHELLO_ORB::PYHELLO_Gen. + +\code +def makeBanner( self, name ): + banner = "Hello %s!" % name + return banner +\endcode + +Other services +defined in PYHELLO_Gen CORBA interface also should be implemented by +this class. + +- The src/PYHELLOGUI directory + +This directory contains the Python files that implement the GUI +of PYHELLO module. The name of the module GUI Python script is +predefined and should be set as GUI.py where is a +name of the module. In the case of the PYHELLO module, the name of the +GUI Python script should be PYHELLOGUI.py. + +The implementation of GUI of the PYHELLO module should be done +according to the architecture and rules specified by the SALOME GUI +module. The PYHELLO.py script should implement a set of the functions +which define the module behavior in GUI, for example, create menus, +toolbars, define context popup menus, objects selection behavior, +implement dialog boxes etc. + +Here below is a short description of these methods. For more details +please refer to the SALOME GUI module documentation. + +- initialize() - module first initialization; usually used to create + GUI actions, menus, toolbars and so on; +- activate() - module activation; perform actions which should + be done when the module is activated by the user; +- deactivate() - module deactivation; perform actions which should + be done when the module is deactivated by the user; +- windows() - get a list and a position of the windows to be + associated with the module; these windows will be automatically + opened and positioned according to the setting defined by the value + returned by this function; +- views() - get a list of the compatible viewers; these viewers + will be automatically opened/raised on the module activation; +- createPopupMenu() - create and return context popup menu according + to the current selection; +- createPreferences() - initialize module's preferences; +- preferenceChanged() - callback function that is called when some + module's preference is changed by the user; allows to perform the + corresponding actions; +- engineIOR() - to get the reference to the module CORBA engine + +Note, that some of these methods are optional and need not be +obligatory implemented because SalomePyQtGUI_Module class provides a +base implementation of these functions. It's sometimes enough to +implement only some of them, depending on the module needs. + +In the case of PYHELLO module, some of these functions are +implemented to provide a sample for the development: + +- engineIOR() that initializes PYHELLO module's eggine: + +\code +def engineIOR(): + IOR = "" + if getORB() and getEngine(): + IOR = getORB().object_to_string( getEngine() ) + pass + return IOR +\endcode + +- initialize() that sets default module preferences + +\code +def initialize(): + if not sgPyQt.hasSetting( "PYHELLO", "def_obj_name"): + sgPyQt.addSetting( "PYHELLO", "def_obj_name", GUIcontext.DEFAULT_NAME ) + if not sgPyQt.hasSetting( "PYHELLO", "creation_mode"): + sgPyQt.addSetting( "PYHELLO", "creation_mode", 0 ) +\endcode + +- createPreferences() that initializes module preferences for the + application's Preferences dialog box + +\code +def createPreferences(): + if verbose() : print "PYHELLOGUI.createPreferences() : study : %d" % _getStudyId() + gid = sgPyQt.addPreference( "General" ) + gid = sgPyQt.addPreference( "Object creation", gid ) + pid = sgPyQt.addPreference( "Default name", gid, SalomePyQt.PT_String, "PYHELLO", "def_obj_name" ) + pid = sgPyQt.addPreference( "Default creation mode", gid, SalomePyQt.PT_Selector, "PYHELLO", "creation_mode" ) + strings = QStringList() + strings.append( "Default name" ) + strings.append( "Generate name" ) + strings.append( "Ask name" ) + indexes = [] + indexes.append( QVariant(0) ) + indexes.append( QVariant(1) ) + indexes.append( QVariant(2) ) + sgPyQt.setPreferenceProperty( pid, "strings", QVariant( strings ) ) + sgPyQt.setPreferenceProperty( pid, "indexes", QVariant( indexes ) ) + pass +\endcode + +- windows() that defines dockable windows layout + +\code +def windows(): + if verbose() : print "PYHELLOGUI.windows() : study : %d" % _getStudyId() + wm = {} + wm[SalomePyQt.WT_ObjectBrowser] = Qt.LeftDockWidgetArea + wm[SalomePyQt.WT_PyConsole] = Qt.BottomDockWidgetArea + return wm +\endcode + +Please refer to PYHELLOGUI.py script for more details about +implementation of other callback functions. + +An implemention of the ShowHello() function is quite simple. It shows +the small dialog box allowing user to enter the name, and then uses +reference to the module CORBA engine to invoke its makeBanner() +service. + +Note, that GUI elements of the Python module are implemented with help +of PyQt toolkit which provides a Python wrappings of the Qt library. + +\ref idl_dir "<< Previous"
\ref bin_dir ">> Next" + +\page bin_dir The bin directory + +The file VERSION.in is used to document the module, it must define its +version and (optionally) its compatibilities or incompatibilities with +other modules. Therefore, it is strongly recommended but is not +essential for correct operation of the module. + +The runAppli.in file is the equivalent of the runSalome script +distributed by the KERNEL module but configured to start SALOME +session with PYHELLO module only. + +The myrunSalome.py file reuses part of functionality provided by the +KERNEL's runSalome.py script. It is used to run SALOME session and +start PYHELLO module in this session. + +\ref src_dir "<< Previous"
\ref doc_dir ">> Next" + +\page doc_dir The doc directory + +This directory provides documentation files of the module. The +documentation of the module can be implemented in the arbitrary +way. But if you want your documentation to appear in the SALOME GUI +desktop's Help menu, some specific actions should be done as follows. + +The documentation should be generated in the HTML format. For example, +the documentation of the PYHELLO module is generated using Doxygen +tool. It allows to generate structured set of HTML pages from the set +of input plain text files. Input source files should include Doxygen +tags and optionally direct HTML tags. For more details please refer to +the Doxygen documentation. + +The resulting documentation of a module should include at least one +file index.html. All the HTML and image files should be exported by +the build procedure to the following directory: +/share/doc/salome/gui/ +where is a module installation folder and +MODULE is its name. For example, for PYHELLO module, at least one file +should exist: +/share/doc/salome/gui/PYHELLO/index.html. + +The SALOME GUI automatically searches for the index.html file in the +mentioned module directory. If the file is found, the corresponding +menu command is automatically added to the Help menu of the SALOME GUI +desktop. + +\ref bin_dir "<< Previous"
\ref build_procedure ">> Next" + +\page build_procedure Construction, installation + +Before building PYHELLO module, please ensure that SALOME environment is +set properly. Assume that SALOME environment is set in env_products.sh +script. In order to build and install PYHELLO module, you have to +perform several steps: + +
+[bash% ] source env_products.sh
+[bash% ] mkdir PYHELLO_BUILD
+[bash% ] cd PYHELLO_BUILD
+[bash% ] ../PYHELLO1_SRC/build_configure
+[bash% ] ../PYHELLO1_SRC/configure --prefix=
+[bash% ] make
+[bash% ] make install
+
+ +The first command creates a build directory for the PYHELLO module. Then +next step is to cd to this build directory. From this directory you +sequentially invoke build_configure, configure, make and make install +commands. On each step, you have to ensure that the operation is +finished correctly (no errors raised). + +The variable above defines the +destination directory to which the PYHELLO module should be +installed. After the last step is finished, the PYHELLO module is built +and installed to the directory. + +\ref doc_dir "<< Previous"
\ref run_procedure ">> Next" + +\page run_procedure Running SALOME + +Go to the the directory and type: + +
+[bash% ] ./bin/salome/runAppli
+
+ +This command runs SALOME session configured for KERNEL and the PYHELLO +module. At the end of running, the user will be prompted by the +Python interpreter command line configured for SALOME that provides +access to SALOME Python API (including CORBA interfaces). + +The runAppli file is a shell script that executes a Python commands +running SALOME session by passing arguments to it in a command line: + +
+${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python -i $PYHELLO_ROOT_DIR/bin/salome/myrunSalome.py --modules=PYHELLO --killall
+
+ +These arguments state that the myrunSalome.py script located in the +PYHELLO module will be used, that the PYHELLO component will be +activated and all previously running SALOME sessions should be +shutdowned. + +This command will not function unless the following environment +variables have previously been set: + +
+export KERNEL_ROOT_DIR=
+export PYHELLO_ROOT_DIR=
+
+ +\warning It is possible that the SALOME run will not reach the end. +In some circumstances, the time to start CORBA servers may be long and +could exceed the timeout. If the reasons is that the time to +load dynamic libraries is long, it is possible that a second run +immediately afterwards will be successful. + +\ref build_procedure "<< Previous"
\ref load_module ">> Next" + +\page load_module Loading PYHELLO component + +The PYHELLO_ORB module has to be imported before making a request to +load the component into the container, to obtain access to methods of +the component. This container is made accessible in the runSalome.py +by means of the \b container variable: + +
+>> import PYHELLO_ORB
+>> c=container.load_impl("PYHELLO","PYHELLO")
+>> c.makeBanner("Christian")
+
+ +The last instruction returns a string "Hello Christian". Proceed as +follows to see the CORBA objects created by these actions: + +
+>> clt.showNS()
+
+ +\ref run_procedure "<< Previous"
\ref catalog_def ">> Next" + +\page catalog_def PYHELLO module catalog definition + +In the example from the previous chapter, the PYHELLO component was +loaded by making a direct request to the SALOME container. This is not +the standard method for loading of a component. The normal way uses +the SALOME LifeCycle service that invokes SALOME Module Catalog +services to identify the component and its properties and then calls +the requested container to load the component. + +Before this method can be used, the component must be declared in a +catalog in the XML format, for which the name must be +Catalog.xml. In our case, it will be PYHELLOCatalog.xml. +Usually this catalog is put to the resources sub-directory of the +directory tree. The simplest way to create this file is to use Catalog +Generator utility provided by the SALOME KERNEL module, that can +automatically generate XML description file from the IDL file. + +\ref load_module "<< Previous"
\ref load_lcc ">> Next" + +\page load_lcc Loading PYHELLO component via LifeCycle service + +The method of loading the component is not very different from that +is described above. The services of the LifeCycle module are used in +this case instead of calling the container directly. The call sequence +is contained in the runSalome.Py \b test() function. + +
+    c=test(clt)
+    c.makeBanner("Christian")
+
+ +The test function creates the LifeCycle object. It then asks for the +PYHELLO component to be loaded in the FactoryServer container: + +\code +def test(clt): + """ + Test function that creates an instance of PYHELLO component + usage : hello=test(clt) + """ + import LifeCycleCORBA + lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb) + import PYHELLO_ORB + pyhello = lcc.FindOrLoadComponent("FactoryServePy", "PYHELLO") + return pyhello +\endcode + +\ref catalog_def "<< Previous"
\ref load_iapp ">> Next" + +\page load_iapp Loading from the GUI (IAPP) + +In order to activate PYHELLO module in the SALOME GUI desktop, the user +should press the PYHELLO module's button on the "Modules" toolbar or +select the name of the module in the combo box on this toolbar. + +The image file to be used as an icon of a module should be exported by +the module build procedure. The icon file name is defined in the +corresponding SalomeApp.xml configuration file: +\code +
+ + + +
+\endcode + +\ref load_lcc "<< Previous" + +*/ diff --git a/doc/static/doxygen.css b/doc/static/doxygen.css new file mode 100755 index 0000000..88e613d --- /dev/null +++ b/doc/static/doxygen.css @@ -0,0 +1,170 @@ +H1 { + text-align: center; +} + +CAPTION { + font-weight: bold +} + +/* Link in the top navbar */ +A.qindex {} + +A.qindexRef {} + +/* Link to any cross-referenced Doxygen element */ +A.el { + text-decoration: none; + font-weight: bold +} + +A.elRef { + font-weight: bold +} + +/* Link to any cross-referenced Doxygen element inside a code section + (ex: header) +*/ +A.code { + text-decoration: none; + font-weight: normal; + color: #4444ee +} + +A.codeRef { + font-weight: normal; + color: #4444ee +} + +A:hover { + text-decoration: none; + background-color: lightblue +} + +DL.el { + margin-left: -1cm +} + +/* A code fragment (ex: header) */ +DIV.fragment { + width: 100%; + border: none; + background-color: #CCCCCC +} + +/* In the alpha list (coumpound index), style of an alphabetical index letter */ +DIV.ah { + background-color: #CCCCCC; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} + +/* Method name (+ type) */ +TD.md { + background-color: lightblue; + font-weight: bold; +} + +/* Method parameter (some of them) */ +TD.mdname1 { + background-color: lightblue; + font-weight: bold; color: #602020; +} + +/* Method parameter (some of them) */ +TD.mdname { + background-color: lightblue; + font-weight: bold; + color: #602020; + width: 600px; +} + +/* Separator between methods group (usually empty, seems not supported by IE) */ +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold +} + +DIV.groupText { + margin-left: 16px; + font-style: italic; + font-size: smaller +} + +BODY { + background: #FFFFFF; +} + +/*div.div-page { + background-color: #FFFFFF; + margin-left: 1em; + margin-right: 1em; + margin-top: 1em; + margin-bottom: 0.1em; + + padding-left: 1em; + padding-right: 1em; + padding-top: 0.5em; + padding-bottom: 0.5em; + + border: 2px solid #0D299A; + border-width: 2px; + border-color: #0D299A; +}*/ + +div.tabs { + text-align: justify; + margin-left : 2px; + margin-right : 2px; + margin-top : 2px; + margin-bottom : 2px + font-weight: bold; + color: #FFFFFF; +} + +DIV.div-footer { + margin-left: 1em; + margin-right: 1em; + margin-bottom: 0.2em; + text-align: right; + font-size: 9pt; +} + +/* In File List, Coumpound List, etc, 1st column of the index */ +TD.indexkey { + background-color: #CCCCCC; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} + +/* In File List, Coumpound List, etc, 2nd column of the index */ +TD.indexvalue { + background-color: #CCCCCC; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px +} + +span.keyword { color: #008000 } +span.keywordtype { color: #604020 } +span.keywordflow { color: #e08000 } +span.comment { color: #800000 } +span.preprocessor { color: #806020 } +span.stringliteral { color: #002080 } +span.charliteral { color: #008080 } diff --git a/doc/static/footer.html b/doc/static/footer.html new file mode 100755 index 0000000..6eab03c --- /dev/null +++ b/doc/static/footer.html @@ -0,0 +1,12 @@ + + + + + +
+
+Copyright © 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+
+ + diff --git a/doc/static/header.html b/doc/static/header.html new file mode 100755 index 0000000..a70a95e --- /dev/null +++ b/doc/static/header.html @@ -0,0 +1,12 @@ + + + + + $title + + +
+
+SALOME documentation central +
+
diff --git a/src/PYHELLOGUI/PYHELLOGUI.py b/src/PYHELLOGUI/PYHELLOGUI.py index 911eb60..554c359 100644 --- a/src/PYHELLOGUI/PYHELLOGUI.py +++ b/src/PYHELLOGUI/PYHELLOGUI.py @@ -106,7 +106,7 @@ __study2context__ = {} # current context __current_context__ = None # object counter -__id__ = 0 +__objectid__ = 0 ################################################ @@ -405,6 +405,7 @@ def ShowHELLO(): # Create new object ### def CreateObject(): + global __objectid__ default_name = str( sgPyQt.stringSetting( "PYHELLO", "def_obj_name", GUIcontext.DEFAULT_NAME ).trimmed() ) try: if sgPyQt.action( GUIcontext.OPTION_3_ID ).isChecked(): @@ -418,18 +419,16 @@ def CreateObject(): name = str( name.trimmed() ) elif sgPyQt.action( GUIcontext.OPTION_2_ID ).isChecked(): # generate object name - global __id__ - __id__ = __id__ + 1 - name = "%s %d" % ( default_name, __id__ ) + __objectid__ = __objectid__ + 1 + name = "%s %d" % ( default_name, __objectid__ ) else: name = default_name pass pass except: # generate object name - global __id__ - __id__ = __id__ + 1 - name = "%s %d" % ( default_name, __id__ ) + __objectid__ = __objectid__ + 1 + name = "%s %d" % ( default_name, __objectid__ ) pass if not name: return getEngine().createObject( _getStudy(), name ) -- 2.39.2