From 570964e5027bd173db8e982ee1d636fe6fda48e1 Mon Sep 17 00:00:00 2001 From: Gary Bey Date: Wed, 1 Feb 2023 09:15:32 +0800 Subject: [PATCH] Added README.md for demo_nodes_py (#600) * Added fully elaborated README.md under demo_nodes_py ROS 2 package. Signed-off-by: Bey Hao Yun --- demo_nodes_py/README.md | 278 ++++++++++++++++++ demo_nodes_py/img/qos_listener_talker.png | Bin 0 -> 16717 bytes demo_nodes_py/img/serialized_subscriber.png | Bin 0 -> 9995 bytes demo_nodes_py/img/server_client.png | Bin 0 -> 19184 bytes demo_nodes_py/img/set_parameters_callback.png | Bin 0 -> 11135 bytes demo_nodes_py/img/talker_listener.png | Bin 0 -> 13193 bytes 6 files changed, 278 insertions(+) create mode 100644 demo_nodes_py/README.md create mode 100644 demo_nodes_py/img/qos_listener_talker.png create mode 100644 demo_nodes_py/img/serialized_subscriber.png create mode 100644 demo_nodes_py/img/server_client.png create mode 100644 demo_nodes_py/img/set_parameters_callback.png create mode 100644 demo_nodes_py/img/talker_listener.png diff --git a/demo_nodes_py/README.md b/demo_nodes_py/README.md new file mode 100644 index 000000000..dd319ab51 --- /dev/null +++ b/demo_nodes_py/README.md @@ -0,0 +1,278 @@ +## **What Is This?** + +This package contains the following ROS 2 nodes: + +1. `listener` +2. `talker` +3. `add_two_ints_client` +4. `add_two_ints_server` +5. `set_parameters_callback` +6. `add_two_ints_client_async` +7. `listener_qos` +8. `talker_qos` +9. `listerner_serialized` +10. `async_param_client` + +## **Build** + +Run this command to build the package: + +```bash +colcon build --packages-select demo_nodes_py +``` + +## **Run** + +### Basic Listener & Talker + +This runs `talker` and `listener` ROS 2 nodes which exchange the following string with incremeting integer: + +> Hello World: + +```bash +# Open new terminal +ros2 run demo_nodes_py talker +``` + +```bash +# Open new terminal +ros2 run demo_nodes_py listener +``` + +![](img/talker_listener.png) + +### Server & Client + +This runs `add_two_ints_client` and `add_two_ints_server` ROS 2 client and server where the server processes two integers sent from the client and publishes its sum to the client to be printed out. + +#### Server + +```bash +# Open new terminal +ros2 run demo_nodes_py add_two_ints_server +``` + +#### Client [Synchronous] + +```bash +# Open new terminal +ros2 run demo_nodes_py add_two_ints_client +``` + +#### Client [Asynchronous] + +```bash +# Open new terminal +ros2 run demo_nodes_py add_two_ints_client_async +``` +![](img/server_client.png) + +### QoS Listener & Talker + +Similar to previous, this runs `talker_qos` and `listener_qos` ROS 2 nodes which exchange messages using the Quality of Service (QoS) best effort policy. + +```bash +# Open new terminal +ros2 run demo_nodes_py talker_qos +``` + +```bash +# Open new terminal +ros2 run demo_nodes_py listener_qos +``` + +![](img/qos_listener_talker.png) + + +### Set Parameters Callback + +This runs `set_parameters_callback` ROS 2 node which triggers a callback when ROS 2 double parameter `param1` is set. The callback then sets ROS 2 double parameter `param2` to a fixed `4.0`: + +```bash +# Open new terminal +ros2 run demo_nodes_py set_parameters_callback +``` + +![](img/set_parameters_callback.png) + +### Asynchronous Parameter Client + +This runs `async_param_client` ROS 2 node which demonstrates how to set, list, get, load and delete parameters from the parameter blackboard in an asynchronous manner: + +```bash +# Open new terminal +ros2 run demo_nodes_cpp parameter_blackboard +``` + +> For more details on parameter_blackboard, please refer to demo_nodes_cpp README.md. + +```bash +# Open new terminal +ros2 run demo_nodes_py async_param_client +``` + +### Serialized Subscriber + +This runs `serialized_subscriber` ROS 2 node that subscribes to the ROS 2 topic, `/chatter`, and deserializes as well as prints out received strings: + +```bash +# Open new terminal +ros2 run demo_nodes_py listener_serialized +``` + +![](img/serialized_subscriber.png) + +## **Verify** + +### Basic Listener & Talker + +When executed correctly, strings should be printed to the terminal similar to what is shown below: + +```bash +# In terminal running talker +[INFO] [1674573022.635075580] [talker]: Publishing: "Hello World: 0" +[INFO] [1674573023.593075728] [talker]: Publishing: "Hello World: 1" +[INFO] [1674573024.592438479] [talker]: Publishing: "Hello World: 2" +``` + +```bash +# In terminal running listener +[INFO] [1674573025.634810166] [listener]: I heard: [Hello World: 0] +[INFO] [1674573026.596392653] [listener]: I heard: [Hello World: 1] +[INFO] [1674573027.596400384] [listener]: I heard: [Hello World: 2] +#... +``` + +### Basic Server & Client + +When executed correctly, strings should be printed to the terminal similar to what is shown below: + +#### Server +```bash +# In terminal running add_two_ints_server +[INFO] [1674553268.912391774] [add_two_ints_server]: Incoming request +a: 2 b: 3 +``` + +#### Client [Synchronous] +```bash +# In terminal running add_two_ints_client +[INFO] [1674553268.912602310] [add_two_ints_client]: Result of add_two_ints: 5 +``` + +#### Client [Asynchronous] +```bash +# In terminal running add_two_ints_client_async +[INFO] [1674553718.598690033] [add_two_ints_client]: Result of add_two_ints: 5 +``` + +### QoS Listener & Talker + +When executed correctly, strings should be printed to the terminal similar to what is shown below: + +```bash +# In terminal running talker_qos +[INFO] [1674572630.018298164] [talker_qos]: Best effort talker +[INFO] [1674572631.021168516] [talker_qos]: Publishing: "Hello World: 0" +[INFO] [1674572632.021072723] [talker_qos]: Publishing: "Hello World: 1" +[INFO] [1674572633.021197421] [talker_qos]: Publishing: "Hello World: 2" +#... +``` + +```bash +# In terminal running listener_qos +[INFO] [1674572639.695289182] [listener_qos]: Best effort listener +[INFO] [1674572640.023684925] [listener_qos]: I heard: [Hello World: 0] +[INFO] [1674572641.023416691] [listener_qos]: I heard: [Hello World: 1] +[INFO] [1674572642.024505343] [listener_qos]: I heard: [Hello World: 2] +#... +``` + +### Set Parameters Callback +#### [Before] +Run `ros2 param get /set_parameters_callback param1` should print the following to the terminal: +```bash +Double value is: 0.0 +``` +Run `ros2 param get /set_parameters_callback param2` should print the following to the terminal: +```bash +Double value is 0.0 +``` +#### [Change] +Run `ros2 param set /set_parameters_callback param1 28.0` should print the following to the terminal: +```bash +Set parameter successful +``` +#### [After] +Run `ros2 param get /set_parameters_callback param1` should print the following to the terminal: +```bash +Double value is: 28.0 +``` +Run `ros2 param get /set_parameters_callback param2` should print the following to the terminal: +```bash +Double value is 4.0 +``` + +### Asynchronous Parameter Client + +Running `ros2 run demo_nodes_cpp parameter_blackboard` should print the output to the terminal similar to what is shown below: + +```bash +# In terminal running async_param_client +[INFO] [1674574042.977327137] [async_param_client]: Setting parameters: +[INFO] [1674574042.978217825] [async_param_client]: int_parameter: +[INFO] [1674574042.978474500] [async_param_client]: successful: True +[INFO] [1674574042.978718655] [async_param_client]: bool_parameter: +[INFO] [1674574042.978960532] [async_param_client]: successful: True +[INFO] [1674574042.979200840] [async_param_client]: string_parameter: +[INFO] [1674574042.979446692] [async_param_client]: successful: True +[INFO] [1674574042.979687030] [async_param_client]: Listing Parameters: +[INFO] [1674574042.980229123] [async_param_client]: - bool_parameter +[INFO] [1674574042.980476617] [async_param_client]: - int_parameter +[INFO] [1674574042.980717248] [async_param_client]: - string_parameter +[INFO] [1674574042.980956813] [async_param_client]: Getting parameters: +[INFO] [1674574042.981544032] [async_param_client]: - int_parameter: 10 +[INFO] [1674574042.981794832] [async_param_client]: - bool_parameter: False +[INFO] [1674574042.982038493] [async_param_client]: - string_parameter: Fee Fi Fo Fum +[INFO] [1674574042.982281892] [async_param_client]: Loading parameters: +[INFO] [1674574042.987160462] [async_param_client]: other_int_parameter: +[INFO] [1674574042.987431457] [async_param_client]: successful: True +[INFO] [1674574042.987679192] [async_param_client]: value: 0 +[INFO] [1674574042.987920948] [async_param_client]: int_parameter: +[INFO] [1674574042.988162645] [async_param_client]: successful: True +[INFO] [1674574042.988402691] [async_param_client]: value: 12 +[INFO] [1674574042.988643394] [async_param_client]: string_parameter: +[INFO] [1674574042.988884034] [async_param_client]: successful: True +[INFO] [1674574042.989125729] [async_param_client]: value: I smell the blood of an Englishman +[INFO] [1674574042.989365771] [async_param_client]: other_string_parameter: +[INFO] [1674574042.989605537] [async_param_client]: successful: True +[INFO] [1674574042.989847066] [async_param_client]: value: One fish, two fish, Red fish, blue fish +[INFO] [1674574042.990086215] [async_param_client]: bool_parameter: +[INFO] [1674574042.990325361] [async_param_client]: successful: True +[INFO] [1674574042.990565005] [async_param_client]: value: False +[INFO] [1674574042.990804701] [async_param_client]: Deleting parameters: +[INFO] [1674574042.991497679] [async_param_client]: other_int_parameter: +[INFO] [1674574042.991746545] [async_param_client]: successful: True +[INFO] [1674574042.991986980] [async_param_client]: reason: +[INFO] [1674574042.992226951] [async_param_client]: other_string_parameter: +[INFO] [1674574042.992465274] [async_param_client]: successful: True +[INFO] [1674574042.992703259] [async_param_client]: reason: +[INFO] [1674574042.992941566] [async_param_client]: string_parameter: +[INFO] [1674574042.993179508] [async_param_client]: successful: True +[INFO] [1674574042.993416599] [async_param_client]: reason: +``` + +### Serialized Subscriber + +Running `ros2 run demo_nodes_py talker` should print output to the terminal similar to the following: + +```bash +# In terminal running listener_serialized +[INFO] [1674574499.556053634] [serialized_subscriber]: I heard: "b'\x00\x01\x00\x00\x0f\x00\x00\x00Hello World: 0\x00\x00'" +[INFO] [1674574500.506343148] [serialized_subscriber]: I heard: "b'\x00\x01\x00\x00\x0f\x00\x00\x00Hello World: 1\x00\x00'" +[INFO] [1674574501.508214693] [serialized_subscriber]: I heard: "b'\x00\x01\x00\x00\x0f\x00\x00\x00Hello World: 2\x00\x00'" +``` + +## **References** + +1. [About Quality of Service Settings](https://docs.ros.org/en/rolling/Concepts/About-Quality-of-Service-Settings.html) diff --git a/demo_nodes_py/img/qos_listener_talker.png b/demo_nodes_py/img/qos_listener_talker.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7db98b612066925f63b2f256d4fdba7d77e32f GIT binary patch literal 16717 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 G`~N?=$I+_* literal 0 HcmV?d00001 diff --git a/demo_nodes_py/img/serialized_subscriber.png b/demo_nodes_py/img/serialized_subscriber.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec069227dc6f50e03312bf12071fc68ef19b6d8 GIT binary patch literal 9995 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 literal 0 HcmV?d00001 diff --git a/demo_nodes_py/img/server_client.png b/demo_nodes_py/img/server_client.png new file mode 100644 index 0000000000000000000000000000000000000000..89ebe4372ae4dc78dc59a97f7e74141c641100fd GIT binary patch literal 19184 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 literal 0 HcmV?d00001 diff --git a/demo_nodes_py/img/set_parameters_callback.png b/demo_nodes_py/img/set_parameters_callback.png new file mode 100644 index 0000000000000000000000000000000000000000..d3388f4af07c8f4e09d7bfa242d09b66f258ce75 GIT binary patch literal 11135 zcmXY1cRZE<+rLR>R$198GkcHB4k1|?*+R0n%3g^`sE{pN$R62yWMz{T$u4B?=Q`i# z_eZMpI_~>3uJIn%YjxFog!t6>2!aqQDWWtH1QY&=DB@znPydYvL+}@#lcJt0f)KT# z|6s)2CZa(QMnnlEtMwx3PxA9ev_hXnC({R}Wzu?CfaPgVN>FPw-7T^t5 zw55GqTW`qs=&NNp$zFNimq?{FW?>#yl4)f|(M~0(U^hr!Kt?W0vRXgQ-*`Y=$12cU zA2++}owD52Ywc>eG%Ysgx|B4Bi$eW$5=9Uuxd#sjKj-Iji6^V#)Eg7m8xK_W9SJel z`5I;n;xYxYg;^$N6=xqN`W^=|%4BJFCy6yK9VWKe+1aHHTBYgaPhND`i3m;4&d#Qn zm6ZiC;?fzmiYBRE!ZSpiYVc7nKY!-<5Es{DC@+6`>PtaE`HvSOi#9ek;>Utw_Myqi z$=cE1qg>tGUY3;!Bqb-$FD|xKKIm_54hX-ZsvAIns7{&Ll!u3h$LG)ak2|(;9cgQ6 zrAdCy4+;vJ3~3Asy0o#ekv3|hS2S$6IWq10@Ylq|#G^kNRk4k$^cACQLEYCQ6xu^W zzG_6pw&fKT%AYk+gCX8ULBvr#Kh>x z+t|Kk%p0|dXS6DCeg1rTAz+xQ8hJsImzO8&>nru|-@mBTRL5tvX=!Pr)Xs%Ex4mTC z*T)L=>Tj~LvQGT?QMnNF(@CE)sM++HU_M`l;gcs%O6Lsi?d{8YG)(Tic=4jCr-vXV zC1q=OSFqOp>C^Er-N50?KQVv$rq$FW2+a}-Z5$mP<>uyE{o|vhr6rRj)Ya9^mn3~y zU0?4*lOz=4>i5vdsIN^%N$K^dM&*ERhKHTqTC;&VBD;CkKO_WadS*t?{L7%#j}=ZaT2p6RULvWL$If(=e|*`^Sq(BzkmOZpq8}@GbO>oFg7-(xEyFb*V=lCBjz(* z|A(6a1pbvxR)S2dtT@-NU$1swr{L%3|5%IuTR?zj@0UiN*4F;M@JVa5Lv3yC4t8?u zd^rv3WqLYOSu*A7GuR(W!;V)vLLq3j-m7(PjsXJ$gMWE*li0+>1j4AiHC|HP3FABM z73@o;Wo3QBf8i}%y}d7+O^Xxm9sHdsJ8zVPtaR&t~z%IPuVrHYD+d#ZhFad9!N zxcIw`RApu5%1o`uHLN}PKsW(E9br0dg!3_cFFHEl!w0g=?CjDD5yx4Sjt<2eg^bZ% zNzYy0e2WJcbhNZTR#imdsjd&TwVBt|M>h>;>b=HoJZWfX4v&s*@bZ#0H#g(r;XS^% zgo#-#%1ca%z*#CPDMbtIva_=*s;O1g?Dlnbb{1SE#Ko1_oUK2)qDK_cYRwFh9~B>; zM}o}~mzZeFSEyg8psr3LCnsmo!g%Wz7Ck-vpBEI#Z*lG-R1pf9IXS=n{q70tXvod& zGOIDJ_w44l@8raLy#FU0PHji1jFu>5SSc5x+tQNdi%BE*dRJC<_QL+3DT?8*wY9fV z&1teh->V$wa31$JpRpp}zI}^IN_vx-d25N=sK&zCr~t}FIwlqlPKHUNuak?5&GL{d zdgDTQxw$g>`UxsjAKPR-Jibl}5)lzm-Fd;=($eygfRHe_tjtv+uHnII4W@r6`aB6J zxx1)O5=9&nA~u(oLz;tdGW;&iOR?vsrVZP0xt-y?X6Z~^RoQ`*`+uGZ2aB~wa52VHg zOGrqVkK}3;lrV_7+%hyY{897hzcrSNWo2cF`Wy?=tV+4BeK5P+vNhjIN=h0K8jAad zR;*Mq_C{qg!n^nH*TMn`14HD(f*D2js12XPv?vONGHrQ@Mjw;@@j98JU?c*FO8x@_f!GXXW?7pQ*UK z#H}qS2mHAIo-v{)uA-=Dn!L0=UewbPLP+!Kx`3tW`RNhloONMqr6FQrX=yh8#pv)~ z50CSF%jG4PtbIDr*``qFT5?qxSsNf<)RV0pg3zyDFvOPGS&Fm(G@r>ocD|DTcn+M3O+TenP? z`;!ls5*;C$`dV1jQr@hrSfLaYgr6RH4P(hbi!n1d-)_cXKnKZDB%K6BI3-UUP(jFuVySr(K_CYro8qBz74X=PV;Ube$Q^Vmr4Q%-tmLz@nhz8l}&VV#4bRkR` z>WEhFSpK!_YYiO5%nBMqT)* zBv6o=5Q7okd%O_N!|9I5YoGB2oSu5CBnlI%-Py)+adqW;{?{-wE9-`^Fa>l_E{3X~ z6KdGJ^MTTI_9=66FYleM)>fP z?VTO-saqcJsi~=L#x4f$G1#XDI@3Q23=G^tM}&|Nd8G8YD7>x2YLE&2a)1h9hx`~$ z`x|;!7^G;ox3?j@o8bsc;N7v@LO{%WaQ-Y(_dWy;6OnR2?@CuG|qnecDPUJ2*8X_pFV{t+{+p6{;Pyu_qa`k zdj4pb_s+k6PTLFefRg*4{849UEhUa+RZ+EC)zo?2A#44&LgX zC%QRzM9>ri?v9J2gj?3PU)@TUc*5)mmVDk=swzHVue%goG7D=obWA@?#eQZ2*x9()1Xha6<1x3~BA zB9lfIKZ+SE!StG%A7(Q@-5gq4Tb=(-i=lJAY(T2@X5^hfSo`DYYG-%S(9n19-*>mS z2P5AT9UCT99dC=;cT1md6Ym>4Hu+=pUW}XgWp%%2?U_A^H#9YclFZ!wFYoi`bV3^8 zD4l%mwp2cI?3o((@b-w;ulW*-y8BWjYrB_A9=Br0`X2rJZKoR4{UBL9M)ToA@>P6% z{FNA8;~O|QIPzkzi0G7|L26}w_1xnKzeZ25N-Vh>#q?)1Uw0LHi=g$;t+M56-!o4@ zLz;_RKKJhUoqNmI$Od5#X5Eil`8!j)yZBy>qlLlm)R}{uTi7cCiUlh*pV>>Mh{#A{ zpYx+-&RNL3f>{RSLwtPq0-*Qdk-UfG&KrOJtQJNu>8?l>>JTo47`u{-Ov8J(J%nr_$7(6GBVZeox$ z;k7=-Rpx#LiJ;;O1U%NcpuCJgI_OEoaT_tIsi{%)FYmh9&wB4Xz?9+U=5~YNV`3u3 z4hjH>qlj2RXwey>RBcJGU(fsa!43Y4P2&$-rQ{A|nH6+-onKxrUZ|_85|L^Id0cvs zY9Z*l)Qi0{VpG9CuW4lTKv-CqFgu^;S>wg|3HESrf>3_5D5TGa#KhY@UWZ%r5j9d{ z5GKFK#-BowAgE|^&I0*_1 z!`F+P8JS83WU~Vqny!(dz)oGEYwQvHd*^g#pobnY?|hr}@go(Wz;{QDTP*}ARJnO4 zQG1XjY_ZpVrlz8M*-RDbjTZ=sgw(!h&rcpMr35% ztd#~R1f@{{pjT-M1EODUMT&kkz0a;jyq~f%{_RLHj4eolp#&jYtAC5#!e!3)tI_Vz6c4-e0z>pQZV`RuibMU{mv3;9{hyNgbhHt_DENNV~aB ziWats%z3x^)`2KtAxN!6Ca+giT~MGBn_XW1q2X|WKzKt>U!NoVqMJ3fYavzAOJ_fd zcaIIAq6P72tfmR#ee$P@a|57H>5X%!Wu&AUARFvRcn|L^WvoO!h9Z`C&|fuEhvo-gqu7Dm2ZMa zDUrR9H_-g=QdGLFYPLHMBulW`Y9$8l8bXldRaWXy7;9_G8&ukT;%PVx3=KX17uQIl zKE9nNJz~=65EmC$Rve3uSSLd{i^YqEQdG=q?Gv~EPhKPQcTZf|7WxNo-XmImi%>Jd zYU83Dfc<5pH<+@JLkRRIzxNIfav)Iz|FSsMVBrwan#z%}WSMAa3=aNYD8D)sG8jgF zJ2cn9r(rk52O3bm$A8E8_b#!dh49;Q=kx7OhS$0Fmz$tNq~rP>%skh7fkM4xs{8yo zjEGJgo%XwNjiYjpmICYehtn zW;jynSdrBCWZ#~Go{X&RGz;^m-}$m1*(wxKNeU_3u>u{hC1{}0g@uKquBFgoMXUx= zBzMOQ95qx_-YiHdFNc?FAuDd;lO?E<(QzQ^E$f>ZkMNTVgv9NcGw2QTw>x*0NrRtGnBm@NB+r#M( z+vsH}Zk|C;Dt28~)e}`3tIWyCX*K0#(~%=w;hrFbmGWA6x3M_8V5an%m5 zx&eQyG?Oe8e2w8dL4>p-^4EZGgM00YX8Dq$|dOa0B`E ztL^nQgj3{A>_>^`4g&Y5`MY|n3c|v}`5b5OR9;M&N1~Y}C>(8*Wly&Ovxs~w$`TqV zYB>H}unjRI;Cs4#4+yCOALgJTwE)NX$jR`Bl%#G?3v<44Q-d1c0qKi7`x}!%=vLbT zY!;M?D=Tg_EOd=xZ5)De#weI*e_=qh%UT>3Bj5=Cx`iCw1=wrjdL z-@JI{L@L%79BP5tBzVfx4sabHAYY~Z)GNRXj5lszF!=0}t_N@$*HM9_yY=s%nKd+u z5O|2eoiBxj_T~+DM$O>J3ywWJJ>{}AVWBB|Z#p6wB8wW&^~Z9B1s81zS6dIDCN)F5 z>fOJ8|9)b!UxY3rzu+CMs+x{cA`I?58T{0Rq{(r3?+ECgk5-ikj_&1IPC}{lzfZU|i%_ zVcbZz$~uzO`K_<-$%&MdRJF@*e4sg)X{zN6(!Pe4AK93h<)b5a&nd{sKV@fU%S#^0 zhf_3L3AT*LE>1JpO%!85&1nOTsKjYrE*JFwV$d(DzkZzuu-OSo-Mjx;G&vQL6HQ5w zHTv?4ZH9}-d|!0(+W|8aTMx4Uz2&=Yy}G)}#?7q&B2~D7zJ3@eih6F)s0#vO5-x=5 zP_SyB!{c;>)dQO6qjk19RI5=l_ z_n7#VFJHb?dPZhO$lg7$TKWFTuJ)7H+=q@vDaeR602f=o<4l-@g=3FWrF?3Xj&|3_ zBZZY;jmkTKkOy5ZB^AO-(Xxo3lnbekTW;Ma9a8sTW77 zVRazPTFCub8O-S8`1OJP;lwl0L!^!t-&_7}T{R>jMWcZQIFOLqT8U?yvxGD>i8YQG zSEzUqXqf(BSDZt4rvW%5qo=2LFD`xZ0(f*WS>OW?NfZIooD7lh7vZwQDy8TCa@sQBIUw zU&E4>v9aOUiBo+i;eA-lGzXej@gJx|8hm*DR)Qd2H25>(mWq#)fHaBLsL%~lp7pN2 z8s?=-G|8;$td?1XeTIg%i+xdgW z3rT~PoqmbUu9nRERbU*kF);$p0Uh5l%5tT1sw3dnFAU5?Nd3^<9{SZ*VZ+74A!RV`q6D0kbl ztoz5<#Pliyk_SmGiloTeU3tBKO70mOk;N~-=etTsiKRb#uHor5D?`gERnqhlaR?ERGgU(Asz-?-@L8w3O0 z-F#Duqt7)@5FsHU{2u36aL1VMKL_609@M4zYm6j<@AAgtVrH@JRtJrv;OA*g3`U`9 zb0vg~fng5G; z^G48%XbDTkymvu0S$s4-;^fr}panGAmg(YC7<+|s`Y!PFy*PX%uTcxZ!p0U}quLw) zgT}QH%Bvf>@d&$4JD*&Y%DfCJ$(fN-`>PUwQQo&o~CvZ3SpQNXqd^*XKw(ZD12nBBT`6~8*J&5Q04089RM+Im2?*Cutuqzg%zCbKg+Hlz_9sEFtV)x>9+?oi z8tQAyNJ~f8=R49#2E_9VE;KIl`2neu0;W?)bc#P)YDuEevwjyo!J~4(k~SMoxCyCv zWhhK+4w*p&hmd|MJU4f7ey|IdQ~V0$N#yV0bzbE#Q+l{fhwK7SNIXN-9-^JA7jM`f zW_Q{BeQIer1Tq@=Hk$vQBrB$R*;FJP-M9Z05**CuXU%h8{CI2VJ`X!qb13P}71);L z!0+{5? z^mkp!@%id~#1FYsGT4Z2N+(Vq*hutJwsnn--!`88aeM(cs{xv#ED5je7-xZg1wO#* z&E2^w->A^gP}80S$o){z1=`J~0|POq8+>Sh9YdqQL6^p)UU`(_{rh)8AO|TJJ{io{ zgs6gJ@@2HO-=JTpXPu5+|nLS zsqyF$E{M<&td%Q!NBOH5cG1N zgXk(0sQJ~^*WeXa_1Ms7y?gNemOmA@Uq^Fd)pzz84wQvLq^w#N_cHfIG&TnHRv@d&>&yHh2(C zPg8wf6%=qHG7woL*RBOYAN<01-;ahBQ6ZzGGzX+hwX$O?7B$Bn)E3MQWr zE&HZdS5tw1*7253!f9=UeQ7R7jiJEs>(!oEF57P_hQnC?cp7A+U|XS48eCnk%SQl3 zkTYl`rII9CVpM4DEG}|CmeYDWVF3i=#4{F*<@0p0Io8$De9HC9&Y}m`$jQk?T^4cC zfs9f1vskUR>71x=IJw8`J{ ztXS*-2k=Z>p@AbO8puL54+A8M2EXc5^7GSvg3Dst`%{hr5+t;$y01c=_SUrjXW(^4 zGQ>>=q6I1n&PV=VU6)&?rfTIwY)X(Qm$PH{jUN>RbAA_+{Yhds1@;GPpF6T(v#5Oh z&O~6A^raj6LEqX+9-x-Pg3xzTvkI?EE`3g^E*n z2zxr)0@NlEnjujzAUDFz(PlHB8CJ)e>p{RjOhN9fTkeF1CY=NVO-&Ma#|H-#O>)qA zs;%ALqRm0B5J?|lJ)C`mi3t;ABm2ni=|4A-wTFU{!m}NcFp;_VGFLlK#)0#znnMN}|2R%shX3 zv{Nt$QykIlV7Whh<0A6=+KfGFnFQGzTy+DD-z@MaFgwe}ESNNS4t{v|^rr8Dgw(?% z^kEh%+uL)23KIs-ef(`sPOUc3(&Ox~YS}4hr=t7Wk>2Q-m|(PJF76&?bO=Kh@^`>~ z0q84p;|ki2P8&hnn5#C6zkjn+ALr{9wSY>nP*Yo5_RJD8kxIbw%IWDTeCz76GH2l$ts$DvAWA1L;2ZCS;iR(kPYi-q0H}U0y(=XFq_kbk_9;dJi;J_Ub0Br9v%;rVHc~^_vq?Lw?E zUH$vY)Ax~)k&~pVs}1@2w;g{@F~EZb#SaO#wH8dk)zul!_a5CpgP{})LeGa@i<%Ib7G~3}t*vY8%>dYUu+N%< zV0`Y^_fPaXstlM@L7wT=rkrYN$emD2x1iyuw#X4LbT?W2cYT%6>)Gm~il;|-ykQ<2w(KCb;p7pbzWdM@cIr9umQ#OhkF&G$3QA84n ziHqyoPapA$=MczZMq43xOe!~1Zhcl%$6#X2mBG4-brlyAH}~W|CLRf1pfYnHiaZ)0 zD^QtHM*Ve@<5#^q{IVoixCrXqEnY8gTm>bvdEK^<*(&V`4IU#vsIJt%_9}fC`YpP zg%C@IEL2NNzia539E#g8Lx5X zp5{!?C3_O^1MU9w`7^$@_Nbh_eFStS=Gk>;e7ND7ANsOSd1XxUgJzwI z?tLDAZ=4gPniC}JNV4lmXR{f+zAG+UGz_0!+rqwt!P4A(XR0ei|5AklVT8h6yOFzv0SXzf3V-OR z+X`lCz<3#_mnMwogRJr=J>VYT>8z`YS{x?K*~fMELluTR{Tej+?r96n$Zpl zUwVYE6;Z{BZ@w}OWEK)MJMTADEe~a+1PD-yZ z!!FwN)|gFw-;76L{b*TWS?b-*6{71zb3{40x!A|Y$5q~!Vz+MHQrFP%?dno`{Pd|) zg})SIQc}{u^mLD(0?YgcCkKb5s%jY4lP6F58gg@4@$m7Djf_wj7#NA0QOxot8{;K6 z_$}~8Mn*_IZCqVl>4k3zr4J>c=Mp6 z)r9x)=w6(Rd-@0Wom6MZmJ*4eD z`M0Ui8@zrTUTb$OdTxZ$i_?*?sx*z4m}X>VW?E_BV6{k1T=SP=VPivXsq)1yDR=k# zL&L)w+S=o5ZgO&RHy*s^>gnk*GBay+pFBA^Nj4M}6}7UmDxRsyesZf`Rpv_v&)UB7 z<>=3!lI)~X?4(X|cr1-KZ{9?9) zBxT@cr7SF1|IXBNl5}--(Io}K!yym<{P}y0EICO-!?fX#ql1G{6Qe^z(Q7Hnmr4~_ z=xDGvI`)P`3ker?*4C1yrp(WuKUde+@AaCphvm(xt4j`(fNc@kn}olOjE#M-lCU~7 zw+53Ko10^)s`fUx;z|24=52gTO4=SX^kx(jqubfp2?`03e)=?iy1c!;y|}d0FD{OZ zRpmpIdp9wb_zijiqKwi~Vk|5yuEmv=g@ethA3uIbz`avZQ=9i`YH0<&eT$Ktocw!r z^$Hsso63hfzVyrUbCj%C{H3yUau{#k#40E#*r?>sv4m&aS?Dl5JK8BOF7_!X;LzM) zWo5m?%j?_Fa1r^1E$QP&r1GMpiAPb9&PlMt+N=4y+1c6ef=Sp+Cd;jh%gRg}V^~$G z;Ey%*Zy;}3a#WOQAV}Pv}w4aedelaOY$QmCXe{ON{9o9ASrnWY$gM$P0M~@yw zE{ceV=*zN`GQnDvl$0QArKE%lTWmh0NE#m&hQIzzDYiBz=cZifjSSQp4x!9D974L{ z0z5?w22Rdv*4EZe)JlK;{3))e2!NHc=uZt3e!1M#-i{6Xj$7r|U^>9z5vB0%-8;;8 zfq~3SOz2}@_1`M6nC#Tl)O-+r$!gJ?)aKO@MlHyqm+Kjjp21lHEF3f2Nn3UW=>f6?q>#Kfk!1%a!c3xhV z=TBQ}>#KTtdgBul-~0N)U%kLyxU!_~6Qus^S!j8=Kz44flb6l&=R(%6oSk83f5bM% z#0*ESs}SIt8yXr${Qhlpbb7jQcD$QRZD(Z_TYYHFgS*sPro#E#c|HTTXK5QrK0%+Ih-EYy$c9n;^M*^92|r*KA+7i zC>R(MLjp^M4;3YHFm5_9IH(cX8bL1euC7i5p1L?Hj#}`=4;3739i8t#f0BLu`c=Ew z=zF@i7_R2Qw{PF79Olq9xA*t=Q7BbaRW9vfR0uh@Us)MHoyP{RLG>Zgt5>h8oR)Br zd!wTZZ*7$!w}iG6$Ejtq)D`zZ)Z?CaznkkxN^CO;t@zb8jy`Km60V!55MC!GedptYdgt$-@$DNKx-aU*ix=ai z=GRi)mMJezVJ8D4Q&RA~y}gf)kLTLMs5g#cIW&~1*RNnY zI68jMRsC4}=GY1P@SfJ7NPT*K{uS|yBj#{=@$d&Oe^DrCpvBh1tT59spt0b_M+RDM zBNa{WeMXe0mL>-${ehTiJD$ktM%nhie|}IY=r65FL_7JY_$weEHX>Dhh z6B&73x5NaiAV2>)iuekqfc=cfedpEdON)!_x-zMfFv>H7g0B4A*~#EFZNF1*_2R|D zt-4);rKKhOAR5oyjW!eB^NZ6h0gnUQ*SyfWoR@njpIck6eKv6=mC@0mL~a%~_6iEF zFaZ0*!O5vSn7M!L<2^f*Ek`J}%6`LgE20ONFcmg&u3pNq5D#h@ddkw#(b3*YgvA~B zT-2a+dA1^cd}+$V&c&5|IP0C(9zoxqS_HkX{&2=4HZ85lYR45@xUjI0l$>0yU-Xa$ zIzJH#x@e|(cf5wWI_zYo7iXUm7fEEC zPm2XQ!fDsF+ya<&bacv%Td+q%v@|ud?%Is1!x8vaQE^LGB$ZJCR)bdT%?DdMJ7N5e zEcu8>rlzK831gh*hR>d4j7{g`f99XQeA&433kIyV z&fmX(AH$39-o0yE=mQmZyt`5+koPdf#QOdpNf_rf&TGWSr>C0E&dz!31b^1o3mO_y z<6f7Tdk#Lu1dy2N5r8kJ`SOp){nlvT)U}? zD8Pzn>3}|m0_nXJ;BxhSwNqVUY;1wceJRQ)tJWZ*y%~?K67l=}S<0_p-=n@oeg(7K z1(O?*-nS~(A3nF zrn`HM$}zyhy-_{;lJ*#9q`B)idZok|xZC;G{a#z^3`l)|t5sxRe!R52Jd||TW--@e zw^wjtUs1?u@k)sIoIiy&j>LVun@Y;c*3hR|u3s51+uhw=7!%&cV}~BQxBSsQx}xG9 z8UsInnSo1w?Y^3b=ZV1D+8PlmNzk6IaXwZ)AU&OdO4x}7EuE6zLfyh5H&gZxc><52 zg%Z4L2uCH%Tq;p_=R746)cM}9noR4HgA{-G=Fbrbe_vkwdnNf~;d-=(CYB1V-K7c+>9i+hzv%V)&K#YII#5K_;$ zyndalSNUR}z3BEi$@-r^;{&;XIX(9V<=-eLIyz{Q^!wi0urRLecR#Fh#|1g}{hwOaqhEA3j-U&u$^45uU+(>A4X01Q?Vs6e z+uo$RUp8W6Ngtj7(iw>7)>~alFl2=R_WGHutUo+(aL{V)RznPjWqT+k7mcWUER4bX zD*WCTZ)#k&=)RSg50qOE3t2z?qAgkbdJ}0Lj^Q{sIQ)rA9H&1&YYhXE`O(ty_Vw0` zsE=BaWot*ra404JmEZE5ZrE%9>9PTjlwMv^+t&?ls=3pD+UV};vg%6~hQ9kSMF|eW zYDtqw1OYVdhLb;>6`#&GD`)BU>RC#(RY=$#nklWXq^Oi@3`j4UbgoKv?qn|&24i1_sQ&Uu&TbvyjXtI7xBkq;lrpPm(S7PEn zZ4+aV&bGCVzD9Qb>C>lVA{?g7ezDWgHl+1!xO$k=Q&5bpiPEVAwV9l3l=Y97Z66#g zi>ED6mcw^&@$gu#UAu-Zaqr$ezRTgh)yESnOG{DTzTI8#bS_s23e01^INMdbCs5r{LF(XW6>E?_ zrg~ByP1f_nV@=g)hXil)D6UIo2>-<)9RHBs=( zv)W7L8ZPc{K+*63M<*xq@clV5QMHJY($Z#tct-a25pa~h=v9WhjZ>>AaGox8CzNdh zPOK2M==tzsg|pu`@_pCrrmeO3gg6{!X)@7)Wv4P8x9#6(mf}oIQmhKhn~So3B_)n& zT_f}W`Asj*j)4)krHXo7r={)XbWddrlwfEIz^8UNKY0ZJeeQItv12GlIdPZP?FaiQ zG*6M;9)4hu%`nJ!CM?r-8hYK_!+=lSHmJJ-1q0CB^z!2TJ$bOSu`wfzgo%doQi>~> z7_2SIJoT*yKrli8CoOpbV!>kgBMs3;?G zF!U^OBiKrK=D<9)fw3`5{E7U0b}pS#4V$Le+INpQbGa+l(`sC!?KjtptHa`Ley}ss_9fzRMa`^+dcJ~loVRFuMG`!NGo1U zWfQ%e9T{N}42y~)nu-_1g1YEOq!*a*Q^q%*zZc`>B}z?AwX(BoE6~hymF?%>7#JOG zhlx4|hl5k=tI^L-Pxv%*R3<3M$mUX9W_)4G)x^&+F)-euQB?5&z=Nf=YwWu!c<ShzP-wOX+bFMZY9FZ{Fc8Q)+B?VKgQsO3shSl6~@)4PoLU8 z5D<85F>X-fyL+-;#0;+^QIoksNQl%W6yvP_XG)rpu`$!l$!}KApEtu44}!MLshcg9 z2Z*5XG*X0FT3VWvf}%_S2CF};J|_D2bZevCJ#J>XP#<6~tZJ#DfO+5Sv{6iBMw=h= zG#oLZrE}|5>~*i8V@N)HNWlNH+N_iKIbdVJ55x0qA+`IW^DR|g=k9^z%|O2cllSk) zs%vVth^**WIY?%dCJVm|5aoetqVzyPX9r2bEcB1jlB3F@z?j^tn3JKo zr?#ctfAv1dY?jv2(sHu;C0obWdKNCjhGb?#k1X+p_Aq9cRwrk>{lP)(jEue{MR|Gh zEk`CNyN<&Rox%V;XR3a@=lHBfsc~#5ZRY&2@p5zUd`s>0TC^JOuj%Q4 z9G4mx9m%E?^En9yCa3m|=l7J^&KpDzr(cTR=HcQBg_34xVaeucU0K6RNJqaSq=U}%u)m`tFl$3CRitxBQ9KX9$5kSLiyN5vF@;>W8PFIWJb3W@#S7NV zOAe3VkCVVOwKC8T;@Q&PMArwUz4>>wt+ln-6CXcJj8k5BLVTx{Bw5JX+}^@s)Y6Hm=5fJ=@@Ed$|xH9^c8&&mU7)U#|#YF=wjGk}!lKqz$1;iF9@4vQ0pR z2P*8Q7H_$MGU9&t%Y}o7CnCrDPeGpc8?`SsboZTuGy{N>aO;%5^SU^;w9qNe6M?(M zJhN+dt%{0?X{mNO+?ris_gIt5ZrvXG^Ye27(DDv*CF-a1ly&756{P{`twyAvoavY+ zq@)xY5qUgRRJ^*<*5B2Y8A8ERdJgFDPGu?#XQ#mDA@AR>{#)usxD=pFS^}N}xd}l* zK}}Uvd>cDOO<*gGjEtbk$peo3J0Mp1Uy?}E{Dci&{M4~NSwmzI^S0g}uE zg+WO{VRax+$;O5gbmfvu!zWM3+S=P6ftHl;i)CzdbO`2c=j?16+~9rMoEKJBM)N_YiJG)*-tD%X39Ch~W z2=R*#!_?9592eRhpCv1;7L+!=-lTe||0y@OJ%D_8Xvk`3zKw4QMD)Rn^HcK+1%v_X zP_2nqvRK*J94-}ZYC$VfWVjxgnrcwVx!1rTCYHKC0ziBpjptG$kKde!c5i>*8b%2z z9o@`Lwr3v&?O9QKMc(H&sIOAI3N%@$bc9I<-G6!j2hP0X@@RqZp;+Vj0rdoQnffgt zgpXmT5k4cG7FDjiUR->q`fG}+ipnaeHnG+5d1+orIZ+}H)&>$2e*XLSk3c>PC?zNV zT~cD==J^CJ9VyuM7~!JIETy-;z@nGGJ^+}=P*Ux={aaGDdz2HAa1PQBHYSF1aNh-4 zfp|iwI_5=J$<}4y9xF-Q)!of;|NcqFQsZ{>wPe0{9>W=HcV^}+ubS@j78vVSQLwGI zbV*auazA$&+z+J_O?tgKDGREYle~xw6Vc0`dg|)wKA-=1!#fEdvcScWhZPeOqrqaA zbT|8)>uK}B!3$=1y zN};}OBQo=5S2dR;?!`>qRfz`KFBwvxB}qw3Pc#7WJUcrx8-ju^*#=^YVa1Qn^?hcB z4#<6LIPC*O&kXlIUP?fQNyO5FSAR&!c?^0EKt^>0MNc=I7-2SI&A-!)sR-nf22e_J)*i0Ea9sE#3at%~K`-aCyAu6(=lrTgg(f%a#F5 zewSM-z{N^z#%_nwK8Wu;oeQLQ8ag^Uf*$;FlSjXXw4tHF_2PJCqU6gLt~b!*QsS59 z=6nIL(ISG4f$JPrDAnCh!+X;HAcUh(CZ?ttOvlSk(^ZbRqy;XB09aB&gu3ItXVsH* z_u9jU4?%nXUgx%pLcx8?1BME818nGMV8P@EyZ}fS21@AVGM+_W@`T+)IE}EM_t^ry z?dR4rfP>(Bsfi;I}wzPTu|S@nczet;<$BR5mW^Xf-S11J@>KLNt62 z6&4xY4*B@`CtfbP30Q%=_49aQV#0N+{%{-g0%VJk6>M*!p`kgEYL!&d0uMSZsE$p7vv1zQA5B(5gg;SG@ayq_X4;Xh7=tQ54v!p9u7Wm)j)5`ZMnpv9 z@cOmIDNKKnRId|jlwDs60FlKc`Geiv7LdSeow@^Pp#KQ@RA3jsS7*mWg-269S7m6V zvA(V2>kv4Gon`s?LHxvgu(@BfOEUG`45}P_?HVsHPE`gm?E2DxaEAeELrFM0mp?P# z+S=;p{d3Q8UIsDP;I!rE=S#qF0(nTt+|A9+kyI3g0C12a6&^m6v$p0y>@I%4&DB*Q zTQbq@L+|v=Omy0sD%x9MD*lExXnDF>nD)wFGwyHpEPRMZ{v%@3Z z3>OPEWL=ZnkBrRVy! zuRE)r#f3L|9DbdCv-r~*8yovaXQ#0n&@#tqJ{)Z9Qbrr=Y-(?KdcH1$$4GAtd{1P~X+__PLEscllqsb}$))cAwG?QYT~r5pG)>&dc}$-tcX^ zYxNl!XyAdQEXTyf`FGHHgub+8uOjoj0c(jufxibz$>Z-s+juNU1=|$WkFvRmf{p-^ zK>z@AKrUv}2Lu$85oQ%dS~c(C2F}jU!O?0B2lI}Ro&Cy#*Bebh7LcCUGCEqJd>j`a z?{q*yOnhIJr@l{$%37R&I6IGnMbmS$+e7=Dl9aSn=K&U8#7P-H%Ox7n0Cq)Pjc8n# ze8%&69-Y!`J<*osWs5#^VG#KNePaWU0wCbNni>A}k-B=*&ZkjLIRKF_ZH1~n&4!=2O~#DUfvXB-Y`0hRcnmixl+W%#U;_SCF5cPuk-O9s8bnyo+r+&ZEcLAqA3g8 zrtA`SuhGZ7Tvoo$&(DuPe*+No833JOrN36Gb!=d6%t6a*1IuBY7xdqIudWjl`@vSY zxHbS=vAnPmVsxw-@*43Al&1sbAOKn!;Kn6_mdWvP2`#OJ!bZxjkccS~3W|l73?K+^i^=jWn8x!?u2Ojb$?9lC1?sKf*-df+SV%!lxxTkSp) zN{*!Kbbk3VCXr+dA2CPjTzLuTM1CCO-Mf7|+|K1`9*Ds$&CPzBVC6dLW+1nz}EGvnHo0Qb15A|@tA zcyn+G}eQcgHGc!Hhf6MyCy2H1|OQbETzJMXsc=qoa zqz3?$uNZXm-w<~D$AUr_cKyZfE*=l!Xqk7DBTETKNyy^%b~ z6joA-;X0!HYW;&j5o+fRGZmbzNX3}gSWI6D6d_@RLEK$ZVd!7)q!@wjO_GZepKsO?hw8%od~->t!1EDyK3?7o&(nh_1;jdKCKrUdo^0@Z0OVMuJ#%QJ zKvO66*SB;nJw4^VzP{u$Ks0h;VPSmnS>(Xq0OMp+7`XbvGYdHqXLGLta6fEGp}he# zN=HwR1O4{ra`jy4sq{ z-^=sH%dy%(J_Rt)8L6qM(IpT}OmyDAt`BVFDkeHuBeZ-L=%CgK5&oO0_i!5i)!_LN ztfHkP85XAdZvPggRoN=E4p#cpw$vvqEiAg&J(x02PTZYdzFb(O1cL-fQct<1rSV{< zEEmt(g0#-WCEz;D@@iw6@P>9bx;}(z{P+<~-K1q8CRCJqeh#7@*bPlo%yAHCh7e&4jS$ z`}d6Da;RTKfQLmkUO}XPnZ3#>HMmw^2pH7g9qCG5tv`)VE0?mrEQK^ssgS+B{ljO{ z(im>;?xjbdh7xN`Sv8&PuP-&E19r&8z#(wBKn;m?Ja8i59WVIu#ca%RZRnyEh@Fow8u0c>4~98pju0lQt$hP@ z#t=w!oUjC_o( zyFs+QirBFKae>Hd8x<%HX^K$ifHqtnyV%Z9YJ3|m6Im;l=iiiimO_>mfzJzG|-Fr6v1 z)rRu}Jw)dS3JYrkS-Qq92eBR?zV#cJ1MJ0a`sea^*6py8#FJRvGHa0xtKW_vFfqbCD3b6US zrr6KYH6}S(1ypMbLysSNcHJ%f>Sthh2$*+~qEFh|C=`t>&r#xnxq{g11)n|iP?+{4`($sHQi1bD=1}qt~bY4a$#X@t;oyETTdQuc?4>L6a*1? zZQQ(Iy%3=~@GVF-V9W$iChL@%T{Sl|W7p-PqpOCZ8Uh@e=oyWeh0qcc`n~hvEl;1m zf?C1!fqGs|yF6nPC+!|)1e>?#F&MF8;LLLBve2ax0L#e$LkNubCr@$&XI$Tcrbx<7 zPDr=_f>e)49U$h-*~Z4Hit9Dm8#j~1y;J4FX*zYuhDP07U13b5h`2@X?d@Gb^`?oZ zU52MxDgb6#gAmz<-fI#Pk`u@oBo=7U(aAboUU<5Lf}6;j1FdrSSFMXjtX5^LC=n!G zh^lLANl=f#e}`}H78=nhsj8Y+TtYf#_55≶Ob&Q6B2}_~Zo67a#wuJEX!49sm_x zBXIdUodGU!2}dpv*YEAy<0pj?CSVzHKN16zp@Zm zP+cuNoC5MM+)%I=uh|$|S8BeUukz!^q}4SwPP%L$BP|s^#>ap;hgk9gCaqV{C7@@P zzg&6P)!(mGZY3guAqPgLCu|*X%Z@+7Ft(BUu8Lini;{;_;W@A?;6Lrpu6-^jKJ8K&)_zR-_Bdo8vaWcrYlbW8hDYC|@FUhuIcWMnWQ+eJh|f)S;F ziMn&|UOOP;kSCv?8iR(R4iaimC`RT+PBrvQq>Cf8`8uvY3Wem~YHM4%yRSjtydxk$ zqYy=>0|8i~8#jVLM}_=G=>n*2-(gslfJ*k^!v}VCDZ11QWss|3m2n{H1?;V?iyj3z z8X!OD|IK-&(J#@MTqgotAGW>i0OsZb_?9YZXm(+>mZ@&opPv>sYpRK2k&%&MDNVKe zaC%(r?d=6jB?C*+mns?pJ}Sxw`T=6tLW~gtXq2EZsRQ?Y7t|6CKLE9ck&llUw3{l= z(|aLhWo0ez$vBIhmXsjxNwB(2OxW*`_w_3QNaAuZsX-5nijQxfhY-Zv@82kprJ=ch z@9ew^*koCL2%8AW3c}g|M}#n41f(OU8@-$51PfQ`fj1~w8J1vHjkE*%IRvb}rGf+`Kn=|mG#_Z?5c$M{kBz)Y*?cnI2!{lN;v+d2?0Uy(mqPMg2F=c9mt)z zZj^M~fs|lRvM@=RMK2`Z?!uaov45L~SI7db{(p&5Pzqx#K<{&S^~!uV0PLK{k>%h9 z69-*E66c_ggC^(*LLC%|Q@}Zzgqj**MMVW2K03hseK`bK zZgc_y0?1Ie!7)R!%&>mi+S+)vauS}Nq5#k!dKvuRRPS%t4iH`CPvxzRjnR-DfAF9M zf{_sHSoFXa5s~%*qm9Ac}GA^std?^B@>2LeB+kEtB4*RF*y8oCg;o6mxn z5egFPJr`mqti?q$khp$iKhe_a0G|$?z#j&D3q;&O0x~xq$=7)Ml^3~AbF&mUI$7!I zC?I7&`ujUl9=JqCMfpxoKdWAW{ALS8!by(WUWtgb1VZT{VaopvSZCcwLkS27AUzLx z@8)Lo+}vCUR~t7*gOGXGM{CFfhC6^`uygz%V~yCen{d6{@hP)&kg9;+@__aRY?|#3UeR8%)cQYe98(9SSP=X#iC#NZFc5)Q% z8iU3%jFUH>$KseW0_CYr^g}~K@0*)Xm5z@Op+PSB!EgX!Iw!rf^qIPj&T*sq&Fi?F zSiQZfRxijis;d)HKPf7oz z6!hnLMmpHh15a@((sN{4j%xE}DtOk~Dl00S+|RnYZjDqFqCa_Z_mPGMvh={dGqSRz zA?%x-m4yuQ?4lwZeSLi>88+n0&!4`Kmk6U1HL$h)A|IiiSEqJ#`D6M+*mJ{Mv+&s( Ol%niInXghte*XjE!{)I7 literal 0 HcmV?d00001