From 09191dfd825444e0c0c4527162a48e8772a41a5a Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Mon, 17 Oct 2022 09:37:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86HGScannerLib=E5=BA=93=E7=9A=84demo?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=B1=89=E7=8E=8B=E3=80=81=E5=8D=8E=E9=AB=98?= =?UTF-8?q?=E5=92=8C=E7=AB=8B=E6=80=9D=E8=BE=B0=E4=B8=89=E4=B8=AA=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/scannerlib/新版SDK接口说明.doc | Bin 380928 -> 380928 bytes doc/scannerlib/新版SDK接口说明.pdf | Bin 330385 -> 330033 bytes test/scannerlib/{ => hanvon}/CMakeLists.txt | 0 .../c#/WindowsFormsApp1/Form1.Designer.cs | 0 .../{ => hanvon}/c#/WindowsFormsApp1/Form1.cs | 0 .../c#/WindowsFormsApp1/Form1.resx | 0 .../c#/WindowsFormsApp1/HGScannerLib.cs | 158 ++++++++++ .../c#/WindowsFormsApp1/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../Properties/Resources.resx | 0 .../Properties/Settings.Designer.cs | 0 .../Properties/Settings.settings | 0 .../WindowsFormsApp1/WindowsFormsApp1.csproj | 0 .../c#/WindowsFormsApp1/WindowsFormsApp1.sln | 0 test/scannerlib/{ => hanvon}/main.cpp | 0 test/scannerlib/hanvon/test.py | 234 +++++++++++++++ test/scannerlib/huagao/CMakeLists.txt | 12 + .../c#/WindowsFormsApp1/Form1.Designer.cs | 62 ++++ .../huagao/c#/WindowsFormsApp1/Form1.cs | 281 ++++++++++++++++++ .../huagao/c#/WindowsFormsApp1/Form1.resx | 120 ++++++++ .../c#/WindowsFormsApp1/HGScannerLib.cs | 0 .../huagao/c#/WindowsFormsApp1/Program.cs | 21 ++ .../Properties/AssemblyInfo.cs | 36 +++ .../Properties/Resources.Designer.cs | 70 +++++ .../Properties/Resources.resx | 117 ++++++++ .../Properties/Settings.Designer.cs | 29 ++ .../Properties/Settings.settings | 7 + .../WindowsFormsApp1/WindowsFormsApp1.csproj | 81 +++++ .../c#/WindowsFormsApp1/WindowsFormsApp1.sln | 25 ++ test/scannerlib/huagao/main.cpp | 176 +++++++++++ test/scannerlib/{ => huagao}/test.py | 0 test/scannerlib/lanxum/CMakeLists.txt | 12 + .../c#/WindowsFormsApp1/Form1.Designer.cs | 62 ++++ .../lanxum/c#/WindowsFormsApp1/Form1.cs | 281 ++++++++++++++++++ .../lanxum/c#/WindowsFormsApp1/Form1.resx | 120 ++++++++ .../c#/WindowsFormsApp1/HGScannerLib.cs | 158 ++++++++++ .../lanxum/c#/WindowsFormsApp1/Program.cs | 21 ++ .../Properties/AssemblyInfo.cs | 36 +++ .../Properties/Resources.Designer.cs | 70 +++++ .../Properties/Resources.resx | 117 ++++++++ .../Properties/Settings.Designer.cs | 29 ++ .../Properties/Settings.settings | 7 + .../WindowsFormsApp1/WindowsFormsApp1.csproj | 81 +++++ .../c#/WindowsFormsApp1/WindowsFormsApp1.sln | 25 ++ test/scannerlib/lanxum/main.cpp | 176 +++++++++++ test/scannerlib/lanxum/test.py | 234 +++++++++++++++ 47 files changed, 2858 insertions(+) rename test/scannerlib/{ => hanvon}/CMakeLists.txt (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Form1.Designer.cs (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Form1.cs (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Form1.resx (100%) create mode 100644 test/scannerlib/hanvon/c#/WindowsFormsApp1/HGScannerLib.cs rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Program.cs (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Properties/Resources.Designer.cs (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Properties/Resources.resx (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Properties/Settings.Designer.cs (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/Properties/Settings.settings (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/WindowsFormsApp1.csproj (100%) rename test/scannerlib/{ => hanvon}/c#/WindowsFormsApp1/WindowsFormsApp1.sln (100%) rename test/scannerlib/{ => hanvon}/main.cpp (100%) create mode 100644 test/scannerlib/hanvon/test.py create mode 100644 test/scannerlib/huagao/CMakeLists.txt create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.Designer.cs create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.resx rename test/scannerlib/{ => huagao}/c#/WindowsFormsApp1/HGScannerLib.cs (100%) create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Program.cs create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.Designer.cs create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.resx create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.Designer.cs create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.settings create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.csproj create mode 100644 test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.sln create mode 100644 test/scannerlib/huagao/main.cpp rename test/scannerlib/{ => huagao}/test.py (100%) create mode 100644 test/scannerlib/lanxum/CMakeLists.txt create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.Designer.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.resx create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/HGScannerLib.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Program.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.Designer.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.resx create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.Designer.cs create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.settings create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.csproj create mode 100644 test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.sln create mode 100644 test/scannerlib/lanxum/main.cpp create mode 100644 test/scannerlib/lanxum/test.py diff --git a/doc/scannerlib/新版SDK接口说明.doc b/doc/scannerlib/新版SDK接口说明.doc index 9efd48d8a046464d931367a29e4bc3857cd33ad0..6b61360c5dda974f6994274b8c2283946f422bab 100644 GIT binary patch delta 12486 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 AkpKVy delta 12494 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 C5Q!21 diff --git a/doc/scannerlib/新版SDK接口说明.pdf b/doc/scannerlib/新版SDK接口说明.pdf index 3d13b174a539d15e934de850d44a1d92a8dd268e..b8705cec036d2b6a6ebf090507892e3ee8753526 100644 GIT binary patch delta 79658 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

OxUSAlQ8%Oh8<`dy<8uYhDMX4= zidTt-Cn%>7#;j{oPYzI$A=)3|7%Z@SBg~_~QJR>#j+hE7?8gDtXUw&wwvv{hyY=6H zlt*HT{Zr!;G@>RrR%#y4HTK|;pR2fKN1RH9T7HGSFvhcE){p7F0p=iWPE<6)@{AOZ z8k-tV&=R9j1KxQD0&`fP=%=lFNP zzlL~4r+pEoOyeWt8GXW>VT@7%aS+{qdQ;>h1LS|y-X+@uMp&yMmZ3tvUSa*IH42;; zO0FN#+fe1KXVIgIJ0DYgdwO`{T;=7^|u4+%yA{<9zctgKD3Oui?jAFKD%pqtSU+2%WhP_^lqAUlL^n)Wp0YNB6w@3yXF~Ix zX511vJ3 zRv5Fq6tUjb)CNhas?2$@N@YemjacH96xXnPBPXp9i0q%BZO_&%!DscEAy|1U;?|)4 ztc^4u&6FWTK5KOd-EVz7U*Wj{h@L|9W$9EOWkb4)SP~3T?yMkUsglZnn>YH%w$ad} z8ZoD}?Hcf}45?pq9jzn8AeIKnHD;><=>*j7rMYv8yg9~l<;>Mdx}mad0BMnA6DwK! zBWq=W>1nB3b0M-NCOEr@9g--1g0ijH1QX=pF;cWxo-&iJ)Fj2yXCM+c>DDQ0StW>E zT(Q=Y8clGB<;{>QRBWq%68$yj(MNXd2zf<>sU=1ZcWoX8>re&vkc@Aan(QIg3zE+* z9|(>9XjAT+Z$zO&xnu*TybF_R$ZcRL%B6(}xn8LFqFi(Nrj$H07G%;wZC$NBtXZQ3 zZ3!}pt=4L585#?()ZVsB;G{Tew2|9ZHph~`t(xZw5N$bz(2OB}$;Xzna&jX2897&7 z{z2uIo~})s3J-TnxL=Dj$9cfxY4(mKu(r9qM~rpM_nf!=S~}0VsRX7UY#B4>S-H0` z*Ar9U{n9J=GjDLKy@&7-x?^BkdA0{CLFZUGoHu4!WW=*F<(i@%KEkt`$oVFy4X3E#=e*KWvIMSq z^%&*g8dJ@bESsbBzJ;q-o5<~_ScVie-v~Ky!Sh#yDU(c4^BR!Yq2w&BJ{2mhP^C&E zn&@|%<-Zi$r9cjtprlE)FPLYMOq5}(X-nFO+o(oPxQ01@6IV>w+DFog?f;x*su*IH z3dkZ|JNAzwc&>1GhVZ_Or7c&|YW8=^a+B~`;oiaxNZOGVr~+gas5#yu=Scak9PFw9 z-EkV%es-}RL@FrI{!w7RYRN>~e9yAJG*A+8iRVhBAksua)BrM^gDwJECEbBj*s`<& zNmO3q9964-{@KB{DS*~i6SgFjsL_#(SD@~ct2FH+@*ZW9}a-fr-C^U7wjC$ZAc*!}3jQPrdTOh_6I7M4Lt%lS*Z)9i@ zNSMmWk0wFuA=xRYrU{Rb6v)qsYF6>Ao3V~9+$v`&g=F5ETa;wZDYkXWca}J&X*HeJ zjWV9WBIY3(&$c9w)=X#Ar$a7(b%E;}RR7Z4Ni`;EdmU4nG8ZXO@{PIvLb;^hkFjn< z*Ys|A<&BIL8RvdQwXtFGqYL|G9^uzyNjewX<9F)klWkZ5?x!_ zDwdw+#n?$B;I;{QOvKE;GO%7|V$;>_7%*R5h1{8O#a59xB@r%2DFoo^7&Hsa&Xjq> zN|2b`oBDWa`b(Zqm}e$`Tnat=^cypE%$jZJJS#pB)~1_aIqhmb8oJ3+H>vN3AZ!loSW+r&!>T*krmULRH~-WpKHUiZAbEd)xbQZZDg_2qPDMH zxk^0VlExj@KQaO{_KE3owm4Vmg9aBY9hTEr$@ z86(m-9Ho<*sVI;}^bwJusJwP(cEEmD=WeT(ms*a@t6UI5ll(vDY>z%o@D>1mSg zY(ECZx5xG2i+EOli?~$-AW6>3>{d!CLHuaM`V~QF_(mT@R;KSwzdY;nClbGH9oP0j zJtlgFF#L2+gV$h;LVDT3>9N@l5-=sm;=3^AN2f1j~7Cd-NM+cIiksO=8a2 ze8kH*=9$Ljm(s6Vd(b^SQ4&x9G6E)OSsR(VGbex1fTW&(%@wpU+kj(`b%_kDu0&TR zV0{h~lyhjMz~(}^%G#S9wRSwj*ecpuD89HfGY>#k<1!wpcJznXd-7d+DnNTi0nPrH zm^P-P=~EP%dTZKPoq3jea1$+B*C-rcuw@Fg)R1>W3FLuVv(1id9x2~NH8=$) z;0Vy}16sEuADUF1Jqr<#M`yxXnjVRL5RKQJcZg~?v5yBJo~oqHreN*+B5B!KBW=)f z$b3Y9xK3fXh|DbZZo94_W2yw1ZLBnyn(;*%yK4g$t~on@+u6&Wq3aosde?8;mdf>E zcT4Kd`UB?J6<9fnuGda}1JfSORYO-=h**Npjl3*%78_LToO5SfyFOEzQo8el<=2+i zCQcpQR&=?NcpXrR;(P4UiKNtT-09ANu}N`%0HNWt;tL?F+BT=b3}wh{Pm-Q^{%W5Q z(Q-r^agXN8d*JZr)LfOi*fXvU;I4Mc;f|BSlr(bgvoivXv|uI$(E*A^9x`9d_EPCc zJ#GnfjaTqWWv)aH%}`tQAvE&+fbI3+OnO!dq+d;c{lLs#31mFtX3K3yr__&h7E338 zQW}vX_R1(CC+cr~{%dy%4Uq5H9*Xz$7HLRUAG9O2Z@8A5>%gh+UaECzBQy88bYW$8 z+aB)doUNT5^Ep^8xhWUU=F^l6_A4V%?p|r!(kYFqRn{z}4O3IvzWMF;B#pU{xvM)4 zWK;#_jP-L0KiCDUfy=;_RZ2Rrb|$^+M`XnjM<8 z4_ICkTU^L(t@YtExa+t8@}tXtQ936(@PJoVW&c*fwqa`Bgr&@!edIN@4nam*3FP5L z)|;H|)g*?tNMrPmPC04zi;p;k736AghdZH8$-? z{$*O)F3jv$U`rGr-UAs*_!-+wWv^7qHK%o(9Ap((tnajDm9cbEI973g@|vYxtpnCf zNOLSWJz7OAa2yPH_Ddn+wi|G|1z1l}y1V4|FIb|L+U9J}O+fa)l1`iQ+8S9ei5r%z zwb)&35w|z#_X*l-OAvdR?5?A|9ud$Ef&rHod83X;Jb2k+l=CDJM*e34cr3f-d%RqE{M?wEi#qD&;9_6$=mn z_D#lP$x7+ehO)OfWa_0{WMwb~v2?m)H{rRGTA^vJA--dGLR;U;#EcNvpC)l~p)$zc zzKnZFN}n>_C#-)&+`>Xb5!0RQe2a~yLh0nDT(oXQt5PYqM9TetmN6aWAgeS5Q-(W_ ziWfNfmeBnfQ)|uiK;yG=Qcny$QA?Lh>oHhg5os~IvydblN}cA7oZF4K4f&wPd_Cb- zD!7a}Uky$F+g`UG1BszqTGxwBtH~G;2_*%)b`|l=KBbIKf7yjDfei9&K#!(iEfaX>#|N3I(dsX zbq%r-B65|iH?_3o>WcO2MwSN}3VpCw(hk=2Uh~xz^_|;&u@4htR1N&0JC@ z(GP^jmL|7RS^ z37w--TRBGXccG)8HPmxbLaA~Qne@F3wtG2~9|bFfiQ ztQW3J;R7zg7*nwO&0Xt7Wau$!93|f!BJT?!;&l{#X3bEUq+wf!^e=18-D@Eu8Cjp( zzg|uccD!m1SpPp-0!kBD+&chssls zmAn+`$sOUOxkb2_Oi~&;>CsWJRkLJDlsQmnPfC+Ep0kz_vCP`tB-R^IWIMZqYc^Vr zYwK{W08!)9+Cpur)X&x%E_Cvr&Wu$lqj1ZAW**{8*NnIzWop*f+Rfb_mR~YThfY4# z%$=@n(tZo}IXio}qmV3s1q?uZgCo|xT^pRW47qz^Y^xLJ6}yC$_N^_GdTHSFfbBiI zVr+Y^wI+_S}1<+(P}Xz0{_#*QTT?VazQmyNX7)0)dBEg}&|f<~IMH|~6GyI)I$>@)1na?N9Q)uCxWmwqMgog3P; zBh5{nuGkh{Z{+FjV-vZmHtj*2y=HwvcFt-0Tpx4SIn#=5A84;w475i<>Or2rBal6P z5s3fc(9n8;KI1uayNE3sB$dm zhpFeTnoi0*VYo zJ0~cTMvZH+A&}-9p+BOXJ0<#vw7Wf$M(;FjZ>}U}*Ew^;yY1L=y^G!TG&_rbW#HP; zn}>}Vs0tPOuf`_E zh?T3{d6z6jG>^)@0@7#5i&vz7^NMx2l67m^yHxQ?z4+4>tkGv?^c8H^iQo#{;j)IF zH#D9~uEl^?@yBR8&4K(^YaCysS=Z=AGRFK$_AVG0>#D@i7@!XX?aj;hZt{tsND>3~ zaF9J2DMv3E8M#pVlCI(X1xLD|{W;{nprb@=u%AiEyGCd~-UuR&`aphv5;@fD`9U#d z$gg7;D)uWWSgS38BAJjkMZ#mc!YkB5!jVRp`a!H~hEy@d5)?qYp()l5`ISpv5@V)B z9}JQwO0L-$^P^TA@;xLO4~<_*%^n=Np(%=3GD05`Y3TuLLb3<81le1Z^4JMj2S5Kz zHamma)jC-#T;=5jnWtS|S~t?SI<=HO;My(Y_f?R!Z7GZF*$=oy0xn5tKKDkzo0Se`<;@tH zwW99>?w?h&@+zszT?yCQwv_EjY7<%2O3ageu>L%9Z)MUiIE7Vzekw3!>pOq#8m@e1 zP8s^#FXCMjar;^c+4^!exqQTBi$FYmLLiIdRzvnBtBPHZrk;{nB5ky7A86!TubNqU zbk|G+r#&NQUE214!ELz;dq<0;au_4G=xBTi$a+QwZft_wtX2p$Bu?)&nxbCOjt+@OLa`31 z|0lSYQ7rGY??_-w*Dtg<8=dwV zugyvfJFSrpF{K1+I>K2#$6pjpO;%_!mfR__6_vAMJH!}hbuQ(0600)pnVA@giPoEP zkX`#ZrbZ=yq0&>-HL~2+P;iW^8f!^A^(#zuj1-cij6^=4)bcg&7$+@CRuU5~;{+t` z99i$leoN7}B5o^LMIxIbtx--v_AyN{rvdk<{H5J&8IA;Mw;XA>;PMt|mmw)|2sOxF zEZRk$gV@N&s5$C06XqrqAKdN+q7~r*uWd_|pxm^7e#X~jPZjN*rl@f_N`M(!4yh+5 z5b=73>_DR^XVeB{y_1!K(r8x{`*IW0Bo7W+H6ht}$TTA}0j*UHn64?FR|v9#ma+y& zUcy6DQ?U$N|Hsf78#3!OcV);u_NvTCmN(J)q0#e7hugW=yQCY;dD)izh* zoU)F8Xm>JLuR_Vyog+$=25k)`CLQ%Q?GwvbrY)IM)<7|QYUTzsf^xPC5GSg*_qEO= z``}853>VU=PK|z&vj20zw2&}QqZQMFN3yJ0he$ibU1}ho1xj7K7Av+B(CTstjB$8l2u?besQZRF>FO}^eCuSv-+$T6gxM`1Jy0!5+}yGacc zJIcm1%~3WiAqR=pC$mM)^L@k|qQn|ytT#~aQoN8DYnyXB4EXtkTfE?Wq(9{^wSdIb zB`qi8{-<7y*k(Pjj}?XUyGy zX`d~frTC;Jub$9d54Y^%)Rmm6 zgCa4}{zmHI964Obt6jwV3y_E~wBnh8tnX5+6!A+*S%;^xSkDjgJRrY`*vVh^gpogn z_%vl;7F?H(ZvnDgp% z`Y0LG7^%6YBd}hTc2*!=MWXj)V0TqUhAW8-YIS$o$Ju8&sLz^|t8uydcHil5@g#FK z0@5s9zl;#_hE_nf(!O~z=6Z&IxHHIF69Y5*Sxv>YG|F6_GVc{XOUhB+icu;JO=N?0 z^CXq)Vr>7XfmnP4CvTZ`t#y_tF@PAFe$DzR+KF_)l=mc@1y^g)eQsAm1JhsD=fG-W z*2ltav%FDvYBz~;N9U%@k0e*uCNeg6$*1U!5qr?Pc{Od~GOk6FbXO#Q!$#}OT5TjE zM$UI11mesw`%nki<~rpS^|{2_-7@~x{kaO{PtoVQq?~;aE9^4o6N9W3>#G&S#!5w_ ztYUqC4Kk+nKJF!^6bs%3>RPn|keF<%Kzkc>Sys6`q_-}C=-e^qXsz6;NPXLBl4T`o7DbB+nF4Fp zE5uV;Vs}cUmxx<`r{tMe>v7Gpb$_9ErTS+f?8WAVRE(auiq4@i*8QwpO zqxq0eHSNSqxfCNV72PLsJt#Ue$ww6bogz?^v|fU|I8SPSJ}?1#^OX1tQp6L|?kRpv z#Ae`QEP6Oh`itIiE0MRUZ>ZjDTt|w=B3dM^;))M8 z>0cw1#z#O=9_hU;b`;Y(F^!fH+fZo7E=5>R+4>}_A|+&I+|YaKBqrFDSD5I{38eW^ z#6((qF4=m2K|1c5;Q$4$u9Zvy=HU+I@!7+?0uqQipoa&ork<p$gynyV=~QrRV~P?)(KAbqoStL+{eg*pE1f`P=!UE{8PGcA0K}V=VqcPf zK+b(5R(XjBM{#JVY-A@5F(O%sQKQLPn3*-j2q@}*3K7qZw6CKCu_9GWleB+4VS8GJ z94}(;0OHUUx20Ib#2!ID#wqK_5zm~J(S`d+k+Q-|HJ6(5-m*p&m#!g zHcaor5F4|uO9k@Ak}2{u^81sWJ2l%-NOP~5;>acwfkabEjjkqZ%r#oAWamc&;!P)h zz$8gfq*#$Y6C;aAWa`NIZl#bI#J_vU62#blk>nzt30&J;bA8CB=6Xg*oC@nD;%Y%n z8D==REdr#DK18fbN`&;jk<{&9Ytt0%EoCX#?z0P! zyV?D+0aKZ~yS=%hYHLfHm0Qagsio;XDjt0!u)Y!j%*und-P3)~hHPEf>-U!O-x%V5 zMtj9v?xt^)d4-bpFFOrGo|~lfQkT7ZJEe}| z+eW`8GtpY4f12k=Iv$zpBWwqXP)N1y{h1p zQqwb3N3!YBeKn77DobHj%?pPDZ7uqL{H@u;eOzyq-93qOmF)1rOiJz;ApS@8H+N;! z#@F6!Q?PBEgWYND`r|eELIR?v1Q0vaw`#m5M6MR^y%a=ucK3zbRc=|yv*mUD%B;?2 z%Oh_X4NN++5^LWy>b5o2((+jvE5hMquefNaVpRx0Y&|wwP>M7bn0BJ|c+2g7=)SbU zC#)68wJq&EY#Y1fmbSKD8*(!iN1gipvCft@?-=oBjkd3~%o^`hJFRtG;ug@8WC4#&PEs0KCy{c*rnO@ug-ZT5 zI-R5?vx@A{7HhJdBNMQ+ef3iwLDwY-Ay{yCf;++89fAjUcXu9OAh^3*g1f_mySux) zyX)rtzWr)<|A0L|%uLNxbKKe)$FV6rcYDdqag~ccHK~!s z-}yu}e^}6Ce6e<;p!QqOBW|#uu0Lf?LJ`EpEWbvRz0(*Eiv?!*jZ+KBP|MuO#OS(| zzrh?ujz+-H0=BvRKie5F4s@>IGRqJY;ibLJFNmZRoL%DUu~L~VqyBv7)pOS$vf>A3 zYp>_SnZU~p&lKqLv?J*9^4qY+rgTwDn6hmZ2RUqnYDV)bpOxiP?cj9FW7->x{CSfG z7mNa|Sh-}B$p^;+GwxJsyc7Z+J~;t4F0*d;)ePJ6;)JNw4X50TY=ij5*|ZvhQkIf} zhM-@j=tB%zH3smRTBR`M+f!j$Uq1mddt|X@KWi%(+gid%tOQV1rnAOyUugph@+>z> zjcizCFL-$ztTVFG3N((o3I-um23fum@GHm2?W zKtjC+BzEZ#xVfIE&J~~)P){MIznD^mMV5Ar7vS2{i<&kx*PTVa4U_Cq33>q{1CfN* zNzFg_NQ#ku%ByqnxjqjRkk#g{q*oN^E9Vmqceb09EX9Ei99j@*90L+e*q@_E>1=6I zXQpe6TvZPuAM#MsT6afdRwO<1s8iXp6TFvP(bc&WNthZP(?{J=26>((8Nf`bhPgwr zbH7|A2F6dxoa_g^NcK~uRP6v6-GNx8#YI%Z#9XCBaZeoVGgU7Jl6^Lu1HlIVFwG2R zH4+&?I8+R=oZ|dfS;J!)GT+g)l5cXn1}YjGYW81%xjBN!!~^Tcm+8LXHN+wy0zgR-dCC)>(m8#gY^{uXWsx_RPmTOz->HlLNL@qMebR?IgaVtVHd5B1Qm0c^Xj}VCt>-PP z_C+&9vqyZTxdGCnCF9W8w*6ce4NOmZqg_i-MlhAwero%-F}9f?Ue>Bn!R0HvyxLb3 z+>uNtR;z%>_ElQIL~OEdujR>94ymz*IA4;U>e=`+YP{vWPViX!$ir=Z-ubeq4Se%i zdP)L|lj#N8i&VhT&q|ZXteRVftQ&?zvZ~~Fx;Zv_W7P-SeMb4%Z!9Nfd(-yHJ`K4N zB$lTOz_f~J69hVFh zJi+lFRlN7qH~(WXVrR*w1R3W*)(i?;E?!hA;;&ZLJW0&)$72lm2e8gfl6P$!xWB=tiPe zC}&}fxAF{_nNlRzEVYN=@saT_L$Q*(g!+@-l$_4TT=&btLOS&)I`yukWv%Qzq{=7m zI;tB$Z-iECaJoY@JVqY1Jldem&mA;BHw0e1Xsb=eK7g-YF?C6QUix@%Q0Og*BAK2! z)%Y*4x*|h!x@5j1uFFi=IKiEGnP7dKU*7N>zcK)N8Uq{Y>f;1nCoiAw-XMHd`Y90& z`K{blI|O{Ns!w*S%Ezs@(%0Rpcz&%p(rHtD4vuL=ns*yvy})gWu-jz*>OIMpFE0xUM(ZPDfSde{zS;V^0myZ6fCzi z4JjGY+|3*9C3%^$Q}EG;Q0FpH~`< zb@G=tBWJmlN8M4}n~EhPs-8meLo1QEONbTnKG&RUYvG80lcL>8o)Ve+0XEfdi?66N zvS5s}FS#KlyDp@06_FJj`jx$_WpYE>BoBM0rg0(WNmd$Ky33EUt;vQsVf9mq+vUI; z0~=SI+%L|iIQit$$?w$sI~qflHVpD$Hso{&i{igSp8XuN;v5xM9Vl7 z!Efsso6?G^gx@m&jOj%CG?tD8PKeMYGc`$ahC`owO&W>MBohCE7nDf1Mdo=r=^swf zVx0;s@DjXVK{8vN zk6dHbaqu1nfd$;PDRZpCX_V_Q2u;)$r5&ATp)ZRh_S4>(I7khFs-{^oJ1*Nw!0p0z zxV+ZIUgB8yt#s*R%>CQgx@1JKu(DGQrpt!fMwzTl)*_?XQL17tD?3e1OTRo5Lx8Dd z(9eu{naP!y_GCGRu~?&xfB7$F{o0V8969BGZ?C`h1__r@Y#$RPv=EFmn9&7}FyOT` zlO9ml{OenZ?ENn-ESfof;j*dL&bv0WwK`vG@c0g{O->n!r}7RF7s1;tXKIcPhHHg;sq`JC-$gF`n-Lr_u$-EyR zptsy)ApJH*!S~YVFH)NSDn@%je$YO3soPSj$VN3}@n7at9^-l@W?Y<13G#Tius|QvzAou4P{v_{nur92`~MYHszzU2-SXNSrIt zdig`69*^I310trpqmBSpT+^zD==?G2LDbum?%{4Om#xV;9kJtibuO2A3zj-bM_P!9Xi&c1*;9k0 zuphZLg8YQ)mk3SIVjjgA-OU$9^_h@9? zz>`%{Y8hqHm?v)-5+aJ9idMw)0RacfZWO50@_C=*ru)4Ze$)^UFyl>TUYi!fP$y7% zf7!-hW6xb|?;$q?D#DcK6jA!4R=>}ZzC^o3QX>1c(#r0xYOGM^7q}Eb{@BcQ79)UUk=zY`cEAgcPGO2kZ2O@qGG1q+sCC1K^6?vnxzFXCk`xzSUjqAk55F(^L$ zr--@^v_lJd59Jw* zykH$)=^7xWzaein@Fx?1tF<&U5uIYvv1w&(6TbfzD?kM{aVaw#5~o^-Nj(2CEU;ou zfNwae6y_uB`ZxEGQDw7&l8>ft)*ZqP&kjOt?9U-KxmKlR6w0sEJNM92L96>ugIeh3 zANWHcC>fu+>z@(`s1w24HG?g^Ya-7hZ<(nq)lNYEqLb-;$i)K#a^3}}@5>h1{tzbEVrWW| z^h+Gyl+Mhusu4N6Jx?+SX26Q9k z4R1g&(Pxk+2emFi&cXP|y=gfM^o80oxx9x*oyEq42LX$Em-}2- zFQ(I<5HQyT_Wa&7=GG@obq?(1c~2BTZpyN>JWqN3MM`x!qr95zNxoXw>M`<_tk8Nw zXXjCS`MAic-A_%z8Yj#C_}1ok(gMmmUmg&Ja*UqPzGyY{+#2*W%%aS2B3YkEKZWj; zr4P%lFuk~mYg<$ki{KHk%@RFbL@+gD?b5$91&R+)ysdR(=yJ)-{3N zLsCdyiM=IJxgVnIpjED@;vLS5PKq^YR=Q;sK5;?;@d%;ybTMyg$6s)_;zrj3sM$bg zf)PdNglN!)(QQrMgZU6hol0yAr>@k2Kzcnn*Q1Mlaj=%1JA!|HiljZV#h7wb#$0{_ zGpY{u!h=FbVf~BppT1;68WUoa)>BW+BiZig)%yB4GdQl*i`oI7g(CDZ7P6Nmjz1x` z;;Lq`0%gIW^`jwWv`VsHm}d925n=%+9j{0!OjMmIUD>fGQydbX9QK3VvC&yDj+2ij zJy!@R2ztShYPqZ+ogl(mM$ubFw{+6z9l0VNIWo$j+*nIz10pQ5=w{UqrntRxisT)9 z50kkutL1vXbbXk*clyvMn6Y0c%4@EnqCZ? z*HKrPx~?tjkWTKi>}#cSWeeDO_~VN8WkB>93BWQvsQP4kbAd80&dsy^AF;;*m+`#A z&7d?9${I&;p=C#8$Xe1s1`zed69HT!5L_?Z$)=WMev1hrs=;&wN@Nvn(;dF-Fbh6m4ae}kVy2t1xae+=Fe(H10blL!MQ)Z%PKl-(vbu_QHekQYMj#O_C#EvH0y<`qi zG3|pAzWaHoH?fbnr1xUjsVrpV1%g*M)TsT)1FzTzX`!ioga0Cdu;SjNo^N8N8V+OH zmMX|d*ootCdX)hUqB^&gYvH)W-Q?Rxd%dW|Jm{SDPsy_DGhEyJqobLkUBxWYNvsfCz8dDn>hzJ+N{@-==Ek^b|-Le-p>Fr&3K zjKiL5GNr#HK}MW>B>nrkzFJ=qLatb7*rzO?g7csZqp? z=HdG)6%2ExUwly|@Q90P%))1VfuU0&`6V}^11dl9) zXWeqGYrSk{K(9wGDSC#@rchI@V%i#+@-Qj)n&9!dFC+)VE_4wQ2mY4t}-Q`G?d zJGb}`*4)_jqw1*nl87e+v9qK*&lRQSIXTED!=)!q4tmL2{IL`lk%urv)#{DFbh1~i zc@n^?s)6{$M`7V+^|^ME@yfTp)V~Hv-HUM*d_UaQ_w$HuqW;S3%wvgz6g{ElTZWT2 zY0_|huMwqAHJW-exK*c+o9!lgm-0fG(05Sfo}kXqY_Ln3{r;>=NwuYAc3Q+HOET3- ziob^F=jk-mN|)hmtCM^0r z>n)aFm1!>$PBElZpCYH83-Zqh8ewEu*gbD?$1yOzX)LUD-rG42+z>$KQmRL#u{B!V z{F!1<%wfE(LTzl-dwsnp`kTEU+pSSIaMW~&4TkLFC1dP|Ft5+;Bv3;g3GnJOQa%9C zU3jZMMMbPR{#IJ&KK^U?q9t-t$S+58x>+V=cKZf>*`iM0N7&roAoAQc?m8ZJK{Gj= zJHps7o>tE+?N+W>1G|FJ>(kV)`ZLyza$mX+b1~HDZ~j4{b{2|2lf`*T4S_Uow?$n7 zvE5BR=KxcT8(HM!YV5pOG)hG)nRpOT?^<=)I-xErGLP2BE~XTJ2O||@H0{|S>YMK- zvox!Ngny+`d*Y9d#>{k-&l~>F4JlJ|vKQ&d)+T3!opMu$iVNB1u$r&K)jwKn>aAvx zn5gOT<@!A!MN5YBqD(szn?Kt(F=CD9^uc<+IK`~lbm{b+x22{)sNsXH&MFpoXnmJ? zZ#Q~v4^{m z_ks7RSgjSeDrjR+%`1Ta7|%L?rPHW88*dQJqR)T4Vn>Jc-nx(@LWL8~BG9Nu!!9M~ zlw%KHrtWqML!;wQi$sQ6|C0>>A*Mn$&fDiD;r@WE#>yTuQMQ!|TiLDP)7vxjRqAOt zeX)SJluks>%y;j*3<+Ot7db(dJSeE)FViu9ufu|RMVNy#20oYap^lgG={WUt%4s^% zt<%XjoHgNsz`5usb>ngF|UWUvu9GJ~sy@_P>592~Pa5Kx%ces*5t<^&m zR4Ct_J9LKkP$#Aa^K9Hk`5i460+0 zI|`oTlSEo0#dAd08GKp2!tzjj)qCfKNE&x}4b4xL>m<&AYKrPul6#>XJ&_#~{;$hg zs7!Ov);qJg!W$}nz3SoaWeOQynr;X`xKX6O)5b8_gy|jlnw7`2ecs~>F^<=S^k8hh z+~kiwN#MG{9kK46Bg@f;sEaE*u#Ww05)qCm-10ia&!Cyn(h^IeFNHp}98m&eTqp~{ z-k=R}uM<`Wm@x;yoZ?|a7Ovk~M_wouxwoE_mJ(mh49?S8py`b%zT~;>O2Qs_>+QBA zrPiH}%a367njT8$#}0LkL+6+%TI(Lm;7QEp`)fq&kCYqtSMjvN5l&2B=lO+b+kiNh zoeG-L*f-S+YCpujZpWThoDAAggYzink6@y>&5E;Gky5L4Km>yv0cG??gDLCq6&Kvf z8EZmjD~xP6;>uw$n&*{MO9W1;jPZmGwferTy=yYWS-DEly%B*h#$envyNx{4?EJZP z2$Dj8k)-fTti{-1L^3u>VFC$L+3!na+70#NYCD#MH=Q`2?2l$=2|zif?U(DXAw;WU z42>J|!vrwlO*Zfv11-Q>i{z>&F$AJ%SI)7^PdutCgDh z!~VvOqm7EKi*BEz#J;50t3z6;)G=M8q1v%nLbM?ju=0*QFD~*o)Hp)aF%w*Rc$j5n z#gb9{A;4jdSIE=#gr*t`poVcva`&lmip`=IG^8CVGi*B(i<^5mUp;Uz-*>vGZkuQV zNRJl{iT?dAKR!HLnU^;UVgB2i*lJiA3%krg*-vQ>@rsZLW&U)9Wa2 z>$@%-^2aMxt)7& zeDh46*53!bmna@uFddI9+~RION4CIir()LOugV%sHezNSwC6cctlrQ&x0{&*-*erm zL`6t--K6wgzk=!6wHAi8W$wNA-;rnmWyYh9c=2=v3%G)!?n^uB__c|}2+~P>ELJ3B z?}$mHwE3SQMBgrUsQy^4viPEa9LzK0y+-$N$7FZ2#V||h|G43Yj+!^sC9v(k|5+Lk zS36CYJo+@@P|CtBs1<3I#Yi&r`8)z@bgJwdBHi&%P#Ev8nKf>TH0C zS!t3l%<}zrfEHO^VGO!1qqbkEC&tXBW;~uP=u}j>Azi8!%4!PBg7Zf``9(jrn`A5- z^CwLeb*NA}6p}z?dP&Og6v_}&35U=iaX5SjnF_x#4Dzd3qp_7 z5q_kW0-@(6bn|2jsJe8&^~_(@I>xIpiKz3bN15v9Ob{NykY~s`Y!XD&sjmA7-(Bl^ zAvWV%g6-Vj=_i_-b+ulAb5e-Q2up@E_^mIe+It(`cP)80 z9apDo>H9vQ^VR4#^ay?rVe-czw}|!^@ImuLv&h?0<1_eR`B_T~IN1c7wF!IA2x#q_ z$$Vri2xvVYw7$dc(;Q|yJyZTW;Hgaz-M_0bemzc!~Fo~RF&H&cNaovw!me7 zO0lCZa=HN!fl2=SOAth6DLTKSkMkVMnj7sali&qh;Ko;V1q;Skn$B&ZKn^M|Sp6eY zD3=e%eEZ67EC|)vyF`I6>TQZb-uEh8&jQ7l5)fS@={OuF-ykm8kp2tN!2}zhu-is^{$WQd@PXzv%m0FxGa@mI^F3z(4RfO*rFEP4 zk+rj~+@5Dg3&N_>JK+i;{BGsmaA)*wb41qK=g!aQVmn13B!fUDXt@}w+K`K&GXx-(otUf3xqz}Z#ceYZ>NDlbAB+Uqe)-rHzJ7VR(+B>v>Uj75c)kYT8BECEy4xUu$*AM$?r;L^z--hy z3Ov$nnLK=M^=b=MO8{LBLv@#S!*`CrRN9{TyPfsfNcXp#DIW|x@PBL#oR!dlX>l&u z!0M~jw=kQupeyf=*yCRdw}*!^zL9no!2!m#}%3z(8M+wchv)C0^9#M0Jb|`HUqbu^qPRzaS$Pn*LyVKzYXOH0ygjjB)wkV zujJcLuL6Oa!OiUVz1;8*elPn+|FZ$YkFtv^`|a@jzK_cs=pe?n?Wuu}NA73|JiYg- z|LR1eKmlH-kH_rxqklvj_p0&lUI{Q#wL))}a(M7AKkBs~{<|+a04(_IUHJj;e!)l| z+Zcq=tnYi3{6DPv}EFbr4`FIJj-|t@jM_M+oQ!>2gNFOWb@$et} z7oP6_z&ri8A#idf+Dp_i@ZZ$`BR@1mpy{>yivIFHSj4*E5_msr;mv}1oVkbW)$?=* z+<9X!FWO%Zwmt?J%~d8}FaVICSmf z|BM(4%Vz}rGcdNwt0lO9n8@=qc#i1m(%t+JSp4_Ye^bEYKLq?g(8lhb;J*%8w?gSy z*@+cjzPofkCc)$HyMo3P8~JZ~b`%F*03z&RH9ppFwjFlA3JE!n)6=naUnZHFkGl-K z2K)zhdkCYU3N~&pFOkdM%KOA$ruz1;f}yoK4z{ia4GXOe9}xfZB}P-yB6=PF-I=`H z>f3Tdi(0?k?XC{LAR3TobC{|>7zhQ?$@y$v`6&~TX1u?O^ei2D?`;3G;Ia`=(7yJG z9>8OGD;ZEmNZv5Ks!RSqcJOjJ^wsiZg}6WKAbnGN&-ynwputW&PChxzS@99VWqJ5D zKFMN1$p-0~4(Jr?|D2oV{mColnMVY0EC3{ zguEAF@B?mdNAZx1huK6Nz<@*Ve~VSqkNC7+r#n^$MxNfaPL_)Srwv z&ciJ6R~m2MzHLEo9T;fvIXxS@GOrA>%h_eLdtLR0_MtJh?8b@R5zTsQ9lU?32!j0r z0hl#_{DXbJs4%6#ef&3Gp~D~0lzd`{P*u|yW&mNnP(cZPJkvj!jAtb4mPTw0az2TD7&rRP5lp*16Tp3qn%*4QQ$KE&q{ zi5jFtONjB~df!g&-*@@1qzC&v9d>2zNFd>J7F=V0?tJL36see=DlRJEDvwvPu-OFH zE-=tD=ztsR7LR(vX@y=EHae;%&lu=h>(>+k6*yX&KpqthR~5M9?{pEv-aXWSlzjbP zIcb-Di@5}|@m1U)TE)tlqx*hE4Z6w*ikoEmin`{tiz9R?^mqG=G6ol{S@f+8Ts4_>Q6vr%CnPY)4UbX8uc2^e z52jIs%V&t6Nx&ZlD2Hd-f`3rk za&Q9@hdG>11*6?$G$V;~T0vs$QQbZY7#jJ8wp~OFD^y{@Xsnp_1!g3s| zlgmrYauTf#id);W^G8OOggNG&|H#}xzSNsn7t&vWba$T#=RN~2b-23*_<=5(s(bp4 z?3%LZsr6b;PMJ@fb}rK`H-?Q$QO9^+dmNivyf06Ol|Tm7E9awQV`qd~urBZEVJq6O zjB2Z50$fex2KhguCODZi+d`YKU>(xtG8;QIzu*5?xA1LS1W!G*zC}gM6^W29?>J9-O@;d7kMtAFxS+bKMbb>6 z3s}-$QH8GbqRkR$szqi*TFIP>E9u{!E}E(MUACgp-d37^le>1O`UlU_;%B+tAy`h)NoVr?W+{f-pXCb%=wq%&%BpRb>8`L zw|gV|VNm&#t&FVQ)c_(sewMnn_QGh>3fJEtwbB`WzBTT(%xr<_VN{hMkBX}y4cm?h zR%sLNqj%5DoRpqSxfka5UpM1IcL&Vxr!&4S=iJY)7SD}w1Esc*Y&Shtzuuvw@PtKe z$NOXh(?nK)WB=z#ir%({VHb5$ZdUR&7L8-{%Jhq*3C5L7gFFi9IV-2~d0{IyuaDpR zif0_V{upzPd}5d7Pftbm=G$aaj%lQ~<13tI6DdS(gpRQwq~dY&%HS~UC=!&CXxD?3 zwCt5&&CLAq+exp=Ilpt^i{|Y(aTcA2Q9`-WV7oKGRe>Q_QPD|$Y_c8Qpm3(*#iFqG z5jSVpi0|~P%)#_^+DBWYghuWG2#@FG&d1@JZqL3@`XS~xX5P~+=g`83H~Nhqx1K_I z<-#Mle7t3SZ}(Y*W-q^^I z=JqYWkxWGRT2We+@0pm|W#aFd;Ob8@^n5lhtF|PJ7?*R}?~zuwvS9uuC^aAuvPaNG zPD3=3EPt9YdGl;x7R7iUQ@g)bqRF#%cd`#8@`6|OEZw>j=j192OF0BKbi=Oi98}~; z$&-(lO8GiwPw4LVo7;#Lr8}=c!YW1#ib+(t+^6@1Wdx$cfgR6pM~(baZQk#EUb}FHYxaC}0zqp>wWajY#%=2WAkks< zt7zs@vj=g3qP64EIm@u&=6sTg$R}4GYq65>{e^>-8zI^(W&FLJ5+5S3GbX$G8(f{%0ZAJwe1s#E8kb@tZz z|6se8(j6p{fM-;4_vi8Iw1L9?#+}S8TmetHj^}3&KCoM&;Rc$|@|NqmV!or9Uq6gR z!^_A%ciVi_^xy$ym?Y~_8Mrxfeyf5;aP1jtw%Bu`CBYInPC^{tS+L5~+`BVPRP%Mt zJ@_=m=DAQtv37nA7tHMngr&5%_-mcf@!yY-v&B` ziL@$8$x({U^NvJtxD^=8zseQ#);IIe-8#1n>^M6*Geta0$0@GqQ9HQlj?rZ12WH`N zPAy*#8@ATzj){#p08<(onkqSOzti@*{{VB{uiL_a2Ahgq4fd_)z;Y;qqD0~$^d?8b zmkNmmoYI=pTlO-YKYzn2+^+NKN@wzmT8frtbJDW?i4j#_XdNC}lGP-7wu%;Xrkt1l ztt+_jzYPlsurHtENqy$ZZP~!6Fq@sgqT#Z(ARpW=%Pzv*2c)?0lNEDJXUE|aXQy-t z6Fmqj>wa7F;+OS>OK;5H9hE+><{sDn&K*zOh-}I;pAUzz7hyY>;n@;K4(xKA)D15+ zs6j3s#Y|GUoBeY^!&W>Os#`OOhiNi(VHXuNm$$&<-+dB{K9iL#kD06jD>>txiwj^( zHO4-s*Lyu_1G7kRbefTK5F^`$tiy3z7#@nIYt1l8S|jS!mNYdhd~^;Mr8&8&r53@Q z9*s&FTFOJ(ZXV>E?o~4kmC9^sKYchyR534wK^1GT+jSsXgeIZ?7H zg&ba}u#lp)!O;1vsVQq(B)+VLwGv}`&f2CLYakYNHE9@6HRlfzR2N(M+#YdM66o#T zOI~rutFQyvT%$3!pmhB8^>x*&WkZWP;j&V6)YZzTx~=t(c(Hr@8}1F?Wt{!wRFeZp5~kf`|a0 zrmm((5@x?*O;O-;TBOJ!LX!K>L!xFw+HP~<*I4cnA^#2i1&cg<_JfU0u2AD2gN zzp-w#Q(kqJuig$07DwFA@7qsL6=!~6UUN^oF-EE*^(jy*I&2#wJv{~d z&kIJSr@H;{{CrMRg8Nk3QreN97t3(K6U8p0So~)YVxh+jr`oq_s$j6OP=c|LK!T?Lz_9Z3LU_u;8lV~ zcQ-?<9sxpAc^qFmLsTgwL>Q0`I;msS(8T>^($q>){$x6r2Ay_uuyo_XlynO8Dpl9i zm3>t# zV0>}o{jeVL)3{s>o`iIJJ>&xT2D;d|06*|k8j4py{iQiX|0`9eSFz=CBD=`X^eF;F zUA8&?4WT{q5P+^ga=?058-v6^#?$4BBv`*K;xp74t>9G32+P)!!dbwDhXojQw|hpC4=?Tid8-=$Ll~>gN#wQ|!qJJDGuj zkmvy&`4+_c9IE!gH^C@4p8C~Ykf35&GGW7mO|?VVN-%ooZC|dOxm%LcSk)LK6T)I< zqtK6+f?WKEx;3?DFU!9?Y!uRR=o^jaTw;9tn5W0I<%EMD7z97yCCuE3{6f(!#%U^0 zAEDrp31B^auE-p&e&@FX#L#qUbGL;MZo#o2PpM*U=`lwcT4MOERKQ;^$_#A+$Nz8NPd4I zV)C67kMGQad=cj?|J)FVQkXV-0)xE>CyDO$*FZynWXHvH!S@~-5DSZrPI9<%`K$Wz z_5Lm~(WC_vi~!xw8xGyz?z}=gzCC)r&up)`YSs>!1&=aN-M9`GHNg2zYMI6O1p*|5 z+#N!d?2FazwP-6bg#41op+Z>tI?igQORU8$!TrbzJ(B4Qj_CC0jdRo?7rjyxDym|g z@p%Pr;`UQLPGDOCYWTa^b3Q-7fm$0Ss{tuwBWWf{ms|FJqOhWpl`<(;UW9>S=kIzn z@`Ah17q|n%ZrB5dJkdMe;P;K;4OM=FlRr!LoU0oXobolNl`jPIy24}PZKO9_#pReI z$rJRdBVmUf5CR|Z*Od1UXGlwFhsgEZbyLFO@I{5{%?_48@vx=VLDClGSMYnWBThHrvJMmY?ODCK#EcLDvBkIee;797aY>I}K%Xy|O7 z;C9gMc!N;XC@*JG@1bn0lujYo^O1uJj zIj{B;u6`^)Rif2*@u7JqqR9KI_#igeh08U6T&wk=wilk*@dZA>&4h~x;W<9ko5OwA zJnq5i6G|dVhX9n`x)1G$&yWChk2|Mp;_zDjyjlU6mD}!vFkU zJO9jArakp_(o;x|1ywt2HcxhELXmRCw@>EvHNQ|OJZM}_nN zj;CiB+4%ya>V*WZC*PZSmawGqbDdt@7mlX-uBoFX{-lIhTt(@>|M-8KH_{M1sT zQ#j}LN4)w(KCjT@guuU|FlfijOifD31u^=(Z`NB!SOX4%V3_cKq}luypi@k64Ezz2F! zQ&Tp!>le}xXTcv)$mx28bJBU+F+uz z&w77fxi_vGEu0?eBMbdLBcwaD@lj^emTjhMr;}%+DPp{SL5Gr;0(}5QWqTH$InJUX zE=KhGGpS~K2~mS&%MI_{Zb}qDv^9%SpPTT-JfFN20ax0_mff5f9pWn#-pjx+hrV{( zaNls^Fv6k}9)9Pvs}lC6Ju8upYSeg5e4Aq(C^$z#Ga#P1NRSFYQrva(a%WEf_}+FX zI^f0~8KYX-c8=1zqK5@sq)w6VJID`DrE_zu4Y_~^@d1}Q(p+=r&bc`nZK#`mlmX)l7@wE9ZER%b>zfw+IK)uT(7RHGMH~aY035K{( zDa(A2axAhijP>t8pIBtFV!3j70i&z*Cmr8KD}c`*ZJHic*BQgPohdZzO6nbS^u3;r zPZ?9|21YdB5LVMCw4e2=tG5>x2jk^G1b$~f_F9~@G{V;EcJ7zimo$n^FOjU_FQ<4m7IvmfFO@BB$A!r zUJi;q^&164ddML3?e7Yj$!c48te+dmypTSBn(J>THPqMn1gBAj`9lD~+&%Vd1524I zEUjL#S6=4>r1M2`(R<=P$qu4xc%bm$49q`2=&(L4u zC>6AaMC2%_zG7t*G3iu<2drwN2t9il-Nu$KBiIoq&em`{WhX#*Tyr*tHTZOe_GFhm z&5?9usJicsBnku+-i{3NP{PMQ4WJ$y5D_=L2bH$6?WqXBkvO2LraCNp68zeJ;MR4H zUSdAiee`Aku$8eU2{$?~x4wMetexGWTvX;*5@E-jv-3vFdTx>~1srP}KjonOxccns zAyh4Bx`@QG-gjdt+1coJ{{X)c!0`>qM;~DI-=o%+8)x&2jFr?+K-*EBBJqiM$qJ77 zA|iNU$a*?p5%GycHmL`+HTGSih~Tg1Bgz?>Kw--e)Y%+Ejn%dvLl1)#E;?z2uAqSQ)M9oWQ6NKTTK^JW;az`?S=o+7X7}RLcSvUbbuGv?i{kB&7 zbSGH`^QMU3AJIHWa6T{fwph@Q6Rr8v5atg9G43Z+DzOCZa7o}#U|j>UFCzdy*{HSu z-kT5{;$e(`b_T(?&d9~|trXi0))*6(|9qIZ_(j({lnzPUxvAWen=BMbzrS_&)C%Pu zl-Cd_XwwKcxoK3v$*c~8-`m&$-XLr9cKcG@p2$l1b$;Ay)EL%6HL@->WIBfs{L44%s02btifLMIHN2b07P2`X1)X6n&`MRCLZvqZZ zqOUK1GwmQ8I?tuGuVM8qot$uz%$dlsosd6KWu=X0i@s<{I2f6HSq+{Rr#z{!%{3R* zd}~R?(o3jNXKzNz`zrWg>UusMvVTI!$Kxv`AQr(VZ>EEqjjT?)7w07WYHnNyr{$_m z>r1T%QI8IY>{fkqw4~S@d~U_=``ZQ~+@x3Yz^D)K@=B>jiQ?x$7xr7Qwx1+Sm&GW2 z%fu8u$jeWOk9;_0<+wP23=6v+xC7^uGb&4_1+3u>VK$)LJ>B3;KSB)KgxZ- z`K!QB7z*m7H3WKrIaen_$vATrIRh@%+V{5+#UvYyk9s&EN0$bHhnet!fH}|B8nk~! z;TRhy+O8P@jh^+m5Jvq?hzRSIGX*lwhIxB5Jm6ZT#g;Hoe7$$r2Vdrs(5JwH7$44J zT90|*U|V|rQGd|L@b!eb-tih!8(_l7Z;{##AwbfdmxiRd2kL=F9vLPs331YA;Dl@i zKJtfs(1_k~0kK1@fN#7rq!H)eTZL&~H7LbdRLJ{^x-e}SS-w&S_$dg&ryt9g{9PPeWUQFR%Offs#r;B1Mp-nGQl7UYHn?H zSlG+{@WAJIDFOk6{};-f{sa)vPxyv#z3)f9f3Kinel4eMuRciAF&Yn+j-%?*5Og(T zV|ju(?tc-iv<|pSToN}O7%y^R(^p9+**6ZTzZa&D0mXe%_5|~3 zEPpguvn1>Xsx8*P1mQPMe%==mb)P)mr^KBdYyX zt6evxw>3?4n z*yC|s165H2Kwu63XCsJe;N_T~52eqYH#V!JdtIRfWyyy<2(|81=i1#kRk;R=nyn zZF!{4Is|MS*2Xftzk{_|tV}9*7de0#xtr<=2z>?o@j8TZY%~NC{VO7<;yx~s zYXvc2(tx@5fVKNBS>47E<(Z3wL5@qM5!aX53RpYWu44Dg@2llBy>9aYN%#?uL_y|d zG0j}}164_U5z8|+?b47h(5e@qd+#Ug&WI~CP zi*)IDIA&Dwe*PXB!AsGHtJ?CN1-e=VbwPqL0S3JfB*cN`Ap5}W5P$h$m?AfC0tVT? z%jP$Y@7$n!^hewsi+qb=pgJAW3=5`YbB&*_Y*x~& zl=mN=y^YP&34a%Hq8CvoIV!QBneQVaNf_pVn~u;KVH*HOc$rIBinvL(vdc^XnuiIg zZZP69kY`UYz>rA19e+p?NNgqaA_&YF`Oz>J;Qjm=M?(ZV-N1{|rRqw(PWShJi33G{ zc`YHWhXhWt+WUWthc%qYk`sQRz)HKnS8cwl+{E1xIPhqDn(izk!IYj1%WRMZ{J}v~ zp1}T!!#iI1z$+U|+&B}Gf-h5q2$ko#BdOeT89K(?Xe&tEbbk@0F##lExHlrNJC9Di z4W^E++w z+hUphFm>NhZIXp68i9yQ-`^9JiU1b&4-o(UsuBQ_4uM(jLnOQaj94VX;?aE4qhcP1 zp~qTrQ690~Sbx*vLq7d_SVHSxU9-HA5OrP}$zB4{S%cD9=` z#-m#xoB^wcR#&X8hPgGIU?gmSP0 zb_N2}!c{}8t^zzmK}s4+bjjHkj?^vUCO4St?*av1_u*BG1oR=20W2fY$TguD_j|h_ z1vji=uzw%~*zf|93b$<1((ZjCLR@LFK!~G=gT;X2s!yDU zJQ`5%T)+z*Y5o4Ql~Ltn<$-ywr`YDnXt%J6l0_Ell!{r>XU^Sic$lW;Zd1=YMF;wAf5whagL(S>3>B>cuUJvd&_8r33vGfKC?>|ctuhr z%@s@xC~uA5?TA+cdqD;p{4&=-)N3-JFkz@j;Cq4?)uan{#dyN7LOcc)!|LqS@?9zr z;?2#Jv@SXU;85`Ml?pFnp3OIHR?b$gS8f6;cz%&{I+U9~MA}As^M5U2n|%RGQ6_1o z*E1p*}nuuPW*@o>7C_ zRm;T^v)d3Q3yXI+CnYtwOo&d+<$v*y++3u9hBy--&FNWE!=vmc52w?uwL=B z9_3ZKpykdLx!q}9#=1ihL&WXk6V_t?Aj?}WCNGg=TKL!j!zs;e8cgPYZUdl6J0dMT|oSTD`H~aNMJEBebzBAGLE}J0e{p1 zV77UOosbvw4G#E^(l^N%|3&vy=c^1iv*B>}@ZRKj`8*NepOQ z(GJW#K=d^W1L6p&7&(!OWNJg-gf+2P^4!WxE3c}&9@OKEYt*A`b?_zw(ru(pKNDt@M!v;O8}&@M}E`N^T>n8^s~sYS$G; z;MR~ky17r4ivyjZfa@ayB$YB)8lORE0zwPFD9;q}xtC(1A`SGb9>A~Xv46+3BhFW8 zz|`HDz613AB;*n+netJ;bC3${JM^D&Um zg&`h+AA>Is8Y1qaURrHvAstJ3E&HpIpkBlGMNDfs?6m|QUR#uuk->8vA~T5RUazkL z77J;pXPDF?lY(+L@InR_Ep^Wk5M#wIZLT?yNBpci@@Tvyc*mnjTYslM&`9!P(Anuv zrUJI{4QWop@v2+|X5zYRKwQl<<5&ns4`zH^XwAN2Pou$noaCanv4 zbU1Osr-_rIBsk4N{uIQx493EUaMFGQ(Iz}iERFHn2-lhRvivOdqn`$z|6B>|?eQGf zGs=Wmss$Q^gLj>n(|-{%%V8JDW9>W;0)_K@8Mxx4&xnVr9otzD5*KNpzI9b6amJ;i z`0Hb%Sx_&}{r?NFecQ)S+0P2A7#_-NPx6IRGX{4Jut1^Dg&4nc}j_kB|Hh+{B=W# zY6E9}rC6^og9m>el-6FMvMqa)^J8R4#ZY=Q0B6fBb_#yh{EULJtwGR2Dae= zod%AA5rpmc4qMo_=fvkALeJ|9)?PnWU?&AHjxXvBqv} zPx2e&qBwyW(8ocH1eSL_9%IdO3LonHabA0Eo1_k~-MA~luFW$fFe}Tmqsn-iubNUS zK9d=fyd%3Z8EYz*iH zTI`L*>OY5lIS!2P;w+a~O!H7}dN$+9p=4cF)+;6lTvym{r+a|w;*IC2+xdRw`S-2D z1b@&F7|Ie-CI>7-PeC*vFyjsprE*O*vC*AXysp|*MYWaR<)G3%o9OLPsbJJ#e*016 zXEc`1hP>CXn0aGcoFn@Ug*`U3dAv5cNH2B>R>Kh@En4)9eYx_b%AZx5m6amPKJ8cP zi$m>7GfI0K`2rZ@Wt6(6g<=f*ls*T-|9@lryQQn*P&RPaH!u7?Pqt|M0cN<*82Z3c z_B40>my3%YS(ZvJY)|nHkg;@VMvVCb96`8n_F|8Jv z_A_(MF@wZveK2!05iZ_}ntk0M%a6}=-1 z0td|+TdvW4hVc`=>EiVHZ5%7507q7CeXa7h;PofV?h$)>&L-eTWsR%I1Ho5in^rzA z<4k6mqJsAoUw*2%-h{tXXbI8F)_pYC958XsO1mnO~xI%0xa0Y?kc-f6R-^aJ*?3Od5S%+?}2)}Nt;~;Ry2m4 z`2zUITIJqS3-)bNvjmFNV&mw*`HRijEqg=?|KO8+R(>pb?0m*~xlf7sLw{E+#RM&3 z%E@})6=Ni14JbC+!GSqui2zx9iS&|JrcG%Z)j-t{h9$*6#2i5o>;Oe%+`u)1|2*sk zVKk5^WdrW=STwdG?IZy9!CD_E*+L^#fKtl>WUu}MDr=K1j$PC~-dZq$kRE-s=92)Y zPrR^(J+2kZJ}EMPpRH6YLw{T8-k*rWuz9HAuV4mARwjvO;BH_2aev(af9WsDD)5&F zg#oUo-74-K>-Gh5akCXw(aOh?eoiSsjMu8ON9o#bM8o}&m9=T9S8xjI`URy|uiu{+r+do@rl&3^(2jXzrAX_lm?U}!i4u7{z%rrx3g+JL1 z)x;sL+v5cO~XI>cJd-$69XDlo~Hk#BNePAAfs+s$zfc|6=+x<*U4O zm!md82#|e>dlCdc#^~&8dqmI(c)ip5Kt2NG4+uspjh`Zh73q|fA*omK(U1o;ygxEH zl8&REfw8+h}ND|`kEej-yb7)_|-ALFi2o(3wZNGkkML=p$Hx8p3o)*73oGb)=@Y@4I*Dx#eX3@wld`f|7Vd0Is?{uZI;t0 z5?Hr)`p%0Yz<8zwu7ddF*{qpuYS4D)4{zz)wV-0lAdJY616&!KyQ?{D9PW_SutPn6 zf%-%faCSX;97(5%`(#?Je?Qu$y96|kwc1Y_InrDq#v%qYT3+#^fP~`_KQX3@$G}cm z5@Qg_6o2%ek3;dXnj7RScY>b|9r$^djrr2cfHzV1NGzyFouc;r6_~&6ow-=KUb3Qs zh!-kufA5e7&Sjhxd-Hxgm|xjqlBb6pyGRDk(j5;2KD$HGv1eNIMdmoq#mYcTi;@c| z$z0I*%ZBu@()|te4D$5e_XHdv<#eor^R`U|LVpDE89Hf+Z0vGQJsg3YCXT@na8O#; zb(*+J`O>C9ICc3#A!7aC4{7xNwjWkWX7q=0^J^?%`g|<0kD_bS&LQi;mnx4|UR2Kh zQ0ne*!iI}O9f)(AnA-e|EEe`q=6doucP`tF%52W`7e1CF0BYujwx%w57YP~ycf=;_ zFMkV1?e@9hTq++&g!XN|5A}$lgsR@2Hnpuc3j@>)Lp0#PH-#k&U@AXGillJ74n)ok zXr5^7;UE`Qxzugdy>4&EJK}p_A!bM(4oSe(MY`+RHE9I45>|&di&tchTcwF(eg?ut zh|^~Ruuktt2wyO_hsJ*xap6IP^c%VU&@bqM)#X!R&g_yy|Le#N-?cX#TzN6I3bY8Q!A zMtqL0g}`i002IMj>PcQB08li;)S(kYL+U*k`yO|UdST-J;UY&NZfX!tz9H(P8GnQu z^V~oZ5BpCg-bn*I9G=UtL(NNlPl`CJ6lWs71nlYam0qFx@;ms$+@5CfWKNy<>tSDxLtq4a5-wEQj(|2up7+p7xyNGbgednYIvhMTw z-nlBxPwo>Cf6R8nc;mKhvfsTHSAYGtaY?-+0qb)I`R5HM)M#3El6@W6#OEsk#J}Cc z`P?aljSgzR|4J0x9oY`tzj35g#}Pcj2C%KS*dq`i2c#P~DQOu!NOtggI7DtRWaJHU z>wQLDRU9-k4KKzXPT7?J10{tZ{YEeXl6Rh|%rp%mGG#O)fy zR7|OJggYuo8m*wa{GyY1k~E|f3<&%OB%F?f5ss%p;2OSiSG~3XA$L(4L>N=TPZ?45 z90%T1D;8zisq~T2fb{#)HJ*;!zb$M|2*Nhv8ad9;eZ4K>5Ifh#t^Zc!vKqy?kEtz+Y{y<8Q}%L- zzV(%|t#SV#njG3nTg8J2{iCiF`ZU4|TkFMz3DN52CPF|VcCNN*yYCPP8-X*tOSsAj zy$p3-^$;+?74c>OA%7(XO;qj0T>+7G@g87Of#6-Tc%%WE4CM*dV5%>!2B0AuHw+PL zJ-Set_Walir0t{t9+;Q+fxx&2gZ{K2FmE}T*3`ef-|hX4Ca7$}ovgW#G;t&6_6S+J zfQi84{9MuQ7A@f6HUuadnj}WM&6Fn`n;UJRcKc#PdQRNHiT zAIK$KwWk3V-;1!Q}x8mTd>T3_#ktuFt7) zl}o(Myh?iewq=PiXWF-Fv+YA*-8M5?Fp2LFf6Eg?)7t&4Q~qF{R`BJ;H~$v6MCt`9 z#SPCacqhmaQ^kH%B^2z1kO7En`cB&&8cStrFf;hHiA|aS4{ZmA>EHq2S6TH1Nl+#E z;A!@fb$`11r0rPf`hfsCl`e3pRsW?v%2zN2visJMMLc{yv8^b}9r{Q_&3q2?Y_W-inGcEiio)| z3xJ`+b>%`w)b%2HWPaB5HWoCI98r`S67RL`XB8nYk!X?iH- zIE7l9B07sPRVy}8#jYdIyRi#$T(;YCR%Kst>*-$1F}2QJ3kp9IX0yAysghGloZH;#aufH1pDs`Je% zsV7Xkev{ZEk5Gr3FiOr; zki^oulUa=}E1c!WHbC-ip>x^~-w9Ip2wH^D)VJq9fD6jEQZM`7q)!@P_%957V$!F; zOxS&Z^U5Y$?_&tiY&Fs#nSy(2Hk)ovJ#T>w9(pKwoA#6nv%-qMSoz1wry$m!t$*B8 zMyE7A#QAMQ(f+7xD1w#F$`O`A(e_OYXU095vF1ruO8+@e{sjmsRot?7Ie@0KXIhB{ zJ2;ENKFK0#`-|RA28P%WQptVA&MVt?fOsY^v`OMKhxrS(VBQE} z{wXjM8=H44CqV_=U!0sTOMLl3;|)-+JB|@fb>+;z#S97OJ<4+=d^c%&U}R!fGx;F* z^ofyg@>N``wfg&bqrEO%|EPz0TBryi82u1F{sg+^LxRTPVl?k?lp3 znRJ(|^l+cJ(c{Wdd266$c7IG#7&NH`UeI`lmP@s+BM773%5sA?*4>tSb%@8$K(I0f z!oo2cYjK1d+6fTtM#+$tXL-I}`DW!mRJxU8woiOUpZCCx<|lZj)3EzCo5qY+&0fs^ zXrZ%4)>*Exg}XbrB)ZhvuR*xY{QR zz*+vZ3Va-af);UZw13No{dUzbCXeqWq_gR^U=l3%JADai=bjPSxc{nOnPxk!UmTzI zkB;Vvele%)`{mc$2g_{>9|xyROS2LA>}1sp;EqdSuL*T282OqKz}lHmfN9CYRQOxm zk$ya^)v7rPV>8;p``sWE)eYQO^;UOq=!AL=!o>55o8csSrGJO2Rht&qI-~88J>1`J zOWV!vx?HBGDt`#GwupY^ zus@87T}cmmDGr}lEXzOE3a7`&Y%}OTVeb-f$2q0=9Q_wE@hOh1^+8 zsYde682kp1_H~+>lb!W&jS$+%yPJY&b(xJ#e~I)7QA-lbG3(k6l-jK?1BbT#{l_bJ zRW4T^1dmGRrkKxD*thG`?aAn%846};ZK6DSHVb^yQ-2H7y8MrWu+&jhOWXxit+9>u z4YWRHDG(Fmrs{-polJ1F4(juLN=LhWgu05>nxx(&%?y)w;B@kVVAN)lgvrxL{T(2J)j3KLYBNx?HW1Mbu77t;^xJrztSk(;`T) zuWd{@4S#$8=apZt1h$LfFsCVi&t^h@TRY(4uR$PJELkuJJz;*zanw_acX(`^>xqYJ z>T&i|p?3eV^7r674d8~GvkL7rcXEf!%kO-aeb|la0v&XHpr6EqBLEGhTDpe2sd`3i z*%XR7i|BM5ySr%ZJ;NRu?(_{#!xpiD^X;pCgMU=VuW?CDJ7O$VivznFyY_GyU*cuw z!dEN*38KE8ad|&QIS?_wEkPV~ev4^AKN0`lkw!m_?OkDrQS;Q}H}q3ymPY`^JgqN$ zbVyfY{KrP!W0)WylaGg*MC=iInSH#sM{tPqR&{4Y#*t%Sol@W)-+)LSRL0Zue~0>( zVSh>H71F)^+wSFnmnZjtWTV8a+Nzp94$JXsB*Qvh1c#DukZ$;!+V^&WZ5&%c!@JBv zq(}&YUal!#o z(S+N1z_p_9$tLz*AV4Upmpv+8fbS!{7JmlgeM_W*p1raNM^XQK+ah3LKXy^b0qph+ z_a}V+7x17%jfp(&qtTv~x@kT#c1$_Mka7!UbEX@4~OAVp~zR zK-*D$5~F4IVI$sKb8`|^pEd9DaYBNZfG!JBy-R`dCRO=1n1Sf}V9+3edTdXsC*I-aNl-5SaY2Ya*p#e<~Z#Gv^PK4I>>?W$tTn3_#9SjGJhs~%ZkdCBY1BW zzA*BJG~s)VTb(G%JqGXD5cWE)mpt(#x|yuwttP4k)LC_1Ljx*EHsiu|nOR zq6AOy7zz5Gwnw7&HNA`Nk?-!3hG+l!4=qmMe`~7Lj{u$lW4o<Z7MW#VCKbL?fV(?6S55KwyG_t#xRM8kE>2U1`u8x;M z;L(tTVh=z$kU)y1;Uh!9Z&wuqUB=}?$g#J_m)WmJy4$gTA%Vb8pBvM3<%GT|RR(VY zW|H2r`C^;VxA*wibCXkqDo0sFoNOH;?VD1SsLpam0?MF$_qr1h!&wa)<7`awMwW z{qRj)bX^4cdUOt z3$YLor7rXA18<2Wt3IrBZrrnS7ah z?QJl#dmCh1^O;wa4_w-^nwOSz7ZyI(+7=8QeK&VFaew_9?kW8A1C*++g>$)9VAZRL zA@<#U4o;vpUxXU;MSawk5rb*II*d_oi z`-=TGynpyPAcqjN-weA2!4(Gmo)ZYSB?PXx_X?mGBurwJMM9h~7%$^>{0FXjZ_f>6 z98&*T-v?FG_X)O%t<~_D*jvdc8lV?caDIZ?UyjYhvn0n!=_0U4Qs_j-=|eE#2F`#Z5xD(8pc=V*?TK zrig|6*3iR=`5EdY?{wbvdLx!4PdLP>fv>R7w#RH#+?rrJ5Ny`2%yLg|J0m>57ssZQ zCS~P)?{M$v9S2s@JAe)5dF+B=V{V+aD!@alAzWubPrR2sXz0lEhfUy3-Jx`B5-$V; z;D6&y;l2w|#~wst>V4V>!MMGb$?4l#O%BV=6Pwm$U_JDI_yw+QjQ|^-P~xzh!j7&R zl@L!g*UmE{4X^3084loVz=NsDC9ugoqrV&Iy+hVz@zf@naahhrH6b@3a@B z*_fu^17ZO)_7UV}40uQ%z=AIrSP+l8b$}NS+sPx^76!j#kq-vZFX`W)ut-6|gAYX> zifvWs*GI_O+j`L#^k;>=&AJ>9+1u`6d+UGOkopgJ}FX=wn<75g(Ie{})nEMqZ=- z__z9(-@_K{`KlcPq|fF)ckPX63-Fa7H$#}6miDaFGFa$8RQ{sqYo36W-c#iJ4*C1u z%-@Si-F~71_N!3E^UT+@4Sptyfq&o>9W;OKC{6@@H-rLv|F{0Y2VR=F1TB!I_89lO z!j~~^N2gzCr0dj@D!VBu=w^z-CawED&9$zBor=^&$gTdlQNL3KB#L7pKODO_(SO8= z6lXc^H$xh=nD4}7uuKEPGLvca5^j*u{B1hQX&}FgNNymS2)*GjElph9!hijDMb|^u zvYq|giYy1^*x{`GKF|4~?sY!h(Y!oM_uVcj4*8}7vN2qhCR+z|B|hO?UNvs*S|?;^ zQ5bItO&m9QL1JnPsE?emi4cEX@akB^*uB42C*$MbaEN7XK@#k`A*YUHE)H4*wsZo| zK)~9`#P${UV^&m_{#%io+J7(3!Gms`o@4~~wJ0?$pxON?{mpvTaDMhVpB)09&L*|C zI(?-GNyX8aH2-&A0a#5$>Kmz`gvHIJHbMX>Dz^<80Y}Z*T_g+C1I&HST_E~~sI7I| zwzx*{LMlNTbRHFp`EJk(QB2Ily;21ZB%@cR0^DZrUT6s8l zuWhgVMWjgz10GXHucLkHWN&76tBR`-QFrSi^GzQ$vE#O;mra3i)lQ1~A8jZYad;f! zjd&hrF2{g(&#fCAuz%zcw7En9)lM<&BDUQX@XmC{0v$bJv+tHYeFb=)9eq(ln{`i) z4z;B2A8HL49qtA_e5{k_WeH_cdf_LvILcj}5a07{kFmYHJUU82`ntwz;n8a{pb5ZS z@iiJaLx?i2?%B+Ip*v zrtE0IMoi=I1boG}b4@}Lza0E1o~8C2vs2KfM^`i+D>UNASMaA+8w`oMYqWwzDdL9UDDxxANTuR3naQ z&APBNWK50*%YS5n4?n2o7QqfXk=Q?1cI`r&4v!EUP}7#xUR|IxE=Z~y1Fmpz)|%p0 zQ`*^X+Ea7%w7=dY+thN&)~$c8dIRF3Ny39#)aYp8w#W81J-T-ER#uz|`Id};XgI7Wn zaJ6qwwy*_D9^f;~7VOtF3T%IdsU_MAsVBw5_Dl`{F&&c@s5z=yk+64zz-rCT5gh^B zxLiiHGJhp_DEpe-*&TF{o+$6ivduC8WRv--PBAREM=ODa7d7Uawy2Eq4w|fJU!VXh zr>0kgN}D9ii`ylIjF!2h+x)yK>MyylnJLa9ui*!$|owRYIxH?||K(88i_EY`rO zZG*37*|Ly`aDcCxy#>9U)3803C?d)ru3Ql}(tiNxiR9u6yu^0x3U&~Y(GgNjf{2Q3 z!UuQ}H|$?8YytcDM&&;iCtdEV+??m)C-%PiJ4#dHP~T$7y1cUAt*pE9GFrc9Vw9uC$jgA04Lv zarS=c;!M?NZ71j02uK zURvC6sk_lBZfIzZ>=ltBb6tD3gYl*XcR6e!V6icA+%of2V)#O34^+bG8Gj40tD9%( z%u{c(Q`xP z-NLf}>BNW(Q$G@5gl^Oj60Dvm-bMCmE7$lA@`5dSRM-yc3m^b(;{?9@INELUYf706 zw#=hW;NF)5BGF%PJ=O*OTjPzsGD*|6bT+mC_0d{Rq{hLKx)NG>W`7yb&=I?e*I*s} z4bMbko85GL=Hbz{w6?I2nJ!s1swM{=R<(a&vss*W`;_eg+Miv-XiuUS?B(F_c~;(j zFu6kf@P*RTX^-N|$_=lIOfKU!hdx5Q_&G2z$;ZErv;!JC?HMD0P+!^b7l2*dZDWtF z2bimkqLcE=l`lf9>wiyAp&p!ZpPty79)&+V5`J(lFrT@|qdi3*fT(jn@D+ud_fS8( zSGb~U=w;z}S9omd-{Z?V3*L*gkbw6ZX1O<&lnd?5!=w zI!^xU4({WIiGXA*#fAv4fdf_CJ_|a_T2ZHRZdyUQQ)Kn08h?vV`@#;bt&mC0DoS&y{jSm&tjz(B}&M zT%M(|1v#s`4u9WNI_ z(fC*bELM}<6gbZ)(b`2_k}ujTj`5mwTR1Gv(Ab>wmwzjtsbrN^;2h@;-(!2*)*ZT7 zaSCxIh>VKEsCG|BlUWM-J%D5nNzZ@Y$~N8YuS!>+uqndJldDPct-E$foRk4T_+9kK)U=ObwZdUR(JQv%F$x$01eTHjqPwC9`Yv&C|0whyQJ&= zfD@=uReu|2j5>N8LL^bejZxXHZxsx4Se#U^6qSq_2OrK8(FKhh4i8_>fB2m36d1@lP$Zzz=>$X(v8UZAe~VmmvvUny=-qG^&T=5IIHXeE&%g!j zW(d!#(n#--LI0r;2R^39yTpywFt5=BFbHt*NR`&M3zeQMq>T7zrEw#1L$i>=2I~%K z|9`AKjFx>iB3dhbE|5C#Jq7Ai7k`_v4tDod*qcUqQ+0Vz=iu1-LFSZ~!+(Fo(S$kj zjEPe`py+Ak#?SDhA&z}QKOc~A*`6m6FK&5RKvU(ts5siZnmO;N;V3Na!PblZx#&?S z?4dluayTIZwCJR+U& zIP;|OgOFh_tS#a}-hI&bFw;IuNv^^d0|CWqC6(C2{<75|ug=2{F1ETrgyBCq>LjsC z@@%C~7uQzez!$ojP47?nMlpw@pb&}^Jp1!r={r|(v^Sa}^^BX&OBsc4^V`mr7Jo24 zJ-Ra`i7!=7a9=5;yF#0x3S!)*Xwh+OQP21!?ooTKti23NZSLTmg+9B47KE=iQF)ff zUMV^Z?d@^d>nIO#sP3{G<3E=LD<7^G}K&D}Rm)0M9!I z@|@Zm2QNsVcdpyOgX;8rVOSqqOJ&urbRI5?_Q>DSf|)Ceoqu$=k5&f>Z}sp(olv44LeIh1KcVHe;zx%OvR!yb(CW!H zU3}nSALUZXO;IrFuN9rcVP(CtUF7v<*K*BEpSK^6IaHl4(5L{R@_V1K%JsFPTP1l- zVNB)o8>Eu}pHvG+xcdM3dedOrwyQjB&%Rl6uD;oQ-<*B=b5D2s{(p7%b@#P;z4|9T zBtQ*9AR&-I0&GH40u08oU9!Q(*u)NrD=y>Mkho$@T(%5OnJOotLNCi05~nIZ@z_kyHhasS=;T`ch*W!AeVe%&31 zzIMBX2bb<11Spe#g?|*0GQP(>4CawKbGMEVXq-0n&vsS!NrhZ5Bw)r1U;i&)d;e3p zN4zM7Cl_F*+?$Y}9=eX%rSJ}1*vkROFR52`px$C|8T5xx@7~x=VhOwT*c`E+G~8IX znFZ*wQtF0Mk8}~T2L&)sG<`=y!@0S>@joh65nryoUVC3zi+?#^SX$RWTi9J$kQzOZ zJy^!_r6*aheU=f?J<#`7pFa-_2v~`VKr=B6cd74QEf9qZndBj9LdOM*JG5d7eBbKV%^AY?D zA}iBW1mFj>6Ms+26dCxDm}IOMDPoyzfrRSq%LEGMJ?1m02$ z-qTj)Jy*Ho>00gDy|{(5SQb7W0bu!E$kdO}tH_UDMrENIy@G@ARrCnXd}<>`UWAth zA@dip)4Mb5IpM73l>($q&c zsX+1>MlMC5OSOthfXyN6wHxyvjHwSm zNE2rs#@FEzd=as{LGsA0Z&mNttcRO!M&=|oCMR$eHUj~%OUjsW7Vsahems4kw5 za&A>bY1dywSA`94ZgMT_8TFGUXXq-DSw`ZNyC$lKlm=8t=vDBcPXkAwx0neYX>K6k z#vBcqQJZ(LiLU@vk}c+1PdW_P;U>mliV0!+`+pY-Qk)ze+L*;5Sg#Py5pdr~APZuX z_!^9lYFTRDbQt#7zE8q(qskwZe9rZBY*cFYr&Y%H?0JhyJ!nz6I60Xu%a^j7UPis{XL1|_QkAp9Uj@(dn`KVmaycncD?iMc zE=AQ}RZ6y{3qA_YREmpi|f%Anvt1wTNenCgDnI^v`2OUDDT@% zB$DsJB5RT?bH6Wt;HDe(nl}ML0sig;*aE5Xmrle39Dl=X9v!wx^YGb5h%$p8i5Ttk z&j4r;aq=4(_N_yP%e^V(-(Dy(U_0;f<+gIDG;+<@&z>ZHBDbtlR^YOtpn z*Yv02q^D?7XoCoYo10o!&*GXVY3x&omp_REFzG>&)BIgA@wAj>{pxEatGZkJNbTF4 zYT{Bd@xjK2lXF{uiU-yRJuq%QJ9k>^=ULVO&VO7*)tX$Mv{aoM?(eF+`l$M6k$Nd(C?)+V<29J2nFq2L*PbB&m-10Zn$ zt;NriC+B4Tn5$-Sh@}KK7SUm_@iXh!c01?ZO5a2uhipe)gCJMF}r0x zr|Zjn&d}|-tZr4&%Fae5wzV%HT9y$ z?gTprzIyC&?v``(oV*}zwp~OLFK;prM;CvIYYz3Oz_uIxxW|+V!fFT8@0U7o$F(c9 zJGI9by~v9k; z&#i=*XXPu3$MZYTMyKImL0N zd%j*-J-aaAgq(d91z+(Nu}Da|w0!lrvrEG07p0p>0n%A7!QGHv#Ye28{ItI{9Ddk& z%hLwVPq*kZy)6PjVw9%0B^z|`uz`PnfoKCP?1t;wc%i^Cw|CjyJ+^bx(fb>m-k?E( ziZpviTR`stR!*NlrokYDE*=+3i_Q>ha(kXxOy!mFk zvAqKijFXF7b*)a0(D8+*70HSwY0imMSja}5)F<>czZ}ue^r?mjhFL>Xz(#CWXYo@x zoQb}>-zT#JCndnOF995DDIK4>@hz<_Q1euNDx@*h&*uqkTo->RL7~@ZZb}s6 zpc7XUTfbZ8u`br`0a|%=U6+e5azU$yU3O0_cgHOJ)Z(73*DM!BoRj7BO9j|Y{}F_P z47ceW71*Z`zoCpeL3L?NzwGy+2yI{+&d@dHdqkC?sGC_adQ+kW^XiKL!u+>$MKtq_U5Ch0rQIvAp{5_3UuD*=m7J z7ZmruJBYV;@zqA1GaC4lt}C&z=EQC$96aA&C7DXq&$UUGQ~G}z4wA-It zMEQQa_XY#EcyB+-$%UQt)5m#W_l9$l*Oh)k^*Xq4yZTyyvA$~2WoC7 zXQHsxM6OFgmJf2c%+oC%V8Iuv7uPy1wwa&rIPu|tFn%BCz)_le-5s3et=84=OZ3jM zPlMeSpn<4Kdj5ZxNG=lfH1ShX*MZx;nb2#~eM*4f)w$DMN?qvbwSgKk)gR)EqsH9e z;RJQt8-Xf-V5oSK2XaDGl9EuIfR~R7Qr*k{v#d{dYFBIbOa1ZX0rA&CXO{P%;Svi!L z0FDNY8jz0zy58F&5bMv3WjXyCje?xtcbZTcg(OXW-E=o6IitNpa~8I5EG^ zR2a58c>hw_G}O*r0WxSg0YlX&wAzV(I##j&b4`wY67+!`d%fMr4+k#0--Y+@*kJ>_ z)fvkYYXg5o>sec|+(opS^j{i6F*|1gvkHRzAdR!Pfd7RYo&jpxU3FV>W7t$yLY&_k&CgCb21rK z#;*ih(`D7QSXoT5q?5mm_;xdB;(B1{Ej;E%aL*5MUC;^NA{`)$MBQ{6InGZVa4+A) z1^^3jS`0}apGH0=elXif!lNjnX)>FOG;<<2H|kkH;$(;49OL1YM+{0tW1x^l?Uq}( zIUawfb%k=07n}a}myMPxjcSVtj<14e-Yh30?p8Rg`oxE8Ph4ek){$iSaAKv%U*Tuh zzg|?Xpn9*rYDi*>mfK3P(P>S{sBPIhnLl{iwI`;4dr!eNxolcUZ-Upn3_+QeLu6ZE z2b<{jizW!)b(NSH7xKGOJji#v3n!sH8P|Vlb2d6wNUKIm0wivxWv1$&lMT5qrcy-U z)ss9xmZ?iqHfgk(*ZPYlh>7LPeSJG_ztq_P!&IINOy#kv^u4{$xgQ~bQ=MK51cCb~u@GqeF=K&w$xQ?zG-;L6iFD4yYo z?>9;2nJX@VCZ~XKMH+B`zM?JNwj6)1ywJ(MO$G7fVo%&3mzvwxO1`zcD{rUSD{;T7 zy0zqq3w8oO_?<%}y$0@KH08dx*LMjBCoUTctsDJ$0}nCnYLh%Kv^fN}DBeu&{pecVEf)<7P);^9X#ueQ)U{aV@4w&;Im%iUez zz^A6Cr7O?hE>>_<;o6jEr(#XkdF@%xHT`C%zibpCQN#&+^g1B}fbJ3@?FDl(wGF3N zofALGF?W7__-F?S+j6U^COGnThCnMjsLBMQgsLEF{kRsxa$T*&I+4467H`WLoz|U7FC~y=?DNou&u(jyTCp z4t$@5{-&aae)<#XqlteLl1#HpDfp9g=Ey&vXA%d*pSpHtK8Y%1{fFgtie13fZ`9s@ zZg1{trTAG(?;1ucw@#cs*sNTNB=83f7`)&jNmvO)o&GZ`Oza1Kdn<_B`}m-!lW>TV zwkoiZeb>bpQ6e72=6T8vzpRJg?x}0RhZkkC3>WZgh}+B}}Sb#=X=(~>AA!tKWnWK+%~| z4S)I9RWb3OGBkgt&WGtH?xB0chWE&!vGH^OeiUAG#Lx`E@4IE42OmNM>U$d<;`@tB zQ2?oI6u2R6jGK=!?GbA}00-g7#;v*uG8$`h(RGU|Pe~UQS+^`&HzG+a@k@dJZu$MU z!pj-cxR|;0|ER8BL*+2#;RW}rO0jM^PF5c0`lx6*QUHMQ9@^kW9gL{SJFWu{NV%W(@Bqmm z!@Xn7h)9TEukF{V_;7wiJ1)7}B^b=s za(fW_;C}?1@L;&U=g-ZszfyZo?E|%MKHGhD#*z5i4V@jGBNnF>xvh3&{rT4vjI;W) zP7~r-fWbLT_Uj&}DR9&44I4BzP+rKb7H*EzrZRsvfH2~bxalL}5oI=n2iBEret|hl zLm~BS+`ug-zttcej53HF-GW%J{U*kUOz5VhaJQA{*0(;d#je{Qz=v=I4D)fnvE$KT z+;G*?U9GtW#NJjY_9G_2ICVh}-9ABX`lW2!c0iNI6PwgA{8vtV?Xh^*6{pyY0M;P; zbiaRnGaB_P3Yr+*B4h=Asi>BB?T>&s&KUHeyIty!{rWC*_gG6E~f`J6vXyOhF^sGhv zxCxOU5>EWntM}e`@=?TYp$48H95m5Cky?NDG}WFf2(bx~9^a5GG(z=_#s*ISzFgTS z#lfY?#G>?G{CFPZAp}8lEdWm!yT%;eX*mV^uB}Qbny;u`ZGbGra{XUnkZxS>nWGCK67o;bW|uB(O`fHI6t?tfklaA z))zF&kZZOl9`&g2B-tTa5$?G(7;b+iRw)UP%aX9cgde-yX|4#C(f!QJeG>IpmXh|D z5^Q`SmfPR{w8X-fO7*s~T6g+q1&MQpxHi+bN(C;v8+g^Lxyp?$()bIadB?526DXp} zMqrO3OmGKxQLHu!Vg1e*?Fe0@VetV!$POUJ*!ZrDrBwy>-$f*NIF<)pOcZ|}M)!&W zN8Ng0!J+#9b>ZQdgd>L#2R@CTgeVcin^SjFB2i=P7EM3OE;)@fSq@#fkgVv7%8~(T zsm%In8r`>JiBi(H*8;fbdE>dj7b-25bxoHkOyH~@u6?-n?Mr2s>3Td6(?9RJuFmqb zs<(qLI4L{V%Ov~Bc^hA>|5<-#8_#qeKj~(X%1QW_q$e zL-3H?6uABFI?}pm2?}me^bu1CN7%P%xzPX(sY`27!urGyhvxD)!`e?Kfb*HX=^N}z z<%!{GffKN^CvvAi@9dOL3J2QbA$Ha`^l9{5Zo-Vjmz^Hu6cJh6B-wwMW)X9p#^s-C zC2r3^l+${Hk{EeT?F7-;2gt-3>wqqlh5i_DV^}+_y822O!`vuCRTFut6@&K;** zT5rCx@!~;H`J0AgN+^Ad7harkYghFBuLmz^X0dIl?Z@Nu+5Sc!~ zsNr+LnXYpm`CEU2SpEq_RNQjCj_5-$vUW{#+x(z4~H>hOwi4%mJCfcdE_MEq< z)#Pet?4&pTN+Z35xFs_o zpXJo5Zq-hjx&>a>DFg^i#9^tDar3zyz)TLU${yF8T;6cV0e+u%n8)$-0@^KlsCB)K z8jk|cZTK1hE^js-1ys(1@u*4reHV*dss+5O85$ZsUFakM7~oxts6^S6fxY(&iT%7) z&Ik#t=n#JZ1P6SPOL6R)RJ(3PrBtFGPz9iW1Pt5lhN{293pQps1jhnbyX&fHw&SzD z=am@516qiq+39j*Z`BcfGW&EQ(W6=?k9DQdNztmuqhow!{|dRf6{G?sI1IDsu5Xgb zZD90wk@!t8jyk7C45_rD-zpOLPtl`!LW@}tgW-RNw%!pG&Sg-Ro!hCm#)ZeVhiXsN zURbZ8tUOi)Rk)~@Gdcmy**QV)m2Iscj@!UfC3zRc$NxDDify19mT>?O#;H|ME-x`J zXez2q5jUd73qS<|72~?pp%QwFZp$w9)oa94M}lC|+ZWuhE@8LaW*o-+USrxJt=*Oh z0=$2Dx*@QSn-e!;$Rr+j<_Tu#JEeRf4k94T4+H+Wx{D9r$x3xEPYR*|Jn_iu510;~ zX;ls6qSS8t({i4`?Y(=l_F~m>nOBFhb}VOF0%aj>xqN#q(RG%|cE?f5tS+WQ#EPj@ z0Ax{)`U|^ctILFNDc#WbfTCea#R0dvWeAtN+5;d2cd+*Zm*Cn1M}NNVjH7tae$oQE zv#qJ}+aytd-Kvh_e_I>D`F$L`()ZT>LN#%++|&JM85lnss#{CEtk0vJO{Oe50Ls%_ zbic0oxQaXjur4$1Wt6yL6jo-OzqQ*9!Vr&`?`k$!uKZLsBV%Vj6`V{xC-OK>9% zb;@FtehV4o8yO?C)86dR*8Wf$h4cA!3ig|B3JS2}V?c$P0gZFYT8=7f%Ta(Fm_%VC z#pJtDRwx{yD5cyUY->2 zo}#b+3EcgE2dMF-+NW!ut$n`sgVmnawLK{hrfyb!&LvC)|Ay z{DJO`m5Rd|tSpJnY1Jll3#b_)tUb{>oHG|O>PC6Pf`YqeBWn@zER(c5$Kzi5q@+p6 zD4dYIWK=A{H-F}1+=Cm^OXKFY=Oy0?B%59^W^$)kX7n3LoM}tc# zZ6Aj{L@{ZFmwXR-K80Y3wz5{+!l(Zyy57W5Sl;K~E0ui*5FcF5??bhZE%VyT^3M{u zEqis#jenHiARBnH;A4&fPgm}9+3L&BEa;4wxt^HH+WvCAAZY@TOy+%TMW_E5^1U8l zi_!fY*YSY*{)9}audgw35!>`G^HgEsh4q+{Cx)T{GJ1^o?JUPclYaP&Z?Q-Rk>Ju7 zp2AG1Tek{YoL;Lpd=$%+AcL*hQpC{Dc|73$dw=M+#?+$Ny z7H;gn_eBvn@l+LWaj$p;JrUo-HvVt@2N#G@+De%hUlc&?G}WD^^lZOKyPKbiaVB(tMK~dOyUx7y z7BXrFeu&foW*a+!3+^^#a&etl^Dy_e<9~9<&^FqG4i0BKP6faO>9Y*3x6zhai*q)m zL?ONv!F`o(cp$ogv3hiqbe|u(?rAtAAOQw^fXANAKVw@56bDJBU4xq+U+t10P`auq z{!#5~wO=W9)_8HY>|(^7NX`0~S?hXhV$Vai`hA*!4-FJN28y=6_cO z+GWOmi!{M?k5c>+_SLfiM>aty9Rz*J(cmEfi|-xN>1!Mi1K%FPBWAUrPO=&MC7!0buYiocgy+7 zPX;vEXKq{4dwSNd)6979cESk9nf^i@hmmj=I{=*he}HdF%9+WBORe1nojl8YET)lH zGe+kU!HXsG4gR@b)~Wz}xjj~l5<(|G0=VIFa7c=-am^OjgoOa*YJZFaif^Dz zsiQ4=6$^s4dJqG42ORA0xiG>p^^ADE0aToJi56G4NpX1b1%p!o@$45mE-{g);OE3v zS)#Iq#ikgr?aNs0&}o%-thN@1Ww+qlvkuEky1=C6CCyjUuMQJ@#@d79yvudNC+aK{SY8Pv_D=qST zmCQfutzRfduM*IU@tp^C81k6oiP zJe%4=ce$VcC_LbGbilw(s~cF}=rwlcTA3E!lKW`VMw@7g8%(31UJtu~zIu_D62fWV z1sM^5!#E%c?9;YeO5k)&+e~`mSg%v_A)@>)F85oz2iluHJOTA58fxFF(&;iFXwDHiK}ZgOut53e)Wk zIqd+W2)I{wrzM}m&Qp5wj%0c-?x_SUjA}0|S*g;Zl_zjzD1ZImJ+T4750I-I`VcVX zI1_UT_TyIQ9g@W96NPYQtYN{k`fzH004Vj^vS%(o-!r#RFkV}QeU>KTXG`w5@DGO< zxXq8PBE$)1zN&2UJ_zCWgeROjYn?oH348YVP*9maH_O9AnF6&iAzVdCCqqz?> zcDU8*Yk0fL53a56UVp~QY0b{cEsGy;SZugz_x&HKmP1lcXb8b9+&{1;%>!ZMsH~Z8 zmo+O(ywC$TtSO^%lUX5*YaN+qaKjtqy@ixu5r7M&Qh%MpqCo_0*WYk+?}*-a)sp5x zLgGe}BH=`+=_@Xm6{nKGe?_E$hWO*hWsda~g6U*5cF;;I`PUkLn37o8pO!8PV-}?$ zhG=mH0@D=-P(vm1{2EgS#1MD0vrV_q#ws)o)ipZDL@*Aqst}=n&f580U_&y5l zy+)q&E`N}2dokX(eHC9G-G*@f>>l@{3)L9oPjSHNV*wyQjJgpcYu<}<*98j8Jd0$6Pg?Mys?c!N(^K||Ff8lZDN0;+%(Avd8 z*boD(^@x-`>Hu-JuHmb*tJFH>JotP+B*7f#JAVLjP^+{5j2lzgOHo3jhRfPM_Rt31 zx$7p^W{D)ha@OQeOBHL^GcCm04m2^Ex}FriYVm+yEf!<0Q|$-Ri5E_P1^i*8F?e|y zCmBMcxKFc`0)*ic_D!4w1ZCWK?Nnnga!F*I^~o?Tm`RGiC%+h?uoE>nyn*_Uv+GZd zXn*VEDWD%IlQIMJ#r1~MO3XY4EYSaGC}R@8usNdJhrn=YnNxQ5;JC@d=lVEK)>%`r za-sY|16fNF&#I@)#lN&7%;Uf`=48^_BJ-Zgffq3zCiV&ts>`p(2st@?R1C=|Z(~2| zR`$|C+B9R0&_B@PaMmvjP&#>ie?&*e(SHmRaF4bz-V%T#o{zsJ;R&^`Zh;{kyJs0U z+;XyX-}CirE;_Erd`{1yF}UxWWFeMFLUQr$JN_3FsuIAHJPYV-{ZH8 zq}C4$GVQa%1duB{j)+|x}f5#^?u9Vp*nQ&=6*lNZ|v$a{!#&(pmEFp~xH^9M=ILj4vI_RX=>ss$yQV|mW<@tne zoVp$qKJL10@cGcqmqhS)uqenk3B}y{4o$TdHT@}|!xx=W#Ob<0pLLW!=zka&Na{>q z?g1^B2L-Vm#`rX%*k|Y-;D;M&Bk%9w(t)~q%IqS#FghaE-hKk&DH9i&faou7hFf@I zo5^O=o-v{_% zu4v3XZkyHvR=(fHy-f;CmVX#03WdT5NE$zkEil`7Fq-j6)yL+hDE>|DxYW=nbAf9* zAIlMZ7&k4Ey9&g`+erk@@e^+KLXdn@n@22sbv_}7yRKj~$$;~+&~e(TlKIDFj=N$M zk1cf=*6`%?Tsrjui#jcZ3f75rGrGW;E&OX?l&sW6d`ZJ^C-2z(PZ$)&37^C%Cs!L zH&XYolFw&u9dtax;6OqNZpQaNk@AowuWa|p{KUOy4*aI89#Q>Tnb~n(^WW4CYcJJa zEBp4&JImE&KdV=tmwj^x`sB}-is=J30?O={!s!D+GkDGbCA~Nq(fKjQhR>W#4GG4s z?ScmI6YB9zzVQVL{0QtTF4ZJ{r<`jU!F_p0sVVdgmp1AHEf6@h!7J!ZVjHi43w0g; z@9~#&>H{ea74zszLWGnc9A0~-qg;M;4H`=7zL)6g104kJ ztlvjNtRu9s2k0~i4pmul++Apt*^jOzm>e@6oGQDOBBFM<=Kp`RKc zdUlg+aRCfoS~teY*fU-bd`o7)O}#!J(DA9OdkmWba9i3dMK9_~Hg;wL`&?geH4egN zlg%ykoD0#|!>kRECBn1uTZkh!&-=1$xeYKy7iBrGGR(hU@}v8;Pt?Ar_W3m>x+<<5 zP0#5?&(^n&f6N|iLpqmFUZ#c~cmdfrbW&A4`?N}%jyCd)W+!Mj zo=891<+xF8DR37qQn+9?E-Llp0VQtT2chNpbwryido+PMN^b58AcX^@Qy=+@5%Y5+tbtqZAs^f*)<1s() z7>e^Ee`dUNn5V0KY-JR3pzO5Bv)RHqI^ZdeMe#8bczGpLHbxk*Bt z4Ta)VzDN|V#6}RAiqPxr=mp4X({@}(ff!a^#3!B?mJm$v~Te+Jw}MTF+tO8Rh5_=eB1CXzep7}B_D zJ`&1^_%BU|WaE$_IQY41G(*t@y9VCG*XjiRo?i^QU?8L(+)GF@&uClgYb3^4Nv!K6 zKmiGs-Q-TQIIC^eF4Qiq)o0E;3WV=veP%r?TyAt(>!|8k3D)iVqj#=_9T@)mCJ3_;+|G$e}PG$Cnf1@Js;)@@>OiX_GG(h9OFa2bW zrMp50RZ#qxn{5&AWYo9?QuK|&17eZCe?Xhu$svh(I)&5iMSIdgpqGWnpRa(R< zv9_ERU%2Pf&mwwN+Q#=;^`vvAdk|#y(S2cymtJJPKSEW#814U9;mUqx0Zq|xletRq zvo2NS$}Z&bmaFT=Pmyvb#s6JKh)$WkTz|Y(59`vS0Tw#Fu-NE66VtPxvA7opf1%sh zP=113DAOF{_i$@6#NWz`7(6jzG_GghP+ZR+z^7IZ+!bpNel#NW7uAortp%jmbApsl zTe<=9T)e9=pUM$3+Y|6i@N>PNX-GJ}_?fJ&P#tGQZOvah&72Q_S8&w_vGmBRvf$F4 z@GUFs0%U-2x`BtTXahz;mniT9Ab-}< zxg(F@Xphx5V-gOw0-yz7?gM{tsV>ho0MBfV*XrfT|7xvXo7Z+qElan9rxJo$D(WuW zEPw>@jZ~*yJD$7rCzT9hiLG++r*h(=lM1_N?pAHS$im>}ResCkOdgf45)NWE8L;Ua z^*L?%BHwJ_!XxztZfJym2~kecF9@_vnvuG1z7Uts@Bso@5VtOUJ0*r0 z35dG!_5WCx{O|)M0iu^8@dGJ;zn+pPL|DeS6tnc4$t)5DV@pOq6>tFwq@`-!EMt5pQwJW8@aJJ$J zQ+}rAu*gI#axbTqT;xghpbLcj+y4HTYrTmsOY40X_k$zUWntDG(ZIY_!9UtItce>N zS%M)9KICKO1^DFx+%m#HB90lbp*t>p4Llk1J5D40$mN=R(tH0*_ek=I&5Y!p-u0DC z3;fY0Fa@ovuG2rN{pT_x>GT^PDU~VS?Ux_&11x{DgfJ$b5<+`Tx1Yv-gzEIV(ycpD zC#!&&AHWO3LfP-56J}yu*Y%u}QXW9mJFl0UBC9|7!2m9(%HQ;fAILX}iQvuua2yHc z5_f^>Q9>-dTEi@D%j~bA{7R{gV6OPc8+l#LzKFgnOfnL8{Z6|HFs;>V`Kjv>@h*f; z9>9NoPHRv4IdZD<{$nbM!6K@Y{QZ(i<)w1*wc5SaltZynwpmY46~!V?x48dK2&O6x zP0Mpz9Og3nSN`N8*R{AFiv#>AVAqaq@0L89F}1bPA?464FzWiJ>V@Za08vC5laRHv z%yIpP7Hd{qO6w#G0GBi#3b7A&BqS;ZaP(ErJo%9X`$E54d^iMT7QASEl8T>?yx>cb zTkjM9^{x%lUecc&c*bcy&kyz+U&bF8n4H+}NCovt{Ahv$YG=OHGHCrkOx*=KRbdLo z2j`WRd%M3%UuWYTjKtt6Bwf-d;#NC#bZP3$0cIR-X7gIUnWge^KRU+=Rij z6lG}RK7Pk_Vg0*zu?_CRHKUZM8N`}X+7Eag*Z-EraSEuHyc(98&fgpdnAm8iz)?tk z!=mVfLLB{gVogGP?Z2s-97&nGDfvqgkFfWqTg*o zTxXt^Ni;4>LF%g8pyDrjo zu#iyoR~sY@@gT*KLHPUK9<Vv|Ijx?3CvZ}D} zaD$MB%MAg~f6Ex&f92Me(8>JTm*4_z(vjTC3pZ^Q1nFnGxN9)^dssGc6xq5# zy7``G#&~?^QkH|k32G6O$ZbWGhZ0C&xD{LL%29UU3+!a*^@et1gbhK5yp#r}DSNR^ z!tcP}(Gb}HNH_|ksL`i&E!A7v%ZXIac+8U~Dd(mCu$&soe;4}n=SnOKCcQe3w+ZDe zzPnKSNp9p9NRS+HMlm=Ub>9ZbtF2oSK<7vb4t$1h0W$a1_s-940A8If-qjE(j%bvU#mTcn3tOO12%sM^HN%Pe?4ZNN1xHm z=R_P+s^Nq`WnJrf+uCZpMHxPusqrLY@!){Pq2$^#w$mluo)CcVkHsWl8YTS_-u5Cv zeCF3lxnR>tMMS<$sC`&BdZY*h;H7D|0bdzWZ{s3RZraPj3I9KU6kjg&s#lfy(OIds zY=o(bvP%icGl+k4Mu1(>X|a>~tl_wd_ri_7i^IkE%&%F&lPL7V841Gn7TIb9J|$7^ zmO0`shA$w2{jX2}^@5%s$qSJ@rsDgIThUpuUJD4pMfRh`VD>!~_RzN~1k^jDXDblLtBX2Bue z4tfxjr-Zp_K(g!UcsmYEXZxERp4-BaJSmqxqLlL{X?owCl2jrpj;=kwL-+2NiQjRS zx!%&j*j0a_k2ea;42`gPe9G0<)3FDTFZ!j=$Y4kcuhYh{aB-xXg8GfxuP-*yKiHJD z9)TTZo1L|1p6xae-#;WukGoR&1J`=c=AJif3atl+u3MrLIRWcW2*5qnXycV1bZo|r zd}I1pLq^P;mK6}!95ZLvUzyR#Q}3`iGul(Xm|K58C!y#4Y^iUw^Y#B!&TMUgr@nEv zRbVypaCn$6q}^vD4tQWKHC>!FV6C3$<0YoP3LZ&{M^LBRclmN24+oP|w49UGm(;Pm zHl@bSZ=MdhF&h{EVE}LuB^|B}e-fS~NB$^o3W0EMN&zQv^>|=##$RAhif)DDjEj=T>rf1YJPk=`&IclJm06LaUZ{%n2%KJr@-1x zQI`N?h%Md=N2~=y&9}S*CvNDSFe*$2mnnTC4{#lCw;VFfM?mwvZy(B1X{8T1!s&sx z%iWMqEO-CCed#t|bsnEA4|1&ne{!;>7dC%gEjQbDr^qM(KIsUHr=|`sfj#iO9(O_m zr#&tG;m-;ynf2UG1!l=ZUPR+WQW8MKA5cFbN#v7+X0O1hhNwQ2I7Y348Ev+%cTwh4 z?u~b4Q*4&3|4{(l$Ill*K{D_Do@_M9=x9W7gj(%;y51mBh6Tnzg&+Rhq zlFa{`W?OOV?FxwS>KJ%&i8y|@_Iq&Z2{6l2o9yg};iFt|D)YqyP!~SXY>^wCt}5RA z?RBir>)UQxiBd+dltzrr4)^TAu8^0=`vV|bZydjt+pqRSz*;m)K9%X~6!2@cX2i+W zMBfd89uc*d3F-Lsz| zDF*(weSTn87ZzzuQG6MfL;M3R0g{(-`~!FasF&*e104tTuJ{H{?X8y%{R1L@byrx` zM!W`SM82c#=ZE`j7s93o2T)F?{t-O;Kd%+=^iEU1_I9PSVyR}lHd8rWF^ZSLdY%@x z`!__8y<&k!hV@T0HgEXNmxI6Cop9>$S^Mu#$YzdcoN;p>5G3&|F;X%6bUjFuzl$h5 zJ^AJKoF*)10H>5C@s z(v2+(;7$bXxGG7CCA?YYBH(+!<(;B2pcEoLhmpcgJASmObp3nPx3b%?>5z5)T@sCjhu3>T)_5LX@2n43O(yGjVZFnTdSZn&r zA@PnGRzB70G_+y#f|I0>fO<%qv`CY||GyAB0RS`zQeCgpME`JsE4}95S!__d4wmXr zHL!!XwTmt~9S+Z0AxqEoBQ0w5!b+`*OuoAIdoXh(Iz_c9I2c%!`3vK3U3-va@ zCFvwq(iD-8HiT<#2qUL|CZVJ~64r}}-9-*Nb3aF&TaCa~6_V!XaF*gm_?rD_&SPp{ z-D%VIRi^?u2WaSly<>075okw|^%WxGoQ&@PrANaId)l%Q>3z|@5W0nJ`lZ-UV-htw z12^~8Y1VZsrSWQ~r0XQ{0Ta1SoEjL&`h@-B91h(%ta>@WL4QSm6)NABu2{=!IFtHe zx8;>lbrGC4RS#WH3)GooEa55Ohh#fe$hDS~Eu8@6+pQr}{&W;S=CroDQ~}81Cj5Z1 z_Ck|;ey1&?3+&>Du`doi1dPOpx#A~MFt5(t{Ku9nhcj!06D9hQP)8w^5!G93Jd!(~H4j@XuPS@Pc3|1V&fzX`ExSgPe-T4l-kifDai&q=FR!!;WKuy&&R5p;Tf4h9W3+>+rzPGl*>lcMv%05As?MmIm9l*iN zs5@__@Y$M8K*(-YrmLQP57Rm`z}>>Yb@&Q-Nvd!h=r05*wP_6Bqe|>UNbeg7Y)Bq5 z?gLl(w8jB{1wiVY`_q}{H*k#o$DOobG_0p2>Q4m9fJ(hDrU_BsBi*L29A&L3TmWQz zx2BC+Y3o4226Lx&9az_5M6D1q4L&KN0*Bh2VEgO8SNnaqAG?4TU#q=q#T^%_vFo?M z#kq!_#J+T)BDNgiQJRFgT1hZ{0qYGSEGU9MCa#ubEkPR@5XX23nXBqAsI~M~t#T}L> z1P5||(A=gdly0>F)j}}e$M4BlKF?WJZruBW+8@>a9YmsUF8wbTXYz65d1uU6;%cV!?HWkX^7*)z%uZW%V$Cf-5ZHgE@{Yo$f$Tlae|r&O|N<`3)(9q+P?*4Ijn61wtThr!P>Vjc;PzeT1)gS&W)ER?Yd%D_xbdH z{M|jf=c{iIm+JJ(u(t?vZxF1&4GSi(0W5vfZRBd>HbHlVDXv}QT945VJ3;~;scmAC z1isrRq2&%xn3hzJQl=vf;Is}-4NHEgjowr0GtL{hA)p2X17gh+#zUHEPi$)rA(H90 zwEXtEXEGXK|C0a$)FVW(nC-CmNkHR&BuPl4-2zL*P9@AkL`uwcxw0qScU5xF6Ielz z`P%`DsP~+kq=yeEG9S2Ot=v5Hhh-$})vm$WR@;cnl<2Y>%q5ghrsrp8*9Koi`FN*FRbh&dydhrb(ZSIi0&M`O9U7#j^$d$qF zaW8k9iC;-~@w9a%NC;6RjV=*U$94Uz6G@NU8S|_Ic1REz_R(=p>$_#w)_&k^rld7+ zVsx`e0=5b!E;%`|H~^I0Ac4LT)}0fK0{~%75|(=_-A>?t53%EF#gtE%t2?ShV_ES# zgF^WN30E9uHCDgk1j~v|QQgpgAJs9qqC4?RJfwX9JiIIK3e{%-AmgC}kR7P`Lds$JWErMUP4IP0w1 zO1*%8i}t3)qo2&G#Ol9B=#p!Tb^8k79bR6v>$ugFp9WOc+7y;jaIbqeP-A9*K=;N* z>k-4dH-k91kLuTBfW4RNnncXM65bhW641`i)oJ?gGhA#_S(msV_PP~Z3(M4&gun1| z#(uu*8#1gaO@C0bwKn*F3s-Hbovxa%iq!``T$*R~sn-@Cm2Xb08Tg8{ovR5r5t?Tp zASfKi!67>Gw3o&s@R7R5sikRre8NNj>OP8Pu9`y2{J;PaL-7VZ^%88;o64$sLs)H! zz?k|J1!3z5A2zhs-|KrQMR`4TJ)r?AS}x#Rl{m-!-V+n$;mH+$F|>m&WtJRDiHbhC zvWM=yhrpc%bZ|nYC&$BPXfPwB)0}nba3c-F#pe32!P$&}r9V_=CCYbQCUa*Cm*~za zT?$9L4P>)o{XH)VCQC=^0)18;*Wa3Xo^)+NPeSzd8i-DX=g+egA~&gbA$V_I!#BZN zy~aSo|D1yim}yRb5;t)=4L^hNW^hZJ@Zrul@Wjs)2E{#z4E4sHa!s6nFP(1{;jKgd zzW$sxm`{QY1r~3IBTiyeKVmHh^e-1zvw3iQe;_>EgJ*7(TfV;n*8N=V<#OBDGJo|p zq4=|Zm8HnMI9Z*^68)Vn&HZ$JMf;+Gta1{+T~-L4T49W)EUmj<<#AO zKN`u6UC-MpAl~-Ewt&A<+L#cId4HrxAet?YNMceG5wN>PP!E_#b~!U_GIpET_i|Qf zob<-2Qeip<Y|9`3d=i0xn{r`QvXOLvsbsm`4+vi<+Uzz2)s>@es~*d(S<8=ljk*=Q}Z+pqq6^pIFw)mu(p* zi@U@+b#^j;&_?*mZCbrNzv*ezmU{NsOzS>Ez=*D(t5c=@4Kx75UBCR?B_Va>jj0sU z51iau=1+xika=nj`BmS~?)-DBegzC2b7t@tq7bJ*p0_9kM7-r%f5jDkx5Wa|Y{M2{ zGaQ3|`$1bBY6Bpf_*xKdb+qQ~Qrq%R%IUu2GHbA?`Zzo3{H$8;T#uiq9_pMsIXf5d z@}ldaIu)y2C>8%eSY^YJC$gpms@vZrv%X4wO{2hfCE@VXEj%4dGj)tkrP571RN&r2 zzwFxpm;b&j6kRP$>pJt|YnKP8-^Qo~5ivu5U(}vxHiu3Rln|Dt(}FhFbkNkeGg>c4 zWyFI(q6Bw4*3y^mjkSRTjl_(F6;{Kit|CGI$bMvRDIKb z{|PAEsXq*y?q{wd8=DccBhxSv3eVX`V2FFs9PH>UNd(!X-jqjt0PRuBQe8l}5%(0ic- zFXpEhpmWz%AmY?7k#KuECE2V^z%ogH9JxY)9wC>R=9UzNlNW670`8l22sh4at*3e} zQ>wVn0hQ(8r~epiGi+P{+k8*i;Ze5%&6bJPbJv^?w6gFA*6---9J(tYrw&+t-9J%Q zQSUuYL<<2w?UV%eA`SGVDfRQ4!neZ#_ruA{xzIiz!P9WR3GS8vz~~-8s5f4JQ-16^ zI(_V68by!ZQkHKSkutzqNfve@Cx4&a#FSzTUgF?|hC*-Lfx$b%Y2%M!$LFkD^VmY3Qu;}alPOM{zN z(f$0n);aicCA@$F=x&*jaUCwOVfco&$<19rq?)qV@!UAO0c?teK_jiYB+Ize ziW(LkMW~skiR8_z9cplrZlyGRD922PuFxG2t&hC!SmPKUWUzN|$frYpJMAlvv_F^N zz$)G-HO9VP)(iFqk5zYp56=5pp2>=;FA~>hJ(g96M`>R3;$2Q~;rCaD$p6 z|C{lZFI}hGxlgDp4m;&xmu?3GX|!$s0Yc8p`qUzp4zw}h(G;OFpU{e`(GO|b9CA2n z9h|QM6X^w&xQ`1p6bdu`{q)d0^bEbl7I5JSn1^Y|DYd3Gm!H3$6?(XFe@1~v%I*?@ z6~;)ERg>S_O=2&aktpZ&W~%ZU@MkD0w6c(yc0G~`G)E4?nNh~9-4bPuwKF)0#1-XD zYLiQ1yveV4+6Y$nRJE1Db~0A|wI%Qd%7is7Rq#)c^MhBC;Q8# zMP0XH+J_s%UI1_e!f319OyZS}#pIChJBgGvKbal1IM2Ddpr^u4dYrKuf%2{CREU0p zj7jw9Rn(P?;97eaCy{r5{M+YO;WfQ42h{)Y?(<(lzFQiVKw3lZu+%Au>hhW@D5kE$ zZ*l@8^=d2T34#Ls7{#BpS8&H#IW%AmGXeS`9V09`J`VPFFix6cJYdAi0lgma(zB7t zS5!N15}0oeC1c*?psUGtAW@zBg>TeXd<$X769Es%FthY1Q+(EV@`Bkg0o@tD6Py$^ z;`Tb*3TZ`Oy*S&R@nIh@wmzCk+yDaCUM9)UKAGaYo}Ghj^mc#H+@Agtrp7X44BWUF6x`;ru5Ug4?f06 zvf$Pb6BfK7GW%UVQ_aaiG6mSYHSc&0-2K}HzM=go7>oOZdGs#FgDRXLQRRle`qALr zB%#Js$*BcTSzD!WB`ApcDvr?2UDZeVWz%6R)fbH?G(x$T5?Bq~o19OV7%BH0GsF{& z2>oW%8bCgJ^h`EGlD+0^wMlEi)PxCG;bRh@FtD#bcZGMpTjE|7^79*Ox^m|N>~ts5 zw-);eW|yjC$7~iGj6yLph@Z$6Cg}Kel{J^BQfq~bB$rs559qq9De_}ik-brCh-~i} zy7vwL`4O8F3Ji`W5&b-BSx0MnD_>g?{6<=~G*j3^-HbYze6Bm+>8U*eLRU!z-3tBW z&dyz(H$%!)p!v)Of;NgJ;`>c>G*y1`O|F#n6>IrVx&Ohh2OT(|%w{9w&CcOAD9LS`^ZJ33*tzPJV? zFRf$FxP7@8oBp6D(V}x_AYu-k)Rsbn6L_ttZB3=FU)Kkf=cxl1!Ozx2d7$p{d{pM; zJFrifCF#T3uQuZ-sfPJ86%u0uBGIVio6G(9O3$Q7R}YYw-5-F+w!HVf919%U-mc@j}QiL-YDqp3jqU!j+r$gMrE zo<6maN(CpDc_Ha>XH|1V-Ww)s13nCzX&~iTQrzP6EMPXHYL`ux6x0M#AQ01EWVy70 zp^;9(Y+iro25fl#SeO#yw2OACE)+-e>Kh4fza{t2Q@;mA#*y@6!}tU};~aE3?YBn3 zfkIMtK*ZeuDq9rMFq(9x6BiIs@g#*Vl+#~BqH@#<(3=?k7E7BEy@>Kbe&XI&U^;n# zY+fBUMe{N{dd#ndKVjBPhe9j4xwz&hr{{G1M9>2XY6ANhl^cYp$$(c5P=5FPik+Sv zVUk6`qkp6zKKS-#TI z0unB;5_HT;fF00=wlQf;^4PG7qiI$29TV-qVy({S2lly*oK1v5e@eK#o+nn_!`ia3!Zdl?!2V4*D;ekI$p!D= z_X*<^#<1LG=|tI*--CYx@K~1aSY4gV-cZ$`CLVX)P7>sw!b|qEO|dcq9jeH|ofRG8 zg55APugnngEV2$d>IPxp0YwoJ*q&EY8z0sI>j9Zmz564^bByg)I^JxgA^`7(%EbTPaF$BZtJfRm~;Za7w zATNu^rKC$IpvG#drK^IA1P%>Zrk^HVdZq?j72nXXE?zFkMo&G&8aucV1T4* zRWmnVJI+p-Z}hS>U!dd__&S9|f)04i3~?1}yz==imDw==LU_ z)T^LGfV$!6uoWU@Iz)x>aZK{$u)_4mW@s7w9`klgKOpqF7_ruG)Qle(%n!Fsxh$;( zc+4lBw3c0j4Ha^Q=7lj1Q?v?GG!~Fpsc>91B9w|rJjWepw}wvH1v5SMDVP~BHch6; zqX}dc-7M!*UPHx&`FefMtCTLli*u`W35eF5fLf=i2u3o#0YB{!9*Q%k8e$u9sE8&N z(#uv{2TcgE{UBU$%Fe)@NCj!Sa>?u-!sl#C{O@h({5zYzma~9mfIq*k!WrmhgW#aK z+gJPFq)LY_X^axOH*qz10>1g8#SJ)Dwv&PxSCfXL>rKfwr(}-q`3RWcT2?I5@jy8A z0rQkR2Ih-L*5WZ~#{8sdj7V-JFB77UvQcCJh^?z|@f(+IBIObNBEs9n?~~siM{w_Y zsT<`wDZ8l>x>TxulUJ!DZxYR3a596HKQCQ3eK)5Wvu8OJtwr2KY)W#@`benKbo*c!4i^W(mSBxJ)!-p?|Cg$$3-KEZ?1Nm^?KrR-p z&kOZ>t%!d{+)Gh@EPZd7P)rJclpOmS7F_h6oNnMjz{TMjso)g?cdCQBywuxT7tcC7 zQffYJ!E0?Z;6MUdp_YuC%|p36ulo%P`7nXtL??2Y@LP!6Ty;!Wr??T5x&G)`qOMnT zW*LeT^y6|{!tY&I5)aMa{!`zCK)@^Bg%4$~8=|)MqBVMmfZsOXw#sfcMpS8hEds%N z#WC#qx+whWQ!nrjS6q4ND9K;{Hpqu0Ctv_FDm&e-enBs}I(6Xj*+^75$caz>3{KCm zt@Ltx%=|jnr1?lhD6gy;LCT!}p}`~hZ7j`F1dq!vz0xT)ctBd#{Q$WJ=LLA_hx|}w z!Li+lvWVf!i-^u|KWHbkHE;rn){FLK@8AM~h3}Wtljbqu)H^NSFCLmyf`ojSZ-+Ii z4dVj9oT$9{pb~7m#eK#YN@(JGE@)E&3_oyIF3}Chhdm1z?}f3unuR?phqxU|^3k;g z3bv<+OuMRhX`Qx*&(kZx#clW<61OaE5=ZyX&VwUo9$^ViiUfX!abDt-g_YlhExG zg@R}B?_NoB0;l^=<73akLB8PRoDf;$S(%*+onxv|FP$b{aE{Xck3WH?8J9I(+Hd_X z(wX#^H&xV6dmUoq0p-jO9xhcrd*IMF`+wJdl!Ce5zq;|R^JD+ut_2iC>$8MsE7!Z9 zUu}-!qJ*+r=n{#fcIw-72s-6*qJ4eAWLRQ~-KWZaS|CV<4$>FX&k1olhvS~Veu7(74e8e5 zwwZ97De%=^JPDM3s&_em)6_1%PZ>8%(xBI<+^f(uE}=(HiuKVG_NaYsK9*0a!@hi} zzJMKjRQx$&R~IU&oynH4w(U9o%`RXV{*v3<^W=eqWQSlP*=G+Z{~Iwi=_)dKP=dRA zhLS=eV(NY{=ML|iA0I3Ql7z{Mn>7=J%w?cBI|9h8dn)sKx;)99H!ek?Xnny z^~#CWDqe4y`|4%Cb5l~p$zyyfp>Sr+#@Duy*rPG~q9x6}(dMaKhgk2mKaS3^qGJY$ z_THknuZTut^NbpJSEr40IZ<-hx^o*K$UYa5U&ZQ-lY)n@PtTZF_T(*tF1xb)t3-Fn z@OGox4#YV!xGNMH){LSXqfG*05P{B<@Q@J_zP4-a@41iis(nj{FEUs;z70>{HJl)J zU&Kou7Yex+s3^dqS5FN0=IYSo5E}cc53^9$Uw#c$mHrpV;^cBC_X?k37AsXmR~b}& zMJr}(0|))BGNB<5)f%s&?JFW^t32^`oVzb%r%7;!v|GB&l3 z+jheUrN*aQBMt=xOJ%@lxOiM{&D;=T(tU_i2uUC;MTR zkg7(P#`_OIS?WQ|L#ae~@NP!JiB&I%i3Zgt ze8rw@GcpAenurFn6xX|YRvaAH+zA|MgkZp;ps)*QvX|^CET`JceNuhgh6U#(Hch;sa^5)s1!(gl~C2l#vgV3D^ zO?U(t0j6j27b!hcK>9~f3&w*7ANAuUX6CtRU1zWbP7UrEsIqjv8A44JLOp(1x7 z%K$-QQVlwW1GjK3xb2Us6YuiiLwo)6RTNadq0#@7kg<8WDD#XIHjIUTRZ8ZXNmklV zd@02)l#|fpfJ_(_-`m-vLJy}YudhD~+-nf1Q}edYS*%y2#46PUD?G zr36SP>LzWw25ZOiOoHr+>=u074M$h6W@X6Ib91sOu;B2A!-?JA-Pd6^j#a$)gZFc4 znk{FJdxKj~d=kn1HOwB|E@ahXOab@s@rZhdryswebYjx=wS)TJ43d{J)xX?RR^JjZ z_;!JU1IhP2{(!ORXYg-TY{P>O-qDKI zk2n%zo598j{FRq3IVC9n66q60Zz$@C#f5^5#^b(5?)7X^>cz_XO=NYT)%b-WNMRs2 z!HzS;Hu(~V>#;{0ZmwR^W$W!fHo~3Z<`VIp1Uf!bT!OyV{4z&&FZ?iFP5@oMO zYteNZR?W`t$Z9L=vkZ!*Ra9}5`pgZJub36n)2%4(9A!MNi$Kvh7vtrUBM*B<7N;BW zSA9Q)bJ*mO_xuBUXm+r5PCICVCN$>5KHF07jN@Tc>qr#mypX>E;yFeV1q> z?0ZQE6j;Fbwyad;jXB>qKK( zsFtnnsWO%2R13QSLePvUa=tHJ3%%AyUkHEYVHRIy=e?{dZ%-Ix?b&YtPnJWqjP|nh zwHD>p?+wsG`|F`TtlzQR;BN3BA{46P5%uK_*ZHABf%|2QGEl8Ex4)4XNTue=SOf;G zl0sVMNR~Wz* zy*DBp47n;q{#kkf<#clL6mmf;2>uICm|R9YTCRjV>zNc4&FDOwJo6C~;F_t+2F&yY zwXj#$LMRx_sa~-Gru#|d^SWpH)lfWCMQc0On-BR{<%FaUK}B;n&bGxo#n~dJnys9S zgSW;ZLZ<_UXcQ6kHyQ1~X86kbg#5ZYGb&%^NR#Oh(dgvmzX$;bTe|Qc(@8d!d3J1q zFe^H_@0L=JStNf4Mj6^|Bth~DisL7LHN_g42Wl=_pDB%?p#*ZHfV!yi_KD_gVPDfI zJ6DI80X3b;GNl>v_m9kL)%eaJ; zin|$?0v>c)T1&bv$+#kFhN!jM+eisu5zrmEA?lHt~ zaUTj#BnoR8K3gr+SFz;~=fS3EuG)@FLrTErQct=RI}xy94p%)CVB9jcEWR@q$i)1l zO{>k&h0e)7pT*;IfmR_;f3!P?-F7euo1TQeN_G;f=t4CD1FnZCQ>H?w_T6SBe1y9y zs$R*LQj;M#94N-9%^|6i7TiU6hzaPo`>+*wIU*R5oC#oEeHLM46RPO8=VpD3{?J;I zJO^xr{LWw*yDR%*nDx%L$0+}B>}6Kd@^t(LS@BvIZhq%p%=kr1)|S^emtL6m|S+Wz%t26Pbnpn%ARnivqB(8WVJR#LAG)tV78UWqGMG z0eNKq2qJqG+Km{dSoRM|0Iy&i>r?db7ti>j*aP1L;eiJGwMBe#^)5&?t6C?iLcoLMJxMnFZ-_-pDlw%b4f0P_K9u(>a+G#?FUzv6 zyvruam&%(d>t4nk-fl{x3&YQ|0Zx{A^*5?lzz#>D;k5CMAI{e_z5(zKoeoq^A7OQQ zOew{NyN(KaOMyZ6VzIV#-n)2sQrgU7F9V!jw+PhRYVU27{eWEy z1xvR&4psNWYr-qi{MllA#?7Q(gb-4exxrK~$SM#!^Bv9TL0*ssVipRm#uk%Lg$+*Z zz#d~dYU$#dA+jQ;KTsW^mns`L*aW;y17~CxdLEFR{&ww#7+0`AwHmZbqd)H05q=_e zT(;v2FFhW$#dvcW)|ez%A{-+=ZM-Gxa`{$CoK~!=nZ4|nwQa?V;l^P>T6_i z`zz-l>4X=7dQAHkw*!L@Iw!hb1q61qF!|gfA%0S%VfC#|Q3*Ax*ujtl^0l%?4fwh* z0~sFB-4XVc98Kw}akaLG?AN?Xt9EzYvaO{b3DqBor!8BZap|w;Hr`ngjJO5UO!2lx za!I3g#b@1scX{pZGt5%r%3~In=BZ&Um#j%67WqT<^8#_yi?)Hi!&@|4=Bp?gNR-qB z`B5VyejEVJTtKnp+60+}{q|pSZ(u+ts6Z`*K*fnzChYu)^sFRMptg1ndq{ch}uSQ#fP8)%#DNgtQ&;wkqnSwz0@{A2CW z#&o8|pv;^*#VA29Rp{g)r#KaI{%;pap$1_sV8J288lwY6mkzMGw|Tee24rvXDsY9c)9#v>y|i&g9>d@**PLeBx+1@MAjrDxKz>B+ zwt{GwPG5P}Jo_4KCxxL{8uP%`xFbrh1WfbV(&Xip!VvTpJwiJU(Ji(OuF>AXl~(=m%phZ#3JrLe-hSGcpXVj0>SBD=p*L2kgBPILBFXtizsx zKMzG^0bLe%Wk0bDXpUQGuJr@PWJf}4$jvRvGpzItnMhb_#sZK9!PJtNMmd}`o&rph zXsD`__81!t%0w0zujOq;yxRrxmzvlDKu1_38aPp71b{#54u+3jkZ~Y}>t}-wHujTY zTSX+l4OYgQEENI;pkBmK2bb6*Jr0vNqkTGU7aH=%@>ppAu~`YE77-zNpv@ zunxF7^*&mihC|PQUR8r}*iqStV4epSnrk2zUz3r{vQL))*#vW0Yd8mEgR=FQhpK!6 zJyLP*mw%wzL#k+5W_1gu_VUpYAd;FPwJdU&n;F%39F=SnrC!L&mJQ0MowdC@=bYg` zpr2fiT$BIqq69nEqO0U{vhHj>T*%y9LE_7Clp32A#fPLP;^U>!%FHF%^W{ZOe&0ln zHtxkYw_MBy_QStLN^S61>Dg{L3bY%M($GYDi>K-`GnqSk9>XUOqWA2ivBX1VlvU7s zmRZs!7N6GRTuM5HFb}Py_t8^lKdx}bWzJhumoBS=ZhJpc6b~X7DBee@Oo!T=n}U$s ztGNX+H+mBwOb8g~4E+O#G&osgl)Y|W{2CYKDSue9ui%C%66W5w`7Da{XC;3S^zleB<9^K2xVgbC~r0@ZEW z>7o~a8>DVKA?gGa7k>(k2Rd86#LB?}BMqc6y4-fz6s< zyehA9hxo_ShR2K<6IC9~WU~iS(XKS?S25m!IO%Fw1D}<_@&_ATe5jtVRy1obC}{-j z#Wu{2Q3?G%H=1c|t-p|C4&si3-Dp&q}CbV1w+P zA9eGB%g>FTP+m=t?cczh)mVN7-~Jk4?+7?#^Kk{t=gV!b7NuX@8XAq{@Pa~wo0iO6ZaF#BV~kht$N?RY$JB!9(XJx@ahEI*%q zula23nr+{I)MZE!k#>^pcAUj^Tvbxg>S1vw5gGhzu&({PaUM-oa6^*#`@Rb)Y`(>& zbt;kl3g%tq$e$Mg8at*)?#6DGQzxSIX95|iK>=}c1?12*H^2g+rrBB6Z)RH>hulB) za%B76B*fJCBb3!|a7OCXQ6HHM=v73p`hF;Jd;*CyvxU#~CQ?N?OFW<`*_+Up=2=q+ zz4CJeihA9<&ll}gKgGnOisSRla_Nz&C;3bCApr|u%kcgeF$v4!FWy&61Mbx&94u*b zZWN;+Tin#lM01Sb8z9Y>NM5$jhB{`2-38YeuPgg1{sbBkMyTBNI4SpEfVCWC(pZk_ zHz*mGE=#|ZO_Io&iSGXB?= zeo&sLb+&x*Nrvcoy!4l6z=w+5#$`Bflq$;^o~^EB&)hO<#%m7jA4wCm`2izS38OmW zb~GUQ%CA~Z;5_Kl z8w-xKcWfq`r{(>C^+5m7scvQhE~P0<*KDUVy>o$!tz?6nEu#qJs!Nroc^dUNq0VU} z%hzYbQ>Qo8qe0=yfIm|qm%k=6n^E}W05_Qc4|Z7X{7o)~1xC)Q!6ridHM7KU2^g6g z>@Rx>XqAKUd5Yf{XWe#}d**9n0>3l4e5pvl4?>`qK_-ULa{%UNalS>@k^eEM?0*u$ z|NE%d<=P0bS8%G}&T?q!Uvx11LY-S{JLR0P6{0DfK89eC)nvc0E2lJzyj5IdTQXQl zl%wMPpyxFTQwC!prggb7VeI6*jW$H7z3mD>&2^T=Lkq(7L$L7qA~{eQb-# zcqO*(+lnb|d8wFzQ@8sE5EQR>x*y{TO9&Oby(W^W8AffU$g=@McCglnRCanWic%p< z=bDIMt!ovr3}v)QpFl033Z>LH1u4-b#aUtU0%(|vl>>HRnGu@vTmr^r_oYK08<{h$ z`hi?Zs!{`fru|<~jW&PaiGdA#X1^;$o4>04IJ=nZm2}>jSyUO+E;ZsI)S%Y{YS{#x zB@z{G&plom3YhOIT)FK3Li3(#udsj)58L0oC0}k)aWBJr{y6r+9CCOLIR+7TbyFzR zc=X~rHv&(i_tcTlet9$mt)$38YjO>V@02Ze+P}#oD!wnz}%pU*F7hU&(;2lGe zy|*|aJ3MTN(DH>-Kiu&|w`R$&faF)^+&4_Znm%7SaSH?JkKKg+fv)O~Cg(? zk}yf#?Yp)pD{a!=4M@Jo}r#L^BW@+kQ< zDao5}+QlRq%p~ZYVS9eN{5zvk3EUoJ=-0GRB4g$%+})cnML6>yoao2C9x1x;c@|o~ zE*~HWTo}Dq*tDAi?F@oO&ZZ^_Da`Bx-&47e_S+p#n1*XfNYP?Qy%jv_xT^-xz7fU^ z;yAK-ERU3D;)S`#u}7LikiGA(GclC1!-YrhG7@vwv>=K{{f4n}_z3e&B8GXgq9NY|8Zm3h}BaV&5XH~u1AV42{_im~yQAB56=CqN8nF7b_c z!b@=5sc+JIyu4eK$b_qom3;axAKQX!4dd75T`}oZ)x!Vsb*G#$M{(PA?cDEovytUS zeFN#%oq3~MP5s@5B2jB?N(-x`6MsUA&PQZ7_D)c0HoR#f-1OKaj}FN#lw4g&>>kj; z#)-5q`q!Usw#)pe0)cl@Q15h)wdEDRDlv|#Oy82-+m5 zEH6D!@4+)`zd#@SZy-XW=lSoj$EVWoR2@-&(+e#-Hsr}c(2O$nc98-mZ&{+du~|%U zu3$%YeWt&tdK%t`DtSR~(F~Pbkb1yV9GB(J!bC5bIs`J1>>fT5RPaUP&!2yzx1>bG zkKPzn8aIwy3^z7r@Zi4e>Q{L-OThaau!>Y~Tvhk_Cf7SKAa}Kl8w%}{Uv)8}=qCm; z^$WkU=nJ`Z5-;*rX}DvT6-~EJ-m7YH>Nn)|&o~ajZOhJ~a<6kPm)GL`(KG_ z;)H37Njla%^A{MO?V|N#W3Yjr`}(0yKCXJrc1+YR%R$}PVge&mHJWgB8^4%fR$0^| zus6XYyIJaHvt6t5&h$j5CvhPl(^VoI2sl38SEjQM)UVqoT*@>=OhPQ5C`MpWYNe@% zY`bXfTV7IbTQt;#HSxDGTyhjP(3Q);6VTtQISkh~I?T{1@`GGr@eY8BSG8Y+7m=?P z{hl`np1~x;*_DPcQXmJ=L=*RnZcw1PNvT(unHg8_aV;ox8Th638@2Xd8} z9ylSi0_o64eBi_(mr-M3r{WQqp)`1#KQ<_{&E8Y52>qSEMsL|lwr=YQ98CbLhznD8g$?yx=-xs!u4p9i}%tr z4a!Hkw(PiEP&VK9U_NqGDFAj$YV3Wo7hK>x6@IPiA_QEAlgXM+F z0s|}J@iKaROQ&wrqw$=`miyHN70me~31FFt8C$jKnoA?m3cXJ}^G1my8kJ4PH%YKlYeDTPM!Y~b zxztnw#T+;4K|CZnfadiqEXfar+=Fbuk}-)~@VL#&ZXn63wO4Ch!*3sS`Ms9z2}BnI zic3DdSEjX?jz=Ju`5F$F6Ge_DNMwf%wJo+>}KhZxcc+Lw2B6*XLt-;B6n(!01 zH(||M?Z$Mh!?jvJ5FGLiJ`j9M;w!eCc3B!U5cCkds-_2~=(j9A-x6np8}fm*5So1} z9QeT5xa-(MvU_C!I~jy-jz?B9y|o&|B2_9_mWD(I!^2?D5N_fc4vK#|ClX!bV7Ja6 zpC?AEsDB4eTnP*s%7l&MxD;2t!N6cp0EY zQTye>`013Gm?*=G$HaO^AgA0}`0l82G7RRVd6FigC_;t*^}C;V4|A!f06kR1oY6Sa z%;+7E#ZwM!L#RoQJ=H(B=@@wtB5p!<*P--T)2#xB;oKZ8oF1x8VeiTn$S^=I-8{0& z+pOJ_4lJhHI|PxY&7J(s#)N@r!3m!3Sq&;wL-Cg`ZYJYVB}ZvJ2->b;W9&m%kOv08 zJh}F5Q+VL6QBg;bJY^HJbXbkARiT_8ruKPVY(P@yiIBI(8!<<8lBr6Ub1f^=0P%A>T(jis?mGzws zKcoXKYb_Zq<#a^FL3ZcQnRz|G#dfE}g$Ash-sPwvUo(}2g?etR62JFO&lulZ=Si96 zbO))3?NQ=lT=3>qI%eW>UO-o2#n=HU;q{`R4jEC;TY06@wxmw)F#**XL8`n*0=-#- z5v`BKHJGU7W@LZy>uP?oKuSp)>zeeSu@PCJKt@{g!V$cpOI}zfVd>(9hzGUbQk8Gk zXkPk{(KG~p&;ZR$7H-st5dD{Y*uS=j$oeC!4FuN*=8_4FJ(>5wy(=WIB&r;p%uZGQdxX5VUQwX{k9>;^l%bu^S5 zPeNamm%T9%l!HKlMf>mZfqZYRIpck)_?H87-(4R3H-uHzFJuqu&=1?-H;v!yQj+U? zqU6nVhU^%lg$at@{hIVL5HNwBLZFwV(z?XiXapIAyo4~3s8JA3#D=*xOb}q5Y!l4e zG-{_ZfIcR}05$+6*DdC2p;kI>KW*+a{>=4;Q4I#qi(N^$Tk0__tETJ5wV2niEN=V4 z(hZ_)5;~t$DY>ZArZltd_jT0E(u&}-k1!b)=o?hgm^p=9*wLbdJ~N>Bw=43t&r3zD zclAl^18{xq^u+scr)Z;@t8sm@>~Z?x5ZIEJnV0!-FqE?rDF)~99gvh1Umgq4jsJRq zum|Zp=mi=Gq)a53r)6q?{v2=y>2Y{k^~S4r#3|`%LbynJfkG)NX^+0cWdYd6_h8}1 zFQrQmAtzSL(~L)XBm;pETo=7__(mphISf?im?c&tQthXg@ANsP^s!FdNFIeQcbnSF zi+S5^bI*H(F!Tk)fj6OQlp)6>N3A>H~b&JU?d?tA>_r#sF2 zSPXb<3MFq*4V=cpq8P{H4>||(^f5e*=Mht2UnyS8L$c+zTtb1Fhshhj=D`_1_kQY!E$MKnQW!9N|R{~I5dzaNwG$&;gfz)5{3;x(v$u1lw^NPS4{)hrAzsV%T#PWuDf%tf1>VH5Q z-RJ~s5lu3txM5HKZMq(H^#=r%?kKO_Y-61`bUnHm6Mx`_kVP`c>Xgh;QwL#sSMy^{ck~b zE?#bKp8vr<7vvv|o0W&_ADZmkY^)rBf92RXIRB6Cf9$ieaq)7n{tpvgPVRqa&CSN~ zFFQ7FHZHb*46|`_@cg@~pBOLC|BS~CWaIqD?`+)M9RIRo&A0nR^2mAkG z-2WA||5^V}K^~re!j^-Ljh*dZmjHMGy#I^w{!ei6umX7gmE-vg>i-j4-(8HY?aW;S zlFMPCX${ypxwwr19IWQt7VMlHtn56zoW>lyrWO`#9RIP&DI~zj&1P(7%nC5&VddmB yG2!6lH8!(g{d9qusTmKqIh&BakPwpVcVn0Do-XDVNdNhHdD)Pts3eu8kp3SQE*sPU diff --git a/test/scannerlib/CMakeLists.txt b/test/scannerlib/hanvon/CMakeLists.txt similarity index 100% rename from test/scannerlib/CMakeLists.txt rename to test/scannerlib/hanvon/CMakeLists.txt diff --git a/test/scannerlib/c#/WindowsFormsApp1/Form1.Designer.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Form1.Designer.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Form1.Designer.cs rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Form1.Designer.cs diff --git a/test/scannerlib/c#/WindowsFormsApp1/Form1.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Form1.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Form1.cs rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Form1.cs diff --git a/test/scannerlib/c#/WindowsFormsApp1/Form1.resx b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Form1.resx similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Form1.resx rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Form1.resx diff --git a/test/scannerlib/hanvon/c#/WindowsFormsApp1/HGScannerLib.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/HGScannerLib.cs new file mode 100644 index 00000000..8e617f9e --- /dev/null +++ b/test/scannerlib/hanvon/c#/WindowsFormsApp1/HGScannerLib.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; + +namespace WindowsFormsApp1 +{ + public class HGScannerLib + { + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibSaveImageParam + { + public UInt32 size; + public UInt32 jpegQuality; + public UInt32 tiffCompression; + public UInt32 tiffJpegQuality; + public Int32 ocr; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceIntValueList + { + public IntPtr value; // Int32指针 + public UInt32 count; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceEnumValueList + { + public IntPtr value; // UInt32指针 + public UInt32 count; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceDoubleValueList + { + public IntPtr value; // Double指针 + public UInt32 count; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceIntValueRange + { + public Int32 minValue; + public Int32 maxValue; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceDoubleValueRange + { + public Double minValue; + public Double maxValue; + } + + [StructLayout(LayoutKind.Explicit, Pack = 4)] + public struct HGLibDeviceParamType + { + [FieldOffset(0)] public Int32 intValue; + [FieldOffset(0)] public UInt32 enumValue; + [FieldOffset(0)] public Double doubleValue; + [FieldOffset(0)] public Int32 boolValue; + } + + [StructLayout(LayoutKind.Explicit, Pack = 4)] + public struct HGLibDeviceParamRangeType + { + [FieldOffset(0)] public HGLibDeviceIntValueList intValueList; + [FieldOffset(0)] public HGLibDeviceEnumValueList enumValueList; + [FieldOffset(0)] public HGLibDeviceDoubleValueList doubleValueList; + [FieldOffset(0)] public HGLibDeviceIntValueRange intValueRange; + [FieldOffset(0)] public HGLibDeviceDoubleValueRange doubleValueRange; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceParam + { + public UInt32 option; + public UInt32 type; + public HGLibDeviceParamType typeValue; + public UInt32 rangeType; + public HGLibDeviceParamRangeType rangeTypeValue; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceParamGroup + { + public UInt32 group; + public IntPtr param; // HGLibDeviceParam指针 + public UInt32 paramCount; + } + + public delegate void HGLibDeviceHotPlugEventFunc(UInt32 evt, IntPtr deviceName, IntPtr param); + public delegate void HGLibDeviceScanEventFunc(UIntPtr device, UInt32 evt, Int32 err, IntPtr info, IntPtr param); + public delegate void HGLibDeviceScanImageFunc(UIntPtr device, UIntPtr image, IntPtr param); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_LoadImage")] + public static extern UIntPtr HGLib_LoadImage(IntPtr filePath); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_SaveImage")] + public static extern Int32 HGLib_SaveImage(UIntPtr image, IntPtr filePath, ref HGLibSaveImageParam saveParam); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_ReleaseImage")] + public static extern Int32 HGLib_ReleaseImage(UIntPtr image); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_InitDevice")] + public static extern Int32 HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, IntPtr param); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_DeinitDevice")] + public static extern Int32 HGLib_DeinitDevice(); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_GetDeviceNameList")] + public static extern IntPtr HGLib_GetDeviceNameList(); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_ReleaseDeviceNameList")] + public static extern Int32 HGLib_ReleaseDeviceNameList(IntPtr deviceNameList); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_OpenDevice")] + public static extern UIntPtr HGLib_OpenDevice(IntPtr deviceName); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_CloseDevice")] + public static extern Int32 HGLib_CloseDevice(UIntPtr device); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_GetDeviceSN")] + public static extern Int32 HGLib_GetDeviceSN(UIntPtr device, IntPtr sn, UInt32 maxLen); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_GetDeviceFWVersion")] + public static extern Int32 HGLib_GetDeviceFWVersion(UIntPtr device, IntPtr fwVersion, UInt32 maxLen); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_SetDeviceParam")] + public static extern Int32 HGLib_SetDeviceParam(UIntPtr device, UInt32 option, IntPtr data); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_GetDeviceParamGroupList")] + public static extern IntPtr HGLib_GetDeviceParamGroupList(UIntPtr device, ref UInt32 count); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_GetDeviceParam")] + public static extern IntPtr HGLib_GetDeviceParam(UIntPtr device, UInt32 option); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_ReleaseDeviceParamGroupList")] + public static extern Int32 HGLib_ReleaseDeviceParamGroupList(IntPtr devParamGroup, UInt32 count); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_ReleaseDeviceParam")] + public static extern Int32 HGLib_ReleaseDeviceParam(IntPtr devParam); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_ResetDeviceParam")] + public static extern Int32 HGLib_ResetDeviceParam(UIntPtr device); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_DeviceIsPaperOn")] + public static extern Int32 HGLib_DeviceIsPaperOn(UIntPtr device); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_StartDeviceScan")] + public static extern Int32 HGLib_StartDeviceScan(UIntPtr device, HGLibDeviceScanEventFunc eventFunc, IntPtr eventParam, + HGLibDeviceScanImageFunc imageFunc, IntPtr imageParam); + + [DllImport("HWScannerLib.dll", EntryPoint = "HGLib_StopDeviceScan")] + public static extern Int32 HGLib_StopDeviceScan(UIntPtr device); + } +} diff --git a/test/scannerlib/c#/WindowsFormsApp1/Program.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Program.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Program.cs rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Program.cs diff --git a/test/scannerlib/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs diff --git a/test/scannerlib/c#/WindowsFormsApp1/Properties/Resources.Designer.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Resources.Designer.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Properties/Resources.Designer.cs rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Resources.Designer.cs diff --git a/test/scannerlib/c#/WindowsFormsApp1/Properties/Resources.resx b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Resources.resx similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Properties/Resources.resx rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Resources.resx diff --git a/test/scannerlib/c#/WindowsFormsApp1/Properties/Settings.Designer.cs b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Settings.Designer.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Properties/Settings.Designer.cs rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Settings.Designer.cs diff --git a/test/scannerlib/c#/WindowsFormsApp1/Properties/Settings.settings b/test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Settings.settings similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/Properties/Settings.settings rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/Properties/Settings.settings diff --git a/test/scannerlib/c#/WindowsFormsApp1/WindowsFormsApp1.csproj b/test/scannerlib/hanvon/c#/WindowsFormsApp1/WindowsFormsApp1.csproj similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/WindowsFormsApp1.csproj rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/WindowsFormsApp1.csproj diff --git a/test/scannerlib/c#/WindowsFormsApp1/WindowsFormsApp1.sln b/test/scannerlib/hanvon/c#/WindowsFormsApp1/WindowsFormsApp1.sln similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/WindowsFormsApp1.sln rename to test/scannerlib/hanvon/c#/WindowsFormsApp1/WindowsFormsApp1.sln diff --git a/test/scannerlib/main.cpp b/test/scannerlib/hanvon/main.cpp similarity index 100% rename from test/scannerlib/main.cpp rename to test/scannerlib/hanvon/main.cpp diff --git a/test/scannerlib/hanvon/test.py b/test/scannerlib/hanvon/test.py new file mode 100644 index 00000000..73ad00fc --- /dev/null +++ b/test/scannerlib/hanvon/test.py @@ -0,0 +1,234 @@ +import ctypes +import os +from os import system +import time +import platform +from ctypes import * +import random + +class HGLibSaveImageParam(Structure): + _pack_ = 4 + _fields_ = [ ("size", c_uint), + ("jpegQuality", c_uint), + ("tiffCompression", c_uint), + ("tiffJpegQuality", c_uint), + ("ocr", c_int)] + +class HGLibDeviceIntValueList(Structure): + _pack_ = 4 + _fields_ = [ ("value", POINTER(c_int)), + ("count", c_uint)] + +class HGLibDeviceEnumValueList(Structure): + _pack_ = 4 + _fields_ = [ ("value", POINTER(c_uint)), + ("count", c_uint)] + +class HGLibDeviceDoubleValueList(Structure): + _pack_ = 4 + _fields_ = [ ("value", POINTER(c_double)), + ("count", c_uint)] + +class HGLibDeviceIntValueRange(Structure): + _pack_ = 4 + _fields_ = [ ("minValue", c_int), + ("maxValue", c_int)] + +class HGLibDeviceDoubleValueRange(Structure): + _pack_ = 4 + _fields_ = [ ("minValue", c_double), + ("maxValue", c_double)] + +class HGLibDeviceParamType(Union): + _pack_ = 4 + _fields_ = [ ("intValue", c_int), + ("enumValue", c_uint), + ("doubleValue", c_double), + ("boolValue", c_int)] + +class HGLibDeviceParamRangeType(Union): + _pack_ = 4 + _fields_ = [ ("intValueList", HGLibDeviceIntValueList), + ("enumValueList", HGLibDeviceEnumValueList), + ("doubleValueList", HGLibDeviceDoubleValueList), + ("intValueRange", HGLibDeviceIntValueRange), + ("doubleValueRange", HGLibDeviceDoubleValueRange)] + +class HGLibDeviceParam(Structure): + _pack_ = 4 + _fields_ = [ ("option", c_uint), + ("type", c_uint), + ("typeValue", HGLibDeviceParamType), + ("rangeType", c_uint), + ("rangeTypeValue", HGLibDeviceParamRangeType)] + +class HGLibDeviceParamGroup(Structure): + _pack_ = 4 + _fields_ = [ ("group", c_uint), + ("param", POINTER(HGLibDeviceParam)), + ("paramCount", c_uint)] + +print(os.path.abspath('.')) + +#加载动态库 所有依赖库必须在同一运行目录下边 +if platform.system() == 'Windows': + Objdll = ctypes.WinDLL(os.path.abspath('.') + "/HWScannerLib.dll") +elif platform.system() == "Linux": + Objdll = cdll.LoadLibrary(os.path.abspath('.') + "/libHWScannerLib.so") + +#加载图像接口示例 +HGLib_LoadImage = Objdll.HGLib_LoadImage +HGLib_LoadImage.argtypes = [ctypes.c_char_p] +HGLib_LoadImage.restype = ctypes.c_void_p +Image = HGLib_LoadImage(c_char_p(b"1.jpg")) + +#保存图像接口示例 +HGLib_SaveImage = Objdll.HGLib_SaveImage +HGLib_SaveImage.argtypes = [ctypes.c_void_p, ctypes.c_char_p, POINTER(HGLibSaveImageParam)] +HGLib_SaveImage.restype = ctypes.c_int +ImageParam = HGLibSaveImageParam() +ImageParam.size = sizeof(ImageParam) +ImageParam.jpegQuality = 80 +ImageParam.tiffCompression = 4 +ImageParam.tiffJpegQuality = 80 +ImageParam.ocr = 0 +Ret = HGLib_SaveImage(Image, c_char_p(b"2.jpg"), pointer(ImageParam)) + +#释放图像资源 +HGLib_ReleaseImage = Objdll.HGLib_ReleaseImage +HGLib_ReleaseImage.argtypes = [ctypes.c_void_p] +HGLib_ReleaseImage.restype = ctypes.c_int +Ret = HGLib_ReleaseImage(Image) + +#设备热拔插回调事件 +def HGLibDeviceHotPlugEventFunc(event: c_uint, deviceName: c_char_p, param: c_void_p): + print(deviceName) + return + +#初始化操作 +FuncType = CFUNCTYPE(None, c_uint, c_char_p, c_void_p) +cb = FuncType(HGLibDeviceHotPlugEventFunc) +HGLib_InitDevice = Objdll.HGLib_InitDevice +HGLib_InitDevice.argtypes = [FuncType, c_void_p] +HGLib_InitDevice.restype = ctypes.c_int +Ret = HGLib_InitDevice(cb, 0) + +time.sleep(1) + +#获取设备列表 +HGLib_GetDeviceNameList = Objdll.HGLib_GetDeviceNameList +HGLib_GetDeviceNameList.argtypes = [] +HGLib_GetDeviceNameList.restype = POINTER(ctypes.c_char_p) +DeviceNameList = HGLib_GetDeviceNameList() + +#打开指定设备 +HGLib_OpenDevice = Objdll.HGLib_OpenDevice +HGLib_OpenDevice.argtypes = [ctypes.c_char_p] +HGLib_OpenDevice.restype = ctypes.c_void_p +Device = HGLib_OpenDevice(DeviceNameList[0]) + +#获取设备所有参数 +HGLib_GetDeviceParamGroupList = Objdll.HGLib_GetDeviceParamGroupList +HGLib_GetDeviceParamGroupList.argtypes = [ctypes.c_void_p, POINTER(c_uint)] +HGLib_GetDeviceParamGroupList.restype = POINTER(HGLibDeviceParamGroup) +DevParamCount = ctypes.c_uint() +DevParamGroup = HGLib_GetDeviceParamGroupList(Device, pointer(DevParamCount)) + +GroupList = ['None', 'BaseSetting', 'Brightness', 'ImageProc', 'PaperFeeding'] +ValueTypeList = ['None', 'Int', 'Enum', 'Double', 'Bool'] +ValueRangeTypeList = ['None', 'IntList', 'EnumList', 'DoubleList', 'IntRange', 'DoubleRange'] + +i = 0 +while i < int(DevParamCount.value): + print("group" + str(i) + ":" + GroupList[DevParamGroup[i].group]) + print(" paramCount:" + str(DevParamGroup[i].paramCount)) + j = 0 + while (j < int(DevParamGroup[i].paramCount)): + print(" paramOption:" + str(DevParamGroup[i].param[j].option)) + print(" paramValueType:" + ValueTypeList[DevParamGroup[i].param[j].type]) + print(" paramValueRangeType:" + ValueRangeTypeList[DevParamGroup[i].param[j].rangeType]) + j += 1 + i += 1 + +#销毁 +HGLib_ReleaseDeviceParamGroupList = Objdll.HGLib_ReleaseDeviceParamGroupList +HGLib_ReleaseDeviceParamGroupList.argtypes = [POINTER(HGLibDeviceParamGroup), c_uint] +HGLib_ReleaseDeviceParamGroupList.restype = ctypes.c_int +Ret = HGLib_ReleaseDeviceParamGroupList(DevParamGroup, DevParamCount) + +#设置扫描参数 +HGLib_SetDeviceParam = Objdll.HGLib_SetDeviceParam +HGLib_SetDeviceParam.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_void_p] +HGLib_SetDeviceParam.restype = ctypes.c_int +DevParam = ctypes.c_int(1) #HGLIB_OPTION_ENUMVALUE_DLSCLX_W -> 不进行多流输出类型 +Ret = HGLib_SetDeviceParam(Device, 1, byref(DevParam)) #见HGLib_SetDeviceParam 头文件接口说明 1 -> HGLIB_OPTION_NAME_DLSC 多流输出 + + +#扫描事件回调 +def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: c_char_p, param: c_void_p): + s_info=info + global bStop + print("event code",event," event info:",s_info) + if event == 2:#HGLIB_DEVSCAN_EVENT_END 扫描停止 + bStop=True + print("bStop true") + elif event == 1: + bStop=False + print("bStop false") + return +imgindex=0 +#扫描图像事件回调 +def HGLibDeviceScanImageFunc(device: c_void_p, image: c_void_p, param: c_void_p): + global imgindex + ImageParam = HGLibSaveImageParam() + ImageParam.size = sizeof(ImageParam) + ImageParam.jpegQuality = 80 + ImageParam.tiffCompression = 4 + ImageParam.tiffJpegQuality = 80 + ImageParam.ocr = 0 + print("image call back!!") + imgindex+=1 + t_index=imgindex + imgname=str(t_index) + '_scanned.jpg' + print(imgname) + b_imagename=imgname.encode('utf-8') + pchar=c_char_p(b_imagename) + Ret = HGLib_SaveImage(image, pchar, pointer(ImageParam)) + return + +#注册扫描相关事件并启动扫描 +FuncType1 = CFUNCTYPE(None, c_void_p, c_uint, c_int, c_char_p, c_void_p) +cb1 = FuncType1(HGLibDeviceScanEventFunc) +FuncType2 = CFUNCTYPE(None, c_void_p, c_void_p, c_void_p) +cb2 = FuncType2(HGLibDeviceScanImageFunc) +HGLib_StartDeviceScan = Objdll.HGLib_StartDeviceScan +HGLib_StartDeviceScan.argtypes = [c_void_p, FuncType1, c_void_p, FuncType2, c_void_p] +HGLib_StartDeviceScan.restyped = ctypes.c_int +print("start scan") +Ret = HGLib_StartDeviceScan(Device, cb1, 0, cb2, 0) + +#模拟扫描持续应等待扫描事件回调返回扫描停止才结束本次扫描流程 +while(not bStop): + time.sleep(1) + print("scanning...") + + +print("scan done!!!") + +#关闭当前打开的设备 +HGLib_CloseDevice=Objdll.HGLib_CloseDevice +HGLib_CloseDevice.argtypes = [c_void_p] +HGLib_CloseDevice.restype = ctypes.c_int +HGLib_CloseDevice(Device) +print("Close Devices") + +#释放设备列表资源 +HGLib_ReleaseDeviceNameList=Objdll.HGLib_ReleaseDeviceNameList +HGLib_ReleaseDeviceNameList.argtypes=[POINTER(ctypes.c_char_p)] +HGLib_ReleaseDeviceNameList.restype = ctypes.c_int +HGLib_ReleaseDeviceNameList(DeviceNameList) +print("ReleaseDeviceNameList done") + +print("exit test") + + diff --git a/test/scannerlib/huagao/CMakeLists.txt b/test/scannerlib/huagao/CMakeLists.txt new file mode 100644 index 00000000..120cd353 --- /dev/null +++ b/test/scannerlib/huagao/CMakeLists.txt @@ -0,0 +1,12 @@ +project(testdemo) + +FILE(GLOB SRC "*.cpp" "*.h" "*.c") +include_directories(${PROJECT_SOURCE_DIR}/) + +add_executable(${PROJECT_NAME} ${SRC}) + +target_link_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/) + +target_link_libraries(${PROJECT_NAME} HGBase hgdriver HGImgFmt HGImgProc HGScannerLib mupdf pdf sane-hgsane) + +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/) \ No newline at end of file diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.Designer.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.Designer.cs new file mode 100644 index 00000000..76ecc4fb --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.Designer.cs @@ -0,0 +1,62 @@ + +namespace WindowsFormsApp1 +{ + partial class Form1 + { + ///

+ /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(301, 157); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(166, 65); + this.button1.TabIndex = 0; + this.button1.Text = "扫描"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.button1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button1; + } +} + diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs new file mode 100644 index 00000000..8b733879 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Timers; +using System.Threading; + +namespace WindowsFormsApp1 +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + UIntPtr image = HGScannerLib.HGLib_LoadImage(StringToUtf8("1.jpg")); + if (UIntPtr.Zero != image) + { + HGScannerLib.HGLibSaveImageParam saveParam; + saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam)); + saveParam.jpegQuality = 80; + saveParam.tiffCompression = 4; + saveParam.tiffJpegQuality = 80; + saveParam.ocr = 0; + HGScannerLib.HGLib_SaveImage(image, StringToUtf8("2.jpg"), ref saveParam); + HGScannerLib.HGLib_ReleaseImage(image); + } + + HGScannerLib.HGLibDeviceHotPlugEventFunc fun = new HGScannerLib.HGLibDeviceHotPlugEventFunc(DeviceHotPlugEventFunc); + HGScannerLib.HGLib_InitDevice(fun, this.Handle); + Thread.Sleep(500); + + IntPtr deviceNameList = HGScannerLib.HGLib_GetDeviceNameList(); + if (IntPtr.Zero != deviceNameList) + { + // 获取设备列表 + int i = 0; + IntPtr deviceName = Marshal.ReadIntPtr(deviceNameList, 0); + while (IntPtr.Zero != deviceName) + { + String deviceNameText = Utf8ToString(deviceName); + ++i; + deviceName = Marshal.ReadIntPtr(deviceNameList, Marshal.SizeOf(typeof(IntPtr)) * i); + } + + // 打开第一个设备 + UIntPtr device = HGScannerLib.HGLib_OpenDevice(Marshal.ReadIntPtr(deviceNameList, 0)); + if (UIntPtr.Zero != device) + { + // 获取序列号 + Byte[] sn = new Byte[60]; + IntPtr snAddr = Marshal.UnsafeAddrOfPinnedArrayElement(sn, 0); + HGScannerLib.HGLib_GetDeviceSN(device, snAddr, 60); + String snText = Utf8ToString(snAddr); + + // 获取固件版本号 + Byte[] fwVer = new Byte[60]; + IntPtr fwVerAddr = Marshal.UnsafeAddrOfPinnedArrayElement(fwVer, 0); + HGScannerLib.HGLib_GetDeviceFWVersion(device, fwVerAddr, 60); + String fwVerText = Utf8ToString(fwVerAddr); + + // 设置待纸扫描 + Int32[] dzsm = new Int32[1]; + dzsm[0] = 1; + Int32 ret1 = HGScannerLib.HGLib_SetDeviceParam(device, 67, + Marshal.UnsafeAddrOfPinnedArrayElement(dzsm, 0)); + + // 设置旋转90度 + UInt32[] rotate = new UInt32[1]; + rotate[0] = 67; + Int32 ret2 = HGScannerLib.HGLib_SetDeviceParam(device, 59, + Marshal.UnsafeAddrOfPinnedArrayElement(rotate, 0)); + + // 设置伽马值 + Double[] gamma = new Double[1]; + gamma[0] = 1.0; + Int32 ret3 = HGScannerLib.HGLib_SetDeviceParam(device, 35, + Marshal.UnsafeAddrOfPinnedArrayElement(gamma, 0)); + + // 获取旋转的配置 + IntPtr rotateParam = HGScannerLib.HGLib_GetDeviceParam(device, 59); + if (IntPtr.Zero != rotateParam) + { + HGScannerLib.HGLibDeviceParam param = (HGScannerLib.HGLibDeviceParam) + Marshal.PtrToStructure(rotateParam, typeof(HGScannerLib.HGLibDeviceParam)); + + // print param + PrintParam(ref param); + + HGScannerLib.HGLib_ReleaseDeviceParam(rotateParam); + } + + // 获取所有配置 + UInt32 groupCount = 0; + IntPtr groupParamList = HGScannerLib.HGLib_GetDeviceParamGroupList(device, ref groupCount); + if (IntPtr.Zero != groupParamList) + { + for (int groupIdx = 0; groupIdx < (int)groupCount; ++groupIdx) + { + HGScannerLib.HGLibDeviceParamGroup group = (HGScannerLib.HGLibDeviceParamGroup) + Marshal.PtrToStructure(groupParamList + Marshal.SizeOf(typeof(HGScannerLib.HGLibDeviceParamGroup)) * groupIdx, + typeof(HGScannerLib.HGLibDeviceParamGroup)); + + // 组名 + UInt32 groupName = group.group; + // 组内配置的数量 + UInt32 paramCount = group.paramCount; + + for (int paramIdx = 0; paramIdx < group.paramCount; ++paramIdx) + { + HGScannerLib.HGLibDeviceParam param = (HGScannerLib.HGLibDeviceParam) + Marshal.PtrToStructure(group.param + Marshal.SizeOf(typeof(HGScannerLib.HGLibDeviceParam)) * paramIdx, + typeof(HGScannerLib.HGLibDeviceParam)); + + // print param + PrintParam(ref param); + } + } + + HGScannerLib.HGLib_ReleaseDeviceParamGroupList(groupParamList, groupCount); + } + + // 扫描 + m_break = false; + HGScannerLib.HGLibDeviceScanEventFunc eventFunc = new HGScannerLib.HGLibDeviceScanEventFunc(DeviceScanEventFunc); + HGScannerLib.HGLibDeviceScanImageFunc imageFunc = new HGScannerLib.HGLibDeviceScanImageFunc(DeviceScanImageFunc); + Int32 scanRet = HGScannerLib.HGLib_StartDeviceScan(device, eventFunc, this.Handle, imageFunc, this.Handle); + if (0 != scanRet) + { + while (!m_break) + { + Thread.Sleep(100); + } + + HGScannerLib.HGLib_StopDeviceScan(device); + } + + HGScannerLib.HGLib_CloseDevice(device); + } + + HGScannerLib.HGLib_ReleaseDeviceNameList(deviceNameList); + } + + HGScannerLib.HGLib_DeinitDevice(); + } + + public void DeviceHotPlugEventFunc(UInt32 evt, IntPtr deviceName, IntPtr param) + { + String devNameText = Utf8ToString(deviceName); + } + + public void DeviceScanEventFunc(UIntPtr device, UInt32 evt, Int32 err, IntPtr info, IntPtr param) + { + if (evt == 2) + { + m_break = true; + } + else if (3 == evt) + { + String infoText = Utf8ToString(info); + } + } + + public void DeviceScanImageFunc(UIntPtr device, UIntPtr image, IntPtr param) + { + String fileName = String.Format("Scan_{0}.jpg", m_scanCount); + ++m_scanCount; + + HGScannerLib.HGLibSaveImageParam saveParam; + saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam)); + saveParam.jpegQuality = 80; + saveParam.tiffCompression = 4; + saveParam.tiffJpegQuality = 80; + saveParam.ocr = 0; + HGScannerLib.HGLib_SaveImage(image, StringToUtf8(fileName), ref saveParam); + } + + public String Utf8ToString(IntPtr str) + { + if (IntPtr.Zero == str) + { + return ""; + } + + int len = 0; + while (0 != Marshal.ReadByte(str, len)) + { + ++len; + } + + if (0 == len) + { + return ""; + } + + Byte[] utf8 = new Byte[len]; + Marshal.Copy(str, utf8, 0, len); + return Encoding.UTF8.GetString(utf8); + } + + public IntPtr StringToUtf8(String str) + { + if (str.Length == 0) + { + return IntPtr.Zero; + } + + Byte[] src = Encoding.UTF8.GetBytes(str); + Byte[] dst = new Byte[src.Length + 1]; + for (int i = 0; i < src.Length; ++i) + dst[i] = src[i]; + dst[dst.Length - 1] = 0; + return Marshal.UnsafeAddrOfPinnedArrayElement(dst, 0); + } + + public void PrintParam(ref HGScannerLib.HGLibDeviceParam param) + { + // 配置名 + UInt32 option = param.option; + + if (1 == param.type) // 整型 + { + Int32 value = param.typeValue.intValue; + } + else if (2 == param.type) // 枚举 + { + UInt32 value = param.typeValue.enumValue; + } + else if (3 == param.type) // 双精度浮点 + { + Double value = param.typeValue.doubleValue; + } + else if (4 == param.type) // BOOL + { + Int32 value = param.typeValue.boolValue; + } + + if (param.rangeType == 1) // 整型列表 + { + Int32[] intValueList = new Int32[param.rangeTypeValue.intValueList.count]; + Marshal.Copy(param.rangeTypeValue.intValueList.value, intValueList, 0, (int)param.rangeTypeValue.intValueList.count); + } + else if (param.rangeType == 2) // 枚举列表 + { + Int32[] enumValueList = new Int32[param.rangeTypeValue.enumValueList.count]; + Marshal.Copy(param.rangeTypeValue.enumValueList.value, enumValueList, 0, (int)param.rangeTypeValue.enumValueList.count); + } + else if (param.rangeType == 3) // 双精度浮点列表 + { + Double[] doubleValueList = new Double[param.rangeTypeValue.doubleValueList.count]; + Marshal.Copy(param.rangeTypeValue.doubleValueList.value, doubleValueList, 0, (int)param.rangeTypeValue.doubleValueList.count); + } + else if (param.rangeType == 4) // 整型范围 + { + // 最小值 + Int32 minVal = param.rangeTypeValue.intValueRange.minValue; + // 最大值 + Int32 maxVal = param.rangeTypeValue.intValueRange.maxValue; + } + else if (param.rangeType == 5) // 双精度浮点范围 + { + // 最小值 + Double minVal = param.rangeTypeValue.doubleValueRange.minValue; + // 最大值 + Double maxVal = param.rangeTypeValue.doubleValueRange.maxValue; + } + } + + public UInt32 m_scanCount = 1; + public Boolean m_break = false; + } +} diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.resx b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/test/scannerlib/c#/WindowsFormsApp1/HGScannerLib.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/HGScannerLib.cs similarity index 100% rename from test/scannerlib/c#/WindowsFormsApp1/HGScannerLib.cs rename to test/scannerlib/huagao/c#/WindowsFormsApp1/HGScannerLib.cs diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Program.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Program.cs new file mode 100644 index 00000000..1561dc46 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace WindowsFormsApp1 +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..187bd623 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("WindowsFormsApp1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WindowsFormsApp1")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("e364d770-bb5c-400a-902e-213a3dadcbd5")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.Designer.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.Designer.cs new file mode 100644 index 00000000..7a2f3472 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + + +namespace WindowsFormsApp1.Properties +{ + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsFormsApp1.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.resx b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.Designer.cs b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.Designer.cs new file mode 100644 index 00000000..3cdaf800 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace WindowsFormsApp1.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.settings b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.csproj b/test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.csproj new file mode 100644 index 00000000..67d99ae5 --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.csproj @@ -0,0 +1,81 @@ + + + + + Debug + AnyCPU + {E364D770-BB5C-400A-902E-213A3DADCBD5} + WinExe + WindowsFormsApp1 + WindowsFormsApp1 + v4.0 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.sln b/test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.sln new file mode 100644 index 00000000..d528cfab --- /dev/null +++ b/test/scannerlib/huagao/c#/WindowsFormsApp1/WindowsFormsApp1.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32228.343 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsApp1", "WindowsFormsApp1.csproj", "{E364D770-BB5C-400A-902E-213A3DADCBD5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8B1D5CE6-959A-4477-B3BE-E7DEDDE78BB6} + EndGlobalSection +EndGlobal diff --git a/test/scannerlib/huagao/main.cpp b/test/scannerlib/huagao/main.cpp new file mode 100644 index 00000000..b28bd391 --- /dev/null +++ b/test/scannerlib/huagao/main.cpp @@ -0,0 +1,176 @@ +#include +#include +#include +#include +#include "HGScannerLib.h" + +#define DELEAY_MS(x) std::this_thread::sleep_for(std::chrono::milliseconds((x))) +using namespace std; + +//有图事件回调 +static void HGAPI DeviceScanImageFunc(HGLibDevice device, HGLibImage image, HGPointer param) +{ + static int indeximg = 0; + string savepath = std::to_string(++indeximg) + ".jpg"; + cout << "save image : " << savepath << endl; + auto ret = HGLib_SaveImage(image, savepath.c_str(), 0); + cout << "save image : " << savepath << (ret ? " success" : " failed") << endl; +} + +//设备热拔插事件回调 +static void HGAPI DeviceHotPlugEvent(HGUInt event, const HGChar *deviceName, HGPointer param) +{ + cout << "Devices : " << deviceName << " DeviceHotPlugEvent : " << (event == HGLIB_DEVHOTPLUG_EVENT_ARRIVE ? "HGLIB_DEVHOTPLUG_EVENT_ARRIVE " : "HGLIB_DEVHOTPLUG_EVENT_LEFT") << endl; +} + +//扫描状态事件回调 +static void HGAPI DeviceScanEvent(HGLibDevice device, HGUInt event, HGBool err, const HGChar *info, HGPointer param) +{ + switch (event) + { + case HGLIB_DEVSCAN_EVENT_BEGIN: + cout << "DeviceScanEvent Start Scan" << endl; + break; + case HGLIB_DEVSCAN_EVENT_END: + cout << "DeviceScanEvent Scan stopped" << endl; + break; + case HGLIB_DEVSCAN_EVENT_INFO: + cout << "DeviceScanEvent info : " << info << endl; + break; + default: + cout << "Unkownun DeviceScanEvent " << event << endl; + break; + } +} + +int main(unsigned char argc, unsigned char *argv[]) +{ + std::cout << "*********Enter Scanner SDK Demo *********" << std::endl; + HGLib_InitDevice(DeviceHotPlugEvent, 0); //初始化调用模块 + DELEAY_MS(5000); + + HGChar **devNameList = HGLib_GetDeviceNameList(); //获取已连接的设备列表,已字符数组的形式返回 + if (devNameList) + { + HGLibDevice dev = HGLib_OpenDevice(devNameList[0]); //此示例代码中调用设备列表中第一个设备 + if (dev) + { + + HGUInt grpCount = 0; + HGLibDeviceParamGroup *groups = HGLib_GetDeviceParamGroupList(dev, &grpCount); + if (groups) + { + //获取sdk支持的功能项及配置项内容 + for (size_t i = 0; i < grpCount; i++) + { + cout << "group: " << groups[i].group << endl; + for (size_t j = 0; j < groups[i].paramCount; j++) + { + cout << " option: " << groups[i].param[j].option + << " type: " << groups[i].param[j].type << endl; + switch (groups[i].param[j].rangeType) + { + case HGLIB_OPTION_VALUERANGETYPE_INTLIST: + for (size_t k = 0; k < groups[i].param[j].intValueList.count; k++) + { + cout<<"support value["< + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(301, 157); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(166, 65); + this.button1.TabIndex = 0; + this.button1.Text = "扫描"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.button1); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button1; + } +} + diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.cs b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.cs new file mode 100644 index 00000000..8b733879 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Timers; +using System.Threading; + +namespace WindowsFormsApp1 +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + UIntPtr image = HGScannerLib.HGLib_LoadImage(StringToUtf8("1.jpg")); + if (UIntPtr.Zero != image) + { + HGScannerLib.HGLibSaveImageParam saveParam; + saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam)); + saveParam.jpegQuality = 80; + saveParam.tiffCompression = 4; + saveParam.tiffJpegQuality = 80; + saveParam.ocr = 0; + HGScannerLib.HGLib_SaveImage(image, StringToUtf8("2.jpg"), ref saveParam); + HGScannerLib.HGLib_ReleaseImage(image); + } + + HGScannerLib.HGLibDeviceHotPlugEventFunc fun = new HGScannerLib.HGLibDeviceHotPlugEventFunc(DeviceHotPlugEventFunc); + HGScannerLib.HGLib_InitDevice(fun, this.Handle); + Thread.Sleep(500); + + IntPtr deviceNameList = HGScannerLib.HGLib_GetDeviceNameList(); + if (IntPtr.Zero != deviceNameList) + { + // 获取设备列表 + int i = 0; + IntPtr deviceName = Marshal.ReadIntPtr(deviceNameList, 0); + while (IntPtr.Zero != deviceName) + { + String deviceNameText = Utf8ToString(deviceName); + ++i; + deviceName = Marshal.ReadIntPtr(deviceNameList, Marshal.SizeOf(typeof(IntPtr)) * i); + } + + // 打开第一个设备 + UIntPtr device = HGScannerLib.HGLib_OpenDevice(Marshal.ReadIntPtr(deviceNameList, 0)); + if (UIntPtr.Zero != device) + { + // 获取序列号 + Byte[] sn = new Byte[60]; + IntPtr snAddr = Marshal.UnsafeAddrOfPinnedArrayElement(sn, 0); + HGScannerLib.HGLib_GetDeviceSN(device, snAddr, 60); + String snText = Utf8ToString(snAddr); + + // 获取固件版本号 + Byte[] fwVer = new Byte[60]; + IntPtr fwVerAddr = Marshal.UnsafeAddrOfPinnedArrayElement(fwVer, 0); + HGScannerLib.HGLib_GetDeviceFWVersion(device, fwVerAddr, 60); + String fwVerText = Utf8ToString(fwVerAddr); + + // 设置待纸扫描 + Int32[] dzsm = new Int32[1]; + dzsm[0] = 1; + Int32 ret1 = HGScannerLib.HGLib_SetDeviceParam(device, 67, + Marshal.UnsafeAddrOfPinnedArrayElement(dzsm, 0)); + + // 设置旋转90度 + UInt32[] rotate = new UInt32[1]; + rotate[0] = 67; + Int32 ret2 = HGScannerLib.HGLib_SetDeviceParam(device, 59, + Marshal.UnsafeAddrOfPinnedArrayElement(rotate, 0)); + + // 设置伽马值 + Double[] gamma = new Double[1]; + gamma[0] = 1.0; + Int32 ret3 = HGScannerLib.HGLib_SetDeviceParam(device, 35, + Marshal.UnsafeAddrOfPinnedArrayElement(gamma, 0)); + + // 获取旋转的配置 + IntPtr rotateParam = HGScannerLib.HGLib_GetDeviceParam(device, 59); + if (IntPtr.Zero != rotateParam) + { + HGScannerLib.HGLibDeviceParam param = (HGScannerLib.HGLibDeviceParam) + Marshal.PtrToStructure(rotateParam, typeof(HGScannerLib.HGLibDeviceParam)); + + // print param + PrintParam(ref param); + + HGScannerLib.HGLib_ReleaseDeviceParam(rotateParam); + } + + // 获取所有配置 + UInt32 groupCount = 0; + IntPtr groupParamList = HGScannerLib.HGLib_GetDeviceParamGroupList(device, ref groupCount); + if (IntPtr.Zero != groupParamList) + { + for (int groupIdx = 0; groupIdx < (int)groupCount; ++groupIdx) + { + HGScannerLib.HGLibDeviceParamGroup group = (HGScannerLib.HGLibDeviceParamGroup) + Marshal.PtrToStructure(groupParamList + Marshal.SizeOf(typeof(HGScannerLib.HGLibDeviceParamGroup)) * groupIdx, + typeof(HGScannerLib.HGLibDeviceParamGroup)); + + // 组名 + UInt32 groupName = group.group; + // 组内配置的数量 + UInt32 paramCount = group.paramCount; + + for (int paramIdx = 0; paramIdx < group.paramCount; ++paramIdx) + { + HGScannerLib.HGLibDeviceParam param = (HGScannerLib.HGLibDeviceParam) + Marshal.PtrToStructure(group.param + Marshal.SizeOf(typeof(HGScannerLib.HGLibDeviceParam)) * paramIdx, + typeof(HGScannerLib.HGLibDeviceParam)); + + // print param + PrintParam(ref param); + } + } + + HGScannerLib.HGLib_ReleaseDeviceParamGroupList(groupParamList, groupCount); + } + + // 扫描 + m_break = false; + HGScannerLib.HGLibDeviceScanEventFunc eventFunc = new HGScannerLib.HGLibDeviceScanEventFunc(DeviceScanEventFunc); + HGScannerLib.HGLibDeviceScanImageFunc imageFunc = new HGScannerLib.HGLibDeviceScanImageFunc(DeviceScanImageFunc); + Int32 scanRet = HGScannerLib.HGLib_StartDeviceScan(device, eventFunc, this.Handle, imageFunc, this.Handle); + if (0 != scanRet) + { + while (!m_break) + { + Thread.Sleep(100); + } + + HGScannerLib.HGLib_StopDeviceScan(device); + } + + HGScannerLib.HGLib_CloseDevice(device); + } + + HGScannerLib.HGLib_ReleaseDeviceNameList(deviceNameList); + } + + HGScannerLib.HGLib_DeinitDevice(); + } + + public void DeviceHotPlugEventFunc(UInt32 evt, IntPtr deviceName, IntPtr param) + { + String devNameText = Utf8ToString(deviceName); + } + + public void DeviceScanEventFunc(UIntPtr device, UInt32 evt, Int32 err, IntPtr info, IntPtr param) + { + if (evt == 2) + { + m_break = true; + } + else if (3 == evt) + { + String infoText = Utf8ToString(info); + } + } + + public void DeviceScanImageFunc(UIntPtr device, UIntPtr image, IntPtr param) + { + String fileName = String.Format("Scan_{0}.jpg", m_scanCount); + ++m_scanCount; + + HGScannerLib.HGLibSaveImageParam saveParam; + saveParam.size = (UInt32)Marshal.SizeOf(typeof(HGScannerLib.HGLibSaveImageParam)); + saveParam.jpegQuality = 80; + saveParam.tiffCompression = 4; + saveParam.tiffJpegQuality = 80; + saveParam.ocr = 0; + HGScannerLib.HGLib_SaveImage(image, StringToUtf8(fileName), ref saveParam); + } + + public String Utf8ToString(IntPtr str) + { + if (IntPtr.Zero == str) + { + return ""; + } + + int len = 0; + while (0 != Marshal.ReadByte(str, len)) + { + ++len; + } + + if (0 == len) + { + return ""; + } + + Byte[] utf8 = new Byte[len]; + Marshal.Copy(str, utf8, 0, len); + return Encoding.UTF8.GetString(utf8); + } + + public IntPtr StringToUtf8(String str) + { + if (str.Length == 0) + { + return IntPtr.Zero; + } + + Byte[] src = Encoding.UTF8.GetBytes(str); + Byte[] dst = new Byte[src.Length + 1]; + for (int i = 0; i < src.Length; ++i) + dst[i] = src[i]; + dst[dst.Length - 1] = 0; + return Marshal.UnsafeAddrOfPinnedArrayElement(dst, 0); + } + + public void PrintParam(ref HGScannerLib.HGLibDeviceParam param) + { + // 配置名 + UInt32 option = param.option; + + if (1 == param.type) // 整型 + { + Int32 value = param.typeValue.intValue; + } + else if (2 == param.type) // 枚举 + { + UInt32 value = param.typeValue.enumValue; + } + else if (3 == param.type) // 双精度浮点 + { + Double value = param.typeValue.doubleValue; + } + else if (4 == param.type) // BOOL + { + Int32 value = param.typeValue.boolValue; + } + + if (param.rangeType == 1) // 整型列表 + { + Int32[] intValueList = new Int32[param.rangeTypeValue.intValueList.count]; + Marshal.Copy(param.rangeTypeValue.intValueList.value, intValueList, 0, (int)param.rangeTypeValue.intValueList.count); + } + else if (param.rangeType == 2) // 枚举列表 + { + Int32[] enumValueList = new Int32[param.rangeTypeValue.enumValueList.count]; + Marshal.Copy(param.rangeTypeValue.enumValueList.value, enumValueList, 0, (int)param.rangeTypeValue.enumValueList.count); + } + else if (param.rangeType == 3) // 双精度浮点列表 + { + Double[] doubleValueList = new Double[param.rangeTypeValue.doubleValueList.count]; + Marshal.Copy(param.rangeTypeValue.doubleValueList.value, doubleValueList, 0, (int)param.rangeTypeValue.doubleValueList.count); + } + else if (param.rangeType == 4) // 整型范围 + { + // 最小值 + Int32 minVal = param.rangeTypeValue.intValueRange.minValue; + // 最大值 + Int32 maxVal = param.rangeTypeValue.intValueRange.maxValue; + } + else if (param.rangeType == 5) // 双精度浮点范围 + { + // 最小值 + Double minVal = param.rangeTypeValue.doubleValueRange.minValue; + // 最大值 + Double maxVal = param.rangeTypeValue.doubleValueRange.maxValue; + } + } + + public UInt32 m_scanCount = 1; + public Boolean m_break = false; + } +} diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.resx b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/HGScannerLib.cs b/test/scannerlib/lanxum/c#/WindowsFormsApp1/HGScannerLib.cs new file mode 100644 index 00000000..dbe9ba4b --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/HGScannerLib.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; + +namespace WindowsFormsApp1 +{ + public class HGScannerLib + { + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibSaveImageParam + { + public UInt32 size; + public UInt32 jpegQuality; + public UInt32 tiffCompression; + public UInt32 tiffJpegQuality; + public Int32 ocr; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceIntValueList + { + public IntPtr value; // Int32指针 + public UInt32 count; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceEnumValueList + { + public IntPtr value; // UInt32指针 + public UInt32 count; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceDoubleValueList + { + public IntPtr value; // Double指针 + public UInt32 count; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceIntValueRange + { + public Int32 minValue; + public Int32 maxValue; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceDoubleValueRange + { + public Double minValue; + public Double maxValue; + } + + [StructLayout(LayoutKind.Explicit, Pack = 4)] + public struct HGLibDeviceParamType + { + [FieldOffset(0)] public Int32 intValue; + [FieldOffset(0)] public UInt32 enumValue; + [FieldOffset(0)] public Double doubleValue; + [FieldOffset(0)] public Int32 boolValue; + } + + [StructLayout(LayoutKind.Explicit, Pack = 4)] + public struct HGLibDeviceParamRangeType + { + [FieldOffset(0)] public HGLibDeviceIntValueList intValueList; + [FieldOffset(0)] public HGLibDeviceEnumValueList enumValueList; + [FieldOffset(0)] public HGLibDeviceDoubleValueList doubleValueList; + [FieldOffset(0)] public HGLibDeviceIntValueRange intValueRange; + [FieldOffset(0)] public HGLibDeviceDoubleValueRange doubleValueRange; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceParam + { + public UInt32 option; + public UInt32 type; + public HGLibDeviceParamType typeValue; + public UInt32 rangeType; + public HGLibDeviceParamRangeType rangeTypeValue; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct HGLibDeviceParamGroup + { + public UInt32 group; + public IntPtr param; // HGLibDeviceParam指针 + public UInt32 paramCount; + } + + public delegate void HGLibDeviceHotPlugEventFunc(UInt32 evt, IntPtr deviceName, IntPtr param); + public delegate void HGLibDeviceScanEventFunc(UIntPtr device, UInt32 evt, Int32 err, IntPtr info, IntPtr param); + public delegate void HGLibDeviceScanImageFunc(UIntPtr device, UIntPtr image, IntPtr param); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_LoadImage")] + public static extern UIntPtr HGLib_LoadImage(IntPtr filePath); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_SaveImage")] + public static extern Int32 HGLib_SaveImage(UIntPtr image, IntPtr filePath, ref HGLibSaveImageParam saveParam); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_ReleaseImage")] + public static extern Int32 HGLib_ReleaseImage(UIntPtr image); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_InitDevice")] + public static extern Int32 HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, IntPtr param); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_DeinitDevice")] + public static extern Int32 HGLib_DeinitDevice(); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_GetDeviceNameList")] + public static extern IntPtr HGLib_GetDeviceNameList(); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_ReleaseDeviceNameList")] + public static extern Int32 HGLib_ReleaseDeviceNameList(IntPtr deviceNameList); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_OpenDevice")] + public static extern UIntPtr HGLib_OpenDevice(IntPtr deviceName); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_CloseDevice")] + public static extern Int32 HGLib_CloseDevice(UIntPtr device); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_GetDeviceSN")] + public static extern Int32 HGLib_GetDeviceSN(UIntPtr device, IntPtr sn, UInt32 maxLen); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_GetDeviceFWVersion")] + public static extern Int32 HGLib_GetDeviceFWVersion(UIntPtr device, IntPtr fwVersion, UInt32 maxLen); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_SetDeviceParam")] + public static extern Int32 HGLib_SetDeviceParam(UIntPtr device, UInt32 option, IntPtr data); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_GetDeviceParamGroupList")] + public static extern IntPtr HGLib_GetDeviceParamGroupList(UIntPtr device, ref UInt32 count); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_GetDeviceParam")] + public static extern IntPtr HGLib_GetDeviceParam(UIntPtr device, UInt32 option); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_ReleaseDeviceParamGroupList")] + public static extern Int32 HGLib_ReleaseDeviceParamGroupList(IntPtr devParamGroup, UInt32 count); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_ReleaseDeviceParam")] + public static extern Int32 HGLib_ReleaseDeviceParam(IntPtr devParam); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_ResetDeviceParam")] + public static extern Int32 HGLib_ResetDeviceParam(UIntPtr device); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_DeviceIsPaperOn")] + public static extern Int32 HGLib_DeviceIsPaperOn(UIntPtr device); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_StartDeviceScan")] + public static extern Int32 HGLib_StartDeviceScan(UIntPtr device, HGLibDeviceScanEventFunc eventFunc, IntPtr eventParam, + HGLibDeviceScanImageFunc imageFunc, IntPtr imageParam); + + [DllImport("LSCScannerLib.dll", EntryPoint = "HGLib_StopDeviceScan")] + public static extern Int32 HGLib_StopDeviceScan(UIntPtr device); + } +} diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Program.cs b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Program.cs new file mode 100644 index 00000000..1561dc46 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace WindowsFormsApp1 +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..187bd623 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("WindowsFormsApp1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WindowsFormsApp1")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("e364d770-bb5c-400a-902e-213a3dadcbd5")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.Designer.cs b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.Designer.cs new file mode 100644 index 00000000..7a2f3472 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + + +namespace WindowsFormsApp1.Properties +{ + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsFormsApp1.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.resx b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.Designer.cs b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.Designer.cs new file mode 100644 index 00000000..3cdaf800 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace WindowsFormsApp1.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.settings b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.csproj b/test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.csproj new file mode 100644 index 00000000..67d99ae5 --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.csproj @@ -0,0 +1,81 @@ + + + + + Debug + AnyCPU + {E364D770-BB5C-400A-902E-213A3DADCBD5} + WinExe + WindowsFormsApp1 + WindowsFormsApp1 + v4.0 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.sln b/test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.sln new file mode 100644 index 00000000..d528cfab --- /dev/null +++ b/test/scannerlib/lanxum/c#/WindowsFormsApp1/WindowsFormsApp1.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32228.343 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsApp1", "WindowsFormsApp1.csproj", "{E364D770-BB5C-400A-902E-213A3DADCBD5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E364D770-BB5C-400A-902E-213A3DADCBD5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8B1D5CE6-959A-4477-B3BE-E7DEDDE78BB6} + EndGlobalSection +EndGlobal diff --git a/test/scannerlib/lanxum/main.cpp b/test/scannerlib/lanxum/main.cpp new file mode 100644 index 00000000..b28bd391 --- /dev/null +++ b/test/scannerlib/lanxum/main.cpp @@ -0,0 +1,176 @@ +#include +#include +#include +#include +#include "HGScannerLib.h" + +#define DELEAY_MS(x) std::this_thread::sleep_for(std::chrono::milliseconds((x))) +using namespace std; + +//有图事件回调 +static void HGAPI DeviceScanImageFunc(HGLibDevice device, HGLibImage image, HGPointer param) +{ + static int indeximg = 0; + string savepath = std::to_string(++indeximg) + ".jpg"; + cout << "save image : " << savepath << endl; + auto ret = HGLib_SaveImage(image, savepath.c_str(), 0); + cout << "save image : " << savepath << (ret ? " success" : " failed") << endl; +} + +//设备热拔插事件回调 +static void HGAPI DeviceHotPlugEvent(HGUInt event, const HGChar *deviceName, HGPointer param) +{ + cout << "Devices : " << deviceName << " DeviceHotPlugEvent : " << (event == HGLIB_DEVHOTPLUG_EVENT_ARRIVE ? "HGLIB_DEVHOTPLUG_EVENT_ARRIVE " : "HGLIB_DEVHOTPLUG_EVENT_LEFT") << endl; +} + +//扫描状态事件回调 +static void HGAPI DeviceScanEvent(HGLibDevice device, HGUInt event, HGBool err, const HGChar *info, HGPointer param) +{ + switch (event) + { + case HGLIB_DEVSCAN_EVENT_BEGIN: + cout << "DeviceScanEvent Start Scan" << endl; + break; + case HGLIB_DEVSCAN_EVENT_END: + cout << "DeviceScanEvent Scan stopped" << endl; + break; + case HGLIB_DEVSCAN_EVENT_INFO: + cout << "DeviceScanEvent info : " << info << endl; + break; + default: + cout << "Unkownun DeviceScanEvent " << event << endl; + break; + } +} + +int main(unsigned char argc, unsigned char *argv[]) +{ + std::cout << "*********Enter Scanner SDK Demo *********" << std::endl; + HGLib_InitDevice(DeviceHotPlugEvent, 0); //初始化调用模块 + DELEAY_MS(5000); + + HGChar **devNameList = HGLib_GetDeviceNameList(); //获取已连接的设备列表,已字符数组的形式返回 + if (devNameList) + { + HGLibDevice dev = HGLib_OpenDevice(devNameList[0]); //此示例代码中调用设备列表中第一个设备 + if (dev) + { + + HGUInt grpCount = 0; + HGLibDeviceParamGroup *groups = HGLib_GetDeviceParamGroupList(dev, &grpCount); + if (groups) + { + //获取sdk支持的功能项及配置项内容 + for (size_t i = 0; i < grpCount; i++) + { + cout << "group: " << groups[i].group << endl; + for (size_t j = 0; j < groups[i].paramCount; j++) + { + cout << " option: " << groups[i].param[j].option + << " type: " << groups[i].param[j].type << endl; + switch (groups[i].param[j].rangeType) + { + case HGLIB_OPTION_VALUERANGETYPE_INTLIST: + for (size_t k = 0; k < groups[i].param[j].intValueList.count; k++) + { + cout<<"support value["< 不进行多流输出类型 +Ret = HGLib_SetDeviceParam(Device, 1, byref(DevParam)) #见HGLib_SetDeviceParam 头文件接口说明 1 -> HGLIB_OPTION_NAME_DLSC 多流输出 + + +#扫描事件回调 +def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: c_char_p, param: c_void_p): + s_info=info + global bStop + print("event code",event," event info:",s_info) + if event == 2:#HGLIB_DEVSCAN_EVENT_END 扫描停止 + bStop=True + print("bStop true") + elif event == 1: + bStop=False + print("bStop false") + return +imgindex=0 +#扫描图像事件回调 +def HGLibDeviceScanImageFunc(device: c_void_p, image: c_void_p, param: c_void_p): + global imgindex + ImageParam = HGLibSaveImageParam() + ImageParam.size = sizeof(ImageParam) + ImageParam.jpegQuality = 80 + ImageParam.tiffCompression = 4 + ImageParam.tiffJpegQuality = 80 + ImageParam.ocr = 0 + print("image call back!!") + imgindex+=1 + t_index=imgindex + imgname=str(t_index) + '_scanned.jpg' + print(imgname) + b_imagename=imgname.encode('utf-8') + pchar=c_char_p(b_imagename) + Ret = HGLib_SaveImage(image, pchar, pointer(ImageParam)) + return + +#注册扫描相关事件并启动扫描 +FuncType1 = CFUNCTYPE(None, c_void_p, c_uint, c_int, c_char_p, c_void_p) +cb1 = FuncType1(HGLibDeviceScanEventFunc) +FuncType2 = CFUNCTYPE(None, c_void_p, c_void_p, c_void_p) +cb2 = FuncType2(HGLibDeviceScanImageFunc) +HGLib_StartDeviceScan = Objdll.HGLib_StartDeviceScan +HGLib_StartDeviceScan.argtypes = [c_void_p, FuncType1, c_void_p, FuncType2, c_void_p] +HGLib_StartDeviceScan.restyped = ctypes.c_int +print("start scan") +Ret = HGLib_StartDeviceScan(Device, cb1, 0, cb2, 0) + +#模拟扫描持续应等待扫描事件回调返回扫描停止才结束本次扫描流程 +while(not bStop): + time.sleep(1) + print("scanning...") + + +print("scan done!!!") + +#关闭当前打开的设备 +HGLib_CloseDevice=Objdll.HGLib_CloseDevice +HGLib_CloseDevice.argtypes = [c_void_p] +HGLib_CloseDevice.restype = ctypes.c_int +HGLib_CloseDevice(Device) +print("Close Devices") + +#释放设备列表资源 +HGLib_ReleaseDeviceNameList=Objdll.HGLib_ReleaseDeviceNameList +HGLib_ReleaseDeviceNameList.argtypes=[POINTER(ctypes.c_char_p)] +HGLib_ReleaseDeviceNameList.restype = ctypes.c_int +HGLib_ReleaseDeviceNameList(DeviceNameList) +print("ReleaseDeviceNameList done") + +print("exit test") + +