From 315ce98a7d56f05212b8ffc9f57d069b5017de5d Mon Sep 17 00:00:00 2001 From: Paul Poulain Date: Tue, 28 Apr 2009 23:09:11 +0200 Subject: [PATCH] printing ordergroup * the .odt contains the pages 1 & 2. Pages 3 to X contains the basket, and are generated on the fly. Page 1 contains a general header, and page 2 contains the list of baskets (with totals) * the .pdf contains the pdf generated from the .odt * the .pm contains the sub to generate the PDF from the .pdf file --- acqui/pdfformat/example.odt | Bin 0 -> 17587 bytes acqui/pdfformat/example.pdf | Bin 0 -> 33648 bytes acqui/pdfformat/example.pm | 328 ++++++++++++++++++++++++++++++++++++ 3 files changed, 328 insertions(+) create mode 100644 acqui/pdfformat/example.odt create mode 100644 acqui/pdfformat/example.pdf create mode 100644 acqui/pdfformat/example.pm diff --git a/acqui/pdfformat/example.odt b/acqui/pdfformat/example.odt new file mode 100644 index 0000000000000000000000000000000000000000..edd860d93e8b940641af3b4e80f727311c40337e GIT binary patch literal 17587 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 literal 0 HcmV?d00001 diff --git a/acqui/pdfformat/example.pdf b/acqui/pdfformat/example.pdf new file mode 100644 index 0000000000000000000000000000000000000000..83e25754bf81c756f6540e392e57c838fa9e8443 GIT binary patch literal 33648 zcma&MQ;aTL)UCP8wr$(CZ5wadwr$(CZQFM3vUk}!-`_dubaJ|rzMGlray=Pi%rzI8 zqNq3>6Fn<5*>K5l&v4stJ~T5SBcZ*q6*Mm|gDk+#+{J>B<-d+HgSe%Q3&4p%+{VZS zAPO+CHwEzXLp!@T0gP;+J#uO_r0TcX5&J$h&UFXq%|(@o2_YK*-GX+O_zNNnIvk)3 zU|BLhe&$EUp3^YE!)@ZjSaTna=WYwWyI<>_bBijHM(ggy;d+;SUz^`ADzEhq=Z`11 zvj+f>#(g6Ul!dNzfv)`d1t2#Df8QM38J!H=u02l--JHlfyT1ZC?MKIBSnm)!$4fnU zY`K{ z@aFJU!_q2?(<+M-{kJMm-3q!>W~8yOVNt(Zh^oXXB<9Bi_ZnUzmU%~YY6Z!o_lT70 zA(bT$nspgnE8LKE(lhZM9B$`m|4{0jOCu2syXVG2n0Bwth0N`@%>|C6orQJJ73$x% zIyfm@b0te{n=E!|e`V{JrKpDqUn&3L9=T-xxEa~Z#&%Z-6ulVkD8a1CZ3S9FWplHj z>Tl0!_VGB~EpSGNEoh5q&P986rIae71(>D?xq}~cK1+lfe6*Ih>tCq_38snW-lu*> zR<5>eO6E`-2mBGebG#sp^GmdY!=u_^%=$ZI;9@+{)#1O8!5~1zmzg^|XJV zO@kn&fN>22Npk**&Yv0AY*1d|hx3gX;khtS=e*&QA|sz$VD-}i{izMqlpZi8Ria>9 zxs*WsmC9)1B9o-VCz706{T|UC9gUcnk9@_a;E|?{NMnj#y-~4f)NB^NW^0MRf$@3M zQ(I^w1+($4hH~r73q5z1mQFHt^fsnWmTZ$+F?}_yot!!f4Knv67nQw|MNsySdlg)j zQz-Tzq0{O5(psx>ikm*SS_j+{o@!a{8W`sru~8 z+>&}ay_=9_2JVbZ3;g?@2_vEXRobF>(IF@(&9UB=`{uR17N$NyNve8O7@Ly5B) ze=W);AR?d@fZols!3^KUrlL%jD5aj9llRpLSo<0$Ql z=MaY<#LlK@L36#6{P<^Dj;R~V-(|C}9tLl*AQ6?SFY+hw@@0|@ba-RVTR3$acxk$j zIh0z2$zIJ|vGfu^RE>71++b0wefibdR4&c_^qgm(C%^dVjY2qFB%e0xQz?PM&tIU* z@-MX$lBmrK#qg7a>yS$`ALFp5j9i%j+I$#1z#5PE2P3?WpVxxihxcPFUgump6MTQvr-(TX7pFK{fJD zd#`4yRYLPk>UBB-d;!Cn&us;p*F6*bheC^Ru_+e()ghV1h0CMZ#Y!=jhk!cMQ14yw zr-m@07Xo#b(a(SWz7t-^&;UEr|1J0bRsZ7<(Eno$|5GrrF>?OT@&DCi`#=1H{r`u5 zoC6D={C0zo9F*Hyeb)#Y`jU+6R5%)*8>y#lU$Ana9 zA@bKO!L7ElmEWfQ)QiR4o_Eru4U>TC@;^;TVxpU|Hi^l^`9a71_T7369~Z zzty52M;b)iY}ug*A}d` z-Znm4M8vUWIC3wyo{UvC7mck2f}0e|GQPAf15cW0fKAd*2BIgIQP07hjk$*6>eJQv<~E;ragslmEH@|3QP5 zjqCrWg!BKPgzNuS-|k8*;s=!Q#$La#^vAOBD#X1EB$A_r%~9IWM7F4@v7ch_)++*St<=_i8$c36j zvjo|gxSulX>4kL}&^Ot@m|+4ROhT$6%OOW#vFha|;EErSh4fFnS?@Te3I)vx`9smg-{*Jx z1JQ*H#VY6dw-sbzZ3Xj!I(?CQ11IMagw)07zBM8U1sVaDpMP|IEK4H5^hId7U2vY{ zo=7*N(~_nWIAxtBGa}A;y`bwMrc@T@ecQcy?)njZL3a^u*(@+^!#O`8p9#KkmiE6` zo-X}bQ28Rz3uoI?-{|?LunfPp7M1>9AYjt+rdO(UdQV^p+xZ|N=S$!mTnsO`H^u9e zu-0E)TNpHZso9)FolI|~(JSfbWM!js&?{pXJ;Pj~udJ!g*HbgVq^F@`pdUj#9DDj1 zlr58M)0q_u)h}Ct=8<5caZJ-WQY8{7+`Ttdr7g7VKm_z{|G5tVElA^WL{`ozlyWzw z4&Zu%k|hhR+!-1vYC)uxqRdW;d)l2D9kkvK3Iia6DY7N0c^%F=- z&SnnFDFcs}o{CPt9Aut)pe*oMveKquAYe;JElLF=6^TcXL7y}xcQ8h2g`l!Ca7rc2 z$yUob1fKQq0~+(k z?T^B@-`0JvIa&)4a^!_tZe>ddyN7|WG-nIF&>^e28~ymIkaO9YlO0<8G-H;nHMcpk zkKts%4lM89c6!F%p9dENJZLRhP5!%&6Rd8zD!6)+4&)ZA$$^Lz#D_pS#mg69LaLUD zmyzghH3BlT(k6ZeLCmNJ+9$D7F;rkC(ZSB~YYN20rmwis>Q6 zA_jO7)}@g!2BfrcWckkfHIF4Tw)mP0Q?aE{5%Mfi&^DI*&eD@P-z+c zRZn;^JAG~~Do+J5MKbMm(Zt+#aHaoWaUUwz`zA#td1*VP>R3%8!OB*zskzgw%?T+BI`Z%L}9nS~XtZ zS6`J1QcQt1RC-J)3rb~G&RV*ESb+v06O0I_re&!gmCJc4>yyJvLy)gZe2cG*bmdus z?|J#uZ`@1lOwb#k-if^Fg)%cOpgir(?TS)M?a5XZOc^q#)686)wzIILb>&e+7aqu< zM8z~K8$CC#%OADuE`p_CS+Zu&GLxf(&mI_a+gKiw0h&V<9@u#f$2eOu^xtcGoG zV#!7eX0R2e-WJs;(7w*I>gJq@GnC`o-1|fswQ%iq-I);{xaXxHsbHlkQ-Cdni=d<} z*+^Yr_r2wXEV51>U+Ocs(Uv3CKNbk0rslh&TS*nAeE(?s;w#KI0SUxxJo} z3hv^m`Ed#9M#U)CQtcHyRa$m7%ovMYy`+?c2vk-RXO5_d#HI-3NHJujSSn=$b^n6A zn87Pe-=ZJkUPb?x)0(0&h!ux#@8=Qi_-e&oP|f>~O)sNBO@e9)$cFkgXXugff{oA* znddBJ@2?DW>sBZAp0R(ot0MsU%h}fAFd8_Gzt+`o@dlNnd`Bo(-fOQh;bRmd2KBd{ zODO+3m4Q49X0b8Vpd_*AwforK=hgIoEEUu&p4-UahH0v2 zKBm}E=-hq%Oz1LhKx;eR>0gmwp_z#ZymYlXw(mj$A;EhzUQ6OIT|5|mNfn-W_vG>j zMMWCsN{9s>Wc-LfroWhe$pjQsqVlUBRouEU=+xpr?lTBzemeZO{AcFJzcT<@z@=3> zs~g5%i#SI+G5MT6WS}`YkU$iH@fuUpYp*2&8&a7{YFq-!2W!A*$DZhhs`Q05NBUmh z?HK;=)9w1d?aO%|fn+jAY1Vz1fuS`Tig0zn{+g2Z@)LiNn4)aW+-8 zyDlM9#AR(buQ=!RF>^U0+zD;Oy%i7KHO*08$yR7Ov10<*k=vM@_yaxzSeyhMxPPtV zA?m;+173((RLjDEH?Rhpfn<$=c+oT9aUmU8A5-k}rV^xa?a(~6%YB>qgM5kDjd9txJrh- zc1^e+P~%_kH%3fy@g{4rh){=W?rfjKkRCg5nK-B; zutc$1{!+95Al*x-LR#c|XW-V{BJBgy?<55UfK4aWGD8Rdo1;9rWO|B!L1p2}FtDW= zec*+A_q-RmO6n$lOntRV(HDtBB~eW;f*D4^1BzsnO`T${+#qjO^WnQgn}U9n-t z4oqIN&Lktqo2DMDkHgi}NFYkuzj~?{**95uMNdE=pcYnxDmjIrWa@ zXQ5%q@Z?NhKdI&~Uet(*a&+l>)4X3buFHrTI4q@xON}W~W(!!A*xiUV4h#^F0z_u1 zwWVxqTMyUFGfo{XoaL*BjOrA{pM~^n0S=BmOGD%Wb(4aba)JCZpflXrWS@@N*~R&= zqSal}Y(A$1?-dN}ye&j*AEw!=tD5dGY>3eMjSL>{#=L~g7gjWT?V2At?Qg&Seh)n> z*c-&=L)U-LGy(FpaO7v9szB5Q^I;ayO9jh)Rb^aGC1yp-$2nz!9pi?T5JiP>)q<7> zO$K2GtA&UpKhJ5XmAr!)z$dqI3UQN)|FQC#5r)lVEK{S;=#VY+sRw8-=e<15Jh$|~ z*4_@Px)0rz@nm2dX6p)$KOR}?&(_{mRIj7$zCPEcM&Evq!&SqJRf_~BZi#)*I{j;c z_&95&ubZxLJ?4asE}yr}=5H?^Gm`dutC>c@=WMFHdK6&`+A9hD2}N8o75YVY+E;qH zQ+sn-ZKWnw?W_V;!!?Lx(9o|Y6)vr2R-D9wxg&t7!$?Sn(WfBCf6jw0*pw04?n~m; zmBVxMJ1e_`O4R%1w4YL3q%Mk$J=S12(%k+>xw8O8Z7$3;hrXT-vu4s}l@p#jVi3tT z(k?#95S6D`6J^xD7kBhm0X07^FFwh<=q-}ck1?ve$U_9RT?N#gl|cILR^tBseDwT; z@>Lm?ApY=uv2~G%(1nruSgesJ>YcI=eY9S}AA{_y_|5Q1Hsw0*@J6YJK8mJTPAQ3C z)Gh3VfuN+S8}lR&fX0tIilW4eINC^Q7jxJ{32O+A#^{eTic$O)u7nE~Ej8(JPv+|C zB9g+oNdAY~n#jnLBi>)lm;6IHWk=r0HcP)MG~D8oKf-CexCLlukaAB>sg1?!eeqpM zxafs4Fz$mvUL0vB{iGbM**Yvt*7J?bjLT=8=Fa>8IXCf!$ zDq85Ug$_T_4<&Eq!Y&P7)LlGYtV_E(RYplM=lB3@`^S$c3ZX%KO^ibdiQ#n1o6syTw1T3R_;8cePJ2`y50(vSv5Pt$Pk`Q<65 zoFC=M*?KZJcn|#FcS;OTR0t-oi}z_R+uICkwypyYuhONduYp`{hf|sV$eXhJpRh*BrQ~dDGE-8@z(EbMSNN|r02MBr@T4i<0FP|jv0*kT5V`DA==Y9=PQUN*J&{W&5zvs zMmEwEA-emD+;!4o)#--J^@!=X8O|8*X+>jpaeHOPaF@;Sm%7}n3*5ijL20-!Nzdx$ z086c4F*-`ki;=mnFV8|vH})(7EkHvT8&j{fK5V3oSm7GT30Vy-<4mH1WRLJomCiI3 zi}(f1JX8JOw1*QM2Q-!jR&`npu|^SVAf1%D`Zx2bHOrUzkUgw1^qW;c{NGTYrY=I&>%q<;_FK$@@=dtC9}&t4SA;4i5Q$K;KEKRiH!KFYMG_DWt%ZE3BC> z-l=_a76U~(;8769!lV_*Hu1&~(v3AN)u^;oL*8Z0$rr)!HVntbi@~y4!P^5hoqan+ zXJ*-4Q`d{Vbe*BT^c=hyR+5{%z<}!-roqsLK16=FfmCBSXAJ|DtI&y~J$kbme=opr++1 zY7i%Y!!(3%`d^3vFQ=0vB~F))N<3Pk7n;e>LBG%^;mKM5qt|C|BdzcIb@t|8H|Te` zw9fuCu+kyLP#90Mv&z)i@3)?>`}x?KthbNe^HxYFi1%S(Id%tKg@ajnj+U0TUi){c z)o87kIiB_vf25qKx{I#e($>eRyZ)`%bN07PJ9*i}Y#eR^>f@rOfS9JK_*Zejca;6V z2cpZH4Lf$rJF8@i%O$HE?OO4HY9f+382LPm9%6K|WH~gkp9*xEt&B9$mW*ZYTzMZX zRj%A(KrS^L8cl~3MovLV4n~efF79;lgXSKUf*mx4flEcNJa7JZ&n9xaP9YY%4eGXN z5egfy{nEplK1dmNtY>24#0S16v{%MPP(%>NCXal1(;G@x(YDpqaN)fKvsl&kQXnT! zwD*X_d3O)3AR2C*Vc9vSKsc9xAKRuExx;NnKKw2XGZgH z!=GIymtx(VL>b>$aH#FCNk|`7(A#?Qz(2=5%CZgx7Uv_u2zeWtsx66OB4PsFSDV%f1V4|DdV2G}?{^2U`M1R5 z_`f%e-T$~>w#Q%fKR#bx`ukg6$z=1QNAqOJ4ZNs4zu(!c^TvT^RL&{hx!%y#&S|9g zmZCDDAGFqw=$i(5SA6rm$7W%WG)NH-(7n<;`L8^8hEc38&Ch48?8^2^z)=@V!GYt@ zRq51@thko|oqnzWSNrGaRb45Ww#AGaN~9>`pQ*1hpQQX-jL{55OB-f<4yPofQ?BPG z!^_fB{GOZER?ZnSU5lLAcEr^+KFZOoC)lc}2EK~-_IWl9t2)bbRT2RPi~VN)onGU> z&XS$>!bbCkii^5`-C0r6>$2<|d>xFs#}`pGmy}ljdb*oCA+NB-w}Qm0DZhRSuZPs| z(4wQ9ogOjV=+wcpOv5i$>98^z%a*zf>0>T-Rol4&&B?w%C}DO>SCX)Eb_nZ3MwH$G@3vajsoq5Q*rN7RS=i9TsGbtyvg z`u#>8-*qR-PNNKVUvKA7Uk81+aw(w_{d~h@#wxa+94{#?`{_PJo1EsIEB4$CX3vF{ z=xyX+fmGpwYb=XpDm_3fO7K^;Rm0&D_w)_MjeTfZqS2l6h2Dr43vic`5F8Uo^26PpMG$9SOH{d1t0f|^W~WpZjd@vDo`_6;S1}LRdj~7m zaUk_;m#?(B4v#s78}#Fyv5IzWRGz)&3`O-(g?D&KgOUY4>DcOsk=mC!jA?9?7$VXUi=819xkBrF&tIit>2v(B&&l~Yk zI9SZa$8jpqqKDC_Fyg%cgxEy)hwX1rn3U)=U<XKWFF8|!gdq37(lWEyd^fmp_LACnTIn%2Wa8At#e72BcGqHtXiWs=+N2g z`(x2zN7xOwk+5pz5|&dkyLscYcIKYr?_woduB=nf?b|bdLDIVJ^A>=R zjM;o(?)wE4fk<$oBb7NdB+CGUwn$qwgiUiBd7_!C)fmGC=Nt;{J@0V~x@~1v4$ndV z!kBJm=U5}%&9*cC^%g_dzHmc7(Yombv-59AH~WBQvc|;QA;SODjnYuh!1a@#``LDV z;3F~gVNrnc6%&^Q-YG|57R4>=q2Z<=78c?z(S|qY+kzcwhMr{+061KwH&0_}o<4C| zirCja9imS!pVp>CH!gLkxf3SRG|^*%TjNyXy(V}@={Govw)TF`fwA^td2hjjoCa$J z%7lWXA=!lu*fa%!IY>;1@VkpZM80^+Z_ZJi_t#@-Spie{7=~n5smCuTVMko|@%)S^$awW&@6q?5wz~A}K z@0Zt(h}7eB#Q{aUf7%y*E(#6^FXZYu`2Y~Z!e}s)+)TEL1QZWF#Ph<`(3#TO=?}0+``F^Z{FgAiEGK27k7IvK7%H5~OVUk;dYV z{SPImO>EA!KdSs@FSq~rSpc8j3a4;BJFwN2SZ|Y7TqS^7eL3>5FCbpK>+J@$ftd!r z9#HGDQ9pZ0^qQu(7!Z%@OFf`Fd##_lJu$|3qHf8(a$T66mr^oZOb=8YJ;C%OZ*HOy zLq`%JLxYjiv>cW&nq`1Ppu2_ZH$^e``rD<`b8y$QaHdw6(jMHHAWfZNuV9UI0 z#g8x@+qyEyV`{5Pyl1$YjW#CRQI#Z`Gh`{b6yu-$yJj}DjSQMQS=-IUn<_m%Cc8i1 zN7=nFUg&3Q>nWQj;++63@Avurobot&9%o?ti@kk=%!`4%+n}2Y2%JvK(XlXG`F8F4 zOg{&ueBz5*_+dxcry`}#8D}`1E$i62`XP(vW(^}Yi!rB_m^f;ac*CCXVfMLqMsCO+ z>{?CEOXov~TmuK>M&R3ePHmwav^i**f9Jzp!Q4gGXgVgfq-)%3Sr)xpQy6jlW?VKz zE;KV^lgZKOsj3RlT6HylHmVG!kegb_lD$mQm@Ir|JT@rLV+K?;v9Y~2JXLLNz04Tn z)_^6v$Ap-e^VWjo;I3C1M6Bd4HQTc4`YqMoCyzE2$_Tbs`1+fT_OAMUzn?GY+-<4$ z??wc_V7}431w1`)T+~`5imQj-=c$exQH8;8n?TmV;80x9w>~ifv;%5zqUwxM; zuxqPcuV<^J`7*Ap^+f26QHa`xL)@|Nda-+ghtrfuNwg9piN{Y&9>_B1an)QPT*h5; z=9ny3PGyxXW%IR_-Si4~E{vGNRp`kPTP3Kke?t)%)NK9Sa`1Hxe6DQN^?s8|dmr`c z-g{-zpVk41NAqL?+?%lw4m|pCpGm(7KKBFm`MRx_ll%CbcXNwzamBX{?;WVztw3w2 zBp-dsv0XXBd3PZWx_>>5I7B&{8O`$82^gK_PTd{@GErueGVjcMCVf_A<+JCr8M3%o z^r+IuRk5kv+31vx%(NrWhyZ3Y*}12@EE?n4G_!Jorc*uHXgxM-28;&GD8i9xnI@+l z?-^W1d2Cl@S`LFVIBdO!#n8RFTLzT_*QnVS>xz`FposFeMBsL{Z1i;e&WB?J@;QW= z6voal5~&oWw}x=5U*I3vk$q*7oXe&vN@a^>W`r?`n>EudrY@1hJbAN`dv@~5HEmo+azX*p|$ zmUN|~a2Dm5OD)DcuX?HL+^wKiT@}5&5Z@nEYzo^Yw(CxkG**)uScRVRyfQd0TG3|{ zjbUoQ#AF>hG>k2_-u)F#VTIF0Nsf5I7^fT3HCX_mTEd1o6A|U*;;#pm1wlXU#YNovhTMZ3Z0bc zFJ!B<_q6zRe=N8Rid9Vw zReh*pLN_Zq9)GOrpdnUv)5_JaTq;=?%Q#IjJC=#pK|YG<%Fb2>s_mDDsr}19suo}E z;6$fE#u&%lyx8V!o$>N%6)q_wHQPRQ8P1U}ctSNEH?WCX{5HePmgICP4Nrv)-AD}2 z;71QeC>k@5(2`yG0qtf!RLIP5hBtGi(ooA4Fc$!*nk#Oj;5rKMdCFnIWZ2H{H4$_a z`g5b`ChrbZJ~n@G*&-PfRy&`5v3s-oe; zwpV)YNl)u*bULdl5U)NH7lC-75cqJbHAc`-2b`>;0jA)rrEb2vvAxhwPwB5MEzWK4 zlz6HUL++CnK>Z@Y_zEJ*usI?^%e0mY57vUprRC_mhl`_(Wl5PFWo08Y#P(#k zKgoF?%HK28BJ8Jw7jWxRb01Woi(MP&2&C) zeDEXXjt3i!fsy9zs%R}wa(pX0o&A=H*N_rbP1S+ZB9mpGB)va-T=r z`&ZJIa(OcHHRGcegom@xxBxJ<}KbV0EknHluJ`6OYfIVO4Fs^ zhnO~n%kAJ%8)hEmh>xi^^2#0Mu*Yha)s0(?t5+See!~Od^Sd6C`pUaAkz`i_ z0vq0@SHkH$H(R0Wd)=m^D^b8o67U4_ZI9fwf}ee`1f-6@)d-g=Iii#(4#|vQFK>4CC={LH}M7MZO?8| z4i%=SaSa(5NaTI)?u^D>TX%LhV0_N*9?ud4>o@iLEA>(7Vb($aG}i}0jKIJ3f}<3?Me&D zfIE$Fc-Yb?k_r7NiKmV_W~LwP1;)3+;x2%V3vmyNB!{?d<1-?`#@Vy=8It5AS+itZ zn^&PjlLiwti~>Q!psrJgtb}ZD0uJBtaie*N_M7w{oL`PMYSgv2oH?MU z)*QVOLp`c-#=xm#Et#7?|K~VgYsPaY%RSy3)oA?2V) z|JA-6#E(Zg&kAf9xF!afnpFA#SLGki6nSu>cFuAFcXB(!o#)DTW;%0<%Nu(9BPmo4 zC1I zOxoKFs!diGzrBCvS$8?i=n~;hn@rt$fg`ZVIG&p!^BnJK6Nli=qE|0FvU&krYch* zM}08KEOy+ArP9)L&>Jf+j6KeXc{JTRpc0oSnJO4IrJV#g$>yaYOhCOS`KYZ$Hi1rR zWzMr^H|un!tYwsGlWY?_b|z4a0km$Id>K-y`1)KIDO!6$m{o*0gay^T&g$IC7`*4G zhVD~NW?cThjZ?x7?I?9teW0Wx(vm_fJA0E;^n0FWE>zjdNNYDu%Zz;4bZ(fu-3=2^ zy!YywdkP)#8Eh(>tn_|h1uwQ+6r5DP#Pi>!r<8nixjgDA)3gMf>bt=s`zu2CBv}z= z=Ac z)4JF^*}O&a$!j=co0mhd51sIvSDKH`Yv;=fh09Z#pU!*b{hCgY;hoBAy<|ezI~h!Z zc=cj@2zcr~GRx<)p>XToBr4D!Dz)2bCQ-Q$kC`p(v<5C*A;WrsE3IeVGZPL1t{;++ zNBmjn$s(gsf5V6c#dgM{6N@kZ$Kv;-u*(7x4I{SbWNROG_F4If6me7gPlT9S_!AAu zEL+}uwgnj`{c3`&b7fNZPaTA5P_rv{aVXrmF z)558EnEb0uA8RvdrbCK`8eppM*Ta2$8lhU;J1zC5uz_d520<);OT<#{w$SIuMJ`t* zdrySuJTv<@u7Bb?U^m|DR3~+?%+UK1y4+ZQr>Lj^lN5%b?4NgDVK?+eb$%xq;F8P> z<;myHIDy6_U2wDj^*9a;MQBLz+Dyr{D7f?K={O)z2D2fs4)w=pbwCsP--IE zT5^+xud+i)d$UTHSCD7_(abj>nNyS@#P`r;9+FS1@-FUaS8LQS zeApl-RZTdM?D&k}tSLt4v)2dlGzsEcT>I$jw= zA)(;lZwa*D-|^vu!vikd{_9%P=`Yp?PTnz%2gV22l;Csu zbNE7fCf(KgrYcaRX3VlqT~XC3SZbVRMh2%Xibv3D?c)3vD9_&0#W_s6%eYL2+<53zpT_)>ZN#OZt)pWwZV6;Fft%^~txWLJ9Pz@j zM0`zuxu0Ac5gofM?GBw}$c6pUkc=-)8X(yaww7flm?}@}%X*l%?xx?YC?o|Lqoi zHA_1rq_rYW!UBxfNE>yibcdhu{k0G+fgnf`?FVbs5vc{}q34U#3wBA~W2+N)McyhA z#nAQG6ZIIWcpbhFSDO(|~+;?VM)jpTYO@Ljruckq6>l|k>uxh{*rq24ac<)r zIk(;F-Fxowo&AZ9gep^2ceGD2o_o)BuXCo|%?49Hgl9@)yH+b;Yakx$D^Q|F9|DRV zB%I&4)3amN_OU|4wf6&06j&FWLfS3NcxQ@aS;J?8>KRhwV5Y+JB}dp9{ri&Rt>^qt z(%f|-^1Ko%@w6Ut+;$=CPrDxqyrpkHE;})92N+9^Fwlv_TgLe6q)%K+iE$>RiTUM6 zpjs38%Z~7H&YXB>N?068aWIt0JUMaJid62*c@M9ivW%z){^<_trDkSD5 zN0crd&CIxLC1npHy!L|Dta`Rs8{ACn|Ca26*yq`o$%kkF!0J-bF$y%pgfy9BQ<5n_C9Zbo-plTx^^`1BtcD5*Jy@RBIe;9j?-s+uVe$ z`_vsy78WJ`2|%9^6lEWOJYB3XHJ#?$A`>SA6aBQeO)ttFt!7vLz6e=*?ys!;Jw9JM zsH|)RJGhI(;{dXGQnx46>YFxLqa;LF;q9&1Nam*^2FsB*6ZVdfP z1Dq*Nepq*v(YJv!e!EY~7UU%nn!cpS_jQ(!45lpX0`IR4o%lKUQ!pwWzn+-zrKej* zyjVdS@nZIa+sFKoJvx9mxhCEusN%{llyhb;?l-dPS`oHHWtJVYah7e{?>!)_6$E<7 z&ZjAl7n#3f#xRer2W(e`e!$1^Ocv!c>!*~pQQca;0xtG@|Q>Z<4+nlaM$0= zr>U-QOK@LXaJ0Jv-E~JBuDstrfv=PP`fwlmJs%HhO%J_$ulhdmG~Nh0`@`HWVm-*+ z$oA@9M{c$>#ur;JgpBabt<}FTsFRQuegzX zSpG@49?&}Z4}55TQ9Mo^EAAa^>#rxlV0|(W_4uX&;1%2!ZLLp!P`4jLKMVSCqM}9?ry=|HMqOGySu(a zcC-8J?sMMvobQisI6d8ctM0wk)wk+E)4yA1Yge%~k-bVI%=L^L^K&X2{Q-LRhQw;V zKN@>Q$R>s7qD1Ur^K@aQ`6R9bTtd#d&ZTi@5kvKE=!QBK#u zrHGal(CMh}s^Vz$x_i%0Z^7`2cE?E2Y{pc+aWggv9-iAXL9A(>y0hPRDN0yUa7AyX zqN#3NX#YgjW*ImZv2W3<(DeSuuYfN|iT$m>dloOY_Nl~+fuGa${UXe>@8a!sU#E7$ zNK}`=`pgX(TNIm%?&vJSJ{S^}{%DStSBD+Ugq;|jTy#QRZ&9r=Smv6D8;{9T8jtte zE;JEE;Q5*!Zsh03O17A1wYaf?&Ti6`j`Fpp4bP|gwc(>4oFA{vEIETe8QJK@N2E~> zOsKaB2-37ZBlOrJ#i?H}_-*(Q0=r1bfYZ;gDVPFGb03U!gczG=xRjKHhnE+HkS|EUqmX;B~%0j13BW$Z}YNY$c+`tqB zpoOFPVxtQ(w*|1U(!tTZIDI*xqNihmqv6xG6apC;7}~z*!O_Utg3J^EEMS!v^WY2> zAbP+HSt#3c&t!~!4{C~dewrH;#;xe?HnW=c=9Wwpk9Z2YHWziw%RQt`UWonpNC1r`;2|y9 zlAznjwX}UZuAZzZ7c)_XyTE#NJ2$voUm!|y>59E}XywGw-P7WA-F*-hZXzD-j=NxX z$x&FcBVXSqGzP4L{@~4o&Tt;w@_Z zy0{1Pfp^JMvlq8p%$;ubPtl@3=jWX>^r=H*~0T> zuU$Da!+xSX{e=(m(t+XnO!Q2+1fHnO&{f0C$KH$l&+#Aof8B%Y!?A$%|M>cC=b!EPQ}4wl zn5zC)`(Dmp>b>{{*MWP{{p0_o?M&c_LH!@2?ccKjcp$%wIXD_Q3wd*+m&`DL--AvD z?ytk}PqKi2=ar#jcv1VCk@zp#CMMkx%%%`! zk@W6$ll|y&NNun{>5nb*FnI@a)6E6_M!rytRYNMDQ6+gPEZPix5VK(L$a1T8p^l(r zI2Ef08S^__V8AbuY*6?a+}U$Os3l=pI9+-QHgGzTYXK*MPXnO$yz|_z zVHiab*CyF4`SeCQZ3C$Ffm1ImD10~!$8Sjpkxt3mE|tVW_ff-|FpoQ#;wJr7c^F?P z@3rz7?rp3j$%3E;DdEBcLIC@A zR8@(3MZKAPV^wyY5ojH*PTT3Rd}geEE@AIyz?qP;k+60iAdax-{60w`(r{pCY`+q> zN@Rr-@BUF9%Mj=FryjC;MCq3=9<8Dlu3Y#op5#E-G zBvV#e`tgP3?+-(}b`+2lzP8yU8%YwOX$0wd+FB3z=+rP!X+DFZ!_pbOI-%m$ZCjpg zdOB{3Hj(qk$JA8H(E~^fpXBwj+v)RF;^inPv!$o(tV3;!H`WH4u)dZzahqZzARw6@ zidaL=*#9s|iD!*r@QLL2%+VVyI%c)n;OmXxk+q>8s4ZS9y-Av!CWICKKn|T1zx)ng zLhI@=kq#0k=rj3K2yH1;Cp&N)HB3eS&H$QvK+*zPNJnccsf`x66og9ZPi<SKbL(l~y44R2M<|=5*O7(uGFe@?4)(PZ04O-P-A6p5lSY_p zSScLetoM;Nr4kw!Ydg}ez^O7*)F{Fzrm|Qp;^}?7La&ewnoIcv$M|y85yU!%(()y$ z|BxnY%~xv=Vv(4zBT@lVO@C+k5sq<2mZXcz1{kYsL{W8f51FGb*drucL^~iqA1sD? zTlZ}=8R>4{Q1Rq@&&hq4dSl>wVMSVd*V0=wQwa4V20XdCEYiI2`n<$_0p54-WZ)q@ zyFiZOKfQ4u{K+k$`sJ#u;wPZY%Xxwqg)oH&`NVP96q^0>TPKV_uAYej7~#Wxwe!n| zk{%+W8gUsR52RGA z_k(8eZ;~tIth%yrIM*d zGWnU=rXx%D$<3XjORMgqm_%P45|-g*_ob}>l*+?ar3x%;K-(!`8%`sxg}lbNVy#W< z(bx|>~ecAqFr(?3&y<>sd#%r%73#1{-Nz>~JR~c9j>zGs}%1jLyi9r+}g*QT{vulb0 znl#NSg@}2oG!1PEPfhDP)rNf;CD?l*!GiCp-m8itr_RdWW_k?J*zCKL zD#6tqV<5R+oc!Kh7Pfsm8e8`|!0qho-MFx+oSeG~~qXsvv%FCA)Sb3U6`u zH{7D>Cn&=9V7T8sh%K)(?FDpIIC1{urJzya-$R{UI359Y^3&09BUf*{PBj?Jw3Bsm z*i!FvAr6(?cuh4Nd2UEl!c7zJKyvKO(H0A{?vz_`&W$g_&QMeozsE^R*_I3&0_8 z@|j>;^ZrED^lu)vO!T)m+snC{o5uk2a^+&YRjp6cU6+@gCJymXsPa$V42S)~68HZ*^M2>U_N#EN)lQsy~IEXZ$UX z${0Sb@M<9HSB=8**vG}I)+b+0x2pP&7TIJC&in<8E!s9wOXWltTZzOrnwq0|vSt&? z!EF4RqpniS#oAQH2T_enb1@^y6QliXBl%8b$c>P%gedkmK%QuCN+hpHTq~Cy`eHAv zxClSGVYw-~s&!1Su&=HMv2rElA`wehnFN0|+%`4ZAETXz?^BCIk1je0zDmfjI7qDR zo%mL+U?oyG8Z>5ylySlv`bkWoi#_4Tj94Dn9K>k_Twhl@T2ZoH%C}ACC3*C zOMw)NL2m`_w_GE6NuPgiUVMpb!Tf&SCi-O$X$j4hvIoceMC0Tapa~Iv7`ko<(BXAr zdNTjz4h2#X<`ZEh^e*=!z>!KQ6(I##hLb7l7|L^Wd}sxr3)OZBKd2vhUM;#YNJ`-!n-N?AQgFxAnoRo?a`tDpV=Na>DX9l(b`g}xbvmbX*%Mu|#P?4*HNjRu6RFiSw^>$u_l z0-a9JLP|od3ZdM2kGCPujJVA>)EL_0G!-puzIp?3yTsG5EWokP5<8j@7Mvj&9us&?oXvGv-#M zJo01ReVbGgDS6rG(bv9IC_2z=c;dLSmi)rauFsF6&`0~#f+FzcqgyxlS84q>eH5WX z>Nr~o34DC)&9#{kXcG_7oGO_O?rEDhJxR%*;KpI~V_in{eT0$^xWnLK5VWe4c=-(i zHE8NpI&M|$itWllbL2nHrh!<%>(5A2KK6RmiVtM?M5^{}P?3Fih7NJ1f%yAtUcH;n zNfcA&2uY@xh~9{bJ#SPZnvuoQmT~8Wwy0$o#7E|qQ(3*XIB>Di>HTtcGU+H z&kqT0Sy&=2g!l(Zvl=A&WsI{d&s^8=N9;Rae)d$HtrD^C98j~H@v&?D&;jlYngffr zR9O0K6sS|z)!5|s9VcxuNaS@Udw=%JH&*}bQ{gk#vde%ztWt~2+bxMNu9L}(!1&e= z|3>I*(1=h0qohDfQtURBu|u8ErgQRWNZ|CAnPdYV(>$py%YZYz_E%zQ1hneQa-Sd# z2d1Awq>r9ZF1Yp7dC++}Ir5G0}qaXfB+F z406psdC240{*3a@oa#x)#zU(%?X0fK#Mf+PWex|hQpdi>T8(>MtBYHk2$`Y;I~k#{ zWXiam$l5fEzsBeAgW9L|hiE!8FT;0}Ej+tREBn|$_+O_KAJRU4^u6Q5;)~^LU;hxs z7dHQSAGN-pO=4Tg0R3@4ZY%2-YLLj)Dw|gSm+*-LrcUAO^eFl*s!Rb0wyk}U$|P$V zxr4hq&oVLr3JM1|v$MtL80UV#WK4{li!Ga^ov=}n-nSYg^;$O{*LzW4q~;r(Tget2 zM@tu{+bbBDY7gzwa_bZLUB?mTXYL!&0#4ANMi{r|z8||`5vO^sdcwQG4~R8#<2mWz zKQJ;sjaj-P!B4%lfJ&a+JKb{84#aY#xym)~bIHAqxJIN&J%PYz+SHisCuw|K%DN7? zhAde*Z?C;ZkD+$H^}`A(QnWi~6S2(**^8EIQZhGn{zcqwC#&zZ@Y>Uo`X zw>FHO;l=E!^u0EF70@t}g_3|L(NX&;fFrcPAktaMjc3pbSH6`XZH~u8TRXa zy1u%hUA5wc+R~=-LHE8hB{~=LbdGG$p`9y^2hq zP3SH(0)!!)821W64M1oZrRg*vbTFL~s<&4h2eK=|P&akwlAje!Sctje9=y(ESq!$X zt~<@u2fTxVGLI0e(DD@ROD)sST~*|v-BZNRZF%3MM|@{WLq2mVq%V-KJ;$HIpex?p zdeiZgZFI+US$+0@trpZ4S$0n6EQxTZe4eAUeR-s= z59y@aLYAtwr8C02ZT(a)IV!>X>c_HW}d zlLVE5W_5TB$~wI|JblfSwhaU^^w-m|_TO*_S;Cd!nx+>wf}^Jk%-eHJ+NV!f{UygV zE#7Ig23oAk)9ubXQ;c2`d0Qq3&;6(gfgaOX?BwHw%*)_B0zrm<@v#S<&nvS{kk=QDNrauOs z-S8kx_jNGTn^9632^;MvNLEo3Ka(T5mh>Fss{YO(2lvhh#}@d(SW$ZtHMJI#1-r3m zTXkD?`+UE$XeEA%DteRS-oT261BUr^1=WUe!^-N!(dYq_FBAp2@+_&v(`qG`<^FP8 z^!WPel)!WHAr0H_tIbe2U9U1BEBBb;b{VJVsMrgBn&>`VF%}im3_gw*)wFY7D5hM+ zoK1|^1e&+7TtDvr>O2)tPVp&o3fojxhIfkDH0l?{9BMzKgs1URFx@m$z_XjhJflpc ziX!x)`mn+`g)(Q^S=97y4Q;2bZ`6DA4O^Msj>wL8*b01`;|_QT|F{u)8{?SRI3a4S z>aTeL{<%7TYPu*xo@V2+dooX!G)p%HV#f&d*Eiw?O%2P1o;dat9P;0)ubHZpVA)1G|F{_ki z`SJ!e>hM~Md|S^vX`Lm01STiA!*>?n)*fG% zf#s9i2g<^>+B2p)n_PIL*_Bf0AB>hth`uZ{y=~fXztDqJD=HpUHG5q+L$@%(iLhzB zgx;~#U_+(yK#4B@5}@6?(Y#yjcCYP6rh0;O-@Cqe2QLa4FT?oN1#1oNbi1iSx>~%V z*4U@vaCLyrlUrMW$db#yZp4 z8_mOoYuma?evBoL>Bp&}Va@wKrxA{6jhAXBhYO4v$XsB|F@ zVV%@!pxKvGZ+c31I=`k$)E#)M6Ujop^a;)t+7X<}ubJ$pNesZ%Us~xMXD4|SVwe{X zxx4rq0seb_1QLGXsLt;_1yIR9EDxdE@}Tnt z3!-h%4In`K)!iNo=o7nX7leN;b#<`N7kr;MvFIxcgSU#c-g3LEA?GDd$UT6Vd7x(V zETHZvNHU!ItTgjsLbp_tr@F5{bhGsX8M+Fx@~$@gLNsEHl~hk#5&D6u>zgIe7^Z&* zrgD0Hx9_cvd+N`YZ}1m5;3qs3?=m&z#$jV;4$8UMWH@WI`62eu&W`gC%Nbc8tf=GKdiIw7e8Wj?yAzA zlVX`Y_1DFwh;c4MqAS$hLKe#ha8aguq(0%UH(@(T6yvJECB{IsOw==Ye9Apv}U%rUu8f4_-#g=dJ0n#gVZkuc&G7Q`hMa;JG(v&k{roZ+YUUW zVFiJ97PqX}!(eivzPBIs0@&h`eilgS$LUgkOsckR&)4b4h21F;bvY&^UtXFGn^e-G z%-1+tZluet*EMo_-V>Uf8m_Efn4TdAVJOILcO-J!?H3qVmwf)QRt?4)T zHhxEufsFVB)#n&t3;xen@7O$v!wIjEs9lCC*-Oxnzzt zhx1Q_KD7?RmB|o0v(Yn9>41glc@_U$t;1v3$@RTaV#{EOxdi$q=~VtWYhivdHL7+Q zGMj}JX6(Bme%tCA>(p6K3?;@k%!Hc+mi{U1hGi{PD-Afz8WLmtJ*ZBqxA{#w+Z2b@ zc&PQbNmM+~Tf;wmz9Y?WV3LpP!#ILpf{%3&3brGu*L*|j+B~P)%pq6Xw*96+Zq0e$ zghmek&R38$Wkz|GT2or9nEZ4U3vXX`nIb?b)|R;>(GWgs$;d>ltiDd0)l~VhqGJ`Y z^K(@U9z3^nsmbl#JX_#oJFadqvCG}jW({(`C&(XF5~Ms+d?lC|Amf4e>AD(&weReG zPZE-(gv8OTH=JC$Y+ROx18N>I3f;--yZzb3V6DV0Gc?QCY8M&c@yn^RVAB$a7YOO)i*6zp4O z^&o5m1-uiE$35e-7M1zXH-Fhe6s3K_ZS#r!rG^s#`#xT%*+%SbU~HNqhy7^=Y(`EV z&`XNHP6x+Z%ydOEF!bD}^>$UvSPx~%lf%)(@o2U?XM4-sn|;aiyg(s+uhD@jHd(qY zW@6fLdO?|=fKtK*ZJhyLz?jNCCH01* z{Q=SB;?kJOeD;XEL64EB(b7~PX1~URgTSZm=y}7 zYEYd&>^?Ne3ORn2ZSWy)_sg;KSU&K`xrc{4g6f3+jK})ZhXYXYafeZH^JlpiL1<-J zX+4!rGP_qR+Lyt7I|aSPOjY#j`eb1%b z5%d}Tv$k&pmS{=Tn9Pq0oi}kI{p>+mmg+Ncv0?s#7eWL>z~ps(Bf$B7Uw)Stvq5uH zP3(IkKkkmoyDf1pnoWAXV&36mp|7*^8T>NQ9pgTL0OBS$N9g`8r-M=QS#rkke2{G7-GTb*_tN$Byam@HGJ z^@LS+gVb0i=RE%vbcz5AM0ei)Kzv>L`9q3{ht`!(XCmS9uy~=hdZKjS9CtsT{8u(1 zzr)6e?;3H>owsXak{jvjalZAKXCv&a7f0-soi=Z_#|;)^kR8JZ!K0 z0#sBx@RPl5_kh6W?;M|EjUc-rZM)!A9_Fk~?N2ganu;RRzyeI z7MLf3!sC?5D0LREOJ1VmaIh0V5#g%1YI*z>!I_)eXlAl@Vhc zry4Y$b{mpGta3kSuO*I)d#U{LnSJHF^^B3?^|rrga{)3ZlhhfoZ-~iR$W@%0~^wev8dB|(8M z6aIAmiL6>KYn;vECkOl??i5Kun>1#a8+;R_V0OWz3B&VQ!x{{gqA=ZxxveBtggg4YSYgHJQJo|mGMczvlKtMfetsPz>ARaXY1>+g&)Z#S~s3@F2>LkGW|LI(dTHBzL>7{(2jD~Z}Hsc?s79Gy`lL+%}LlYxGBAWZF}8rm{aih zc5Rt3B&HaraMmiLM(?(a(Cu{O-h07g!fv8gCff;7bxWgV-^NCfR?oM+T0Or-SW?L9 z-f_QgalZhees8EOI*|}RIG?`0hr4LNJGBw8Ty)k(hZUwavUP=mDg;dplShLB%kbt7 zLJ*>Twzc8)XXq>*CoK+3dVnj+E8SM#s**Q13Db~@kPLw7{?juai2dBMx)ojYciETw zGmczoT!DJ$uR{P>UEYcX6)uzsPlc3`KbPkWw#%v9at1_&1JL7bXPb5IOqE%sm?#>i z`$TD`N$$5r@K@|Ja*8#k%k&NFC@wb|Y^d^D_a$2F1Q|H4&b-y=%N(*Dj_O9{dM7IK z#o+@~J^Fh?5JSbP$dAt&ht=ET=u+jvOZx7Ss689tc;3!HFl<0D=1?h9DPP3BRzZ*g zeG7YiWs=5UAq*^BHD(B7MQ7_vU)M4i#GoX~)C)on@R4i3bSXcP(=L}Hrz|{`3rg-l z$+m6z2$dXJZa0^QBmu`tIVNI3pr>&o%_L7NSQPlxLPW}9f%6rE(AH+DB~KByA|r*% zc)TGSwQlbxhy1&k7JLG3hl0k_r&#ED!dPbC?5a-Cek@jgMrJ?LGP6?ho`(EB+_ZCl zg4fiE2n*v`$IY1daKx=aGt^H5R0+|&%VRd1*!Rw-OfC|gA-=LE&1ccU_X!KoO_s-! z1S$oMh2qv$WzS-UL~H|m0w84ue}VC+v~oBv5xz?Npg?_$bfRb@uaqo^Y=ubLF2YsG z6N6htM^9#>H|MY0t>j34%1;R6j-2NL{rmc?W4bD2XyBpoqcIF;7*a9fLBB4>G&|4U z;<*&OiG(QzUe4Ds?@rZ(=3GhX#m>PvcrsnWj67jn_jDsS3%IC>?q^KZb&qm$_`A7d z+mO9iCKA;<_P-EiD-T0){E|IM4jZmgB>zr3z$T|c{lKeEf^}BSHIrW*BWP^foiX;& z;u+Gs$)m((oRsW(o)OO@2MbYm#a|vJ%`+K#lU)vE7s@A42{Q*-5;FEcFyxg zQPZSJk>lhg9P}UianTlve6=wue=-#qR>2L#G;&O96uHW?mt=pXFwW;U8Qr??2Re7k z7At{+o|1-_h=2si}OVT zP0-zE>_-Sz<5o@@rHZqOhj@pLS_S2d^GtI$I`H`P%Vs%jvSmj3`GXz%9XeL|Go)v1 zi0rk;qbF>aGIojef`c$nEPmmfSQ|fU^+T`>!xTpK``}qWd&{SG8q`_KVN$qgcYI?m z_{QHJ$ibN4rvFpE4f<>Kc3vSXD>knAO2ti;dBx-*Q^AGTYdqBjeH&FwJ*OKh=Gvk` z*48D=k!@S&v;{~7$!1@!{aerNX@a8<$lo~&IHRsxeF;Wf+EcJGk54%QqxVt)dl}p1 zzFZru$LTd$s??{Jelgu1E1nX=QQH!QYnMS#L`t6Yq&1GU<2B@BwK@C4dK1V_To)&> z$WoawOP6YwQoWHUA35MBgmJ^>E?&7k)(C1ktA3B>Aidjb7CAj! z5{a2FT`q{;CH|&6bRqmIg0R6+TFyNoFk#^G2YIL)<$-OhbS6Hk;W(XxP|-r=iuZCT z!SfbV7`u$e_qCKL^NZe8Gg0+}?-3IomNkV+t52hetP~0}GS6{8tBaIY;}W|I-aej8 ziXHV1>)@}FMV^U(-;>+@TP~{O!!^?L1+( zVXGz@|47MKsDp$4P#k;@t-z0Fvs1gZ;N(q5=9+s2HvQN3jM)3tO2r@!kGK%;9|rS7@9~CR zCKXS4F}e(zc*0^24i#(jC+rdKNXS@{vzCwS1rOY==-3Tv3QQm8=peBXD3Mzkz74;T z4#37B%NHtTMw48`m-grGj$?c@Cp}LI3`a-%lv+bB`_sjt`0^C^P;C}r*12a_BpU3S z9_=4VEs8C3Hh&-X^_T$~@2Y1J&0AK)FL%%;4c z#6tzlq)nU$Fbifg=n8x^1`^P)wd30g4+k;*$|U&)lb9NYGnmL5Ud2;w*&6?<-qg=r za|k)reiyY*vZ>~iT$qL2A;!FQ)9UfW(P*Rp+`X(A;d1lZ?b~y_3C7kbl7(^t_}6$oC~+JQ7izR+6HtfXNIydbNR8lA*1PV?#( z0chTaX%kv`HT-*cd()FPJVL8XI*_V0+7mp9aJg{DlnBZmE!Q5QflsufG|K zrdd=VyGo>#dM`t7zKzRwEh%4p7u=ZB=s7)IkVMqNaLBC^EY@NVWp>e1qJ{sgq`~4N<#rqT z(y`CjTz(czCG{nSB#rT)!4D~Cx%n|Tv(g@eD{>y#DNiYiAp8fIo!cN<} z++iW;ODt=*n%&N@k{&k>q`-q(jN(WR#Mc&yVm5!toiJ z_vBYI9IHOccL%l?{B+x`u!5++4AtRqyiX-C|&#dUmUcLAzuX$mGQB2RMTteS1?va(4 zQG>pj3iVX`G*w)EOYIyO!x)oG$z2wr`aDZLpXyM_KE#4Hv~7cc1FN8e-yi<=iJa8? zofj(;a|veYfU%ACct+ADe>|j2A5I)<%13%y!H;9{o=!T%vN%euYEO>P3hyXxb)Xd@ zReQ&Al=uo!dRkQ?5E*flLfs5C9%#<#v3pvTH{K@ow9bAMt56PgqKe6}IvS%z@o$du z{4_d}s;?E&bAg2uN7k9d4GG`TTQt=AS*GW(r`7oEgM%dWRGJ2UZ>vhuc!_})XZ~hO ztS6!#g$EU+L3mUtE2KfB_|IVROm@Ls0gLyzQP40s&{?_JeP?I5Mx7fW=}q2zXk&e4 z{->C3k9W6_xfz}$Pk*U($x5rRqv1p-!t0VGX zLx=duNw^6-8#@|Cy2^s_QP^>~bL=FD2k)cUz$qp02nZJGvH%VU;$nz^)0v64S1!{} z{-eEZqwf!lB0;I7K_U6+kbGlvp85Idy=6_rva;)<#NpmB$T5g|ehvV$*^n~M@aLcA zdnY#|DC394a^cqWv61nE7%s;rzhCISD0t5sPlpXZ?8Ss- zb%oeJ9(GwBbml;^ll}N{RT_Sz=uB1-P^#NKa)U1NJ^a}qssE{9=t#pf z>mrIFT)G_1L-wX28X^3Pnz^^$tA5D0oWU(3G9ey}Z;JqtdN5-L`~e^6J>#PF5RTXT z?08n`epG?r4$U7TQHF0qwHC8vaNF5UTzH%maFo3-=P?E@uTXcTXfyTV7>M+lWu9&; zL{G0=@LtaK{XrdF?L5GPdM$u-PP$V^L?7O>pwtxg1vSxva3~ zf$nDSW~iwTEd@C5MUIikht&#Ja?yje?1)8- z@RQ}TsLA~3i+)QNqKnfUr0<~5b)}!e_RUSFXtt4R zVD|}6&sA!77^zW&C5En0*UX-rqYI-KX{q(`xpElvJRPz4_(`&!TDCKnB2|v?mf$uj zR4x56mO{SSA@kVu!Rg{Kc=PzhIpYzu)N*lzV#H z)ePHp-h6I*z;V-Dc7%7nypqB_z5`6*vQ9|hL|o5JUuEzM6$*{wZV%>$&~#>*#=6z{ zg|!RmfOt2wgnV6me%qt|=r9`T(AGQrYrB;EDE4YR|H)}tZ@JL|Kb8AOOHU1`zrdQW$#$3XHUb`MinjZuY4h$&~;riKPv)VPTkZ~zi?m# zG;i)9pcRV6sknj|U&HMSXN$I-O!7>`_lC$eB>U*;>yPpdWW8M}RO;KWj*gr6o9~4( z4eZLxGbv_|cQumnzw+p}GC*W(CnYo3ga0Sv6OAnP9CqC@g7@z169msJN(SSy=&o;S#gCj%wzaE7#-?lS6WjTyrWP%&xg#zdcGPwr z`Kg}FL#$jIL)U#9*tqj4^Gzn}YzogSa6A|lV@0OUMmjg$ohfzu6kF$YZTotZWV7G1 zIp8Hu`E+TjmG_ma6kXl3SvB8R>r><;4IR3m>Ewl^E9!|8=b zZ&v=+(HEEW=jWOt$F6o%^pgzvr>N-*3ADVEdLe1{}-z6 z{~pGFi_|fI1Mn|M-ETY%jKsa*X@AhT-`E-$U;8clD{cp_$MQ$c$n+a&d%^4e;BYU; z|HR$?fz$oL@BV__vHla+1N(w|!QftWUeLQ29PSTF_uui_5F{JtfBnb`h2#9x|Y1NT2&0!Q<&J^^3PzdGfG znG`kBvrz@Sz{oOymy45m5%O8sfxDOfFOKN{o4n@J2E)-72H;x(_V|xG0Y@Wg2{Qkp z`@&nR{=*`TlClcG+|JbWA78X!+hW@02ITtIR01-e{(7J3|H4Cmv9mR_u;vip7Z3om z*tE2?;DDxO1|Kl-(bCd`&wtCnWq)KZ6;~v}tU$t#PR*nEqFn zo{r(a?E&e*&G>I!F!280_2`&b{>Lx4)=SL%hhI8oI{N>%2gdFh{`=a%=r28Zs`(FH zAox$H|CQ0v{&!n|bikKc=)ZJXUVbI`PubsG2e_aASC^iN@qhc2nGrk^|Jbv&)&?W~ z)^IPAixGI`1$ufK84C;W_<0#K;0aXNT;Bq`O!Plbz5-MM96(kkdcH6GjI0dI0xWa_ z0(7j*ti0e*VFoe-!3#0g;g=ME`#*;F><9n= literal 0 HcmV?d00001 diff --git a/acqui/pdfformat/example.pm b/acqui/pdfformat/example.pm new file mode 100644 index 0000000000..02290e7842 --- /dev/null +++ b/acqui/pdfformat/example.pm @@ -0,0 +1,328 @@ +#!/usr/bin/perl + +#example script to print a basketgroup +#written 07/11/08 by john.soros@biblibre.com and paul.poulain@biblibre.com + +# Copyright 2008-2009 BibLibre SARL +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +#you can use any PDF::API2 module, all you need to do is return the stringifyed pdf object from the printpdf sub. +package pdfformat::example; +use vars qw($VERSION @ISA @EXPORT); +use Number::Format qw(format_price); +use strict; +use warnings; +use utf8; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + # set the version for version checking + $VERSION = 1.00; + @ISA = qw(Exporter); + @EXPORT = qw(printpdf); +} + + +#be careful, all the sizes (height, width, etc...) are in mm, not PostScript points (the default measurment of PDF::API2). +#The constants exported tranform that into PostScript points (/mm for milimeter, /in for inch, pt is postscript point, and as so is there only to show what is happening. +use constant mm => 25.4 / 72; +use constant in => 1 / 72; +use constant pt => 1; + +use PDF::API2; +#A4 paper specs +my ($height, $width) = (297, 210); +use PDF::Table; + +sub printorders { + my ($pdf, $basketgroup, $baskets, $orders) = @_; + + my $cur_format = C4::Context->preference("CurrencyFormat"); + my $num; + + if ( $cur_format eq 'FR' ) { + $num = new Number::Format( + 'decimal_fill' => '2', + 'decimal_point' => ',', + 'int_curr_symbol' => '', + 'mon_thousands_sep' => ' ', + 'thousands_sep' => ' ', + 'mon_decimal_point' => ',' + ); + } else { # US by default.. + $num = new Number::Format( + 'int_curr_symbol' => '', + 'mon_thousands_sep' => ',', + 'mon_decimal_point' => '.' + ); + } + + $pdf->mediabox($height/mm, $width/mm); + my $number = 3; + for my $basket (@$baskets){ + my $page = $pdf->page(); + + # print basket header (box) + my $box = $page->gfx; + $box->rectxy(($width - 10)/mm, ($height - 5)/mm, 10/mm, ($height - 25)/mm); + $box->stroke; +# $box->restore(); + + # create a text + my $text = $page->text; + # add basketgroup number + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 6/mm ); + $text->translate(20/mm, ($height-15)/mm); + $text->text("Commande N°".$basketgroup->{'id'}.". Panier N° ".$basket->{basketno}.". ".$basket->{booksellernote}); + + my $pdftable = new PDF::Table(); + my $abaskets; + my $arrbasket; + my @keys = ('Document','Qté','Prix public TTC','Remise','Prix remisé HT','TVA', 'Total TTC'); + for my $bkey (@keys) { + push(@$arrbasket, $bkey); + } + push(@$abaskets, $arrbasket); +# @{$orders->{$basket->{basketno}}}); + foreach my $line (@{$orders->{$basket->{basketno}}}) { + $arrbasket = undef; + push(@$arrbasket, @$line[3]." / ".@$line[2].(@$line[0]?" ISBN : ".@$line[0]:'').", ".@$line[1].(@$line[4]?' publié par '.@$line[4]:''), @$line[5],$num->format_price(@$line[6]),$num->format_price(@$line[8]).'%',$num->format_price(@$line[7]/(1+@$line[9]/100)),$num->format_price(@$line[9]).'%',$num->format_price($num->round(@$line[7])*@$line[5])); + push(@$abaskets, $arrbasket); + } + + $pdftable->table($pdf, $page, $abaskets, + x => 10/mm, + w => ($width - 20)/mm, + start_y => 270/mm, + next_y => 285/mm, + start_h => 250/mm, + next_h => 250/mm, + padding => 5, + padding_right => 5, + background_color_odd => "lightgray", + font => $pdf->corefont("Times", -encoding => "utf8"), + font_size => 3/mm, + header_props => { + font => $pdf->corefont("Times", -encoding => "utf8"), + font_size => 10, + bg_color => 'gray', + repeat => 1, + }, + column_props => [ + { + min_w => 100/mm, # Minimum column width. + }, + { + justify => 'right', # One of left|right , + }, + { + justify => 'right', # One of left|right , + }, + { + justify => 'right', # One of left|right , + }, + { + justify => 'right', # One of left|right , + }, + { + justify => 'right', # One of left|right , + }, + { + justify => 'right', # One of left|right , + }, + ], + ); + } + $pdf->mediabox($width/mm, $height/mm); +} + +sub printbaskets { + my ($pdf, $basketgroup, $hbaskets, $bookseller, $GSTrate, $orders) = @_; + + my $cur_format = C4::Context->preference("CurrencyFormat"); + my $num; + + if ( $cur_format eq 'FR' ) { + $num = new Number::Format( + 'decimal_fill' => '2', + 'decimal_point' => ',', + 'int_curr_symbol' => '', + 'mon_thousands_sep' => ' ', + 'thousands_sep' => ' ', + 'mon_decimal_point' => ',' + ); + } else { # US by default.. + $num = new Number::Format( + 'int_curr_symbol' => '', + 'mon_thousands_sep' => ',', + 'mon_decimal_point' => '.' + ); + } + + $pdf->mediabox($width/mm, $height/mm); + my $page = $pdf->openpage(2); + # create a text + my $text = $page->text; + # add basketgroup number + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 6/mm ); + $text->translate(($width-40)/mm, ($height-50)/mm); + $text->text("".$basketgroup->{'id'}); + + my $pdftable = new PDF::Table(); + my $abaskets; + my $arrbasket; + # header of the table + my @keys = ('Lot', 'Panier (N°)', 'Prix public TTC', 'Remise', 'Prix remisé','taux TVA', 'Total HT','TVA', 'Total TTC'); + for my $bkey (@keys) { + push(@$arrbasket, $bkey); + } + my $grandtotal=0; + my $grandgst=0; + # calculate each basket total + push(@$abaskets, $arrbasket); + for my $basket (@$hbaskets) { + $arrbasket = undef; + my ($total, $gst, $totallist) = (0, 0, 0); + my $ords = $orders->{$basket->{basketno}}; + my $ordlength = @$ords; + foreach my $ord (@$ords) { + $total += @$ord[5] * @$ord[7]; + $gst += (@$ord[5] * @$ord[7]) * $GSTrate/(1+$GSTrate); + $totallist += @$ord[5]*@$ord[6]; + } + $total=$num->round($total); + $gst=$num->round($gst); + $grandtotal +=$total; + $grandgst +=$gst; + push(@$arrbasket, $basket->{contractname}, $basket->{basketname}.'(N°'.$basket->{basketno}.')',$num->format_price($totallist), $num->format_price($bookseller->{discount}).'%', $num->format_price($total), $num->format_price($GSTrate*100).'%', $num->format_price($total-$gst), $num->format_price($gst), $num->format_price($total)); + push(@$abaskets, $arrbasket); + } + # now, push total + undef $arrbasket; + push @$arrbasket,'','','','Total',$num->format_price($grandtotal),'',$num->format_price($grandtotal-$grandgst), $num->format_price($grandgst),$num->format_price($grandtotal); + push @$abaskets,$arrbasket; + # height is width and width is height in this function, as the pdf is in landscape mode for the Tables. + + $pdftable->table($pdf, $page, $abaskets, + x => 5/mm, + w => ($width - 10)/mm, + start_y => 230/mm, + next_y => 230/mm, + start_h => 230/mm, + next_h => 230/mm, + font => $pdf->corefont("Times", -encoding => "utf8"), + font_size => 3/mm, + padding => 5, + padding_right => 10, + background_color_odd => "lightgray", + header_props => { + bg_color => 'gray', + repeat => 1, + }, + column_props => [ + { + }, + { + }, + { + justify => 'right', + }, + { + justify => 'right', + }, + { + justify => 'right', + }, + { + justify => 'right', + }, + { + justify => 'right', + }, + { + justify => 'right', + }, + { + justify => 'right', + }, + ], + ); + $pdf->mediabox($height/mm, $width/mm); +} + +sub printhead { + my ($pdf, $basketgroup, $bookseller, $branch) = @_; + # open 1st page (with the header) + my $page = $pdf->openpage(1); + + # create a text + my $text = $page->text; + + # print order info, on the default PDF + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 8/mm ); + $text->translate(100/mm, ($height-5-48)/mm); + $text->text($basketgroup->{'id'}); + + # print the date + my $today = C4::Dates->today(); + $text->translate(130/mm, ($height-5-48)/mm); + $text->text($today); + # print bookseller infos + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 4/mm ); + $text->translate(110/mm, ($height-170)/mm); + $text->text($bookseller->{name}); + $text->translate(110/mm, ($height-175)/mm); + $text->text($bookseller->{postal}); + $text->translate(110/mm, ($height-180)/mm); + $text->text($bookseller->{address1}); + $text->translate(110/mm, ($height-185)/mm); + $text->text($bookseller->{address2}); + $text->translate(110/mm, ($height-190)/mm); + $text->text($bookseller->{address3}); +} + +sub printfooters { + my ($pdf) = @_; + for (my $i=1;$i <= $pdf->pages;$i++) { + my $page = $pdf->openpage($i); + my $text = $page->text; + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 3/mm ); + $text->translate(10/mm, 10/mm); + $text->text("Page $i / ".$pdf->pages); + } +} + +sub printpdf { + my ($basketgroup, $bookseller, $baskets, $branch, $orders, $GST) = @_; + # open the default PDF that will be used for base (1st page already filled) + my $pdf = PDF::API2->open('/home/paul/koha.dev/new_acq/acqui/pdfformat/example.pdf'); + $pdf->pageLabel( 0, { + -style => 'roman', + } ); # start with roman numbering + # fill the 1st page (basketgroup information) + printhead($pdf, $basketgroup, $bookseller, $branch); + # fill the 2nd page (orders summary) + printbaskets($pdf, $basketgroup, $baskets, $bookseller, $GST, $orders); + # fill other pages (orders) + printorders($pdf, $basketgroup, $baskets, $orders); + # print something on each page (usually the footer, but you could also put a header + printfooters($pdf); + return $pdf->stringify; +} + +1; -- 2.39.5