From 043d0b26c6586cb441f9ebaae56dbcd12ee05c36 Mon Sep 17 00:00:00 2001 From: marcelb Date: Thu, 20 Jul 2023 20:09:11 +0200 Subject: [PATCH] Sync and async server --- .vscode/settings.json | 3 ++- lib/tcp_socket.hpp | 14 +++-------- src/tcp_socket.cpp | 57 ++++++++++++++++++++++-------------------- test/server.cpp | 29 +++++++++++++-------- test/server.o | Bin 79296 -> 70616 bytes 5 files changed, 55 insertions(+), 48 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index adb4a79..11e5997 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -44,6 +44,7 @@ "stdexcept": "cpp", "streambuf": "cpp", "cinttypes": "cpp", - "typeinfo": "cpp" + "typeinfo": "cpp", + "thread": "cpp" } } \ No newline at end of file diff --git a/lib/tcp_socket.hpp b/lib/tcp_socket.hpp index cb12596..e38eac1 100644 --- a/lib/tcp_socket.hpp +++ b/lib/tcp_socket.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -25,26 +26,19 @@ class client; * Server klasa za TCP/IP soket * Instanca se incijalizira kada pokrećemo server */ -// template - class server { public: int sock; struct sockaddr_in addr; SSL_CTX* securefds = NULL; + vector thr; server (const ushort port, const uint queue = 1000, SSL_CTX* _securefds = NULL); ~server (); - // one klijent - client* cli = NULL; - // template - void sync(const uint timeout = 100, void (*func)(Args ...vars)); - - // vector thr; - // vector clis; - // void async(const uint limit, void (*handlecli)(Args ...args) , const uint timeout = 100); + void sync(void (*handlecli)(client&), const uint timeout = 100); + void async(const uint limit, void (*handlecli)(client&, mutex&), const uint timeout = 100); }; diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp index 74467fb..90644b0 100644 --- a/src/tcp_socket.cpp +++ b/src/tcp_socket.cpp @@ -32,36 +32,42 @@ server::server (const ushort port, const uint queue, SSL_CTX* _securefds) { } -template -void server::sync(const uint timeout, void (*func)(Args ...vars)) { +/** + * Metoda za sinkroni rad s klijentima, prima pokazivač na funkciju i timeout; + * Funkcija handlecli prima referencu tipa client - važno za definiranje funkcija koje se šalju; + * Nije moguće proslijediti druge parametre; +*/ + +void server::sync(void (*handlecli)(client&), const uint timeout) { do { - if (cli != NULL) { - cli->~client(); - cli = NULL; - } - cli = new client(this, timeout, securefds); - // callback - func(); + client cli(this, timeout, securefds); + handlecli(cli); } while (true); } -// template -// void server::async(const uint limit, void (*handlecli)(Args ...args), const uint timeout) { -// do { -// for (uint i=0; i~client(); -// } -// thr.clear(); -// clis.clear(); +void server::async(const uint limit, void (*handlecli)(client&, mutex&), const uint timeout) { + mutex io; + do { + for (uint i=0; i~client(); - cli = NULL; - if (sock<=0) { throw string("[ERROR] The socket is already closed "); } diff --git a/test/server.cpp b/test/server.cpp index d8c0eb6..58d0edc 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -41,19 +41,28 @@ int main() { server myserver(5000, 100); - // myserver.async(8, [](client *cli) { - // cout << "Klijent " << cli->ipv4 << endl; - // string fromclient = cli->pull(); - // cout << "S klijenta " << fromclient << endl; - // cli->push(fromclient); - // }, 200); - myserver.sync(8, [](client *cli) { - cout << "Klijent " << cli->ipv4 << endl; - string fromclient = cli->pull(); + myserver.async(8, [](client &cli, mutex &io) { + cout << "Klijent " << cli.ipv4 << endl; + string fromclient = cli.pull(); + io.lock(); cout << "S klijenta " << fromclient << endl; - cli->push(fromclient); + io.unlock(); + // fromclient += teststr; + cli.push(fromclient); }, 200); + // string teststr = " Idemooo"; + + // myserver.sync([](client &cli, mutex &io) { + // cout << "Klijent " << cli.ipv4 << endl; + // string fromclient = cli.pull(); + // io.lock(); + // cout << "S klijenta " << fromclient << endl; + // io.unlock(); + // // fromclient += teststr; + // cli.push(fromclient); + // }); + } catch(const string err) { cout << err << endl; diff --git a/test/server.o b/test/server.o index 5a4e551d0d90a4c4401379232ed2bd86107af2d0..65bc4f7590acfbf127b384c895018ddb724ca611 100755 GIT binary patch literal 70616 zcmeIb4SZC^)jxjovJe3!SZz^JSBou(#%vNWplEnm*~r_P1jN_NX0suyNj7daf%w#l z1})o|HdbkA)jqV+mRfDms-@PKplD*NHdBiK$@1+L1O-g;8!CZd4d2 z8D3);==u1k_?&QSE{M1kERabf50LVWrJF2poJ1Q6s?rHkKDTS>=Osl!qfn+PpNDRX zW!ec}_e;EjdOlI!O3vqiffFTOK|LSYru;5RFMlW#ri3zv;TUxKXt)3x!7}w3;t-A_L}D+|5caze&k}GZ@HBF zFBiZ4g^T=h7ycd>`A@pk>k}9J2QG3<7rz?qQs1acf7$3_&(mDWUFK5mR2TirT=aR~ zMgFxecK)>s|AQ|0cU}DXFD~u%q>G;~anYySr5`0+?DMjVoSR(m_qpIrmwNeK>~Ot{ z{qtPpobBQd^IhuO;ex-~#owTg;l)4a^%)oapLUVI-G%=+mwK&5f!X5K@xXhX${>BC zi~Q4E_}hTbCV#z)obz1xzw6?k7r5AS3gn**Sy~$*9pwf@u+O@!hJ)0C`P8EfWMo2`*}dn9f)MG_6MI-|OJo;j;#iP_c~F~gB~B3d5}hY}I9 zJ_@-+Tpo`m-T1K{(dj90^Miq)mN1BFj{&1>@0ns5LjzVQZ#}7t9$2h2tG9iI`zt zyr4R9rfG&(tnm4KCAFc}Xc$I{N1K;bhN}}kU$`L@HxuztG|^fa_E(4S$L}jOp<%40 z!z5~}KNt?q4OgEDt6scd?tzP&(imx8mT2&|BY$IACmKe#HKX~I)Ni4b&`0$8eVG6>R1WHEjip}4I%dR1G*Y)Ql`7gU?7 zWKhcLBK4uR#ss{sF_MT>R{Ko9KX_hyJE>Kjm+6Q&Qp_WiMn&|L1 z!HdHyLgq4fP-F!;R1_`^twdpsXdt&1s{)}^Hf{{98woX4)|fTLrXQ_VHP>CS>N2x> zvROm5LK$_9!FK3?ijW)3_K6mA&+MwrESa-9Q5I>gYs{v#-(BG;!p#oc%X}qd%2+e1 z-xf|(!lC^B_8POg9DY<%Tpx=s55?^)IgmCT+qyM)?LND*aINVB|( z;^m4JW=kaA8fy+U!u!njVp0wrAbSsF;bm9EqRj{E7@=yv?C8?N*iQ~7rc4%5Oy~il zlxG+^9uIYxh>RRyMAtlsuw{i1*|$ZP5GFmCj*hBU%|&k$jfkE+v?FKh65$&3;K`=6 zS@Uw)Hxrp2tBiQyJ!UF(7{m$$*{UWLd*T=q5uBw%9q7Pe^`3(nauAmh_js(}svf8U z=$DB5(bkq&YlNMnEF5b~a6dpevij0N#5IhI^G)>PP@^1M$T856Qutyv&V6T4y5$!I>+6pA(*t>BF$q-0DjfJnr{Egf6{ zyl6!7%02!wp#N3C7)j^EaXY2;*5!w;dbB$|%p+YUR%{J_SbYOUwG^ zTJ=@W2cU$w2B%3_!Rsf5pMQ?T2ORjwOo~TPT}bi|IPl(;62HxXujrKcf?kFa7%E-p!1r^01!-AGYiVU)RS&|St>IIg zkML+P>)P;`yd@m%rK@YBhCf;%0XJ#*OEi41hWBdtehoiY!w+cq3pD&z4PUL{w`q9V z8&cQUUU^6L3MeF?T7SdY#q$A0s_2z>guhH70m~ne2`tm$^Y≫nC5oE1==AgtxAs zhR4={buH2GRJOX7YIrJJT@4yu^#P)_Xn1rh>sq1Vx$6nqN)3-dVqL2>{3r`+7(E&u z9o@RtYWO28EbOe|M{D>E8eaJ(kvD31eSdqChS&FVdNurKH2M7+o}MqMYe2()Rv`hm zYWUA-_-z_~tcFi%_+vEupoTwI!|&Gc$7y)uQJJ8&RnK$@Q=s8bkSyYFp@u(E!;jVQ zCuw-EhCf-uPtfq6*YL#}e!PY+*YKxk_zDgG1q~n2@L$yMK@C4a!!ObB6E*x&4S%YJ zZ_x0QG<=JOr#(S+t)r)l_&B^VX`M7HfFF#$T@C&(rV~ z8h(z34`}#G4Ik9-=WF;S8h)OJU#j8fYxo8Yzd*ycX!wO1euah)YWS5JzDmQd*6=kN zzDL6^((r3F{9+BiPQzcQ;Sb#&vcMq=9J0V63mme*AqyO`z#$79vcMq=9J0XwS1j=U z=o3B;bnYw&ba^&^9b1Pt^d@rC1A)#h1y2YS)01<%4P#gOlstgZCmO`xK$KnEUr(pg zJt9pTg}b&tZ>4F2aM$+DR+=^jcWuAdO4EkmuI=Bm(zFq{Yx~Vsnl@o~ZNJV+)1rCT z_N%NkZ3OPx9QH|xO&iOozm=v9JJjDw z(?%WYZ>4F24)wRvv@wVJTWQ*mL;bBZZN#DeR+={8P=70Zyhx9+(kF;?j+H)9q~H5Q z)!!@9uUl!_h(rCYG;P44{#Kec-cWxlO&e~gzm=wqHq_rr(*_&rZ>4Et4fVIuw4sLj zTWQ)zL;bBZZJ?q4R+=`>P=6~;8)m4#l|Egh$5?6FAVd3GY1$Y=`|nZprwuW*zm=wq zFx1~l(*_voZ>4GD3-!0swBd#NTWQ+pLjA2YZE&IfR+=`pP=6~;8(OHpm8Oj>)Za?e z1{UgXrD@{|^|#XWKm_%-(zJoKYx@{0O&eFJzm+~$q~H6Os(*z@ziy>zg9`Px(zG#! z`dew*kV5^fG;Kto{#KecpiqA+O&d?Bzm=v9C)D3c2Shq#rD@{{^|#Wr;e`5I>A529 zv(mKjg!)_Q`64|=r4jAAze>>#dQyDLlK$i?ne=}+(tmTL-*Tk?>`4FKk$%>Ze$tVC z#F2i$k-o=~{(&QXha!P;(x2SuXn#lgZ;td^j`W`$>EAoj&pOgiI?|6g(hoS&_c+o& zaHQ{Wq}Mpo-H!APj`TH-bekjHB}7HMUM1*N80a5Pj{pzJJP2+(x*7m$2-zT zJJN?c(jG_plN%iE?@0g6k$%gO{<9(WPef%Aju@n{>k4bF!9qsaxk#@-E#w*cjpCio(eqwY2qjd zn9c$U(%b4q99H=$9?-c z%()DCt@0`V_T@CQTZBxTXy$s^6XL!a)8G|>ham3M=`s_bhJ=~ALeGm9jb%9B;{)uTjO37}4 zy&T3)vM=_iPh>QtjsfNsEL9@n#I5ImuMv8p*s9|bT#JMq(C9o1W@*8 zbblAbNc(O4Wj`?$;13b5#l#;>8|nUkG3nm~Jep$>RsAT@^rKfj4b*m0kSkl6d{Jd- zM3#BUZ97INJ0!7i+MSaa$wnv?&LQk^iq(WDOf=Xnwy_%MR;WR)b=UP$x%;S1x{e+x zk|Im7Xhf-Q-A6F+wUD}f4r-?q;JVBqVy!4rl>Qamrm84+=a%3lGcL7lN)3{{W>2zh zcjq;Ga@x+i?i%QVu2lj>N`!ayr4A!O-JX}PBfa2-o?`^zDRk5C3S3|6L*(kQoB2_a z@fh{3)GeY3^|nuS!YnuRj$YHdsyA_j^nkw9DrmREBO2i8CowU0!%j zikz34^hT7O^zT8(Am_o*>Og@>B z_lw}2pWLZuKME-LGD*4!j+Yt_1H)TZz*}Zqmf}lV{gJQ7$STG3I7ILT%eh zU407eUDRxSslR_f>i4BCL{0?#b%D-n))}L3B}Y99em~({>H&SiNmF^m+XbGkim~9` z(C5D$+88^^y8O2X)&{zddXkdh*bvAW2y_`;<*8mFp5nL)0-vHvo&MW%T=HNDZQBU; z+eoPwNU82cw*|WAZ-iLXLyRClfrluTbKyuJX_5Ps9VghaL5Mkycw~@nfyC5VGSBKj zmorei#f9Up6=q1iM>)Gak6%MciVL}dKyl$lf$K}XiW+PEX-Hhi-gEuCg^4*lh^|a4 z;2nok-N+Qn-p>$gk0}1#qaQ2;*Wl;}jq=CQav0mSGO~JCpMQ{AYKJG#=^xB_%KvvX z+M=x_B#=XG^>-d~zlQ$ZIhcbk{E{F#T={)e6{D9{TA|R3Bg^<*LS>6i?ic_=Kishw zvyDwdT=KGh6a#W!ssYudUe)E_BzsjL`C6)!oT>AgUV|oFauok522kkU3x`8&6!9d9 zj@Y#b|K|5fX~Jh>RA0+6xRjX`zocVaNIfmXk36Z*P$14di{P7V<`_G7au> zpt}+%yN^@7%aLm<>OFvZ_YbMJALzc+803NjjDfI$z*+wO#Bfm|j`^UBhQsw?V}qE7 z!?-As42H~Nth`XvhH8(0ox4Z3Pe;F@lsp*9o#(q$sU%I`ppVEmPKpwojQXRfxeRcB zBQiCGDh%_z-=_XLG*jJsXm7~X`r=tT%4A>cOSKP@!cru*7t*OVG_fQ;k@~S{ZYb23 zdJea#Zwu)ey_2R;o!9K9*rdf~U^7#4ngvIm-f6Y?mP0_F|4k}d7KJ$a=8R34hJ*L{heiVmy-?Pdz^W!E ztj$zQo4=4Y=SyvHPo=EK-WzK}`)SZdFg+j|*t6Ku=2Bam?Lt#Des>^Ws`C(SD8nTo zedpiO>CLGV;ow~QugHSJ7DDhdlvxx)rC)BBey5nF$gd#5jwjOL4}exjJy&&b6Y&#H=uoe4quu~L0# z5jmDvF^Oy{>u}BLWZSAhQp~55^M_2;`ux49suAe(_cI(|xRv2Hf_?rT0y{2)qpuEh zFYyXUb2?E8%*wiDEt8mxiB&KL*KV<9UdwU++q9JI_9KZP|5|D(o~p=XU+SBmGmK7u z59Vz>XZcsfZ|n2lDoQ(9mKOAO`ETWEgGt%YaDPFaJN>sJ%dM1!<`Aou7ZT6*^Wg(_ zW24l*)EOv-?Y0HkiAqZ&8bc>g^d8dEnPGJ0J20~d9e*WhHenFy4uTBTyD*mUmJ{d2{XZc8iIlEbk^+-sx6( zrFMC}J4qM2vwm~z5MT48{znL)(b4iHIlg(bSm;q|rN`(`Dhy?1GS~1LsTwPZ9$=&< zZ-<)(@rP`(Nfd!Op&Y3&na9L@^bIS)D1+ta1S4&Z2pdiyy)8q>@wA5xou+veGu=YQ z>hhF{5J`rf)@1SZp+GyB37K`mwy&j5Ls7g=yBA!JuIEWL5?|*QuLxKUi--~5W!|M( zrV>SHmYHTHg=LOQ!7>k$MPQllib^;v)5arL4mdUUJCgEPR=Kp)s_k}~U$IrLAxn07 zPPmGwWR>xa7T>+1FgZQ+|CMCZlo&I0;~_D!%k|K2AOWrOU0SrUA}a*5)jUa(V=3}J z9@eQIt|{^XDc|K;)1nl)?MjPpf>cDz%^!Z-O_3MgvJ@G;>KV&dc8Cm?GJB}PmNH+n zmH8db0@*6dq%sATGDq0T+y(&-Unv)ce=TL8-s~$k4COkKxn71s%w-Pc+9_=JTIznA zYbv;g_}vG@rv^&P?+~a8(G9U2pd|t9+?V>-o5*di2dJ-Jw{s)RgFTidGz=ym2m&Mr zlHCEodC40p0P2%B%mWw_@NN)UtVya&ijCO5)a#^DmqG=o@aKSf2xaNh(CU5{RH;lL@|zkz28@WY!>9cNE$9UdERLZ*M)(uCH9%yoa%u z_k4irOL_ld7j+cf%gXayUQS0+eC6wW*}?2F!LhkcRcqTivScwxf|{y{_WVk;T+ z_W5rT-B&GwD!d%EWLK~7V!-NNbdy|{-zw@T7bP@G5Kotpu~Hv{W|Z@t9&+cC$)eqO zE+`!B(n*%1{Zmea1XDN6jlNyfpd7L+Z1HV|)?GKyqB2|j^7qIEC7wBD#I|g~3u_pq zF>2J4J#1Z%;#An;iPO2F6=|;0MKubN8O1$yos&?=lj=wxJ-Uij+a>S}M&(l9pdW1~t8Ga?mQkE`!vtOf^53q2@$e&37@C z3b1vr7ar#Myrt$uTg?YW6_j@H)0P5cTlY&j{5&rA(|kgJWaOVnN8hxMf9kl^dKP}Iqc zMtfUXiw8Y8(?B~3Tjf)qzSQ9)NlQ=vlT7Qong0~Zkk5*h+z3+0n(>eNg5`^1KFCaM zs4{xdXYov1#*cBP#rI<_Q!K;BL7Jo2CNs=wn_Y{9g`LB0;-0c^+Y=>Ej}nG>r2^Grei46RDTMa z>6s5WNMj6e?$2oGc`5XqzbTOH4|Jw-Aa!eH^4BxOoV_yHKZBn68gi0I4|F@0RR?hP`Q_#xV@BoknuR$r;{oxh&%x4ON#4#M($?{NX25W5Mqz_9jq>6OZ{U zkq#CNB6y~oE%QRoT!+C$>Ep;uM?##MQfDA>kJ=}PVxQ`VzeERMpK(0oq>A-HCbZQk zjzY0`rsv6?)URF;im3uEKa#SAiM}hmL!C|&kA)FM$QIdiWpKVcgwsnMRS!>eV5VET zeyMcCK?GEEJ~+>`6tyVM832=UROXf!Gdz^qSRSH7pMk8YLr*)P%ka({8Z#x;a_tdx zc!m6MNDbL-wm{KL1Bhx-{Bc%I#F4(#&&Bi}z6R|$maG#f)Rac!TxEl=N-W|SVG&^b zRB=9f=t+I&cNrCTwChrlS-N%t_j{|ujeDba1rcf>2T#1Pq?*_-4x}b&AQU)Z1~HTc zwGzJuAKhDtmlLlN5}=q0VZaDM)taE_5cA5`)1u^Q=r>B1T%HgnqjbwDs2Hjaj@E9& zvDyKbej#|^N5aK#l+r8*u%d{oPi)FoK2=fnMp0Wn4#4*``^o5~CFof~ux|E$!(@a^`c~eo{v$IsU`{+BWVPw(Pg$}*+_JDP*<1HsT z4lKzSF(-UzoXrB=@niC^TU~hqvI1VW{M>6qMxbfl3P&$Wki`5lIqfBe9Lj`IqIt;1T|dJi`9(OXmf;0!vZO zo(vZ3C{}st{HL6Y3zgF%Nl$E$RCD-gN^_J&JFO1QJ9m0B)kIm7pc$PNPr}dW2uz|x zitJ0hCx#yCu}WFgK`6VOC<2Y6P*742WYPnbXp;j||h78i^hfNRCAq%y_10jZ;FAz7)yMG9EGYzD%msm9=W> z{ya!$^+!|4=zP2&&~+sANWY-hF`EE~ouu}^rtvI^Hb6(UO*TUsLMxpz4;d550^~|! zY!sceMi_?%kj%mG#%J|0f$Z7(FXz^$|%P@7#b%ZYdrgi#>WW^Ei^6#54ac z{|3>MXbD8OaIqvUGH?&JwxG&d7P3$cfB!7O<_Kb3P|)2NW`OEyBO5!oVavFWUTZ9-0sZ z2+b}hS&{|SD&*U3)RS z`fH-_zSLTRo&McqfZaHsIN0{*9=*e;pupKygMBaLTS4B--0K!WR=r1!8z~XJlfo6y zEPbg3dt{S~*!|RFwDL+lLXWg*X^Y==;P3(3B-8#X)X`Ky%?2_?J}NB$ z%Fx(^alnpC4^v+iHp`4l@1k0^3uTS>H;c|cR;U9*TrZOFw5@@O17cuvw2<;78j!?n zh>rX2MopC47E<-pFDI0f3>n9gboiD2(RcppM`s&ikOgogg7yPW`s#I%o>s7G_=b!>$m#ItkyUx`m!(re!FGW*j;t5 z>+3kfn5nO<8I$#Sech0%Ww4qc+s*78nkCiNR<$6P(=R4MeW}HnLRfvCilKoE>~)Bv zme$m=Q2HQxz~ilW^6noLZmu5!R%MGUa!i)Hk212?XX@ab{J1#H8fPwP9I4hIb#FS~ z3{$(>fDY_r&{ggCxsLyO_OjWwola^od8E@DH(`=O*J$B_Ji{haAdO)KJqzOv4+>3$ z#!TDck@V9vy?#TTk1$q2S_3+5%$n2s8i8zZ^tXCPKiEs>%f#=aj|&Y@H0P@ro*LIHWBn2B9O!#RyRXvI9Csa)>J z2}}Uy)*5A9 zsEkBI#7p1YTOO%HRhnueac`{NyBr_c#CJEn^4p)Stfg(Y8sy>%KyIj!zJl2SZhTRz zj+lq)C1@&-MW03Abfbds)lo0Lh=?z9p`q>k^J1Yop@;pgQ!jn%lz8Y;b)}3!F;ym`KzVW2=b$D!^@W@U4G?8-DK`HV{zZ-Letd|NE+gl-ytB4p1OGOZ_@%qk>7zV`(Rgnu} zz;RDOPrz3IUj!_`&g%z&6R@Q_4$si0VKaX=;C;`)9)K?b_7KGJk4=EJIKHzD@X@X5 zbipWmPY7qOP6IsZPtY4M4On*szBu+uI=vonCSX6{t$^e37`q>^7r(_F_2+cD1wYfA z2G|1_1>6YO3pfDyCg32T@ha+z2T+p$ivgzs1_3VtYytc-U=QG0z>R>v0vrJRJ>VeV zUjPenG-MCpc-Z&I*HAye(*WxLYXDaPeid*%;QfGG07v5J@tc6B0p`O#^8m*KHUiED z>;kMoee-d)I{{b>cq<^C^}ZkQ`+!>k=~VrAye`T62J!*U2CM_5A1JH>TnV@ya2?D#Xz<$7S zXveWQuXHxx3#oK^DPTEHX0HTn0$c}p7vMI)rvdYi#FG`k@qokLL45$L0P6q~fU5xO za3p>M;6}iHzz+aZfRlE@-*9-V7H|S!0x$shUBCvw0{rA_HQ@1p8vxG$><3%`m;&qo zEWodgz6Ce|@Ik-;;46R)fO+`A%WA+9zzu*)0s8^J377(W2(aL2^iRMEfFA$`0FT5E zdl~?X0apWl2XF)6-GKdoTL4pl6S1>ffcMk(0Ga;~m2a#j@P95-rsK@av`36J0C8x8lS(_bKt z*~8IlhA|%h%J6ULkI+95_lzS7&pTr5`J+cJFIZ`ud+fAROUIuKtjK>U;Do!=X)hu8 zBDo3tD+ZootGcMHoAB=ql!x$u_d6X?cw_FY!-t&*g^(or-S}7ZKstQ}phdsJrauGp z^u5q`f<6!Q63Xvq`B6LnDAfCM&`;Fqi)}igbFL1~6P6l&+oCCkah$Rj*@gZUL4P_M zmH!c(PSwHRnU}XXM+l;N(0Qr)`_k!2xVQAEwad8`^f>5ndt1glNvAT%PGQh%sGOgm z995S&H|2Ha=gp>)sGL_o|N76<>BYFWcyi}kdh7xHNzm!!n?(=WdW^$Es+TaHoukv+ zBz*#KM5g>W#!gb^wprZxX`K2D^bQh zpcheD@4+&v&SYD!UCsdHEQQXe=;d5$*J%*+deED6dTyPiM8&2GUeo*Y1d~RACEFGg?_KVrz+4^`C$yI%C}{IF3y80 zR1Vqc1I!a|!F@gr&WbP4nMZQSP7RnZK1TEi=qmnzo_n8NpJ%{lJdANf^xL6wc7i_Y z5!9FHvot#OwK38+sXUqw=Rb-#MSLe}d{XZm;v_zrFTV@E{|0jxszZs!M|E8w>q@#!z})$#&!p4$;od3}Jh|&_-Ns|yefG1MkCCi*G~Gzn zH>E6U#{^`Zfn&uTx~$w5A&BU=g1#DbxAEbA&~F7jn?HJy|8D3(^b2sG->&JA8xUm> z&j5HH2Ty=_7Hd4$+V%MWJcZBU*C)gi0FUw~s`u-XPxwCu=tm(dTdX5`9q2EDPVHye z?h-ryD$uurK2fJHwdw0Ye;ss;Fn0b*o4$qRXR`;D|0dH*^!(bmpO1O^+mMgex8-Z| zj`5(s1o~8+E}KinKhOvFqF){8Z-8E;=a1O>uLAuR_zf&<+gPjLde8@upMDr%*-s9g zh8L*YQNLQ`FU5WSYolx#XeX*B@uVOl4j%G}jCP!3>oE%Jk{eM@wm3>M@*$&#>G}VI za#Y_7Ng2cwgp6;3rvdjCo&4ouyPO1gUItIL_9Pj%g8mHX8=Nw}W0%tdU4n?|b>PW= zA2UX!ORjV*YWG(lrw2T4?Yal_Ye9GO3tG?K4Em|M9$Z(Fe>UhXhzVqO-KJ!7qF)O7 zmyjQC%d_=^EokT>`j4Ug!^lek?rCF`i-EUq06tgp}fFd3i^wn{}S=gY9G`;?$&lfXd$h`U=po6t->1Ya*iegWj~4@>8Ijpu3F` z1qc$CgFZ=@udT@@fF1?i%?ARYFWU>f0rYy%zo5&PZZ5`<)u1D zPN$dYbTQA(6)Oeu!Fk}h6g)7sU4}M~Xas#O=x#dR1p0K)-E4F>=x6PP{tW0-L3i_! zouCI?%J)L$QBZ6e=xw_G6la#%b}9x>mx~OtK@jvWgYH&`7SO*0`Xzc9xmBV7%HIR} ztxu-Yr|WdNJQw|BBk11;-K~xTpx+C6w)HH@9|S!Gx|^RDVy|x}=*Lm{YP`_Kf@07q zzlalxuJywp=)7FoE` zw@u7BvCQ-RoSch1U&+balmqmKIiI^T*Z4MZY^Fb$DqQmci~~6%W)(k^V|+qfNR2L? zXc({Mc&^JezC(;a9Z`x}TvF7PW2`48$Ui0L*h|CMY{>E4n49x=LVi1U1mr)!qJvhBeAlh@knPdEnF@@iun;++RzLsmGaxn2gd7=iV6&uF79M7{kMt=_c2k2AEfP(UW z%`=`M)IGT#ELeY^i`$3tJU`Dj-pE^S<*)ujj^|g08Q13?_uxoleXi$|!;B|#C%=A} z@nN3ldn1isM93)Z& zGC$R$a7``-h8J=@ALSZ7c{ZMCj#dKZGXZd12tP2c^*o+qJdy)vKY+F)q1HdyqKEz- zvcMq=9J0V63mme*AqyO`z#$79vcUg8EigDu)@%Mb5=Lf9_?21-H!@wOu)p~bk`)o{9;>o3;xzkjsRyfypKp^F4KZ|wnrD8lc9@~29D~8tB@5{_|;rdr8k|U zpo`6Hl`r;VfLDC~O3V789R%uAPA_4F@q|^>U)3AOibVQ$R^*?YR(2PK{s;dIa=SQ1 z7IS-7FbpzW%CLpuN`^fQ*D>74u$SQg!)*))85%xWav?)6!(xUN41)}pGHhYEl3@?S zbqqH$>}5E>a2vxxhDHgO&(O=Tm|+FOAj72$TNtin*u!ug!;K7k84fVq#&D3KQOe~r z^fD}FSivyJa4EwUhASENFkHuQBg0;X0}Qt@9AqdCnL&lZGO34`VKKuBhCzl)8MZK7 z$*_mvI))n=_A(q`xQ*c;Lu0Zm_rLwOpjVb4Uvg-dHfPqXY2FEoYTKF9#?muU!cr3BlE5;4UQRAM%uNM5DHB@|8 z_#fdWoBsC!PjWtHJym@E4dd&1JQe%OznmAX^`0b2W7|Co^_T?4?Tp`axkT(>{9j%0CGbnq z=T1{Hiv4KZeuMFEGyVdWS1{7m^_1Oq+c)qL&qEdK?@ zJLOEnXr5ynX{h;E9rLSpKRhH6s@=Z_ev-eM@oJv*A>-FGUiobs0tfN`mhq}xUSs^9 z8GkaDdjaM{#Ghuo(x2XaP56^*CF8NoKWU`IpUrs1|8>Tj4*oY8-@$mL&os=_NWPjE zD}VkB%E{)>_2AFJtn0h|ud{5<~7t9?A zJ&!(DV(2U_T|Wf>k@7aPh|Xuj6W|T5dp>@gN7zOopMeC zUd2*o6`%@uRTmu}W;x@zzN*|6F8nt$|MPw+MfvSN1b?A%_gsmmvy*h?kCu9VIWE(R z|4ha|$aorG>AIcq&i1{Z@vRBTr}*Dt{1R@L3nkgegNqaz#~I#UMlcuwd^S5A4?NlP zrY6a#10%JSN53v6$ zKP*L~XRDXr1%CzbRNoJ|z9+H#`x!srs24puC;o=nl9A4B(^Z2)2|qk4(1}SrQnxGk#G*B9tG#<05C& zXQdoxJMKpNkbUmt`4#r4X*1@EIoZF>AiZ|v0pH2Ri z%wNFuoyYv&VEm&jU)A?j#yjKE`!4d2#{^?c?r}yzFAHXHD)8C#nE^cM|GO5+sQT~a zjNia zkJ=cYHx6=g#~5m#OeuC4@Ko-@GbQE}CiobC507`~4&u6m@r@j>xOt3~B%gV7a0m0> z%=)Of^m7;f7hUkfG2sz{ng12;UyA22bTpE4Bm2ozR(3Yyo%4-l zjCaQ27lBtY_4=k<@a1q+D)$Wb+YZk3I^#cJ`~{33>6QE!UnLP=VEh!|vz5D$`JMiM zlM8>E`OCOnMjP_-pOjsGoeTbH;Hh3g4&m$amjY~ebfw(HiXRmL!3;utBC%awD9aqWu9pl&XIC3V-FF=P?Her+iC%E8CUGSB_ zQ@PIgf1ThjG+wWe(&=}2bUo!F=Pxe!3K%wQUXJIgj$4$R zM#;$HjCUA6P%H6pKXLtw@t4PCTE+8<)1^Kwvn2ir35**V|0DLpGZ=q6@Ja_p3DD<) zKa%5c?WL0YKF&nn!ld=A(aQ)1bpk)mSh6`29~E*kag@3bc(Ui$xM7vuwh8`1V^xLB zbD0Fj38)CQ`xhPfOMxdjAD$x_m3^*aymLJL1>>i&JwMO#-xKmVp@EU;wOfC z#y`P+cm(IU6ZmX)e#8a;oWP@>I>xp4UHC`&vg=dB_+c$l5v9X-fmiohwTwrYzn2|Q z@qFyUUs)o{b?ysY4tyc{k+)Zuj^7diuVm^J`oc5W)48sHO5q*;{|CmG&X!V?pB!5% z{lOW3CIV0L*RdQmPxdk1xleKlViKSh9$eD zxIbc;5ZBp^e=#o8QN}kj{%-cSqZ$7I@Ls;x!Sl@j+nB^oVd5yYz-@7zy|G5)2iq#_7k;`#yb)V|Jrp%0mV zPMhRYb@!LcayL8rZr&ve)psTH-^Knsm-&tA za6I8FiW#OEs*Re7&@uyv)^X$5Cp%v{zOs|_`p zb$Df0s~KurVT5CN8&@O|sVgeZ&SBO^o1Esknj&UhTT@d9vS=w2 zoQVup`7W=ba7&9}UOdlNZko#y4fL)yGlZ9owMWdBb|RD%+XV53FS9WgzB1^W+``-v znGn1sPTsa=SMKV>Jd_!Ykz&YvaT&c+&%a>qqQ;>w6@#7p)x~CYiK%gBWh^t#TeM&( zuZz@nyuwV%_4}!|Wj@nvP2jC_VPUT*-r9FHQn6+eFKsjHBCUydn|KqOSsaZT=A3y8 zXU>?1EN!)BrAhi5(H3dZOpcp9NN8a*KyzamRkv>(>!#5=! zX^O#Vx)jbSkVL74IOeJfC_Qu6D%v61NHv9#`xIU)|jZQG0*3MR5?>= zT*n9|>IXBMsG`{rX>7qeU=KLTq1Y-^15J@RTv1ie$H0uTeW;`?tJG3XynVL)Kr2{- zch~yLEFm$xwKz^Q6dH(qJj7+HaWJFinefL3#C?Ai^oQbP)_;E_a7cB|8r2(jXO;L9 zR|I{#G)5{G2H`cJUB5Kdk|k(>vZ9g_gWlWi zFkhwyqCKQqVNsSY0s0DGHS4hK4AIm$I5#ZALKMqTGJ%HkE@lsHyFu_mk!!+0sWX=la?7lrfNq3x;;=^sJ6{;H}x9}*p@X#r=53TO#l7x|`GKA{Yf(a!$zrV#pG^y-MeYA&3E zDm~Y7p7JZOl%+ShlekD-C=oK`a&1VwvyLqk<(ZX1ySj-fs&8Teh+avy^rNC^NwKT2AEvTRNduML>rpU86`!v}e>Hn$ z7&Y*P8$wp^3j0xT7)@A$Cd6Ca%W`O$7V!fmUI17>)q{)BUZe#K$hNFFmK) zm4|}oiwNm&7Yb)?FVMur>L}Eu_TR&-#q+F6A55nU64MM=2M);oN6|~Z$Q~X6OCP8? zhK|l6GVD*}!sJ%rkuP} zKXPoL_%J8kuTjSD*XC=OhNyXx*jo+9J6aMk$IK_AV%ap_XM`%TA`})lk>P>8+jNR`Xb!dWtHwa5sSqFML*Wn>1EB<-CDfq-#U8J|ucn$^uMka7_udM= zk_dDNg(Dcn!&hR zJVz2M8k%pQ=rgg3jVy~}+9+lvA?(Q1(&T}6C$O=g@|q#jrw>hXB1!IyNQ?O!iYhg$ z#GV5^n9Cg1oKwM)$W@5!VdQY|p#h?;CVe@|Y{7~GbNfmx*Zj3s=Xb4ZDfL@2SYx!7 z=4YWe!X_R{$wtQ#y|hetTqza{l}#ueI+uutYMIaS0v7cK0Cqhb$An~sa8jj*nORfQjM$*iW5~%`W6Viu3xk6j8( ziG&6A8IGunX6!nMDf?cHXD>Z6=CubsK`ucz*!u*Tzd_~j2{iD58lIY+^z;Wa#znby zfXQhyN1Nn}Eg=*$H6oVQX0*O?NoyQ_g=gz{A`6$HTYO>7#5hTHK-ZDGtBuhsBeb7^ z4TKUrdo{(=L2KPXUpcG9+=#Xp$`ut+FS<;WBS?P#WPG-*4eNQ{jIBb3>N)$_uBwe_ zgTSp5*!u}8%ppRph$e=bd7oaCWl$5r69Y_RYqlw)T#CBS8_zVW=DN2p#k$F+*u<5} zs?9331kBtT-QR5-5qHIoM8?z_+nz(`)v&8Pfgt8CGTKQ5HEQN$&s0+vP@KC-VyMA6 zfc7EVZleDlsDq=WW{5AXHAHdLLwNzp{Wpg~n!{m27;fosdWTxO9o)*5)^6HvtYy{x z2ysJ(F4uikwaGNsUgc$v?5a(*PNQwtG)4W5994&eD;jKM^Y5#zp^RFcs6{_8b9wvH zxy>%7G5gp2vdn{oqV5>&uSa7)R95YR}yVG z4`1q>Ek4xg9>!d^=;X8hSYxX{cwSX?tlG>74$=qzy~sdom@wJLzNf*u9X!jx5&^@%K9z`1E~f>Kp&YoF+ppHKlV8tEjZy}+TR3btz+Vy%hVj%FN%w2Bmq7_(;nEcL*Y zEDX1{)^_sCt)})|4?7fUKZSN)f>`8L$p^~%0e~!R0?An?8Gdn6?Es$sS7FzZy?b9< z>Sv0>iL_lr>ru6rPMOsn3U_5STi}j<;NC7DKt)^ev0zM%oo%jmJ1!Q_H4oIY5O&40 z3fgkBwkGMxl0ICBDW(>Y+($6A&FOCn&V@6f$s-Qp0k*d()ep>aUKdLHH)%FAdc z&)QRzvo80U?g4DCt9jyqdnL|aVkpJqoVjvP6|G&0=e3y|9r~$IX=*JBR{YTZyZ zX`uUo90t_mrLvZ`)`o+6#zH&CSU1aU9Xw!e=I5^msv+%lX3=jibBn2@v)H`FkpLKktd_C$pbX%17$9TO0;hLA`m;lr=E~aI5iyI#D!4{3TN8*!1f_#NW$L5|4m6Guw232uLCu2}WOR-aw(RnAwSVGUK zgvGK40$0;d4mUJ;ORJGtv*=KzkVs2e*WStxf9Ypn zh=Vx&j4G-bz8&c>{$RR>g9v!UM`z7qE!nn?Gq+;1t|H|rJRSuP+)t>#g)wsA&}3Cp z#%>eOe$Z$CjSV|Gh>taZ46v5}(K$8lAP~Q=^-;OC7NB+!dnIaEJGe71L(b!hAeL$C z1Db?rdw=4DD=LLwqtX5u4qL|RwQ~Sij7sOqQlxwHYVzgAttg;I|1Hsh%+$$QXd1!C z1c%If*t(eTHa5gcCH>`qS$eCqZkaDq@Jo$(Rv zAdgTEX$CDcx=v}u(28H8wq|aZ(BT{TBhkGazB$n4hZya`p_Wh>MSYE5dEjvKW$dgJXO~5uPC;DUKi%#bdN;G>Re({A=KbI!IF~6cfhz z4RHtz=S*p^6H?_5g{2I2PjW~Nh!iS^nxZI6O2?GcD8kQ`>Gv$^SI`Fy@rDwEe&U|X z62|7q8wK%Nvy6*>4sYS;y&%K!PvtM?{0idr92u8-pN&G|^#U3B8#up$>b**eKVRK2 ztaRj8?*~`V>)?0hzYz2f@ofO5zxsZHf_P1UxP~!w>K_7rB>t)VDb`=X0nR`+BHO9_ zV{uOx{rsJ>sQl`C4GOC7GY~IbPW#jA0_fWZD!=;Pfr1Zb=#bLRgZ zaHOJ=Z@oW?9gqB5zntxVJBWIIFXvNm(2=2#g(>(WNB%;*zk@CXy&`4*QTY_y2$EiY zG3Qrs+dj(wr6a$3ADn_u;Jpd@rOH*f$8e*Uuimq$;Ngmqp+gQzr1DjM^?qsv-*gn{NE&}~o*6`m4%UFb{=~236%>@{nX*!ub`S5}?uwjz)gc zU*%Wtdtb`=dsIe-UPpQyGE?7C`PF;C2RVN+*Pr@7U8-E=M?V2hFJFBh#(R%oH~Jm+ zQ~4E?@BO#SH+p40gE|H-ulQ^KQTY^R5(+1r(!ZitQoNjhEGeg571}-BQhXzpVh3L3 zKiz>>;&kY!qR0{C@&o)L7kb|oy@N;Tuj1cfz$x8DM*g$*IeF9P=)bC5#XAN!+47qs MBNyI82fW8A&p6GJ#-4(SRl2 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

hi6ZoCW<`CB9a#~1RVPzNa?9Jh=NgYHv9-R!h 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