From 19fb70d9982418ecdf42b1c9a50f86620cf740a2 Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 13 Aug 2026 10:56:33 +0900 Subject: [PATCH 1/2] Fix curve-steering wheel-reversal at partial throttle Steering angular velocity (omega) was scaled by the constant max speed (max_v) instead of the actual current forward speed (v_x). This decoupled turn tightness from throttle position: at low/medium throttle, a moderate left-stick steering input already produced an omega large enough to flip the inner wheel's commanded velocity negative, causing the robot to spin/reverse/lurch forward instead of smoothly curving. Scaling by abs(v_x) keeps turn radius proportional to speed as intended, matching prior full-throttle behavior while fixing the reversal at partial throttle. Also drops the stale committed x86-64 binary (built before this fix, so its behavior no longer matched source). Build fresh on an x86 machine via `make`; run_4wd.sh already rebuilds automatically when the binary is missing. Co-Authored-By: Claude Sonnet 5 --- xbox_motor_control.cpp | 9 ++++++++- xbox_motor_control_cpp | Bin 72792 -> 0 bytes 2 files changed, 8 insertions(+), 1 deletion(-) delete mode 100755 xbox_motor_control_cpp diff --git a/xbox_motor_control.cpp b/xbox_motor_control.cpp index 6324a94..49b60f9 100644 --- a/xbox_motor_control.cpp +++ b/xbox_motor_control.cpp @@ -1078,7 +1078,14 @@ int main(int argc, char **argv) { target_rl = v_l * rpm_per_ms; target_rr = -v_r * rpm_per_ms; } else { - omega += -lx * (max_v / (effective_w / 2.0f)); + // 선회 강도(omega)는 반드시 "현재 전진 속도(v_x)"에 비례해야 커브 + // 반경이 스로틀과 무관하게 일정하게 유지된다. 이전 구현은 상수인 + // max_v(최고속도)를 기준으로 omega를 계산해서, 저속 주행 중에는 + // v_x가 작은데도 omega*k_skid 항은 고속 기준 그대로 커서 안쪽 + // 바퀴(v_l 또는 v_r) 속도 부호가 뒤집혀 후진해버리는 문제가 있었다. + // (예: 저속으로 스틱을 왼쪽으로 조금만 꺾어도 로봇이 제자리 회전 + // 하듯 튀거나 뒤로 갔다 앞으로 갔다 하는 증상) + omega += -lx * (std::abs(v_x) / (effective_w / 2.0f)); float v_l = v_x - omega * k_skid; float v_r = v_x + omega * k_skid; diff --git a/xbox_motor_control_cpp b/xbox_motor_control_cpp deleted file mode 100755 index 8cdb1b8ca47ceb6940ad7912b5b350aa449b5a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72792 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 From ed34e1c0254df1730266599ce52f575f31ff0edf Mon Sep 17 00:00:00 2001 From: robin Date: Thu, 13 Aug 2026 13:22:29 +0900 Subject: [PATCH 2/2] Snap wheel command to target immediately on landing after airborne Previously, once a wheel's airborne flag cleared, its target reverted to the normal drive command but the actual RPM still had to ramp up through the gentle standstill-launch accel_rate/jerk profile. Since the chassis is already moving at that point (unlike a stop-start), the wheel spent several hundred ms unable to match ground speed, dragging/grinding against the surface and occasionally landing on a momentarily negative curve-turn target, making it spin backward. Track the airborne->grounded transition per wheel and, on the tick it clears, snap cmd directly to target and reset the jerk accel state instead of ramping, so the wheel rejoins the other three immediately. Verified working on hardware. Co-Authored-By: Claude Sonnet 5 --- xbox_motor_control.cpp | 45 +++++++++++++++++++++++++++++++++++++++++ xbox_motor_control_cpp | Bin 0 -> 72792 bytes 2 files changed, 45 insertions(+) create mode 100755 xbox_motor_control_cpp diff --git a/xbox_motor_control.cpp b/xbox_motor_control.cpp index 49b60f9..a76b5cc 100644 --- a/xbox_motor_control.cpp +++ b/xbox_motor_control.cpp @@ -942,6 +942,12 @@ int main(int argc, char **argv) { bool airborne_fl = false, airborne_fr = false; bool airborne_rl = false, airborne_rr = false; int air_count_fl = 0, air_count_fr = 0, air_count_rl = 0, air_count_rr = 0; + // 착지(airborne 해제) 직후 한 틱 동안: 차체는 이미 그 속도로 움직이고 + // 있는데 cmd는 정지출발용 accel_rate로 천천히 재가속되면, 그 사이 바퀴가 + // 지면 이동속도를 못 따라가 끌리며 긁히는 문제가 있어 즉시 target으로 + // 스냅시켜 지연을 없앤다. + bool just_landed_fl = false, just_landed_fr = false; + bool just_landed_rl = false, just_landed_rr = false; char wheel_status_str[5] = "OOOO"; bool fault_active = false; // 드라이버 알람(과전류/과부하 등) 발생 여부 @@ -1117,6 +1123,29 @@ int main(int argc, char **argv) { state = "RUNNING"; } } else if (state == "RUNNING") { + // 착지 직후: 정지출발용 저크 램프를 건너뛰고 차체가 이미 내고 있는 + // 속도로 즉시 맞춰 지면과의 미끄러짐(끌림)을 최소화한다. + if (just_landed_fl) { + cmd_fl = target_fl; + accel_fl = 0.0f; + just_landed_fl = false; + } + if (just_landed_fr) { + cmd_fr = target_fr; + accel_fr = 0.0f; + just_landed_fr = false; + } + if (just_landed_rl) { + cmd_rl = target_rl; + accel_rl = 0.0f; + just_landed_rl = false; + } + if (just_landed_rr) { + cmd_rr = target_rr; + accel_rr = 0.0f; + just_landed_rr = false; + } + float jerk_now = is_spin_turn ? spin_jerk_rate : jerk_rate; cmd_fl = jerkLimitedStep(cmd_fl, target_fl, accel_fl, accel_rate, decel_rate, jerk_now); @@ -1243,11 +1272,27 @@ int main(int argc, char **argv) { air_count_rl = air_now_rl ? air_count_rl + 1 : 0; air_count_rr = air_now_rr ? air_count_rr + 1 : 0; + bool prev_airborne_fl = airborne_fl; + bool prev_airborne_fr = airborne_fr; + bool prev_airborne_rl = airborne_rl; + bool prev_airborne_rr = airborne_rr; + airborne_fl = air_count_fl >= airborne_debounce_ticks; airborne_fr = air_count_fr >= airborne_debounce_ticks; airborne_rl = air_count_rl >= airborne_debounce_ticks; airborne_rr = air_count_rr >= airborne_debounce_ticks; + // 방금 착지(뜬 상태 -> 정상)한 바퀴는 다음 틱에 cmd를 target으로 즉시 + // 스냅해 재가속 지연을 없앤다. + if (prev_airborne_fl && !airborne_fl) + just_landed_fl = true; + if (prev_airborne_fr && !airborne_fr) + just_landed_fr = true; + if (prev_airborne_rl && !airborne_rl) + just_landed_rl = true; + if (prev_airborne_rr && !airborne_rr) + just_landed_rr = true; + auto statusChar = [](bool air, bool stall) { return air ? 'A' : (stall ? 'S' : 'O'); }; diff --git a/xbox_motor_control_cpp b/xbox_motor_control_cpp new file mode 100755 index 0000000000000000000000000000000000000000..417afb10131aee02b12ef4637dfa4eaa3ba45727 GIT binary patch literal 72792 zcmeFa33yaR)<4{VL;`}hqoBB;Ed~t|2mzu5j3$s^M;k>5iUNj^1tM9Pqyy-n29t)g zZ7VKORB&)KGdd$9DuIXw5|#vazzw$%_uC{91V!B7|NB+dy?wh)d}rqUf8RIX^B5jd zbxxf+b?VfqQ>T{h+?wH<&@CduX8d%wU2G#%>6VyORWPk@kS5hO+SbRGYIE4mvK@!= zNc=bG!qYw7P>3HRjh3LTJ5tu`&rB!j84_(XQloXItk>1g+B0Q|k=pDMX1yq89sGqK zhxl!#6YrC-ky`7C_L>xZSbFvVi8oSfJ?h5MCd(Z^g{D#%n{93ni8ty|U92}+)f=tq z8ELB0r;!@^q>TJOTIn-99gZ^o7-@LDxvE}xnl7u^jFfHgXUZ4uy#J)VNvdAc8ia{ndoY zaku%a9&^4^Od86~I;7zb`Kci{;VY3N4fWB@_KfZ9sJ;&3CgXn={_o6xy*O^b9cK(G z?mhm7TOV3nxO!Yf-xa;bmwQ~Nqqx(b7l1vnlae`Tq%-`iF6i%sJ$FXG7MMrQ_LNT4u zZ|Q=5Qy20~=mH-Lqw9>nzl(NH>w*vM(SiTrKNVfjAMHY)^Shw$+r_xoc0oV43;NtH z=@N79+=czrbuo^MyWsOm7ko0iu&aBz!2hue zy}jB+zwYlsKMh^zIiU-DV;Axq?t=cbF6jT-g*=yZp|>Gj;A^_jXHpk>sO)0AF6sim zu?zeiUG!^R7wtaUh5Yf*g9HD=fA)33e{C1|54*4jE?Aw-i!wCW8Q$K7oVRvC|7sU_ zcNg{$=t7=}U9>x)3;svD(8Hs^4@8~tpBdmEV>{h8NyXeo9CjMUm-txI#E6l(Zb$mB)nTDHaprSpHwOwKL#HS<3jr7_eespl|R|pbBaq#vdi5$ zW$x^3TXtsF#O%EMviv!POrlh;FGfN8HHfFA*FB0G1{q6@O2&(fUCqQczE z3Ntb?vW90*nvj(}>GG_^>`9ZRjLc4-pEV*oW76fhQ%D~obtk4a49P+nUk42#hsX#J2$5++g+AZ=q}I9&6tvdUl|wXmKM*?Da$7-u$bZ= zF+4llJ-4iMVRlh|$sG6G?0l+OmR|Ai^H0v6n4MEzUO1;DWAf!wMhP+hLoV|%jCqu^ zn0=k%PL@3^EJbgA-Mx&Y+@k!PvJ8}r$j&S+=YMyO8#Z`dUeTllipK@H=xRyn$n2{} zB#tPD$>kSk=N6Ub&Kp@$x-esbXsDEZC@d+@FLP%WXJkyCQko^ZVJ*nB6kr&Va@{x1 z&xe9X=aptJEX>O<$)I{6b>b)~c4+~ICO@aRQ`yHSincKtqm0ogELo6KRG62YQ#Plf z7^ZHH$Y>}a8$9zz(Tvh%&HrGe5{ILkW%=`qa&q%Cii-_Bqccz-8-O(x6c({l7Z#Rh zmtr&wAx)D}8Wbi|i2hD-kIDrga*42MX;`y!^0ISt%H2}E?!=Kn=CdmbI#tLh(Hvxg zG$X}ua#9y_rU|Wvj-xw2C-274am=2xXi@h3{Ic@W5~$IAWA=jKrc^Ktj)XDBof*?) zwyOqCjaybWCS}Hy3ot1$AB%(>r6cE8xaCM&jQ}D~lvaQ?3f;=C{xws88N=rprkGSv zR8c-x>Ak2t6Jmu;YuM+nM9s~Dpzsr7ikB=@wjXLZ%H;k7!{PMEg#z9A8Iz02o1@s>yDLDEC2dR8h=^U7&>6*$5OL9xg3vA_oD03IsvZt0T zEG)^(o}6EfsbZr?%z^20;BO*0A1={dkexeso(*E>+2(^M((K|2cmASm&i*h|MTtNz zEGvZnD99~w7ukyQi;GJakQ=u7bhBLiigOA}Y$Z7*rR7EW`SWe`dO1ZlckY~gcpf*V zfsh1>T7(q}X5=n~$V>#k@_eW)yS&6AUb#DuiYySLZWESZ<4j;JxM#4ICGK2Q7EM5| z-1#@!atnYcET5mBp9h}MQ%Na1mg6ogEs=$#Mj=GcokwM47vvNc+0Y#_q6pA*lwb3gzb1h z%=gCso}li7-%+4pD^d8@6S+S4-wT{spV$*bspL+1dIA$+(*!;1Nf~AMMd)M%fyOz= zq;qdP-iFqOslbrsy)ESxrxo_($6L<@|{N?Jo!xS;n8jBM%^=?qe%a_1}DY9(EeX+iq5{ z_twEE?`5k|@E-(yPuu+p&Jl35txmx=?s^*ijkK*(uzT=5$aS+d<2Qedb5jM{W>rXh zoH`dZ@RQVe_3$vfL(xa0C;Tz!4Y=u;^q3R z%7S11iv+k|kQ$Wm3JV?sZvL#c;IZW}f1a@5vDGnu)>`mv+xTg);LW`X3Y#o=V=P%` zhXoIVH-C0o@V!hd#>;|-0h&L1EqF{6^GCPfPcX4I+W`w+v*3?d@W$K`#YZI(`xIlL zkG9~g`(e8Uf0Bj1zXi{8W#h+T!S^$eNaHN{lP&n+7W^p|{AdflzXhLa!JlTqJ1uzY zA@d{)-nh$QwP_ao01Ka47W|nO{9FtEEDL_V1@Exn7g_LUTkw?@{6Gu7#)3b`f?saI z$6D|!Ecihd{AvsSTnqjQ3;sL{eys%`XTdjE@aJ3bO%}X55)h?3EO?&f7(Y8L_@M?8 z=^hI{!Ghmw!4J3KbqhYxfa!7Pqg5F&;H-lz#;9-ADvb0(N15~OCQ^8PEV7&+p(R_s%_C*MMKAuuKUPl zJ9uo+bR^nYHqy^!$-%%U$BrFaE?@=*2LroIm;u4TK(h%m5I7ik#)KIF91J{a!d&UOH7!~;$YwpCd`HZU?9hYx!@lRTxG&s=nn?cOqdJ&!9b!3GjKZ?INOA| z&>sxMm@pUkgMkPW=E8n3@Xb-9zg*DKe-q|Hj{ci47jX37gt>5||0c`@8~rz7F4XA1 z33Gu)|4o<+Gx~4BT#(U!6K24P{+lotX7t~LxgeweCd`Ex{WoDQ!05jTpDEx76Fy78 z-~3|q-yz^nOqdHS`ftKqSkZqI=7Ng;n=ltr^xuTJfTI5<%!L#EH(@TA=)Vbbp+x^p zn1L_)Z^B$K(SH->LW%yHFc(Pl--Nj^qW>n$Kpo?6!dxIR{y!W2=fa5bH(@S_=)Vbb zAw>U8m!=f`|T_Fc&)X--NkAK>tmc3m*D!!d&Rke-q{chyI%|7dG_Y zgt?%h|0c|Z4E;A@E@0@t311@MZ+Ze;cbR~KyL#&`WL`o>S^ z7Y28P!C!>IABDkhhrzFf!P~>&#xS@(3|IGl;!lgcEy)opkBWS*R^ zCaJG+IXtc_`IsnMjl5`Oj4ZP=@p~LhRCSSO^;0Ctfgc5l%|asbB>9$QzQ&!BWG@rN zMdV4cOOmXWBuy3)ktfMNi1dD}e@WrMP0F;_(xAwbv`TT4Buy3)ktfM4NwQp$thSJd zJV{a{$$UvtX(17LlAI<tH+xI7R$8IRk>5Cl1;Kk|9*pb+zmr`_pl8z13X2zKM^#b9M zLy+|HDpIyOy`DXkBX0b3Kqu7!UJR=s>~(!1c|j%Zh@^Nwm+~{KSgMF z9zfu5NV6xM@|Z{moQ|~BV*?LH^e%rr4H5(?NB=Ac`rU@K#nTEV5iWltO%$a==Zeyp z`aIyt?o~-WNZ}hlm-v(!ita4|$JFnX>8iER{UI%8)o2OVHc9$^v66mGgM^1x8ucZ8 z{SJ}ZljckOs#hgEK(*8OxZ<}~rgcxqv_2APt7k8MbK`-Q*X)obtK1^B4;Uyo+LO+d zX^Kkwod&qYQv)jMZIGrKwyA2}C0xH#3HI5eB)QFM8K1mOzgV2}Jzf zfrZaci%9q9M0lDidZs6TrrmWv8Tpg0l9c*FP?=>nz>-mxqROUQ%NEG8!K&;MYuRnG z>?BoojHwT_itFk{@%Wjrs5390lYgz0CqTW(fHr`s+EbA>$WgI`V4^`MLqP-hb z+3})G^K_t!7>mZyqI|k4Z~LBgHP3kxJyW6I0vcRqDR8@@`f*H1<$p-30!8&FMHL4> zfyz@Ax<*o6t-u=<)iYy_$q|w6tE0^X9*3d8Bomy@#~xx6{2iMBcte&g^SDh@*axdU~Tw zi`#ZcyB7baZP$kF(3ZtxLv~2Js)^;%D0lf&?t5JfLF1iN-Z4FjLi>{rEATMXv2h?B zgFk7+U6N!VG)aMut|YT-Jv+$A3)FQ@`chQi$WsW=4}TB|7l*C-exMJc$}+LGe5_}a zjE5y4J2ObOLy^r@WTOGQ{DXQ*3XWm{<%yLQUsf{S11ic>qU3qPB9D;&WJ%w$!jy;Y zL$6H;IUu%YEo$hmkhMdSJ^xxtf)I`!TBt1=%o*N{63}|-uF8C}AtWdwGc5PIVKw%h; zK^i64C<=xtO~HP8K#t%nu;6e+qfZ?4ouoNI(zJm_bv-#$s8kA7XCZwfNP0pjDc33e zCXy=op9_+H2DC-@Hgdg^qz)-SuHO`(0cdp9!*vyw7WEVygQ5E~P)0fZNoC-zPdo?? zJRSie6CBvB8&yk6|D)N`7o<}LdQniQD-@~H|4x!_Bq>k)!1CN6={cdKc_h6Hq*9n@ z3e)rrY7Ub%zr8~W(+-l#Mn*W~ci>*KjXH`1(mA#C1G*2DB#%Ge4<3ujLus!O2zKZR z@UR#Z!xFtOrBvg)7IbRtZdRnKLyTzj09h*12ZN-OLrLEv=_XSce=UUBe*m)ilcuS@ z>=ocDvGMSJ?DVd(Qwf*t2T@hy5%?dQRt^5}cJ(4|^f!)%58cSqP5mu$_SK5I-LKOj zAC88#>MIj$w#38wQpn;&00?sZG~}yM)PPe~_*S+78P0$VdNu^uc#2f;XAqFe5&HAh zvU$}mu@z=VTY=DPG zvV%!n)COS|o(8B40W>|kHrTUQmi=9pi3P_ORfh?TG8;OEdVfM$i=aoc7W6h}t7i{W z{IqxuD9jOsK?vnQMVB|}%vS^(JK1>N$39>)o;29>TOl&ESaTN+to4By2LN}@#_43@ zG5t9Xi`Ubi>Z7LbhB^)7Y*hn#B?r{kNE-dKcG9;{c}KoxwpHIbj@IglhB#2|9&++G z9zg8B(Y7T57Uwx4_Aj2%B=CCTm|#bVq}4+*{y4p2D};X9fS3IwL+lGkC`ej8!_6}C zB5Sdix+LFbtMLp*!!(G!=%wPnu|GJ$Dh{iOr08#DpMAA*Rj!x29?=YXW$>IX^g;)+ z830P6-j*_5|`gIpLDZ}Y&NRRg(+qX{L$Oxq`4X+tZnd++;lAGBRse^YB;8g zSkj+^DzFIexd*koQ`_FwOz(ECd8f+CY*|*`e@K&+58bCKFF<8up??S*WM%zhpwTRa z4XgRQQS&0!WP4~y)p}CaVyD7tRT;I80|}@xsL5zezmT@<_b)~br@wX)6Zji{y&E~G zhXJBKex6j%D>!^N)N`d$&xNu@l831$#%S?AGy(NIfA_D{^CL>oNj4rP?prW8q1$Uf zVyNej;GjC%Bx_RMu$m7UH3zU}sCsUfwb-e!T6spTui6atoQBr){s7?xYuz;Agno}g zWm?tS(gvNtL5=lZX(%202zumUM^X%Gw|Xu@OBf(Z-RenIK&vO+%sI`R3%OqJo^uf_ zp5dAPHBRPzQTkSTyGt?Pw(>P6~GgMlsQtsp#ldl6e?W{^RN1LjFZv6uS zK5PP(W2Td{o{ll2idMq;FKMJky5m-}VlTYJ3;>+ye?ZYi-L&dw2O>Sr9eGhiMRRM^ z!YyQLv$fTWeN))ZqXXVBumquvc2>0@gXdxo%x#a@+u$5BI$Hl`tj!h}C}>l;qY0&3 zA!?ECCDP%N1w4O6=a`dgRVV$sU_#tn@Tb zt#7k-k_bO^?|k7YJ!+d?RwZ4-ZtC03t$U~`SoM80%{s(uH!Foa4)3DhQ)UisP{*2Q zFpfq8FN(k<#KNp>{~E&fT7&IGvK{*?w$$@#bV=y>WoRof^S9YML)ibgNlE=R=B57O zAHt<3dpZHZejeE$Wr*P)a23XXV>}ER=3I9h5*&1Y1f}WIzCyXTg|Huk06(hd<3uFw z#Rw4dy!fvrq7gfXX)J1B4u~VyE{^NxekMo`2s8267?i2Ac#-F!c7`O`DM|J+2|unM zC`r~zk|qm@$dk*lPuWn$jy&fOdG4%vsu5i{{rP*+y?dvp%}AS>c70m*%&ks;)D(=$ zMqa$5_opmj@5Pb8hwN}jxK1^+02^>&GYLyzSSVEiugWkGy%*8oH`fWRFtF0UKwdnM z_zmM*atZ0>mcy4avQZ7=dCM@2{b19|vsh+hsxgd@Lx+J283uQ4+XF+`zxASGzhf!b zuP^P4eXPMggY5S(X7MMTMBVsPVqsZa z8EwCWfep-%Z7&2p?XAb>@{Dgh)?c0h-gy#Yir;AdypZPKdqH*mH4mD9LE5g^=t*zQ z2{PJf{xUZI(QmWgkz(!LO$PfCvY*i@`$&U*8!~}g1p9ifNNT6js((98hI`_4MeQCw zgC%gk;}n)(%Wxmwk8_0B5yXm^@=03EXP>Zi6)iFFvseTxVcdupL;w)T5=(fh&E>1> zk9HFe^Y-s94CN*{slU=T@6m51+#R)0nC9KCmjX`HHowNW4KBFfg;*$%4*EMB8Di>Y z?V70GB5PlD1We(&w?LVzb|A0C?a;FN{1YxoOZa4Al9sTQ74HZ2!f57}i+VHq%#!s7 z>=o(tuV77h6+Hapfo6HcIN%~tc0S6ke_4xb*0Q3O3ch=^We;j>K->zD>jj{c{D+G= zGooxFwGXI7x<4kQheeE|tzUH?i!%0T z39o1mG&%Oj*hlk}!fsKsUiQ|$hBl$LpxUtSw1=CtjOOYl_o<|j+)bqBsTv?E*G8if zI$q1zR9+$pX;uidy-pq5GA95{#|_RAJ$G$SvA)wnk>92nNeEDJg+#XXwMyNXS^?G%w)DLQTyD95X$@p~?SQ%XFX zcr5XyNq|NH%1CU&-gXjl#K?`mpF389vzQim>sd`(Utfcyz}q+)2_&r)ke^JjNzNja z?)8j8s*Vm?J!DHeZS}BN=BAms8D@^{$WjU*b92ocPY5J#zL}$h631<>%yFyCoc{D^ zDrA)yimGi6r{@E$`tR5hphpx>TVIZMrDGv9C15{AkNmY1jUXFz$$dXTN`fx2p-K7_ z@W!@W)Bx`STu(y9z>qT_G3Pc2)oL63R2-1;AnCcI;CMlcghT~i|M{%xd9sH%%|o67 z?xhd#uiD83E&^CR^+Qm@k2r@2dq_NX$SDp=>~)``7;`J?dRP;k(?tT7)&WcH0V9Gj zG*Z1t>p2`+!d_4|(y%yHzJ>8F9I9m{eSpXkG<7>spvAoot~;6Tg0!mhe8C zN}4K~5;yi}ss)^CTH}^YHMX;xwe*0mxU!it>+@2(|mLDCGBYs=n+L7|SHGGb^VB-2`s z13GoEl1$m*dc|~$mT*8@#&6&-n5O$`XMsAgDXnTtL`HQ}y3ex?aJrVhGp(vA0*$46 z1x30xp$U^-6#B#|3ClC8Ujiu$npn#x4pL;r<}~fnCi!qA-M4D5D3+XjehZh3A#nOj=LrwbJUr(Cw9uA}OMbXU{5S`{f0_THbDUnx%oslhQh)L-p(+6wqPoVe zVMX_KxPhk{DSl?v_DJM2BVFEoPA|M-^TKBUV-_?o7^Duk@Ogun)JUh7b2as6XO$jF zGLVZ~e-!pooGbo9w(Kh}U)dLRUxluSb3Vp4+w__5inBP+lTb6%M-_H3F8LPczRGuB zC$0{7=k(J-xIT()Qfm7@NB#p6yMaf#hRy)#m-xSm%S1t@cFQlUNL?VU+ac3c4M?5- zsF^p}Y?Y0x0pKjL&r1vO5*luug)S|92l92YqP>BBXb&kfpGJNz2BbhMP1?B_I~%`vf1wSoUk!V0>!qI# z!m81c6?Poxb5Asn@R4KgFA<5bkxt*(-M<^Q9@VtQX5*P>4z~sCJ@gedVlD%q8>tb- z0)XD7Mx5UQpwp=l&Lr?OPOsIus#1yOxeA875f;auEX0`{w|bYp4IDf=ab?gSaU+4# zHq!-^44YEE_tbe~eoqt8>R3tSd1myA zBv~$*t+tSeJV~CAB=aRnrG-S~N#X$s#+L4`MjYk^9#PLx#zSRT*R*A$#Nuj?`Vk0D zO3n+2KMU;smm4{_0U0cM=E-GWY)r%>o0z)!XeRI&&V}W>q{ODg-71p~-(Okx+t{Yr`;}w(yd&*?Pw03uYNca>|VY$ zE1VLnz-+w!CW=I3UIeDsiP6$8G0FP}$(fDU9}gv`Khy0d`Kdv2X5;mWP;w5E{t3-Y zNY5v}N_uAF^$DTm+@$Hxn&hVk$(fDUPYETjBzcudenya-*?3(?k)^8)jP)#&d_a(# z*?9f=Q1WRcA7qlB86;;mUcWt*oEroE@Eb-~&kB+=8?R3fC1-H2x0>XRAUU(~dVDB3 z19W|bNq%;aoY{E&7Zh2#$|zeeG|2}B$(fDUUzg+^7#0}8nnmbpffl!&i({LfXx2L? zSdZCw{eD^Rb6KyhM%LTL<&dkIe)x5x|FOZU%%cCHRk_Tf$!%O#ztA_C^#%p&F&nR+ zBkS>S0HW5Ad0#}42l{Lv-*{0-FTy<#lvj8KFX}i z$P{&l8Wc4iX7!WIy2Ff;77w%W`jOXyODCK_;j3UE=3PRNl39$uq!f!JC@(Q7hX*N{ z#r&6)bg1B^_cJLIgOtq1>o-YCx#G3zZLb)uj|fsS8?R3SC4;jMVX?dAxV{Nn*n%;w z26e2u@Fdv;A|v5RlRK}=et<^R zjS;kL6z8{gkMOBBR74}}Rslj;D>2IfhseWv?6|%|o~!m7h2V$M5J}EFOk9j%!9u#= z8d6hS;N~jac;b}kjc>^^mnb{3;5?SGJD?w}a3=*vyF2cm^wno@{S*V0k@$IwM~rHV zM+|%5arsEYJR9W_hH$05afdXP8xU6Lc`pM$#KWg!&Xh|o+mvui5A~po zg6stv>8j6>A_zy;uS-;IJ5n4u^X(b?PFIRleR3hjzevKhVpMN!#qI`Ya=o#;0gpzZ zkAxH*odGCl$XeF13trk%9JjKxp3fG=fyF-DfB>;-hd}Jnmg3d}Var~eC}Wc+Pl}Pp zj_3N%w1jqT*+n>(N5Oyww4)__rY-v`HUwlzogmcv`FYy6JOYR8QY;>YSCj!`Ez`2>eB(J7L$OCZR$0&YvJpJ`VMc!f zW`}om*kA3QD>i3%ID1H++#+Uze*S5=3V!=TVc_Cm6~~|2(zn0mE5uo-PTT1GAnyp@1-#h$K~IskjD%oqVf3utgj8v%JK@tQB>tw`iWHq+=4E8+LjCV}v(rXBX3kkBFns>vn4i zee43kr?H66Uc&XyF*K$vdr=~qHdSI=p64&I6vL6GBCK)wqb5K{7zlh?p#gIr?|-O0 z)gA9Y^Z zH>XP*ph)7?I%zlXt0i7cIW>=h(Mm9)35GqGqQNLhUlBUnLMG{Al*xO&$^FnTIm6{7 z{bmdiolMd_qQDr}-ta;C7k#BdX%FyI;wBJ16@e5}8E?d_V$TS(=Yd^#Q6TT_&lPU= zHErn)cmV+G7niEggox&luIWup#bHw~E?Kw0b9P4+Q1V?N-V3Np*1-L!A9Qnpy8Spe zD|b}A9;uI{Maq*EVYSAKKI=QGYy=>|7cwyqsdpSvaANu)mrzgGI}XN!@DG~jwmo3q z53x0*?RUA5%|2)dQuBj}_N3L&6pB;M5NN8P8+1{-Nb00k#gzSeirO)CYr&i4D(39h zA*#pJjaKwFk=pz1Qh2W1U_WT8glpx>WAB%u${&~XgA!HwT2;S~gpF(Tq+(UxB->H9 zD>3ThpfTcOp6WxI!B2UrPpv{;by8~|aIN5D?>AWS=b}&fWc&7%B!%B8+tNlXe-DDq2_Wq==rppERjYi<^#bFS1 zH}rO{OmW|fTgw>;e`b7#@Qnej2;sGaL)x-t8BrzehsLyoe`?G6BajwXf8XMa5OG9D zV30i46dSL=$5NR?As&@EYm-#wPOMQvnXMuK=yG~jiZH}@05{@(rOb0@p|^cAJ5wg3 zVA0#hU>Jc5I9C3o#h_>NpP;u~%lIcF>-nx}<}=409X z2C(PH)zYA?z*tNs0DVRg7$AXu=MgxDlTc_`L?s9iny%-pk`ZuVw=9c#A0AEldiYOV z_QW@78=AZ=e1x?zjeFy-c{=_yvc{*x4hf|n(}$qfjPMXz@tl$x(jRyca`HqY=~GbY zJ6?daO+2CVC*`1bRMt9>P+7Sca-pp65DEN-Wxj<#BWU=K+!yi~dMf&)-!{Qi8E*N6 zWtfklJ%@1o8d%Cu&Y$%BwbD8hDOO*I1??E;zhcW|#9(q0GYocm?Js8FC6Ji!o^HZe z<@O1BT{siEzD-(Zz1+{>M0#Y+#NmZo43`I3VQspZ2FiB;AXDO;bM+jcm zDXM5mHA8_vY?MQHs-&8z(4PVg0VXK$O@O$9<_1N5I@#0I0EcM9EnAI12M%Kirtal7 zRffDm_u8;_I6El)q!9U z7$B;Bj1qtAPs&T&vjyd$?^u0}b7?^08UAUwAqZS9MKwcv#=C)!z7eMXc_0oME$*{` z11UBwaSfuuQL4e0o|pRi_^4{|9b^!0a8b$3-G*pd1QEVb&HC54qX}C1>bsRoxDVaY zZ%Y?_689m2&)`(irv@m4eJW5*oQD`)%%+K5HsK3tBE@JTkxlRmpx_3=Vw%Sxr|>%e zz!7gC4cgKtpgrhUd{{d0Ixv|1f!CUaOg)rLyP*Zn@J}&*LZ*AMZ|l6<-y>=dcKgZY zs@tosgG|2hoyjEj5M0$xqfBdL%VlEO`CgxW!vwOmHmy-q`7(s7nDr1#&lMU%QFb_H(mRTXvooGmR z9HsjEEkBDyIh_>v0IgM@106H%ci0EicXtn z#4D5&$>twGY=xESgTMwHU+5#(Q4J|CUV+-@JttJ+Q-Z}Q!JHT;VK3))sgj8yG9B|P znGRh8uAiiKrV@sVLZ%jyX$(V_fu!p=LaTb;kuk3DNA`29FO&z z0`hMQhMDh+{3(Ux<&WYg&Ya0d-2L#?rH5}v9#40B9^0$lk8D*b_#_MZq!CQ;-CW)S z&gQQ#aW)_6?u=-0?mFu33kF{(2GPg%%69=qeGXe?N(Ri@RxxC%vnu5tP@*eexO<~p zEdcb)r!k%LAZtt10MJFuL|vP;eqbRAl|1Cv8YP&3&(`Hy+&6f2@AMuyl#bB(3U~nQ zL=GTyhdUxXSMboTHO2EH3RNM z9qeL`XbB%Ln2IoQFN#hUFB@lU!vn?ziC83$10I{0r0WFjwCxLe;|W!H@2#@mTEdR9 zZ(DKD#m1Yr;=R?hw*-TkTidpX@tyfD+G_i=>dzE>d91_oy;kY5{qfM*bL^H`&W&$; zKjpK!hw(1hd&KGe%=tZ@X&r&yq5B_uI0tWW7H-iIAMhE|7U$qrXW_Bbahd?%DA0=V z5xB@$yhrjqquwLoNf~4Q4+zWmNNCIaWK+d)_|96#^sV{_|A3dZ+RM0Oncg>@-XAi( z2Qt0Qncm%LRi8y^@A(6QHc#&%2U$ z+#D}957(d|@{`e-c!GBETN6DWxC@>BN!W3`>ulbCi8JC| z=PrD$Thp!Qwq3B?>Awc9Am#+8cc-&iN8wKAE@)>9RFj!}Y)qTS_f;^#FptM+wsd3QUT_g&(O*zMf)qceGD#S*7K-G;LpyK4#G z$VG?-(WyW_3{j4=%ZsPS;L7PR_z1ofDpkAl87zcpQ!~A9r)9bPb0YDzX1{QFqn)1J zS~dTW7$?mk?UoF*+5x8a>wiW=9$1{+j{6`Um9;c|p|yPe32)%scx#LUT^drto`v(Z zlk!P;_0MS0<^8NplX3ucd8D&yt9ZwEP(J9}x!@EOR?`MqWs-X5w{zh^XY!r}8Ib!V z)(}Mic=35W{%6?QHnOQ&K61Vk1v6p7xXg&Tg2R+SRud!JDvkcb8u7l0ajAEYbFeN| z@EDrJS82K9U~Pdu&=#ssMNQGjL^dh-T>Wz(358DYA*iGqzeCVJ7oKGcuK6-|{c>oW zW=~&(h4gFvW-OpomJ80!yWdifhXOQI@u}gbs@lkXBBkuk?X^qGVCS)Aipx%tO# zI^*EXs-Gio-OcZ3o<5VG-`l#?V(gfoX<3=xZ#i;Kd^8ker=R{59q`m>R&jYhAy;qH z%*4ZKGXnEb^#Az$ePvDP{5>7>^S9>j>3xeZ=aj zPb0L9R_~UAUHiQ63d|Egy!-zeiLe+#Zlm01>bsx@-&pa^l5ZeR zgteqrcevqbk3_rA=GS1xneJEf)KI5Y+lEWCOuK%oz69#VHIxgQaNvcboOg=h<^ECU zx(0u$cc2X{+?oEqkuL4ZPxXnYA=b z2q!q;uMp;XfSJ+bmem0+#QHl=7=F(9UdE|3^wH>7@6dsB`qHAELn07;LPY1TpYRB| zr&d!RX|r)IdynF|rPJFxHVr}XuD^0$`Ki;_JJwmXCEDrTu6ZVdP}`6m+dIAHW?M@} zguS4-DLTC-|F{BgMmO&sLdZpmPsZHMvkqU3(?79?(_e9((?8DPOm5chZE_|bhc4;wb2eg>0 z_BxYWDxTs>TlM9E!&^12`a`;Xf8+%&{}quge`GhOe^GRrwjsKvD5{4@T~X0a{}nKy zSG1*1gV^QI>ekKWPwj=$UZCnJQdd+jP<0bjUPTqDD2`VYy+P4kP|Q&j$0>?FisA$p zTgjwI5$|dnG_cp0xT5T+8zt%vK`CCKQ-l*GNsJ^p5hTY6l4vsUFYeY`mY*cc`=Y#u zDA$F1SlsOdS>8{UpN#ToQNBZ!+hzGFvK&+Xik_nU36v`lPLm|3N|Mt+(o2wd6pOyH z{B&7<2Fi~|`2xfbi@TjH%Ld4@Gf~!?WfNJ}UzVLE%N!`{!?Hv+>#S-~lAkS$2Rf4v zEr9s0Zf9s4Vrtw`=P=2Nip6@7iP_mhxF~$)2l0fqKE03aztcl4n}w;J=DS#1-y*!! zxSFg%J;v3f4~o{${fj6O9~}5vpUa7wtXD*3R3EDthGm$3;?QGU2Sa_<`y7R;ZKDmJ zm6p9#e+8_B*W&m2dLyBuN>JH^8${!9T<6hojRKj~aotCFNMx+?T(@I#4aI5>JDU+} z*9I5G+S^W`e)ShXsQj0RXOD-lLI1TPFcF=^B#Xc&9UYHTwNdmK`%>rI$^TPwa4-|vs@&WMY#CmB=+FSrw3=6(a7EYKIti0}9CUut)@ zUK-6lIlVnvF16dN5yWz?atQwH!e1i1HoveoJvKVA$>lxI={c-buM)L?VvOPaPH&)U zp(=V%e9!2@%kev+B1wF`=oGutJ3czCB{CAe4?N5jqv9H9zP}1$Eb%&aaj&(-n(?30 z`(+~D`hBcdQ5oLu=nG_u1yg)L;VU)ZJ^oBZMaH^(=d>-?-y`HtnVkYXy!I%*L)8)? zEf?#7_b|Je>HS&sa<0=?9lKie$Q27`RuntQ>FtXq0#0u_i~yya(Jlb!3@nJ4wF2Y9 zLJ!PvVj2X8^w`lMN}HD0)S4c9Rd+|74X1$EBc{hr?ZpTIA9!@fUX6GlCUNKgcdP%e z!;Fx4APrx7ts;W-*sJx;&@55%vlj?&k8wJ5du-HFV{nCHI z3TM?Xr@BuRU-!*VR=oBn97zqwIAx5fuvO@3l{ZIpulNKXQp)sKoFWGBzjVO9kpWym zT5`rInkODT*o-F+cprlf@r!=DBV0k65t*T_pNMsJ{lw_zPon{3V4+@LaeU96q>93? zn@?!|k_A)o4x^+Ah>X6VOzXLe1U)jmZ?Y@~uTr)(N3a0@Wm!+qzb8lquihlt6VdY^ z>Q(e9&}Jj}D0!JoPC^4czb9H_WkKDqK-=~Pwn_U@hKR|I(u|YSdLAOxiJ$_rk~e$q zOz-&)N>2pwI}u{gz!$*`P77i(Y`XRcoZN;Ccp6viaG2Oj+J>n(?yw{HU{D)@vTiIJ zE%TAg+ne{=d+r2bFHw%21}3$@0p6U^8=tk?LEnN?6K?XOfjfb$B_1BlQXpQg7zGYX z0R#@#h%*X8=S;=voG)0aHgVvB^CpnI3cfrNU6V(M+XFM;)QtU!z|kddL?xVZqzNN+ z`Y*ar#@jI0bYnShDOhq?Z8%z_%Xvp&xZ!w5dV>G^B>1prLE0`o9Stry7_s^ZJQK{= zBAv_|nr9{qHQn2^Rf^4=#aVN`V*lhfs~hfmQiy+bCN>qY``;qCcENSq;b84H?907h zxV-VPPB>q&)}p*14BZVf*##pjojr9p2i_eLYVRQ=K9pf@qguYp7Mf zhvP8y3@u4hwPIOI=vt5sK{IrO+R|(i~D(f$sn0sk?~7PjEiu;BD*a}=1^ppk__kdlN!VjI&GY6j*i#>F ziNtFdnTysu{1X(w*)`AkGUw1dmm-(g1Z*nYJo14B_$A^&=da_rKm|hF5sm^By|P^qU7cC|R*MCi+HvJ2sW(dPt2_;4qpjSdLW|6D&=O z!S6s1(NHCL*}|sGLmVb-vp7s2j+OfVhO9c7GRwaG83q27KY>m!0+EPQL#N=m7Jhdq zevfv=?-j}KO7c6SbAB(=#Fcy(DSlUV%I_p?8Q96|>{qc{rU_466 z@1oB6&9?BHq4@owQ+|-|ddcrB@@s#f)Bb)9Q#R!5t@xeYDL?4%Z<5~|qrq=w=lt%m z@Ou$-w3l5V?X0 zaqL+L{nC1F^B&OFFN8n8gpuG@{cr&B^qJtR_r}9;grq3C+4g)7jv{&JZ<_>dpIZpv zwQL*vkYJrj@G=Noz6|Uqe{gvZZ^XnzcE5K9+Q(KhTHkjzclm5#FOBU-fr8=9 zLYC(lL&=`D=>|cBAh51@B7~g=TNV$rjU_KFJ20UST1zL zMq>ZG2>n5{yOBm=(1>qF*1Jh6{YUf|XURP1_0NmJC62D&7p(9Gm~vzI7I2)T)Q_SD zsnJ!J$S23}%dhXpEO?xb7Es&ljq=Lkb8k*-LC>)saleC0w3;SaJMm+@P zNC(|7(rJ5Hngw3DAlWWS7D|$#<&s1v$uyA6%hD2BBuSPeNtz@{cvC)p21v@M;Y$T1 zNung_H&l}BY#Bd`H=t8y==;Us!Cc1A#W1AOKm*g4Q}GPb1Z>1-+JNwp6cj4W^K``MAv2A>g2;E(g2{u@NDYPm35`wRCW#f8w8c&Sow8E_A4#C=+j zf$d-hGt04^j3n4W2L?vx>%c%y_=4_q?fN!c=HqLJ;$Fi(_}U%mTHFC(ul*j-jMwoh z0N+9MAsW#VE_Z9ob~Cp*qZ>(^$nr30_mk%VT+Nc*A(Tyf4Qv7|3V?A7sapU|(=)VT zuVHP4%K{#c4Djbi(68x>(9WKPi?oFCix-yRgFDY*A<&lA!*W8| zS+zYnGr1k1G6o_r7g4hG_r~~S0ONNaV>^GG&w+XcixAR2RY-Ah@fyTIdPA%>xVIRd ze%G;J@D4R7s24t9<3<=m#39=Zat@V>+e5~x7@Pm|F51)6F_c=T}66 zhZw8t4{@yi$6Y0DbXTMm`B>^YI^6AAIPrJDf!Ps4Q&rQ&eCeSsXV1t-a& zs(PHPOn+>TY5)P=B`lbNK}~uZz=9K@si-HB!^pR2%dVFGBSumKCca!ogX=bm% z%noH}S9PGpnfoBx+vYv^_7lW--^=k{gvdvZHygMJ4A|}h4FOCOS`QUMS&UkrQ`x{n5q17N_*6LgTqWvuy0QSu>cQ7 z>`{*)M=dP;1EB{Mq%9q(D1EHDbPyn^i5IA=5KRQ4MYD4K3$`o%9kE3$gAQI6ORtm7U3-)%&UMw0Y z2m62z!~Ji`nJ46Q{YuUYLgkz@Qp$NqrvI{>f<2_A8mw~O4t-)d-+8-LTcFYOBgef(qQw{=B)EByN~N-} z7DIvk11+$XpvwM58BPh6!Kq~UR;EJke@6yBr2e;MxYrk=hi!>c50m~w8P%m4x7zUd5k)2Rc*Z@8RF^S*_h%Xjj%Nh{74!*?(E^O1Il&wa?IZa8lQJgEj| z*&R_!4L|bZZB5+0DH2W+CC8zaOz#)Iv3!&C9>~&`{A{})j;Q($P-=IzfUFTQx()cs zK{lJaF9|LOvYXvzYd8TVTDmTRWW5(#VYsXxSc(TCk+C>3icCC=WAom=v4i@4itCk6 zkMin(*L_u=;0w}9-pBu4yaB*{-JrXU9=o;AT5KqQ+|hvMk--^0_C6;Y&;InokXOA$ z(Jw=Lf{bTVJYDN6{)DFH`2bZBwoQ}!45h!s4od!s&6cXwZeOxJ0^$eKE&d;Wuc2@@ z_A=Z@U_bCn9K-vs^zYD!cqQel5bzg-aXIA^p*@}*iO_zc=W}#i~&@yljyty8OYI;0=1*7|d z<-$I$*+`4x9yinbi;DKAY3sA2UA_ywaM#?(j^;(?#n@zqZh8}&YG%Za#;JJnagNh$ zyogK@c4v8)^nd>j;6J%+kXHl&b*+VmI~U{jUED?LqoET3>SfYVeG&9t{eioeIDoJI zD@+QvMl+))`trFO7P`W-hS)P?uTQs812yUFcq+C+=6kIFrhdN`(r+y3EG!dL2{HFh{dOKL~z4dmdKRq^;m)Fr^{KfS|@NReTK0Gvy z)2{$^$ersNAcF6+?!;+upY!86lV)JkHyA5r8}7j9$MiQrX}xzn2cjDHu03v99=H+~ ztX~fzJhq@1c)=4CC>7HVl9_`%_|wb$qa6C?Y9WsKTI?)}hpQL6e08DS6^VHRnWF9= zV#_8^8wV zxA5i(I~SgaGp+R?Xy6}3)0Wm@An;0fBa2zq=OL7Blx3ADYyK2ZiS}%!vv$D&^?Xy$ zUxHH>I%IEuj1{d}p9~aTQfn$|pn5lux2E!@38#kvyeK=qrhkLo!Hdp}2t1g|z zmX;(QxFpfBeRQt0B0O+`w`{|E*m)qc+RqDw)%%uc@xG-e-nURF-tl!T#0i*J0c9xsZ+?`7H!c%;Xr4F-DqN;M8l9qN^ruD|9TjSZ ztDDeWxjKXd8zw|4pqu{1A5jJ4*&h~O_3|-k!MX6haoYOS=nzAe>zTz*{`c5%X7a0@ z+VLr{z7RXU`WAGTcH9qkEIc6H!`_=<4Ci9KlQ#PeKxwlycD2mtFMyYLl2r{8g8!o> zk+<=JdkD&{4$ucU_$q5OBZRnE(`a2VTKNw0InY_{wmU>L{2uHUueq&un?zAl|9@(? z!M9nVc3XKPRl7}?sbRRnLespFu|a!HgUjfqj|8#twh6BID=~_eH%)QKqYj=%Vkb6S z0;s3{G81ro^rUwzf*ybR1xw0v;K#)P0<=vuGFLLwh7X-ce1AhKy&m<$NE7R_8U0Q`-(8oXvWq>_9NP@`FRtupSkWV>8--{Gu_dU z)n82^tkzj`KXWJ8(RpH&{+0dA{)M5w^Gb?`CEwi7{EV5(WxoY?&uWhqzMq+gI##(} zAZ*5uHG$_j*<0`=D0sevxKDhBDH_3>1K+whMEsGK@pc|for0q&e3pbCFB9ieFS;?O zuuqn#t;?PMQir|}ZQxslGHk|I3Y|QF@}=y*5~0uE(5bdH#`yPa5_l$gL#^F8^5iHAHv69^6{sP{S5LRMuC8S`2^7D1?mK7>39cjeZ6R9BQDa= zV$wu54F8ivP5P$b(tISra{(GJ*q%OvB-?pFqmjzHUtG0m*Hv*v)BgzO=3mH1aRU&1T>tz*v32-WQ z4BmI6e=o6r36eHN(C*i#g4WW%31o*WAgUlnu^VA!H!MW|*JOIdX;B8=0OQ&FtJuiC z%^Tu4#`V!5yI6dBSMSfp@F2pT?!|{B_ow@YW8cw=*5Hedy(=EgI+FwLDZY_aM+dsc zZ3Mp38LT}2!WDb5lur+Y`XeJGwf=u0r@ zGPkS@qkdw!vFB;68f&ZQ4obZQB-Ra0s#;G(|1ynd{bv8ruI0f8KEI%+U?Sin1)^8z zy|q_ZIg@p_%Xd=Mj|1H)svCMHmSWFtd>$0RA~dD`j$*}7bVGf3L7c0Y=Y8qkA#HCm z(tZx&GkxI?=*t9jh%*63sQNNQ|1${Wd7iTYJ5K)Gnl_cT$xmR!o@mZed|U&km^eX* z>5-YdZQ=D44LjMd_|c0LaKFMI@4zP`#79hVE;|qVLj3)_`D}h34vx)Fii-VT2KOU; zw}S5#lWfDNFa;0b&_e&r6d9+WV})11hv)J5Buak*ygAGE8YKLHCfeCbw!i=Uu7Te* z@Vf?n*TC-@_+10PYv6Yc{H}rDHSk}nfe0J7kv3ayPDx3r+mTzApX1JVl)LlBj9HMM z>n<&G6y=o7$uD!b=jN0+igOlamlxiYABW2<`7=AGyf8Pr++9{!GH1+~?1|aAr6qtW za@~%SilQP1nJ&mFD#SUK`017Mzy9I3x7Zxh#}65jc%fs|HR+D)TxsJ+4^K==cMNe% zEX*4^@`B-09Br#!Y+tpm&G)#YeRXZy+Db?JBX#YytJ|J>(b4hH9Ub?*=xFz?Y`^{S z4$sP&;OKA+b+kRYvTfZm2a$I^IL5JWZ6z>q?W?Oh?pib0A;gz-LDtoew?DsPjHCUp zm2FS1bF?kJ2W<+{tvLs@v8+>1bc^c*lL!?H-@vCfn_(t?sB^ z+xFKbj<#p-YhPJC#$a?^oNe-?i3#Ofo+S^64K|K_&pp~+y}Dz?iygI3jtS+naDU(oHS$x547V)>p zqX2o}bBgD)KqL}E5h0Y3Jqu;3U=#}&<@sf0EEb7`P)G=6d4=Wf?3_hK`SH1>#l;X- zifx;|@7czE&#j(GW7)T%!O?NY9qp@NOAoBu*RU2Q^?1h}Pf$-mx}b6&SiA38gJzh; z9`~(X4g&&@rL>;*N7r%?VT8VC9BqGlqV3+5XiKoZ--|JC^VPtrhZ*v~q}u9M%ydji zcZF7MUsnT>Iv%{wB9&FHr`ExY9Mfi(E^@TL@I=S$4Q-D;-u9=b;;iit#vFiLl)G*D z3L#|e?d`QI+HbE96~i{&ki%L%R4r#yo~x%GX`gEH zP!Up@&sHltZpZwio#WTOXPa>T$6Bpu<%D5!Taod!2GIy?RYQ`|PtF zp*pF(qwSG99Bpe?wpXokpm?Uk<`{Z0jTZilgMvQ9bEw)MUJiSIiXQioyA3JZMfHv) z>)QVERQvtw9B_l}58bB(>vQ__%cl<-I=XzOBW;>1W6YqWVIvEQ;ROc`9WlBbX=Ys7 z;4u?igNBS6mRR7JFj-|L8<@!kX0hWMrz>uPD`CRqgvqXi$&&|<8B{)qEC#V^aXGBg zW<&q1mdRzMy%xhjOJg_C%ex$H4R^GyuEFf=Sn?G51C`b|+Mitk`5o<#-#u&?CS{Pz zl&cLN!NGi_&e8s0wHPhYUXTv+K(w}crBDLKT6mVWN1hPgK+J^p)l1q}z9`&)7;;X= z2WqUdu-Ek9_{j;Y+MDTc=9J_W)>nuOoIBX0PjLBmH)8*J-%a3$Oi{brmIOboVR!8Gxyw*u9>#!S6+@^5}b_Ol&mW!ojnsV%Gqa2BgfRRCFJEVNN~GvoH}LPa9eR<9-@?T zMoR^SbB5heURq)sI&^+%nOh}^Djk8eFpp4S-UwT{yR;BlcUeyEyzGUAdG5J@7S7Gj zFT%*=v$z0=vYfoaigILTR}|0BFGD6LH#ffsXpVR+N?Hm$Wb+0yO0xxxt(cyuy&6lVhz~Kl5g!Vq5dsz$_mT)ing|gc2pigOdurd>C7^TMf?q14 z6M?7-P(`2#7s@5CekGy|hqPHt!QuouEUd=B02EOn5SL*b4RFh|SPx#ygjIWu!+=FUSkGRZtFvO^sut07DI(iPu%`Fpo4sDA0- zmtX0_*nH1k4Ad5uGiscnKs{S^5$wM&mb`48@-#`0HZRN81u^cu=#rXXOR%wlHEnEc zB*=NmBUFKt^inBJ@QD!s;e-!3(|BiHd>cku%A%OMX0kxnpesR#$!$9{aK5H$4GiGE z`(FM!rUVS;5q&A2aEMAqC6ENFU~0k9$fs}<v@5d#(W7S@Yp5UjppIBV6BCZseZwC+B>Ou^si``8b{*#$qq5gp7~x+q;+G z4*?%w>_}}@RTX6JUBUW3`Y@gVWUa)5cm5g(g5U42s=8;zl`lPxIEHKX{P^{cGq$;o zu`}x#s|FmeZ9gz&#VcPwwBnF)`pSPVViCL=w_&D5ni;0aM>CBqb*{+d<<|DVgILcxg&PQS^)hH#^QhpsDCG5EB15U z1~>xP_i60D035m{m!n@o90BYB|G`^xxxWC80J`wGpzoh@xw(MaZCD2c^nWXtqaX5c z;WE$t6b5_*HBTaU{&yJBh? z>6q|XcxV2bbGi9MQ$Lk2($0k!dz;vi##}B7tgnVyIk8V&g)hlax#{Li4=e@wV0r)yV9z*#wH z4>+}f(t78Deh0+ZzhZMPsBvmF&dOS+s}}Me{K?T{jFB$<;7g#Mct{rB4kF&l0s9)K zwjOG6y6T-}Ov9^A&>5h!O5Xy|&{?H%(DcABWFf`@d%aV;wA@*VOa+`}Yp{0h$7?z< zRF8VeFYQ3QyGzzMD|gvzo!Ve&jdQ_(qt5B+pVHuLwO888ogSc&f!c`-Orx?TXWJ24 z$4h?dS6?}wvDvEp*Wn%IZ}@i9P1Lp0&!S=>o;@WHvYX=BRa)y@FzBdpdIqM{IG6QL zt#_vFXO)&amjQ+NKw^qdgDfid^u}E7bimS;kmpSIPaT*t=-5@d+rFoSm(dW~)5pGp z_5>PoWGHR{ZZ&Yn34t{1qBO`dLPS(X{*rKcei^Nu#zG(;1MmJHp$LE}_eP-3VotEbiH2U#cB`jDO$x<~Ry?(-GN8W;+`J4runR+@uQF0)vj ztygvSeo|{O$aSu>3?AX*UB&u@Y67WA8+fu9`JorjPP_V2me z&j3mjNCz)#*l%H$DJAaHUQGD~^@GLfvow zLCK*HaJ)<4$$#cH_^-A(u5++`_NQ%Mbg)AX@pj&~OB}l@*b60&n=06i_K}k3E7ITtI!JlYc}=+ z8Je~6QpTRNIqtBtKibYgO-77%_DIRaA`?>P|CDZlsC#UVS26l}tlV)7;P5oZv%78V zjf#;n3O;#8zwH~>+Sq~0_Fp16IO`WvuSf8PxsD(1v9W#gHWKmRe8=;6`Rshonw#%< z9mqo;;i0EK;&>6EFD?8#;y<>KBVSzTxE$=aEaIV&MUJ=duKzq9y6HT})rjG_^ZuR~ zes#fYivCeIfA@mh@d)^CzmSI>zR>X|LVvlioG5SgaO7c+;}sI^<)IO;<4O|kaNLE^vpaa` z%^i+!gWoUjV2tE2a9(v((j{6aM_45rx@`r!q$i00w$Il_=Q9we! z`UM-u-+ZObK?!*lkjmvvz-y7dkpU5Y25>L%Pc_^< zCKqE=c&s4&RzbKzezZ~aXBLF#%5a60&otqo+il4C?-lTD0hsn@;h8PN^evFwECHBD zzE|rR>YLH)CvqtwIf&0q#lZtF7S5qp!f4WpW9RIu39KxOmdy~*_!+?4*qIakufkiU-^1x=vXNgZ z%1Kx(zbiQX*%SSzqQ;NkA>K+>*nfNmc*ag=BabOc0n@;rmXG40%Q@b~{IWo3-HP0R z1^t~C_`??X;}-be0zac<7SoUmv!neur%}6>-hzG_CJ4p!jQz(&@yjgmLl*e&15f$VZWie|Tq59c z3;Gu=@PD$vpN0ty*`KuR@6`Tr3M z{Bsug6BhUnVSZLj&pr$MX5gv)7TVj01wEGhdA>&O7OAJb9^{T%(Eo=8ekvxc#nQRS z0>2e_(sPe&M@rAv0#ABAc#}v6-v z7t|`|c6x7!iQ|k?2dHJWV1bIAI~@G&ER}GkTpM(rzfbU2j33vB2-Nz+Z2HzrzB5 zzXkr71^x_7K&X5R`^ReF!E%zj8u%IXW<HQo!)RAL^PY# z86_JecvVeNTS!fp4wP_21g1rULUoW zRncgB8;&vtnqti!y(!-8)d9(CG@EPdd*)RN@-D^6$5eY%L>|awQkmMtysjFGq#zDY zyen=<^8C`x%SKT$A(Cu|6yC6ILv77EUC(y6=|R0i&vbWn;l2#swAU>|J4{h*43;Tt zbmIpzBdk4|iFV)$0yJkM38Rzhie_Q5+EaQ*BGnd7=8K=?$vQ_GtjQeAv0m4iE^~t8 zugwA2mYUji0buJt)mXDWSO-}RjT`mAYRR*@zKP*l0)0)YH%rGo8xbobweXC4VZUHD zQ`=#DI&g;wE?!7wP#ygZ>w>j)pZug=<*v?SuS=w|;EyIF>0Uvk``q4Y2y0J-wk7@G zsi_U>UU!vyIg-+{zD}h&*s@-q)F@t%K3l?Vi71Ojx{SnxG@pAhn5js|y%BE54^QFLShACRyld_{Qf;_uW?+t9j zDc=mv`Q}UDT~W2PUomOGiWuHN9VFys3w0}-A7@&0W_q&Qi1z5+U5Qj=YhG;pXy7_J zjoaM5HApo#8}EvwviWIhjvAAMA=GdKYVU5Z!(riCw0WwlVIzzKykQ)A*7Y`YTGGF1 zc_f^O)HT(4mxR`KCRu)hPD;*6wxtScULWqM6X%ozBps4*Vmi{fRgZ<^ljU7a)d|#j z+2b89dPh+?+rsTS9YD_48dd9yyODE5?(=e8Y-poM6483JMY=dglok57@ML_ver(COWFbOFYjUA#!M zL!(J8jwQOYo%v~DF^()$&$}PscsA(I9Z_oC)T1{eLGegnOK7dPdeRCI zU1%Fp(rhHM!IOuD#YSO~7Ck_fte|5sA|1stZMHclr-~X@Pmhi}5pdrEjIGhDZ}XV? z4XCnM$-~A^G&MBD4x_VpXQfBUqVeoaGC+^GPykmWKs$w*K#@!i;#HfA#Ug9oVUyd~ zwLRX|t~W)q=x_X3szaYi69$aMm&H?Aoi2qy;b0(BX!SYGyKPETO~nOafu`h1HQC(L zZ-8~7bXb_i<*4jNm~Mdx5LMpDa5*Y-Z6>@mnhmsxtjNhymHr8z*C$OKdacOTs;<=b z{FdwX@}^?8I?FI-;zlPB5#ruUuEk9!WbaPOHjQKR8Xl?E+@jkpTQnNLJL$5E7hb_c z0{uF~Eg?IJ=?R7rmNXKL61 zqce)DL5vWZKK{!wN)9gt0!LA-%>a6Zi{6pjeEnHC>2Vcu@pwtJeyiZogK~C z-eV8Kd$M;}Sd001D!*3BYMejwtMmPp0;5)(U-b=CwO*PGyiL_dGUYTj7EeUmx?@FW zyVax--hI=jg&<4?wb&$PNM=PKdHVEmUE>J`7s4QHsX`FKI2 zu<6#l!VFoMfO;P$9K2xOZTqCoLVn+Y1**;;&`=umF2cK%jIJEsuZt(~O(}pc2K>tbw{?29%c4L@r_>>0B#?-=(Z!XRedshNolt!h z6?^`yi&#+X*orG#1sKm;z`zplPrSQ@o zOU1ADRVsKulB)D8It4$E_q1nIh1I@I1vN@E9HpOhr_xV2a=Y*lUh%7aqzd*)eigss zSNXp|^49{AQ~OdCRQp(opZ4Mw@_z$3ibBa}8Uo}r{vRtt`L3}1_v5vhU(*D=g6RSV zEU$5=;B5$*`G@9;_X;XHfu%KK;S@ZGpqYPI@+;W-SK_CAd1ijKuT4S!H8Mg8RJ;oN zKmotn_pBh6ZS!0~a@fO?UzI-_k>nDNV7=4q3gbV9my~|Rul7|bNOvxoU19uB;Af;glI%P#)qGzuHIM^9oVp zJ_J=TA~?aXofLo)thDqJ|)_dXwwO24vS*rqd)c6cY;_zB@%j`dNqQ}HSsmcfhi PFFajPo?pOF5M=)coqxg* literal 0 HcmV?d00001