From e8d73df01dd86e7d1163a1b5ae82206b71598da3 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Wed, 21 Sep 2022 14:43:44 +0200 Subject: [PATCH] initial commit --- Ethernet/Socket_APIs_V3.0.3.chm | Bin 0 -> 1435546 bytes Ethernet/W5100/w5100.c | 386 +++ Ethernet/W5100/w5100.h | 1865 +++++++++++ Ethernet/W5100S/w5100s.c | 425 +++ Ethernet/W5100S/w5100s.h | 3323 ++++++++++++++++++++ Ethernet/W5200/w5200.c | 353 +++ Ethernet/W5200/w5200.h | 2110 +++++++++++++ Ethernet/W5300/w5300.c | 225 ++ Ethernet/W5300/w5300.h | 2336 ++++++++++++++ Ethernet/W5500/w5500.c | 267 ++ Ethernet/W5500/w5500.h | 2163 +++++++++++++ Ethernet/socket.c | 931 ++++++ Ethernet/socket.h | 489 +++ Ethernet/wizchip_conf.c | 908 ++++++ Ethernet/wizchip_conf.h | 661 ++++ Internet/MQTT/MQTTClient.c | 538 ++++ Internet/MQTT/MQTTClient.h | 104 + Internet/MQTT/MQTTPacket/src/MQTTConnect.h | 129 + Internet/MQTT/MQTTPacket/src/MQTTConnectClient.c | 217 ++ Internet/MQTT/MQTTPacket/src/MQTTConnectServer.c | 153 + .../MQTT/MQTTPacket/src/MQTTDeserializePublish.c | 109 + Internet/MQTT/MQTTPacket/src/MQTTFormat.c | 268 ++ Internet/MQTT/MQTTPacket/src/MQTTFormat.h | 37 + Internet/MQTT/MQTTPacket/src/MQTTPacket.c | 443 +++ Internet/MQTT/MQTTPacket/src/MQTTPacket.h | 136 + Internet/MQTT/MQTTPacket/src/MQTTPublish.h | 38 + .../MQTT/MQTTPacket/src/MQTTSerializePublish.c | 171 + Internet/MQTT/MQTTPacket/src/MQTTSubscribe.h | 38 + Internet/MQTT/MQTTPacket/src/MQTTSubscribeClient.c | 140 + Internet/MQTT/MQTTPacket/src/MQTTSubscribeServer.c | 114 + Internet/MQTT/MQTTPacket/src/MQTTUnsubscribe.h | 37 + .../MQTT/MQTTPacket/src/MQTTUnsubscribeClient.c | 107 + .../MQTT/MQTTPacket/src/MQTTUnsubscribeServer.c | 100 + Internet/MQTT/MQTTPacket/src/StackTrace.h | 78 + Internet/MQTT/mqtt_interface.c | 80 + Internet/MQTT/mqtt_interface.h | 41 + Makefile | 58 + README.md | 40 + avrIOhelper/io-helper.c | 3245 +++++++++++++++++++ avrIOhelper/io-helper.h | 100 + avrIOhelper/iohelperhelper.py | 155 + compile_flags.txt | 18 + main.c | 247 ++ millis.c | 20 + millis.h | 7 + mqtt.c | 66 + mqtt.h | 18 + spi.c | 37 + spi.h | 20 + uart.c | 53 + uart.h | 37 + 51 files changed, 23641 insertions(+) create mode 100644 Ethernet/Socket_APIs_V3.0.3.chm create mode 100644 Ethernet/W5100/w5100.c create mode 100644 Ethernet/W5100/w5100.h create mode 100644 Ethernet/W5100S/w5100s.c create mode 100644 Ethernet/W5100S/w5100s.h create mode 100644 Ethernet/W5200/w5200.c create mode 100644 Ethernet/W5200/w5200.h create mode 100644 Ethernet/W5300/w5300.c create mode 100644 Ethernet/W5300/w5300.h create mode 100644 Ethernet/W5500/w5500.c create mode 100644 Ethernet/W5500/w5500.h create mode 100644 Ethernet/socket.c create mode 100644 Ethernet/socket.h create mode 100644 Ethernet/wizchip_conf.c create mode 100644 Ethernet/wizchip_conf.h create mode 100644 Internet/MQTT/MQTTClient.c create mode 100644 Internet/MQTT/MQTTClient.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTConnect.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTConnectClient.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTConnectServer.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTDeserializePublish.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTFormat.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTFormat.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTPacket.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTPacket.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTPublish.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTSerializePublish.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTSubscribe.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTSubscribeClient.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTSubscribeServer.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTUnsubscribe.h create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeClient.c create mode 100644 Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeServer.c create mode 100644 Internet/MQTT/MQTTPacket/src/StackTrace.h create mode 100644 Internet/MQTT/mqtt_interface.c create mode 100644 Internet/MQTT/mqtt_interface.h create mode 100644 Makefile create mode 100644 README.md create mode 100644 avrIOhelper/io-helper.c create mode 100644 avrIOhelper/io-helper.h create mode 100644 avrIOhelper/iohelperhelper.py create mode 100644 compile_flags.txt create mode 100644 main.c create mode 100644 millis.c create mode 100644 millis.h create mode 100644 mqtt.c create mode 100644 mqtt.h create mode 100644 spi.c create mode 100644 spi.h create mode 100644 uart.c create mode 100644 uart.h diff --git a/Ethernet/Socket_APIs_V3.0.3.chm b/Ethernet/Socket_APIs_V3.0.3.chm new file mode 100644 index 0000000000000000000000000000000000000000..35ed51287ff1af9b935d50349eef01ce1b344340 GIT binary patch literal 1435546 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

wcjjNQ;~YkJO=G|paL=bF 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

#~PVDa^W#ms>jj?2D-%Ld~ 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

$Y4k_*+h>Sx!)+qIX8mr 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

    +j4{cTaX@S6dt0=)HvGX zYeW*Apc@s)DHAZjXdH^5Z%fR_N|KY(6}eOlIXzPgLCSu^~$gDbYit#_vIQJ9;bgs8!PI(|=6y{VG z)1ftuSXWU+A`rwBxwAHtJy-q5%1a%*e0M4C-z!;9ZerW@FXw$5$=Vfos7-kRBB~|)^%_@^s7Rgw!r6&^9UD}L9N(50Aju5G$ zYnW&pbO|X`30D_VS4wW1dg2aM490OrhWyZ_1@AqgN7wqFBR>6`o#Ij#8|%IFn{%w> z1os_=iNKTin0LRdK1`dnDbh^!DKFUUJ|=9xB&ftw>pRQR5;UPHw>Gck=Nlv}P1kT$ zF&(DObcp0~#ghwwU8Mk2NRcL@Q&kd;x~NsdDIuED>k}TaQ`U#yT-W2`6~rj;L0qDk@SH8 zdy$eh9vl>VDvShuy7@Cd#}@h7M9VJeGzjE!vXmL8ng9Z0L8FC1mo?0?=%S7gSEace z-<#VEQKeJ{F7y5$ifbw!X`pVl2IlCje{CA`pDVt)t~8f2+2 zcHZ>eF}o{-W2v!eCO58oLEAZ0Z8H{(H4#+<7_>Y}Lv zMXnkaSOOG_B{o3A)WGU0KVbuT3wO{In;0^FFOp@afR5hxH1 zvaCdBE=eftMkRceHorTARvD~_J;m1DgGox#j%yIAWTI4%feBY6%CfsLtScDpOhwCx zYnB||3(2zaSh3yfWZg}erX+Ibn5z(|FqR{tWFQijcIV0*#&il&_3O=;q{1rVY`qoz z8p)`uCTMeo1*74#AVxu?3!D-ng{~!#xGajlA(vE6DiCTbN-n#IA?Fp z$~5u*^7CDnq9077E^$W~NdJVj4-2~9e5 zdGrF+D(dOzH6_+hhD`SnQC7uJb3x?<vl5s;x9D`Y{wataj*wwT^jP!6Nib-_2STv%hWb{z)U-wQyfJIg83f zx7};W`DEr?;Z@E26=SVh#fklj{Z#1W)qXL}flZqBcs%dqk*vLT>8T0)_F*FTyH#&y zPP8B4EwVRN!c88J@2VwJGkkt^p_MvOJ=tb6AenBoz@Jo$eV3Fd$Vm;$05uIE8UnJ) zQ4S=Tm<;KaUJ#Y*fNwTa3uN1C)c(5JqY%CMAGGQ(WZ%!w&P_qX3-t$@Jq-yv*9`BE z`V8s;(r%~%3I0GNO2;k=9Wf?A+!T?7R98m;Kb0!fznHm|gL+kLdW3QRA7PGymd=;k zQfU2uXfEv-;8=??MS&nyOi(~%IwAQ22i2-z?kiGJ?g6X0Rsj`w5+F|2G-i!GS~RZS zqV=kvDCGeaSd*`qVEaP4NK`e6B1ojFW&lKcit4?hk+G#-uJ!f4o(wNH0)V$pNKlDu z*W4aYB3feUeIp3XF=m;#<@)qSqcd4}tE@QnoHMkYYhzy%#L$~C&HSaQN#h!UF0+ac-gE(ijA$SWh(3z z&I?%dX|)=Kh$#h$EC3O?Av)E0&P>O?NG~Kl;e+7W7OK^3Tq5B~sYETodDQ#p) zs5H=-j1rwoo^rZOw{^|TwXquUe(*PWJjefrZZj1Q+0>}Uk7*q4B{By zQA5%jOd_r!N_4)3{Q7WDd5v5yg;&)>@AM=Wpt4Q@#+jX#fFMEUm2hA;sL2;2Hl>tB zH?d<(M0!-`lqncVNP(!U(z!$eRCg+M0Gh!&iQ{qeLBB&n%F!{1;#f%icwPMUSS6-O z5RphoG!=DJ_86iHiGsuyz)Fo3*H6U?HCL6m{#8PVXibll@rQLN5sfaL>`OuKmVMPFI zr076b2o;bxC}uHjX!)81ls>kBs;(f(4PcHnRYd|4s49T`<^V%YR2EFW#`7rl zxSNvyD@3*&S|?C}IqTW~7F2pvh*R-MRFn{I#@)e$m7^9TLJ&n&MF5#Zu!vL@Bo>Oq zP+?Id8hM-?w@)`xqTYZiKtzjFO9Z$sG7v)<4clL-;jq&APhkzKla(G+~-%$||^5 zw3=LM8oWN{ZHxGus%c;;n;hD5Wv%JG=kgB6kz{vW#b$=kGX!JLft_t;_WHym`9TGRXX+5B&zb zhkJUO_b_U52m^d4r%ZzJ=5uEKM`Z z4Zi`95%#aoNsrI|cwl#i&6M%1XR~(J>uEPzv#ifX^7#9Ra6PF%mT`g z1bvw7E8kaHZoLil)kfWy9S-SXbE)C&Oio%=doRA(o2$S1Im{_*Vtq8B`R*KT^HGF<|gJE{k0Fi!JfsR`H zWe{gLw>$SPHoK>*h}Gh!V=Jf=X6%C^C|cdGoBKIc*^KU8?h~|t_OOS(;r&|es$Esh zrmW`GJ)zV-Qd_kprL6;G{~4ziZ)WS~VOuD(oo#L2IZU|C`g(=i**>Z>wse}L(DXtb z+VhLnhivKe9K1=_i%uhhZFLGneCF4z6>X{Z+G$!UT6@h%{h!={_qe!TnJe6De+KVt zf6#V8^`CNEKTPy6dHg!Y2ZU?1P)KJ43Nmpd6eL^36D6oBN6ctolC1arJbVCzW0x}8 z7(#Ujfq+~SLL>mje`4?Y61iz#=$`fYRK!BN-np0)Vy)CfnpA zGlxwh|DKe800_(=(aZo`f&ob^>NSa~fc`exjQA7&gfFJmK?^zvAh=1<=KLhGZl%s4 zPK?%joHXR>+HaeGt^K``xYZV)=Sa#Li06*vw3Zf^rZjCTXslw0BgR0D%{XE-pV>f`LFLRAND2noWI`9vE|e>o%o&m^i98sbq78{$kZtL ze3A97GL@x5y7YJLgs*4Ui^=qH;lC_JTqj40OBJF0CE3;E#**Hhpq?DtqTXUEz50wunm`e;aFaBV{S#yB4Ef zXJsQ}tX2M?R@j|5zJ*7^)mPeEyKFVf-y+*5lG)0p`pGeVmi2(nkSw&$L|=J(?K;WF zK5+j(tQ*~%na9mK&`0HqanHwy+J2-BxPa7O-wxrp)*CAGRIcA%iM4q5c@!#e#mB7O z+_$IS_EmCzzXJNF-DBlZGcne-W8ZhIBq?Vb_3B%jWDQ>SnqO~(!CkB(z3h9jO}p$v zc2@GaXaU?!TgMa+)*s#X_blB_>1!3n$kOAoOJ|(DuX5ga?^@y?8IKtod{(0VE z%3b%pXkUQNOb?#cIE*-L?%hqMTdEe$y|153^M+-uy}08`f@aebj!W zC$nSN*14SZ;{$dOyR*@ry}6>wuYY7R!4|v~nY^b+&e#77Uv7sQYtKf?@BQ_!ja>Da z4x(@R`*`ike7Y{+{ryC)!%gh*sIQJPZ##GP^4PmMc-4({4=*U==x}^vpatB`J<3Cm zoQrFM*;V{2zQTXMGE(L*{GquVL?1OiWn$f2qfN3o?q6;?``wQ|`P$Y&N@K0x%^Sba zn)%L0elPE`&blugI~h(@4MP3<|KH}q$M7b6>|b{I2mX7W&%@+zK-=yg{S)ujpZ~6& z4Dq{D+(}VHL9x9Zx&~^{GMe$mHq2cKCI#hW5Oj z-RG{U+jy5|QA3yHDHA=O|s$fWc@dX}+Yv6N5Hn6f*NX zD5%i!HBRn)?*1r3@1+d*Ix?gJXyB-=YefJKICk2U!d`v}ykTG85Pz`#-8`O`m`9Q6 zu$yx8{57~ROftN{G`!Efsb)_^MxrYz%_Qe#_lcNQdHB^UA+9_CfeC;`O8Q(dD&LHGOzI-NFJ=}QZ`;C@n7~v<#$_)Y(Ct#PSZpG z=}Y%`=v!IB-oJD){rZ>T&(H70=aIAFUH+6V`FNRYl;7{ocO$&V0mm!f|Daq$hRgmJ zuT1Dq^r0U1?)wjW119=`y#M9PezLw~a(UvWQ#z+4yE}!T`q_sAKqG_-92AOq5rFWT z?i7pTyFSWgdau+Mo~zOnSo!e%_S^hN4ugk4ke;FWw81@j%H4^21|HwX`|v&@9>6Aw zaqF|TYyGMo*3R4Fac5Z6SzB>j_zQn1h77H(LBr0UFOw{B(Zu%+jOGcvzU}HpTdDn> zqO(MyD87o~j$4#gOU>-#F$C`Z?YdgLANuSpqC#Uk$lJ-71@0H23KRU$_wj^J?w2H^sHM#*45M3@C z7O)L^ek+P-#d);9N6dlnx%u-I(a`y?=0+av8E zk2E4_ahcig;`P0=PCnxpxX?3|^^DBva;mX7T|OHSxGw2N>_X!Egza>qK#DsDlQ#mT zhaH+2j(sLE8@K6h_AI`c8ysai=0BuR9TC)d+qOK%g5V6ib7Em3m`@l6Ho4uUmi*16 zVQj670mmE4X1EH`+QjchIAJ7*@GOpbLAdPF64z&IvuFJ9vPsymVsdmUrj+>Id!;9g z)UofQS83Q6dX-mV62Zje%yXdow(j)g){*_FxyA!hFi=o!j|k0qyV&x=-9mAUt$4io ziuWH~2aTs)b0lQ$+j#02U5sVAZStb9i(vzz)@8!14Y58&czZJrxsrL_U8fr;$p{`f zW}ivSzOPB!x3j6Tvm{vDscgX48TQ)NlsJu&ilHZhszV9~tME}4@g5@hGuu^!$}v#J zY`?`s0nz!gU$VW=AkXEhiU@t*Jb-3(!ZJ4Gx@1!WIsTWt{v-1W=y$mE#m7*dkVnb* zw3VTgCEq=js+)CV1&CWbp4L*8^^pg(~QrkQegD>7E7p@gqmnJmnpa9Z5n+b3qUs;D#>ZEiIT5u4$${q-i7~odKs@tis5}@Mi zeGJ2_B;Omr9ysigD?*etK~WS8~I z=rIEah)?#J@`9&st3};9i5#`F&W{ieLff~F1W$a_>L7zk3SJy?~eJbeSv4$SFbpedNF)A2>>1dhy}%gE#*tJA@e_Dwus zUdjFQ%fyfJwha-DTiL+>P{&7}YexRdK$@#6U`VYRx*H0f@z_s|l9-hTrKE7AGFs#I z?p&k0N?~n>0Z?Hz*t_yof`@e%xQTzO;>_aZs3-IWz zz&VkD7vq@`79bJYtPBn~QH4s#C6KGIAIMJymBjQM-X8-=jNy4rs`Fy;R38R$bpbiN z_3SDdpVU>!5S+qUN_NGhl2Na?L}Z4 z&%z*@yKL#=c8c5RV6SPrE?-x~qsV;}f@Cp#UlWB!c1!Xjfa$$nePr*sr7J-$Ck&7# zj^Q{Oc?Y=OYQqk7Ry_!G1y*!_^>Gc7#_*jdik#~k`4E6^Z(VvzsW;%03tJ`6(8h$| z0@y(3V^Zgx&}zo!d=)l|>*H-C#_(Au1A2Q09YcuqS$z@Rx&U_~(1&4;T4LB6dZ-ksFfr_&5_|tFFOPtKN|GrP#gtj|+mQJl>9EN5Z3p z%7p=kdNLjlMR|sWMx0SX9i}EY5o0x3WxsW)#_*;CpQ#5YVDn8Izsb4)9Nq|&F&`4P zn{K#6TFatPf1YBhYNZi?8tN-zwY-9N1QZRx(+3KYhWrP9K^16k&Q_2>L%>!6N z%~Q-g0QCuahi42lSVblgvLbqGrq-7>gD;f@id3yhTJ1`fS2f5H)&)TLh}Oc1h2t%* zo2DZ+R-tpuM44VlNZptg$%^Z(oLb-(E$}&*k=Ja1Ko_?zUFo6lWFC3y7{=6mqzr9K z03Zx+tJ0_YN~?DHtW4jU)RNN1{KY5Cs#o%Sb8s)k>DA4k7ChroaUW+5YP4K179JdU zIBi3xjdh?4aDTwg+pWywvSMaym|8&F_PshWd1Ch28k`@ZJ7<7lZ(S#BTILqn zWY+y}xgTsah=_C`6p5+EW*gv&!Nf-bGGepSn)Mcn;Nve%u9!_tsQSnLASeB(!n1pqVZe zuqo{fug-*4u|2dEMD?xitJ1nN2+Ni=Z5jbN`}X~tMoXsM@xSW|6*?E7J71)2bU_ub z10%wP&JzOwDZ?aBr-1(3E5>1KPjBc)F<;gnrN5RW6Bv_jHhaxc%81CFmJ6Eyc_|oP zx+N0c4WVX`${B*v8I_&GrNm>Qv6sK9!`2mJx3#ph)Ttu~gyFRsY-`!TFB_Uv8++dE z%TpG)oVe$%^4|Yb358W<`H^?7rY<8v9wpJQ;ICcr;(Sg62^k$AQZYTDT?>#nw^qm1 zcUv4z#6;Fs!_u>jIs4L?9mW zO#^8JLKA2+96HA^huNJ=DGjZNwXMRQ06j1E5SEuS|2MJ}ablp?<&uvC4v26mcFq7( z-ntcafuW2!GoWy1c|kPcn?~vs5>StG8&F#jhFw#qMik-G1c*?7`5vOp@OxK5fULx|9ne47zQKv?fMEdnV zkkqYxwCwkov0fR;qd+38w;@5V)F(~wjK|L)5C;IK9O6nCG*O)=F)5@}-7u{u-($Yg zlU=nd+O^P0kv%tvC8Z!BZYRw=hu}=tO}=l5RS5jUp&U z=2Fux#*hZIh{eXP-_jmytANWV6$odPGPZNgE9=7>PXYWV%0d{<1<3K%E)cw(lqZ=| z@Wj$`I2%xB#}S619Gr-~tgZF)b`s|v0?OXi`1)K=5RV!ux8BaaKC%HzYMR#Md$t}q zh|BjHaoO*Uj#VWv;?*K&H?qDYz{@mHCQ6nalD01 zzpWotEAC)kuu4{=-=Ha3V)<&*H@kro~)bf)`PYG(tP9q~*T>jp69(9+pT>^X5{f*XwI zJOU&WGf57wjjf$tSjexNvbb%Nv}eiL^wXqhnRhek3431kK#yJP+vk%A9SM#*u?-C& z51^qTyYSM~i5jq;tE!m{YFlkIbTjY(b#7n3w26}p+PwF?fvNN&>`?~&}acbs$%VE!4V86qcKiX>9t)>SB;u6{l$D?l;w+>zq94u zji!it8u=MwJ8F<+tqTk3rJIHfqIIB=;56eDAc8Sa%{BDXo-|X6W0%ZTvuWI^8_q1} z(4~V^;4}3~H{$aWj;$* zuNuA`Z9RO%l;vug7UnnD<70?vre!4OU4R&GSIXK7Xr6bcVvK{IhC(qO5OOon(4Z@@ z+t){1sjbe}OIh`uRJ58<1aA1q;@RgHqB&iFnRVt(p<$iig|j@_jmJL@t`j_Dl;*5?H z3OAojg;EAY9@T}XIu4a{UgrXNo(TwZF$r`O;EDCLDs4*7OnP@k^_;0`Q?2=6Da$JB z{^riD>p7v3ILH^Ga@N4&x-QtvkqAS&Ed_zPR5r#T5X67BaSBz0y{vaSVtB_oMG{g^ zKdx;i@-e-_yk%Ox@3hP3#Q(v+R$m=Tl}S;n(1KPQ3Vtexq-@a{ZsCa1kk~Y(F854A zMLJAdQiiLZT@jJyR2Z+;e6f_}mes9XnNqWUGTgi0g;Nk|v(oCNbpg)2=%hwcxI{$j z#8am$#A)2AfFS<0CJs5JHFi5*Z*C6#F95QPy`prx9}pq%TLX3El# zpN2`-=?)=Cmb5XQot_}4L!UC@O=9VIz4;swHF%U`g#`|spAqbvGKrJ#yUj2Wq5sfG zS%4XDG77Vu03}H~I8X>E5u4xCn?9}EumM+Lr^Rb$T2pV-vYfJ-myMvmPwmb+ogocp z0-Sj310bgrG2_w=Q|^UhBknqeiRB1jG{SU0SaT|6?3D-@7fKF zsj$1KvpBD{^Amn`UKvD^_?TkHY8z!c3lQb4xt~k?BZxmnlwiY^AgIy_Wz$?R($pGP zms3?^Pvh-ddo#$*rY3L?2* zD=lBVQ3AxAxD3MS!WizarGdRW9kI21l{)E~^>a|XRVS~#w**sOsvwdHB7EL~Ok{4TJS9+fo$z=wd#zsr?@mWlEnlZX zlc?<-&PA=l33UuMEBtmBr62-&0S$V!3&Lb_>X6O;Wvoh;Q@nyf7K05hyqI}IET6Y1?ymdpMc}FC% zO*r5YSPX@Nlr1pF)7wt%71pcKX&bt~mqZ?tgeu0I21r6Ff#9WLm z4x2xw2KD*HCuv2^B~Pz-sYJU;*GGWME}iH6Eujt9UyYiw3$Wyho+9}+|7kfl))AOEJv53zpFfe7!1ABYDLua!C!r813R?t%1%W?!XumoK z9ZVZLm9mWTziI~P>{*<4@}C>@oF%KWT}|+R67UB0{{R3GeZO>003WPXVrWG zNuyS~lT7p7xOGJ0NGY^q0-}%QND}T|PL#ONkp=I(`S*ZGhyfAJ02CMiY6JF^J5r4o$D|MnAvjzP!M~ zy1$IOE*#G#{l4~1|1MxeG5CMuf>&7=7_@3$$k4 zVtK_o<>~j`^0deUDR=5v=*d2Pzfk5$@dt5t<3}=bcqrt#NMAXnV!7vJ-8~LUx;RpK zPb2ZUrM3ea5`-nG@$pZ(uOnnWoOvtfsgXrz{&@Li58j>bIU*HZ4fiJKD<=7>|BCM+ z|Nl$9$;R*KD<==DZZ>o&!)wC7ci?Z_uP+Pp68qqr_s)zwd7tU}7Twj~BqUWx<565; z&={QhLNq1RH?$PIa9qtnRh7zz@iljN7~B#x%LKbj&JKLLsiBe7fR57`5rcoVK_}cQQ+|uDz<=xSENBS?LLvzp)uAI5Dk3>=)1ww1?G1ZqItt7qA8yiUyAs%s#x5;%-R zAU2hK7z>6ji>%2naVk|~-x`2N7Rn5(I;FJ#fdj<@l9s|39j|LoQbVB8&4w}2tYqB?uTy!8zCk-kLjnp6iYc zHKL3mH8yr;2g6BuF|iO1?zpx#$BYW;K%MOAqB84O@OilJ_P2;Sg4~5Y2URa)X`S(W z8ycE8ns>UV3L%&pHm51Ozw*yp;`7yDLeR(;U1Kd(D2B#?U_D81Y{%Mpqo00M^%B6G zd29`9r49KyIHWv0EFJ|KNCIJFxMAgo^;qrHL>V*346hxdh}LMKiuA;)8YOV^Z!vH$ zQ^pu#!c`Vu7OLKmAr%_c6bzk(B@P7uy<2=eLS+W^dMw55{YtTKuW+xfdu+6b z`hmskqm8FeYopt0S~6*fJ$3-=ETDLTSsSH@{W{h$Bt6hrg(Q^KS!dJ2t-x*8vk_Kt z!`v#EWk<4G`M4XF%A)jjZ$?(Q$~{1e3;PSvEuqbulA%Y52?+bz(UC`Xo(jIg+R?WP zln&zSUf|~HXB#q$-KJ=MLozGt+{hQLXeoPRYAPC@{MftmMy-h**M-%X?6}vjnFHq9 zIPRBMws$#Tfqjv-ZY662^l^=TxmcGooQZwL;=Q+~HpsxfrPfBe;gk_bzt&WElO3BR z)jQzd*C~ms z;={1;D{lwENau!ZVYEGC~A4+)6wvJ7^$M6Xd^~!Q_D455~XC?F`>nJ0q{>6 zU94KSu3${UUZ>@C4&TB14X>Tolp+2xHCa0XBOeLz9W2t4bkbJ z*$+DkMWnX8tL-~n``-JY%BhXTUR?GCP5KW5dy{)hc0G1dSa9Dox3o2BhZKY923IDp zI6wY7=Z@$|`HoyO#*{eH>M2I#OtM%~$R(#N4w;+^07#?JxN)ZMOh zcZu$IW98&yDD&a}PmYz?cm8hn=$-!KCt$yOf8#EKaOP@%Vh{XKS;>}OA(B;SE@3pu zg{iN-d8shdJ=;C#k)sdi*^Vu4Ybu!4%emOeLF^oMm12f992^*JJ8Ijh5hsUy#7^PH zu}_cHrtne41u78@TMI5w!G3%PV02!zkFj%2EfJ`+1SJ7*Z2`8puTvIPf%o^Tq_BoB zxEGS$c~(yN0_gCWdo`0-#$uDCL_^j>+1H^FI~{0tg^;wT9(T%Pd+r6bWgq9x-fPOl z=QZ$Ln7B|E*kpig*O?UZidW9*Xd}N?`yPC+uQ3MpW)l=ikPcrP8C1li z(%2GYsMm=?hSm$$WkTO~g#}D!9?}HTV-Z#(m<=m#a%`rOr@no^aetb|v1IAM5D`hk z+^LT%b$>g545bR(CX%AzYaxqj8yb`msAM|3=@C`}u&{9KLu0Y_R*4%}no6$oW-hAE z9Y{?fK%Ggqv$;sCVtI?7v=D?UFPzb4lC#&<53sFx{dS9`$!kiaZG&2^uTv}cAA2Y1QFJUIg-zl~~lgQU8g7FKB1_SE; zhvS)J7Mp&&rh2EmYKwi6UY5wy()A0w`XKsWrA+|r=s?l>wa0GtDX-$!E^zAat?KJv zA>GRK!<*k=J)+tT%?+rQ9+zo0YMlfbiyfxD?LjlMb;>yN<=icC7EDIJAy+Uw#k~2{ z<%#-nDSID_$~P=_J?+fC)e#Mp^+`lS)t1N|1Tw_#yy#+Or+ujVnUS+T)A014eYwd1ruF-$J(^1O{@8C0ZT8aq z%DLTH<)9nUSX(*_YK4}Bq%Aq{X|1-V8(mn;73_5E*8>V`uT#!diRXKJb9JwSi_jIw zHeLoMPtLlS>Rh!Nxdak?YnF7=EyS}5*D{UH+6UD6s zFfVv6jGa`@=|FV~#N+OHjC_l1XHN?^tcH5Dj!8VdLbR#S*;TsPuXu}P9h%M_AyJ33 zG2DEv>j*`&*C<)yNDK)uD+;5<^SPaug!1K>2f3uy0-rFfpY1TbjMP1D_fq^2@hT&BQ zcRo;s9#5-xs;h2v{hjU#?0Vbp-1wQi7uVDGSh>vj6!MmTPN6d2?#0TnxnDB zH^}h;_8lrGM;i2+y$^hzhU$0!h-M$Fqj$8HwvCriaY2qT|Y4D zHt`RBVjg>T7-DFT<7#Z%m2B!Y;0a#bpm0daLK3yDH?yZIW(_b#XD@Rh-53zen0EXJ zDXwku2(g+<1ohqC7l#)>7_uH9yb>?c(ed(qE` zoZ4lCNIwh1566%MLOOAazLT;S zyhc4=Y+CY3TN_EHb>gkJ*(@dWmD=zS6GmHwx=Op$ZrT+^wL!u%ez(f~{59b$@9zk9 zV@H@WIyYG%K z>;43RfyWlo70nKeJzG;g7;=Q4CaSf>=;EkK;H`_;F}<)G`uauqzWo$6r9Kf1Q2{iwC(?d0J=&jY0JGv zREY&sm`i~K{E!zUn1-Q+JyHC?97mzfJ0Tgt=2$$v74~fc2!@Rk+~}nkN{{R_^M~q zq*lX`LQJX9>`siw2*c67Jl-;LE2E$qfC+YGB~bG^U3X$5VDJMHAH!@Cbcza+sPqdl zt3phAm0%;K)K0?$kB*#RhKENyHw*c^tzSmv{MQ~#WhXcJoe~yMGnv+AlmM+co&xYG zS61w#3_!8OAx=F6!`mr|uGY5@Iy^zV0K-kD>+YEblFR`{$~~V^aModunrR*L&g1uP zPJ^vcAza|@D9SPgZg2eG3Cw_wY=u}+5tCTS8VU_OiJ|*;_S3CX16keO;?+0|G6mjh zEws=hWi~D_zxBvtxKU$=l*+FlEnLsJrdmAhxzLadYN)?2{ADFKlf>a>Ij6tr{ZcZdrFMsa&BdBU(pvEffL zcM<4FlPUI^424=MXlF;jKdzTGH#7b0V^jUp%Ek1&zvNCf#0USx_3g9eYMYdAd{ScRk_F!&k$ zTy1TFZuMP>=N!`;9cyIFEdfxWq#ThntpAEoCD`t7IIh1HO^I*)jZ^|NSj^uoOO2G} zdhFrL5==w0t(+Y^{A!~Xj)>k`;0O^1kLL*rL0M1FeoV5l)dVVngHOWJ{%{w*tCNP| zS}Kutdtx?-z%k51D0O=(79L;G3lFc#>kE0}zB*OBE;Co$;=7Uey{km?t4}n3j*`&r zwZ=E6U9HL>gm-X9(-}&n3n7`G^^wnK3u0_6HI#~A;FJ2pnza7EwoVnCAOxmpC#3@tcqJhUj1TFENfk`S=sRY0emtOimM9en3%zr3EpR*=ppPLnlTNpqTd9MNLU<4aNLLk5~D9WeGB-PmaW zIS78Y4u#Jgh@i*L4@+5$@GkI`UZ((RK$X8uUr_g))7(rk_1FuFwM7{r$}~!=iNaHX zP)m<6gzg<}1NQ7;c<@QhVX5lQh<)7e_Vq7ul#gzjxXE*=tJo_Llmi17)J7GWC=mKe z(t;#!H>ho3b(4zp;1211FLL4o*A?O!vGJiodi>&(m;RsD1WMMiId@doiLLG2%YgF` zD^?0Ft$h;FG1#$<%OfJqRJrY|*;E7upWYnEx_6CdweP<6FWi+=@A;rVr@ESD!O1hm z(ZX06TEgSjUZpX6B-2B6Ur0&KLA=29zA-CMIUzp%S~oSQ`oEg?m$gxP$C z)IdoN*H7vrgMXRlgJaa$&^s(2wjZ6au792^6k{umKx%0vY6Xwf$I_T5h+SooytFqdFtt)8XB z*p^$dPNt6AT5FBv-DUjS9mJweYg$9)xF!S$LsieU5ekgeNal<~I>V!T`@%*9tDjV* z2e~5|@q-7|#3h}o&7^wkB-D5?Mo9*fBR^CntM+qyB=_y2E|4q>n|~)9{lI+(00qGx zotgf-s}L8->bW}KgYPJZcGfZmoprSm$%laAoyrrlCO4iMATlho2o(%hw|r7?7_H#1 zj@HkeM{lb-``k*fmU{2?G)0X*Gu;^R!FQBV4Z{l_YaQ^-QHb%M05?W}s@ROdkgu5C z*U~z35O{C^c%u)|SBi|U4qEx-rNr!jE2QCR=|F;tpcDfE;aarER++O0OV1rxiBnYd zGqn9KHT&Jc8o_jW?U=6Ng+aB7LOf+Qf|QH|HcaS4dGcfJ+d==;N-BbbPwNl$0^9$# zvihL*$Ag*etL4$b_L#0-JsO}pE_V9|iWtwQT5Ju6W%wqAQ(Uppb_jvy0qVW-0g3O zbaRN5?d0@q)wG)Og#z8S5pc}=N*nm;a zDF)EszK|Ljf>;QZK7+Y5;TX)Cf8X7~w7TpUqSuCJ5K0)46^`*CFhjJiKSp9v0^a8k z+pxMwMe4!E01`Z5P$KbT%1wdF8wJvl{(vnCGrg8wNAVeWjG!cG!uy$|+Lt*?*YHkL z_U&RN~Hd0@plwiz)knpyyeBoOL0(j8`93bzY$?d={)(rJY&1{P9QyXW(Y?EMvfeV5On>w2y88|w|4~TcPY{E*F7D$ zMF&2`ec|ALU=Mp%`Z4mFdwZP?FCSiFCzsQ2t3Vt%2c(!!wTAg9Hwj|#ha~p*56=J4 z*RW=!inDnkAM)*c7z!vG%_Gt_Yc+4iB;#3DO0{APEDm9&XhspFaenX1zHO?>{;pp+ z9Q`Iz`5YBvS zgb5%h!Vw4scwFxu1B1aMyFQOe-1Vh{X=8*)PcznN#KdnINyeq(8A~w0N}^Py1r3Y< zDt^*TOB6r^1R3H001*HhngF~9G;Mdf+w|H?V!yxid$sA0vez+dZ?88&b|go8ySr2x zfTRGTN`XNXB3N&1BOt;+^o(BwL6{!_Z97&D)ntMEFXzXYIj;F+=CX49yc6H!8<#8e zTTee<#5XsaH}TA`JXj^=%rmRRGB0-?ra6DE&vRwIxnGV+Co`RM<_dj})ykFD%sMZo zxZN?WKG8oJ^vatp{`kol<>LW&>&uy0_e)Ct0wkJXBeB-Y1nUY4cEU=aA!j3FmU6S% zI1V6_M-}gQdPvhVD@drO2BgBzp`VdRwZ@rNx+N)*j6`p`rqP4KzYPppO zR$~lEq%ohzxAqI!tMaXPzU7^Ve$SJF`Zn{nR%YIme$TK=>TiEv`Jc_Ynd_tV#QXuz zmjmuu`5`-_@!#S38{^$;Rrhmyvp+qmX0}B%UL-;y~mccKPRiZ z`LV>j`O3U)|6gbqXs>6LgOA&G`8bbo&gdbnb78av>uhk$S~KxJ!IM7zk8kXYv+o;o z;=8D1r@ox~qV%Sf(>mx_=hP7Z{hYW^8JTXTz%@By4SfokWW5vWwUy%(vu%JDkZp=` zfu1-HU#Ooz36cGT!TX;6J06i!gy9uKLCZRIJ82?fXW2TBnJp1e$g!twwSE@h#OTa* zhyhx#t18fh@tnk+MxG_mm9!rYp!U87Oa8RC@W-vv3j(Bbs$C6(hIZ*kjSX7UsU)>W1g%xCMPz#>)TH;@ zScT(K>2d+^IjNFpfV{tvDuf;tQ$pdDl6LD!+||&RPWev*-svz_o(o7*S7-nklrH2= zcZUxQ!v>L*9Q|fJkeQ<3g^06BqC1^hErW!wy4o{(eb#{v;v#oHi*RCeW_nBjt=QFY zXxc%xNP-E)0L|7DTKe5!{%{?Nf2*WG2a}^d_r?q3* zOSfH48xl1U-P)B_kw@M0mwNh9a{cG~e%Atr_Gx$8=7?WIomI{Vv@_XxvRAd-ciFqy zu`1Ut7@T}1uTFq!s?)M9id&Y3a%9c+7ur+Kx@N!kt8RJt4V9H)D(%q_Y(iDc;;L2= zmne(XUI?)i+3Rr|t*TK}Hn(j1SZkzSo{|g1ILzR2=pVU{5BtP?j^E6dlc(x$a=CDD zn{^sPBs5FB9UFn#MuB!?i_3`D0-vO}F$=%y8$j`qY@*KFMmf`ek+OO+x}gU|v$PWh z<8Ut9HpCg9o;IjY+6trF+?QKwQyGh}6cZIIgI?xy>3k>{K8R#1G)DIvZ3ohspx}jV zy%6-17Km>aq(iWQY%Mx7&_5U2L87qO&mELM9>|x|qf+)_xG(5iYtsokr2Sb^wCg>C zaShvF>mNoNnPk}N$VHReF`NaMA_}j%2f}M3C)!&P_MOCwJskFu&Uk|_b*r-A#O=&- z$M`W%+{@fO)^C`V^H$HKHg9i=v=SqW2Yaczadf}0wky?YujARn*W%k>ywMj^*=n0k zE{$)z_4mf+YWZcr7#8{BV`%YG78^#c>PPiT(likj(k+lRePO;Wc-WeAXWXY5>g3v8 z+qOz%;cYz!b^}A+H3lc)SKSKe>x2DvlswLRTC1TNydmnP5;edNAX6l*z^Z$?KJPFf zO#*on*mJJI3+`;E8A%yCzOPTA49ydj)TZ@>L6TtsmWbj$GaFy`%l_ExXY=K)6;;*) z{ zP)HNEdyIg%B~xSDwQ;Di#>Q((+zM>q#Lvpqt5FRltYiq`Da%&N=wMEPJSlAX*x-fj zx6g?KUf;+i%3zTl5O&re?>7+%pQJA=NiB7JH1afcBw6@U5NK+L)wf< zl|}TOu=;Fn_;_JM5=;1-9cleK?OrbzF_pZsOSkK(ivUNyY-kqN7VKz7PmK3Xfx^Uv z8M5F}>!_2~HshdZ{{}4FKG2S~;f9CvBA5Ukl#j>X4}SSumi2rkV3`1^7yVa+5q{Nr zj6gtkyIJqeo&mjTFX}TpzI7Ma0Izecud(U_nJ2ZF1`A$yN@rikPMyCSy3DWDQ|e00 zQ`uA{1cIRuQNDCP2G}3;5m|W^arPN z-I<+45%!?C1$O@bMd|9W`k=HAwP&39Y^oKYw)ge*D0P=RySABrr8TXCVI1Vg;QD~Z zF)kVb)2WsTY`V#SARnXlYs1n3D|&ZGV7`~V{Q}&(Uc~^@-5A*Mwsa7@xJPcI!0h>b z!+?a1^dkafM>7}jx*kbht3ZDq5PQh;V1=)I7>DFJ_|_I*FJDCmQYCOEZGsoAz`*>v zM#kq_yP-`al`lL!BkJL;6DP@HQ235J(^7cv zmkj56^sx*(G#l@Pzno-p+b9&et_Y??ar_xSKHnqq{b#Dx4jjV%gMv*v)I>;`^8xQJAENX;1BRkzvFYn z!1G>BJE(veoNtf|+m~DCo9NZ43&Qp;oYcqMfaH#=BnaT-p&^k|gy9v_LNl$p1Sa2f zql{LzD{NCZ)$-jM#jvoVqGfO}bcuR+Vs&dugx>Y&E!vy+&)kJdR&vnBGz;x`;G~s! zhfGvVmB$IR4e3>HAV~^grY(5%d%LpRZ1la(Q%~F8-DU~Mg56|0u9~L9k2BNHn(T`1 z+)mv65BEPK8?zO2`~50!02;2Y|G(DF!43EV32PDeXGO-?-9JEG__FqUusE=XwZe^E z=DaU7j{PL?h(%qS-}RkCn7lAlC>rfq23p*w)ma!&$XWz9cj&E)OYu7}JBcEd!T$Fp zad#jdd^`I6z^Hl>9^6CkThYL0?;ukWS8rduFxn?cNKs%t zVtxkfF^a$kCFip<^E0l_J5t*^Am*J2Q%;Bux7e=<9{2>&8jtIX?$#nU9@!R{F>`T| z1OkIfxj?Br85JTGNS?r$Qwv_MC)=tkltRJb-4u-;>~H_vgT_JT&{($EG>H?H!MF=S zHJ&PB=%lZw3k%vn)Q)5%M3&AkjuE*kj)e^ccQZ%@C!sy#Ja{lKc)2dwslKqZT~ z{i8dcEPEA2C`%{WUsHnKYJe2?%VZ#XqBnqpT28uW=Md$$Bh_BK6O0=X0y8N1@paWy z0w+GWRwO6fN(ap1XpsK6Ej^IDF#8sLYAbdft!BD;zkDOx29DjSdftIc2r%9lH{8x3 zioy1pO6mlH^Gig97OI4nS&6p@gf)aODNsl}g_S;FU9LtU;DRB7@)=$5WNM1Y3A`1S zka%H-EX@LHSk%g5Inoe>2RQC=#0@;2!}QmQV3onE(hjKcp`RLV12!3P89Yi+7Tix< zfy60=NwVMoJlI$;$E|8dsA)xcVdNgEsHh>_XBk8}`E@iTekiDvLIMyF3b~glEp-|d z93+D1r|0BIY{R6B>qFLoEGAfZVJL0^B)5!J`&}ovps+;KLJh3S8OqHMz=#9b?Q<<} z^7+S9E=>^?G%Ge4C*-#??XMEt(f6IqExA!&^H>APS z35=o8O0>07Vx-R~7h}({hI#>w`Fr1|+~`V3#qg}4DWjKT-^-Kbv=C%Ma4OoWAVH-a zb>~gtm|R5hIVvujJ3&M z+6WRSFlMHN7kTO-nq&lqSRkP>Boo{vA;x(q@@v=|Xg;nBHX2&Jb}{?WDM@= z$P_a^2`jpB26o7)HH;#FF%qGn4bIrUoI2S8U)oW4VPP#sJ2__ohT`iQLIHRCKuOSW zGbHp;Bti$Fjh!hU?&g3>;Fu#xul#j_VmvG9AE1&w`LQlEb6B+*<;7oa+n`4j zT8cGNQ$}&L-UROqq>N$a=^a9efHW#f=7s4yYqfth-<-oLuAys z<(*JyIy*YCP_8Z`tKokXb;g=Pvqi@(1bFQu=^k9`gO0)bS!2pd}naNvXpo6qz z&J0dls2{)FETjD0-Hn@~1Di-zb-lXc&2k(d28EeJ;Q-hVsMu&}768T?HAP9{c>-|_ zUu3ieWR>T>8 zGh>Pn4qDO4?czLUaItjv__Uf0`13WlBl8tkdIwn0Y7iGNXJo)i*rhHhjHVk78OOQL z*rReF%ZOfXL`y+2Mua9w24R+_h=P09fe$qpDu~iWj@|0aZlZ`~aI{e{CFSjvEWS#{ z(I6%CUgaw($i`^lBrZId8IX562a<>aHAZMXvKDrT4vG1nLCMC%$sg3KwRU=Q2cG7v zKK4|OC_povg)nNi#I-yjk}FoE1V!lfyg%oVMvwx7n;plCv1uwv0r=96Bb`Yoyyl%; zQMl6?O<766Nwnc>DB3kW@EKfZ;epvo6q^q~_;y&Af|PU7ywQw#HX!u8(n9HmwOX|vd2kP=}bf)U9eN@s9~t^{T% zQEfhPIuC9;-coe40@R3|1v{-tXhEpWH zp6o%mLIF;RnV5+|iN~Mw$R4>Cc4~}SdagpIWcuYhAVFV5BM3)+3oL^j1~F-Ylp3{j z5v2W}!tvF1AFXPRG1gesS`8weTp6P{NGc-34 zN`e+42t;rUCr^lW1-|vc=PlT6X-@s^M}*4M>HW>9H_;KeE@c%j>>eTuz#4)~;NVto zT~gkDf6L*JBNXRxtTnw0sk2lQ2Q?c95$;Q3zM9aoOEH6+JPQfD7^+RYjHX>61rmpC zTf8t*C#I87B5MaD%mxq~G%0N0R^qINcL}(;?$`ooEv|1!`pV_$fqL6?pzhYfM^En>_nnedPfA78f5Hpid7Re~t`H8q zidHog8Yh64AW^S>{&FywJwy@8;NhZO4O56h{l!S}S5XX~h=$w0aV^~hGlFf@R#4rjP@EyOj$vZf=Cxr;l=#d6{}IjjFm=Kqd92=+Dh-WQix<&2cV zmHg6T`&Eh?H`z~wHP*dZ~>xdZo z%0gD^j6ql(p(#F`AWD%yt}oV4brZx#kV8_1X-MG`mL!A(SsWx~B5Y~3S1yM#ywKG| z8_%G(^Bf!8TyZ{22ls+0kWULjr{_kem{xMEzyV^>#b@j5!4oF$tt1A>!qu`H$cLre zI+%803g=qvBs_m`OqB}b2%`S7SJH~=2Q!S@nRUXaG}HAbi}Q z72{5epS57;q8qiheh(^1r_~>UY7z+o%a@4jQgi=`l37NaSB~`zO|@c7Yt}`xE=Z3mJ8LiPz8rxC}WUU{Wpe+z$XuGBu1P*&x>i zdl#+fKmOZLxjKE0NmQ#y2w0XeRUWvlT^4|27-H5HwxGwMfQu<<~H66fa7-un9cuz_cqBO+}`nTmQW_7X#<0P%c_pLp@k-T+__5CZ@N07GL$ zB>(__bf3z30h31lVCF97Zf54Y<&knE05bJn0VN4*+b`tV{mBHQ;Bvu9A(h48=#8($y8z<}dkel~di;tWX0qHRZ?-F9v zZeEi3)~!1?kV0FuZe@-`sig9Aa+cQCav4tob=LB7LO|At<;&zJU}!CB8OjiS$^J5_ zklG{wWB>qWNC1eS0C&HAZ*9Ahm3D8Y^-Na9jJungWVvnIZIUh7?&TIBb40Eok})yY zo1h>c&@TzxOaW~HGxTwc5As3anLrf6diB94rjXx5*I^o33KxXhlZ3;OL1UG2X&7V^zfFGv zTOJ*2$CU2vwK}xnErn0fuP%FEmq7JJIxBHu$@g&=|7%1$D$s8AKaRC-pU7>vezQI8 z5w4=y!bQ>nW(pFC6-GiXn7~R|42$Jg5uxA#i?&s{%WJ<59>gY%tnniLb><95-HiP! zB3G`S*(%|o+`y?kpF8fTb+)xT7uT%VwD*=!rG52y|Fv{R)%B0>x=uWEI{iC;#?3es zu{hT-OyeqByhsDs-*_bOh|#>>)-FQg>M%rzwGnMc8hN$#E5^}&DGiOeJ?(annlWyg zWAiX1C{}?5L5zfGVF)mS7zu(ShG8?kuA#=hbPhzix)V1~`qmLPdc`!Vqu`G%5UaY% zHma+Jt$P$p!WwEu%9MI2GAc;$gW-aEEq72;+58%HBK<7})xDKgJ;SA%dciFsa>4pg zS=JQ>S>%aC8!FLNzD(>$CJ&b`0lxU|&YXUXvBL5dCKFbhvn|1f+vgyfWBocK z93R7pQ4M;me-lq09O(Q#9%~=v1ukO1Fb28crIK)~N?mK3E43>)M6I-s589OuD=(qc>!bX zGz4Z*%-9YD5gFrySfqE4SQg7J(jAG+V1z~8P&n3Q_>%b$iCP_HIJWa3HSk)(CpYBU!GKI9?^J z5e1knC@xEY7^^T|EDY(#4F$4remYN_VUPEo-8avKUS!6{Pj169#Ja?XDAwf}g4Gm< zpmVG4s&=9DO|ZJA{K@bu`%i%R3LwecMj3Bi^sdgjt=aSVQJoPGKcWHYmX=nUF(E;f zECWa~sw@f8+R0KG)h1O0kDABhOU&3h zTs(*wU&4hJ)J1(+ZTs5qtAviw!l!0W*!wnZPNlWiXlJ{TYs*e?gVd4oo;F^R8a^bBoq2$Vsj>+1IM$?u14k!SaIlx;8eu;X7%nJZrAEYy9(J0dE>hX$D`0F$A!Wm zSsV+eo?a#V2z7~M*s(Xn?guFF5k*R)2H-51++He0Rcwi=0xGvPFirA3u^`pN`4oQv zt~|)>f_e9ahp61Du@S@zrJiGjLOh&rn8HV@abv+N!8D2ZZgub-Zg#&se%*!t_*VSL z0fIdD?1XvjD3ch_lMt-R?W9c7lO-EKUuxXD0 zR6_EPS$sJ1i8Q{8ZW2Lrf4V`B85!pep zQq))0(EHV>+T6RTp0NJEBt&`L_I8cfNjFbcojD?5$`rcS+7)y9#&!KSUfU_kvp3`- zt<1fRSbD10W>%u>*KVem^5$k+ZM#z5HH}GN0ZL}X#4{4Qk2)ekmYcO;BDcvdjL*ap zP^7^5N^l5Za@}apLo*yQ1s$*%>qXZHHP}KZrTnkWa_yjZIQVW$#jC5D-8k=!M7Y^F zCV6enCiaCMTxPK^#wfCzF#=Z0+I+Phbn^=1doQimxRt>~wpgB9JsR=A-D+6c&{X&J zRX+$~2dxx+MgI(fJlE_DoBCdR1^==$F|$Bd`ImB5HNSod^liGK66~RO--jBecdov8 zyC`2Sq^q-}Iq-CAYb=yJ4nC_?-kIuzhS7_hTL`wHV z`GE45^-bZ1;M8rHWXh)Tx-{&MTJGp)JH%NXw3ZsJtKRHcyV!OB`0hwUK|8Z(Z~{~n z+SoeGE*C3*y>P&yj@PZ-^w(Pte0E)B2Td$x*fs4-S#U3|jU!4MP=dRUn^EFhwQuKB zZEbCaT`;fhE(I60ZdlCVL{{C;Ufpvz_q95u_iI*cypmq@<|Vc^i{_uU?Hk>h4_g?K zPk!*L>&|U0-m|Xz2BN;lcMb@`uDQZV*U+J_>bg@g*3h16>g)a9m_2kRxQ41WzTn-{ zPPkvU3a;iDORWbi@chsGTJ#fV)#7td>M=#(cFXv8ou3k_+~b3=8|*f&VFK-^O*##J z+j+`Jwr{;`kk$8$;1+ zUB8b18r|kSh#8D+!*-Z$4%*(+dhb{h6vpfC(AJP6?O4-U|B}_#u?7Gx__(_FW6W~> zAE`xGQ8)APt`{x*sfJso6r^#bpYCt!r_)>bQai7Ekl#R7f}Q7qZg=k8Z;4)tt{ho| z1=#Uayl7vmAKh+bO&==yJ=PwluxES_58pL)la>PB8V3R1h`H+E26i}CuZFGxZL_Me(?r%B(brKN48 zrcSpKE|ereJ5x*1uj=W$X`lzFpL6Z;L0sROxtcBmo*$}x>vV4P)b5RVpB4wD_EGcy zJkU~UQeNmwnxRXjwzj5RQhHOyod(ji!mi|lK1fe|_1x*xQ$SSdZZDXisGxrZUOPH3& z?BHpC7C%kgq&d6ce)&xZT0n?vSHU|PH649TMYz95xGCwVsk(PzprXcbC+!_>?)xVC z)%JJrdYhK_UEKw^tcf4(XnpHv>rJJ&%+u2>@OLM5*t0vc7xqs>yT845ZiG*B6Foie z)$mwaKVNF1{d95te*R=F@a;z1qYSiO_ru-3sm&BLt@@TvCl}QeWWwDoHP+yKck8tq z+3SAqJC^tT(|bML7V#&E7CmRn;5xZ|J)#cO=r2Ft_cvgM``Yhm&<=c2KEN-b{^-gf zK87oOEZ=0^j9gCfsy?baMA4v8c^Oal_Z>!GRVq=niXoN9D6}%1(yPABj_X)RI{mal7_CY7Z zfH}Nl&8+M8*NSy*Yz5Re+c1u}vi%l#_sM^wz*!-AKZ;QvQn3Krx*GKg6P4^&*FY|e zlFAQ5Mdsy#l9+b^Ta`PoVUvaQ+Hq-xq0m?8vAK#JXBKUdD^VR@-vd1@idH3(j)R)u z+$S?5f8+uWT6f0-CbsC%`x3W-$t!;b8_FGA#t0@6N$fJq=n$rAIghKAzLx-SG4New zGt5_dx#c4sfgJ$C2P%|k=PEPgE~B_k#s25=lJ#8%?OC#sN9_4Pu$Cc{ig&Hevk@lgoh-oIT*lD!F9Ifl9i9;&2iLSvYMkb zJ-L|Ppg9}ZF5e|Jql=?FnR!j+_``mp4w8ORRz8lt?(lQ)-R?_|aPIrCFWg<2tC!pg zvEJr{vCw88V`O{+^VzS~^3^6bA1voX5vnO{;;>$35RT#n)_ZQ;FWEAcsj|=phs;V- zz23(4IF1`cPH`6iO*VvAb${=%8hq&~=%}Ix##IzQH+b>LEU*u=+%D(bDxk}mj~B3T zEx>K={^A| zmbL7Xn9iYCG|-hfXeX7OT_REz!Yy91GNej_nOYZHM_J98lo+F^9bF7~Z_pFD>N3Z{ zB6f2?_jB$oj%%*_{XL435!PST#-=0b`Ud z6olA_3={qg-Qj=xR^+}VeuXugunUmaEIT_35K?p2*ezeJ$atBH|KhtWz*5ZR#C_F7 zHPwE)7-N`%oWNrZf$fuLsE8~8!oJ4QqJ@TUjJ zoZEas7R3jG%~@vU#JSH+@kycrX57>?mHUqUbAb4Z!zu4na|VsuHervItBWO?va zPPhpi@ys|+8!P_y87H?+90kmfepB#sGwR{R^4uJKw1wp{B;B*j+2#u+US8f zoVQYY!1Pm{-Raw94B@y#1SsBY{F%WkdpWZF!~;N#7x^W>r+irzz6QS?YEr>#Fv7*_ zvShuotOpZzbHO`FwUB!GxO2iN22R*a!BzFp|CuhPAE&kRo0;rZ)+X`0)od1bnUE-O zz*yCVWivdD)Va9MM~CQ+P7w|dw= zIEbFizFvuu&0rh`e7ljZ$g624!2r8gFbEI66U6yrEwY;zwnA1IqdF~mYGyaP6Kk2; z4r|=&u*5aqPx7C$Fy5}r0gS!Ua;rZyNSzQw@Po*;UUBtbb6 zy5(W#n5ZXujdfZyG@W?v7vGsV!_ztTHanN?T_gD!voGTsc=@@v$FKY-nUklYeqGTkEGmQd}DU&A4CT8`;)uc?gH2(oMwBQiXgPtS2R&fHb_=f)6gXsDvs z*j4j6v;Fw@q!uac-C>d6kC<^0khPhIO8_~rV1~JjP}UZ@Kq2haRly=+7T<;vjH#&O zcJ2|>NOfqbJ}lgH9)9@xmDkMEZ9rEzS=<}fAA=h+=TTAn1#3dhgdt28qW?+??=WtU zod6-Stfmu&Mmkmy4zny&(O!dm^)#qeEVkH8;?oppG?7_-2cb9kq7B@ztQY+M)-9f9 z-t-8=cDbG|KELLmj>1%AvPpurmCXz_N^=!xBmzM)kuDLkBr5d+P?nLq4CWH)if!}- zIUzDnA$%sd^sY@EsGd7~>n#|>ACX#nZK)|np~_6C%PcS|lrCb3gd2pa>|vaWI@U3< zO`@&EX>-L809=M#fig-mf*SfWufaE`Yonm%$S{%3QSzKVW4kn>pg`lgLM5wFA&i3p z#94x>k=CfETy0^0d#U65tz`3}_xVs_MY~ts+E9C0dmXryAulhKZPcG#<%9}YNgF@_ z3}FbF3z=jCDJm->&aI~z_BFKT$kdRoI2k;_lU<8liC?r2#o5VwdXTJ7fz)IO*PgNB}QGk_U zj0`e{${v49sm$slLIYDdR7-E|neKCzZ4{c@gf&o|f(z@oBj7}x`yGZ{|9ex8Pp*FWPabvq|j8^Q&Q#toJed~ zvdB6FD8i!PD`kU_V>+Y+tey5N{d1`w8=Rh~9sW3r4b-2zw+3~1@YsxNp~ojyxTxd&l(%1%;m`qXN*)0;0!&VdQ^lP z22?NEYeq8dpjHBYSCfXLplJU15*{6#J9>ip^Ms%j&o!gsmpv8b;)Q+mroaBYiXUF% z#m_#)jn`kJR4505z``o1>My$%(U`Uf%cb_gL}Puzbb1GCv$O5a@15`}d#f{RkRlBD z-chl^gl$7M1)DA6pl?pVSdpfQR0%;?C@R21SrrNmP=ZCj00}E~ff{t<{#k!MFP@|_ z%Y%Zz$W_^bjk2-`5JOe0084;O49kqsf@S!H_EbPQo3vk{;^k;r@U>VQ%i%n1NP5=E%lzPa}mr>OxklH>EbG3&(*$kl&; z{sQ#=*=?M_`{P-jgkL{AkO1<+Lbpy`3v7G30VjQ+2}S=y5LoeT8z@tT?qyCDeKtwW ztpF6$Wbbo2=hely);*EBUSbR5s+y-L92xW~6Fvywfrd9m7syMcZ*-rQUS-iTB)EF>AR*`n8gqA6mIDlQnguy~ZQNTb@*QDz6vW<|M^nPk* zqU9j__x@CFtdz*x7B&3Z=0QP&Mt8(Wgf1{8QbLJ#b@#TR7~CJp>m?=*c@KN3JoTzJ zRu_>bzZ4Ef^!p&c{)<>@LhF%>l=FoDqG=wq6^Jy+C0uBZBS3optHj!*pclQmf9W_P zyzr2EsS@}g<6Bm=V93OQLJecCQwnw4A~IL7>azi>W;_e3HH-%#=MpL+DF`H; z3vzqfSr<$~YV7qUrln*$B~wW11gaE-swS?;PFWYyMURx>0KO)q>emuUA6o2&!~@F$2x@0VCpY2 z-lQKjTqWbRI7i;Ij;!u9nC9cIrqxYX4;=;W>f9=qA0M;aLK>WO26|t6GSYs@?0Q~0 z#4+XJ`}LQuA(pUrHvrPQkJB}kx~d!dy5t22BoH+!G{MRM39EEUu`0-*5LDQbG-6|Hq&0UW@gjGh#S#Dyc{#LOQsp8|vTB&gpk{z5i|WWCt4UQN#PFtt3Z`uh`Q! z2lqMjhVB?@jB)`LtWZ$Qj3qERl{nUQ3SB+GcOlFotOI@BU1&OIT=NYbI_pffZ|H+A z5U)0{Xu+l)Hx4&DB_kch2=(}r+#W(fPvhZ z*P1^6v}Hb4#-&o4g1q6%Vo_oOVyuEJgOZcE+Q7syfKe5y9Cj!*Lq}ce{%L&F(Bbv}g;YmbU-{uf)sS(@1Rk-(3J|LM(sVF z86>0(T_+TVNCP5NG1VDQXDmqwkT8V&Jm4*=6 zBu9Y?m$ysH`q}d) z;XK65Tch8#puv59zL7%Zh*=rLAeXsHU@eY*B< zV#Y)xfam#JpJOQ{zhoxJfZaSNx$~717wVLh^iJw>`g`ZruatGVswCOBh1`z*er2{C zS{jxEz!D<>fy&0oP!ZN6*gXo$1a-{df1PWr+-|9Jt)aZPpScvBPmy15$Ta&QwtDO8 zpZ#AW17zVPqOtAT?!PRqcHeH>V#@U8$48B`z76O<=S-d`fdd$0Q!sYzc8`zj1`fQ$ z#kbaPrLeVr9*+s{L##H9d3*%$Ht|2YTV}kp7P6R7j$f9?ivC5jxO#d-Uneg7 zf5RMiof*x@q7=z6PDSPxjld>XYuX1euRtc{Zo(b(cM;_nR1oG8nLFcHAh633aY98F zsX;i9uRj{&zr7uWV0rkB-je-Y_}sLtBRi<&Gi=hid3y^r@Wm~j&INkSR};-W>5} ztS(y*`1(h@?W%xph7JTl0k17|dJ8haZ!!azHjbe`9*H&B(lJb;iER zX8PYhTNgE+C9jVI{y(R6y-DBgaso3GyUvG}3r0Qe+REXt-We^PZVDK>{1;>+-NC0^ z0P#>%<}4fbm>#5p*443LBupvnvspl}D-6aWmVM!|s)j4CkpL2Y z(68yg|HA#BL{D)|Q=j6=`gIt@DxGgc-@DKFSH@&Dc{``)y0-M8CF>UOV5XeK>Eocc;acz7X)~DP61s{Z<}_>Kb0FY&-=hk7y{00Ez`D5P~&~a9II- z{B$m5EEN=?q<#(mGg%|cWWPFFf+Q>*H*+RvK?`k0knE)gQ;}OjeZ{Op zmn9_F24j$BRL&@f0$JmklqFFObX^3qNqh_clT`Li0e>zzjOSZr^)7GaQu`Dx$Z<%X zG%1Z9gVrrNn!4ejKBiu_&Aj4%?Ucnh{{EW_?_ZW<+5hZ#GY)sTBR%c^@1q(FYKuV{ zdW5)*UBJ;AQ($%-0Ws9zlbi-`qb(?G{Dv|hKEV9%_~-z}RQNXcfOv%4&&bBS}E*pkRO}Qo`JG1-`__^uL zc!RA^Bz16QCH)#4$K+`lKnoE6J6z8b(jqRJ8cB@F%m8XYmA@drv4>3jN;?w7LxPIX zLa?%^SfF0Q!`K8W0)iR2_TLj_1EQ$7aX8AaI{ZQxYf|jl>ecL}8M^x#f??~B3>mqu zs=z&}R8~}jV4|3c%!uBYYVh@*>mmHQqNp^Rai03+>mlM_cS&jYtm% zcW(Y55tP->&lV-H;Lo|lRUE(A7>meQ^?z=kK5jcab(EGhdc=?5iJtD4FXwI88J?p! z8@GItgzs+SLYIKh|9=ti_hG#yRpP)to1$xk*WF&f7kW%Gsv?ZC3xq6`NbCVYjY2ST zSYV)1#Bp2*xn z=?UEDD8qpnrB9#ro+}ax8qA!6{-1Eugou7t4DU5R=W|~Ha$fo=p}1Pm0Q}VU^I7@d z32Awv{bzk+zfc=3{E$#$#Q|AYSVrms7d-+)$6z8m>LQ}52*B#sbm;!GJxHD~)q^}h z!Swm4clz@ktg>3$7kWm1vQ?AMPZ@E_i1SDxP_KD!Nccd$Z`7US*X0pDEa)FN2v)E8z3AWf zBk5&<05kXlzDw&9MQ?m@SJ1KBtKTrm327C+!}p=5&XgV$OL%_Ke@eJ#^dkf6d-oiL#*vSXXYWg<>xG%FOUdw`uy?lD3*uRk5(c0>ik1}ou$ ze%oYfU6gJUzmGkW^Zxw%=X%w~^ny zd$;axftuTZugM_6cRLDmyAZp3s(=E+!3^cL9wop3Bja@dBSUaA000SK?5+k##GxCM1ni ztjsrI4y>Uvs>~zKK+C8Miu(q%TV-|b3s^?gG2ah!B{A;h0PzC=nUT1nFaZAt_kZra z?(OdO*4n3c(zcO)lBzB1GLrT>AnCf<7TcCo#8t^wA_unj0Nb7VpV)k2xsa##Cn!AIfu}!U2$ktBE90&`~(oYp^TsLq-z~pro<@eM5z( zrXYGpC+zETfDN7_)zPdrntvXzm{TD^}N3SgJ(g#{0u)E+jlDnYn+NKvyQ*0s>N7Egdku?2nY9rRNHse zA(}_-WnrPzC46e==xDflSOHkrv<)=}YeNBP6WeLv?@}w45D>)$gk$0mB_=bN;Jwg* zKq>2%2k$L-*^0^gh{O=aX4{?a4{A4@_g)V-Y865s9iPs8lj z89P$MMS;2w_V2`Tsf+h~0uJ+18?Ya6ipb!g?=;qN>>i#_! zgLE{lC2rdAnT3<^qXdf>>pdjv#6GMMZ$~gm#ks#YOHxOy&Z~NH#4!N&{dBk2Pm3?1-QuWL-Ec9m+oCh0hDs*+^*|`lz{}$Xq-2Sl5M7fuA&T`kC8)H{<67cL$Vv=k&Rh93{52BBs_JCve3bWMAHN? zq{!=n+lY+d`M49sf|#`%v)DF-*6=ZFOce;m=i39bL+w8w{P z-IA(v-8i*Y64XMITs*MSxrDsTkwL8h3y3Ckt@mrjwW?B-9&*r#sg3n(`+zL*p7VLz zTbPdGupkt{#CN3D%S%fv)4%)B%F3!b4Z0&Gtx6p|7#B7EMa@>Nab^h^-{BcBbf9pc zakXzbu_IzwBh;tq+8O_wG?ev}`%qTKtF(_p1r8Nnd;4*nAJOW*byOF5O5AG$sx-@s zld7%J`-T2oSDM8o#({0(!=F4Ypx|K{5xs;7En44;Vt9H#ozTpvQ|ZfOdIY21Ih z{bljQR`O%w{c%gQhJKCK*U(#w00!gT;XRJN%>nLk;y0e`RUH9*@Y}i$Tw_Y`Ce;;M zOp;7yhQVbqO_LQR&oaS1LqjiF&gNCbGTa2Yjf@Pg`)5jb4fG=~nRnjgFYyjwThD<1 z6h3M7GQIoB65_NJE)pZPOx87q!C$c{Og)7Dx!zrRY{nN zOVI`zuuzuy0zXQ#m1Y!kXRKgaNgfTaN8F_x{>p4fg_un8u_`mNBWzo(SK&}{ENpFH z4dh0e-Lr%h0I(Q;SFfs%Kg^T>3s^3q#osZhB z$ITVWNWSwUUG+C@_dk@LvtQEc+V+_I@J|V(SC`dZim&u%$MzlYoK&v!4^;IJQPP&) z*ShTTC#%R2Pur`vG??EWaP9FKnc8^?%oR%1=t)Vwmy%VFai4edQM5#!o7D=#7cJnfhVU=N@L zDQ?1YXK6PpGLj%`YjTm-{;(&_&u=v&ui#KT;?M9pOmA#0n4WF@jp8}+17aKFoC|nn z8y;QYAwg#R&+dODmDpG9bY}9^*>nAT4b#OHV?l69tn;&Z?983E3yUm#sGJCzS|^R&SCNk~Emb{^o`6wsxgYXpDPD!|&xw!FKU6xa`zNLh5-4 zh|%2*N1b%(=6OGs)#;ZGv|Px>vB>P@#&L)i?&@ou`fsl4k4d8zUzIyEo3wDxEBGL# z`IeYdjuH_WPyB(>{3Trr9aUFP>u>tJ;=$yj?+}jnvE7AMarB>o>V;2#Z4_4zHmDZhRs&c%~AMsE67Dzhyk9 z2ir4Uhqy_ih3npwmw*XGR^h-G3COyDP3cA4C6SE1YQD@IdWfKCYSt!bj6+%{-)Ech zERL!?8B>L^W6rU^?hk%wa+>~;WQLxEUVQ%cRy@w~5YNf$u74%yyb;LQgNAQ%BspGL z|Eo;+%A?0SG11B6%j!_}kD3E4X7i1=tG(~$r=&l1yK^Sb(06+@i-m#iGO|^gNRi@5 z5kO*=eYvM{3T-Dj_uFk5cO{V);bX`wP&MR{(SVWuCEZ*;DUQyV_$PwSpO@Spw5 z@;#E2I1eVLH3nWs++u}zpX zeQy2F!t2lBr>Lt)bjG9)`JmCd{4cF0Wx)&41lTUU_WSOp-WDCb~UvMH#c#QxUCndKrp6H6~87 znUX%!G}G5-e>D;!*~ejKKk)RB`V`)B&Q`tZcb0ickAR-KPLG6RD#z*G)Pu%% z&eJpQIcW4O;Dit5JNFhj~my@YbUVLOH#638#C!p{guI`s}Nu} zmzasHMX`lb*leZPL6eVIsKKJrgQgx+WDS*>(D&Dg##fIFdP}>m_~p{))b2Ih?a%yM zzk<*2U3>DJZstD<)5J-})X&rWqkf<&J<;ZaR-cbSer zQVz6vS>$;?ZWr!6t+nc8z%BfbY+D<~g&(T%O3Ph$W{cgr-Q<$@uXEB{G-Tf`dztjk z?P*`<>FkMM^sTr7Ep%YVZF~iT}i~3 z@~p4`oBUP(dn9E+XYCp_I-;>PRnq+@IQ(qAjhvK=s?8xvBqENL^~IZC3yG zppfOCe^4A$E5CB`c?O<=-zbl6YY5>nzP0cXJ?Nxk=wR=Y{=z5fNi26C`;&V<{lRbC z_eyT?`AZq4L^zQy`UnUonEWR%zl?8+m(I`C#sw4SvZ5Q`hvtc{=Un^HI2}R1_MUo_X{>OfHh{EwS30- zvDJlUX@D$MlGLZg*}Y26PzG+^>LO{7pI#I zS{ji*R^*zqk3^#Oh-5Ci!P+a0D9f7)tQawgm>#10l|Vc774yQ|WTuh2M;7esFEaL_h^5N{q$ z<$uU~WOFe)UHy^viuCe&#sf#Bhu+trXw?jBT-wh%M$c=uxksX3Eam#^$zFqMIe$#$ z%6i-1MAheE{Z)PbA*{izbpNSY+FnZ%AAA_*nyuPElgn|mFO;&_W9PB*+-c8yzl#^f ziA=JMO+ZyWw$+<{Z8!FY_c_w1J&8CMC%svtGM^TFyEX5c=w<$<`K@$t@7J@9vb5=O zTMS;jPCWs(z1>P+qxsz?Z=AkU_KB0Dc6ke6;M@9Zp(1Vh(2Fq5!2FS`QIKcfAZQ+~)v+KQ!aLF<>-BIQhf1}^*^!C8fGszrz~VlQk2|V3BN4sk z7-8(lZeAnR@qW7_L3a$zkI{3>|2lXmVv*(ZlC8@<(AIWrQ$}f2nv|%5;*yFuK<{o< zN0kkMS{9qJTQ8jQb2Qs@gp>NJCe2HuRavbNjvUpEw#Hq{)#7vHEi_NtBB2i(64^ZS z`2N@0gT}B0yM0(3vo~e>)dvd7o}p8NG-(pk$TJWfv6MJ%!k|w-q{Svx#-cJ=h$a>; zLepmip4;*r$w7bIiWkDSs}QQC5%q>+eV3X1IbkPe8u>Mk-0-Md(hj;h|5n%niv&j_{)-YreB$@@Q$%n`SDWm8*S?Et_=@%6lN|A(z%WyXh*l!G^Ab84J8Y4Ij`Q^ z+3_s3Gw;osQtJr1NWn>LJxuw=z4-b}pmW`sCCqZQHzdMX zov;8*;OQEtr;GWM0(`u2o?N2F@9v|dC(vg)L)rt3O)vn~&xL2t4QzF>uYpc<_-ryP znxp}%nSvs4iSQ;vaTmVIs?V2{+Z@!|)Kk;U(b1#y^Kl(YgbVBEqmLvwP13x9Fl#Kr zqAEd_vSj8`%K;fK7IWQ6?DiQ8Zq@IhjS7=#!{r+%i-Yq$!9J3MT@F9ZCk)1q4`; z5}!$mg_+=I)W<&6kaQS^LX63rWvW8DVcW%3!HC5%5Nw$)A7BxD>*GP?Bt_1(>x|Ol z5jo)p1g$LrW%sQp6PMw*U@~)3y0J&L$BYdpD=5OKi7Sj_1nMe8BO!yO52go2ktQWR zn-sXzyZ>uC6KrV8I^zK+RM$wS2*r!SPXa`t5P&3^zQmhj;Rks79>F~G+?)rFJa;mM z6zMtv5#(J}m@!=Jc@{7ficDjqjIfR&fJ4m@{@5_jo&wvy8Nk=@CbyBehA|}|<;`S? zqKFubEDUB7Iyz&k`S{_aou$A;h+$!-2s2a0_R%D}fU9AnCs1J6X9*ZS-P$QhOR%sp zRki~bA_I_X2nwvqjqxObR5TS`WsaP)U#ZW;^;EA>Np#H2$%mf2QAYR!eCx0YLYROh zIuan5iNs-1lH7%dV04lQiwqI)H~03VL$~*D*!f^T2x21OASVIFHw8;iFGaGNTqA)_ zc1LUNBsgK=x~!Nfh)7iB0L4_-C}DHJj0{x)zK(*!D^p;0xyA&_9=7(~Ro&+ziZ~*3 z$&#w7@*Mt~y*V~D7B5MvgP zH8lblkt7U(odbK!<&=K1GW@WwfrzLvMxO+djBo(zDk~Mi;7KB2wwxZ@2w#hLrfYl@gEd0|LBy+;1_Ek{|NEn%N7=_po2UsdPgcZ6(ndqMq za@+q-rw&V5)E2~4gex>Gzqkt^xSRB5(79RWQ1< zuDy9@cy>SRptEbxVXS6WMA+v}v#Z>V&JM>0v9TfSWkFxrzczfA!v|>351(uQ{1P|x zys1qz#&4f#;cZACcht4wCOdkR6Vxa`RDu01X+jEhx-Xwy?FvH$XHP$=0x#z8vxF{- zMWfZCXxn2;)~vqPhQ_PuP;`{*&e}Nt*AQ0NLBWeKBeUwilO@+`1CksLAcUi?gnYo3#U%f9cNu$ALL)R}0?--9=eXZE!mZ zq{Q0`0Cza;F2lpg8lDRu(?R@{S58A!xArP%c=-n((&N_X`Z&~oHIvOH^UNx0y7WT< zc}e;K2F-(_LqR9#!i%M;yC1e+cq4dwj+QJqy9ugMv@eAZaPN`7G;V}(s4MhCN}TT< zN6c85Fgl2}mxebCdep_2q9NQI*=5-<_x)#t1Bi2PA(6Ac*TUUgw#FOfd%nEp(|mvD z*ruNQ&9~(`kCR!RNADl19?d@zg}tTepS9n5fSa@V=C*ZNysd*%#Cr(>!Hi`sMmi;o%xqw!Xx<%1LD_>a5Rp<+LCE z9jdqkRr`5~7f1&E2tte(dt&(8FkUg9Hb~;nkh9qHk+;}OrT0Ba#Xp&EP_e$>Mv%_$ zDt>~yGGaR^f=D(jrioeuXRwF4(mjKu(v})XfOqI($ZkD5G%@rmFy8?H=eY5SF=|2ZI^ba*-1LyGg4+xE^0UsD4tf-ZlB~2R@CA5KIcNIZ^ zXCiy=Wafk*y}Kj>#*%9SLljpqMo^$T7=&Tn>N>25&wqOFVD|_fEI;QeNKo%8SoJ+Wa(4aQDsUe7@p7 z&sXIMpRwkD58zKjNI^$~u%Ej=X&U%KxWxGzf^W02ZF?@bpzJ)N%TaL+cqjTN1X26Z zUWm56w2sd`TK+E9pE{yqar!IM{3%aAn_d2yewCU11M=PhL>>BMA8RbrnlE^L*v-eE z_*0i|WWrXYHoP%q+c!1sQk<`%c*eoJ$9}4s^lWAagR2|#_?`*!ulk`ZaEyN5$i2D} z9Q_xeQa6p1sLx6nvb_Q@a?puW7}kd3a?sZGG14*?hqZ z{;GvzD7Sew$V3t^o_h4yLd07)7#;*Km`A}ct*xhKm2eGJIx8x=n_eq$<~O=MZIdNn za}y6)eabZORZ>lTMbEx02=tJ#aZzNdO_ByijF?fFf)XM{o~T#FWwji8SFn?-e`%6} zn2u@@1C`)0OEHR>q!FJ~fLYuQE^$!E!IuzzI80V)wDG3jP@m6vquVQ z$Qwj|vG^a2@|~wQdfBdf;~u9tyg9qCVZIBOXL+_p@xAo!qnSgRV;F|SXNPJa2UyCg~83X4{O%^OH1f8FKeV9|9k-c<7h8xzS^nAhW z>XPJM%g@Gf^}yhU$i*1%1;`J&FY`M`+;_b;+i1U?79`^?LrX!ZPo$nU?`AwoQW6IA zc|@dX(lpiXa>DQ5_p2@OEgu%8xeeQ7fppup@SAMc_1I$DxAp7UjP2arqa7n*HT#T< z6R{za;LGC@2g8e81Cm|L5Z&y|DR8MCiu0^SZFc*ve*fpVRU4Akvj4^z&(J?-)lH{5 z?ZsMv)>G3`QPCFjr4QeFHf!_41j`q^sW^ck~edwtnY*O~(iO18vIoY0%@he`*{SiCJ z^9I%aPFUdFl<&_we~N|vKOuPQ$yUAjNvnsm-^l{%b9yL0}i zPx4CGvjU)^9#+?Ar2U>C)ZfI=AEO<19WV0PZTh9Vj*V$60Wb_6y$ksAHi*vq{~2=; z7SL|@WP*@gc2Sq>SE@F^fX~qL+5;~*b1enf@n6I*&=!M+FayVW-yvJtS`yT6!4IO1 z_kY^SMMuqpud!Sk{^1hO(-t4+arGa`YD~ucZ~V75mCwmdrz_K`Q&9ah3hI=$-1OLz z_CUU*TOn_*2fo|5-rh*`*kkB76VA}bTZeZ+gMSB#LxF;~Z->1_^|ztMCc*XHVjK+& z8yMN!oEQyP*Slfy_^eH>?zr2H3E#(Z=%N-3Mnm0rl8lWHEDDeH~XNTUATK@-}!Z6eKbR5Rp-w< z({oWv(n$O5RG_fEz0B`3H8my;iK3>_-F6C%dukyLsx)3r9XTc1BMt?u8bylZ?D@}G?{KWCT3dUSPNFciF3AN~5lzWGlPtpT47 z~4f)d8n2Yk4dG!s^$Yk%vh_{JLj+D25#kW!( ztoJxni*k!@PWI{tCyO?REGFiLN;yKNJ%PQwBH$>=@mf4H%E)6D%77?j|K~v4#k@-F zUSBi2jLf;allz}$^07&DD$K5DWZb+?l83L&>h>%db5gXXyHz{a5)A zcAi_3Ggln`uuFi5NTOztDnv33LJ4ynZzUc8$9{JmLGZn1OMcQ^RZy~Pf2#VgV$SYd zN7ptzCQ|(dFeg9?xF{q_xlD)%0nY6#-4iJnEI3fs{^THy35)+st_&1mGk9asfH&^N zRc4oEDOgjYBax}9!3HxC9mJB?v=xu+;K72MT)ps{i0a3=&H(L(oqheVSb`tQfDTB+ zNr9Q%S&>X7iaR=C#prU%^$H92`kXaAl4kvr9v17J*2{72GIK1<(==l`MOCQ?Sk$gd zjsz2sj8vi`a&dx?dd;T#pG}^ol8%1hf7(s8gdMe;%-u-F5bF?tMT#RfYhX6rW$QIn zDVG$NrChV1zg}DNRU8YK@HMR%$jq0fJT5iBoyz)g*ee(;1kkftlLqmF3+6t18|ZmSoydVh4ESG}AGE7G&3J>C?4zbyS&kpFdiNih`z!1bx6F z`F9`kgtlHs+(*n)46;XNK-XYdkRlouNQEd##AJ(Jq=p`msFzY@RW4a@NULXuA_N4* zQnA~I2I&6_TcEe9pe-mt6|hKDSFYZ23%5j5DykgE3c8C$c~IO;`izF#jp1F2tDV8; z|I>iQ(LVZeE|NoNT9Z46deJ()mfdC~NDyH`1e0@Bxc}_YGT$=?OB|9YTxT(Y?Lx>g z2*XQ=K!K~KE5+pOub@6&;?KFTJ_U63krd#j++qL8RyJg9`nVDj4_ul5&0b~fQH-^s*Mu00?6Yz4A!k za`MYPwfak?j}Dae)PDLJ_YD+jJk;1CSzxkU3?2Z;@9+OBX0tLvr6Ves_B z`cwZXuR^htSK~jiaWy`Ae|w)&#{z#Kf1EE+i-B#*s1Ksg%PyId@(o|p(T!HlFF#jR z;=?mH?A_Qi^gCF|1?!iE-_fCW)BNRoPiuJI^Aei9THX_L(Ve~dH8F!f?R%F`o00XW zMN#+s9RI^6Me4bllEV|b$a%taPnS-BR%;0aNV0#^ufBOrjNDjC6S!V}(aK&QjdkJL z1dv!8@46A(^XuKN#aZ@OfBVxa{(Sjzi*|YQDKa)=zl(j#*&0mQsq2VbggK$EaZ3P# z$iOBO_Ji|mo%PX|oIJ0*Qy+2ib@Q2vex~&FB_22H6AKg1lQ)5{Q$My=ppdU00?DBD zK>;b}X0FLW=y4swAWyk5Js)u?xUtn&F))e0KeUH39{?W+L$74rduQ3-KT!7v*hixS zfr;tF4;GIa`-3F@2OlM%-SSuVh3lu6#L#*A=PNT~b~OWU-V-=-hCa9t__3j+`qKFs zUcaOkp`97j-MJ3^K3*nQvVzw#(BbOIs8i_a;AOjf%wCYLS@ey5{R>a5#^|x1erj^u zMI*@LncyMa5I9M*3^8iruA7!n_<73X@rI`_kkx7!-<13m>_qWh<5SmAetPeGQLI5@ zySO(ar;61yRrg?2&S@q2(ziDs-Cm&WT?OD ze-5d*zU;9q@v>SxE7tBSYXN}pP^br$l4gfon{>lgE$I?JP^p~Stz8slR6_};tJJn) zvSwlEQD3;9=B1nHycu6l&}Bw9Rir+DV4I&o__BHhb_U3d)kYb`+EA&KtHlk6j8dZ_ zDbe1uyt}kpeB$w9K|svrb z5J-%174YL)xmlHsr48V<4rGGfQO=ch=VBZ2k$-%W&!gEA1#`R@)=(td6*0%TH3+}1 zsBz@M;$DAg~e7P`n%o2*El%&etyO zs*DQPkOuCRBdKQ*S>hWiiH&EA=~_l>lpGY}zW8UKYq4)T+Q|>l@~x;O>N6Rfn)36! zV-txt6YgXbqd`?oK__UWq59m5BQZP5p4RjMk^y_U;WoH`? z<4(mGgyI|wYK|p?-&6r7QV8aDx}z)D-PK~4CVrtZ@U%Fwc=7vg%w!IuY=-EayiF})}{lub!chXl`M7xsY z7|5drwV>-(xQUk?>~58T;|=4}Vq&Pz*5-GH$|&U8_#9~t=H*Xk+gaAflHH4u4aF?S zI3iS)nw=QkokF956-afbZU8g6JMj&b#itbbe0cRqS{?z=IVC^Eu9!@P=j7&R=j|Rb ziDsLz^2FMC0nra&ICzrDR->cirP-2_>M-3VB*t&3frV0u8<&3$Q3B}hvi&xV$kdVl z?}HNz{?xoSy=9Z8F5Yq57<*8>2}5yTfP(29|L%-DW8LE%l4gNELN&pBymeHi;px0X9W^JvW68)tBfE(=RP6i}Olj%v z5|$cGX+wkhI(gpY$yjdzvwX%_R6fx+qbbl1T*G^#$$s>0dxgZsIiJO2-B!^o#fu>V zI%;2oi>l-y$)bcMr8NH)W{20U$v2FZM7jK$e~iiY?|F2W9y_@z zN0w!yg5qF1UqKHlF}#>wybcmEi33(^C+iJECJzE&&4IYhfV zK)%M*GJYdvSZkj;@Qb1jSASmP6VeS6yQ!qPltJ;iCh`bvRupTQcr6jF>$C*I!q;@klRv|&JJzx)Bq ziJBEEut|SyY3G}9vGLV-*e3*w$~895I;dH8U)+`(8QR%y%t$fu-qx81UIR-EfLYlq z*PeRN9gnNxHM<~^VT~YkPAcB+_jZy%97VSp3+0KQq_iX71{ancfV59Z3?2E{$~>s% zdt?bFdEjS{nf2kkV-t!u2n1sGv&V%v@YfEu0>8b5KdN%r`-B*`L1{+5zb8@ljY*eM zz`7eJn>iMw z1frxJ*%?}b*@K?B8$=&g@d= zjr59_fTVZev29;Vgqjf(PZF?Z?W0DW{^s`t${goSUt+M&*W#(U&PpG;*H`W{8?rPv zu8%g&ZM=3uyrC0)7o!b|Gy|_^hH3lKq%3QI`unOej#4_zTQg<4Cgp_vMn2Qlz0Hp% z>L|?G|I{B6nTt5p2>ZL1l(ZY5n{LGzgyKepMDqxY@+u!O_OYyUoTbz2xdSf8mv0!G z%E$eNThOzkxBIl#8Mb#vU>4|p)hSNQY;rCA#k(Ds@i4`U0|uUZMJs+-4@jUt(WH%c zRe9NiJ!kf=K)djV4VBsEHu#3;N4dLJ$6B=cvHrEkW*f@dcx2PQ#G3J9(m^Q@jWC!X zh0{oDrICYRcT|y3TnKcVk9^Fuh)-$PSEiziVst_ALP= z?ua}Qd^wC|K_mj$_M?1ZuYmi1u#r+%Hp^<-M@32Hv=U8S*gm*U%cOO7~fF5 z05rmCHRVXi(oh<94SH~c89QQuTy3S&enSr@`w~8hJHu=EbCg9whj3rh`6(dk*9gYGjnNlyK zflz)Ej=?3((~B%z#!ZVeop<0ZNBGPHtb)ErcB0e7om(P$>-X;$BFfEZ>9;BoWKNG~<;?u8sD~%}CR(H1?i{=`nK>@Cf zl-TIz6icuol_h@Wdq?^Paq=j!W8f)uN1=g>@S}-lESo8neB7CRX=Tk{4G1{B!4tt^YXlAG}UiQ+9KkXZAP1F zk%rA3Ja=-cwhY37q(*{SwUA&1aPNJ5ujy}9o(j<1W>xhHMGuzse=>3mY59%a&B$(n zMN>WJ8xIpL<pot(6R%rz15ur)g<~EgTb|V$dYcx%75PvOS&veia2jF}CxY-Fd z#wxUXw9X`rlsJeK1Scs2h)~5EHI)o!D$s`AVwX=sc};5ETX>)N701Hjgq70mX*I@D zjfR28F|rPXW1+x|ngoDyTm;kIBsTLTQLM(%!M?u1gt5QDa8NX#xUB#DTS>my1p*47 zh%+J`0H6`z6$ETGy1mOYm=SAwloa^yjNBMImQ0r)E6qM{^bjS05zw8&m=L!E152(D z+`Jm)J%m@grgtN@hchBRA=p^SZQrTn0?p@LDR1D!$vE^%Jp|-1+(KPJ(6S@e^eidX z(gPj-MvM+g$4Y5es;6{VqA7+MlCOecVqVRhCP>17Y#?P?SmUg@Fkx~yIacb4(g3N3 zLVe%pL={3C>K2q?wLj~^m=IHz!`~9=j70EbEYKH$%MMSKHHCk zX-#`!9xk~x-iimai+ZU;)OOeh8!I%@Zb`H$%apcxMsj&AarVun3KI-rl$`(t4hg{I zw6S}-B|z?P6l<)}H9ZURa&E1>dyF#l{@N1Wo3xUpj#F9t7(e^AJlO!1T2ABGIl#go zs<8qRse@9im`YkLo>l#tNLI`(RaN(ZebvGKQBgVlHNKID43>{iIrXgi6T3%Y3~gDN(@LHRH#wo8@bl|vONCPXfYI?D~u{S=B;ia4>-u!1*u2W8grJb%j93v zT=3lAl%iv6#Wk+U6QhYlwpeoGF-D(Y8gJ zod?)?JY3uj!aTXx%!l{M?~Sxk+6SFok&giFzuhl@pZ(8vH{Uk?XMzL3j$qxqBdWX> zsr?z!k^(0Qh$}P@OUJW>;1p0|C{^v27Yb~hbzZ`SV4hwJpK|>%&UxzMsdw#Pwck6v zZx;H~)llumVjMluAi}EP?KqICVodIOtfmY?Ba?3x1%c~4^I}x0Jj)i~C%tyEJOXcX zFfoOAjsKtV2KJ7Xaa%@QMa!WNoE0lkbTJ z(PFPZKB*G5Y;qWf@_-eH9@nP_q2#;Fg=m@{TK)cuBqmeT^V;ax&Wq~14p3W%JIIsr zGfuB-NEy@J92pkaITbVwAB=N&2;vO2H3Wal>G9*QKY0PW7}%zEwXyDjT&rbid~8m~ zv_}rx9;+6^TIFixA+KxQBUOnOfb4TE-BL^%i6UUgh@`O?y(E)D*lu}Ltk;9Lrb-4b z>>jGfO|XTvLask{q<54v`qeG^`I!ws)5jls$xjz%js2s4clm4vZw}im0E$3$zc*|x zM$8jBkthaeO;b#8pM(`GKtK-BRM#N?tf6<#BWJzpJz+>u;N8V`n+n#yywsjkZZ0Nv zlynU{W5}V+@PFxy81>qVKYFD(33bNosE7){!z_n!WOiCur>!=xNA)@{omA<&>YLrQ zbZvs|DID~F`{^a~+PHE>ZFxu2D%?!bVgx=m_Nr}WB(+K~y0XAX7XW0iT6i~UCSKP%HNoosL3S$IT1tdvP!rBF=R;*J)pRUD~C#gf?Kll09e|~5G z-<;&2{qjUI^Yhoy6g)g>xw@@rF(;k^3aYr45tz|k@&Ri{*xDIXYSvpn7>_hf55HpI z;8S3sn^5GzijE7nZE2TFUEo(ED)RBlx99wY^1EOk(2-62ST5y8% zPwh5=tX}8#vIQmzAIRib*>xYUR?he#vCQW6_O%f`$xnEzbv$MeRuB*Z00savLj*7Y z08eH6)F{9qkmy6*HSXq&C$b~xx*@rVEWqM-3b=MiE@E4IN&o&3mH_}E8Ze^*0B(RD zgO1t$WkRvx+3+lUm2U@nfJ=BGfPkogZ-QOEB<~XgsxjBDSDEQppM9c2(MfUfi!!;* zPZWZixr>u&0R>1dfObz%Jos=Cq79bMG|o zzP8q|$xe)&yPZjQn++mc#@XAg70(n)5x@rT^!mx#%tttKC>n44a7@`dZvSpGB^J*zt{ELZ5u( z7dv+S#wYIojTi6sr;cPcX7yu)6lI)p$fJ@3&|YD*@Y%VDLTBO8UWUHz$JS=*3(W*iT z@iye;gXJm48kp0|Z(Su(*r6P8_MW{G&{0~2TCQUcKL!Jj_oBujRaH`^RX-TIt*S0w zRXm~4hL(B>1FnsP)U*s263Cj%)}irx`Yl7M6*^YYLRk zRmc+uZEmPoV<2bxD`Z!dbY@iyhJFsdm$YKu zf#YI|b*C*})jT24hM|0x5{QE-&z-@%^hClyrzAFjQL}=IW7o0M{FwMW81AbQHIk^R zl3A3KbIgg-#m@yvqp3cdwK?vg1@lp{r6CuT;0h<@iZZp~rB%&26CDDl6*|_~`7=L* zjnvbp?@7y6RbZItz4>#^`R2wbbX3#5s(C`74H@#*Koa?F`dN3Qk_} zt!uJtj}cHH)2pf^@yimPBNdAcEAMf6urFLy zALQ|H-%9C9dRwZNLwYb{OntMC=79ZJ^|t6#wHNXhZ&U1i%zvxkpYD8o#AO#1Ng^= z+bfg4N9W8g*iuU?YOGSVbuS>}z|miiDv}DVs{1gTDtW@74ejt z%HTwo=3>!djh(NZ`J(P#lqEeYRe__ZPA|MI$dU?`Guc_K(||xTA~*Vor?I@DLW?Tv z6m<g=!6T8FMHXc8cc}oL!dNo|$-Ji9(#gO0wMR z$ZQ=JNQ?LAV$yI*HB~O6N|HH2NeryGtF-;)SX$WaW(PVjkCtn#QmtbHiPGOHys1XY zMH{BDD?sP(Ym~3`wT>9|O01a%-o(_OyD6w%)^NZ5J&XN^q18y-2ja=}h@B0EJ=~Ko zX+|L(;wq1VP7;&9T~ZuNv;lLIU7^_qNe<9V+f zI18*7-U<^j+j3vTf5)F#;1%z1{yOnKm=h-7z3d~UO)45~#3I-CH5H=T=ZO)=ZloEj zgDC%MXQ$ahtiIh6ib4x5paA==E?|%L00#BQQTVfW#$+zGz-fRwMvmg?WnuG29S57MFG=vj3> z*l>01bcf&O?j^QgL3yFi>2vAG|EvEtGa9q8T)(&g>tg4nQCk_6P}lXHF_~-7h2E=Q z=cnqyz%}auMCJx>v)hc&&-4lC=N&Ci0jVqfeN94b@^k!S`onJ6ZFiRROtlRq^de#8_Q!~Jrxmfe5VT_UYI3gZn_n90~i3_bH=hN1;nT9H_uEAnNXCR`m6QsKB?t^3OfJX0x`de>Dta zF?8ARUw6I8KB?KD)mosoeYI3zq#)i0pm<*O4MwNLQabyrE*~%CmlH=5+3J?Tpx4jR zt@pzNbeupXw`aoi)8Otn^@t>$f^KkVxIg%Zx43M2{*Atn=FCgt^tgT7ajb{CFyA=A zBGIUB4zcIm2`8I(Z~LiiQGX10+a55~+03@{UKk_$ar2>r%4m1|(u27`6NCl#B9SV8 z)b@7VY{q?Q$P2{5G<~v$6-6Fpmn@<%{=3&qZoN}+^Y`~n4fHD0ZhSrmwoF&l+k?Z}c`3#^8C>K0 zbmU+odiwJ_&;GA>Y-=NK3`S335oiS3jSGl=7uq1_zIT5vVVg7-Z2BJC!@;8%d)!mW*K_8zH>HyoPob-=_$7?mZdC@=6u&Tt5|MK;~R~05uF_ zF&Mpg@=IUW%RPlr4tHm`V0uno1|rsTS+raB3Xb}^kJ||UI}TIl4H|EvVW%VTNQ1%V z)IIdMz#wnAV^|pr-zxGd_q-r_fREioB6+HnX>a9qBlH&8mM8zmZDww^uWA@$WH}Bj zV@2}6<2V<%jlt}be^&MG7o$(XV$tX<7BlVJR^RWr!vo%Hm$!NgM_Yc;FYR8_sDnvv z9tRHZBlE>HIykRe7l~ykSo@ zN%*aw7n>XMjeUQLc>k9s@8|sP-w}fvFSpOV4ZshZ>W8;c(LxRUyrb8W1dn5R^U7VDZ#fW&Mrm{`%4DA?^&s&alWdYK%i+yIRQm+}l28((#J> zsais|-`Mrbf(?<2x$7P89yL+L#}EfP{oLAQaOB@s@Z1?@XfMbl2;L7GZ$9(z`H5QZ zOGK;Mg}H&8VPiI!1OKrT6>;}^c0nwm?X;s^UHuvu=))f`Z@KzgxomIm+b5b=wKnHW zwsi)EytpZjYS}%zz^pAV$TkQI-g!IwbCbn%SM`g$?JgZ145=ug(|3$UX8bTc%bGPl zJQ^{rlO3E*vkzb3TpL`xAXOldetfeyIO$*eK$f-dbL$^zvoO`N%g5`QD*)@C{a|;crDG?FDpA4*-ySBM%7-MAa4_wYz?2(`l?F53QFlT;cE(N>@aV-=P zLol*gyIkQ|?fiKz(83}XMY(SG{ha#B3_HWXvr&irg&9f+ii}JMhC5)uSdFC4Sfpe8 zIc_cF4a^gA;w!VqB4N=NJBND^?tABl{F)yzzRZiT;zl= z_f=_USh8^-8z8(Wk$DIq-l9ATYq=560FYsrMT}tPVK7F`{HmTa{>4GmPh22>9fC{F zu#gQ9UIH75&|SzBHHqVKImWSm4lsb!zT{EH$PcXgk=<>;>wEOhKc96H>bE4kxe-MJ ziRZ-ZsN7)<;9ae+OOIuTsS2^N^rVVGXin?)NyMpalWAc_={j(b4G>;fV~N2^2<*%# z@>77aR-PWQw)}e*$-}TCQ-2t;e@)McuI#;Kn;!^p;Pwc`spV0e-S7?uPFVCE;nBV1 zBuD`z=OOhXl#F?d1wjB|gfsXXBD0fYFvq>{;_$D3FPvlQtPirrr3n)O&Je;(Fw!u+ z^J_waip8{taP`ykFf2W)V0#ecz%qoJX@tSqUxzv;c)Ch|EFFz8i-t0!k|2yVKs`H$ zxoaGJ7QahNni%$EY7b*}@c&u#IPXnD1NaA>98EUmF`V7-4xvt1>%vNg zJlI=-G65+8#BL?23p0NnBOk|b;70dLma4oPm0X%Fq@~=h0iY*4@Nz8j%U4^F_iHsND2^KiX}w|<7sohUpyBW zOnLJ-7(X1JUzisU+J?0ByIZ!vC4dl-(s5z{)+soSGJybMK~==57q8p)UFsCR8T-~R z$Pox3tdkxCgi9NqniJWrSy+o{!#p=sEdCR}?=~Oy-A9oET ze=D8RMq#-Y5Vr0R0y@Oh0G$c(d?Pztx2HEC0|nUz;fbw)5j_+kp$8JFs8CQCX9{9U zkp?r*Jl|KaU!xiRU$Y&5;)(=ZEY5M$Ku@^|}~@6cLXgZGZN zo|865Jf10+T6N9e-PVMgR_u)nQX<1Y9D1$q6fezB6H;J*x6Bh8kZ_R}^LRZ+?sp$; z{w(!}Stp#xX{00?V3W{XQ!wFT?mhB#Eld0UNjhj-=odvDw=y!DY0F}VkHBfh?YYe1 z1rY#nhlI`JDpw2QsD* z%Ik8`t0wi`^qm`JG=@=v%whMXUSkQ$Koz3Fbg!^LNo5h%+`%#2Et~5xv5~1bjOpC@ zi{vcP*YeCmW1FShl7&CqZXJ9 z`!O}~WAAZEY20^MtE>hNsPAM%5FA)Pe|hB68YkjwpA+LsruN%5*^ErWVgKfV?KdhtezczMWV?z&Xp{?Pzot()mfOIDjRjc* z;RTceF$`2U{b`NqX%VbUjTUO$?f>^4_n5B{YH5O03pH_mSCOE zX#ZW{&@=g1Odk9;7~Q%{Lc%Jb6cB)fP|3Z~{}jtpaGwa@aBfYGsLL7u-EcADW;m`V z_}x&W{m2c&tJNVP)fJA(wG;>ybQQ$yNuN(Y%xey;Kh!Xf#q#&yJ=gK_&^mf?Q9zG$?3H%r*KWc>nNV(h9Cw_Mt`aS208J`5^ z&}W#399m;2lJvs}18I;oYdgN)p44TPpIHdnYo`C(*x_a9oD)6(C=d_>00aOtR8%Ga z0AFNt)xJQ|P7AfE(zuMz6>01^!}IvPt!rZ}3qiUcTQz4wLE+3O8&8)Iv_ zlN;Gw?Ne!{t!#WwjYc{PS1%G;4TW=+O>BlmrzeqEhvD3EtXpAWO&}NuK%W3a5C8yX z0BB|az#FVyyWQ5Sv{wb+?wndivdbpqrmS5jdR1(;DF*4)*bqZNAQ&*Qwi3AkC29z9 z&S(lS*my|-L_Yz57+yA|F&Ns7)b%KgK#4wvbSR!6GzaO@J5B#vZ?tTZj zSc<=U$SmoRoK}n$Hzz)_#t5(<0nSK_MJl|l?`H6gxqZL6$hWv<$Yb>0Z_kc~{Wn?b zxEJr2jBFPm$(fR#J=FZmn|=Jqx<7)MZj5t#8!PEsj$YqhU~b#q;j%0IWk+hbwAAX-_c1ReZ3Bl=rgHQP#SE6O^%nvQK{ z*ADaXo%n_R^OJN8f-eV%4@br-9kZ6Qzu-9k2A*Xm{dya3jYjEF355fjYfq7UcI79) z6i&Rs`T_GBcBDK^;j+ar-L>*1IEShfT5blpIkx4c(-4PWWNIHD|6fSDC|T%(6v4oG zUm7Lf?YGOBT=laF``Ft0A(I!2-npMO@d9{A>exNwT9sD*srovrH(4t}v-Al}{2>-q z_ffXE7m2;MES7`0^%8XRlMG(m|Cw=ra#K?BZno_{dDb?zb(6Jx^0|PRS64YwIQlq0 zvop|>@zsqS;#qcApULOA<2&wRci{x|tdSN|JMAw|KF7K99*^>+cX(Kc%N+d35Cqmo z&YB`AGZSMrtY3A48N9`}{}1m!$MwM~IOySydk=6&&QQ+eT`7;H(~1oy=U`0H0R->r zAU@4Sh*zJ%)E{DHb!THdYj?k6v(Mj20R2vL=zgLi9I|Y;*0Uvdm}M=l0eKCY@rsdL z4sXF(CxY<;&LR(8P`2ctY60}FnF3!fu?{~|GtnH0=7f%Fbf&!)3+(gf0{1d*)-v$F zirbFVUtwpEfyJ(0Ey&235YBS+xQKDxGQgIX$vBfd(AVw#{GX7TCtir=_TT@i{-Y6} z-)9P5pS3U@kyU;dWs5+PI65T7X)O!p!7 zHJX+V1*C3xwn_m#9vB7egPFrHXaS4Yxo2d_&qq^q8Ii~&ROM))?-`W|G#PP2@8dHb0?gYK4NX~H_ zr_Xym%9Y-odCE!Ng{Ff|Gg*KM4Tv+(0L!8_nF?J~XNU#OeT}UWr4k2+!jjP^H=`n) z0!Mxhbj-MGxOp=`@EV&FX~3kPXW+XAb{$Uo33EeZ5+}br$^^uvt3;@N4&-y_W%qZ( z6L7+M%P|TQCF3tXKF9g<9FOv)ce7#?A=wN{Ux~uY*xiqCLz|${L{EdhtFd77ZsZfA z=`xhNgT?cBuFi4$b?4C0Mag>yIEg%WK}C{l9xZbOth%0aOmi?SN-*fcQVi)5vpjtT zbA5=d)p2$gdNKEjBo;rq&!GDk1t zIDVe)QMB}0f~RWATr!795GHLYK&>W{BP0b=o}Yt!Ph!D!-|L-0=;eQT?ft?c=s!ir z$>TVFp6*en^wgw&=wdk{GgJ<2w!a3X1Hh6rGhIM{I$=`X*!)>X3T*>hX*K%9ncwS) zc5J|pJIR83@@Hqe?%5|Z_V$_bxpB6*_sIVh7STjuSCZ+*yr{p-*6Ldb0PdW6N@fJ! zW6IE+4`~HQparE%-VB1A)&1m-C}bw5yMBsK1D@Q`C>ozWRe~wK#Q_H2`QG;ce(QYc zzs=5u(&1^$?wrBD{D2dZuFNL8pc2Uk#Hqp-u^*=&Q`gkTF~W5E3D=o(H~8u6n9Cp0 z=>=qozx4l5pis0YH5)@(xhS$1QX){&n{rh)!~|jg$}j&%&jwsMoPu6cB>5h*>{X8C z=kFeJN>V6limMl||3EnS)|lAsvh;Zd8ALcxUJVxzhN?7XM-4#U~#HAN!qG0WcN zIDTI4QLpq*k}2sp>T=BK$+N>Kotb5)G@4v({quDA=`5J7ZtAT2>3CC>4>-Dka6}6G z7X`)?&Cn#XZ_G@dLHRe+Je$;{^GuI|Q`UXC=WJ#|<@7m_^wST<4$kVjCs=>&CAd?(W5qM=xjq#1 z`Go7yFfJ%g@-dx^)NM`dnVRX+vEra_(&n-SR7{hmP%(Ws)*f2%<T2jGU&nA~cy8U6ds}C?CmbiwgFVWW-e#I7Tao$c<%Mob;1kG}&)iYX-0nq1r0)DDHz^B?7 zN1owtEum;S#{-9Eb3!mRSt9O#{~w;ESk~6?qqCI#%v2A_pgON!OLt1LGQh`O(LsRj2>~QY@IfTR**!UE5Ed z_wyY)hG)?0MeuuaoIg+ZC_H-c@R|ZF*G5u1oiBifRGR=GEk@IHaErH}UAm{UiIJS| z*X~ok(%`4TFzJzh8hdl^ym`6t8 zBxTlV6r##0XdecXSxs3GyNkPiyCn?YR<~X47yUPWNXbPmC+*^65;%%~>*BG2>o0Dd zpZc;PFcQeHL2{pqMg^%MG%HWmsPEVGe3yO~rX-)R;8bCS<6ZVs?H{7)gu>~ygvYYv zzK35h2)UDonrn_Q0=4%3IKj5x_f=V zvHEXO&gxxdxdGgge;Vn*PzyR?TKlsMnEA?=kj zI8ROq+>1*zUVZgqI+Lcq`>K3j`hFay;K4l=sp@_iABabo&Tb?=F0>8z+_r0g=U1?z z`4dyFzYzV`qvtV?3>J2LvrQ#&tNPpbg{BQ%U*@9y7x4OGxcO!1+>l^y^6q1xp@Q-x z?^5QxRG}m##EPes5g3FCL_~~#=p1s9!@0~QlW%tNcP&8F4u*T?#wlqhVyyx9Ws%w@ zAe>b*Of3LO1cI_B?`-^?GC(60v$4^;#>g36=n!kug=9j-!7!CP8~NmsY&tGBMs;Yb z|8oAMjd|hltBfBv`d1AX*KxeD{*!3Ub>Xf1txG%E_qm=Q@UVLf+XP^xEp$!ES1m*U zmv)oQXwMFrxn^6bJM`tl}q@cVbe4te5_1*>|E_7bHpEd4QsOf_qg zXNM=F5P35MV_u!k_!2G{8_d4mjN6-O&e0@ywTqjqxy(_yq2KSm9`jKzFKxK)T(y2@ zi+^#zv^q{)SrD-q^3o)QAGjI!zs`I)DLlnC9uzLulO|jo`46tY8bH;JPW`>?{kJ}^ zU%0n^l9UE@`EUDd`?6hM|60GQZL;ri?r+L_wg%E^d6&NAZbm%WtUdF9iR&yb1rQC$v`L&t4& z8t*7r>-x;E?v*48w}?kzJmo`rg}M2x#i+yeRBeep-qZTR z+opTCv^|$kzd8u^9bVtUXqzP z(}z3qLR~Ge;_5j25w+3&?{`WuvLki%G3KHqAAEyd$V$fX{(l)k{|0M#T<}|!{>Iz9 zPw~7P`<*?9O&I-cs%&dKY#!n}AYbBFn4up*@ptj#i^TFhn&m7nEWn-*^yuB9kY)U( zE*;U(@-+B)wyV*H^jSW=jj1X|YENEEx-*H%{_@C%SzJRNJxw5FT24_e#CxI4}q zzzZv?7;5a-(bKpxCPg;v_bJT6a+a@F1-;WdHQE|+?0D?iGVDejGJP5p^6|eL%eLy# zweFbC*2c<9(yVy@4jtltEL+DL|5r;p`~6zM1@f&%o0cRkZkMgXDlel~4r81-9C51siC6hf@#XR3gm=%JBtACmk4)N% zj}g3ol4UI%PoyokYJ3Oeyp2oN4rXEhgm|_qy9%klvri0-h-wMFdtdF*HRh#IFM{$7M*dc{S(qL2!3VM>byy8TPbl~082qUl`m7wEW- zX&8`jBSQ)y0M(&t7}#kf<^mzZzV^cnTNeXoePDf)X78`2H~AOXDbGApMF-#u{QbM* zfA1CdtJScr5Z<?6{J!uik2tH~aF~`JI2c^0u~cwI`=rGMQ@ex z^K9Cmzm?ODOe)q-j)9hg0rV6p#8FNKI!?8OG!jxUpovZkYTbtKrL9MKhp09uhB%yw zLCi1>R&b-i44hCpj}^c%!fp|#i5~{vH#PlrRy&)GZH;wbSF1q{MIttXIrJ1s#p_UY ztr!GG)TWHWIb7qU3qVqNH$^mvwC}f+FKJM3o#lJ4T0`7dSDX8N)*<8$zQOr_*iSR4 ziZ$U3O2dZk`Rn@{3NAuB;bs!jI6I;AQgA`A3P7dL~ zB*k^oI4C3RA`+VMc$6sMw?vTIKRUC`#b1 zfjGnLJ`2kefhdjxAXtdz-sY|Qp+6nOKSGyl=J8YS>?j)AF|Yc|bHC25S*>Fgy2iP^ z-R{NpD$kdO-Fy&5+yr-LwA!+bVp_);brg$@by89o0~p~UozX`A ztDYr{F;$<{wRDu!R-!Nvwcr06Sh(*l*f53({ZE5@YFN1mneZq%=iz9UC6qI1QUY zWzJkbQwuR;Z4q5Wp|;0lM|t_{4Q#3+AR$1ob?~Zjd_8il(|X1U{sD~I-oDGJ`TLls z@y~GA0b)wADVO)RNX6+o%Bqhf|9?!?+GW{B;JantF)629cb>OCHS?o-F_PcjDos`e z_B-xUS(;(kEah*DqpB9U28n>=}tF3h~Ie}B>xg@N<*P2r7Kr^$i4p$ z$AV(gr8)htidgQdlmbUN=_j&g*T%*NvV!uf__Fx^S$z6jEpbu)|8&+K6%&`!#{Y;r z&QV=7=FX-~pzM!LdgO)kLVSWio6BK~UpULA#{7!zA6BZv@z>w-tWR(Evz}WHYLZa+ z#^5NGsxh5Y7j{E0n-}xy%yk?~#@??Xzih@zh_6Rq{_jn`h%ig0d}!XfUOAbD($w-c zpkEAqMv|7MDG+12COUCiN6L7>S_h?wDvDl?fYxeb%cVhLpt56t^OF6cq_eCL-x;Xi zYri*ShOf_zF}HvJ!_va;9d~3vzEsYeUTZE1P$EhiEUbYQ3RZwgY06`{E&NL1nlp9HOU82T@t_Qb9OjUNZ)gM~TQkXQkkZFa3}I4J}@4 z1rks7ohW7Kti3)zNSF8o+s^UX0-=4%rhbWO|JB$S=Pqh0{BOo{eVK()2y4r zX^L=IVY(wMH8ZOtilR*Aw9ZOKq1yp}ZOZ+<@43tGdsz5{oGFS4rB_ySLlQY5rfQWM zoWKOp35u{nYluK}%WCB$(2W?OSKKRd)wT?dRd1DQLSV;#3W%5C;?1DxZ@nu zVn#&anwCaIy_JnzeM=T09%&*Ab4F5oByo773Ad-nk72&HhA2{mC=!Ql##7=b_=p_u z#nYn(gH+1c;Y{NVHoC>B6e?{Oz{z6{0BV{HqUtret+Jtksq&qD|C-3cU6IsYtrOLZ zY(gri0ZHJ4TagsOfzgR91;bLJq=qRfYpK5AAAn~lkrp0~r1p%QK@E{O%=Ci*kGn~N z5kQOsmMk(lYr;m37)~Tqbl{qOGzNu3twD*kFuXI088kFWK_(2PffYg%yTg%nI?*+g zFPP~A5XohGYACU5FEdV|>$8yLoDSZ)!F0?{u*4NI{1VEgU|_4jgiaLig$ClBO+ksZ zu!AJNSLn=?5iM&&@Q@gTI4iN#35laP#R&pK2~Y^&G*4t{-;oiZM6Ug7l<9>#$Y5N2ck^u2vR~uG(#E?$0fa( zCW{!{pb$_NQP&AX>8RCdtvQ{Oh)b)T%vE<@b`|2a_SDs{ zEq`_WHo|sv?Et;x{D^tzcX-kzB2r*WU8Vw|s1#{55Cf`osc<25u2gy`hpW@gams6=Mi7T-1>t$6yB!f^|m6ECk^qw=^*BKNG4>(r@T`UzK!Q#SUoK{jy98OU<(Jho= z(bx2KSl0FvHvR1;0%4L#YOmE9WD!Rrj+1>B*a%_}N|g}nIl{GF)|T2B1YpQIw5~;# zSvkw3zZnz@mp)UiC=e|oj0v>66V1%&a1>i0fy5=M;l8%E+Of=1Ga9zTulmfFh5Sm? zYg=6i^;;ar_72-*pEo*1&h|YpRgLgCovfY65;##E=)g%#7Y)=fPWF+z1A-pTp>bK} zDGKFwx+1x!3-DVE*uRaCwv=})j_4y%M|nLHAf;5pv<`5KtVCj*aAL`V(tRLO737Zd zbSG%b;HujBS;Pmwjld|@;duGJgMM5}*Ca6K^@KnS#V{!qN^Ug?jYeV0>AI5-E!Qw^ z`pwgop}ziEU6g){7v}dIDBm!17RtK-(=nK1bg;rG?*#5s11f^*$i^dFS(PzT8!(cJ z7N3m{$WFYv*0$DTj?;QU`s~f^rUicE&krY7rqs9IH2bgR+fdVXv%Sl}_p}z~%YDc< zmtG9mobFtqec+te=X*u%FV;ExgTHVPLYD)>L(lsUXQi$>7kA&_7Oy{Wue4trmQgIe z{>Q}Lo_>pFFRxziv3@E!42zA}P*XNa`7Y6>q+^8smf66q*4Yq`PFOf606n zd|oz?;)?p}@vErJ#)`!=(kuoLt?NWDrl_Y>NxDD=HxcM{`kY!k3zuNK2hPw5ixNgR zLPta~9fyKdPIEYhFit|y(?|Up`2hP=YL#O@|IFm=Ju@fuv)4*Yqp(?{Q(I628k#v zgy89FP1IIGB@$R1mq=sQ>5y@+UAG0blfU8^<8PQma5jH$^l#9 zFBUiI+XL%<7uCK0b@Y^`dS(Xm_;{SN`4H+J4|=6%#9~8vta!;4KmA>>Zc}=bn}j{N8Rl@V0}sZ?=t=XFfv6o zGXMYp0FR`Mo~Gt+8!Ek$T&__pNs@a{OYd?$b>8QKS?cHCHaQk0?(Z3Z2DI791_Go5 zY@`d?0OAZRtJNnAgCVR~H)X~XU_dIQGRlO*#vm)KOvnJ;V82aNKeoA&#N6coUk_Ti zp+d}VxxOO0!W#qExVIfXqJPZE`3y5xBw5$kIEb-xYSBk(W-6XidF!juZpb+#0SNpFQRquZ9f~P ztCl>YXOX}ub3!*BP!8Je$m?@!3kI&XUocn4Xg{;T)(b1nU@V3q@NQmZlE!6T7-=jj zYRn}rVg||KLfl8(>p`4FS8NXcqIVhftTX=pB%L)1{ma|3Yda#;=L60p2S* zxN(xd^i8ODuK~XGwi;lqFvguKTm4&j}0ZXHu$J&UH3U^>gIe!F2X>2|x*+OCIL)w2!U) z4b?h^J&L|=Rv722`kQwvtqa)kFWr5lDd}ry=ZUUjygK>ipO{bc2k|8U5}#p_BG;kK zpH$XOKgV#Ts7I%gdBhZqGE{}G$^e2ej8+zKfvAXqDOzqH(WIQJrO>2&J39)oyIBHH zx=)XmRPe-}sraQ9t#Sh>cRi^?^S!xk{y};&;BTvSdevdY&bv*yG&ei;q9+$_6}p}0 z%tLyMW|OYRhiBiV?f%WR9nbqaVb%s&Y3W>suMWFSgD2H&N9WZ;Rq|o6}VQ zwa+9268Pi(oGl9nbRH~efd_305dKJ>A#v3;jZBpw%pd}UNSnegB1Wq ztusut8}_t_$@Zht1WNg3?Fh+cgYhdhEJ2ZL8kKpICs#+ z4z|#F9U46=>2HhQ6k+j#H~d|b7S|qvS5g( zJ9&5(o@6(0&xJOgyG`6B9Mr=5R^Jpu1hTP9xJf*;mr=1m*ri}Bo ztWgunnhf@w>@)V~sFgEbDY<0G+C;ZUqk+hpD2}%*I1`>@4gnW-Mj%8rtRfBXbOC^=sG1xT z>bZq7&Xe#`dHNmiF>$` z-nTXyzI0_d%%$e9Sg6d{}o@yXA? z(=i{B)3T~$A2(|q_N~CItEZ~Yq>M>$21%+!#BVZY0YnZdTmQIT@hY` zsK}~8Sg;Pm7=R@iR(>K>V@6pQvzth1OR1jDr^U`{h6g;5W%=7T?VB2&*mJ^Xt; zxc+*Av^a0-+568~76X85d3o!I$YXdBXWU51EOqq7by(Tj*4zD`zUcbHN!B#h$D*6! zddiThE+)YR7=|n?;irWP5e^AG*yG`n`}oA6?h!Ngf9JO`IADLB>|<7xLB&hS8>iG% z%qfFndS;d1&V&Uv1*C7W<0mc5pq@q2%aNb%Eh4Um?&`7}0{XBIB83z(R9eM2{lBHO zTdq>~s%`573u0r#-jTkyvg@ecU-^t>{NR^qZblcSZ9#=3I`DnixbN2W zVH)Lj?WQUVs~Rd)(~g;gKQkOhWQj^*k@SO^jUVH<#w5B`o& zdeKVFAyw2<)@SFZ;sRRn*R2hyha=YiZINBN+_c^)t22E7KtR90R^b|VUp;L5^rWv9 zqnnt&pZWPmp*Klp@$?7E5Nn7Fk@9^E+6rSwaB z%vb`c4QeZVTqQypBoIs@;YoOw+gsnty0GsZrN{Mj9-gRoivk^V?6emrS<&e;)OR*n zV7%^qEp^VtE1R(b75{Ww$sN&M+a0tu#qT#K_w-LY!A;@~J#QuqesI>9-y-0L{BVJC z+7=JqO~$326-U&tWK}=>IL43T4`*dJm4&BA1!ZlokG7f<-E_R4yF;>aGjl=MF?c5Y zPTrc9|7As;I_=CmZjlud0yFSA9P_(ivVnjE?rO0EG=Di+8G5-C?(Cj+vX&->t8sk9 z*pj8m1@SmutlzAhe~-%CWrIAtX7vn~C>xHyB@FgJ)xvPCg)M~hC+eCa!(bTKje3^t zHg9D0S=8N&YI>cD&(VKnB%>>oQ&9a9f2%gEUFqK=3(E zOQvVA!Wjb1ng%_mSyhdb(uYNi1@J9(*V>EMC(sdUg5&=CpmNIl^ye4ACy+rmlrESc zY!IaB-)$srTKxJ1N(qDQztb-(vad@pjUsI ztkHS9;y3vqZ`n$6wi}niC_lKEZ#`DUrr~*=JGf_ivtv6zyVLw?lh5A&QX^DVXVz-C zI*hW}=5V-WUgB4}zqnKRv-DH$*tmSSCWUE@E1_wFj~>0d8@yBG7;cOPy#nz2>>pim z@1b@8<>6qxx+0ACl?%xgX1HyaM*#Dp`Ru+xvKeqC+W zTyV}E#bayiJgwt%{@S5{}PZfa;HzmTcMff3B29V&R4TmgUF4y8W&vZm7-+vaw>R9P+p| zGxZl+ot67(ZZ!`!%)QJ&f8)5ll0mTSK%@k3UKjk+)makx8{7^ z77hH=(XImx{ferx`JUAVmPk00s|_KpXBm{WsX`jVN*j{fZIN$6R9hYNUb0vLN9Tl9 z#OtBJqG3h^VJbI-wcuQ_>zF|ufv3KG1S2JK@v4--;V&0?(OP@%GGx^vCdY-(bszzi zbQiHc!j66L2r|%#f0+=a#|u)z1fY=6YHDu$OU}^t@iTDcpA0IXkv>atPvsX09EvM2 z&t8w8LGHZ#w|~wjcE#_WdB9EEco9132~w9m;62Wx4Pv0;EuQx2Qb;WuUG%e1$T%lE z{z+6v-S(HY`d(b0a*b1)=J>zQ5w&+G?0E^bAJ~-CLVUz?H>TlQ1^UZGB6YQReuW<{ z1EjJ}GmF8C6sin(LiNWb!o}^JnI}$DBR>uHE1$?Xl5VS}cDw9mpWSz+7RQ#)O-YFo zR011l#R4?z_tv@wAj`^JWFa_PphSM9U&2p|Q%?aZ2{p3<-2Kn_fn&n>eY8rlP?RiR zw4dZBM`HVbUpLIe*0au{_8o8 z@ydvmH2ZS3BdS}T2RH~C%~i1{gIz< zFjX{=9?He+*LtflQun`1F6|>C&SWuN5b z9%G;$4@*G@I9$ejZycw1_%hl?ee!d%`zK#jCMIqb*XiV$!}ceu)~K2jSBX-?z3M69 z1+v514g-f7HxeI6`GYxQ%!K9s$wz$8*jYD`3ziDPA62=H;Eum$bK`SlRetuR)rVgW zZ&zm4_-cWm6sD{84U;Hw@GIc*9L1qU4}~x z*Kw_Rvv5n|EDy(;6Q8ekCyOI}M*SkIhxkl*Y$p3v)WEn96$6Y91ETRTKm+qJDxcJ& zl-u+%-LF&wy@m~2G#bzJxt7<7(9`;CCt`^~T$7mcw~3Sx{jg)GVq^BQLWnbT4TvH~ zD1BYysfNgq=ef7*Q>DgJ8*%6*^sKpbz5k)U9$vp%qV{Z>Y=7t0q4xP4#H-5kd~E1U z=K0TQHEhqYh9x9YD6d{LE&v`b;KEVt)q9X`sWKkE}{%DByY{a&op z^iTNRP<&cCzt}oDWBB5^xxB!V#t>EL-L3w)eAmhhTS;*>~5u(q6ScQ9oy+ zSNpyrao_HyZttq0bhFcTNiTRWMmKGnRQt;NoVOinN&H@(NtK6H4t|c4uCTnkePz7n zX|r1W(q86&p*`)>o0CW{Jw3DxjJJg$d|?l2ghV!g*Bh4@5XND^l$)TyOr}w;Kr4dD zY-YBMb8lgHW+&8N9Iq-&gXY21%gWKu3hMGY!Z|4Irz(@A^3R`=))(H1H$$K1ACoeF zXVekHN_q{)P&X8IGcI;y#!KV(Kj?K#v`V38EmAW*zZY^e@?yLMTc6m8s2lOu<}@v} zL0Pt8(S=Hi1nW7th#_NkegT}VFJ2iHf1C|+`+3f&hRdtgw7b8%HR(Mz>4y5E_|Sf| ze>GVvTD)l4ZN_7zi7!Z8XWfbJ!s^;x+62w&Odgxqv5mIlX_?QlJq;M)E#H1JsnJAu zJmZ*KK=>sW@;9oEfgNKzc+9uPb+x}RxY4-#fYr>pp?zuN6Xali7kkc!dqY5kU# za0I_Z>zxcZY)$JXlWpljSK5-qTU$8hO^ua9#oz6wj}Sift%f5t-}mAe<`L@;I$pdF z_3odP8j??Y3HaU#SW+}aoWvU6_MS`{oLUD@2^@_H>v5LIuFmPlxeRq@%n~n1pj(}! zVmgq}sWY2>nt`+GcI^CSI0e7NyW8D8_)jiodeSWkqP_O?@ZNpsHq{pUmLqY~wMxy7 z?_ZoG$&YkJ+Gdo`^K1BnbI$wsD?gMw$$Syvh3IS1%?TL#7?|W2VQ^iBJnLG@xW(;n z4!KAb$w7$s`|W4c$$1DcJ5qP-^!__vE+5Ub<=Yf|F*YZe4cwPGUqMsL+C|qe66FYV zdT@Hl4uaoppJYk+Jbmcqa*vpstd3XZUol*Yal>l0eWiMnA66p8as*_45lJ6RH zaUy2P!#nxws=3IC7$qO-?{<{ux`Vb7TSjTc8T4Ol_5=Q*ykaJ*Ee7A<*;#a4gOv2H z^#<-mE5--ye#mNFaedcq=c5El$-|JW%Dc%Z3h^28-xJ%pu~p~_RA8IfOhk;Uvvn5q z-&{25ZEfu%H>jOyZTmyUu)93t&JD-Q_9Pg=l(VFd0Pmep+qeRFGa0+CWwybb(k<__ z(CrUnqn1%vJ82Zfdw>y47KnEjBM)Q_$aokO)x$3vMCSg{x%Wpo6CFG3@#!DhDJnM6 zG#!pH0D#1yKYY*%3m+ya2n%E6?LLV<-eHCWAyq)m(}|%V?D0c|Gg0<)s|}&zi$Imj z2AAf5{Pu&U$%D1QC9?29ph7imLxzn<5^4yI5MWZcBP_u%5!XXjuq)P}B2Ug}QeJB0 zIr%b4^lJ+)y`+;4z^`WqL&&OG(7=Cop_(FZ-f`cH*%Es$(c#l(Rb!qd)umveh+Kt_3Uns9$_d?-;QrVGN#CuHMP z6go3iv#3-ku8SC|nxB8TWkt0skx(983~y>0K{=pQV^pMA771%iHi=YO8sdJ48y2Yx zH#gxasXe>TWl+s@9R}twnPp6qP(}p|s8CxZU1jBWzYG~hAXPK6k1&100y;ydIel04 zrv=}h!YEJ-nh;{TfEgKO4jMiD>XcHh?+*In+o8AfYuJg)=jmiNcok4ooQsJppfbP~ zPuMAOdiW<)o5=ow>=W*Hv@~;{n#v7&pkY-7A{kg_7@=L5hE=F@!?AT}6jRmTo!_wn zv=TRDyBpPyd(%w$Wk?uO+-DL&D8^(ERnAnSUP?rEJWNrMQCUe# zt(&LCdg{Qh3f7qk{mBJSu~~vE&HWPOd7dvwr=9zV@?Zu1US9UJn;&@|u13?E&-=H) zFV2|`WGg(s=y?{PrQEl+ucQAl6M-%_xy{_O#eX6q`M9^N<~M{F=mI2peQ?<+b+S1) zu~F;*u_D)HmHWT)e%HgJVOWg9UG><_OG0Oh+eMYfJh$SioBZEbFDdOFKXV6oidv5C z+naK{8_O*m1xb9$XL#~{V12AK~|c*6ip}uFS!z*BA`}TWu-_Q07zyFKk4R#-r{> zDa1j_&e`_sdu1EjRG&u44&&Y}=?`7{;Wa1EViF;ER%1|InleQWq5v~zT_#Kc5&%da z8XIY&*ESJPMlllU8g%6gc={oi$O30vDp;$g)X*3zLeF4bBEaZhys(!sSK<}y^Dj$RR^#)e-?6@9amR?w)Hts2VoBkz5_^^Y2Z1D} z&-R>=WuiLNOVqfh`K4KxUah4f&RUBH}zUS=H~uJQPKwwj}^ zDftEbIJxD1i82;^xz6dI5G0aISGDch*R`f=InS|amvih9w$i$Y(O*a4v_DF2;UsXF zX!7PbfaQ7L|ItG}PQcOn?9We!4pXFjCybV~urA)McI_MPfnWPFw}g*j@03~=HYVSN zf2uQt#r^>&_Aj?2e!6@QHNpo+dFjjv5sGoM76>d(`95FOUE94BwAuU*-fz}7xj7x@ zvNB;j5HFnw~63qq`^{CAbPc-Z}RzhfY*pj%LUg~p{DnqpJ~jQ+B=5MOX@s5|aH|Yp~_Gu{NH*Un(s-D1_xmRC5l# zwe0q0;rF+EjW4e&{_&h;i7(&D{p@RIyeyDpKVOzT($A@7p>eQ~VdE3DqAKE_trKr6 z?>1ZPSfFcjslpJv|9!2#V|Zn53ZN3^Smj#W|En9G_EozzqXEh;tyy*8(NX+wlH}e& zcCWq#=V&wh@JpK`a*P$`mfw!nSzROC5SZtHfbZ^i*0p7yEa!x{T?eN@F37)(cw8T8 zFCwGRmuC+77kIC~+B$1?4Lim01@njiw`{R;>M8A&{@-r1xTs$OJ1nk^CC7I7SD-8Q zMDs@9^M6)z|Fr=|guUWt?+)L+zT<-D?+O(wug0Tz>Az*eo3pbLVTK5y=(-GuNLUTiAgx<+rt?z8 z=E!Zb0MvnPn4I-h%=jb9P+lJ}wfzjMaL)Fx`T1H>&Fh=4<^HZp3~sRo)7FQVJF4Jr zC0LkCl{D3h_|TSuI%fu5ZkX{3v9lA*myR879_3H{xUd?wC5S7UIO6w(8ML;|(;@fr z_d!l-XD8hi5jAHP&CF2smGWkD73>+b&gg<4-EiJ^GrDV;4*a`^rFSxYf7fW*hvA*( z5VkrsM+uk$$T3_~0_GgbCTh#5h-@&-h`BEOR3>dl|K1QI_L5AoR(wRiDN650@LP7f zb+TLlW7z`>K8r`4FC)Q$@~|%2)%4A~wt1e5e8+SUb4u_!9Q|tm-^<$?-mm?7kOmPg z_ysxcOR4X_tfklE1y-Fd?ceF;#@leqrY|D2Tj~Xe>29vMfDt3odpJR>03-Sy8&;m0m^TL~bjyat z07Fd#Ae2!i`cySg0-1pmsA;O$s5;=y_(Nqic71ow3LNnR>7(P1=%C)aQDv+%^}7M7&wKs0fe@$gGj{FOJb^~$1(2`nlMcqGHMN7E01MCN}d!YSultqHc`q( zdWF>iD`2W73ddy?T<3H~9Ps|ugXdIUC5~a^l1Th!7#$;7t zSQdW*A`>8MWu}CM&a;EKz|-0>u^_f>u1sqLda8sv4m(L<+Jh?CVref)GFn`>T(tjnr~Y#PoF^iZS@t-u9V8 zsLaO^uM_VuHS9HYLJf4?yg3D}d6tJNbc90L5XV%M3MdJyK2snUVoE76P1-?Rpy}Uh znp9^i9g1BjCfj!=v=Qz3&Mnj;8J&WA}e-6hEvYS;#P%b31_Sh~BWfPtj?O~KQs4qq0XyvmkNXfz_;<}4Mh{6*} zkXlV-1@L546s9rlBLj0L0y-It^IB;3nOKnRU2S? zZ~Ij7_J;tvY0+2livp*{?1(ce?HM0=oE)R+QDCrWsL5`i_$bOo3yX@<4@Ti-7KI%a ziWm4#8%?pYENV+B$)w)d4pJ?xbkcrs>p%C%49OE2)ob*A$za zGh$9BB5_P&aBF8*u#y401|SxxC>$jystlqnXdJ>aYXVh|5ZBatDEg)bA80?B!-p8? zfR;@sB=4B|XK0M$oR?^m5h6Rq(8_07t&*O>2*awWuyL#Q)Fb>IpBWX9N(}hZJ&2h! z9sV)LkK#jjk2ca+H7@4slb4+l^UAeZBUDDkc2p~9$+L=UAp|mXRTYX*g^+*=nYrv# zvZgHSPeXC8;b)#WWrAso3(l!Dom-vOA=ODP`?py4XmjSWz^y&~^*)`2_-oC6lq^jG zApoMzfa$8Lrc&y<;S7XfQP^fj<*k>H=479A{@A1t8NOFszBH(tpOGD9(elN4AK`ef zE*$roKTg&L{I;ta)d&>7sKQl~#DqBdzzDEyL?NUXD3ip7>H4lA8-Ej_3q)}PKPcC6YWAOQj?AFY7{mu4! zF2?5GS=+weaNY8D6|8jL=dKH)2?kjf8ITEqCX%jjQJ|^{W2Ph!U7bqZwC4z2x0`PK zo=3LgrFHY=4W{+QjT=il*_U}mUDp4XUCNzP@7%z;&d=%v@+iu?{J7o;f>qAD-j!SQ z5Dpk3vOqG-4mCI~0Iwv-7ui2W^QWv`&?UQtfvFV7AV@3|EQ5uOWz{T$O=vQG?SvJi z)MQ{-&M^FBmrA@9;QNx@P&)q7n63*&c|glcRMI=D@xII#x5`e$G}Htmw?-Nt(zjQ2 zkky%WW-5zNmYgcnnlh}42vC*cBwsSupA<||MRBgFr#qNwjU$8DXO-@`?HKN@izroo zOn%)J6y}&PGZ+0Z@=mnF8EwC6MqKhpEI7-%Q00tCq0C-&s?LQLiNdFEGFd_5HFiE~xT)!6 zi}OKjs`DMYo(&J?!dQb<4_m~sR?9XYacB-PFVPKr*;Z>)&5GR2U(o0YJMl&nXf2RDB0Ah{yf023KWkWZzG)C$gfy zzQyp6|FsV6d8&@zN7amIeR@4%mIWxEDxE5WVZ*MI$hgoo0dygfRRNR>P$0F+v>R;6 zp=OA5YCU&nEG;B)hSe?Z*`)cad8CkEl^X5;GUi{+7`m)l1+#gUxPAhok!r@37s8fR z^i0rItTRLTq5h8zA<&8W>@Wa;5D)_Z1OP)tH6#E4Z)J0pQotqN$I392|DBH{jWd8D zD>f7uHyUc0)za@IZ(vO`_tM66QqF&`@!x>aAp)9_04OK`jRiWr%o=Mv%-n9ZN@B(D z&vfX560?TRxfwCw=)4rekFa!h;bx3F_uU&=)}6fp7}C}qoj}3WR?eqMhLy_UGr|a! ztjatGW1y+XZK>8&t;(E?ZH-aBuIW~zsXPvZ5=%(M004~u6%7G^zX98O|Lbmdx#aqO zZ2e58rkLGKuJ_wrTyjX3F4QRFNs&Mv%R%=0bgJxSdJre_wf)&Bu zhayQ5VwS=~#K{suC?GX4TKV2su1gh%|V0Sv)?RBgy$@UvzoxzA%^J{4a-EgAC7#wV)wZUJN zO|hz}8m>1d8;Muv-;5_((c%!ijM0QNT(T`RPIL?KZKs$oRU5Dgb!RETBiB?2X_^o* znv@9Dbwu)cWO;J9JZ#Y(+beRlZ2OV?L&Hxdx$*sYjnc3vkdC^GLjc$+u5aO3Ln!jV z6cArGxm6&ZkP#zm^F44JjkbN+5F=Qd*$Zela2fufS7My*TXccCmsY9^U2>7Yh3$mr zJ6T8a)B;hX=W%ZWR*5)Uf%7D$k4q=#6(?9FrY?x_IU+p4pp;bh(^Dl7JUmcz35c79 zNh+^}=f^@EZc#{Gr&b)-Q%k^|+4>*PPJ+ryuu4tckm4{Y_LG*5X^|DG5L6slihKQ z=nG~g*U}`D@7fm4sBsWEXPPLZDej}t<4KY%!XheRNArU;Kaz5ogsiQq`G3y-2PSf) zNi{$0{BCQ_9d|;H-MFLa4XdQo57RSAMUllZG|y~dqucN9N~4r0^Pl4vj{9~& zPS)f2s)?vins?kN7Ne;fSV{u9{NPjUs02g-B!Quj6m~+#6IPa=<~}$UHi_G}+~{f0 zB6uha0~wU0U;;d06NAgg38FB5zL43E3pBO23;Rv_{BUTGD8}r0TrQsVHkS<2tPQKJ z8lvgCM!l5D$m%<7=~gdx8>C%9rRN9d$V*8n3s$_b4uAvBTTxi0QAZ7n zzSKeVq85KtS-C_5Bu-R8(YaDZVzxLyeY6(j`c^XQt3GIX`+H7;qdp*H_{E~^q$Bh2 zUVEPhRwHSwySqe{(+{&u1y#u75cr%POlvcc*nd?57u^TKc8??hWz5D*BmzQYhygK{ zpBQ+64u~g-QWBO%M|2;FaM%5rvH7ixpWn}p8rse*#Y;^>F|%?`n)bC8@ddpz(fo-3 z(^z~7fo326GLVV9`*aj{X+ZVxNZiR8<8|I0E!;0VT?NZw&7<#lYhV22H#J7~weej) zRHLTeXpCzewe^#%^NA(0!VlS_qF1d8uQuJr0O=t;2n(LAJMQsXO?LMj&31w7-JUyRwdB@y$lgJ^yU6mFm26f6fj0>0QfB!W zcp@_}N7lf5tAqDjAuyXDXRmGbD1-A0+WZwc>l;X0AZ@GnHKIJ*SPGHH#d%HppqAm+xRtm6qQuL=yYuzuh!?9Ti)a;uBM@JGQ~OL$bhFj! zmd=urFw3t#k#%YNjWuRI!YFi;XKCV29#%~Wzs6^JEpJyb3K;Z3d^I^p9cQk3ul(l) zZ>~ouwysP>ryN#`YMOP8(W^`-Oz)ATb+3o(1Fz*wBG2{_2N@hsDY(-VG69k$>0tXL zgGc}pSajK_FBea*=ma%e?}V99dcN=uG)aQugB!OkY;zdA5pXOlV|>x~a<=Qw4mLVu zAH5NjOAEGM#x6v8!{`H%7}buFM@m=o+AC}xMusY6;sodFajmO~vx|VIQSr>H9FL2k zF?@*G`6zi9*4LJT;GRMl9_D^DtV`kCrB2_=H^bk%mPWMhuzV&}8X<>lpW2!x>2_LM zv9FXNxjWozyJcH+MOQi_2EzY*bv;sKJhfwha2$VFZ-NDBSa*Vs4!BJVINjn@$c#FL&EYmC(bsyrs3x!}7n5Kalwi2J3FAY~z}CLjSEr z>y7?yyS3$;cHUwiWeyh#rK2*4FD+DwG@LSGa>D%EXHPUSPJwAR-x_e0fy60dqF`=_ zQ^B*aYk8{?XiIjI-j8w{H^%RZ7lCQ0hr&Y@@=^ZfkD>*&E9>aRxO%ZlR-eg8)|ho4 zOI;iP${15kwm_Ta&GfkSUe@wEZLL=Q!+SSXE7PkPHY9_)-H=*Zw=q%MKYJ8!ixZ>h zReh(jO2HD=?sfp@Eq+i&(QtS1zE@+hfLFJT2L7SJzahJzi{;2WrHW$?(FzyM=0#08 zlP*fofw7`#fL`z-FE4-s54NTM!(i;My0RG050yJkczQ^PgAt7X0=Izuz_&tQ4!NIcr-Z zcksRkSRv;e4}iCa&Ha}63-XK$9F?7&d|*`xlN7^$6Rzl-g&};0z^}r z8r?lzTvhA=k~e#)Zq`%X`h1^QE5N4DtFgX%Yiz6QAZ&oQC(KjWpeqgD?8ft1ynME4r0+laTCxC3n=*&0kdu8+Guty(b;CGSea8Gym9>?+&ZsSbbDi_C5e! zi0WU**rk6_qAmU_9ZT)A5Y~76u3BQVcing8j@4gX!7H|(r=$6Rx9Y6DVU}#$C~{;oxA_zZjRA zv~w%`&hO*Nz=Xn{_x5@0yMJPRXut2Pin6v|G{g0A0M+_6L1yoXVt_-0GDp+^(m%z{-?n|1^XzzQ{HV_ zmrswzx*D^I{eP9Q-Hn!^QyT^c#O&AB&cA9+N*M?S+3>5M-6y!_hwhQ3r}T%|ylvQr zaG;&|lq`7iNjlp{x3-zukm6fgq+*(Wz4Rcd#j6ZTrN)ZMYdxvk)wLfrGMn8-)#IDg z$EGYxSKlb?ZDQDYyRxi!2bggg$$$!*5~6}f*Q0j>`>;>X*8AHeEXxh#8w6e=Gh+ml ze8Le&QYO){3A&C+hsW1%>q534i``;uz8zI%%no;H3J+v|P!y3sC*^PLisZLLMH~a7 z%t<@|w2jV`MD^Th&-1Rte}9f5^9G_SSa)vX6dn=rQFkYE6rfK+DFVfxY7|wb??`x%9xnbA#B!-9CdK>NY(E+_BTBZ&6F_dvaq{E( z!0{7fk$x&XAK*-x{Y@&M*Uih$ae%?h{q?$c$7X2uQU;XaM%XleCIn#oyX;PgLTzhT zCI@2&6pUDV@4~s z@n(NY9yT@kwYlnPlApvK=L$myddiM-3X7@gS(Vf~x&dVH|M){L?eRue%S>7JXCKlu z5e;$>D_*m(EJ#By_m7NuNc7&F9yJ~X9-1p=xDUn%$G!2Hcwfx?{i>qf*9()8|Kn4N z2GdNBg^QwuKpx0B3*^Le0cjXkg9kH#f4|%54zau-ZJL($DpAJ)nGgp@yxj&+^XMfHKj>0C zG?m?nap1&Y+I()BV(NXS(%r9tFDsSE=H?h`!dZbNdc>SZq+my7#u2$$#1TFQ*>1~y zI{%0=ft%s0t7|mt@O~yQhwLanO`Nyw<0D-k&Nr{+g8Nv`WHd`q<+1;W`a$e>wmxr| z&A8>{QdP}XV>uAs9@J`Q;koJ;_6bH)-fbOx)clkSUQ>|*;l-Gd=Wz6e68PX4;gAe3 zdDh{jeVr{uBtMG!?;Pz$V+l&6K4MA`P$Uzau(BWqHz{zk458NV=2snKG|y9W0>nVZ zOS0*BeY!w24+0iC+&w&Xfs@A_=~-&*b9ea7b66qS5CSS=C~6?W2l;Yb=}E)YCirxn zYK*R9?M;^P^S_*U7xUdUF2r9kzo_55B}J^dBVXdp5t*NN=HKb#?|9p*{Cu-&Pk*rH zcgU_+E_YYC#SQ9t%U%A!r+euLTewU4y*!1c=sj1m&X4L2Q+nV7H zMu!j$5QDe`EJ_37nRFsX24M&nW~N*U4LH5mh4+-SCRHTt{F#4>4aIGat}!v12ois? z{6w2`=$*Ox^ZGthAP%*a?lGUJk-GnkTYsR5konGlWzYRuxV~Yh_h7L+D9kc~ zNgfgCnTZrDpEhDoLnb#>-g8?r;T^A7Zv|+ra(|X=O>TEBnC2#z$j9aVlGq3%rkC`Nw)Xd#^V8MuwjBc^Qqh$K0_BBgbc9QFM;I zol-vLAct(y-t9IR)HmId8n@IOV*5S0+|ViK`H-DyiEnOu?H~B+*tDwbD!FV&qaA)DpNLR1C=<5=0FI8Z_!@=G6>(Br;iqd~`Pggn%p?vX2KqtfcX z4Aud2kM1H#%*RJ@@llf#cGR^tEEzjnrSC2F`zZ4DQqJs{{3eBmdNq+wNYRcyz^~44 zhcx>(t@PbD$}#*=kjFp9FM;GkjY&}TW5?1x@k~K8=d@S)M(V;pHs2oDbaH}|c1=~~ z!%iuQ8J~&Wfy>v-Hvi(Fp0&2B*`LU+9MAs%oS zwaQQp`Gh+(mmFzo|9E+yPOJj#o$tvL#MtKSmU(w|PiKAFbl+s{$V=vH)0uCg=f2Zo zAAO?lCiD~F#yIXfR_;@AxF4BH%s2V}5pseop((@Xe^L+5$y>Oak3&DrOUMnPRM`>Rw<;GS>yt>J*F zU8C{WV=ztg)))(!EXsnktz)HC%56iP`bu6!8XT=Sx#8I-%ge1&Ne1@&KM9~kKNc=+&%1@ z=W+~^>{MgVPZL;z_p;Y&8sqTkW~a4WqI@t3CMj=mEh0)YUCruV6QoUu#{-TbZzmJ) z6m)J1yCGw-rxWv?K8WZ4 zEINwG0Ji{Pz_^}Kp^q)m$QTKCGhk=u;hSeOl20yJR4=a1v#Qzk)YhTR1=TyGVohYr zHj<_}ahaIqkAiuwTcCw3S)%-AE#HU-{G58r@ojWc_}6Z#sM1Z6U=gPYNtUEW0YMTy zJkT%nlzNjW+MV1r)z=7Lxnf4xHx*UvaL_z8nIrPP^Qh-F{N>4(F;6~U-@9c9I(wye z*kVf_*0k4Frs}WCw=k_|)vnW1jX^W})^;9-9_@ZBCKN0EjFQtpND&-I=3$r|9h1`| z1x#|L8~~P}i|=HVR`lTi8H0TIZ?0p7<6pn0jCNXW8V&64m6g4%4g*K~GB?0*a2s}J zPj%F(UYUpduV-bj8#1JL2uO0c)9mXv4Z4hP+90P7&~@F!IT|1|<}8A3e7>4*?f=w} z&)0Gq+9~VLM_N*x+)d;y+DlNb2DSXZUdo$9Z%6K#BeS7uE6P4A7FX5A;@SR(z+ICR zOQ_}uR&Zwdkrbcsf=ezG~c3l<3YQ+x*Fgq|+q5GsaHyYyh{{vtsp-^9W!%&-ft(FHB7H=lc9TuTO@$ zNHOHO2x&=i{5`Npvx+^_4B=tV`o`w6Tb1w}mCM0AQPOX-C5ox*r3hBvOA#&W4m?)f z%c!3}Sd1g3>Bc2^ChCLgV!^i|NlE-XZWaLR>kjEzvQ>p!pD))oW9BhKC#TfO`O`>~ z)NMQ)nd(6LGDqw|Bm9@Cug)$ynC)J(OY47S**wsJYm~Vcn~8o0%MACCa)4XTh2vko z^hBJ;ImpV}8Rf9q(mv>ohHb@2~gal)erX`Ceh%$3-DBLn zt^d-b{SEkO*Jpe9_WPA@V2u9NT}~MxWYOQ|Fd&D!-I+U3D)R1*Y&$D-pSynD$-9xi z494w7T=Un~cV{5h&OiEpR5VAB_5IqazpZUfY7hg~AZkANRNSxSokTZh=C35&YA&#A7n3BRBN`jJpSdiSc^w=i4RLD?L|vIfGW7DvdtBTm)=cA*%8rx1 z;awj%|6A$gZXJ=4bhQK?$y=W5MjL011Jb5vu){eY5wm&OH2mX<`Q7L6sVRaGb-1^+U>?CJoy zCb1&i{Hc7ven0#I4kVXpRzPZ$u8iVRA_&7e*N0rf*$^FOj&d9LTzdV}Sm_8lqq$T{ zS4g!~dChx!bHoq^t6ZD*kx$sJp7$8)wI%sXc4&7<`olgFZ(K&9kKX*{GbYpbc6DyU z+}qcsEGtnFo0k?Vqwel;-u^vqF&EH889zAF9eJ%P4C?QV&t&v$2w$AdHk*I$CIUVC zZ2fgUu8?FET^y9~v3({u0l%rVWoF^sq7M@9A*6QgHPra!Y^Vdb;doZz;EUc4@>I3V zb=Uj7IPE`s4(0Tb*`A|EB`$XRin{V*KZz2{$z16=+aWE#H=bO#OSYYl72~m%%Nq-D zJSkuBLruPWihhK@bz$w&D&lPzOe?iU(V!=K-j64d(Zuht54vRvJ28Wdfv zt{PgR?$I4RX)Z7^em1>B@8jPVA^vvT!l?R$q!ErYv%~~IAe?EAFhWbB2QdN36GeK0 z;-D!K8$Uu(y4!_8|$kZcTn0`!&lg9|?i1=cFc{lB{$wxF|n zq>blX#XOh$A;jn2XU8!V#An>p|B~;Jsndk^*elSjsD>1cLFRQJ8)psDz zxqATRoJDVfj6z93U?3pnmH^;D=QdG9bM^`0TUqj0OuXxZF0O&4B!b0k4U61m{Z6g!!H#Sv9K zxP0}{GjomFG5({0L0pXEG89tc5PeI%TjSreYz-_T~ zLN`sFJ5Znr9x-j7uh9>{eH1EEeU}}=aFj!X*(ir|X88u` z+D{1zdT$N<`>U@BkL>c?48_zjY03wuP$=AQIoDq2x$q`$;l|_-Oo0lHqfmM7{n6p4 zdA} z|EqAZhILak+IPsV;=jQ7>e-Q7UXPVO4mwY#f+RC9!TJ+wIqUgyprb`naD+D!8cdodc!#gP!U_N|cK|MqCHVZ8p@q0MvECThmH`pkCfD~e-HV3m}z z1BKz>?BzvSai)N!65$6E?l!DS=tvkf^OZ%rdoN&5c{i-3rLmf;Jl9Sz2!&jb>e%mQ z`|vXcgT!9hb+N@gbQVM=VJ(KXLR1})Br)blh7v6oN75yTI20!3f+K}lJD~(fA4Nk~ zE!`}OTdS?8*P1Y#>RdGdZ+ly)HArlvCM(zPS9=Upc2NLxV9AuSABdLQc_OkrM9zey zOn~SeP$QElOp@peih=%Kh2=$cJ4FvLuQg(LCuRPttk$)#XcyN3v`TGqmPsiaC6o}R z6Oa}T2qjX|fIMg*JdKrf2|%>7REPCat8_IF7_D_;CH>TO9I;ZJf@P`GQyPr#{cx{cnp&cKA4ogqGfGCprr2uab&*;0MUW!Zd2bReoc1y4a$<#k26e`<>)fgHg zDF4nggd8skO|)FiS~K+3QLCZspxx%hEYHc=$2fDeWpy@|Eu<8c%Q{SC0X8O!<1_vH z@tx`qjoC&DMY&AFR1u)`90424+yI=HFWB#z(D^iOVY^J5m}(&q5CZ@N07GOnB>(^q zWPR09z)CxL(>F#GP@i{8DoM&lHy@&Ivu3PmFt@Wc@r9gkyuqjlU8Xl=Cg76wRZ^|X<-jIp)rC*&fr zw(hnxuC}N=#b_fksxNHc45M%pMa=LN^2ugc6!y3z8X4scGIJV4=W<9kV4#`+0ssa8 z07hm2XsQ6W8|!x0wh>d^YiQk2G94ta?d$H+LS2rf869C)q*hTNISQ;o0!ciLvd~l{ z(2=BuGziJqHo)I$n$!6tO7h#_r^ru9nh^SwGD)|u)2@dP-I#Qh?&TW0*8Q}F&vkc4 z{~Ed5O0_w!U%i!pxG6V&IpPe-E&H9_T3%fDTnM*Gn4BUCrNA%V+`DcQAFxizj`}Ml zt|eS;cja*I((n*0gzbFQ*N(TfeaG8sWr>nu7A>TV5gI5$T1gUu8aM$>U{f=B2>2|` zO7&&QXs&lFDQkO5T%PWpo9!TwzueuyTvlB8$^btX2jbZch1ily_;*5Z7j~eF0vtoE;^Dq>A{}+1OZE+Ob(DdB&JGC_~{IPdI>)(?UKX(0#eUUve?1Qn9VO zc8WU@h|C91X!A@nBsf8mA28{7KovCW(}~UGWwEtW+kDxtMMEYeq(f3DfN&*dlt2J{ zMx%ERE_leBpN$bhv?q$H9CxcyL!H^>hvdubEwb;7}=5o*{Hi6JT zr-{iRNKB5Z7hb1G`BfNr7EKiV9U+7CFc<)2)gZbVkYcj*z(mrJ(-L6hR9jw&AW4Yw zcEB_YMC6i4in)GqEKrf_$Mc%Y@HQ-~y^a?dfZ&H5$1538a5#tHMXDq)0w1{KgY})L z%&xCus~PeMdXlLEMD;itWC(dTvl>A!dD}7W1Mwwi&>DeQLO2Q)4DmlC}M^w zAv6#u;Chtaua}2M0dOWV6`xHTB@-A#mMrMQC6$pZBuM-WkwOXbR{jV9^S4gufB9`? z>WzQpwnN8Cxdml(aV6R>>$L}q&F2a>TrFF-JWDBIg!6SBEftsRD^!F07yylL(95n- zj$?k^k>u|9BwNd&U?!!hnjj*Y$pD-U4Dukx@vW>E&oYf=0au#pdC%3A6?N6r>|nw^ z$bC~MzrP})5y>#LbykcpG+{m(7jm%LQ1d&A1Z55wa;m_mgoVISGhTlhU}0~N9oZwd z)iIX%a!g0#f=3_)<=*frxg6DCqsbuh!g!B2=sK)uuo}rH63v7Ija>dlgem?wC0s6L zZi7jqkcu8(C*El5hcdv+Cnc`uFI0rYEG0#N%5XKBlzGq3jmMTj$Jne$Yb{ViQ9zR? zN?tanh?25CHZO@7LYb5eIa*VO>o~{Gw!Lxjaf+U+wTcJ&UUN-yMxTh=Gze1cgmW3w zDml_^8Bx>qjKpWSajmbn zgtJUeNH$9q7*6%qCTbh%%B^<{ODD`wcQAP%lF-bRj6fNphY*KS21IIAV|gG{Gg;NR zS+2CIv8bo4+Rn*_?in$KHlP`d-kb478rJLYHL+>T;A8SwR_Hi&?3J}_76~&3`=q0I zvJUxUBWW{?mp+jbPfm@7R{{eeMv0gIp~@nmzP9AO8H)^~vkU^Ww>_kK!G{$?PQ+hURzM|*md5|7shI9aJ z=j>;v5gAzO(^qf_;?c#;Ae7H%ot@0WW0_&w%EKOsPWYYF88imkPt665^-Y>5nb~A1 zyoAafzt#&8T|hhg^xuda`ovql1@| zItF7jQLMrW-KTa8(gx@T0{39YI7OCtLI6Lkb@)Ywxr*axPw@Sj0t2snd~W=0EeFaRY$O${ebv&(%w{VoeW1THx#ZYBPG zRc&>1J-Z8$pkh(9{9a67m^nj<36O>eK|JK2={C;4&X;^EY_=;pn_$_OwN1}sJvMYr z(`iv@O+VFH5jA7S74V8Ba-+drv6lXYO*h$`VGMskjDfa!*N7jNLxH=VQbxabbO(V)zfi{j3UC+4JAuz{$Hx0Jep>o&6?1 zLbeKUap3de?`iOKG6TBG7?E-UIaSdv^^Lu<0s`bm<@Udc1K`B{-*QtgEFDix|B}l1 zLL|yQL2< zy`p*H!p)k6QqeSy*G9iO+PG7eM_#ygtyZPkkRiCbOjM zG3PR;dSKi{LUFhlsd{o9a65}J-X_Xon1Js%orxqXMUfkZah={DbWHb9S zSgw&0{YFlVB_Yj3uYy62pfc!kPUz;g;!atQgeE*H)NVJYF53mbwz5!|NB(9@jffqJ zW(kDpJ+4mOAosrZHC;T2tiEJ!jDF`B3W;2x|5M!(qCm6=c!>rZGY>#T718|NfxR`3 zXgP85@3xse=L@#)g6Vjb|NjV%lH}`2GNyQnzLi}hX4v*V=Jh%!m3McX`}MgtK8jtM zcZyt?GG?^o)ty8`Wb`F>WBj{9K8LZs0C1rZoYR@*6?V}hD*axkq5S~6HI62`U|e|r zx{JvQb!|5pq|Vds!ZPTnPa)@OXvQr`lzrCpuFIFcXe<~%E0+wi)AUDIUql78CsMgb zq2x=YzRiCSlcxDjyau(ONfs*fb%UJkqDSrWcc7caINC6CPZ?=yHZbwpN0Wn>49Qxf z6Y6J1sg3_k!0_a*XPi}${dYz;>;_V6k|qbjIo<87GU^ueA-pMDjmPGTDYipk<>ypr zAD8Df)0llrEet=@myfaxVr0hR2_Ls_iogiDg=vRAd zW7@ZKiVLl=wPsni4k8P~&(pbZg7J z6J6uy&Y63{2PtAS%V8hvoB6_rh={LJan&i8+>SRNvm|l#DngK4SN#;bj{%~xWu&b5 za~;Z>;l|8B?IMc`7$eb4IVgp4jB_-0!l0f?%%LFuvo4};%Nxvx#nf{a*KT`C@#zWQ z6XrH|<3%{JV(pkANPEl8(f8!^gxWGMLR^v6XJVwXBd%#(Upb&h8a!c+c@K3&SjyEw$7F zN+g;>RHY>(htl5FqJjJqI5{8JJH#EaEHYBokxUSFsr@3zY94# zS>H<&Je3sZ2V6Z}O6ah8U%f6HGpvlPJVG z4fiIW zoH@%ns1`arT0^IvN2n+0Y-&oc|932sb;UrMGRaMY)~`(=<6E7kD>19WSQV!%Bz4pj zL@tq>5$^Aay?l`Qe6rW-zg`RY8c zXbM-vZXaa5`k~{}5w*EYD_fvb$cUs6ibDyD7CN2Y7kw|ZxL@jEwXkjWuLOQAJ(6e>yjL}UH7C|92`DpP|jw7KdoG{{WjuCx5XCo)`C~|_!P6Rq) z^ZPro1}jD9myps5;`}2j=ZfgQtUv#Zje6oSM`^md()BN0bwWekP>rI&K+`Tzd!t#+ z9J5bG&X;sDO*s~frk_oYfbBhtp% z^9OK`iUPDz>ZW(YD&hi!s}#~(p?W)=5bRCF_froJ&xp#%QcH$qw=4kC-{})ImAWV) z!~zZ%6h3*RKI`2!Y!80T9DEk->jn9rOVubfKgCUFF!<>0yhxA&;#PWmDRLq9L-r&48c!5n>QqCxl&jos*0HTv4|tL)gnNl*5S3z4-KC z=Z+S;a94Yjf1YwXw0lR&kP~Aj zklmFVC(~e1e0)U>5Q5Zmg#@39QUcLfQZniS?CZ{;sVUTiLLu?v8TCsqT*B7lX7p|y z+lj1L#>@etnPC|WsdIk#nLJ-nK`pP>vbM_jS8%>A%hV;#_rN&x)b2G5q@D8)bMElB zt>A6ntzANkK8DAi`|-6ORX3Kkm5utZDmx9J63_M9(g%OGJ$Acv*(-cX4EEiAn}O## z+!_CD5W!2gaqx!lc8=wxk>bav0(gdLO7NIK_GB+1U{{cPkMpmOShlv^b<15J*Y-Y+ z8bs@@PhFd4k;Pzb@Dx|x6{!zre~%#(+JeEdp1?a=2*kM_b3_vLyH~$76uf{p-y&ni zrOfTphJFuIc)a3<8swq6UTVa>fk=|k{YzWDYvQd^aEZcD+FV|GSkzm0mGfVy^0Kh< z{OdW0m#s%mwk7Ep#IMB~=Q9O&b8>gG>ulL*t=0#p9^HQ8mgCzP%e-tQB~8Vg)WSRk zp7ajh&TmS$F9*!2DY+HpJ~9xLS1SgH?f<8ch3%)ZwS2Cc>kWyJ;iU22xd-|Yj~`WG z%Gjt4VSvvo0;XQ9z-eD)y~=AZk75h0`l+)Pk&vEyzjf!UkFP8R8$5Q$>=%nq)&NN7 zoec9{<;APXI-o+h`{kN6FX`qt)nWhhfhW~fueLd|CA*%0HZKqzN&ODY|G7H2y0q<{ zkwRhKTxa-%j2?llsxK-120u7`({0o*yN^9@;q%8ONvkF2_J`0W$#uS zbx*I9V0bS{tDQJ6?~ayFQGO30cXLjue%iVCR>OA!bMQs(!1Lot5j}v%)-98m=MDyp zc3Mhg2Y&^}&8-kg>Wy!-m49d$kKXU@`n{hW8oL%;{~1;I*O=X|igO|kCY1T4tK zJbHz!aG-Gu!kni!Rj5(K*o*FVS>(8mt zIjGZ@>b$bV`+JtlTC5`KtM}~o6h$@ba2gA}{Y_;_RX$s%)O-D3QQBeF*fwotwrg!) z>lmwz2~H)h5WTb7+1FVf@t(Sk%kG-+@n%rst996Z-haNGpM|w%ZTK6p;B0?3-^*0$ z>f4H!O4Fu>f2%Uyt6(c-RTiH{VUe2&f5VAceP~-$z<6z+hFNC>TVH!s7J6?(?)a*w z@BEE{5*GEZmCaX;rG14al-ct8h=nRE^rpfP$2|^9BdWKogtl(Gv>a#DPw#H%K`YUK-u&s%7-sG;Q${}>hV?yVtNeN|ZaJ~&>i>ak<(62EC^?f=Tte)x(J zUiNAG)KgCUx}}N2JQ%e?$QoCId97@AHg8r7{C)8iZ0>N(F->B|PoLWRBEs`RbI)LhYesypJpJ4M z!dMBP;aSPdPh|_yj^OQl0%KpZ!>o>P#gFzk_Nq(tuKX)*G$JcuSGAJf>t~&ui~OHj zdyRdqcu&h&xSbU?HxpdFtJ|rX;lHP!{F|_b^;+_6)UJGtKg_79{wNtY_NA~A<%?mE ztM~MU9;Ih!Uj`}ueDu9Pr9aS2*;`S3aU|R1q7|m64yo`1o4^c74wA|}=4~gwDFP^5 zXKLCboS@I40zgG>>AX(pLIM>2s@Estq(3%Y(--uM5_h*m81=6%=zdwp1s!}{`9F7+ z@&$b0`^zg4R!+Ug#kxv(|DaBEP^fHgVADz~{y&llm*s((EAy^dUsHSWVcU}K6EHKR zJA4z{B>!h8`ux&&+x1QUS)Y9^O_ z@ml&juSZnU?G^qvm+!j4RuH1JQHW%m^khV#ZXsqmq1$ z^`A^E>h##V@-3eLfK+ynFL8JC=TJAO+)6cjPk#<#l*Ux;0Bc<9ybSg<=L4M9@u>!x8oS5{>RWX`wE1s5W;!@EaH3l}) zzaSK0VO4n<>LhWhfRKllCewJIXYeN`Ost}tvze>hvy1b~B5U6F{|1UW!=AAg9IPL| zE${Zcv&Sd(ifiG|i~@0BN=1)a?0cp{BL`}#rh_knh_VmsGpuoEu5;<#G3&)0H@;5a zIR_FUk;8ys2v|sFpK+kX0itOylA2^(`<9+>ueMV~Ta>d}@dMuuQ#A{J+amIVm1}c` zI+Ut2C_nOip_JU&s+`?iAi_+FDn3U`1A(0FuZ+Wq?s6Bo@-0U*Fw0*InaIh2CM3l7 z)WeexOxcBq$UxJZ5bB?7qwMM9rx~G$`hQfJs=#Uf0S2em4MtpU|LR~Mku%^oYZ?4Y}Z>NSreFRJGA1NZ(_RKnnY7ub8V?egXSz1&56#rKsNsY zQeNjrgE5U-o=`!SN=*fcNJOGFll(iUAZVrk6jMfm_pV6LwBKv3LBAogQa8VT#ENF9 zaz^fw^84o-f-;1()tkYc&xVflwh#n)y^zm8r$phO#|7@QTA}KIpmEQeVWLm)f-%e# zpb!l`4K#2HQxWkgC?HEImXrLEN__*Z;%_#tU6$eVFuvH?B znTjTixjt)?8zXuLNA|!YoLTjAXj?Q;%#$j!0Eq%7#)K4UVM7*DrD$L6KTUE~S;@X2 z+vIn>vd;F+fSN zi%;`uU0P2J*Qw{8$C1hG6%*f9n`do(i%mYZz<$oSZcu|z*eNyqQxOHB8o&(r9Z^9t zM0{F8mygQyG=@9LhP78k!+Xv1NG|j=;)%K3dyGojHrgKwprd=73((N5Orwlcn&)=3ZX9Fnpn*v z)9jZfim57)>bmC^X~~g?py9e|%DsqA9+^>7{b6ZUTU_yXQMSs|q*CoCw^L(tdA9`C znUR2L-$=-K3#HlBU}B9tAc%*A;1Ogp5#b_MZik419Ha(l5;Jpl->$;8(y6u8HI{el z_9950@BLQ4VZBBGy8@om{Z-TSupe`xQLkt)xB8Z;UvQ1BQKjgm8Ky5N0h1gfO(H*;1vz*iaa`cc0BshDNwNW_!Iul61z6-2bLeV_NiBl+mDg{?1lgy9d>d9~{w zyLX4|*jycCa!y=6zgRjDcM9{k`U8g=TER>2C&i!HoZoln@Al)bSX*x|ah+WLeuU+;kHO{nFshOp@pfw#PhyXgVz z&puT^Pqd^w%~j;IEKp4Xgb|_8z0`i)FJJgmJlVWmZu}k*2H0|RA?W<~5O{Dv7*R#B z8mKr=%TNKhkY=O5WaQ?p5*@wOc67AJ0FLX$ zu3dIymXjSQ*C_|*p$_Ep<-4-ODKH|Hw#?RJ(=9?*Z`1;j8C zP8lgOE2R*d)Q)s2iYIapqsvESvE8bz3TF|OiL~a?-f5k8vGHhz^vT%8n|qS3()%}l z|-qH3nCgqxoywU{c!dMD`3u^C|>Hfj~l`ngz;& zCnUysz&xTLU|E!YTw>qYb|O1^(sy5{+ z@N}+Bw*Xb~-ev~>4qJm4rLtpx`J-{jbRk5qvyQ1D1g0;LhfWX@0OveLuYBJ`0aOhV z1FVfVLV`>TM2WSxJ}t>}1B002ZCVckZFt%zOS*uKcaZ5fnzS)jz;#%+eGi<6Dn2_64z5qyK9m?<2z$bZdU4$m);S z5BB2Tq^Q!fa}+c&?=B{TfAq2b1l_@JgSA%X$$UVg$M)I|{v0N!VaqVlL@X?#rxq9ufAra4mqhA8DG z-NYOsKupfWDzG>TMxrFNL<=w+MWh;093w&!^0VxUU7y$m|F|`PUDjaV2lM>50@+n) z0kq!pxZ}fJbYk78-k!IcmakR-?2XPnBSVOmev}Jui##M2qiOyLDI9LAd30vXikn-C zpjh*hEoKyHZ$Ak%Mv=BchQgVF3M57DNf@;Tc@dGoL|7!Tm(U#ELan0mq6l8o!^c-8 zjvxXN5MUg7m53l!63i4RHrSYb8vP#xFwZx8D{}(Pc$i;k)lqM5)oUaPQ{3*s#p%Cq zG-N7j5e11f4wi@DaZZ>Fy(38wOKS#AUBYo?uj@-Sk-tELAx8kj$n>X(3!0({nv2ggF zFX>j>K>?lVneB$V>$?aSbMP4k$sPNCm!|n=yEG)#`T=N71Mm<%`+pU)Sgm~c#l6Yp zMY`3Su7-Ji$IA^{A`tJ{8i@30>SnfeqrtuNwLRm>jBa4#0DA$Wj#gQzV9cS88HnY4 z2iUJe%BN7C{nYgBS4$cbs&-818fIh7L3x&5=SKM>Asy-#qE_N-8}|`f-bxOddJVBV zsx|mkMM|u7OTRDxr-K@1mbJgKUZVBBwM44q>-}fR7SM0HH*1SJJU4H9CX@v6? z>>Ku)YEg(~#DTAJXw@#w`f&KvYu34OCFZ_>7wmdi>!3FLHFYeuomM04yIk4exNu*7 zZOqAQ>>cyQg3robItRNLBy?z*vQ^s<+S)f%qOTsieZM+P5NiKg5IdAuvyrFa>b5hH zw+{`ZP$g+_y$}!s00savRX`&E0AFN1)y@JYjcDZV37C0e+yF$bZUn$_1oOUCoS1v| z72lRfi=;u{zVz?F$WQ@{%mCON02>@(jzquBV=#H-?!S^#i2}cJ($?jCP6Yeq^e2e~ zLlll-gaE7n`+dU(LPEemZPkWKvhc5{d@9Gm-y~I3g=GjNi4x1@GrLGszA__@By3g7 zIFiqo>gStYQg}%KfCvE5%m7>;7{A}{z4z|hZnCxS?y_yW&8Ka>d)ls9n-J_>e9?AcO#d0DvOG{PF|B4?Zao0eUF1YqG}v znxlFF&_!t0rk?t**w}scNQF8tkuv*Fy*`jhi*myFhb!F?UCdUUqBB zPhTE4nS9gA&SA{5%U@Gx-u4?NCeQ#wW3212z^|NbBB~^iXjp7jxiUbn@uV`$4*maQ zONGqp= z&$_9OHDlcEr8hedK=5#V8@gYY(Ts0a#-?UtPOX!7r<;kV7D2{w+CTZLS64XGR5`xO zFKU9)!zQEd6igy)G@vb(U4Z8#Q^BiJf1aro98{?lGuV_6h|4XJ@b+zK3^uIv|A*V8P16Hd50vW1D{T zg8YAmSz(&};~iRywLDvSo$kv*Q7b~IHJt~)$HWt0YJ=577YEbY{~xXzE8d)#Zmp(# zWV5%)@nmj#+T34J8juxeQFrmm1f8 zpOgwA+V0dI@ZRrTk*2w6QiU<_b}?bFhI$Nb=71rC^A|xs41jO&E;EKUnRgm+dgWI| z9i(gjW?;A4a3O86+dZIJXjGe%x%o_fCrDl}zY1{o`=#(~Wq;3hVxHjBWV2LQt7<{$ zZ_QwV5_0jp;Hf?vsPE}dVip3>;>QIYXeo;wZldiB7Fk-QK1hyb_kySmw95mAy55zu z6qyu+JFcVH@8#i@YOT424|;cLX~RNPv0j-S&QhbD;sep-EmtP~0fHWNfCPKDKLe^A zY=OL~>l*50L+mhpvW3Rn^9%18QVEL!4KjmQGVJ-t1_He?)$Q+ZA*Ds*~py>)VHG6d=h1Ij>BPyYJ4se(4On{&Xa(GKgIFD z{bF+6*WR}Md^05-?!5Pyw&cg5>vbG@%4&)A4DzXns63bRJlhxT=s6>rf1frC@OIpU zmeqVKdPLOklUARzv>!AI>T+A1HcZ-mEyXK8vZu7%X+Qx>N43uX==OS#MbFBUN2jgBB=*Ae{sU)%*K+Mc|<8GFfCWAO40+`(lBwU7R zNECEXXj<#shdlSxRdfsT==dH-GixAm1Pl)>5ezr*itTTPur`7A znJ2$(CrH29x@BEm)7Je=2KozW-Cs5i7)Dx#_%u;IsFFNX`SMof|qWq%n@MCSNHRq})A#GPH)yZDR*8WQK2NaHC>)8G z^pG$biFDVMMRtR>fvq)mqqoO%yrbn}*n|8}>_+p!Pj$BE)8eb2K4t__jBVDy-8e{4 zutPYA@|{E&oD@bcNA}BSj}|E`Q=6Qv$Dy8{rr4ytMSBI;NQi$!iZ}v_XGnsxGYd!v z1i|6(KEb0yDoxk7-lg>}sST?BM7RV}gxBhNw2K4GO4c`WtlS?1A*;a*1cn-ephf*m z7|-BfGriyR-0Zj2RBhL2M@wDcF0}_Vm{%EKZ!n1kVo*G>q4Owlp3*Ng2k3S6&Sa)E z*GuL&7e+_eYZ|x-CeC6Dy$lDur1VP?m2kypxc5N>0TRjgaiTJZ+E?mUJZf7afGTPP*IGM1EC;x!xl0}5rK|k(0c=>yH;hFY*i+1 zZ%;6fCZC=%egCZT@5HBa`}*XitCNOV34ssBqO$@M1S%M`JkS!0FlPjL7iZflZ=CiK zjNAl~M7#&FprDU9o{ljRZpBjr$cO=~^bWj#ViBWpEl`k(pr;Tq2$|y;U+&Sa`{y7a zICR75@5HthWYiCJy1{qgWcH`A%xKl`KSDY=rXZSo>6UCqgHT~V)m?obwZOl_GSx;xQ@&H@VHK|wb zIxMEW)w(?nYLbiM0t2KTGhgNG99xc7&xq*pk~IMMY?WWP1!`)j%?os3sT6(gD>C`czM?#N zL2D1Q=lU`3m7Ly9vJy09?@R%*5Gc>Wk~0vnLNo*dX_Uw-Hiv04EBLrhi-1_3x{A(@ zsNh_A$&Ux-hMeE6IB0;>pktbhNmyD;<%qKT+ZKPT=B^gtTY*~}SUJpE%1+h{KePWx zflBY&_eBvi(Jo=+2V9~i(jU~ZJJ`-zb%1C|(0uwQTypDn>9p3lk2R?b2?PBx-J+Tk zWnVIf1F@cAa8Y5I06u6bPvQZd*}lk5VThV^X)L|+m}k9$6AL*2#yms|0`F;e(#6NmHS7#2uP zM?gLtBiS2)tPw5h- z)96=l6trx+V2ErY5eRnz8vDkspKuM^Q`WZ;bTGt(q&_|9cRLA&c{20c(E@bgrK#+l z(4Bg{HdRf%TiKe#b030|Rkp4QBsM)TTDDz7Ko<~qfCr&GFoM&DY46A=Zi!|*eHDs$ zJ_(5DIP71#R0y*_MM+QawRAm&STEuzu-V$dXxVl+4IP5h=xJS$5sBDNgZ=4K0wc=<0@C=3 zm$Xh^oQSLi`d(X7;_q4Dt1hCCr{hj5QCJr#J<(oEEBy9p-T&aHR*%phyQMG7&sn!_ zS$*H*xk?scgL5;YwrJUQ!4KJx7>P_N+l&IsG-dbU9w9V0Mp3NZ7c`{v@_@iK{)pR8 z!lzG8wo{L=|?h;LKu$Oja< zG6YFs737YHUwo|Oy_^I^YfkEqv{m-ToU8ewcTJ zZedHmgGXc*A2UXsXw{^yf`-mjA@$EEOiGVb?~;}Fp^TnIvjfN&DSKAlIgU4YZ*1X(v7LuxncyQEeBhd+K@pi_re*b@$o+}X`C=HU`Et{!Te1X!e)(MTgpIv!>rr<)*DJy)W;2g_SpB50qywyC;EI;)b5qZq zdi;E+4U#nf3z|`dJPY&o=hjX}6PUk?^WVvtoX++hzVchLr&WWTE2}xLvG|ak#@gAn4-QWOqaXSl79S})HmBl_3K+J=4=eB%Tek_ zw^l5g@1Ta)PRjv8DG-Pr*uAp^AU~o-njXz zaZZB>7JBjX;5ifn%Iv=DJoJYC+qmqf46U(ymn>HXISp*j!eBCyp}EA|AmP3Y^hFE; z*iB&1-=kev)^$cSwFHFacSkxusEAA;l;n9VYUgVXODUaD@!S$^ko7EiCzf5H;=5u? zUl!@B4!0fHGn>=0pK-TV`#(L09U9GSkY}8V3ZO6ELBw*x8O{JU^G1XS)R$sIvRR9} zukWyr&w4xP9f-EI!Ja4C0;V#prp@Bp;vn}wbhGTY-D016z0Dd3fTu1J!4eK@gjy~C z-u+K*`+GhR#JX`-26n>0A4wk}C#kLg>+VlKQKh7^w86LUnSI$ADtezJW2B$=i<{H- zDJhmd+@C;JJPly@mF%YwcbZfV5~%6BF4WkXhiGTS|K4T1pC+{>1fXi2msDi$e4n}McQ_k_ z60nyX6thBq>92%2|LlkKeg&?dfX7S$7rgQ8UEuLM9#8IbWPcMOb3VnA29-#vR_|UpKfI{)O-4m5-dut{&mWMyqT`-qH4E2;Udvu zx2pc-4VHTBH1JG(&jjN853b6P5*%cXAtMAXgjX|+&tEW}{ow{gHYH*T1HCx3}DPeu7O)( zBrb*r&lq(RSqg(hFA|_01>zX>X_aaYZD|YhG4g$RHA^6ZjdQFWie28g>Juy`cya*_ zEgN)t;81=sWXtqbFgJh4jw8>fS6s-*VNgRQNu;r!;15n~A{X+GYsX-&Jbmb%6)x0o z_1K@a7_7&-W!`5xQrqw__96C>!{Ped38uc8Nyverd7fW_-h{*&4iO)c;nKCE{}2y} zE$TQaO4Ye`zgPu_#MGt>mI9!OehgL^G`LEnhkPh4PHW$R@HX;qxoSb*VUUV!*pT%F z*R#R);7O5_elCRV=|~<&biltqjaz~|wx$85J7fu_Vb3x~VwSIpEF91q6#VoHh40~M za!20BlMrQcctnu*7Logv0`I>(_u_lTxuS=ADNY1=%%XEjD_A(dkOi)|2?}8H3W87j zttt}uk#|L`=v$AyzBSgxPGeFyGB&WVl5>V^>)2)!NYR4~&e%_*dVf;Nh5R4(aIBVc z)61FLU{lDJa)&%556K5;Tk%TQ)t3V^L(un7ODCUG+kl!u?nw}Ckm%E-AQ)tDA}@10 zXvPLhuoz*PSJLWxQVU~$v1aN4m<(eHm+@hHu*Vi_c|&tb9ta{W(XjpAO-4!t+?ik6 zed(=*x2+>Ecauz3cFASz3GBdIT4j{FmmC<;2ZAs8&leiw1O@koN2p;+9*|7oNz-8H za95OG#vgy(Hv&SSHt~NZ${EUVs*meX-#1*~N8Aso1*{Q_PQyR=Fk9Jw%dM^YW)Q;L z*G`XfcSO)Zrg+I!7KJFO3*}{oO<$lBbu570pd3J1rAS9H+It>g!*R9-70d0Vm%5~y zqu+p5xTB`Dn>m9)MUO|Oo}Hc;eKz>D1Om0f=!gzLgF@97yN+IxiWHi{fhi(1jWA?I zf(mFvMpOg}SzNR+Nv2fVA{qnK@NQe+p%O@k-7tC+<)gwe%|)IRM7^I2`k^8(40eUOTa{A**$4M#3w!9)@6T0VU0p^4?o_Eh=9Y?e zdWQ6skzMK{8+G##%$#E2lX!n)D;%AhL^UN z+rg>y6{Lo|!@r0n{n!J!G|ua1AB+&uX6NO%ns{w_j=r<}`t^P11MFNmV1N4FRlsBo@Wip2u5 z@7-G^Qa;e#wNennaS;^LEkolFGOh@q5roDxM@x~aB+T}13T*X4`jAJE#1Z@Q5fgOn zeY)b5;#D7?FeFG3eNYgIT2*7|M`DneH6T$VwZrHEe)|DW*;z5EiY|_>9ltL{Qp@a6 zafjwEbZR1s#Wn4M&R3x9HsQ4f?mb=lDJXBUp|3l7Ym|=n8)mswezxkqU*8xO>Ejg3@6$wZzAO^2FjTH_6=J`8Kh0FwuhoE5(^Ysefm*<}>h798sIgm!KC~VOq1pQo zo{)xQk@5d0_y%V95(th*JP&CPjH$U$d>i|#2Yz6eO&8GX3)EF!5F6XfH^ux`crC)F zc=XlP1fnBbj$SPtB1IpLjX6c5vJ&9mFD@vJc3F>2OM4fJNFi((RZ8Gl%ZL(f%8SO* z)>V`S4AJR|g4m(X8QTQhk4gEK=sQr>XZgN%)Sv{vNpdXse!!tv`M{&W zRDU_i=XwQ2mRAy=6;|c}1YU2BWIkgHu#;OZ)sEbPVrp|9VEPid!H@K^Ae#)Fd6b(v z9U=5Ua(spMrdJ~jc)ZYzd8Yk83vExhs zxF`VtPVD9*gnr5l-m*RGLhn~`y@df`=JT`&uh|ejY~#0>`(IdFflaH% zx1>R+`4nBI z{*vf#5Iwz3OO7`skhS~geWJdY1djI~LQqKFK&Tiw>z)9SX()fd839h?1SP5ITl9$N;QXx(?=2R zzCH^txSXrUZRL($oBxcdFMjYTkpFR~5`VL94&?B&%NT1$&cxRkovQI!D!$dwJg)-t#n&Wb71ThF+1NsQZlG zElp~NXWUEx;nRsc+1BNtne%o_97F+Efp?@Itfy@79Hn*YwU&;gC{>3E4yYf2O%y#R zC=1;7A6dG<+;#ZSf4pC@zdlb__)teyC}UNu(!#A`|JDUxP?|VOB$qHL>itJ^g|*HQ zSlEC<3I1mzJv}-2Lov5e)`UJ*lgt~iE^3>%nD0UF>`~PKT zV?{V;nFuyj0>f&xjUW$QEiiYGGGU4|ktjg|0yt`o>RC}3kjFwez3|a7QA*S>$^1hh z)R4%Ktj(f;$5jGzNCcg(t%y8|rCrGm@qgY=8PYb@z`-ok56PyvUfIRTVZeEDeejoH^&!|Z^l9u+b@Rt5@MY_suS=_2Vp zoxj<+uolg=20lm&^553VllEi_f61w1vCdb9-C8P*5qP?eX(~k{bIpf!wPiyApQ9W+ zUv9s$2Ij~#=DImPiVp=FUVP)vFGzBaUWk`F8xU3@1%DDX%=Jae5;RH8J$Y0)OW{Sk z``3q53MO%qas#QHMwJF1?5ye#E5A;WFv>OfK`8fwNM-e}Q8c1t^(|9PAle{dr(uB> zh9pQ)Xbgs+ff(3y@em+Syt7gfeA@0_D8P@si! zJ9BCOr0yrF=oHdsce_$Hd}G#ArDkjrh)a>?0%BqoR|Ro{EDOhwn+W*RkuUU`qY{{F zR&cbnc)h5FZpPBrhx<$DDff+ow`;A3Y^2Zz4O_eY$-RoNo}VAdsT)y365h$a7C%vo zqodFdCqv19)j8K}`quIpLRrl6H>_M{%x=3*AJ&dOcg&16CyKaK{o{ZVG*pGWXN`@s zyXb9}_F5tAk)zaCXSM9)9lH$CEpwE)|76)~6_VQ!nG~(=g(*^b%k9DGnKBYC5}Zk` zQf*G3Q^DbS^h!#X8dl0a9VOnsQjx5APBm9w|MfQ~{>-rQN0-JAY2GC`4NKyJij%@q ztr#*v=opGh3#Kb0)G79)Lg+8lX5T*B?N8WAop^?!)jX4LiT{;iH*%@z+OzFre$(%{zXFNeB?*&|EZbB8yQm;H&}cZTJ9=sy*%jX)wQ zsV;^H^kApAgQF|M9X9f?I`%XkAup=7&Rf&jYY&2zNTZBTTixecP0hOXO}x!!ybm%nK`{4;;V z;X@mX+_LQe?Lw$qM{SSRA`rz{gEJ#;Z$-RKP?pip|4RrKPc^H>4RN4CQrYMt7g2_> ztJ1i#0WYOh2i)tzE#-hZ;mpb2yUMxcS6RB!=davDQkU?(|8v|E^Udr(e3n?__u4Sk zlDm}7{cC?>B_sGL>3i-yQ_gvpyk`D6L0NFj;yqoOI!sEMZT-Ja{vyef*}^A~KoTCK z86s>!2+R*uPIKrT@%=T2vllb*r?UCO)?i$>Wz(39O8@_9e zpVcG$+=G#D&jF)xObU)_X|QeJ@SnKpv6S}t;tCuSG0$>xSbi(E^GsFSZ;8kss1uri zGD~Q_Ie~Xqb3;Z4!eH|_7>>q)6a%FD(Xj|&MYpawWk7g}kEV_qR5%bUVBX&2fouqkxnpjw zc&?X#23b{k|#7+`B?{J$*xP2n<`^DCQod%IHRN!Xeir5lEUNM_3}hpY$|w1OsF` z=?AwD>=W(Wo-ToaS)hg{PI!(m4u3r+D}lm~=` znBl>3LAolPHwHBga>o(ft-0sjY};7|T*88S0%A=XlCPPv&}>&_a0osO5$G`~y${(h zu6>8Ga2ArM#x2nxO%lrU{Eer$GZH|lcOoB4ZWTHV7I%0HhU0S(6h;Uk;xrTtjWN&^ z5RVYkQaJdH>oOI7xw+cfOg(_s5D)_Z1OPKtHzWW6Z*`yQuYgh~lj4LFe)}6+BXLQf z-~<8!`8Zh2TeaHy)*Gf9>24k*&n(}6k?{h6ks&CW000CiY=e*Vz7sPu+7_gi-<7k9 z3x3?Ax>|cY(YuYA81&TH88>ai(mBpC59oS!3CWP|d&6O@t2^ZY2VgfVS6NB`GrGD8 zoIzu~UWIe8u$9VrZomPnOO>9Z^IGIZ!jQzQ!jb?0BmhJ+0AOxVyZg6$?QTr6O)~oK z-0pAvH|cD*S(Zz7Wj2$IGBQbKOJJgewharpf@Be+A|($fP>2B&1O$SL4+zDC5A=P2 z?IQ;eAi!D)Jv6PMY#lbutA#d8QHVNNv9cBU=JjEk4CDw%K^y^!9Oa}qZ~%Y^Il#vg z1~5>N5U1RWj#0(p54o}Rp${H}gjk-7*3$LUDb1=XX=*E}sj1C+x)}&vI!F)&JV76w z*`;aRt$JyoDAqTBGxhrO>EoX#0o^Ow3Ka!sx0InNG2x0(}dG>CAt8`@W&T3Y(g zZqC;EZrO5R+JXoG+c}I^8y0={91B+PF%ZffgIj^I3l0CUM$ZzDMDnqSB{5V$Fb)&W zL?t~)rHMxj&I|PtkyNS}xa);zZVb@^Pu^O*wI<%NK+pmpAto6coV$FS!!u-%VG0&R zKUCI6e_0fPmDMPXH0uNYK{U2g8`jifjqqP_WNBxE*M#ojONVk(5IpCNwclY$aMNYEn^Ssi(cJsm{*l637>q0LSozt^ypvf?qM|2RX%vj&BQjYWn&f7H5WK-aW-fjY;&W-%pWkQks*k^M$l5ypV-2Wz z`Ulh%YW}}t?(E`pzM-a`-Pwbtr<6uh4*HX+q}uuH-LLG(x=%5U6q$A#_c zYVFNT`*?XB(yzO^AX7!{ZEd>Nx2iDE*xk-gE{OVCrxUE4{tI7<>eiC{eNK*E=&u0L zIZ@NWTy-9TlHt7S(vsd~*yDTgrFdFf9a)$MFQ9ZnZl3MV&k?t8pRr50TB-RTJXjyX(I zivtngUrIixp!y5L!TkY2D*^P2s9;M`_b}ky4}f@xNN?tLpnwDNwl= z7VHM;kYSP`2m+t}q>v`PbO7H^QU8-#6M~Qx*9jMmBdm$QEXI}s;Xo*eC;K$$fPk|g zB#yuGOXXWlPhBQgFJO=Kul^aTo?aZr5mQbaH`L*zf6jn_sl+zeAtcZnw}4$GWmTGV zBOw0b&nYy}EKfL9-+Jc4RWSL}#3E-GXpjg$x^9}9kFHNs#MhcOmZl3TX>DU;PW9p< zq6h_~-8EzoaRBpsg&Leq`jDB8YG}Fa~K@HkkB=3tE~X8fRyRiq%(I zrl{4bm3C~+Z;*It`&)3dY2vMeL9mdrIb9@Xp)#Up%ew$FkqW*0D7N#?F>-qdt=F^igy~ro2jKa^Sqh{bF2%>2(OV{13#8<4IpJ+#j3Y3)7 zeldhi5GX)i@ptls@Eb9p@FS=UQrXW{dR#&o1t$t&%AjbRgyO(MC&4{RLgCD!DV~FkGXkCdUaeG?NuXtE?@LRsr^P!RF$Q& z5oG~HAClmKWH7lN##x06iImk?0@$zm9Cv!+v{KIZJY=j)*}<0O&^V*^BBbXz8YxuI z@XbOwnRYd$qIR*GR;8z|7bxO>JAOZ7E-xxerBJWJb5CaQw>S_;f#^U8>~4_?fCZI8 z&~_jay3Y(Cc!P6f3^+@c?4gGhw+s-?o*_nMDe~PY(EG<30veqc6w!t7rmX9v`_dVo zK>##-MsQ*7`YQtH5)QVed?K^q)XzQu4COReUla)WjKlF| zJeLs1NrXo#ZSGCIpS;w`*3&ZThK*5_8u4!d;#rOh-7OC2-uZ`4$q+4v7di5;)GpIe z*3|#gG!4O#;wOl{0Flx#OJtNla%L<>-b-GDAQR{teqaZ|qpQ-5`XH%l;V{skDu8k` zrlr8eBHl()tV4vW>)qD}Ti~ zce8m&^=(o+8&Rw)@DRlCxUxRq#*mkqXqc7Y5cA;I|1NFph+dNkT21dI{*JZ}DG_{i z5Aes{Jr~xsYP7P`5p9p1%8J?GSY!2K)Y~iwq%$)=NCF+;MGy(vO`|}|kh@yHw3zpB z5$hX+{w)53r5N>5?s!uPif@(-Y6$J`{&XDw{x7-}-6|d0x>`c9D-C2HATlGaUTdke z^WRHV##g9tYEnJQL|n5X3>V2Rr3cM$wPBEKBZ$wQ;kIiX#v7mLnR=oBAL{R!jHf}X zj}jxn=HL{E=wa6DZ_gx^hI?NzvqIZoyr1GfwxB~pGj>)K+3fmIj>3g+HKBR1p3Kv7 zUf;~sRYU!U%ZX@d=EegqTGp-m45}t4fCLoi1V7Fy=E9hu zvI&}CJt+vK8KFR2*2#1;Xe*KYK2L-hST5thQDe}IsCV)Z-E6VEvgSqi3`n|YqGbG` z(!uA&TC1rL8wzsqc!lgKZ?Qa5L9DNtDopW^gG zIINs<2gTp%S=zIkY_)oe)Ea|!p>^LpdgtEHXwi|OXS-ZTgxq}cXuHwn9j>7S`E4Ci z)}AWvaDo3&d!7VG)^a7zyR|oz&B@u61M1*u>Fw<`Rpn|SjrO)d4xynCNQgaG;~)rW zcrzZikde?u75|;6)59L(e7kd zk3{1q?BY7tpZkKyJ78`clpuP{XAOND4HQ@)Fw+&RQeKI^yD+%*Yv zDu7ooT~UihxTnJ|u{LcT=$!lyz%Ut6{7qTAYwtIM1{{f&s_r`z7;5G;^`8yf}*w>Ic zg2?r3UETECS1|wBI((8RYBv!bUkbI|@Y~5tZxnl#pbI7R6BvKGWJ%~3|Lt)>{PL(0 zCLc`tB{aCtu#ba*-}RED4Dm!tcSn^95rrt$wAS}bSEAhV9k>|df6`Ko^#qjC-hVIG}4P3-2G9>Av zQ|SDH+pqjPV8Wbq=|Dx!tg5Dgy=(T(MlmM(r5yi#qV)M=d?B8FPB6vfrOlL;_K$76 z2>v18IkbiF1JTZb`+MJl$pH#GS3eit^7y=`Ry1QsZZIqK?7tcJf`Ys34!ql@_6t1U z_AgP&6?6BM#`hs*zZbCY28o03vK{f=vSZX=VC;L7KJ1VL=@B#TN`)S8J+Joc_J)W* z;M3VI3s`OaH_g1b&bpRI>^YTwjzF+WK|!wz3Mr(mDez16_UV}#4r9SieXY*mm?gt@ z+gVB<<^-(@>i~uF_3#Opq($5N*I|k(ykh5;!`m)1^+l$yfcecsW3^m zmRg%s^l+F*vcf-}%ly|`y|QONYGGy47oD$z9~G)@3g4$sN8Ql>nPYJNx6VsFPvQ2q zd-+~BSnFv=cO9c}P2En-dnfGB=;O5B`8~OGL(k^*lYkQu{w>Fe!pTksK0n!A4vssT z9Le8cF&Xe*3tG>}Zab9~6Ye_YaX25|jXDTfJ7JtH5|pN9yPO6yi~!Rr;|!zxqQQFoTtdQGB2OOB31Mvr=X94$*8 zpHI&XS$W2K3|Q}zoze=P)h8q!VU>C7*ReX4!{m5~g#DXN$-9+#FO!M~gMlMls?)$p zP8w4hF`f0Kj#vtl470YGujB7@g|U;ykW){=pDgp7zzkjAw>Zwtu(fo`D1z*Zh}dA+ z&Q2_U|3m6$&TRh#H}w6md5a4e3#}wRc4)dT<-Z;TLW5KnG_N%s28zykQ3JBtN@JuSX!#5m?k7E9y1$u7c1$#McuYL25Wse!6NmO-W-Wp0T37p%3{rAx9w^i(hdgVpqxtJ#x1%)1b)cDCC zXKMSC3s9rIKMsw{kLa$7JY14{Jfk7Na~RpOEMo~!XUWqT9Yo^ljYnc=B^dmEgBA(b z;-(9_xcvyaqIz)(<@rQ>^g|j>b9~`IV#K*__JR8r6&vJY-6W|xHaJFFF$~L&^z|-7 z1{~B_>~WO?spg?Qky z@DIr6P!;wwY@uekgJdo56YGxxT$)`wwLv6AK=|7hxbmT`RaoSpH*Rx6{^ z*^qY=1~UC@9C*gvI`%NIuZ^8e=j5humoq|J(@n4QA$Rnu0^VZ@NkhaJFNU4`8TH4R z{6os`ine)?&V-ygg9SNTwcM%7(hMy~5fS6_EYBgo(_9_C{5c|#%7TJ{N8-7fm1@td zmuzk4iV`KM+75uh2+R(I!Uanv3EmcgT~O#05;$I<#*-Q#hYN+XR$FvM zIdIANYXZJoe@1x#NmWc;8_0Zfkm7^@H;s((L$sG3#g>uzO1{i_AI@zNN>wFVRJ^8# zF?-f=&x!f|!qIp?I~4NNqVdRcWaR|=-FARW$;cT2fWZAAI=Ylyu|lk*;I%v>$2+fx zh`=u94`=@}9Wwz2Quc{0?O1eZ*Gy!PpmRgV<1<#Hz3PrIkOL#j^v~Fr0pdofgWT!8;x^&dhd? zNLA=x3miS-#XdqTbt8@(=r&J^EA%Sy0pdvUKA&q zhn`c-i$^>lq^LP&1gnEgaJ_1V=7q{QZhIU=nYd|0gCekNu5O;P=U=QBdK~3SzHWN_`Uj)|@ZnEXuhimea2`zXe zxTj7i9phA0mT|GJ>^2}}!+nU1Ty7bY>1rMZqZd|uq(5!$P2&|txH8Xd+@3LjB217& zGYFE=F0rlo70(5aEeviLsulo&Fivq20A$MJLsSgBYTvEf!k zqOFyC3Cq-*lJ^hTVdc5u|MoDCn=*B3r2fl)}9OUJ+P1z`XYH1FjrivI&pyH$_Na&n1)_I_wd>+PcK zV+bdE1k&9J2@D)mCJ{@_QPhA#6184>5TTMJ9+9~9uGtg^;#Z(zso*9yY*keX-cCUj z77B{`2LY8B;+{|!24O#W|eF1K%+KuHUWJT3HgN;DPLzU72 zDsu|9r>dA=nhFSiul&0oG>#8>$Y4~!UPUT&kPd^BaV0JkI13L$sCOu*#B5jdC3-Ft z6-H1Mlyt+K5%qkJH_+lEf^E>{*3p2^CQwHcaXi6Au`M=95+T5`Qj}5T_wzImiDgc) zX$^C{q^=mgyc;qcmW}Ya+VwVVpb@BZ6FIGxUZ+HCt3e10Rm%+t5@Z7^qrIU+2#1@2 z-Wfy=6j1>CEI_K5le%h(Y!qh#OyglFR@%h(o=y+it>-VH#;F1+e#gy&*B;?9c%nb$RZ%Gg9(5A^4dtaIr<)TQ5>pUI(b7GZ z@FdA8UNg!9ghK|Ze&%l}MHIPQsBv_@s;%pNG_62ks6o*WL0$U5u|sE*d4fDn4+K}7 zYU*hktEwp}>!|Q5fr&HZD|7lEajFJE#SDJ~h$R5B+qjn)&z!K+-!Q|&=6;W^rmm@~ z(bTHcxYLET)kH9{v{%$n<25ifQaC`zGW6#Ut9!lQwfpsSe>#GU&tzJMnx1!taU3Y* z>xui+X2rk^?0unI2PTOEJKvf4S~YEC2nJyI53W)(T~GA>b#qJ{_ARKm9Skkj-Bo z$X+uNSNoeP0`mkER{zB_p4Ju1a0ShtvQNVE&D>?%x#dr74m2!H2&|J*nEhXLcG9tR zSyXm%YImTVAAf-Y&(`iA(t%^{QmeX#4Ieba^+WPnmM8>>fgqdAn$F=Nc$Pp26$4t* z%wsgldxY0@HszXl5IF%^s5~ib>4h897^Yynr(AU!4;OSWK6y&)RW>$87$B&0Z`iZg z@Ez)V%WPv=;JaN}zH9kmSw_qTqO;#uIIVb~98%=GP9ZpnMdV*!b>rHvG3P7`MAV98 z@E~hy1=^mwvwjyq2JV=toQ?>qUKl+$5J2!0i(Dm95E0KY8yV%BaWsfjNjWH+>~n2Z zg<4r+nv@lNyc6eaM{$qbTD`=Hqrv&yY+yMK!O`Tsgx{p%Mt0yFgAt%Vkypy`L=A@> zL7brF^>qUSMMROND1}2*bv*t^DV^zc1$qofG9bbhEC>%}%U)reJLM@ryClFA4CK>} zh|1pbE7S$46ORzD3uDTD8A8EPbMn$FCOh6{+!3|t6H_+XuF@Em zeXNaqcVj{j{`$Xf==x0f(Hr4_+e~CJ-0j#R+&Q+VIQ?NLiIPk)TG|8UCjIb)aTW)8 zPhf2;d78ACKFZid&A3lsZGS%0R~$9TztP+S;G%^osvp+dqEkz}=B(HZfQtpjwg7P1 z6}w#W$)WcCZ!y3Cs-PX)s=e#?_+EKo#qiXgW|8G6Bv_ovL*BEqIYJ3muuIdnOddL+v=HCdE4ftUzEVd}G(qdlqKJw(c}g``8y?8D1`D2a zY}By^vV3RAlus7&A0_6vT`oYgZRT0|8e;|-;zJZDadzBaY?T19h!*0D$d!fAJBnqr z0Sk5mn5M8>v$G+JtmKSESSr;vsTF@v#;NLU(1GwIQ_H5)g%W8w+AU@|puMCQU)0SI zxiVKv!lE}JDqkpBl%mBfA%VS5Ixsyamqb{cD3Ymp5uPTS2;(6HV%&BIP?#cWMW79y zA%di$#(AM@Hn z7O2ln47nda_uFj~+A5Dp2N9Au1TJJmFjNxoq@lN;#y~-77Ux-6$y~fALZ-kDBSNC3 zj77TeK_Yf@R)I>sDb6xiq_L~8+X*anD=#ixMy)hHB^gXtu~QCFSN?^B!t9sB7|P3o z^De-*{m*GH)_3JfAx)V1sBsG2=s0|LBZn?%fdR&Tr6`;g^Te(4BB#UvEa}kj3+&IB z<(U}V$y-nnLL81WBxXshChWHQ9?UrVA+Vv?(MC`O_N2a#WZisc>*nwK<43YYX@13e z8orz`TQPhvU^5)~dUT|Fep8}tN6a$9lideckA6z+i2D%loqWflUBcsp+ft3GP>EL; zU8JNxMVcSNAh`sJ)gSb_7dz)zpmT6Ql(vqflXyf@D@jZ=ZRnn3`?3>Wt>VlO{CDj} zTW5bh6FMZ9-rlsrZEvHS?X;wRk{EAZp7Sd${4LC-V50_cy+aHVN&X}tV(fgq(=17I z@#7sL-zMlhkWuqa+zPk#_`Wu2czL~$-_jkOVQ#Jk)R?2^GxUfoVW4aCjWRbV?_gfJ znKkM*4vCV)J93W7&p?QXI|{ebaA2@^1c*lBaZ+JXAdKGS(kfLT~&+0-X!g< zXgcSMz#e;!sx{jb9G8Uq{G4k!Y2#^%ay<~4TRZ+mWVx0>shK}zhIjpFSmaN(WEN%! zmdPOkM~CCxZJ3Jhi&hEttAd(g*(K8ZnI*#lWwK=f^ok6>{o*j`vvCbY;CVw&yWKx~ zuY0e3&ruuuM|ZtOe$EGC=cD~u*h7zwX-#8ej-cU%g{2UYn+I>T%1@5pp5Q#zQl?6~ z5t&6Tvp+5853d^b+$@}6%~9g3y8MwcTV8Q8VPN1+{CL}}V(a5if9^H`8^%7i+=kEh z8}>QY(I!<@QqPG<_EN z#ae|J7d{|_9A?ZTM>O3;F|3lJMfr0wgZ|9OUxhN+v4T(GdHZt$7AqR_A1k%W%z|LZ z6>pusEiGRGN$%HVc*D^V~4nT;8~kLPl09E?N$0g zuR*e#Q2UEHVry|{zekoigVgU8B!4Oh3RY;Z*S9KVwr+)GML9Zoqg-$Osqddv?N@H= zvZ+PsFG{`e?5Td^OJC-n%mpj%WDga}n~u-kMy9C6i#n4lONLh|w;is)vv~MV1n-9q zpAd0pkz!~}Qi(1RQpQxY71%;5)}^h;Gu4$0k|AX4Bv*%-kV*#Wn-Nx-F~1j?6s3^P zB9-qFSY(+bN{K0vvUgG}#Y{*gyQCJ`raw>&RfxeJa)yg7OMXrnJGOZ`bs0Zc$^U(L z!@gQHJ{5P*b*D#)+QHW8)gU0fukWbE`aCS=9Nyzyc`SN+QM2 zw3pcn(p${7WR5b~n!{f)?LQiCXo^~#&wLO65`^xTewD267m)%BuIQx9*}GiOKU*@m zfms;j7gjU1(aXDVOo%@2=fe*&!L);Y0@-}(9Tgp4^CN!1fI5d(``Mtb&($4oGEob3 zaOH~(Kr&=U5X+wx$)?|8lqL4Skl6}?bZ;mRb5`0e2q*M^HxH{goPPj-5D)_Z001&$ zMKk~aUu90!Yk?-QHo?0G>E;q7+Oj4Fs!)jBG@q-In|BP&+mhXtD9iso>c4=IApoKg zfGaQnsXhIXhP5+a12gz_pJwX}&hQzgpbl~vm^oT%wzpl-Fu_E5*L!dIX|<|--it-s zYWK4tm%pmhrk7sTN1dGwJ!*hD>TKyiiM4C9rboxst7DjjW)cL+B+HP@03c%kGcy22 z00sBo?rv+_agg<=tjt=DOcNnLVmCR7lB1UrPJ29OB@30Mh4 z5}*tL1VZ7377$*r13}pP06)p^#d0G_4Gw%-y zYt1JgUv>qCDuOKTz@tRi&=c-Mn`6+kTVA2sUaTCZ(CE(c>lR_h`Lrp@23WQSkhpA4 za-5sBbq~)_8dU5h`yzxY4zU01rtd`0EgE4nS9o`7m3Bt4!osxmH&LSqwF&{7p9a-ptD~_P z9*H41xvus2=JU8AO;?-^25OFPc_HBK=a4csN`;8-g!8ONqfE`e}2z7=TkBw z&Bh}Z!b(&rtLj6X2C(R3oD3Wfi523yPgM_y_rk2#K1ZmM0^#Gc%xQ5T`P!GWC5fST z1oFV-ovU;NEpgZg6>F<~iiYpskbCZ%-tkNQ`@>XSj~3r7OKk)?Bzl8(C&(}8V%=Vi zpm%^*+AG6O(?Z$R#55WnV#Nlw%Ug8GLub5EuW1*-fyiN#L*|v5O=sNYtHj<|?7m`O zqW3}!Ug|X}{Nr#4>-v(u!+P&2dz1T)FVD0a_EvqgUzfuaXUwbK*bE*k7_d>}hYaeb zoK?S&d5uFu>Avs}2JM6I7?GM6OO5O3HjGuzZOy8m^yzG$$T^oXK8nV4`Y$)EF5GSL z^d1lxQoLvC0SbS%T{*b&*p>_2%l{L6eje*5^j`hd1FU_#7c5)7k@I-phr`>1B*TPZ zCVI9Sn<6RA?)cwbjdx*dAhnv0-Tv8|L)a}rw56xAy!loO3R+>bHE&qA{)%s7_@(Uz z_JY#loi!@ub+gN{qW84@hV5l7WK6^{vQz1=x@d+08&X_5Y{eUO>%b^zl<}bfxq0ZP z3?sPos*Zo;);Qrm;tTt1HsLCz*xJX~tN(ZLWA{39^@waO$m2WkaP1l4yJ9GRo0e#D zrvDT3V}E*C%)X*5$xQO1OBpX)wKN36 zv^kr*^T67x88Hq|)Y|#}PpES{sQ2$#clOv|#fHx%!4JQAT2m!P>ichM3`JpkmEi=t z3-wP@+giTY-WJbqc<%dDb6T|x_F_LFEJ;`H5xWnl{@H83ZSLNy{8#Ww>Q^^*wou(8 zW^CKIdnb0MQry-VNw-pl^WbWptuMp0^+BQoPwFI{NuBNETLBo@deZg!b*!J0nOnQm z<;eKcaF-*ELjlHlY10WJ zCvUhZbw|UaB&Eb?dG<)S8>)CTo?!`pYahwF;Y|E0+zj81!*-jWetWm|*fl}Bvbm?V z3zz9v?t}BiUYf#-8#d2TPnZhQwB_@@6Xzd3`Q^#1M}1Ds=G_p88$Q0t^CuD>9{!t$ zwXor^uEsb}el|>1pyt?E^sv)XB4>45Nx*`cri2 z-iI-yfc?wm9J*FefDF(U;&}h|89NS`X2m9C`U~5l#UpNJ2_|5IDZi?1e)03n&mVDF zoP9kW_af4ZV~vN(YH@8N3D-iCWRdp5 zf-{lqZGVDk>c`)P&H9ClqXliEYrk_=Lh<>>Enw*$?A_(ur`A^+*X@wR7y+xu$V)T= zV^;oL84z(CT4@%y?ps={(0yX-z@uki!+9p^968NX>xlIiKOb)gOEDM}gar6}0{gBMSP%mZrTSwrUlM@BE=XZfEM%3_}z(lH{>rJtl?;I{iK4g&+7~)3U9IwNqILrb6>17EUuF{^C=`Iy z;aP(yR9MH8SU+k}XA+T4Tu5Ct-mMxOQMOeMjr*GZ!td*fpZ4z-YRVc0kG*5b(9)?L zf@ehz4f-5PjM9I8ZMbOFr`;Mng>HsJR+XO91Rzj^h5!SR`)F!Ta0W9%DUa6 zv}gjJ2u?ZROB5J{238bk{gBCahaodtwhCh1=;e_#B4A+hgW<|!F&rJ^lpeTygA0^) zh(KU7m&sI{aYaG6zO-qiAau(a1M+#4s6zx=1ET;kGS*{HhxGj-kRm1oZ9}f&)6w?t zOSW5dV2{Xz$&V4Nq4BOWOoo%qB?h$sk$k$*-L~4ji;B1b;%_j^n!=n!Du2}xC}2&( znJ>vI`J#Sin`ka+n~5OF3#CaiPtyz}XxSP`+bqG?RBoayn{wT)sHB{)62EDVO{BmK zhc2dyW|-!#NuJ(m#qne~dv58SN;VkON2APS+{g|`9=(JaYP3`gB84RjnT9I`MTCJx zqXaCl0EWYXq05_q5CQ^LT4Ri8B99Div+CKTQ7iR~f`ROev^o)%kIn@Jb22>bE}iu} za1a~G6}7nd&yPcEu;~|T+l%>d)^}={*wN*PB?%i$yC4Ro=5L)rZ848g*3g;TQCr}M z6;gy+;bUhu96;6pvIJ@nMfzzR&(~QoM9fpz=4BPtuJbU2jk<>@0xIM9MNQ^0N{~4k zOi8w_j%Mq`P_cw+5Gfjn$3YxlgE=10m`!N`eWb7lH|cf;T_^Oov1hLDgI^5>iSqP3 zG!k1R)1x0FMOp)$&68tp(QS6DuIjg`Y$|laC|3d;Pmlsi)O?iiur5ugu)h4rYe-?E zm|avMHeQ#TQgR>$9A1P;&*uJ71V0|^o+F8AXts0}C;9?a&_??+>q9FJZQTMc#ai>lu3Yb=9F;VuAdqen8Vs5s6HGGJm|X30(2~DerAv#<pfo=gZD*z$y!35w4ML3bvx1o29-%)qKK^(~(bkiczGD?bShSH(;0 zgS-(yKdD%u1M#L=cC8}XWp$@(Ens23$){D%ghwz>lO<6GIy7sJ8&Zr28pGeB3{D4Y zCr>bm1Jz+4M^HZO^#p>pJw##0R-MfWTA?I_Puz@8Be^aO+nm-Q$D-BqV<3VQkSH^{ zY7BjgYd{?lFo%%ijPp}WC?+$}@qFf`Bk!q|r~p@();Eh1w@ zCmEcCZgX))me?v$DA#~2z~O2Mg+Wlja5$Nirw2ncN;#+moHOfSyQSHzcbUw!Lpzj( z7-+FXp3YCGkI)EXQvCWZjZ;jNVYXh46O%7K-bgmw_$ArV84CPBA5Hm3^*fqLL*$YP zU<7^`Zn^7D`gy9l`nq4|sS0?sx7xegs`!8tD?HrRX7h!kO(=f>Y(ti@kQyYa%on}X zc~PS{WJUnFFGx#KnYK{K*Dee)pTb*F$3^O57Q1};0ZybFsSV6H|H#36s>t0G<2q>P%4-%IL$b8mQyq`f-G^U0s88e5@mL1%4vhB zdkf`|+OWxJ#!Pb^no8#b`3@#M!kAKPVT#H*P_&EIb9AGCu}#f~;szvQbsGm9gPNEX ziahb*9|)Xgi>f|?4>JJ_V?b(Ce--%;;UCS&(8~OpCkAqxheu~=u<%XtxQCU}r7$5M z%UBY2EaBC7@@PHL zxB37&)m5@*o(*r^VCM@2%0PS=-?N^HUr->cFmNaXg9*`}b2bKywuVHXbtG$LXS~8- zj>p_VT5+i;^_6Q4rLjU6-FzgFGte4#JOPr4=8~BHlVHPtmtE?jzUX|Lcje z4t(KP1uF07S=(TO_MoS7#FU9YV1g@{;C^#t!=CckVP8iOmCY)#YCe^-h`7B`qU{bp z@70wxRX|x~u9~D*8PVog#_4_8!kL=!qOug6U{GxQkf92KLLuZ$9%M$d%@kHNK5R_6pKVy^dkq4%< zSjTjvMCe4malfQC@=kuBO1k_2UO=J0fhvK7FuJs+DYVsv`efB1s4iS0`_WQW#ktm1 z9jy$Z0!S7@p&V$DG?K^`8ga|&)vxC=e#n(4?zlM;3<#r3YieDTm6p}*#xC>=4_YG8 z+TCi&X=8~QawcC&LnJea(HTpGl${IrMP-oLYn;r5G3{Eu9Qu7!0u5of$%}u6ai^u8Dp*B#u1&$ zIG4%xCT=RTwK{T~6c3z2QBiX6EJq^dCM(ZqCSC9^9riA&FwW`HT@nl|qjMSZZs(dB zH*wuo%?wsHxl>WCb>75tM@VFJT$SYkji5&kB>~HTx|xniIJ(S*vHV))opY~XmnzZ3 zGH+U7P#d^&^{02aGg%o)t2Y(dTB!x{$Iqqukv~du-Bd)5d@qdDCkryyG;%T(M(b;> zU2x7Am0Cn^S3?(ZO~j)Tu;8 z33>T?16;h>$x0cu^ydOfKq8DUE%qmJwQUNdY)g2=r$b~oTDq#A)36*TN_Hp75M?ED z>-SQO$t$@r*>0%Ju~C~^g?GxibGo-Dflv#*wg5m?6eE`^Y04*TnQ9N*D4h8ytp2?WpT1{0=JwYezpHLBjkKE`*Xv@AU(2Ejj>`e`jiOidb@FL2&dNPe zuF|Y@KsPx_R7C*PAv{3^7>vSsMg=MU7XwlHTO;R_&X^SS?*DzXY;3@jSa*Hj0!Ch$ zXt+kb>b-0KyU@B?4xIW_ymH!mo2?94&tuE;^<=fnuerO_-(AFCFHk$21;td`uHaAD z=rwGR*f~&u8Z0-+4ZVWz0>a2~WR(K--#N>4(|w{524v*p9MsxZ+eijJAxL`?J};7l zlkE?!!%r*!pHHbru2*`+3@ptmb$!TWp2|OdIC3_<$s-5pYIJ|-yAPj8)lALF(&sHo zs-muM&lqo9A8)#_xqD)FWjIGXW?qw5>X0KGwnr8Pd-GvLQwRnS3m_CgB!EDMac!Kp zpKUe1bGEewUQQc}iI~1VO-Y+W^yjRIetTbGCzPMA?$!aNmI0Hy<0fWyRT;)risU?G zx&cU?JWFTG+XOOc8Ysb$(vmRV%&&71?~wD-UAd1PB<#5(4S#5bpmGwP^QBpYs3iqL z0-#72a6MYuu;&e&xZ7#kbA&p_oMH?TcpAEbyJnIU95f-7*DmP$qyJ;cBs;#Efr+wB z5eG~{pOF0%fd?-lu3gRoMu`G%*X>~)m2fwIdPXm51@8IPaUhTk`~w%$&GIG$5S<%W zwZ71Zs96~Zr4*_X1T;M<6Pta6bu&^G14;Bco?R&H{sh^hyD+zU(=Zd#lj-IACpr3C zp8Cmjli0U|W*i#@ zPXj!*R)!C5)cdFUjduYpK01O0GGg_Y)#%n+pU1givf`|mlLm7t)e7GGA$H|vLuC2{2dOIE3jdxLy({5|jplGABom}v3@op0RwNz}jQu<}?H3h4o z$JTP})GY+ND9+8yu5&P^#adDI*HN(uO^=u9RxQpa5)W-%)b7XRZR^tP_C@--Jb66S z7#>5kL~Ab=BgT&zcO~rdY{9|?c`x|dm2BDRUhK}ZUI%|Jnk!rOwAB#9?etxIv9{necacz$93WvJM@Lx4 z5m6As@D0~dBct2^#H$=Vzdq|MrF*4f^#Cb|Ys9P=zT zI#Qn-8PZIHcVYM$p2!-EQQ0$M`iAb^^o8GWo>nH>>O6%+TcwF#>&4chl$BDdj@Y#h zxttZsuJ0kK?1~gmF;a^WIlV$`z;fb|5$+~!@w{wZqV}mFK& zhXx#9UcKsGiJ$+>N5OskQ4hdDg1Psa4$xJUd-l~Z(jW3r&Iyt*o8rvjK^g#NL17f5 zW1s3rg&V~-HPU!g)nhxCs@qisDx^_Y(?C_UUq7|4EDNE5zH0ERs^A9jC1yT~_+Y#@ zf&8KO=j5C+!{%M>n+T8h#r%*SB{oRr0#(W$r)g@!UtNk3r5WAf!cxjD4XEfP7p)zX zxBU8f%TOUXDB}v7=QQ@Hvk$$rEY~d}_=yt@>{BGMR}QZ?_g5t#zdmn7cN_|TKmNDs%ciqX&ns(iOA|%+22)yyLei_qio52wIwG0_dO(`iyIaw^w6*N z#$34YO2U9e{p!37B@}#qr*(}t1kQB``dOZS279*W?fF-4QMpg-qz~rKD)|_rQObeH zv|52E)co*Cs-?90u_?ESE0dV~#aHFrg+oLzcpW~dcr}0BR~h{G2KU;|!Jl{M;aFzc z<0V^04q>wuTkRz5d{=FLBXOn92x{6p=~CSUxVkd<@a40srLuilZ1XKR+#?SdN503& zI?R3kQd}_rul+IN8JN8)!h(r@{j+|-1WYjL7ue(ft@v_u=>N<(#B@+7NDj0jL4L~+ zC`S`>EQ8N=5EKGe4nEqbj83v;HA`q=4|D6;O7UikiBbreOhgGp z(SfFz2~JQ%J#wh28vx~5=_3%j3W4e%W^76=Rd+4=^`4V*Rw5hGGF8Q&){&I0A261# zt1NVh#6vi3^;4c}i_A}~}EqDqs+nK+I*O1e#7Kp>?qhs{WNrQ?vg z3gPM~X2MClAEdeX2f+SHw1B3D$Z@oFRRO0isSm@7hiND{pq&Lc1;Fz_kc5exj)<&< z5$0dqU2?Bt5n@wmvE_gG+fv_icF2OXhE;K=bpcH5nD{h_e4PnRv7$h90FoHi5=113 ztc6i^U)%%8OhhBarqW^r)}A&Izh+t&DT&NS3s)6+S}~3#(8&R%T(}zt8d#`BAvh9G z&gNLIbX0EfNGq$M?s5H~n!-u>A25^q6N;FlP_Z&3^Aup+RA*~pBI~f=lK`M;^2eW# zKMB#mqM}C59K4%}$}k%7tAD3rj#>PzO=NE5*CXHD@ItA|lFZ5cl2dW5bp(!yP$I>W zXaWzM1?rfD4j>^dHzc~{;}Jq$g}Rntj=`iS3x5dA`bVOd?KTc&sJl`LLu zN@z=U*k04lO7uOH$ZySNcQf;Dpo+?@qhjs4)f3mF=t%7m_bF}7D3yvhwjA}Ar6g}w>66r>p2`f7o-S<`OQtg$@OSaGuPM!YRGrq$wx@!A*UV_^d}&F+SZayMYh&byMQD?8YbxHn4%Dx1yEv* z6kL!eQFLaq-b+-4QGQ($pPVu&v8}b6%+dn2j^h7s8R*vBi*99W=4xPDEo`lv=))v> zsEcBiL|FE>Cr!ue3o zOIB)W&f@GZzFRG-^o}^0By?HiWK)r?b&;q5W(jiuMYtz}N{OBjXi#y=QIss7@@o|U z5D*Xp00jU;Lq{Y40B>}k>SY0yMn6!W5axGw>_y_2kX&UvByt2&-7Tcs-x#_x?3o83 zgkIA3@5uN8z|0ibi~s-v82QHP`+jl@e|MkPT970a|NKr87P{tnj?(n`4Jp!6=F%O5 zUNPzYJj6E_a>DAcUmHjU>(=I#K)`5{$}K}5NJc7J-Wk|3VyNX<21=3+ut`-^I%WhM zT~zn?n^L{GO8{{L0GSymq96eKHr?LK+?Jb>+`GvhedI(ebIXl8mi#kIj@Bn@*S2X+ zqgqD*i3ude4q)0u3bL-e2yh{Bh>LJspyncBAAs;aHw}6Wv#JbGW9G{m zW-2$Kd;6rb#mqW$#+~GhZXa2H{4yl@0)~CDY0lZu!WF<6=ZZ1ZMNkE_MBl0UVs1TY+(f+};bx=@n_VmOQ( z0t-XO0dfu$0mWcQhN!lTLc}3@rc_p)^ggYTj!Z{Q&Sf>WH~z0pgu*Hszsf1`spi%> z7}2L9(IricFvfsv z5kr8Ioo-RF#55EG?7Cf^GwA4=f3tt1p{1vwq?7D_20ue?+S!k2k}E9v&3 zw2pkj!b12)J{i=xw{OediTuUc|LDtiuIJ~v+M|id7giWzGqcHP2Ba_tJkqgyII})q zX-G8}rFVi~Kh{c}iB7-n+3Y8F4QpodIIWwkPoXibjpqILqtZ=X_;Hxk*|jyy-@1w9 zx~gL~4ECtp{zgV!T)vA&oC!BfaqdpeLvC#osV2uF|MR5DEw-iX&h;G50X5!jS!QF| zEEQbrzge%Poc;VbOe`HaHu2>(@?g+XTyzU?t+1LSQ?k3@+L$W8QlJxLrn}n7Wi3?FcL?40zOzqUyR{@G#s>u5t zfm{GuD**%1fK0N`qf^pxE0c5WT?(>;3|RxIPGljpFD%|?5wVu4q3DIb&!X|4o*#l7 z*GqGC{meyY@AftWU-7J}uFC|#skAPh(m2NLx_M-9VOHA6YBMs{PB;$PAsFhpfp zmQkR^E0`A3U0$EXI9e{{L6$1{{N@VhJAzSKu}Bt0Tn=9cIWoEo5Ct!#98)U=DEPie za8)gcz#1FNQCx789%)9^Sk>06s8yMRpQT6iW13HPz|ztM((*R;LfDAREPDw@viiwVFhBQFw)Sis2U_%NUhY2$iM(m5Hu7@ zqH$V6s3_n@;aLWQnm~q36;@2fnbm;OF+W|OO+7|RY6R4dQ79A!3Mt%1chD?PDCjnt z;_gG7K@eomJTo+bc_{|$oIWi0wC-Df3Kp)!E_x1olHamW*?QnYSyrG6DB`vg7dNm( z>=Z;{#7v+45vQ>4S_-+82&x9Y+eQJ?TN%Vp6$TsZuV)pV)D^821uZ@E4?R$wwIx{7 z5CVjRkdGT~W_%1mJ3b=i3Nx_~!#iBd6l8C%)>YP1)59Zb0E7h@q(eqRD2UW6WmL6l zeVL;TgI5sh<(bkn2UdHidY`5SJzMuB>!KQ|0+vA5gWawd3d8WQ7Oy~@wz&sdQma4u z!(R3jUZu(=gEEugA3e3d-<($s~7HnIKFaBu1a@_Ehpg ze8I^rTm5;Xkre{CI0Z|LuLcmLTM`(?7R%H_6Hj|D4^$ z+sxlz3%T`!!Fx41&%b;#2kiw=j2=%@Oy-qGR?)GZa8xiteGol%J)%v3P9o-SQpvGjU9lA;;wZFGThN9YL1fT)0ofM|eBfQvhroQ5{hqUmRQ zsI1xUIW6RO21PZHJ}pvW^&=R*e~%J<^Kt&8f5q=b#G-+$z)2W>jo?-)N#~g7Ac7jC zHQ*4;!9bi^#vH}5NO-q6*S8HvvYOuVr^K?KV)j{`8+I0jjcyVPZTm#(r8+ISc5LcM zRMz+-5FuANj21%(of)uXrbHE z2|z;KB0|WN7o+_=pRN8F2j-0T^(U^|fm2POMU4neW$jeo= z@6+JE(b`T-7K9&LF0U}Zzh@8WOtOj{bvm2-1;TTXhDfx*EF8`Yq_YSPO}IocJctYh zZFp=uTzzg`PQzY3KdAEZf{ShM_IDMX*l@ED;o`L!}9~ z;tnLYh@M@){xiuOxaRqRmb=*kW#nC9<`IoHQ8CmHJDMPN#t@02?WgId|1Vb6G>=XJ z!5|k%7bvb~3(ba}#{%szMVA&Ph(CX&q1~X%7A=RaYgrBFQ*7><}V+oI#CoX*7}OKo z5M_L^Y%@qQ3#zKRuk!$Y8vaq~a1_=<8eQ3%Ix6b>Rns5=tB*5hNl|=NCxtM<9rERV zW2=4-xMepxGq`;b6VJ^v4@a=y{6zsaIp~p31RUWE0qG(FgLB$*(tFxvMkt15S#0`uE-UnFPukCK{H>3gQvZn4bE8f; ztQ1hQ+O;-Xx#N6MM9IKzA-Gr513i$V?E_>*l5e{eh>64!7P)dy&NQeeh^%EZ3rrNB zQt`b9s5}%Ki_If>5Cm3nKIV32bx*gJsuttu_p!?AiwExcG3}Ab$5U3;3u!E3qy#O% z^TD9Mi;6Ozq)pgPAW2LfF~9_5d2=k*{0xn+9pj6;xYr z;ov@;P$9hRtY7P%4x^;E;+v9Vo*@T~M<){a_)3W@MHG9;aD@^Ht0FLGsi3r@pqf-T ze98K6XW`2PeW(GZfh-r!nD&0fIoy(NEC_tElsaMtXt!3h6Ab?5gDBr3?X)p@=HiX= z2mw#vM5yM?#mdoN-R?7gnpI(=k9*qYEy(01;ZbFIWZhw4uerv8$D zO>;SY<6QPi-tV|68O6*Kp*_gueH^~=q!Iiy1!Lhs=6hvYMj*?{hN^yf;})$|+=^$~qg(6n}j z$O|0pp@cC|Kv2$O~Z$fJmyGCW+8>wMBvQt$ zW&G`6Fl&sTO5Mfig=mvSdmm8R0FLIUEe4^)OqDIU_S9)U?;3>`2of2@D%u2pb8;X1 z9V*Qs16XWqxqsfp^l~S_r#FHr`Dq;aT3{TvDHpq4G!i!ro8lC~NXyqdp3=4&psz5r6ey*_jNgqFaJB7K@ zU58ahg7`ES8aSG|Fkf0Io#&=>sCFNu^GVmSTdJb16`%Ig)p{7st;m=-t8~-UQzX_e zNhJ&+YfT~C<%v@eYL0YoAK7oQ@MP}i%l<|GkY6t;I`r~onevjUD7jOS{;w~KnPn98 zdw2YmkkEoj(_&A&ZGDo@%vdg(0kHTJoReT^0qqdbluTDe9Uu!lXvud~SNYEw+E`iE zcAXKPs6T0hWX6C8XvVcVcLWy5g93e?Zg%YKbR_Spdkmi6Sy&S)=b9@N`sI;pgGc5w z#u|jd7m?kwB?onk&=8b~FFxIQjxFl*Pct}M&6f{`vKVyN)CJUGeu*tPVZbjO#YBL- zRAYKLsJpoZ%IR{OVzPrEG&9C3AlC2l_K?KzCDO2r_#NN$SY3yep}*YZn;KeJc?aTi z@aYs?u-fcUWE4krfJy8v)?|$Vh;k#h5ar?Yu(j!HZ zWsQcT7k!3_8-A%&GD50kY+)1vWqPiRirSG0K>H88P;bPeT*516N`=$Bvfd(Qki4b(CLV=&+voA@+D5V zSBKMAD5^jG!||NFb@6l{-Z=4VBY5~YzZVC;CU}CM{m?$s`%CMMI{SWlBYj-{6f9tIf6+H+(zIz`Fpu<2lI6Xh7=!C;T5HdQ)Sq0w z{V8S;6COrvFc)$pMbo{xej(Lk9EL6#WaTk2XzGk^89Q-NW$USMTuD zew+Gd_*l){43&d57w}%8xB8KmosKDznfh3Ulj2=?v|_l|p%mbX%!{fQ-agv)B3Y&AGBNRZdZ3cE8)}0R%~qskFTKb^(?y=*D*7rl~t%(phvJ2nM8oac0N!X~c4bJ;&TgS{B7 zUU@^hP6->b^RCO-7vTM?A60L&c|J17qxT-fO|tWjPq=QR(#X@zT&%X*E2ZjwGwqyh z(-o&T71d~!>pbK(=Jp<10KYsm{NvUokLoRAl^r&&*4VUU+HdoXnfCBWKI`$GdDEq#o0}+vq?Yr zfHGrSeQ{+ftdDBN`Gw6B{gQhECVHlfucG!%KXbVXFX{>coVicg1#ncJ@Y4D&{BY`t zUS=Qort6H$x!`2QUioWdRh^~!z7|K!%kYaG#Ru=RmI8It{v-v(_U&74ZJEIcxQ>j} z=Mzd`|Fn)2r@aS}f!4pm!~pVJ&{9UDgewpEpUk%nO08b!T%LBfs`;DEt6svo=?F8c zPl3ViTk>ztRG}=g-2brWP;bHkyDK&|+T? zV9T`l3O9j(Tzk{(z00-3&THq5y>-`jA#pLSb}Z}C3)n?d_j}8RI><(L4aLa_yyL7U zOg2B|>aaLo799QDcj0KZ#&X0StS*`;@QJ=B=^vs(2a#lYWE1X9KExp%fSU<%+uwsV z;J(KD6zSWL@#|8u)$jZ95pN-<;GV{JG`zdVK*A?u8n(aQ2)-`V2f?NImv<3pAf~x! zmWfAoxZFz;ZK=6_PH<4z{vem+!(RcB8-MrBpXyg>rR-6hS6^z0gCTaL3XgUFIi}(5i_= z9lKz@VY2Sb{)~(UYb{2BT5HQPgyxVeDT>fOlblUK*B7fANcxjkXVuuLE7E$a)Vvlf zar<%3Nu*XX>6@Ys%TK?mOl<|NS2MCj^X6kc8JUyw;8)vADLB>M_(sjM<4==7HQ~F$ z0>TW(Z%yL{B^Us9A%v5-4JCxAASq?@^;vh4s)O)tMbDK;^tJ%H@FAc+OVkt>rN$uS z=z$zcIi!Yr+~BSD!(-#p`747xHu=~tBTJH6?xj57LuCq3Wj#`=#?%ZQsfiIFzidZm zV#JZezauYO(2eo%e@W>uJV!>bh)?m!9C7#(FXgG=AJ??n6O zw6y-KZP0!^!X3p&!nZM3lvui{@6ZOV_0_}tKn}tmVkQ}(*u7uCIlgWV^PJ&hXQupk z@>q z{u2b`+oJLLKKQpev$UR1!&=m}u$QercY{YL1kBG_sk^J3+Q6=M|1@KKybFq-9t7KJbusgBBU&cxfRg5A@HjEk07zppBbC*sYI@_<_ za%aJD!a)By!Xcnen#;yuTrE&SP0$1)`U>^2Y( z9o4dDHL>5_cb1uNom{#8RCe>5W_1I6=qAE8Qp1dL;m7=g%lj)8U%NK}F*|Zp2xM4F`&W&a2Tb+n8@Da( zc2!#uuJqHOxWv*Iu?<63arZcxmRe+u%ev~!D9TT)Z3*~04Ab>l4W_Rqss4}}TM2aQ zYN@JaO&v~@EzDX_>XX~g_AVPak}&^SIx*+~R?IVMZsGfblpT7*CFuW;0Smp^yoBcw z*IR3l5MOCot&U&;hBHrpRt!#O@3?0chLFDk26_H`oiEoQ`KT^M&PL>`du<+LL`7VEhkt z8m~rQh9&uym*1rDu<)q2ByGDI{O|osGqd7*dQ<$%Y1Jg^GP{a|mY~!x63i(nfI&`8 zm;67IM=v)CUeFo}aIohJ60-jrm#-|FGY|neXnSfas z3jpxLixE$xEuNr%{nxC>T?+^tk>z(N<;>z8?YuSfR+bFnDi8J+y+Q$EC$^P@&v*f@oYwcPKD}dcx`PxCl`YX6o&p-y(UC*E~`_}hB^a=}DM9}oJLv-<_+w6mw z9w7#f0Ffv>hXz#aZW#I>$W(0yB7;T9${r*U(*=PElrE@APMmDO#cX|g?3hGq{z(N* zMW;mTbZe!SFR5HhKjp9mxw~r3it92*v9TtZA)?O_&T>?kcF<$oE1!)>AHG@DE%|YS zYuMGI`H$%d+cLSlv(L46e_x}%jepcXZaH5RL6J`ZeF!f{zBQmQ?XMeKH)PUht&6hn zM{WY~;gzwdBRTGCwOdAMY>7L%P#^unb09R%fUQs-BQ#W4ljXLFbBqUJwJ;qIblheL z<6jXqycK_Adm-g5Sa=hP(Ajyo2Cvp>Le&SDi68WLcvkYllPXCBp?;)Mat8HNSMWM;w zR;TWYivQLpCuMrkS&Yr2b4Lcrwh{y~r`euHxd1xiTmVS{pdJAwRAynVNEYLRC`E(- zwB^Plhlp^29o$fr;|fi&dBR`&j{{`lTD!T)%Qxpn3Q^6YCFT zwycA^bnoV+Of&B{uoF1-505?lvsBQ$vDNV|$GAvF009gL&V@4}kVA{C1p#S5YbON4 z7uqLAe*9Bp0BF#us8{-%3Snns=u7zha9sYMyW=xta0XsBUX-<7#@~hI)*h@wiV^;= ztU;6_^#)2TTm~@`T2YA?73Pbi9~IUV31D-=v0`I}_$k$P-&$Fs91*`MICZi7Mjv-x zYLfm%;^Y56jKhxH92hD*X)HB_z@5Z~F>&VsWc{IEMf=#>KL_O5F&6D{QE zMKk}x|42b9;sF0K7O=uRrf7#3z4W5|Z8$H7>;LPv!`V#IAztoz%rX)oNYwlt5j`-i zQ{0}IX+6kA0jL~&PcmB$QaYZH0tRUDC?G?Gvmz)bi+1Aw=+R)ZOaGrH{`b6+g5oVX zY0*K!;aL#>qF?K6b!QQp$^pbwK3(1w7I>C84GOdZA>Gqq&;*)N3CFN_I4IvOc(I+o zA4NXN3wCNYyw{TdrBC4|=|3xY993lyR1UyhM-qst)@u1Azo}ZRtFUS9Bov9$>1(}kkWScIqbc7b1Oh`fnOskJD z%SK_uARXW-{#(dDNEZYHhaOvd%0kl^xEgHi$(eFvo0=g;fyF=;>JTN*9ynbA?@Ow+k9xY!sa7wc1fFd0}vPvZZOKJ1bp6$SAWx={^{I*^{1cF_(%c=3R!*pS#+jM|g00cwG=NTBM&Mj)SnjFyN`|X zC``EPvN^aOE)5*rboZR8)PswM9=7S{h?KGR0u*SzeHtQ$I}dmRHR%jEjo0agb<6#9 zyduQ4*UY2xq4p5(?Y$*nD9jiy%XHPH+bn>}02Tv{A=~k$f|;(y#L3UF6mvMgEDlze zO9h8qLj92V78^dThcb;+h}*-#w{W$p@v}_V4Z2MPSfF$9U`@#g1+G2vNclMdz>LGn zpSeIdJ>li1!J(z~qZlqD)*pV}rosS3PRnU?5F5%tZxm=O80pDL$>C)wM}^1la;F$T zlUXvnKJtFxTXVz40NG>?$aI?)u)t|B7;nZ6m~cROAd6v>6Y(Iy3_<(3>2P=@R1e8- z(cy!7xXIXMQDwK|X-ZV4%PifH2SZ3%4h6;E^GsW`0+L>?@Mn*)a$TTUO0 z+4dVFlen1xU=R=k0000pL_j0}0AEzMB3r{k za4^i=ypkkU>HBwN`~YBN=89$j-~kKJfdGgA0L{n%7NG&&`*-*4eyyE*m%sb#wOMU85ZT@5?ronccDLD< zb#0-dTZI%Yf9)m|TMLN;BaU{p0wZ7-@I*oc1Vn@Y3Dqf2D4&QF34|pX|582}jHF^o zT6PkrlB=q^{hF?}uBykYuGX-$>eS|S>4Zj^eW$5u(z6i-(g|gv6rqo{L9w+yxd;qx z5K$uMyTj=eM(1n~j zU!n^IHl(ihAh3F==|rz8G^2l~3e}+TTYv)uj7$+k{UVNBNuU;DXn7OqG#DMu(()if z?r|j2h51MB1Gs0MexZJj-l2=j?cP&;gX!fsY zTr$T|P~t5j;%GpG2XJF}+@Dd~SCG#meA;Y)3tq^uKtHywbgWJ2b-qycN6d%^mp#1w zb~;Kp39Jl~M8xgL!1%y!1nbfwxAd(W zm%KV^vGoQo>O>?81HgqV@g_Ae4+@d-S~A2)17flb?V>UJxRurtHzT`u0@gKj9d0No z2d7o4LfL76E?F^X6>c(ns`7yXuQCb@#H#fKd9w;Y4edDx9&8qT-W6zdIU zyN3(06-9QyngOY=cTj|r8;Eo7|I6$w0((6v2F$>kRqN#`A`iqOee)vq; zq@yovPqIt$?uNnAB(ZW!f(gir5iz1gM2bXw7&>N`Dh(UDc3Zz=VboVkRe{_Rriq%n z&KPvwK*hbX)Idb2Fb`Z_G&1_rBA(WmMdEon7z_s`Q6?BJ2XaX(B?2Q_d%CXl5!^V1 zwANuF8rbBeiBXsg$sKFEjobL-k(fX!NQTV7xCq7YW941s%)^bko7 z$_Pd?K#Gq)2`g)L{RFi0-SDk=Rf5wf7#fFB8jvO@im*sJ z(h++kjEH2$!!xo`#R$5^k`NH1&6%6X3I>V`72$zlqhe&OF4&l9?4XPxfE+|MHd8vN z#kkSgj1w5Jx%PJmTLU{?WrZ{($))D*HkSFs2vLx%W;tP2MC1;oEg*_BYv4dKV}T+< zg?Qk{S%hWdfU_(-1JLpwJ6T|!gpzPhm$$Vm6ayog>s{UEA9%K# zAm-!YK5$DScd~kI5cRG;ePF-t^}ew1P71FM3849L+UV-UlsARZIPP8JPtPCWq7?phi41e&#d zy;og%t!#jvj!Fw7K+Oy)#aVkqJ~LvaGNOqhi||3HFb!NJM9q4h7?udfhL*dHFvlPCNDuud?cq~oUHLEa6SC3UM1|tDd)J$A zMVNJ=g0(+W5C05EgA=Tm?a}&pa_L3Ry|$XAY~u=)CCEHtNR>{s9H?@L0bUCIOCXhnbn7E4 z9f>CZZ$Buw*gvbhNiB{cS9^mOLhAApxy3g+9MD?@{Ok+d|KCvWMzmEw7P9KFyQ<$h zb-7>Y)yE?O=h7Y@)lMt@_}bqu1WHAlrYePUxmQK+N3sff?q)h~+!HZC&dkh6hF{47 zanXpfl+dprgi1pbOJ(%``zHhJa$glR}iPO%+gWS=U_ZV_A9w#jUG290og@v4pYv7W9 zVyyzPoWvtJJB`F1e&*Wz5;)M7p2wTUmx?1KKV_3P#MwCf&Bn_%3$H09%;Dl@o$VYu zK6IO2caVZ1QmTSHQgQngaQl>Cv)S1;xmrlvsB7jo==|-~0nVz;dY$Y{g(N1Z$L2yPA}Ju175y zGa%2C>t~aUtyywL*4yEXNuA}~ADSax3ihR67X#}1+>hD`EZuEClIY0o z+{L%w4gz$8)5fEZYQ%8U$&Q)Kz+GK}DVt}Az zrG`Db5zfqkx-`ke@N}D3g2=I0cIz%~^|LdLdMIhfvuLf^S;^1&oJiWoQ8XBX+{^>O zlm5v?Y3JSLa#)TZ_2Z8XCg$5?iz4B-zrz{4+TromV5wPs}w%Bv@Lc7DA zTnj}`u5VuMZXG=-Hmi%?U;vDy<3HiA?hg*^D&{L2y>=rtfh-){W~6E&>hI8#ZCMkQ z&QSAmHeZ)qywiD-sD5uzecm(2k?zMX7&1`LXpd>3Ndo_7x-xYs4>Z-=gW~Gyj?6Pm z>*G>?i%b`v5nSJR5FX~(JIgwTuW}a1$%sni$)SHF#w&NU49-yV!O9vHB?~LRpMvgi z1io?LQ_=F?hC;ojCdH@?+{#BsX+jkTK7^Qnnq^-5mc;E+i_S?jox`F$7{6kcWRNrP z{;yqn>NZ!2e;nK2=I-_G|0R-?9h_ zzcn=Lci{kdC%b>N_psb2BzLR_SO#gXAL;~SH(4o{RziZx?tI5ui&{MG@OaZhQMs~I zm9qYCSMcP+d%3RfAFvLoG95(oN8PlA!nYmixsS6$Ue<5?9(3FE9z>5Ze{%z>vOi2U19OEzfPG)az<0=6tku zVPMukg`pHt;7mtp*d16wNuT2|7LX|{=ZIJ)-e!bd%8luH?WnXgsO&WE8_I~vJF+~I zz)ZwIb7JBYG$SZijpVO2qwD;X_wbbYV>kq&T)RP!oC;MDwd_t66ob zDPnpm_JdR>N~ej95Rp&#U!D`fmJCp$AI6CpGC{{Dw?nAuHR^goRMOD$B*F>Ig&@51 zP{5sc0q}qT`9yn9NXvQ~3iXznD#~=$^(9OHcJ01%K-z4eK92SIs;HMbs$=Z zW=2%t`kL3efOe{qZUgX!ehz76PZSvNG}j+XRug$;eF)^*e%`PXru%4J;QAq4dek!M z0D>!d5ALN5$pHS#wz_V1@DDDgeJ6sK&JO{z$p*yGDWVX+=r98)-Z6IHOoMH*K=)KQ zFvDH)1iq(y*EQdH3;+ZOluzFNK3dn?RH(Mp7Ga?KG8csEXQgxrQZNAj|I1cH?}6>C zAM{pb%I^CGXS?|P*$IuHx}*x~2!aYdTvr5kHcd_`XTP=nHVwFUiFcrHj~JPt!*G@C zlD`gsFX@#9=Vk(Qf#a0raJWDcdm-E=Un!>?mg#wa61LFPvr?w()wzu|x5oFG(+%IC z98zs}0YMnBIp;pR;-yjwc6Ytak5iHZs|1nUOj(e(k^fW}xUiu6A}Y)q}%^xcP${|ur^ zLFoyeGPVlnL{&XW>=CB8c~UVF}3JF0EOwuB>;Irl`u_P5)PwdT7S;z*H%klm?cHB)90j7q}EaxuBgz$qp(#i*dxE||Obaxw>7 z*6WS9;vMBF(k3T_*TIe7XnQt=yOz~YOjE#p4y8At#eBHj1G{d?1OYVHj-@ImJ(I7VLQKbKi&`E4Ac{a$1e;d@ zel>Pv_c@?W#sC2h>RjpkTmgsRYn~bCNuwWU{+Ienn@k7z`FaK##QoGG#Frk3K+0fR zViQLYT#cI4ahY_V@5khA&(h27SMxW@%XC4F>z)qB!Dz2s*8r2K&e>eXQ;FasJoNAa zU=u2Us^)f)3_CIZo+owA9O+Ho4h*h8udJ1E)GLUcy$N>hG-(TIg`J!1I7|7X^vxjM zO*a$e0@gx$8-1oZD4l|v*16Sm#>LK(Hd9;ux<2o5*UF;`qD>0{F!Du3`f&dN(KG{Pw%l`Y5&j^QDP%PcDpiu;00_(LOD9&iAlBUFu&f9$C|};|S@(6iSI#}H%~3Z6ai97#*~!fmE<> z#wQVsP`e=wxX3mi0O$kDg#eE8UgfC&RO(P$ssqL$fQzL2(6u}-zzgII+NXDFZx;}2 zv(KxXXQKp|uO|vCQ{Eu`>>(243Y*j#2ZO%dyH>TkOREQn>GAS3{|9MeD&A7>8gPVr zUo&wd#*geMT_NRGH>?n73gLtpd4&$tp*}ErBNzX5Cm7Yj)z?6}1C6m*|9-op*2vldlh`(e6OzR(KdskeIRqj^eN-*txS+^Uv!z#50XVNKIn zEbw;2dkmjw4VD)pTe~jQCJSUUh&P2jpLW4#pK$-i5Rw$OE=r4S{ zYtK6Ro0Ekf{^J)j=2=dcC)#~bt@Oqi-p=hkkuO9!Dx~)_jtKWX-{<9HPkm{4o7Fe5 z9<>*0$5wj_QEBtlsNZJoBLCXZb6V*dsH&SJT`rXj3-z_jaPqTx)SUFYSUx@PNez`1 z4*IAYb`b9~C(E1izF+#9-XZFIDcH#W_xJhz-1wC$id@3R&Aj$Y1oBp4Rrwray8*^GrIJlf|V=I2Or>bL+SrzR4D@lzOU1^Z5 zPnz9Ss(=#-*4Dy%Ig9VM`4KaWX~+skjk>MyR9YL>dK+qwR@3|Pe|F*j9{HBlTWd`E z*9l)VDvC;^<7xz|E2gUOtgQ0vhO4IdceYiz)iH-*LI&hd1IGVcH-$yf?AeeVo5qU$ ze@rhVXD1VoVtBNj1_;{1igrUvT6;X5SoezT^)m*>d!K6lQ7}98_u_!06W`o5cEs`b zGfg=rdVU4X4?>)~RtL)bUcKtcUbjTWF;!3SgH;l&)*(7O9+GDpRcg%Vm#RmGP$_LTEU}7y0BiMYQWD zi3kR0BQcSbn}Wcj7bH+5EIJ>I_#)3^GXI@Q!>6qpE*#54U??$4{Q>mL%fQhrQPyCh zVe+J*%V8{pKVxL?Q`od=$VFk94j40By4|{zv3ZL`kwsNRz&)$^Vl*Mf5NAMi$YX?9 zAO@MYXRRTkJQ|G)N4Jp)@PTd=?bY-gi<{{3YH==XgJl}s>Z)tqFR4ZpS#-Tv+*6Pb zcsN7hI8u(X#Xxb4RS_VL4&{+4dZ_|Dx1!}nfsw{O(y4UbtZ)NraiEC>l(@5yf&6&z zFGe01gGe@z`4Cp$g-x0^(cMeEeLMpfy81aof_ETui}nd3d#dq)bMQhG6wQFO0y@F0 z7>&p9j7VXB#>d4i$cFpC?`-KUj=ux+UM#hN-4K?0;6bP`4_q=Nh(pmKkRl+wf{`LD zN>RNwh)3f<$+yUIpTJgQZ|T%e9OKr*!jZNRbR>o3aXb_SO=AZ$^Vz=#EbI)M)q4WS zM_9~lq&t^0CwLDs&NinSAGn|#1lDsx0zEs?83?3-NFgwk3Z-a}@MxL<9Nk7X+Xs1P zO>dX{8KC!Iz(uYQ-H?`h_D&#+svv=T2l0{&OHLV@DfmQm9z_u`jsjy@Mii2dCY;>p zFtV#{<P$2Q!XU1v*d~0de=tM@gn0xz`VtYjpTfz0S;SWVz8EMya#1 z4DOBcSh)x#3v%K|sZ%0kxHt&U_8BAj+!icX35+%N3cCmEnTg8U51acGk1E?hk;oL# zf8OE}8J_!wa*(0{he41BqP*`?u%KN0XYsOa0Wd;^dEkE{81zU>M&X{wz{D}qv*bt! zlA%$Z*wHUY0HhEQ0{{R3Gea~q000kFCm3nU0!KQbhoQM*aYh0RWmAfGb1;yMK1KY`50!`#rz+bZ1z)4a)c4>|NUJYdf2* zZFiR{3IQlUN|JLB3aEi#%@)fT1SkQ75I`jnencYz9r29HLJ_|}J^}v0?Gad$WODA| zSN3~d6DgSmJrc#w>Q zk+^e(_0(z^U7sxb7?;TVQusG!Zu0bJYa&M}4kv$)J%@aCT|*l0B4r%nJmqXEWfn6q zlq-}eG)u<2SN0o!@N4(3_g8(J+on(X)TR3!!t)M=Oj%I?2sIh&=ou=86J{n2m3G)L zr+E8dTzu4}$>6{1l2|YENzMKK(pkPmU%%}GkY#l+9$GPTrp}XTDl<$mFhP@GOjsD> zckGKBz1{uwVc(^-#`A&dk8_eUuUq2Pd)>d@;eB?0*=-Ca`W}h0Dao<#M+;ipO&-TC{UOyDoWnC)O;pij_5h-^u4`KTE|4jk+FWz>}bNfxqTx^~tiGZ*m3&R7VnerEh2=`>Ug7$&H6 z_`HL_H@Hkh0#UU9ZbS|^%Be`v0`EKOO0;nEf)h7Q3Cb%R)4j)RZp3&fskDWTg6qnK zWsOr^Qxjt%yp%3MP(fq7@wMl;eCpipg)OWi!-SO%UHzz$K>4_XL^lRS>u&`+5>zn9 zRu__CmpDWri>3_0SGowwaL`I>2hC1nRgj&PpBE(vz#${L4Hapaxq%Lp8&77JY>wz+5{Nl*PQNM9r2rXCg&Z_O6_fz@YQg zY`2NLG#^nl;JguChn{9&)Q37nWCC_opd7Hv$h;Wp6d=%2lrOjuc~-Ug_*bi}(wiQ~ zbIA#aE7}|$Yp6wS2;WCy;D`}jh?*IYh*gC%jWMv0U>9AXLBmr!%Tkio`7R?t+_>J} z$HcpdTAj9`ap8sug&!A0GLTKhjeeS4!|^yop{1E!inOIOd1+NSX?KD0a0iHPWR@vf zogtzUwG5_#9q)f`ZU@eE)$!V7pnQdl^`WZ!;MHD*SlU7($X>ZAEumV&PV~x9gF8iZ zpv9#Rj`gjnq5-stRJaTP6a^?Z1#={=@=ZsAx^e8hyKh$*V)i#Xvyaz>cjY8_smQ4F zFoh5DS0SiBDC2Q?YSw`a?z5?+mVN=;{z- z)SG&W+!9wF8wEsMwRw__m9J$qM}zueLKBaPlAmF;@)a{r4s1T_pi~X+6VYTWLj%o( zMbXIvs^*QWKV8#GXtK<1Nl^K$89`tZox}eP8Kht{iVOush6$PspEpn%26u?)7`0^D z(t!e>h+fUH5`C;XM5mcXF#UqshfE2|9~^f-&C^PHFo;9u%<36ZOK3lE7+Yj0Pd@IT z(G7_aS5YKNL}@M{WuUvN338`V5=F)Gm*DatHi9ZNHpU~}f*uW%&3U@YLIg}0l(TJP5Y@t3p2kuDsO zp_-x$<>};Ju_NW=;OTO{kperndS;0_VpZ(1FSQiY-#jH=b14Xqz)tSoBL zNVbWs=Wqzh{M>(t6`WmNbR-#RjQwNSto4P0=HtSCCot#&bdIS+xr~`~`QlfC?Q+yg z6WBwU?`X>~e1gVc?7Tbo&3*0t#^1u*C%&~8S>!(=G|6)q+u`QNsL{;I9-(unj7`~( z1{-y1bFBo~K~-rr$xn8+H*bhPP_yE0e|=x;Pe%5yQJi;Y*NO5a6RuP3QCGcqr*P=L zG9&cIG$wJ@$|C*#UP4ASvhJpTWYT_VmI-io%1NO4Ap9+QdNO}YD4-=o zY-d{Pwl;WY-`}f4yQF28Xw&Bt`ewKwW6!QlAHgWNZ`MMR)s)LL~`p?7M~+Wm97qq+j=25Z9>ZtZ1Vpdx24SGm8GWHvd>8A` z2B8J+AJL6XO=ntARAu+rjtQvi2ac^wv_*N$D-lRq<-3do%5KB*cP)!)H&icNF(L6m z8Dnzcs4GXId6T?T8ev5-OJ90mA-?94`0gUw<%dBT|{nCbPDD` zMJ6sX8nf+M<2ri6=F;O6H3muN{M+kzwG?$jd&53k6=IIya&lJ-CWacTex^e%M{gD_ zt*P;kI0&JI#Krp8dHr7V^d_$3&huQBHv|Ed)d z97_~*>;(0U#jkqbNEt40-H5#)9G$E)R01__iyWsk_9)|u@W#q5@5Kz76KgC!$yR#9 zWZwN=u_FMhUz%?r5Mj;q%Iai{^2)=KA@crI>~>jCny+XZ7e(j-hK*9SSfXfhf@s~j zt=%0k6{_1Dex|8SwJTtJyvEP5Rq=^`r3yNZ0t(c2JFqbD*#!vWoPYKRDxnZ#;|^An8~ zVFF%*$IrAdVAWpB?MgZMch&Q4Z9%vYUEr7)ND=PTon)Q5@;9PqSei8>2JOa+%Ii1E z4#M*nN9wJv1YVXZ$Os828O>hn%84Nay1-f^6m`oX;yYDqN1D^CyopHzM6Y^syko85 zO(cWy^BUZ>JMGRo5XHd7E-Rlr<#Mhy<&PO=KJ@8ByNhT~Rwk9#@B9y%0`)jp ztH#*GSBE*yLxnisz$N)E>vN`Isi#^ zvJkzBaQKfpI29E7l0DMuPz8MWS;VukFQw!oYgN;$L?!v!$2>+^aC?X@U)CBfCj*HX zqnABPirih67@`@>4=F89L(J_@k^*EW(ab^>o zA5FNf+Q8MIt9v#x+Ea*DOSTFh@;Amo*S9I)TlS967yF(#er+=ol%udYUtQPQ-xl9{ zxO?UEO=N)+taZ|1Q}+C7W?a+tm^plOV?Qhd!bR-L+6Id!cBJ*eKE-ipJG;mI?)=q1 z*J|d!z{h+926K1b(5!(2E?u@%U6hE^%zf6>s=f?jm%l_~{`DIl4tsC>E1G&}0@pL> z03fDso~k0>la;!zFpLv%Tt-k)R|Q~XaG2Ae$5;5oZNt-)v6TSF2*XtlLXKo7Ok?*_ zn3z`N&m#3!s07Qpp4i3OS2^O{VtfUK0(VX5+*#;AxUmE)!+s07XaqX!Hf|zRLX%*& zocc=ARRnSHP(Ho%fe*d3%G=}DY>2emp+45eC;RoF&BZFF?4DZi70kz7jIIq$h}cnL z`kW?HfarC6XJ+70SrmPiJJhe*S&oPC`5JMwKEN#OmB1o4-`{;LG1S1-6S{Bf{_;?k zO;hucG831hfA=t3j*7O&9Pb0qkS|zFocOQMQdfMPt4p}-!{y1viE|`mDf7p9QAu?J z>GzfM@oROHk{U_OtQk23jAkGcpKRF6HjBu_pHm>z_}};OT{des0%02 zkSTMKwYb*8g666?5(P)wS=(D0i7JciXlnH^j4<9f&jc1?>{Id1mvY&&T-$d(g&dI-mR5 zZnk^zp5RY7?hbh1~UnP@$zF%fETRkT;oO&06cqxJ%R)0AA@;MkXL zEWXaCf;b0>VK_hHy8?L&YrBW;F?WHHoIuDNdYaS>`O>FU?TGv%V3OrWCJGTAuIz@R zf}TYj1x)79Uo~l_mR7q@Pz2>}k%`{brcQhO5(H+iHK#no8qRczI&$JlJWIL}s*?zI0EZ%=}_iq+?BL7x$YyzsrxH7WKly zndQO2eCYahbp{8`ig`Tla5ouVs#Sdr_#<5Xos$;~L^|HgeoZz2=y@7`o7ZOJ7BzyER_ZBLUYw__a4203x@sOp3Z0{1P{XL-HEZ&|-O8g^Ro6{k+J#>2dJBPtS+7;b#xs-_$6u z78-87hJ45O8^C*i_?}r;RA2iLhX*BznZw6b%f4??I9$2}EdRLpxO?bp!ots-lX(s& zz*e4u`-uvmW1wI~Xa*Bg0RU7OZDJ61(dgjFTWzu7y3Mr_Vm2kTlfl#(fdWnqOoM{v z04!RG?4KUH?`p9BaZGV6v+mvBM<2l9F}KQjn@ArdS*UI-bnb}X$d8UZ5NIm98ZMOv zv_mSZFp*W9w#hV!bJ*H*JGb6y_(jDF68;Iw_KkIT1Q7&@jG9Jq@>sGQr(nUpLgsM7 zi{eG&_2&Zu+#jHcF!8vkE^+q+Dg7#D&F)2;0qRD!(um5k!uGlOksRSDa&OVjCmCz`%0Iw(Z~HgYgD{Q2aFbZkFhqzkhc{ zW$8bfC9hhE@#_qf0@9?7sLD&kOMbl=O>JP?tWIG7-+4k)$CllbgwyDwC6r@<9Mbf1 z$-|!LX#RgwH@)!h$DvUa{B0kxj%Dlp*bTddkF}zx7awA2PORmsB&MFSHvG?^o= zNd?N0b;niKw0IH%7B_UpApx z@z9^m1D~V;DZ>?_#ImpUiBQMy^XAHP&F6m}FUt44j+!r=a0|E8+;JW0l>qA!#wWy5 z0vU)oT-O+liH!C{#WYJ)B_6wuYmT}XqrbVA>$#|@daGSr;_KDh?>=NOuW2pOlmFwR zrP43``k_rclQ5nnVv!Ukx=;P3WGa|k291^9l$PsvCuw0_NKCHq?`W#@Y2(|rQC`?R z_gug8Y|!D|=@Gx?8&k48iIo!<6nr0p_bV??2}F-ijYpV zw0tV)RCM4~rl)^T>Vs2gZ*^Ob;myQL;)1O6uI$EXD!AIH&;6=S#QO5Rpw>o_^tQ96 zdQvfO;oiB>{Vuqoi2O^Eo@sh{9&9hE7DZ^68q`0Jaa_=A67q@$F8O;)^!PR#16i3A z^z+RB`s%v0qC+cFcdO?CWMg~07AouZ-ve*_`uD9d!S$c|O-`1SPVJ!J6WFbA5VDp$ z&Fw!3b*hCot0L8J_OmOQbQVL38o@Us%bH`|_1)hfNntnqyK!q4Es26l6}sDgslgW3 zTL5fR(^!hDkl$=3(~S^A{m^g76|(a8b;PNm*rmV}qfupH^@4Xep54}M23-1W=YEJ| zUHxf`!_%o|9b#iQHf1UF*}D6sp6l6XZcF>HK(n`mbhBE1@gF4CW^$%TCy`k#KlJVW zw3lnikgeNSocSCaX2>RVe`}?Y4UwFGxjn$>I$XyjcRfiq32_<}4K2l-@>sHvOkK zi(NZy%cAUXv}}cbmo`L(3lF9VZ^5w94lbKm&^HtLit-OKHh^mIv|0LA=e_Q3>$XaK zO#j$C)8$a2-ztpychN+Fg+k>w-;DO2Fc#ymufScv7r!t2KWy_0B49@`M~1h{Qr&-O z?l+OLyS4tU>#dQE1uVmc5DkHeiKRNA+-HMA{Vq&q_P_PcBdNo5WzBT|)^9gb_&3x_g#5v&rl>MQ(?g|NmhA0AOSWie>=d4-Cnzupf^maST)|7WfLEeA2ZGw@GrV zz$M-|*s-J-lNm2$l2N2?cwuL73w7&mhh469<;#Jqqn27OIfdg|TE23CZm?f@^5Bgl zhvk(KZWG(8CQDDFNPMJ8Ae8_BBLr771_1X5y}j+dvTT{z(`DvbM(J$Pm1VYMqFD_~ zZ6>>%LHUh}(rhhDVq^wD2Q_MG{OAA#fLH({!MyI^4i3loJAfbRL4?>ZC@3FrwW$I^ z)@i7(ZmpapjaH~pVU45@orajO&!!jubCH*~oK1cvTIf&xAMMkf(rOuMZyVF&j7Bom zft`+6l41>kl&q&b#C z_sxyzBrT$>j75=`QUY77`O4~Pn)A|pd|RIsLvj5%h8Os%@zrxI)3>D{?Yk!2jmi%+ zyJ5R6rZ=m-zPcs0_S7wQe0c42xmhGGP}*VUQdz}Nt7r=YH1R|*=zqWP?Y47?>k$88-&yda z-51@E2`>3>e$3`H<=~I3FQseAEIK7~I{R4rOw8|8jSnPaCehHKvoC3hF}N3Yj=U-p zCjplz8u5}|(~BJM+ioSpxdgB4a$obQPF|P0E_WSbB++SpO>&J7!IRV|C2>}u7h3Zg zz4_@7gh>oMQDUPN1;HXlj(1(Pud&A3@cFH?A#mg?^tXL}>85nI)@vQFdpx%Mumthr7m(xBYnlc9apd{vu-n{jv7vd9_s(tbs`= zQ@TlaC<`XB$DMjI9!O*OP3NI^-sdm<3HaoDmAk{c_aZA1X=u~W3I7xQBZb*o{%S}! zrvdMtccaRQfF!nNQ;@st5claRjOgj;J!6+5iN(qq3*CgqP)SYK-hzQwxrm@uLuhwp zLx<6;H0T3d^ps*;)AG`c8eeQ2(f7S1`sH8=uiGJ1J8?yMFwm!YFf42>%~WM@6&4HP zhQT$YfK6#knsm)dDjc5LL#t{(Nv7&?2&D zae9Sj7H53NufnPKTjLPv|D-9@9pY@=9(8m-7M%7CQ}s*bXARuL){DB)!kvr`QrYkeEMRW+5B zoOF5ts8rO$A9-P5f}UCXnI>$3JIy34{4PsoWX3ZnFjLpHQ15hH|I7h{5$yQ>_^D{N z5fMq;6Uj04AV@;gK-`Ob z5XC-t8s-j%hBY(2J*$52zX+&mm6jIv7j|#l=xSHi=Jorho)!;k?+*xBfGpcb*qW&b zREFl)BpTElXc>;;?yHHc!p<;8(#34}Q?T6q{DprNt7C)6^^c>z`P?mbPt#$a#rpR4 z+W;4ZrC%W8Q9EEf=H%7>dF*^00TB5a}jw3|KG+2ubK-> zNlOC2-3$7A!Mm_ufKpO>0iHKMd!J4#fx!wVfPrfj?3$EHi=yrxpk<&k|5M#KOA7#5 z9P{n!#=QBR7u_161`1#-&G^Z5)-W|p$5kc%QU2O78eNV}31A|{Hh8fQ`PKO)FUxi4 z(T+-`-f*t=jNr0d>04tnK=@I_MNv}L@q%*;mRPYuoIbx$wNWH5AoE5A73vKRhUn2o72T1zxM;S` zL1!gbgrEw&NNf6dgxYNPYof~>^D<4Q|L62YhV$ zeAz~=m*vyWgKW^vZih283I&n5 ztV)f~=gF0`@yHK8E#k+_;L#vaKZ*ISLhx}veTcb1y}?9+9c`_}Mb?Vkcup{Fu5)5p zq9%;WgnaY1tDGk*8^@FbohN-F@amVke;jxBL!%);9!?eLspfE9NroUq(~eLfrz>`Q zAqVE${;zu{VR;e8WJX+`83gAi^t(Ac*;U*z=;HPP#qv8P8L^^M_;k@ExuGhU4uaxoI-}eql*=a+D}?RTT%Ls+|@J6Z13* zm6(A2mL2J)dhZgAsemK_JpByM&qHVE=PspOS~;qvty1338RkJR=}`Log{khLn=_;` zdyZhFmk+^64=higi|%#lF^j9G9J`ceW^t){cAOiz{=6G~^F2LMM-gZL{gwat7MGl( zc)Ph0m0QB){S+0;%J_tjCnzTs=!jh&Q5?H2^hvFRrZ;t{$S!KbXBRIGVTX8v*%_zc=P`M}5NyM8c~# zJtS-6n%5=UkYN#YK{%;%n)hb}$tH!-M*C8gqHU)L!7RY>sJd6M z6u@?90J8|UiKerQC5>Qc9A8e0^4J)|j+xA}3OQDw(pPDhA@k>!$A$%%N4m2kW_ep8 z2foZa-ckW(5pZVw{s7t$V9faDTB_H$gWCW=B%_K)uc-{!L(IaQON#Lpq~pP{ktla< zQrd~Kek6G{1D*+-pg|9N%(7grCKH-l3E{d{sjPkFOr~B@Fp?Lr=~7%g!}9sK(;3;1 z991@!ghqDXr*vuOClEQ2W28+Kr`cNSx5F74Sj*uj;Y`3-!eD(_Anui1WHFu*xn}8{>oJ8y{h&)zRX7x=rtnq6rBC}A{ zW=*J$P>NKMK*Z(_z?~u3n?#WyA9DrYwq6&+WU)wFK&3GwBp)hFG{EhrE1fjA8`>xb z3yPt&qZp~a;$1?VKJl>{3Qe01O|C8Bn4lP8s{QP!235I2w{$a+BH`YP6UvuB|P|6=x!bfQfM| ztbs9QVTv8H_5X55AW-$oYs6zC!41ywK{;rXN6iz-$_{Cw1Ti#>h*C|bD{|(E;-!k3 zyo7Fkc~TWOlpoNwd4Ji>9K8-bP_AQwn0Ah)J~by&$`_f%Kg~0-O<=*hx>00}^AdS* z3IGUDI|#^mChRN%hZT768fbxN>SBUWd^lZw`a|3$SD+dgSN)lsvNtysk{7~sO-tHR!py~?g6+lsr2xXOjV;Lb`P#ShBQ z!{l=3!1&CKbKt&n!XCL|#JH6FD=_;Kg5Sz5d(zH`4gJ0hZ`$;~bgD(u3o$3pWwgp= zQDAEbtgF5afWyiz00GO2GYJDUW3q*@W#&;+agEG{)=Ua0XhzhCMfg+j9J_7^byYBV z-EmlTS`k%cf$k+#c3mM>f}?^o)U`B&x&@~DJ)rv52F9xHYm0sq3)V3{g|G1Ww)M9) zSMhM-vnR(H4W1byg>&)M{5V+(3kM0hUc}PW#;Q27k>!Dyih#8)^0le8o6Bb8CP;FQ zn=l?m$UI9mK_)9$s)$8_@CRhQb^R*5I3dN%H*E=LAr=uJ9re+;3~;M05r=fM2zpVw z-z|`%&5c|UGVuQa^}|1-(dS1ZW;9g&g@{rHE zN0av3Qi1&9WpV-ZK5i_*K-#6FZ>OTJ&s=q_0>F#DI-36gH_59}*PcsuYe5Z(4R8>U z3F~;QDx?{-gamnEp%t(!e;%3jUKbC1bDl4PX zKGL3fWi#%tLAe=2bhZJyK!LZWAgsA~47FCrQ)H0s8Ha{$NML%k`cp`0KfJ=z6sB)sQLE0i7gHAcV9 z?%8r9i}EKY5{cF}Tb5-DGG{XKwE4-|@gvOAMFPgA&Tv%4B}mTF@8p6CAwrv$7(ENgS_syS5GB^IrvoOEAQcC~SGnnK&t z(o3)5uCQX5mu9OKz|Sj7=^9%SoDt9zZ-POFHKR+Wgp47?#1=d!BRlM zQq54Fs_>Tc3!eOe^q<_^p>1w5i?PMz=k|1Io3R8QffRR*4up*J-9n7GOXSV9^qc7H zzj6<)b_W-3;~4qEV|tO6|GPEMB&f|+btANJwV5R6z`$8Q>YEw#EV;6%m2Bvaj8ZIw5M(vPoecTR+(~T6A^P@~wMHv?qD8M`P?$CNHhxthZw_odtTf&n)70_RJN68{-|Li58KjBp6?Cc3F z*A}K?ZV1#Q`PKN!XIt`5keW5>uid|_>gY}WI%{4LWX!(&HX?1gjekHGk!=f28eXo&5e0y)Z%g8b!V;h>Q?J6_b<&Y z2zK|lQ`>LHW&qWxIQ1^YI#0X4w#FGRAP0VG!lB40#zH}0UIi1;Bxd$&2IjCd`5`Wo zIrCV3)NNd3dJ@WJ+GY<$n*=!1J~0pP=5rT*UL>d7|9`C=-uip35mVF4XJ#$R<>rP@ z_&eLjEKByud~z)^$eNg*ooD}aJ8Mmug@)^1K0LpJ#*n!me7h$!O;_BLT*)R*WU(-51gIWyItoJ>T;x9m$ z003s>uxJec?=!!9d;i^TZm#~m+TSMKnZIXybho>=i*?uHyr)%n%1`5E97GHpVYrF0n}{3 z+(WvPV#DB3=##gaa*Pn_E|_7`KB(rTua4=={^;mGzNuqvm2@ZeW4%5v^{*ZP|6?eRPe zYQ_cvbzq+-XQ|ardwALV*j2+km~y}?4+HzYYaN}dqfWC?s=wYNX`92aR>f=+7B#J{ zO)vBJhQ;63(qP9)@-4rxm#iB%aR@G!Czuy@;5h{wRZ`VSZv*-6cZ2TCM~T{`E_^xJ zt0>iVf0kj*XIw_jbXXRh<*}M!J8kPPtj?{0t+U=UcJ%sn($4MJ%xT2M(>E5hA9o$BC@UkC$s`n7z;2+ud8?LXe7djP8GN~b3i@h@b$JOLZW{;nT zE7f)(bDPjM4bCua`%$o94bOMocXaO0w@?2@*#A8__VC<8BoE)q(PO(AuS&yxZYtL& zWU*Y@^EPJjI7L1hQ(jj4Gc~2iXz?+5u99!~>Za-37QY=P+*^D1Zr^10GF)5iW?uQ_ zFY`Na*V(eH>P>OS;@?{QaX$rK9ce!B-#OV1tc1d|D#;tq5)4f@E7n4p-QT0RZ!m#& zFPwU3>mBhlxdcQG&xP(yPj~Xx|8zQRQh1fys5akBnDo5QzxRyr0eaIn0Kaq5z9|QIWWmpMnSf02m^#M(Ga91|WwMy9+cfv`a^d#f zZ)ULLwlGbTAN0Ka=f~EIid%!Ob%-@|hvT}xalp>JXWeJ>T~W?8pXPh81sTEn+I~ZK zWf$#MXR)b>e`V3l2W+GScD9Py)^Ueq!eXt~4JfWvKP8HJ7vFLI($<}SKPDH9d(dZm zh5mO1Z*Tr1$J55&+#BX_B$EAi*!IkHS+OjCO_zv>?fgnD$Zp}Q?)sfq)2*YL{Fl0K zbdSk@pd5A&ip%B+G4q*h&1~tr;h6cC7yH71svF(EbHf+GH_fJ|a2;KJ`qm#ni{LYm z0MWT7&GqZnC%@Oz$q)1GDxN3qJ#S`%k}yCEW@<6_>X}|7PJN}~K-|}!i(&688bxI@ zjPq%iDerJUKNbdE+oL9|ytn3?T<nu8I{zyp0%T*rjj$=bnIDcMzg zG~=2pFi4q$?^P~JFz(1lcULl{NROA$<{!q1ymYBcblpd{cE&_?<$zk;U>wg@Z-n9h zhZk0URAZlxWIpS>bpOas&*!h3^Ex`O+5S~${LjlX@ICxNTw{H`PY;$UGScGVF|;Wk z_y3>=d+FGpXpM(P)o0vB61cv9*^FWAZAI@>YAOpxyPHF;4cO_j_-GTS+ z1n?nM-y#weGBu$>unmVuL7JiC@RnExJ}ka5USrR{Z%Z(Ywj z!+O^qm4*y3YRW99*;Mmv&5B6`9bjRC3|cj_YBb1v^8KD}^|bpMmKWD`M%>Dx6(|5* zK%&25xKKDZ2xV~q0F$PoI8!trIm$T84}v>+!#RDNrCW~`_tQe@qD?hhaiAK8WuoGY zqG+~ElAF_Nu-_jmMH}_vvNY@I_zeQWhxB0CUFQf5OmN&}EmW}d<6yCOXpgWLF z|5O~kXpfV|OWB768wXTjJI^W+O5iteeFylgxn5ZD$GPc z#aN;gnPL^YrV|o8dzx=yi5rcl_;!R1+z_V9b z`1JH{%}QFq!h?>Da^XNgKpo$S<#V4Eo{KkS<4=Qg6K)32YDIaRQIs^P5?NsOU~qBT zv@c`j*R*T^u2Z5!RX$^77&=(33i>4oBXt=t#9WarF1V8v;UODUo@5jf=`79Yh^NT* zBJx5@#0VyZQ`Kf47m%;E2LP|diHHiA3B^!oX+UfOytZ(0b({@eW3jFQi4mlmAR8~^ zA%bZ~%<4pJW^R!o38ZKm;->&Dtb z;8Vyo4N4TN5J_#41+(aZEKU>E-ln<`hpg2yt}Vi3v<&hg2V=gQq!BT;0txL3R)ZdG zh_kI%*2;Tj?Yi>R^pnzBFf4m}o+vVMi-8ZgMY~N7ZVB^Dv)Q;#HS1S8m&AZ?%>n9* zXUvp??0nYaNM}}#;3y8!AwV)5ODwR>iH85-z}fnBbZ&lbADGJ!+JFFtl_C+&oH-Fe zA_awsG8kM19^}JO#`*e~P{>swG&qVHr)VQ& z0zfmgEuoQJCh`r}ESqIxv@a~z-jX|A4fExaf~ZMBfirp>&1#K|9# zN7Td-kVG8%3R}I!%DB~j4Z5(nd0&+XPc*x^(bl&jWkj5S;vBMt7DU~ZdoLy?sXDsm zKeMv4t1RiPqrDD`xzZ3dRWOPrkO3n60WxUrq)j|p^&}il)bd`&y5`ASyR??Q9@kM? zX|{(-&<N5;O z*`M_b$&qUT^?EvFR0U=zQut7`j17?qIk_TQz8xky&Gq}4`B@q1GYvQ9BcUWxT5y9s zjbdTW$jk6~ioICH8WHBq<|vRvbW@R9HU(9Y2~tKkYYr!?qxy-QnghniZ|IcfWuiAca^_LKq`FbL>&<-)|A0nD<~ zh`-UDU({xt&>n~L+c>jwT+BK!xh-g>MT{d1CmJ>z>lHVy6JjhOM=Nf=4FDx<43IK- zic4WW5umRVbyjPQp8Wb{bDK(dC0Emmw>$&y0 zT!O{sX`pk@5qSagxwggJ260w+lu;CMab%rJOOBNlO1b0!kRZ3gM?_Pc(j-8PNh=C_ zP?}{1yIabiHOoY<$J}Mo`U-N1vZLkzKt9kjX^w;+Dk_U*C@q_#r_+CX=X%jxXfwk` zveA*Mwx$yLVE1p;@u&(zZa_9BIId^sT0VBZ_P)Bw((~sy*B!6>fxnnT9hb-%ilpAe zgynESgJ-yA)68-mQq4rFy}!57UvS2iiW5HyjZ0LZssco=;;va#^LKCQ9Z(aW5~9Zhb}y3HKq6sMUHG|DWv*u# z2S<+AYI_wGVBU09wGHA+JGbF{EGZbao2ri+;zFK;7`KB~0CWKHUx@uTS zd_>DnB-sH%=N5yDz{EhR;lFaZT-;nejmVZsIqsQZazRsO)hA!sBqppZ^-{K2`Sq^+ ziq59nmY!{>>LFqX3{7ApRb~?#vA8DV+}Z~#r~36{Bt;S|f{CtY$_#&e_P4yef`Ae#@ zXv&Jg=UdFDpsr|+aNb1UI=V%!Ze8DgMQ}gG8UPIpo=Mq1^T13KN{y*Z9A-E^iEKbb zqeaJ1s_DP^@-x5mWSl2c!Zb%U0-l98wI`fwQX43Q!{g%X*;W@Z;0%eN@r27D(Zrm3 z&PXj188{1(5_aa2iY^W`J_kSi;0F!;1^zjCx&GHre^fl%ozAQ4yuQxZ5B+|zKmNfR zzgZ2b8THHc`%GoyF8DJK->&-m-gBBoH~>ym1T*%gnhbz;I%r=W1XV+zO^pvvHu29T z+OnJ^bdlcZz(Ro!G>9O{DF?_KPV%1Ve!Ag%T8k_r?yKx$U#F4}cR2XAb6B3Et#!>s zr)5`YUGitnnbVu`8}2!tdgjFr;>Rhpcec)chSNx~oom$Z`C%s;$Z0tXcX!9(oAmSD zXcv`A47n$8la^w%*)4Nv@%@IzXjl2aE%|@TEM6gcC7orS8bH{=}97C{Yy-fe_Qpi}fVB2nnqZmO~M?;I`C6?YFyZE%Sl#2qo(l@pf>2#lm)4gU2NIp#UiL zb&hqrj8j6z5U~qcebRt6I6)aw5lKI$4L}F|RLX4$h7;*6cAv&&t^t+@=mqHG;d&bB(T5p<;;Gg~-38oEB4%2i%dtq-n-X z+N??t!T$Uj*Xb^fqxA}lHBH;ZaIqb)9~=JWO}h&;iQe)@nd7g;5U~p(eWwUZ2a|jI z(bc#*zw|Y_ovu*3lX#(-?&27Qt(;v_+hVS?%p^ zqRyqd*k*c`g^D3!7YhFV$>K*k9*OsJM3LGmgmCe|WsA{>5dw-Pw+4r=J*O61NorW2)ywus}o>ai=^n zqM?LS07e=lkPAqT>H8|tQ*w9XqzqT{LD>;JQMUTCdoF;s$X&+jZvgrlj93>ahKpSp z;uNWb^@pk;2>_L*C~~49B!hb>W-tLw3u+a ztq>SOL2@RUr4Mb$51E=xP&`P2Jc*;`QHDf*$Eet=;`z$sb}py}*D`NLL}Kuz-zdZJ z)Cdhj%q|r7#-TIx8G`-n3n>SjEtM|Qe!@$VFk|XjUXM%Q-rwFPy#QYzo$B7JWL3)O zJp0O58cutW{%1UAQjBhLZIDVOnM#S7A8)0*W~uwnR$DJBaj0A<)qAe08D2xRzP04# z#)KdX)+0!f=Z-mRUKvQFNtL%VulbVU?w)Tq2A{!&aao?uy_70Ofh3q5+A=;i-rFL# z!mzryW}03D9G(QL&_2=QoSbRj51oTcSEDqVp^KKY+;YEIY4q7({r;?~&!e>-x@sNo zAMg^W&fIlWyP4P|&)<7UhK`>Pm2vB82g2SmmWUcZ^8KHmm z@88ud4~)iF00ME6Dv3!Z5TyW+hxCv{ZxpP=Xg+Xi3!S&>!Q=Neh|}FW-G$40VYlpQ z3KG>A))iJ=(euBx%&UftRd+c#7SvRUNa&D5+YAFNs6>n%R?$ckr$+aT$(`Nxh~qbf zYQ{kXJ z=g(!)3aO55*fTgfFJxBe@X`DmWs-!wo#x2em`xv$1rDp)?#<}#hGu+Y_;^>qW2`M6 z3p=W%0(qQCTl!_R<6S2*INs453A*fds>OD4+8`K~@8l@3 zHfAi_qA!nSM2+P#IN6~nVhOXwJ5K?#yOMK$Lf_yo`K`805kot2_b6Y6_*S#oQrp@_ zTXB*2Lf!q@#+>dK#oww_R{oO(_cM=djb3Q6<pZs1szeS(Y}ZjfAOOfB{YH| z4**R_)TU`gh)@O!V_1UH^B+ld41cHQXVwNV9AQL9t1fYhAOM(hBtQWks6-RRC~@AY zD#xiRQ|@+Y$>v1iLwZ~%zpmLIrA?Im2n(#K8LPLnv%MNckbqR#5S!9$YC3@pji8fl zdgCOD3+4X7?e8DOo4%K&y+pl674~bBCDSx-vrMqU#k31(Y{pKizEAPpaMnEQ1+x3A zl8mj3rRYnVjsJ*R~dP`aG})ZePQs0ccBbt zsEsg!XC|{RAF!Y9PQYQ&hypHd-RU7y=hg^^o4pD@&e?n7AK|jMyhq1(?fl+v(1ks$ zl_%%n+i7;B9A^@UN$+@rZP~S+jq)E4V+pnUVAJ(2|Ezc6wLODyZ3VC;nC=kG@?J8;Nd9`$78eDxp zGG5{3BtGrDJxJ@x>!AFAGn(ypVjc`BfzQrft^|>If0x!EQeXPeTqw_2?u3W0t zGm-nXYGtY25lY>fZ-e znszgNZ{xD@KWgV4@t=04c!$HR<>2Ud`O}7KKm42>{*OkM(jE3X5~zC6Acb{`3^`)?miUm04`$l(kaQuJ9qN)2%!TU zp9<1r+LNnwW-%bLQ&RnTtN709I&wrg$tIfrh9p72`;85#UotHn1pdYG9VgOy{qh+m zWp(=%9rSa>{R~L#W>T~{{g`1Mq49V|Ik@%!W?@K*lCxK#Z>en}Rn}3ZV5dMP4pB`uH^xKF= zn8EqCQ%DR9n05c%;P42XFMIOIRCBMU*I*n#uod&ESeBa!f9UFS- zQ$A+~-K(M(?Wv)e0pDHqr5$W3FX;N~NL4BCKi?e1cP>?~5;|%j>8J$%-KVDs8UZLo z4N(-TU;=oC6V@~dOf@9^fr_+BeRlgL&!Z!>PgNH5nn{)ANca9vdzEz&_IvdwHQQ52 z#HrVU9Qd+g=W0iJDq78Ln~kZ-6t#LtAh~2XXxxM(zoW(l>cfyQfAHY4cN%==S6sLb z8X8M(T}#2jWsh~fHIeSSov&R!p#7?Mh!TiYOQ{4f_O+ z^-46UfYBOo#d(niFK74RB=-2kUU>>XB`49RWi-a7@W7(VDXOR#L3+ZJXTgUm6Ci*; zSlNt|gSe_)zA!9u7`!01_*6540oAb^%Sa`q7g{bwUEU8mZlxk>hCfrczILC|v~*FO z6Q(bzBh*?MjIV=1)9+0)m6>r}qA0>buu+iJSbhRY+mmC3P+?RN7>mH) zO-xZwpzm2L=_+#wZqTHvtXZTSA>?U=Kq*i(feyJe5F!Q`cQX~Gfv#sa1v1GcmwNFz z-hNB@_{Xmf`u=Z&%Yl)#)HkqudJIaN1#g8tNm{BrALbul&htw8ua*v30 z`2Se(|E%@R%}f7S%z)9;<26M-59I);V0juPsR9Z;AZlg%b=CWQnnxa<6ka z?mOzvOw*>({b?L{tPs#al_O!8cvub|;HrWn8sPtpp;*~!*ZJ_0tc>Y4H-^boxiQ*< zAK8obU8d%qF+hmasAM$+$?zdU;Z%^?|GSgwtE)IX)U;o>D_SVw zF-@ZBk}to|ki-mIQ80E;6)P0r2q`IuaA}@7r4SG*N@ud4Ca^Pi{3F)AijqyI{oF2T zp^?mA36c-aD)-X^Xhi0CguAV~5#2`=RKgJhNm*7E1XD$X(UPL5N`F;kf7SV z`CnbL;l3n--?s}}C?s>$uS$X0`#-U3Fwn}x5L;0&c2gQmjhZQd6CHBXsAEZo)ln8K z5veik&7Ddg+w0N%tK2s2zFn+BxtrT!BJ>|8X8vmfv|{r*Ol~U##w1390H!IiqA868 zc81ghMVdhd6lY$OWwD(e`@Oo~OyX%*15j?}x3yiLoILN#?*0VUlLFdqZvyVdPT(;cuj*~rGz0hzjmQttMw{jka_%my<_+3zU$ z_rS#e&~n!tCYUM@ZApH>XH|GRpk?;FIP( zx*YNF3-90&+G~>~31HM@Rh5Cv2q3jVWtO>yBOF+2xyulf3=%988KtL2K<-uhk>4cL zd6JiaPyhhX2o%v20J{U--Mibiy|(S%S;^kFn%gCoakBN7Tg(jRwslKmwjd(_u>p)x zP(igI0s!GHFn-J#0w9SG2!6ms1pm1H2Vp-5{}u=`lhKU0LKu`>40+?Bv z>$o5Q`)4zH@(|0`*vJNe42#jRE@Q{dV8Ol`$^Yr&hfs?-PZ?` zDt2WZzoZMmUKA^EN3Whmz{MQirR&%a;6b;#u=Wa;PS4z9vSnv*U5U-0{We;Boc8*P zZn?>3_K}1qpLL@fD~=Di_hYT<3d)+b$_8A4VhWp`9r#~CF`iwi@KIf^oayT+E0^oR zf68)9ZK{(ib6)(j00E041PVZpauO*qOJV#(M@VrvwMasFQ;+JU<7(`yD)p3LKbh<0 ztYt4YdX&6q0zsYVS#W4JX=Q!snd|Oup8?V}g`Tg5;G|+D8aDPTb|0%!WEw1&HsJhu z&;*QcR@*no|K1?_ySxf{zP`xjJHHbD+s0C;>pt#Wm!@;`7if(H84#n&1C93NFD{fidD68UOBg@2ZU7Xg-#@{@~W;`ea!f}B(e=! zRr9MsI0bwZW?h@pje*P#r34j<{RAoxLsD`w-Mmu-YU4zc* z^CLji0s(YXiu@dU1xsmooGRoUL@$6|MX%bav#F=7uKuWaIzc_@6xIu!Qn2dMx&{5c zwpq+BTEAvD=Ruhrj232Ho70Uk%nZnjdcehS4JLB-sm7w0EZ~s>LqRAG*j4na?fp_I zv(^ipQr7BVKnTwajtim0Fzni%ZscKtrVtbiri*GyAyhZ7L4n{nw7x6?B5k!$6jNk+?>)P~g>}Q_L=GHk>;eE#k{;*rfdM;3 zulQYEJsvb+pcj%!vTzb5Lv;g8R?lDKzWONzA1fl%NP$ahXL-75)C$Ay{nwO;k}6(@ z08aD6ib8*k0}xpVb``yube-r@VHXmTtS;Y{g;o(t`~YLj`ZjeNyO^h3xBD5a%W^EV zA`mB)d~8afeu$Ft5FQ4>4x&e`uiTk_<3XtlNlMo5oiAIEb3g;CMy!w%!m(?4x>1lV zZ~8F;LCtNHKqzW}5@fnu@6BLMBOLUvagFhynAYyr?69kB}CZ zx$_v^wdg!SoK!NEWO_988Z@JbX4rn)u@0ijKnI%>U{}#b=py!sRMrcfNcZdl6-;Uy7(^)Tf8Z5Kzfh##L_(LduZaB>AVdSOwYRjmz?t>|q1#QYVcEC>o*a6n~Z7|~9 z1w7ltfp%YXmkzzY5|M`q7}9kNdz36!UL#*jG&_7NW?6f zPS)FQP1+de_6U7hPQH617Aqnghw`Z@lAFqAgkI}IksBR zMR-x=PR>92Q3og**n{PGJ~-ZpRZzVnVQFe*DSIlpUf4}v(qrY!fJQ_6lSmb| zavDe^V&Wd6KPXuTfU+E@99pV(tDZvNQYo;k@?naxT>RS>lJ2UE-ij13)b2)jEQlK+ zKGK=Sa&wYnd|>|u(P?u?(vse@bkLcFuSK#(I?}w_POf%Sgq5wr_-T-CBXPTviSBMO zs_Z^eA-ya(zJa5;;v$`Ck1;3ba>FI^ubppQAt&i=NWeS1#ZGe;kdw3!rNp`DB>6Lv z%xU+0CaM~LVcEKwFNq^e(h|3FFJI5U!~49`@Z#Ij&!4YT1Qx;*EhrHS9GH3{I{z%ef1$5BT#u2?xd9 zcSq6SA8D})6!pfdwT11lnOD{dh{YRMR)OXyZcJ98-2H1T_vKv`@Gxe*QYQuv;1I_t zQvPixxRJ8`Z`Fn}zj^luoiwBU+K@?}e6l&%RG zPubbR>er7yCDYhRf;j;7ehtF4zU{42=(r$3A7>R~uyLXMGs&U=1-j3*==%zv*XRG2 zC|h+B$CA6Gq!Lo;C}b2WiV;QCcWSv}@0@CC?xVJvzL|qd?&)UrvZ*w!me=B(AcgoM&ON1NU=BpNThh{Y-ll z2lj^*l(n=gRB(~^vtW~7;V@d(clUMUcvx9tw|UPbjAGf+>5|@GN~q>4>{DL_&^?na z?LV8;IK%8)>sD>6HYD05M=@Z$zwZ?2S`jkoe~>r(y$Sl4I?1pVRDvo6B|u2=!@76{ z4LdR1;k4}xwvcbSJ0Ylnz1?YxbBL)yKf!JlRt^0$cyKhfPlBN!>}H6G+5UsScxP%= zYSp+gT!*JT#fdOLDnO$IN{N^nqQY^G$;aUUx<^2NC$q!y=jrm<^-ro#m%CQnx+InJ zyP?`$%n%f2wAmV|4Wg%pV5$-u2gr^<5g8};vGx>t!}4-2!3rL4iFF=G0iKH7oRb1i zCXP9lz8f-D693Y;&4rx|cX2QMu{0SGaS`sg*LWdgY4(7mx0f26HK(jd^1xyGj0CGo z$OdaYE!~3Co5`NuYSqP><;cd?*nB8!l@tnDyOvB{gV+G)01aP z)smB`P?=)9RTN{jHRtlrr9*sGk1g9yJ?}rBM8AiZHS9RA&-UWV8GNb|-SzF6o@UN; z^R@K6twq&uWvhDW8XcR}|5Ujj^`9zi7)PYf9INdK-G=9*$-_H~I^?(yZ^6=n@s_p1 zi2RI?DFw#hzMVyu2#Aam5HR14sY63&%C1P95VsgRuFTE1*5+ZY>~&*ew=1eGw7HMGO#cMga5-4;n!~?N zi5*ai(fv5V*c9NWL1dg@ToeaK@}8K?Lmb980Gb{w8BCMC3JS7$^Td%wlG7AHAHf@g z>XYe&bO8%CVsi-g%kN`>3cnI`=wn?h562`GFfQMdpT*2HbE+>r)gT$v^LMtl3WY`3J^Ref6_P7=y;OB=r zlFi=>vt~ZwOE~RXk*x?YZ`|t#_1KE7&~G!#t*F5=915;aSzx&rU{OjIIFF7N^y@tk zd^4{2rVC0rZKz6H(!I^@)2aZOWA}u6!(pIjGM=1J0JTi}Dc6giDcLo#K91XAGc2Pp zrZ{XEBtb?$Z23wrOz~KP;c5yWFA%-^C@8Z!$OpLw92S#ST%?cleJM&`2Syx}%Bq%n zp2w#&d~7I*VdIbXDs)niLhP*_*NSFkA?M2tT%>B{u!L$p>?p>^k|wmXJZwc#EZ5;? zUQwt)UuuoSSaR_anIs*^XEn~6MEDH@JeFNyrc ziZU;O7?ucji(nFtWo6G#Pq9>fnl?C3Qd$!r6!M$nwnu1h!_6b|(b_3ZX z)FbZ+k)sDG-$fx_LdQLvbjC`r`X{-0TyP2Pr&%YAzQj5Dbi*) zm)S|eBsbD6@#*hS{LZ!Z;%7F-Bk+s8^WVPZMC!2WdU6sOO6Mv4DP!i*Hn+RT_BnL3 zl5Lu|eUv=T5B8!2X|7&rvza>PuR2QFC9$DzbSl-q=%P5&6e@^3?#;0$a9m6TA2IXEASWq+4Ym9GK#!3=hb$UpUW@;goAJvP^~X5g zny^ujYY3ZREcrpIZkVGv&}+x~ZRuEIALB9l`8r=N_UoC?tUGAY`yHz{lT5Z{=v?(z zQ)=jD4x^HgH0fqK`-{{s>dx6v%8GiLispP;ckKv>5JUIMPv31L9Yg?r2(m0W(a`vZ zw^}wFD%*3(r>?$RIrWlJ)vtl!#~t^T09t}%pWfK`RxF`8`D<>XDh)C;vF7o+$sT5e zVPs1mJEiT6Cg04w6~MpdffR}`={-){rT{%mpnY8H9@>oFd7sCsk) z@U9=cjmn9*_b;Ei6pn=}$)6yyCd+&4e-42?F7jE2<;~o0Mqca6Taor;HV!ei&FIU3 z`(aD6wIX53WFWEDRktg#Hrl13A*MS6(cFj$DgHR{>iL-unEsS*`Px6&4JvkqgO)C2 z`5@a{GQ!m@((wJbV|p1+d9WeiOBJ<`vYMnMZt{kkXK^q59NVyA(*YEesFm?95g+H5 zHXwT9eNw(IG;eE#p|`zpjax`gnCdT&5uC{_c^>kOPG_kf?4wRPseSz$J00mR1Rg)d z5BbANXU6g@hkco)cU95SDHKUNEh5WD!k=6O!r`80g4uOT>RR&UrDtQTw%iN{Dn&Ve z4tziZBle~wz)6X6yzx<=P?Hw)5q!M@MRdVE(6q(Uof!D~CK?Wp-&ZVd-Vs(VH}Ot7 zRki>PWG4^oeh@7g_{@RTpsiC=#bq&+(Ge~S0arFX%*G*yo9Y=~3m}WGXp<=}aUE|6 zgZ9}|HCIHs36EF%sNq^72;0Y8sPEZ@!U;?t#r#=sF!B??-r*Oh6%;&m|K~#iJJG+| zNqIYgpGfC-gtFzeGIsj85zkP|yx-;PsjL2Hqvtv63(&NI#6G|z)6H#oqlJm@y1eh0shlb_#9JLFTF4y&iKqa9MD zjgq2~#l%bG;56y5a*MZLz9^-TB}HG2pZxKB98g;o#(VEXwwOj$gxCw}Ec#(Iq(Lo` zy}St?{XT0?CLW-cAAQ@u+2iP|*+|+DKh)VMP5BRNws6^;1ODKD%Y8JUs~PPJe;&U4 zVId&VOEZhI?kidC1iHSYijtgCsiMgFp(4P67Q)d7qQR4exj35Ekn(vQS$W7GU@fX| z$XI~ivcuFJgjaUNwfy2A>KBi|LF4(7OIdU#UgBEMXWx7#R0!cg_`mPBk53v$C2w>% zde=E1TO9M}!bkp$oo(pgG}bq(m;NBBs@}5eK?pz9c-A=zoZJ=)2M?9=$mbiDjFFtG zC**q8IDkqRx!>@HB!|*_=eS9UDBj?2TxfX^OdjzjSD4`7fh2N0!RszMM0xMd8D{uf ze6YWU{rl1C!-ySc1+iuUpk-%ymJzH4oa3B&DI- zxt(p1!-k>EXzUrl2-`#S?d?zg;6Qi$TwWRLf{7FWLXt?>vFcew)(x+pjK{x84#z%! zrQ4pU`0n)kJ{V%&qmcYHZ2#KngYk!Bl>V0&?i+RQYhPj+yDYu2pv?6b?LuTsLYsK<#zkkN2~TTEMnvYmp5B!EV4`X` zewe9V$uvxZ{k!CY2q~680fMUmN`Qz@lnFb*^xYghIR*axf|J{`}JO{{W4_- zp5QDlyY~>VcOhDcs57E!^pwJ~yV5$XJ`@Oui}Se&??4jyr{tBuj_N-Ah>#)XyKxL^ z2AzAeci)VT^Xu9ysqsB5+;zL)>c1C@$#4ckt>SFwq6f#bkd~K{OoLzYKQ=GU{Gqov z*il~g^INTR+8(pV&g&vAn!SWAvcSoY=ynJ<`Tbad$Pxc}f_MA;o|UUoHD$W@k!oUc zb}-=?%`}m6fUH;A*$&&?wsy%Wv+82*>d+_30uHoqDy3Fhx!;%Q{s4zT%wtSaZ!Wci z6VMaE1^u)#Ka1A8O$wM3-3ZX#G_x7UwDCNB0Y$%Nc9&yHx@H>hKaf6hgJ3zLI1~^J za-u|Lz-Ajco-@N74+gXc96X)j1O$<63E|-3dpgJN#xuCEo2K-I4*v`ZKNlI6U=$u7 zZ2`iSGe19g)EE$KE&jWI{c>wicwp9Z(CtA>@>lf(_Y_mC$(|jQex`FykA9$$JsrgM z0#`T7;lEavfNFsf_lWmp2`R~6RQauHhkggDcwq=)brZFLeU9FCvU>T3C=Uym^c^0} zw``fk&*vW8O?djkTZx;U@?;PNbYz9!uIX6Xo$S$Ro3KRYDOw|2v7iUlz7h{#E&q@8 z0OGVQ^_9vtpj0M8VQPsh*GEpXo=6KM>8h)u=@vONl#H?Y1m};D69Fs{3VfrdBovED50m(3N9XLoj576XQ5*#3?S@m%v^V~{GeU_s`^1c(TA2sYGp~& z#jn25wD^n@;)Bp={bBV1x4WHXUM7$ID`EZ zj+=9$%NGI7k{Y$=E?~#)FTvHVyE)(qJP24^h#1TZWKwIBC;)*HD1hX}(snTDsRU4X zN;7Xse*NH;eu8}c*1Q$W-|*gl6VPR#IEXb@TRWVwzmE&<)sN)ow*M{ez-N4BzmJ8Z zw)A~P6Z)B-Zz)i|km--y?nHrk`eP+6_%Ut0drVgCP_VbB)DJu{pzB)n&zVNPQ<(#5m(r8)f$=~9&JR4;4WJ|e^AVcf%}7=z>m ztAJb|zP!+Rzj&u~D^fVMJc~as_DT=;F6$z2KYi$?QSmamBjDXZhUnF5 zhcIYI#xOU~GLbo*4D-sXGvU<(k6Nv_VTE zN8&2AK%Ll{m>A%qFB0KB<68`fN?KM0WaM(A9!T;gC_FiLVsa>Zt$KQlCsX(S)tR&F zl$2nxQ*^7=^H=WFmNA%ssKm0iB`t}W+muJ~daG4V9%Jx3Qat5B?Ef!%(!c^c`yCD$r}j62W7F;Slp%yezlM)>(5hZQ zr_lDi7ic1Yf{U@#C}0Afr;PzXYg=K$2#ziEj51qghsTzCMb}9 z`PwQ~Edn55+(oLF@FIq9jL!`Oh!8p71M++Z7}150LkXdUkdQM}rk&WYui$ z4L6cXz}7FeUbb!0r35C@Zap(#yxMhx2W$W&<9#$PIGN;VN-X?d38szas)<0r>LYQ(khD?s5w&D1WeNfak~Q3`b;CBGnl)HXzFVI zX9@*IFHTmgkO}3<%c$yb%4tz-C~KU`NCSynncAXrefaA7!4*Kfh+^dLAJPdQc&X#S zym93jg}Og4cc*R`fkn3NMUAtwQIgz~)VSq}IjyKtxAL83O@j7(kk? z+t=Y6-=w#JQDPV+hei~%5IhV$9-3t1U`m)EsXAGWTKU)6Z04VDeSax;Hn(562Q#X# zb=Au-Hh9zcZn%@t3#YXxr+`maPe1J=Dk+>yLoAjNsmNSu%K7`rVkZ!ZibTN*&`4-v zj|5!Kk+dj41!V^}0ucER8mM}AFILFGgk+vH!enNs{M;V?8@3GKTevH1Za3Ghoa98w zpaCHlkFv?#(^B=IS66?RSwD0aT~cbU+%0~$UF%>EZaO3hUun;fnl4&!Aqv9lQd*xK zL9}W&PwAtoDwjI^8X%|4+Gg=xmS1k6FQd4QLDP!sK6ezKZNAHZtXp)|Tz!Roj*?`X zxozUS|4f$dGpr&^Gy;!}yAig`Xf~r=jI%$r0&d-FzJ!OmgLrwghX(;uN8$gj4dFP!jy zFWmo{)4Vs(ZBl-@&m77CbMz5wXvL%k5M~3`*yZ0la}dGHUrrmtW}x+6yGG@yy3n7+zO!D ztg6t!Z8tx;-s5?gjRAmaUA*pt54s*Nqg zVWrK|rF=8e5j2Dm%(_xh+Ryy<+tSGYRJ95hq2R1Mm@W5rpJz>}VbcN3mXTs-GBSkWFtLKZ$HTPq zq#Flx(g9T~PouU$wm$IOMY2Xy)z35^RzKC1UEM4d_dGS>)mhrzQ*!71ho?Tv#E!Gd zmz)l-sNh*EGb8VD^M6((o{S6VFUJH0-E7<*^dPm_SzyVnti?N6lri0T3J`19^ns@{ zJ21igvp^u%27ho{d^8!?C*aU)SnxqTfh9u5N56;%nTi_s!;Ba3p9iwD&GKV-7jhMS zxz2Y!uD`l>O|WT4$76bEHyQW6Sy5-!s!Is+{pB}O9w{y%=O^%L13v-1 zS7qjFf(JNszqz54M=Il&HHmVxCn5w3@&E|vl#Cgnp`rw8$byfO^P_Av1oH+UZ~`$y z1aV4DnFgUe&Si!~bAS2GB+lYA>WAm+Eyfe-7U}7zIfI7e@YOiI&{t8#T9h~Nxft*7 zbUQxD=UlTWE_h$n`}8A#09SyR^;3qrXS;S;{PEG`IwD~@9+DvlU??1c9*T%}JQkHI z(gQ*?Vpj|Up@r}$dR!)5^=(B8Jk$`sOF}9M?HAB^B`3;(gMbD%nc&JIM-Q{EP3guE z=3={8f{vt7O94cM6Jrz#On?PPvs*B8e?rkB8r_w5egHE+Wo6%DG_k&}6j4sTsIyd+wHb+F9Inx8gENc_Gv5$GE2q7srOGo3A5D*Q*abF=>QU{mu4MbcA zPMNBq=rau;SUM#q%iiKALrR17fapUbFj%JePa&@Dl23QTIfbB>)Yd5k$AJdI6X$_g z5+Ftvz*UCk&U)aUsSUCJ3S6B(&RyfXx1zhq-C;8)097?et7jHi)>m0H`-A>n-)&!( zyrAYUNuujsG%49cz{2`fe$LLW9p~x8G(FCb0-#X`9BU%ZPyissU||X!h4~Y`^B!XR zbe|wgpt8(~!r{M7x3Hwu&o5%p54Hel6L(yME zNNO%X1z7hKJr5IMX+59&Fr8pD%b6ikyrqdFTHQzevtwof%{c+yn|5A{IN?SU@)1uNFq;S97Zv|Efvlepo>9o}$dx>1_ySR3;|Rr2X$gLN&3 zU<+DjC{RMA?MC&%_xB{sLqX31pxToENBEj_27vZ39`3%ZZr;1~R5ua*zrS&$x%@nw z*f7c#U<8>PGgp9aIXICnfMtO>o|NZIAgqK0G%1#j1|l(o6hW2|-y=#ugc98{%HdSt zLys-3@5S%DN}E4%h@qgL_icd(`V$eT)e7K*AUKv1=cXV*nwWwCa%2=tOo9G?&KeBg z_CFetbEt9)jHmSdpIestDy)TiZjW+TCE8WGum3BH^WtbWeSpl~W1N5K-h-6?pRsE$ z!j=DB{I{^LPkmq9<6KW-fB@m-K_H+Gs7?eNHL+F+#RJ|i#=;-kDK_r=Q_hm-&1-6_ zy-|g6v|}sl_d0REd_)%J0_1V#UCUfjwsc~lFDhG^(ydxvS@*N2f2zriGn_>Cm!<}0 zhY%100000pLqIbC0AExmAT)pi!WbRxf+ZwPnrgeW*k!?3_vkx zHseY+pID{|0N+9+001KZMKb_!4`ABmzK4b%#d;5a3!6{|t!|on{!E+Il*X z1pTin*L$qopKKy3kd}xM4EiAfdZt7|OtSq-d1rz`1p47bH|>?T=iN%crsTcQ;**4D z5Pe`oe8Rt)c0#5IRQuwcccqh$aG1nwV)}c4HTk~n@4pK&#{jh|zHizt_i5Ee4Ik+7 zPCtjCK(8uDI(<;c#vakTw&0(_-EgfT^}eQMixx=QWiT-I{QAVaUawC`zmHWt3VYvV z3Dd=7N2;+Nq$QgtTRqRmEI#4{m28iK-Ej}k3VD-9D64Ol`~At&L`5wN2}4sPNyd*O zR74fihy(H#OWXoUCRqQkJl+b&@hzEfJ!Ocyd)qj=bCSc_mAtCrUj8W&5A=u+FaPZAs8sB{vnkTVT6g zlyBd#Bv?xeKQvm+>ex)SevlKEBe|$TKT)i8ymkmjx3j(p$_h3-$;)|2;esh9Ss}?j z8AYQs5DziSuzxusnuv>0=JmIxtM)28=h_{XXQjOC>eJ6OAUI1df3?f_to(p5qg%Pu`K!l&NlP(Gnc8~#--%ukJe#wTHQ;v2)? zi8C;{U8u;XPu)SD^0~RPr4uL)n7k^SQSxAg4P*&19CgIbNmCgVn82IlEHD$m6HVt^ z@XXR)>w6&PR$ZL0<8o$k8_!ZbM6&L1t zUB2x(ecLePD1~tN6Yj~@s(i{G@y_jydFxlC(O2l8D+L-K(}24hbob}Sa>J&ic(xRj z2XPHLSbp6F8C4}@dODC{vi{aLUxmK3Gn=z-5VRJ)_Wa&`95H+O{B)X`Ifsrsv2--< z<*|Dd{_Nv_;z76^Pt3a>^j#uWWcHAn^k6Uum$t0W-i7=v+EiT(P{X;=9KN{C18?7?g6rUbChr2fl_j-E!xZ6{dS zyXnn6x1}#*3fSnrJ~q9=^ZEtU;Xc&^PM;@pI8H^^${`7ki%8<+A&B zrv+oAf3_P?=YB5xG@A+W-S$tPTH@tQRef!o``L3IkKgR_HO4-X=#R3I$(iI-MQvk` zHJ^)=KTw}-Rn+9?&a&(ggGQM3ZdI_8{5r_(=eK;pR>0gQv?5@9XMcjz+dn8cc79SSnjm~-Y7RsPk|fc*6Y5%Np`$R&WG^!y)Ugl zQHA=3O%xNWKevBW9M3M4U*6&g`>T3&F9t84ZS!m`U=LOLL1vsOQMt476Lnhcc=%B zhRLg6Uy`oKj{hjLHKZjBt zMfEAE_KSM$!uyZ$-yRnV{-D5`+1@7oo=9uJ!|ES)sbECSCVhC)AMNu6Y=>)qmGntI zt%>c=QsQA4Qyppzrp8V5W8SQnw1u^Qe?V`EzTe3HP8FgV3**18)C#Q%@-d<}uJ(UD zw=w;FB|)wAXpXd38K{`AdSBHq*iOq zd}Yl~Vnch*EX}@k|EIy(-(IV*?)Ph*ed-@X9q%>#pL%$g_0Z4ImiTm#%Tsv7%ZsWj z-WOg{F-kY9VDA#ELAOfUK0df3|3br<8=fo4jEAHj`!59)>FJ@Apamw0K&G6<=8$QM5XOT_@|7S^ z8SnI4ZB1vdA&Zyjo)5G5#lv^0Rihu@=S#lHa-L}kujgvNgOK|Y=4?3Sg>kq>C-`QgUeYMSJPYY+0&@Q^YMoMe+o~5>(T{2twg&Ay!q)Yke%g7Ee)4Lir>r_p)Lx8 zNimNVjmB)x84#HK6XHedCzdWN=KTWEzniDN>w96Df)-@n1L0fMz=CC1j@N zw!TQm;PX4`7$2~i5@f=4(%8VpX3=trVkXGlbTmxR$K>5a0+;pdc&@^hqQwP*Mc9Yw zwl1>VCJ9ytf*U(2B`actj;SOaWDi3DiV8cJD-cs7DHS}^P(p7#vg0Yh;-y#KSNX{z ztjG-G#yOFun1=>&*^H~~mGm}x3;%)^?gRxJh`u>Nu*w&#Wdw{UiM~%3Je100#b0GF z%OjcekpvpqazljJR-nV$@KLsT+DhCYb5{1d6EzhvQX?Gq&tvo;LWl;TKIhGKuQ;mhnL3tDodJyIJJ;F<#^ zThQK}x3t^sZiyx>ATVm32igjPO989Z&9w^*`*6aKB4L4v6-Y$0= zD#FzP;D#xSQCRWkUCfUL?Q2s*Jrt+4a1AFhi+>lF0%M{jsE)L1nOqv{e06CXA<+f7D1*H{a;DTF@dh)|a z8xuujq`*v6h~ebMOw0LmX8*b7KnWJ~Ugx*BxY;9U3j%F;2;T)L7c6N6V3w4mM{?kc zP6kH=+8+fqZSIoAj7)28lz`g`^H!g26*m{6&IKeYA8{&@%i1>MzT;DQ5@1zbnrWGq9p~Odd?O6-TW{epp;>CBDkv{hhZ@>Fi}JH?c+wM0@-c9 z*sdevnbQOhd!W7C8Qq+Vz5(kAp|MBwiheFaB1DKMs&Vx(NKmJw9Dd6rDsy_|&a zg;Fla@$n3q_%SNQ<`aU$Y!K{gxq0G{iDs-W&zTOhd}fRfYJ?YUl2FvMtl|V0TxJ{w z$b~B^64f!Lhg~kD7d6F!iQ6{sP*)F>nR^G-Kl?4riON#m^Hd7g?PP^92RAMyhj_%; zNkLAMGE0U$XF@v#HwUSn{0$dPgz`N$0{h1YttKXo>ODgo90SCpa^_9KL&uL3L8eEA zjz)|eN`@nAryba1Y1m#Y=~f!+f!rFNfTH#*uGS4>0zXuc>OUHnh66g5Eu)THeg`p zKnVx*Rd057RiwhcVB^xRf?6yM$y^XgSPBR(&c}gP7{3>i!a)?w5pS#jj{)Rnk@Ev_ zm0KfR?*~=a{JT5ri0^fZo#SB$-{roQjO5#4YCI>G+?G)k%LK2C?~U_r4Qyj|Te@{S z0bF+oa&lCRC?!}O2yT;+ZJ&iWggkieUeiSZ7K~s{&UTro>2V)jTURbapi9$sxl!__Zocyla6)j3i(DeyIiut8j~kP)?y$v4)^Y%<1ZTuWSJ17Z#x zffR0(z-tPWSKHQDwCUTNQmDjEJv2N`QGB%znX$+;2UVlz%FG_a4ye1xM=0v9-|_e1 zhT0bY9mB|^83Ye+dXP6b6i0k1SPBR($k7;rR^pa8cv?RMBdS0~Nuacm3nZIj6qf@f z;NQuen|+|4Ti8xCxj^2~rons>tPTV>p?JnsDNz>W_GqACp^nmbJcnsCRe3)b`jTJ@ zVOOiB*3x>`o0sG>5cS1sX^`Sq;P`NC-1!AMDnlZb4_9S`#{95N>MvdG^4`9jSZ zxT(Vwdekc~TxG5i3sX2J2iIKYwzr0bzMKiz*fmyOAXHpVX2XLJ$79piGyc^Sba1ly zR`c{>Ez3&UpC?M>i!H6d+u%4G{~D3|vkkEYJm|*(^yB+7A(WkB;o7SltIoZodCCxkmjp z!X~8kpSu$Q>p5TWy0xJ8%L5q)} z21Z)|2kOn*dAb_msi@11!3E8wlqdqcPPnKopFjjTExTBIcA3kRLsRJ}uwP zP~Sw|lA|IqA5bpiBkY<&W`TGfsK@t;LP~fk!Mx|SAm*c^&87SyB)hsaKeIP~LY#!s zwM_aAaKWBNRxo6FaipFEoT0-*bP{BWd1)kjsdvjVFv4_f`p(8~uj?x|3k{`ila-X) z6QQN3ENB83KL4nt%A)0-gtM1?{`HpS)2M#5ZjZ3(Zw%txB7Rz5^v}CsS_d2GQ@UI0 zc!?@=cpr{bM!}EKFre#BskHqGs6-Fkq!$x>X{}I-?Fl?fOGA4&rFuS0KdQxbSm~+} z`;5|WC)(^QsInYsV>tqyq7}h>I3()5Z)uGYvO0)Tw$X@@=hNm(mO%ZN%2@)HSu5K1 z4>1?MkNlm^781Qatl|xG{1l&aFp6{JUD5Q}1^pyJ`oYB6-oBp$0F!~3x>TS9A+*5U zdqw{hr>KQ1`P|OJ0(IUK=)1tyA|`nA@b(Va9MWwLf7QA& zYm|l664~@GO&_{ole#u)Qgm>&ynV52KdU5K;>eBVU_?}5SJ^+x35lm6X%mHZ>R zaAq+xNe7Nxu{k?FbY2=+E&*5K`EA~4nRz3&O=Qj85y6596mIH1mpW0QW&)E|NI|)Fgyk4dYO3sISbUP4edSZQ4 z&_1jQQ>{yjCiDV%chR^0bN)2mEKy&RqX#qGdE1L`2Hym`z<*zGAS={DBmdw%m#DYR z55d8KnO3X!{1V#pdv5*@aoGG%;g`b~5A{d19Z@`T0A6AY8g=XyXuF0PTFc zVlUnLY42XN#r221YHjr(i#?Yk4k?<9SOY>uezCPfF7z6S%_Cr-f9r=PNpxi^a6`LE zR)7DZoFqxH9d=e;^j;!731_84^Q)|+rYo$gG;!i`bpEVIwGPZi-9u+L`m&Gh?lGtYb*P$p|9IT{dPqc z*Z;%7fc&$whT3P!rm9 zB>q$d_&1JoNb|%)nsr<9L*a&h+{VAxO%Twn8VMZ&Up(DX*X-eu>c_h|$=PH{ISH0x zH0&K{fz7=;Y#1dK?Qg`Fu9v)uSOeoYSivN_YmWkSLP~fqD=?aCv-DoO&26=k6fsC&tZpNU9NBF4H+oI0;Bvr4Qkr9Ik0jG?I)h$FbYpnQQfZk9jAWy-d2=J z2B+MW-WSJvbZM=hMesuW&?co}1 zJ)?bwTB0!VHvIUha^~j#c;bjeI*%)(W1(}+xyZJA?2*Si+qL5~6^xSpzG(SyzD+3Z zpii;q#e4~DaT4FBRP)5CNf_o1_QHyhdWr`9o~63`Q!bK+CY&x=1Eag&b3r5ea>)6n)y%KfXS=+W8hr+p!71gxG|=tFAo zB1V{Hn-~C$#!`5SQ1H8tzBrIx|KIhcr9!8S4=v>ZChHuU6iPG?qo(?yS{R8!82}HL zbWV{F>}Q7#^J}zjLhBev+a80i62|P0ddkaOMK5c)rkC_nSeu5LU7ETWr3~8bLjgbU z1hfHmISy8evn|(!LLL0+3Z#22Q@_^fR_s(o=vx2uSIN3czk+t5r~Xz~rQat$QhdFs zQ5m@yku_R>r9v9`imYSh44bvXy5JJf!nZ2+r@&4hsJl6{PS~V5(w8&EWWCoIL0lqh zGydv_s|L0r$mWskwM}M>{@p@4sHc@YbJeK%U+U`$`O{XZ1R zgP|4EY|X`Rv+L`3ke+p|i*K*==CnoT8qb$iB%?S9SGxysMFQb$p(b0X13Uj1zHy zA<+be5hwy~hyefqi~t(V0U$eKzwg`KG;OWz^P9i(opj2rlUVy+xf?`pZR>YkY<*II z0SqxxK%_D(9VJ;*pc@C2LDGxx5a1$whfo-O5xxr~@j>tp&PSPYcm1GQj~07B(Yamq zfK;2d7YU;CON2yG)`<$&n%s-)=&FTQLz4;-EJ8x4+1ML!EHM3GlJsW)*O_g?dX>k5D3OW3Ww$le;R-qN92 z7rA9wt6$jDbv$qUeV%h3cjK&j6}i69x1;lsI*XI-Kl=t`(Nsf!=wsz(<*e)ajHhG6 zJvPmK;GW8No6ypl;?8aM>U?c+EiQlOZHw${RHvn7Q||?zrG}8D*{ITF1V_#iR=OA& zH(p;`y8F6bS-)Xt(xk+tRcO_CKN9UfY6fzvneIaL4VDRL*+P8J^ z&k?2zBJJ+$>#cFHql^BqC7SmBS-b1BE$xQlF3$T0T2b8VaD|^~SXcig)h<9iP9(l} z$k;vMOFWHAb{P&Uqo{=Y(0hP|2;_w(sh4J2WHAQ}>rJ&b}vdEB4y1rqyS=Xw~r+V*!wO2$pTd;rQheUg!U9-?!_yj1&boyZfe8!8bUb;A(Gj;qVOwQiqoHhkdEk9mE=MGVTqusvo_uIyeX5zwoARAp?2ptOA-iuV)ENaR*klQ-4A3A?{`fDxw zpH}JGRP}yi?bHZTD8|BWdUs|wb~Jqn|6p4YzoGA8LtIQe_&Z8?>F&wFl~sE`5)pC9 z4LQah%2%lj{(}DYe<$)Bab_C>-T9Ha*yZ*=&t^-sukSY=2nOo5rZ#3{H+6{taM zs!&zr??l1~T)ojVW=0 zm}Y{K*+@Ah>fsM0HSCKTJsq5ty6{h2ps&3%B3{Bey!SqR65kKl*CY4$0=7~tc6m#@ z?Bd=1Zk!3fbJM#PPJH+dx|Q|!cueP6X^GgiO5Q&3oBg(s z&Ld^JdY@lC8@qF?NIZlh_=V6dyIvvpUUTYOob_qa z*0i4!?{ziliJ#@^JwG?)eWMSHG?j8n6^@&zp$SRU_iy;ny39(K#GPu~H#B5uG~5hv z8bmy{=Y)_LqbLXS1M#BomKgcf4De!8O9-Sk5(Q+_}a@ zc3C51;&qQ!9{fGWg`OkMNnv%gN~hp&Ti+^?oPpPG`J3FW4@(xxowqVAnHFPQrYI%1 z<|1SZyKLKar)3%x#_Yj!vzBw|s^ts3K`VCJ^5N`W2`~oCzqjLZ-KzVvbWe3n&!x2% zrMZyYB0o*532pBS+Jr>nI@R$$cn+_!+^B z>?bo|Gy5UX12Xy?)kfhe7%o11n?A#QMj_>VMO@6RRedhwB|U~;ug+P*wm+{5wVXZ& z-uhV@M#TopkWq%p*p$!)$qgOc3s)#yzAATEj~2}bwzjyPlze1wgr8TI2bqsURVB0t z*l}*^kZP)T�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 z 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

    pO&K{Q(vYO?-=}qRr6>D0J>3XAa>Xt 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Ξe!Y}-fv6N`c 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

    vSz>;>Vf&|_e~D&|Q4#qbF#=k` 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

    l-~9 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]+%MQP- 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 &1X&IK3J;eqXG+%yq$|WjU+g{|0txR@rG>=X4p^ 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

    d*0pj+1HNKoW3u}+t zdZTW8%j}NAl0Jj~IPTXz~>eSAB{l8zee!4AN1z--T5Ny<1jCsEmeF}EepFKTpyN`eBb}zBV zKlfIXzdm=Y#|~`v=vy?z_xSqOzhcuj?RlV~LDXq3=8SsKqyF5U{kr zzFZU(w!g1#|D)dkru9HIZ#AeURukR!U#DH^e?8jm{9!#7cDsL*j|HFF>wY)?rwa=Y z-$972?CPI-R|8|OpoJ0p3Drl26UuhjdNt_R{#>R&8j(Tx|C#l3{d?a&!L{W1$o5K9 zCSER$5b;FLYWae`$KcD$8vH3cCr;2)z0(IjJG0<^-@D@Mr2X3e2frqykpJmg=Hte2 zpIG-9MP`jdgL{*s*1rH|EHQZ{jHxuLZzqBBV@r*V@@4WS-lKffZ}266zPloz&xrKQ54= zoQBGH#$KdDcMDs*a>o}}Y)=zb*Hk6cFN!;<*Ao+2azq?93B}LH8Q4UVq@JT)U-Z}p zDy*-mOQ>HIc2b%rUfDj=-$2lZk~Dc@ln)qLS0UVevAtbbUsIM)z9{UZ8BaAkX2qPM zDRvxrE~WS5g3TPBR*!AS!HP9i3H6I&PU`B!%}L?4M0mw3$#t0_cXuWVGq`ndVq40v zzNRdpeNos+{n{5@k}d+y`I*&LdDb}t?gooGZZqIg8c|HGnTk-|- z7d|@k-d&o%cHRiJ8mF6|?ZE=L0k_btGpw>Db|0bJ=Gspv`TDVpwiM6b$g75Ho@}mh zx~?W!5~tj>d%#8Whz=3kXG848^wf9r;FtTT7nIHR_uj9rJgMTorYrWoTRn!_p$qtn zRRnIkU#(uftsl~{(p63Fe=#e7gZ#ZkVZ3vF8(PaN&o>*7LcW<{?IGi{n0rPzJ`~cM z=ooCT_kT_H@3Ex5d+e{NkG(Zj@_lbeK_h$QiYS<0d6yI&B))5N@$3AY_(0zNTaQam z)2T`DMVDiLJ>dJB2LglHwGgFz2!#SHj z<{+ql=UDa_2y31cxlGcTiuTdxj{NG<`Dz-vGi=2uQ#L7b}DK@vG~NX$Lj?d70`uH>2$JiPNt5~N`i{5+6;jqRz@OfTwbq9@SdkPY1e{;?e)SBGs zGi)`;S$1Eiy&at2Zf@~NR8DfVS4GKUkUkHHnmfqpN9ay7HzWHBcd!{`E9Z{zTL~pA zo*S0PN!WAxQtZHO9U8sbO(Wz z>DGUv@Go~0d1E~?S8@z3SNEDjw&xf(V1 zOk2XY*60RZO+7;|yhk_o^9$y6B6MYE`_|x35)5+p;Cb52$m7Z^i-ygut#!@Y^Smd% zM|@jl-DQh!JvgS9;GAa(lfeajL;vWSs9YIH7-X!UV+_SJ4pl&N8%ZOuhb(u;Lru*= z=y)Tvi}k9XujUPpcD>icaSPvPw<;Wn!n%Kknopwh+qQ>z_$yBV8RaAQ939HtjQ%+h zpdx}L2E}U*YtBWmd15&Suq#kCL+8OclsH1pUp7H4yDLV3*E|W~-n=ARPFZAqqT*z6 zrMqJ3a0Mpw>h4QQ7u#p9(O^eH9)=$|q2s-r(3yfcZd#od5!msqz0M4p&U`Y#55WoQ z%s*k15wOU!Byfk_9_yS8s;PR&lYz=#n72?x2K?8!>+ZbYt4(CH!4?i0ED^D1q zR`5n9b{wqF%}ij~7jX>c4a6AN3ZAe^Yi>I4A)#E)`#$rsYM!zjS;M8^wvC>%X0!ty zbCYskhxZ!nxo3uPZ{^#nk(khPH*g2tmY5px;a$wbkn0V+7m~q0a zk6cHSgK%M$W@2;gU~{MaWet~yTfjFnWS6*x8>xAjwbfHz*;E|hZ*JyCYdC8K?QD&Q z&l?}H9;_*T-(kCn5qW3UOGAUrp6~A#mZvB_HnL;69dh~{z%RS|Vnjwarv8(O^7x)1 zpKGREznrJt-2!*ZJ(Z3_&!8=6xCtgiEtUU&Kt ziWzgc>W<&(7J-t}4*lBCC8I;bVjrz?5KMd;*SV$14CRM?Io9z!r38JMGAdR^as2yh zborfoEX`+DbHHiA!1i~7b%)yJcMoJ0f?mY${$k@*;b$GQp3`usD$QSv>4cW=bofZ9 zMsVED`52iCxcs&kcHsWJ%@9tCv278)`~V@l;I_MLJdKlDdXBHIPpR?C-G?&Nj&7t| zfT#XnkX?Aq09&&DwJwGG&v}v&U8yc#lIJy7Xi-ysg`VucUqSV^DWv-Rh<8(Mt z^y#>5@pj0FX6_Df%Y!U{308Nx{)XixK;A~l%x8}ec+PT%!PUEVA47o4)F_)IOtA7s z@cYM)D?-GR6ZYA2>f=U$h#zF4h2ZV_M$>M5Z{+0b(0wd~E%Mya&dnNf+UqxRHwM@5 zS`&WTWBwr>fy=rPMRE8(N5~+)L{-7l_7hSc`_J91caiYsl`LP9;sD#TESx$UsFZk_ zej%Lra)BgzLug;UpbkSHFsI(T{U(PZ6AjG$ZVP;)XqEX#w>E3N>Ev}2| zHXCfJm}G(b%@uQEP@J3Llz~g}1hs(8G$s)O;(Ao#1l=Ail?Y(W*AlM|`RRPMJMTrS z=EhRaG1dgPZWdZ(i-P&0^{e%;j~t;(QRqOD^yJn#5@{rok*Mg-e6`osk+>2|ntd@c zIbk74y*VuV5~fH%WTZ{Q4xx{|YCEn71tMz6B$Fi2XQG=C7)%JntEOZWX-`fi!fcl! z9h$*(NG@%}6BadN>D)8#^l*tRaF2;OiY66fNz8OdpfEqx&Rt)xkZB9hTvRccL*T6j zIfav{LIg-_EckWgJ+v+wC^wkeVz68jX3D3fqWQ9a=a<+8Q**STkjO?#L`q-*JE7W} zq}u@FJ&_b{xoh6nqhZ?RA|_c$p_puv2wvP$rPL^^i%Gw#!Or$x$%~p&@B!Rw3g*!5 z#(Omjttkp+uhywU=+k%Bi9@}8$m9cALQ*AD778l0UraWMFfJ%e`e+`z3%{}qh5#nY zl!%tvYC_X4H=5j10;OoEpgwpTomR;_Tyjqepo0W3?x{#4zXO&^3;KTjDxRUc)8{O1 zj-7;YZJcr=mDWNSz$R=!`SKsMzhcJD@=98iE!W_Hu@*0*HND!#MfQuowL+n*MWt!F zpo==$YDvzDg6S&U%GpCrnB30LaOrD3M1eWmO}r~xjS{Hc!W?rCOdawqphpDge&NEfcxo!*XB*IYWSp0LijY7#Mfl3Y|5tJ0OW%ie7Z-?$4YQ40NX&)rl~ zicix39Cu!awZAQvg9j?uAe?GwHIWn>g4c254SRCIKcFp^nFk6nq+0>>zFDy!kaJsH zf~-bT{(y8?YaWy|rXo7ckj@RY5_1)!82;2HvIn5U7x73jr&=60D@8H^K_o*cNl36N zV;PjjB*ZoY+QJsltP9!hN{~V;!ax>*?^xg=*aRY~GL(o>QaM7S z%YO2X_!bYkMmr5c5Nh_Ny~o+nMdYB2mq+q)q6s~w2B?>Oro@cQqN18gQ%ivYTqclr zHEBWs$=pa;2i%zg#@&LLsMI4+ipwDK7!C48qI!wh5PoEvl7w!Uz84OGDZYe>QPQbl zV+`fgqe)C4a1@EU2((rHh)Y0$-OKzad|=Bz@Spx&NTi)8q5Hp z2$(9(rE4r;EPknp*>XsMz+2I*lNKeP0ix}8E*8sOXUH;&7`PE+-9$_|D4?i;lB`r9 zG6`hIe6N;uA*Y8#S*+G>+1QGel6~q{c?3#-T7o~*Va{nVN+OI&cA@4dYcsSHSy^Ov zOZGuvQ}GL;$!uGf)ZiVxFr>)lDNr2C6i;Sc9NCu8i6{*X=9ofioDAAcoh;sXG%W!n zL-6IA54wS3L@7#%TC)*ojb&ceif|y2<7z@Tf&>M8fQ#e=Nwz@aE{|L5Qz-kadn?Hj z*T&%a!HCnkp(4v^uDUoYs<}`?32)@Bk+G88Jmn-5>(q#a2ys-74VIIEfZ!BMV$hi2 zW=1{7Q2{))V=%^|yOb#?WTgz~tryNX_XbnK*ahLQeTE>2NEiwy)#fcJv~jQ_v%{TZ zdJP!RqQodTjVuX(7c0Xhk5$pkAm-Y!551z^T;bJH7Qhd(|B|ivg)Qzv!kRS79de+jLORXafU5ARj5%I^ zy|r+HG6@rQeBjTC6^ua#HvzOpiHV zMp%xXhF46WMphP3X+~0GicuvS4jcI5>k!r1TKhRV=2q5EBm`_z&Qw4u+W`ZOO*t1X zQ(AvkLqmDz^UcWc-0Po%BIVz=%jdr#9&$*2_@}jqf*{ElQfM-P!WLBP1f`~>X+{oR zuI~Ety%rdVOeUQqpOcCZ^rlFGw2-u+coLhgZ zxHO8EH(%PYG^mB(zKxtRcb5BUZQMG}J|>Tz;H3*$GW&s2){N&%OL7X0V@iv0TFb5l z2%f+&VMeAUdJRa80uYUGef7-b#RZY65J@dmBuYf)Z50PLvbvLrb%o~xqBI8~mI67|AhE8BT!)_K#L<{2 zmOkT3rI1R@4SP!>nHJDM2QFzJ7cuA5#uF|cAxKDZM6#r(CL66KzKw!0#n3U)`gNaL zz)NrxzL6Ob5F%zur)0oMK}!@G(24!=yDwa;IKY;QCZ|C$yqL(QjSN#wG{HU?C!7Fu zSr1FH0i0S$aG~AVd~zfoWw6IX!1O@cg!JoL`)r9W4Yh_^`3|#@;go{F(+_A1@N<#e zgWTnxPjTnpaLaO6d>-|-{{5YQow>Ql+w$C7pNGtnw&W~uUiz4K}bA00cIg`6eFN^Evz|EC8SS#70}%F`0P%zjfAoR!buZM;Gl zxhoc^#$<;^N0U=e%|qzpejd`(0F&HXv|{U}IR}d^h*-ke7b)zDqaQwkG2BegDC174 zHcw%;*(8uCtb%d#NeBIu!J_jPexKuvp z6TrB%mhU$I=czP%wt9>(EQ->D8~6sTd+a3IZVeJs|A*yYXZGSBlhqIVCZjX_RBVYx ziZ#+)wrc3?ISTTL$MgiTp!%qpfP^z4>P@i`45C;uMSI`z3D;v^SgHgm}ap zECr?2rK!-+YU#Z1m^rry2BL)bO9GaQmeHueLZIT0?gu12eoHRug*5S&gd3D5&BsB=rxDI0Yq6 z39wLe!G^F5|8Jn|vwuGq9Y9xO)j(>THO@6sHBuUA;Hf<(n7s)qoJ2C!OUUl?0T+=l zJUQU|jdf99K&wdA($#b|Sq-d)R>P`+s*$RZ6szpmrNR=Ek&_HTNqD=0vYvXN7Vg6Rh~H5cy1)dE zAn_=HSKtV>Tz_Rx%}5K%0%t+lsf`;WTktU1)??m+gSp8b_7=t<4CPdASECR0o47E> z001)sL^A{cB|x^k$fNEqX66!GfIz`{5Cr5BGzD_w_Yf_2ZMhz8+yI16+7o~f(Zmu7 zmZX2gQU7D&Hp0LZb zF4Jb@nRt6UvbTh7F8P*y;F;B)2e%`OBl~g71u4y4$#OIuMC+ob3kYfAqT?t_P#C?wEw3(D8@lTnulU&`N@Q{|;Y&;JtY7|9!uI zjU(fGBkzkSo`T17=OyV-*%OKVEebp3RW7YZ?$;zqUTiJGqIXYJ@?%7Ch+)rP)gi(8 zEeJW=U1sMV91mSII3HX@=21~-k2w|*nVbd6OnQx2$-oKAixohEUd zC%U@HB7E)B;8pJHMkET2YMxOU3@qVTJK2p`rXgegoF_HBKAMvm88#_UG*FK)ZW3A7m8XS~i>*xB7lNj5LE^_?ac)DJ{OW_E2PqSPcr@eMqn&&hL~5l$up z!VILv!KaWmGmF!xq_#fHzaG1LoZ86g#*wy!GVn%4P)pCAIW24FWOjHc(ciK``zU_* z8TbCv8Y*4R%`Xf|epWIqB9jv}LEn%ql2^l2^xUNzUJiWf&Xd4uB)NGjHK8szvcLnA z^7_0MZ9N-l9kI&Sy`kw%dy%(@{3!C+hWR(szI>}!ZHj%S6S1@dWerZct zneigSzk5jUiQP|f{6TGQC*lo~@_AlV`X)+qWofQS@7)-16I(AjI$*1prX)DetX~8v zD4ynSbt;fI&l zTVy6D*!S>3>&kecJF(34cYCsQWvi}o3?KLC#C~Xw#SnJM&NKHrE-Kw>jShxBQNVg~ zW%h2Od;jd>_UrpEO0o#shhr!vi7&}Te&g)kadI?0h>Cu>>@~i13D5kRUR?GBe3Oot zkSmHSTw|)MJL^!OZnb#AX~wM+^z8J!KtHj%;bDRpYQAD;%FIa@X$3PzJe_Q zF#J9FwEq2-CA1nek=P_gwknx2C4(=#WtHJVPo#0{+oNQ=1fi2CtiY%zz*DZ{%&1=z zMJD7B@=qUIKk`#>Dwc)Uig6*3Bv``ZEwJWG zANS&Z4LsquMwW)fWQDf7vi4Y+S+CljYTiR^v8N&y7DZma`bt70UrJZxqi5@yN<%!j zSU8#20Gr9u@vk|@GA@3@r;rUzV%cj4hRcr02d-?*k-f1$dhnQ0S;0thVpGdAgF|6v zz0eH!E3c;kF(_Y?+VslIE$D}5$=D_T>q)yS_0MtnvQlKgJLntp`V-=1zoD%@@!199 zyWnxGlhLJrz06FHR7E8u)rV@4%ad}MJy{4+(|83@0$Q4M$N%8ro{ehS{nIILvqol% zgJF9q@}0Ju!0PxU9D6eg0ZmnipmAyUqnwXDn4S+AiTw4>(hYuue}!cB*-A{t+gCKv zB{iQVGRmEJl8-gfgfjkpzxI|PXOAs^cA3F-Ks=+pfgK!*)@)Jb%WF>pwUgGba)>;_nWugFISAYLN874xeD;uTHeEo#f^@QXrjAv%Oo8#_xI z&pOnqK;}wYnB=XBqD!LT{PhF77Ikym=mIC-2e9Ir7<||R; zO@=f3_#LO8UKP)hrOw%fb>-y-E+-~^ESVm`A zRnqav4th2x$usy?(Mc&I@bbx19CtIR1}|lQc2r-gV~6-#6}e9IoMrU`X_(PlYH3Rh z1yOuiNrgwUxpK~3a?ev&hGDbI6m{vcX)XTkDqGr6%ORYir}i6$2VanTFZq{?#xY1V zZ;d9KusQ}M;W$Z_q(u}hlw9y4DRN|B#YF#~GcZOTL?&MQCey$?O-!Lw0Y|IE&{C!o2jL9{rrWl{05+vcnX?=gE^ z){0Yr@2o69wx_DYEyPd<)OGg8Z^#D1T(6CB)!NpW8$41?r&{I5S=|~|4YV@vN@;zU zPj)mrCWUI=r(ljL@^+|2zL88$W~E6}=cIdY?R^7|rV}g`_D;0eaQD|LXw`~&DS2D} z*8*iz`v~6MXYWp(c?;E^73wBsoc>Yos_WiWc54Dr<|L95 zZHJeyUE9s`(@xlwWVL4h#H}GWzZ3q~92q$@@U>o>Kza^+>mL`XZ)b)Uw@;Oh?obXa z`B7a>idncdX_G!S&8}76P`5=NLg@$|SCQK&);r=hlJB22J~~9**xTEs3yva`UE!WO z+x@GyQdlDl4ja6!kys}xUqA8$JcJoHSPRNauk$BJvjE~OZ1Z{MPgG3)KACx4`^Pvk zoRVLbQpFD;(Bd;N%g9v-L~ez1^DimX~p+_f?!J0b&iMfZ(-@I%8mbxNZ z{qWC@oM-*;Ae(qg0V}9$`_n21j%2g>*XKGcUi$laZ=J(x=Z7ptb@=*UzvE71p0xR-{X4d_y{oUd_&kXvkoDYOR5emwbO&M3F0=X?)=Bg!gBMa zp9F?B+vJsYijH)(uXAM2*HkSpKhHh`dG-p+4igt(AF_gJ8dVK!f#hB>yqEgP~zt~;XT|_Nw z{nSDHAFFF(qm$0!8KqkrxBv5I4e5PYGy3fnE+{OGd`M-=I0@U&j>++y=G16mo9vI9 zVlxG?{Nc2!u^4!YW90D>=m)h)t8~ zRskZikEl6Pyl*~{po$(ogWp@FE!M1kLS^XPUkZ5Wg!-K~b96TSJXq)?WBR$bhTzlQ zpsO-K0GOHdg=@Qa{S0flwDi+~FMHO7t5PmMIbd0@Ot^a4x|<6^IZt%*Hht7+@9$1F z29`A*Ho8RUmhuO}Q;APirLP|3beorAZLd*$PHk9HGF2p!1joHV5)(*YIbSjFA(y46 zL}AGiNpeN9} zkhju?y=`VDXSCsYuJS%U2f1_JV&W|p<|8Jti?OAgW9@3Y(|)xOXX4GiC~fFN^^4bo z^EmcmOUm8$KId2q*y{hn?h^4=FMuP@{;klU%zHEM&g|Z79CsUcg5}FLNf+M~@IRGc zP$6To74gzMQ>R^VspZemRpEZq5eMV>{)H!`V98cs+w;k{S8}pF>cs1QSkJukIr4ti zU%}-pF;ooF2K4NtW#_Vm6Y~g1Ic9U@23>Aa+=eWk&6V-xRLTy}ZZ^)=+-X^2`2YLm zcwRZ&^Rx6AZ6inbdDxeOXX{*f+MM3!u}Ru+o%+}I5hMznD6}^1y~^^SYu>5Rq7bwn zpKp^q(pt{zZW-{cm4|Iz({za(H~;?tcT5KYazC*a4RxwCu37R5o1&j7t39Awn%6rR z+-FOW>)wz3a{ft_YwMVC%|MU|QZ??@U+ULVGk7sPB1~r=x9w%=f1<@fgRpO(>RtBW z(%>2owe5;0_>T)2(cD`j?Yp-yUi6gx_R>!cN8_)ePn~bo*woS+I_b_%eSWR?KOAv` z4rPh%vh7x6vj1LWD%{D?dmR*;c~+fFYDfNvV~d)na~o@G?YXL_+Du^yj*}Vi>2V-r zoqX~vVM%y4+wYu{Z4QI6@Ykv!;;)&dZu71I72+@B^=FFDk zXjcpX7oDwd;IZ}a{JMFGx7Vr>0JG^t>L)?bw^f-iR6QF3_|SQNO()OLmNTso+zL|6 zTYG<(AYu5YKsB8&x!Hg(rPEl^3M$nki837B_d70kca!!hY!a7ztq$@4VX_2uLNjl= zujdpJjbqpxclGdvkNw@Z*!FWnjly|>B~|8oiy1ldj;6!_Ez@{R zi@H(mS_9q4)wfGU;^MK4RK%+Wj-2_2=l*>AfLx@ql*{IjKQR{d zyyy=uX_>z*Xc=3pt- z^fqQxuTB3==q{+8psFlvVF9Yt=QuJ}ZS^eWs!x%xr%UqPs`?u?ZfClM#fK`yx7;Wj zwlQ5>m7Hu;UvQS^cz>d=8%Mr!?$bQW38g2f`L|ZERNTFae>iz!0j+KNqQGypmM8(6 zqbx@x(c|l4u4kEE|GaF6!#Ba(^h?FVKKSzY|NYqw+xY)+WQ~6bCDM)ezxjV(-`=y_ zJM;NJ^MAij_s`a!X1HQzVI6co4ZIhlm{xMr^(gT@{in2hjftoE!}tB@rIOtLR4~bR zn{yLv&Vz}*2;|yJcsykl<8Ge4bUNhB zn`Ze&)X~Ecdtdj5CuVnqte>h7O6aLyN~-MEUrFy1dpE9?oK1t^DTqC|4G3~3=&<4h zA4sOt-g*a`->4b{1Fz3-ciMYcT{dS!9JtpP2lDjvTgpAp+JwtYqq8LRK}Tl<(kcYf z`QMkP$QtgRK6roM(bq~Nr)Xz8xhdH&X;Iqgro<_O#{wTH zs73Tm_X?owD)CtG}QY&5b3j}7~Y4jNy&V%AAYfW@ZTGJ6pO%_8>Kn8BTd_Fr3|@yyG$#- z=~_~i_Uqg}NS2WA+}oW|)L*PN(?HPeoh^wOOrQ>&*d(*zWI3|Sbgk+DiYnPW2ack* z475Ysc?LQJRCUpNF+9b6&e6quKDDIj15VInU;1ygqszcOBFLuG-lN-@$Tk0buaH@! zFjPLWe`BDjW@J^TX&=vd&A^NA##v#rx ztDgGLkmm&J_f|I(YQzh<9nsnLxsSYVztY}4d4bo{K5*4JO^|I!o?x%V2Fqe6@1Zm& zGj$K$pg*);xa+1Ievdp9eo#OCdf?JDH& zRj;en?hRcQU#u4EPs4EU$t`7~b;Bb&^ZQ>mrJP`wqFb%HIj5bjxyn>H!^YBV8KK!% z!{`-m(sT(q${> z+zA-09HW=vNn3Vxt*L2Vt;-VNI-QNMM8lLMs72;&ZFWW51go>K;M78wY$RKgr$Gp> zdEV6V^^U17v$Fx8R})=JSI)Oke&#E1n$DFZjuz~H z_U<+tek;}z>*-g=nJ2^f{xFuEn*q_pki_T>pHF`ZqKk{FwH%>EMpnI-WN^x_W0D&~i^(A-JTA+1i`lvaKh(KB*f%J9V2k1mo?{ z>rCXktP#^Ew^z$Nu%wRlrvsSP0H%iE%t_xE8hk2fIS>Tht9%dEP-B+{O`eUz7M48X zB_I%TkxgP^iGvl71RTJnKkYeR>tm&M;29950v{luInb!ETZ=#xJEVA=;V$cRQF57^ zP=XlrV;%Mb9uKQpXRM-ToiO}S+tizMY^x><- zDhJ{q%ta_*z@{CD6vvB^0an^gIt|daF*6}6qM$D-9zXsGgvB#J zVGbg6m8dw8C>4-viz=r|<_S6t5x8J-)N`)JDJ)#f5FET#BZ=ihyl$?t!!108MP*#j zwp@t0D|iS1$Z=w3iH`Z6eH7$6W>Df|z>`R(Z~?%=!7Bu0t(XXoQbAv?(~EKvhR`6T zptf7@t%1V}r=W@y7}MagUTIvXSYt+aSu6w{ZxJa+Dkh^!z`Tbd6v{_!a+sxo&LOV$ zSOv)V9r!{GXNtzN2{QFGAa!GAOaU1>6%zvyT(C7Bijc{9XyZkqg9mWidV-Zy2B|6_ zx-Z4$!Y&89vVAi3i%oFbYJ!5yal|lpiZI53TP_j{DIEfNi%uci1qBX0qG@?RR92#} zb+M_`!;R7qUTlQh!4gS{1l{Wunqs$Di4sJPB9gj@O*>+_!qy-F=ups^N=#!WND%9w zKvJ0I9=@za&)a~?JpRa3$Q7>@;09n@s>a0pn}n_hZp@B&HI(JXX%XTo3g!zS9xB1u zh*#Av)jqn`!@q~5BUcA|MpldkjM)s?jM+xqBW^=BLpDP;LpIMhk8#u3qz|9T%8F7QcZ3V4^7nD=o52&5`6H^G{`Wio*@!sT5&u03jSv z6^0@P#o(0T2RBnL)31T-rp;6VwPe6?XDMDupqPrN!IYU}vj@ym_NVijM`1DNN@^9Q za?s+)29Coqm~8XR&bG(Lr>!=it3zt$%^;!9j$st%(-8kO%52d1GJPx&9s-TENT-4SsIpVa{ z%jbEM01u){#Q^G^@LP%TGcifAuRyzK{+)0X7^;KR2g(3G9%2qWiWJ&`--Jz~gnK&3 zpSC7vw>kiRK!LyLEPx__@rb!hge%6;4vKma@&h+oSCUr@WB_|%ku4y|f)P@LXZTkH zkW`9;Ybc@wKkbcBTe(k^GoQ6A_Ar?kfy&?&*ei=ElA$Mmu45PKfJwB=>6Ut1Q80+S zI|YO>!5KKk$LCx93RyB=ojU|(1}i#(AweD;1`^4lwGc!N<3^CRCrwW#%S0gXu_-`= zi>^gFcCuded^#$rp?Sy0bB8viWYvqM3(7J@wql?Rm!0M3i*gvn>4jrc1$B>Fv6$GV zD9$6|;)I|swbhO?J+@fI3vz9D9M3o)CaCjw?2V9OF|J1kLp7!)vr>v+0TARu*svWQ zP<0~WG(^$giQB6wOXV>k#Jm$)#A1Nm*8xh3ic|_rLB=)t_cP3O*rqTba=oy(LnCP$&Vcz~PWD2c1keK_E~dI2LI@n3f6! zHB>Ax;^MrWXLK?F*tQlfu>>h0tbExP1BpNwQpQs~<#aNGqL&3QpqPrbVnho^4jh0n zFywjbPe_tp@+?Ob8|<3X4gkZLL+FBWfm~qln%GS_#Bs|3OPDhln2}sqVZ=e8-sElF zi3wc{nTyPVSSUFW6O7O$j%I3GP4QX28LOjW{%XfLX9%aRy^K0-?Ne>ZB@oP*HgDJuUX#jDM@25+g zw6_|%GJP{Od9v?D)4Ko$*a!+(E4ic?a>%qgh`6>h_8o8ATOHmTTp2jK2p2VF%GzV5O1}dkIORxh-$vZi7K~}dR=Wa$O z7Xua+6;L5Dz3VW}gMmfh&{Q-?w9_FX?ynBg?VFLDE4=zBoie#5j4^AqWNM_44hA%X zEVxupBv81q_T<$~?w`qv1+l=CTP*a1%zRscmssEq5zubMTzHCWHM)p)5s4KRy^9#a z6S(|pI9>i3D7Cpi z3j!7cWFQ^pin<&?Y}4Q*MihBL{DH?LR>3i4Jn8=rz@~o;%)UUyx{a);^TkVH(+KbmJC|M=hpl$C`gQ$-4~_Au(meL3>GrDWrOU*!9j$9jp9U~ z=vx+x&IX%iZsZZ5i3F&JU}z~46H^4;7&w$(u6(b<8}Kyab0Py#2^JA*p%Zbc2tn!M zeEy0i+}7F^R~C==s7s55pbaub1o^BN(qyZnF9tJ#4RcV;!5(D9WVdiaq9(d@L2!+@ zJy=aG6--PhhCz#o0Hp|mBG|k!<*Oqh!g|i!34!KN3UETrnQ zW@a;FGh{PlGjTJs8MztE44eXT@m69N@dzi6nRo)c;2?Ol5kF7rXo!Mo2r$Z2X{6*A z$M3wn2H>CSyNd6I_cL>53fy=&@-wWa-Y`X+J6RB`%XH_WS~rf(&{LxW0?f=CZPKvnzDFtXMCH9y88I8p{!7*8Fo6G`u- z#J@WjEc&-bw)MUGQK_U`&el{)yr#xM=!=LgpfM?`edT#GDH6laelwY9%0^>@C=QNR zOEHB1LOwv>bGsCSE)fX=IFUs-!)Hn@06(S_E;tYRUuUrj3$liDF%TahI;G}{QTE~_ zEjfm(BS6M737!};2Ups~9U41Gs@TOzIid#y(1Y-pFj%h(kbaVxE2&u5C z8I|WfIV*ANAO)+j5l)J0G4_<0iV1vpb?Zk$(b)g5z6I!9$7NQ|q7cYt@_StB@p+ z&7934nbn?bHIPvxUaqOh}dv5)XZZ*B9b+^u_Pg8X#`l^ zKa@?RvDG%ptoQFh`2hg3nIjqi00t;YFh6d&0Tlqkv+!)Zn&&3jggfCN=I=9!2@iMz zm>MC(Z6_ewSjJy}46t_93o3{LvHYfH0Xf8Rufs3`tWupi3>CzPb?sECfFRay(_z2^ zBTV4%6%dL502%=!8Ug^!ySrT`fJ5Z_zPG!7yP2(Ok*ENOYYh%=A-nC2Yke=f+r7P9 zwqmxUU?Gx|glEWrfQ9%1d=UX7d>;_}-#rsWUo+qR)O&^NUc0|E^FI5RuKmo_Z%zGI z583-oz1C0H{`;w`KhD>Giu#%Vo$jZef9^Y7`qck+??3KdMegUg2k)*o*xaf3wqGx2 z+h^E#@b4pF6siVaJMG;5ceRhd{YGV6Aq@vhClX8q1wK%45!irMnzP3t_#k{!cc!ty z0LHJ}7{(PIIgDdD>v`i#Yi1+CIu0HVREPMdVMb7hg)g!tj?ppJ$livMIvyG54TDYU z$wHp`y_gr71NYVb(s5)ce*@RJbMD+suAbUTp=2)RQd2vEMRM{r%j zLrkzcmKjjLYx2t1CsC4ALgo8Q5@liN!r>t(*fGQ*kg-OBqFZd1D;4EX59yfU$UoU|@?QnIZvYIDmm>hEWiex(E~$S%?)}2k{UQ ztoH^oB2s+wD$EJAFue;(9z9Eh=N^KBJ#>*Avydc~tWb-_JtJBF9r_(BSRjDAXWBVi zI8=S@u5g|=o~0#JiLC)O3E0IEnZ@iKz|hgu(jSAXmKuRJrPu*VJlyiCZd+SA8A@Dt z+yug3UrRSTPd-C}44_A&YCavN5@tqe@(XF{Vx4oDk1;O;(eFe5cB{dY-RuwjYIlPI z)kKPneP#oLB_}RTHt*VOn~FRFm_gVrZZEkub-Qnsl>eDNN!vnVzUKB0%Moo zb=EQ%VcM}QW%2Oy-Fof{%r;+OXaJoYXzH6S$2ZinL`NnIB15;Rx4@ z%B}N1k|T3H$~4-KD637j*7L9ok?VrZ((24)!=0*)xz%{3B3#nRP#KSeBjRy?8FNgK zl$u=DdrzjuHxJ7AEjHXU<%Q!|%|zBn6)7f#k=F%o?B-DP!fw}J&kx1Vs=H_V?dHC` zt`~az!N55G4nst5i1oMq`~G$eWoi5I&(A&%x9|Rc+pl61;^*+A5@R@4Ay27-xGw?? z&by`Fv?@y)s8MO_e)P1pbKQEzUWBgtthxEs;hEhKUfEt&+BJ?9)=*l31w$QnnQYvy zAq?VPG6XB*xGYBLT;_VrI*mZ-nwcc%eqK^YkJo&`lBqR~*W0La1WsHnnLAo#-!T3L zKN$Y?FT?*uz5B22aA0rkIoVjihnV5OD_G#-o?310bdE{Aug5U4h3q0cgU0UOmfpE0 zewsk2y{fh^#OXvPUKxS2Le9h@mjH)Ldt#}QkUV9PK|GW8ji&Yhjz|_#^v30l;ClhV zQUZR#n$&()d;-+wEiA|-a<#)^2+I4;2G!7W_471SU^4$bfQ;Lx)9RASMAeS|$Zy4? zy0^*IuOj{ho~J<$A^{>`uVdbfG93FM5pZm4G{E8fQ5HZ?$>W`)O^H&;shT0uN#afM z9Vf_3F8DJ6y!uU?+4~c`@RZ@sSX?Aod+X)u!tVpdMi>3kZP{9$2)oOv@Rso*^D-VP zyfl(pLNj;WPyVbRMz+g;2eCW2VJ4W}Bq62hN?*cf*sluG#nTNW%ts-tw zMpT%JhKXPNz1aF^i)S(<+Hkz18w@BI5jFCN)Zq!g-gKlu9iH( zgt$^K!@=-rF<^EQP*9X0O6Ltrl&f8Gv{uTNY@Y&FB}Vde^tkf_=i>zfhB|H&35FO4 z-!ZAE_lK;|xqL5zCDb77&ggN_RTRDGwhxjfJ>?k)m_{g9?356W$T>O`mh@$iy60;M zw9Khvz%`$KGe^e3;J~07Rypx^p!E2Q{G&G$6=XgRy))-H=tSXY+4=(Qc*hb0d3YLo zYGJW04b-Ls0t3MKv_%_giPuIobz&g^wtV-t5AVzds3%6Z3E>|-9O_-#hW8o99n#Tfwoq)PJLt8I3{mkQ zz4y3)YP5X$11ks10xeom^OUZhT@oj4m`4S}Oq}KV8`(JG@)2Lt7MsUV5ZyB?a3`Xo zw?bSxIa%7Yo-hiCOBAXc=qb6_tFkmUR+GGuq@3kl8fLXr!-oXT0(UWIQS%}Wfmmgk zCzA7a9A46+^-05}mW(}H^){}_M&fVOAV_gUqc2Gu7K8%)a2)Nw&gZWIrxh-`-$j>- z93A0$1*LoiIoFBzLlq9Tn#t)XKnHf4;N%+%odThZj@-H<8g0JN2|848dT(qKHy!Y- z6p45@ypG%kKVzPe0|sNq5wnIUIE|07pnC!v^T(x7OXMr5N(8NV`8dM9^sjw=1JBuL z`C_voWM!gRd9_lPiZkRj&~n`TLUfx-=!eQ4Tq(*YnM!ah-nIESovxqZbG{@S#ONiL z@#eT7pUpF5$Q+kj1!{1@r|YH31@`LNdU?99-wm7MlvHby=yE}E0?Gsh%jSLwUO5!As6^i)K0h3KtuiYR91TyK&5n{C_yM_!z?=7=T|;nH z{%^IC#hhpg(;t$n$?R`xmMH!N-keu9-Mxtk0krsLXj@uR!q!MvqSc7(${q3}`vlJH z?EdV%Z=tJ!1YDc9G!?E@R9IVs`Oy_tTPxlP_Cqh43=Ozt(3urSQQSvlWyBXA7tF<@ zx@ltRjcARJDyqqp@Qg4hI&^9Oa+6APh%#=W{h^vdrg`?U5R7bkUck$wPy~vhD zcSqMtM^i&rL-p2Rw9?2-j8w2U#^)$*q14ljYy5QLDarf=L7m6!)TBV_TbcL@@J_zw zu;`mbn_GyT(lt>CkS9q6R_+{U5^%-kW3b`q$bkxAz}T)k-Xd?2gxmT>HSn8T30BU< zchY(6eWw$S$|QaXmw_atM7bK=d1Zu^5W3(+S6qAWeTO2_6N?LgKXr_2S5DO-?qz+x zXR>9bydE)md_ENgGo!`X* zvzRLHfeVcu`L12BYK}oq)XO+z^YS9bkyw#~vWU}8a!=e#IkT7?xZZ>aJC;fUdau?) zQ>{PU88%KOepyWIIn||{`JfIa&D4fid{cKuiXs>-JebY2>%-)!VhK4C#BOMiQ=?2W zs4lbJf!ERf_BsUEysL&EH8d_OW=zH!SD?}SDMe<1MC{4Ywa z95zs*F>9QBPgY!@`CkRZA%W=8-(dA<$DyWgF)q-O(&ZE?%c+^fjO&Q#_Z@=J*CF2d z8mhgenBn65s|c&`m}jQjjHFvwm<=90E#@TbteSW=HP(XejInv3tUdYYv>)PubN1dn zG(ik+scdepQbi+LI{$-wb1sedf?3tU`i1Rkp3d%NFkGcvrif%0+<`tzw7W{XS^8I3 z4ofI&j=?S(SYR{XSXuJX5d?bCauDbIO^=FrYWgXTjvtfj*|Y7Z3Tiw>I^WF|zguEQ zwB_gIIHyvic&aC87+;r+U(=LqWW_0TFb^b_{>wI9kKdExs0+~Og6He%{1);(1$AQ3 z!glTO$9q)|y{LAh7cbm~?zBr!F$SMHOq%FFVDDl^5qM)LYP1^UBG&u7*GjX8;OMc! zCbURVgg$Qkui~b7DhOz2(?Izu z0#?ZxWa(PT36I5X4D?l#8xGWC^YK=M!}(H^S0A@ZSDi~rBU zw{rNl)m7i!vc?0OD7EMsTV82GHNrLZt5Le)Tc_f*WlAu}(~IXtK)9xIM1hfMw6e=S z_QQxd9e$nZzD7{BsW-)e;ZZF*=bhfVrbPo?33YU1I6kXE1$3}ur3OY*t-Z3@x>0`7 z9010o6Cb(9u#ZMVSHjpQUZ}Fc?V2rg(`Df-a!?U!LuLW%&(0?|q?ZL>ZAf{?eTl9)srgC!u(; zbGb!p^LX;k8v1&3EG*QH1~KkA!@(Twl+{*2y%QD38!9xq$K(O3?+M|nGJa^W1zf6jQK>~Mn;=i0J%*xrNtjxq{!xA@h{)eQHNtFpv4ibF1@k5l5x@) zcTnR&lfTiT9Jxd}X%T+v7n{-#Ag^SbG|*BdaksjmSH5=#Z0{stJ(>Jx^&UX%$ga|; zxLI7qRKtu%$>-yLR(u-Ud-y^@fb5cH(&1W8)OI8)R=Qo(C-eGsQOsnN|3uq70?m)M zEaCjNqY)sjBb{odGe;W66ch&r;$*OCcCIcqW9$oF)VDvTm{8%x6QcQkrH$}*E&qlEZ0p>?dmC(KZCDZ#?oz-t^>)l4`h|cM^UhyvdSjW?&2PunZZZs2S&@JQb{b+PpB3PQqJ}F{IgY zRq`7)jwmL0CP7uao(cTMqBGVQFgr4&G)O_5h06I$S7gmSjs4yU$SkQ?r=FMF*zCyX z(g}vHX&T=)amj@ejb91=^0^1V!$vAIOEXGR!OI>KM;!}oLAp+f(9wymd&`U;z;4M` zX&KbQarCg46HF|)$2R%TV6_=YaDYvA$xCU3epmx*8QRUYJ>B{MZTx1836kLvAiLy> zGOP0pn_0}={8N-6!-R%zUXCajoP$|Mhq^CerP z*^HPF@>)yQmLt(uUfgn&SvO+U2AgFMqxq4zrAqhOT6WGh+HrQ`^u@<8pMYWL-!l}s zC6=YR#$j;lj7Y7z3m0f1-=jI9gBnrZ!Mn+@GzA$%JBQv>Z$H_NR^L(?&QEezcJ^K+ zL#4U78W~nuSxV8Ta-o|vv}zw|!@+{4a1-rV{%g`3Ng8>~?pV6bKaX>aq z@~b1&$-Z&s&02eu6_^s&3pVx7y$*j6szXl?;Z1}e`L#)1Z6rXj+^!GiY7nW29emxj z>dWK2TW})!$i_{e?<&Ru>kE2AF|B5L?lBs4#W)IC1jsgPMGv}>(B%pEanGIY>5;|4 z+7fgiJ7hAD>Wzu`w-hmahpT#3LrqG1FXyo8PYJ8Qb;xOF=;s%fD`+g~GPfK#^2N$y z4n4YpJ&;X{NL$fGoyyRk6J5Z^kz6OjWzM(jdYW?7@NiywcXBH->bba(cs z0?Nyrc&ks)U&zAW8E!?@K-!Ah*oApb#aze#G#Xf0si#M50gr=DMN=+dWz%zOQCdEL zvFrR0eKDO-z~P-afT`%5!mWRtZ+~9EH!t!YKx+tQX%>U4DuO??UFhrKX(D0hVy{nW zD%*ZYkCCYwxpMrYO({|0XjE_+dinXyyxZC};E*h!>gzglF=am-O~O-wY4WPDrehsRKqgrF; z+Zl0P=0(+LXtBX>3Ti_No%iUu490#BOgp3eP2i)1$7yjtMrE%$hqU%LGUI6Fo9KVy zL_UzEiMNhy8H*z~Pf{aAJ`P>yQKsk_a?;rY#;cs!xuL=o3B@n-t8=r9dHk6LA@^uC zgEm`3c%#MU-@CrEE^X5j3^VpxIn!rT9P{(Qwi>vvp@gc%TehUqyZDkp2eso;xa$>n z)F*Uun=u`WF4l&a&vUR|&>w;A_^EBSrJn-%qu<%dT&ZQ$%v*^eOkMc*S3)<9BdF~c z@q{u-J>muPFsWyC*IOUa^MzZ1C*z@Kdqd$i)kjOTyf8(IdbNS}VMV?;>A1ex+?)ss zSS#E)0q=F_+^g`6nPp>~MkrUFx0^cR3{;Is`RMJKZTabmOQMpk+j7C{?Fw>t34&L7 zkRTOJP1_uA_P?~2U+x*G%7+?g0tiSUg0$cbz#--EZP1^Bt(O8h6)OUmpNWUI@!p#+ zd&bzdXae<<{PA@-V24MQUY>}^nh3`Fi#mraAJ*!<;Bf&+d^OHfehh;v9yhF{3i2p| z87gTxLNqyt&I@PbU#_9<1Ia$CmRI)~%%CpslD8g|8#fKz9+n6ck=iw5iAC>sRh)>% zgVZB2hG0bT5unv>Y3Ga*4jGe2Ai)kj=@(k`#k-WC({-0#eP*Vno^nD1bZZ~u)*2mn z!r%3jRQ%MesF~Y{ZcienLtdmoecW{_heIfy31n(;)yiW6sK}UOf_~pqavRd5SU*^q z>ldkOZWQFM)-HiR96Vho6)6L1syd0n0DA4XoMQ)e*n00Ag~ z2mvNLDi*}Wfxt?S^3~lG=WlL) zD$KOlGBSi6=ufYqf!*|XtO2CNQ6+QauIe#u5+K?i+}L^%;9q)2tRoP{3ZXV*DaMAN zj9f5tcEEspP~|4(>MF?)3QO_@0ZRy<+)t4>Dg-WINqQ5|Y+UNR7f6A7S|?Q8%-kuk zl^83=f!`|Mm6Jb&<7tk{wIOAf{9@gZ7&--z>C0u`mBcVcXgowx$JZQreF|++0-_z5 z8Ya8l^hKcn0Rnmi(-12}PRF$jahWv%V*r8DiwOMNLpl)nU> zpY|W*y_u8f@;3K+NF)qOSOl>s2qcjBgWpbuwy4_*pu(#Exo zigE#+TJoE-Guil*$E`;23x*($VS7Le?eaS?h*K z(~v}J$X!A$u7DzJG0|wS1+h#9$tS`GxY!GHD<>ohcsUkIufoJlpp+fw_4RQ&a{_b- z!$>90MWXS_GkkC+dI}P9)Uhv{fah^==4(bqh1PqK060mtngY4rQ7ptbh6LBfM-=EJ zA|Yu<5CYtb2=s=3IWYnIPGFkkn5BhZSa_`#M-7f;7TsGO=j_nGz;Ig%;+TAVycI(DT&gE!O*;vOg@_f z3pKa5AQ%`9wSwU6t&TE?ATwn(1|w^;jzlQOz3yW!T$H*rHBhS(Ug*4B0%*Nzdc0LX zy~DAwWkUS=2UCAJhs3yxkxXN)!%{<=-bG=g6u}4=$LWC_^jkQ65FuAHgw()=9Nut_ zOM%ARBQ&Ky-NT`=g~kGy)(;1JJazK1r((@_%7_TsQEv@wL5q9*V~;Ji?8Q9+u}hAz zW;g|8Of3OjyQCa|G)!r9w4Cswxb2a7eEYz5+yb=CizQPM|&yb46Ff@eY7`o&o^%k=n7>GfDDOmMhxi$ zSRCX>fbQg63%&w+=jt1YH*gDcnran{LjmwfO9xKTD3pI<{h{}kzHB_&BL%iN;Ijh1 zq!4&9Ok|!l#M_PG+sWZxVGIUAMCGnhBa)z_*&H%s9_P1H(Y_&xraP>m03$69Dh!t5 zfVYVVtTzBdq}<6u!wNShX@F1&KrSN&#U49}_8!T~yDgT&gO;Ukr}iy}kF zl1Gq}UFhn*_EVn^b5VCGED!U(Xy+2oXG`w=Q^Sd~05EnoOkoPn#xel~R;Remdm5L~ z?yP~{TD{a)j@$tHi+OuMz9(sJKS>yv8NBuzrqBjOuozH9gsesXW>dk8+HZ&mwAgx_ zQsn808QOce5(Y7Wp$I|%{{3a~w(sW}(9z6d6PfS{MGF{>yNB;;sYoz-Kng{a5%1=S zP(b)s3k<^D@malhq`mun#{B+req+|UcYYfMC;jUGoxSznPwu|>V*dve*?j01ANoka zzFB^^z((<`XjU)>JL%x7=+6o}#G4&hxq1KmaNRwp$}IIe{!qE4{=J^JpL~HD9LV5& z2llRgKF{n?iuWv2{AUmG*EVT)&$vukbnW(H%CgV?9QE1CZfA$H)56bp&y_cPb=mtA zUs<8}?;fVF&(h+aZJF*0ckQ#3+n>cbWV8L<>JF8s&!1ByPQ9f}o@fh?Ezk(i62Y#!0^=zgV zh<5nl54P3B9iM$RqDAjGwExq>APi9$t4^*~0=OGT9_y=6!@P`(A%~PvwflSD-uriX z`$M}}!}K13JxD2~k_#%2L0sdX!A5>{YWt7oxiXrf^^Q>pq!XnzP*sjdl!w!+rG&xd$@pAe0y@i(_g z7~BFh2RLJU3y#oY=p5d?H7Pub0hyB^1Ja1>z8RM|?KFT}8+#A!+O&OZWuv9)+~+A02~ufXD0^{e1_a%|&h$Dur+<3*yM_1)58>v0lJPyIJt` z$9ucNFE!^wB2D7TYMeug0wWF7J1o{d;*qr1-koYB-kJkX24cfaf}mi zr&eCUS=bFK`%!WCXo?+38#$C_H-iz0C%0Fic)h%Lm$>&wI!URH`3UKr@D<>Wh>j3j zkQ=GI;$1!~W5K;Nb|rH{kMP!II08y^ecjqZj)x7QF`0wDyySB5vLg(XSvht{qF^2& zq23a^mcV0hsh`J+HnU!p@mlBdf}nxVVrt?b$evuFkRe8cA^t!10NL$Zfs;ajoy2M+ zCJJsB2xXvJ8>NsH)_7We;X5j^UTuL`VCzxKtUR@%MbZF)l|133xn)*fMq>Jd zqd8)~Px&~|h&_`I?j7nz>sl#WK?sC^S-8Y(;=xcrwkBb_Q~o;&Uk6p8>IVo&F(tx( zN%)z$cS=tcM6m#FU8ir|-(j>8NrVFA2}nZ)73sQ1G68VKNI*0lhU!0TKhW+IN5g-F zI}{=bFCtFhwuOXBO*q7DbGNhUOa_n{F+wi~76J&)Krq5krh8l7VruM@^H_=Xdq9n(o=|{~ z#r?JaBd$FR^>Js@LZhVEAvGZ?E0vN002pHHH1}frJf?@hQly3eY=nlvy;2dV1u+by z&ajxD#Sq_is}woQrjlxS9 zRZ`0X!V44z8XQJ3s1F9rK)l+iZu{S31;K=bAU82{z>Bq5A`L}5;+GJxwI5w%reQ)N z6;=T;_j_WaQjlE@lWPRzfbNv+BAv-+`f5p85!tY`kfk^oTWSy;R#uFZWC>$92+uCk z(|(;rv=}idAPEG7T-U5%D{lcvAtWc(jM&5K(7D(;Vw4Ws48Zn8KqaJv5j-;rt_z5{ zJQG$2r()`m10bL!KyJGsB%qXswFY^)1Ich#uk<^!&LV6oxOO- zdVF_tGM}9{4-jcmEx15as2A=zxG;*K2%@x40B#QS^Y=5^ZcZ?ikXkP^4&=F^*C)t6rdGG3$3S8FSEwr1M>{ZYH58SxiTf+ok>#);=^f~WBOyxO5dKrd3Eyl$L zLOr5UR_xXF=z8;3bq?p;OC?fkBG*plngO+1Mne#bFhFTCJL+`mtwhW~I4NRM?JyfgDT z`_G#)UM7z1xY&4+R!9uB+JdP+5&4>Bn>rfC9+qxSuj`o=A!W{O>dsRHCrVF}&WEAa zI=n{+iOK8-H}a)y%x=A*Knq9Gt)Wt5WYd)30;uCdgB>2tW99|)=AP-y_PtG_S&(Uv z;v1(EIo#2KbRd!7wCsYS={S6EL%uir^*>hC?)Q&lwc6kRvAyL z-Z#neO$8Ec0?;ocR8R#F7SsoM2n7P*x5Qdi2Fd~{!3N=C?QIWx00muC&y^dOkOD1K zUU7sW3A>x@-FW{1U{k ztxL{}MJWN2!wdrP=s6s1FbEKoWi0FHY)}&$j>rIRWI5_QNHdab z^3lJr3;K^M2(U>^*cfqt_S zoQ0?0O~Wd=5k8)IKJ<`2nJ{cVfdga+z_A%T{DK+5MO+_P{EgCWB%|g<5|AI$TL_qe zXAD>aAXwIiu!>7WJx-A_7x7%FCV=#r25rIXVQG?KN_%%jC8zce$BKs@E9egnGn+K=Kn5*+e z20;*SRKO*35fTRo5t_fp{-AS%rI!H;Hba|u^hU_Ahq|#=ai0|2w3kIW_|87ZQ`oSZ8j%(Nc^U?|py1|j(D zR>+B^V@-LqX-`X5W3gaIb4`TQG;&e`Cb0<0xr-u~#ScXop^Y()jL=~SBfh$+LTt2> z={4$Dh~u%Dp_3i}p@KaS9MZXCFux#i`w%o7V1gbG;&U0Aj7#uQ88KiG^0U$QW65YU z7$ia75)h0UjD2Jv1`ekk8dLW1Q6KBzb3U0Ma4M~zf0YB)D(>)iY6E1 zRcHY+3v+SvS->Sm6nThobTcf}We8&2-seNNK)CS8couI3BZZ8^ihV;LvhM-;RU>FL zCZKKJQd1C!CHcsIX?a0~eEsER1{v}%%dN0+d+rGVT41AH25zL6di(^NNid#sKRknF z#5TGUzGI|g5N8FDx+6FSE?iU?QBDwK28!AYt;b_MMFCD};mpO+4+!wW+;LFJ$o6^= z*NDoMCOZ70%A-6p5lP{b@;o>YSg6hm;1Ul98^MV}!(&A-BAB=pk7R}wQHSanF+-n+ z&K?ptbo!99mI2_Ij*LP`7SmY^C(Ir&A2Vo;MIIScMzuLY{=ENRi@2EdikL%BjOU?= zLpl#g99DfobQA^B@ejv`j5C-GCIFkzu+q8d<~+laRBkN%&ITd#Fw#R&H25q;A&F52 zV*(GkqJf5n@GykX6mkKZ;8HFsg9xPFMt&sYmt$lJ@}I4!6hDcMko2JZU~!-e{Tnuv z$)Wt((N&NGe;m2*yH@Cn9+=*S*yY?<_;%?y{I*_=%iU5aZq7aCrq~NV0A?L5d7oVCR_2U_J(P=-Wr3?A{OUsMr zgTwC3)gMXbF3VDKoX3-AW)H)uZs*cZ#A&*JdEas!JBOXUb#_W6cJ)@-A+y+;VP~Uc z^K5{}`MNQO3T7sZhW$A~@Z2mOk`gw@owEU%`^Y#NU(Y6H{j8@yRQzP2Lnrz*K7w>sPjm}Y8@>K+_(`gXwZCEWk;jH?#Xz;vMP!~mI)jdE`DM6W0#3?cHjL= zv^p=<76*qv!FHrp+7&T}?ifKs_7q`x`TWv)%M*D8;du{t7^Fk}jrWjqUb;}}90lu= z4&5t)4(u_yhnw>d5>MwSSdnz-UJ-O;k2^M5r>@I1jmcyMrIyEHOfa<#>dIJO_$3d5WwEbAPiwG6aToFcU|i?%8Nt@ss+2rSWg1#`Aa_l|Pc4 zoS^$2CjoPtf+f)0Lyp2rM*yOV+ba`~3@N)5IV!_s_T+ePmu;xj%rcnp2})W|CJrJ# zIi0sy1Rl8+J$ZgLTsDDfOVO0)f!Qsd{h3`*mKq-QpF@h8d|t zAC+t9lg(FioCY#p=P&|-!Fo*0e^Hbt}lopHliRW^j` zEkje@Vl<>MHc`#bLv$~1K~`CYJyFAa+(sIN4A%?)1KFg&%;0q3SvzG7`FhGj#!vP- z#G)TFe)~|o>Ja8g{p!Wi9@;$quo5Ygf88XbcO?)fFR{;Kfd(Ws{f6zP#I=42Q^AK} zpeo7bA}k*^vY6x?N{hx*F$kaFGOgYNU~#HCmsVj>#$zLQ&}H~XBD>!S8?16?fuuhP ze1VZPQ4kD813JU@f1D5DwPN3eNB7wVv4=>bLMVGiw6&f zDIjFGkIjFPD1uL1Mforek{}2-0j;fw_LM|&uUsa8unVJPh^rC`V_Klv%F2Fd8!l^p z{@O+>aQ$gGARF&tBo5s-l0){0V?KFD|JJQ-@0XFeg}z6i%v%`?{+xXrz{*=kF3RK5 z9^5g;hPf2Xeu&|`Tc11&lrTLj!Vle#tjKPcY}tp7`)6{LcQTW6!Oh$S4TNd%D9U9qe!4hLHMbxFdhO&rUpX z5=lTB1m_1qum3IYf>vI@<`cr%$sFtcd7Uz7+%K>RS=Sf`&$vY3z#}BSvFrhY8{PZ>QAst>8mj{1}40dp3R7tWMFpF~be4QQ@g*=Yg75)L}*Lh&vr_8L_bQe zmD4yqB{&lO(I84=ZNO3C@i&f1I)WZFLf0f9>PA}E9EfD_*pj4DswF?QtKtu-Qv@5w ztEY)Q_u)7(W9qmU9l$lOgZ#@@&VDwj<00J$(nxd?V4f0q()2V6SRtjcCviZh@ur9h zavx-NiXtR+k=oa~1f{nKK<&jZ`^n>6H`cJ#-vI zeic~){&JkDt6G03|AMK^pS&sx2)}&>_XGgm`i(6BOv8h?OS$d*2?YVxFZVnO@0a)+janpf0rzvvWa5@0THc3f9NUz_A-!%LId%R2geKR~7 z?m|AXR%T%!*igSeA{-s!^?-__YkUY%fI_OE2mt~;Ps?qMsE#G;6@v-A#G^-8aHn{> zuRt~JrE~y-^qK-oQ`^{>_BwXQ!5axYklvROu`HQrlpnALh2gAk26hdRm5gd(O5>pn z|I~Z)PD=$8?dqlidNv{qPa-aA9-~a0X$Mi}P5^2|)NR7T#pK6CY5EUAU;vi3zo+LM z@D7QGit{OgoD6*EH{Yj6DN-8ks7HV+z$RoKLy@pN_-KYC$K3;pLB@T#QAuJ+TeV;w z2#^9;E8<`jaDamXOvsQWi;<8x9c1A_^nL&XI!n7-PvOjR-(Qo98XtWBh%FCi;LoJM z$iH9Y0}LGCUswBI{P~27e@Vr>;$3_K_cQv8zzn?FpUr&qNAGL?V0KRT6}U2#^w(GEtVaAlS{Nmo zJi*XNyBOfO@Z-9N)M3&4tlVJ`f_KtcjOMwxkVt3VROkCrGMPQfS3 zOA;J340fDk99E8DWlO#Z0iYtRL`3K+Wyvwy7mAnL3Xjx)4FcFEna47Dq+A`IQ(RTBiJ;2l8UBg3nR>kO7Dk{l!Q3E|xago@l9kuuS^i zp54bDm`0*!48wry&_flD6;;{>6WcSb;DtGja#wPh$jQY?=?ljXBYeytPy%Utpi=64 z1~%asO`!Qc>+P@jKhStJsF=j-85r>912Co$iiDGmh=~^I(*Qz1y}v87mlu4mYNVwR zsW9Tttcq7O-H(WBngOGirYUMr!`(*6o<@<08w*IJ&ApX;D8en)fHu@^+6RpyvjU)- z$miBbHb5VIS@s9^r}s`!ScZ;O=nAgzy3Zp^n2odd0aQratY)l~?zsy=gDbo}TGV=5 z&3HpZ4KO?kqW1ZgnQ7N!c*T_T*)+HiuHmUxwTKp&5tpKzs@EA?tEIIW;g>K`9j;qN zV=a#W1@l=wvXO(j$|)#I9P~1Ec~Q0(T5_brLYB zEi({O$qT&}Rx7A;X%gUC^1#n*?cUDFLVDjZflszeYo~|+reOb#1xglBlaG+I-TrT7 zAP{N~{;F26p0*$U+Uhz;>pehc9jIRu&A__&tz$LxAJCikap=^_Bw|aMhqOuH%$Kmh zV40#SV~q%>{Ejuyd9VN|B&25}VgWpCye#}|MCZAaBNw~J+@sYH*n&TEQnsZ0Sp6+& z%Ww!)OLh21GxuPs-rnk-z6|W`4_eYoiE9DwFYQE^Wxkd`dwng+0w5B~y9!f9QXgn> z(I5qnfd<9Ds!~kEfDBLe!1{>YHCv1Z#10) zm{RCVhAG)lcjweCrGMs2sLrR*S865t=~1E%KGIoyQ(t`hr!8NR_|4x6=$`P$@e4Gx z@*=TB3hE?2IEqR8-Y9)7(eG?UhJ5#*{OW z`%TS2{*zXr{+?_i(HtIL_lY{EHfL0x+KZOvdpI`}5mAPK%=08WpN3*VVBp3L(Q02c zN9Dsu6BR9%f3On8G+IR}`K3*d!w-A1h9=0_j?)ZrYdq92(f7t_dGUQ}{KucQ6OPy{ z>=#LK*7MKQ28-!bx_TbAZC;@Nu&4{1^o7d=+312|I>Kc`fJz+{hSPg{@R46uSvn&B zuk48I<|Dji|URf#$^DCm^}6@(t^J}z24zsJ;X z+N?|3Nb1~Lg;FHo(+$Yb?F5CC>tG7kz)zv;&)2!ntl;yVoNSPo>~=E+NAzscJsXfLTNe7sJz$E zr>52EQSS$R&<_VJ{{APG;e_&No{YmfokFEG_zv6k%&W4%tBwbgp51W^_Xs*)i2_>K z3VZ_eTT=6VAw*wc1RCAb*AnxTdi3oEvHzx9m~pQ&rH!xI-KWR%|FAL*BXWJfg;8G^4&b52dODA$6GAhhf%y`S)T z=pfZb*}JrjCh{};kKxn3%R-|`>q1kBVg*FaQvM>#5v_{AqT6pkcl=_C4L()Mi2h}R zq87Eb(Dd$)PWeX$h$P7QE7gaV*0AADMEw6}1qc665fj3Oj0G@xOZ1s{g}{GcPRAGAp zk3OQwBeM6kOU@}&21$>eQ5{L(2XfvOB>AJnmBvH1)Bq>^47D$fJUD+x7zsg2j{=lD zW7>A;0K}-IB}idMdRQ-=r+JCWkLWsQfYQ$|VoK1Iv1(T8gD`HuY&O+kECeL3Z7jOf z-lbX7DHTO)GP(pEN!9VjmNNbN>F{b2kB*R!N3%)`d4Qfni8!?Pc9?gt!wFI4O$~#a z@wFs|tFU(!|9RpWAE3CAy8+++pqv)X%QYTEVzxPBPQk88MY+%8jZN zz-gG>%DGjR8oT+zXu;3g0$q z5p(ODHq%pkgt^nN`>8lOa(#&^H}aHXa=SoxHd!=Km zU{aHHH~e$jU?IQ^m+3uO6ZvyFq=mT3EDDx--PMJi?M<^GDjUNzXLlwTv1)^5jUh%h z7V%iPiOuN!}_ zs|ezDi|Z;lhD!N#HiK|}=*`!btWr6P8UEu)bLtjVZ}Bv8*vCLWsH7KK1c?0`Ezr|XF7Drcr_SgklEIl0GC|SQw&lfAl*d^ z-MEMX_0jG{-k)a71jtcMX|sJ^Gdsj$po&OmwvYqP>y>b{SZiOrpWc_;en8Y(aQWOD zGlPnC)uXol5vwgaYm1hJ?Up76J5u!-N5n&J{CYJDWea>@Z-xenaG2xG34)9V7QRV z7YQTE;hryUl7p{}JH@C}aogOhRjpeq&QhEyw#{xJ9(%SGWW#)>7Ut=VfjtTv$aT1lEi0O}Pytgg z<>aXCCEz5RlaWO#Yr#xe*gPBbG4ByVLuWy#_a_CP3bG(Mi*SoYjPDQKHyQUMPX)Z- zD_W%U@@@oTd#yDyE8K`uJ`gNa% zUg!sWKSnhD$gC4Tn`ol>t6~cM(QT_QXQq%Q$Me{&t{i}>2#K`_=4%G3Aq;JI+H;AK z_%ixSqDPO;HN;1Y`eMyPZ4}#{vRz(HC^-!IbTm;IB%0;%WHfUVT1shrPi-8z7V zPqRvJPB424Nm39iI}G_@_Hx8G6+`o~8HmMo{si}>a5roa&Apob+n+?%e2I^sSU9zx z=1b*wIzU#nM}f)U!dw)oAJg`S*J*VXb$1{EA%)DVTsX^Fkv))bT(v?(0?FFzL$m5GP! zy@CpkLzjGt8d*q1ymHb~EC(5&>eJNN=1z;5vesJ zTO4tMw4lsUmEx)#r5flKbaTSY-8a%h&^@U6l+pHBw|`mzPPMnM_lg=s*hRKL1N*JS z_Q7ofrM3q2vSqBr`x$k@LC2*sejPMh6vX4iNG<$SC#h1 zR!x`gk}Un&CPEO5+ME1HH@a)jU@v#G{&Zl4jM0t9L4?m>;x00V8QPY`M-$5BsT>kV zR%^cL`MD*f&f`tiZ92_Toe8g?;fb%wC}spk32atfU(S|*kY+RzH%iGY+exomx2mtj zibGM#Sp9ElKI57NwQ>f}N@yJoyaK4o5Jfhr#3&Dw78PB8IKUOEe?5}OHO?*X*ACQssL zQBL)_qgn+dh$KnvCKX6+bhr}HQq0tr9izB?w?(FNNnWeR}F# zo?vlEp7JOS(Ayil(LpoC!b`i^I}?I%CzjCBuv*`8#i#UqqGi&#;N(q}W~X(FWaVHf z`iTIuouTV(?Bt!kn{GZC1QAbMMss%6uOy==%xLjbEah4FyJjw})Fn6z(cFt@cOUABaHZb)R%xF;RCwe<5F`^fs=u>wPph-8 ztw5_sPrG=Cs8**;6Py=#rlb~B%h5N4N$R`j_?H)36h==`iXc@AIx-;AidOHVB9Dd? z^^lR^sEX`_wfDHnwuC~Xpk*fA6Y;@B+a^o{^_oJx) znMHdxRxojJNeu#NpdYX0ya;2oWUHKH%mwXIqZ9S^UItSgUy~gn9#;YJiW)sD=}6B?ZJ7G)0qs-3IY;YpXTb8Ttuw#H zjEkynp%$k%&6fc`dD$Nf;PHut3EdE}$|-I#?`rbX}hBD?AIpHC89)4e3938%57kpb+rSUZy2&ohR|K0eupSJ z6QUyec9Z1T=Ev12LDlGWnRN`G2;8hvdZ|^`_rv7h(Y?-p8`qyk-iyzQT z4-fMMt<$>~qPlE@yy{vmggS<}mHo|6`3bDmSTibeEDV%<;~~7zrb;{Yciiw3rX$O2 z_UoaI=QM~C)x<)T6fW|uJfFBM-cl%IU75Vmi;8ErsFa~ubrIYs6|fFsD_s~!KYgQ+ z!h4;Zb)Gcnrl~2K513bKt9m`UkQSK4m*4d%52@fPolyQ+M$xM*(0Wm zKRVwNdd`~MQX%}Ha(A!WovwMPXLNFppGI3WrZ@C3br&rcMgiRa2`c0YPX@ts{#ZQE z`7|@s!x}f14-IMx{vjX|JJcZfeTeD&Q>f;T1~ZpTU^1%=_}DxZ>V+2prbg|G5reB0 z7G<#7pm{#Ow}_~*(9OJ92wYskSt$H-&+ZZXMnW3pY>}rNTgy?t*mb5qmVsZ2gf2VJ z*L|I@8e)LcA=zH5N?>NUg|0>vQA3FZtWLIPq}lO#L4qur#;hMd9<8f+k5^Ev)~p;v zq4`LfP*CI-1IVfiH3ycJEcM|Av3t64jFovvqKK{w!;&>O`w^1`z~FCRpQ8a*y4Ery z){rQqm+A&Rqw839)rXjCcb$-ewk}ey*J;B0y%vWGkqz&M1!O0sHJf?^0nB1JS9RLe zC`vP^v~g<#4lgDo(UG(Ngu4~Zq55n#9b2)bScL3c;};@x=GnpkAmB|iC#TPo%Mr$xZHoVT+7xWUCP{UFQl`U845!RcdeSim>018)6yzP z-=W@J$<>Xlh#Unys)1YpDKDk@P&=z#XUpjAqssB_>jrwXE2ldJ%vYM-H5+!oRHM}; zW}kVH(9Z1vsJsC{YxJpZE~z+4rDlVJT>GujWU_xuEjv?JE$ns}bT{}74aQgrD&m#F zyQ2eoKi9NSxF1@v&bN;jGoVJhEz%oD#ULL+3SXD);ae3uv%u~sq`o0h3Z7WnF}miH z^}5$Fl!{4>iY1)GPTv*pKCG8gxeH=Rl{J8Mw_o-oEswWn!F<@g9Tt!IS*UoGnR!&Q z;|1o(ecucn|dd1xn7s zLRH{^kT?I@j&hG&38<%Q=Wu=N4+0drOyBE)$QLI|<4|Ys7X9IYIj(e#$mPoFW#8Wa zz7l{_I#8?IdBG`Vx>oM0n|-X7q^jLtt3>XAsWr{o`bK*(Zfy6N70E7Cv8NwAk8G{H z*8Z2Jd?jQ!ZSlMWn5PwbDm87tuU(nyN$Q}AofQEIwrc8RWuIvA;M{=WY(}eE{~0Gb z*nGWiolen{a&d}>&`!{%J)yVw0RM&=L=47qU5prvN?LkRyX^;Gd}}Y~Dy-h~w$&h; zM}1szo`#%zp}f;jEYJT)gGDhj?_j$UFvemb;W`|#-^NmSpdU-qw45~MoHCpx+yW}i zFE3ok%S}Cj6>)p^00A?$Wll@s@|}VAX7^d{bN25X_Pv(|BE}B--5by21*5pB!WES> zO+kfSk`O4lTdI8uxZtM}hRr;IF3YDcVwBp7hU*Dz9DlAb9(6sQvd?C$sS|_@IZdX~ z$#qS=w07+rlA76(hhb{ftJiZIRhu`wK^0TI6DBnmS-?-u9M^sn4l&*uiWdkmqe*kD2&ol>WfbyJ$4?GFA z9$7%Z5WbWI$MXLLa^~S(Uk`s-us8(Vz1}6@=#2Z)cLN`R7E{F0uT&|Ue3~^-t#{c1|D0plXYTK1=S2fu+Z~a3S~KPVCKW%2CzlO&TK8 zs+0C^yr(Z<5>X7#Nx|l?6+siqd8__SnvXYtnxN6D(!#B#oqO1JLRn#z%hF%1uTn*{ z6=_bJA;ohhGY#uamhQGR{C$^-%U&hJoE3uy6#H84i{5J;Fi@aidAc6*@tr9I#P!<3Mz20 zOz$1%KPY6?wPcozyQW1u624keHMlj}y62kO>$b@NzWe$v9$@Er@41?_(+-65`EPWj zJoD}TzgZLaZq?hv8CEzXcDL@*|o5x z5I-Kq7R)DMoCn;}EC2ikv!i%OXO7bG+8;u?V!KxVPgQpIa<64m&QhzSLuEL&quX7K zg|5dHC=ckb!d{I_$O|!VzKJrDa(DfIwU!>(uQqOG$D7qO6K)RU?23vZ)<^h!gm-(b zsYu!@6h?yHF+No9FEm&hIcvQ!4p<1urIJskzvDnf$7p@%mJFXyqSA(3n-2orO`tZ& zW2B*SmQO)xnCALXg~1;!z44!1HKfSm=)Q6kdVPwJH)I?b6^>=;QRSIyQ(fvPo(a8Y(Z)r4X$s|byO3&eu2C0eEs?*+$9-Vj)d?ykY8r4IxFzk;xICdgkI+7ak3c#pLWkO2wuB3MNTtu1_4g!2EV>#I zv+c9IMelg7tT(+A(pOWZUM&bR=gGbr}V%>eNtT)f?q* zmz9fAG-om+N)5Y!OVg?bBtT8|z!f1Lm|k(>ZB^%1`pT-PlzMn%b&iiy(JAz@=_{)L zoqO%sabu{lqF?k54wJzJuDDJZZ~dyU3730Gva*BVehNZ=%Sz3@k6US7<#lT5k5{eL z%69df_7nL$;t1>_7RRNSf|ohg97)ISd~_Q3Sn#|&R|)NAeW?n}qauMSZ?Fh<*;}pX z2R!mUot3Snwn;EplF}*~J4u#LCBM0{N}%KTf-&`a_8QTtSN*Cca~y80+s3-=F z_%-ghxUg29BSwouE+R_s~YxjE){>*Fi6jNhX z-QB%FaJp5;@-=HDpTn=@Z9;P(uChTbF_@r&#*3)B0S)-xdNF=G?oJmbmcozD;%#z) zW#h)+Qs>`rwOY79&r{_qY_HdvxxF4kyQWX2jFD^YxYV}y|AqG(pVY);Q76ak%dpt5 zy=PWe3n(l#rf#Z6(FMNOS#y}XTdKF4u4>cX58rhIQrs$9@T9Ks_&v7G2>kHq+48j_ zn?GoU*1DTH>4PJC`9PgrMV=}wCtrxgk8Q2?hGNy7Nvs)bJcxoZgPuwkC~)?!zKjdK zQ&LapVwd6FwC|R#gM08?`Za$s_B|?GtZm};2Pb|; zQ|Z?P`NjSFwVJhHgxsw%yCg3P9NA_3E0`ri6?AKtS2WW7kgB=*Om~#)c7JbywFn$s z2RsAUx~5tXa5E9vs+{C_eEhl>NcJ`Hy61 zajUh<7}+;H^NaIt&_;0nms93v5wA*!J=J7p+;W9l)P`s{@ z8Zc&MUN+y*+0ADs=;vCJ{#4QIqQPelD)!X{Tja{ogC=&2+pq_ho)>j&Yr`gq-W3(e zmQq2tpK)oSECgX&u2R@mM^cR1hpuzVa`JQtv`;#g9CkR{y&)d*FU*AK@+sIy)D z$}jaKp1-1b|`F|5^jwg8_B{e@qV09c+D5fMHwHy{!tg@Xml1K-o+j zipPgS`@CJ%F`LSDOyXPW?p;f}$z}y?>Q>gmo4TsVz1Fc*ZlB_nab@aE1SI?)DLr&R z4`!e&%Uv4{MtUn7b}=o3UJCV9M9d-1g*xHA?YY3~m$(NB#iDb0&kho0OD}%JS}(ae zC8Ym{zdYS^NzNeQ@taW@g`odD{>$e-&-}^68MoNYVM%+JeI@Ih`Wr8NsF(5X#i|)S z&Df#Txa!7_+V+PGVxn2XAjF}Ol3}JD=oGQ%@(MXI?s$XgU45ish;*~WnE4O(U}4_1 zZ0Xz(oz0ZQyH>`U(iAP2B^y>R(Qu5{V87xgudA<#c}V7VNWye|8kdz^Am5Udp%pjN zN`%!_WOoBSU=Lu%3J=C6W#?-9b|sDV>*Upa($E_$x@?aPVEBLYRCZnv0Y-p?))wZv zX72_xNzJ5P=1~UxXo`4St_0SJwyLi+=hbTvciwKxUm(=bFy_pd@Sz={+~FcKwg!~A&FquiX8kiPA2$fl_=d1ry=ZdeNWjARMgzJZFx@> zbg>v$>FNyZNmYM{4_lacM1jTFEfla+Ia*B%_B8=@qg3U|Shl&Q!)n}3Jtz2GC4C?(JtHB3l*0Zj0*fQqZ+%TM_c^XEGuLb8C_os`1)ILF> zA|h5H>osjw2H0`uRY1!LYFY})r&g|UJis4@cr_dj0!?^}V8dX&e+e}4P+U=dj`xf` zM7FA+uU0e$t|>*p)otMUohLt-)-c-rO9(KvoGoY?q6Hbp6Vt=5+45omT&Oepc0(;8 z<^0@pxCnUutMl%5;%l4Gn$RE?AAPlEk`QOhI6bYp3ul^C^W=!};x3hZfG#S0euPy4 zdIOIal-4fyQQyV5;d}3vi}CPn+a-lxyY}JxJqlX#mXCGkU+k72%C|DDu{SuiplV5i1*ga*Sc&(5Gc_fl=0<_QFYVL;&z}L3R_698Vgnv8<_YcYikzk6uc?Nc~Wr ze5Wla{*>pe4e%0uj)o=*HOY7Bc_Ws9!;nvoWa#hO3%K!G*K6o zzy$hK{iC#EmwIeeN!pRsAq!skz7f+WUa~(IMX;n%$!R4-hJ0R$SxoJUuan*I6=GsCZa-&L^{Yrvy z0#*86@XJ~h^L98pdidbK>Uwo)h7F%r!Bow9PUPeFx+o)yQ2D%q^|#B$um-t@ngz8Z zY;LFpQ1UT9MOv#@6JgmcV%N7+ly7`5;T{5>u8Uy);S4Xth(*wf^L2?_&B`KX#5`Po ze}*IGZ*Sb3MWnPYU#<4|$9$v}rKvXGtYzSL-!R?{Zv^$Y-;VAJpA5Xs59RWu$xI}E zZdG$zy@1A}RY=FVVu$wMXCtS3-Hw~EoC%s8tkMu^Xc-b_*AD0_`i~dta7R07ZyS7~ zyH@LliN4VF9*Tus2Ta#`QHli=JKV&l#b z(r(X5lYGya{5_)a-#q%faY80P4btEhA+8*|c9ku4hW@Ekwa@Vq`@q<|8QZA_(fn(c z99bHEZP(O{i>OuZETh=BS%&;y?YLf#qjwuIy)aJPwUcj{^wav9IB6@u&IkGu0y19-#}Sx9Fw{T&jc zCzu{&4G*7frA#cvf99#$KS208O>&sqZnYk8b!WGMp^DO7_gWpsyiq!Kbs_)Qy13P& zb6O#G9xR^e76g+_$y@u~rJy~$x<_>uqrNIm3YJO6dY$_^srvN0idCIh9r9DnhLT1i z`;KPM!6aOo28sTqV9YBtk}*Ch6Ln7tjFQbZ$3!NT8TjUJUu02=?w7JM+?ltd%W`SC zYsfi^z}0d$&5x)OFt{6+E9-Y$UyG`wzvKpmo$;U|tV46UKV$1%%+&N`V++jHW2Me+ zU$AvLg@aJX@${^d{Y1e4U)47826De(Zx?oh|I=1MZf4t*+;_1fUz;LV<*U#*5D)|a1^_Zua3cT!Pj#Q`7(nf*zK`q?Ce_>}++UxU|xHQ;Sf3s50yuxdpcpc=|S-=G61;+Iw2pBv&-gevq_nb z!_sV9UUnI8IqfHl!#THZ&x<-VO%L3{Bn++%7A{_Fjg00)rnayKKJXjq!v5$m#2J@p z#=U&v94LTjc7XVaLBMkhG(J`%n)oWq+X*N-#>3JAj)$I|tR%wgS&Qev+hvRy3th)% zHJCNXtv-i)7>3rS9MBn^2)IHBOhQ(jTX4>RS6$9wVtl081CIzgd((!GzM)=y+gJ9M zskh-BKtc+njN`QJ(B_Z&#Kai2hBWzw$0HEGu1)O?@V?+E(zCt1M1c>s1`Y@mWU_WC zA3pvg9b-C=9OM=%8T6C5(Ts!ZgJYkoEHBb>Gn_hrGZ>pUi7oA3mC{Y1B!KaAbgwu< zmmFhSsgoe0!u5z^FKGagE>ihzlEOH1mLo8#;d57zkqkIlZ}gG+hK|o087+8Z>M)_f zj9cUk=56TQ+iZERUA7#ADXQ^6%@e%0n*-NP%%V1S(Tc&EWuR$eA{1B(q60s!Yibk- zV!&WJ0PZGdS*N;1jLPskUX7y}ttE}348nfuVsc=OM}rHIP-GGh4u@}5vngMTdWO+d z37a61LCEOy`N|z+4(lCw9F958SK87Xm3DXB9I9rqgoGRb@t)Iq7|t&u6FG3~=-WCX zQz$B7mu?{%9orpU4Gw)DpoJU-57nasJNMw>;>Skx;41`O8#sjjp1!QdiX-EoxaA+g zmA*9*O7FOB$U%XmHky%m4aW|p2Z{QadEd4ZY5(p7ejto;Qf*0*QfH`5Cx>jhDv==i zD{#8+kjC97pfZ468VHg!A=}MeHomeE84j4IGMZ*5sF|}8O{dSL&BQdsoGZ~~5G7fU zz=r(%e0S3r!WhR<2vzG96QTK2&H4!|-S7;R|;FOaHIXaoLP%hT$ovAIj zR}#GgrkmEmIfk>gUYW!soQS~stvot5O|}e8ZCdRnH?W7P?WASHmSwKRo-dv~36mId^Jm4f0`<*5imFY?bC4mbLSF)>jf?@!n8NRg3kgWDkwse<(b?fI9)=9@ za)_A5#C54#jlJ_jCG456_&P_zWlyF5T9}f}8HY4Iys6E63t~*WbT$CgS5hp}+_`Qw06qx;X zQipF*FcQ|&YHX^DeubYGW717j-x$$Wo88z=YYzrO8h{v*&%A04Ds%3CeC&f3Pt}Kz zTB=%}SC{lh%5#!_DV!42-9?T0YhY&Sr=?TV^es(}RM0KQK{YB);}K!%^ck{mM}eYC zD}T^Z&o>JVM%_Ol5K}^<3`dxD4_af;#ko8;qrTlBjL2+WmZy4hNy-IWq`rw+Cz(O1 z0gD3ErXC`&(JJuBRRg405$vcTV6XzTUEP2`Z3iiV8{$j6a3Do;=Rz(>q)La-N~*=P zhg=^pEJ}%kXJCsw$P%th0+@BWT~>whTQ;nVk=Sjhrsj4r)hA4LQN7V7&jSEaPUdaG zu$;IfVuNVLwctg%TKE||j8iW-E2@)`@(QY(vqpl%lu=$i;Qjfuu`_HOZp#DFYf zIVQf7o`et^_J*rM-0`;FU`vRYpYzw}(Y`LAevl-~# znwO(=Glk9Eh>YiW4L4<2qqUs{uR!bx)D0XBTAn*ip= zon1P);|rfd6G6A32m85a-iVYQA{^sdKWuLI`7P(~0VIMxlO$=0_7OB5Nh%Gh$y6|K z{TeT5izp_gCo)y<&u2vCJA6uN8N@cPG{M%IXWNV~mIafzq3thZ(ca}3qZ>b-V9n11 z(A3f}40GoTh>*b?Q&j{Gf0UZ_^ik^Mv8C*WA=Vxo3&77t8Twl1>nBh>S#!xb1FcAM zDno}vp`=1SsAcQ~^m6V#=6u&WHtD1;ogj_VUSzVMDv#h?;$B*3n z<^GIssAaO#I|TvyPa)$vm56l=f}&FbyErfYtVZy4xAX*N;3wd7;IuGutEkDAqtaFN_4pC zoY2P8*RZQjl4HIC|68Pq?xaDoqn@Dbrh)w0NyFsMn{>2pQ44bQ2p%?gTeYy!n`pcR zlmY;GoRc!31dfnQ@?3ADcsWLuYyg@Mv6d0Q-9&$TN+vcg;Bp2kx#zm>!)GVU6xXz7Hj0#_;sw^mL5ngV5z3h5K|{@ zXlbM$()@lK;B$!QCoST}mvntaxBF1T$#LU_htyIN8lLrd{LAc6EG;ehtC`HM61G=o z1E))BfRQgcK|7qY&T@Hi#3%gUPDSEr`*Lz$IN@~L9o0&j`WQR*QC<<%LF14zM!|sE z<`ocIqQKCG((mt`|7}2Q>*xa_Em|Fy7niUm2iTqB;H99F(L(S6i)zB8g1aw>sWQl3 zLzgjZdWHkD)z5aL$KIMH;MZvX&26HO|Nn6`Ur4}GqMKaqTN3Ahq?1LWVZ7v5P%YCm7A9xm5e z>7Xxl7BdL)i=AR3rF()l3DY1=+kw%fI80V_X^>lD&eSZfpRrZ`0zMamdG=b`Y$e## z(}uahgfWDf<#xVn>U~={vO-Pxt;4$QoRI4_KyTwdkR^I6RWMiHi!7}S<}_FUNSwDK zNQbQ42GtOC`7Tfqbe!KKXIitix#pfkVkrpKU>iaBd*G_DDkN{Iw_6z7+iu%Au|AiO zE7Wy;mitW87`vmcbh(0Hjw}wVNG!GPgAAK^JSiejQ0Q?~3MT#M;w>@uCki-V7z)$q zP{Ph7!V2ytq<@2M(PHas8Goh)f8u=e)FL_n)v@Kvg{S4;rx%9rBG+y$KIGR@(-73Cl(bM* zvHG>HNF3ow34~Vv?xav>6hU4U;+{7PsGbx$ze0-ZwCVS?cgUvAoM6t|fHf&f!)L0u zGy71>*R!_81N3AaK8Y-Xta=2pdj(Q8b0wl&CW*G%w;QJ=`L<8ED4V|!yPM1YmH7L= zVlA3hB_&%uwpE5!?SVZ5pJ`e>0p0?(TPVzvd1#%}nAlhttwQHCb4kB2T68$p6EaGf}duMccIE z4p~8t*Ozg|_mysED~>zx5%OmQD_0>P7!wF1c3;CuG|z(FyL@HD_qj@XXLq49w8si zIcck@tIteDM+8!`5aH#QbjGar^KL~6*+1^nyJdf>gI>NYs2$j&O)j)TL|E*#0(_#- z1{faRB?8J7gwYQ(%$#N!XatU~oYn#gblpL33WdK??ah_0%(09(`a|1aXF~02d^AR? z#~K!?L&wY%KwN?Lr`V{^COe2Zrgs)QE;}hZ-N`ehZ(x@h^7Zyd9LU+VF#h=v=TO}* zz!C=!10hg5Mmg9BMG|Ci2imo5tD$Wac|uTl!EdjHEpk^((M8>pZzb%rqf6X{>x%?zxjc-gQ^s+q>% zhW6O~%2+~5rl@fW3umaj((SBqnJR0Q3;sor@kYwb<(&}5Qfg)ve@rVNSC(i*2osnF zT=*(`BG)|4`)f=XpeG75m$dOtdonf`ZdTQuc96LFTY^UVaVu>#-Z(9O3w(yB?Ncie zs|_V}rA@BDPGoI=xgiC(Lb(Of_y=*|zR_9SeC@Kcqm2&i38U-&^(8j-3bo!&E^T9!8byuAg2cENrx z3zrw$!%T(L35O0i=WQGpM2{^xo4#Nl`c;;ZpW;T?N!bQo&QHp+%kZ$0AYqnEs{O0L zV_HHbTAsY-op;cbI%ZXHENIW^=G5i_LC~x&2R3F?>0Ui-r$(*W@@|Lei;MP<0^0p^ zYcerB#xRw*u1?e9osS18p>W(ZrG@K8SSP=ATzDbu)PCsmr7c_|a z*8$%=oA06>k$1GVSwbBF-x1^F^%PoPjUf!w>E!wVFv-dCE+w>!$Fta>jYP2{OBO|4cz%Ke_dSgui(tC!U?cWfH6i5n&Feo*VA4 zsD-)Rd2Xgh@KAY?2S*f{3E=I#|_u--cbRmSNkK(4rO**#&B?^clE=vZ=nNfv~B8L z44HXk6=_YJ;w-4)B64MO#OQFr!Qe|*ZO3HE&d;Ub&qVU&-}Z(sEJ4e8F#8`*oibDh zijgOfDixvUhzY7J*xht`jGv9b<=o`-`_ml)orVXjsN}0`Q{-eKGAbS4v5*U zkSh0%`eY8zO@K5HS4RqqEkGn{XHe%m)iaB^3~^uaS6SelE0<28Ufr8{X=q3!&z~sP z3uyK?ZFkx+d3OCp=cz~eVF-JBZmGT#gIerbmN~swcG1721tTIUtOS?{d08z($d!>G z0!z<+N;Fk7MarA|b8lG~RWrdY56H*%2cr!wj_tM(Yn!g8<6Wk>a-YSVIDGB0V4ktd z-Rci@JdDToJ1Ggj)B8gS)ghbAJ=2p+4bx6 z9!nEE=UoP8053q$zmd#``HYcTRY&k81KQlD@_?$ok2{g?S3DEQi$9oMV5;=n($P(zV zS0STtJIe#aSV`0hIJ%mLC=dkIOn}HooTO|n!wye$l2DqaXSALEy==B z?sJPa+#weyP~0^2xm!Qy#&4iCVF@h3kjprIgh$Kv+9FyMpFN+QgfZ8DEQ@vb$V%Vtll>3*l%yuHXb!^ z786cw(MGH6Ofy3+FN6Z5Y-BwX=rv7If`|yhhbYuFtq0Mt>)?fn%CALQ*>*veR+F_K zvLPAZZn8Ne+0xpw@|(4t%Gh~$ow9F~U7{sK*Gp$T zb=`1N?iHujp>9*VeQI8*69mW}lB~r%49eDRLcm18lscKsIJ>Tm1-3m{nGe(6aJ52H zkv)_T61ZuDe}b6AvLgFz<}T=}9{+d>lOfaA=h2W*{>#}q{5c~fK||D_KgW1z%H?^| z$WA*ifDI{36_H0TFt05YvDx!`t_jpyQuk2TasV_;XetV~R7=9M6@MwOaWv_m5$tMa z7$CSpqYoOHZUZ6`8YLg+k=!Cak~52X+t4!TR#{s5v$7E-cxpBS85`1; zD%1oUx0LyHGRYrs(L0%zSA~f`%~KBP`ziVsdV-&mVbVm3*7RJxRZJb#8h&BWRG)j0 z2x)>k!V_Q^QI`g!yCr)joBCP&C5n|493UqKQ|Vh)gg1XNKOs`Ipg}7Wz%yqi$;OhF zr{$}&B(5e{Yz2B3&nT_Wg`g>(LjtaMgBne30k_l|Y49uo%gx@oW!BDrt7syEX9%aP*0LdwSSUbC+Fq7;Pamf4|IdJ}={p zv84lQ7wf&&7CQ4QoOhZlXJv2=)+incaR;Z&@L2UCT-1od`6b} z5|2+yP7PS2ji6`JYMh>b{;+xm5PZLBT!wm0G^QU#pO#L{vHf8s!tYw96Z3KRk}T60 zWVqTx8qj6t7)3#Ry89qULUCm?MkpxQAbuPZjdk<`+9AYhXSq9~OY?JWk;`s(3kRe<}UbIuIm( zZ+!=f)Mq%ay*SB!r=0yMy)Jbn{oFJ(-QEk5?3urwdw1V31csc!&#)hefy+6od?`Y3 zf4{wqT&C*=O_kK%J*=s=k^;7vQ@|2j9Pf>r1)74`?llsie?)RMU6`S0HjtT6gH{EF z+u(8eYt!8Oa!Pm#0vVH2;SvL+?l^# z0O8oKlJe(LTlz~l1cM?}(Hki_+W0F#q>IXQ%vXRt@s;1XcUV#EooR%`Uk2juRVsMi zh|n`Uq`ND!eWiInqBqa}du9}U$gq8lxN&cs75_a$h|_>i_%X@juWY!Enw+-kzpus0 z*@zdXf}qCC0_5AI=5aQB?)Q#3HcBh+DRX8XsJFgZk+fGVb_s7CwUd4g4(5aRGqYZYPt=8L78fktz}3&gO!@Lcp5-%$k@f(1Eo z;uXJN-$z(!CB&S}?yQoZ8kW@g!q0yaO;iDuNN2)#l{B>%< zO6PWng%ri_l%9Cs-mR6^v~UN#bzzlRO%%>(fZmob`;fEsP(*@ec3iGm%*>{oq=2R!oI$d6a5 zL8i22E5SPXr=+HKdNa7%1gUu~U#7M*2${?wfj2O8cmG0w%Ue|y=T^&oiJg6_Nv>uN zZ`g11@z*KI+>nQIvo#!XtPmBrxZ5~8{Ln<0d0h~?>ThgGv1J52yQP`$nSRW}o%6bU=aeDO00T7pA#^wI@asTsdV{cOl=?mi|yaM3Exg2H*>2 zm9D4vI@XCW$y-OW&b_|c{Xq+sX;G0;1;{FNO2E(} z1R}olQ4IlaKC*x1t`da1g%!UY#+d1J*`*b)l~P=r;-u0C1??_h;PlbK(Wg-wLV;n( zNX^mqnM;_2FcGf~U#ioC2N4Kzf54-^{a1*E7q%DXrAe@eI(+FkMcFdQqDi+KUl(HJ zRby2vr1f)Y*QCz!P0g~i4MbiEIK*$#k(#OuzeB{i`$Em^a$B87lda?Z+(PuA&>V?xJ{t7Et?Jg zF4O1*XS)&+1^LXMm8L@A_xxJIOrxiP8ZPUe{`h30g^QOgt4CbPAO9b)7rLK(0|UTZ z2)&4Vyw|+7XgW|*!{&A*bg^!O`zqi!aS&-8&1O1F#T59F*veNdA-M8QW} zeTtgTK*04yyPY%L3`H@K3A7PS;YID=Vn>}j{~&Kg(5Tc31S0kWO(bJ1Nto=K2AjU} ze)oCPW^tj0r#8i0`2n6AnrUlGmn<13829GLWTFv**^V}JauuTLPM{f_Si6K)FCF)M zN^;64_E>b;6`uwqUzku!!D3hXC%32r%~HQK{%{aXAm?CCM!WWf$Z1HE5S8Fr78LC_ z_SSK7ZWHls$^tc3h&{^E*|c-5AhqykxC?zwLT}OmO>Xwf_i1!b66P+IUUdbitAiAX z4VlPLax2*_cd?_RlS!=wn9@O0nId1hGV&cHr7LO5R55>@s0yY2+Bpuv%E!?QYWY5d zv?#JEXas~{8>)kOG~EPdz%b(AX#3+V$x^`4o}`j2?aRmoa8-Y(!rRB{))92v=sS~N` zDSMyOwp~s8)|I#n6TUa2rB)b}q}KolYbungKX2c&=9XR;AU}LN{Uoe0hO~H?ir=9G z6P^ib_NWP}wR}K%qNY99ezNxf`!&2&$q1PTs>+QSDdt@dSEed|G5dW}dR8db$C3_WF46xt zHn4M`dF(eFYvY^_E_1fcp{K!w=}-PmVd7%Efwh{rh^JvKfZNtmHA>6m=HT&CS$)e*fIeEKP+km?&^G^Y@@+3(A6ihSI{ zUwU*R$2y-$NH`wfS9zh-6pSLqyjRlZfC%~}#Ym$FE3hWavUAid($@M|ohOi1%dHGF z=<(S#J+9n0WpjSiOdK-bCmUBsXN4lQxS6+Qee?T{r~bCIr{(xZxPt>a&SOJEG(XyS zg!T(RH1g(nk1`#WhjLVhr(q8K3*n9!ktxj&CsmeJ4G$$peigL}KelhK?t9h5>EtLG zTiD8MClf@UXve7FTEg0zu=h`s5Y+7hs~+fW)CZPlaGFvT_PE{5pg;(>%FmTLgsD46DJm#2 zz9pdO+8?g$aVEBckL#HW2{PY8g7B!pZA@M?eNZ)^XMl)z(hsO;} zBT|%Q?9^uV11XC9Ms=uNPOewvr#uu3_C*Ek-BjIAjGAAeyVgEeBhzrVvSjsAA;PP( zCl#XU1e|`-{x-H(BWXVmlm6SdlXGrOu@{1b@@6qhdPU*md*9@$nixrM_x5h*d!s8B z2+{su!Hx|&P}RJK?H&Cb(+XaR*AIoCw2Y4-7fHzaVb33pj~?>qAL#gTcD=i1J&a}O8z3ZXqo zt+XParf(#8XmPx=m@N*sRAn}07@c=6o6^`DX_iDEqJ z2py&x=k~#W8H}08n2$!@Ain;X^u3!lWA(^!%Ch6MevR7dl3s@eD+dCYy%@Co-^|Io zc(rnbdNpXAa@!Lm>B6g!_ZB&L5C_5@PJg#-78me)K7t*E=hUf7193?HSbPd>TXYNj zF_+TBr0!QBV;4i5dl3Y8N|+HsjJmu|m4m}gXCcUchUIfw3n(}uYr5P?C*P%a z;N~6H0qCc|RYX#uNaTA?IcEZM ziB>X!<1kLj`{UWN@mWYbAcnigF%u|G0Hi$NaYu44=9G&R^BwyVW9RwSx@}xpvRUe< zB_3E?3=SS**f9gx18}KvmQ7c<~@KKdCi4RGS;hby=pC&&Ng>98em5a@YdMvU1 zg$TkME>nfU?c%G2%oRvtI*+ALf@%QH=Vte6(b*)*bF4E?bwR}$AxJ8g6(k6LBo)Nl zK-w4-krKaNxf?Au5nNDJJaTzF;j5zWF-H+3@;W<9U-E?drS~wA(5!fI3Rf^5>Loy< zV8S(WTOhapr9&;+jLpfvT@Q)V%&1(H~ZWZ&2d_tZ;ue~Yekw^shsZ> zj)EkhuM#b*7r4uQo)QW(Jg^*vswq3yo@@&3rd{~*{KYq_Q*&e_x`*wERqx11I#(Mj zB3CMRDJ7FTB8~UP16K)_AQ4;bZvo?1JVGb_z1%_hCDak3?JVytg1jpWHJ0`kOfN#B zdtl6-4hhMJ;%7Y>HM-h!vBI|^?GOxgYM-o8F3M0B1RxhHCrV7qJ$Wa-{8~aqwUP9i zqu{see8S>|G?3@1=M=l|i2Pk3VcVt+UBWxqw7_J@KSPCJkuW0P(b6EgtPVIjuLMu; zv(I-6wkqZg5}Iu>83Ywr{ePH3{jY-@)`1!qcrLjhVhT+X;91X|0YmYvTny1UWYR|NA6qR zZq*47Z<$M7b55tb$DLt>q?FZE9U!TBkvV9_aL1*h=$#*Ls3fKA7yp^D=< zJFur(o_n4UW>OD)w!uN{QiXRWt4RcSJpr#pVKz3sIgF3mG#^ZjVcPB2af`ZtZ!i3@ zL-zz^fe;e}_~Ye~M-XNXX9#B~*R|rQOFl})qFkMP_n)!iz-}>5t|e~oEs%UqHYq&p z*>r^guhjK-N}MrUVof5Rr^@>Z zZn4-d6XVNYT$2m&eKMEdy}~4I%itCT_Sef8w|*RXQohGK`7TY3@y;ZuLSdHM0TAeZ z%{&5ldvn{ra$k)pZ|H_?S58^zJ1rf7>=zoTE%Bb9AGS>o&ShlbKs8(l;tiYS(Ne+; zgfM&D2<}V*I+*0N?sK7DssVfCZsZdApcUO*6-fAwvV6Z0uYCy(v0`sBHP-i`SJ;wD z;(kos4}>{{+sQ#VA&P#nA3<@8aWr^kL}O-SX1v*VCA?z)DFPhRiDmJ*=aTdN$mh3 zi$iPCrhx*oiU%(*EUz5_51JYtOK`{|w#`xgl`h^_H9J+vR1doP^4!u+vVhN)R3(7T zGCfHlA+NwOAu$Hg>}PyN^73hG?GGS{4yG#(ri#BCuUSO=p|E-Fj74Yn!K*K*3sXCb z&=q&1Zk$RtrigC|DM75=|usriX39{~WvLZN9RS`x}_wMd7WdvINp7Oz7 ze8b>8Nx7UJ9e^w$3qqkU77f1if%~nC$Y%TmDm$|5m>{N#v%6t_7DS1A**;sC9;HGv zDk=I*CAfnlBnejZg7XcYDkLl9u2yjPPWLhA6P8}M>^_yps+>V0D&dDrL?eu6@#^b7>*O#c#F^cz{?p5Y& zuTfYWegz%6%EEfsGyL~K69gsKAwNsFx=J3@GEL`lx%*-wP2`BVzK zp{!`E6W!UiL|(=vG@vs6^2iiLb|5LvjBff|fn%|GI+PD4elE3cg1ZTZ*KMG$-9q?P zcdAYa+K6&ss#@4q?II_gEYmzN>F3jvel!+W#SKpdIMm&&V(7aC6x$mJITt&X?tcf< z%@7{Sj5egm>zU+JjI1 z6MHXD>azM1EaeW`7jf@soQ8*KiG3lgcobm!bDs_mG9#DLU}|^+Ij^G0OohTD8lWrI z1cx}Z%MszkN*hQs`a}XL;ksGMfKLhVRZ8^|6V~9M`6=<6Z#R30()Kr_RCArj$g8!D ziD@($5qUEI#oD!Pc8!hA@*LwIv0!KMEm=xzf-ArjDzb$~1l&+I3md1Eu@n;Oi?aRj zppZ!1Ma_&{H6N2D2(Q>%y&N(znT+!vfdB!4%Cguf5wY${mo_w%NX-v)T(Y!b9Fq$C zZxe-&ZBPbi0f&hw^9P5CtrP}KcuPQ^=luC$--gC>CN1RAkUBQ?!KtgSizlvL(H0VT z{;|x{mwZ^Sj2DA4%Dv)9Xch@idStzvFDE$U@uGA%WE}d7TKn{HpmhO4h0N;l{LmbQ z2>jswd8f~Go_n83Ome)pzwjbMr4tz(O*AnVxx`BVG0GEz`zOL?L=W6Yi^Lma>l&G2 z+}fy2buDV5(~7R?9(rINpHeYZs4}JL@RR26?-@+uVLBIvib^UbEUuR-PTQ!QWIB=9_3QIwsnbm=CmerJYKZw zD0-5206h=YWaYMdH0Dkz|Fvtb)4CAkYg&ZXqZr>y`TGRia5P>Sav9<2t zIQ8uxZLLPnWqDHUsX*oCG=r&O^#2|VYTqURFG+L8AI(7>&!_lJj54K|EFWJdKZBLG zBQ?~31avFQm8_R2#)Zg=m69H<<%-&2Uoz{Z>k_yK`adCVWzpB!AKF8owDaph`=+Kz z8y+vEjfdA3#~O_x`;4Woe@PewyxVBvmHk~FEUJQ9vA_9*kctRvXWboWxV|p1+k3hL zu@tYhtF;kvKNIQ@;(u$qf7Dp3Y&`F`QwdAR5EP?LW*`bLcl3-{*jtBauwCfsRKK61XU6CVD78IR2-zB0{jhJnWPN#9eF!!@K99_9>lvP#NXU zyPmWt=!_lDkH-MC<&}pe7Et99xRprqHxZ*Zn8HTKfWyG9?|X$^dij%)hJj(gYLH37 z9tr)O45+}sZrZFnhDkB+W3<(;X+#34*9!3CX+3MLQ!7=n&hmv({)q#|q$B^6$^D&* zBqn5AlgcPQj;ZXOfuLa;onW;+NF1x#!BOcB0%JnDH1Bgc2{c@9Sn?~J(@Uqm$j<73 zc2#jKV;0_ouJPLayi5eCyc6hJZ+rr^rIi$oBXGvWautDWe<~uI>n&;kg=bYOP@u(S zv6e)w0d%9+lRzYA5dwJKDes~xtIlrYoJ18cuU=UPk7Q@$LU>Nb$+KnE(LUTIMBnp0 zeQ&Mbq+u2WM~OTdxT+t#=$nEiQtO(2AX7pk$fYxif*xr|&x8VS^5j0NKjufVvjqFn zUN>~Y<*a-uLAMGas2?>H)_0ADxJoGox9+fZXCS0qK)U_4=PGY0r{$lfu*xeDfL>lX zb=>Jv6f{jfWUl4M`B>|bKfnK@)_$Ep}u)+EV$WI=W9>tIx<8Yl9M; znb&nj=~35^g2gFkf(`gy6{D4q=$b23P#3b0rC5z>Kvt#lmVDipW;XIfH7&?el$Q8x zpN+$;-_;_Lz9+rkd6U&9s-{(gs_cDTf%Q>wW@lcaIBfG(Py!V7a+cAT3V<;AwbKc} zR|(si)`@*COEOFE>ak)HDu=Zd0B_t@`|f<7dE3!~PJPpy&VbQT0@)z`2s4TeQa;AJ z50-xrAl*)B#bj(IMz@s%!J3UR2kpZ`hZ1{(iY;&vj7U9>DX!XfZi^LtT(#IWl!V^Cp*7d%h|WKIsUss z>M{yO<_B~?I2aqE)3`^p5Si3s-n-s+L>%fvP40@*)Anj#0^?DdpHBb_vfvV&$b!nFS zoM{n2HKGurMb;y1@(dq~oGwisLoxxM<5876pRomeLAH#$W%z1&#-rY_!!-yK1=}wT zKY<~Sv_YT!ZT&8Vfzn?r{zq(0^|j(MLL>;y04?FEY-*+ZUf#%~3>x};l4F6DlQH79 z&0#v|UVx|fc{f+u02J)UP-c?i8Yb*AJE8SorhBdXp#c|!ZQz)7Iv>CVaS&5+RRn!$ zZU9*o@(%38UrhRy7EGV3#9mdrJ1dN?Rh3i9R_o&D`Aa%1o5&3 z5FXtBivPb?P{hC5>adl!U_c4AwX@?4d1Ba{7{Z3`|NjSXBW->chx<0Q)uNbc#Qg=8 zR|BVhvRghh-3yy(_Ny^u_23ta+4hT(%oiD7&NaWI4Ga~Qp41QzU{Ns?)=*lyb@055 z7=OQID1j;NY5HPql}p!Ujc$Q<;}8hQX0^39$x^e^dcR_PCeS{*&uSK!NMNP|>&~nK z$PnMCFXIZ}l!Al=VFeiZ2&fZR$IG{wgO3lS*amC#x(_FgXW3Wzaj>kv9OZhYY{Sx2Hp%=wPt^t>psz8CK*J|D!Agew3Rjge}nyIpsGmLc!*3^RQn1VYJ^)7_4QS|L@~cS^YjQ# zAuZ`Q6pbamY}s&g>bNvQ-S=B*ud)dxO4Ld@3bPuSUEVUar>;RoY~Vx_!nhK^JkmUO>`$d(Dsbk9%FhxxsD zKTQK&+LuLg4sf79h?8;XEQq1{Kg1I2k$_nX)I2*v5}Jy1^`XwG$8?e}JdLKM$j-x@ zMwv(VEYIX=hooA$(dB)OY{#qXRIhlN`&R&v(qBhM33iex+HthnaEPUyOL2lo+sIg^ zakhz9$ttETiUTk1aJ`_|4U_X}*asujp~XYSIxZQQpcE=gxQ44GD~d6ffC#)b2zm&bhANygBy3#>&=ep`RbB* zS%7h!3s>e**;^i#Cy*#hIE`=D&*9i`ayxd8ZAixUtzjdgJI;R1}8{f}dnK#-&Qhz2LpZ4+%V3 z>%R{&*6{tY1Xmr3hjevQ7Sr63xv~O=CH-^Piz(M%_2Ic4Bem9TJh6o)dERTz&;z)oMhjMQ45qzsk_ zGV4-sjOg8-=Gd`M^-6s_hj-f!K@T}cwR^v*r#l=`Ff=KxoUkQdr7z)QSTF)%_yeik z$%2FByrC~9&tqW5e4UNN2k9z#z^ z$p6)KN7d2M62D#o4+WcL_sZ)3D`_@m zbc3}D73DSc!3vn)83&{n0ztcI@AOCmOGjt=IRp5!$Gx-}~Nws&GQ>?7&Mrzd4JQ7Z1&o%SM!`aR6rBsB1k zV8dD_{x7q8w=ZyKu_9Z9xyb`#^n}>Zn%{F(b`!c!J)jT8WZ9Z zdt#m%_imxJ{Epk1v&@z=#MJnb0IKQU*^od% z%tlzQ%5MU1+71tr8#_@*nX8TqIP%_(np%!JSQlM2^f<*r7+xzc2-%iC^G<#_{XnSS z$qmjf!9h^aRRY|s)-eW7;M^WdN&f+(mfh^$&D^4Lj72`7+2B*y7+`XBS#Ou7$_*mv zx(Ylqf;sQ}_19nJydXPse1CtHNQnVTW)CmFQt?-mKVu;FAQa3jDc#RdX+YIw9kT2> z9IRyDXR5Oqv2`*BrkY^){@n7+A)@6^PYaH^$+qN=)r<$jK@g}yw(uZ?)2pm~Rc_0;e} zx#DL`|Mi1g5Cpp~t{Hj;o2U+ON^ClWaJ?2o-<-w6));nlfvLt9#H~dwSmn!l*&kZ? zKcA8(xXE7CTi?gyFhwYeINfJOOddXJ8x10DI(AmZD9N_j?v)yfwfxl1CG|Q67C%ob z1$dIzZRGxZsBZnHK7!$$`dxjQGWHoYT{yk0Jrbcsxt!T58n9WW#wp%<vow!io4>X z3)@QZG-r3tLhtW11iL$TR($9G{Vf^A;jF-eytN8|QGn|BT?NQft?l`*Q(JmQByvKP zd*#gmYQ#g*bZME&I+EUBO5U&HkyyoGJrWJ9odNoE5ggOwr5gKVayDd7_J z_mJ|Zhet4XsKuiJ4e>}C{sqET4T1#j23`hf4w)CtfH|9v&Oy8yds_x@VsqKUfS3Ue zmYkNeY@L%6ZVg4;iVQ3<9we4^vB^{c8IKzI+1F2QJXFcoM%G8($1l_8>&f-`YW(v` zLjb1}n4EYQm~c0FQj-OL-D1SM`i`L}vC|07ule6Qd!L#+SHcEOmRP0rhO z8_Lv-z*vPSMe93DCDAJv1t2uu=8s{$U7g1f!Jd<)54c%K?oY9SL5EGD?2;3#TiLCt zsw9i#J8LgtTG@04j)=gjL3HkJqFDTu(D``5U?Jsm;3BpWNd5m+13li87FjRt10!Qb z@($lOaoK|ech!SHUPuhhe0I<7Ck64qzy&|Kf&P zcoyuLNXGY{VlHjUl+42#U#K%rpIcnXckXWvIZF?EOW#_8fn3SD$LsEMfnBFw$oRr> zzo}pqG1=Lp&EK3FaC(Q0u;>=^@|K1=v?3nnTAueMd z@aa58Ii#Rmft6Obhqb38Ih^vA!+Lw1TQB2ajEo_fx|{ZZRw@IcNS=O0cPL~5SIPM2 zIcrZ=%2>%Am3Y^1XzDxp)oVKU>Kh!haG0>3AndPb#i$3riJ$QbwImalr5`(j=&7!Y zp`-~aNcy$?w~uEh7^eaeRsiO}4YA)Tbr*mUi+M$36j`JI+H0-S12smtAJBcsDB5+?(ba4{a_ z2jyrJS*tV zkb{cuH#!NrZ)5#L%=;Ks!i~r?vbJL0LLWIsR2UJCb-g3n9)YTif&D5Ye2qK&5WS++72}Cm5wztqPb=SVB_5{Fsk&+|jhmbG`!Sm2^ROstW%IR0=!r zvCBpS$t{pq=n(&hgD3SFd#RDJ=z@s|cGiw`GjaXT)JhI7WPc=GI|?KzgHnB-p5d&o z#SrUOX@ePJ+OTL*6cYmh@&n*K+yJ--!dR;giz%zflLpkXgoE#p9uSP+i)}Hq#LJbX z%gNK&`l~UE5IB=<1&jE7_N(^ayQ>dNV1!LD7^W1oG!}&)j4bD7*su}iFlqa4+Nlme zd^!qCfj^K{i-b7iXO(jC#vfO9EKs%IPRa_m7pNlN6>73;{hha?thZ8uzC%Or%cvz5 zpi!eGY`oTsPd%4hbNkIElTfgXq|H#z>ATJ+TSK35>UkB`!&MvEN)54q0dwGo10V71 zhw@$(a0D5pq+wT{i2d7VS(}~5K8lor^X>9A&@hS_70+KUBDA2SzgzH(Fe~SMPRG(B zd%1=0^z>bK^25Hdb`AvdqMLHL1Z*A;6x8sq`Yb)!XPqgoE-qE6 zy|7pXWzu{j##dAY)W*CFJ7qpM8N?)S#gJO=4Hi`%8Pd-aO}&K65(T&K*}@X|81jS| zj_3!}Hi6a(vS1mAEzseW(q=(|m!NpO$n$(LO6MUTIxn2bo`0ToQm-XIb*e3YC1MyF zWDk9zo1&jU4Y;3A8Oz9g;eJRT$C;;{4I#1#KN{PCAwp*k5U*rPGk1<-iXCUGwfa-IB8W1Z1|ZazoD_V7@D!`U1$rc@bffUiij^ZpaQTz;JkO94{OOOoELqQ41c!lwEuu)KkU- zKQP3g7Tq5GG>C_;P}E%T%sqVc5U$3a;v`0nQ4aOO3wj*iily6T>O0JjBEk*rU!noj z=Sjg6!J&5p#lRdI z*VEbRpvtRNKoVYtqD4>8gd3RU2j6g_xqYscptphUX-vLSN%~bhmFOG7P52LOaDj4rmva{3;YiYd6O zAz^Z@5IJO9(lV-+f_T~g?vTg9PMscrQL3Kgeq{JfH&-jy1(nsO6N!&_VqhzHv4aP* z1kf*6OSZGI7npeGQ(>%xNoW%l_O>5-T}soOg^3g2Eq`yiiq ziquE9j8|1}{E}Vg`-wf_pdy*Rke7djw*ykhWz6TQh^cHff5!+ub&4Q3_Tu@`Ph8C~ zh7`jfug{suSF{(HIIYRK$Qk<9lN4#0;s-6mG_krp+|cP)uH+z{-JKBdhS@hj6fi^W z6eIcMl}qy&C{E}#`su>$g*C{_Wf-i3?{Z!R0^T%1C+nL3#QRpkp0JOVo>Y&=uJ|Eg z+5mFP1Fgi3R&U|}(>Y(q1DjsZl0j?9M2ud}@cwl5M~$_TaIo-R5BZmb0FlJu0mv!Y zU0--L$;MqCeC4iPf&P32E#i|GDx-|vVV*Jv(Skw|lb!(aI}aK}4fL<3$R%LG5d3(o z&4U}Pq5sc$VdnV-0byH;fDeE#`I4ch|Ho^`$u46=S|g#}W<)Nnk;rEjq{nc4fT0(N zU6~^f+7w9OrPAOEgpdw&B%4pD@EyTul7IHZw<-%v8Lr2x6QLQ?tNas;1G$^Y@^dB# zDdttO15Se`uD&^Ie&cxJ@!X&Q_?@$=B>)tQyA`93c}sKW{)pt-k(;ZxI|P!iyWa^B++=JJ~BSNx%}p3es!%huglEn@KbpBxY>~NsZREQ1s*Q8AFv@r17}ShuQgV5NgZ6ecTzP~l|nB`xx>;0 zy~~S9N{I`dNKOehhRafPD|cA4WTsrlq*$EBjsGGPgEck!PGESm@261+^#D7)SAorUXWz+tegYhvtiZ3lXWPS2ps}tT4ezPbn54V3W7=% zgt{hh0f~Q!B22XfTS4EtgKUv*?ACQBZoTJ-toB8VAPbD0-Z2yb+W{~CXQly;t-~`( zz<9B6c{1Fm+G#4I^nOi3Z5rkNhtM4J5yv;tS1Ibve-7hvbuFUIEI7hLr2~ZjK=y0o zg%$tmX5D zVcysc+zqq|(#y?gB8LCK3o9gleI*QUZtSu=fsH4SnlB)#j>D*?N~#p=UV4fldG6{i z0zi;fAf+tEsBS+w&vM)Zd=Ek5x0aC^iz&6!sn7=N77BbRp|HOYN#dEZHp3bbmC)E; z4_$N`Wc5W5cs(KxZFEP^X4f=~=oD0XPZ0u)zWD=qjpu+uhonC)8P5T68(@yOyd+R| zj@&ZHXmw}DiaCqk4vI)?*^%E=bssrT_un>3Y=IAS}`%R>&0Rb^Q zKTVP#%R_oq_#t|TQhrXe8~D|H=2yEN+gD~*^mgn2g@yzvBlbiGVD|U;G#i$jm>(*@ zD}Kx=wCVz(H7n+QWe8wY~DXEl%zjVo9)hjhMro}9xw@K&U zM~<~at4?hc09UUUJ(j(bH<*?D1_8uCK4oT;|E(~6OuUxDf8lM2CwA>@6y>tO*Ed2P z?$!C>U{5pP`3`XT&X{*3eZGfG19_yzQPJ-@kRl90S&&|j2(>G$;69d+E^!3L}3p@@1U*WNLIBPqB?pP42-4~Kv`l2@O?_au^0mV#9mU|#p-o4*-SQ09LR>h zDjlX4S(QK``ir~T>fLve7fIU?KnjUv;nP(Ag|% zX3jrWD^q3Q?GQl_z%v8En>llMD>YK{MfoURf0y*%K>Ae$B0~T-2LMS16tdl$&G7r) z9ooC^;ofuam^sW%IOns;8FvXG08$9hf?A|DY9ZPH3;aS<5TF#bKyAu}+@K{`h{}H4 z;sySQ5XGRlJ~zjOT;K?V65w|Z`evRvc9VBzVfX+58Zj#>fGRg5-aDLk@8{lqclW)k z?`q>xR3)fnQ`NN~02rW%1BiS9JirjhAsi6I?+5(~vHValP=q6KA)uMXsRVF%M?~Pn zK*SG3hsazkA+Xr-zU<qn zOdybt1Tl@^_L4yIB9quihw&Bx!9a6__5_(oAxP#2_qM4*Fx}B4@U%QCXGV{g52Q_^ zmm5QfB2r6V!@%rl7hDd&o+?R(!k^R;JU)b}!LU-7)NZ$T=jXp?2Z|4Qx_Y5XrMLzq zu~L^(^$lrubrPD7xHwLB@T41Th(aPX04_`t+C zO*j>0J~w)wK+X?E&0Nn;G2=jBC10PvD0^7Hfwf8CNC*tlb+i|5u0x4x)DKx2Qd z+%w_>oK{uaQGfwvce`7Fs7zAmYWEuz1ks_p5V^(#1{IGlW-*w{9UJxw5s(?&dcWiL zbAx8^jBBnr-23*zrNZ=04|yX$6M#J)4KQ6!*p6$2{z@YEV&K0M7#(OS6KQlf4{LoH zU>3lFl>YtkE)xtj!C*Ucv6jI!JmoIGCRt3NS(jep5UG@&Kdxk2NXC-i(+i05LlQ z=cT4As0BlI1{?SZQrrx`c{AZ!H{z$m05-9jDBu@JC)howfIJ2n_$ z2?FEClWtz5pTEWvF%z%_;$(qTE{2|HYU~9U{2xXYKReLFXP|{uusE;cp|^t3Q>HFr zI8Ude;$vy{FcIsku%ejOk8@ga{-?lqrzSQj1@*@TPG)okAVsTzapb6oJ=B3!PXS2N z6nEMz-4Yi1by^Z;BCbp%v)Gfc@WpbWKoYw4q&_H9JbEx$T$+{{Y*AA4Xd+0f7j4EI z=jpf=)!u9X2+3v>HI-Oc=6Eg*HsWHAu8A`ro4N|-<6lZQa1#XjR~^an%Y@V1V9ZV# z2!+r`qxA?vA8S-+$PNcs>7{MPj^y|;%Q^;MWSo_S6CuY}?`W^be}pNvYZiG~&O0Xo zI~w~wMeE>Wm?~}YKmbu|sXI_<1<1jZoj*X6i|G-_ut!^vWh0d^0^L$8=tNZnRTx z3u}gybR-k!0qeM0%hX7>9t5Z$HzaknCY{+t^Q-VVzJ4Ht7Y*!K6Wzq01?fR)&c*a@ z$z-7jT?m&60}e9y#m>Enc8ZdyoJAgvPW|IIdXi>6*^nac`MDN*j&9zogC;fP79s$@ z&uO4n?3drqlj!&~vD6nPjDOC*Kr%_8&+MX8=!F0BeXM=Zl0<8Z2Qpy%7E;mni7qGm z6uS-)i1-Tq50y&eSBxI0)fjAmoe_C=^#!4?5@J zC9&*I!n!#-RV;$$9*QKV&>c7$^LG~4j}g9cO|%6zGkB&+ztd0q^)Wy+mAeCJdj8vf6TLR~k9=}j8vzZNh=67aDeK;lLUzUNaLS%sE_lJO#NSt?Lt zriS0ECC_N(lgxqjPu$l`((Uig~TJaG`!6CRlvj8#JOVg~p#A!!s5%4&5*Zu3B%G;gRjv7wU^c63x~{|!k?2U>Qb39A?a~QSOEYKhJ4&X5P)`8S|A6P4*wlHa~6wph2HDKK)K;uTMnZiA^?K)JT&$AA(M(h zVS6^n>n(@{c^Z6ydwSpV*|7L+d~EgheunV$Us!5j(Zm=2g9nm&&P&2vMqkePh1uT= zF`q6H@38#0g9OKTG2wg|2`*k8z5tNlA;xYlc()7l;pn6zzqK7p?cyix9nL%oZ$}i< z9rpInDgmdXID~}zKYj>t3wcQEe(+cyPE2v54aNygmDf?<%iwUvGpFj?=8$_LwMfN% zpFR;XA={9z&dcC&Gx0v3ajr<|zH9qId=uJJIKkVG0O#L%-tWhri-%vX;l$UY#E5;W z%);k~h9^hgJcNM#e0_wKpR4eY2JY%1H2Bi`dZIIWON#m_b#*~8mH=d4hq-2>jm(VC zUC7^WNJu?!HaIh24O*b@5r31hHjf!h*-kU`hL!;BpfGb#sIUv#K8)&x#TI6H7f*{E)nge1o9-w zM7en`^JAAJkQO1N^A@?V_laj4t|BsOl=jo75fx|0eWnu5uE#B1WK^0f9u zI@xvF7Kk1rc@R`Eft4wV7WZ3*Y8!Ovu!HATXg%vZbfLD6q&kkJSU1gk zj$?*^bES?g0WX~iye=egPv9^!`_m0UwGR3OtnT7sa-4k`{C_YkFaK<*Q? z)G=Qh2q>^->aiq{OgvZISV8a}Nl?#TTW=Vrt266T1^SG@$P*9%jD#j}h zDGo$TUG^krkf>6MzL4!`2<#S!T;nFgjR=_($X9aswAd>rOdX-}Y$^9M6 zJT}v*)r3d$v<9E3H3YLxk_57Td3T-YP<}Vq`QSlA{}Jval6Xs@2zwklQBcmz>>dm` z07}>Iv^#w!CP1faUUEsIhOK#NWUIY^O4OSp<!U6@~mcpeoTl2#I>+Th|m%I z{q&$?k8s9_kSudL{&Vn^RZp(VOzqi;icBLYt8>;!^+7^xYnAn&;3vfWX2>}g%O18{ zx@ISgQFlqf@8H9Pz}pKdO`!--_k(N@f9T^OPb*RScT+PtoSB+G3LH)2beoVyOp^)s zy65Y@^$~49og}$(`0`#8f#}gn!y8SDEV@z4R--XLz*i5jM0pUXpo3%NVmnsHt|`TV zbO%GOvB8;g=df>JCwoyVf4>NXu)|KR1LB3%VVde@BN>PPf!=@;Ji^N7{A&(+@lz0=_>)X&Iw4gw|Lv+M_~={NVMg^p?0b8;bs^Y^j8x2 z?eip?Y@u+)UD%3e2VF$zK&Q@bP##osIfy^dy(&wfi&_^-fPkMP#FF%jSk^10z12V> zqbNgxA6zhQaSsdQ5gtVIV{P~B`q74B5+{i*52%Be#j$gEoZf6CIA7~Oz(gh#n1l{y z`xV9h0d;!Ydk1-CK4N*mM$O|~IMM%Quur?%un+>e{;~t?*MTF{%yU$gSZqai!c<@L zQKv%b#S5@dGuc-2I3t&MvLqnTw*D~ttO|Vd85v5+WXCBttLPB3+r3Y9quqZtI91kS z)VHJ0V&9Aum|vURMy*h7+maKNbI5mJP;wnsS|X-ek@?|ibZlheQUwPj_4tQNR$TUy zC#%5enl-eupw}X%z&UTS@48Ohfpf-)H))XNnPW6zcYExCIa zk=CB&*%oT<0NP{JoXDQv7j{hIvALd(Y-n(3%S+^P+>LL-hn#W~iR+3U zc9tE7Si9^6NCSZMhtr3=EUb=qjYDgv49)*q;f)w%(%_zLY(1P>x8_irM~Q(Xs!E6nKREs`3mT>q(r(- z19z@>YYUnHsono)iLyt1Z`dMlY1h z4vn8TcoYzm#PsuqYtUJ>%qoq>!x-fA*7w(_yf$7F4lm;X(reuIv5Dh)QQvr`0nSXT z?hI5&OWl)4N=z5bwv4YUE%;&KbhIH!^_{dgxf<(HkvF^Rh>6De&8 zQ>aB?vt9@;NNwaXTn)gwoCc9AY7C;C>-R)WJ9U(*+s!^Q$N}Z=nRuKOXRn?P zFGmu=XB5%v6o4`c9UXcWN9O3d%^{~h>}7WE=g#n*`a+zjJt+z3Q9-fL%ef9HKr)t$ z_X@ZuK*A0{btF;&VK0EwaQI8+{{k(O5 z%-M3>DtN&7+iNY`}F z7SG>=cZjA-#6wPd8g$Yz_<$CD!)lMy1$b&C*Wt8R*~&z?bCC;Qb5`Jsb4juHyrd2G zKxO9iL}4?&2BcjF*J&VWC-XC@V{23l^ozOHr3*yRxhTXEORXx9IS1?3Az+-UJq06n3b|KFQm%R{N%I(s z;=i2G$@+V1JDwgLXHVb#mpcQLL#xn={QxJgL8zxT$hqK}|}q0pGR^}xmJp;58Aa75jE*6D9mXMQ_U zm0M6bbKuZShzAHOxstXh_q&x_!J^ael4Kc|%SCkGoSs3)o{xe(Z>4E8z7j{{3dQI*#g{xN8FE&@}oxNR5QJT{20np2CleWsCMl#DTBoj&VNJ!evq-2kt zJ1Ik&Mv>mDilMo{VSC`b49QeYtKd<;sKMIgVyZ`j%U$q~GQ4HeJgRxC7yux$xV9E*LhDixyo(X3w)VfX-?j zBfZpOlCaEbgIQW5CRu2sWYpS0l88~D^;(DkVL`Ag?XX}>wA#d2{;wHo@pLjI9lk9 z>ZVWM_mct((FPUtQxF!Vw7b$4VLu_=b_bz~<)q?QZ!pj?PZy&xr(!yW>8anJTO4uy z#vNyzCG>K?U*w$>FADcAT$2br%ia>g6>D>HL$fG{S%2+}- zbgJlSw7e=PhwE%4YHPH#;jIo%Mq|+{f^AWFKCRP-+L{S*T%r2W|FmLru5jA>2P0k4 z^Si9v5cC5nCe=@b`R(Jy-@OnWfF;DKA>%AerBChe{fGGH(?%Rtd#Q^;^{>>q&t6he zXd4PtMA-Qjt&lWA(y7Ek;+0yctppXBsySZYrZ8*k^+Id2o`jA9TjO>Am&dT!*e~}>v?N~0auFaZ5 zu5hQbq^!x#X=+s#pqY%>@Pfg8zl8?9y%sPy*hAl7t4GBxJB9{ z6##$n>E9b5juNodsdj&8Gl+(>Md#Bvf%%x(G@|x*Zu)JY-11i8 zr@{PiPXnZA{Vn{|kQ_%M{@x`0XfDRQNr!ZILpX$>v;}uWA%aim zf}P?m#!+XJYcQt8c&KRDYhCmcFZUdHVY_Q@TTW!{Xt^fw3QpRNR6~WY*cOY=NL&6A z0Be6N2<}Rr*k-zWx;lmvrXv7*gvMBU8v36(sk&&}dnO@NJz1jn&gHN?@}TE-d%Dqlqx5ZVL!D z4!e%i!t(l!8SD7e`i|m`@p@lv57c_B z4Ti-kex!_Xfisps2KEBkSJeeU?P;xQp`xy84hTHWw(mM+FXs4)xrv45Y%)4yO%o>c)m{rAKVQ7PahV0fz`_K5IHeFGm6gS5{B^4Q zIIgheNb7zX{f~c)1S<3~INyKMPffg;{%N3I-_!2i5}?tmbF$Yjj`c$-;WQV{ucaUL z7(}2DIs$XrGTb3QvRFQ5b1ic*WbzaVrpi@AORD=h;o)S@^ z(@Jm2KvPS3tJLr76)Ut+ncgX?SrR8mBQs1vAcRy(fmxu9GQgHS0%#LQ z$nH05zzO61K49Jv5T&{T`BBrB2p3E{!FiN=xq67g1}7zV@0hG{>}ad-S+aYRkT%{nk=&zGKS7YiYromHw$ZicHfQD)RCZ`37eSvjuWs^)felhwx5e+RVRaSy&*F8 zy*~CR4++?HAYpI4=$wYUH%mq1cb)F6%O5mYa3k4s~w47QW& zufCCNt&IyxaSd2de)Z$@;mYu#Dn52+)^)zA)mv~Y;104<=G-M)M&z)BzOOqnO8ghP zzUmhUi#DpfWYgVq-cS$!=E`R*>tSjA4F3plL4Shi_jnyJD~k=oyimV6kr8eM^SYq`M#;jpY##^lIC>{UpQ+ zDAw8p0_~8eMd*A&gm^d|0|!?8MYI2o*jdh*i*w-!D@x_aMx&gHhR%V{AHQXc0SKBdlSL}KO+j;}u++tbkXJoUb%$!ISH5c=; zz(5LZDPL?P<`kYUl{J~vSW;TnIbm{?s%dgN`}cZrNmCgJM z?z9QFcynfk1_w{5MB9K1T2p=--_BldsFzgean(yx^%;}6n4pDl?&L=+Azl+@YKD(V zgcSRMe|k}TEAoa61C#8Z7r3yAmO8?PCTy`!tZ=R(9*87d$^ZrW?yDD>{^R=>s=uyZiZ@e+P_CA@A(6Sv>mrGl+{`< zxJ(55x8yH!4GRRu`PDc#L0OhE9{%kk;fq)=jcoO=&m5OW$Kw8cuge!4h7b0epv-@n z@P-N%H`DyW9R)a>@AcigBqsAX&1adDQQQo(ZfEZh{499MwD*!G5I*SbgE&+CI-V%4 z@q!z8tx2Zm!JJ?2`Byjvv(uqlYOv}DL?OochM|5vGz^iJ9ft|Yy(1k7B=rn-u^rS; z?qHor7;TgARm${7Rx6?2g&9mb<{j){JD64I*)~hbHsT!&O!M;PbWogE~wqBdy1~sMU8aJ)nZG}tb3^2 z)xXYBe2RypO{G(#nr!<5o$(Tt+y`mtI1EIIFkX$rGFq>6y-ZwRhLR!+pOM>CurBgO zJ`C=mV3k@6qDuHYRjp~vEP&X_VD zXNY~>=A)CTnt2vDjG!-LB3Vplx*7w-Yzuh8k-b~u_u4wk4P+w6I|1g7{S*y5YZc=<5O&qW)l?S^`_hQv}Q^CZ~(x`#+i(cX6vb~gWCJp`pq4w7Bd{zTl&8^3RNyxmWP?>9Yyzef*!xP2G1^2u} z(NXbxqP?0=V9XXxQ4Bst2EVS(1EWZEM1?nVP19vj8b#}4qHx+igv2->#whX~KOzwr zF)9O%tfba{8RXa(OlcS=?$Y{Rh}2WY*!?imn4FA-2>&VO80T!pg+NY|=}T7<4+b1# z@{^DwsHiZ~R8^hH=*E7|7*}a#J<_kl2@4ZWCsO1LI#gF@fD8*6um=2~OV~4@pk5rD1V zP42!*w_#c2;1dxM(D82Ol3Tp1{@nbX2HX_jX&~z@*2d`mOPcG|z2lL1)Y5OU`H-vs zOi}mdmh<(Y$yZ>a-#X>ecios@nmC1_G3F3#?+WW%Qj*B zVMaT=N%-6n(wy2c5-7=o%B@cn zSdbBQwI>&kon!gLFtS#uAk%zR|4A?{u@jrsPFCqBoBDCeHUSah+3Z&{>=ks7IU**y z)#s0TWCv=DS)lAU=3qkZiTf#18A5}o!M{$)M4_d1_)SnjN5%hweIVAdGl;8(|@E zs|I*Yx8a22ty{sw$^$Ry59n1Ns>8DyHjcYw8pHlUxllslx9O$HF#9Xvq=X`fmsPydUP zeDjf)`~n%)2jHFZ?yQw3)!_-83DY!i^DGi_0?+jUVAXg11JTrBzkD_JeYok{?e0%Q zSc@Pt`6|$Ib1_Ldw}M}hmh$^VUmvqpu}6m2Nf|3VzYk~X?olWxbVB*S%Z_)-ibnF> zy0nLJIy?ZzSiTcF@m-1OER5}|4<~8eDbS5)Ov>ZU&2&P8poB^;Ha(eQ`_?=dg1An$ zfhRp@KZi#=KAB%nl`3m#s?p;(=_IInMLyyMlDBobzzkjD5GP_d-r-nY=mie_G`Dbo zV_6uB3{c3eN9(ycK6IvDz>GYOBP%YWNt;GTR(To5j`$mpEbs8}o#LK@%>)eg5_Aow z2gSB^-Z0AjtqTKRF3t!-$~}viu?*D`ZA<^ps2w7vGlo301tD29@|Y`T$`qZ%wmO@L z?s|9Cjd0W|l>g-pDOYVgJSs(&V{qJu_(!nzl>hXk4}tNDA3LGLWqhp2-L_sLbL9W+ zuj%Dbb0H!H?&ErJ&B}Vo!H%MQP$3%NhTa~AM4)s7WF1>6h5{yuA0N;qpvuSL&y@H4 zxDq$aLgEQU_IbG%>UlWRnD1}sBf!^tb?7>iX%qcNG03PKP}d*C#Sdp8P*vV*H`?vf zbK{#3)o_79Xt%iiCtob_@5gGVT_&9bLoCbhfDd(PIH>W^tt;UGO@dv?48-5*zqSTG zRWLf1ZAMVrS3TT^d0_@hJ-zF8`dXcCq)Q)8_H&`}%ARuRg*d}(E!SlETmWXv|6fnJ z2Vi&d{mA~?90_-hU;1p&og)0XSalv8w%zBYMdh6z#NLC^?qK<9C?_u*J>Rm+7bIr_DiFHoh0U_f7m4fVeFE_Av!f3FpE9*gHCLG%bZ0{x=>5IrYi`5l_0 z7W*F;(cS3C;&&`I1Ak8$sG0emu7^y0;irdXI%cIiB9=8&-39s&3z9@{@BGFY5bUCM z*YjphnTMdEbGlT|4OoooVOW{w`ACtAbMbmronmt#jbQN*oI!z zFgtMx!A+2*cj7FxX}As7VNYwc#~`9@_cvt_cZJ0AP+PRLG(SUQun_!SP7iJKw2~O* z4@LK_K^^YIf0yVD&v@)#w2zwS>@hb1(i`lY0+<&;e7YZp?{3Re6TWIss>WHc@C2d_ z)*2BJjWB#f`A*kxJB`eNy~6Frf&a~Reee{-F zko!U`E(r%6ps=YdA#gu-yMl?f$sdR@6q>&sxdo1HOxrEpMKft#*-=rzHCY{#U2}tk z%9!>ZMPi3@PmHz!!z}Oxb-yqs?j$ag?hZ2msQf zRDoQ6oapg=utfQr@&5u7YADW--Cng z_gW8g(#J^O5fXE=zJ|Rq-!n|3x7hJ%VYvL)crAgUBGJsY;pz8*569n*7{{k-eB+3>>pQBusG1=G5vwRK%otCV(2lV>k_7grTWW&Y_GGZeI zsvlV}XtR~iz6}HP1tC8+OC!T4yqx!Ng&tLf_K0X$u8k$}rxSWfkvFmOj&2HhYrF zc`^vWx=04crvE;dn(E6W;`wG2vVWuitula7x>54}2df5!&?=;_KF?(BepnYcf&F1z z?*>hHS=N+G=3@3Ux!BZ^ViirJHFRLyGr$WcZwyZ2rQTXAs5kI#jIT6QV4sJEeV2W* z4s-11(z3&I&Gh3nus6Zd-F=6<+DCJl&n$};Bfd*$L;D?0D4k=~jp&ziDqj-k08|xe zAYIJw`ZA%qOEj2a zk{C1@T*?@c(()%?Bx;>^>W2nV4vQ3AP8T{n*@-M1jDuGL2;p{%38g7h*c1=lX8#w`rFgYbe(nh2x+lRP` z{}y*~2I<#(nd697&<@)@F-O-kxFL1=1F-DhTMEk(r|RD4#zBOw)%t)cAV3G~gW1R` z^@Zun1O9i4)KnZCdeTDFGZH#c+3=yLfTtn0%LdQ)%&?sgBQ&S>KZYRc5NS#)5=o3} z5IH2jw#9)13n>!$4_ehj|M80fU~ug*1;w#^i0i=fF2XkL2d>!qseNIE^nlzCju<08 zpU((<!)BCT){IoyTI}p=Xqv_B?EyU#7(m48QMCvAX*@2%6qGsC?3y!2qT zzasIim2l0vFg3jo@spKCWCWG81j>VFtLJ^uE11exZXB8tw^zx`)kkZ(Is&u1d^m%5 z{fpQH%-K)Tm%YQBUvxnqg6mS7@GVj{KdJzs#xB+MFrz>~Q1b(<42{MrkQy&)fi--Y4t zT^(S@`J>sX6f3e$=!S>-tkqIeC8fWVI?5Do7FiM*S|w6JMlp$yy&_uF^SW;4)eFYK zJv1v^E;$SEt@Q5wOUQC~OFZ#ezU}vj?C+x;D)xr|a`1L9I}M+3YlOmgGVv7yzv@Uy zo+TLZ+C6(l)vmjVjoJHn=%L>|^bKu`OARX}d7P5-!RE3maTtCeFmPhvHwWDym`>^InST)sH*_$IOW)%-4nTSM)j*hXSL-9i3Q;!Z9aDRKp$41C=V$k|M|r; zVBAiT;_kxkZe3@&?L3`c%&e5sCodB}a2$o=V0q8p>W z?BBB+{_7SaDL;EdG828A5WwPMoj7i$C>!s1d;H|Y?l~Hr`EiUtgD~vx>_KBqM*W6& zW8*QQZ1zW7$Y23|5Pi1S3q!GTqdN$1-S}Z|Q@{{pP1FSa5RU_qdUFmI!TW{9l8kh; zj@;`i3%46x2}52y6s^bwYG&YePx|85ciShvE~j~2!>Sc{Ig{4&a8p~d1*Oic5UucO z*xOgO2_x7;2HJDs941D>`ZkT*1WWXUoBe*Ze0f3^nbO3wblBa^r;r+Ub>hr@u;*rlif-VLK;t82QJM`naP!E--9cMSuWcPKa+r?&s5LuZYL|Ju0kC z{I&-)a0@P{pu=Ax2sSnAaDQ3j4=G*iIcFl1` z6e2P3QRZ#iFj6j(4}p_Bg&($1o*qtr61}Hqy=jyhpyS0;L#fpJuP_sFQjkKk3Egx` zQbBvam}$A)H5PhM_t6`QI&UIVo4ERZ{?Wg!c%0C&2ECR<1AE@ifAlJ5TX%Zm5J=7! z^M!?(|3GO*Xe1B3wEWH=Dxx}wky~>n_+C+n1nDVxv6YS#0Ao>^SA+Knv=kZ5JDUUG zL^ul!Eth_aHeGm6qrVnIGKUQP(STxvzATvsM72S=0Ov_d9X`p3wpDcqOl)ThsX5-Af&rb z4v_f6O)LFGaBEduIYpF~$$RG3TSKegmaD*kl&e52QF^YW9yLBR*o7d4JA8lPL?eMs z2Gz-4J&4RGVhmOR_^JsO9&JsS+JLcxo$vHwLzsOxfh6Oh^fnLRAnt8f5-sINIlh4Q z1D8O@zzUrA{<89U(hHgqsN$$9dmn%wX!|0G>os)NKz*f0nkC4By}hn_h>Y<)X=jtZ z_4Rzi%xCMx{`pJ3I05aRfJ46oQMf>TlqTArC!VI=Da%h_p&GEq=#r25r%u<%U(sQ5 zdj_u)@B839#HwG-Gd|4$BXFkK2{4`(%NAtG+F5*@&gN8md^wIAv0R;dG_|Jf$Sqaj^TfM%7_^ew94znkbdjzflP+gX8Da(@u6Ku4j8QZ?{|26Wq|u8k&gP<~=xE zkF`m5P?OV8rymW{l@Z#IfK|SI;lAiEr)sdFK%@Bqf;mn@J)XN^2Jf&N(&^UQ0X}YE zD>ZgD(2n_hugcG>7RFx|zX&|uvj#q_iTw^Gz|Pp>u(z3eVwC9u^n)}a?dVXni{D&ZE%v-kt{=nI$7S6k<2UeMT{`?sH6 zw_Nl$gErL)Z{7XEZBz@7n1<=f;HlMfgtu`eqLhGchR7hdIW+T+ms%g=WvO}~9IWr? zV|XTH+nZGy^tB+dkx-kuMRVg4Y-ohViD{8e_^c|??!BG_ldZ{nRX%yanNgA7Qb9szPJQ2<{v#bGAxN!mWyu`DH}XI3 zmhymXKv~F}ossQAt;X{UM1QO2NC$ttB>iIrH+^5B81v36y2S#Kq_t<@sn_7X^0|C1Y$>l^dFMkk)vT_vd~DVqfXGFDb(=Hb1?jo$Q=ZPTn=?oRJ)n z^vi(uP^^Ca+Vd#MWXS~Wyw-N6G}iatU{mMz;@8TOrC)emWd=GXR{bb>@L;0i-Ta&rGu$JYJ6rd zMVjICUv#2H3-K3Q^BEhv&c5rxF{L6mp1+XsOzp`XVyH$}X;3u?uRWXq;L?OHbzWssb+`n{;_&eaF`~p7B{B*(^oxLx`NS57hmv zH0AoKs49L*D&A08K!$zdh3Fd&{`9v)fHDpKFR8Ml|n5&+97VM~wsVgfPnJ zqst@@OaA}f>UcE2gc1OP5XWmiy;}S8WMy=VjwF#_z;2Q9%ka8)@q2n`cyN5^e_y^M z!MSQ!E%Qdcbtd0dd{CyiHHp1VX`49`sJDtplZ6!%di=`}qq#Q&Y+IRMlUvT$oV{D@ z-tP1=IEi4&Yhj*FO}UVpG8v^bR!I>Uoer0~$`l3y?W9&@CjK8>8ni}Q$TCgqz}4OI z?RNbmWZ@U(gYofS3k6Y4_BscBZHPVnETKp?xI`^MD z&rkg}ZM{{`c^6Nu*YucsW9qyI{%kx(L8yi25ZEd#YEfl+TTKB$W(BcWAXY_$p-Gt5 zivGY$<1QHVXl8IY63sJ$gp?_NMf>esy763GSlv}T7DBqFF^ce+`t@h*)&cMBq)?7S zqxkLEHQ8ND(rbPP>Zzsfi~-LTJd;j6Bgv|{Q-J1oS$IWM(UmoTlY^z@iAkO7HadnW zU*&QMl<&UU%1&=h8tnIP(ic7VO}b>bZt+cSs$^2Dn0Dx`SfH-C&)0k7)0z&#^o3da zi-+{!6)+Q0XlFe}+sXjDQwKo!7;rEgTc5Ww_Dmjzs3m0rNfa4X+Vl3!{v;?~L!=De z*+1`E>`2c55|=iu{l_L!0JcI%%pcdPkfyi_f(A2FN+EX=+zqXL7P8^`N4#4WWfq+D z7_Bju=L*OpMHDFL##l9Xpr3lu4CCo#=N%L6A_Fs;L`8BekMPU>Z{6a;uGDlS*K0x% z3fZA?u&Eh3e6sjbW}$`}fRA-gz^l+16a$~Wyq`D0Dm4tEIU=x*TXH5~1pji5-r-Qa86;h|MfI0&xnpEN25{}4BL3|{s zGWeWQQK^}GxPmCBNwCW31mnw5MMvILPRlB?Hc;^1XhX9S@) zQ4e*89-Omu*5|aNYI*nMiVVNe6EA9BCz2e?#x6cG=VsWOujI%gL#R3E@BCy~Pqh;cFY6u+8R0`V3Qg<(yRNF*vKlU!ms3FwwJ|M1OfB|vWMg$Tw@)0q z?!&i_NQJy=!>i)03=fPI55|5Dyt1hnl9pxq*8hZ(f(?mxw{{&~j8Kbj;2_DwEpKpx zAnyi7tcKN-bl+*C6q*LGC%tCS74X@O_S96NTm}PIr8h9-=xOScL@Eq5F?Q-k=%7EH zpA2S6R1>de^J;zqqORn3@6C7WSt(4Nli8c#+AF~%0npdVezVE-BwtGsY3Rz$!W5*? zG&m|b%#-A_ZuPX2B4~D{TY)2coKsU}%HK9%`u;o3*JS>_&Ni}7_-vQBhD^}ABqBC1 z8_azJZTDMw(}HFK=kWs*84(4|BuUvjkwOgeaeK5gO}m6$zAvAyjNJA%vGyl#nN@7` zd~vTM8p{x^R!#1@3zY5KT7jQ*M$aLnrsHU1oZr6JufbRNjUkB-U9tT%;&R9BUDt+rSbqgu}NcYuozU&omeMEMeG+%|IZKzE`Ybnq9P(1z%sG2`ADy~L=@ z?#W$p#xN6&>)lyYI}&M(dr#7fu==DI#chr%Z&{`$boy6aS(_;KpN+Rw^-5{e3>Kw3 zkw`5pQ2GtU8r?{&&Y!imq3v0O?w?Ihhk^YT@G51IITQR4N4bT0XS{eGUxMD&)y0cr zQmdkdY2Kye%5eS`=d)@rz4y+`Q89cUamQl+P|xx1UTgOvVfgO<)fe_5G91$z@2(CwsJc3dyGh}ey+9KlgSntB)oXb47^u!Vl{jmM?<7R9V_t} z!;yG*BEI*ef7ovXy@_A7C~!>6KH~A>WtLs$jAYW04fA>!BlgQO_$T}NR!Ht|iOg;v zzgp_KCNiQuLVCkEWoJR--2bOJmNqvri@#g0S^8E8nc9jl!^X8mN^o#R-F%nic%__* zAz|qZ!1;A4vcaCKJh?i+l$cfkG}USBMi2VVwVyiiobJ)&#wx|qLbnnSO*uU%>jq^a zRMk*m&9S>Xj){O#LEjFP5f=wZGjF@p{3~#TH7=YdcJ{D#(3)iTTMSPhI0FV8mVH&V z)P+n&2;nz%Ff`6@q`3fJyJ%9%q~TH0g-pT6fLnUUTZS*1JNekF2>F|<-qovP)UnfF z)i;!|ckuLh?}fgdta%sPA!%;vS1TVUaW741Pz@;>yS}z= zS)#Cw>;0(`RE)9~mDU^nm`i$HQ)6>^ZZe4=7*plHVUA)IiZdrW>oq5-1A8|-M;DAU=)hfo8~D}rU~CJ#g8u+4=wD@3^=CMZ?m}Hw z@o_+nk!)Y`Fo9w_sFuSiM>J73;%goBw~fmjB9-)`Ca=zgxops`boJ-kwya+qZlD zTEvSV|A9+)a^ThyyT?o=WH%VgQ`JbIBqeaWQx{%%LkV{W{e6tw;u^>? zZ8oOkj-DO2?p<#&y>;8}4wli3`K}P%uppHkTowhO+?=prr?=29bz{MC+APQb1`r?z z09920PyzrnA^-pY0A^0vrlqB6X6BWegD%egITlF=5nOo6)AUJm6O)z-c~6$0u)`|Z)Y1SQI9dgy~*fCGqy=!*{f zXi5hO^wKL9g=HB`c4L{AB$F&zB)DYG9{?B{0GSzpnzIA1%h#@Zdw*{w+cA%66x*=Z z=|zyJDjJ4nAkZrUvf@~T`ab|Ol>YbE|KSKAp59}G?eN~UQ$oj!s;|g8+tofl*>4$d+0CBT$Ezazc4o}#8{ zQiW9elT~7YDp`N5W%xz)sXOIm^BaQ*=%c?E1RvyWH<Tld`pipRHv)`^j@03gH{J>FYH)CnFij7!kDmWg)F7d=-}MQ7*mqb^tFEA@!TQt2 zItG0SqIE)VRJN*CR(TTrl7ApQAaXr&Zc9llrRtG_v>v1TQj}Y0hhDNIS`j)ecS=h~ z-9b5}I-hnl$8VoXv{9;6S-;roNT{sQ`lfAH=gUQVHj~+6A3OJ!&FI)>Iql!Iv}erY zZG0=f$GG|^*HBhdpS^bT1}=I!YV}R6t0zV8`Z|i@(GF*aYn)E@j$58PA6LAq+G=)P zEL)EyNsyP|H?!((_xU(0AOSJ)Wgo~flIGPlQgqv>rRGQVyw7ASB%^rh`0H=qM1g|* zjrOVcJgZTSvZd>9svpcAk=anq&BE^WwsxcYo3d3}?0M`SN4#wRFW)-sZlo?>Z|75& zhbwh&>F3*p{eA9=(F^$;$x_mjTTw38_efOzL4F#3rDRTvyo}Tn^m_6c)imPGBRge& zJXcBEnCmB<&!bi<{)OxH=IRGc9;73Sv|8eKve)<3>XVyv>dYf`mpVFYWFe*X*_Z|~ zqQd$OdO$V<>FM4pi!?R*rvzm)U&S#7i- z`t-#p50}rKq5fFLO(y9o{oab?Ndi@#tJ0B0b5q;KUQ1qY-wEfv4}{}nyy9Z7l^{i|1ccb4!zGkauERF=gwtT zIw2m>9%A6gdW$LFmLqlZz4Tk2#{U*q?aMotlyxD$Y*99@7;q$HrXRkyxb8_iS(cZR z<0)^<^& z`ZNkTC!^b?$4Y)L&hG2~?SDs%cq!>2OC^&38=DsNCi^3F$BxF{_}gdM-CAsWur<@g zsphl(XtA=UjwYl;OXPB0Xk6VBIR)d-@uJS4UH@cSy%WMIyBtY5 zQ<@+&i^lZ3%V5*Lshs*cD5Sq@3R(}ZENk>W-<)86|EEb`WLlofF*}KVVlS4K=6;Xo zmat1nT=61G-I8xoE*ji7Q6&1)H@%dwPcL<_y}G;-o{K}&(yXmimdnLR)|c^@0J(mHp%z8v4HVMGofH{J*y+>!7N)@2_C|u?Yiyvx?A?hLwa- z9gaj_^q?mwxf9PJ)w&VS+Gp%C_GtXSO=WL9NQXEcez{8TGpmU=x77Z>pUycwo*&AQ zb4NM;O38fAYh20E(kNUgjTozAj-X6rJ-0{WcXB%Z5f@y1in0AHv2c+^}G&_&<`_L!@dk_F2gH6M1V4 zu=9G63}h9N@Tm98?94KIt(2ZacKZiS5`|blr&mtzJZ>vaGH&AmN7kVUlS}oY{CoRi zaZBUGx&3j7L=7LxqdTKZ!V>E0ofSo-pX7i1EVf=tTJ%{Psg0;9&MchtLVLH$HbT6y zZ~9oZqMvf1zwyY7z{%@-gf_&n6Y8xz+U8q=|DV@}NEdPm&Nz};t$RAVy**t0u~d@J z-DLNrhA9IAy*_$o`9^zDcyJg$mdMSkr-)y2Z?W}@@~3Ualc@%MsBAJop^{tbH*G#i z7l>s*TEm7OG-?Sa7ZM2=QenXr& zmm+l-S6^-z^N;+C(>on!&d7=qc&2gNQlx*Y4tE&ekLBE!TlIixDa=&x`FWY1Jne|ejf1bH;6Ca&Hj8S|~UoLIG z$C73pxtw#IaA)&x?#KFPIXqj=J8UcCglpB7ln2y^)t|Q?UhlpV-)vB@B%$e{+u_?S z+(vHP!{>blkM)Dgb{MZE69!`QK=$xw9=8=zXn!qLeHme-GdgdKlamMh-Wx~dJBnOa z=VraVu19UYmchSgNhcK`!@hI8T|y;2(GGYE+N8_y|8Fd=xw3x#|2%+d=3M7IZs?1D zZRFsR`7m9(h9y^~$dxFZ|B{o#o&V*}Tu9rWK$g@o5W^?6m>dg8dKmGrb zYthF!WHuZx^J<3vmrz~Y=PRG0ng5$}!$guPR1qRkRfuMUvj|Wklx0;>%A!C;c?wr5 zLZywXl;BTK*}l|MdMO2~XvI8<29iBRb7u)*9&O)%=A$qPGCic%CT+^*Ia@P^Dxr#1 z%qC+5BY|fSI)`^ys5^s<0^t*&?N!`l3wEmxdR9lVb{=GLt%X&q_$no)4Xew;t%~&Q z9uM@CGEPT83aRp?*ZFJjZxZ6o^N-^*=eFzk79LJ^A0H6C=DWT zctq{7t}v6v*`4#EgdmfH_F|t=+^~kn+qEMoY*4GiZgthjE`39aA1+ovLm&?J&h;gi zpnurL*??d9kmHj4dD+I;YOziI;zw*l)-5Ye>Otj~m?boTH7;>VPy*pzmP)EZVPB-C zjFKa{gY2F7OMYNAFKS~P9z`p}!U}&98r8dS_orbb7riUXv&UV+W#U8i%Q!8I+9T7LDb2%}xS=O<4LsJ*A z`UD-0b#H>#@Xv5x(v4mjEd8I0YfvDjSwcIVvB&|A7E77ehN{6cZcH=Y@qRhN&J5Tm zs_v3Xv8R1HQ=PSnxyYXmUXpWzXuk3deQRru3M=4D-qBU1!{m-0}myCs)oA@#1n7Cd1ZA~6Tkigv+gm)qSLF~XI_ulQ%p4~oG(I8}w))hv%!T25K znXYq5nRjPe8HILm6pYl@3y|b-ld(oTD4GUDG9(g zhb>_bi$Icsmz*9+V!4GX#{E0YKngKcbiUH$*j8OSK1j-8WVRqn$$)O{FAM zZ2>e>=|o>Rn=%^~J5c=zP%D{2 z*sqAQqQTc*%D{)>0Bwr?D-)O~CAU~$dh7BE`h7}y2xkS`pwU4Z^QqZ;I z^9GvLq)h|IS8fqK@n8+3xtT`cvq?r*j}mqz!w@K8rwp{uN`p=e+cpA>u?PW*vmuI12~q;L)Sw(maOccvPRp} z2RE_I4brjT9FjLk$0&JFaDK=cfIYP4v`;|GUu7o^)DAs=Inq2c#}G4S$onNdqg<~t z{KJBJ2xS=2#78MmbumgCXrhTg9jH8e#n3sNf^T1EFOVAJW|{*&!>|gS!8SVzkR40B z@L5;70n}h&>@A`^OvT{W3OH?pG&5p;J4iaFY6QeguSyRJu1C+54a2eHn-4_{Wk7`Z z6pVSuJf(TRXP}9@hYMe)#0SqT!H0AM=aS=q7)|QwAj3hc4?s)cTCz+20*7z|=q4kX zjMb)g0_s>18$501CnUt5X95R!`_zn-LSa~*8%2c>ToJT}rfhU&Mn+y4mLTELLllC- zu|zjK4>CwwrVT(pGU`yL0NX>gZ`BjRrsvJkLya#VVhx+TfE4!$ZF(@~!laBj`*fle z!ZsTG6utjpsgKN!(|QkNSddF!mSfcx;^;WVCAU|J;qF;JB*Iv;^hGy4QIp@zkH)k= zWR#XUfWt*ma*>N+^mk=O4rMW{U*zs!Gn~gVX?H+We`eV=hg8V@VXjnWC)@0~d6))u zF@rv+9E%-79<;UO>UlCBk^#sbx_R52tTfYA+%8N&PlYcKZ&{y;R3ppu3>&Ze;LmVAZ5vByK;f0RSX4C^&3~MzHA23{AH<8W4kk=G4~oZy7NJn6TiR+8Y|cvPAOokCIu4&GKpiNxYDj0Pr7> zebtk=r5Hz19;<&_;=}SRHLP$D_plkA!HlgGoBTGaSI7oMuQg|44@Iw%XWRxwuajrM2Px$MK&u%1WWqN{$8g!I zaERd!r0e1nwjWvoxOSUYS~L9ySCn*3($?;*x%0o7S;tLM1`4Y=wuG$4TjJZ z)@YKMLqLTPnsscj(>lyHK6z~7NP zDBkEU?1SGQO8_rmitx_38cX?LC_R`4zC6BV4LH8BdUW%nFb3m3*05MGl7VZ$4aILM zgx-uk81NVcW)l+toRNGMzvB(ACO8b?kqF`*L?#IHAL!QrdPpaEvh-iR(sgfu8P()} zTapaV7*W6t_CpN)s!08{@yl`84_{tQ_Dk% z6L1fy3L!9%`!0Hx2IdY2C=bCnGzGIo2|zc;&+HZ6ON<5{XT)AmcgNIC2HO(RL&2*) zT|M}5QBe$nI{bq60E+|CDwx}%dsyN)q>JJZw@2Mo7JI$k@PW&n5;(ZxLO%pucjxb4 zafjG~?o4Qa8Kh{Cn}<$fg10#f4f7d$r8p`&*CCn#Aot4{0QOI>MrMMgPp`K~CyQN8 z3B67(Pb>qh9@a!T0~s8(9^gvBXC=ag$Ou}*L3PG7K*148&>EiOP(=JlX#=1fR#O=R zNeysucs_EKjR7~u*-{o2Q1g!MK^X@cU?ru7tU2BQODM=FB*Sj2iyj(=L0tL@MG(OP zR|n#02{;9LjD86}L@eDxQVDwUu!?RjR7ied(=JZVE-M8?4k86JQdTK!ih zH9Qv)qzZieT1<-iA|e$nAkN1VY0Z98=PJd1-)&!`cn3 zy(ErWH^lZkIA$NJ+DRJ`c{UHQ4T!v(hvJ4rUd}^z10pYTBj1pa%fzGvF>$YwV;oT? z=ondq|AyGLCb;Q)`~$3?4S6=u9+Oj0Z5x{FeA z?DkX|uFUU8SO(D!#-;rAI^u1(fVxB1rH&08DdF~8wT_L*8*qaTjW@A?z z4pv4CHB)u%BPDTaaYm=K*{p?bEGO=GYOM&GD6=+YKLHK7Bzh!U!yWH2vz|m7y{oBf#Z#g zHBHA$(|kvwAb&)0?@gVS0k^MmkjfeO`d>JHm7Owgyu!p5i7Th>esvYCV9@(kR$+yQ z-4DkPKk$>Oe#UBwQF;y-APt|y|&AYBQf``-K%^c) zkM&D~e8}rPXdR7D;*qv7=pCaSM25`Gh3Uw*A{vtG1~Es12XQAuxAF#wH;lIId7!;zfXQ*@KTEpN{}CC1#IIlJrD%MzZK3r|J(bOar-i2J&F9qmue` z-DSs=5;J+>a57H**u64}PA5;(eE`!ju;zY+K9Wb3P|t7BawoX z-sMND;Wu#+ri0>!Na90r0E_;z-NyUk06F|exDAVTRk!f*i0OgeOabRK9#J+#-{TS4 zgZ~Z&8wS|%3Yz#${8)7eV@o&~{mq7VB>iQOP32K8gM!AJ0lnMoViCHgTnaQ*#*q$0 zPc`1{5iF3TQFz(1ODtopSUS^znNzyox)w}^m^()2FA2s0WF0$Ob(%Rn#YMcwI)hlI z1wR2|7EwYX)?oH#;O@b1GpQ5NN9#kB!q#Q+a#IgmA5>84Mnsppl&UV~7y@z$wVI{jl?8+3NmP^VUWZZtw1GyP2-Y}NlSD1#}I&$xVDRw){9jqBPWgl2Q z$nA9(shU)EFhkrkV7khV_?{pP`;4Pb*EOHm0{HELUc;JNrAqvx(sh&glNQUm`Oc_2 zj^N*h>r8F^6(!RJ*B-B1N*Sg^H}j!W0RN%017mniY;xspThdQUKN?WrHH>z)7PNd2^vsU=3D_5w+Df*Ok?MgZf8@S4NbP$7MqBHQe>K{qRYwHGKshAvatlrfWdnRkl?-6$Jil!&ESgsNZCN^=Y3e(lf1yFBATKUMoWV3 z-jSwA`s6kD^Bgmi>YPBJ1J7{906bh~gm^|7JU}^1;;oARZNj8meAU9_w#? z5VJ50M<>_$Lr?&4zij~tr`5j|3Xx-Tdt5|BEVK}6`P*_#K*FMpwe zjM%ptr13RAaZoU?^)1kL_O2uyE9f@jQfw-9f-S^7IPf4nQee7;Y+%Hxj!#?7!f~Qe zL1H=F4kfT9zg52f_XwRIQ8R$_!h=06QQvjHA-eK0%drtIbtAQXd`WJKft{aMIAi=( z5EBK^Vj_zPCf-FdjnM>n@=4TI5Tm1}_Wb^onOrtr=43)~Yr-V4o97ELF(Hx@E z!xen$YpaKD8$-<(*y8bg9_Sv$fUfA>cnCz2{;{_&26+pFH^+u;FRI*swbMU)$RYp} zx&MSONIRQ4%$h>JA~Lx{nnM~%9uTIY&WJI$Y~(F;3+2;glPKK)krj;GdP*_UE|3CD zF^(Z?U&vD>rg=r2vzUrM z7ce%4*WN`imx=({7DvUgm2ZX-X#2vpn` zmW$~ne9VeAIr6`D6-CyGOBseJwqlG0t;Ghn*jk~>e6b*#%Nmi}BEtr8h?|7Xh`5X7 z)$jy$H%qM=;Am)nhg=gdUd7#G#QYVnJUo#m*tJtvq;YzpAZTW8f}}s~q9-KNf+fm| zaV>_TJTi?jd9FjoF|v`|VzJDBS=T0#^3|@KL8SK?M^xmZ#6e{k1$)RQ0Man)zs)zX zLew6udB$+OxMoNi^E5a|Q9bhIWyDUB8V1$JoIh!~ibmHh41D$(8w|Q#lm@0c)E6ea zPVaw6h}}IKClYkzBi_M?grWNw+#ivHe8k6pV-#Bpu$f*<AtAjF@ zygT0d^|trR_1PR}-dYV3nL-{OEMVqB$Ycy_OvqE1qD|8QQ;4gdW@RE5+E)erjO zJ%*ZvVg}hUNTEV0-9pI!A*uYA3I2BrL(7$lzfiWqyD}s9Ch7uyPy<32zT* zV#P~Sqjod(^MW1Mjj5uiz1=1ho?9T>lZ}V@*;`~DY7(%mVdljE;v18RL!Y|@2B4bD z(-MPzNnJ0pY_&Md>d>}kiq#C>Y#2>Zv%a-565(d>mj3KoxewA04s@N`Uz=4k?G+y! zF*5Ab|5*cmLIQ=tAD{Z?;>}nFPj3ZSvS{e7D91@wu1AwU9*a_N~nE2Mv9nJ(dx7%;1KatNlXiy&w|#xre@_Z(Ht@lrYD$lHKIM;lo^ z?Of{{CM>PYi{B>krMexNDNQqLw)Th78|7JBViSR4mY0fy4OG*+jcGE|zi zBG10YJf@pYGfpnqU^PG|Qa@S*c9EBov$MFY3UFU^md#)`Mp^cg*xge&qRwKQ$sLB0 z$dSjWni1#gSPX+e;iN8Fuu{qFWxC2J&JbQ$e9Zxc2@)CX${_ogaJa0;xG>{0{5=(G zf*E|>sU#oK2*qZ}abL0H3Qv`N9~A@3aV8vB&Nn%ND;DGJm(&2BQ2%;4@0-ctIXCSG zR8>dnbgffTQ=}@~ucL29UarD^-JE^4m|WEDF=^7afKPXVhqNaLJ$ zot!9r;}o26POhO&6z6y-R_m%)h_A3%s7V)`yQCJcR&BaW<}u}=>o|MWfinT^kp@e~ z_MJ(g?flm@KzevQB+6UNIjots*Qz2gJ@I!Vw~tVf+^&sIOkVD>j;4?e4qQI6Yc!4; z`A5@nFvmI4J5Ch7aSH4>C*{zBROhU9j!QUTq!J~#F+Thj5VV#Y-pM{E`; z858WxT@O}?*>5HWj90qLNF4=y793ZFqm{NO$7s`Wg&oUHC!{LDnug(xvL#I-<55Oi zF>x`8a|6btar!T408hwuegfbASIQOJ!1RXFwUD{t2voQzt~ROoEjg~PW*pJn*~fC~ zE$9k3@_WdtqS{NF+y~`c2BnGyw%^7xCN7DwPOV8!j=Pd(fKSLjBy`mO6kxf) zNqr7%WlZY45z^|4RAZCHc9We9H)jeJnGw*QN5m77ZiqVr*<*6$XpQUXv>+#HB6A7? z6Ch6IW{J)ABWy6R>|k@6g$kP$S~Y{KnCMB(Vs2Jigfkh{aG|{m8@G}*0B%(FO_144 z0>WmaTm|tBu1~d?ac~lLLvcjVgfop9##6IA(_8r6+aS$kI(>!P%sSIelhWI4dLtK8gCsTJhY* zf6S8W(zXTj-gGhzpt?l1)`Y~%!5-r13!A_Xg7oE0Vs=ZyP}+ScKVx;B==qi(A<4q%f6D=$5P!%h zsfjAykEO7kk`OG?q5qU%=6gxP6#ZC{G^(zi6490_dyu5zE`0@r8tabdSIOVAiKG`I zrl8{KE#vaAU8iVC8MB9KZxaPzn}zG06WTFpBb+!t{UUdSi^Q6xZ=Y2CE>Jay10^d; zC!3lok{7=K>(8h;9&O~ZCuB0Z#o?lik7lwW&Q*IrJ(Iu_cF-)FgQ_IU!OGGMW?|Hd zQ6JYVgQ|R1d`wm_+`cNkXc>S#lpiAb;gCL-as{7DZRZlnjexQOHcq;^UO}mQl&iUgM$5;H$AGS5PLU{hx>VL?g;5?!KkZWcG#KI`by{ZdIk%ahZ#>i!R z@wyu0o+K~^-%H3RB{VXEx06$EW1S^7lV$Cr^w%bqTY4NvF%#m<86%hQ#maPyd%tVM z4t?UKk<*v63T*7LY@{e>S7oOu3PD%M%cG@~bw=bWXH)_S%d%OnRw#Pq$ekwLjEBR&3ZD}^j_Gai~ASvCZCHqgmne}E)n3qxqn{xKAplJ;2e@C zNM9C0I8<)Kni1*xalFI)bHc;#6+#f+q+967!z&~t60u#ij#{P1ThndCH05@d_RYs) zCz@;ir)#_krSb9ZHEAMIB{|Llv*)PH8>-~CIrRBCs+!~CSRlGtay?rXF=({#ClJ^{ zrE2LYZ9J$kvm>j?K{k9~D`jlyL2YWNyt6#KQ9&byKfb^R6{)4-xbmRJ%^Csx2?sU| zOJKdh91IHkhvvh{&24F3Gb_Q-L(*4myr(Wk7x+tGY3Z9($#3dH&0T_05bf9O<&9?9 zC;~4=W0*XVik5w~#yk*Lr)`eBLb6w@X3BC)R0(DDHWV~DY6dT3mnOz`Ee^UEUcNf!GCs%vEiO^y(vc9Uw4)6(YX<|E#LR1x_dKHE{IrQZOU*oT*#bM zvr6Qg;~a4g=G^SNDfjn;QxN*Jw6YD(j>{XS=WXXq6#pqL87)2Wo%(WIcYxfjY#A^^ zbbgD|BEd0K*4iBVJHj=7+m@!EZ%=E3&bC3DK}>%~ccK5+3Uu1E{M3)}JbNa-3=m(A z_(~FEQGr#jrvcOni1`jqrF*aj?%dpdr3`@ zFGxvi((yVNeP|PEL!&QhA}!X?jrpTbqJac2lJbBrfltt}OEr-eZzJVb-t0df0lohRqQTyw zeBJsj-whUBuIGej0iPEtC0HLHNnV${PM7@tEff*os7fKQ> z_P|Pq4$7i*1w#i_p?qd|1W}xAamXSB2Z=`g4bc_AW<5rAz=&T}X6Kx^1Hy#hn8tOAd*P-dDcy7!J!a6&9-z$q~OyaBHf=&1Bn_7(jpG zT_(+5W7@T-BO>|G=Ib^V{yiV*H9lyQ*UxA0enOPXu`=QWwvMuz2k4|XuVUSWXuWw; z4D(KKeN0u=efjxCV^)M|QTHON=2`#~7=vytKuHWZs4lXh2R4y3v@c>BOQWn{QJ}q) z8izFD`z8H{vt`5T8nl;r-`yV2D~#SVH{ZM)U>EUA!r~BEQEGFUyv`{(^i%T)oo01C zr*>>=#kIyvfRNazStOfy3M@+@{YMiwBx0bbz#&DmzMB(&kTjA0Z0s`>?Ve>)Gm^00 z8>GeF&@_%iBZPfIdj%fg1kc2(M(K^p(@iz6gxxpV#+!E|<~w%v&B5XS7~rO?u(Kv| z59p1|-gG%bujqYebiH|XAbID+zNiqLmGbD#;0dx?yjWj$1{Q_=LzMI5nj&{I$S(!H z@iXkNG?ObGU*1fM%wXK zN9+upkhPRSNhB*hJKTx64<~^y9^7S;#EZLxD=iMHjF8(c4pn~5MHUB9wbNY|hi{$nr?uvRPu8*664Wq-gX&ospS&Hm(y+9o`IWbpI^G zPY3Ww^v37U~6y{sn1lbrW6is3a%qPMV znd3h1VtgTNWWE4cqnEC_Oo<--4v*%D9^Pd{b;=w~Ktc3j)5E*v(#na&4mza40YYW^ z64Idt=SJiT%XqUwQO!DG`7}#SWaFKwBEI1R%#+iTQ&kTsLHl`pUC(Z{3R|4dsISrH zDhsX;b_419W1gue*Tl8jUFc+={gP?4U>oqrn%1u0;Y9xXfwgyGpL!?KoH$9n%ZisL zq9v%|&+#X>sQGwyeP2t8Z5F#TkvjrMavk%UP{ro=L%)f)+aaW1FtC(z z`<>4x?JjAC@$}=R)mt>2jLE( zUgh1153%X=5k#<@-q~0h`zG6+h6}+;Tb;8eZVzdYLS1r0Bm+u)@^j9z1X_(;DGTL| zpTmrt>n*}>1FJ_YIO8ltcz1Qr!;s4e>>|GB(ODd|Lvf5u$r8`6mXx;wSQ2?z=dm5h z`!Z(}w-`NTC_wu@G*Icl`!iKif%punOV!22`o`iAG^L!+m=NiTux1H5uM20*00a`= zx&scQgWK%c*a3(D-FNn-YM&Q;esyK){t5!ot?v0dN*D6`wT8HwNk-HxQ;4-%;| zaK?ip>G6d2afaNb=XjXoyidHw>4>}!z}5^q_$qyXGe8gdMfE8KgF|A0ySoQxflFn1 zI1Tee6%bG_vJAi`REniH4SEp`xxn|PCi9YzJD7rrt0R^Lnh*rKyQ7*!;xn&>PWu(y z(;2nJ6%ez-fkZ;IA(WanELWuBtl4La7s#$}MxzA9dnbf_k5-zl9u~k4Ei$mOkxPhn zlG*Rl%{y#5*dJ@%6Izo`+zxz84k2&A&_ok|R$GtII3T)IZP}-3hUpi-A(XfdWpi(p zHpwj28|eWxUCG3t<-Dv(>+z(urd8=mUom{vl!V?N9%f6oEn|D{D!9%r|0c5xXt`@xA<_ahW8Rdoe!$S(IkV z6e+kE$uvIFNJFDBSttK4F^K1=J~@cKMq1OlD<^g2d!*}hdn4RPw!~o^8){7R6`gA3 zN*s}OsJ&ux4qLSyeU471@`{eNFs%_rwmYe2|0EnD)0rhoph3^JFlCWP`(9H_qXwve z6}f@x-9ac&n?W6ve9O)tq|^V#VY@IW9EwCw2ukrm=yM$nzwHzxMPQ0!u4INW6@fb<4@>4j1mI6-Y0Tj05eCJ|l{%H<;!@fNhv zRmm&f>v*Ko_Qr$oQNbZo6L73}TanrDQh{)9oEfk`Kwc*Ikvj2Fm+anZ0*oF*x(gRe z%Ieb}G4J@Tr)O*4Aq1HYc_*W6MngBA4ZrCyf;Yh$Z_g_LeUrN7L|w7(oU7WR%{1IN@SXJR=bl5Ywomc zhebrmTh*ZeqqLi{ZjNG%sbS}ZizmxgQ$^LwkpIyJM)*($cliC3z_3Y^YY$OyCy6U; zjp-$H9Lr?ZFjLYdyhVtS9SWpqfQ)2t3~G1sE%FVu$8)Fb{*g&$+J?w7+iLeh-2I;ia+E47?G#K@H|uobzNCS)V@$VO(bH=j>yX^^GXAMDJ6+HWseNx zLZr@&Mq6y0pW;%9wA#xxoAffKT&`HMZlx=_C~8v1uvD26NLea_937-x@LYcN8ekK; z4f#`5lnsvF#kAc}p5!jW>b2!T^qo zsW93%EJwO@%eNh0P!W&oWSZWX1-N95cURX8&PFD@LC?Z{ceL0k`RO@%`o=SI{Up~g z3`dtviY_y9N2E*`@l!w+CpV0&v*n}+TkxxiO&K@#X zZo8Rd(nf`^sU~!b!^Mgx)cDw;>Zx4=OKi{HV)sBv>i-=LkFLuy2?eGsO<;c$ecD=13U(Jjf%aAU|rUEkxzazGNaPiSN3S*4OG!HMMCZVCn=X zN^;q{D^m)KjiVByb)}py*PoQad2vQjk}~+Fl~A2j4!fisyK;>!n40;E2M0uA);YOy z1(0Cm*It17&}C2c1-!gYbYJQ$%f#)-(;lt;j2~ofH6}lm8gL@(es;5_Me%Pk3YkQ5 z`o^osHyMhblhMd~!-CmG+Ej?UG_=jhuJ#}N?9`EK$$1WA2GO68U=6BCOpP(Pb|kLI zhan0eZN&$y`3KEa2k6oVu8WZX4v^jooGomoIMc5ja*%zWPQ^n9faf*!S~sr`9W0Q) zpK`%{!Loccfb*Jqe44HgDRiGN0JpMd>K_)iDHq)L=uGo4di}z7Ib^?7aL~ z9`L57gSDdSUx*(UQla*kT$FQ7t3f6mFRCzhrg*o#!h<*P7ms+4HB7wl8qebp;ghOZ#a zB8WYSB!qom2z|Pvvg^9DySqj!W!o(-EhIy0(At)$JhZh+ilVjFwV)-e00_w(5e?iy zzyVh~cYl7{=Oz!;$cqdF0Kz~h5*wt2W*~_${29Rv-IBRPsO))PZmFzzyfc?z26*#r zm4s8^3@<0cmvH3}et*kkop&$R?YGy3r)IdAC&i!9uL&SXey2p|Sd_ z!8VKN&^L{5di3&lf~=8xE=_iRpsfnY8d{h)dr+D*)JCIAT>?XZ$FnBHX+PtU`wP3+ zg?fe}Q+;~*3P)MT^@{X%W$6 zp~;oEU$xn;Ey5dhF5ctp9+Jwdy9mpbt5({?kT>8?rdpkP7R+;aag7Wad4#j&rPleQ-ttcd6BHM- z-PKB=qz-P!M|gmovN@_5R2n^H{|1=3?-GAQ)>|Z2B)Xi4k~(weI5*xRA`_#*?sLm< zjTU;yEK)g|yExGz?gP#l?@&83X5=}}$ToaBte|ueYjr?{$5<*){>Kv7BJf^@NzA!v zb5NVpm#Jbbr=^&zSTsgqSdW}(Zvqc7czYn zZGszi`%zOH?1nmXBIT62xz2b&v${acLOMAV^*;qctSC2Hy*aj)98Fi7mcr09SlB_A zI(L*hI9a>n(;x=*#dhlID%P}t?|A+Q3GCu-S7~!4CV#Z#@&pY=CKZ;VNKBv7X`_<` zjwa?v(ncjn2&7sB^gEzh1u9q!e65wK%hMJ_Uo@%E0IbF89GSlvy&r|MTLq-cB$Z;& zujEazW3N1Jp(G$p=q)&~UTm-o{CU2e_tn=Pj02vquw0jP!YYpZ*9obmp!&6L&zlVZ zGC~=jAf`y&DDE8_JAmn)dE4Vbc_Wis1-Yo6H!UxN>hvntZ-CU%`y(YWa?#FyZi=d} zhTNW#F{7zyk`|d-a5O<)OY$Q`6YF%8lT{ZE~yUedlvrN!AtBCO`0(p^GV z;u*Z2ylof_P5m*nIZtvO)s9Ds4_V4qSx49aM@q9?RIQ@A!#rc8jn5f*j;)E-IXay6{#Yx;(TJ#J;C*j;2%=hr1mHf&$o z1a>&QN#0EbqHpU9Pu`z+fGIWMx(#9qW98D@4l|)>*wglBjXPC^N zJ_9vF|C1mZmb2SHl$yUXX7G8fmKN5m3nUY*HXO({`d3Bi1tGnNOWQ(T*SI)BW|Z+;D%*l;lGkxeDL+!3B_>?eQ}?TS z&+%hajX)eV?|G9!R4@=0*18Fqua>10oeX2skQFJVW%MI{gYsfEl=T{=YzX}dHpWKe za@dSNcY(u-z|NZv0U1j6r5rUr+{TOGO(u{WX*|U#kbb22q`29-31AUyNi8HIs%|}e2?Z_K`4;9e&+X+0Gxy~k|^qb z4U%I2B`}V-Zi%sw!6m(py-QLt`!aU`+-YkK&mpcLwmNhASrEC-Y-=ITPozQUo^Nhx zOp#~cduK(DswYx_a*Cmm+DK?oA7Q2<8Pr|Kx!UR}@m6d^MP?K-A#rBerjO%lKg@eb@C8`XF>DzNt_t3+e1>n>{?+I$TT{>L z7$#SG$R(by?|e~J*Vm?jR1#UT`hO@R-iR4T+MvuwLwfGy`GF7W6&gp>;d^OasE=}0 z`$xRLOVvaYh~ZNg zhs8g<{z~}4PKfdXu_k3j=x0kcE6=P*3cXti>=B9lo|b$w;Y>su6HfE+Q?epO_KF`g zEq^bk1z;67aUGSkT2!t$mELEEW-zs9h8im>WXH~`4qj>K8eW^i+Qc^c-Xjui|2FF^ z-65gvLDqIRK5rTz6hggki8C?ghL=3%M}xLC9m^x;rCj8m<6rJvH?dnxjjnc9&O|cm z=`W&UEADs?N%&HY@uuU1pX)K^CWp!JW6B~kb@4@PtO3*!;B%M28mw?3OJYl|d(|-s z9@h{{XeuzL+-M}Si_uO+LN!fBksPuX{LSAdM5;_YDPu>rWf2i8Nx~Mh2ux$`EOU{V z#_?JHBQig&@J5;Ck>m=?i&#CvZFNvJ4pR!}5g13>P)d))JBo%PbwnJA;(PMU6zSEp zs;?3p#W>xxOhEE1UA73ULhW6KNX*0dE93Iql zII!f^abu!o4Ih?O)DZ0jml^)h8p%`m_c-0LOi60uV>`;dryL27mKntHG>s6h+&BQm zapn{>lv9wFICT+HI-7*4k%{X}2)LO82G@=uic-=hhw&*-j<_|FrkJ^Lc?;ppasfOk z0@jAokKB1(G7H{Ltc!8u862GTLwP)pmH(}f2`op_Trc@~bAU56!;i`SL{+G>Y)Xeu!8id7Wb5HZn<6~Mmj6IErjT;vU2hphjA&4i1BpGA0rpE^nI{$W9#?g(+ zZ8_#Vh6#$?2&|*+Dt;re9D!9a9g#$o-{SJGP@x_!r$ zv0Tx0{hB7ij=?-Cv@e__)XFjOqSrCuTuBbIPkmq|*-N1g{hH9Buc^&y(0)|q!H2{m z_Kg~CoQASk;AlV7#q5jFsNrYg!k zm@81Uitouv$D-}$2|Ztp@nS)JVQU&144l?&AdMUN1zhY%i`C*ps}+%%_{f?D$!GH369 zrb79`8PH}ciIFv;)Q!e_)~uu-XiLed(mk%GYBRzg;jr8^3;j%v9~Df+BL6>!B6a5UaHng$MN zGABYNhBaf*nN61$lKM2xWxVq!$5*E+8v|o?KA_qL>exBYe7y*FFpe|a z0K~1rwuu3x;*r6O{T!Y8{3l7&8(qe6WjJ=%x>SC-xA2ME5}e%5p}M{Fdq zD}iPYE4*O`?(Cw*9(GvE9<=(8w$W+%cB9%yAIM3aLVt+12wKV5K%6EiOyIC_@D1bG z9KIhQMx??lL+B#k$73XU$-I3Nbc9Vt`1`!>y@_|ACuecUL3ASIs{{$S=L~sM0R3b% zzcZnnQ&3M3gY5YYHn;axtnP-3n-i< zG3m_4V>*swcHEO^HX`pwtZqJcOIsL8Ks57o8Iq{(n^!~ZFgD$9_zWV;X*P{=5Iw&C zJhp@CV@)_T1JAl6DPo>siXWgD&NPB|nUFpih zza5vMM%l<`LR|1(d&@@ZI7`=>{?u*AirMlBxi;VoqQN`J072R7YKjeDPZc1ld>s#= zzU7NCH3CBqvM-#Akfp4byyau*!WxjAuiFtDD2J+?Z%b$(cA`@DzBr>z=58DfTqH?> zKiWrJ9x>Y&Pf9Pf0)@!mq#JNOlwN3s)E!@V|7`a@b=-KMdFr<*Cujo}6$a*N(OB4d zp#el8j+4g2^e(G%j#{}_ZAfU0<&o5V`yiZEI#5WQk#23O>LU^PY8xmKm)Jwt(#?KC zji8ZGRl1fky|B_LE_G33ec|e}J^4#eVzzYP4YyCtHYEn{VE)|RbU2&94YrHm93VU) zN#X0_GN)|ji;R)Ywf8_JksV%f!HSNmPx+Xe_YwqSLOHOCX{a;mHxhH{ z9%DqNB4-ztyQOlcgXR|=W82XVB?xlWbl??>JjL6T7QG`Z0l<*ZKF+H87_r;CcH_7u z%8^w*aUqLL93UGbUr=)2tm(SB)yLfTnUkO<5~$7UmVHhh;%@%J3j4+FKJLD+&alW) zsGxi;zGjWeZcbY2DM^v%W|tLP>|OoT5g?v1coCt#u?nRLPl?9RaNQlChOSH1pr{Tw z)hHxLM`D+su{gaiC`_@z=GLrT#zcZB;96)i|L3`FpMLKRi?lxjaHh;S$T|OptT#vPgC66&Q za=&&b21D45tC=@c8GhK|+4Q(+qtVa90qSGV|0H9_)ZOtrm2;;J6WKZa3hl6UlvPvm z0BoAANjas;By3WSRC%fnkVOytIqaH(55(M2Us?lu&M%VArO z=|v_mgYA&doHw8jmV}!WT{aP7zwF$GYD+3j@CG|bq)dFtU*5IjX%o{E`uP36dZnn4 z3Y(QB_5}iIc5_yMezjBJ>Lc^}u2BW0*`KqolP95@1b$>Re+;jCsv;fv`;BQ2$jB$Y z{}L?m=&>O|Fb77dN51%KFRkA^5v^FO5{o`X(NN*hh3!H-+F(UTwjDgi4R8ukvp*-s z!{EYyOl6^a%NzY>zeV8jxhg>;LpK6-CG5wnYu_PqQMwk#M0oxmIhuMnJ$!o0C|8=2 z(p`lP+NXa82>Fnum>z+3F7BXv68!Xc(sN%Sykk*Ot^EqIb%mz&5NqT@2$g$7jefI! za3@^W*{3k}C1wMj=IV&LQ8z0_t!18BAJ5lZW=Pl{p=Fk%dzdBXK^kvl3c=)&ns2E{ zELrxAsiDC&deY>nY15e{fGQ?TOtijnY)6xYGZGQm6E~5`kQ+(g;XbrWh2W&i6X~5L z!nQ?@rZQ3Y8O_W$NTkTa=7@zCr# z=Hl^rvZ_?uN*rD&B)qSYh9vC!Ja=zMmp|4zZ>UGHfObVDNOBIP8Q?-ELjtgi8n284 zS=0dy*2ZHsz0MjPHmX?!j66vK6Si+0c*8h04xrcwW8-cd;StaP&XDcCXr;{aKTspl zw3W#s?Pod?*#tNa)j=Ga<7PIv+c=0vrg@|lPuJ7wN^5c%VZ*3xpK4jgwUA?>W&Yd| z%m6YYEGegOi{p(kkenojk%~gIb~RD^M?*+Wh2JL-?VtFBDRmr0B6y3iFej2MBx(`I z&|)ikLZ}$bt3qXsB@>1oc1b2O0Q?Nx=9_#2Z!(Uu#1J6PRSV6f6J_cR6U}cbw7+jM zenCwJM)qun-@Btd4DEzG%W09q(DcjYCqT$&LYnkrg7Ps|3l# zQ4PSGfB}k(t&Apx2n=HIQz;|{a%fj0O31#vG23jze=F7*ocv5J5Qo$?{6fUQ%NHF{ zjmCtW&ZXlJBZR;G7J`t&FY{E+0!@cUoZ@ zTkOV*+H7VrT-5_ixFiFA=ip|_X>u^P3Ba?G(V1{tVj2Z`jFi+L+o6?5ik9xEhj*x} zsO35HiOw!ZwWwzR#-eG>hzJ1`Llz15{oA)@4YvsP%=U;~{4MEg54^Ey_>Ev~+Mi>5 z8+}8$W2+k`9DFYcEy*-L^NU8Lj=-BRFZ=LXzP^E}NAgW5t%)~3&;&xTOZxj^l`!nc z>KMG40pcN@lSWq|su{A1$xH^FP@dcE)~oNIgkb_qcoPiY-Ij*+khf!+YdR`y{aBUK zOloQxBq)EetJNb4!=@@Y`gxex;RlnT9xd_BP04&Eso*&(O;nLyC}9pU>T1)5oQwi> zvg#GP5tKw{eFrmwi=2YB^9FFNMC|jXalGVhT!)TD>`m8^TE888C3jCcAcu#Vq5EC- z5C?OfXYT$#j+pvYm^Vu*2U-Zwe^;3NSZ>K*ME{a8D@p6vqLaBkH!yNox`XZ@6OiNa zoT5N)ixX&SG-H_&RyEAD9R&k6#Egk(Ose9Q2BpR+LS~ZligB5ly^t)QNyJo{n|Ifw zs-c)O0JM^5>VFFArXl-E5!q`oaa9*Ga`3J(@g^oSk^vi&tTAB8P-1gqGBYk1#!2%x z(r4s)$B1eU7x<8b;KlISF%vn)GQ+E>#w1fZPNGpH7+=wcbR0lQOgYtvJ07pnRq3d?M6(Gj{0=P>~P zqtme~a+?1QI9~3;Z&>F=-ugyHY{v$7{9GBt@Qcgi?4MN^H#2xtHR(TrUc0h~8L&t&%dcThB+oeLlYAZ76dBn@hzN+64% z7~z|Qmnd;LcOI(rb#8X7lJq$l3@aizXc#ZbpaCplg(*{VYe|7#oU)M!(%_&;bkHvd zgFwWWgm1=|02mnn8JaMgFax!761RKv-Mp8*VoBB6ObG=NRX7|=iXb?uVsfAc{^Iix zgv&r2=Li1>|Nj!+hI}YVtu$H5wGw8f*qf-*q)2NAz5hr9&eS- zE6tB@`f}YW6z8=R<3FE2z%JSrjvW4dx+1OWJa3OhzX!|MsX)elPBYn4G)c(A-YnBOS{8s9Ee@pv4z^G>W znq)$8-|%m%6|0<|Dm~|(492y-p(K0~Z}WXUsP$QU%mGmhWp!)oss<=eg)x}t8b8Bw zULN6pE^GySM(1BmldsL;I1c@}(ukuHMI~SITQPSMT;}xI8v7NrEswJM6`m=SS4LK- z^qf(Zg(oP0wd4INpxjc7gh%#O%cp4|NMjed^VtUb!28M6#2;$W_5lVs4We3A`EvjY zm7>3WfJLGy4xyO8k^y2`$W`%*Y;$mCop)4){;8mv)_-JCJPnmX?iZRSi#~cOYq%J6 zEx1tFimAP@Zk6BO$4j1{LDm>D^m6%sVs#-%m$PN93}oB@wTg$BDZlFe;OIzArEmL8 zQAJQj@2Sgp+92e>xr*_FM5X0(WMA?jKsk=9Zn4n9H8*$cb}NAn>aoq3C0*eE%K}{y zuZS6yE@(o(E)BQlBlNU>rzULb6M?G5ixZ>J)UD3Ynr}nUw8DGifViMqQa5k~Z|V!B z)JnYxT==5Xp>6VuE{$D?UVQ&5* zFR%gB=M3csa#a1zk2?6^I`E=0{O$+TwO}?zBkMZ7c(}n=x-0!H_ymbO-imf6zjOpu z6;6lf+wcKJaawf0wG;!Y>~_u`{iapmpw|3NusBC2)YZ80agB^>JF6FOqjK|R7;9@K zxyz5~n;7S(D*zVp@e(g~x$(V?2EDsI-q@g4Z%;S~^&{~%jiazzxsA<1R44KFr^7=( z6n{fIHuVE>PQk~iB_dU~#=he=%|vlpeY>I>7}dYqAqw`?g7LSW8(|Q5xB8o4Vse(T z>R+?~Si~$ML`BEpBa7~Oygj#A>aAxZH4>`Tj}tHeb<6NE2HRRKzi}}fRIBX#I^1cs-NtvQQwQ>PRXhi%{tt%Sc9rg1F9+|UQA01g zfd5Dr42z6K$hu?x2G4di@$}iw3h&k(4D<_s{M}YmoS}8N2fnKHw=pXqS7!?k3&Gw( zK7k<_FLHSo5EbHRulhek4uzFd71$f6QR&*Criygx=vInVZ;_4u{ucLCY2V)_(AWj> z+(n}JjmDMAj!m7>L(%`Q6~K$wMHIY{*jtAgiA`q~UD0)XZ~_$2-Vt6aagKy)C1`S2 zX#0RR1k!53--oQe@C4;1ze_i9u}3aHF4CVdMdK<;bU1K_RP?C#O)@dh)}XnH z@q^KaDqq{WzrKn_UDjNo#CI2Y>SBcJp$>LNs05^MgT^XksheA|-F3KsN&{m`{vn^T zWmwSoV`*=Ak4;oC>Zb5`pcZWpXdH$2 z;l8y!rx8Id@hn7R=mC;II6 z;J?#O&dON$m(k(91Nk9*EN&S8$Dl8Ug;xOfo+ep3SE`@&wP>$YVGv|nxwmPu%A~up zGBOU`6Dq?cEOF1!`FA(b%CgEnpfad5xZlY_M!RC~1i9~L-h45)iNduR>`1|SoRSqc~fg0Upc&6$ZWOeOj$`29~*^L?5 zx94ff8YpMU(V?YoaixBS2QT3b3Zp#I!#T@fodqr*55K|?a?{DO z$|&mVKIpaZ>rmQ2D{p}N^b+Z`^$#VTalaYAVhl0TwavJfssN}Z#c%7QTVUZRN6SF< z$JkmZc>9M+V{0v;o+F$^%60GRK!PQzcdVji!2L@jl!%Moj`$a9rUB$Dsjy*)EjBb8 zVYV$kJv2~d!L=<(zI{v6d0=!c=045pLA2y68?J7xnuQD^h} zF*;X(H$mg{S7S$41G^ijjBm8R>H%dk{vju{w2SwD>do#(O50$5(=Z&jx&rn&bUk4^ ztHmm*>A^4uHd?x9(jlm;;jUDdB|C9+roZ_eZ|cPAU9JfW;Z2`$wy-mD`VaUY~4adCh zux$D3D*zVpi+E#6>?B50gBwkJUU%zEr_8-8peyg2j*-jYbyF+)Esx24LPba4S~%=` zLM4Y`T2kgN^*UV`YO&XB2V*V6Y$R1UfDP*se%ad1;Kk}`E9&#PjDPHOakMVCD7@;* z`<_tg5x5qtR+2JQY^$q4krqnMEB2=)`K)$TSqNN<_`wXuOI+<(u<2go=U44!g^h?9 z>UEj`IVJy)k6O_+Y&K!9(FP#*{eiA<{CtcNn7v}}$1Bh9jo*L<1zj1LS6TBTD(85>bkqzG*m6EC65yAL^~+9jnv{DG**(HB2o}s zj1I$VZGQ=ek{v4ZpqFS_)NrU@3ml>lE(RUj5~5JmrK@&p&@@!*-cQ{% zEwEi=?IQH2mCddEGdyBD>MqnjiYeRB?IQH2md#e|8J?1z>Mm4D6{E$m+ePV5E}N}f zGd!d_Y>Ao{woDkq^dp1>G2%v@)6H61Lp2zS5B`!*-kL!5eZ~+{{@S zG)D}uT~zw8$7WU-vz#6`QdTStCnIbZnLgvO(~4%6W%DFu#L|d5VY|)rYLA>&H?u3k zMkz6tU!?3}(}y!Qv_hHXue$Wg%i2BVeh%aQ*rVoiUsOUsMt)k9a(C6&ZU!54RVmF< zb$CLqHW%Rw%$_XE;YpG9iEv$yO6`?Z|Gob-mXuj6!?3ZH4#8~bZ0AXKP)oU)f)`it zW3Ik^u&<^8TEs1)EosYOxZv4StwnR}Y$fD=E22FK!2kO+7@Fe-@b2w%G&VqXkW1E` zHy39%L>1!Zle^{EM3qVqPy8cy|HxgJ%`7D%Qn{9Ex{}Sz^TcEM!=KHx$DF9ld-2vc z=}*=GL=O#Vvn(4e@GA68k$ zpDr@f{8kEN3z&SF6pY}%6%No|kr$WB)6AhWBH|qRS`+qc3 z+V9AC{*y8OK#e7FptXp)iRG>8M@>dX@(ak=)COROKUXmPsZWyEr1n<)U6B~+!z{A% zrWy>J7lMuKkgpk_3VOpUSby(p2`U#0s^$*OjXJAw099SQTP0@ysN7g|+$@e)x8L;(N@B%L2 z=b3eb5@9q?SkHdCW6dbI`u%XexXEZjeAQS`T`Uc#0xN<|_K)~TKh*>!b%bhYFD2x6 zfc~S9ELW2r;1yWz)>Nxiq9P$!ScT;e2Pj1XR(w9r2z4#6T5w(p#_W<5)xaXxmXEAF zTMg0|B$VlL8(l5|f`JiLG_{a&za7{rllZUqlT{;@o6#V;3%af5@!58g^f&(y zGR8Rm)x zZ+t^$t#fdI1%WHavIRhdkZ-u@rPfu$6R<)RhYW>JUwk9q|@p+c6`PrO9}Z z7L6TfWt&bK#1Jld4YQ;{&M%T5bb-~XJtM64;ev=D%Yall+*u+!?h8RGhqX&dO|(S@ z{pi2)+9=pz6+bEPAwi5vMJpG4RhKbc(PsHF7!pbXhJd#ysap7=lZfqrYESq&9U}_6 z+Hm?xuD`I_OiAJx{J)%krmQ!TapW{FL#rtHOeY%Jhuaqg4*8^Gn(QdIyh;`$&~Z$m zBD{gN7}t{vq-AJ#E@-x0DWSB&%Y||{!Pg?Daq%w-Y+}-j^$X`S@z_!A>1reJYxt7Y z0uN-8$!BDZo;(ut5PIuS!26^chdkc;<$m8#`sdIEYFfNP_q7*%X?7bS&xczhxh4%E zU2H;H?#F7c0OQ?@MC`S6e7ZC?`}e3sPjcGE=m7-r3p8~B-6<{=`F;9AVo zCI`0u5(+s0fj1OwA=81n6>bhPSWd%R$|T#Zv4ETt1)E#MJ6bh4Vc0QwA0y=Eh%h4p z>xe#T%L zXGKO1)I7!244Fj-x>$>gM@Cge#+tlFk3nr>Y4jkb+}CK`*fa!fgFZ@X|MAA9mB`N1 zsVtIMdATA)v)$aB56@bl2S2-&6!@+sAmc+<=0nPg%(V`@gBSrD&tu)M^Hal5B2`-N zIbv}%->1`F|Id4q0obo1!g{*b&H|saHc{3gTcVQ!Vdhrs?Pa-WnqWI*8l;MnUen8S z7^S>|dgT&pl=5^OX}?mV5yX;`*ZF2+l%7{kv$lvx2x9a7Dh-cV0QTu>WKP#Vw;XoI zYFr1xb2tUFrgytS@$}d6sfAOb@P!Rs7Y={XXl6g`6p|&ZzrAK6>pP4v2vf}gU4zw;`ubiaAIB0+2iydP}0XQAs$nIc6jYfj65)ktd z>fcYHN63a?2%0b^a$*(I>|vlFZjrFon4;vHbihp}i7B`Gxo z7KjBET#UZXh%Iph1=u&?b|!-nc4)hI5FSG5(kf?=q<`} z&mkRuT^_eQ*s(k_<8e^E9FLWVQS3ZNn1JJ`NS+x^_nbh{b7qC#&@7PMc@J}xio0mK zZ=Apa@Q!SDXw1}#`NRAT$z6mPx;Yb!Q%7MpXo=yN8*^xSZk&080Z@px>dNR8z2q6X*8jmSq` zJRWzD_f8fL+T=uyKoL+5l|SU~Q8|ZO;9lMY{X=GSHpZ5#j~1s^E{{qs&k+}x9M$G? zz((iH4b7RU;qvH4AEaz9=5IU>;@|`j&f`^%&zT*bjuKox>oA7YSUG&Ihj-<$3D6~0 zXb8>niO@xZ2by$YZbFZ3?j%o)A@SCUzV=Ef^EijY6s5%SX$?F?!m!M~!tq**906f= zKz5E3Fv`y?kR6F^z;%(Xg+_$PhR|0``aaoP#|v*N9cnMY9dr zoTTaGnB6qTa&{eb-=Im10!5>CK!@NE?SLqU#7J*%I&J_I(h=N^x(<&eB@7O_OYQa? zDdC#g^0>y_qL?fnn`jIve`k=}AfLx66mJBT-SNu9d4!_wMG50Mc?BFtf%mhmcRY2G zk5I%d6ky9k8*nolWBJ;KV}$IEbvN(;NAA!7B1s3-ICKHE?u>RPk2zOK0mz3t|B%^T z;jw#p(!r+veV**-Q>LmW#X0#TBk?e)llcArZKiPmbMbboEYZ$NETtsRJJD3g z#`_X#ob9WgQo8muK8N(AR6=DZ`Eyta0;2^DhS5i`*83%`9tD!9qsE9mg z=#{2nxR9lBGO}S!j6c@T6RmjSw#{zYYNTX?l=1UjOWJX-~6J>4YKzG3nWgyTKw9 zkbErnESgq>qVLOC&U~iYw2e82DQk89HEm)@I(pTXlG9DTNpDc76hZ1J)7gY6U}U>K ziN+Z5m<-s>pwr06qQFI@QCORRf+rH$TgE*-mukX-#})K_VE9<#q2;lss8}bKshC)i z7{Cd``KM#WvdHRQ0EN+HGXWeyz;Ou8XLB?I)G-YlgJ?swqRkVOC`yR%p8V3`03;9~ z2LMr300000KoS5z0062#+a|VcEmC&{T3x#i+OF>I-CbdI>dK6++ohsV6q2c=wUleE z)>>MNwbl@=&`JOhktrmixI=&gdT-uunfdPI?D;bT_k_i>0z}~91qaN);P+1)6?y1A zAuX~jy-Xyz|L&P+n}4@yp^9WWCbLz>Tbg)J^(V&Nal`TckB+`)HnOjCBbn4uCfth%hsRhCn)l3G2B zfB#R^O~fK8lv1Rjg_tiFRQUI%Wed?sG$)>@o%sf(a+U#=YAWeYdsHp&bNQQ)_!Oi^ zlAU6v#Ak7!O5@f^P#yach9(rDFrdL$9{LB%C=!o^C-kmQiS-X zd5%dzr{MlxPZfT=$-6(@eD*Y5`iO9ox`jJg57l+T8lx#{;4pRvYy?2WyfIno^d!+$ z5W#jz@-)+vT_RONC}}6-1oi>6DQ|pKFuOAZ&LtGQBXI(=_-TsS@lT~mZUj7Kx>-2p zv;`liXPFc9{&S9P)iBHBepUsCp@YdB=QrBun>6JF&$7{!~Gl@{vUQm0UEDALN^r3YxW zXQDJRtA#ROA1dbe8HDdu_|O#pB~g5%&R`&jXh~A(=m@x? z#7#w%x}rIYMOR57u^Qx7ibF;74qY<0$_^8@jIP{4#ciQmPzuW4Il6%d6~uycu@n)? zN`#fL(^A7}CbzuCp7sqh6n$=tvEYD;lbU2>@)8s?BQ*?e z8G0Jx$LOB3g2oz!YK%TcY6|Gq!pFjBhNNSR)#3yZjBQhVu;^nO8Xqu^1 zCZaB+2LAbHFo4)|_3tF5&o}9;KunhnLSF`(M))_Tt0UaZ7Rd%xi~gDcbiT!L(xORY zfixY=@wmZzDl_hk4Ns%e=H_h$b|eQST#uzXqmb>6gdUf`5=wy08=n?PCziA*LQqfy z6w2ZFK}D1*UP=SgESe}*s9I6cK5!t$SPh~)WWw34(a6!yEP<^MzZEZqIv@~<5o_4| zsufh@Fe^WGQ9{fAfxgr8cr>*0qRnv`JS)Cra*#J%;Ih5M8(1z%=qHu(M5DVMfFrD# z434R;;rZSa6!lh$9*4Jx@ZTuW7<3Bfso0uxqz-?pR)=Z@z}UZ%tTU$JHi?D8uM-na z6AYj~9|PzU_3vV-Grt+F6I>P6>v)W=72VSb6kafd)XZPK>kg4;{j>wDHb$&7r?D-K zuWKs7Kp95HYq$C)qFiIw>&aofqa8O$xn{&{Q1AQv5d58hwxBAMtRK<*_7H0X2Zxll zxTUZG1R{y~$f+d*!;__L1Qtb7(OVN+T}|Q8Y0*bAqGaR_*vjFjj@_Yv$x*4c?hsl> zc~;Gz_!Ecik8Jcpl-=>JRv_VSrF9V-_hB)=_UG5_&@>;J6#`I%QBf(Qgh<&LKCSADPV|Q;5M3fRB>f1Bf#D;XcN?$SOx*VZ0S&we_ZDM%hoIi-CHj^;K(Vun6B` zDNUMOE9`)rePeeeOw(>Ov2EKnC$??dwr$(yj&0lCvF&7nJCk>we{j~RkNv4vtzOmL zRTubcaAacTI&-qer<$e^Nz0}u)uvBTJ6PJy2&|j^g@||xob36N@ztQ zlO+8U)+F-~Rb9(#lXLnIyRJFoHP<{fEg_T&&LC-xuShU(V7IO01mi9;CB>1B!c96> zE(Ni!wzo&*!6YtE?tz;^TP@dsJgx!B(Lq^ZoD!K_DixYfA!&H6mx6OKZUEU-uV;3NC{SMHP*N9U_CF7sU z;S7m!7Ddh?7z*?Q&%a~X8ie6 z*lVYXO35DDYL%hfW$T$EmA7-iJsu7i9C`LTVo6{P3JU!dY!)e4RY7tW6UQ=6;6$%e z@3aV8NufoBb>%^KYB>|`n&6YD#QIrc2}4^=X}11{rdE7>4^f1!UD3By?XF(D%{f~Q zmR5_o{)(L$oi7OcuqlCW+h3+S^*Nw|$HwqMhUXwdtz(7dVz^c;sUBP2@RFWEx5Xx4 z^M)O}FsNwH&D=KErZFkuJ8lcJpbGL zbW3^Xc}dY=i-ZS0absybx4T!$=!#u9-l!%ei5=@}Yd52_i3ZsCS-7<&$5O=;S|M%i20*LbHFN`0%6 z$2XxJ>Zam#;+qlDVsbEztGAzw4@hgAagHw--=gn1a08dF^0|e5F>ebuZlf5@<)^suwFiMbha3(wV2p(kSj{>y2B& zp|{scTv1$S1xt0tkhs2M(#u>za<&{vcdI9x4Ih8_vD7)096&smK%ZSYqY|WgTy9~| z(8o-tRa#A+{oa}K}3 z-+F1w&~{avZVABlE_APpkV=TV?W;0*RkIeuQn1ag$2vFm-P#`f4nte2yxphNJ|l`_ zvC?!nE;OZIl1kme8?snVL6+>+lKd89d7L1d_Q8!3Sp;RuI4U$kogz(&!5BzS?%&)^ za7B%|FDV??V#{hm*ur0gv>~;UbN#`ITaSsgc)Z~+oz(GP;&!05a^9I&QRTmdw!N@;@5$TR4$a@3Ooe+7&tFfVpX&DcF(pJlL2aHdeooLE3g_JY@LpGa+>PhNv7%j{u?je ziN%tOYmi-4e@ctR^4bLqCb%Y#8E*p3w4It}exW&^L3oeu+r2VA5#-J#b*@GCf;qV* z2{0fA>s?71WfAl)dE=gJZ9n|cX(yafr>UeD@LTRvv&I}YQv*)db&ijhh{S?%~{ z4V$iY8r~f`RI=?t)yg5PrQh!@nbCVn|pC>VH@HN*C zqM2eB^FB;V)JT@I=uD)jN7M_|1>sUg{d7=I9_?Ia2(gR1sH2VaxhjLMku*|!nlZ1+ zFp-}LF&|5iZ6leW7PsPNL=3MrQc*=dmN7-tRBu&bElv^lK^G}+vNBEJ9a5?8UUhCD z4gohc+?+q<7Pw310L)E`c8-R31F5hzAAVi?$bvO=PN<@)AH6CauNysv75FT9Fy)>* zqq{h`gR_ZWOe@GL`Z+}!)K!$TFI%$j-K^dDO_L(_+I`HG9(ZqzZ{5_oq~F;KZH9ZoH4RPrxPG70^LPMlhYiGlyhqRHq$}OQ|T4`xTiU-g~v;EzqbLq;REp({S zid`MMy8RKjOI#rS?dAImt49!u0^{fdXo9>)c^VFD55aa#k=~L5wfh+g>m;LbfU(lQ zhDp#4HNFH|@>jFhSTiJ8&}@ANf*qZZ7cPmw;Wy7HnlXc(_+A7x-=~)2LhXO# z8_SJL@(VW7-ixEuh5kdDE5N8|B6?_!0_K3;Vp+ESSbt5iZ#c9R1_jZX8H!|!yw-9M zkTazq>2O3wxP7THg=$pl>aLV6)UA+6p$=bMalez zz$Mr*39=_67CTV1UC6&CjAJL$aEb_VN|QAlXFFptp_0DR`^G0@AR)%13t;>6oDWs*yzLG z{iX+)R&eR;qe$HU)Xl!KV|Bwh*CqUGc=gjOb5wQ=&h21cI#25H&YQfDThhn&7b=NH zhT*Salj>fw$)8ysD;#1iaaqqhEpl0iNYuN)3FQ@VO01}P(mWK0lx~Vt z!_-wnr&WnS?c-Wm@lETMUC%eFCW+rLX@>{vX!mP%#%xwSfRIt*lvhTZ4Od# zJ`;-CYVu|xvA@)^^_{yNO*oCi79qYK=5c-jXx=NxyIx1=R4t&m zMGH+0x7rKemQ9TNbvheiBn_unW_CB!kg}qsNYg#K&PD!yrnUTMAD`%n&H2 zvujDh!^MMd3V#X$p0(yos0-&Cls3Gbx78D%dg>DyLR{=O=LDr;N|`UCNQ-!6H%qZk zjR3&oWEE(Mxx%+-C3rz%pa{PXd zkyF&eT72*@xt12drV_WhlT|fvWNU?;4@kMaJUuRoltv!=s+Jl%ZwdOamn1AK6Ip@0 zgef!BIY-n6HxtV{?TV#KQuLA>HZ4Mu=QPq*d$c%$aI*WaEM6YDsGKbs@6)D2@*S^- zTK(@W#`A}+?|;9Bcr(Td2IMwO-G608;D#$V_Wj#?y%kOH%b{k*rU#+BQ_|$ycQpxE zAe0=R(n2#Y=H>@4>m_!}D5=jvC~-_62?P)Iv2O|*z&cF{klpzYo}gE1l#ymszMMM* z8@cMnj`O6HZ@l!S%??tbwx67RE!vIw&sOuP!x2e(A)h<(7?CpMpAJE@)ttDv|Hfh50$46hx(nP6Eb>VSA^1!<0r z5?|cc+n)U-XOySu^=vbZ7v?Ljor+nuR+5fVWPXoHzUsl~s5kB?kSgiAy2TVnz`q+9 z23vS7VuA7AwdeW0g*YfLJ#c)qEhxv{1Kt8|6)iF06w=Vj9{kzT;f%}rD#E8|ky}OL zrfr{vQR*S8=hJI?p=g9tMU3kQbS6pnx@u%Sv$w*!)QM&11zU3IJURRKfxvflJ){tp z>@!$9xa{2N)<&a8NZ$YZRaI zq%V$kVPAJp+EvB#pt}>IE@448MX%%P0 zk%(I3ci)WjR8j|(T!>I& zhu6*w4+34VYGa-`${L`sM$n$ARXT#G-^azz5)ldC2j6ZtE+0Ii#?3@9rt{0Ax=urs zPrsB4j=2x%!wq4R7MBg6EcGdT5r%`8Lnkk`ZFsAqaomfmTU(9$%yi9;B`<}bQR4UB z+|JVZn?F7~>ooq_yr0yh^SBq^;5nJXb>gsC@S(sAaxd+hPufFEh{BDl+^#bQ4Thev zC8MqluUF^dcv%DS6aQ#$aW%3`qs_RunAl6v&;SL!TI6a5mMb_D8)rCC!%LW#sDzynj`5M`w6)MoCI;W6%iMIm;3R^z8{}nu^;5UndzYm%DNGND zX3zo`xbwfPt8B>1At-Lny~__lY!GG}H&U_Hkc#&>BgCV@dp^FPOK$G8t*EJQ*5PoY zi0{FNKcZoJZySGab#>8ch~9qkzf@f#PDKF{r;35qp%i0LWjKh&c#Y2(ps6(Q-dRbQl1>?}m0m5^7^iqZnFEd&Yfs6;`ZO|w|dBYF-d--#zqOoK<_F>CA+=pnjB2^X;+TGS@XU&!R5tKe zgmx;j(Sin!mfl%pk_$oSc*2+^$ubBSF?dY6mGI)7(!+(+nV>Djft)?Ybh)w$KpQs* zu2mf@%}io9bk+WILlTV;twna9wPyR>N@0V_$_c-{k%0#n+VEG12_*NMqrCtA%6gI< zNsV;01Kg?=>s|RPp-;EE8Dm;a!) zRKaGd*-5ii`(bk0w^LSY($xAK*ts|BOtMF+8bb>U{|e>bnVBS!oTPQot2%Hp5=U1S z?Krd4BXG%C9=SPFWi!o3YdsY%5tb6`pt5JCWnV9CceLkXIz)$4oQSloaFwcin6^&Q?(FRv;f8Y z3o(D5D2jLTrcsyKxkr%%a$P_yi^hgvntsyL6ZZw2C}PHZ=^S(N)F1>^yuaujA=(de(J zzXr(s;3vcH#VkWblu4DT{XR!5aK3J{U@kNNSeTMrARVE8=7g7kqe}V|Zd^IPHQJE9 zLP=26nUM>Dy!~&|tDXTOstUqM3IYiNGNJg#|7x>7NC^d&7L?+)Ms4j5J#WVR+;ShC zQU7CSEJ1JW8i3Y{j$Q>0YPMHdfYhh!!*FdKXKhVmj|v8sZX7L)ogtAD1{^jswub{D zCIi=C4@ydcdi%34AGnX&@BfAQ0GYMFcM-*e42}$Hqs3(_EDDB7obnI-xfkEy{r`q6S_SHY_F2UK` zkVB>VvVxpd6Z0ivb$bDc4U3W%TAhJUpqUJzRJT_X3r4XPr$)M{RZH*HFGH#5kesFZ zrgo&c&=A#IYH)4bD{(B%Vd^4=mSrd6HA5**%I08miQTAwmIBA**tkImZzWGhXRzL6 z!%5gDsE(shjrSu_CWKI`U-cm;I#k#{;E+5;PA62>?=AMyu$^(IRK~MOF|56L?W?k$ zajksRMApbkk(^`EsYw1z4jM?wJKcP-{HrBWu6Zd)R#8rn=WZU_mZ)h5E)ZLGBM6jk zXq9R;7?1+obX9@hkcu0zxiZWp|M>+N=)a)0{t7%mLAk{o(}P+_P1&MZ$&h~8EE%_c zjPieTP@RFbs9qn!UNpV1H+As8tckUv! zZCW9|uFwb(*v>d?E9UsYS+98)Vwt0x$ql^}o1?BonftP;00CHEt)JN55h1nL2VE^Y zH<@cWkZHDCI1i&gYMbf@FR)YEI0x7~0%$N!_Ahu_*P5j}SZnN$G|A16&HO)dfb8)0 zb{mkn4}ty2E;e--1|_b7A3O8C6lYX(T#@trind2uNH!Cid&q$g3n^*_!t&Si&1b_E zA&!?Bc3W>A^{iYb*EV!et`=lHZRLksvi!HUM{J&1Z2AS%7Q}V*m;U>0IX#8&?14?8^>fE z^UB{J3%cbvBQ*)~co%2OC;asrs)(X`Dkb?Bibm?36n!zDN588A1&v%Ae>;v3EN8qphL{{&U7@1gj5ft%8Ej- z81J`LMDG^JhjQ+iB^+;l;r=I=+v{!?vGj@>GR)PVuV>ck1myUA@SWohG66E9Ijy)J z8s5*lXc6iiFr&HRajB`(v~Xh_Knw@;r+Ew+(AL=LFkFm{U1>f-33G}#Jqb!Ji z_G+v6!lgL|1Z3x$X@7ly&6WRmfRHh7-2P?fdy)jP`J!=W)-sys)%LJZaQW2TUbjsR zG-T3VL#mv_i=ELnRleWsut(cmU+o7;?Awm&Tyid}9Q_DNkaYIh_ABPL>0D7{`(pV= z0X~O&Q#X>l;uVSrI>r=vy-7m2!Z-h;o#p-Y-8P4~vU;Z)=9v8AKK{~vgs|3J367<8 zugImWgRuG&s|Vq)9|~#e$uecM9@Ws25xNhpc!-D4A73qa-6cFrgtyK}-JyuUEZO65 zm%!6KIiVBI9lLQ}+;q0F`{1zFmN&4*^B0odPI8>u>_VlGg6axtVf!qMbb~9@1H3<{ zCw4%mClyXU*RP^IAN1Ko`ElKr>Y*#Qrg3~K_OLybH792M#^uF54(_DSODXrp#?e3V)KW3j!iES?!DajMK|Uu*@Noh31$Dn> zuX&C~Ilj&Ey4+38ywEw=2F~%MW`Dt@b$mpgdsIBPBRIMoeWBtR`Rcg++RKakwof}s zc&-p*3!O%lrn&Y<*?Y2L(qCy_=0@9|j859)y?!3VXEu%#thKx3(I~EEqn-m@_`T<+ zx~2#w>I>%x&IA>X&CjSM+)tgiGdbYX+O@r}gYI;Yd)3S6v%1&Ey>@Xik}0BkbN({N9Kg(aN6z{sZ1hz#^-TtG{!A3IfFj@Y2q6_Nl|5H8}{q@oOb& zbs@mG$@#4~Z}nQrmIJ{>u9MAk|1+_=AM=%%8?l{-$g6`UZo__0Kcp-UYJJ)d$x2G# z+3#1Jf4#`FO}S0hc||n7cBV<*X^yOZI>*Omg8O{i#6UUc5B*CnZ^pj!f*g55QGnq2x7?o}Q=HtTp8{!rTaUo$GxvS<-m`|<{W>Jb zxk;bzj}ITVJf?29^{eRp7hA%(yCwA99e-^Xwtm$aKmB!dv>7mVm7rq z=GvFg-G$ibUrFw<%R(_TvHyp#76Snx{r`?TAp-r9iP7)R9-mgCutsqBh?QSI|A8AF zlXr$fp7Pv@HaX)Eh?PLsB}6JyTey7krspJu+adLG$$%vnbJ3uqlZn!x=VUeE6Pk6K z-lI1mEjTLVI2L=QNRm8;saApn#Y*fuA}5W!WuGQ=qxMo~jj=1y3wi|QbLs>wV|)6GYKa((;EyW{wwfQH`s_Msev&r zUktVJs-crc-`QP4%GllexQ3ZF4~ma?>`D;Ts1%eaLZ7+SbE`X!^=-OM)naY6=B$4# zO>|<>2@(d*NuNzhV_r7om{4dU30=`!2ir-!u_Jb2V+>43CzRjF3`gW8;RYs?vtuPL zJQwam5BTssF`JD9F+C{m2lc-+MNbytu;S91Oi|$0FAuPxNciCWyQ^~S29k!LFav`g zgR$|0hXx1XIQ2;)t%9woUGMBN0?#~#olIz0x5tl;6B zI-I=V9G0X5o*#Cak(7 zafd4NBy1CD3$ZzK2ljOGH7+>hLGDL0zA%>izyUgIp9UoKeJr=97m`nh0-w&YsHYp} zMQyuvBO*%6OT2!pi#G*L5h24$o&-(i@B zRZ-ATb5SYNNNwIpnno2+u&sIWA`_4a{kh*3JHQxLK4yTP!bq?XavI&3ipo$HZ>4ki zyk6{@ts$jMSAXBga2(P!_EFr_r{I6qO@sR9hh*F(g8^Ba);LK~Z*E{8{!B|}rx~sF zp`ytP=pCj?U;CBz3XwdrwU4p0nYMqbz7#M1y=iE-OJ_5VY<8=wj1Bx%HHOi{qPCT$>GjXb z%}vPr)~e+V!_iJgX@#z@X?3en6U(#&vbOI8FNPFnIl~zvT>HS@kdD?|7Z#_zL{r1& zY>aN8nR?{49xS6|^{f+H3&Xv6T4zXewRsIVq>0W76dV5MUU=AyK0{?=d#34t;-|gT z0e=fTAX!r{K{;1+l=W{Pd`!|lD5tA)TTa*LzLcTUccVye=uVN*)SoJ+YcN|**KGc` zs_j;uUe~=WqoIFELD%4xnI838Hw*yaNPN*6LjaZ~T4+hczN(!IHK`;{(cTV@tL{5* zGh>!4$FkX??|QLC3@sO@`?6RD<`)1LZpY(-J_3nkYY7DAGg~dDt>2Hjj@JcA$+nY< zDRD-U3Hf~DUrbwl<*YgU-VS>RE{TjFgkZ?T@gN`~AWCE)Aci0p4p_gju$oXihs$_m zq+pf|CsXhN9ei_u64V$HZyyv59WCjE0|oTQ@BY)P25OCT6`Qtl<=TNXbr4|-i@GQf zkRj;iKaBD*I~i0%Wx*m*ERNu9FgQ+GM(hro%t)P^YFbQ$MG}*ZguX_Q^rRgEA;@h* zoUCB~VicQJ4bgU2-r#8nurftGFvEXf#4VT)$^6q%0QU}N2SVdj}n zSag~a?$kdKh|cT^U{;=b#hrWoJlCVc96O}mIY{WW+s)~YozoG!ZVD~@+R9Zf6sXZO zqFqOggsiGM2P|#K=e|}Bf^|%M^rO8S2MR7pO0IjLOB8%PKIrFi0f4#i!@j_UK1->) z`c2>5re6O*KSD=*7DjwmEH?5kSHJ(*h`Zel1hw9-P5;~heQ_+ldS>%SH(lHbcrIoQ z7s5Ag!{geJg#?(F#&2_vUV)EsEBE`Mi#1*UVLSb2e{MSY`PIW2nn1+e<%-jEFl6x~ zQ6Maw9cc29#Ig4k2NZmBJ!kV6iKLPYaQ!#r80|1+0~w3; zd`S@CA1hVv(GR82W&Hk&*?kT_B(O6g`VF%?(1q1;vo*dVFaM&t;~j8SnX#jalX$rz zS#0(4y#2U`2*(@Z>yz+tQpSIJ}5N7^G0rX$7I|VOj`z4ws;radJCTw7rR}~SM#{Oq{-_F zl&|0ktO3b*b|*Fhrnfd^49m+uvDi7R?6Mn2<$OB|C~Ozla(*Md^h3#zQq1a3dsBi$ zFo~Xy{47kG2k27E5)gf4f70j;Q1?YQ33+D^Je?k?dcT8%tOYDbApJZs?934XiF&Z$ zPu2e(gwFpc=c0VHXJGxO3*T9oY6zwI`hBq&OyP5$IE-NynMQC(g#F{O&?;~QY#9(} z*L}3KdEoE(hnfQbZ*JDcvV6cx;$lw^A+>C>r`ot^2dVkfuW}oZ^6V>j4kRA{Ooq{zggd(UjFsj)7$4{NxL_$MSruaG(V z&8Dv$R=PFAgmbcV+rZ zRxl~cOaBBVQtxyx^|(!!yrnha0E>(H9zm6LJb^g^H={l64zjo7OZKJvSlz_<7@o1& zh0^)5|6b6M5^9Geh5BR&4^_z%1(#bo(u$(nh_7nBP;*v;aKt?l1sX<@?&q8)V{MTGNkeKsZlP4gjI>_ z)Z02dd)*Q9j3~M&{b-XbAKMotRhce6j1lumZ+6>jH&FxnySVb)!*w~y%UVZ-Umsp3 zw@>|>nuI6to}~wNSb8Qow$DxFvpFTd%2&I>0nRv{hK^M*->sA%5$ZvRwTa;P^!Csd zZ(02>{#UKTtzVk|5j9nF46Y}x7YyPf%Mbd^gsmBS)$6%;c;>TV#(U~9OmS>LV|3m$ zXxVys>h}=#UHvQt9X1KM*Zvt3a*yk=&rpim$=R!nxy@!v2E`X4aaV8IKr0 zVh94gEUtxyPBny;3el7Mi|jkU{~dX)S*tubCnq>`S*Z76`n@HX42oZ7G6f81!v+fdsW;OC;M(>4XF;m=&?H%fv1(HICh18s4&N` zQkMkRCdwg$i z|6%#&Fv6nZj*hkB!Vnr3g+ve3+rF&VlO_Ns+Uf40kNNWE_d;a}q^N?w5D#7X6V!$L ztWAQQ6@y0t9R1BZ=X*x-GMza=T|j{yV$zqkNv#%F)ikPzv>)9us!cwMWWXP> zrE#Pyzt@90TnD9=i@yXchDrmhM1kIfe-4^xq$xP4u)ISIR6m9*{Ca66U&Yiqu2qIf zpQ_MYpHVFjn#XWlJpGc;7-G?X)LMii1OWtLOLzSV#!HPsZT#^cDy#(YJz<`Lz87fwJTv)d~U>fkP)5l33RP|kCDq}QKv&ht{XIWF z(}r+~5nMYW73}6d8l5i*YBmRXL57wPIP_~Jz7>KZxh*&3rdK_szF3v-#9(U>C^P8! z}BYGN7q%uSnt8&%A-N>^7k(@Q{M;?Cv=}Rk9Wa4B}V*aKF2_9<2dE6 zVh9!~g(16EQLw>`>Q@{xWt!l1EF*+^jiX@1cBW3X$$;a?#^{nNEbH<_2+GrcjtCy^ zM!7ZQUh|4Qwti8oln$D$^d|mL31W5{c&j|iN$7=NW>~fc`Hn*RF~K+SpWb;kVw@Yn zSdNm;LR7>g(mAreBibuB!v@@XX6$Ok|J8HyWRFfu-Q_9IB^pnQ3N<#0M4~R}R2H6> zjHpnD8PSio{?dBA#EbnHt9SbWpQ-pQM1jnFr&FepZtf#%OA4P|pEin=QWw(uM+AM%VtUAh~k9j3s|@ zu{@p4yy3JaFK&?~6$U#Ezp(9Ab|jUm)m@p}CGS2B)aNB#F7+n1xpXQmYsFKDfEv^x z5D!f0!g4Hkg2~bWxu-^J7LRdX%HIFUg)S0+fbQ(@EfIoOKeg;ueoF+1wYbp=5$EoJ z(;=a3*!|i`h#eKW`Mc5j7Q8JkNG>PDAlcopwYtW8_Dmy`f-po83(|%)=K`BfrNzq& z(<#;&ATO@Y>kaM43f@!iJ4n^EIJE+1prT}T7QRxDjUFYr7GnNZV#D;u|NQvvuPSl1 zMG55Zy0Q#1;_PATo~-nFGURyLHFUXV?iTbWslL`b2~J5HAMG2edKR9JzqI-*r9k@| zb%ks2HZJ;ESvfC zGutTQ4OS-VZkzA^$CS1u_w`w%?sbjluL6?C_&n3-?RNHN-IQ@mZP#M(y+)9xw57kFKz?(axi9;M!`Xf8i(00}PJ6A!DB4EkoI^3-&sdV$LZ) zDs8czU65lH;Vk z+KVlZfo{FS%;&Lv5sp`=d%UnP#=7WAN=KUuObD71TJvp5WghmE97j&#w?ti3)i;W? zo-J&BjHkGDaS!jm;K1#ukFEXfnZ=8UK9C(0%-n?h8Dxdm>)W+u*U#6TA`R#+!a(^c zp9HsFk9Iuom3_m7BkjHsTn0;@xf&{M=@FX(h@(G<{wE^I_QPr;=zte<@MQ2;N^WUx z8t5o0u>`U7DGXZ|sL?^?$FQ;VOXui;MAE-H+zyYB)fY?wSb6Mu@+hb| ziq2hYm)MY2=ZS<5k6P7RD|%fzLSJOSF%1o&%s1-hA$d}L8`Yo0swh)@l00G{b*O);%tKYW|F_oP1?6wNWb{av)yc0h2=}N#XNIV9g>9j|wO4k+ zhL5U0s+0lujhMe;^OQuq#nqDd zdmCW(%QDx$?MLBH2c8P`ea2MBhOX^16@5;@9eO=jkrU!kFi~QEWJ~0}gA))f-AUd2 zDbu8{!VKCFCjlj8vrw4*F%Rz-gz=|O@sb1?vX+zzll&cS9IHT-J+6LMbEqHrhY1~^ zGD!STzR&6SZRLzzDBh!lO1)g|bNKdk;>)yStuPWl-Tf){AJ{nj5;m%WA+&DfXQ1&~ z*9EpnggzvO2*}EHP(@n~YPHof-a>6|3hc9rCL^c1(Uj}czwTnnPnGq;M0~v-A=&-R zATjK}xugRmoD`FmeU(h?0*H&1VfUZiLQJQ}OT)UyuD$flVqx{9@KOK?HEGRbs;R-f zd*AsB-=Ah|xAE4XTkvQDMG%hzxp=cec3pTOryhktxn!zE0xEG@_J(Bll7i!iU9F-p zte*rYxson+mA^}-SUI_Lf8!pMxcq8FhY98y!K}?9b=lt=SIjXqm^Edhkyb6k@{g)X z-gMNa$F7$}{SX%Dr4v(OxmX{K&mZwCmVk=%-rSV-A1cCX=Us{Cn7NAI0S0U=KNX&w zavxV6T;z|RGgIzl?d*b5&#hgU2@epBBawqa{kL`TllKpMN7mu5<+zDh@{Axo!JsZx z2WYoYe*Kr2DGbn>JMt(`gdDa3aO8hDs4YSpG@fZvo-%lh@0FWkvB}WJS`V~3Dw7R9 z5a@YhD4M=iB~yNnoncb~Xtx|6vyfC{tK>5nn6G*$NhFW+d*y@8@+q4cX6-8}hx6UY zEBDxkwc`i64jMwb5L+ocW`68%U$DCpM2G_sNaBNL3i`QvtyAwbXedIit(eGc+OpjS zbfIy04h2kA>p*#RlbtjY+mN!k^4(pni$~lqPcd2d27H3zJZ`Plc0GPD*>7q>UG&~ z)XTQsqQ+s3^aUg8*a^x@yvQxYJ?auJw`d-mlHt5~yUx_l9~n|a6J!~Do|yYAWi(Bj zCwDe|-!jD>1Z*z}KD7n3cTq109=kfKnb`ul)FsrXo?hKCQk&hRf=5QE?tzUkc0vWe z=-EQUCvz#5JmV9OtR^HyXAewn9P1rVwijk}MDk9Yhh)}gw7DPnHzeg&q3oK?)(0hO zD~~Fe^fr?4q`ug0eZzjk9g})I%Ag=^)vjngxbxL>#^G@}TzjwES=;!I!Z&6D4870X zd_T`-Kb-;Z(xo>-78b=Z)%ysHMWooWb_flZN zc`jw2kW#M3>%1rZM^g_1eP&Gv5npcy#a6PBf=*hC9=WU?NkD62s1oXFY0XJ!s_&Hq zFt!&mQ-`2JE2p{m)Wywv)&=1E5~ou z>BrO>P>pxk3VdK)1~{qGme)4eML&N!NV-?(U0~#CVyE2!())Kh^9p(Q&ix}ucy5

    MaQ;5KaT?cvM6%8$ba|niI}*h z^c|7c&!)rn*1@l7!?>0feXLm6@1p} z#;fwa8ZqGs!}$&wg^QR;*PL2(HWj~aK0^WET#Ij*uoO0)^oF+V$%E988^sp~fFp96 zWa__Y@y4j<&UTEoxGMVUL}p4!%JzZkf2J&jx?Q=PdZ51h*snLrRhLm1${cRD5-Ca9 zD7w9g=RBtGR7P6hTf6e78(^eGO2C|s;V=#DvOLzze=xEocyDBtvF4@9&n=}od~5sg zGYtv%pdaY9|CQCy=Pi1=bk8Uob>o*F2J-7(2OwTw@`Udc zZnM`l6XC^+6f@}T>ipGI)&XhIH4-A5euoZ1+wwKv8PMCkp0#-|769rm z6vRpkoQ@U(ncoa+(HdK$Do{K$wE3>BgcwWet3g+8c!tcSncd8mc1 zGd5TF`tT=52R$sB56ucppZrY<4(*K+R;D#y10bx+My*)xkA~CYI%w}XSL=gYg|r`q zA&TUu1cX!W7ZsSBS`uSXj;{02GV^R;M`UIHp(SC1&TLeH!b3wg6?wzLAOA|-ym`Lc&&YG>q*b|RWn5S#W{ll zhHweyT!EUT8ZrknSI&3qP4^Je<(WRn9Og&+Ru4;$LPmk@|hX=ob~ zE{KZ<;S;ls*7?|W0g8B>`b5=3D?SfF>0&uqTE1?W=}u2Wez+(+*zgQc?V=%Lu1v z`TUKM{0e4{v&CgYIGoPtj5)N>pUsW2pd^6C;UcR3ughG?ymk7{sb5I7(| zvR0MB>texKrzL-?_!DWk<5Z5M3G*K8)13z zXbIxj$BcQjOxLu?FkhOM_likKEPnrMK`m#$el?GS1|l|r7{!a_K^gowi8Z-HgyQRC zesyO}>LwXNJE+(=R}I6nnV4rEEOKujF?kTi)P930eYPpzigNgEi+-Li)>aV8bSWS8 zrc9YfBQt-tL* z?8MgwVfQa@2~=MvIqpmakOk*VOX=KznN*li1vMlo9?9@}KWGJ#taRrrKV9%L>{tR2 zuJmwyM@3%!9oJa!q*sZmaBktt^m6qPy43|1kB+xn`i{E^@uwiBiAzdxWbX#z;kg{k zBmF4uc>Jj3x1vy20H-kmuXG^wuAx4!hD`D4p_pVx7Gs{07mBCZrDT`TM<3*n^(0ry zD`SU2Ak_)+Kp3x%gz68*&>DqlIkZJA$@o`>67@1o*zX|E#P*({_PI94`fGrxyUJmCC=xu| z{g2l{m+W>$fjZBe6@H!wd7_W%c4Y*_CJgSTA~I{>{H!5P$q~ZZDJB0=t08>`WQ+D6 z4`;zdtB27cb*K69XAQ%&RQiYYzUj#v3?j4RFdoAEy?vPCsIm9DpYcggkSfUu`Y2vs zG1Rbu`X82(r;w$SNl8>M{}iV*@*l8hynKTb`MTaJ{Rd=|IpZKETMT_DItd!{nXIC<{;#%jDA!qd>56?6XK}&(9e`~_c>@8DUpVqY@AjU zRYOo?4IOr>;kTe!fnSt)|5pQYMY?Db><2Jmzf!<;nywE}{}0N@KU(GgbS#^uhI;?` zQe8~-7QbEaAL6T?tGE(xyL!FZxa$l!&lKX%GbwitLHMF zZum97x~s10 zs#hFI8A?x06IEPs{Jpul~#POZ#}U1txHb@_z1thmtfNl2SdPN>J+7d->LkT;1uVs zVotcKghpZf(}4W!aomFE@;ZVezsCg=aPrQnK!%O-l%;$;E-SY3l2FABa>%jqIq#1R z2mlZO0Du4p0JJ~8G13727C88M{HD{>%3KqZf{*59RL!l!NvcLRKECP-Y(9`{DVqxD z0-ltAm&1|raHgXHnNQ>YUoG3JGNJ!BXtr&wTRoiCvc6q`Wc8WXd6bRgBqp@_h^-#? z$EXppOT}ADiJ#%;u!=JAX{hEtZB2JhvRKvi@NQ$-d6 zD8sDgxILe`N=d%6NzAO)aEiJo>06K)4m!9lIF@(rVDhYX(o6n4oY{dbAB3 zaS21OqZ#+=Y%v|iBCMsP z+v}P)D<+A0yU5DbRW-o%`LMcj>&czlubbtXEW`7uyi+&FpoO%!OqW)m+a*<`T^?%QW3`l21&gjf z&C5Us_2TTTY5Eclf~>5D?fRW({-ic=*k99Fi~4XvXFdNi#I%K5X=!0~n*9sIgzk^( z%fe}|*McVn@?s;qIml!kHUn}Hx9I!&?N0jwc0JhXr*PHi#S=zaQV;l{8PolCgLHKq zdJl)&E)JE^LcT1D9#zsyiNuE1L#ClzZCrB;^M?9N%>K~SX;+yJ+OOg6+-OugB>EXt zb(|V1Buc?m(RRa-(DdH>;j4q1_&XMq`!%*3{r>%q?GqYW+M(MK*cWeKJ@X8A!UI(NgTq*K?j#HT^8dRGCTx9qR0KG>1}n(JhF$Uduh|NOiAD^Cz+UZrgXmy>@Y^fC2fOrGIN- z7*3e7Zn(e13i?jaNc=u_|{xTD>Zq;G_!gtH-s?8b7JE>GO=JdL|xWg#y&*Ej}a$ z{l1DWa8=debm&1dilDwES-)=e=0;1pEn3InMEndiZ_}!!g-kE76(OxZuF+hIq=Qdr z0+i**(fMuCR;y>B{Xtbm{5AVO(!AiT-Uk@*-Ng zt~np6SDq12k?QoUO=arEFVM*2FM7Hyz0nxiaFu;XD=Tj8TC-*&^0p`7|DbAZX=Wq% zk2j^Hm857VjV)>OR@ED7&JL_Y;)bZKh0)VPT7X>jpRR_Ma=X&fmqArS?;Eg@oocUr zT3tW3D4WN0>(=Y+&W1*gM)u>_>JJS!B2kGbe>h86{{HxGbbnJ_f9% z^3}6F{tds<2W9QV6T>-a3)>9d1lrI{+ZE9%$?G|;mw!SvWm?-yFUwc=)cmXWd2w8( zzFTFmDL*>Z-~ENPvBQpzNU6arp{9kWXr+pPEmF~5Bd;2YSynk**zR<);fH8zsIn+` zN0db)DV^2WI=~H23%aK#$d0xmPhfMPH3nKK*SQT3Q8RMeHjfTU-Yx!m$8K#dy?Nb3 zT5VWuPrDpQiK=l%zmJm4(tb(?#&|E#hSxr0;4iIWS~r--wH0Le$D~*mxljCaiJU|J z!krZ&|6O4(DfxrL2-`9hpJ|{)dPh!4S(F1yZ!mTH_^6;_#rk4cI5g*D-vOL3%(p8P z7+d^y{*%LV(5STDn8`cpliGT%xZ+}^>-Mf3@O51I=}Q$*;Dt_JB3)UuT;+d@?1fd1 z56DPB+*W*ZQTf%Nr`*AyJFc*@JA}+}w)v06qxJPVybeWg>+DWPf{A7pW`3JrLH3K zF~!6E*Pw7Dt-AHWwb#zQrN8P191ZqC%tkS?B;9 z*A~KjVL=_3<4AsQz!b@ZLnjb+2s3RS?C9?ee?}(d&Hg!>%3*Y_lDHIB|D@N$WBZuDq<7oRpa*q*X|OR^jh^9Yus zC~guL-1LOqJfzF8iv4!pJJXqU8DML{uJ+J3=9N3<$0E5gw9Fn|DG)08Lg>&BEln)^ zN(7s&#(;J#dx+22@=69~aU&roHcCC}>-6IJ7kabaA|3Aj6)tQh(JRj7E$ExRPq}-f zRta%M*f72RLDUk2;j~umbrzexDtr65LiLIzt3CMe@r<7q9ZWMpFbs@{3Yy)oPdPtu zt}AK+;oPEi7{L!Q+^!u=9@y;<^W_P5?|CW-6%FPOgD!n#9@|@ZIi3uogNbu9@tIJa z_wZY@;gF<_u9DqZhkD@bMlKx)jrTJ7;*4q82omED=Z7{z#!k)(C3d_oF3zda*777C z#=uSFKXI70;Mjyl{c(*=c;?Q_cXiwf1(Gg1B4HjH9&8hfI>|!G?sMr|UQ6Fqmimol zM`6x5lkqY?+$|U<2gO;AO1|8pTy3Zh-)NE5DRM`C7d z8kb&d)pyWx@hIQL-rGIT&a}0u#1%SdMPs%Kow2iv?P%2N@T+`o@lK%T`6~)StSwX5 z9v&XV?T({jHajLwj-9V=j*_QrY4cbM5eU`qk7A<*2pGCa`{rBB5FL9L16)-FLx5o!R{$TrSo4&4`=dTW z;WGg%J(70>xZ_w`6N1+qV^{&<;$?Mx9h`SNPrgOmW2n3YvA^)UGz7GEX$yxFEB4(d zKFNO|v}bVky5NmI7$CE#JE}-W+PP2Dr`XD|aE(hZG!)?p7kRA|bURifzJuW}uK%xj znGQ_Jyk_q6T6{}B*vl{?`%MrD_onF5`QUECgO`0`SC7xBliazMD;KdAmh5(}Vs3*N(#qd5zJU&)=@WD(+UJh~1oq)*YzNMKR$V~B73hVCKFvM^ z!@OS?8!?lr%(1HB4PppBl&Gf;MDqWDd%!w zZD|}1dN1^V?2zwV=_YtEFEHvdD!f4tgA+k5Kt-?);ut@AUG31cTr;d6FAPHEG0dhJ zpII68xrlJ*`6%dzd;u+Q-n&qB{0JWhg5)H@|CoC9c+5K^dl&C|9u^%P2|Kh46~lLI z38E;%7_avrMiL=Tl7 zWFMwm1Oi-+83}ln-x)(MyaqE=V>SmGW^X0C1Tv}_7FvRu7}5o#Y!|maPLMddwv)+t85S;1tiN)tn-JQ6 zvF|kO9@P|?w{BOzi+$Nnw8oRu7z|2o zn-^hEMozo2^zGpR54r4~5cS*yHWzRoy3 zqv#%P&=NBcOnYg<50^C?UQWq&Q-WR2{DQYenI`4S|B+uIkYsBf#0Rx1SFoWfl0 z?tHkg2g2tU_<6=*En*KCVN86+aqaw>Z>g5r@$LP$Qi2?+o!A>CKvnF)^c3<5B=yO) z+01W~M<}fYuOPVWA{QA2Bcsn#lP@lP>vn)LD2%b_4i?GdZF*5U{ zH=cw1-(DUWIiJ+f=w1Q+FN{XKso4<6EJwlu+Z+HLf<>V)wCG@F%?bsH3W0wI zZ+nnd2552w=yQnq3YubcMYr;W$RF@gqHJtT}wkeXeKC}b&9H=h>cZ-mx-P5e>qivnLtEs^C)^u%ayGlLU;$3C6;D-$7U zR}hus)vM}yGh`FaJ9O*sH%Z)G*4?^d6~Im!$lU{%dO8o4*yAU6&r*KoC`(OwZ04*( zx91sT)MFdElurL=Hd0#_Th*)GU+f$cz6d-an+(o~TheOEDvB%flH&H^#1K`JwjkV~ ze4B}+#*Ver=Et?@ntl|n`*xHYL44|;-uN3j9kTxyM{E!Gt12`29#n#aCUS;sVxn>@ zs$$H~8Nmttj8vz^z(HCZ(9$Y_9!t&@;z+o16XX-SGg%Xzq6s7sQ_G!=;>~Zo>HLnM zA$j|RKM)rSbdO@M%H-|25-CqJE0fD|+;R6FYG!sh#QJ`dpZqPR;r0+*IBE#RCkxgf zHMCM&>WrkTpPa`&kG|CQalY|S;M;Qq@0}7;wBQ!*$@@mCFbcFNuH{5qwB&|zPu+P= z!~=DI>-itxqOm=!2zJkOKN?HUPrObO0pd_{cn{^v9b3mdt*K-OwAbbB=j}_z zmKk{sk?qG^OK#*uUi4~F0!o?)Sy%JkR5$%tSuacbw)Cm+e*zP>K0NVAjg`+m?v6du>tE9~>nkIs}ZkgsG#wZFUp+@fWeyU0=9lVADY`~$6$W`HI4=$n%)Q>WP zjglADN`ey~*aC1NBBE?vg;W8a4s`iJS!BexuQ6VdXiGiIsPb@T_!xv<2>KL^xY8; z)@HH@!^E1J>)km*eaMP-XxW=_E%L@%s^`>3WP#I@3Jsd0)&%LdH&F{y4%tUl57~!S zY2bt)q4AXoB$UB@CgAlfwC$%&lVdL-O8LurKVp|JsKBhB9xD3h*Xkk zL-z@}xfYRZj^cK}9AFFb{6~9acN9VzYyP8bf{A#b%#gNp?p|o4nb!N^$og;1s?||N z>jYFq12x$pReLs8omn69Tk@1})t!C#R%uVKx=N6TusPL|WAXfm-xwj=ah75m^8L7K zMau45Xs-c3YIK(>{BgRhIaC+kqy5>7hl}f^u)7iotz-@&CCeLhYvMUXe^1=@Y5tpA zWmRB&4R%iBRemLt_QE|I4HslW7KJ*3xa+P%rxAC~Iq#En zf2+bLt8=voV09(yx)oSeG>tg35_<5*NikVD6ZXN$Sxv-~M%UV*jUJJrL#HW2LS${h z|Isf`goEz*M^YWd7^Sd*pXK+Jm9)>j$7*JzCH1FfkX&x|JDBFj_5RE zhE%4xIg1VHSyc}#isMB0RuHV$(PqLYn5hcn25urxw1#P8_;#(N{fDX0#nt~*8vJA5 zokhl_MQ6z|F=CtwUu_M1+P^5|C>(-oEKa^N23)_;T#{6QCG1<0-wvi-sT;*ZT3sH? za%6X`_%W7Z2LIH)m58PAbg%Hv(!fm|f^$q%MDX~gPk}IJK3JkAvtjTfjn||qrs2xZ z$_bmt|9IG*??QzYMEycx1e1ya1g&0?b~Ykn-O~9C&qf#NA=Fz7Cs?ximTHL*ffv?L zsV?P8{m|j2I_6r~6Lm5~O_FtOZUAx73E#pUS#*1B(?tlXpkkPim!E^hXGEq?;ts^0_ujJ<_$NL;Pc-=0B0^${e=a^5Q?K+Tl%>(sb z6)P^8yC77Zmfw;tY2~g(J2Ke9nb*k(f_kbQMh8@}5bl@yp{`;|!Jr4lc=zW)2HJM* zjJ8V=CSV0Xz>5V2^H81~swRFdUw+Xa=(y5Ipt)QC6C3hgfU1L`Ftq5G(*p@Db(#3R z%htzdCU(;6sz|w@!tKFXE7Tok#8AE;GcT}3oSR2%L(Nx~-D;D9B-mAYt<>`;e z%fCwxZjcNon=(whETFQQ@Wjh317;q;!6-$yOkM_)s^xQ6VzMrD{g{^zW)BqerGvZ8 z3?h*lI6i9N_Q8*%yW_^gk$70O?EMN+-rOm>)##a|k7DC&-OltaiM0}3-d-Y_J0s@p zei5-qZ+7xzdxtNLRi?^5`QQ#6_f1QG!jF{X0O*gW+M_IH&3%%Ichk+SjC{e4oDnO^9h*(T`bT@<+?lN|JK_7k z*Py}q_@T7XT06nNq8`~aQR8?aN-5sEs3Xgn^$I_W{A2-ma^Y{SP~lia3dV{%$n&GA z#It#ZSHMPPX3xFl3}cr#nYqv63F(Sa#a)zetZ7GxsG zP^_IMrbqH5#|uT9X08i;c*J8i-jT|ljlVzZETLy!BGJ(cEF{p$1gvgIaZE7ntR=3O zagPr_J3ATLc5EGpA~$*2jM4l~`0@eek$tRn`~#9IOmTtVozA?7_JXgv6Iu3~f#oR|5#U@b2BUc?Ymt{yU6 zyd?h8pO@VWJWdIKm6Vs6i011Hq1@jqr4itJ#Q1QWn5Oy53CyF+JP&KnJ^GQw#OSJ3 zo-RRFU!~xJ%TIqMyYprGJ83v%Qv=n}Y+-rl=F+Ut<WmQaQ9J zgyY=j^E=q#;yI`w#wf{?hwLoWC+r1f60qYY37j&AIG6ay8OySSk#o?awxJT$o@TZ% zVFOb^Z!TS{Jy?>sB|;aN`Xdrl+%mX|E2&`YBE<~GLi+96h&Y^Axm|h(y9>#>^b64| zJm!jmkdeG2^Y_~CE~t=KJI|*J2TXF_`F!%`yW$!rnfVgp_a@!$7Qz_Z?NKBQYvOVq?mYm$moj{%^+V6ans{aTo_8V=U-Y15+y8v4 z=ti+!GNOYdjutPQATnjT7;m2G!K`A=9eU-2fB$qB)mdZ>4KRLvgJqhW-TekVjlO~k zX<>v>bfO4X(3{7@BgjZpJl|KN1?lgetPXx2y>UVfd@?l9*M`bf*Dca9^$R+B>xd5r zVhA&pT>t!;rW8j(5U-SaC~%XG>uxn3;*_L%LEY{TCJc;nxx0dgsM`!&{@dcXoW=Y! z#ZxeM7-MBZx*GEv&b}<&f^*{NBx`A7geh#fYw1oz$}5MnD$9im806mU)X=$Zc?sy) zvo%~VHxM06n}kr}5*XGTbaDY0&2$eY>t8E2PjXr?wgcx5#3J>Ajx+{E!c5PQ22O`C zmzL&(Dqt5i%rVS6=uvrPLTJaM`v$tFC>G?1B%h*(|K3u+6qvng@^EE!MLi5K3mehy zP-8k=eXpqcuo@EkiLk@aCl>%+lS*M5|9Op8*}1)!hd2Q&b2hRh7EPEdqU6 zVO?`JX1^)qO5&Dy5XnxIav|17dN7E)owzlA`3~&;?Spc3e)Bis24c~DS7 zRL(x{6aK>N8~4O8eFn%Z47>|th!7X5%$)Er*KzClJ~7oDHfA2-OS0g+mc_JTa7&ud5+IM>%;_U-}9MfE=mtvQH$JAxv zQn@r+7%)9b%t?b`JRrm|bx3qz5FVJHLBn_I2+)EpV39$kNeZY!KCR_?2*DG>Y)_=#v8( z3gv(S3lp}bc+fbb^h=e{aEtrg^hI#$Q>l{!#kY%Kk`#%&Q1Ohp3 zL^Pps?i7_;ZF1}1bT}oLq!2o%v^4c5=1hC0kCXAsbZTmCXzm3U;mJ_hYSTb*I*y5l z&CzF~y+?bq&WAbdTMOM}`oVjMjd`?suG;yVIhGb7q!J90=Eq~0Ar=yHerxZfrgSV? zepgiC4O>#f;?=PJCcB;TGb#%p4t~K!eh7JhKxqcUInW5Y?c9_3a$9Xo!k0>LrH!m~ zYtZo_YWybY$;W1=FJ1;K=p}9gR!@$VH-I(h@B(J&-9gl0YL}Q-M0}*c_m{BmmsP~6 z^Y0OfeyYf*KRID{oeD`y^kF3t_3}e0RR(P~E|ac&RG2NOznz@Q)OXXcBw(Mbz@4Lp%NLz`&R_8xz6PrV0~kbDp-A@52hWUEYn z@CIk=9O(4IaG)mf#Pj;T_wgE%zN(@MfsLkSB*iZ`k~13|VqrhH)~KQ%maogD z%4FC!3clu~{!n*05%X1ide?nQNN=b{qn9B#k%2b$6QrTt5T49K=Sb#@Nt9j!pL35x z074}b68tL($Ra1J;VRw6Og}ImB4SOEFceOB9xP6h^XXlheCsJ z9$!_>b?X_N6xjdu{`aG>YkcByhBi~|9`{5pfSChY6;uJnb{4*eqJHz+hPWQZ?IwKU z=}FY{d8T^K8%Tx~(h`lGM>v*vEUb|y`m|7v$SQJ^KbZeWC?WUPwuJNM{G&rN5fjw2 z*ktu!CE+@TRZtZsV#0f~edt|O&`8AD*{l)n{~5i&i8MrI(}@12r1$kA^#W&92|kt6$y9H1v#?k@%^}6u?Fd|ZZ?6_i>-g$N(iVvu z;$Ha>W60gmo_F&}6~T499iXY2$3yA<-ulO*kxeN%A_v;^Iaw@tQ&y407q%)}r-ZL}A{u=R2{hS;=*sMrT9n#i ze_B~c|CDdmQbZ|viXs5nvh$pgY$l|#i$wl9WxMJ)> z)IWT)ikXZ2utcTDGepYCKO2poXvOk+tZ_Z>#&p^Pv*D>q!Gl8y8g~uQ0?|15IUdqP z^lIM2W=|Y$y%u$Ai$xy@{D{rEzciY3dXBR4un5E|r1z3VRXeUUEWx7^XmZ6hM7toM;}Px<}9 z0*n9>3jja>0000m0Ja3oHnhzO7&2;!rhqXvmDMh2Arh)CtW!~y+^i}|jfz38kVvR< z2&w9!%DPlimAdMnx&;kERFOy-kpSFLA)HJVA)@Nzy&?tBbn?skRn-LmcP zYbd~Q#?RV4bNoKSK!5(ru5Zr}3s3+606;VY1qeW(-LaWN5GdoyGBjn@?Vso|O%g!!yS^OKtD5I+MnFRrM~NOBiakDQLQEGmg0%4jzj`Ljeqivx9( z2$SsF+snv|LvieoM(a9WssLfvA<;m(rPd91h$cKoz89&I>B);3Z^kMfI3pAnq;cFt z@Flnxi;dxLBZ=eY3fw^4$k3$?2u$eD8~mEpJ&NLUH6H08lBhhn^Eg5wlR5yUmB=HO zg3l*J9VPajkpKk@zmj1hSv>SEOJk8v z4m1lt%nzv{zUY#IB7OcRV-)d1A>{C14RPO+_l22J3njiBPKgh1IuBt6D5}Z{3Ne0g zB6 zS$qZ`zuI?w^fl6?W`f!9tE=;@3c!w1j}{ye5s#3H;akFahC)WRscdcFon4c~;GO;1 z2i$2OMR^}dS<@EX9&rFT8?>NnrASkWtG+o9FJ_iq;=xBj2Z%JVtOExXpa8=nVd7jY zxph)bu9R9>A?90lgbLtQI+MLSY`FhQRf;v|hN=`0l@IrI!to=8$ewIYK{U+ec)`YM zaQPa}8popEjDNWvC?x7xdx+{2;R*#rxns%lFt_S%HIePe14Z*$B5b!7p zC8cad{=Ycdd)55E zG(7;+d;;vpgCwR4SRa$D058hW8B2kh$0{e+-c9wUSKFfs2;MYvbiEG2W&@|P0lSi= zD}4$c;Rc2H3)>siI)ywh3W&@q5)wV*#zorv7>Dmc)=7R>Du+gl#&YN%VejMjQ1={` z0};QCNwlPJ+9M57W)XL8xu}tbyA`NCSFohIoUzBiiVkAJhifA@@j) zBmDv%$zWKou|jM`pFf(yA_zacAl|i5#D{8x1zCPA$G%3sj=zrD^SzP)d8f8H3qTX$ zX(5j0pQz8+BSa|OA1kPOCt9b*LL+hfJEvhblRQ=HI2)vINAhhtT4d25F8#@bm?Ipb z8`z0{IU#pF^y21>`?t?lKw@(=ck`;+cCtIvA5fbaY=~Z6?OR#;qBckDmgdbX&VqJ2 zCB4O;=QL2xWo1Ucoa3jYCVX`$zhHmnj<~BvaTmnKgnXMMJS#%_Q@*v|=+uLsKRGdu z2g9r*;XnF)1(dCGXkQ~62l5Z@`HlFi#;zCXA1*>5(1p)0)*EksSxOsdc#(!rpT#yY z_ap4$X4gg;nvnr|)0q7TetK-veRQUzBw%DviQ7h4hi!aIzYQ@rajtY{scDE2m#r@w zVx}@J&n9uhZBAq9CZbE}OtoQ&+tfRzwE0l3Au|*70QRJ^*5DfD%wndW^d1vMw3ssE zr=7os-Mr8&%*_xX$xKh}to2hq)1Xx=Q!u>si1Pe`9uBmE*gwvjJZnU=U*MOBnl9lR z9j=*zcHNQy;YU;I?}iBh4)`qN8`xo1ZG$8l`&u zd*h^Sy5R{=XAz00#9GdsGOk%&~q|^msgQM zzBQw>eNj3-&R?}x4z+Uk`zNWt``KqVY)qKZwmtiJYlJFlB2oSr7*82BZF(g7eO<3j{&us99p7yo0bsh!4e|c7qLwTb=)=~&bO()LfuCw3d^t`d});5P>v#@I%Ph%!$iXQHaCvS z!m`Rq0L`b=P7t5HR}R^N3u2?VS^t%Dec(z32UXGG)MEIa5q6s_30umV=kR2<6*#(I z-e54@$7kDJTFi8}ncOCdd#dnoL|PM%xNX#aUIvO#}8ET zW(+jmJf7I*7>@8fIV`fE6yS}Q7mL|J5%`C##qMKRYiMsFy%>Hr!e*3LrZyE-To}B5 zw7fb#FvsUf1H+TXcy*@M(HjoNG@9DvmrO_g9Ux2_*9$aB>Sm zCdgVfko2p_ho0d@6w}aBtYr4C z5ZVAEI6R!plj#&q@#VwojfQM8;vLE=;S7G5!Mu@^gBqXbP4s})K-bUa4-F0wtK>1{ z0eEzIAn?Q5%Ea(=nMIIQ<_OTEIgks1lQGCf>_k8SZ}G@HFZ5k95CcRYCIAjBfTZ^t z8yTnC|GLw^34!w;$DW0{+Ip4;_vDq3&kV-AuCVRCDj>Z<;t8vc zJ4Fu>_!Yf+y9A|OE1(oGdXleYo}_11tyF?oJqcLsT2w-iJuGFCq^F&URzEt`(|gyx zUH^7@f7|*0{q=qL1s?_(gl|XxR;$HReRzt=-j;t3SCoZtI&X#QSJ%O>1h4rkFsIA_a+~#WFhXgR!3<&$S{oS!h?*bI)zqe&r?k*($6^ajfWQjjtV z!MxVFpR#XO2qmMq1F-r%q_isT(8ynSQKz&>L{w4|J=ID;18fbIGRn{iSg$78!u|t& zW(jZMU8hTM)ZRxgm;cBL(i9)FpT--f3>lVyOfqE(VWHQ_>VO#<_H-DYp|z3{4y~m9 z>j6HfO$k`KSa?-eEA2nmEoCL=R-C>;uUqtM_Z0mfG^N&*PiiG7sl-aUzG#(|mDVY+ zO6z@uJ<>DUR;>PC>l>o0cP%dEep5|++Z3BS^)6dZcf8q!!~9c6{M^1G{_sz`Z?=>~ zN+jq4^HLg$*ruYB9ZbRHKbLjlUq!J?&BTA!R)W7J>#d-jq-59>`WJ~(E!L3O{I9JBtNk;i zs_x5N11nsqQ}~$mcGo>A?-vf@tTW8T6sB8==D{rQDLrEbv`?nsd2R9EGM2x)v$fuo z!OGZ{e>P*Jfp~`X;m?v~<!Cvpsi#uho;1+K$yn|PNe%wtUj>Sa*H386_sQSUm-ZBTj=_Ol^=MOW+7zIC;}F` zRzUef*kdV~BwvzAvwN{Ok4Oq?du=7}b~pZ>6u0_Q(mx3kWh4;* z)*8loDF1LOOhUk^SNsgNl0pgXR$d`*B?`2A_{wlTT&u0lmzn(TB~F8NCJl&{EWf7= zt-blOvyo-=?~MMhu3CC}*Sm5{A6=ISw6<1S|36Ae(FRlV?^L-vndHqH^@K_tv_twk zAB*mxs{3QjbNnQxRLY=+HQZ9I5ED1_{pNNb8f(}N!0rEW?X6&h_?!KJ*sA?dEQf!- zkZ3sc-v~zaL9?XNyARZZuKuTJm7Pzk`h%gZDf^ULd&&UbE$lxob+Gz!XHB2r({6)6&uEH}qR@M4C zUi3dV@D0iSLpSmu*$AJaRs{lFu1U0wKNmvb_L8DLxBa|>iM&IVgg3gruBo2>WYnff z(u1iDq?H)oxqqz*@?tQ(4Ee#p-+pe1SOCgn-rDq>1Ku2g z9O9r6T48uE)3+uAGCGY19O(@wPu$~o?B{r_E&s_hVNz2JJfk6mdZy!MH0vPW|1Py7 zGaqi4aq`bc7eK=ni}?1Q=z&iSYV5Jl`mWz_nv<0sRY zp2O?uw(!OU6oYGg$_S~c`xO0sUeLFnlDd(*sLOsFcK1Z)4ZHA~JbtDc{V2zTws^YQ zhPFZLi~s)wlFc`_f@Kv14`>ZOLLw3v-|nUkY68Q)!eCvnk3uV|nV zu5|hid_aKgtHX>k9SFoZ0;SB?BUd`bcMa#o=D`F96mWpX58!oP76BX|@EZiMuD)%x z&F$^}yhq9?2Diy)u!6t=agb!+rqC6=JetJXbqD!%2f~U9IjVM|+j4-sna!SW0|YG- z(s8;OBU0Mrantx4u|svmUye^4EnOnL^%gdeUXTZZHv{M(z@ivH;E)Fc4nE*Sjf7z>Nsg{acivb* zY^ARc_tbO7|A3}nu;VN~&wbm{k&P#qYs1)QgH@tk*rg$mf*00t@RKJa=K_c?gA1xU zLLqirLOj6OV@`x`I8FKlK2HOV6M%>TAHwOxp09KEDfI^%1QEwSHvc)vM(edSmQ!U3 zW1zSMJ{}03`yoD_pMNx&cJ0XFh@=bPMH%B^Jbh;WjiyG_Sj3q!)d@A?q`G5k>vo%= z;iumDE?;Wt2t(`ei443FbiGGIylHM$-$r5YI-GfmU|27mH&Pw(1F1PxRXa>_{PzTn zwt}cW8?5{RX5M%6IJz4BG^;4ElP5yV9WZTK5@q%&i_Dt|X$LIaZ&+-D%=K&eNY}ruj&cI{0G}F!^zaO2t<$kYizGb+4TcK4a@@(G`_lbHE&_Snf)Q?-K@oBo7Ruci zbocYT7^essJZ1=?BM{qm9KhJ)I3rF$@*hHmF@cigit`v-Uz(fby zh`cvS<1IfN9>E7iP7qMu5a@u&@r~Y=!i<59wLgA~0BJy$zb^QJ++rcfThq?KMnaG) zx>Hn=jN{Xj$H>lljFT< zG<%>;)Xhe-Fah{Dj<8gyq?WH*VV^>P>WtQYNENH{!-M%>@;qcBGs1%iq$^SD^VfJo z0Y4G7G*I&n+K^uNbN$nZD637>TmA;}+uV3!8F@&|O%z7t^}YVX5RwA}(NPtsM-1k} zUz^AFw#*ynn3Zmxd4J|3PMQL$lgJ=0daCsGLz6H9N;GpolJCqqC@9Ci;%qNMScYw zVD+csS$lbe$T9c|ZiSg;=8{x^02Xx+OwnaXvsjBDLQJHkIiM|yK191l$qDBZA$&XL zxKdL@LiMTm0`KH37yHvP5wt`e;zSidNcAHfZljZh{8XLW#b`c%QkUu}XNxbSqDdml zvCCTdpUz77(P#=UxSNOh68YeBU~0iukflw9@ZAK5YNxha0akaEWPfWrY{;Vt9sI@=*<^zuBqWks1OGSqQgT!30v0(x&kMZrg+StxBOP6ljf1)p)gPSL$}8oByqvQCQP3N7~fHH+FwZqeW2616A^( zEUV>xOCHb+pSiNp_`BYD#nV0ad|NB*I|b}2r)yGF&%%KlQtDU5bpzVUIhYi5RS<-~K|1Gk0=$yPk@t6VC{~yf3$tv>a=L$lt+m>5Q)NBCW|IL387{5WbMF2Im%cML&WH9AC@>w|mBLol_f&&8Hb^%tCI~?5r|1h)L zVsu+fiNemEaXFx$3S6qK%?Sq4Y+z$z5#d4WOu^s)r7YunmcTK*I7x8^qNp1rIBDNh|BzBiQR+e5p{M7yek*WkOhGQY^rx7x>FlM z&U3EswO$q!nc=sQ(~aTHnU<52od#&DUfRtD3QmcAeKxB#obfprjHHACd3kxfSgIHZ z=IH(0`AJ^t1{?3@S$vq~#AW;pd2;z>9?pQQ$b?;!xlsC*Q=DSVL*T7=y zkpcMv@ZJpGA3#5u!tKPK511}M!>4P$59VH$c4dyxhg;vi@0*nGkduLi1pup#;X84_ z{0kD6w779USFb}>Pi1VF=L+Re{WC4%^=nn4?qbtNx009Ryut7PBSsOQb z&`|Vmg?Jh z8=fo-hQ&koyUQHo-H141axgRfaw5~%?Nsm90HPmpkvAH3A-L1Ao%Xs@atA69Te zwgM61fKLVNSyk3Ier}8oXmY;>+D~1ZZKNdP19{d+V^nrX#|dkFcpux|-GzW#1N6>H zAs08arX3U;wvS#BKNx}e8*m+`7$k+&eF!^#9euky!o_fa$XmKU{djgJ8&2cnhgRnS zmH0wS4-F04nv29;%S{B{-TD8BL9(%|^~W}1S>i|LS~?^W@Pt`!0AIS`gZ&#w9;q{8 z-5&gdH$HeR=X4$G)ap z4-v`w#g)L|NYL42ju)Mj8o94P&s@rSP zW+XN&cvzVK(ZuI$j{QO!qsq*9H^t%H*a_bF1A%^HJDvKti!$u^ko}e)Sx?@1xa8MY_xZL!gU4ngjLEbvBS z{2wH`t6dj@RfNK>^*!EMQ%6x?0rv!&>-b>@DUkH3N&Ws2=rK+c8j0@1VR_hUi13?M zvvec)1s~bke&l9CI^GDH9}WoC$FTb@TSOU z{sB`)?a;$`J1zJDl1&;y{$|!ADRs37@*P&IP@YjvdVZx&YRIBPS=c=$TT72r?XhkL zvhpR)bzn@QTT!M@RF-Q$x(=2LEJ& zk?UdkWff`9!>JM2HFy7pCe@T<*F-Z3hKH=P6cfSInVRAEzr0;&;pVsbdCV_AGk62a z?cJ*D4FMnET;1$GI-_P>Nxr_fCT(%e>5p?%n@pG(+tEhBMr=o{O)-e%CQkF?fFl@f zpYsnktPzRg@byQ?0QS#1PkVku?Nkmu#*?nX^?b<^}S?wNEzj(K&E5h$lSudM92 z8iF`tfoJviJc;4%UP)tWYpQ45hoCV5?DT-1?4WEtx&H+;q(bL~aSQ*kh+PI57Da3G zf=kFl4zQ7$i#OfSxU37GnE4$WaGOirs*&L2IXBMh4-q|pY`~4vT4{?~gmXHL%XVMn z_Tuy|$JG2v!w$K5yP}8Gx8@!%glsbd+|GThAo|VyoO0%T4l(8o@ou--Xf$~D^KRf{ z_SHEq`+H6<8~?;RXho&4$omZYsx`$pEbjl@%*#L`xc&ItW;yb1Vein(Um#aYSSubK zLe`y1(-s$IZGtMnOK=y78jp!KKk^aO@6@lLi=(}>EuZ52@68<*Nky|pyPSOPek{WQ z@wlv;%@KaFjtsaY55sDB_o)~1ugHTLrKTZbk32LMZjG2?P2=5Ads72;y`+kKf|z$* z%@dV$E$@76EoOLg!Oq`DEiw&n%x7EMxvxxC4Izuzdc@EjLDwBGyVtDE&r838Tm|s5 zsi+YyHJ--htDoe+(YC)eThq_QiCu#>xVYQfw7jxWHysB$E_)w>#iOd>7M_KJs%YVm z?YA~>CTi!ldgb{Mx2ChEa>kao1vr^oI-@{BRI?kaA(1RR9;B+L6wIiHs>H?v=-u}a z$h^9X6fDyHJ0|}2l1*g{#>GF3t9I3!wNBJNi6Th)+`+J7e>yxmcGDM4Ac>uGZynt% z*bk=P*yt+PJ+KFd#-g0zEL+QGdiU%(?t>r8Um|+pmnlJuC38l2KEx2E#MYqUwPT)a z*f1?In+9wmjOJGP?Q>aTJpXglW`1VToFAHsSE-`VFlyZKHDAwzdhfE}0pT3qbx@DY;KkoiV+NfQ8;O*4`1o~B zaR5Bhdmvly8smjA$d4fYPZ_Wb-kQ^OY!G4WahZq}08-OApgEPW*T5HZH5dQIrpx)~y%^r%) zH9DLh!o7PneyJzdCka5*X3+u;n)<|NW>Qo^{{UYRZ~;qXE~8%xv#7!>f37|e6KWfRs2)3w-+wVfqLD!*+Z$*PZAv5R zYK>>&`Zpn`kfHtkt-Tv##4<f@?@xuJqi`AX3amsbKJ`on7J);&KP*5>eHOAb@lN{^_T?Gy_reNI*hlNGzjnm z{@SeFT=SAipA}DgkBOUHOvLC@heJafPR2LGg`_e+;j>zw9naC|6gY>jEAZ;f>ZSSEf( zu@$VDwsx3d8pkKBxGX`7I`cL2N&8oRxNBmD6&sOfIctUSTX@S!h(e416u@$SBw0Xk zy~c~U9xme!!O^ZP9C12G267R}P{gbPBttC+n8B-b$1)&~*K=0M5r-5o&1pKY6Y(xM zZYSXy_{JJWTk)_5ulh^k(>l`qYt>Jo8QQdCf zV|fg*WaA;uvpX&;K-vmuluzdu81vCO$_6d+S;B|wy-H_Jte^%ZLX$7wKhF>CAU;fQ zcjA37h(N#4N9~V)vZO?4mQY~uKd0JkfrPB8=H8pqI~RZFDu!SpD!jonN_hyn7@Oxi zsEB&{nP1nXLxc5h1`-7HSL1UnHATshx1~~7528x*=AF7;4kuK=%B!A_8U%DadcRRn z!ha^|N^yWQZdd!gm3$$3Rwts#77*1TXA5XQ{51)|Ge=B9;3A0ZvP#B+D=4y{ZzI@* zODbetQs;w(gyO^FW`evq;mPl_W<$m~2o8LCckHbw7(|40iz)e`sCKyATlljApO!Vf)%a7d3LU|IHPcE>Zk#)o85ob|8ul>}I&EB&(debDtp*WAK|e z2e1GFqdZ9=d`J8a`sDr3MSyU3Y#;0@DusiNzC>j#r6P=HpD5f}OepRH36!?-Ksr*s> zmbpWfSr(m%J67pPgmxeg3p7mv5hKyu{bWmo0ka;wqAGEXNP{d7a9jjv5F?yh+OYFw z*HHk&8-7?oQViVcNe9N0Wy^}h6_5Q4&r0*|XsnC9z|U5j&vQ|~^v_W2H%{y3>h6J%Db_8v z*PR+UPd?ZYyT_nD);Hodg%xM3fAeGn@@>)b*O0BNjrz=`m*qD!8=YO}^sd}H7{k8p z{x>r3LqsQREIgahTUgY%%qLr(Zv<4((2s!av~+2S!!KwF&K-$zM94^8;^qY57x)5n zV*ty5s8QOG4klYf1ViPu9HavfY^NIIFo*(MP z^8>=F^e#*Mu>Wfc@PvRWq37g{Ug`1$~80jo~7367nfMm^ z`3qW^0#^@rS@cdP=>>(?RQ*YYJ7}HsqBpi4El{IDJd=jG7of6my%G(Wl@KV+5=*YV z7!BW|oZ&B7|6Ne<|1{pi{}ia?EY37o(XjNr!`UQ7X0PcP-78q2U&#f%m5@OEBx(K5 z(*Rvb2G$ga0x4IuFflIZOuw#wpBAXau4Gbmu7rYFEm)(W!IBGmD=ARk#Av>*jD^FM zVc~Km+dD?GE@1FZmR`90uRnJBJzz5l7`tR?uFkr?eI+#5Lz;pS%k1!%`$VKBbjVsOkY}1+kTo@aDNAxLx9k$DJhK$7{gr5-UcrRI-I+8fXR=_O zglV>~j)wJ0H0)PGq3|iBOyA4}7nhQt{kU5yxq#^h#LBVC7x3YVl(*zPjp`~Z&%8w| zF5rLmiAC;RSUujAH1y#w@?8twCJmaX7ogs-N!Z9~dSkcIdwSFdy?7Dq|w>zzzPcqWLwGTx2-QYufsooh>gxDqJY?@AVO zR}#>>60wE55e--+uM0&#UCESvtR!bBm88koH_)<+(i;}@cqfm>RezZh9XLUi2a`` z%-_oOe@$KS+>H-C|JY9ugvABOFNk5`awX^+E3t69L(w@tC-#0N#h;|9v6XrT`AYPV zhDrjg5cv46p&`8z4T+T`uJi^mGOI(l5!g zcfe~d!|UbZC{lU9;)6xmy~Szz#$nHY$^@lZc%pj+&p;@N8QyNtrop(9Pwpt}5IW11 zf(8#AVz+8aKLeyB@=v)|{ik@yVeH=`ypMaLQRDkb^peofP>EF;R^pV!ZY3zW-%2TC zsrE)gaU~_VT!{^FPz|u$5|1TRNltgrJcV8FQxfSfzsgH*FS7i+@^P(% zjfo`*xL5hKiz0L~trC>vgYP9e0&@Wx&MRW!t|T)|R?74%_4_;gJBxRa( z+wYLM2@5ABPu`K~bSo@QNxVo(glFiLLc?t(pPU=i2&`;ZVL`ABTOkFwCwap(m30!J z-?!-cyp^X1f-9HaT|C9-$G(LH{2oM)nv%{iTZx6#l6b(niO;qvEDs`0ANm=rb#ig# zN@9u8ll$rPT1l*|PN`P5Np!?c$umD&E2oufTa`WTRx(oVD~Y=RD+J$n5?$cCiiYM& zEHJJleLcls-*fS(X*$+9tnjWkU5WOJm3TbC`@efc((*siIQrEZ%OmLj+xQEZ%l{}M z49#%BU+brKfIIZ!S5n+Hf?DQEG~`MGmv;${kc~G{P@}E`;vi{9m`hMz{Ip3X^;Flj=udIFDp+Gtz^Q zARhE?h;cSwB7b3Tja9^Z9R7^Q)Oxu5&j35+u4c(alNCiEzQLcvb}{qPlgP{xf;NX5 z?v@C2BBN-xF}t_jr(IN3Hbj9wGR!R$ww+kFQ+ z(*+uwKG5A`)&|2(YnGuN0S0-Kmgn& zuod%tE@U@Cx?>xIBveLg#x$bgFPNSo=8l2Lri-EtR(?C=yEG*sFpZZyzds>yHdfo@ zBuuliM|x#Mt<}mnc0y0C2>_6TjU6KSiJdm*3v})B+gOPsZH02x;zHHdo^9+#mXh|9 z?UK1hG|{-a!mEs%o1L|d=c%3_V-yv>v!3%>;T#Sxs@VnPXCv!AmnYcHxoD%=za#C| z@&|>ey|%Gx*6Zf(+x3lXf-B2LKQoV~@4#fmiPJOcJ91A0Rb7z9$78qU{iwGVb|MxY zH($trKiY6pyHp&=<>sBHhCykUXEQdRmw&P1XRjtp5ygDYe$G}p;g@z^I6fkg4H2wZX5|d{7vp#v}3}2!d)WCr+Nz{pDC>uyHmDyi@ zD+1M9uea=tpHdPmvtQ1MCcKE6MS_w+5x$FrN3}BdQ#Y~h$+eIktn;R2f=2agD7nBV z&E+Rk85HNM5~8rD0vaBZX6OmO+TOcGJECd@yKTGeMD1QPb4S+YM4nl@T_^$ayp|RE z-Tr!a8`{=;mfUZL(SGRnXkCA&ARrtL(@b0ZzX5|V7Q4yxa?66z`Dr|aB0rc1 zLv}=G;02NnnCtD%XUS)joTZ>JjyxVDsVE9mdMgAP{dnKEn$XLVx)R1fOcyuaMEM;H zrQd_`#;+)VmLC@kX#$I^@@+mheb&dUzRc|bttRIH1>=K&hH?KCERulAd}=g|4U!rp zaHb__Q1jIsDJb~71(PiY{z+S3BB7>>jbpzA+r(hNz}&=0$c-Qm1swCyh!zEw%}e9u zGYY!r3RIbt139H?7|hfLiV*y{!=?Te*FpDkIfd;mX~3N~2QFJ>fe}@6V}oK#Tl-rx zt`&wDar{}ug;+&=q742uK2y0!&;SDr#0`Mm4sgVPLL-m|1|Ux@L0QTQ82^*Pml_3T z9zYsETS47`9NEWc4yV~5ji_T{ zHH#Y;XdXLl%z(Bd*~NTh=`u!e$TSbSmT2{M8zHECqcKWxs!tenQTl^#($+VA=8r}0 zZ~yLxCHL?%NVOt*JLCX6?VpmQpl-(&W0PZ^EIxWnuU`|EZ z@=MzlSdRJ*w3&CPfQ|}Dyq3aQHWZTjLkxtj#a1f(yCvSD};I}5EMka#in z4ph+lAZ%z{;sWOxW_8{^YWX3~6tQ8CZ;YZ)pbgMp#^LJiZTp?eb0`sb81hn-s88K5 zZetQ1F&q-_^(nWieRb}hyQz3A#`(W<5&6Ws8fP-?FgAf`j}mP<0pFv3(;V%tc45U3 z^czNbPG~Xr`9N(+8sxqAS%y`&Uq0^5|0+wm7_Ubx*L5LXJmg)2R)xeyhRby|;Li*s z9Zh)Ftmj(j`oyLhZAo}(Rv4zn&BNxFCbtW>zGH@1_O%bQf01Y*IJ2JC8D7QBKgPwl zEov)yOFz_vptJ6|d>zdQ=32hF0TFDkJL?3W%rC+F5T7`4O_&LyZ^u5vA+Z-b%jYn( zQJV!plCLmmLzp)f1QQH4+PI?zQMn8zl`4l~j1$g_X=vJfCb~S4P)q?DA;8o|N1(;d zr7v0jnOjB`%ZvWzKq5v38F1*Ku*O>`HVw8x^EZvm+2)uH*FF+5(o~4gg0NUd_;IeD zopLa~oX&~@NxhMC*)(G)qe68Y=FFc`u- zsBU-(5ReuI>qB#D6`Q^)Y>w!<&kvk|SrSKY*FknP_O3?JdDbLbIO4b3bmXuzOagV` z$rLURz$g?HFsi-o>+KP&cCcW@_RaOyA!+-qXO}WJE_RRxNpxCzXO7k7{xyp=c;>81 z^L*g)8o*IOH&cBCIy9gyhuUl@e&lV7Q8Q0g%$`sKurUO)9^g?R`#$QqZ~!_Tt6$6m z?=HN>hE}i6SjYl&v+OBQFS0^; z$!Ek~Q^`%5rl0N!%BR@lU+EAy17vq9BSO{Y-2t+rbfYZa&F&@_U;_CHZ???=6!g-z zxRWXbZpycSD5^h<#25r7M?MWO-w3uJcR{r~mt*+a+afhJLOPnh(t zV1gZRxZdmAqoy6I3=EN9BM=cAkhM&r-}KfE#%5|OI>Ez62Uu4{m@*riR9LkfvP+g< z4Rfe2qJAkT$7noK?jDT9cYxNQB9Mt^>D@TNWNBeGSfOo`yoe;LZv#WK&(uBhVS#ey zoU{Q&7odllEmzL8&0)YIpN#=p8^)fXs= zYNOVdi#g+A29|9T9r>96LzmFDqc^FN=yM4?zaY1de4nw=xR?(QcfZidZVh&%<$| z2!oF?*^#wjA8$kgx=S7y5CPE-py>j~5G2`XYgE0J<^!_afn*d`<)K*h8w3!6BMcTp z0#>PVE}6e&j+mN*9CXFX2~qJaO_{9q1CfFMP$s-dHTZOBlh|f!7wKRRxi5 zK-n93c}SNo8Qs8?Hu!s~B4{@tnS0_B4~>w0>9Fw+guB?zb3i3!HB&Dxv0&kW;V<^A zv&uqLKuu371`R@T7`D)T@LzbbhyDglaqueE!oQnqmUi7oy=&$16xoUDJtG%gQx9Iw zEQ{wik<)5JH8I;IU0?8u`lwr{X-sVRg{8f59Ntg%uptj0%$V65JuMCQ4(+^sX)f8o zU9k^$Eo{i5zAtg0@c3@IM|hw4ojC&@qr&WW4OfOPCG>#GqV=O-x1Xs4Zh+2l+`wK@ z7irg19hreovHqcCd*6ocnbmz|#niq;DdA1nf;Vctv!QpjZvs;4_-yPZToev*hwPQ{ zH{a`_6mU;E*Ie1#n>@31u3i7lW3d0M|6cglCZ1ao$LZ)3O>OS92esMDMT%)mTC-ATqDT2(P2j;t7uKm+7km2bB!$ig(O z1!MgfaDtVFJOXTTaXLCEj6C?_`Im`g^~lImK=PPE_LcjpqAcJ7^yrK;imcQDKu#TI z7#x!tSOLx8WQskovI7+JW z5`lOMLQ1;%n)#QpbR!FF$9ng?Ia?(YF;5ZiPo!XN3m|^;H*Km=IhSDhtDd)upz5aA z;U`OED?@E$N+Y$r^gdJD)4T{0I0aSk4mD9R0jy?*ogoy z1AQwfL*C_RVA~wmJ(qUD#z7dV7a6FrJV8(%93kEuH+|#4x-AGPlh`?#G%dd@_ z$vNJJ+^vW}^Jl%1)}t`yk+0%>l!I?sKdbC6X#g$*3qk8;QqFVe_Ua(jU*rj8P!|tR zdufp>;Ne&#DVf9KNUJvbW1tj)B?qoFGXW>9F!6V;O#;01&kfYZ}WvWeB^5|UB95KUmg`V+q586r_6MH zyS4JBTy>N+120ZrFnm4c2fT;lDw$&Xe2Hs+N=`7hQg6Z}kBA3mMqZ)a2GuY^L#Dpi z7qvP>jk~1*ays<$T`CrocLx_#uh?M@ft)rjyWolY-e15`aGJ->x+Q2Bt=xdv~OU%E~w*L{&b=TW*KOSzEm37JxmH6k)jk3o0k*O?(#!3 zE|Wj&U`3LMc`QLIhEenfzEw|KFJ3ViET-#VMSlV=0qZv(HLD~Q@YRWN_H>&jy*V}6 zmpH*OLDeVJVtTM~Dmvj*$J%2zncudqGakTqB)Wg@LLm0Vx*8v+u#yPtEI1vfE(aj{ zHykXevX>30T6N{vv;^Z8wHCu3aDx8yt|ePskwJD!df>|iaD%o_^#mYcK~HOG1K|*V zov4pFz?YeJ<8AN{_oz{eY(kPWerH)=W#@i+!IG}@3DJ**>&oJ6UiU#l= zgC&RHPJUJnZ&ei(yx=PYAi0vTK3D1)w@RlArIovqA0AA`+;bMsC=Hb|LK)Ud31wX= z=nR&U&mde04QrJE=FXB(uea~yQr2bg@qPJn=tCbpFR`?|usXaR7-W~4{|f9pS8#c8;L8r&rT z3`dpt2<(YijVpov&wC|=3<#3w;+f%o5d6176%3W+mpRJU$<(4tkj^D*Yg+NC3Nb-qO|IU5WKYNi+*uN$|)h68y4C&&q10 zveGN1MgJ>_4`WRCzjhQ|=UaNwbKl?X*Y1}mv2at8PX-(82zT*T{iILKGB6OCCD43x zidv;mTT<0p|Dzqu61J{ZtH#Xu7+YxfkaTB!j~qiyzqby5kz!(QUq8A=P3 zWoW`1%N0M-R1qQB<4GiX$CZEvJCSlvbn;5VC2J`O^|DuDej_oo|6GRl-jhl!A4ZZy zaI}NZhS4j5O4NP&(Pxune+rXg2CNzWP)BctPYxUGg7M!KG$>ax4G32P4@Qpbt1Dvl zc2{9xawR25R+2vf{(q#&RLPJy#%4;al*;|;UO6GW*(>oAO?XoV3%0Ec=;tM|89Yit zgW!ZPM@h-W{ke?lAM^hK`dGk)en95Iv;!j-6odT?6R_gS@l~}^YDSp7cEg^^9B%{KiA%2s8D=A9nuF8GB5=RKV zK^n*_#zON-j}8)xV7QB))^`$0WxqoYp1`GD@qICup<%fah3A=sc-G)F^`I-!bfwCh z@HQu{_kpSgECK6EXgHN*iR}IUFeE%fg}0TAAlJ#!<0*IscpO(k49}AMp^p-tqPq+Y znv%}oT8V_(E1_~xj)8dg+?i;QuEbzb&wjCKNV@tTs)JgbD}8#^tz<&jO1fv?N+_h& z2_}bS&Grjz?E-gr$HQed*^Ol^b#a^f3hrCg9PwVxx-cd~S}>m0TZ`;Ebb4++ zGA<>uyXmw^@$UOs#@n*h1*_{}c5J6EE%e(NFZSKZ>%Mwj&Dxs!8RvH)@fN{H59Hc( zn@*?B6#1gA(jv!Qe6T?~E&dZY-n~Wlwddc$n)5aKZ&$>CPq&P%CKP5`jebE9F1C8% zBCAVK>$SP0vDvTMK`Y2l-3ch`Z5kgEs0}@hI7{iD23Ql{f6fo6l82tBv#C+SRJ0LA zOl?~$QWH5$rpquhcJ+6DD(;+DpMqFKuqvG{Fg;=2>Q3Lf!{X#q`)lq9&y!Tn+wn#v z@6Z5UuZ{xDLVoqpwT5qZ-7yT!i;3#SxGU^uSQV+;;InvlSA4gNg@T2BK+ADt(9h=6 zl;RE~U$kEj5_XI5qsw<_czm*lvf1pqziz3i>Qj1kUzMk&+4T9@4ZQ8e$*awWo7QcF zWyLu33!Ckt#20j`2A2=0DJS&W-Po1e7gacgu_=WXZ;X37tykIIYS9R&7PF)r`8fXE z_#fi3+-E10mvh3zf5YMwTTAz@emKDMcej6j6G@9y=(e3Sg|l*7+2nWrVh}cIb0=2b z`Ig&Zsp&)N=y=yJ0MGA%y%77a=L@Kh-Rxg{G7^sILdQJgIh#JAREOt-!+J9~zBkWx znXk($!P@RalH+ce84ni;kCyDP3$rB^EL$9pxc{5A^Ulqhzcs5o;VD zr(^B*tQjOflwcRJe7QY}&NRL>F-9oF?|8nO+Jmfii4IkzLL}atzYSC$m_2bsb0BR> z=s*etB2mMt(MKlkWt5C zeTXBMQy8=c7o$lBRGA$LvEJrOx>I&;A8^>2Tw)Yd<+Ta%mP8S;!1RI0E_uPvPK!zs zaC}kQ37mzOHZJSFL|H4+J!cP!tLs})(YAs;l%M`)a#;|zU{NjKEJe$EKjY17rnWd*t{eHuD5hP6jM6S( zkFhXC%iH41i0bm4*Hv71XC6(BEGLwW5(f~KX-;2_o>wB<7N|HoUxu|!?VHjK=eQ)) zNo7h}6;$yK_cHVrv~|G3tp{TNCIY5u%UazjoAo=5x+6b*sfy%}#|N zk4vXAf5DD~_?Mv+U{Fkf=u=E3Wq0C{PEw94Ol1|~-yacEz~TsSo(%_iU3QcoAX6{4#vVJKnDObIYf5E*_pc=?VI$?y{;pIwj$Xf z2(;Pn?+e!r`~V&bDZY_4}aT1!{xJFQgjrYGR97iSj@gf$Za!8bz(Y(tsE)?8<6o+&rb*+n)lYplmLtv{i*Pa5 zl_L9)_{&utupOD4pe~b$j!%KxmvfT_X{o=XSS8|AHj#h-QU}PXM&VI(=z0LuxL@!- zxY%(VW0p>^GKvV`$V~%^%M<-PvlPcBpd9P}g=yw9A$2|NJkmC%p|rsXJ%uC1%(w6^ zw28`Sap_WsPB%#-Ri{;C*5st#nW_cw;x?*pp1{>JJe|)tgr@LERE^ysZdtkvWPict zW@0I7XF{XGc<5p}i>n8S<|wR4b+WNA_0>LF2o|;)Ui4LCR|rJaf7$fiG=lznQB8;g z=zBZfT=)ArgZDn*mi1Esf*#+ydH5t}=Xqhk4)cTQTi0G5<0*0ytvmaIKuwHz zj7yC@g3X8)Pj6sS+Qdnz=%|OSefAAfWgYX1@_HvEbxpcXNabkm9NT*yV+XwX*iRuv z9yy9HXIn+C@0BI#MNHS;npj1w>K9!N^zG-hv9ngNQLJ12Is>cyRa(P$DSSrwwoz%O>+SQ`^5AS5%i_T%)Uwe9!zY(Fy+&a3Q^XaJVIIE z*lq>d`12#zwKccR-jVO#I~51x%l|Z}*WVHP6z@0w4*i5FbG2Um@O3Nv=$Fnl%`O)Y zBc%4+T4|g{YKZCJj(U4!I)(c*I2IfFLoR73so4=@NAAcb^NX^`Yl}xXYHR5q5+N4b zHWEgZ4plD_{XjhEHep(JxD!l?icbuU-9>2MbMs`1?Z<}l0`$cw6kntYxOE^8k9?dt z(xGwt&}4;V0<%BpI%^&fsNPsCqkg5kVrtI(jqXMthAl;j@?(ZBR^4`l%ZfE&qKviS zF5aeuZeLt*2P*A(4rQyboOe6pkmrkx;diM1n*M?C{HU5=W-s(Vu4QDrRQGn=JG&d7 zxXtwURc4Nh9G^PedLyIP;(9apoA)#nye)UTC7F492^J9*`Nr!Ca~GhIb(pb@(@0&~ zEo0G=pYev?p3xaY6<}jW;XDZz$&{|3OVI(W|KEtc7)J%{%M;<*g|m-=T#|^)HwNw- z7epTE(19BYbWwImp^*cMiNJgZoFx%Z6J~h%9(O;FXVG=>bsDrd(6jw^=n-{ruq7R` z4gSRQ@n0`w-T1cy+*Tx>3%ooli#2m!PMvk5I=kVgm7R{YZZC#UIJ>hL@u4o!=UI>Zu><}6CXjr@+175o~y{D{XFT?=}ajg)avGs1I z?c19B!Ln#xRsWtmVQgaQA7PwiB>PIHd-ZVe1CZW2veeM=T5c3wO5&RPFH=P-!K%)L zo4D_wuh}=mM7`10xJN@kQL>hVsBhbkHQ-m0RiRA>7`?#NoNV)K1_7celJ{~WUd$jf z|3|Ip%KYUU!spaN+F5-*Kz_dJM%?a+%hmHx8VK|d%Y6WA83fe5wlEKckL1q<^U#MnA z^Yt~&f8Oebc7(HxBx40`a%Rol7Q zfmld0=E;@`9IU2y;`i3mfLG!^I=J#;O79lV7N`Rp#C9J&k%;K%5%4uGh`GVe)lRTj zw-eTpc`M0`^a({QXS5>1i0DOje?Ab5 z)muHoshV_^Q?JYyIz$&%)h7q*)9l!GPTXD>&F55h)akdICXg=DMe85!9_n9r#Z_h% z_|{kz3KqAnECOah>1amlvEnd`+eVsS4Cf9%7*ALPpq~TZJqwN2qFFPq z*xGf5XNpx_7Ij)D9-s|$)pnQW2rPIEz3$zH;Fs&r#DS?6`m%Bhcl;u) zRcZToQq^u}GV5+odG5~4;!y3Hnt7s(Jun%qIjtj0U_a2?#frol? z=*-kP7c>-ti*%hOO!kuf9Ugf%(($I%D{&6e;WRxLFP(KU(*bjw^K5d@77ZI+ShvIA z#-SRWq1)-ZMYC(NWv8(NqFLiO=n)-=)F}MG$EqBd@`+UacB2RcB z>%OXIPdX{ZcJ*fyie-BZACeKHV~luP`zO1EPsylXFXJ57=Z8f8B&~(twL6gzrQy?i zOjytG%dT{Fn$_>IIPPW`4CE=v-M}+9{GK1W%(xBL*%4(*mj zj`2q_qfeZ)PvhtT-~o+7fGKTg_j#Z+Ah9M-&yR4H#bRr8+EkL1rYux$awO==z|}_k zsF70QcuM0I@RtJQJxZtRgBOpA8iso-PkqWm7I73THOwKmd~E@fz+?yO&R=;-rg z>aPQePkE|Gnk%xq6Nkm@x3=e=>yLV=vRg1u^cD6&yRO7aZVr}z<{{+J7QjWvrtLT{ zX{mb1XZ6UPYqj&b6L!#m^OW%z&sVRZt}fauR?~YmD}Tz!cOwyASVm2Z)UQ-R2%ow4u$+&yG?A3 z9Mm$?tn{vSu{Lg=$J?%e3?jOOo;1lHgMJhzKBy@&!w|iz?bN?JOp9n(RB`kBhct0o zuo|iS8GqhI&=;V5HtK7(@L;-F@EKhz2=mV4!6@nrRI2+_$ktdrtsjC&Vf*O6esmAV z@yELR(%m(T8RF%|j6)GPPJx;#TapKU^~L`%@kSog5!Qr=+~c}W=~nVR-PPRGLa}qN zd=GjL9$Y8@^DMnwxes-X7X6dM5dszXgM_jFP-Boa&SdXEM=X4 z1+}!=zPbK9*u&L=Y+9y%*>xjYwv$vp%IoFc?9vxb(*u-a4N7b%hzk~BE;XHv}FM~1{(XiDw~t(PI<(p*%Pyb3ep3z_Gx2X z=I)*&-4+p{)dl7-4h9f#?EnB$08kSE08aogj3rT!N{XU|kRuhTRHxcfZi8&89znW( zW|CKeiCm&7C%s;(6sA;C=$)cds)TOcCcrQZz|D-nQ2+qj0loLz-uHG)V>Dbz>t`cH zTS@hLBE;BEdS0xo+leO*Dqz;xI(Co)E!3^o4rf_wS!;*0W6;vYVk&^dM3S~?K^6c2 zmK&^DQPlw(VvrRpZnX8=T15T;KmY(n3e0GM2>JKRg$d&m84AP;=?FzSfOMlo1ndES z55>O#Am%FCP&m)lL2JzdMEg{@tBB;~aNz&~&rMIKkIKo_AuPf<9PJZF9H@1?Z~;JqgWmuSy*Dsl;jr^D#gACOBqHE)HMrqJN!1sdmB=)+zf zL=WrEHU*w3ua8Us1aY1AhTUo9!0r((Rfe3@b+BbFj$E5@H9@za8_^xroJV6MJi18d z?6H=;nzd_F!?=0hGTgbQi)|D#(c)YaOU1<^algG36Mg03&RY68AjMU4f5mtyNr`14 zUCwlgx;6|@lU(JD_aVk+lbgHg!l-R#8Q%QhC&8a1UwBfLlda`IfFp0Gl5;+pB8<*~ z0v0li#~$cNRpUl*Ggn7Ghnn~`r6ceaok_!sJt_)22?&y%ZrC<{a2kR0CBP8?X1gOU z2iqg@JE0NbO;k$_A-ixRhMe=Xl*B7N6d&cr9R+!2-VpX9?^kAgNUhPiwP>G9?K6(^ z+8=#mAV??@jS7~~;QbV|GXipSr_gMsI`UtUlt-A-L@7vd-) zDWOkI({wJDits}%I4c3)?H_>tmOfXQYegK${_mq6;2Xh(-_xss22wO-gw!b@$r#`l zXYSu~TD6BM+LCx~SOWAAEOub=;Gr`T0rE+$EH?%?DNGoT?%P!@AB9`-mHzTQ4er89 zAh@{;atjdinw*OQGyL@}L$4ORDf>^8{UO@Bk%u~4-l9_;M=>}v;b+&W=;tT6}gN1D4WEjPgnL2OOxTWv4-k7H~s9>wp_ z!i?w|%E%t#4X(7Ru+-wGAj~76qj<26?AlZpV@-z-fB|ovnFq&z!H{@VPRAFIxalpq z!*uCzQb!o{nr^K5&t<1$)`Z^N2fIAX?9`2xG)2e`$-W^g)OLXhvb1#U*4U8XPyjzA zM1q%$d07^zWW#j6!^MItLQ{r80KUjDK_AwIf;O{s=?2K4Vw>J51KF?7glB&_#g%a7(7G#C&fXh)Y( zF5k1SfF;W#<~vcw;IlFCYuk~76)jpg)Q4~KwY(^7y5(Fs+J1(GhedHDSdVywI-v@7 z5cGpN&)#rg=T{ymX&r?AzECn^j0Br8m1Ma3zS5pO-`vtbOTk)B1w{^Z;EW6A(lr3$ zj$C47Jx@S2igLfq(g-l9t&uQe^4jL~^k=(h@4H9{*K+kE}grNu$?ivl>@f0nm}7 zlb^u5i%-Je$7UprfEXf7d6!QrP}|Lt=gCCODiN-uoTBJ&DRz!+JbZFvQ`x3m8w8Mq zGJpy49Ynby#f=rJ1J-*i$zvnf{MCw!4P$|=1Xml8g!7L_nWV*?T$Uye7W7V|bi%pc z8I@Y!FfW+0CWs329KG*R0Meyf?@rp%=praA+Z)aW*`CQk8?l5F^|0j(XfQPf7q8RI zRph~C+MdMQy&Zz(oWmTdCMnH`u`!X}VWY?{cb>uZ&C+_x-8ODqPfRzACehckCQVk1B%fN547uHqKqNqDf z^Zrm;UW{0d0aFe$@Yia^?KP?e24HVx77J>lih1^`2JH`AS+#A z{d`|9gL!-2CZ|aWw(@X3ZME3>3s|gPk4p4kt1Py8!QLez*z|uK2}7>fugfg$c`n%h z%vW5i!hRh_zP$X+=AT)-q*(+(o+eRO}Na|(Hf-aUCw^Sh)Zv@w{CHnJ)Bz*@FG>I})Ar#tXV-BusJ|afUmi)rUk#~a zP={5%@$8UKofD4yGsFVpuBlo>`R5k){BrvL!VBfqv|R@GVv8DBS6{zx?<=0?b<(%N z9kusFRENLCQ-=IE8t%iSpe-tvzo#lK$EO3u_+eCU?>MB!*JAn=M>#(Ad8<`lur^hZCRSS02vXw^SH@&KlI(sFm-*2XT;Z5;3Ud3Rl##H4~`-J29f>kN{Mf3%8 zhwc3h>f5GyGGs1SVD4W}8`i%*W*iL1RmDEa zfaC37Reb6Yb5_;B{=H12RS~epV`=*J3pqX|d(cl4fK^TMY5!dEgV(&ic-uY=y$$N;OVYP#h~YEa)Z^+`@G@>Y!i31RGV6e>E}bQ7sDv;`*VczgTdV z_+6@h@#ZM6Df$X!RE|&KTo>pA)xI6yNUbr5Z+*{6e+S+Khl+(ADii-Frs^e1_mOpi9u&K-W;r|AIf7V@~y2HNC5LDw;d+~oMe=n?G zpkP#~P|NWZb00=wGA|y)_iB}LeDCG{7tG{)-U@p#!>($dU+v^x@}2bYugwCzmt($9 zTWX2#trm!NK)!ziJx=ok?5c>>w7+t|ng9oz^M_F^GQRz6#V8E!{sk%Gr zgfRH0b&>ofW|W`o8bS4FkzA#_;&lK|pADV~WlLr96^!;(jZg;^UTDRIRV&rmyH=Fx zO4hWDf%jzm$+^JcA8-}VtX%%TAae)*lO7UCJyk()mu6VLVzjt>9Zd4|uY=BN^(LlW zj27bgL@SLh!u&|_aTS!+9~fpUWce#=Wjxh9dvFGz)(IErIi8qVrV>=PtF| z)xbhZrk0{T)~-umG&?cNGZbG3W`Nbi@aWG?WyJH|wAZ9p37IAsTK!k`Y!7BWSBr*F z^vag*lCJ)kxaS%xg=TslS{7?1d^W4>!>!_fv?AJ6a^KD+SKAks6=A(BBVm1*yB6E) zmYW$xCBEpi)T^}1>GZL}G`G~hV|&r8v&Ba1S675joN)aXhdp;UI)n9J4W0kTp31^) zPws2|9L+(vMb*TPd6mT=kLE4iv9L;5c!c^R1N9~CzY4!u!E8`poUgO3=3Hmb$gp`BArHP=4H-y6;(O@#>GM1_J6|80dVh2|cKbu2kvi zd(}|^1~W@^c9oaeGveB(havr@pbHjw5J{eKxqo)r)2})hy($)~sxYqKdck#}^M`k< zt5JJi>O&3$~?S>^7!N?!QDTJp6Cz^tlJ zH?KTk#M*hZfuky~N$duJv2lQ2Xvr!E481|v@pmxAabymlFm(MO-2`i~)X@VpCBs9}s{S0~7tT+BPzMX!{8H$0q$r**wuIs+j?=}@uoNRs0%B(>jT z3i+s3(i2gfR_0TS59c{Il0A>_)LO1mtcSasITl_00{#MXmS3c~CK%F{6(gRJgW2Rh z0}{o%Pyn5%Y3BZ~*A9hune37bUJCpoAWeD8v{v@JG*XcqA;~c@DJZndG{Be1 zSL5rRW(8C)o!JvOpjD73#!qSUNx9glZgEx(2N51RZZb5R{D(YY7Mm_!rLt$EH-Kd1 zAFjn^KDw(JwZ~>TjWc-1mt`vV&?y}u4NBWfF$i`UrcBys=ViwG9Kk)IHPQ>kI>G3+ zc;w4*->iD9xQ>%9%_d1+Ru+xcMGI}|U}e+15=X0OfVIzzbOrvO7%iOYE4s2QoeG+f zP6GOZ+iwWiim9vPV&mot%hMk*0PFO)(7KK$ClV{UY{O}V|Qr_V_akp#?6L+gsn zs_64g?-1Jhro9uscx!wRZk_2|)PAzf;hiwrz|`BglJW4oD=cU0(=8*;jC-hlG(7Vn zfDPW$xaO=3yDUsuihX3|qFu=`Jj0R^1*#F;_6el>PJ?%S2-xL2EpM&1!=E*oUg075 zF)M?*D<}rhl}kVJ3KYnGeVi?3VhKJ@U3a?{vVdu4(Z-m$w87kWh{zX1in@G`xRQW* z_@O<@b2DAEV{HrLw*_skA(NHnkSv!;7?9dD#enwBrE;&x+;ssD-D7}0~3A~CKfUy1QX`ftSVSH2r(%}TMx*1Y?#8!z#9 zs-}+m8f_hl3EzcyQ>Dp%jVBGE2Hq&4SO?R7{7+Mj7kFZmYdY3K>vI)|KXXjFe-3z& z1iG{h-CE;oiSPY_|BD zrm3~II4bGB!3;Dp#tkcmX4D$NOI`qWTYP7akRfy5c4=mIrwkhHTAdMl#(tcR4%mDCfo%Or@ro#7+ln*(xxq!%e`AX4$o5Fbnx7yGo7m6Eva$ z=mg)xS%1X^y=J~0B4*s{Nr#BU3Ca`wo1MV%lrI-?WiI#`1N2R!WFrfhvZI+b#tr%p zlXM@snil=?rM@-?U%>r0wjsi3r6g zY>r6}WXCyXe;$nnwg))nA$W%mko<)i&a_AD27i=$jc{)({NS(e0r98BU61$Z{66x$ zJHNMipYD&YX$ID$Mu|6g0L))}&%cUKC0^tA@WK!Jx<40x1`ibehpZ)9T-RxeN=Sukz6szp@%%P$297pS2WXSNqD5rAdW>&-cT;PCW`=( zJkddk$G_hqg)Xak9t~yA^*xguULI17u4W=)J}yhOBTA}FJQXP@gb0Mwk)ok)iIhhW z*{k5E&G2ft*>cl35Je{LS;cDi>WcD;K`j*$e*o>*Rth+v;b#U|7H%1uM?Fl`0NT~& z6c2{Z1sy---}v9``kpqG;P(z6(Hq@OZTsUS2CdU~d9t4&;>)$?rZK&Elbsxa5xE$c z%^dJSN`6_L>Tv_VH6qVSkM3hXE(kPJV&#tRp+ca?a<~U>SW-*&il@xaf;y{gpbGLP z+!?7SsSlnjK0jl24q+fiv>`bo?}V%J*kCMPhh=HG&g-rkvD9>u$lR8FrxT6gp%B6k zj0b%^(Fy6@nKyq={;Tbpmw6J{I&`$zy0@cWbA}FZC(W|h`Xzn+zJzzb({buQHudFw zd5`KYnQI5SD>u@puo6{{&kloUu5053|gC;-q zJYwJ+EWWJ*&d*97s{$SoVMZEz(`0OsvK&$#{sJ4I*&<2ZG7|-CVw6Vh^2y6G-Zfi- zeb>eE4Vz(ClU$RrG8w?p$9cezRyn4L26rO#WF1FM#iDNJHp)KSQ}MA-R3KnK#6N@J z19CT3(}gIG&XedOjo#Hfn-zO^q@<3M!n-1WJ~7VeJ7)}WxgsDtnE$LQhwyiM>oKOU zw4>`2fOg71%SrL<)9wYR;xrS93N+0|ig}yNR7;%dA@>+fO6|})0eo>+?z%_eeN2gS z!Ozm+1KqRM>Aak~ROVER6EkXH(2Nd%vt~1qxr~W-7{vpumQaiwXqPUu5$1Zf@drm3 z;sWGcG8*OdyO3exH`04t;{Fq|5q(OI-bFumHp!57V8K{6*xROkYMIFq?|C$Msx!tj zn)E-JU|u6!;CWb@>W}7v>f^(z zy5T!u^Ci49G)O?F8{i`w(^IE!@U0C_$xt-+6rZZ{(X>2g_4ygyAyD@V2 z#phoyyRyAN*qH$h++PA6JBOKYIMhe(C%WV}NU(_IoMGzio9#3O!*k$y?LE5Bq9QAZ zbq>B`WW~&29mMtsEr5C(S7R_IbCAw*Jmin_QN7ICwhwCTJ0H3 zH5f8VTMX|dd;ArxCd(lf*Tia+GHTPh@h3WX5oAba>-kCpX({6H)dHR%3A9Q19t7T* z`HBv=^YoICUeP_&5~h^Nr(NHVwM{z*o7E)Icf_XWNVkVPm(Mi~4!dOT%4phkWj_z^8)jnRvkYEt zcAV<)fcd9BJ`;LvMccYII45q?I}J(8UQ|!yZj~QUHw&aq zi8r6a*MAPq0VkXve4vBq9OqIgY8N+_N(emAgLg6T3>o-S1Vko6QwJ3_hDSOR=kqUO%H4N-z^cAia(IB=lEd!7{m}4&~UJ1H;3}deSezr zT0Ufy`6}a%BhxE)%K!(etaN3gZzwy_7ZMyc)(X)ItWu8rk--Qp5W)vwHQtC2kBL+9 z+th%2@HB0Tu+w&!dT*)XvgtZ(T2X?poM=;Aicc2a+2f5PE<%7KF zO5WgL`{-`5Pqa%Pa9VqG2X{C4en~|yA2`}|DZx2#8#I1i_X0MLZf$1S09w`c=-Tt82?D5gSd%*Z0@;q5&8qaJ9yr65y$@i*Q)+b?cAc8A4c|^ z1rHE`dQ)Z5PveMOqJXyPbkRiVBYR$2o&-rOa`d|5+cZ*#3;_+!8KaqTS9{E2w>wVz z7y=KQ_}S1)$|-TXG5BA9Dw#xxTa!KF=#{OM_bsNp4L^+lnH*ODg?I~Kw&_?2%N|fr zca2oLkm`WQ%5Tmqf;|EO;y02Ig0z3?mT4BH4e$?K%(@9p>k&QHTshuFUHUP}{-2UK zx#Ly&?4lN7t|Io+KEq*aHVs6A;-spo0;-ugs~fO>w8Z{bQpOrqno!v-<&d(tJ?1Kv z4-!W2@`_(+#5L;0-5wka&<^Xng#aJl^_ju9>e z1c8%imxg5E>VZpa-a>VcEaG0KNM#`Igii6ctbwJ2gKxta->C`hUBc0{3nO{i?^Aga zru}XpjxBu>XEe=B$$e;m@BraK4&Lu85@*9W;mu@$s=j^ilcNM2J?;_>zea~`yi zrm^+}T=qmiyb?e+Fl%oojlXgUH+1E>Pc|jkJj4ZQ=)hfJ{_P;<_pv5a%!pS@r8{Yh zbeZ)vcZEVRtP9*mQwjdbHZ`?uVN~#!kvIBD&NlpT3FOMLdx4;-({_bLz}*81+G>0E zb#Om2+ae*S-P^WE@;tC`;E1|sob%TrI-Q=&N^e%!P%agO>V&*(qUYwMBpho>y zo7KkZuQLhvoGs{nSB{kNTu%)MOBs@rh)v@@%@8;G*x%_k@yWB3yIOV@DC@bbL~~m{ z_Kgo{l8QHVL$TJnVz?(vcsL*6o|frlj|}HRU&J%SPJsnG6J(%=O+~jfFAAov$1x)j zvS;bv2hEAby7Z2yL?+13)lHx@M8}HD04GSfPQ^4g&u)H;gB8j`;(^E_IWy&;K?6qR z$`szFKbkaY_!h|BKJwlI7~5t$aE#X(N|1;2$CxMU!=ulzsKC5{d!*_Nlt@vLLZo3p zsN(XUCh;_4yW0wuLH+3VK}PL-S9s$++AeL4)0bN=P3z(KN`P8ymAuE(I(HuS`W5~$ z({10aw@N2b#|CLy3UkBOeDhk;h#%{borgN`>KBymh&C5<589?VZDbr7NzI}6{enfK zXTP)Ju#>N%YAbCkTV00Wrp?JLH9VH#1)Jh^0l3#XEnT>q_BrC-_ra3#!fL;f<*(uwWoUVq*!ikoZuXk>+YH3KW^^30hP)4PEmvH$} z3vDMS`;A97^$K_ER@$*1Y^>hL9=FR%GbEoT?IDrT5ZJe-i;bqHkFJ8Lbb7qv!qE`) z8Z$kcjo)^y7|D}z<>mQmehKf-{L??Ix?4?l<1d*j14(mf+@6roni2N~TmwWBjCM=N zPXxqFZcgW2jz^b0@4{zp6h>@qex6Ha1Rk^XFWSl1DF5lsH!;#9+8`PQ(y0Cwu2SmrH7GvQhol zfxjx=!so|uNg85fC)pU_2CR68hobpt)c1hc2V6r6;sVNITkwIBvCh)Hl*1dWDOd8z z9ibJQYyl75+y>r&>BdK7oW8z=sGwcPoU?}-AN<^w*k(8+9`?)RDODU(_sV!`BqI`` zRrfSn3@On#Onuj*ORSErYw4zmogfBhZ0Xna)PBPIeWA|Ex>6tvbc?3LL8sk}WQ-aE>>iwfwx6C+A@N4j3LLiAD!H)B>wjKiSs*4|0a4s^r3Eb?Q7a9nwZ4jge}*&Dq1=zA+v} zj3m zEr44Aaz@aPss<2*v#j;lS?jraIIj2b`l|CXkXHx0$f;RC2Ks+~zE=K_v-mttn#el+ z=J6L0IsJMS-ESmLEwa#+t!DEpAw~HSrR*vm3ztdJgen|-PFaD1Nr-?%;Lpwl{ zJSD(uaEKpiB#t*rGz}DI!wthVof?x*(L|#kERX1%Oq<*^?;6xXRSgds&#`Uwc(1pD z+hpTt9iKM>UMq(I3%pyyuiSjzrM_<|bDu|>pX9_TbAe-iywSILc8t>sL z;!O<)-$wG|$b!^~hc*guO~h`Bb-&TdW_ugFrl11khEC|gvY?mok7@^zsggQi(gJS& z2*68t#+{I^U!LUR4Q?{vU-2xRG@lmLD3c>gdMxGNw)a2JKiJ_I(vN;A+;bFEog z-ITc)7*G9a7?Y^*t=O{(CrrIBEI}H9O1wMvs$nixeVQNP2k6AKYj)d#k9NR+ku*#h zXrhwx*cu*y$WQIms=votCLHtwGA|V#+}%LiB*q{hF#+{-uMR(?ZT%)W{*#ub!LC|o zE-%FgHXb$N0uXB%pyd!;U_%hl&5yuK`B zZHJ1N)@v^0g~u#s zS>UzsaFe?rxG|~um~w|_^HWwITW8l-hwk<=%lorpRwLtEk}x6?Jbn`lZ*bR4Lw{_+ ziO%4JEQ*Q$_WdiCL&~Xn^X){y`B@bwpv_Xp|DU?l^=rP`=)fCl(zo7ldQxcfPP8#& zPPOT~W#5 z7??Wf%$RVh&2h|bN1lj3JC7Lkkug|!<-(vzQBK8=r$?o^_^#y9IIhKBSWAMI%f3nG zKL%|#H=-tx4-Pnd);{EeFdoDLI%2pW!GbrTnjozHjp~=_-RspOi%SRZ6qLvEfsgxy zs0NEmAmDaDcRr9l?Zzr^B?p9aLgp9V07AwvIiaC~uP`IrJH7vMA*_$aQU=)d_pLtL zH9|9Y2%aZ6O~6btXWxfgvCCI%K;9Xpq1EhD3N2ag-$r!kcQJ!DW1$nRq0j``ZCmsq+Q2=W zM4Q=`^vrf#1Gk9qna7uSb=eMV2D#p$BaMO{CAC|0s{3_c@_N9)ZuZrMyi=smPx((R~r3 zgz>gZk`~>{S3f9?$~ULAO`-iD-3g^8G7-}gi%F5e=(q>wQk~vGt#_UB1q7Tv>MMrT zW*l?6>ys~Qv&>Bq3U zpTyh^wN{;Hho^O0i6JozE)Mj6;ArluGg2h7Rzw3NGPM%NX`9noF7KhKNSM;5Q_sFo z&S38xe6m|Tbu~S=KT0lTOO8G^ruKTmPr9DMyq(eXL=!N9Sm8BV!>#3R$R<5;H%5u# zXnw4>>CX=`YFigd#!N%tg>WdZ{qJHkYpT2ChIo_2&ZTVd5Q}&itX7@rB8>^5xnnr) zxyu$qo{IAHC=W(9n=0E!l;MixV#EVVOcUs^>FI;JB#0bJ2vJxx&Mb!jVh&8n$}xsD z-Z6NSDNJvPmVKA)bfo7e$O~E;8`I1EZ2P4S1I{@%Q+;Zd*<|%P8hx@dUeQwZ;8xQ3 z!&K+Cv?7xqn2)ruJym}^jYX{Qq2H?23kcEbZ#pv`MY-v%2kV^YmUy6)2h%0g;tSt< zxNY<34OxbbbgMgH8T5`{Ow%RIfC9uy`wuNB1H}GjPYgdD_z#j~&3fM9aYWyg2M(4Y z{F`qiA12gQe;m|nCV#;40g5zk?4^|X_~YJ--{|6aXc0(GeAe=Uv*(j*yqQ836aQ z1MLE7PkJ#jXQauyUm4^_{a6zGdP27FiWzl|7tU+iQW_QTd2`clSS%2?L#S5?cgHnm zbACN-u8`UzZt-$>rJhd~4JFs7v>CzkGDMM;WqUUTeU2hW;QXJi4l9I;-egom=5{AZ zy5K0{O+gVvfyNMH&@IJ`hhj6voQ^Zjm}B4d7ySH~O7`eXxjh{a-!IF~URH0z0N9dI z_u#0#1G3?&zD}DQCgp+JTc3|NXvFPJ8!^*eN=IAjJb> zxzhX^;Jr!h%nTt!`*O<2f%gm*S+fD4x1i{f2M4$h z+5QgueYb5kRq>1lpUhr57Ao!i%s&py>*2z~&sWX!1V>iDiLW-fl+(ztVbm$rGGu<6 z{(%`#xoW7C>GbwN_{EEY0!t?cuGqS1Rf)C}lhf747@Ai-=C08YHDdc4breOLJ`8S5 zaS-M73*MINJtH)>xX(ZWBR|+B`;#c-6LJa%L(7Ec2iQI4;Fcfv7Zyyk8^HpACgaTcca-h?T42;rqT9L2N9-jL9Ov69C-}P@D{1^b6OqHD`Y#NK(`jOAvCv5ARwo-~K!|w8xT2|0 z;IJJkCmlEu-GPZIH;^3#fh8Ztapl!>w4O!KAhiwZf4c6D=`3zNmNA*|jg|e#Av6As zOtzw+sNy*I4}SP&bP%in;g?@Lv}t5>HLS2EB&zT2mspD_Rncso@^*c_V~NQ?L#8bP zQp9ea?n&EhUuU$Me|1d&?)W;gy2R~{V6&fy?QJ@>5G=aPgek?G}1hg zGSNJrx{M76UqppAbt(Knl2R7jk3+KVG-BK|Puh7_Z2X<)Qd9|fa8)Sj`A)fNBe~S$ zzr{9le&8#=E*x;=EHCEF)G7GXT%{vp=*|);8c4VCb(U2sBDZS3kGZ?Y7oK@F>WgvC zPUp5fdG7sTbJB`%EHH zwN(0-neT3&oJG~xN$~c@AsvFmjRBfv=k6jXSG#yVL~ZlC46a9G_bidKbil?+H+$|< zxB3pne5*p~`+3i9e#;Yn$D8YTsS=7bk|aNM>7zjQpo22{zn}MW-W9k)-ZD+&_xVEq z6aD^Ug8#ypR6I~vN0vgvMi^34&IZAf=xKMc=H0U4KVU|auKmWsqIc!`*KGu<>3lme-|)_r5p_?S0mH`B1=o!M@b>J^Oct+F@j(}g z^S9``bVt01C7=H_4ZM6WEnuuf_%aUriw0s8xrGs#5A>N=&Tbw5fT)MH)s*s9+SD_2 zmyRxuL~_^j^p^n=oqws0Vbntph7GN?oCQ)o4)@yu$xr!1U!OU(i=a$$+XLcm$eS6Z z1!Hf&?kHl>Rfp5|D3Kx2nvq9v(wCJAxp9ffjvu%av6}ELnq%<`qtS&=TTth8RE<}r zt2BJz*_dql@1R-jci&A2YeR!MykwyhJVLden_U~cN(dZEHN~W%DWb{-b%-#j;*y)r;GqDaZ72o z%`Tvw!{Odn4o^&Omdbwt|D{lS+iOSd&At%W2n0Ld4gx|I_Yk^+>7j*@?miVN6hahIF`_k+d-^|&e1{c!lNU+E_lSQ6z z*_j|FRQxRV?va<9hWLlJ4Ut)$lLYpw-`b@*Aiya}RI{SU<&ude6I_LjQ>Llg`CFcQ zaRG%dmmMsTxDp+lp?fp-X{zaX0z#fgmhd-QQ){nK3y`qg5JcWo#1}K!xaqv*s9CkV;w9euC z%t{6RdzS{irOM@{Lv?QccuwTa)#k|*dhW67nTEXgf;Fjub|&4=>9BVcCd8Y1t}~2A z4t4GtUHHiQU@=M;vdMJmitVaH zWCVE=(-5&peM@P1tb5HIC?*l}RHAu^K~k=@w=M9F&J$Xyo_uJUo^#*n<&sH_HsBy_ zcq`z{vh`^M8T1obzhe?$Bp}9(Bb@^h^109* z3Diw*J>m@1P)_&i`eM$+@t4R;m$4qaFdlHxRFZ=NI08@g!#2WS2CcIu)8a8arLY_f zVu$U&4`b={|5$&wghm=|{4aYRX-|xMBaxb${DN6z7;vJgQ~6D8(MFI41l+lo$4PPs zE_@+^))hAOb3~YF&r@runfB2*b+*z*7^DU}_+r=?zh=Z=3N*GjJM!J7Gs!swE(bf0 zQQfsT*#F}!F?7yHpU2~d=i^tp zy>t%S7(;|G*^iFc*LeF`7IDGxS;Ki|#%P*q$bJj!M_JbNVWg{i69yX1u9^Dgqw&AG zJ6Xhs8N9YY#?o8{fpw?Gm={yMm!hQcmVjdz?zS}gutg;~tres`udF!15gb)$Efy!Y z@$KKJl(4-1)p^!ZdEl)hZ_Xj3oF}%;M8~+r-5-P~O$j)?*ovh$Q);sLWUjB2ufP5;wp5J-nf$5lo$1G+~qSp z8%NYcSstkLuOTXfQq#u~owM_nrA`_T=DTH891y?{A6s0AR{)LBX-<-XgS3zAYAA@Q zkuJ@#I=kR3WR?!#|D0{z;zo)c+Ynf^Pg#S9^u`_3!Z3pat!cE{2QwF@BhjxzapQ=_ zk$hX4GMZ>ePKEYpt)fLg0aA~|3y!P?i}@61aT5d%-OGHB|8F1%k1gEfV2(;4@e3cB z`KVhZkbT~~m%}}-@MXLht;=el_Yn{G{1)`pyFC^v5dddB{BZ8d14`0Z z5(tPvvFX}@;;j!t2H>7NJUvd>@k)1SpK5H=t_X12_&7M9ApkZ`#SONO-=2*cS>`!^ zHa{rI2UT4Z4-N<68Ad^i!d%7KdSUp z5&0QF`tSqk0awaK|E%+&qQNP`pl5IFsn$eVQgjM>9|K!hDuxG8neZZl~-? zZo#KpM}}aj>BK_P3w;7ox8v8D2r*_^sHaFdP`7CUZDH#JGP+ykT+&o91Mp&iP?h#J zD(}3u?2GW&B$z%K?6Sx=E)s_wha~W1(Yp^6k!5%4c@Cm60k<`@mV8=#iO}S)WQO=t zaACMoaIQeO^kxYr;uIV08KA6!3Z+KwCf?3$cFIiE=IWxYV-^NIr_0C!)-p;+Pl1Qy z#?jqHUWw!G;c0f8QAHtV?|JZ?_9v}! zCJtI;mx&kHZrY2!otW1YVk$;{3KN}sb|Pp7DPdF>sU_Zf2$4XG%?XhFsca{{8-7;z z?o12|PtSo06S;=HXS8dsnnpf`j&Y()-4h0+5Inj2qyn>mK&Ngq_k;L)Lz`AXOO_v* za-VWsfg^IIfJe~)LqNR0&NwMzLwQM@(l?H}qlHhtx#ajWzvs1NE)law&EriKvbKLC z|K@c_%02|~dyIJ4G}kU?sh}bJaj$&W;A}3xJd#1A=v_|$e()N!P1K1nZ94u6qzP2$ zyP77oG1)|R$!$X&?j*OJjDTrW(YT2>$Qe5}kz>V(8@RsNn}(gXMR%SyML&~!%j#gb z?!ZQPK9W&(QlC%Z$r3h1(CVZQG~R~CQ#%Bq8y>>c)qi3h-M21h;{l-Rc_1cDF`FPv znRQx`>0^76=T~|mXcBR|57Z>@z_tMV7@i5f%~vHzFLz?j%G&_$7%TKiwGPK9#jxIH z6$jpc*J|_`yh9D*$|-&&wE}(z$|~E8SAg&wt33AGqo|xW&|pz-ZHXZL8Ic$a->7i_ z+gFqi{O_Gwg6QW}6YRdHRsfVQRk(QnMCL$KA^!>Z(n!RuSG!?gr2%UZK3Z0v)AOAt zx(+u1+wIKuc%$xzM&_JB;Y4j?(6!td8h5NFO^G@yY2>q(DGUGr>trMH@m!OgiyL#RKt} z%~|xAoAV>3qn;TCmbdP9l5I|>8RHvD>USGQz&tj?lOzuO!BjZh{LtxlPix2;-P0F= z`$q&@zX5Mi$_#Ms+eOTQF{Q8>i=rh5#(6eDXv+1(kN_vh@_z^Z}KxOY}C)J%{Ku&lAcEOf$XsHb#D~zLPpZMddeZ z(0$Ez8I{y)kZHRpbmXF|k(OD*#38RVlb$G>kVr|i`0G|4X;Yf4?PoTN$E{6Y0ch>V zFs3YL#14RpTy)5c=fMK9S^=Gd-9A7UI32u85&lDHMRkby zaz6tUYjsHAUU<=a6)R!jn5U%Dwzdt`M@!)dFZarH0|jErLt%zJo8jpFk@_A{n_m_= z*+6a@H~$tOmo^7rdM3&H1lvbb8`ackwBl+isU73N(5h}GVsCT?(f0QRpZdFVuMevN z@7J`XqM4syN#Hs@HGp*ZN8wJ*5i`HT(??n!P~0(LdzX5a=jgYvWaN5yvuh&9%?3i# z_JPXK^Z6 z;nz193}syjYG}0go{zasqYjxiBYU?O<#-(GqDZsSg$Af7uFfXiGnzqm(lt{1?>Wxh zh`yQTT9XO`C*&=hgsV{mt{eLZvhQU^s9X=R!Y#^^0{6QA^6(W$z_jsk74aLEY&`@I zG~57>;cR&DuvESBvmrsK+Q{fDLU*k8Iz4UjaU}=H>m9s=twyoIsi@wdvXi> z6ThLeGO7V8@N zKKblm%{4-cGkmX#oNiPX*v3^uU;JQELHi+lJ#kt%&y7t>Phe2cgyOS0cOV37tprND zS`Z~0F5!!C_LqJRA$<{V z;-b*Wd7sVB&_Qs|b|t2?`bJ6E!U1gYDV^O>);)V=jTN=wRNs2sfN6_EI~8TG1HvHF ziwq-cI`{l%G4p(+1JX??2h2{Ap;|8NU1E(&|+hd_p!v>tu^=Dopv1n zQMso9BSBmqspVhEUd~-ojFUKCD09{gZ~|BJF4pm`f$>$mL|xrZx;0L;;^~UpUD5j6 zz@uJ=omTHQ1Hwxb#F__1+l1Y7UhnjGm{46en(BZIlQ2xGjYLSehM&wk_Jkheyg^52 z#xu7EO4}gxhpWGRCV9DthSXI5tAu%UP(kUgm{NrKfU{x3L1CnE8BzCm8fWC1#5r@K zn?8rCwoV>8U4k2$+yKnw9vlzuq3FJ>z`0Hk&{SS~F@Km4x)%UePxLUH^F$V)5oUn; zg9!k)Ht&Y*h*Z;y&y?hzt<}V_toK;R7?blixX_6rk*3sF?|Yk^jctoVTftpfxd^Uq zq3?GjJ_y?ZaUDC!hKjno3Z_z(wV+JKxkzA0+7?c<+j*gOM`jIb_?;~{jAE?|o3Brf zjC@&QX~3u;f|F>(rH<}Z1Z{_G;o}-D4^8!cp~UCP-7MCVC~Pcv7B5!?8XnNhF#nY{ z2_d&5(@8l_aVBGlH2UOCLQBrDUTr4}jAkcf@_>G(+y!L%)TQV?pE5ZFrwqut4WGB2 zx`*0<1Lp+nTX*}6#`>}RnC^3ZLt#qq71MUrB6Z&i--F2tha;8Q_1>AL zx+4ngtDp!;xQKRNSds_E_yv(<2{G2zu{%2S0axT6lC60Fb zv0Xy)$`vNsGD0*e?hrU2@6DnK=>WIGxs!^N6xjmfax^YCd;TIaIOajOb?k-unIr4u)^{HST-|(U*9ssaG7+6< zk*ERzgn7=&ajrglA9FcnqY0cKv&b@EV|g0qODk&6eHP#=9j_s(9^O<)l@_$x5L|B` z`v7L-^7BQ9a3xrkt@xTy!F;V~llRPV$1_~Vvn=~cJ}Tx?2@BjpW)rBT@<#(k)nFI61yA5T_PCjaRJ?0`@7nBx^QuB!ikXE;wg20D~YM08yYjl5QPp zity!#?)muhxVIxvE~%Z747e-Wb!Xm-bi-0A%zHwIoBwTeAOvlKTGVnNYXrt{+=Rb7 zzS?I#cMv~u($w~CDc!KtNDqR@*7)5BbT_#{z{6?jVT_qmOzZhFEjTb-7RJv2E0LOy z(kdKkE;qO}JQ39vQP@|9EF#?xX+13T!Gq#pdkJtTH+%Mo7vg9BH!RB<{3ysgr!s)> z4u8?Wzd+? zdJCuE<5W<5qB)0u4U*?#MR_`2O2U=CH>U!|6Q(HkVWi^0Xx19{K9Fo$T~X?sWvsJ{ zC{!~JBYU$^f$9m3Z0pSK41? zOd){qnv?&14e>)$c^IWDlz;$(Xzma%cbcOyk&Qpb`r^r#c>P~zjs%(HucNgIfl@OF z2&b`?Z!EAFT?h5Xb7NYKj8Z5l)!pqdDFl1VfIkTKQqe)JetObY#LHL~18ExSwINyPaQ&M^Y=NQw$ zsSGyK6%&E3HMgb!@Snl6Z7EIwTDVr>tFBpzR~W65x5WG);s8rh*a<`n_U^0h_0Wik z3V@Qj2Hj`tXsNerGg=KEv1n8EEW?gQRUDS=4(x@qPb;vdkipjRI7=h|3-JS(s-ZcKkGL>4tWBRMk zS7!=Xti)G0Nr>P4qpWjEFIuBCL942R+?W@!0Rm}W#ZYHaNiZV>zXTl;p3@F}^WfVq zq@hJQTLCZwiMm`BdX1>*9YFysCCir zF#~Bc64!|#yD#5IzwsWqq7VV%#Zz<1CJA*QKRH+8K-A&!Paak5V^ zM1T8Dpie4pAMr4EfS@Ex=Zkjw567(gNI8sDs$K-@9aVkQNHkLf9-m@=UEMRM6K;+P z6dZM~X!zo?x@gtFpWYJQ@VUtW0i0&#!1o1}y!qdu5>)cIjlc2PA(Wzu2)?r_ZM>wU zgV_-0s^Vis_yEoZI5JUj2fM72#v5kg;WE04Re+Xc3iSGhd3&)E!*Gkr5U^jnA)K&^ zMip=DwkZj~J%;mmvw`DyW}JW29t4P-DPq=ukDxe)b;gkg?=S})u9DiXYLQX>TgA5u zF%>L;nezgu74TRUz!$#>d9~cAvA9@S2m`*VT->f)wp5@(z`$v_Xo1~QwM)fp4WWw^|cp>5BFUB0YtXl*xRk0)xzNZ(k{B&qt@I4()!%53!h@8_%2`_ zM}xp>UVyP!9rtV9tb!#k#GO$kZfVuGst!vFz*Q^I%~eaK`)U! z%Bv&)9o;cuEG_L?ea#|s=*&xzM%L%7mAkIPyAu3FwYGqDxX9qYW8p{DFK&O&@5QVA zSYbbHYjv+?e$~WIB`cxuJ#O-762nU2jH(A85-pRp5IE<@EH53%z4dHT(qC4_7_f!e zj{9U6s<2|6>I)R2#RacoEuy)zgzEHLTwnK5m@l7=k<}thN>D7dRdekcf-WlK0@FD>Hq^Fg%0*2BCu$W`QZtzM;Uszs~6uGJ=h zETX%!*aUt1cDt+@VU)Z4)o;;?YGeP>VcejBCGX?|X%(xItd_9*uL?1)tOpWwHo(_j zx=KY2i+FS z!R0RnX#lIqcJ76Au~=6>%w%T*?7Xj4C3ejd(pDw&?o5((;l+j(WcZ(1T2!je^Jey{ zYCI`xiH(*5zLi<)YaNyyW&pqYP+Pqh#uDXB_JV_TVHp*M?auU|yeJYQ_o5BdtfhW7 zRK2(UFESVBDukI@7+2`o(e%PS`c=;o^r#jRGOjEzU9y6G#lc#f5X7>omF2+eaTl%X zYj)?Wl6dE+dG~K^{ID8Qqo%L*_GM>VRlQ9!Ro52hEJF1Pf{3f`Sqe5$ z)=-4$Mb*8#@~^UQBXN7M`Q2X8IAN$iSiHsd3hTyIHRi=RHG7q8n%Q@(5jz-|{*{6% ztc(^&tvM12RIcm2j{37(Tq%$y7gh1D&7ah{s7U|zBtKx~@-B})|9MM)@oNoYLlx+k z3m@-|Yn_@+7t3FLBmGMkCwZl1{_Ag!HNU}9wORR^Z`>TeD;1zUukr-7 zx%J(%i`uW(d9NpB1+`1zDn)%O_7&X} zMtGrKO591SV{vZ{^O_mzR;p4x`NytQ8MXLt%V+6$rGH)$k^Z&0?|@V8;vg@1$Nq!M zX0I9Szrhc7yGwq;=>Pro5|QfP%>h;lrz^>j;qv;we4OX!x;KEiv$V9j3LE{6dUNXT zAMNvjNko-p;dOg9>rMSIP>?o^wbw7)(QAISxl>!e~eH$MZ7#%;zh=Z<$N$%lGuqTA1z1&GIcM!* zVJ)#Rw_6(pm{4A3e;ujTvimQ=tco(%I`ggkcQDNiz(w4z1)zpWtrxR;w!ogl1nz{2 z)xQ{wDre90a_?*DtpTQ1wXQgOUyreO@~c08B`xb+_iC?{$@xcgr#diaE6>$fH4(jz}pjT{sLzn*Hb#KQ$(FUx@CM*gDRG%$K zsKbJF7@CSITU$M|=K4AonX^^dG4q!RHmnA#{0dgu`rb;gm(&LNIEu24hIM*HZZ1^B z40h^V+v9x&eA`(7ti0bv-rBxp9js;fv7|U`(VDjociF&F>8iv|kM-?8W7hYYDa2@v zmFMLCg77Qo`5|(t^#5I6O8j_0+@HPvhL}YL&Cg4RepqFp8h5cSv;M#7kZyFD?l}xLutROADzRC zDtJu3ys$gZZR|En4>^;ESxQCpQ6)VK(hOytvm|^E&?pWnUUyN6otouQ|<&RdcBl6~Ye?c*x ziz}h*qAcg3!7v@r}*J(s1{ip5tIm+`yO}(_n>H-3)ZBA9YP==RZZO40RT|d9^AG_ z&WxJ6=k3l~vA1hB_+e5x-Cn(rD&ktp%QGwkT$K}B0C<2n55kJ5 zM{9o^*(Ugh z%>+?KB<~rvIm=4h8iS@7)(Nh#c`}S)O^fYQE01J1^voq!cZxrefuy*P%Y-Y>(?41v z$k3aa_$;2=R*s4Rd4I7&DrsJI!J!$ou9mM)yh2bhT)WUCz_SoA8{A6ZJuJY{K(Iv2 zDQY(jTC$4nKw)f5Of09|$wL#4>S8&UNSc+sHFnURxoOU6Cf~+|<<4ABBK9=x&6rGA z$5+Awix)cJZY7tHMVvDziqH!k!j=Z(*NP|4=1DizaE0a2vZu=(L)HzI8M>Mu=r7z$BjE!3*MTP}^LgT4L zoT~>|QYdva1>wO4wfelA7Nt+yu1%?7W75YF7#1YPKB{bW3+h{3a9<=_cvy9Y+ukn$>1gZt>VL zJ0vhXyoImzTs$h1>LDm-g)qhFn={dwXbUKUIoXR*#<`+w+&>nshR{;SOz$gsK+R~+ z;|GjoviPiNsLAqob;y)WH7%&yzV6_7u9lQ)uF9C2G9z(YH{|76{dRQ31(5J&ITNAL z*lIM^?faR*$JvcDk`Uo~BoK@|o$12kOV)Tn-gjR(y6`n^RSk>~E~qO8dcA?0){~f< zn+7+MF|xbLaJQeL3XV2_0%+jyV`uvU&T$9MnI>^i+rq&XFg;&2L+MJ)R(5KsiGQgc1 z&pYXiYfaBmvt0AqjiwvA;RP#3Fd3|y_1D`p-aPtJE`gXj4ji!AKw&%;5Y) z&w&Kt+v{2n(o)iwnvTy}X>|?WaZV_4&X?1XJtt?}y=zQdl5YF8gz>l$EU)(U-yfy* z`sW_Q`nR>`ie5xZ`?QYv#e}TIn@{0=x^;q zPLbUrzSg;w6{x7kRuyQ*{04v1xFZJ|`!$BcI08oJ>QwpA=n;WdYKsFCz2jFQ;#zxU z#4Y(j#PHCdZb$Z3_7;InS=P-T#75DnlPTt%O>L0<-;~=hO`#cF(0$^o)Sf9~=BJ-! zF1Td>tz%D#v|s5UM5BhU*~7FKPYJ?izE#~_vSg7`EBu0bf&7Q-nC8EF$k!;G+ABYW zg=0B)JCn%2V?(pko6(3C(MzhqAfd^#>M7}^w)i5u-%uaIdHtBb|24L)dsNcqaD8gz z=$B$0ckv`=n5TIb-?JF;FT7OgdBq=MS6FuA-+)#Gj%xQ;BI&@(4us6VbuqirFP$Ak z!FN;I_FQv!ugn~=-6jnlWS&o2*URF%DgMX~nUBQEuO9V9yRcP5dGbx1&TeElW*v|i zBl_CbD=Q-HXl%oBxY(1GiInU>0-uWEW4Ubl736(~&Fw z-4W%#iS5#`3R;(`ewMCi>G>>s9V=FTpVdFR)kVE=&k4_JwBVT^YM+L#)#-$L4U}Ip z@!t17_&xV$Pt>pHO}96f_fQMANL#=*TwFUm(wVzjRdVQWUua>Kszh6B%Cl+i1A1MY z-{KPNv$E7%$()+U@=_VExAr;Nf2(?A!pJ2((=+1E?M_~9;t|CZC%=*{meIw|8DQ6T zIX0zuDL6;pi{DF@9=oa^v*CFuTnN}vH%h#FnWn>0DWIvHFMi0q(DzW)twkdFgWVDM zr92L|J5rw_$M(v5cUEt4l;M>G6C$L{byp$W0nX)MwR}4O zOD9V%r_gy_H6yC-1DpP(w(Dm$&n(*u5*>CIW;wg`eThNPYbW&uq(c7-d!)ENq3 zgM$n&t;go&rJ{mEKQA+cGpj`X3l)ZwjR1s~;2XBP+hAqw;$=;icKl8x*A4ftGuIh> z+xyF2cMowrSj1%CkyqWHXlP4zNY7my&!#(Ni*K4!X0`k5H)(BYuB=bhlTK=5)!HYk z8k(z>G+gjmRV(p5&}zk%AjO!!&!C*XGl;At8*0tW#%NJ5MiNzr9DjWmFGuW~^icoS7Lo_V!?wx(#MdqPwVg0uLt6CweN7*k7{SV)T}L9N zAkfdENm|y)_7;Wf^XN6Tc1C2^`S-Iply`;m0}pmV9eK?aH``RD^UZmhZFq#d?%l%- z;aXF4tJrmHL{8^`+BRQL_jk>L8;*ltzJ-bD$)#?r6`k%OZezHd4>brA(Zk)-(RdFT zzpxX(;gCIoCA8y}#1ak@8db;eC5R2NGRZW7P(zv{^oo(_0hr$wYDXSK%O-My`&0;i z601Ikh}_j6_bdptL{2m}l*DUc9p=LUi_}N|#NG9Sv;{9d~x)zgv^E z7U#|R6N&wwFbKpke8~snpHh3E9C0dj*=NxDTUvy)!c~dUkU{pd^g?G1tzSq=#cDYG zNBW4-bhOaD@7Z6+a+6b9qCKJM@g?_i(-2={Wj}a`qGVA)O)$ID zX|c8qetT?T-TtLh)st9Y+pyoIBT{hb1UfM>q;uYgJQIpCB$=bTgo^qxA4`Yf<$kEvu< zD}Ov^v<3CpxhZJ+5dC1TdF9<<7*h7`YLU!2w5EPyT51PG`M<9m|G?ce5;nFSb=b|6 zq20=w=PzHek^ldsmkKSXeu*R2mi>G~$32KS;n?jk<<7m=K4c$?a-SuWW1QSvpA!mUXsZSRSF8d)eu__0u!0TILlXZsdD@Cmg#$I`wl%e z=?vvfL;JbuhrV9DuY>VO%+jfDU1dQm-pVHvbct?IIn2Mtr&4cfebF{7mtWm^Azk^c zv0qKkgU3Ihy^0$|ru47;o(IV%6=(<|oQ)U+$Ns)aKl<=(|YUV7gc~=d0}3lP+gJ4*L{QxauU)^O;7Kl;kN)tJjgZbKgU-ao4cz~%JEry|+N)C@x$8v0{Yy{RPj$I* z>&QBJvY%Y|Uk>FGzo_9$EpZyM+|O_7U-{$t^2f6b{@*gU(-oQFXq>Tb@78YNdmrRklf3G;Qr)`r){jNIU^^y zU*TueI;c)9{b$cG5j#4VoTj@wyx1W}>9#Itf8=>&=!XTQB=dR= z)Nx4`q$KOKUsy>L&>*kNNvD4o!lkW7tTkt(ks>4 zXXOlqmiy`9ADUd4dzm)QWt)OwgU-FD+exO? zv}I3dn9qDIKWj8f!=+^DBg}ur#w?S*F;Xr8`%n{W99G}P@n?&dzXM*QG zXfI~)77JhYJ+8x58vVy!byIdfcpSZs0F5vcFB&l9V>Ziu0EQ3uHtVlmKR23dmQIA^ z(bLF*G2+)8hJJc&c-!1NxnrpKPHP*t$BnN!&SoO>cr@JUW_DFa*MU(xH*TL;6x$*4 ze^gcEgAfu16Qgi^zDd;M_>A86x;`x!*`{X)gs{71_UAsi6K0`#ILo&`8g906^^p0_ zE;e{xLGwhwztl18BwGvaCccT|kU~I=$Kq2Az%n=$&meh<)8Ala|I1Wu@)aDfu!DPU zV$C-6;oN)b6omH9tKaIn4Gih{u_5s}ZSq=YwvdJk&|V6y-J4iMigU7FiFLF+=Jg}k zOVcp(Ddz2!YzJtJAxY4sk((6KzNl>R^Yb%L#V84qpi|m<+}G#Be}et(f6uwh65%E- z`}i5|e_pZIEg`3HxAwiPB{=&4Q%*KW1+`Ag>HBh)nKMCq;Xx4E2C8hMBocmOKR(jZ^t+rD- zXoJKDCfA-|@ESa7?;=kU)Q=QnIPtY{iJMD8)=s#@;n{8Z$4s3!_uC;t?L#gR76SHW zo3y>KC*tGPU43RtFTrV7zAi?4mbRvz2D`G!7`@xL4)7KWy#|Mg4Ht9CR5@+Z5!f=1 z<@gp{US`9Z+Ej%~bPvIw7dY(oXio^awRz1&jb1~p$Mg+}SCjIG%k9_4+O7Gj3wEG8 zKG?~#odRY%)^CY?%S}* zqw&!8`q%e6NuVbUK=`9gf})qh1=DG=O9;NYc@E<;z5)Zbz%wT^i(KfF9ofT_cmzK5 z{DS7-C^VzYe9q5(Nh}y8=#)CmoFk&X%j%1Fr@b=uphW+6a|a3ey|z-I=UeRQXbt=$ zfNEP)nIN~;Q3A&F3CVGG!Z2djR-Iv0m$pvcsq~iYv=^O|lQ!*B>k4G*7jjv3}riW1EhJ^8p7yQT$G}|TcaRHi?E$a z75;^fUfOX{85^0w{8XEwk}_|!*@%4X7e0!gS=LIdn?W-RwZZ2Awn&^4g7*i#F`ifL zqbje7{0~W*D<3-VwV78>WC1Fvm|ADhsxL5H4qXo#@2a8vOBhbhiK79_q^KcrY?=(V z9dSYuCm>#02Wf*iYMDbpPigb|q@iR!uT)C$ybtiP+F(W!4b_3Be*)6+yCWpBB0W6=9XF|=p%^LaI@HrNlh1=hHyS(;yH#;2EmytWXfbvHaS81tq$F0ciPPhDARhVPjR7gIvd%NH*cIGX!hJP`Ur=SjgKC*Oy9DAaJ$UVK&$G}JGkfY(8q(jDz7BtlgOf&j) z-bbFqUdeBaQ9K6kNO@Fr?MbYDL=#i?cpM;CIG5B#NEw$8=*xWN!UGfwC7 zxgmMgc}v=Yil^)#ko5`z$Y#*M)YJwA*!92Fga-i03?6|ociB=>Wam*pQ8g*ZL1=)p zc%=pFTx7j3S*v^Ie#OGw!uTHQ-Io|y7!o)c#DE8e>fQse!SlZ6UbjjBIx{_0rYP3q zE#&4PALD)JCY&T+I7KLsp5~Cc)3%e|oHYu{fzh7H?e>%mHkCrN_XY;435nO~^QxNV z2B?_Xdm{{n&f4TuD3(&6o5r#&<6@dnE1M+AD79!JP41)pQD+x5Y@m5cgjPwx$(riL z8h#?oQl|A>{Fw&ldyq_rg%IBekBRr~gbI+Fp*;C6XL#s|9#fhWP_T)T26ws10386z zq)rq-CY!+NFA%dL-oIhxjUv{^61T*3b}eiVLSq-c6)Ou zujp}RS@?vpCr=iUOFzNgPQSA&JMmj)yQl#@1R$f12a1*!HrSz@ax?-o4F%-)9W8(I z_evql6>*I!$b7Ggb;{5OYheeTVk;QW9y$$n$@JSu6Dy-L`|slZCruHy)(sM>vl%Xt36=!8&xl0I*@Y= zJ1~@xfuF;ZEPT7E8;uQVCt!AfexBWJUmm-LpspBI%C$ph@Bb4vnn_m^6sY>5Ko}nA zc!7ZmmoxpZis{~}WkJL=N=sjO^K{N(4=i`)VsFkJZ-Cp~9U!yEJGnZv_*_J$eM7yB z8naTmvnwH7)xc^%Ar3aDRG;3Zu{f*?wD!ad&E`6zfCVTu;o9Ut`+`v+mWVzVAIj%T z&$SIbH~^jls>gq6v^>4!%s)c^=x}P->0^3*tqd zI~SO1XhMw9?2|=X-$@~n%sl01dKBPhv>}Fr?9m{59s5~Ge!-*|4CdpVW#QNdtbA`9 z1bHt|L1Pksf(NU(>n&DXmY_m+z(aW@?TjkD8LwKcCCJwXMc4(oWM2I9rO@wY<@0`& zjKYvQr!BOQgvie2M@FZ>t2^McTpRK+TBLmLl+8FqOt<-*B^ z2%{T2anQ$|S<^t%rJD{E>CN3pc5sjx-NnIgfS1&`qf_sw!HyQMZK(vj> zAPX4uAz7fm1j;1U9tV?=jMF8~5b6edj$et2e9K-6X-a(GGQX*v>A0fEI1!{3I&3^QDlHvUD{`{qNVrnMUCUdOwglNis1xnH*Zh(J4^qA9jMp_71519_u^$HbE zp>Bq^7{>mPnK8`TOt$9iGjtp~YHv+y>4HVs}mJDSaH#54sq?5~Vad zUod+_F}10J*r^2kz8IO9hNtL(I)@}MIo|XG)Bn$xOSzrK{*|iB)U9wY6H1zjB>1>p zKv`V7(vG!={N5$jbgb2PE(}TN`G2^Fr1~!${JPX?zz_-YwA8a6 z%@qnyQ`B^NoF3!o_f~g$owx0Cd-ZCW;lIsgKL)T0lw<2$rf0IZVqW+QVXmhOv{e8e zY0icMp%lL${Q-RrcsbDFgA7Rrw+{B~gf4auK6^38*>yb3Ux>TW9MH+)KPJCdG0 zC&;MTQ*&=CT};Xpnb@K-ohyG$$X;qFT=@2rhAE4SMS2RH1^L&7p&zx>Air)dl###S zt!y+}=J7F{dczj4dP=)ucnc|@GjFoE^mMVKiPV@Gl~XXD?Zu;QyL9%g~fUvM!kfOiNJwg z^1oC14=>FCIX)9z*pSLQEj=F7eE%Jd@sNxqC7EfW;_ox1%v)< z;CBztso906f7(@~?zg54I4PcdN8c@l3Qk~bgzfjHi&W`$EkIA^Tq6*;C2#=J znQB_s(f}Ll)*t>Zj3UB42Lx?emO@`{H6SzLtYq`TS;^Oh(8OJz z@R0p-0iZAC zJ+bW|DMo=`9UHRnqK>%dmB71ts7&E5s_ke<=hZwgLWzRjvoV1^WoGk*0{CP3$psb( z{ygQra;_~T|5Sg()`?>(2W0#iH)WcHJmcE6f{08h_89Xqf7#{QG#4D}cL@WXy&8KW zFYM4#7kn^ln)wBR;@}g{9{7AbzM`)V z&(EFKbTq4o6H(XBgfTOA7aG;U0r$NzNJmsU!-k#+>wtMr({1*ceMFWsJCMuf54G#z z?EGjR5csb#!CZm%pv9Q+bopQk2l6QM9Prp~LXjD-3S!!~7D5w-u*ZfE1!DOVzOhsI zgcCU9QP80vbUJ*(8UAFhQS0<9UYCgP6bb8H6UYiX~Ml{#RVdc!6ag3CH&y6$hBdtYzKyQ z6$tp!(0af&w>s@`{BBB7>_z7m+>NhTB8Dx75{F~2sIb?*4{vXW!x(`b_|=6wtUj0R z9QWI-s81D3Rq*ZRUzoCd60npH0Z72AbxR>wXp71 zyhwOcU(vB;e?#eDLXG%Mwl}{bY6dBjA^42{HV}Gbor6oU7{qW1d{r3E(gn#m$!;`ow5Z-ppMeXG@{IZ;)3W7Ed^=#3*U7rYFG3G`T*--_Jp6>E|AD+LSI}EU6}fK zGw_B7BFE}LtDWO=+d64Yac^3myrxNZTIP#mA{0TLeUCjK{I19D%D7(Z(WHrRp*Iuo z_xF63gC+3C%?4BvDk0^L{kf>PGo~TAHFcOY1N`5fNu4v!@VkTxi~7JZlfIW{M+{eE z)*VKzRiV0*VD)BSr&Y2`6Faf^RL(KG_fsk0KX(6WDWlY4!|~-h$ZU^YPTcoHUFk0* zUmhy>TM{W*${nNwy5JEVpNz>CF?M|$z$bZJ;bJbI3z_k@4QTa7K76me%%G_Mh2ww! zHNT&#aY9<9x*<#_NcsWv?qfZpCb9=J4Q|a-VrXW)Ct|d@i@1W!#pYlbx|!87KkeY^ zJ%Q-M&u)0=X>L9M0C1FXPiQ5wWCb+!5?^dQPVl{xRxI*CWp()SJnhZtr{8!})vkP_ zocKBHS2FLEhQe{mz++F;bF`ofqZbEXe_vuat5Y-1_3<$z;@!~qq?g*@xiFsrboU`C z1fWinK-t;5iYYF}VYc=eRKXWC_kr|vNM#C?V4EmaYJ$5nyH6ibepj?cV-9B%Ol5h7 zkF<_lDhppw`R}X8PB}rMQ4VW{p?V2*44-RId33Y5y(;9I=Z~rRe0nc#Xd6gm;>bKw zT3jPXZ9LI!S8Ng69PUlgn*s|GC)zDMzUwSS?d#??*J~^xk``o#m%oA)@M4p495dp> zbZ>^Poty!qvGRp{XV=5Dc%k=#DTPKmr9CVE)rv+Z^0Hoe7`eM^u$KhY-!hq={R83N zM=Eqaj?WSt>-Apgpnp(#$$4`hG8ezKnC2XMu50~0TelbPY+A1b9^s2Jf23${@(2gV z4Uz|9!X=&i-rSEn;+bQ8h669%7o1@IcF*w+>qAJN42gdddR{7QYkkIsEKVcKq%_%G z6{Aw~9ioP&P&v@`D{J7lIT=bE?4yPGz+dTtP}I~|zp%t!Pm;5JAI4`qZDTS;B{y=b zg0P8hL$-k@9+%{`lx-hw1-^A|HU7~87BDDv7DAQ6klS+IBKOJhzm8Q)yFm)@H*|Ol;gP|DC z-}Va|)h!!HW!1*(y#}N5MaR@XKBS}0hFbMM1~$<1R1ir7?Q(sd=@?|XiV?FOU~=#a zAbLK}QWjinIQ2d!2uH9Ns^79tR6Qe*ygK;J5bxwu&77(&dg9i*=0gPE72tXHml6tJ z#sx?DW{QMM!XAC3DI^YpoPw{s7m9=w&M19eb&g}7N(JZuKtR90jMUCz+Ry2oG=fLd z3CQYK-f?9dAD+>1Idq)Ko@GOG*&sQfLgL$=LvE~OmbLXuE^$DwPxqtCa3Ub_P^9nC-%=k+K;a&7ul znF&aNc)oFc9`E-W9CCQHj@ZeSYYitKaV8chwqd!O`pDIjq~UHGEb%xuzo=I*F}7Qs5tHeSA!j)5Ulp3Y`_ zMB@;;w7TSQapr2@89EmXX60yi%Ns@dbi2yBidsTSvus<$+Wq}cn)RbsKxzTqiWk$H zXkcTWo{wdjX41^bj;2yOuHfdaEJCld@RN)Rl+sxZWH%N~`iHq!OE}?i-#yp8uwv0# zP8(%CC5jXz`NKR9dP_W$GXBF_(TpyC^DuLYXnCcYE#+l0$mAw<1rp5ee7kVCq~^>t zGI04dY6|DWeJ;6D-dw_A!g+3O+rOcA1V*tN(G%y7w%C&s9=$GCl1gJCwT&!|Cu_8hs;AscT<^tV`2z zMQJfw9F{oFw|7F1D)A(CNYK5uDKig@_Ky0PkX)WE9b8x$@bujz`5#jm;cvz0cPxD) zZyAeWNXy8LWoRV&@b=LGso56>#AI&kPLdaqY2&=y5hLz*v6&9{t+$y&$<7I><|hsU zfAKUh=J3WvMvueM-<|LI!2eV2v4r80gJh_$=y*)Gm{qBhKL~poZc2D>7qf z&SoL5xDol5dOSVwdI{tI+xR*;5WcPe9eNqWZ|G}8){Gh2hDKW*L*FE?r}>%p?E*Ur z#tZ2CQlX)G(Faq%z62J6e%Txgi8=_kdTjX7QzAY^&s4kMoIkqztfsV zU}H1v`0S0a6UGxr5|(IQ6ppXpU=3w(vs*XoP^4=~S9ndE;+j0Qt!4=|C9hm?vR7(X zpmx&bYG%OsaGL$tw#F=Gi?$La$dsgQ^-7@XCteRK{9diinp2SIV`SbFV7R*Ld2b9* zK$98CdgPxJ+lsSFPPHix_-KH@Hc%9gly}rzsw3rMka81BY3eONDT3So1`*s4IYKhJ zR9GsKtd^ZwkWxTWnNlhJ-os_d33BXmLt`Xo?*A2}xkI~Pabvm{5TGSk-8$nB4UY{* zU^CKQE|I6LiAo#q+2ChvICOKsoB?)}SlkG`=SY-27bLVY$N;B3y3lrR-zmlGpr{0f zuGoXq)nfRFBwAeZdZuy)rk~xG%bge?nZ4LC`O6uli~KxfjT{2(_EE= zX^Sbd9P%_wwHP*&^FbC3I1=?tH?4Xo++4c)KGuO=1DmKA+f9D~bxP2?Rgr(HA*TR2 zNi>HMXZWHzgXc7{3B739LlU65Y;n1A;dscGVn`VpNtxDj$@{O|K67?9m!Q_e zxUurQBJ4a6|IfzKwr$P8h63Ap8Q`I`&|M6UT8O-J0r#F5ra8DEJ&|oeyXwmCH zw&5sGEg`XTE;x6|rHtsXDbKOk+Z4}rZg?SdbCPwG&@+X*1JB3byJtG0+I{2?<0}mi zd5k!iVEaG==^=DtFrh#xk;BX2!sVxyS!RGfo4mkEBkZ_aw)TDNM97Dy>I!L669jhj)nMUJ~b83|KVg zVF39ec%!yyU8hWWv-IgW2C^hIc+JQddo8ppMdT=+$fjX0p!AF32T!oOIB~KqVg>o9 zp;g@3Jl1ut^EZK^V0)TOVY1v04GLk4G^yRER_+d}tHVV9F1xo}A0KGj5}vs|saj}s zle|E#G#i$G*gU}ZsvtT7O`$d!yj%|jX-vQaP|qr+#kan4*%d8q*bjg)4rj-BP4WS} zHROHISfr4c3bFLb?fVYYr3N8XZf)zE3*qHj=s~$vdLcIUgWU&`3`Hd5Yt1-0KB5GA zB}R;IJ`gwRy7EDNBzoSNMP<@65>I=W)6glYC21%#rG^fX<7!EP(dlBn19*5Vq6z4u znk&O4xLc(m75w#%ty|i_J<30rL`MIVpzx&Li)rHAavWn0pBhV`w~11&{lb+=j-$9vhNUg3VI`8h`0&D z^{3<};`3+?7a%fo;lbXp8DXnf(lTD6=>o5p(Nf_l=@j@~ zN69#>{Oj$@r~ulx@=A{zdibJo2^f9p-D}EoCMq}apgCs61;QLwTqxtKrZ-I&ra8(6 z?1!d`D@+cX<^M#&1^-k6;M^wo%S8 zJs`h~Z8vWKyXr8u%3y1_JD-V(&nCXU1=B-0X<0zk6F`p%VXUR$b@8)qU^yOCAKBcg znhPnE{ldiY0W8*z4`~x#Z!=>R#<2L!bo-Aq!B3jD!b~CYc5OHw2V&A{#FeQ(F(IDZ z;i)ceu&T?9<&i2^sI9UG`rbWJ);Z0^V1yViGtjFyMTMtz@Z|xCS}5%NBdu81i!Sxu zIzhjq0iqN_^lvD+{#jkIyEpi&l`H=Llj@5DSdYhF$~TFZB@jmgr<BUoJ zzm!IBV;Hl_;BQSPMIrc}S~`foPsEE_A(CfFh1pw)dQqZ!&3yNu9qySjro5|{+4!en^RQ8dY@YpaM{ERihW;b&1({h%@5qfS zXf{mgaewP;1?3zsu)COy%-R3Wp~B+`20nODDt$6GZW+WNY@IM-k{DQkQStMRzyeYG zwt{MH2Zi+)>eue+$-KaQ#@1&+2=JlLtMDgR{pMwZrZFUoNKB;|!9_Jku_?8$1GfS- zcd~y>Lob6}H$m92ho*cS)IhK|#u?Z}MMc&3_j%2~hE6Lh4E6}#=y#0K>bb;=xHtD^x<39wB)wd_rZ&(vY02)oz`$8Wsq&Lxv@ir~m9H08+5WP7VZ-e7UBq z2SJ{0L{dyqmZeFyM8UimYNQR3ERG{r6r)tE6vV*f7E!?NN^9Nk>&|_P03dR5DUehm z^0K>#=8vzhlX~q?j%|>R{bfXyh5%x!@=u8hANjzS7qQ&!;d_jBO=ac#;S*Qh%!LZtZe$o48&d>dH6e*tb2M6NHkPThL?nUb^a1>~jOA&W7-Q-B@>X zAHr2MfNI2o5ipyuE!^!JI5w7CXB9KYuUF{O*{UobZ(pf{h8m}j@)9c#@geLcj-BLK z?7+Rv^;bc+P*AT}P)62vD0`*R9B_@9MXTFS=y^EJl8w|_erYkn?VMVxF@^kxg`+#N zo1VsbzI!-d+!Dxp3SRH&L+-c4+WNVe%fePsYkPmD#-?fWc2Ir=@;^c1wB)DWk z?W1HSGQ*vr5g>SjuOMWIUp;cTaUg744t2r>nuYf{$#`ZrW%1m)xRUmix2X8eT|-=y zoYyP1uh?#CZL?Gjz8f!R4cyl-PWp!}L#wuDVb54=oLQ4`;qkwbi6IchLP88wS%`Iu zdjeU<5x8y#bTmsGo62I{HBZOJ0#bZ=H92O_wj?kp3G0tV=U%O25y%!!*DPTWv(7T- z5itkCm|l?+pUtH`Aj>o3kuO%c5#8dxwi&a9SF;iz?RSl>z^X^)kB6}(3*f|+~Mr6^CAb6>?~ zEpkd4QfVg$w4x{`Ji}Ra4=venYfYN;p7rrhB?Cp;X_M{PwQihF8L|`n76xdn6 zvGJw{Il>F`s`VZ+mOu%3_hF)W=&&d}xNgVWP<^4wWmItn^_)mM^hNe!o~r4}1Izhr zA#MW2n?xClnVDxt87+#wo@;u^=Y>EG%hUfmPY1;MQLcM1%M^Ix9yu0in413xA&+2r+!2q=T?ZBCu!9D;qP z5Y?~3GG`pn*W;=fEP^>nk#ZvMO@-5Pv;!_f)-9^#=A9J~n$AHzpM+D}+4TyL9nbn5a&b zg9gcJj;WYsN?y|NQD6r`N0^T1qZztK^~zVXCJ-+F^Z247m6eU+xZoRr0cw?TvEE^Oi*@Zw3+C9i~IshOD zJsXh(+y6d}+E_{o6;D6JgH&m2YrTrEO<~I8Uje- zgSB^=V8Gu?BWaK_Rj?u4*j-1;7_hW#gWL^QGGbUf#v*?xP=qng=q5CvVI=r!Ws2zd zdUc9Ta?g+W+5c%nowVeaCB8m@YFUaWmq<;BJdfqw^&rNGkK}dIcNYqcpwffz!7Do% zLT?r*eJYJ!_#J7A_0Y39xh0#T7h^7@|7I-O11MB(*iuUo(y%MLA@co(&M5jmH8tfq z%vC)HqN%Zm(ipk98to=2Q$Sw#pgJ}8po78($|SImUl@+f&&Sv{c<{@Y(08e0M~#rF zWeJhhMd!|aN}UnsEI}e6?19M)Bkq|J7HDK=13%DAI(fMEa5S#e17++XH>k}IjUFgG z)Hb<7Akp)xkX`tql@k;%d$ zJ=zB-H4rC7{EGKVf@AA%;lt@%6C3&J2$2zNu++j0U$uPw*zfWP8@o;A)6KU}0^Y}LSMC{$BPQR% zZb$m(qNH+!cZ?%_xc(H2(X6dU!;KA+l*Pur|8qX{$o8 zTD>s_7!Ij_%+MQG1xG{#0Xs*pn(phMeOV1J;5|bzDKmXK5^;i$9_w$4G32qd*VCfi z=VklP3!v~ALT>oDO2h`Uir%<3nh2ISH0-gL?*&`5(}-cD?R;Q&pO$2j{z(Tvqj{(? z8yrPM*GF&Ad0qhnL?xv;j;HfrACbf7b2P4RW)Bt)f_ig}9C$vr$K&#wXL{q4k0gj7 z>CwgxE+;J*hk!OR)^moWqeLDD_9;bx|I4Ze0iC28fJKj)B=JmO6~Jap(Yyms*`w-4 zwOVy!Y0k)xSY_X^(fRDm?(9u{+s28XAA_myeBWA@4usHqa0- z`aatXN@V=2E+}MxG{ex*i(ttn--!-{nOY|LvCP~yL0cY18mRYc-Xb>ctPr$$#?k&A1oWpU$nov0^q$xTSzh4~!qd!}m;u-l zw&9q74)mJQD4ExIV|wzD2~FfZAUAg~NPRm6R-t**8ka+L)j_1O%4$GtP3J`tv-EW3 zJsp#6%ll-I1C2{yQ8QvuM zri^fp9ZHu)eCdp7BR)o>T@EL}+NL8x@x9$R(E|K8ZRa9{Z)IAsP?6s4%vvJkGxP-w zgaVzJH_n~hiPz{TU%Fjxg zOdDRHpuf_xd2wga^ML|Vm#3ReHsPXa-A0-Fb^)lv;URVBmvW*(jiKcaFIl}hS_UmM zPour9>Oe=efWbSlLv&-AFi_V*%?PnJ*6f5Yk;g=7cDO0h@XyA^t~}5l*=qFEI;vuy zzoUPnJ))w##%*lJQjDNnW1Z&O<2sj}SB3a1&UeZ?VmVS$^pxcT%E?uU=l|BchF*cL zQ@6vcqA(-o7#*v-jLakmDF@Ool(s;84Mw?E4{Rav39|!`H~~Eq^FkTX^S<11cuSN+ zlRoSe?D@}c-sdX_O}U7a(0Is*P=M2j1p{OlHvk$Pb095(n9OeRC_bn(5ej44gIj2;Y)N6FDE3cZD@;7?a&KbIu6|MX;?IraJ!ahkx z$eR0W;Op$RfU^=3yw+P43!MGW!9rKxvX@8D<%=R(-%Bjc{Mt)Ns#H*v!$h&O*0C{t z88vU?;L~|gRZC&D0#$6WSQdfaxz=poWrdhA_q1FE#SA7v1XN8$R_5Q1$IZsX2hvvG zqE83)t;w1FI?T&3|NZ7*U7mZoR;ozODv!oWMqb`z!HFxjXUiB?>E(ynBirU@l`U;A z>j>uaw|qsGu9PY)WfGZp{}^0~3W!y<;MeHv^&mXdAI5nr*Or~N<)BYcFxSeH zZY8;kS$`L~o>f-(JN{+RYjuQ$YpkePsjrwQNw(crq#lD40we2bGUT#m@V7rzaj3Sr zq_uxlHT_-Go$i=4D=B-Q8O51#1r^Qs7mYj7mD*Gn#0dTU%n@+cWK1+C`?YUc)k=!h zvf{b4ve_5*Z{x+n__$%csw0#1nh2U#g8Rmz9?_T>e>47?K7IUlXL9hg97p$tQe

    zi^m@x>Xcvn{uDuH6Mo)#Ua6#5x!;8;_36U6Kdl#hV3KB%s2Sht<3o#)&0rZ#KCILw znNG#~{BdpZB_B(kajdFHK8NDGzr}2eOb$MjAAf6>0oz)Q2Vv4 z#CDeeby;r7z1DQx5mGpFvFr7;ysdxj1@ELUH@w-I?a<*aVsQcCNNX1wg5zYH_F^tz*bZM%3EMmTo{SS zz|9&|W=>07+?phC-LW-c(E@a=A$G)F?qqE36&; z%2j5MzWNoFxz||D_JEmH)B6bSMiQ`aJ@>%+v21>4?Jak)5dHnn-md)=^(|LrwJMOX zEf-L?61xuz)P4jhCNfw4vJ(C0`Y+pBId-+OJG=&|!~mD4wMg$qkGB%_aQlm_Xjh(kyiCTc&$*!MYrmRSeqP*C<&-F|8Q&mW4aG1kBEj6U$|O9c zhf`FnyNb&gN)yRh0azJNiqTh$;y13=FO|F2PQGT^rP{-Jf3R%A$``W<_}VsV=Z~?w zF!q-z%J+M&-fto9zgeF<;C}TOp-ZPrT*a(8R(UHS!m7?k&>@Vf?23*%$&l?A4pQ>% zS1O|>yooBS)~i&koZsxp%MC?VW5@#W7MAtL7NnmnI&((7sR)%2s9C+e+Oe@#w!KDQ z#v)x>*R#xvzUko2J2r5oBYA@Cdxu-9I=0f6vF=xiC#B>qcXMTG)qc8^y=kSvi_7|P zW$i2f?uq)6-(lPj>zl}WXTO$vY^cntI)9xiYJK*RP5F3MrRYVxzq2@c!nvvS6kM#VO?{;U zVMpoppEs4EAIH_btmZqEV6R+oeFpTUtGn^VhU=JX9lU>Eh<5qcorw&7CDDf^d%tnW z{!oBf`|gNuPumjjbAPRuO!>iv0(9 zYc#46?`kA10?cP%vCpHnyQsdQv|EYxGxo<_@hc0N_zO_gwfLEpd0%4x#t~ZKzrtOs zM)ZNggmw+}KNdEwk=GVAS$Y+Ny;d!z%HQ4j=jG`7J5S;Z@LNDu#!6WA`OA!(MN?-{ z67*&>gtLBU;n(3|Jd+aYNBcP0#x_qpm7kI{o}737+SxgYtokfFHt_48Zycz#RLJMW z-x#jepu^Q4v(!G7oZ}O!@$EB~Ro^@5ZLMm)#Ye5NE?An(v1i9GT~K!H{8i@3VeTZ!0H)TbnOZ2Sq;Knsg?7vcK)94EEeFP^!d|+7n{fS5- zTgtL()jlsms z81kHZ)70J;sj}JZ-LCnj>-8-N(aoy!m?DN`scexI42>5~^};$$9;%(AxKaN1Azszx zixtKTz&+*T^-Si!Yx?_6To^kmD=Ta3ofTfUbr%)ada|izRaBnxUu;YAcg1tN9j%*| z1`_WOrMIlU{1#m^&sL1^z=2{r@~k1;nI1Au7jnp0*@!KTzARH0IN zX_Zl;uxSSGfTDYe6bxhtT+C8x@v`~JVu(*fA!6^a?Rb04u8fCtMaMi{rP@17vl_`p z&toiUhw?4j5|LZUBe4mfi^7tQ_kolQRI>oPD7zqObN3Hw3&bjWUR&{MhPAl%m`18% z+^rsH7ikBc+76^xfX|cF+2W z4kWHP8_~wPeYDSaXHaqU|K&at%j)u0qN;K@Z!3KPUrvv8`Mf@5lP-uPO$GlALfk0Mi z8RQdnODf4c=Vee-#uf_|%bXI+aP>@rN|p!W($4!LB@&)`zG%FVcE!qHj(Iiapy+Id z847Abk~5GslCg9br8ln>8YKw|S)7ri;qtIZ6=Afo87dIb8CHMrC?gXE?^pYiNprA6 z5$bn)0NP+73zN@g?g4NmGscM_1L;p<#BxXq6;RZ>WVGV@;^PjJJ$$grFY`q_*{YWS zrJNC#iCJFWCZph83$u4l(@gOihHTSFA{`Qt1h(xMJ;g6ts3zz4ziqzSO$&`;uOaLL zWn!MCd^LOzeC4o!8j=P|xRdS3%k}I%#39&2?KFG8e4Ne7`DE!uT6DCnR=0MXUny5) zL4<-l-&0>+TvbaHUA8P1CEU7V1@JBmT|W4`go==C4M&eufAZ+zWjCq+ylAqy9OeLc ztHZ)+$m~z^s(Vz>HvP_5ND10d3^Q@HvC#YQLzjOsXeb)jWRG0oS;2qZN_MyzU~wtdOl&{Vx8WE_7N4*J z?}w&3h=~m%&_pH&DXz*C(;yF!J?#zw=Cr3B92}p*8B_ymYk?R;EMZI@Ja2*=Z36&4 z>kF`?GY7|cegK#=KJKxlBLtCGIM}$`onc5B2R{~k2k097N^u?RN^LOk!G=Y|Qyxs9 zm)342RAsJN=SaHR0tcJ99%VX^?NgP}An>_3X+#4TG?BGUpFhFk*gVs-=Xb1}andS0 z&RF}3@5!@_7Ji;n&74vimVv<1(U-}APjc^om}qGE0-`V?(xjOsZzea>L-YlNRLdus zvzo#jM(M+S!3hD<$tV<=T~0bzvxN3J%IvLs0=nLC*y;cIxhsADy$Rh~Gx%HcDIrxviM8lDgJ{9g+a!YCg#;ZP6A;h$#i+r)AXER{M%iM0>4xxP^R`s zC^dBP{FkWq_by&f%@$bLaP zJgE~Gx107}2oF>W&t0zzue&N7{EC8jGvo?+s3XslIK9-sj4}Y!c4RZz|9oYw)MQRH zRSldX5y*KocLG(C=QZ})rUg8w|H*R!zcN4S|3YwbaNp?e%-{T-kStZ*ILLJ}m-PNf zX~=!q{>suX5jC*@!%2l?sTQ3B(@V1ID#ExCzbA4~?+>Bu8+8H*7=s<@d4Pzdhta7p zPIwXOdievJO5Dn5!{!HQ{jw6Yj>UB2@B% znTWF?l$9+`=$L~7JU_j5CAh5RAJo*dFx7aaC}vcO>^r$9Y8V@;HfKE^bpweNYkS9N zRA;ut&boSYy`FoxfVgn`ytlFc}H$tJZ&9pk4+bT06dMh z=OM>8CemVYN;)wq4Y%cY4GUMHOTJI5LewMMePu|S)7srhNB`A!@zgRW%@1xeV!r)~NA(pS6>7Q}@c5 z(L09hVI{8@23qb3lUNG{j~g4=S`(lu7Zi?{ee(qiwd>u7`Itx&uuj4O{kr_|J?F(aUyYbmQmB18kDyylVO;(FdGipZ9eT zh^5dFlS{HPI`zB`?lE(=no{`P*xaZrTp!NNhn*>7Y2e@JQZLWAo;YCvb6=g|@-XnP z{&3xbJgJh}GD5`kc1zk4P>Ig9mzHDz2((A}`AA6naXyzU$95@W@Plti>CKDstU7bG zg%j+#Kn)p>TY!6j?_myf^ zHpYJ8x<#0q`XMp3(+{`W(}7ur4c`luu?)Q(TzE5#v3QT)oa7 zZ}ke>Hq%+Ft4~iloW;>OQ;4o;}qpg~dm3xnUgU_jMnl9HR+E zi2p6#2DMuMnz&o+x{E&iWG6ePWU%M_?m=>Sle<jXhEH zN0?r1{zTdK@A10dGW>n<~it&?5KY3H>Gc4GUxqY_75`tWxu5J zZP6Qll@zQWb#0%OuT}5o(L%od`JwI~_gABx=0vAM456pW&Dxod!cq3sGjD}ECma7A zYmS0?ES?Bc?KPe1qjqrfdhc<7x@+}c3a#I-S~SV8A0tz z*}wsT4`>Ny^iGvRoBw6TWo)o%b$ilRrW4de=mnmsMYT;_*edZ z><^@|wD?NWE02l~jWQqZfAbk}d_KU_mZxL%K}x*FHT3)PhiqZ6|3SaUz9i@${c!8_ z%tu;3ncf>Sh`#gBi0Rop>9a?SuS#Ekt@$rV-|27u3Hj!KEd5mVViEIz|NQ^-7QVXb z6FPge`RIcUx33uUH@3i)js3IEDEr-Ep7ihiKgWXJ;!*`_6epy~Bns6U-?QA*jG-E5 zkiincHDGl9>=e7=Wp|b-D3E|$9`aC9vL*l@1st#v`RUsVhI&1(hH0XeQ0AAsREtsUanm*{@R~cZ%%gLUPD2;Ii6%{(5a!KaO%I1 zQzC}>W6fkmaiGOMQFNTqx#INJ%GINR=U?h4id4_1QdlfxzTA`*7(SO|-Y7Af6GvxL zVNzqHIo8gP6gDy_?{P?GxfCVx&WK781{nc*!Y&!f{;t54${88T2BA|~4KP@-pdFOI zgEAB%f4wjkyy95~4vLaaHoC@h*Ir|tE1>I$8A;N(b6egs>w=x7A_0X0p41#4= z8061LOQsNGTFeq-$a)6C$%Nb@$rpkK_lQdVy=kVM=##d_rAQd!T7BRaA1-VVrGLu` z(-?NU{BPO$|E%qiAVreK_|f%XC^L`*N1Yc;wRZTZez z=K*3to_C4w%UXxBjjNMVsa3ID(SSF zBF3$$PwjMP6>0Y(;B+#ZX|vgtwzbQFr)PG(sS3u_ zj*y#>wL(_E_blI$(O!41`u^2rC64t)YdZ=Au%^86lVyo%px}>TIV+-d~ zQG#jcSG~FMNO7 zOQ0Sw+1y3uN3={!vpJ>aGmgg0TQ&X6zV@er3t1Zd*yVz~o**&!_QB^QMbH`Pb9P(d zc!0We&P;sMYSejU9`|2Tk(7sEX6b~}O-|0#}U`YS>TC+7Rx%MF@U|Ff0~x0zd(AvRyEkFoBrK#i z$?Dq@755#76SS1lh$5(B!q9h17xuYZd~ZaYD{_jHI%#)pJU%>Bc6L2*LO4fa*&Pnh zk=v!z(HHVn$x>zYJjeql6h&@f|4WTz#HMF&(f})DG)QD}QjSXVhf}bFbG1tgt)Nzl z=|)pt#<9*S=qHGT8Hg%O><}E=mYf@)5KKoUTMD!pOU=utM1#Jf&rx{ z#{A$v%_oDP!pmw^4;3Kft!6SMcSF{MPB7lQvi8B=zZH>KlIfsCq;@MIqE5( zQF(247KSHFH>e~6oaQ#s+wIBT>XWE-xt^V&zYgX%6oBVzjb+^KT@6oKDB9bYJr8aK zQ&51yaF1OWstcZVRiW#F1Fl~`T%pm>p@$o-OzrecW@h;H^9|IP4}8^bHd~ zJ0Vt?BXiP!7hnqRlJ))PB|V$LS`Z`5;15S$WWcE%4W?m+T%fRNzFf7l?l+5&tj+^8 z7Q~kY9uV3F^FYdxp{y$yZK#}ms_yzMVH*$edDOj?TrmI0CB+xE`_<|41s>V&4`uiou-jCf zLD6#+x55ovH=^BdIL5X2uJzk$HMgi&v+jzV>-wg%c2_2wq@&d}75r%rF+yyTrrwI3 z(d%rXm!j!Mdz%K%WV{?Skdff(dy_HuFWPe#jq%Q^pd^ALIb&`EX1^aWvk$h z;mFo>^;S-VVS?_0o*KG4&gEDjdx0ne!PwH|QIX4e1eN_$^x#rRkwi4CSv5ltHtb)H zt_DNsKmdkXvWqDlY4l)n1&W;H>u4wcw5|F`(l2B!q%WkfMa9)f4lL?a3@nb%)Mj?m zI32($M>lMUiI*Tr+nxj?p&}OnFHnT|s8H<`Z(_-vgWNZhfuD%48e~W|tkk@#spp%a zLoVyYY7DB#N*9V;x}N}lVPy0i`L5+fM}Rp6ZW99!RA-zP3pqK9!6}#@&?>q|82YgMDXt; z+rV5Q_t(iAun1+CG%;vlv%2m824b&~tqbbfhM*dH4>cMgdjPqLI@_?cVfcZrK|6+T zKO{1^HMwm8qeJilbcc9q5w_!Gh>496i_Bv-Y}B}6aM=N1y>$~@wN3nS6`A~sl;A96 zCKjz7O7J}nrnq_{_+0YkIO@_J+Z|A9n=cHW4{90MNMwq$*F^*rCiX0Qpw+RES~|mu1h+jR^f}Qj~lxEy>o%mDHXRWo2(D3(L6ZhYG5-p z5i=3i)+*fkzZE|Iy8n3|IDnKHs`&44m!qB_ij_`@EmRnKE}?OgY(O|W8JV`X3-*eP z>7v+eHCaMYHCw*eD{3-!0Dq1D_=2W6>vz8B(u`pWQ%`(tNZ+>jolSM`FStg^_PUL@ z?$5gc74*Ue*EFv2WAr#3wP{)?fxMD;Q#4#PSL;6B0M0M{Yn_^%fvSC7ph}cg3lraW zSgF?+b^Ifl5X8nSSIux&aV*Q%3lJmC=q2}LfYo8|rfpn6Pj)ELnBu#88F^BuOnD7~ z!_P`{mUR95QC!sFMK7sycZWOb+Z`-9(l|$GRl9f<6$AzbUp?=~k)tfuL)ayzLcJ0e z1g(v6&Q#Nl2SZYH*V(dtH`@DZ^Jz01!g>4jzU`^0!c7cM~;)dJGV8O1kd<_ zyNP$fV$@@7-6S*E0Aq@!y#=D331ykGkHJ9rVit%TegCHL)-FwJ3_K(-PD@*~L2o%1 z3&X!B#A^CJaiiDcR?C2$nUaV=88g;bZs11Xky&w-Ol`2c)~s1eQEI={A+=syhB>j* z*#ig_P}_|_n!{C#8#!w|b*;FVH;03MGhV_QIEa;wyjTb(?Ob@RR(c8bELnSFcX&cI z2I-=Ku!3?v%jUeUSW;+HoJZLMl~c8Jpbn0B4qQhA;I*U-cT7PGgEZn}lxhxf4(kr^ zv!@_vCMxAo(RRY2#P{a(R`%?T`?U?znJhqYjM+%Ivt;XSxH$@Uy+p*S=)uTZG>6*b zV4R78n!oQCu0`_a`-0prM0pAZH}_gcHW$DxEvz3#NOkZIEn*w`^Mx*R`O=UzJ4m1W z7Lq;+CGlKhj`^7Nx2JVlE+ODlAmaeSEaYZ4;l!5a3#%Do!JeN&x-fJrOE-GE(keF@ z86Lg)b#}ri`_hu6&vE%Wg5H52R^U@ZBNE%4)OYd|yGvI5O%uP;I8zH8QoQXlu**^c>0J#gAp7QPUn z7Vy^)Bhxku%Za23L_e049Aw&tq?v&>+l%ROw`kcD9!OM>ZzyBi6zF#SYa+X>p-yWP zbmtq4$-9K=#5{BShIXTA^)HxTI#wD^AeB=gOtepDHj6K30(B|%Oh|hWfhlsTPuG-f zCxAVC#im(Z21hGy#CxB{ekbZ)WIX%GOa?`RI%_Z+~st z)&jPHeeuTgWMf|H%+tE%F(rOe+Z#3Qefa|=3LYX&r3Levkhm^cet9I(Js};Crl1Iw z8j=cowb4oZqXCUGM`Odi=}l)p+sc)xE&%x>KGwMRNcX%s=?NsO_C+wJpMG{-R;Q90 znGn^@sDSH)wo|Dca-WPQ39JX{4J!8zGVw_fIlVy2RYV#M{6PTGvaDMppQv)#6)I_* zyvewmnE5=|U#K=CI2|`7NZo47=RlP@FR=`gm85kif`v?$KwJC)Jgco%|ABb#&Qt02 zv8Q%flYL4Zn3r+k#4=R6S8T)f{C~F^oGKx&#hS+fw}`JVL#$n)oIcXes53?r{~RD3^9!?Z(AD;iBT-z~s;{55J0|dyI0e!#+^SjHN%M2v_ zVMMD@zhv7(4BWiB=r%XSFN-p%bh!loD|yS;{MF-R^SmB}Dp&ZX|C67f4DJE`9}>q2 zkf(Y005L$$zr<|p&1)qa7B`6$s)T^kmxwifE>hBTQ&}Ebn5|qt=nAJ4hO{w_7t10% z)nq7cTa9iF!;&Bv`+DVgia;V(E`+&WvKdDUr<%Ibi5BRVAJLO#m}YN#3xy@HhIg|M zw27j*PKJKhZ~EM}k%pd=zVn<1A!LA!;gAeEv2`JdoCmHK?G@wiuwkWhZ6zAoCX$k- zb;Z{@+b)>tX{)gSz^B-)$JmcsS}WDx2FLr?5@~L^*Gr=UCj-*01Hd5jf`YV<%<0-*ro@TocD4Bt~mrPtJAdeJdJUB zYtJ&+v#+CzQ8<*Wi?GG8LYB_5dGf=}en$o{!E6)Je#-t2jpu$>w;VguVvs-$aPY&s z94Em{cr7ChB~Nm9nC|7{Ty|rXBXY>j=Wa4YO)e3VcAe(QH(e+&cx1+wSA;smMuBzv6vf?~U%f_u+m+xZ;>7b65UpeT0 zj2LMUFU7qFl`vegX^XDT2(v>zDmUn5KCF#M`$JnjWWz}b6D&55@%)`lx$xU9(+%+^ zr#MA)sqiO>lURPSsey0PDC9g!tJC6YkihgNJl355&g;mg%`D!zI%q)~7V3Nmt(3dU zXh_+_ViT%B=jC;sj0j*5u(j2kPm0r|;im-r=OxV@F93?UOUqHyjFV-h{^#qPwO$2l zt1)bShov~n9Zf7suNy`x$8GGGW&%os#8kZGa>}NEH*u4ULMtiR`1@J#6FGhzIGQbM3O1|D z+gX!2CYxDYP^|nCr~AQ4hg;EX_`jta?4qQ5$vb69JF|=#Pt1J> zZr)YdWXiaz$?@nZK*=D#A8(@9S?alMPskrvKY9Fym_e(UwM8kK8}V{xH;ciYcJ12R z5SOwV=$A}~{i(#9HJ4kUb2-?S6w-~LH>|}A;?NNBN6t@-=n_ovKNH+n{BF_)V?DY(|RGYD^0KAyS}^0na!zr{R_ zSJ2r}ukoPbJ3VbGFpddXO}d1=H3e@I-C9tc^uP%-AW^ThDr;Eptb6};ui=eKs8G*% zv%z3u%Cf~X;5F?0}yZp002S& zP!j+EUjVRekl!l4j$e|4sQ6{1QYoaU>Z%5@4LU3MsYVr1P>G7K*PpIbqPv!>4x)Ed zQT4V>7ZLJX5yJrhqLDZw004(8?(N>z%G{P&5@G?*0BJ0jbpQu^)LX|*lI*f-;w~LV zB$6mQ+o2hYYunff6V|BhVlNF)fW}#7We6c@qin4WFMwx+VTAZU01yBG0031pKm+~0 zfs05G)VLZ>Olpk@{X72te+EgQ@_C+_wiPy~2d1ja<*Vu?p=wsNiMY8QSnOpK0`Q2V z=;aax^c^wf=_7@d2Vb2E6-5BDcvNto&dOUAi1Qah+fmXfH1K6g7FPjBxjapYXRKRmk`4?*l1p7ai43GgXX_d8GSX`cq(`aEl%x*d zN8qoX9WRzLKXCA+^Z}C^E`dZ^z`W}Ok^?nca2lQ{YC7Sb!Ps>(oJ-xocfs5CTaqw* zR*jETCZ?Sb7zK6W!p_%7;CTsq$8PnRJ<&=dr`AO_Lz-NZC1|q5^QB*4L`mqhEcyU~ z+L9`+A6+yC_V>pox`;Krh+Dtd(kpyh(Hi|w+#uu~{k#q<`+YZ#Nvdp|ikRpjR=S5I zh%zhD!z)_1zM*V+vJ#(OxEpAd`p^U|UrXo^zvT7f0Y?iIYW?eej5pHiF5y1g-l7^O z?lzHrU8!Je^sA8GAz!p$H1rS`=xL0CSb|~Ri5$>LJCn|x=I(=!%##@&DdmCHhywC% zl^cZowXY1hBoz1EA)^r0tIxdeCcOobi;dFGJ z8#FALCuyO{>6)YSP4U^Al;!=cGDbH-E+pO{4XIij@@Io*sHKkMq=V*-gOK#;5_iRo z4W_DzJFfGM;)g5CEfN!#E1RXfpS=xob?VB9qXcgqOpxu?-pe+%*wf%3*N>Yu9biaq zqplvlmSct*st#$%xR)wqnihNd-@hpx+CrV(cW@!VrSAh)X`b!+V}r}f9{M|xMVkel zvO^{FnQAaO==!;iOCqBx_*Go+I=*&%Y(GMefoNQdz1QLJz=N@_;-A#mG7?-#OEDgX{3e?gXE?@mZu5Uo++y=)uP9*iZy(LsL`i7t+S zccGPrdZG)_awrpnWa=%*j6)*%yv!B1Z56!2lfFezC0ViS}&q`II-=|tvpY|$qR*oQXxh1>ya$@+i% zM_;4ndhN288`~Ifr!VY@5R<+TW@RxYXUT}G6(e`DlEs6~WS7;BUvJ?cZunHs z36kYG-K=q2l~@XCF6m2zXV#0!%A~m`;6JP}VK;7^R;4j1yXJ`soR$KF8Bv#V8DV^M zw&@jlTm`ZE2TbVCw~<|^e-`4FbROGCFvOa)jfBzNd~jY$&dY^;I;Z7{I40W@6UsvG zxTEnTt4sPQ^={#2wVE}YWVa74l1fRM3dOMsmaXF!WUT8^>4ZW!cvu(K#+F`6IlLHd zuvbc~qm1!kiP$by;;hTbO(~)313Vu72&Ya2f-8J=et6na5nO&A8%Mj>wG0C z1;CRLq=Q$y5?$#aioDt6I+&YPlqm+jPf(d}Wd8`-a=`CEOu@G#*H;nGB?RDcZ;;nD z!mgF2mfA}lWq=~E47BoiAdK6`EC3SW;b4y|gGi)n*8aFIvHL?VE7rUDT7c%kB!bWy zf=do|6yS54LD<;72ayGg1TM^X2U83VB3SDIB?DFlxT0k4up8h$?B3L_zs*6*fd5eZ zpfZEC2r{B*AT({`VZ&UpP_75}V;|$%1&*>i42mfzz`ziKNFK{KfPdEp-AUV}wJQb5 z6>CHL`<0X(v3&?CN^mNIgw}8@z_w)VkLw)!0l?WA1v(V;MgWoa@yJaeCa}*nQ8Rq{`kj&2;L{gq%X0|q>k#%x66R%Co`Qt* ztiwykK1@67lcx^pz=!1ZVdHEPj;&~bJgB?;5guy!_K@ZFFT|ifPSSECNGf5Z77?Vz z=0n8#{$seJhyaC$+4+oA(nTEBh6t0aUo_ix!?a!MN?!^}y7Nd_(;OhjS^>DY$%1sk zZz|Yl>M-$vgG%(AS=T!8(jm8({kygYch8|?iGqHw-OJrGHi6O;hP^%1Y5sL0A{v8jln`$CS(A_eb;OY6+jEkk*^em!M~uLnFSbM@%ATJstz~syRS{nc3y#?G zXORrhcaah^{%<+?R^t}4o!12)mqk!7Ndbk41kH2~3q#4_&U4KTUdl(NjDO2#B)i{h z0)2<wAY+RTH^2Q#HNa`lAW#Xi_XRt!#kH|hJ;M;3kLoyf zi%!KC9bFn(-}?p3?s!K<+7cevthpu+eXpN!*1w#dEmZ2h_+56tdm+^dnYhow$(NFG zS2Z$7VtX|*_YI}}^GFwFM^lB=u zAPf75yPrAHFz9AkI5tFlx|RqZhk{+BCJVE&fS7c*AArkWH1nLZ5fSWG*>fP&hjrzv zY*y$~x?PkxmNfy&IuuJ3oAP{?3HS7uIZ+x?zk4|mfk7DdOy91dnLXZHQ zHeoU@0ZxMabw&c6J0Dzzk7OUqGGHBLtM)crw0MHO zFB5k)I?+2_MrXUsLsjb}X>g^Nv;?Q5<;1j&5eD}_pC6({-)i)ydh)f}DCOlhhxI$c z^bP8fUWz84hP%&98Z2)Sj8;93ocX@75t@HEcVL?wkKGK{81_a?&xf4 zJ4hnk3DA+d#JyN9GNH|h328{12trcb>(j&w_YFr_$>UcZp%HcxjW9;h)YIQrT>&(QyNGj-%n~a#ZK7GmV2RI=tPm+yZ9^)rj{$ZY%LA9$FYAMz6|2ZtZ)k4uQ#?&;Y?~tQW=})9<{dwHrtwG{W;MH#UH$Gz`CCk4=%v8>=MP>QT z6)rQcCu>Uk1e#nt9Rb3s@VyoC~8qzr-GNmh{U?CV~mn%)>1_$>lLZ) zauALfm0xy~+C{-jFW+t#L=IkKMqGEV%C{sfdfnYC>~wr@V2on*@5eUYc-=8CeAhnb zzVqJmYY?RxG6vlu=Ixdj*C-Mc((4tN$^cC&B=_q<&^LTmr)P7TA#i@Rz|fntL%$-n z94l~Nbe^g9X^Y*jHSJoQoMx$ZUQ)yz>5lnsIzW&LHiYR(agjLZN8+ zlux)489e#FzaUS%XVukb6#@+m`F9mzy7 zag%!(v2Wb$4EE;_IO@uMmsDeIY2H1(lj6;$7TrM+u4!vG?>8fEk5Xnh8LGQnX&G6T z4Js}As<;wjarjZkx+pU4jNbFwB&pMYoFA;)4ZzI0Lt*W*9R1mK;*b&Cm$OdB+a91h z@_!tIZlO@ksQDC`ewtaf>Cw-_uhyf#+bENwnTOCwNwY~L?@JK$b=c+CSSyRp%h6LxR7 zoueEkIVqbcD3JD)bO2HY4}sjSBgU5G8TV4g`9F5*v5r=>4Ag+SJff#B04J6{S6~Ws zmnjYv-I1_tv1KD}YdQ0mGop#(%tj9*ampHxF3GksBl{tXmkA-`{xy->65#L({5Tq! zA=&yPVAzxjk}H;?bM| z+@w2J2!TLf#JBk&GVgmQ?Y|0}8SLy2)^x}VCV6C$lZS2Chfph3Xj7%Nym1IgA0EGC|4qYa^nW zBkK5_&Y3cm6L**?;Q}=g^i1gdP)rY-cY6BCJ#w&niJCD7{!dvICn|whlw>UKg)285 zgfB=zvw&X@W(s3 z#Mc)U2t`T8%j?|hSoN!t*3RM)238Q^s-WB2P}FCQ%G+Qm8Fe^pQLRB9WSFrsD|d

    NVDM9$EPPI;+qm7ocRDM?l7$)Lki%&hCcW!d#F9s91f<4pNf9;~R zr&dx;xWZ--u6o!4e+zcSTIzI28Xt8q(Fiv#X(>1xqljF{mYV>fh@@Ba5ONjU5*YSU z21f&N(P3y=avd)p^;{ClZ%c&62IgYtmA^%qhJxT%I)hnH(%k+YW0nI5z{76Mpq6#>lY*Qf9eVPa zP;}Ur3Voq4*UVk0mXwP@ei`c5R*!R7Yi_ruJzA!igu|Sgb#6Hm+aP(RdC30~)Z}!m zl+-d67!4-5iV<8OJ6VsYB;J*EvlP7`e; z^mQ|aI~kwpsEF*&|#G@ zaYwOl+zvz}tI{fX>T{Qg+voX>_!Q?%uA?~VagJi6Uf@9F$`&_>m^RKmmXDj}S)Sd8 z&E?5@Le}FHEBXS>5?p5V+a<*YUC+5dPJkOxA~cD0{yYUD*|iG)OL~itNN5^u&%5cH zelPU7%fLN@BLK;tJGm+Jy;$YhjE`G#C~rx16P2$L5|KNdvRcRE*STPPT%I>O4jqEH zTY8O>Uy*K%I1^5IXKj~JVRa)V93Rqn3T;cq9dFNmsL@Rr+{QoF#N184jv`8`XhvRv z4mW0+oiq|X&^E*8AVZaa$a9XC~EhTl+zzPdQ2cGZ+HD8f4RrH!hV@`LPd`!HYp@(td;f-$=2g_sxw) zbu7%4Deh934`oLw=$STYn~lC3Lr-~ko#vnf9YzlofnCPJn`!hR`^o7|ZC6LfQqMG3 zHp}vBX$$6j&fC*teJ88mb!F}l2e2#qZCFW^ZPCr={RmUF{+FTFPu#s!pTJ~n!a=i1~NM>>E8oeiC^6Fj*ztzHM%w*N?mrM5C@JQ z$GU0s;)jK4ILzSC)aBP+z)KYITK9@oR(|4Ho$!-;WYNtdv{882)m%KJqt8(@UD}2E zp`nX)<_fUKt;T9rjg(k6Hl9oZ+1}yJdERx3emi|PNI4$-(2o0`An2RQH87X$FJFTR z^V2Q46lIj^xpY!Y!)nRJDI%yFnk*#;Yg8lSNfROdO3iSN&e zkKi^Rt9dxufqpDn)!Gv4C?Xm+d5!7$4>Oenmw=Soxag4Ra=l@@Ax&-P-m3OwIC-gBB4$0DryQsf0+(@H@Nm|-UY?~* zAqO1(_O8a{X}9Ux$fOSF&gg{6)j|tz-8HVu3pWXt7KC0>|;6$ zME@UV>y&O;{-j+WTy-MDpPMfx9zjCN^-Xg(0#2{vYUSM1jFPQ}^O~S?te|viyjkCN zxIWv2z0hYu9^4%?y$wF$_~`sBvuf5)(gUKB`d{s0mg_Z8GLgPosPn{`#V7Kfl+EBz+Z%3BieD z8E2~MNR(#Rmq7n1QI9l#*sdt|^pX3teC$#dUj#5ARC7Q=s4jtKZW9Rqg;DGL3E1bs1YxIkISeL!z8M0H!s4 zSLpqd5ZG4e7{v7IrFnii@0n;(c9AlHNnK^hb>f7Gce4yg=oA01G7(z59j9rPqU}Y- z2=r$3KltI?#O;Bb*!|y0g;t&E>LOE0i0`*7t>Wk90m{5Rnp5(u>-XN5@Mp^tYFwPk z&%*l&a85Qk)#(bR5Z0o~A`0}4sN~WIGUr?QZ(Bh{6%k0S3H#o2`U|opJ|r`ej?owW z@#ZqZ-<0TP7M^7{hfc&ain0DyXrqO+{54d60BrTE3&)*` zM_1E2^TR{#$ zM>w8`fY=yU0Hxn6(nt$>Rsmj#2!UpQ@HRNn>*-nku&JVXvJ&vM8F$W zu1It!MyX=L=$E9iG^I(;Z-Y-&SUD|~t#tiRH{VyDLj@5P+Km%KLk|Nu+tfu71Zh79 z$T0r12CfV)1ey~MRE@YdE~@^A*PH-ilu20Q1S!Y56#o5-Y)}yBqtc*QJu>kq<9x5f zI1nEBSh{fzH`NaG1eQXKNLgR5Mz01aB5?8lt|Wnj&p3XpS}!8SgS%G9QCpd zTSZ@>Kd5wowg5+$@itFR%nbm~n;rsjnSKyu(rzi-v(3^pzyT4nF>sr!2#^a~*gdx~ z(O`=gieA+m!O;ZFgB2tL-xTEZg$=#qjV{-{SmszV;{+O5Jez6?OZP>0pfF}Gdv^yw zBinufcgxf6y(bV>KF3${D<;j*W(1rW3;Y-|HY+;xcD2V&n3(Zy1Gfj6V3ic6-{aC$ zzh?3?lfecy+`;o111NiW3CO5&I5~o=!~4*yDy9X?C}A z!JXN^ySUQ?jZlq_?RJq`!q7QN+6ZLeYePMojlb_UOzLoR9HB%2vx>u&aD{VdTe$m? zY(mKqnWd-Eg}{bE?WL%TGsF2(qaLu0(k*Fd5VUieH3;3RHto(5g}$r-j|{>R?z-m_ zVx4+PaF;E?Gr^)|Ue6f{)~i|B#>rcO8`=wen9R)~+=6%4a%Ma3Ca);NXlUHo9Su_A z`zH&|qisu7?>gLN+;<*~(7kUs_v0{>0}Z%@+z(c90SWtqCg<5b@cNRL>)T8OUMXXB za^Ig4f2)SHcfo}KU=}q9Yqp)CH*dHONf_Y0ZEy!@U{fD(x80sZC)@$HyzOw^+L8YR1l-jUIOjQw>{LrDqkB_hJ!9|80TKC< z|GA0!5ZY^|g-}n^(EU}DQ#%H;*w!fY2MGTUt!K=zUS( z)BS%ltKs#Xrm$x2Q&7iQfhM2K^=#LI{ZS^#IKNXrGw(D8829Srz0Zc4aB}!|mir(~ zhUU88m>_5`E&NNUceWrL%1}SIzOH+nPyqIgm!J0a#%68d(VS22amY3~`=$5On=O1@ ziBaYWR1U8>7T@R}3=FkJ8{DA3#(9k}1HAsUl_8bWitB4LUEiBt$@#DBlb!pfhPY*) zcJl?J<5op03kw@()>~uIO%;**{bz*V7}!%rX$EN-3{B?VY?{95faD$T^x+{p0u3Pq zoAvli?CzvZ6KwB&^qxHI^v<`3#G`xWr>JSKBMgrD*;SV2HQ^^*@9^sc{?oMyw!~Uc z!H*7N_}u{lObuK+vs$wJBJw=L<`P@$#82@*Xs}bvQrk5DS1o9(G;oAHS^w{MMruWl#9Ddu`%I)Zg{y3${LDjsUcO5;&OO z&D25QY!QjU@d<>2|CHP zLr|Or50oyA^=?g5ibLGY(JI>A411Vq#@20YZ1=)Y^AC;f$>A{4e=$RlS39q*8_8$| zxn|)ZbEshe1GC)Tn8Ac!)N%Z+p=LG@ROkQJE%MM5+2o}7%*NG~cj((XhM6E-VBEC` zl;!K7Kw*$%c2-oYu4Vmn1CiNU7TjoW1svoU=-?>ezgR%RF=>XcDwqFRKN0OuG!s4= zBd4+1(f^mK9@^BmLXxU~dqkZ4gfN2nItCv0%>U{=ZJcZVKcnvH%7^!Lbb_)M_7~SM zU;;c|4P_SiK1*=x#igytca|5J{OA3PZ#b{33tY7SIYNf!f%$H&@ar}h{SWE?8atRH zMkueHLkaIonda|BXsY$WU$cD1W3_uQzYjES{ek9e+1}6h4_gOmmi)eL^BWWaZ$NhG z=7^V=eXGD+*TU3U--hcGiLc*$BdU`0Q^*ugaaz^CZjZGPHMZAdrtoD6PpU=OejB_- zK=575Fb?%e?4yz)5sUq_@G_#C{z1BUQ3QgY9; zGcEEkmtK;q4ML6oyNB%qYFQKS@B4hr09rw6T?S9Y07>j)6UcjHUafIvt zo@Ns|z}ptHE&_N|4;Zt|t8Z)IQl%t38TeIyT8NIYhA|p zhE4a(5@UNE+ZTOKv#npR3u~?9qMr~5W6Nrc^C$SjYxEC#*+qZj6dgk$+W=j{z|&qp zw4bYgIGMAgjMQ+6`DZ2-_sCIiIB2kcPpH5su{jxVEopgHf3H2Bw@Lige+g|5l`Vhy za95xXRlPEUuz!}A)U)!;%yXi5z^bf2@9A6Jr0N#?5#X+oR{t5ps&1&JsI1$oS}kJG z8l6{%zEeH-#;R8sdthII9kjvvC_tZu)fpRSHiooRyRZZMj*F_V(3i|)zyQ79Hpj4* zv0MJXHl}^NO_VPU@!lK)A((Hh`rTS9@T@k%pZ%~w@ij9!c!B=;Sf`*N0b)|003-ka z000O82w*e*R%QSj$;jHD1~!BN;?+5OfD{|S*nBD)tPy}l2u3ma!F>2hqG)_U(;rVo z3X(Gv)$>*g`hEC31s1OTk82+Y&L&g06tz31n+$IF&|rrxBDU@1Pf)3M@BORHlUU?Kmj z{QsZObITqaKX>Lsc~1wP+oKeKMxJUSK!|vqLdP|1=>h?6>72y0L+a{)YD|4Xj6+L4 zPG*oGjGXB$ftexZIgXm;lQIV&6-&T%`y$B`FII*o6gxaZMRMQS?fyv6o=_rC&c~mN zi|5Xv$B8BYOjoimtv>|T4NBI69oN)rqAZkn{Jvf1>l^bYPy!c#90ssYX5R^euu;QL zvjq2l6S)<){u~|jn11?4{2Uq3%K5b7Uk5P=dQ*i1DiENZzhUdueTG!(N0yAtJou5H zX%Hy*bW6`DyU#!?Mjlg0vX9&QuWSQ&WzFJ#Kl{Gi#qT(L-Dmwz z{ZtM z;$awN!3REJm#M$TIf7g#=(+aH)GeTk3g4cZ2X#cPD~8s$ zQTTBO?xgnsj_l;mFAD`sP7=VycuXMGw#NXk$P*P)3oj1Kc_~!T&aP@KTJL#X_~tDP zg&`Jo|r&yDd5z|9#jDg&2zUxg^UZaYT3wP-0!O{eiC|=NL5$V&=hYX2>UJ*q*)c5 z&akv8zE*$u2P=L)5=!X~m8&G?nsPz~7;%`UH+T#kJ2 z$Ac*hpV3f8*ZB2W&287QbET5!J72$)KWI%OvnOJ$BX;0ug?I{A5`M%rl6_4?n^gG! zz6xK_;WmX8Z((E-ISA%<^C*-2vkYpEBu+a3R?{=g_gGr0S$`z_|AQ zJ{3)vZulx}aSr=A2M{%me{M#AO57+6nAHD-Sp)e^nMh|;Mj}xVQF>C56IQdhl7y9j zF8kTUTK>O+`{`u$1fPyhbGlY{&wRhA#V9{1BKS$c6jxfWVRMg0`>!zpRyS@ZwllL`z`AEgnTD4vC=)-7giYIN?0`9LM5)eJ_e3ZXeD8@o|l zo*`0DDbgr5v4=V_;-G*|Gf_NJY*FV@+WbNB$MY&`$bPyal@tXOI|XMZ)D$Ya%vjdr zxo%mpua_yF`JTQ^}FyO`FF8W5xr`Wu`1BP~W|p(x1tq568htUJyr^JjA|8zKunl>kGf z)}~d6{M4$|fU@ZRZ~Wf5%k=NR=7;>ozZ@L4+A+p>KgISnzq~Au7By(*wBG}tg*-eu zGE|64qzk%Nm^_+c9dc#?+AfBP>P;2|$I-fII6{4EW&lk#EXs4D_astA7IZ8cz8S4o z9;4j?6bsTT9_@wWddQ$#W{VYADJDu3JxF#lW@qX`LzIU{6L`ks$UU0GlPlM#E|a1I ztEQV}e9-R?rw5}#I?8pEb)gN<4QD1C%T6u7YX2h z5B%;o{yl#_A(_9uKkxC(KKE}nRx_xcgJ8<9s-PQ^!J!+&Upr%fj$yRs7v&wx@Lkwp zvZW#Ew&mydCWfSC|1X0%($gApdvAGb9_-6G1}DnH=*Aa+IqQ!Jl32xc%mZ-RppgKc zCdDJM{;p4UUfCY?n5Ryeoj}p3A3R^tjT2&>5ge#;hGV9Xcopqp)1*I7$7Z^9QAJVbn{K^DG;T$jcz2JEkp+^BT0}A za6m5{abiHMPwQQXb)cE&yY=Exe|FRM`=1-$6s|3l$3z9CP&2`oGKxkbJmq2CTi7NQ z_3kG$G+^IOKIGv-ye@Jan?usrf^wz+?KhCActSQ9p_}I2rvT$ZvWS==p_kXWgP_rQ zTHP|uP?qp5c%70K{RrF@W4VD`zLyq!Kj_55z#|JLNtmB2>tr;;caM;T+LPx(s=1q# zJ*D<6z({MKA8o1N6$Fv~rksDHU6g1dfsJ2krs#4{{C8@IS!WEPPR7h^whX)2xqO5t zrVWQp7bD5Pk6*4FMw)ND+g^&Sm!ALyn}VDmB!i&tCGXRKa>Hr6YJE`#T<-lB0Nua~ z)#+DXyf@f_ARKn_m&K_5Ixl0n4I?!AB&oVh`{Dad8G1z{G(*LCcNT}AMjVK8$#$QblutUILe% z&!tA0YBQ~xNX;WX?rga|KNEP^+(uuUrFT~;b%<}*JofykwrD`pL)@k&9rX<+q*u#| z~^|sC| zHpvYfd~466;oBD+D8fp4c}%AviW4enp% z_56bxZMrtT@WR_ZRWL7lIGyr?KgV6%QEL0F^R=dO~CS>~* zk1@~(M4b*_Ew4*(bi}VMnr9Yf9H78N4t^PPZcFmYY{!kCAhw^puF79)vFyqrZA9t9 z2R4V$dAk*q(h$~<%fH~31wilBF&@5{1n;N3J2e6q9X?u#DU@B6>pzTDRDGWz=&_uE`W>%9{H z_dV0c+kbgK4}Kmn$z=vRf}l$3H<1Q!=9=+Lj6(czNbh>RjocQ)g1e#SH?wOPa0C)t zVw&r(hsimV5CO!R40#cj>0HGf6x$T#CyT|;MMI3C0?o9~y~Xin?e4cG-Ymy~w>Pf8 z9rGHM*WHg|Od9R3mm3&#kXv(!$b_m-yQ(@2Wmr*7ZLZn#&3@A82#%(3d#GMx-SD*V z^Fp9%ZSN(*Q;xj*U8;^#xl}6O-d+rwi*q|l>dH!jSwB165M$L3$1#a2-naBdur|QW z%_qZr9J_|YBrdHx1yAouQ_=@@Q@q%gMJj^_>h+iRtZd3jm+!}mF@HI&;*rhlj?wKQ zPzJ@JIL-#N7v$H#ZOjau(@x#tYO%0Z2*CY+v_3}Y>Qr>u4oWW3OJci8LX^7sOIm9jQ{ ztVU;TiYOWG^y382`)UWj%xCxRtukn{u>t;NfLTaysr-_M7vg2xt}~PVCm$OlRi?eG zyTjq;U-o)PFHN*N;tLE^U-~qDuyo^HdEkj>HL=c$!x)lBWJYsl8AG7n?ciH#%AK{# zxB+N)pxu=*(ZG1PiDR_8pqZvPX$M`tOxpmrt?f!@COTK6>tF=gga)^>g1mkYghRh; z?eikPm0w3}ZQBBx+OFdL#hf+C@hknKan<6ik(NocuSlYHzqaQx?X2CI z!!|MOj&HOX`4DGV-VN%3AkdaJVuUyMe=YTH1!_%&<$hIvX6krGTEM4iR*Fgbj3W$U zd!yqbEPA^wwA7cwVw;nTn2{u{j-lYiGR9lDK2JV4g9i?f+P+^Ow9B#a8wA`u2r_GX z3t~-HK^7@7B&!I6eBC&_&f(`R_}<0kfgTt!;%||e=X#j*4wOL_O&ZI;Yw-Ud*7Ze= zMCzhP>(IZF=8{rll-R@{MR`!I^;j*N-hq+K%$_{{yPI@{|F-q8Jp9*wi!1jnnO?JI zk55u--fbVJAolhDL^D=9vo=wUWPxvRNwO`fVy6Qop$MYa>BkCCk{`_;xV~8$*8a`! z_P|hTfwB{P@-upE2c{^6re2)IkQpcn!i}TWdRf!{onuhh7bmXv3~FthPyQd4zWLAd zRz0Yso?N>enJnQ#E{od9;C?8N7B6dG)K59ZmKGpg?ITD=uC$>)-5Kkz9#CKYY@csi z`s--4zEXwCt4gBC%lZmApvEA-IRbY0Ik072)BuO3<={0C99eV$Hfp_$#l35Az>1B? zvbm`oh_jA?BAfq$>U%sSp3Gp4qI6zi;#*FG7H>@b5^oqaC7!hX+4Q3^NMImg;2n%j zU;`XRfryUQrxE4SIg;juWpHGwPRtZ_Xy*wn-L}LhvbQ$;mPd#Uq#q8LLoMhKxRcs2 z7ZFkqInp|)QM13!O(Q{}_SsvKL4*e0J*bc`+`PMvFmcI%@?HKI8=`zb&8y`?L_>DUnH`h`6J zS`1=rt|6arf8Ya0r_dd+VzW)7F5qK@eKc{}z2ULyug*(nJxNsd3d{iL+qc_DMQwRI*M90`N>eBGGxi^NrQm0Z7%9ZL#>x%ojq^p3DvremMBLca6CT<>m3e6EqO_1KZvf6H&B+c zMq^Jy?1{c1N6q!Gi{P!xKk9~AK4H6n4^CyN9YKPtPmU*<0)*JhoxzTpyreC68dLo4 zm?zIO7k~A-n*&lO@l?`a#HvZ{b?kN^k0?fam$vCVrHP%wqlb{2(RcGtS~y@3GYP>R zIkQ7*7A29LGktlqs6IIgwi|v7oI1kQI)>E)yV*B7wq&w#j#1qfq zU2d$V1i^#hp*+&_$M|`e2Irr<8nBo5O|qs?47HC+V-88u6K~m_oTq1A&E#@$h^q=^ z2tk}Rhhe*7e`vOW9ir032w9H0=hil3UQ7XAOKXJ~f%t2!n)z+mLDf z`4656Y`E#a^`zkE+P*+R2X&zZ7^x~u8=ACz{AtX3{7h_y&z@|XZ#-;MW0lxfWZP0o z^`p~Acw|jA3FYrVsvEr|W(tot+SA_nJu>;;bO&IJ<=^EKnpgL+s)!r}F6<%G?Zas;>258Gy}y7BHDUNd7O!J%{RkqSJK zUB334K7+oRNgV)1K)S!@n2>ANIrpZCj04Z-yTW9C`z;Jet_mxiIs0I9Wpq@-I#m&= z=R{>y+w*ud*X$KCKCkiHhVe#t^`ec3%z2}PB)0Ab!WN|kehTlLr+GhFPh;XOqdwbP zWG!5YyOOQ9>QXlK3>u7%dhIyvhG|2P3b=fDrArtCjCgvevDoa5f4!EyBNTi&-^d5qASBqx=o)@1&xE9n9bfL zuzdNKmZV*R@c-0}yXW{{sBMhggyB$L7 zkpReONk=06J))et(2*3?C{@zgBmO4$vHtS3{YPsta@g}(de1WmUZOT>AW%Bhd`IvJ z%El@#>u*8b{19X6P=QkfWCgpcy%6gQ?CX_Dj;Sso@iVLJRXqzg;|z=z;S&xi^DBw8 z@&L_#9uwWJv}>{Ygj&kr5++4?mdG5BsrV+T2y8nH{5jPwR|rBrIVKXc6!1(fc_4Nw zxdNjRJTwd*nPxLk<|y|!XMBoVTqJY3z~I8%GGa(ZJA+Iq^9Ozp*NK>o$3c7&0VcxHm1QlH576%E_X;UVe)qX%nEN>9OQy1;}9n)wxZ(S6Ih<7r)z5B$! z@pb!q`&Pr^+==YX{pu*iU;VRw&oP@uqJ~Ld1Ub=-fp_YhN zHC}oM>#qFuJr^7_*gP>5Ahewnv^+F7nvF*9_d9A9#gUGw!kpbe*SO6!fgbJPQV&CT z68!=iFN}tuf;Dw^`BDrdU1ga3@qBYZ4WSl3c1XVnn;vFlF4}kwbPBbV06S1G*f|+1p2-u zM=jIEnE7Lg41^!rj$1e#V#+xYb(J({L!x7SU%xiP zFcg|P5~f_@__lMhBZlr@ve{1{Pxat8|2slxf&!mf7X;>})%UFq5~u0rP$1GYSt;L$f8C zi7v%Q3Sn=5Bqn&>rsV1j(mAhE)%3mkZ}^(!v6D}33P zvXAL^zx+O!q48+zt$17qot$k%;OvCHc*rOd!gT#Xcq1*lTv;-C(A=~xr}X@WQn|?B z@Qis|OP#E@Wb$%+%T?Y&^vAwD>4B(fY*nt$NlThi!`uQ2{_!CUZUdU!g4SwBgj%*} zPRYS28_dDF>%ewyeQob;K%hzKVQ?@az`0V$aL2h_4VE27ZD2;aNw?{(WZznRxwdmO zEs25u-jz)$5wHcjW}Zq~oVHB`be48mKm41kmL!~XvbClv*tcTe^$~1`Ksd}Y-*A*_&=M?KV$B88IdFb<|~PlJ(*LQQ-fKX zy)tQ6Ci)y_F_0&Pd0f-hQqUn4pX%>;lm|*N^{F6X#5m?%{5nuhTH;IT8l?v%w=nHE z4@NoN4bBqRO|)xly4P<$O{pJ0&lXFMemL65m1IV-dAEP$=I~rttIqxiq(+Po=CYcW zhR>DZ_~>1E49du;qMuJT!|c29B)!_5gRhaqxjokI+An<>+@hC6FV>yz#+r+1>4^Xn zJwy%=P0RTDZlR1YWCWd(H3fJ)y@O083G+ObGm!s#%+JJ_{v`b}SC|M+UJ@b8^PSo= zVe^-Iy*R9uyJXO{NvSQtWB*nd8^83!O0u}pAn=BQC>lMP$h^SoC0DL;e20#^G0<2` zOPGE+?iiVZvVCmZp&JT{xXc5>-?ttMEMJkd{bxT#Y`GnB&||NbU-al!67t2TC%{tX zK=39~@GNIeLOF~}CwH`vhzRecMPjFn8Vl7QLkWBUi{tl#30Tle9gDZR05qm=ieR+; zN4H7!?#q?6_|RoJ9*e0Ns9@X#G@%~|wv%!P5rm9IA)UO8uAf#15IUK#S3oxd^XUF( zy=NyZuJDCqWdRTjJAwjM3VP%T+}`X=So|A4smPd=X|a|>jwG@CBaGklc2n!UeIs43 zcRGOGRBp^R{UYGG8JFuxbULxJqD1yU&u5#uN$ezzLr^83IqVK(C&)K-^u8k^oC5>{ zKX@OCAy4F*Q*lT;2Jy4O@LR||xaPdL?sf+?sXALBA&{Db!Kt(9GN{~;G;6Vt`^hBN zZc^wCXP3Zwkx}cfAYRex$6-11*{3m5*X>25TEYqbugY-1+tKwO+@M6f{Zpyg zoHY~;oXydLb7q-&dS3bL1~!+-xK_7&ah8XlE- z?LcTeiSwDujg>Nt&PM9yxegmp5n6l03ys%zF1FUJM{L};+s}9PL;#xj*8bB_HbC1U zo6WrHzLYKw(Ywnddv zsS*9J6d3m`m-R{IvYl4`S+AcypV;no{z|_4u zZ8z}In+7+FOIa-az`unCYnI1lQ$x|Ty*Il!8s-^1I9}vvcuBRjMWowBpF_LZzWQe# z156&CGH}UU$_!XnPVde(03l?MZ^xc_IgCYZJv}<=#$^0w2?Hr&B)hPU(lU-H*RHSTRFYP?_NzxdF$Jl zube|G+~jI3m{aGv$W`p{4(VliffiNVVjMWdPw$yJsKrQz(D`xe`a z)t}L^Tw{3bGl8wuls!0^Gih^XBI1(AV_b9=lbNk^{)FeYeY}EiYnta{b5m%N8|@<< z(nW&X`8%t++1A@xx;+Sco|74AJ85u9`Qyt0cb;aKG7QxDj8^*Jvdkf%U`^nT97c!6 z;ANh7^#vEq9r0~oW}f9f@NoIsE5~cOa;m-LqI&j@;{w*`+>_JhzG^pa>NZ=FoUy)~ zyX}aydFh=h$BF;JpYTm}5nxEAC{tT&w8U z)tMSI@%NE92l$~e=qK{s85bX%vsXDQ_3oR`OZInCmA9tdCay!GfqH?kUSGr8w=dw; zdV9ueYzh7a9LOSyZG~oAw{nibHZ4jmT7H0;S;I#+%NH#-XFvPk8lI~|&-{B){x0 za)HebtvA{aHto9({iBHe-qgyPv|`VtBt;IB_RIwr2lm)lBS8ux$HKha@X43}F?{5n zOL8(kqe;WeJ>cukXL@pJuY3t-f{Xe>Z9#nfM=vo z)=YMnCBr&j@=?jvD`e|o9MbHTfG5xuaJd{TqS;k~v=$|3+HBqgU6@b=P!siz#1m$*eks*j&<9-hRxBq#C#`Nw_L4jZGEg9%XNiqL(Hsq@AFQ z3L?9|kld)J$y2FdF%jf$;^w2t<@wxNmgAuZYr*hvQHoJhQn(W)4x&iFi-?IP9=BWc zU!B56pwbk6PirM}yb4{UQ1qhyqQj*c71D+9igN{l#zklwhx|F<0*Wh2%reNrjdgT) zodoZ%ma59?u5`(X^ffow4Drl34<$6pE?gVn}X9^hX0i2tq z4pP<5NR=riAj^h1Qb6lUH-#&@alCoQ=Zw16f6w75B*AwlwM$?%ktdK-a6uM8s3)>_ zK(DAIHJSbPvd{}Vd{R2yidN{4%t<2|)&baggg9=Z$yG8L7_vxfCyR3)n2rRJCeHT) z>B`1Kko^o%+HSwmq?e2sI^=yVmGbUW)d_NXGX*u-tA{0*kKpsG$WumAT zau~9O3Or#s1;C+b2~-$KoN^%|9P$?yBgq|^@fzjDh& z_&je^T>r&MuCUul#B+lLE0clJq3%4!w-5iEchE;||dL`XY(3mY?&Y@@>y_-Tw zwMc~F*txSI!ik-vtR$hb9NME%nh5_n#=)vabks@DH=3kEf$owv^y#KTX9+jxNyTvR zLPjNvO$}^=p9HhobUY`OLrOkPiIK=8^PA5+H~N*#CGltmJp##BcVwZ)9wQ3_k4wFa z41b}>uv=7D*`Sq)VO0?(0*&n->Z_j>Zorj5SEU)-B#OOAnoJWausB&Uf13A|4i~aW zbJ<)M%#=&zb;;Z=X%-b+z@Dk*2^f6~f-t(f$+gcUGV;N722JuoP>Glo9BTX!y&jfS|( z5@7Q!+HQQQh|6h^W;(ACvZoXFjy`&9M zMx0Z`#4E=`eQN6voea}i*`U#Ruf3Be9PKo|06m{*j}Pkd9KCaZQ?<|f5m%O4@#n4+^_nIpEX=wB1v@QAbyG9pPM>7$g>Fpu>f0q*|TsX99(x+Hs^s2c$c)?YJXMp2gC#R?7B5t>|z1d-K6vKI6ZjMi_{sNRhETElw zI!A4G#P>@1hA)jtZ(`hfCaI9?r|GmxR`88aY}O>>_UMQ9DE#e9(IEY@6{=y>pc*w! zjLYYjN*-OX-et(iZ4Mdmiv?xu!5>CmesHgfPrqR4<|0oHj1RSLQCnh^t(^AX}q!2I&Hsxo@fp2aw zSD^4cS)mCrt!E6zdK&B1@jZB+uPeUjUSzfblL{4)dujsyo_Hsf0?M*}Pfd2RYDfu5 zXk7x>gE1v%bD?5J<&j0}G>4D?ADAa%2cw$|j$SI&{EcX*F&{KS0{#IMZDu6rY8cS)5eibZ5YZgzf_Oy< zHaX-e1j2Q;ygcI`*JrEqW1iTaG^t2om_>A?(1VGQM(GE35`-tD^icSJgeW^uVo`H& zH!Y=Ya0!Ni;mPEU8$pwAg!T@!3^84h=8%P5HCP&APx<0z&Y)YFW0 z75bEZ%g9uE)#VhZ6%XxDp**z%3Cd9Z0Tm1*uI)ZQ&pqp5lJ`LeZoQb=Nx5g7L?WB3 zJzFk66COM1W@1urY%WAY6eE$49#YAJOmRtvf4@qhWJdPuK2?hgs8oqgjV;`u^0Tb; zr@4y=fl9GsL~&;VS9=7)ObRMU^{x|~v9uZ|`it^rM%G(s?agQ^&8990&c#sr$1!TlgXTY1;WkXEJ#{ zB+tk+K{A9At7Fd0l=An7PkZYbO2HD$<<*yi-X$l2ra+3ggkZVO1;nSg?L;@WUAIjr z508Oq>>^@YcQk+u(Y!#9o72kYa;Ek?T5o5`4_n+2+%y<<q6^F;M3M6oZ8W$?Am z_!5L#6aKD_<<~j8^Yl=t5%-DNtAl>WU{sS#e}ag^QQq6Zpi1`@HC zZL^c!;4?#9C*O-Wf+@;@GWvi^+P-rGRr$L)!(h3Yr2B3)EbMteEC zLU|;76W(S|UqVp2P?Ys%xo{o%N|4?^+#!xsm>);FFZ1vl)53^+Us`1TCE^pdR+R3~ z$Hlx|Y~7syT92^>)w7EAu%%6+slD8N6%f?z^E~W)GRFhhDDIdOGhVjB}yK`nwiQ-G4 zcnmz$NzZzlVf|Y}k@v&@dWkVq1}u|n{+8Q=KG8?z-E`A@I|7GKgLA!^0b?Y&|8~ay z=kJCeE&CVtf7n^e7j8ZypCNYI zcyeOI&M)YrY})&^W4lR{9QRGb2fhb7TUnCcJDyW51g{ad{HQE}U1*$krhtax99vId zv2!_Jl1m0*GI;47V$&xlhZu<2<#B>x0;h|Y36TT#I*`jg4KgxGPnh@OZY zZDH<>lReDv+#^6a+eM%I2Pj|}NXO98=X{39xpNMjC3oNjPmbfEAEW4m4TG z)q4K*ZgU8o?uK;zW~Mzc%eKSg~JO3k-SSYF_5^ISYJ5jSQ81PxI1>Je7;CsLkRZ~{W;q# zVu_$^ZHuP%R4rdF=uv>eLGyrMz~rL*mTqF9WebsUPTqJ#>@n*+u_cs} z9NfAv5-BixDQ>EmnWBdH^g44Eq)ne30u=spM^MqCz^M@DR&AaZqjTf>%syvBl$f*L z-5KC3MrfjN3kThU7uVDpc1aC130K@Q8vERT3nRkNMtxV~83+vyl4~KFdC@n{n^GV< z;qYS@l^fW?`EGU+gOly?mJYXoy#s7vQ$_WjxW$=9IWbZT_RxLAltjInQfXeCBd_Rl zAV^3tx?AWo@h1*Ub1+_C@K$Arp*p+#Y1;dD$ecE(ly=#K$ZngN?BI?$2He=*Oy)9{ zSNj#FP)`2`d%MYD^B9S=-mdf67(JbTf-b|9GLO>xn*Ju42iRLP@hL;+jUVp?N{z`M zaLWZ3q69cpQy`X*P|OSM^K3?r?cWuQA4D%-@E&aqe?|XFu27n2 ztFeP#(3CtchPg5`jG%Wi+*G=~22;~iW;8=B`|G~mmWWCV?P_t`auyB@>-FRu-fiXH z@z>_xrm3My?viZ#P=DP?9XTuCoomF1?#UxCUM)#23{N8jb(HW^i8f@nk1yQZS*KFu z638NN4>y%S3T9!k$Lq0;%Un@Vk~{--GM?6U+b&6v0aM{}a2>kyZI6{)k$`x*fbTF4 zA`N9n1ex|@%nw7%71XK2!H$O)%HFK@mT3m$IFt9ZS%5joJPS+2>!bC1;EG^GNQc|jUr&a~H^1t{?{c1Z|t^;t442^>ftbOrJ34f|=Z*^KTY~PBf~q_pIea$)R}hPTA{q`~te#;$G5iXP1$3dp zUmaU%ML6f$JjD;dWqgFXwRdmabM&~vV9U973K(qO3X+64?Hk)E>EDp7?s8pUte8)< zdj>;L#i~KJ7)h#?XrZt@{=JCKdx6ds_HOhz=)6ysVVjxc$(^d^)a&mkA|SCxR>9Sd zb>}eshByT~1)doK<4h7Kn*yhH>~Avh0S;*pe^dqTqflo&s_wK3@J8(rLKA$!sBt5x z9TFumV&{b-&0upDiIyUmV7f~04#w*_Dj5{`nGb3H5|wD@YEw$OCA>^l<| z4Q5k~UqF}};r#^3SNgD_9>_AIKyE4(PO4aVt7=0{?a$6SQk;CMW0X#f!omj6oR_2R z)!7&*y0?Ye{y`j%GiXbbI@N$PS-{1tjyF`fl@=meiMgMd)D>*fbx@s9q<@f-MD7D$8)EDrxYyp~rSP1v^3(H_&WSI!*%0bJI~% z&!=pm3*pwa%dL+IUSUVLn12t2e>qK)ngo!!p zEot^YSOL{(+-}^?C1~-XmsLx*V^r24{UI}iJrcDC*d3YEZsGK$Ur{sECNc#*a=wYq zdbcs-P14Ju7@6Gj(9cwnR^57Rv2>fs%DzZTb)2HkA*l^S0P5>8QC}ZK6Q>cR&4;Fe z48utywG%WhOA#|P%opbfrL%}gqTNr$&J-lB*Lib6)(trgiathPmPb3&m`Wl*wwrQg zuEVUT@%D2w($Cny0QOZ|ai&S4csa#c*m*OoScPGlLS+NT9O!1ydw((TkBK5_@rXIO zW03q|NmWH+^nQ!d5Rd^i8ec_X64$N$D`Z~1v;%Avy`5}m;v){_k;`nn3*0of0Dv>o z_FA@ODFaj*RhRHqVSsctYR0|O^6?UiE3AUCcmwxZR%lpRSpC55^YAW(yW3j}jh1xn zGkDEqytsXr7gcG17LYIpuf|18D;9RRYrz}%-J8yMxmNMAaE0uu?XiMyRfoI=uVa?c zUmgHk`4-K6ShWJUh4&#$JTU=7JRJAG+9dKtEjF(*(+}2z4EQYHziU$U;jD=zSH=3_ zKAeS$*q~*ytrgZsXVIl^fbPaZX0&6~^sW-iXH_hdvkC^=uJqq0rNL(mcP+fqD42L& zoL!^?wf9Q$HuFy-?C0kYpHuZCrYB_C0P!-EjJ^!16c-1P#jgQ!Yg@%PAHO%@4y zn-*aT75d1g!3fl6wI$|!M-94gj%$^sg-}*%E{&~iOR+Q$r+j{CU*B@4re1-+4aE*s zkbSW#qC(+2;ckViT5+&NzOl4gWg*cFOMV5|uzy}E;X=;2z0f6j)~Z&yFyZ>#Ni;8p zD8!Ce3TWar)hm6oEa*p16<(0ySxvgT^!E!|BlBaI5n-Fo>V+*>-+sg6lE0@@3>&sx6OOI5d_{FH>*^TEtIFTY*js5lUg8fye$S`}D>Ph+YYG1Hp=&HO z)y6W0RW2?oT-X@5>a#|*--8kAWRLQ%u0Oq&)6|X`Iz>uF}r$d9B=W7w8DCKMLsZb z81q^+@Ng&E(&}5e&He#&Yv^LcQt+UXpK=q)#QZrXtM0oozv5lWini}qk7GSi4R$@s`_ODR| zs9O(WDF>r)#f5w3R=O9;+$X8e$kpsr5PkChy~dBOy|wk=e9#c0a@ zEGeK5rG1o(;_>3nN;Pt(eh51%SH9Sm(hDZK89aOd0RIB;ZAInDUX(Wbd@Lh>b(Fhv zy>8KKeKy43e*1>nz@;_Di#{HovUEv<|7j{)Nty9n zYPcnYhlBCjDbBjqgY%KeD}lKmgSg}}b>yB{(yKj|to_R>((LEx%f@Te z16t}ST66$;@BV^Hua@sGuij;*U5Z!wBr>@2&-jdAnQY5>_^ZSSr6#`HysiBf6V^!o z<%pNo>ng=wFp~Hs-OAj-+U@y>#cz30;Z}fJ5&XZPv1mkv+l-clCmM{3~x=cs*PTA$fB5 z@A`_FkJ_4G?L+O2`u%<{tU04nVt(!bX_DR7w_kr=G$v>it-ri$=EW_8R{}H5?-wK2 zrNxk5rgOSmGX)%8SjsE*IymReWDj193s$|(5W3a1|0{`^a$jxbtBB}sHRWsAs?Rg0 zAgMmLH=~5%-+$?AqW^J>l`$?C^;JuAtDG;(I9o+NUe%Ak1#8OPDR_#zug|b*{{2%% z*m`^x-CEjHDf&q?dd{~0=Vz+3{#IE6t^e17Ra| z+0#>yG~BH#u0G4&Ej;A&qW>bsYn8rAxo`Kgv!D$E#=ljvt1J5I#sA!{&3XY=*bBoT zEwe*o&hJ5d5E#6kOtC?yV!?;2ia&Z~TW#(0y$bkg|GHAT%8K6>-5)zY-14*a_cVaw z6;%4sSA2)6*4O`-t9>mHGQ9dtTv0t5eTk*c{9oAnDlF4#Th$&W?a6CK@$D6@Wn2KGX`1|m z0xEx+V~6qeE(Mn4Lvia*AGdC+Yk_UFW!k%@(u{q>N}CO|&uEp_1^?BhhcEY~M%wC8 zUx?kmN};WB^?-k7FWVL^G1n^|7v$yIzOS~O^fg{6czQ9;(nOQ)Cy!~lBQ17%w%+?~ zoi=y=FYvXdN`jS|&r1PEcKo9mR(cwLWW7APGS#hGptumiws=-tKTVT>*o~ww%|njmgTN>om>k##gy8b?!Cc z7x;ZMW3M%Q=8j*e`)*r+^q2AZJ(_{$+FOla%O|f!#=okFA0~f~t%&g9w6juMg>70` zZ$Ap5_QI9-oe^IbTNi)I<_(3*_^)|>C21S^J8yd4a%^JqxikEI&M)WwGuxhcHTpf8 zM$6~F0p9wW>l^m1IF0LLn7J$UKP} zwUDWSvQero6~O+{K&J zX+;GFW7!bs%W(H$_}9SJXbck^D#V{?Cc3Kedb|WdDtnTkP(&0Vob$g1Gdy@)4hjo z2B_d5js%DXh?^}G#Xg1RO4Fx^Hg;#HbL2Ea%f*7YNnY$SZ{(qfSY*%}wqw5Om3%Rc zfI_~UCpbQn*xoylXl(!Bis9eqNU5OEnzs_#5P-u*;pYVP8Y0d9f+53AtXOPfM$IJ* z|HUNS&Ru~wrC@2@@r@(4%v;lR5^Rh9U@sESM|4Ah>_6iK!xSidT$A-#X*aev(LA7d z%jj71;g4Hw#oRBk25U~Dx}8x;6f`D6RY1p=_=?_wag!0t#Jn0TxHxPJ z*fm)L@`Gcy;iXXaC)W)tH`nQ7h{#`3#2l_U=dDPzPZK)^IwL@=MSUxm3P#8blilnnCv@s5t7;wxo_uyAr`o1W8jyh&K+2{zJSxjOjF`?Xi;yh|+p}B-w z?5S*CC%gBjY~gBeOzi-gBmqM)LE@=>4|HH${5KJ691Q1}{do~`;Q`-`atCT5wJ{4G zcDvlVQ_)kpHM$j`$Yj2($!9$0ng`tjZVkBwG=bJOdAaVtDK5ko$-}G1EtgLl$vtAr z2lQ;#;T7cj3#u%pVy8H*fT75X!pa}Oj$HHmaWhJ#6afe14@8Jp3G=E}W6kY$B6nh?(G(-wX>`_|! ztS`g!`VU;+vHYG|o?=Ly3Eel_oF;w-7rC$^mD-bC!a?_!+F;8zjK;QhCT*;qlU*Y+ ze1NhtrGqY&GJdIIN@kxWd!oadE)QZm7x zyBU~A>EM@$b2l)rvSA!Iej6h>C|ce9c&>#Q$El#)r=SOMV;&6($DaLz;{6nIXIPlD z03P4~=mZ}`JBBP5yiOuPJntPMqL@@hpxl%52#Q>Br>Gy-=sAUb%AN2E_yJjDBkcV6 zo&;T!kWxRGF~Ca(d-h;-5B-~W7tu(VVf`kWxn3{MpY~r=+c!da|aKnO6 z>{>VNr4MmK0MI$;bTO$Vi4cl7&>|~9{2uNhS(z4c3|2-1nM|(W1hh218aA`?G6#r~ zTpqNCmdrcZJ!Mb(^_(CU`V$yBt(Hld>OUE{l5|7iBgAz=I5<2WrZ~$M@rTtfGeyI2KD!# z8ON(W0gFA>qdat*>}17~h(hoaToJVXVA(4SCyXbQ3R;*uf0ZbHS%DKP0G*K4%Nv8( z{l5|sjTlYI9>L9}01JrcpWS3S>i}Vp7U3ZNDbOUx$2m~j_i$SN51?+Q*L)8~j0*ay zT{EEnl4B0icmj)bHZs|?I|>IonBVCSYaE8gcd>siN33kFmX1GV zK4j-_x|q#!sqa&%&MPke$sYO7{dBfBMH~~Q2q@xRE|P~f%kq>%7%ZW>v%**E8QG$= z1lk9-a`%HmOfq;<&*cKz&32x=5Ox4IkXpjIOZL=2-v_HoKYB9ODPu%3xh>W*T^x$$ zE87C?d3KD{CqXxCeMaS9#2R(sS3Mn#Yu5qHRLDL%yyr?ycTAKg9m*@x(U~+_-UBRT zy@?BA$L5VyVvhN@hb?>$#WRE$LLBOMbU#L6Jq7o%p?P2=l;PUTI>?4w2Q#z=D#nut z*d$-FW>1v=WT*e`#c;v{AUvrPtv=hFYS?19jR9-zov;M~P?>M=bb~(uF`IuEDJ36p zu{nhHMGQ+m$)J5QRFhKBhqT5=P&fh?)&_lQ4DLN44esD21-}R_*?6eB&~S!Eet&8k z6bHDCUbH7V!EBMqX0?c@=(J4~4$gaF`0N>qgy0crse*XL6Fo_Ew%`xukPVsjK`!-1tH)J zsX$J=w7mH6L6k9fYfnPhp#SzN`?Ztz*GNWPq?781JL?`&JRel0dR(8a?T4YX0k?u% zL=}{7jWP0Q4O=fBNTSO+Uk1=VKt$wa>UWk44woB~WmOZK#@}bF%WkO-#hG;l37ET6)Uqael}KUAI%UEX}fPt8$j>E^f`5%EhxF;}h)*4&5e< zl#`MwI-W#CG+4b9Z*;&sAaF*!Wy(`+&B*Py(5W>9cVlR(#qty|cPQ`ZOg@PhCk}J7v{h_jN$`m_WEL&VQ*=|9GO^UF$Mkcz#lPG$l^KN?q@csuR}G7;ycCg z?B2F?01hq8EM*qsZ&=ttiS%gbEd>3=GrhMN7PW(lGGZCYEuQb5xiymT{2irkvS z?2s@}$?bG7Snc+ zJ4@`Q)~pPReNa0xJG&`-UKhoo9)1Nok)~5T#qQaeCmg!=Rj#n(H4PsMZZU>6yWzvj zdN+8uo=ns+J@&y?H#%D(>Oh+vU7%&M*m0`)WwKO$`vEDF4XjaNSZLx{O0S5|7k^o$ zNU7CFbq_Dr0jHNo#LLdenrP{~_sp|Xe}R*vUIl(fK$*ewT5b1T)qX>|s-Pt79@GDW z=0VUGa8oIauLIAi5cLqi^YT6yfNBp>p3K1~e!!tS8Z4)Go8G>u4EgjUQBYF)X?^`O zqrSGqO`Hv7V?G;zmJ(kFFpzW_$OLMQok{v2_vrMoNF<3-hX9&v3GPfxT-^J%}=0Tx7r`0ki{Src+2+Jlnx1z9m_TkDtPV7?}r?E|E44|MX+n zh9#gb8Amwj;lnKf)YR*h7&u08T(_{WwW@=cbTMgUMgu@ipPOWtR;FvH}`r4 z4o%UE)HWWOouqq>F=$^nx2tU%N#D)giMN2QH95b~xojB_=}=+$-7hCOvBRUc*2l(l zz`&)ksxK%OjF&wyd?HL6gHR8?OBwy#CU2YmO+yCZtG|S$L8&l1$gil2%qL&KY%e|~ zm+HiYUcbp#*b8_zw(Ewg6Eq!sfAMa7%h40^rkv1jsY`{=adt1PEuiwJS^VHHe=2#>f2q z`P9e}2N0A;Qk95C7inNDx1$1`O{Lt1Ps=$}Vaf(IBhnAJ^=$afbEFI|7{%;$UY4vw zbK3$9K&hwY0f*B(!?*TOafGg_n4eFn83p}WOVP^b-Xrz;;4<%#tJWrw)T8Y>yU65` z{<|yRI&wh|3eB?+;h_;a0=Dl-b?SrLx8UbmrThG!opG`@GpiwevwgGB)UnFA2x6PO7K z(<$i+biK_ebY*I9I9dqTqq21=lRQhIDk5WDbv`+Sx!nwB;58iAgnWtAdApMx&^2<% zv37$SB+&WmJQT#zr(dLZsx7Y!Mje>KL~YI-U1kAnotZpk0syfecm-#kw&iJ*3BeX~ zN0|5r#se2+8L<-#kq-Fp%4IEJmt`wPiKmT1j=+{OR;T%7)bhg=OY=S)3Z#IT?*nh{@g4d@M%Hw0MaeOW`XPh-67F2 zCWcO&3mP)np_0CrJCAYp09tjQTtq+$HK!Ceg>bX_{S5w7ZL-1^=@B`$RWMXr>BzA$TdtNDw-L*wjRsI-Dp4`LsfZetX2u@s+t6S?6cewopXix?y?wlNucnG!jyf3Sf2I;RIp;;bd{`M6GY# zS5wMpXk}n2a>8{WiRlTr2R=-(ny(p^fn0zikZ}Ir*{T_T3+WcOctf^cklxgaRZ)bI z`KG3MOd@gA>=23C{v3fZn%LL$STE&5u|iP`Dw2-y3Q|f$9q|NQUSEfgXCGIvI_RTX zg=^J0=sXYEYX6Q{uJeb9EjEZ;XWTaok_p@HsI8PUqR7NvqbM5*^LmG)zLliV^{o(5 zic5l>`+5QZ1tnn5b_oQj+9h?XMOIb-t3DS@s4;skHsJU>lhz~30L`7P766Q_m_T-B zP;04`OnB{m39?v{Q0wh*n@=YV2YVdN|NKaLF_CLZcyR$rb+W-K4a(z%;X|T%gLbJL z)b%-FY>|^DAxygDS6RF)&EDXFS?`!s?$W~vbHS0|K$T(r-WewO*v#%tUg2ROg>Iud zL>a9J6Z4T^J77^%_S`^-mh4XVvuz4BrNcJKxNo~H^3VLY22C@=CsYgs{oa8(ug$ra zpjPBjf8<}|mw5^AM%4g(pgD9uJ_7{a^@h0Vvk!yT+Ey?h$TJN5|8A`s)qZt(pqn0B z_`S+KBkF+mxPEQMD*RKngVt;`TQ-?NX3U3D=C6u+r+hW{Vk(ND#w;>F`r4aU3?(zymlWX;+^X0KO1UI za&sU#Ms2V(&S@b$O?WuH-sAAaxV9-L-gnNp0mY*{A`?fJ`b`*Pos@c&k%6gXl|I^y z73I;2@W%EX8?O#N^}0`nzaWR^3HBgq0pcSSKsdc{oXD~&j`&8s1Nu>E4k*T~kpIuY zZO}UMc(wSYz(XMIA~`v_xFO*?b{02H!p*mX1x>fv<#cpXeJdDr;I_3jjq`2&YdG=WJ?9fLO4wh|w?vvM2!qxcG9- zhZ*th0=`oE4gjilLOw*Y~?GRM?z-n4y?j1I@5mpWySF_?XT;rQ(tR(3>o2lG$W zERaguEv}QkB}g}Eu?{J$(~e895R&-6G@Z8X!G)a4Bx9j73^F9vmj(Y3U;`=TY+8S#evq|CTv%dX5EKrQVwkiwfncVV<2iI)nd5|#%(E``)r))veqw_3snykvZ$pQGHh499s< zHM%^Wk~Qd4$kWxRM1Cg(A;?`qBt zaF}==4szdZG=)PsYE*v?a)F6fh&PX+ltxF5m?CV+9Ov(5`3@jcwAhiO2NOCgqYF45 zQ{~FLyO~FQSXb$0!}ZvJ+xCA9l~!)j(P`u}$p_r?B4r?yvs79GXlG9U^kTWuK>ZqHoL%XVmW`UC{Qu?_9W^0#mnk&ZjzUbk679+ah zKZ`BFp&B>L4eNFd+r0@sK+9@(=jeJF!78%y^Yv?~XZf?1m;Cz%Yy0Ppw=1i{Q{FM= z6W(F(=G0tAn2j|XvFhn z*&o=JI{!{x&Va3RAH-1P+ZV}0|C!f9`N>$K;kL_jba%&z8_nYbL+AL(vFpXb7|(QZ zZOD4V9AsuW0NgCb&-f0;gi*-9Uvc}nY0*}yc-yz!doaNwKUbqLSGd?kzN^lBr|-5ln_Z{daju9{OV}UlzhG?xD9B0g{9Z-i%|Iu|Ayxa(NGFR0!&SaJV-0H_IiNZE7&csD>OIR?;(pp(Xns2MN}@ zwd!*@X{+CkR2Y2bspPl&w!sg?kDPn4$10>7@70xK7rO9Ws7kFp24^o3uaN~<{G4;F z+|0f^UTurzIWcweP30BiSI%5TRhJ>0CzDD4kn@KxO=adx8xmo%wB=V0?P)c!8QPC;GlO1O-8iSn9*BJ^FS{q7^rhx{e$5(tfl3I z{zf>Fp4jBS&8?Or@K_S=pr;gu)$z?5uvE9eN@33h;0V`e2U3N>|8(yoyKUFU=doVg z;Q#MF@`_f3y5AllU+#d!OBOy{!2iqpdGO1;aguut;^3!Z`%!`|o?fc6Mq>Gz-O<}8 znaI#R0he}yQ=kW%o&OweR-kulA=L{k`Z;``29GtL*{l62wR)b9qenX-L?L^oz}nS` zQ9WG2uz}qYI8j$nu4cKc;Rjf~2w&$^#n3Lq1pqq=1O-TS(6r9W_)-keT zQTL$|=7IN6AP^`|ojguU$VyujvGTs!jG}293O7(|Y2(JGd3(0OxSaHz>0M2-m`sKC z@4%-Ikw=#>5R0$vZwm-QVADevM6OnY9!vhtB=95{mK>T60PExTE7%H~ibghERvuufls{cbbW(< zG8aoQb=Wc#kh$nQ-R>%2@>#39h`R)f!B95i;)Os`7m_9yhQMUeW5$q1=iz-Ci5jp` zP6(D4tHVsto%kzQUV9^TlJuiUr8DP>8>QuCc)so5L8U|rF6Ir9gKkKCnYK{;X!bgg zZ%m3i3zlo?Xs@#Ln+ZC-Gf7|$bmJ_s=Ex;-}5m+ zo65MDT_B(&I=UEA4LS#Np2fh<$Sb*kg#Zza7HWVfGsi@ygJ*1hZdnbr9S?rbenBsVZuNhDxZAj$<2kc1cAf%FX0z(0 z(t+3sSiQa>m-?QP)w|<>Ol{oy*_Grul6kk@b{Xq_D%l@=_B~sY=yb+lm!!s}|K9~- zLeK^6s&@sphQa}S8OjJKo!V1m==p+bTL)MGa!5jMB(8{gQb}V2w#6+1TR????Ad8r z?aJl^FIhB&9_mdRu$<&zm}h)|oZEntMC?d+aYRD5fB1A!J-JLhF<#)msW$^A3^(68 z3Q}M8mrbf4m|BHDQ&5?jMFGRI+oUpKDZ=jCbeM+x>{g=lzi|@l?zgzA%;e752QjpKz6m|jV&BNp)0^9c>FDDNZ1F@{s{aqx`Y^?etmF!c9G*4q-GS|v zt>)M0B<-wo-@V0yn(W)WvsZ8s1vk0mR0Pe?c|-4we4AH(t0}&WNA-{7mh0hxAwDM| z8H1b>)Y}u^YnX4JbkrQ# zFrn+Hd0iNdWDLD?FC0x5=eTGhK6AwsuOP_rq`RoaT%n@dxMj~PP3Y$jew=+4h$0T` z#)n1?-kdWx;>7b^KX$@}!br*jfX_QbM0j1gdFqF34Od)YxC`?q@uG&ThS_i~+nj;_ zJf%i|x8_Oa1Kvk9CA6y?6mN6x!Xa$a#Azfl#8jdx(QA_w`)7N3GW3fazPjiN@iR*j zMLVG_-`GENRR4_LsL}^r^VqV52|WiI9i11<<3V+JC#4gd5vgqJML+fwCs?m3UgA-}u|fZHIy$j(Nu4N6 zE)nb@pAyoOkEn>ZG;irs>6^EoCTZPTW`Gkitt(o010=z_t~+8Zc~l;7X3zqs zaQBGqBBMe`UCXP_)dRQKRQt>`mH(BRfn1tW&HmGy=ia^V%;;A8iqvo~4Q#S8wCBHR zP~7Eu%g#k35H{Y{b}|kNmCgETFS#X0Vsekha=9Cc2!0Ocn|+SCJA`BKwkIHK2Rx>( z?n$#G%VmdqM~q!Xo4~c2;~5A{8PIBm3k|aVdp5deJhl2r!{i++OwaE1HwoDJR+|ue zDF0h6gOAuxU|&%8*D1alX>!*s#(Jt5w+=2)*~efD;}_)bi_aYzlNE5X{xSWOlc~EP zx=%?te}jvbd4x36u9?cI8atxL}JW(!Lg0am6 z%}tHNBqXR~To(6w?FFOl_=fpw@_zG;{o#46($CV-G*CWhPaM$|==3<|ZbaUQ-v{AO zRRpE=Eti929Y8Be55pMU+r@XdRlOEd{u{v~n+6c`=4$clo6mnReu{(K)8xIR-( zgqO{X7@1xd7=2JRknqLAP!kjoLdci`2~R9UHfvyTK~z;P1V0kkJYkRUw@739EO6Hg z!qE=((!~{}p{vaYgC#*GX+$9w2Bn+!#??5W0KP)!=HsZ`1L9A*%G5IKO5aZYyh&0H zir=S`%>Fwbb{)~D61o@OkFa$vx2W5gV$V)87L}^Tu;P^~DjHBO&K@VB&Sj0tB7l#f z*krLB*_ARPlQl6l%dl6mfK@7*1jc>L4o}&0Ab_cYAa82)Uwo=-lr?|)hM!?X6YDJ@xx^^f*CzIp=;KupO#^|b^Y8o68P^CFR%1zDh_kXWx7! zvQ3?ovE!*%D7$@+41>J~tHomjF=ca(n1*G*TN2(BQl}wVApoDpd4J$k zVD>6_H`Ua=KG&Q~k1(gq;t)+Pdy5VebRFtMVNL@^L9ACeg>4bc-RbOT<{zJRPrKc` zTxSB)@FeeZQ$c$7cTNRXkZ|ih@Y|>=OdrGOkdl&rnGhptaHCPzf)|}RDNFB#67nSh z`UAGX;e#Ef_?w=~p%4KGiOMgI(9I+0a>1#c%Cz)(%+*;0lOqLZXHnu43X`VYBjQP(pD_T>kg)UC91(A;-S4-R69AuY4|_i-)@l_faL!$>0 znj%J5W3xr!`erOsdm7)hj#oF7e!{o2|2cQq`Wfd?#;TtC)8fm59oavtY(PJ8lvGBZ zSU@slWffT-e9p{Nn$)mnJp9NkIbob2km@?2KX+Me=-3H}3cR5lBeETHDx?>Yh=@~s zp>}%|)G_}XcG&ew%+f;NZP4%4?>N8ZEj^Z?G+b~gc_6-;f$<9$Gao=q#8`3h4(|M1 zX;5cmywTa$u6LYlTNCWlSIks4YfE0&JAH<*_A2{I8Q`I)u{^Nv^JFe_yP9J{p`O_BC}N5FiH1k$0B^|>jK);jtC|`5`X0B? z`3P8D1g$3qrW9LC*&{qyhUm%9KJqtkAMpb6*#HsZ$c%41NuP84GVL)bBR$hFwrErMNC88g7LYz|U0- z$8wsKi=NOJ)rQHDMYw;%bw>s=FY!sk#&x=rCV;~=LaZk0EmJ%H=#0b_w-9lj8LV0| z+I5vzfmi+M6>8F@c^8fuy;Eq9$d@{4pkmxO`(CbeVdr>M(BD1BAJxAd=y`I8sh;tp ziQ!ph6V;OCHyM%xFCEiE7q`rhMVi{7w)oV-4*<1*$6-p!51A!dVw-Z0ZzaEG+1UsD zXi8VY`+aaTQpg}k&_xZ=cc_ydT&v;sHt<*lA!vzr!zkXz04%_a;27mVB397vY*R|vEI2&!~mbkfuvc3IdOMS zcS)Xy((#NoEG^@T%Y)rFd11O)*Bygi3KGoNjyjFOjg!W;ay3uj-lWlWB!X8Z(gu~G z>9KgIwWad&W(%A#gFZsg;k)BNNdhvM0%A_S31{+1YJkzZx>ZbO^~Nnk8N3fT$&h zxt5;xjD*b(lBOOX215+-=1v(X?S>;^;RkNtRS#!BS}YR(HeV>Tcj!L4ERg~L%wQ4a zr1w3dN`3u?!}EPa8JSxm6nY5q3Q`+RYC2Fd>8r=+@KLTUHQ!aDG(&2~)|X(vL~0pr zB&G4zEAgyU2&2fo74*W{_ zEGk6Zv>8V|llKmH7B}}m$L3w1TH0z30qo>JM%2NR=7WTg^#x}FrqaYkGXca-5H7hu z{siIt#wH9t}Z+k>d#S^6%3)1IF5oIr{Zz2i6ww2ro6Acf> zmG}TL&|6Y8q)JTNGDj(4dO+=c`zg0J^Aff&CfTjl%0lX@^K@ja9PRO2QJnpFjX4uD zqaJ&Hjd9XPSL_;z_N|tj9M^d0x{w?|n&+ymsAAD|ih$1@cu$jpMCWWV&6^<5bNj|y zTlL+JfyKtN&mV2Qt#W4CMn;r;7H!+&+li1(V?}4!cQdNo4jyo9+=rdmn}Wd2V|!|g z*b4)$YC_3gUv{8l?C7+YTo|d?p1kW=mv=ai`f1@0q3Qg(k%X95;cQMz-MM2Q&wIcV5#$Xl*V#gtKhDzGlbG z=OqoY8h5{4z1Zf3#r-;FD!80A5$JJTPE9*G%E|^e5p$43&EVig&Miv0{e?KTo67-n zXMWLhkIfTdW3{7HnelraTT;lh2m+aGxfD*0WAi&~)>O4<9h)9B2TTSKsJeKwJIM5Fbwtj|7G6K@PTqNM?A4Cg0K4aWDZ)w-}@UHekgIf--@rLwO=jjxw8JF z-Z=&dE#KXrMYmRM zpUGOP8(X$%tFeA0iL*sGT1uJu)f{d*m)RRXur|!KJJUN_*TK74@);}d2T_9d`0X+E zJa;g4HFhh*wOvIzow*~a|%k_BWhnc|4`izlv>5Od|i1G4~U-G_C`;m*ByUgk3VgBQ#X*JKFH&+~jF zdr4uJZkx74`fEo7%D!?9!l7BF@;$uD`qkQNm@NaHOIc=zRbst}5Zj>Hx_W?T959cH^pru~`axJLJ{eQQC8IvGTKINTtT_K{KgJw1mf*v>a zG71Bq{Fu!Cx(HZgJyO24baWKfnKZC9|2uvVrX=5kdwOX^OP@&D3?an<0lh_K0Y61~ zbR=Z7(}!j;ms;q^M@oLq6A)X_?dn)77lH=n4H)`uWZ^N6_2%$x$a z!{I$yeS!}dbKEa#C8xw7f?g0HdC1rNSYsz36H5tjhS=f0O2Hx{P#BKk^9vo=!i~*h zrQ*0lP&v0`aaPhpzL1_Jbi>K{l;9*0RIflAqcK8z^&xs=VT1j4Q0AVE-!|NG;>QXU zcYsO#GV zAut4OW(1uQv!a;Ndh}?^enZbhC&8?Q=oWY^DFL;FXI;+*fqGqLk~PM$5fw?>=*fiu z@PQg{{b=rU`CRPied4^4#V-F1>;=%Pj=65`$tnv<$z#Nl+867WmJ9WI`!d0|wzHSuN%HINNCTd1!O= z-(LWxal9^pD|j&t-H={ZI|6E}f(s@fq5uhIUe!Q?*sH|_6Bwu$GrjV`fp7dFMvS`g zx98O|ciQmFaP_3pBJt`WnHUL65ss%j&ldpQPCT5UM7O{n_*am)hbI4zU~UKDvI#5J z+;VC8?=29MNEV?|(a@I+|Nev#gn=NM%N+u-W%)q-T}z?QS`V;Hu7Grzo(x51$AXGlJ`padD9vxpWL~cB*CCF|N zgYT>BO5}nQjE3X(px5f(jJjW%FJ=Kk#2KldeLMHJ3z`S%2;8evpFsjoj2}cG#^3#) z`yhVCv)1E#oXp#9-Y%B_o00k37SDN=D$+-)V23 z={+@_MSKL4;?MGclrY(Qai+T3a}_AAVIqnmqdH7vmBoSif@K(6U=zSvp`Z2XH#EZG zvjpl{=;2SJ@56Xk)y`B)m<2U4Opt+?w~xulEQk;7u#x~0$zLWH=Bc24D0*gp*6Ia7 z3BxV;S_lDQau0$b)TxT@JCiQ6xU16($L(&>u%{SQ$#|XAdS>@278Pnke*2n?(y4}N ziCH9cbN4yj)2RTn$uguVJK9&#iu0r})~()zm%&4y;f*rH@k(3VP@g&D zjb#2Heq$wrz@VYoMWlC@%pp={$aANZ33jfX=j4e6Oy5 zqNG(IU#U|=dTx<8Z{jmnjBI3z!{${0!hcY?xG&BqB9q5Ie<0&L<9z{8k66h0D^#0g z`iq;yDnK4hre;6biRwym0I*`vJxjBrQ=Fwi5RYy3>M88`e0X6e$zkmEt?Tc8+GG|!buU{PhU~v z2+YM)A9HI`^rWPrn^FSq6E_>HyQ$eASbu#o&mhA2{7uXdX9$Jans3(v$z_y3D{a#&;Y`)BqLE-0DG(Yj}rJQtYYJ^7ib3~LJ4}Lld=JD|63T5>7Em6*~d&@%gXEjP5((| zTjdT&!(`DB(?E-xarFFlB&B7|UQ-B$plf7CNb&+>`EVd3=mcI!cM=TPRvpsCjT+Pt z0>NWP=^vz$%bdzYEo0#e!+Ik2ji)Jru7xQ&s43#LW1`+D_+}4G0l6TwQP&wWC4G9J zLh${)?2}yYSgm58fZ1FZc6`}$!_Q8!`Lv0m2)P3bQt|L?`y<~FV-;I$*_DEj>n|bH zuvEDrF;aBYIfV65hlwkG!X*@oW^2(Py?szdOivJ;uCrjs|40p#1qTgzzG&9pBQJj0>jNx{+j!eZ zS_BQF$7Gg@!i9~Au(U#?z;ucF(BreE??rF8Qbuz6z7N_k6(Ks+^-fgkdb)9T@qbQ$ z%4k`uNvEP3;#NBmh$D8a77*}51nE zHkAtZCK?(pTPf;5jPERvJYY_mP zyN+E~tT&?f&FOa+&!nL&E;P?_fvXHWM+uVu4XF~jM&izxEwRg(8#w5VUJ`t!lA>lh zAW&zApl4M=cmFhBa4gihk5J`Sh!9oK)Fr8}%7y5t3Jgu~JOPj?LXNaUOzdx~Fp{V( zm4J-=0osyx0on_QL7Fx?3;>!be~WTn%{7t+8@Rh_#f6LO{9Ww-my0C+`NBm82D)hv zMkWdwg!cxqBr7u)R`~+cyTx1&HbWElD!g9!=K`(NCG`!yr0~U4Vko=b>0gn>#DZ&O zF@Cmh(!Q(9S!J+w!ndD+mDAp}6u-yt{lsN_;BVFfM<00R@#-*<_At(iuUXIgeOzYw z?Z>-3dql7M;*nKOO0G=XTwt`Q&?-ygvW5_?tE4j4Ta|tn>EBlqeLVDT_FIl0+Z12; zUMwomtm#ElZC*B}R<`t3_N&uJt5@sa70s=*D*ZJqw`JREP3~{qXg`cDIH=!NQ*tQY zfFR3jJFm}DC24wQZ5`uXru8rGR@c43%(v~B#VgFrO26&BcGSh&hp$Wa(pLJaNK%s5 z6YuRqZ@tyvv2ydg?ol(m^ol)%t8Vc#!9Xj3?ropE9NMh&ev6Q_6;#%=6e?mCR_q}pFvCqj~LT7ut;!o=?$ktXyteLB;p7?F;{TBrRQkqt` zKvlUiqgS23zo1(K3|tp{neu$GdR_BBOLnTl+}85)6p*+U@s|EIujDp-g722CEBvrU z9CwWi&|bx}av-|M%iN#ZJy-0o0tS_%CCvYlTmlmvg zb^>=5CoAZxbqeeAwe-mBb+4Pxk})s0;tP;NoO{m#Vws8PtFac<8Jb>+{bJ^OFv~By zwB-;PRV-m_SM3>38|80%H50E-GZ_04`!RJ=*VMzK zx0FclcjAUG@0K^a+_T%hS4|ez?0!9STAjER%HGzi{g*iCAaA+Mc~NUwcIb5#E?=6q zpIQCq8sXL}+_cQF^W?S@?WyF!!NF6#6EH zuPU%3x}lslab($-$(aOD9GerZ6(8cO z&vmyhe!+5Sww{8qt&&-K*VIpgaTE*;b@vN+^9fs#m2mjr)7DL;|02BU)A0Vr7ZWfV zjCz`y*59!>HI%l>FjEpR>#NL*YpC1Jq2s}OVFsSJ3*>e_&N6s4sP-GWTa)Vp^z1&% z=i58Eao_&&>@5G-dtVsjZ3Xumyp*i4ST9*9{=Q_n?6>M?X=HR>)&=S}XeV+Ng#kM*(E3kwBXY@_YfVtYF5ggYts~QLyPg zvli~Ffw22dD6DTl%l>5zhii6}SzHh5-x+(WOt7~eGx6TaEcsnPd}xiLIa)RLElhqr zmiHpl&+2%~UzfXIWrmo(_^OI!VeXN>SJ0~wZUx99z&{+u_TkVp1URqfNi=Tcz+o0Vq?*i5@Y6^O*Tgxl!E}j(*1BRtFtfM2@7`Q)_uqq_mgi}Um`Ea`Yh`p z)nvnXTYE7};69(#m{lud-)rgXUVdJ)YY&zc!d9$o!2X~&`c;Jp+S+UM#^Q=cjqdu;qk7H#nupWUC_6-PPtV&AMx2kJt(84NLu> zW6plB0(Ea$r29`+x{4HL8vx&Qv|=u`Svnb@6;Dur)VDj>eoy=!YE{@EpSH>~}YghKv7w)_(Tuwx9jM?WaGo_G!g-+gj=gdIoeg z+!?Gbx&Yr}6r1HYb5!?7xRT3!DGecgq| z{iD{A=M;&Q9sAwAeWJ3fOL?*N?dSakIqM*A$`5a?qtnm###Dpv;vxY?Z2OuWoH}?aHv>J{xzI6VrhRe&%kUJW7YR6% zb;c`*lnWPtUNYG)R0aLQX_?0ikv#tjbl%+gvKP4@sq6xC^E@TYgP_X+ce4=N+@4ba z4@P?A_noJrQY#;WhdqwmeWHgbVX{ID5OGTuBiZf(Rga;Y0v-xw+`-v`2@D=SOJX%& zyHy|n?`mv81;mG#J(_aZ#ww`=!mILxB`|piF2S{Jz*}oV_6ZMJ&yBc(C;J>j)e=oo zK~^-Ckes?ReuH3wqS9Fxzy5baBBFlzGF@B+O}#v|7JNmZOClJ0NeZa*GWhckvLv#E zVKc7mUENbJoVcFUv`ZY2=$n5Y2v4kEcIJag2FJisZrGZfN5EssB|awvun@9xtaKCo z>aYu2?Iv^xIqcE+PZeyzQbMj%BKj5)PhuLXpc55JD$@u;;3Na5vjqtQ&@XsrCK}A% zVT~u!D~YMkvD#7y*}~i!^Fb)mfN&S5+5&`x z&+rYvR$_?qaEz$Xc(L|lUK5_k(cW#<twDEKIeV7JzW>@4xs1JRq@DY&N1FIR z-q5~V9;0$KbF^k}w#xf#bwV1W0}zymj&2+?4AlM&Lu7DW&egOjqZ$?#sh!})SMk^8 z;2+ePu<(VjW9V=ro?REEKRAIaZ3Qzf*~LCZ)))-j7_NGHG5h6F# zgNsQzH!hX84^qTVG1W*iW3WS1R64tsN}^J zYXnBE-!0T4*}sx@JI^OWne-5RYC7|`Puv-{X=#?5SsN#Lper=yzjf`MH9-%$jv zB{?$2VD8byyy{cDtDM`SOeCF#p_6v{yXNk*6M5JyB>w83If`(fhVebQ(d9f8oinNF zoJS|UtOpgjK0m&xwJ49~vq{SEV*J70h!T-yf6(AgOjz)A!VJz}RR7CSH2(^c6*;>4 z*HPZgP(Fu{rg^pjuApd6M7#5DJ$~)MuBtfo;Y!^7K#@2J1X&(I*l21PekBfQc$6Io zfx27o%GhdA$8k6c_@7yP8_TJkCcbW2=orvclv4@yI^r-p!Wr!er`IlZXBN!lpZ|LyAFDG zjma4Ld#EprHvC|DJ#6RR5HBeQp!^~3P?9jMglqXP3`>Oz^W0St@-~=hwAwr6T9r{H zGMh6toVj!W!(Js!gIns> zD?4su86xTgl>Qk~Au2tozfguX)tFfGq?qwr=er*|1q(WC`QhHd<}PegRa=$6+mEcC zCU`KP&$GK2(Mrw7xv5SM6G21OMitxVWEnHzm0RA&VSwaGK(XlT2V6Ze*6EFAEIYr%S&__~&ilS21;-KKKf`mv)k# z8E21ut`%Hla`wF=wMn1vhStQ@XFrCn4co~q6Zv=hJ5GQ}6=rYOVa$E_-%Du#NS93x zh%1(rD{~d*JHoAnKm6gbY4Ms)*7XR~=4RsmAebz0p=hq)Xk0RoX*-ho}I>RMA9yt{~P-FdV=sN`P0I#D;wXt z&je1N1ncC2fpI?k`1M03dU>@U@5&KmOoQ8;kHDV#(2;Bf1nAOJ6g zG$Qz(nnzR_BKE+;k9gv!zNOl`-@BsXcLkO4+T5P;snB!53o`X0H zL}j!1?=Z-1bbH(cvHcMamgC^|jM-(j+i~Q>WT&>o2KAcU`g(a%w)Fz~bhFvc8m+0w z68>$wkefC|W8WJlW`l!LVf9#cY`YS&4pQYXDi^<(%R!84(fR5qNsZ)On6qI#R_600 z4hNZY8RoUAuA?1BLa!p8-z9zZ<%4QY4Gj~)Y#n<+2iYadeB6a=%l?;W;|kTUcHxwU z`AKVzG`Gj$iYehRG4RVPtxpb^{iD4KnbSLu;ojxT)nO6Lqw{VVAj8nw?Q@;D!)D_% zl;6rO1Ko;*(1fBHj(V3(toDAO#|>jfpd4qYxN+3-O&2&W%T)IIkF9u@O*srhlpR~K zgYUGpq_gww>V5mS z{iOQ`=sVLI#o3)h@7hZLbCfie$~mp-!$~3e_4UuwemR%%U$6|t)QEj@n)XAl20cuy z%0Q0eYg(p?H8>e;$51l6ggZ)Yd}3%vWDF=nZsDdb{1)d$DesD)r)O+hE;;$#@!~7r^0``*_*q?T z?lHytx2C=SFe&iw4;Gv64O0nX?R_w*bgS$>?eROjTxKE`3TC8mGmHimDr^^UzNJ5t z1UU^va@S@V^Bt^F3fbx0ix7}LWK^k*V9FgYmwX2Zh?tKDDxII!*?84ly*pE_d$$X8 z-{ypqtRh%^_TO@ccc#oUOc&N#2tQTiqkpJ)ub*(^@}xG>4{HNou~+Ivi#VHk}PgZPz74i}qgm-q8&TR!0y zM{*XyG|Q6wL(bU#-`Wj~Epz4aRzr?#9LIXrVgS^jQDy+AjpJ&BK2AJg?_c$A%LZYY z+=(?D$Ne3a;HpDT@oIx_6Zn|>%i}Mme%_+hbLFGPR|L|=LZek?XNyd}Ggik4=@0v> ztPuYuyFFS_1ixHbcLcrz3kE~u8(R4hEuL*A@W&IK_!45eobSKKtGafv+_RDn`;pQv zz4My6)RT8(uEVXSIm(?IljaY4PEPdkEGgIA8s75#z{j<#w)z2UuqkEZC<{@8cC?<$ zz%K1j;blBQm5&ZGTaX%ea*+eOSV$BLWYC`G_p-bt(x-n?uOsdA_I`5s(5S9)Tm^hJ zKCqt&3}f2UkPR;Ex-4GQ-7>psW;5Dnl|SaGPOiv2HMnN`P|p#20rF8_V?80?ZU^kIkoL)oS3sJ8}(SdyxzE(LV$I%|R>w&uaL6tKizd z&A;!fqFB7XRjuy0=U2GYacX-9JoBSUesqeb7*R%OB$q*4~HrN`19)a zUC^_|*+6X!!H2%>07XE$zlC3qNWj$4hmI83GK`jM(zK0XKnG9;*u%;li7!fPd+o%b zgYNXh*!e+h-FS}7W1EEhXNq3V>YolzGhyNit2%d$XKz%S`6)lL4c-#?cQM=&?=~%M z3;E7*z+-)ORkN!{^c(M}$7bcecm$m<8cUpD=H$~o{e!=liBY3PU0a*US94%pZ;-iN zR6{?A`LF%%#R`xYe25-<0yi@EBtlyH1lQE}^dUL!JBJV#Lj1|s96(Uq=S2l&NS4a2 z7a5(I)Gp4W7PyYwAsn7xo*f)sCW9;9eVuMjsc)qb|H0}dlhUO|!1_>gFfV=dN3r& zpc8U|`Gur<_o3je2m*}J%Ew<#UsO6!eS>fu1o0;f$tZQsPjpi{v_eOwS%7?pe>@dL;yxz~%zagoaa58r58E4=pV{M)D-B ztAtTE`77dr5eaNAtWZe8Vg2fIl(!Tv6r+829ev^Yn83&Cmy2&Xf!olMtWlS#aC$9! z3tCVU6@c{N@q%d!U{rS${E(+OiLq^@sIqC8QsGGx0_T98oi9&EBhh|Y8#Ox^L6h!D zaN^})WJk4{y6z#lVA+qOlE7z%jBz8`)UIRb5@AaPJ|GCdDR4j1`@kq3)WYo}SyFj1 zo_NZQ%F1QBfNZ0YG6p9#1;>v^h1B;Era;KKg-&N5Djm0-N1t-2s1bRISPE4lAbnL$ zAEAH#snK30pAxtl6;mh>VRp#q!{Gf4I+ zRA@w5gFH5YA<=qU&S1*Hkhsrg;sHj=#NBB(sbez6a_|Hk;>G2eOGXjY0UU-P zj$Gu7v%0pR_60=&PGK3_@{LG)n~v?9tbCfydkf8!h+ z&kaq+Lp$L@IO`9IoIP0*eQloV>!MgX3iWTksT2Zf{PEO-F!~%?a38A4N>Yh712$ys zlusD4N{N(1nF|U|CRN#v)OTV-#fFe*InHNXp2{CbN=3Bs*5^cjK_2jmY{XYYIY67| z;)@ z6^IvaUijwru-JmcQZ#o}>MO?20h_A*)m)Suuz)VoorrxkMsd`_kE&kP za3HW#S`C#~XgDk{R~>gMf}t6i`QFzo2cVuK$GR~Rq|I24uEl^+U-lVY`=5QhDc}y+ z5xa^n-HawR&R3g0P}u$TOOF@TX56D><`AW&UuB|tm{YlUBl+Cjv8AAMgkWbWjI{O0 zg>>b(0!>C9!RX~?sT?!dSQ;Hsdor4?t__7QE8U+(h+DV~tstHuZ{naw>2SaUWxyV# zn2&}ejbi(9u08VDC?gJiOCjzmQz#*l55N$AuGajD`W?{y)1naXzAlHNloDZkb{%kB z2(!ny&vz`Dq@MT{(b6%8QM90d6#Id0tGq3X>TfTJTeJ}psJ}t#*LiA;Zes^=kK7MR zQVCD^I+iW4RfygZO(vfbWs3@cXL8?wP2aKS3JmRTNnu?Qk3G)c^bti^@`Zi@>Sv{4 zfPw5>nByt2Nm%T9>nO6s5O07JV=X>um?4H^CW2M?2bmjhKNJxBb(U65d?mBCxp**& z7inE5d|m_Ol}FPtqmro&;ws6DHw`0tlC-K7-pCUn=5&Sr8Nv%t$72!VdLhS?iyV3m zk(|$RPd~NFP|6_(gB?*t>nd78Hfkk?4rSE6J6M1#!q0p)PXF7XZxn@a5Q3X$gn-TM z5fDRQ0XZrHV${;WYvc%sEFn&XB%T)N5hITXranr1Tt~8}0v;_q`$|EXO*9Fsm zMd$QwcVWR6eF}^R_%ZIS3|6NN-rY3`8Z42G>NSu-mD~w{qpbum7sCCCn^&XpC_xtV8;2G~bq4toC zZVFE#{QR#eaWA~=2O+alof^V(jSKA%oZ9t!f@Vy{Ry3aL0Gv!XM{pS$WwPw*!p?BZ zUeq$mu|L$fs^wl08Ob?V>0@wENonLXP!+o%Ku~`5ka6&yEV6CWC!L zk#)K8)Bxz&dOXt0?oYP-FKX(;$B8$sV`lp2oG^F)e|tI?2nXynP!%%L(3UPe?q|#K9tB$A&F~T)h-CH%qDH+MQ_K(Mf8Sb6N-&08vFDu(jOPQ%(y%S5 z$>{tt*`qh@N~M`C@&Mu46AcYs&6FctffDtmMx||0n?CY&h5Kz{f<_qpejBpd^1)Bk zSlS&NaTbRD2em86;9j!H*&24#dJ~H!sr;;xv3CS1H1rO!)<8W<1TVF@s)7XrI&%6) zV^1XBvycOUPK^K$i5RNv6LDxUefr|4-tbFo=1qkqwPm0)tNnQ*9iQWgfoXO3#^RGG zP}1z{v`GW^906z9B|HXLIQK90hScfj5Wz)3vPer(CPgGz)8KbTk%I-#8ko~(caF_O zvr=$%A%fovR#Gj_ZWuOmAr zJxZa6p-8g&BH@XtdcZekI%M4jsY`Q!p3voXjzQp%Zlyc_dpE9}0my#59|~ly2vN>R@Y7u|q#9*4aNM#_)jJBR>bG3WRaV)4C$@Q^=QN4zxM& zobn<+n27g8|JCn5LsA`-GjYh4wt5au)K*FR+%FjnZqIg000E{efoRu-dVc4 zZssRVet0RSiSuY5GaFlpOJdEw?LIQ`pwON>2T4F^dwLOyglu~~DhOzS_VuXS1ZZ8( z)ENm5nwv?}U|h>#ZdnvZGfa`ju}9`97C4T?l$6-C#p02~gU`PJ2mk<$096sxK;Any zZ*DTIVT@xD1OP&Sfk?EFvV(wQ8jbU9k;D%NHNO9udOR_{Cmlx45uTtCU@Q^uITD}K z_dXMqmo~6|RvPPZQ%PX#VmUFY(y7Y3nqI}BA|Nov%CpYs8fD6TSkGtz!CzLAEtlpj z(RvYazg`@f^DVYlr#Z28brA_MDr)Zi&|!nb&qNhe%4dfkizpZ}mahg$3KJX0P*?*< zsts3SrN|8y&F;a96EB7z=ISL2Ol<5 ziFn)k6kfKwVAOE-M1KF8xtJbOQD!#woFH}IdwLW64~`&TuJ zIhEZT4=Z#lPFFM$=xrU~NI)Wu!y$mYiu0oDj5s$UCxiT4^!Wq4@XW5^WQ&ffN1P*Gt2__{Ol9O~C|Pal7&FCe2Z_FAm_xBQJ#z~(?w-J%q)hF^DETUm$C=>aw(8CbQ@YbUz zBK`hIPsVjBaD%UYsO5ZjwO(Ll&&XvWs&V!;?M`@A8tU}m zdf@G;#qnP>F9xi~Ms1_-ADm~A+&8JeynPnvzo-quU5xa(4-YucFv;|Y{S_p z@VUkfLiLwmtj0h0TNP!dWtN(Jn;M&oG5M_15-m}fQCa(1?ur?~ak3Tbrkqs0oIdh)VZaXFmn5ld5dOC@yytprO(S`B0ONJQ58{6%}hx1G9DS-3= zNhRPXNo(xqv5*WrLOPH94&k&54Yue{O0WWa(BVxAdm_b*o zDw9!$T94l$h!dLLD!PZluCW~F??@R5J|vFVF7PY=&BHb_YsnL1Rg;`>@%~$6qW456 zndhI$$SL==|3Vc4&(^LU6(>$uRaaHU#bbSiVS=>0aiIO(rZP|0;yb3Zltqw6h)7mRM)id$ToM<>N-w}MTm_0>O28spY_%xN^Z<%Xp5*CVdJpU zhCLb+gv^+rIP@ zFQa?c9K#_gArc1B5HtQRQmVcny%;x`|5PmH{}3Z(iY+bc!skp<7cRPo?nm*&-3fVadViOP)v0+2ThpT4v%!#Ppv4%}YBa-bXpeU&5 zCU`>*&v30y8QH)yT+I=^Zik!I!n-iJB+xxV?vdjCWvxyKTXM%V*8mG;P^Bk)_b7*N zWzr;8HwJZg0rCX&KlEq&M2!i2{G5Fd%A{GMj!#}%xoK{aK(affxml}=N##m%iPwd? z{-X~9E{yGRA;Q94^`D`Yr!z=Tz|j^&Plb=KXga#09edj& zl=D&R%+N?W>Aj;V#&5r2u-5Rcyh~2~MSe(f7`-rpOC9dLdUTCX zc%yT&Ln7^Uz9$-PPOfZ3y?9@5_RswU+ zK}Oq#W%M);(i3%kw=(}}!xB<<%#v86SURwgX+i-ddjJUh!<7BnQ#&|mK~N{4m8v=^ zH=dOw`BgP_a=(HZSuqOX$wGBFypv0nGUsNa3MAE599EoWbZF#H0ypj?u@|!Vixr;E zM#UYh+}748JVJx5Td7}IDuKWO#Xc!Mtfe59qPj_Do>0!nfb4!3n9C$We~s(#;i>+nm3z`s>BB{lT=@Dq%p(s5O0*2IpRquN@znHuye+RU z@)w8lM^1LBMU?{s{ZG$r+3uNpVu#o`>Q||gkrzo3Nrkpf)m;|uNOp!LR|Gc#pWAQ* z*w@A>tRWnv;GQl%Ww4-PGn;=wVrT#W0s-Fveim3AC%{9X4|{QXbaKRv3YL3-Km$Sx ziqvCE^H{QK^40R*Z)x4ETlEW-S)7hW2%!90nPkaAGR$sKnS-_h?4a;y4M79C z_E^t8C#!Vp69}$Szf>{5yl_*qD|}<^0a$i|OaxjgfjoaO4NtLpBW86G86wo~pOH`$ zQ#btDqbeL+2tIv-0f;gDI^ZS_Y9XyfxY}Z@xT6dkt#3tXAC1pjZDkQ@L;fUO)Jo;u zxA?gc8WJGc*m$(VH8UhNcWR5fB0$n+e&q|MMvvRs9?`d~*}P3o8Wy3NBF}fGREa=E z`E$*-dfSpN0GnZMyo(rrs^btHfFt;;MKRl(ZET`S&Q8!lmqE-3sz-xVIkq2c zXC5wl(Ai2Npw#;uukT!yj4RZLcc|HcpLbKCC2|AR;dKB<6i`K;QaB%oA+yhB4NAmj z095=X5boJm#P*1p3sbenw!~gkVd}?Fn1LY@?6j#-P;2&56U{C_I$iaQm?*oJpf7=m z@~zdhJANC?R>38UbuVHdseB1%=SA@!S$6B?cW8nL86#$)8kxX?S!)+OVdC>Fne2?z%I-640hTt11{;2qna$1Y0m112N3D! zx%U);I6C)i)$4R%lj67P8ZqkBuQl@G=BZ!nss+kq+j7@pa%8D?b-$Z|<*T9vw%5P& zZ|RJ(HQqbzG{@0aN!fw4FGHso&(cc3;yxOWZca%yr;f=}(d#fbHgCSFQI3qjvdgJp zkGR>=!5-<+dfhxe@-WK~GD^~>g3tfy%*U7N=ESpjb2)|BjXRs0I*yjuU*6#N(K!H!NyHtGODFPvO1zR zF=LtL@0V>KK}ao5%P4Pw;glcUSg~#(qYLbKPs{g8<;*xkt|yO!fJ2Ne6?6;XsKyPg zEQVgm_>|i%t(ejc_Js`ssxCo`crDy5bA`YiAmQ!Mp!y=pc=7h*mJE+*1M1Je&5S-r z_7Se6hmkJq^EtrOmAe2mfPfIb zZ<1KhKs*zC74qy!fCND;n;?5O$%vXTUVHC%yqs~m>~!#L10)DQ4j>6!JL*4Yxd7j;h$JG436b*v9=xueDCp~85{VTs0_Pp6t{i)` z4DV#lOEzN2(Ab?Q5QuHL-91Ud(g3dHZVQLt6a>hU8Ew9>3L zcS-)Bf{|!}_!3fh{nb}Zlb~3Z*j#U3I_Y2A01}H30)P%CdwqBg({ISkV}Ui_>}oRz zFzMbl?_~(~$s5p)DTU4|(^l~~f9yd&?$H6&r;b$HnKIPmC3(-zdghGI5q=nM=)T?S z;KHeM8n~sbG1`hoMRBbz((5s16_t60RB6J5%e(zZP z#`iF0Iv6Yf$X&x2yuAaE&D4)7+(_>0P7!eVJvJZ^HyNjFy}|r_AHd-h^MLI=BwogX z!5WH!0Cv?dzXCGCouItNyP_$gE57=?a2n7l(0~BO^#lHYpfcxxq5ju7g?-V^(Oykh zdg%&yz~NPa#$8DZS`yd=00bDWU!WMjVUL!PPn#fjSrHBP)1%=KtpupW9SuID$DMl5 zPJp`*urB57o!{JJ_g6WM-#NNDB(F(FL+#Z;J1XWanE530-_AU~UO+n0Xxx9Qpx}&Q z!$C>-Unr6x73GAf)YvfM5u7NEtu`|f`uc|YyB8DE0^wl;XJ>owC=gP42+N-J&~@B_ zMU>cL2~kGKJ>n?vI-i*2SaksU5fyCQJSnGrP5R1a90p#|()|P7S8=2=6{~)NN%O6$ z)^*pluAmxr*)wY%VhpSk$B-Y82j&mKd7#u+JX0spsED!ITVc{PZ0I62qD;n*@dVX9 zn3h>229gvSBcCDD;a>+W!=#abNgo}TM305J^p0Rf{3FVAIV}`23|8Av=Z^UU5hto+ z91tn)-5Oy3K-q{T9Q=dJvgnO&rOsXe7cF9JB#IJtVu1CIsx)qaw;(1Tr`|&A?a(ZL zB641~aA%88!YS>gprVqUl*lZZ?Vq~bvuZgBagUe!RSX0ao@G+o{kceMu-c@**xC-0E<8JKH!z2wev8K#w3|_26GVSJB5b@hNzl zZnrBY6m48;!|_qLHaMhf={vd?S7kjHEeF+rr?Ga=Or&AWX;UxYxS7ZmXghbTr1VX!pl2(R%?1Q1@6WzvSKb`k~mAt08V;h4< zO*E?L9$!!V@IG--Ma&soB%+i%QV}M|yAsbwH&uzXsl6E!8jn)YPwUB9qj;2=3Ex9q zC(=E6!x?gI623XDlCodW%v71!^*H7Pl)caH)wFsS^#q6P!m7&YR$tgBU|iX#PLW+& z@3MQIBH&;VM1+-VrJS@NQ{XjMAda(119)| z!3!KlP5Xrs-4%Pc0<3C9DGj@@P!JFil=U z`ArwOhGHoWxlyVp#;Kd&Pw;=U<5>_xm@W)U@xhXB>|QOTzf3|QR)X4HS!w4cmQ`Q( zj(zDUF;*29C zig)HP&?WZ@^)Rh;JtVW^&BPGx{<_CanQXrcrR&p|%5WmmuoiVYD0^qqJf7WsH3m6VF7zTMJU04hPX(wmM8~c<-9_BSd;GOv_4cA-| z8jKm^C#}`tTp7UJ>kQjw`s-2v)HZ<(mc~9oe7>{q`2CbYu5(#Kd@QQ0)k`ws^YQiE zTA523b>oLGxM){mZ_F*o%)Pm{P;MjU_8;L&d*yjPz4k>)4V_+g_Hpn>?7)R^;3apr zRPiTM`bA`>HSOkeQ+&UQ&%boVPCDY>_dG6sGid8vk)USUc2jqz zrB59{@O0@{?$Va$J8h>Q*Zym#X3CXXId;iC`z(iy^W;yN7o&rf{F&jKa=Sc6?X9;&ulz5$_hd*)ljFas} zNUEy&fwtP4&D8%;Y9aewH}HVFUw*42`CT7PscOb$F$Z0 zK?2_&IGscnbV8RHo~FR)mSL|))4EB`2h7>Q2)=LCRTqa2!F$y{MPn%k7vDmY4@EI9 zj?q?KdZGNFjj!2{PkT0R;5eL!-9)$9Z>?mQ>HxTzpHy=vK>x*25NB_!e(Vz$?oRv`p!`$6NuTsR z_1P!?=zd?v7u>}%LbZ9X?lu~g0H;#a6VV)fugjek*`6T)nM!EViH|DJ)kBQ@DL@~* z-WV!*>bPw=uFfe_jBPB=?2}Q+z~171fKuzf&+oQT<{q=bS>@8M&LgHT`UH#9bjpc(;nyCIZ(&e<3%K{L88R^-qh*rL#X%c;k**{gLH3csD%z^ejU2O}a#EBHo3vG->zNt`1kd&1 zzsZ||+&|%b4p-zH<=DN|;m_4?O(2t*pS2uAlolE8WZ()Ab@~<%WNOJk{*-Mip>nF{ z=WN_kHdf;`Mswh^C9!8Cb2C{WqMCeUdpFyL+1`cHp=5;9g+Y0jl9^f58R*@h$VtCj z=h!;hZ_-IK9<5gE+W^x9Jy!&w9ecZX=IqdY7mQ%RTZU@hmFJe<<@4RWuxfkwUIk-^ zZM#qNPL)5iWGYec{pQZ59!l~@GPmNFgM}hi4@~>r?V#>bzW8 zcnlB%pMK|7%*x+FDu0KZpS{}k(-sAr_d>BHjRBD#-{ zj^$-U%ejyAhK1|Fob8A~M#@BJrPVs4i1#`n+CnR|Iu=3t{z8HwDw;<~$Ak!}$*yq+ zovm|Ua=sAd5h)B#-ppzIzM9Yi8Aw4b_|blv<06Y)HZ<9rD9hS^pq&Eb4fFx&x(;!T zW=-xHZ=r+kt=A{$ScKzjW)oUNFRM&WlF+&=u^Mr!=)<|K?c~*u1a5hdg^M1gEnR4y zpw`Lob7T5<(+>33cGHRA+5C7&l z-Q0s5x{Q!Pn68c*liK%$%A`G|UXw~ZB29`rcE?v9Fw*zM+(g4)kk9O*GJYZu*R7zx-tr*wMqPEB*cG=N;SKCj1ED`F8R~&W6V&UKNX{t3n=GPYG4aOAY*4&d@ zmEr@1ERnoe&JT=kpu3~>#~CkM%ve_tq64mKh4> zZfnRo_e2C{tcs=9@y44Q)@h50tID3`IMFE~Vlf7i9*n$7gIDdi9BF9^6S(T3m@~f7 z!#&S4&Z^U4^OQI|z0RX-bc!36vsY=K9f+LZbDYS8&Gyw0OI9lyE4X;po@3MuEMrRJ z>ufBf8T|7z1-C2}3FW5UEpvYx%5EKNlM@Hl3*E(PF-#o+O>P4>w3euyDCt3Le<$Hs zoAax0y;2wnDR0!y+&6YPB-`N}b9_aI#Br*r^8<*}Is)Tde5I%OsA0P!uSZrxErMw& zcpHORjEg}0BF_Wxo`G~v6KFt4rSE#7A$~{S09S;1J%j8=QxZVtf|9+LR0dQ-PW`4 z8PE2Zh}`8D(FFmKUx1Rh);yxL&Xy(bpbGjPd6i6)TL0#>r*g;Dd1TtO80U$b3`x#L zXOk1p$-c~GaMW%a%=#kl3p=%->8|-Jb$B9^RH5)oMol=Y6S?b|X{WeIeqGN_ev+s*6Q_B#>`w^a59h&0>3Av)h>BBfzyw{CE`>%w z1lO6vmV<5)??~mZOVWp8btZHLDV4$1+~}-T#-|%^k^fTATK9`R$sD|IBxq$5M}|zQ zdKsS6HoGVw90+~dV1U;F`M8oqDA;kFu-84O6r{^xvagN!9lT2D407-Jpsf7y0#^rzFK zuWVo<3`h?s>v)9QGUcg@QqSm`y8UY5`DKM@>z^r}4}*)|a%jt1Trjg(A8n94d`E6y zrJ|;D%KOz@d`tgyiSx|zxksQ+R4a42EB{t;4^-$8s^lIM6T^6J_)cXfnCI`y;B`n0 zE0rh3T+XtHXlYm^A_@YAi)0j}5gV3ah)iFP#ai@p2^`5|P-OL0udVTQ>a`G9tTT(IzyIhOx6D8gUQy!Ozf`rXePSs}Lm{ycAP-b(1=# zK^dKLCZQcmt`;;>OIGBHH2_B;cV~yhu!K(_%u^k}&V4c`RMz4!rET;*TE;}EyLg#4 zz7EMuo$$hfRUvb}N_9?a2t#dC3v^CXQ*mxMho>o@GYDbKUn!b3`l01lS#0yotPDXp z3nBkPH2*P zMh_c=e}cl$bt$p%Ea=5J)}=7!Iq4o^R>;Jo%qlPj*w$455A4YhG^ec*?s>7eRd!4% zbhDM?J3HEt6Pztv&h=}8!{)Tcu3_+iZtJXfEb|CHwi6<}eXxapCBd@FTjDPU`|v(=0Xk<8>?fVOjm zFk@e{^J5C_)RdlSg|fEd{Q{0=l!k4(@{naJEcPiVB6!6rzg>mm_0*+VCff3;P?Gmk zSQVQW^T;g}ehu#2ug)&7uzIyvtYXh(bb}SsGA#GIm7CZFm+@#EwtLQ4c-#Jn#?)E&5xGm8vK*Nz}~tPD^gNy%?8fLZqe-z&UE5Diq(%% zbG6-eE7g4KXD?m=hMZr_VdUreGfIR0F0Uw?yZX#M?*+1@Mb8;8om83qDK(P_xYW`= z0tMdlp#UvCVMXzD!#^CQqwzRPflL0yb@oxp;z|o<{FCOeP0ArVDP?NErCXfw#wwO3 zMZO+PuC{3)p5^SZch*hABkB zh47_#h943oAQl$|eP8Xuq6Oj#l~h*8z!&r~n;6-EVs4>#EQW5~l<~dBMP`aQ^cTEymkSL*tSoN#ix!icg46IE&Y*;OfO5WFWTJk zUM;=tiJ!Dkq_t;BvVP!NvU1o@x^{_`w&0pz;}S!@$}Zkt&_6(C$d;;>EV-p=EaDY` zgtnNED1)O7Dlg{0FMifrY}`Y_jJteREtOd37S}!}ZQta{teUst1C=R#7Eut6-q}O; zgRCsvJ#Q5(ZD%RZwotib&59k5E&OZ9qeR(F8(FZai7wf3+g)*tw@j@hx3Ybpc8`^` z*!i?I>q1uOD@ABz2wks7+bSzW`pyPLmg)Bv0@s{D{$a&Zeu(Ya#vc`Sq~iM>uq)sB zug2sX*}{E_wr0!>b8o)uc!eoRw*#Qhin$lIDA{}#&jDfx}*^j|#NEBe>1 zfTv`6wnXlDZn}iNXRs#eqsy|&4TZlx;EL{j6QB~A8s#j}Lw(ddhi93Y&fIrg6$^oR z_n&ff@-Hn&vXj3bHt)qh3K2A7uR6$DexT8~uiDLC{Lk8YLt55Zd`a7Y_7<%wcUj0? zV*J~ntt`t*N>VPH2UzjN(3m1x7`fnaEhw^oK0qd{ZHM?}rmSD{ zY-g5NnEqPAhTqpmxMt<9KP{9N-cS3Dvlbx#^2G>D#mL^yoH2J7>+NS^sMD|c! zWH&5A(d`uSSI*Hq~5RHn_x-xperTrS!wfvKI6E|L~vt zxp5?Rg@1sNo)$+J%N3VPf&3?F0fVBOMPD1`f5 zROVl|M7gEMt5`~HEN32x_pzO}LfJkq?|^1i^GY@l_S z{@OQ;x?*Xq6oaj}+}X0C1;4ORNJ^rG$QKM$=q9+u&|YekMJ+$(4a~VxeX*;S>noerLRW^z9ZDy*~g!N4IQ{qQ?~O=#>`!8V_my7$TT{Sx@v#OMhCZmW)|7Ih5x-l5P~6+G;EQ~l z>|bALVHIg>n6J)#+Ul31S?&IdOKwkKGttp}QLJy$PEMXtW0+zWW_aoP3V$Qym<6-# zcnjX!g4EnMEB%@7W6C-Kp_TL06wTbQZ@*@Ri76{J%y}|)?SS7b_b!`zP}!0r8!Cs+ zDROv&ve~{Ku%*KOMvsZVmL&zYXZS{21NcIi2N=7LvI%5OiMQu1ce5z`rJm2wM9J<# z;O3PpGlcfp#?cFJQ8w$mnNnDwqMA!^tPXb}v$hN?o@sHRB1B)$YKJnZpH!@&71(;; z3`2{s0rD4$VT>)D6=_|B&EY9a*Fm>Pb=q}1I05C8u=JpWsBl-w;kDQ$P#a+m5 z%G*1)abEG=7TI5e9$7@+1O6<5qpwU}qWB6E1}IhyKNGB0Lf$MQ%|ph>@8=5C_p|*f z{({)Q#=xM%p@r==n`f_mSQ%%rWYho76nrJwRANAJuhg3J*D#cy+b#d4^yz2dTIm5TY33tv0|)WXGs(1SH4>qefi(52hbr)>mY|Um?Y4J z^-b*kFCPyOA13TpuKnXJJ;!6qgcD?@s)yjDy56;uaE!f7E)Z+Nq2Uownc z2kWT|eT*gLlqF!?=e%_zp?KW?YMW^Wn!+nid!y+PImFT9xwSfaWQplHS7%wBa?lH_ zMI|vEC}(8m*~MW01eiy%3gIJwRVUPc*vrg^d3|qloD|u`*2y;3Sy?q3m8pF!ijZp;e{8lek}px-J+XWdjh z&mc?+vqW!)sP(aRXdmy&%-yAD&?`9-OQy0V*w^C5%d*ZxLpc`i?n2nW6as~I#4{4e zjCz;3+Kv^+Xmg>bEn~v$4~yctsp8n%jR&|`m|jYpAba} zWi-l4BslSOm5dttb~`0}6+SQ1KS+@4+dEfUTkxBoz%Q@$hHA^6y`E(ABN?ujz(V?zeD-D zT)H~H2LYZX=x027I%nrTQV`Ahgcxo$z6R?bgQMQM(}y$>}-=~ zGKr@{ZtNiRAGCvxSTij3dUi~j+GaCxG0e`>7BexcVdAsIpL+Sr+x&tvf{d_By@moS z{k{`S>|V{r!)gbL#*N6G@if#G!6D`u{fu!5S(8AhHV~+3#Thb_-@!lVCZCotiRIsr zW0YqvB`%yp)I;Jej%K|%LdOAtJ+aqpt#F~uxMuMT%ap5ix)+WyRAz zs+c&Xv9)Y;oKMxD9zHK&O{vtopj`>*b#*CrFEJ2pYpCW@b_K;Y%aDg1*Pgl2bdu>y zU#5CRd)J+(lNc2_;ktMiY>hAAwUpLgGaU0sWpo3)>t?<+Mh6qYj;G1OyVDr%nx~NA z3#bK6WN#7oI>eLnWI;4|6#<-rtQ7~2={a6D2@BFI`Gc|C;qr$0hg%p1I1S$P%)s8x zM${c!U!_rfK@dW#7ME@J56SiK=_x)baxD2Cy|t>lq~2cDpr7+2*u8VbdvI zHs_MmvYZ-8N92|ZkX2ruqqhiZymVP$fCNpHiVRKl0i-Ac|+buNkN7vXOY<#FR_PfacoWqpf zVHaiI-Dga}12p?6^_`$rUT-Yv!xy)cQ=AsHTR7QeGVcCMG8!+>+2I_BPv6ca%Qx21 zQuj)~O}ppLcTl<$hg*(SPEYEaO6I?AA_x1AAILx_-UQC(LLb@ZTjbO8&#>u^Z*F|I z8+s*qC}Pf~^J2YPF*=Re8IZOU=cXa-=CoCdBN3fc=dE~c%3J_BK*qlUoH2K3Cpd&` z_4R;hYCcY3@#QOA`?V8bH7Gog_j)5_*oOJCF@A8zRjpsS4(m;J2fdv><1fb~TyTA` z2vjqt#pAp)%N=k-^VfK3ehiA-;~{u(^kQ}wa*XLpk%7#$K=x&hD~b5UonmT3RJi9Q z89^HjZ>vT#b9FjQfpiSSVQ8*4v(G`7v|uWDTD*j?S5}y=Iq?Vm1Oc|urI*hKBjx_f zH98Q-?@&+C88=vS<-lJp4r?_XGeB-^RORkC7spaAel8UaBg-8{R`Yl@R582}r^fJQ z@%t^&$uqL_{TpcmL&uQai>E{K1Jq^xp*0A&I?JW z2c`vC$M7%3z5I1>Z%7ZD7b^#ivsSj!yvY==d2sEB&uW$uKHc3DN`W8wdPm}WvSti7 z-DRr-o|Nq(m$7%G7veZ%S2!dy@h~RDu6VAd=y8?TuHjupj#@(pzSvdq5sR|}R(W1t zi7T7RbJ5NPXvx=exsLAqjGv)wPQcsB_?<%8sk&tEGt!&vavVk${{9-l+Ekn4n`NE< zhsH-~(R{$Nh)*4l-==wVlp1)q0PJ>*Y+{)^gm?@21gDFuGo#A9M{aTiQOYUY27Tsya_Bn8OGccw`$HZToEw z{*xUFfO^Pdx=mCr*+9W=Km4oQ@UA8OWbH#;_gk&Vt>gg|&i4$k-F7}ixgQJyt z;w(!_e$chM!!SKebE{c4=3FU#R|Y*w{gzo38A;KP3ib@9GT`4i&iqQLmOmyATEou+ zZ7*%Mtl=U7>U;2aqJ`}|Go0e2oo+$YXIv^r_$ z^k^&DdBeX}cUi>PUbYI;iZPE>FOIV`XP32KJt1ZZtg?r0*Q-&X=D{&=SAH(bu487< zxiX}_K2>qor_n9G%Z^Z;GxHo{aT=&STi#ykIlc#TxjMUqac&vI*9`%$+vR5z7yC41 zuntw7S$0SZ*^{La(}sfOO+T}^k27nM^qW9Fkz#m-#SkkTGYHMpqEHm2?Y@ZEBx89( zW(p2m^jUkuHubkHCn&z}MRh0SWZie%PAFzb2VN#7ea+-DJAhHocQYPWe+MSno~HX=z()ix5(DHXKrX-t0cHtJEK`d+X{FPwP*VKmC7885 z3N~J%N2)G9#I){Sr$2tLagR#IJJ_J}O`P0wjY$;8VI#U2#v{wgP0M@##Lda`9BSEj zDD*56xg{{Q|DlL%hU(D^9s4~eE#>wGm1;d5Xrx<<4uUv z=T*1sAO`?9GJJv$izv0bu}-^ku4`n(4I!%ztDFh(a*fV;Xu9C@$~zQ;^#jjvbn(#p}_Wm%rqnE(bHpa)~qn=>;E zSgFdZ^+3A-%rRWLouz=8g_xs0)ft56w)mkv6l5~mtUE-Dpp*m6-Au#C4!`KaK*BLa z4Y(kbA>Sy5E1Qh!93OZ17#*u0j?@teM>tiJK@qGxj>>UKsPl`HOVSiMIa^>2^4rqe zdx;o#`V%d$0p1(XuFaamdWjb*V!s@-kTt+68UwP=CvKWMXEG#qq@=&$T_Psgj`4 z*wC3>x|j{m9k8(}0i`T0OmX>%~L>i(RbvPe3 z;I*R&Z2mk^(jH`LR%1eyqR_A@{eLvD3UMqlQWYY*6)%LFY)Yvos|WZ13BY9m;222`zfpDhBqbe9+)zQ1N4>B?bDpJPF~Li_JXdB>83Vd zeVQU(N9Cmm6t-8>-#&s{ZFbY#x3kRfm~i)a-Np{>!>zv=I+ol!wJf-Em~mvqHVAZ% zsq`Ce<8@^`eqNZL&9dgsowoR`g$kmWOCBQ5n|9z6{b@%BjW90eMo0H0PE21?`*_N~ zIik5FTo<$$Z~m2xrlPvdv`Jm(YdGrC^BNiQ!EDur?cCSEgh5?hE;vTVkKUuMkTX5% z3#+1|NC=E!jONLvGcK#p1KPq)We0lj1v123eD-I$^7Mr<*VUu$q6S#9JJe6K*BG{~Pi zJR|Ql`Dna><^;hN@ggtp%(~)1L*I@!)8a!wbz+FSvlh;K9T!pT3R9WzOL+0?&MBz& zM=l4uI?}Yv4Rsgt&Q#BKeMdmX>{7dR0cAez)z`a;i)>!p`oq@;LF?D*}LKwDI)-rT>d z9Js+gQHwyO5<5Av7RPLcrTJXseXmoirdg*WqCp$R!s%_s&jM|5jEU0)Y_!zK(@E#H?<$6_?HxncHM2Hzo>*o`z^#1U^^Eu#5Q zKs&4=M${RKD8@RqHU-S9r%Ws@pI9aBroVEk{KqMToxt1bwK!chAE`JcyuSSydO zS?aV*xNQK~0+%Q%Tj@!_U)0@r>S?~HHpD99Ai0^UOQ6zETSIjnyJ)TH?2E`&Zk6xR zhq?Q|tM_ZpOP$64BO5!yOFSdb_p**sP+<<}0cBuNu5q7u`pI{5qRr zKZ&xS9T#Sv9V5Eg&M*`aP5m=Ra4o$gqH&k&&6i5b@=v&Uy1C0^d+|Qh(xvkoE$Ci7 zB`8_2wfATfKDN77rWee+`eZxPD@Zf%s2OzE2}N|txJ7Gc$yx7XUf1_48+(LzJaP6< zQbp^J4!>aK;;op$kWAcl>aL-r*SOm#AX&n*+G*7loy%o8ky@B=pzRD;A7Tvpxup}P ze7a$V6Fz+Q)jve~T~Aa*Q?VWG*yIKpxVEQuZLp8}kri4K-eEqf0||OnY~pAZDaqi9 z6b&#?_)v~du};*zMPfo>o(hV?4%)#L>Jjk$f{Bd>2JDeQA}y5U;H|1-5A#sy`8D%I zrxPsVk9YbV+?LQn{H7bUbrQI zZ=8OZ;29fZ-{wC?dlHvQsrqP^Gz<03XO=N+toId^*>1unyJjXNk#Jh)Q@?5CF+Iq;iqMYI8GV? z75|eaakPF9#9~}hF1Cq#U5{WRiV>VP6J;pR3|5tlWITUxa=IT0*FXzgkmyDwMtQoW zXmkjz4(M_ET2Xfb)k#)ZuYo{YEBXLBCLH6)%RCbiV6ZFfdkkQ3PtXaguaAo^6iD6C zo1sQ_81uqV`M{`>G-J@Z)G1)0Uiq&d0bynGyhOQXTNy=@bN3odOBep36;=1hM`9&c z*CViCiSW6c0=0L@ZXr{Rf3A=!PA#D<@!nD6KdHS$=KO-G4qQs>yf9f^gq?iLC$fZ80C@86cs_fWK`RJ5r} zJf0VW?4Z}lR<^v$GGwLJnc9e>e`%QK!^HJHt)T-wq+p<32P`{GGYG%%HxL^9>@Oq< zp$E`#bQHtMQzye6QbRc=ggO5sD^uh2F78}RVpG_sc$~ER&d>za^O{(TuT(`VG*_fP zxr@#2jQhV?jr(D|l)@3)ou6&o|b|b=#hu?E189Yj8!vB2197I&6r1$RDO<;1^ei z0`B%b;|>Oi*BefS({Z1=+RGkq4CCEd#UKkS+^KH6{6DU(rxTA~eL%3I5)KL5-2*gA z=$4uURP;=)SoQ(+HWjhE+1W|4t5=OZm$Y;kSXIEox`^=#?VDy@4O85yD|LoC_;;bQ zLJR5R#h9qGcJm3kz2~0&h(_&!+&iz131Eqs6h%4mnx3)ji;`X9SzNEnsK{>F!z%}B zk)g+dG)r;kxN=lz+(1(#6V$c@6v#lm>2ZdvaF$U0&gn){{~Ty5htxFC#)?>M~I;{c}kdJ8jV$6>m}~mG3KZ42M(t}oM@&?O2XP_;%Vy9)=eR(KKa3QOG&H5KX$Vx69okivIMaJ|KNvKf zgU6RQp}TeSjJI@IM>huB^Jk&)j&E`gf)tK$LWPNXx=o!<8~R&8zBJ~jr^SD2dB7M9 zs~-w@ZHca^8ZDt-6?f@&RpI506r7`;mQz#U=VMJHB4@h9IhGqr_-_mChzfdozO&1w zhY)!>dru_99bd#+-Zw6J=!MQnJ(Zk@Dr!21!%5_b%59y?Z(~|bwN)`ehsGD;k96JU z>~L>lfzJ~hQZy6~^c!567OtlICBYaltHWxV$XT-&B{1bnD?xq7S zRdNY*TeysHoO)m3tD?2#X*vaDyhlsP9KyEa77w9f^iJQ#$u*VRi-v1XKYR*;&eYCr znMD{Wa^n`)ATJ6R_#E2&8TLXs!5@b!qSN)|{g?)?k>-7P4sPOboAy2>>?thw-;hYe zXh8JEdO8c-YPKW?3$m-bZKHO_(HlLV-(-O)m2fg{6y%!P{N{vHWg)Y0<9JSaaby`4&D$A%v{3N z)`?;{wd>otro8DUQ%By+GV!+s zUDwW<^psdrn3fp~vGGQ$n^V_%*lB4T^ll9%9CCEun~qZ)V|tyOp$mm^srfEAP>*>x znz!QHSF?QO#H&uudmq?z_2yw_NB>aO>f8uS=w5A=A)%eKL{CctuQc3bRSJj%9pxAPuD6EZ{&jU(dlt=kKu z)B29W+Rh`7xJLKFMtHVQ%63h>?DkisK|k9 zRm9o_a*6U5qmQ<}LeaD#vF))^R^0eI*G4HEh+r{}HmxJvR(wX`72_|tp-3B6UOq*^0f*~W{WnUr&RmCUKSP;ZgGMjQ8`5kGcB>NyJc6(Erko(?GYAjb81Ka# zOwIQY>~)8Nd-c7Kix_B>h$*_yz(=*%0zy!;QnVWHqp38?f z7}2PrnivO^=nnW6g=A&uadO!wGp9LhWkBW8h}m~#3O6>a1O;Y;IEw(eh=e3NhiWr? z$jb$>9&Vp@cdOzUYsGT7y!JJ966G@wet`7jO|Q)*4p2w=*wvzLMmMJeW9KS$vUf+cPSu$MoOqIgJTC~%fz~|J z^d63#jeQV7hvbG<8W~;ub{M6+7kh3x&WZx>ACqe%6gLWlC=}Bf+hoyl^shx3y1i3r zn)*Q2`nHz;$SS=(7>1MVb9@&;lmhC2@EL?-HPoI{7jx6ow{K|dmVuXVN?daK2T|Ch z=Qw}sXVqNd+V|T0KbMkD$Mw6%C_&ItB){5nyC=d4%nuC2$nc3K?h^f1*zGNEUnwC- zal_NLZ!2P**3qP?*-jDYAYnva)#XM6m&scNn+(#U2AkW9xWyOk&v1Ds95qFDk@5^j(QVs!`dK5KNG)SgRg9+V`TFyBuceDd|QmwELFha#+R|{Vn@>XOS z*FA3eRr=~5V`JBxEvDbo4(ArUn$C3}DuT8?Z5h}~q&N1fMmO2C6KX0+nZmoCN}_*< zBa!MVHxiys5uQtRty_y2RO`uFH7j(ldnkDJzgpp~koO(~cgyR(9bl0n{g&fZO@HPp98-lyvYdKWKF z$&yRyz7P2KOwF7HPwm0yzK!St(!+akmfdI^wPd@d|0Q2_F{GBu;HNjbt_31T2x7sy zc4oIat*|6m#|QzAXGlII@xtrnt99V-QSa)Y(~vi>*Bl?1Zji?iPM|QOtJSDbL&WwTDIQN!EJr2LtLY)KC@Nzq;VIM3 z;eGqvvxYjW_ZU(+GWYKt%$Q8~#n|GzLTS!X+leC!4Eds;v-m=u%|a9x0LF?cX1iX zkRdQMPI`DP8fd%-$&O>F-u79Yubzt+h{L9je#SZ>|2wU8!0`q^CrDzZ+wrYf3ad%! zs&z%u!#REtkjrNidIWP%L(>Y=$EH6~WK+#+L~YYVHheRsCjeioCq|Z<V9c1MUA^fGEtspB!YBc`e%RCeQ;a#5GYZH*=c zD9R1ef47^;eSq2jw~i@y`Bv9en(K5PUfLbDydkHG!!g|6J0ejX(t~*P3lEg1y{Xsz zn~<=59#Lo0qYxL#U^!1lvQ{My?{vV;`o%G+vr@3uhESIv<43+l*6L#(B7B9t z-0}!8@uk6}`n5#jM8TQ)!Q@o5J_z39f2P?UV z?VPIMZ1y?wtrlGS(l`gkbZCk3UX|_2L%|jAl?E)}b z8*iRf6F7`urXr(vOIf)uz!My)fGgG|zf}cAi(83*RN?5v*J})v)kQ<+B-8SLB!I~g z^ky*iy~n9@QvIuAIM3pR^|8dY#;HE^{4UB^QD1Q-mdG=t=tv5Uq~3bdI}?3;w&E)i zL~g-7))J9I{M6foX<){<%a$rlb?8=0p$^mF&mUTE1R@<1T$AB(QW>Hr`9x+>1gx?- z%Q+2}SDmaxm_+8fM#mh&Ju}+RPLbS?kcB<%bev&msTA^;oRGJQDD*qx@Sn@$2t}~! zg8XY&rR)YFLtSZ!B`FikMQcxo%zt4c!N1ZZdYP$(c~oYX(i~BZ`RWUT%k_+zI$_e6i8$NhUHji5aE*IA{8lCbN8Ql{j;=S4dTF$)QNOzpAg>sgK-SLm z7lH(Pu@nEwh7Di`H-ulMD*`!8jO?8sNC@i3rQLve?MHc4lIXGu?zNxZ2$NI!=97LT zD%cTgy);Ra8~PS8f#ufG(;E4Wp z?@?)ENq0I9)xm-HYd>s8ocDK45Y3^K$kMalVA>gA=IK@p{6#P;j3WN-X%W>MK3S)Y zW=if!-9J|(OUq>Gk_JY4AlqBXea9#qAAAyDR#nCH_a0WrtO=D%A>M;tr!T8HVhk9+ z+~?Q|vDM^(VKkw2kQiT#OP%dA4Cx}DyKyFH^dnBvm{x&B#UDJd8;Q#U64GerW}pK+ z`2S1O#0Qt;$=pl9RprXPlHP;zBdvAybQIrxa)o!%PHvs%KV zE8O7ZK~B3JiEQwsNv`ZIBi4MgbLBTiVmRSQXkzb{$FliR0Q?nsRYi%UafBQ~uru`T zu*myWx}0~5Y#(~!!ZV!m4KXw_CT{B17CGaJB57=gZRZ^~WUbz92;2n`RbWk&rkbAB z?&MQvA}0doZi`cIlp*Iky|l=>8{h;YrMJ4?1E;j1R4nL5^P1xu5*II3nxQ*L9yr7I z>CZ}w#K*TQrs|tmp>A%xKQArG*__~z2@rDeBBS~_TcRbNgNScL$F~}6mm#Z`k27m+ zR;G@4glu9|bEvV@A#|D=CVSPn$f^yWh)obBiZQiwvq-1FyWjcWLc{xS88-ze)xaw0 zQ{5>lb@lqU63kF#ZTeK*RGMZLttK<=QM4IZ%LsbI{Uo{Nfk|<)n`hv4UH_Ov46d4inQl;OyF%}WNvnidGoQpi(R5~#~?!Y(EPSO%F`7S;dtzM2B zE2q^)4>4G`QlL3^c1qW%bmM5~Gf@Nkjg!-UiDZ3Lz(#Z*n1T#;zQAJtuvyg*l2fN7GQ}?-|_=Uo3Y$(_?7P zWvN!7VzR2@vY1ZoncXKTpm7;<@ zozR?09UyC{w@nvFpK-gA7mm$zyLFsXLKf_^`FT&x7(c7rl)m3&xJuHL66{2_6A`!q zIO(>n;^VjUM05>$2bQgF%8zTSG-cnW!S(&+3B8x22MhX0LoI=Pr zJf|83BDV_(6#rjMR0-&icj;9Z1ibZE;@3)~(%#R+$yZ{G3m+avvId@_i^Cg`O4QY1 z=G|MHKf4LkGlor(W7zWsgM4>WZHc_k;~5IS`D=ZEF^8R&_siV3(bwZ?fWLp2Yy239P1Y zgD@c6MUm?CBQUXQK4maipKYZKu+RO~AfQ3^O|+ zWve}L;CwDpUbr)Z-gP4IirmI$DsW=9#-P=@zv=3vi+RyY7LivgFbxPw+)AmqVaK9Q zLIs%oV3UA@NypJvSHcWpttq6!cq#1O13TIqpOR9CSm%wm*e|Z3(%LwY=By^f#CUnRb!_pH-Y!;AcKoZm;RafAIL{Ox+-o2~WHWd!cAeqL_ zYej?Q#caeqi|xvZS2#PDB1*m?oDVnB2tizEgi#PqIYe!c?Y7kZ`Sm4GSdS21rRUUy zat*K0h7=nSg8z$$MLcc0btF(z3 zs{8t}b}Y?d@tro|+wLRC$7d5dO}I9s7N?|yZLf2xw7^*W%yWGJ#Qt04nk*vsy9x+- zyy1d3F0X}=1U-p^FQ^xpGDxa6d^V`sP)f*%7A$S{Q{SHq8O{PW*p z(+Y0-GFChWtCL>Oe}a2OVOm;!F4$i3BR5e3z93}9-;xctL-FPlZ-$B^jm$TE00A%&~M#JR5J)EiP>9Dp?7VugvEB% z_oi8?sczGZR9%@wkJ^PlXn^LakYbKwN7kNw1LKuYlK%KlWjarYeE07RU#l9-F+xmu zgY__z*QpCn?uEdm;#3-27qaTR*6DHeLG!UcFzXz^X>!J3h9xD!t36{SKG+1(Fnw=mtpGDTi3 zHm3{(+#+sDTfz^S4^HA_)dLJF=i&W#yj_@RlO?oL0Dd9ID=|IJ2Az%5)32Y&bLEa( zsRIGiw$uVv9{1}OFO#q3C}vXQTi5Ry0~pTTt51-RYr0wTo-CcE_plc_lS|2_X6Kl7 zgnerly>leT<4$8yag_rFB{BU{sYE25X#P1nF%BQ6BY0GU&+k^zgyCj0HBkdCWGeCw z8$mY1E$zNkhqZOrnq)r1Zwctx*E9Z8Vs|5p#V(hvz<}quwMfPA6OoQ*b{uEk^*#5Q zreJ&hdq7d&LsL3&n-bDffqxK-46>yM&r7y(OV0Tx+)#!BXm`6p%ERL z3h9wY(7b_$X2@|)@Q|^Is_*b_cWT757c?`4-1m7B7|!*jekKOoY0MhL3u@Ks)$RCB zs`HH2-hwYsZt`Oticy_GL3cNPeMv%8Q)kyZ&~XBGm(p!ef+myn z^*TJ@10F!X%zD0{<7^V45OYk5>SafIJ=D{I_`18|2>vU%#&w^;u<3*><8GJwakjw{-lyTQSn$KBIQ;cfJ=N8E*Y%<@ZEf|90-Z7ksk>gg zQJ|lrXBHbCG};=cG?^8w->s6PIUOw~Z)fEA*`Z6!%=o*g4s3k)*o0x8^NS7AinWT9 zx@a=qM-GKd$*0FQd>4NPKRs{2o$krAlim)M8vN`=C88Yw`6aM?+B0d(0XDp~(#xGqc11kv&se!Fa>nIclGTxdmW>&_Jw!;xA zx-(Jed4^=no<>VB>oRp=wdszSoq%l7vt!PtX$j$ai`_HVeM#5#`l(cd&W|~xa~^DDn?{njj3=hlGC6Ub(wS@B4snJS2z6qo2-jew06)S2ts}?ub#+3I)q)T(l9Zl0Du6%vt zVub%*2!l0u<>qBOMhnDxpbrf1KK8;~d{pXHryOXYX+etM8AqXQ){3*lU|{#0Tv& zz)JW=ZWQb_V{W|7$NJ+Ebs zgU+o2oM?+Op89b~%op_QBwO8k(fcjO;Y3cIRrEWL#%MI6qL^c}cM!ukbG^gaX-*FJ za)hw6Zi09$3talQdeR@x;H1c~Blo9UXEgf_{yFTWxnQ+x>FKap# zUN?!fI(Inz6*v=ir)7p$3pN9A!v|`V?@$}#%ikYP&eQVriJwyb(T%Yc&Ii9(BXG(k zIxON{+cEllt+Ppb-r2$Ozg~nrcu(0<)m`S#V-ZY$*sJgKjJMrFW_VJJ@e8)C5B|oN zheAn_lb2{hR5QkBGpSJIBc`8{5modwHet=o>o!nwSHH&8#60Rh>Z0IdXqCc3a3%6< z`bhrP-jl1weMojbMq8~5>0p_w-BEX{yC`Y8FD(d@P!Eusm+oT zW~v#}gev${i?XBk;&rZ8P^2jn;X2!@^%toe3R*C@wTVQ#j8IT8Q$Ra6@U(Tm7oqi>|QRF{R zQ_$YEyRLb2qjp|V8pJ)#=SOS21SzoH!DPBoWUgYe{qSyKt~oO&en{+se)^`H;5=Ds zIFV!ev0ERX)qIz;sp^eupNnz!AKDPRKAm0HAr!C;08Ukt7z5oHSWF4n5ftjy++T^q z7;Dpl9usdf;|vJcCyO_EGLb4NXhayr@uJ#}(2Q|kYDZ`4y$>||7SkEdaK%?Pb2*!o!^;=SpBK!iU0?YxU}-Y@?y9( zl|y=^r!ES)$=xU(*f+T+Krm)A5xKe0hh+>LuTFfCUA;8VE4u^t)Ig!xcqN@&XH8w~ zwq(mnVEQJK(1w^I2!lsw%;b?3D>p$kmLpVp}|-3Un9Fk94CwLzP_cWodY8`au{zDy3Y zjMuZ?&wIAPhJ|1NSk+xd6>3m^Y)f8|4k9PE*!Qs70-$^fVnoCQ`PO)`z{(1~q zDCHJ@^x*%=^GNo=j>M*LubR;KyKa{k>Z-ssGaU};$d)9_JjchR%C>MtA*IxA$T@+k zFRq2Lz(XYWE$El8BYf3XX=7uM<)S#jt5sy{p+D$DTzKwrV;u}VeVIi_zhdK6GZ?62 zsF7)g$V3G`k5*eT0S|P{B^+dEFoQ$KEun|Y9~D$wGBSCwrT_xj8;F6lytL};4;p*Z zWBjgFO@p|TyC`U}m)ba?8Xb@0mlac8i+;xQ{bY9a4mvLieMDBTWQ1mP)%A7$Kq9zU zlwIO!=xyxAXMOY6a&PqW2ih9`cKVB*)`65{e#{Pz&12x74wTq%WfRvaJt9)0F6fv);{Wfbxu8DdTD2hN-1$7N0Rkfov5 ze;c^GBg0EDK}yur1&bZAN@G-C|Fs8BV0NUmwdDfRrxhR0-cJo2Y4pV&BKQ{MKZ%rc zu!44Ct~pr#rJmmmU(T}s@Pnh+1eGJVhf@9?z>1~n6F&!OV~^Dpj1Sptuj8|8$T2TC z6rTAH)%#GYP-8ZCHQ9+tkwu5UL6PrkA@cHsP?VL?XH3{i`PFQv(DHWHXf0wxM<(Ca z_thSJ7gSUAXpgN5z-VTb*YhyWmUJ2Xq3BB7a;o~-pk5P##CkZ+h@`#_pvsfW|L!{V zapUy93MbD*#1bTq-`Rn+{X-?$ZAzDaUy8ShSQ+gQ(Dv)uNsS^-USwqVDR}Qs`#B3Y}bbg42s7Pjr*3SAz zLFqX2rcqo>Pt#A@Jxk-oRQq~{gnCx~LmWac-827940W3Q>tAjrzK`%8(4h%|bMZ8+ zAdyUaFtTt|Tw#&*-9vK)zanfffPbN&#uXKp%GDu?_LnG7#$>|x@V2?aLdtxNPNQc) zYR7^Y3oURJ%oaY^gx5Xr7(bVrC0t~2P}mF7D{vWpR(MauE01XkdGaCx{-?Ivk&1k^ zNaRnZaxASOElg%_HMV_o2lVIJr;PZFN`A3B-(^Zg`M}T<=d7i7ox z+4LWJ4vh?3E4dMsnwJn-vAKp?f6D}BSqtX!DNjdh3qclQ?QCw1W!%PP$3?SMGpnN& zBl3%p7h&rz7h{br6)$xp4wtgF9Jb$8(a0>uw24$^=Spx%R8G!kvU$4Adl}j|wypBo z(;L3!mR^G9UVNy!yUlLp`07y04U-v9n$NCACA`j{#Wto-^F(2{sTf>#k?`mexvkvV zf!Q4*g_Ce0%D36IA{>s3G+UtACClPzLl;x_FxBi+-a_>8dYQ>C(rZ0aeoT8Sg``!y zTj*~}x{i68e$GwvDWGlAtMZDvKn(0wWiD5hW?!%K(|Y~;ki1&AXWUO;9EHGbc|q~d zD9^g`QV!CKQ%yrIdZ^r_BA=Xkm7zs#cKK7ZMacrVV(RPL>o~;)p=soi z(QsO$5o(h6nERP-Y#mjqZ5w5A${ZRagH~2u4Y7eY>(rbwxLOUty}1S3-)-l>^7<4v z8~aAYJs}oHgxYt!usg~#y=CTo3*5r?nyrKw;8TlFdcI!4R3uc?dd=>sYs_Eu#Z61x zS=~=~O$lsYp=8@1>JzSb&IQhj@9XZTfvpsU5Rd>2psfXfC64cX0N4Uv?*oK{0omv^ z!HfwY(_f4oGk!gu`qG^i$t4Mj+8>>4w-dP=43<$cz?*_z`~dPq6`c}(_VGHUSNm*( zU#kCxc?=To8A;FtC4#iT<3fHX114FYv;?YTz@4?^wL>kE@yX=+@3oBGGaM83reDS% zJhfEi2TX!P9*8VKPfy=&EluJsdO+@CX;@wb>~-&tF}vZ=nFkNMvd1qz4J6^|Lbo%1 z>)Gz1r;e9&bB8p*VAPhcm`-m+OMR2?oQ(usv$3<0z*X}>yWLH-*<?LnMQ`I8lr+ZTIQMKdGG~veF`|i<Z3M&3+J4BXj=+EEyG?OzbYRD0pt=N-&=FQKrCn@W=jOIDs%+g!8 z4WZj!EwqxZofR{+pi{S$Dn{*mJsq-va&L)vaz20J8`w*jZIV2$<0K=`*hrQ+_c*{n z)DzCFLK}x(vp?Yq%2JLLuosJVB&%M@u)D2V_SQ4H7^3^I>ZSzr#>>I^lV8ubP1uCZ zT8pyL#k^X~kZ(=#?n+vTC&JrUYfH>c{y~T)5M425PDwPPWUHOe{<}`X(EawlsM|}$oouBZy11_aO4T8 z->t4L{@x*1F!O?2-%!Ue=B?_MObu{#^*PCQ!#? znoa(RhScsDy2F!Ztb<6(U7iIisN5iHo)fiZ#LJ$`x^0&DmeoX8s;&ahu1#VfJarUF zuAY`C{`EMo==uB&j1SJA&~^9D3G!8UF29K7hv_h5j{7TIj_w4LL*D&-##|Cd9G5y2 zoN0g37l6JyRweA+M=`M(CIJP1ep(h)JeRa+@m zv$Nl#UKvLwD3U_9nQ=##Qixi6{etOig@AL>rhJad7`i~wL3WfpZq0pWI?F)= zzLt_5prMvzSu8_$uHhfwDMOyGjvA?K_ub>^J(%u!Byle8BS)X1JwF=LJrIVZJ&^Cc zBN4AES92Lr`GHaCrtHK_WW?ymURKA3Q6YdrCvMFxJ$8o9 z+6RtlDP=l`?&GIT!r^>)m93E-o%!j=ZQV2PrgFcg!NaheN@D}&~f`SGg z<{A~Ks?Yt9@wmx+N3u~;zFKSH5>YK3r@`?7X$?<|8=OH_Ju|0%WRVQR0d*H_(!#8A zcg|^Xe5=JnZgvRs3SP>Z4%QSQ;CF!7FjTHKo5<@@JI*(4GEbe2-EAeCves~%x$c|+iHt^!^^Xk6`_cJ{Xp?1XSEph)HBX!G%UDN6-8*^w$dMyu zln~gg{C0w;kDk1|DP6~7&KR2xF%pqyLmB8(bQcgBWv&Y%P0r0vsaf2QH(nzUrt~Owr3to`p;M@)Tj05&P zqoV*dta4DJlQ{*R4A~`Hs(6uxZqBPN!~Q|F=>gOu7>EX|Y&=+RHxvzoF?rBo!^s`A z;kO&P@PpnqZUC`RxuySBhdp7>pj9?EBDG-?#!B8ltK~S`nnHOXbGV-@ec*!b-mLn^ zZd5?e^!rATndm=lmNavGF#QyPu4ztPQ?~%}FgksI^IpAIG={7PMJ#iXjXcGXXm3m! zCpnDFM!W6vV(OY-p$)xi=KFTOcB7@P=xjnc0z@n-PTgzD)YvpPL`GQnXf7^0jFhy# z6GFTO&A81CzG8RI`gZ8<&a`I_c0B`bsoHhgizA_6-{^4HVUTpPOPVKgt!G|^OxUwp zLE&Ir8=7YM>Ld|lImk=n$sgXRuOLe4idad}%5k&=G z@qI->+k|K1v@}b>uTC{-<*yu2PN#!jgT+`mVeDAQD0wk8Rh$Wcl2+ZUgvKmFua56z z$*z?I8MmS)*pq&A{KABA4T*tJ`&)47vU_LO>?bTyhyJb28SuKFw-+8@pSu2SC#B0G zCVnF=%ks=nW@5H4=w>ypiRPdG$n^wXm@hPo`qa3)#03~?53;`@-Gif~e1qsEdcohL zERXeH#Dvh2XnOhl^c+y2aqq4kzji0c{~w`!$={De8I|*Y0z$1{eCIh~Rd2m+wB8sV zpCOJgO`qEg?D^-iFFC6Csqt>sZ@m-|i>Qs-5m*7A79` zWq2x?IOwrcq`EIF29iF^frRXoW*W~31D?)wo11ga?xlg!$N(M@{R2zk)7BvG8Tvo( zp+)>us6Lnt!wD_)5EGo$&>rtxhv@7TOWh80SxEqVr?I)F`+SS&gUe(HYf?Isa4Qx& zxU&85Fl&|;xr(>}2W)c|3{B=%xWWJ znInx1N5>T&LRREEF!Bz;+ zqny`_Q_}+fm(z^bv?1Mq{o2N9j?8c<4s4p|C(gi#7}h-$64;F-Ev{IQd+MmsjJ-uq z6icV@n1&;6E;YYkfjQV)3~KiXjIX;>IE_-aLe+_3k9i-DlqzwNyoO@e`KU z?+S;9_$2Gt<zBT zYf#3vV3L+XH0oU5{o!hLG#%>D;T5FJgJ0N(-)D4KBKV@Aj=%_r@h{M{2mQT=aKP5=D_+$VhCaW>%er3Sq*B`zCKq*Dy~Z9gAFeSZr$m!jNd9J|5wW4#oYsEK-bHfe zTyz53>ey7qBW_aRFqtL_IVM;KjR}D6fxmu$<{o#LFcRvk| zE9irGZbRCG{$&lxW`FgCJl4+-@^u0`O~VRB9IIYBabZ5z{0C*hW}*)v z%@it=V2zVbSgjFb^G;GWQhYj}bcEKtZ+PLjcm@tqo5go#9KJ3ypec+a`R%a^YsoCe z4xuk%)39cf8z@9Ucj%@kD96`#*!8Hvzmx{PNiO8Gf0--PNFQc-Xrzvb1if-&ajgSz z=CAW%DhGMlYczv$WUbS_K`1CUc-Sz``!WnWBZs&l?e5bJk?(}pF4D)Y=sOTf-v#n* zsQfr_Gj>e#gvbE6A%S}~42z46Yyq*Z+%eKyhw|M0YmVK}85}1D%O)P1>|+|$4OT3f z%skGPZOj$$P0j})YNz-nIj0*yfEIQh{h*49pg5&}bV<`I5X-GN70#XJl$zHGOq#)9 zs8pX?@-&oVWa|5Z0cs`^QQ;Y9+gSF!87vGyv{Xn7{r!zYVO$0dW2S7M6VHFG96v9c z8^a&&qGP4vL>81?0QB;8VX%hJ=BTi2^&6Si-uvRa|B>+ai_q8+r(L_H)K}`Ige^Pb znLDi%;ad-}oUz)fuu`}aHJ(Kbu362#_>)=5G)nef06y~9J}7Ulo6I+l5stqJatav{ zmJo|LNfcwmH4~A&8WqzH%4(8QLBhEjdJhlEfO)s&lRL*D<9D2|w?oTl<{M$bNhZtc zLR6#TDb8Rs)#u2yx28=f2=?QQVrwjZER*4L*Jz1wbtv;EI5cIY5>97s8X;TEd9Ek2 z<~>+F55Ig_%0@7c(Exj|ZP>-CYRlf8A2bV@$+( zqM3LX;ciVqj6x5?`-sxian@cpn7Ff=v}K8%OdhYjZ9KcYyJ%0yyc4^Voz?p~z56{0 z-Vl-kK5qEN^Z6NQCYSTJ6RIzeMR@8Vv*R4=B-XLFK&s^c5{J*!m1`usd5lbM3CzfN zhR0Zi9rNqD?FvKjZjZ*7=q67e+@@ZGN$^z6OAo5DH;W2yHHCQ3%5mww5JVSQ6*sN^ z07xlwORY$%-f{Ghk#8{>5QMDia2d_P2SJ|VffVsa@tqy%*=y9x+2uT5gF9tUKOsxh zd1NfJVtTwoPH29vFf_O3RGcqwmdD!RS-K9?<_wMkkstx~$lix;ywIcDT+I>cl7vLM zi0Nl9EGRE2vV^`?z6+l;#d4s<82X8NE5Ov7by%~F@Xn&u73M=t_Zh-6xOrJ58m02VSnV{A76F%!Sz4f}vqGE9wxp{;m?LTXwBfD6uuTXnc6nFW1z_s4F z(cM$@;n0Xxva}?zyc)N^VTPehux_wx`o9iuSO|It;7-A#V5$_7i+% z*O6IS0?bEB5Y`W)toRhiC%^GpGsUI$@xuysC%^Arv5Ls;F3tMo7KNs4=A6K$DuLi_ zTlX8KkHTtAd35Z5MzP$AEEzC&_j1H#d`aYi19|MaM^-d+q+I&HusK&3JpmCgC|*>X zDo<@;`-J6hCj3>U}Rsj^wD$q=bo8i~ZV& zXeF$={BZQaAE2tG{wX|&(O9=f)WR_TJMb0H2lh#Er;pa8#~II+rineUm=Y9B z6H6;djxvs$v<&8-DVKn#NLSN&M{W+kz-vvjYgHdN>2_p0mBN#u_O^Mv$Ly9oP1-wO zXiu%C13jFI;wz?xq0>*@ATINNw_EPs39@`-6oKomxWN`SRY()JoG!!<;r8Z_MgOR? zU3frj2nEg4;g!{CqI_$YGw#2nM!F&Y2pyHyi9}{Z?;)g1y60BXLtf`cqU}r?DC%Y0 z_QD27Dc)ckk58nzKh|HN@;sjG79YMEOT(XK+F=v8bn8qv_P>ixi*xLsjB4F;>B+SJ zGVR@n$`@E{9D=>!0Hchgv_m4-%#x<`*AZtmMJ)N5q!|R>IQ2VH?WrcVd?|U7#g(m5 zu+PW`=8)n++_xUbC^h>3LxW!$N&lDPxVnSus+V)M-`kmkA0l6QzkA8={-cZf465=S!u0OX$y4rdin8 zUgVpwsv^sEMMb74PPKDZZLb4VN-IM46!Y7r)s7vNdZo=+%M!Tg5y0|teLu`ZvFRd8N(c}mZ02Yn)0d?S=lEPJ8FD6_b^|rwFzaKyKLh;c?Df!1?2j%Cc{41 zONTR2Q@>N@uO!i}PZc>#d85$off7n=tb+kd-ERiFTflrIR}45Oi`&a(e0RnM7EHZe z?|2g%Xpk_1-cZIA+kD0#$8zd!}MR$td44o*qD^syM*PC5k z%C{AcSED|46vBVVT(oq|LPM@8bsT@W$Txh`X~Vo=E}0J6w=*Mmo`=(rXB<2W)4`lh ziq=>+1i7x8T^o!u3MaZY>hd7B=Ek(^_tkiJwv0pV1zKTLE1j;AITb``|I@OKjQZIW z7rmxoR<;EaQ*gU(2O#f*znqG_h^G|BVB}z zmT&*qkgh8i7&c@lMK=V|Nm6$emu!pQ7c?%6bS>f1u1xb+XzmZU!{TXn4$(lw;?>_j zuK0~x?U38ItNQysv0xQBs;J!V@+i{UmYVY@R7`mM0%7odEmu~~%z~hgph_Ri?T@b$ zmsJ&aq~wck2V8O4oOSKek&UST`k8S9(9Ri+J$QW|L*cQj>3y0@#^aTRYJ;-ug4L)- zYlwvMIZK{9-1_Kxcdd&TSJ=islf$3}jCT`}fhGfruPRFCeGE^IXV$xGnGN@Hzd44L z+YvZao^1(Me`kP}+e_iNuB&@Ay&(@siadiAoY!Sw+=MxK72Fy5&b(FDgBd0j9BL#* zGwY1@bR>?C6E`B^KHI*^UCZwn3AEm+Po7q>Ijt>r`}8zj1JCf~885swq{7oIJO?&E z`HWqL)0iGY+xQVoj`c%~S%No+&yJwdST7wVV`KHv|3T4pI(K)CQu}6*X@f-s|01g^ zR>ff3Dz*$z7{BXB+FH*HGnn}feoe(lkB(w|i(KsBt`G!o&oDW3A2hK|HVF!Vj5 zW}zD)_>#DaFuIW6-FseX_QGw3X7}Xk^enxlOGOl05=Z?&DKJ)PW4a|swmN>g4~UA= zsz6WsXxLJnK%jSBo6e|N(xagN?~+?N-q$T zJiUBlGP(TC1T*|U+-SMm`T%YIXWd+^9w%5rafJa%q(}t_XlkIa+yEn^n5E#z_7Ve- z07M20wduHGB?x~y!qHG(IGkotXX zL>ZHyT2uHkzw)Kk7TC~)DTQK2ay z{IW93ocmIYAK0Et-5Uyvv%btIT3Ny{D`YEd@`*)BX?9L&)hXV{Sjwvm?cBM2&g*xS zz4xUE?kR7zH0Ll`En)>yYT6RdtKy-`lRnBgyY@mDKc#RUEFbmo>*IejZVM9^P$!%* zY(h~r`!Ap`UQ(V^RLj(-yc&0yLR?PC%hqGF%#R?fXt9SJU<+C44w;$G(ENhU+iw2<1XQY~pPl-c3?1HW)wKxNuliD6#UmuMkv>{nK~ z_H{+4joQi>el|g3KjhO=cNecHr2Vu_q(0vKC8n?(-YVJ~FhB8MHDW9_ctSjTuS|gD zR&53CPKB8R^S6B2y7mBl@GQsJ)O_C8wtZ-d-?S`PLp%i*4-{H6qw<{4#g1*G)P=?( zBl@CSq)(cj?F)rQ@9fTG@BcY5U#kWm%JRY+-cQ%j58Vx}_fa(a#&BWGzsc`e@$X*m z*K2Sq<}KiHTU+mEytIo~@!!4IvLH(bj=!T(^z?vzXcrv$yc@GGzO%NZYb#%PG$5f| zBi+j;dSJkhfav#g;QDt1k2ES(j!lPn0+Y19@X-41g`BPhq8)5YBORyK&G77_N zr=s+d-cN^B66N#KD0?dWRL1mg8iN*h_9$P&xW1OD_UlLS|N_@YrT|~lv}kGZ<*plO8Yc%HN5>`S=?`d zf^tp<$u26=_19d{;&MMh#Fkjkor-@4+-R8h3oVv{;I_O=E`HftPd@!^)SdQKJp_~ zn)}!M#|7f6JzO9WQrWIE3wQltY3@ffY(Ak`$w%36q~fEB>Iw{dg;ih?_N_}}9;Flz zix$OdkHSW33aYtfoy#kN3gDy2tW$1T{Q02vG{rmp>XM6gZMC@h_x|uhOz~jGaY`Q1 z%w};b_%7g>{#UpZZ?qizqkLC^C}Fa^ea{~Zp7U2fQ<1r#&1kQle{D~k{!(Dt!u8FB z|J}$D<6IWo&-_EY`QQB_hH$H9esMg?M9RGU#TTC_dblf2&-p9K?f+FOj*;{9k=Ag{ zk$>k5$YO!NFb34?3$lq8&xb7Cm@|_An@%p8$n}9V>BUx?=zZMGWi4jRkbM39RxGus z_w*|o+aznO81=Wy0~YlnM^j$){^uV<>566Z{E!*x3W6+O2@$tE`PHckildro}D{SxJ#}XA8Pt#q$7hJ0E?^a@+C-^e#)=*z}`K60G>HZ7wc5 zd#f+9-J;SskGkoLH};3t{=1QUOc+jbHuzlIzxlxEUzfdE#*YjF{YP1c zEsXtaZ8tZbIjAr67nv-vBi8nAOJ+Yee|>mJ3{V{lnptP3~v$`Mf8OQv8*Zk%#8Zei(jz8ba(W;M9epEsTA5FNm*M{x@s~ z-vQz|YZLt=Bt&4(h1nJQDpH6jDwRTChCQTY`b*^~e$vL@=wK%7mTh9EZ#@i&q{V- z$oqo-mNPkp)5DJq{dA#?{`KbtkdNDd6jM|b=gJLt@m8x^XSBU#-^aoM&ikDy`R#EA zn)fQV3|IuvY}UYE%9{SQNX0J!2gtkju_Y)AB@e+Y8s&Q09x>xyY|CA&`8Z#Jj>UKT z%NBM|M%*PQjAr$nqR;3<_&e5~j~7eW@3(WtCp`L+!mP05KY$kKw)^KfnrbTbW14tXB)**J!9Ot15{VFsbdlYDiwl zprfGc7$*7_1CRgVR@Si`QO~Hb?u%!X!R`lr?^f_OX7=SvTlV^i_`RQe?H@&w@|N`B zCGLIx5@_ZV4zp}&G5>drz^s08V6wS;dG|Lzx=ir9-B)aX681E%A;ZXn+$b#o4fOHM ztwqZ=8)lIKCAxalZ!cK2E*HbR_+cQj*agn{#bcX(*uqg}7Qfy! zb8RM&xgHCG?1=$agIKuxWHr`U-3p7_Z8kOSdzh~@7m)uZ1xpqlhPAbH+0zo?4^_SD zjW632*%W?0ao^z1N}xY3Jo}*-V*SH~p3la#owIVUKhVst*m{XSvo-c}_cm4yg!%Ou z`r`i@A_H9a6)DJ@r7JSQF!!8KHYS$60lUPgO?d@;Ma&_icPh{av<~Qh2z{&&_@%`n zX2`#d0~6=%sS5VrE%j~x7ZTFYZ%ZH4h)*-Y<&xib8dThcPum%hD9HOFd+>)-qF~~S zOsuUT{kBGPk5`2ES?mO_DFD$qEc}6tj@v)`6vV}oK(RJh%KzS`+BY*S3smO07}vA5 z^)5deHr}qp7*{jV<(O0wE8oB?ifVyNwpNH`R-Nc;nP5Lw;`CKbpsZ-IlTtvhuSU5} zcwyRMK}l~?0%*$w zsA7q3klP4Pn2ADDZ}H_8J95dwYClKQvdMK-J9WuS9F?(_P0=!e@Nf)K%8*H&#~*eUnDk)5_HfDuxnuZQEiuE-EeMcuVn zab9QNlV4lM_i0?Oncyx1Y0i^-ghiv3r*#a|1GE3gYpUN6lZcp7Y^WH9UQ@9WYjFjI zVJuJ&F+;mkF(}kb4~NcDv(YznuRhak1qN+~l;{pr5avME&iq@j2)OyP5mY`O@GRc1 zOiXcY#_3sq>sY>EbKLzte7@KBo#Edgmc-WFid+a3RC_uz?T4Fjx`Vf&ZHZrJB|bg_kCD6IUZ31x`uJl^IoxqGpEWg5i>i(#FThgj$XbP&RxU(2Qhqy7CN zPol%49_5aZB%%Eduay${?n@lCDwYN@k88Qt z8A=l6CSeafT=57ej61jyR^l;Ovi50ST7V|uXOrXTbz8olU|Ck|<+2Ey1hp!blQ`Ra zYNBBmadM@?OqFrEdIH>7NrT=5mYvUpRI9=mhTz)Otz9FdfuT>r-xcwHf|wPP9tkn| zXYRQ5lLZtbGz#%l;ut}(TrEF3g!%Kv>%fi!tDB^_Pgnz^*X16R9pky-D<_HasW9xt zQu6Ip@EW!|=@9`FgN6&K{5M)RQ~n;-{nNT%aj&VWBonP^R?R4&acI=;>O#nzCTnF* zOrc1tbUfmirY3YY+lO8{Kb_^Ja7>|mk0pVhm)MMB;o5~!zoJy#HZgYLd$aU)K`j#+i&9}~EdTJSX?HrKG zt7bjd+>J%=?Rrl@34SrX>|2@`9uhyIZwnZ4MJRpU54J}SOumWej02JTL!z`SY`}R9 z{FnO#N;M78be}t_-EKu}rnLo~lOOKO?n`n!LXTt8@m1JoIT z*I{j7A7@U`?poe>4_Sq)aIW^9yA__)4P4jEEU)AFbuAnfWr;a;oc}^?EOx}n5nP)% zEI!yLB$Ov`Cel{rz{$D0?(IF-L`ylp!C_L#f8KS(-XGlOl9XuGZ;|a7ni^;>)`mUn zwwKgnvYTO*XR??rYcSzDc-@gY~VqlP9E- zcJRLELq=TxnX#6{UEQp9(QvVwRd$_|(0fH!ld+hEuc2LuZcBsAh|t1sIdRz;B$8t$ zf4ev(M9+aOuLTZyb+hO8Y`nbNM;Oka4qQ>Vw@{y6Wd(p&Du@6>`{Q0&=4O@gURuN< z`(wN*F$2xNn@f9K3FW~G zG*Myc=y%I*)Q)hj_v|o`2!lksYI5Y>I4zOPdQgH!%L%`vxnZL~$O8$*UMd2#di7(c zac5{{hcsE!pKpvjJxs(J@Ny`;8kjyk@4bBGX*B|;_O3^UcuTDbg?ps?JR_P<;K%!X zz1{P%0Hi~41%=s>P7)PYB&t_;D<|M!-t;XQKCaAir5(wDgu5b;Vem?4HA_wb`i85t z%oWCg{*4gRlzLC7xk^1FiWymTn&Z#-Mx+{Ww)7xIleAxlW;dk#%r|SO{aruWr|rC0 zBD2g^WJdDSIL#CtejP<tZxZ#ZeiJV2cEdkT=Y_F_1NvS0KC&}2KALS_^! zKFeI+pvr$Uc0R33PeS++3Wd4ZtH0d<`OMeW-oOyW-@oNNb?;1RiU}*F`vp*B9|BNQ ze0R9v4m;d%haK*?!wz@c;hQ^+kHQKgBNAa~Is+eX>k>RgM*TM@HH8OUquK2Xrh^4W zNwIN*2}woUUWR=Q7tDor%tFhrE@rjNb0R#Cf*Md?1paJY!R{5mgcR)D_uH=^gQcF% zX=sZ6ZJff3Eg1PvFux3oz z=Sq-OzO4U$E|aqD|Lc*E`ut}V@=o#G;fFi!aKjyUxZw^v+;E2-?zzLlnnwn>94yOA&_cK5pCpX81^6rU5GZ5hSLuVQ#dblG&*)5AW?p08` zk6ex=72{4%D0l+6t3dE$!^KGfpk_kx1_Bgjz&U{dG%WqXnF*+%_c0mJWY2-$0w$6U zpb*d`hC$W>>350LCZ!1h>}05c-3LyRq+U;03ydL+iDm}{3!UHqN(Kt!fQQKeK^nBX zl2IQ~_cFepunhL*VEX;PR04$c4Uh^$8d zM&3uHiB$T)Kve!uLsmd+?`ZxmT`==+B*G-cdI<<$+K9CiIGBIh$E>6Sa$iv+uW5p! z9t2mpVwgP~fI!UrZ$~kq_X|NLg9)%KVA0-gChYY*8aF9ckQxEn6X~UcQ!TITCI)iW z_pIpH2Ldt;`nL&4%>?)$lL`@jELM}$OL$ac;wZgnuq*#SBD?g3+-q;F7vM#mw+<5l zYOY`G>9sfH2+0nxUxku_k4*0y0{0K=rLc?j4BGGN#RDTBFuv1WZiD8MFJG{il=`IE z3gMT$%NR5gwSjJWz)Ja{_BaMK0RyP3qVpdU80h@(*OBG=EgGd33b;!F+%P*NCO{n# zB9FTYQo(`{G$3=vj2w3}K;%Zj--W#J0l3G3cjj|FM=$0p^^5Tcb9=DLJSNlP~Vu%gm?XaEGRu1 zzc}HrulYDgDTWb%zn@4t8UiTtqN3KjS@j%O#m6cR1%yH?}7w2nLqGsT&d^}_T7L;!4t@W*9(wRP(X3P z<1C)YCyWIJ634{m0#OP&pLlsyS~w-|)IzrG=mlLac~1l2*30#2G8gvZ~Q|4ZcL(s6<&edrtj3RGf@NqW6% z+}#1%)9K{_WO*I4Cy)i76cn0yUlG*8*Whvj!yHNQoDe(`S&@lk1_Tyn;;=UWJ7UF% zi7^Bbute$s(gi;n|42=)6g=M8nlL$)RsYHI^MBO2@5C4HBTb^zKzS6smk=@^|rI}KfX>@B~a+ww_F_88z>unA2Ap$5hLTu_<-GRo|$iOB<{2PTgX zz!o$C{LnT7M|>pYO}HM^BE!kq12P0XK_%cI1>qveiDCi{4WB3*NHfU9$^*y+eMv~B zFec!v0!(TZ=v#mZ&jX?doM>i9OrS3Qhn6_dJMAFJii5ERwfIWBO|TdTN%$tP49YY0 zgwEiV0&?x|iUU<(E|5=R2o|7;O$Lq$@bVHMbphai5xMyQ9a>N+0>0lD@5ci8dE-4_ z5PSsj9y6%F%De{-a9_Rm;GnLI?GHZuc-Rnw&%oYd0`RBUdqg079QGa%B;Uxq2MDGT z9!o{V55O2SPK@<_XNvdP6WN$3OR{k;9~(3#||PBv_hmeX6S#$i=QbYU|ZBsAPG-7rN`2yl|mAjkqwXbo&GFf^aNA>iuKV9W_vf(IDGZ%-1vrCJ3} z_|k{HeWEfTXu;tl2<7m`-VFmLgAS+^SeswI5FqoT9tQh# zpostz!1h>;643>lFsiozPt@$e$xr&hpo!sw#008AitsprVTvSZPLLfaCg|kc!M1`< zn*QAn?~Crz`ARPqRDaWV-@&GV2z&5g-H&1qKB#(Z7{Lcv@1cDDDZKk#WcBy6=m1>{ zmh1XOuN&khu*538;eACd1fJ*|@H;p`Y#=$Hah$E`6Se|J3dps2hZm4ZoVPF=kUGI8 zKnrv!$OI|@(FB9EUr)$ldk+b*g5BN&gC>0p#x7{Y#=+YH<&UZOCg2QMGkQX5@E1WR zh6xmSVWJ42JwR9fCWAJ4`~h-$x?`j!cDy_4gSQ}cf}~682H+pM_oX2G9*rORPe@7!pH$SapuS>y4;rlU6Zdg` zKtwj!FM26fr0QY8*YsNfj)V$#Ohv3~QP7wGcR%m4oJH>;f}I3B2vTr~Q3sL? zpg{`vFbBXT0-7v62z5|W_#kNm(s&K1CP)oMDaFJ{g18WE()~c$QTLfgP|4K-oCucDn;L=#QEy|o3HRAZ0`0ZmjHU`ZeoD+gl> zlwvU8Z2|OHf%qoq41_#-QfTno!O3GG#Q=l`ARr3?%m6?_03JaBH`4ZAL(gEw+xt(HwCjMq+ER z;M%RA?I0lT)}W0oAOM0x0!2i2P*(tb4s(b7I{syy=Iyiu!GnAwJR*LMc%ngshF}6F zEFlCTFwkrhwqcFYgiOcR(XmTR*RHxQ9JLjpzzHA%LJ(OiN=3k;pdjiXxpfNzUYI`s zAOHXW00RIJFweL9zE0{hAK(^G;s2_|8I8edM*WS9)jyu9{D#qv4q57P2j(1>qmFGq zSd`=$cqQRckZJU;L=ftULh77@ks)a6?}$iX+ob4_ur3m9%9zB{j6NxlIh^s3QVL8( zs7ET>=!#6jl~8ck4gMGI_V`qY< zKv~?Y2~Vn?pYR}3>i!FdH{~@}Dr3SIOk8(CF`I)pR>wwBt%njGDyVT`bLGwO3)irK zA&?Mth#dkB-8r-&LK26_jznUz(>xyFPx;XI5JRhOAuA9dnV8`cPIb9nrTWldE4lgw z=L7@zJi?RpAuzWt$d!FPxP2~{sG-?n_hg%`hj|t~w6t)c*FyOHwa5=K5_&0TEQ-A(`WE-JEgemyYo?E}_3;^c1P}HH92RigA!G;!B z7@xs*R_>ey1SIrPR3Lg46 zbdX~r^jb^ThlN`w*Xh>QLrTrmL3{_5!rLR#+{*c>@uR zE5cky4cqgEG%%{rT4q3vR2&$Chf@=lB#XmUNW&$UxGBvtHVcBK7R>;>ij)#SqwY3U z>JbS1I(VhFg_swBv`q$%sXmZ54dSPPlz#D!(9NhPEKuNk^BSFz8H8KvLyklbjR)zp zc&t8SOZ(6?0fyiphqbn&77X8(`ji5AIl~d)OWCkg;%0RWscJBeJw?2rZe)ip91w{h ze!iJJA_~~@%!88T<@^qGCh@;By4_KX&NU-=#<3UIE)vTe{7SXy zIP|{mi$}2vaWW-7%7F;65e!n|aVmFEq!f?VmmWw!RKhjNRCEYFnn!#TU=yCNA{2g| zW4IM6W$gqr$X1H+nb$lcOT_GzwkSuuFY98X6gR^jQtI%EKJbvFilL*9)c(!{KyVNI*TFh4tdC35ksLOAm}u}e9@BgA>yG70e!ebcEjl+tiT zEP6;mF;0qI9??2T?qGk#RqLT_1sYNYv4`#o;$&B|Jzz}kxs?SA{R)>SYR*MfEFr-L z$*2zmUzPTh4#HEVCb*7Y*u{|i2p$SnNTEFwl0-SsJkNCWAtLQ_A#cysraW`=9DV4a zkRjM%{eEZEL;Q*#Iv{-fG2sx|ok*F|jRMxualdsrbS_0~x3MOz%id@AUw2E_0lEzA z*AJhk?G^+J!L=B|*8Ga=l0#z2rm=PRp}JBb*}+c}%M_Q;H|jVRyaX+y=FqqthmR@+ zf?c8wB1mn)iWDiLHCBUwqz{JJSDi|PprqjA(RM^h4f)}F!lfGW7-B*d@RSD{5-SCm zM_CmtwV;GYn!GR4T=&sDTL7gq!T(46e=_V1&#GX(I56|;?mWgd zTF|nD$4W!Q*{4(@BVm@eM$zIAZ(j9Nt4nnGoUH9VVghc-QiSNe#*2zj<7=C}*es>vbe3OUp#aSP!15H4fmki!eKMB zcu-^!`;j;7Lq^39A>6dk>)g^v^Xj<`gBqIUphJl?*{V#u=IA@vP~zNk0W4+_UDAhr z{h~*iU0BGWKNfVzj>TPRUdRi6c$-6x6LiR$LJR?@7@^O$hYJs|ozi*oq0Ryi5z3T( z_{`;dkWPlY6w~5_8hk!#I?NC(haQSibdY00^aTn=51%IV5Z}Ru1VWUdIK=A7?!XVY z4?i?d1d!mj_Q52uFY{xea&+5rT+H8d*%XL$8R0nUW-N#ECv)i0yK~7Cr1V+_EDqm} zhcOg+Nb5jDs)@@wJwzX|B7Mk^NJw!NZlo>j8pPgRS@0nO^$TPExxGl4$pmWaQ7c6x zTVW6Xxx=rn@di=(xza%m0qgyzgwADAAdu;W;*ln>3woB2Lz&*;#dG+vmLbiG%M{n( zIhpyOL;4Ro)ayV)pbw_>xnVG1=M;u{Fb+dA(wJ*-o37aKc=q;@hZ+wtWUb;p(aF7M ztwW@U%A`kZK4nJp(9;&V8pP%WuE-3~oBbg@5krJ0Hpnp>dTf$D7f`rR>?&u2;B%s&N=Iqer_bQaZ($SJx($ziqq)wXqp!F4SJ zq?-G3>!0Gf9-Q9hJX_Zep$qZstrkRe&85BCv`}zD^{ZW86vjiSWF0j--N83m4;_UT z`4m63M(_a%*e^X1+k4C@ak>jQKVm?vR2dHI?{_aFb|ePMF!?wWALYXEes&?u6I71g zJq$8M=hGFAB9Dzb_yM^Ts7%c}l?MSycod_5EKKx3K4)3-kp6)W83*W^tU(`-ZkdY# zk(?AClWSDyFA;iwQ|v?51P@s%OvtruX{CnNbBzfe5?aI|IJd6_h%fn?_E2|yi{TAY zoMEKw^YUX?s*wzSugp?|X373PNAx8(<41X`lX?{&^*F@PrNF4}Me1{iMla!{29b~) z5tkf-GGbfUqz;!V@D5N#aB^Pslw(4r80b*e!%7L%@lOj{uyGHLzSei}N7ATkGIg^g z_gr@{{8GcjhCfq(Bq@#ZZMNt`B$wwVTc9XeS3U49JD9e;N3^b$FkOZ?ZoWCUE-EA; zzsWQ5v4O@9-4dJ>`uj5M;PtsP4Y?o=oQUp+eHM9ii+{qpX5ijxI9pd0tmSy@)+`0< zNnYpg6EgTu{-D&?wo?mqAAmK1UI6;OAW&@z4#lVF~F13k|aF$EWUr6 zAr+eFF2Q++M?6C`AbP0jfJ35ePir&UpV$%dz7{%p6EJYt<-p!C~ z2_B+7h#^E!{gdx7Pu>d;DG$Hs4sCzn_(%5&;}Q+r9_>cB5PWE29rIT;K0n1pp@Ojh zm)W{fA-d#|+2l;mx}UcU?IO~ z+-pweb^4g~@`nQ3*=)P^xm&`A8qli@{^#-*t|%}ud(;$j3B>Wa_OVH>^07gHQlH;! z_+ekRN#~Xh$O0@ZpoROg(PE4&qA1kSvE7%0J;llP4ljA;9?p z=bMKQX`PFBz#-A1^-`nRhv$kugfQTt&yoGKTQ^UI!qBkIt{-0Lb$fecmOs~0K%u~B z!l=Hv@CwGN45%D-m!Cs;6gm|0ZVoLzxS_%pi6}1-d4L7wLuN!dK|E%su|d9@-HFd) z+=Gu1p6$?-Q0!wCjj0W%hdB?TMr_Tq3POVovl zFp)!;-pj?I&>_PI&Klha9m1rcC-C8Ov>k%3U?IyAhGaQHF;cIPhZ)|_^|q1an1IZK zcgjPIwC5s<&H}A$9%4QE5NV5Cv+eT+Bc8bs-t#MZY-dA9dF^vX8u?DWg_F*H!V$i) zZb76JDFJ(a0U*9n{CrWV#DwkQ?T;qBbFnUPJRfl1a1ff+Sp%A-V#+{02whuz4&F`3 zG6}(I-CmA}i=rO;p@Fv~5)_~ueVmX|eR&WCm=Ukd7zoT2heRZEz$Ciou`ETKT03zs zZ9W+>dUPp6iXKEtHi}dlQOW>JK(oKsP~)#Avyfsn@?Rzs{2262MtR+CWuiTorpO`1 zz`~L6T$BXkx|5(B&6Ld{Oo|uk6ZqYjFc`7xu|xU}Jd}=jq0po9rf=s%<^w&s4j-z; z$nsEq(Qx&lo}!2RMD+^POB%Cj`&<*a-I;zLAtd$?qe6!)iR04zmLD=Aa426Ijs~1- zm_Vn%W27^X=#V0F?JZioIMf85;k z874EF8BlS$u4f1E;i#q|sYJ~((o&^AZUI=tuzfY_Vd4#P1W%SG-!Z|GwKQ+I$I)Y) z(}c-=zNMM*I@p)-7u+S0zOv@fF2(yI{sO-x$uunb26Z2|L4AqWg1w;_|3Mf8Md3aD zrJl8%A`ECAW>xM`rUVat60%4U+kJ&d^;{3)h6>)ki!z;`XWnd)7c@`bIs*7@WRgc@iiUx<`%_Q!1ef!DF+^ z#PI(f2P`UXYVdwI443D^dmA zLCVvQ9Nvl;0yOX<2NDmc1z1HToG{${_d(~uhaM8MR9mM#U(`R>Q!G$xb>KKWm!QTt z&1dt9YoC#pMv3Tb&zRF8O>gD`SQOCYiNyNM&L4RdJcMzWA=5(h{Som=2hE^68B#@& zr4Hvvrmae)(cuk;mU@h0#XRRIaL_L7%8&Fs&IB+1YKA4@QHSk-lY=8w4tf$I-P0-}1ZC#TDupEne;cLU@+M~lA zdPHkqLBkAbGs;nWm^o2H7W{KnirJJXpgq%=v?1CRIK;nqk_{y1-6`i#yM!I;fH)B2 z#Ox|m(HQ1RlZQGL`?M&{!?YQ?^?-*8_HdhX>!WUj4RwbQp}+$7I)|i&WK;GK{Ucmf zef-VNm<`5z!6Cn9eEcq#E26n4EaG!ncqgNXy#Z}ATTCTjYckQ8q7NiPwIqFLl?Wlm z#pkIe2n}?R)I*r}H8k;o4VT|;B7A0-=EBncT!IAUC2s#B&WA{j%(iJc885NMrt%Sz zFb{PlW@s*jN4>^K06pKH(SxG(D8m4xLiX`RaY&2Qpeq_j8NtN;?O|uLx?%B*)aG@z zdlnoK>te)e6|SRorbTsOF}aclZe4m`5`J@>OdnrtX%R)yU6zz?FhT~$P%ZN- zt&0lTVmx;1JA%4CG~aDjI9Itp8Pv|@nmP5Ym~)L<3*CS4LwgmfBs>1&xAG~5jHz(k z)~FyS%*W>#KEzCjkl!KnX2Yh3xfAYt><`C>jr8zid(0p5ZkJe>TeO`4?fby~4*wIn zyTp!#V)rr4R;_s3oNsQeQAAu8m7uH2v3cr#O0E7Rmysw|>M#J`U`oH$Pi(8fA$;mA+O7NtwepUL zR(Xy2QX_w@T;cWVU~8q>D_8_#=;gzhaA|=I(y(N!1^m&@z&-J zw_e0snOC5GY?hI7W}>~-&(-QOZ{7NI*saV5wQ99?q;Fzn-Lx&ieFgRYUq~$y>Ybqw zTg}ZXi6PHcYl<|`;oDZ46Ne^P4e9y~Yt)tDF}aoHj|W18%Y{XoVO0%s#hl$Zxtj=l^(;UqmJWu&q54W6rqM$E#n@-L-puT*R4kV zTRDf|72F-^WYftV$f{tgF_^uA4nv5;nL^fL;H%srw!D%_A2paok6NuN6P{}ELE69@ zoCbGItl_N{LxhcYM1b+InRBp40^(k#noVRg<*k;(T0N#w)nJgh-SDC3_cTnV8=E<_ zQ`1(SgXn37gSz$x(yb>7Z-pLe$iBnsWBY*})|EK7@L}KThcU(zfo105gO0Ja)2w1V zM7C)r7 zVYkKjtjr%aqK@2U%nEUn%nF+zntq_K({P9}m^5CZ3(a2ljFpxG;!lKCSY4e13H@eir|Z*uof&uDPJehd>-N

    5P3cZ(CNa6M>alSZ(92q7}n8-B5i2tIz>?{u&~!dnuLloZfl@PC?w_u%T9Z z6Q5W=<8%rCDziy(R*`q>@~8c=DxfQyerto#x4>8+S~}L%jrr|X4Mi5%$3l8%)JGCr zvj6w-P9{)G-nz1xLgH8^m;Fx^%QCoZ6s$VSAe?qM+ zAxH}H!qn@Rv<_NT@V)PxU8aC=;%t4d2`+}&rWp(7!RF*!y9sSq@BQSe!~UmgdRvWQ zBl~R-ST8kpn^+=SBen1Tg^BZ{w$?sy0bIEFm0$y)@1KF1+y)^8*{E!*LmI%1@nTkg z6N~M4)!!b`N<4h;hmbeLXi)c{L~Eva_pYmc|E(Ar9<(E zOk>5UQatRpI0|Y7O@WVaa)HN&BRhy=_*QO%=iF;*6`fGNyPUam8MeSCj5e`mzZ(-B zKtyM~#*1ZkSP9<*NivY`zzam>S}tw3+d3Qa1vZ7jZAiqlNUvAMEG5WVWj ztebf+(0jZKw>ltBYP7r5#!oW2gz62G65mvdT?T!SE6h=RdKqX3TV$~SOt-iCx68WE z&Yk+xOa@!91Yi9c72m9@EnahMi!={r^Chha6PN`23}~X3!t|^E)K-Ow1WehbQ=60< z@>Zh)yy*I#m2I%R)}VQ-slB25gXcxg(p$EQImoZw*WldR*ZvWTdYNaoz_x`wW4x#p zVQ#12Cs68e*xol-?s4W!TMb;^^zwR-+hyy7S+34-YR6@>2A>(^Zw29v(-HS~);QsJ z_}jfy{W8ZAg8o=$>z}cpwzio~u-(H)dLNd?$0wPytU>nh3az3hp%r-INrym`(WY28 zabJLK+!?o$BPi0pW`92wUEeJ4uO-~dp2+k4+tKUgq#nS-05&dY^~^kxVp-B z+oc+DE)zkVt3qLW{vgz?3$%WOe8{Q$Y+0~A7O$q6JiuNm+_6mvwkn4UW17e=RI@QQ zGLZn+GkbTh8mQG*NNs?rU~an1ajVnett7r5H5egjtYh<5)7z~o!|1jPJUtd)GD|D< z-bpu+8y1`Zj#{4KS*(>}FuK6wvq$(4Z^dtGgbkj1y6LD6_sA;KoSW%)irAxl1$O<` zHEOK4lYEvH`Bo0XN9-IPJm;-NW`@A4P&Y7Z+3F)fdIKA$!^E>pSL>ByMW97KR$DG0 z3;``WmGIGj4WX(CwE-1FpV2ZuC?lH`VG< z>x;Cau=uvjT}XU?MC<<7;qkkowpxw@1o2jK7smHrNRZ*Ij z*VYUft)*ZR0j?U!q91qV*oA|h9euFdvF_ihCa9Gmg{ftud7aU(d@KKeR)2!|>^4rv zhd4P=)<_5R7bG|imXqSW?}$H>z?c}}^v>091qg{*%Wj~2uDTwYP4Gh46t+30x+ zKF&V9)qcC-6tymzTsU8Yw0WnevEG5x#aAiDBF8XkKRFtnh~|w|y&iEYr>~joY-=1b zVT{zRcdS|rS65!mN{b|txT*RY4!*Ly8HpKA+OJc7tT}X@SWRXB<=E$aEDx)}wJ}X} ztnHLExdyosKn_mU&H9vj3E{ca{{{Yk?(LOPW#LhNwKjSc2ROg?h4j_;Sp#R^mP>8e z_>~`<45+3yZ`0wGH07$KZQM5B1*=E!p?zewvzD*#n^bS3eWG9?>!;a_2De_H<9TQ^ z8}aLYJ%O<8HcWIAWJ&<+^-r6<$?g2l-B|Et#NR7K%@`o^@C|QeppftAZ?-15+z0lg z1{9C?bAm!NVZX%xU4HpB6x|9ur^f~e%>R9l)#=mJFNH*Mj?pjV;VgroX#Vi&M}5*4 zhSfh5tK&H598%$UG1EC?G=~fQ_mR%3u5xNs>LVN1$NVbzaeNZ+P1(ztw+Sr9va~%eg_*DFuMLH*9U3VlKI7`a=j5(9lz=>M38(Os*PGW^mJ8pC~Z z7kwn)2u{RiS1t|Pl1M41ns%7|*tL${Zacn)?#ppbF(acdx~~&_u3M@GYPu@^rI~AFu2W;kq9RB2$SlfLQG|4dN=W-vc-p=BW`qZRJW3UOnZh9L9 zNAOdbh<{QmG34h8&zaH0QvdC@k7v!4;L7alCpq7Yi9$SOJdhUVJDxsY%RYLZMZPLt zlsX>kNnnJKTpi&&u;lOm*;y-R?osSZgk=(UCvU~7I9J)h2AAf0eih;2*`AiSHN5t_9^!(Ou)a; zC0e%fZ!03@@ltzRCl&AD&@i}gB=-4Y_G&vuV$Bi9$0G{(aoEgbDSR%c88Q2Vp&RO6 z#1DAUA3O2~D%mroLbi3s4#odj)jXX&gVX=USEO7eEc?gGrT5Col2XH&&6+$ zjAVkUDyaYA-O%CtG+2vY7P=<;tU^$fQO|7mvz14&SxWPyE}OOZcG>i)b(q#=l>0##!`{q0@NQIDks#9pzcjB!J0Zu zi`~eZ(DnSnAld(AH#GeH#mF@+KZR;ISw+agG=q%BD=QvY;C?Lpj=9hoCO4l>}Ay_U{r zU8o9rGlj&nsSD^Y5hjyn9`0h`O;Er}xm4ooAj^%{L_g@(P8_r#%YON}&6KG|W(uUJ z=(u~j2XB$S#okwvh1M&fsF|d7h^`Th=p0qM)1S!yst?q3Suh{^Wr%l23wK0kSNQa$ zyiM6red9;!J7@=ojuy930P~Q&Xp@DuWIB O6rcutwvI%b4iU672*Za#4->>t`-n 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 t^xU-haIDAoE>&R|V~ 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 z0KNbK00000000000000000000000000000000000000000000000000008^}007b! B?zjK| literal 0 HcmV?d00001 diff --git a/Ethernet/W5100/w5100.c b/Ethernet/W5100/w5100.c new file mode 100644 index 0000000..ab3ebf8 --- /dev/null +++ b/Ethernet/W5100/w5100.c @@ -0,0 +1,386 @@ +//***************************************************************************** +// +//! \file w5100.c +//! \brief W5100 HAL Interface. +//! \version 1.0.0 +//! \date 2013/10/21 +//! \par Revision history +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#include "w5100.h" + +#if (_WIZCHIP_ == 5100) +/** +@brief This function writes the data into W5100 registers. +*/ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ) +{ + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte(0xF0); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(wb); // Data write (write 1byte data) +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) ) + //M20150601 : Rename the function for integrating with ioLibrary + //WIZCHIP.IF.BUS._write_byte(AddrSel,wb); + WIZCHIP.IF.BUS._write_data(AddrSel,wb); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + + //add indirect bus + //M20150601 : Rename the function for integrating with ioLibrary + //WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + //WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + //WIZCHIP.IF.BUS._write_byte(IDM_DR,wb); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + WIZCHIP.IF.BUS._write_data(IDM_DR,wb); +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} +/** +@brief This function reads the value from W5100 registers. +*/ +uint8_t WIZCHIP_READ(uint32_t AddrSel) +{ + uint8_t ret; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte(0x0F); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF) >> 0); + ret = WIZCHIP.IF.SPI._read_byte(); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) ) + //M20150601 : Rename the function for integrating with ioLibrary + //ret = WIZCHIP.IF.BUS._read_byte(AddrSel); + ret = WIZCHIP.IF.BUS._read_data(AddrSel); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + + //add indirect bus + //M20150601 : Rename the function for integrating with ioLibrary + //WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + //WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + //ret = WIZCHIP.IF.BUS._read_byte(IDM_DR); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + ret = WIZCHIP.IF.BUS._read_data(IDM_DR); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); + return ret; +} + + +/** +@brief This function writes into W5100 memory(Buffer) +*/ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint16_t i = 0; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); //M20150601 : Moved here. + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + for(i = 0; i < len; i++) + { + //M20160715 : Depricated "M20150601 : Remove _select() to top-side" + // CS should be controlled every SPI frames + WIZCHIP.CS._select(); + WIZCHIP.IF.SPI._write_byte(0xF0); + WIZCHIP.IF.SPI._write_byte((((uint16_t)(AddrSel+i)) & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((((uint16_t)(AddrSel+i)) & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(pBuf[i]); // Data write (write 1byte data) + //M20160715 : Depricated "M20150601 : Remove _select() to top-side" + WIZCHIP.CS._deselect(); + } +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) ) + for(i = 0; i < len; i++) + //M20150601 : Rename the function for integrating with ioLibrary + // WIZCHIP.IF.BUS._write_byte(AddrSel+i,pBuf[i]); + WIZCHIP.IF.BUS._write_data(AddrSel+i,pBuf[i]); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + //M20150601 : Rename the function for integrating with ioLibrary + /* + WIZCHIP_WRITE(MR,WIZCHIP_READ(MR) | MR_AI); + WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + WIZCHIP.IF.BUS._write_byte(IDM_DR,pBuf[i]); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); + */ + setMR(getMR()|MR_AI); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + WIZCHIP.IF.BUS._write_data(IDM_DR,pBuf[i]); + setMR(getMR() & ~MR_AI); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100. !!!!" +#endif + + WIZCHIP.CS._deselect(); //M20150601 : Moved here. + WIZCHIP_CRITICAL_EXIT(); +} + +/** +@brief This function reads into W5100 memory(Buffer) +*/ + +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint16_t i = 0; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); //M20150601 : Moved here. + + #if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + for(i = 0; i < len; i++) + { + //M20160715 : Depricated "M20150601 : Remove _select() to top-side" + // CS should be controlled every SPI frames + WIZCHIP.CS._select(); + WIZCHIP.IF.SPI._write_byte(0x0F); + WIZCHIP.IF.SPI._write_byte((uint16_t)((AddrSel+i) & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((uint16_t)((AddrSel+i) & 0x00FF) >> 0); + pBuf[i] = WIZCHIP.IF.SPI._read_byte(); + //M20160715 : Depricated "M20150601 : Remove _select() to top-side" + WIZCHIP.CS._deselect(); + } +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) ) + for(i = 0 ; i < len; i++) + //M20150601 : Rename the function for integrating with ioLibrary + // pBuf[i] = WIZCHIP.IF.BUS._read_byte(AddrSel+i); + pBuf[i] = WIZCHIP.IF.BUS._read_data(AddrSel+i); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + //M20150601 : Rename the function for integrating with ioLibrary + /* + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) | MR_AI); + WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + pBuf[i] = WIZCHIP.IF.BUS._read_byte(IDM_DR); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); + */ + setMR(getMR() | MR_AI); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + pBuf[i] = WIZCHIP.IF.BUS._read_data(IDM_DR); + setMR(getMR() & ~MR_AI); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100. !!!!" +#endif + + WIZCHIP.CS._deselect(); //M20150601 : Moved Here. + WIZCHIP_CRITICAL_EXIT(); +} + +/////////////////////////////////// +// Socket N regsiter IO function // +/////////////////////////////////// + +uint16_t getSn_TX_FSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + do + { + val1 = WIZCHIP_READ(Sn_TX_FSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_TX_FSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + } + }while (val != val1); + return val; +} + + +uint16_t getSn_RX_RSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + do + { + val1 = WIZCHIP_READ(Sn_RX_RSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_RX_RSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + } + }while (val != val1); + return val; +} + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// +uint32_t getSn_RxBASE(uint8_t sn) +{ + int8_t i; +#if ( _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + uint32_t rxbase = _W5100_IO_BASE_ + _WIZCHIP_IO_RXBUF_; +#else + uint32_t rxbase = _WIZCHIP_IO_RXBUF_; +#endif + for(i = 0; i < sn; i++) + rxbase += getSn_RxMAX(i); + + return rxbase; +} + +uint32_t getSn_TxBASE(uint8_t sn) +{ + int8_t i; +#if ( _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + uint32_t txbase = _W5100_IO_BASE_ + _WIZCHIP_IO_TXBUF_; +#else + uint32_t txbase = _WIZCHIP_IO_TXBUF_; +#endif + for(i = 0; i < sn; i++) + txbase += getSn_TxMAX(i); + return txbase; +} + +/** +@brief This function is being called by send() and sendto() function also. for copy the data form application buffer to Transmite buffer of the chip. + +This function read the Tx write pointer register and after copy the data in buffer update the Tx write pointer +register. User should read upper byte first and lower byte later to get proper value. +And this function is being used for copy the data form application buffer to Transmite +buffer of the chip. It calculate the actual physical address where one has to write +the data in transmite buffer. Here also take care of the condition while it exceed +the Tx memory uper-bound of socket. + +*/ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t dst_mask; + uint16_t dst_ptr; + + ptr = getSn_TX_WR(sn); + + dst_mask = ptr & getSn_TxMASK(sn); + dst_ptr = getSn_TxBASE(sn) + dst_mask; + + if (dst_mask + len > getSn_TxMAX(sn)) + { + size = getSn_TxMAX(sn) - dst_mask; + WIZCHIP_WRITE_BUF(dst_ptr, wizdata, size); + wizdata += size; + size = len - size; + dst_ptr = getSn_TxBASE(sn); + WIZCHIP_WRITE_BUF(dst_ptr, wizdata, size); + } + else + { + WIZCHIP_WRITE_BUF(dst_ptr, wizdata, len); + } + + ptr += len; + + setSn_TX_WR(sn, ptr); +} + + +/** +@brief This function is being called by recv() also. This function is being used for copy the data form Receive buffer of the chip to application buffer. + +This function read the Rx read pointer register +and after copy the data from receive buffer update the Rx write pointer register. +User should read upper byte first and lower byte later to get proper value. +It calculate the actual physical address where one has to read +the data from Receive buffer. Here also take care of the condition while it exceed +the Rx memory uper-bound of socket. +*/ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t src_mask; + uint16_t src_ptr; + + ptr = getSn_RX_RD(sn); + + src_mask = (uint32_t)ptr & getSn_RxMASK(sn); + src_ptr = (getSn_RxBASE(sn) + src_mask); + + + if( (src_mask + len) > getSn_RxMAX(sn) ) + { + size = getSn_RxMAX(sn) - src_mask; + WIZCHIP_READ_BUF((uint32_t)src_ptr, (uint8_t*)wizdata, size); + wizdata += size; + size = len - size; + src_ptr = getSn_RxBASE(sn); + WIZCHIP_READ_BUF(src_ptr, (uint8_t*)wizdata, size); + } + else + { + WIZCHIP_READ_BUF(src_ptr, (uint8_t*)wizdata, len); + } + + ptr += len; + + setSn_RX_RD(sn, ptr); +} + +void wiz_recv_ignore(uint8_t sn, uint16_t len) +{ + uint16_t ptr; + + ptr = getSn_RX_RD(sn); + + ptr += len; + setSn_RX_RD(sn,ptr); +} + +#endif diff --git a/Ethernet/W5100/w5100.h b/Ethernet/W5100/w5100.h new file mode 100644 index 0000000..3396955 --- /dev/null +++ b/Ethernet/W5100/w5100.h @@ -0,0 +1,1865 @@ +//* **************************************************************************** +//! \file w5100.h +//! \brief W5100 HAL Header File. +//! \version 1.0.0 +//! \date 2013/10/21 +//! \par Revision history +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#ifndef _W5100_H_ +#define _W5100_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "wizchip_conf.h" + +/// \cond DOXY_APPLY_CODE +#if (_WIZCHIP_ == 5100) +/// \endcond + +#define _WIZCHIP_SN_BASE_ (0x0400) +#define _WIZCHIP_SN_SIZE_ (0x0100) +#define _WIZCHIP_IO_TXBUF_ (0x4000) /* Internal Tx buffer address of the iinchip */ +#define _WIZCHIP_IO_RXBUF_ (0x6000) /* Internal Rx buffer address of the iinchip */ + + +#define WIZCHIP_CREG_BLOCK 0x00 ///< Common register block +#define WIZCHIP_SREG_BLOCK(N) (_WIZCHIP_SN_BASE_+ _WIZCHIP_SN_SIZE_*N) ///< Socket N register block + +#define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + N) ///< Increase offset address + +#if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + #define _W5100_IO_BASE_ _WIZCHIP_IO_BASE_ +#elif (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) + #define IDM_OR ((_WIZCHIP_IO_BASE + 0x0000)) + #define IDM_AR0 ((_WIZCHIP_IO_BASE_ + 0x0001)) + #define IDM_AR1 ((_WIZCHIP_IO_BASE_ + 0x0002)) + #define IDM_DR ((_WIZCHIP_IO_BASE_ + 0x0003)) + #define _W5100_IO_BASE_ 0x0000 +#elif (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define _W5100_IO_BASE_ 0x0000 +#endif + +/////////////////////////////////////// +// Definition For Legacy Chip Driver // +/////////////////////////////////////// +#define IINCHIP_READ(ADDR) WIZCHIP_READ(ADDR) ///< The defined for legacy chip driver +#define IINCHIP_WRITE(ADDR,VAL) WIZCHIP_WRITE(ADDR,VAL) ///< The defined for legacy chip driver +#define IINCHIP_READ_BUF(ADDR,BUF,LEN) WIZCHIP_READ_BUF(ADDR,BUF,LEN) ///< The defined for legacy chip driver +#define IINCHIP_WRITE_BUF(ADDR,BUF,LEN) WIZCHIP_WRITE(ADDR,BUF,LEN) ///< The defined for legacy chip driver + + +//----------- defgroup -------------------------------- + +/** + * @defgroup W5100 W5100 + * @brief WHIZCHIP register defines and I/O functions of @b W5100. + * + * - @ref WIZCHIP_register_W5100 : @ref Common_register_group_W5100 and @ref Socket_register_group_W5100 + * - @ref WIZCHIP_IO_Functions_W5100 : @ref Basic_IO_function_W5100, @ref Common_register_access_function_W5100 and @ref Socket_register_group_W5100 + */ + + /** + * @defgroup WIZCHIP_register_W5100 WIZCHIP register + * @ingroup W5100 + * @brief WIZCHIP register defines register group of W5100 . + * + * - \ref Common_register_group_W5100 : Common register group W5100 + * - \ref Socket_register_group_W5100 : \c SOCKET n register group W5100 + */ + + +/** + * @defgroup WIZCHIP_IO_Functions_W5100 WIZCHIP I/O functions + * @ingroup W5100 + * @brief This supports the basic I/O functions for \ref WIZCHIP_register_W5100. + * + * - Basic I/O function \n + * WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() \n\n + * + * - \ref Common_register_group_W5100 access functions \n + * -# @b Mode \n + * getMR(), setMR() + * -# @b Interrupt \n + * getIR(), setIR(), getIMR(), setIMR(), + * -# Network Information \n + * getSHAR(), setSHAR(), getGAR(), setGAR(), getSUBR(), setSUBR(), getSIPR(), setSIPR() + * -# @b Retransmission \n + * getRCR(), setRCR(), getRTR(), setRTR() + * -# @b PPPoE \n + * getPTIMER(), setPTIMER(), getPMAGIC(), getPMAGIC() + * + * - \ref Socket_register_group_W5100 access functions \n + * -# SOCKET control \n + * getSn_MR(), setSn_MR(), getSn_CR(), setSn_CR(), getSn_IR(), setSn_IR() + * -# SOCKET information \n + * getSn_SR(), getSn_DHAR(), setSn_DHAR(), getSn_PORT(), setSn_PORT(), getSn_DIPR(), setSn_DIPR(), getSn_DPORT(), setSn_DPORT() + * getSn_MSSR(), setSn_MSSR() + * -# SOCKET communication \n + * getSn_RXMEM_SIZE(), setSn_RXMEM_SIZE(), getSn_TXMEM_SIZE(), setSn_TXMEM_SIZE() \n + * getSn_TX_RD(), getSn_TX_WR(), setSn_TX_WR() \n + * getSn_RX_RD(), setSn_RX_RD(), getSn_RX_WR() \n + * getSn_TX_FSR(), getSn_RX_RSR() + * -# IP header field \n + * getSn_FRAG(), setSn_FRAG(), getSn_TOS(), setSn_TOS() \n + * getSn_TTL(), setSn_TTL() + */ + +/** + * @defgroup Common_register_group_W5100 Common register + * @ingroup WIZCHIP_register_W5100 + * @brief Common register group\n + * It set the basic for the networking\n + * It set the configuration such as interrupt, network information, ICMP, etc. + * @details + * @sa MR : Mode register. + * @sa GAR, SUBR, SHAR, SIPR + * @sa IR, Sn_IR, _IMR_ : Interrupt. + * @sa _RTR_, _RCR_ : Data retransmission. + * @sa PTIMER, PMAGIC : PPPoE. + */ + + + /** + * @defgroup Socket_register_group_W5100 Socket register + * @ingroup WIZCHIP_register_W5100 + * @brief Socket register group\n + * Socket register configures and control SOCKETn which is necessary to data communication. + * @details + * @sa Sn_MR, Sn_CR, Sn_IR : SOCKETn Control + * @sa Sn_SR, Sn_PORT, Sn_DHAR, Sn_DIPR, Sn_DPORT : SOCKETn Information + * @sa Sn_MSSR, Sn_TOS, Sn_TTL, Sn_FRAG : Internet protocol. + * @sa Sn_RXMEM_SIZE, Sn_TXMEM_SIZE, Sn_TX_FSR, Sn_TX_RD, Sn_TX_WR, Sn_RX_RSR, Sn_RX_RD, Sn_RX_WR : Data communication + */ + + /** + * @defgroup Basic_IO_function_W5100 Basic I/O function + * @ingroup WIZCHIP_IO_Functions_W5100 + * @brief These are basic input/output functions to read values from register or write values to register. + */ + +/** + * @defgroup Common_register_access_function_W5100 Common register access functions + * @ingroup WIZCHIP_IO_Functions_W5100 + * @brief These are functions to access common registers. + */ + +/** + * @defgroup Socket_register_access_function_W5100 Socket register access functions + * @ingroup WIZCHIP_IO_Functions_W5100 + * @brief These are functions to access socket registers. + */ + + //----------------------------------------------------------------------------------- + +//----------------------------- W5100 Common Registers IOMAP ----------------------------- +/** + * @ingroup Common_register_group_W5100 + * @brief Mode Register address(R/W)\n + * \ref MR is used for S/W reset, ping block mode, PPPoE mode and etc. + * @details Each bit of \ref MR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    RST Reserved WOL PB PPPoE Reserved AI IND
    + * - \ref MR_RST : Reset + * - \ref MR_PB : Ping block + * - \ref MR_PPPOE : PPPoE mode + * - \ref MR_AI : Address Auto-Increment in Indirect Bus Interface + * - \ref MR_IND : Indirect Bus Interface mode + */ +#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_ + #define MR (_WIZCHIP_IO_BASE_ + (0x0000)) // Mode +#else + #define MR (_W5100_IO_BASE_ + (0x0000)) // Mode +#endif + +/** + * @ingroup Common_register_group_W5100 + * @brief Gateway IP Register address(R/W) + * @details \ref GAR configures the default gateway address. + */ +#define GAR (_W5100_IO_BASE_ + (0x0001)) // GW Address + +/** + * @ingroup Common_register_group_W5100 + * @brief Subnet mask Register address(R/W) + * @details \ref SUBR configures the subnet mask address. + */ +#define SUBR (_W5100_IO_BASE_ + (0x0005)) // SN Mask Address + +/** + * @ingroup Common_register_group_W5100 + * @brief Source MAC Register address(R/W) + * @details \ref SHAR configures the source hardware address. + */ +#define SHAR (_W5100_IO_BASE_ + (0x0009)) // Source Hardware Address + +/** + * @ingroup Common_register_group_W5100 + * @brief Source IP Register address(R/W) + * @details \ref SIPR configures the source IP address. + */ +#define SIPR (_W5100_IO_BASE_ + (0x000F)) // Source IP Address + +// Reserved (_W5100_IO_BASE_ + (0x0013)) +// Reserved (_W5100_IO_BASE_ + (0x0014)) + +/** + * @ingroup Common_register_group_W5100 + * @brief Interrupt Register(R/W) + * @details \ref IR indicates the interrupt status. Each bit of \ref IR will be still until the bit will be written to by the host. + * If \ref IR is not equal to x00 INTn PIN is asserted to low until it is x00\n\n + * Each bit of \ref IR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    CONFLICT UNREACH PPPoE Reserved S3_INT S2_INT S1_INT S0_INT
    + * - \ref IR_CONFLICT : IP conflict + * - \ref IR_UNREACH : Destination unreachable + * - \ref IR_PPPoE : PPPoE connection close + * - \ref IR_SOCK(3) : SOCKET 3 Interrupt + * - \ref IR_SOCK(2) : SOCKET 2 Interrupt + * - \ref IR_SOCK(1) : SOCKET 1 Interrupt + * - \ref IR_SOCK(0) : SOCKET 0 Interrupt + */ +#define IR (_W5100_IO_BASE_ + (0x0015)) // Interrupt + +/** + * @ingroup Common_register_group_W5100 + * @brief Socket Interrupt Mask Register(R/W) + * @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR. + * When a bit of \ref _IMR_ is and the corresponding bit of \ref IR is set, Interrupt will be issued. + */ +#define _IMR_ (_W5100_IO_BASE_ + (0x0016)) // Socket Interrupt Mask + +/** + * @ingroup Common_register_group_W5100 + * @brief Timeout register address( 1 is 100us )(R/W) + * @details \ref _RTR_ configures the retransmission timeout period. The unit of timeout period is 100us and the default of \ref _RTR_ is x07D0or 000 + * And so the default timeout period is 200ms(100us X 2000). During the time configured by \ref _RTR_, W5100 waits for the peer response + * to the packet that is transmitted by \ref Sn_CR (CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command). + * If the peer does not respond within the \ref _RTR_ time, W5100 retransmits the packet or issues timeout. + */ +#define _RTR_ (_W5100_IO_BASE_ + (0x0017)) // Retry Time + +/** + * @ingroup Common_register_group_W5100 + * @brief Retry count register(R/W) + * @details \ref _RCR_ configures the number of time of retransmission. + * When retransmission occurs as many as ref _RCR_+1 Timeout interrupt is issued (\ref Sn_IR_TIMEOUT = '1'). + */ +#define _RCR_ (_W5100_IO_BASE_ + (0x0019)) // Retry Count +#define RMSR (_W5100_IO_BASE_ + (0x001A)) // Receicve Memory Size +#define TMSR (_W5100_IO_BASE_ + (0x001B)) // Trnasmit Memory Size + + +/** + * @ingroup Common_register_group_W5100 + * @brief PPP LCP Request Timer register in PPPoE mode(R) + * @details \ref PATR notifies authentication method that has been agreed at the connection with + * PPPoE Server. W5100 supports two types of Authentication method - PAP and CHAP. + */ +#define PATR (_W5100_IO_BASE_ + (0x001C)) + + +/** + * @ingroup Common_register_group_W5100 + * @brief PPP LCP Request Timer register in PPPoE mode(R) + * @details \ref PTIMER configures the time for sending LCP echo request. The unit of time is 25ms. + */ +#define PTIMER (_W5100_IO_BASE_ + (0x0028)) // PPP LCP RequestTimer + +/** + * @ingroup Common_register_group_W5100 + * @brief PPP LCP Magic number register in PPPoE mode(R) + * @details \ref PMAGIC configures the 4bytes magic number to be used in LCP negotiation. + */ +#define PMAGIC (_W5100_IO_BASE_ + (0x0029)) // PPP LCP Magic number + +#define UIPR0 (_W5100_IO_BASE_ + (0x002A)) +#define UPORT0 (_W5100_IO_BASE + (0x002E)) + + + +//----------------------------- W5100 Socket Registers ----------------------------- + +//--------------------------- For Backward Compatibility --------------------------- + +/** + * @ingroup Socket_register_group_W5100 + * @brief socket Mode register(R/W) + * @details \ref Sn_MR configures the option or protocol type of Socket n.\n\n + * Each bit of \ref Sn_MR defined as the following. + * + * + * + *
    7 6 5 4 3 2 1 0
    MULTI MF ND/MC Reserved Protocol[3] Protocol[2] Protocol[1] Protocol[0]
    + * - \ref Sn_MR_MULTI : Support UDP Multicasting + * - \ref Sn_MR_MF : Support MACRAW + * - \ref Sn_MR_ND : No Delayed Ack(TCP) flag + * - \ref Sn_MR_MC : IGMP version used in UDP mulitcasting + * - Protocol + * + * + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 0 0 0 Closed
    0 0 0 1 TCP
    0 0 1 0 UDP
    0 1 0 0 MACRAW
    + * - In case of Socket 0 + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 1 0 0 MACRAW
    0 1 0 1 PPPoE
    + * - \ref Sn_MR_MACRAW : MAC LAYER RAW SOCK \n + * - \ref Sn_MR_UDP : UDP + * - \ref Sn_MR_TCP : TCP + * - \ref Sn_MR_CLOSE : Unused socket + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0000)) // socket Mode register + +/** + * @ingroup Socket_register_group_W5100 + * @brief Socket command register(R/W) + * @details This is used to set the command for Socket n such as OPEN, CLOSE, CONNECT, LISTEN, SEND, and RECEIVE.\n + * After W5100 accepts the command, the \ref Sn_CR register is automatically cleared to 0x00. + * Even though \ref Sn_CR is cleared to 0x00, the command is still being processed.\n + * To check whether the command is completed or not, please check the \ref Sn_IR or \ref Sn_SR. + * - \ref Sn_CR_OPEN : Initialize or open socket. + * - \ref Sn_CR_LISTEN : Wait connection request in TCP mode(Server mode) + * - \ref Sn_CR_CONNECT : Send connection request in TCP mode(Client mode) + * - \ref Sn_CR_DISCON : Send closing request in TCP mode. + * - \ref Sn_CR_CLOSE : Close socket. + * - \ref Sn_CR_SEND : Update TX buffer pointer and send data. + * - \ref Sn_CR_SEND_MAC : Send data with MAC address, so without ARP process. + * - \ref Sn_CR_SEND_KEEP : Send keep alive message. + * - \ref Sn_CR_RECV : Update RX buffer pointer and receive data. + * - In case of S0_MR(P3:P0) = S0_MR_PPPoE + * + * + * + * + * + * + * + *
    Value Symbol Description
    0x23 PCON PPPoE connection begins by transmitting PPPoE discovery packet
    0x24 PDISCON Closes PPPoE connection
    0x25 PCR In each phase, it transmits REQ message.
    0x26 PCN In each phase, it transmits NAK message.
    0x27 PCJ In each phase, it transmits REJECT message.
    + */ +#define Sn_CR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0001)) // channel Sn_CR register + +/** + * @ingroup Socket_register_group_W5100 + * @brief Socket interrupt register(R) + * @details \ref Sn_IR indicates the status of Socket Interrupt such as establishment, termination, receiving data, timeout).\n + * When an interrupt occurs and the corresponding bit \ref IR_SOCK(N) in \ref _IMR_ are set, \ref IR_SOCK(N) in \ref IR becomes '1'.\n + * In order to clear the \ref Sn_IR bit, the host should write the bit to \n + * + * + * + *
    7 6 5 4 3 2 1 0
    PRECV PFAIL PNEXT SEND_OK TIMEOUT RECV DISCON CON
    + * - \ref Sn_IR_PRECV : PPP Receive Interrupt + * - \ref Sn_IR_PFAIL : PPP Fail Interrupt + * - \ref Sn_IR_PNEXT : PPP Next Phase Interrupt + * - \ref Sn_IR_SENDOK : SEND_OK Interrupt + * - \ref Sn_IR_TIMEOUT : TIMEOUT Interrupt + * - \ref Sn_IR_RECV : RECV Interrupt + * - \ref Sn_IR_DISCON : DISCON Interrupt + * - \ref Sn_IR_CON : CON Interrupt + */ +#define Sn_IR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0002)) // channel interrupt register + +/** + * @ingroup Socket_register_group_W5100 + * @brief Socket status register(R) + * @details \ref Sn_SR indicates the status of Socket n.\n + * The status of Socket n is changed by \ref Sn_CR or some special control packet as SYN, FIN packet in TCP. + * @par Normal status + * - \ref SOCK_CLOSED : Closed + * - \ref SOCK_INIT : Initiate state + * - \ref SOCK_LISTEN : Listen state + * - \ref SOCK_ESTABLISHED : Success to connect + * - \ref SOCK_CLOSE_WAIT : Closing state + * - \ref SOCK_UDP : UDP socket + * - \ref SOCK_MACRAW : MAC raw mode socket + *@par Temporary status during changing the status of Socket n. + * - \ref SOCK_SYNSENT : This indicates Socket n sent the connect-request packet (SYN packet) to a peer. + * - \ref SOCK_SYNRECV : It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer. + * - \ref SOCK_FIN_WAIT : Connection state + * - \ref SOCK_CLOSING : Closing state + * - \ref SOCK_TIME_WAIT : Closing state + * - \ref SOCK_LAST_ACK : Closing state + */ +#define Sn_SR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0003)) // channel status register + +/** + * @ingroup Socket_register_group_W5100 + * @brief source port register(R/W) + * @details \ref Sn_PORT configures the source port number of Socket n. + * It is valid when Socket n is used in TCP/UDP mode. It should be set before OPEN command is ordered. +*/ +#define Sn_PORT(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0004)) // source port register + +/** + * @ingroup Socket_register_group_W5100 + * @brief Peer MAC register address(R/W) + * @details \ref Sn_DHAR configures the destination hardware address of Socket n when using SEND_MAC command in UDP mode or + * it indicates that it is acquired in ARP-process by CONNECT/SEND command. + */ +#define Sn_DHAR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0006)) // Peer MAC register address + +/** + * @ingroup Socket_register_group_W5100 + * @brief Peer IP register address(R/W) + * @details \ref Sn_DIPR configures or indicates the destination IP address of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP client mode, it configures an IP address of TCP server before CONNECT command. + * In TCP server mode, it indicates an IP address of TCP client after successfully establishing connection. + * In UDP mode, it configures an IP address of peer to be received the UDP packet by SEND or SEND_MAC command. + */ +#define Sn_DIPR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x000C)) // Peer IP register address + +/** + * @ingroup Socket_register_group_W5100 + * @brief Peer port register address(R/W) + * @details \ref Sn_DPORT configures or indicates the destination port number of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP clientmode, it configures the listen port number of TCP server before CONNECT command. + * In TCP Servermode, it indicates the port number of TCP client after successfully establishing connection. + * In UDP mode, it configures the port number of peer to be transmitted the UDP packet by SEND/SEND_MAC command. + */ +#define Sn_DPORT(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0010)) // Peer port register address + +/** + * @ingroup Socket_register_group_W5100 + * @brief Maximum Segment Size(Sn_MSSR0) register address(R/W) + * @details \ref Sn_MSSR configures or indicates the MTU(Maximum Transfer Unit) of Socket n. + */ +#define Sn_MSSR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0012)) // Maximum Segment Size(Sn_MSSR0) register address + +/** + * @ingroup Socket_register_group_W5100 + * @brief IP Protocol(PROTO) Register(R/W) + * @details \ref Sn_PROTO that sets the protocol number field of the IP header at the IP layer. It is + * valid only in IPRAW mode, and ignored in other modes. + */ +#define Sn_PROTO(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0014)) // Protocol of IP Header field register in IP raw mode + +/** + * @ingroup Socket_register_group_W5100 + * @brief IP Type of Service(TOS) Register(R/W) + * @details \ref Sn_TOS configures the TOS(Type Of Service field in IP Header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TOS(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + 0x0015) // IP Type of Service(TOS) Register + +/** + * @ingroup Socket_register_group_W5100 + * @brief IP Time to live(TTL) Register(R/W) + * @details \ref Sn_TTL configures the TTL(Time To Live field in IP header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TTL(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0016)) // IP Time to live(TTL) Register + +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0017)) +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0018)) +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0019)) +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001A)) +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001B)) +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001C)) +// Reserved (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001D)) + +/** + * @ingroup Socket_register_group_W5100 + * @brief Transmit free memory size register(R) + * @details \ref Sn_TX_FSR indicates the free size of Socket n TX Buffer Block. It is initialized to the configured size by \ref Sn_TXMEM_SIZE. + * Data bigger than \ref Sn_TX_FSR should not be saved in the Socket n TX Buffer because the bigger data overwrites the previous saved data not yet sent. + * Therefore, check before saving the data to the Socket n TX Buffer, and if data is equal or smaller than its checked size, + * transmit the data with SEND/SEND_MAC command after saving the data in Socket n TX buffer. But, if data is bigger than its checked size, + * transmit the data after dividing into the checked size and saving in the Socket n TX buffer. + */ +#define Sn_TX_FSR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0020)) // Transmit free memory size register + +/** + * @ingroup Socket_register_group_W5100 + * @brief Transmit memory read pointer register address(R) + * @details \ref Sn_TX_RD is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001), it is re-initialized while connecting with TCP. + * After its initialization, it is auto-increased by SEND command. + * SEND command transmits the saved data from the current \ref Sn_TX_RD to the \ref Sn_TX_WR in the Socket n TX Buffer. + * After transmitting the saved data, the SEND command increases the \ref Sn_TX_RD as same as the \ref Sn_TX_WR. + * If its increment value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_TX_RD(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0022)) // Transmit memory read pointer register address + +/** + * @ingroup Socket_register_group_W5100 + * @brief Transmit memory write pointer register address(R/W) + * @details \ref Sn_TX_WR is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001), it is re-initialized while connecting with TCP.\n + * It should be read or be updated like as follows.\n + * 1. Read the starting address for saving the transmitting data.\n + * 2. Save the transmitting data from the starting address of Socket n TX buffer.\n + * 3. After saving the transmitting data, update \ref Sn_TX_WR to the increased value as many as transmitting data size. + * If the increment value exceeds the maximum value 0xFFFF(greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value.\n + * 4. Transmit the saved data in Socket n TX Buffer by using SEND/SEND command + */ +#define Sn_TX_WR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0024)) // Transmit memory write pointer register address + +/** + * @ingroup Socket_register_group_W5100 + * @brief Received data size register(R) + * @details \ref Sn_RX_RSR indicates the data size received and saved in Socket n RX Buffer. + * \ref Sn_RX_RSR does not exceed the \ref Sn_RXMEM_SIZE and is calculated as the difference between + * Socket n RX Write Pointer (\ref Sn_RX_WR)and Socket n RX Read Pointer (\ref Sn_RX_RD) + */ +#define Sn_RX_RSR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0026)) // Received data size register + +/** + * @ingroup Socket_register_group_W5100 + * @brief Read point of Receive memory(R/W) + * @details \ref Sn_RX_RD is initialized by OPEN command. Make sure to be read or updated as follows.\n + * 1. Read the starting save address of the received data.\n + * 2. Read data from the starting address of Socket n RX Buffer.\n + * 3. After reading the received data, Update \ref Sn_RX_RD to the increased value as many as the reading size. + * If the increment value exceeds the maximum value 0xFFFF, that is, is greater than 0x10000 and the carry bit occurs, + * update with the lower 16bits value ignored the carry bit.\n + * 4. Order RECV command is for notifying the updated \ref Sn_RX_RD to W5100. + */ +#define Sn_RX_RD(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0028)) // Read point of Receive memory + +/** + * @ingroup Socket_register_group_W5100 + * @brief Write point of Receive memory(R) + * @details \ref Sn_RX_WR is initialized by OPEN command and it is auto-increased by the data reception. + * If the increased value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_RX_WR(sn) (_W5100_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002A)) // Write point of Receive memory + + +//----------------------------- W5100 Register values ----------------------------- + +/* MODE register values */ +/** + * @brief Reset + * @details If this bit is All internal registers will be initialized. It will be automatically cleared as after S/W reset. + */ +#define MR_RST 0x80 ///< reset + + +/** + * @brief Ping block + * @details 0 : Disable Ping block\n + * 1 : Enable Ping block\n + * If the bit is it blocks the response to a ping request. + */ +#define MR_PB 0x10 ///< ping block + +/** + * @brief Enable PPPoE + * @details 0 : DisablePPPoE mode\n + * 1 : EnablePPPoE mode\n + * If you use ADSL, this bit should be '1'. + */ +#define MR_PPPOE 0x08 ///< enable pppoe + +/** + * @brief Address Auto-Increment in Indirect Bus Interface + * @details 0 : Disable auto-increment \n + * 1 : Enable auto-incremente \n + * At the Indirect Bus Interface mode, if this bit is set as ��1��, the address will + * be automatically increased by 1 whenever read and write are performed. + */ +#define MR_AI 0x02 ///< auto-increment in indirect mode + +/** + * @brief Indirect Bus Interface mode + * @details 0 : Disable Indirect bus Interface mode \n + * 1 : Enable Indirect bus Interface mode \n + * If this bit is set as ��1��, Indirect Bus Interface mode is set. + */ +#define MR_IND 0x01 ///< enable indirect mode + +/* IR register values */ +/** + * @brief Check IP conflict. + * @details Bit is set as when own source IP address is same with the sender IP address in the received ARP request. + */ +#define IR_CONFLICT 0x80 ///< check ip confict + +/** + * @brief Get the destination unreachable message in UDP sending. + * @details When receiving the ICMP (Destination port unreachable) packet, this bit is set as + * When this bit is Destination Information such as IP address and Port number may be checked with the corresponding @ref UIPR & @ref UPORTR. + */ +#define IR_UNREACH 0x40 ///< check destination unreachable + +/** + * @brief Get the PPPoE close message. + * @details When PPPoE is disconnected during PPPoE mode, this bit is set. + */ +#define IR_PPPoE 0x20 ///< get the PPPoE close message + +#define IR_SOCK(sn) (0x01 << sn) ///< check socket interrupt + + +// Sn_MR values +/* Sn_MR Default values */ +/** + * @brief Unused socket + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_CLOSE 0x00 ///< unused socket + +/** + * @brief TCP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_TCP 0x01 ///< TCP + +/** + * @brief UDP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_UDP 0x02 ///< UDP +#define Sn_MR_IPRAW 0x03 ///< IP LAYER RAW SOCK + +/** + * @brief MAC LAYER RAW SOCK + * @details This configures the protocol mode of Socket n. + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR_MACRAW 0x04 ///< MAC LAYER RAW SOCK + +/** + * @brief PPPoE + * @details This configures the protocol mode of Socket n. + * @note PPPoE mode should be only used in Socket 0. + */ +#define Sn_MR_PPPoE 0x05 ///< PPPoE + +/** + * @brief No Delayed Ack(TCP), Multicast flag + * @details 0 : Disable No Delayed ACK option\n + * 1 : Enable No Delayed ACK option\n + * This bit is applied only during TCP mode (P[3:0] = 001).\n + * When this bit is It sends the ACK packet without delay as soon as a Data packet is received from a peer.\n + * When this bit is It sends the ACK packet after waiting for the timeout time configured by \ref _RTR_. + */ +#define Sn_MR_ND 0x20 ///< No Delayed Ack(TCP) flag + +/** + * @brief Support UDP Multicasting + * @details 0 : using IGMP version 2\n + * 1 : using IGMP version 1\n + * This bit is applied only during UDP mode(P[3:0] = 010 and MULTI = '1') + * It configures the version for IGMP messages (Join/Leave/Report). + */ +#define Sn_MR_MC Sn_MR_ND ///< Select IGMP version 1(0) or 2(1) + +/** + * @brief MAC filter enable in @ref Sn_MR_MACRAW mode + * @details 0 : disable MAC Filtering\n + * 1 : enable MAC Filtering\n + * This bit is applied only during MACRAW mode(P[3:0] = 100.\n + * When set as W5100 can only receive broadcasting packet or packet sent to itself. + * When this bit is W5100 can receive all packets on Ethernet. + * If user wants to implement Hybrid TCP/IP stack, + * it is recommended that this bit is set as for reducing host overhead to process the all received packets. + */ +#define Sn_MR_MF 0x40 ///< Use MAC filter +#define Sn_MR_MFEN Sn_MR_MF + + +/* Sn_MR Default values */ +/** + * @brief Support UDP Multicasting + * @details 0 : disable Multicasting\n + * 1 : enable Multicasting\n + * This bit is applied only during UDP mode(P[3:0] = 010).\n + * To use multicasting, \ref Sn_DIPR & \ref Sn_DPORT should be respectively configured with the multicast group IP address & port number + * before Socket n is opened by OPEN command of \ref Sn_CR. + */ +#define Sn_MR_MULTI 0x80 ///< support multicating + +/* Sn_CR values */ +/** + * @brief Initialize or open socket + * @details Socket n is initialized and opened according to the protocol selected in Sn_MR(P3:P0). + * The table below shows the value of \ref Sn_SR corresponding to \ref Sn_MR.\n + * + * + * + * + * + * + * + * + *
    \b Sn_MR (P[3:0]) \b Sn_SR
    Sn_MR_CLOSE (000) --
    Sn_MR_TCP (001) SOCK_INIT (0x13)
    Sn_MR_UDP (010) SOCK_UDP (0x22)
    S0_MR_IPRAW (011) SOCK_IPRAW (0x32)
    S0_MR_MACRAW (100) SOCK_MACRAW (0x42)
    S0_MR_PPPoE (101) SOCK_PPPoE (0x5F)
    + */ +#define Sn_CR_OPEN 0x01 ///< initialize or open socket + +/** + * @brief Wait connection request in TCP mode(Server mode) + * @details This is valid only in TCP mode (Sn_MR(P3:P0) = \ref Sn_MR_TCP).// + * In this mode, Socket n operates as a 'TCP server' and waits for connection-request (SYN packet) from any 'TCP client'.// + * The \ref Sn_SR changes the state from SOCK_INIT to SOCKET_LISTEN.// + * When a 'TCP client' connection request is successfully established, + * the \ref Sn_SR changes from SOCK_LISTEN to SOCK_ESTABLISHED and the Sn_IR(0) becomes + * But when a 'TCP client' connection request is failed, Sn_IR(3) becomes and the status of \ref Sn_SR changes to SOCK_CLOSED. + */ +#define Sn_CR_LISTEN 0x02 ///< wait connection request in tcp mode(Server mode) + +/** + * @brief Send connection request in TCP mode(Client mode) + * @details To connect, a connect-request (SYN packet) is sent to TCP serverconfigured by \ref Sn_DIPR & Sn_DPORT(destination address & port). + * If the connect-request is successful, the \ref Sn_SR is changed to \ref SOCK_ESTABLISHED and the Sn_IR(0) becomes \n\n + * The connect-request fails in the following three cases.\n + * 1. When a @b ARPTO occurs (\ref Sn_IR[3] = '1') because destination hardware address is not acquired through the ARP-process.\n + * 2. When a @b SYN/ACK packet is not received and @b TCPTO (Sn_IR(3) ='1')\n + * 3. When a @b RST packet is received instead of a @b SYN/ACK packet. In these cases, \ref Sn_SR is changed to \ref SOCK_CLOSED. + * @note This is valid only in TCP mode and operates when Socket n acts as TCP client + */ +#define Sn_CR_CONNECT 0x04 ///< send connection request in tcp mode(Client mode) + +/** + * @brief Send closing request in TCP mode + * @details Regardless of TCP serveror TCP client the DISCON command processes the disconnect-process (Active closeor Passive close.\n + * @par Active close + * it transmits disconnect-request(FIN packet) to the connected peer\n + * @par Passive close + * When FIN packet is received from peer, a FIN packet is replied back to the peer.\n + * @details When the disconnect-process is successful (that is, FIN/ACK packet is received successfully), \ref Sn_SR is changed to \ref SOCK_CLOSED.\n + * Otherwise, TCPTO occurs (Sn_IR(3)='1') and then \ref Sn_SR is changed to \ref SOCK_CLOSED. + * @note Valid only in TCP mode. + */ +#define Sn_CR_DISCON 0x08 ///< send closing reqeuset in tcp mode + +/** + * @brief Close socket + * @details Sn_SR is changed to \ref SOCK_CLOSED. + */ +#define Sn_CR_CLOSE 0x10 + +/** + * @brief Update TX buffer pointer and send data + * @details SEND transmits all the data in the Socket n TX buffer.\n + * For more details, please refer to Socket n TX Free Size Register (\ref Sn_TX_FSR), Socket n, + * TX Write Pointer Register(\ref Sn_TX_WR), and Socket n TX Read Pointer Register(\ref Sn_TX_RD). + */ +#define Sn_CR_SEND 0x20 + +/** + * @brief Send data with MAC address, so without ARP process + * @details The basic operation is same as SEND.\n + * Normally SEND transmits data after destination hardware address is acquired by the automatic ARP-process(Address Resolution Protocol).\n + * But SEND_MAC transmits data without the automatic ARP-process.\n + * In this case, the destination hardware address is acquired from \ref Sn_DHAR configured by host, instead of APR-process. + * @note Valid only in UDP mode. + */ +#define Sn_CR_SEND_MAC 0x21 + +/** + * @brief Send keep alive message + * @details It checks the connection status by sending 1byte keep-alive packet.\n + * If the peer can not respond to the keep-alive packet during timeout time, the connection is terminated and the timeout interrupt will occur. + * @note Valid only in TCP mode. + */ +#define Sn_CR_SEND_KEEP 0x22 + +/** + * @brief Update RX buffer pointer and receive data + * @details RECV completes the processing of the received data in Socket n RX Buffer by using a RX read pointer register (\ref Sn_RX_RD).\n + * For more details, refer to Socket n RX Received Size Register (\ref Sn_RX_RSR), Socket n RX Write Pointer Register (\ref Sn_RX_WR), + * and Socket n RX Read Pointer Register (\ref Sn_RX_RD). + */ +#define Sn_CR_RECV 0x40 + +/** + * @brief PPPoE connection + * @details PPPoE connection begins by transmitting PPPoE discovery packet + */ +#define Sn_CR_PCON 0x23 + +/** + * @brief Closes PPPoE connection + * @details Closes PPPoE connection + */ +#define Sn_CR_PDISCON 0x24 + +/** + * @brief REQ message transmission + * @details In each phase, it transmits REQ message. + */ +#define Sn_CR_PCR 0x25 + +/** + * @brief NAK massage transmission + * @details In each phase, it transmits NAK message. + */ +#define Sn_CR_PCN 0x26 + +/** + * @brief REJECT message transmission + * @details In each phase, it transmits REJECT message. + */ +#define Sn_CR_PCJ 0x27 + +/* Sn_IR values */ +/** + * @brief PPP Receive Interrupt + * @details PPP Receive Interrupts when the option which is not supported is received. + */ +#define Sn_IR_PRECV 0x80 + +/** + * @brief PPP Fail Interrupt + * @details PPP Fail Interrupts when PAP Authentication is failed. + */ +#define Sn_IR_PFAIL 0x40 + +/** + * @brief PPP Next Phase Interrupt + * @details PPP Next Phase Interrupts when the phase is changed during ADSL connection process. + */ +#define Sn_IR_PNEXT 0x20 + +/** + * @brief SEND_OK Interrupt + * @details This is issued when SEND command is completed. + */ +#define Sn_IR_SENDOK 0x10 ///< complete sending + +/** + * @brief TIMEOUT Interrupt + * @details This is issued when ARPTO or TCPTO occurs. + */ +#define Sn_IR_TIMEOUT 0x08 ///< assert timeout + +/** + * @brief RECV Interrupt + * @details This is issued whenever data is received from a peer. + */ +#define Sn_IR_RECV 0x04 + +/** + * @brief DISCON Interrupt + * @details This is issued when FIN or FIN/ACK packet is received from a peer. + */ +#define Sn_IR_DISCON 0x02 + +/** + * @brief CON Interrupt + * @details This is issued one time when the connection with peer is successful and then \ref Sn_SR is changed to \ref SOCK_ESTABLISHED. + */ +#define Sn_IR_CON 0x01 + +/* Sn_SR values */ +/** + * @brief Closed + * @details This indicates that Socket n is released.\n + * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to \ref SOCK_CLOSED regardless of previous status. + */ +#define SOCK_CLOSED 0x00 ///< closed + +/** + * @brief Initiate state + * @details This indicates Socket n is opened with TCP mode.\n + * It is changed to \ref SOCK_INIT when Sn_MR(P[3:0]) = 001)and OPEN command is ordered.\n + * After \ref SOCK_INIT, user can use LISTEN /CONNECT command. + */ +#define SOCK_INIT 0x13 ///< init state + +/** + * @brief Listen state + * @details This indicates Socket n is operating as TCP servermode and waiting for connection-request (SYN packet) from a peer (TCP client).\n + * It will change to \ref SOCK_ESTABLISHED when the connection-request is successfully accepted.\n + * Otherwise it will change to \ref SOCK_CLOSED after TCPTO occurred (Sn_IR(TIMEOUT) = '1'). + */ +#define SOCK_LISTEN 0x14 + +/** + * @brief Connection state + * @details This indicates Socket n sent the connect-request packet (SYN packet) to a peer.\n + * It is temporarily shown when \ref Sn_SR is changed from \ref SOCK_INIT to \ref SOCK_ESTABLISHED by CONNECT command.\n + * If connect-accept(SYN/ACK packet) is received from the peer at SOCK_SYNSENT, it changes to \ref SOCK_ESTABLISHED.\n + * Otherwise, it changes to \ref SOCK_CLOSED after TCPTO (\ref Sn_IR[TIMEOUT] = '1') is occurred. + */ +#define SOCK_SYNSENT 0x15 + +/** + * @brief Connection state + * @details It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.\n + * If socket n sends the response (SYN/ACK packet) to the peer successfully, it changes to \ref SOCK_ESTABLISHED. \n + * If not, it changes to \ref SOCK_CLOSED after timeout occurs (\ref Sn_IR[TIMEOUT] = '1'). + */ +#define SOCK_SYNRECV 0x16 + +/** + * @brief Success to connect + * @details This indicates the status of the connection of Socket n.\n + * It changes to \ref SOCK_ESTABLISHED when the TCP SERVERprocessed the SYN packet from the TCP CLIENTduring \ref SOCK_LISTEN, or + * when the CONNECT command is successful.\n + * During \ref SOCK_ESTABLISHED, DATA packet can be transferred using SEND or RECV command. + */ +#define SOCK_ESTABLISHED 0x17 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_FIN_WAIT 0x18 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_CLOSING 0x1A + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_TIME_WAIT 0x1B + +/** + * @brief Closing state + * @details This indicates Socket n received the disconnect-request (FIN packet) from the connected peer.\n + * This is half-closing status, and data can be transferred.\n + * For full-closing, DISCON command is used. But For just-closing, @ref Sn_CR_CLOSE command is used. + */ +#define SOCK_CLOSE_WAIT 0x1C + +/** + * @brief Closing state + * @details This indicates Socket n is waiting for the response (FIN/ACK packet) to the disconnect-request (FIN packet) by passive-close.\n + * It changes to \ref SOCK_CLOSED when Socket n received the response successfully, or when timeout occurs (\ref Sn_IR[TIMEOUT] = '1'). + */ +#define SOCK_LAST_ACK 0x1D + +/** + * @brief UDP socket + * @details This indicates Socket n is opened in UDP mode(Sn_MR(P[3:0]) = 010).\n + * It changes to SOCK_UDP when Sn_MR(P[3:0]) = 010 and @ref Sn_CR_OPEN command is ordered.\n + * Unlike TCP mode, data can be transfered without the connection-process. + */ +#define SOCK_UDP 0x22 ///< udp socket + +/** + * @brief IP raw mode socket + * @details TThe socket is opened in IPRAW mode. The SOCKET status is change to SOCK_IPRAW when @ref Sn_MR (P3:P0) is + * Sn_MR_IPRAW and @ref Sn_CR_OPEN command is used.\n + * IP Packet can be transferred without a connection similar to the UDP mode. +*/ +#define SOCK_IPRAW 0x32 ///< ip raw mode socket + +/** + * @brief MAC raw mode socket + * @details This indicates Socket 0 is opened in MACRAW mode (@ref Sn_MR(P[3:0]) = '100' and n=0) and is valid only in Socket 0.\n + * It changes to SOCK_MACRAW when @ref Sn_MR(P[3:0]) = '100' and @ref Sn_CR_OPEN command is ordered.\n + * Like UDP mode socket, MACRAW mode Socket 0 can transfer a MAC packet (Ethernet frame) without the connection-process. + */ +#define SOCK_MACRAW 0x42 ///< mac raw mode socket + +/** + * @brief PPPoE mode socket + * @details It is the status that SOCKET0 is open as PPPoE mode. It is changed to SOCK_PPPoE in case of S0_CR=OPEN and S0_MR + * (P3:P0)=S0_MR_PPPoE.\n + * It is temporarily used at the PPPoE +connection. + */ +#define SOCK_PPPOE 0x5F ///< pppoe socket + +// IP PROTOCOL +#define IPPROTO_IP 0 ///< Dummy for IP +#define IPPROTO_ICMP 1 ///< Control message protocol +#define IPPROTO_IGMP 2 ///< Internet group management protocol +#define IPPROTO_GGP 3 ///< GW^2 (deprecated) +#define IPPROTO_TCP 6 ///< TCP +#define IPPROTO_PUP 12 ///< PUP +#define IPPROTO_UDP 17 ///< UDP +#define IPPROTO_IDP 22 ///< XNS idp +#define IPPROTO_ND 77 ///< UNOFFICIAL net disk protocol +#define IPPROTO_RAW 255 ///< Raw IP packet + +/** + * @brief Enter a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n \n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt.\n + * In OS environment, You can replace it to critical section api supported by OS. + * + * \sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * \sa WIZCHIP_CRITICAL_EXIT() + */ +#define WIZCHIP_CRITICAL_ENTER() WIZCHIP.CRIS._enter() + +#ifdef _exit +#undef _exit +#endif + +/** + * @brief Exit a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n\n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt. \n + * In OS environment, You can replace it to critical section api supported by OS. + * + * @sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * @sa WIZCHIP_CRITICAL_ENTER() + */ +#define WIZCHIP_CRITICAL_EXIT() WIZCHIP.CRIS._exit() + + + +//////////////////////// +// Basic I/O Function // +//////////////////////// +// +//M20150601 : uint16_t AddrSel --> uint32_t AddrSel +// +/** + * @ingroup Basic_IO_function_W5100 + * @brief It reads 1 byte value from a register. + * @param AddrSel Register address + * @return The value of register + */ +uint8_t WIZCHIP_READ (uint32_t AddrSel); + +/** + * @ingroup Basic_IO_function_W5100 + * @brief It writes 1 byte value to a register. + * @param AddrSel Register address + * @param wb Write data + * @return void + */ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ); + +/** + * @ingroup Basic_IO_function_W5100 + * @brief It reads sequence data from registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to read data + * @param len Data length + */ +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5100 + * @brief It writes sequence data to registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to write data + * @param len Data length + */ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + + +///////////////////////////////// +// Common Register IO function // +///////////////////////////////// + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set Mode Register + * @param (uint8_t)mr The value to be set. + * @sa getMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define setMR(mr) WIZCHIP_WRITE(MR,mr) +#else + #define setMR(mr) (*((uint8_t*)MR) = mr) +#endif + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get @ref MR. + * @return uint8_t. The value of Mode register. + * @sa setMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define getMR() WIZCHIP_READ(MR) +#else + #define getMR() (*(uint8_t*)MR) +#endif + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set @ref GAR. + * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes. + * @sa getGAR() + */ +#define setGAR(gar) \ + WIZCHIP_WRITE_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get @ref GAR. + * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes. + * @sa setGAR() + */ +#define getGAR(gar) \ + WIZCHIP_READ_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set @ref SUBR. + * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes. + * @note If subr is null pointer, set the backup subnet to SUBR. \n + * If subr is 0.0.0.0, back up SUBR and clear it. \n + * Otherwize, set subr to SUBR + * @sa getSUBR() + */ +#define setSUBR(subr) \ + WIZCHIP_WRITE_BUF(SUBR,subr,4) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get @ref SUBR. + * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes. + * @sa setSUBR() + */ +#define getSUBR(subr) \ + WIZCHIP_READ_BUF(SUBR, subr, 4) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set @ref SHAR. + * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + * @sa getSHAR() + */ +#define setSHAR(shar) \ + WIZCHIP_WRITE_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get @ref SHAR. + * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + * @sa setSHAR() + */ +#define getSHAR(shar) \ + WIZCHIP_READ_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set @ref SIPR. + * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes. + * @sa getSIPR() +*/ +#define setSIPR(sipr) \ + WIZCHIP_WRITE_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get @ref SIPR. + * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes. + * @sa setSIPR() + */ +#define getSIPR(sipr) \ + WIZCHIP_READ_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set \ref IR register + * @param (uint8_t)ir Value to set \ref IR register. + * @sa getIR() + */ +#define setIR(ir) \ + WIZCHIP_WRITE(IR, (ir & 0xA0)) +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref IR register + * @return uint8_t. Value of \ref IR register. + * @sa setIR() + */ +#define getIR() \ + (WIZCHIP_READ(IR) & 0xA0) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set \ref _IMR_ register + * @param (uint8_t)imr Value to set @ref _IMR_ register. + * @sa getIMR() + */ +#define setIMR(imr) \ + WIZCHIP_WRITE(_IMR_, imr) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref _IMR_ register + * @return uint8_t. Value of @ref _IMR_ register. + * @sa setIMR() + */ +#define getIMR() \ + WIZCHIP_READ(_IMR_) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set \ref _RTR_ register + * @param (uint16_t)rtr Value to set @ref _RTR_ register. + * @sa getRTR() + */ +#define setRTR(rtr) {\ + WIZCHIP_WRITE(_RTR_, (uint8_t)(rtr >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(_RTR_,1), (uint8_t) rtr); \ + } + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref _RTR_ register + * @return uint16_t. Value of @ref _RTR_ register. + * @sa setRTR() + */ +#define getRTR() \ + (((uint16_t)WIZCHIP_READ(_RTR_) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(_RTR_,1))) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set \ref _RCR_ register + * @param (uint8_t)rcr Value to set @ref _RCR_ register. + * @sa getRCR() + */ +#define setRCR(rcr) \ + WIZCHIP_WRITE(_RCR_, rcr) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref _RCR_ register + * @return uint8_t. Value of @ref _RCR_ register. + * @sa setRCR() + */ +#define getRCR() \ + WIZCHIP_READ(_RCR_) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref RMSR register + * @sa getRMSR() + */ +#define setRMSR(rmsr) \ + WIZCHIP_WRITE(RMSR) // Receicve Memory Size + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref RMSR register + * @return uint8_t. Value of @ref RMSR register. + * @sa setRMSR() + */ + #define getRMSR() \ + WIZCHIP_READ() // Receicve Memory Size + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref TMSR register + * @sa getTMSR() + */ +#define setTMSR(rmsr) \ + WIZCHIP_WRITE(TMSR) // Receicve Memory Size + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref TMSR register + * @return uint8_t. Value of @ref TMSR register. + * @sa setTMSR() + */ + + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref PATR register + * @return uint16_t. Value to set \ref PATR register + */ +#define getPATR() \ + (((uint16_t)WIZCHIP_READ(PATR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PATR,1))) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref PPPALGO register + * @return uint8_t. Value to set \ref PPPALGO register + */ +#define getPPPALGO() \ + WIZCHIP_READ(PPPALGO) + + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set \ref PTIMER register + * @param (uint8_t)ptimer Value to set \ref PTIMER register. + * @sa getPTIMER() + */ +#define setPTIMER(ptimer) \ + WIZCHIP_WRITE(PTIMER, ptimer) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref PTIMER register + * @return uint8_t. Value of @ref PTIMER register. + * @sa setPTIMER() + */ +#define getPTIMER() \ + WIZCHIP_READ(PTIMER) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Set \ref PMAGIC register + * @param (uint8_t)pmagic Value to set @ref PMAGIC register. + * @sa getPMAGIC() + */ +#define setPMAGIC(pmagic) \ + WIZCHIP_WRITE(PMAGIC, pmagic) + +/** + * @ingroup Common_register_access_function_W5100 + * @brief Get \ref PMAGIC register + * @return uint8_t. Value of @ref PMAGIC register. + * @sa setPMAGIC() + */ +#define getPMAGIC() \ + WIZCHIP_READ(PMAGIC) + +/////////////////////////////////// +// Socket N register I/O function // +/////////////////////////////////// +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_MR register + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * @param mr Value to set @ref Sn_MR + * @sa getSn_MR() + */ +#define setSn_MR(sn, mr) \ + WIZCHIP_WRITE(Sn_MR(sn),mr) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_MR register + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * @return Value of @ref Sn_MR. + * @sa setSn_MR() + */ +#define getSn_MR(sn) \ + WIZCHIP_READ(Sn_MR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)cr Value to set @ref Sn_CR + * @sa getSn_CR() + */ +#define setSn_CR(sn, cr) \ + WIZCHIP_WRITE(Sn_CR(sn), cr) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_CR. + * @sa setSn_CR() + */ +#define getSn_CR(sn) \ + WIZCHIP_READ(Sn_CR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)ir Value to set @ref Sn_IR + * @sa getSn_IR() + */ +#define setSn_IR(sn, ir) \ + WIZCHIP_WRITE(Sn_IR(sn), ir) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_IR. + * @sa setSn_IR() + */ +#define getSn_IR(sn) \ + WIZCHIP_READ(Sn_IR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_SR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_SR. + */ +#define getSn_SR(sn) \ + WIZCHIP_READ(Sn_SR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)port Value to set @ref Sn_PORT. + * @sa getSn_PORT() + */ +#define setSn_PORT(sn, port) { \ + WIZCHIP_WRITE(Sn_PORT(sn), (uint8_t)(port >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1), (uint8_t) port); \ + } + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_PORT. + * @sa setSn_PORT() + */ +#define getSn_PORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_PORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes. + * @sa getSn_DHAR() + */ +#define setSn_DHAR(sn, dhar) \ + WIZCHIP_WRITE_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes. + * @sa setSn_DHAR() + */ +#define getSn_DHAR(sn, dhar) \ + WIZCHIP_READ_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes. + * @sa getSn_DIPR() + */ +#define setSn_DIPR(sn, dipr) \ + WIZCHIP_WRITE_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes. + * @sa SetSn_DIPR() + */ +#define getSn_DIPR(sn, dipr) \ + WIZCHIP_READ_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)dport Value to set @ref Sn_DPORT + * @sa getSn_DPORT() + */ +#define setSn_DPORT(sn, dport) { \ + WIZCHIP_WRITE(Sn_DPORT(sn), (uint8_t) (dport>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1), (uint8_t) dport); \ + } + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_DPORT. + * @sa setSn_DPORT() + */ +#define getSn_DPORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_DPORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)mss Value to set @ref Sn_MSSR + * @sa setSn_MSSR() + */ +#define setSn_MSSR(sn, mss) { \ + WIZCHIP_WRITE(Sn_MSSR(sn), (uint8_t)(mss>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1), (uint8_t) mss); \ + } + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_MSSR. + * @sa setSn_MSSR() + */ +#define getSn_MSSR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_MSSR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_PROTO register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)proto Value to set \ref Sn_PROTO + * @sa getSn_PROTO() + */ +#define setSn_PROTO(sn, proto) \ + WIZCHIP_WRITE(Sn_TOS(sn), tos) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_PROTO register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_PROTO. + * @sa setSn_PROTO() + */ +#define getSn_PROTO(sn) \ + WIZCHIP_READ(Sn_TOS(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)tos Value to set @ref Sn_TOS + * @sa getSn_TOS() + */ +#define setSn_TOS(sn, tos) \ + WIZCHIP_WRITE(Sn_TOS(sn), tos) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of Sn_TOS. + * @sa setSn_TOS() + */ +#define getSn_TOS(sn) \ + WIZCHIP_READ(Sn_TOS(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @param (uint8_t)ttl Value to set @ref Sn_TTL + * @sa getSn_TTL() + */ +#define setSn_TTL(sn, ttl) \ + WIZCHIP_WRITE(Sn_TTL(sn), ttl) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of @ref Sn_TTL. + * @sa setSn_TTL() + */ +#define getSn_TTL(sn) \ + WIZCHIP_READ(Sn_TTL(sn)) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_RXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @param (uint8_t)rxmemsize Value to set \ref Sn_RXMEM_SIZE + * @sa getSn_RXMEM_SIZE() + */ +#define setSn_RXMEM_SIZE(sn, rxmemsize) \ + WIZCHIP_WRITE(RMSR, (WIZCHIP_READ(RMSR) & ~(0x03 << (2*sn))) | (rxmemsize << (2*sn))) +#define setSn_RXBUF_SIZE(sn,rxmemsize) setSn_RXMEM_SIZE(sn,rxmemsize) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_RXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_RXMEM. + * @sa setSn_RXMEM_SIZE() + */ +#define getSn_RXMEM_SIZE(sn) \ + ((WIZCHIP_READ(RMSR) & (0x03 << (2*sn))) >> (2*sn)) +#define getSn_RXBUF_SIZE(sn) getSn_RXMEM_SIZE(sn) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_TXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)txmemsize Value to set \ref Sn_TXMEM_SIZE + * @sa getSn_TXMEM_SIZE() + */ +#define setSn_TXMEM_SIZE(sn, txmemsize) \ + WIZCHIP_WRITE(TMSR, (WIZCHIP_READ(TMSR) & ~(0x03 << (2*sn))) | (txmemsize << (2*sn))) +#define setSn_TXBUF_SIZE(sn, txmemsize) setSn_TXMEM_SIZE(sn,txmemsize) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_TXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_TXMEM_SIZE. + * @sa setSn_TXMEM_SIZE() + */ +#define getSn_TXMEM_SIZE(sn) \ + ((WIZCHIP_READ(TMSR) & (0x03 << (2*sn))) >> (2*sn)) +#define getSn_TXBUF_SIZE(sn) getSn_TXMEM_SIZE(sn) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_TX_FSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_FSR. + */ +uint16_t getSn_TX_FSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_TX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_RD. + */ +#define getSn_TX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)txwr Value to set @ref Sn_TX_WR + * @sa GetSn_TX_WR() + */ +#define setSn_TX_WR(sn, txwr) { \ + WIZCHIP_WRITE(Sn_TX_WR(sn), (uint8_t)(txwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1), (uint8_t) txwr); \ + } + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_WR. + * @sa setSn_TX_WR() + */ +#define getSn_TX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_RX_RSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_RSR. + */ +uint16_t getSn_RX_RSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD + * @sa getSn_RX_RD() + */ +#define setSn_RX_RD(sn, rxrd) { \ + WIZCHIP_WRITE(Sn_RX_RD(sn), (uint8_t)(rxrd>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1), (uint8_t) rxrd); \ + } + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @regurn uint16_t. Value of @ref Sn_RX_RD. + * @sa setSn_RX_RD() + */ +#define getSn_RX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rxwr Value to set \ref Sn_RX_WR + * @sa getSn_RX_WR() + */ +#define setSn_RX_WR(sn, rxwr) { \ + WIZCHIP_WRITE(Sn_RX_WR(sn), (uint8_t)(rxwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1), (uint8_t) rxwr); \ + } + + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_WR. + */ +#define getSn_RX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Set @ref Sn_FRAG register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)frag Value to set \ref Sn_FRAG + * @sa getSn_FRAG() + */ +#define setSn_FRAG(sn, frag) { \ + WIZCHIP_WRITE(Sn_FRAG(sn), (uint8_t)(frag >>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1), (uint8_t) frag); \ + } + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get @ref Sn_FRAG register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_FRAG. + * @sa setSn_FRAG() + */ +#define getSn_FRAG(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_FRAG(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get the max RX buffer size of socket sn + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Max buffer size + */ +#define getSn_RxMAX(sn) \ + ((uint16_t)(1 << getSn_RXMEM_SIZE(sn)) << 10) + + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get the max TX buffer size of socket sn + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Max buffer size + */ +#define getSn_TxMAX(sn) \ + ((uint16_t)(1 << getSn_TXMEM_SIZE(sn)) << 10) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get the mask of socket sn RX buffer. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Mask value + */ +#define getSn_RxMASK(sn) \ + (getSn_RxMAX(sn) - 1) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get the mask of socket sn TX buffer + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Mask value + */ +#define getSn_TxMASK(sn) \ + (getSn_TxMAX(sn) - 1) + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get the base address of socket sn RX buffer. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n RX buffer base address. + */ +uint32_t getSn_RxBASE(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5100 + * @brief Get the base address of socket sn TX buffer. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n TX buffer base address. + */ +uint32_t getSn_TxBASE(uint8_t sn); + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// +/** + * @ingroup Basic_IO_function_W5100 + * @brief It copies data to internal TX memory + * + * @details This function reads the Tx write pointer register and after that, + * it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + * and updates the Tx write pointer register. + * This function is being called by send() and sendto() function also. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param wizdata Pointer buffer to write data + * @param len Data length + * @sa wiz_recv_data() + */ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5100 + * @brief It copies data to your buffer from internal RX memory + * + * @details This function read the Rx read pointer register and after that, + * it copies the received data from internal RX memory + * to wizdata(pointer variable) of the length of len(variable) bytes. + * This function is being called by recv() also. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param wizdata Pointer buffer to read data + * @param len Data length + * @sa wiz_send_data() + */ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5100 + * @brief It discard the received data in RX memory. + * @details It discards the data of the length of len(variable) bytes in internal RX memory. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param len Data length + */ +void wiz_recv_ignore(uint8_t sn, uint16_t len); + +/// @cond DOXY_APPLY_CODE +#endif +/// @endcond + +#ifdef __cplusplus +} +#endif + +#endif //_W5100_H_ + + + diff --git a/Ethernet/W5100S/w5100s.c b/Ethernet/W5100S/w5100s.c new file mode 100644 index 0000000..a8c6c6d --- /dev/null +++ b/Ethernet/W5100S/w5100s.c @@ -0,0 +1,425 @@ +//***************************************************************************** +// +//! \file w5100S.c +//! \brief W5100S HAL Interface. +//! \version 1.0.0 +//! \date 2018/03/29 +//! \par Revision history +//! <2018/03/29> 1st Release +//! \author Peter +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#include "w5100s.h" + +#if (_WIZCHIP_ == W5100S) +/** +@brief This function writes the data into W5100S registers. +*/ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ) +{ + int i; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte(0xF0); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(wb); // Data write (write 1byte data) +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_5500_) ) + WIZCHIP.IF.SPI._write_byte((AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(0xF0); + WIZCHIP.IF.SPI._write_byte(wb); // Data write (write 1byte data) +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + + //add indirect bus + //M20150601 : Rename the function for integrating with ioLibrary + //WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + //WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + //WIZCHIP.IF.BUS._write_byte(IDM_DR,wb); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + WIZCHIP.IF.BUS._write_data(IDM_DR,wb); +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} +/** +@brief This function reads the value from W5100S registers. +*/ +uint8_t WIZCHIP_READ(uint32_t AddrSel) +{ + uint8_t ret; + int i; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte(0x0F); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF) >> 0); + ret = WIZCHIP.IF.SPI._read_byte(); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_5500_) ) + WIZCHIP.IF.SPI._write_byte((AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(0x0F); + ret = WIZCHIP.IF.SPI._read_byte(); +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + + //add indirect bus + //M20150601 : Rename the function for integrating with ioLibrary + //WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + //WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + //ret = WIZCHIP.IF.BUS._read_byte(IDM_DR); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + ret = WIZCHIP.IF.BUS._read_data(IDM_DR); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100S. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); + return ret; +} + + +/** +@brief This function writes into W5100S memory(Buffer) +*/ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint16_t i = 0; + int j,k,l; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); //M20150601 : Moved here. + +#if((_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_)) + + WIZCHIP.IF.SPI._write_byte(0xF0); + WIZCHIP.IF.SPI._write_byte((((uint16_t)(AddrSel+i)) & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((((uint16_t)(AddrSel+i)) & 0x00FF) >> 0); + + for(i = 0; i < len; i++) + { + WIZCHIP.IF.SPI._write_byte(pBuf[i]); // Data write (write 1byte data) + } + +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_5500_) ) + + WIZCHIP.IF.SPI._write_byte((((uint16_t)(AddrSel+i)) & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((((uint16_t)(AddrSel+i)) & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(0xF0); + + for(i = 0; i < len; i++) + { + WIZCHIP.IF.SPI._write_byte(pBuf[i]); // Data write (write 1byte data) + } +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + //M20150601 : Rename the function for integrating with ioLibrary + /* + WIZCHIP_WRITE(MR,WIZCHIP_READ(MR) | MR_AI); + WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + WIZCHIP.IF.BUS._write_byte(IDM_DR,pBuf[i]); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); + */ + setMR(getMR()|MR_AI); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + WIZCHIP.IF.BUS._write_data(IDM_DR,pBuf[i]); + setMR(getMR() & ~MR_AI); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100S. !!!!" +#endif + + WIZCHIP.CS._deselect(); //M20150601 : Moved here. + WIZCHIP_CRITICAL_EXIT(); +} + +/** +@brief This function reads into W5100S memory(Buffer) +*/ + +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint16_t i = 0; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); //M20150601 : Moved here. + +#if( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_) ) + + WIZCHIP.IF.SPI._write_byte(0x0F); + WIZCHIP.IF.SPI._write_byte((uint16_t)((AddrSel+i) & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((uint16_t)((AddrSel+i) & 0x00FF) >> 0); + + for(i = 0; i < len; i++) + { + pBuf[i] = WIZCHIP.IF.SPI._read_byte(); + } +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_5500_) ) + + WIZCHIP.IF.SPI._write_byte((uint16_t)((AddrSel+i) & 0xFF00) >> 8); + WIZCHIP.IF.SPI._write_byte((uint16_t)((AddrSel+i) & 0x00FF) >> 0); + WIZCHIP.IF.SPI._write_byte(0x0F); + + for(i = 0; i < len; i++) + { + pBuf[i] = WIZCHIP.IF.SPI._read_byte(); + } + +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + //M20150601 : Rename the function for integrating with ioLibrary + /* + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) | MR_AI); + WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + pBuf[i] = WIZCHIP.IF.BUS._read_byte(IDM_DR); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); + */ + setMR(getMR() | MR_AI); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0xFF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x00FF)); + for(i = 0 ; i < len; i++) + pBuf[i] = WIZCHIP.IF.BUS._read_data(IDM_DR); + setMR(getMR() & ~MR_AI); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5100S. !!!!" +#endif + + WIZCHIP.CS._deselect(); //M20150601 : Moved Here. + WIZCHIP_CRITICAL_EXIT(); +} + +/////////////////////////////////// +// Socket N regsiter IO function // +/////////////////////////////////// + +uint16_t getSn_TX_FSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + do + { + val1 = WIZCHIP_READ(Sn_TX_FSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_TX_FSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + } + }while (val != val1); + return val; +} + + +uint16_t getSn_RX_RSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + do + { + val1 = WIZCHIP_READ(Sn_RX_RSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_RX_RSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + } + }while (val != val1); + return val; +} + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// +uint32_t getSn_RxBASE(uint8_t sn) +{ + int8_t i; +#if ( _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + uint32_t rxbase = _W5100S_IO_BASE_ + _WIZCHIP_IO_RXBUF_; +#else + uint32_t rxbase = _WIZCHIP_IO_RXBUF_; +#endif + for(i = 0; i < sn; i++) + rxbase += getSn_RxMAX(i); + + return rxbase; +} + +uint32_t getSn_TxBASE(uint8_t sn) +{ + int8_t i; +#if ( _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + uint32_t txbase = _W5100S_IO_BASE_ + _WIZCHIP_IO_TXBUF_; +#else + uint32_t txbase = _WIZCHIP_IO_TXBUF_; +#endif + for(i = 0; i < sn; i++) + txbase += getSn_TxMAX(i); + return txbase; +} + +/** +@brief This function is being called by send() and sendto() function also. for copy the data form application buffer to Transmite buffer of the chip. + +This function read the Tx write pointer register and after copy the data in buffer update the Tx write pointer +register. User should read upper byte first and lower byte later to get proper value. +And this function is being used for copy the data form application buffer to Transmite +buffer of the chip. It calculate the actual physical address where one has to write +the data in transmite buffer. Here also take care of the condition while it exceed +the Tx memory uper-bound of socket. + +*/ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t dst_mask; + uint16_t dst_ptr; + + ptr = getSn_TX_WR(sn); + + dst_mask = ptr & getSn_TxMASK(sn); + dst_ptr = getSn_TxBASE(sn) + dst_mask; + + if (dst_mask + len > getSn_TxMAX(sn)) + { + size = getSn_TxMAX(sn) - dst_mask; + WIZCHIP_WRITE_BUF(dst_ptr, wizdata, size); + wizdata += size; + size = len - size; + dst_ptr = getSn_TxBASE(sn); + WIZCHIP_WRITE_BUF(dst_ptr, wizdata, size); + } + else + { + WIZCHIP_WRITE_BUF(dst_ptr, wizdata, len); + } + + ptr += len; + + setSn_TX_WR(sn, ptr); +} + + +/** +@brief This function is being called by recv() also. This function is being used for copy the data form Receive buffer of the chip to application buffer. + +This function read the Rx read pointer register +and after copy the data from receive buffer update the Rx write pointer register. +User should read upper byte first and lower byte later to get proper value. +It calculate the actual physical address where one has to read +the data from Receive buffer. Here also take care of the condition while it exceed +the Rx memory uper-bound of socket. +*/ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t src_mask; + uint16_t src_ptr; + + ptr = getSn_RX_RD(sn); + + src_mask = (uint32_t)ptr & getSn_RxMASK(sn); + src_ptr = (getSn_RxBASE(sn) + src_mask); + + + if( (src_mask + len) > getSn_RxMAX(sn) ) + { + size = getSn_RxMAX(sn) - src_mask; + WIZCHIP_READ_BUF((uint32_t)src_ptr, (uint8_t*)wizdata, size); + wizdata += size; + size = len - size; + src_ptr = getSn_RxBASE(sn); + WIZCHIP_READ_BUF(src_ptr, (uint8_t*)wizdata, size); + } + else + { + WIZCHIP_READ_BUF(src_ptr, (uint8_t*)wizdata, len); + } + + ptr += len; + + setSn_RX_RD(sn, ptr); +} + +void wiz_recv_ignore(uint8_t sn, uint16_t len) +{ + uint16_t ptr; + + ptr = getSn_RX_RD(sn); + + ptr += len; + setSn_RX_RD(sn,ptr); +} + +void wiz_mdio_write(uint8_t PHYMDIO_regadr, uint16_t var) +{ + WIZCHIP_WRITE(PHYRAR,PHYMDIO_regadr); + WIZCHIP_WRITE(PHYDIR, (uint8_t)(var >> 8)); + WIZCHIP_WRITE(PHYDIR+1, (uint8_t)(var)); + WIZCHIP_WRITE(PHYACR, PHYACR_WRITE); + while(WIZCHIP_READ(PHYACR)); //wait for command complete +} + +uint16_t wiz_mdio_read(uint8_t PHYMDIO_regadr) +{ + WIZCHIP_WRITE(PHYRAR,PHYMDIO_regadr); + WIZCHIP_WRITE(PHYACR, PHYACR_READ); + while(WIZCHIP_READ(PHYACR)); //wait for command complete + return ((uint16_t)WIZCHIP_READ(PHYDOR) << 8) | WIZCHIP_READ(PHYDOR+1); +} + +void wiz_delay_ms(uint32_t milliseconds) +{ + uint32_t i; + for(i = 0 ; i < milliseconds ; i++) + { + //Write any values to clear the TCNTCLKR register + setTCNTCLKR(0xff); + + // Wait until counter register value reaches 10.(10 = 1ms : TCNTR is 100us tick counter register) + while(getTCNTR() < 0x0a){} + } +} + +#endif diff --git a/Ethernet/W5100S/w5100s.h b/Ethernet/W5100S/w5100s.h new file mode 100644 index 0000000..549e838 --- /dev/null +++ b/Ethernet/W5100S/w5100s.h @@ -0,0 +1,3323 @@ +//* **************************************************************************** +//! \file w5100S.h +//! \brief W5100S HAL Header File. +//! \version 1.0.0 +//! \date 2018/03/29 +//! \par Revision history +//! <2018/03/29> 1st Release +//! \author Peter +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + + +#ifndef _W5100S_H_ +#define _W5100S_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "wizchip_conf.h" + +/// \cond DOXY_APPLY_CODE +#if (_WIZCHIP_ == W5100S) +/// \endcond + +#define _WIZCHIP_SN_BASE_ (0x0400) +#define _WIZCHIP_SN_SIZE_ (0x0100) +#define _WIZCHIP_IO_TXBUF_ (0x4000) /* Internal Tx buffer address of the iinchip */ +#define _WIZCHIP_IO_RXBUF_ (0x6000) /* Internal Rx buffer address of the iinchip */ + + +#define WIZCHIP_CREG_BLOCK 0x00 ///< Common register block +#define WIZCHIP_SREG_BLOCK(N) (_WIZCHIP_SN_BASE_+ _WIZCHIP_SN_SIZE_*N) ///< Socket N register block + +#define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + N) ///< Increase offset address + +#if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + #define _W5100S_IO_BASE_ _WIZCHIP_IO_BASE_ +#elif (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) + #define IDM_OR ((_WIZCHIP_IO_BASE + 0x0000)) + #define IDM_AR0 ((_WIZCHIP_IO_BASE_ + 0x0001)) + #define IDM_AR1 ((_WIZCHIP_IO_BASE_ + 0x0002)) + #define IDM_DR ((_WIZCHIP_IO_BASE_ + 0x0003)) + #define _W5100S_IO_BASE_ 0x0000 +#elif (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define _W5100S_IO_BASE_ 0x0000 +#endif + +/////////////////////////////////////// +// Definition For Legacy Chip Driver // +/////////////////////////////////////// +#define IINCHIP_READ(ADDR) WIZCHIP_READ(ADDR) ///< The defined for legacy chip driver +#define IINCHIP_WRITE(ADDR,VAL) WIZCHIP_WRITE(ADDR,VAL) ///< The defined for legacy chip driver +#define IINCHIP_READ_BUF(ADDR,BUF,LEN) WIZCHIP_READ_BUF(ADDR,BUF,LEN) ///< The defined for legacy chip driver +#define IINCHIP_WRITE_BUF(ADDR,BUF,LEN) WIZCHIP_WRITE(ADDR,BUF,LEN) ///< The defined for legacy chip driver + + +//----------- defgroup -------------------------------- + +/** + * @defgroup W5100S W5100S + * @brief WHIZCHIP register defines and I/O functions of @b W5100S. + * + * - @ref WIZCHIP_register_W5100S: @ref Common_register_group_W5100S and @ref Socket_register_group_W5100S + * - @ref WIZCHIP_IO_Functions_W5100S: @ref Basic_IO_function_W5100S, @ref Common_register_access_function_W5100S and @ref Special_function_W5100S + */ + + /** + * @defgroup WIZCHIP_register_W5100S WIZCHIP register + * @ingroup W5100S + * @brief WIZCHIP register defines register group of W5100S . + * + * - \ref Common_register_group_W5100S : Common register group W5100S + * - \ref Socket_register_group_W5100S : \c SOCKET n register group W5100S + */ + + +/** + * @defgroup WIZCHIP_IO_Functions_W5100S WIZCHIP I/O functions + * @ingroup W5100S + * @brief This supports the basic I/O functions for \ref WIZCHIP_register_W5100S. + * + * - Basic I/O function \n + * WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF(), wiz_recv_data(), wiz_recv_ignore(), wiz_send_data() \n\n + * + * - \ref Common_register_group_W5100S access functions \n + * -# @b Mode \n + * getMR(), setMR() + * -# @b Interrupt \n + * getIR(), setIR(), getIMR(), setIMR(), + * -# Network Information \n + * getSHAR(), setSHAR(), getGAR(), setGAR(), getSUBR(), setSUBR(), getSIPR(), setSIPR() + * -# @b Retransmission \n + * getRCR(), setRCR(), getRTR(), setRTR() + * -# @b PPPoE \n + * getPTIMER(), setPTIMER(), getPMAGIC(), getPMAGIC() + * + * - \ref Socket_register_group_W5100S access functions \n + * -# SOCKET control \n + * getSn_MR(), setSn_MR(), getSn_CR(), setSn_CR(), getSn_IR(), setSn_IR() + * -# SOCKET information \n + * getSn_SR(), getSn_DHAR(), setSn_DHAR(), getSn_PORT(), setSn_PORT(), getSn_DIPR(), setSn_DIPR(), getSn_DPORT(), setSn_DPORT() + * getSn_MSSR(), setSn_MSSR() + * -# SOCKET communication \n + * getSn_RXMEM_SIZE(), setSn_RXMEM_SIZE(), getSn_TXMEM_SIZE(), setSn_TXMEM_SIZE() \n + * getSn_TX_RD(), getSn_TX_WR(), setSn_TX_WR() \n + * getSn_RX_RD(), setSn_RX_RD(), getSn_RX_WR() \n + * getSn_TX_FSR(), getSn_RX_RSR() + * -# IP header field \n + * getSn_FRAG(), setSn_FRAG(), getSn_TOS(), setSn_TOS() \n + * getSn_TTL(), setSn_TTL() + */ + +/** + * @defgroup Common_register_group_W5100S Common register + * @ingroup WIZCHIP_register_W5100S + * @brief Common register group\n + * It set the basic for the networking\n + * It set the configuration such as interrupt, network information, ICMP, etc. + * @details + * @sa MR : Mode register. + * @sa GAR, SUBR, SHAR, SIPR + * @sa IR, Sn_IR, _IMR_ : Interrupt. + * @sa _RTR_, _RCR_ : Data retransmission. + * @sa PTIMER, PMAGIC : PPPoE. + */ + + + /** + * @defgroup Socket_register_group_W5100S Socket register + * @ingroup WIZCHIP_register_W5100S + * @brief Socket register group\n + * Socket register configures and control SOCKETn which is necessary to data communication. + * @details + * @sa Sn_MR, Sn_CR, Sn_IR : SOCKETn Control + * @sa Sn_SR, Sn_PORT, Sn_DHAR, Sn_DIPR, Sn_DPORT : SOCKETn Information + * @sa Sn_MSSR, Sn_TOS, Sn_TTL, Sn_FRAGR : Internet protocol. + * @sa Sn_RXMEM_SIZE, Sn_TXMEM_SIZE, Sn_TX_FSR, Sn_TX_RD, Sn_TX_WR, Sn_RX_RSR, Sn_RX_RD, Sn_RX_WR : Data communication + */ + + /** + * @defgroup Basic_IO_function_W5100S Basic I/O function + * @ingroup WIZCHIP_IO_Functions_W5100S + * @brief These are basic input/output functions to read values from register or write values to register. + */ + +/** + * @defgroup Common_register_access_function_W5100S Common register access functions + * @ingroup WIZCHIP_IO_Functions_W5100S + * @brief These are functions to access common registers. + */ + +/** + * @defgroup Socket_register_access_function_W5100S Socket register access functions + * @ingroup WIZCHIP_IO_Functions_W5100S + * @brief These are functions to access socket registers. + */ + + /** + * @defgroup Special_function_W5100S Special functions + * @ingroup WIZCHIP_IO_Functions_W5100S + * @brief These are special functions to access to the PHY + */ + + //----------------------------------------------------------------------------------- + +//----------------------------- W5100S Common Registers IOMAP ----------------------------- +/** + * @ingroup Common_register_group_W5100S + * @brief Mode Register address(R/W)\n + * \ref MR is used for S/W reset, ping block mode, PPPoE mode and etc. + * @details Each bit of \ref MR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    RST Reserved WOL PB PPPoE Reserved AI IND
    + * - \ref MR_RST : Reset + * - \ref MR_PB : Ping block + * - \ref MR_PPPOE : PPPoE mode + * - \ref MR_AI : Address Auto-Increment in Indirect Bus Interface + * - \ref MR_IND : Indirect Bus Interface mode + */ +#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_ + #define MR (_WIZCHIP_IO_BASE_ + (0x0000)) // Mode +#else + #define MR (_W5100S_IO_BASE_ + (0x0000)) // Mode +#endif + +/** + * @ingroup Common_register_group_W5100S + * @brief Gateway IP Register address(R/W) + * @details \ref GAR configures the default gateway address. + */ +#define GAR (_W5100S_IO_BASE_ + (0x0001)) // GW Address + +/** + * @ingroup Common_register_group_W5100S + * @brief Subnet mask Register address(R/W) + * @details \ref SUBR configures the subnet mask address. + */ +#define SUBR (_W5100S_IO_BASE_ + (0x0005)) // SN Mask Address + +/** + * @ingroup Common_register_group_W5100S + * @brief Source MAC Register address(R/W) + * @details \ref SHAR configures the source hardware address. + */ +#define SHAR (_W5100S_IO_BASE_ + (0x0009)) // Source Hardware Address + +/** + * @ingroup Common_register_group_W5100S + * @brief Source IP Register address(R/W) + * @details \ref SIPR configures the source IP address. + */ +#define SIPR (_W5100S_IO_BASE_ + (0x000F)) // Source IP Address + +// Reserved (_W5100S_IO_BASE_ + (0x0013)) +// Reserved (_W5100S_IO_BASE_ + (0x0014)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Interrupt Register(R/W) + * @details \ref IR indicates the interrupt status. Each bit of \ref IR will be still until the bit will be written to by the host. + * If \ref IR is not equal to x00 INTn PIN is asserted to low until it is x00\n\n + * Each bit of \ref IR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    CONFLICT UNREACH PPPoE Reserved S3_INT S2_INT S1_INT S0_INT
    + * - \ref IR_CONFLICT : IP conflict + * - \ref IR_UNREACH : Destination unreachable + * - \ref IR_PPPoE : PPPoE connection close + * - \ref IR_SOCK(3) : SOCKET 3 Interrupt + * - \ref IR_SOCK(2) : SOCKET 2 Interrupt + * - \ref IR_SOCK(1) : SOCKET 1 Interrupt + * - \ref IR_SOCK(0) : SOCKET 0 Interrupt + */ +#define IR (_W5100S_IO_BASE_ + (0x0015)) // Interrupt + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket Interrupt Mask Register(R/W) + * @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR. + * When a bit of \ref _IMR_ is and the corresponding bit of \ref IR is set, Interrupt will be issued. + */ +#define _IMR_ (_W5100S_IO_BASE_ + (0x0016)) // Socket Interrupt Mask + +/** + * @ingroup Common_register_group_W5100S + * @brief Timeout register address( 1 is 100us )(R/W) + * @details \ref _RTR_ configures the retransmission timeout period. The unit of timeout period is 100us and the default of \ref _RTR_ is x07D0or 000 + * And so the default timeout period is 200ms(100us X 2000). During the time configured by \ref _RTR_, W5100S waits for the peer response + * to the packet that is transmitted by \ref Sn_CR (CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command). + * If the peer does not respond within the \ref _RTR_ time, W5100S retransmits the packet or issues timeout. + */ +#define _RTR_ (_W5100S_IO_BASE_ + (0x0017)) // Retry Time + +/** + * @ingroup Common_register_group_W5100S + * @brief Retry count register(R/W) + * @details \ref _RCR_ configures the number of time of retransmission. + * When retransmission occurs as many as ref _RCR_+1 Timeout interrupt is issued (\ref Sn_IR_TIMEOUT = '1'). + */ +#define _RCR_ (_W5100S_IO_BASE_ + (0x0019)) // Retry Count + +/** + * @ingroup Common_register_group_W5100S + * @brief Receive Memory Size Register + * @details \ref RMSR register configures RX bufffer Size of the SOCKET + * The sum of the RX buffers can not exceed 8kB. + * + * + * + *
    7 6 5 4 3 2 1 0
    S3-1 S3-0 S2-1 S2-0 S1-1 S1-0 S0-1 S0-0
    + * + * + * + * + * + * + *
    Memory SizeSn-1Sn-0
    1KB00
    2KB01
    4KB10
    8KB11
    + */ +#define RMSR (_W5100S_IO_BASE_ + (0x001A)) // Receive Memory Size + +/** + * @ingroup Common_register_group_W5100S + * @brief Transmit Memory Size Register + * @details \ref TMSR register configures TX bufffer Size of the SOCKET + * The sum of the TX buffers can not exceed 8kB. + * + * + * + *
    7 6 5 4 3 2 1 0
    S3-1 S3-0 S2-1 S2-0 S1-1 S1-0 S0-1 S0-0
    + * + * + * + * + * + * + *
    Memory SizeSn-1Sn-0
    1KB00
    2KB01
    4KB10
    8KB11
    + */ +#define TMSR (_W5100S_IO_BASE_ + (0x001B)) // Transmit Memory Size + +/** + * @ingroup Common_register_group_W5100S + * @brief Interrupt register 2 + * @details \ref IR2 indicates the interrupt status. + * Each bit of IR2 will be still until the bit will be written to by the host. + * + * + * + *
    7:1 0
    Reserved WOL
    + * - \ref IR2_WOL : WOL MAGIC PACKET Interrupt Mask + */ +#define IR2 (_W5100S_IO_BASE_ + (0x0020)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Interrupt mask register 2 + * @details \ref IMR2 Each bit of IMR2 corresponds to each bit of IR2. + * When a bit of IMR2 is and the corresponding bit of IR2 is set, Interrupt will be issued. + */ +#define IMR2 (_W5100S_IO_BASE_ + (0x0021)) + + +/** + * @ingroup Common_register_group_W5100S + * @brief PPP LCP Request Timer register in PPPoE mode(R) + * @details \ref PTIMER configures the time for sending LCP echo request. The unit of time is 25ms. + */ +#define PTIMER (_W5100S_IO_BASE_ + (0x0028)) // PPP LCP RequestTimer + +/** + * @ingroup Common_register_group_W5100S + * @brief PPP LCP Magic number register in PPPoE mode(R) + * @details \ref PMAGIC configures the 4bytes magic number to be used in LCP negotiation. + */ +#define PMAGIC (_W5100S_IO_BASE_ + (0x0029)) // PPP LCP Magic number + +/** + * @ingroup Common_register_group_W5100S + * @brief Unreachable IP address register + * @details \ref + */ +#define UIPR (_W5100S_IO_BASE_ + (0x002A)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Unreachable Port register + * @details \ref + */ +#define UPORTR (_W5100S_IO_BASE_ + (0x002E)) + +/* register for W5100S only */ + +/*------------------------------------------ Common registers ------------------------------------------*/ + +/** + * @ingroup Common_register_group_W5100S + * @brief MR2 Mode register 2 + * @details \reg + */ +#define MR2 (_W5100S_IO_BASE_ + (0x0030)) + + +/** + * @ingroup Common_register_group_W5100S + * @brief Destination Hardware address in PPPoE + * @details \reg + */ +#define PHAR (_W5100S_IO_BASE_ + (0x0032)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Session ID in PPPoE + * @details \reg + */ +#define PSIDR (_W5100S_IO_BASE_ + (0x0038)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Maximum receive Unit in PPPoE + * @details \reg + */ +#define PMRUR (_W5100S_IO_BASE_ + (0x003A)) + + +/*------------------------------------------ PHY registers ------------------------------------------*/ + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY status register + * @details \reg + */ +#define PHYSR (_W5100S_IO_BASE_ + (0x003C)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY status register(hidden) + * @details \reg + */ +#define PHYSR1 (_W5100S_IO_BASE_ + (0x003D)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Address value + * @details \reg + */ +#define PHYAR (_W5100S_IO_BASE_ + (0x003E)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Register address + * @details \reg + */ +#define PHYRAR (_W5100S_IO_BASE_ + (0x003F)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Data input register + * @details \reg + */ +#define PHYDIR (_W5100S_IO_BASE_ + (0x0040)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY data output register + * @details \reg + */ +#define PHYDOR (_W5100S_IO_BASE_ + (0x0042)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Action register + * @details \reg + */ +#define PHYACR (_W5100S_IO_BASE_ + (0x0044)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Division register + * @details \reg + */ +#define PHYDIVR (_W5100S_IO_BASE_ + (0x0045)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Control register 0 + * @details \reg + */ +#define PHYCR0 (_W5100S_IO_BASE_ + (0x0046)) +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Control register 1 + * @details \reg + */ +#define PHYCR1 (_W5100S_IO_BASE_ + (0x0047)) + +/*------------------------------------------ Socket Less registers ------------------------------------------*/ + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less control register + * @details \reg + */ +#define SLCR (_W5100S_IO_BASE_ + (0x004C)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less retry time register + * @details \reg + */ +#define SLRTR (_W5100S_IO_BASE_ + (0x004D)) + + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less retry count register + * @details \reg + */ +#define SLRCR (_W5100S_IO_BASE_ + (0x004F)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less peer IP address register + * @details \reg + */ +#define SLPIPR (_W5100S_IO_BASE_ + (0x0050)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less peer hardware address register + * @details \reg + */ +#define SLPHAR (_W5100S_IO_BASE_ + (0x0054)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Ping sequence number register + * @details \reg + */ +#define PINGSEQR (_W5100S_IO_BASE_ + (0x005A)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Ping ID register + * @details \reg + */ +#define PINGIDR (_W5100S_IO_BASE_ + (0x005C)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less interrupt mask register + * @details \reg + */ +#define SLIMR (_W5100S_IO_BASE_ + (0x005E)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Socket-less interrupt register + * @details \reg + */ +#define SLIR (_W5100S_IO_BASE_ + (0x005F)) + +/** + * @ingroup Common_register_group_W5100S + * @brief DBGOUT(hidden) + * @details \reg + */ +#define DBGOUT (_W5100S_IO_BASE_ + (0x0060)) + +/** + * @ingroup Common_register_group_W5100S + * @brief NICMAXCOLR(hidden) + * @details \reg + */ +#define NICMAXCOLR (_W5100S_IO_BASE_ + (0x0063)) +/*------------------------------------------ CFG registers ------------------------------------------*/ + +/** + * @ingroup Common_register_group_W5100S + * @brief Chip Configuration locking register + * @details \reg + */ +#define CHIPLCKR (_W5100S_IO_BASE_ + (0x0070)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Network Configuration locking register + * @details \reg + */ +#define NETLCKR (_W5100S_IO_BASE_ + (0x0071)) + +/** + * @ingroup Common_register_group_W5100S + * @brief PHY Configuration locking register + * @details \reg + */ +#define PHYLCKR (_W5100S_IO_BASE_ + (0x0072)) + +/** + * @ingroup Common_register_group_W5100S + * @brief version register + * @details \reg + */ +#define VERR (_W5100S_IO_BASE_ + (0x0080)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Core 100us Counter register + * @details \reg + */ +#define TCNTR (_W5100S_IO_BASE_ + (0x0082)) + +/** + * @ingroup Common_register_group_W5100S + * @brief Core 100us Counter clear register + * @details \reg + */ +#define TCNTCLKR (_W5100S_IO_BASE_ + (0x0088)) + +//----------------------------- W5100S Socket Registers ----------------------------- + +//--------------------------- For Backward Compatibility --------------------------- + +/** + * @ingroup Socket_register_group_W5100S + * @brief socket Mode register(R/W) + * @details \ref Sn_MR configures the option or protocol type of Socket n.\n\n + * Each bit of \ref Sn_MR defined as the following. + * + * + * + *
    7 6 5 4 3 2 1 0
    MULTI MF ND/MC Reserved Protocol[3] Protocol[2] Protocol[1] Protocol[0]
    + * - \ref Sn_MR_MULTI : Support UDP Multicasting + * - \ref Sn_MR_MF : Support MACRAW + * - \ref Sn_MR_ND : No Delayed Ack(TCP) flag + * - \ref Sn_MR_MC : IGMP version used in UDP mulitcasting + * - Protocol + * + * + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 0 0 0 Closed
    0 0 0 1 TCP
    0 0 1 0 UDP
    0 1 0 0 MACRAW
    + * - In case of Socket 0 + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 1 0 0 MACRAW
    0 1 0 1 PPPoE
    + * - \ref Sn_MR_MACRAW : MAC LAYER RAW SOCK \n + * - \ref Sn_MR_UDP : UDP + * - \ref Sn_MR_TCP : TCP + * - \ref Sn_MR_CLOSE : Unused socket + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0000)) // socket Mode register + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket command register(R/W) + * @details This is used to set the command for Socket n such as OPEN, CLOSE, CONNECT, LISTEN, SEND, and RECEIVE.\n + * After W5100S accepts the command, the \ref Sn_CR register is automatically cleared to 0x00. + * Even though \ref Sn_CR is cleared to 0x00, the command is still being processed.\n + * To check whether the command is completed or not, please check the \ref Sn_IR or \ref Sn_SR. + * - \ref Sn_CR_OPEN : Initialize or open socket. + * - \ref Sn_CR_LISTEN : Wait connection request in TCP mode(Server mode) + * - \ref Sn_CR_CONNECT : Send connection request in TCP mode(Client mode) + * - \ref Sn_CR_DISCON : Send closing request in TCP mode. + * - \ref Sn_CR_CLOSE : Close socket. + * - \ref Sn_CR_SEND : Update TX buffer pointer and send data. + * - \ref Sn_CR_SEND_MAC : Send data with MAC address, so without ARP process. + * - \ref Sn_CR_SEND_KEEP : Send keep alive message. + * - \ref Sn_CR_RECV : Update RX buffer pointer and receive data. + * - In case of S0_MR(P3:P0) = S0_MR_PPPoE + * + * + * + * + * + * + * + *
    Value Symbol Description
    0x23 PCON PPPoE connection begins by transmitting PPPoE discovery packet
    0x24 PDISCON Closes PPPoE connection
    0x25 PCR In each phase, it transmits REQ message.
    0x26 PCN In each phase, it transmits NAK message.
    0x27 PCJ In each phase, it transmits REJECT message.
    + */ +#define Sn_CR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0001)) // channel Sn_CR register + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket interrupt register(R) + * @details \ref Sn_IR indicates the status of Socket Interrupt such as establishment, termination, receiving data, timeout).\n + * When an interrupt occurs and the corresponding bit \ref IR_SOCK(N) in \ref _IMR_ are set, \ref IR_SOCK(N) in \ref IR becomes '1'.\n + * In order to clear the \ref Sn_IR bit, the host should write the bit to \n + * + * + * + *
    7 6 5 4 3 2 1 0
    PRECV PFAIL PNEXT SEND_OK TIMEOUT RECV DISCON CON
    + * - \ref Sn_IR_PRECV : PPP Receive Interrupt + * - \ref Sn_IR_PFAIL : PPP Fail Interrupt + * - \ref Sn_IR_PNEXT : PPP Next Phase Interrupt + * - \ref Sn_IR_SENDOK : SEND_OK Interrupt + * - \ref Sn_IR_TIMEOUT : TIMEOUT Interrupt + * - \ref Sn_IR_RECV : RECV Interrupt + * - \ref Sn_IR_DISCON : DISCON Interrupt + * - \ref Sn_IR_CON : CON Interrupt + */ +#define Sn_IR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0002)) // channel interrupt register + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket status register(R) + * @details \ref Sn_SR indicates the status of Socket n.\n + * The status of Socket n is changed by \ref Sn_CR or some special control packet as SYN, FIN packet in TCP. + * @par Normal status + * - \ref SOCK_CLOSED : Closed + * - \ref SOCK_INIT : Initiate state + * - \ref SOCK_LISTEN : Listen state + * - \ref SOCK_ESTABLISHED : Success to connect + * - \ref SOCK_CLOSE_WAIT : Closing state + * - \ref SOCK_UDP : UDP socket + * - \ref SOCK_MACRAW : MAC raw mode socket + *@par Temporary status during changing the status of Socket n. + * - \ref SOCK_SYNSENT : This indicates Socket n sent the connect-request packet (SYN packet) to a peer. + * - \ref SOCK_SYNRECV : It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer. + * - \ref SOCK_FIN_WAIT : Connection state + * - \ref SOCK_CLOSING : Closing state + * - \ref SOCK_TIME_WAIT : Closing state + * - \ref SOCK_LAST_ACK : Closing state + */ +#define Sn_SR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0003)) // channel status register + +/** + * @ingroup Socket_register_group_W5100S + * @brief source port register(R/W) + * @details \ref Sn_PORT configures the source port number of Socket n. + * It is valid when Socket n is used in TCP/UDP mode. It should be set before OPEN command is ordered. +*/ +#define Sn_PORT(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0004)) // source port register + +/** + * @ingroup Socket_register_group_W5100S + * @brief Peer MAC register address(R/W) + * @details \ref Sn_DHAR configures the destination hardware address of Socket n when using SEND_MAC command in UDP mode or + * it indicates that it is acquired in ARP-process by CONNECT/SEND command. + */ +#define Sn_DHAR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0006)) // Peer MAC register address + +/** + * @ingroup Socket_register_group_W5100S + * @brief Peer IP register address(R/W) + * @details \ref Sn_DIPR configures or indicates the destination IP address of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP client mode, it configures an IP address of TCP server before CONNECT command. + * In TCP server mode, it indicates an IP address of TCP client after successfully establishing connection. + * In UDP mode, it configures an IP address of peer to be received the UDP packet by SEND or SEND_MAC command. + */ +#define Sn_DIPR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x000C)) // Peer IP register address + +/** + * @ingroup Socket_register_group_W5100S + * @brief Peer port register address(R/W) + * @details \ref Sn_DPORT configures or indicates the destination port number of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP clientmode, it configures the listen port number of TCP server before CONNECT command. + * In TCP Servermode, it indicates the port number of TCP client after successfully establishing connection. + * In UDP mode, it configures the port number of peer to be transmitted the UDP packet by SEND/SEND_MAC command. + */ +#define Sn_DPORT(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0010)) // Peer port register address + +/** + * @ingroup Socket_register_group_W5100S + * @brief Maximum Segment Size(Sn_MSSR0) register address(R/W) + * @details \ref Sn_MSSR configures or indicates the MTU(Maximum Transfer Unit) of Socket n. + */ +#define Sn_MSSR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0012)) // Maximum Segment Size(Sn_MSSR0) register address + +/** + * @ingroup Socket_register_group_W5100S + * @brief IP Protocol(PROTO) Register(R/W) + * @details \ref Sn_PROTO that sets the protocol number field of the IP header at the IP layer. It is + * valid only in IPRAW mode, and ignored in other modes. + */ +#define Sn_PROTO(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0014)) // Protocol of IP Header field register in IP raw mode + +/** + * @ingroup Socket_register_group_W5100S + * @brief IP Type of Service(TOS) Register(R/W) + * @details \ref Sn_TOS configures the TOS(Type Of Service field in IP Header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TOS(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + 0x0015) // IP Type of Service(TOS) Register + +/** + * @ingroup Socket_register_group_W5100S + * @brief IP Time to live(TTL) Register(R/W) + * @details \ref Sn_TTL configures the TTL(Time To Live field in IP header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TTL(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0016)) // IP Time to live(TTL) Register + +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0017)) +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0018)) +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0019)) +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001A)) +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001B)) +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001C)) +// Reserved (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001D)) + + + +/** + * @ingroup Socket_register_group_W5100S + * @brief Receive memory size register(R/W) + * @details @ref Sn_RXBUF_SIZE configures the RX buffer block size of Socket n. + * Socket n RX Buffer Block size can be configured with 1,2,4 and 8Kbytes. + * If a different size is configured, the data cannot be normally received from a peer. + * Although Socket n RX Buffer Block size is initially configured to 2Kbytes, + * user can re-configure its size using @ref Sn_RXBUF_SIZE. The total sum of @ref Sn_RXBUF_SIZE can not be exceed 8Kbytes. + * When exceeded, the data reception error is occurred. + */ +#define Sn_RXBUF_SIZE(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001E)) + +/** + * @ingroup Socket_register_group_W5100S + * @brief Transmit memory size register(R/W) + * @details @ref Sn_TXBUF_SIZE configures the TX buffer block size of Socket n. Socket n TX Buffer Block size can be configured with 1,2,4 and 8Kbytes. + * If a different size is configured, the data cannot be normally transmitted to a peer. + * Although Socket n TX Buffer Block size is initially configured to 2Kbytes, + * user can be re-configure its size using @ref Sn_TXBUF_SIZE. The total sum of @ref Sn_TXBUF_SIZE can not be exceed 8Kbytes. + * When exceeded, the data transmission error is occurred. + */ +#define Sn_TXBUF_SIZE(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001F)) + + +/** + * @ingroup Socket_register_group_W5100S + * @brief Transmit free memory size register(R) + * @details \ref Sn_TX_FSR indicates the free size of Socket n TX Buffer Block. It is initialized to the configured size by \ref Sn_TXMEM_SIZE. + * Data bigger than \ref Sn_TX_FSR should not be saved in the Socket n TX Buffer because the bigger data overwrites the previous saved data not yet sent. + * Therefore, check before saving the data to the Socket n TX Buffer, and if data is equal or smaller than its checked size, + * transmit the data with SEND/SEND_MAC command after saving the data in Socket n TX buffer. But, if data is bigger than its checked size, + * transmit the data after dividing into the checked size and saving in the Socket n TX buffer. + */ +#define Sn_TX_FSR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0020)) // Transmit free memory size register + +/** + * @ingroup Socket_register_group_W5100S + * @brief Transmit memory read pointer register address(R) + * @details \ref Sn_TX_RD is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001), it is re-initialized while connecting with TCP. + * After its initialization, it is auto-increased by SEND command. + * SEND command transmits the saved data from the current \ref Sn_TX_RD to the \ref Sn_TX_WR in the Socket n TX Buffer. + * After transmitting the saved data, the SEND command increases the \ref Sn_TX_RD as same as the \ref Sn_TX_WR. + * If its increment value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_TX_RD(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0022)) // Transmit memory read pointer register address + +/** + * @ingroup Socket_register_group_W5100S + * @brief Transmit memory write pointer register address(R/W) + * @details \ref Sn_TX_WR is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001), it is re-initialized while connecting with TCP.\n + * It should be read or be updated like as follows.\n + * 1. Read the starting address for saving the transmitting data.\n + * 2. Save the transmitting data from the starting address of Socket n TX buffer.\n + * 3. After saving the transmitting data, update \ref Sn_TX_WR to the increased value as many as transmitting data size. + * If the increment value exceeds the maximum value 0xFFFF(greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value.\n + * 4. Transmit the saved data in Socket n TX Buffer by using SEND/SEND command + */ +#define Sn_TX_WR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0024)) // Transmit memory write pointer register address + +/** + * @ingroup Socket_register_group_W5100S + * @brief Received data size register(R) + * @details \ref Sn_RX_RSR indicates the data size received and saved in Socket n RX Buffer. + * \ref Sn_RX_RSR does not exceed the \ref Sn_RXMEM_SIZE and is calculated as the difference between + * Socket n RX Write Pointer (\ref Sn_RX_WR)and Socket n RX Read Pointer (\ref Sn_RX_RD) + */ +#define Sn_RX_RSR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0026)) // Received data size register + +/** + * @ingroup Socket_register_group_W5100S + * @brief Read point of Receive memory(R/W) + * @details \ref Sn_RX_RD is initialized by OPEN command. Make sure to be read or updated as follows.\n + * 1. Read the starting save address of the received data.\n + * 2. Read data from the starting address of Socket n RX Buffer.\n + * 3. After reading the received data, Update \ref Sn_RX_RD to the increased value as many as the reading size. + * If the increment value exceeds the maximum value 0xFFFF, that is, is greater than 0x10000 and the carry bit occurs, + * update with the lower 16bits value ignored the carry bit.\n + * 4. Order RECV command is for notifying the updated \ref Sn_RX_RD to W5100S. + */ +#define Sn_RX_RD(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0028)) // Read point of Receive memory + +/** + * @ingroup Socket_register_group_W5100S + * @brief Write point of Receive memory(R) + * @details \ref Sn_RX_WR is initialized by OPEN command and it is auto-increased by the data reception. + * If the increased value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_RX_WR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002A)) // Write point of Receive memory + + +//todo +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket interrupt mask register + * @details Register address to configure the interrupt mask of the socket + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * + */ +#define Sn_IMR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002C)) + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket fragment field register + * @details Register to configure the Fragment field of IP Header + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + */ +#define Sn_FRAGR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002D)) // and +1 + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket Mode register 2 + * @details Register to set mode 2 + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + */ +#define Sn_MR2(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002F)) + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket n Keep Alive Timer Register + * @details Register to set the transmission period of keep alive packet. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + */ +#define Sn_KPALVTR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0030)) + +/** todo delete + * @ingroup Socket_register_group_W5100S + * @brief Socket n Timer Status Register + * @details + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + */ +//#define Sn_TSR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0031)) + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket n Retry Time-value Register + * @details Register to set the retry time value + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + */ +#define Sn_RTR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0032)) + +/** + * @ingroup Socket_register_group_W5100S + * @brief Socket n Retry Count-value Register + * @details Register to set the retry count value + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + */ +#define Sn_RCR(sn) (_W5100S_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0034)) + + +/*----------------------------- W5100S Register values -----------------------------*/ + +/* MODE register values */ +/** + * @brief Reset + * @details If this bit is All internal registers will be initialized. It will be automatically cleared as after S/W reset. + */ +#define MR_RST 0x80 ///< reset + + +/** + * @brief Ping block + * @details 0 : Disable Ping block\n + * 1 : Enable Ping block\n + * If the bit is it blocks the response to a ping request. + */ +#define MR_PB 0x10 ///< ping block + +/** + * @brief Enable PPPoE + * @details 0 : DisablePPPoE mode\n + * 1 : EnablePPPoE mode\n + * If you use ADSL, this bit should be '1'. + */ +#define MR_PPPOE 0x08 ///< enable pppoe + +/** + * @brief Address Auto-Increment in Indirect Bus Interface + * @details 0 : Disable auto-increment \n + * 1 : Enable auto-incremente \n + * At the Indirect Bus Interface mode, if this bit is set as the address will + * be automatically increased by 1 whenever read and write are performed. + */ +#define MR_AI 0x02 ///< auto-increment in indirect mode + +/** + * @brief Indirect Bus Interface mode + * @details 0 : Disable Indirect bus Interface mode \n + * 1 : Enable Indirect bus Interface mode \n + * If this bit is set as Indirect Bus Interface mode is set. + */ +#define MR_IND 0x01 ///< enable indirect mode + +/* IR register values */ +/** + * @brief Check IP conflict. + * @details Bit is set as when own source IP address is same with the sender IP address in the received ARP request. + */ +#define IR_CONFLICT 0x80 ///< check ip confict + +/** + * @brief Get the destination unreachable message in UDP sending. + * @details When receiving the ICMP (Destination port unreachable) packet, this bit is set as + * When this bit is Destination Information such as IP address and Port number may be checked with the corresponding @ref UIPR & @ref UPORTR. + */ +#define IR_UNREACH 0x40 ///< check destination unreachable + +/** + * @brief Get the PPPoE close message. + * @details When PPPoE is disconnected during PPPoE mode, this bit is set. + */ +#define IR_PPPoE 0x20 ///< get the PPPoE close message + +/** + * @brief Socket interrupt bit + * @details Indicates whether each socket interrupt has occured. + */ +#define IR_SOCK(sn) (0x01 << sn) ///< check socket interrupt + +/** + * @brief IP conflict interrupt mask bit + * @details If this bit is set, IP conflict interrupt is enabled. + */ +#define IMR_CONFLICT 0x80 + +/** + * @brief Destination port unreachable interrupt mask bit + * @details If this bit is set, destination port unreachable interrupt is enabled. + */ +#define IMR_UNREACH 0x40 + +/** + * @brief PADT/LCPT interrupt mask bit(PPPoE) + * @details If this bit is set, PADT/LCPT interrupt is enabled. + */ +#define IMR_PPPoE 0x20 + +/** + * @brief Socket interrupt mask bit + * @details If this bit is set, each socket interrupt is enabled. + */ +#define IMR_SOCK(sn) (0x01 << sn) + +/** + * @brief Socket-less command register bit + * @details ARP command + */ +#define SLCMD_ARP (1<<1) + +/** + * @brief Socket-less command register bit + * @details ARP command + */ +#define SLCMD_PING (1<<0) + +/** + * @brief Socket-less command interrupt and interrupt mask register bit + * @details Request command time out interrupt and interrupt mask + */ +#define SLIR_TIMEOUT (1<<2) + +/** +* @brief Socket less command interrupt and interrupt mask register bit +* @details Socket less command ARP interrupt and interrupt mask +*/ +#define SLIR_ARP (1<<1) + +/** +* @brief Socket less command interrupt and interrupt mask register bit +* @details Socket less command PING interrupt and interruptmask +*/ +#define SLIR_PING (1<<0) + + + +// Sn_MR values +/* Sn_MR Default values */ +/** + * @brief Unused socket + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_CLOSE 0x00 ///< unused socket + +/** + * @brief TCP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_TCP 0x01 ///< TCP + +/** + * @brief UDP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_UDP 0x02 ///< UDP +#define Sn_MR_IPRAW 0x03 ///< IP LAYER RAW SOCK + +/** + * @brief MAC LAYER RAW SOCK + * @details This configures the protocol mode of Socket n. + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR_MACRAW 0x04 ///< MAC LAYER RAW SOCK + +/** + * @brief PPPoE + * @details This configures the protocol mode of Socket n. + * @note PPPoE mode should be only used in Socket 0. + */ +#define Sn_MR_PPPoE 0x05 ///< PPPoE + +/** + * @brief No Delayed Ack(TCP), Multicast flag + * @details 0 : Disable No Delayed ACK option\n + * 1 : Enable No Delayed ACK option\n + * This bit is applied only during TCP mode (P[3:0] = 001).\n + * When this bit is It sends the ACK packet without delay as soon as a Data packet is received from a peer.\n + * When this bit is It sends the ACK packet after waiting for the timeout time configured by \ref _RTR_. + */ +#define Sn_MR_ND 0x20 ///< No Delayed Ack(TCP) flag + +/** + * @brief Support UDP Multicasting + * @details 0 : using IGMP version 2\n + * 1 : using IGMP version 1\n + * This bit is applied only during UDP mode(P[3:0] = 010 and MULTI = '1') + * It configures the version for IGMP messages (Join/Leave/Report). + */ +#define Sn_MR_MC Sn_MR_ND ///< Select IGMP version 1(0) or 2(1) + +/** + * @brief MAC filter enable in @ref Sn_MR_MACRAW mode + * @details 0 : disable MAC Filtering\n + * 1 : enable MAC Filtering\n + * This bit is applied only during MACRAW mode(P[3:0] = 100.\n + * When set as W5100S can only receive broadcasting packet or packet sent to itself. + * When this bit is W5100S can receive all packets on Ethernet. + * If user wants to implement Hybrid TCP/IP stack, + * it is recommended that this bit is set as for reducing host overhead to process the all received packets. + */ +#define Sn_MR_MF 0x40 ///< Use MAC filter +#define Sn_MR_MFEN Sn_MR_MF + + +/* Sn_MR Default values */ +/** + * @brief Support UDP Multicasting + * @details 0 : disable Multicasting\n + * 1 : enable Multicasting\n + * This bit is applied only during UDP mode(P[3:0] = 010).\n + * To use multicasting, \ref Sn_DIPR & \ref Sn_DPORT should be respectively configured with the multicast group IP address & port number + * before Socket n is opened by OPEN command of \ref Sn_CR. + */ +#define Sn_MR_MULTI 0x80 ///< support multicating + +/* Sn_CR values */ +/** + * @brief Initialize or open socket + * @details Socket n is initialized and opened according to the protocol selected in Sn_MR(P3:P0). + * The table below shows the value of \ref Sn_SR corresponding to \ref Sn_MR.\n + * + * + * + * + * + * + * + * + *
    \b Sn_MR (P[3:0]) \b Sn_SR
    Sn_MR_CLOSE (000) --
    Sn_MR_TCP (001) SOCK_INIT (0x13)
    Sn_MR_UDP (010) SOCK_UDP (0x22)
    S0_MR_IPRAW (011) SOCK_IPRAW (0x32)
    S0_MR_MACRAW (100) SOCK_MACRAW (0x42)
    S0_MR_PPPoE (101) SOCK_PPPoE (0x5F)
    + */ +#define Sn_CR_OPEN 0x01 ///< initialize or open socket + +/** + * @brief Wait connection request in TCP mode(Server mode) + * @details This is valid only in TCP mode (Sn_MR(P3:P0) = \ref Sn_MR_TCP).// + * In this mode, Socket n operates as a 'TCP server' and waits for connection-request (SYN packet) from any 'TCP client'.// + * The \ref Sn_SR changes the state from SOCK_INIT to SOCKET_LISTEN.// + * When a 'TCP client' connection request is successfully established, + * the \ref Sn_SR changes from SOCK_LISTEN to SOCK_ESTABLISHED and the Sn_IR(0) becomes + * But when a 'TCP client' connection request is failed, Sn_IR(3) becomes and the status of \ref Sn_SR changes to SOCK_CLOSED. + */ +#define Sn_CR_LISTEN 0x02 ///< wait connection request in tcp mode(Server mode) + +/** + * @brief Send connection request in TCP mode(Client mode) + * @details To connect, a connect-request (SYN packet) is sent to TCP serverconfigured by \ref Sn_DIPR & Sn_DPORT(destination address & port). + * If the connect-request is successful, the \ref Sn_SR is changed to \ref SOCK_ESTABLISHED and the Sn_IR(0) becomes \n\n + * The connect-request fails in the following three cases.\n + * 1. When a @b ARPTO occurs (\ref Sn_IR[3] = '1') because destination hardware address is not acquired through the ARP-process.\n + * 2. When a @b SYN/ACK packet is not received and @b TCPTO (Sn_IR(3) ='1')\n + * 3. When a @b RST packet is received instead of a @b SYN/ACK packet. In these cases, \ref Sn_SR is changed to \ref SOCK_CLOSED. + * @note This is valid only in TCP mode and operates when Socket n acts as TCP client + */ +#define Sn_CR_CONNECT 0x04 ///< send connection request in tcp mode(Client mode) + +/** + * @brief Send closing request in TCP mode + * @details Regardless of TCP serveror TCP client the DISCON command processes the disconnect-process (Active closeor Passive close.\n + * @par Active close + * it transmits disconnect-request(FIN packet) to the connected peer\n + * @par Passive close + * When FIN packet is received from peer, a FIN packet is replied back to the peer.\n + * @details When the disconnect-process is successful (that is, FIN/ACK packet is received successfully), \ref Sn_SR is changed to \ref SOCK_CLOSED.\n + * Otherwise, TCPTO occurs (Sn_IR(3)='1') and then \ref Sn_SR is changed to \ref SOCK_CLOSED. + * @note Valid only in TCP mode. + */ +#define Sn_CR_DISCON 0x08 ///< send closing reqeuset in tcp mode + +/** + * @brief Close socket + * @details Sn_SR is changed to \ref SOCK_CLOSED. + */ +#define Sn_CR_CLOSE 0x10 + +/** + * @brief Update TX buffer pointer and send data + * @details SEND transmits all the data in the Socket n TX buffer.\n + * For more details, please refer to Socket n TX Free Size Register (\ref Sn_TX_FSR), Socket n, + * TX Write Pointer Register(\ref Sn_TX_WR), and Socket n TX Read Pointer Register(\ref Sn_TX_RD). + */ +#define Sn_CR_SEND 0x20 + +/** + * @brief Send data with MAC address, so without ARP process + * @details The basic operation is same as SEND.\n + * Normally SEND transmits data after destination hardware address is acquired by the automatic ARP-process(Address Resolution Protocol).\n + * But SEND_MAC transmits data without the automatic ARP-process.\n + * In this case, the destination hardware address is acquired from \ref Sn_DHAR configured by host, instead of APR-process. + * @note Valid only in UDP mode. + */ +#define Sn_CR_SEND_MAC 0x21 + +/** + * @brief Send keep alive message + * @details It checks the connection status by sending 1byte keep-alive packet.\n + * If the peer can not respond to the keep-alive packet during timeout time, the connection is terminated and the timeout interrupt will occur. + * @note Valid only in TCP mode. + */ +#define Sn_CR_SEND_KEEP 0x22 + +/** + * @brief Update RX buffer pointer and receive data + * @details RECV completes the processing of the received data in Socket n RX Buffer by using a RX read pointer register (\ref Sn_RX_RD).\n + * For more details, refer to Socket n RX Received Size Register (\ref Sn_RX_RSR), Socket n RX Write Pointer Register (\ref Sn_RX_WR), + * and Socket n RX Read Pointer Register (\ref Sn_RX_RD). + */ +#define Sn_CR_RECV 0x40 + +/** + * @brief + * @details + */ +#define Sn_CR_IGMP_JOIN 0x23 + +/** + * @brief + * @details + */ +#define Sn_CR_IGMP_LEAVE 0x24 + + +/* Sn_IR values */ + +/** + * @brief SEND_OK Interrupt + * @details This is issued when SEND command is completed. + */ +#define Sn_IR_SENDOK 0x10 ///< complete sending + +/** + * @brief TIMEOUT Interrupt + * @details This is issued when ARPTO or TCPTO occurs. + */ +#define Sn_IR_TIMEOUT 0x08 ///< assert timeout + +/** + * @brief RECV Interrupt + * @details This is issued whenever data is received from a peer. + */ +#define Sn_IR_RECV 0x04 + +/** + * @brief DISCON Interrupt + * @details This is issued when FIN or FIN/ACK packet is received from a peer. + */ +#define Sn_IR_DISCON 0x02 + +/** + * @brief CON Interrupt + * @details This is issued one time when the connection with peer is successful and then \ref Sn_SR is changed to \ref SOCK_ESTABLISHED. + */ +#define Sn_IR_CON 0x01 + +/* Sn_SR values */ +/** + * @brief Closed + * @details This indicates that Socket n is released.\n + * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to \ref SOCK_CLOSED regardless of previous status. + */ +#define SOCK_CLOSED 0x00 ///< closed + +/** + * @brief Initiate state + * @details This indicates Socket n is opened with TCP mode.\n + * It is changed to \ref SOCK_INIT when Sn_MR(P[3:0]) = 001)and OPEN command is ordered.\n + * After \ref SOCK_INIT, user can use LISTEN /CONNECT command. + */ +#define SOCK_INIT 0x13 ///< init state + +/** + * @brief Listen state + * @details This indicates Socket n is operating as TCP servermode and waiting for connection-request (SYN packet) from a peer (TCP client).\n + * It will change to \ref SOCK_ESTABLISHED when the connection-request is successfully accepted.\n + * Otherwise it will change to \ref SOCK_CLOSED after TCPTO occurred (Sn_IR(TIMEOUT) = '1'). + */ +#define SOCK_LISTEN 0x14 + +/** + * @brief Connection state + * @details This indicates Socket n sent the connect-request packet (SYN packet) to a peer.\n + * It is temporarily shown when \ref Sn_SR is changed from \ref SOCK_INIT to \ref SOCK_ESTABLISHED by CONNECT command.\n + * If connect-accept(SYN/ACK packet) is received from the peer at SOCK_SYNSENT, it changes to \ref SOCK_ESTABLISHED.\n + * Otherwise, it changes to \ref SOCK_CLOSED after TCPTO (\ref Sn_IR[TIMEOUT] = '1') is occurred. + */ +#define SOCK_SYNSENT 0x15 + +/** + * @brief Connection state + * @details It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.\n + * If socket n sends the response (SYN/ACK packet) to the peer successfully, it changes to \ref SOCK_ESTABLISHED. \n + * If not, it changes to \ref SOCK_CLOSED after timeout occurs (\ref Sn_IR[TIMEOUT] = '1'). + */ +#define SOCK_SYNRECV 0x16 + +/** + * @brief Success to connect + * @details This indicates the status of the connection of Socket n.\n + * It changes to \ref SOCK_ESTABLISHED when the TCP SERVERprocessed the SYN packet from the TCP CLIENTduring \ref SOCK_LISTEN, or + * when the CONNECT command is successful.\n + * During \ref SOCK_ESTABLISHED, DATA packet can be transferred using SEND or RECV command. + */ +#define SOCK_ESTABLISHED 0x17 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_FIN_WAIT 0x18 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_CLOSING 0x1A + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_TIME_WAIT 0x1B + +/** + * @brief Closing state + * @details This indicates Socket n received the disconnect-request (FIN packet) from the connected peer.\n + * This is half-closing status, and data can be transferred.\n + * For full-closing, DISCON command is used. But For just-closing, @ref Sn_CR_CLOSE command is used. + */ +#define SOCK_CLOSE_WAIT 0x1C + +/** + * @brief Closing state + * @details This indicates Socket n is waiting for the response (FIN/ACK packet) to the disconnect-request (FIN packet) by passive-close.\n + * It changes to \ref SOCK_CLOSED when Socket n received the response successfully, or when timeout occurs (\ref Sn_IR[TIMEOUT] = '1'). + */ +#define SOCK_LAST_ACK 0x1D + +/** + * @brief UDP socket + * @details This indicates Socket n is opened in UDP mode(Sn_MR(P[3:0]) = 010).\n + * It changes to SOCK_UDP when Sn_MR(P[3:0]) = 010 and @ref Sn_CR_OPEN command is ordered.\n + * Unlike TCP mode, data can be transfered without the connection-process. + */ +#define SOCK_UDP 0x22 ///< udp socket + +/** + * @brief IP raw mode socket + * @details TThe socket is opened in IPRAW mode. The SOCKET status is change to SOCK_IPRAW when @ref Sn_MR (P3:P0) is + * Sn_MR_IPRAW and @ref Sn_CR_OPEN command is used.\n + * IP Packet can be transferred without a connection similar to the UDP mode. +*/ +#define SOCK_IPRAW 0x32 ///< ip raw mode socket + +/** + * @brief MAC raw mode socket + * @details This indicates Socket 0 is opened in MACRAW mode (@ref Sn_MR(P[3:0]) = '100' and n=0) and is valid only in Socket 0.\n + * It changes to SOCK_MACRAW when @ref Sn_MR(P[3:0]) = '100' and @ref Sn_CR_OPEN command is ordered.\n + * Like UDP mode socket, MACRAW mode Socket 0 can transfer a MAC packet (Ethernet frame) without the connection-process. + */ +#define SOCK_MACRAW 0x42 ///< mac raw mode socket + +/** + * @brief PPPoE mode socket + * @details It is the status that SOCKET0 is open as PPPoE mode. It is changed to SOCK_PPPoE in case of S0_CR=OPEN and S0_MR + * (P3:P0)=S0_MR_PPPoE.\n + * It is temporarily used at the PPPoE +connection. + */ +#define SOCK_PPPOE 0x5F ///< pppoe socket + +// IP PROTOCOL +#define IPPROTO_IP 0 ///< Dummy for IP +#define IPPROTO_ICMP 1 ///< Control message protocol +#define IPPROTO_IGMP 2 ///< Internet group management protocol +#define IPPROTO_GGP 3 ///< GW^2 (deprecated) +#define IPPROTO_TCP 6 ///< TCP +#define IPPROTO_PUP 12 ///< PUP +#define IPPROTO_UDP 17 ///< UDP +#define IPPROTO_IDP 22 ///< XNS idp +#define IPPROTO_ND 77 ///< UNOFFICIAL net disk protocol +#define IPPROTO_RAW 255 ///< Raw IP packet + + + +/*----------------------------- W5100S !!Only!! Register values -----------------------------*/ + +//todo +/* MODE2 register values */ + +/** + * @brief Clock select bit + * @details With this bit, system clock can be selected to be 25Mhz or 100Mhz + * 1: 25Mhz + * 0: 100Mhz (default) + */ +#define MR2_CLKSEL (1<<7) + +/** + * @brief Interrupt pin enable bit + * @details This bit enables interrupt. + * 1: Enable interrupt + * 0: Disable interrupt + */ +#define MR2_G_IEN (1<<6) + + +/** + * @brief No TCP Reset Packet send + * @details This bit prevents sending reset packet. + * 1: Block TCP reset packet send + * 0: TCP Reset packet send + */ +#define MR2_NOTCPRST (1<<5) + +/** + * @brief Unreachable Packet Send Block bit + * @details This bit prevents sending Destination Port Unreachable Packet. + * 1: Block Destination Port Unreachable Packet Send + * 0: Destination Port Unreachable Packet Send + */ +#define MR2_UDPURB (1<<4) + +/** + * @brief Wake On LAN + * @details This bit enables WOL packet to be received. + * 1: WOL packet can be received. + * 0: WOL packet cannot be received. + */ +#define MR2_WOL (1<<3) + +/**todo + * @brief MACRAW No Size Check + * @details + */ +#define MR2_MNOSCHK (1<<2) + +/** + * @brief UDP force ARP + * @details This bit can enables to force ARP for each send command. + * 1: UDP Force ARP Enable + * 0: UDP Force ARP Disable. + * + */ +#define MR2_UDPFARP (1<<1) + +/**todo + * @brief Skip SRC Hardware Address + * @details This bit can enables to receive without checking the hardware address of the peer. + * 1: + */ +#define MR2_SSRCHA (1<<0) + + + +/* Common interrupt register 2 values */ + +/**todo + * @brief magic packet + * @details + */ +#define IR2_MGC (1<<1) + +/**todo + * @brief Magic packet interrupt mask bit + * @details If this bit is set, each socket interrupt is enabled. + */ +#define IMR2_MGC (1<<1) + +/**todo + * @brief + * @details + */ +//#define IR2_MGD (1<<1) /* Reserved */ + + +/* PHY status register 0 values */ + +/**todo + * @brief Ethernet CABLE OFF Signal + * @details + */ +#define PHYSR_CABOFF (1<<7) + +/**todo + * @brief + * @details + */ +#define PHYSR_MD2 (1<<5) + +/**todo + * @brief + * @details + */ +#define PHYSR_MD1 (1<<4) + +/**todo + * @brief + * @details + */ +#define PHYSR_MD0 (1<<3) + +/**todo + * @brief + * @details + */ +#define PHYSR_DUP (1<<2) + +/**todo + * @brief + * @details + */ +#define PHYSR_SPD (1<<1) + +/**todo + * @brief LINKDONE register + * @details If 1 Linked successfully, if 0 no link + */ +#define PHYSR_LNK (1<<0) + + +/* PHY status register 10 values */ + +/** + * @brieftodo + * @details + */ +#define PHYSR1_RXPG (1<<2) + +/** + * @brieftodo + * @details + */ +#define PHYSR1_LPI (1<<1) + +/** + * @brieftodo + * @details + */ +#define PHYSR1_CLDN (1<<0) + +#define PHYCR_AUTONEGO_ENABLE (0<<2) +#define PHYCR_AUTONEGO_DISABLE (1<<2) + +#define PHYCR_SPD_10 (1<<1) +#define PHYCR_SPD_100 (0<<1) + +#define PHYCR_HALF_DUP (1<<0) +#define PHYCR_FULL_DUP (0<<0) + +#define PHYCR1_RST (0<<0) + +#define PHYCR1_PWDN_ENABLE (1<<5) +#define PHYCR1_PWDN_DISABLE (0<<5) + + +/* Socket n MODE register 2 values */ + +/** + * @brief Broadcast Blocking bit in MACRAW mode + * @details In MACRAW mode, this bit is set to ????to block the broadcast packet. + */ +#define Sn_MR2_MBBLK (1<<6) + +/** + * @brief Multicast Blocking bit in MACRAW mode + * @details In MACRAW mode, this bit is set to ????to block the multicast packet. + */ +#define Sn_MR2_MMBLK (1<<5) + +/** + * @brief IPv6 packet Blocking bit in MACRAW mode + * @details In MACRAW mode, this bit is set to ????to block the IPv6 packet. + */ +#define Sn_MR2_IPV6BLK (1<<4) + + +/** + * @brief Broadcast Blocking bit in UDP mode + * @details In UDP mode, this bit is set to ????to block the broadcast packet. + */ +#define Sn_MR2_UBBLK (1<<1) + + +/** + * @brief TCP Force PSH bit + * @details When the SOCKET transmits data in TCP mode, PSH Flag is set to all packets. + */ +#define Sn_MR2_FPSH Sn_MR2_UBBLK + +/** + * @brief Unicast Blocking bit in UDP mode + * @details In UDP mode, this bit is set to ????to block the Unicast packet. + */ +#define Sn_MR2_UUBLK (1<<0) + +/*----------------------------For PHY Control-------------------------------*/ + +/********************/ +/* Register Address */ +/********************/ + +//Basic mode control register, basic register +#define PHYMDIO_BMCR 0x00 + +//Basic mode status register, basic register +#define PHYMDIO_BMSR 0x01 + +//--------------------------------------Not used-------------------------------------------// +////PHY identifier register 1, extended register +//#define PHY_IDR1 0x02 //not used +// +////PHY identifier register 2, extended register +//#define PHY_IDR2 0x03 //not used +// +////Auto-negotiation advertisement register, extended register +//#define PHY_ANAR 0x04 //not used +// +////Auto-negotiation link partner ability register, extended register +//#define PHY_ANLPAR 0x05 //not used +// +////Auto-negotiation expansion register, extended register +//#define PHY_ANER 0x06 //not used +// +////Auto-negotiation next page transmit +//#define PHY_ANNP 0x07 //not used +// +////Auto-negotiation link partner of the next page receive +//#define PHY_ANLPNP 0x08 //not used +// +////MMD access control register +//#define PHY_REGCR 0x09 //not used +// +////MMD access address data register +//#define PHY_ADDAR 0x0e //not used +//--------------------------------------Not used-------------------------------------------// + +/********************/ +/* Bit definitions */ +/********************/ + +//For BMCR register +#define BMCR_RESET (1<<15) +#define BMCR_MLOOPBACK (1<<14) +#define BMCR_SPEED (1<<13) +#define BMCR_AUTONEGO (1<<12) +#define BMCR_PWDN (1<<11) +#define BMCR_ISOLATE (1<<10) +#define BMCR_RSTNEGO (1<<9) +#define BMCR_DUP (1<<8) +#define BMCR_COLTEST (1<<7) + +//For BMSR register +#define BMSR_AUTONEGO_COMPL (1<<5) +#define BMSR_REMOTE_FAULT (1<<4) +#define BMSR_LINK_STATUS (1<<2) +#define BMSR_JAB_DETECT (1<<1) +#define EXTENDED_CAPA (1<<0) + +//--------------------------------------Not used-------------------------------------------// +////For ANAR register +//#define ANAR_NP (1<<15) +//#define ANAR_ACK (1<<14) +//#define ANAR_RF (1<<13) +//#define ANAR_ASM (3<<10) +//#define ANAR_T4 (1<<9) +//#define ANAR_TX_FD (1<<8) +//#define ANAR_TX_HD (1<<7) +//#define ANAR_10_FD (1<<6) +//#define ANAR_10_HD (1<<5) +//#define ANAR_SELECTOR (0x1F<<0) +// +////For ANAR register +//#define ANLPAR_NP (1<<15) +//#define ANLPAR_ACK (1<<14) +//#define ANLPAR_RF (1<<13) +//#define ANLPAR_LP_DIR (1<<11) +//#define ANLPAR_PAUSE (1<<10) +//#define ANLPAR_T4 (1<<9) +//#define ANLPAR_TX_FD (1<<8) +//#define ANLPAR_TX_HD (1<<7) +//#define ANLPAR_10_FD (1<<6) +//#define ANLPAR_10_HD (1<<5) +//#define ANLPAR_SELECTOR (0x1F<<0) + +/**/ +/* MDIO register*/ +//PCS_CTL_1 | PCS control 1 register +//PCS_STS_1 | PCS status 1 register +//EEE_ABILITY | EEE capability register +//WAKE_ER_CNTR | EEE wake error counter +//EEE_ADVR | EEE Advertisement register +//EEE_LPAR | EEE link partner ability register + +//--------------------------------------Not used-------------------------------------------// + +/********************/ +/*Functions for PHY */ +/********************/ +//todo move this definition to bit area +#define PHYACR_READ 0x02 +#define PHYACR_WRITE 0x01 + + + + +/** + * @brief Enter a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n \n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt.\n + * In OS environment, You can replace it to critical section api supported by OS. + * + * \sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * \sa WIZCHIP_CRITICAL_EXIT() + */ +#define WIZCHIP_CRITICAL_ENTER() WIZCHIP.CRIS._enter() + +#ifdef _exit +#undef _exit +#endif + +/** + * @brief Exit a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n\n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt. \n + * In OS environment, You can replace it to critical section api supported by OS. + * + * @sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * @sa WIZCHIP_CRITICAL_ENTER() + */ +#define WIZCHIP_CRITICAL_EXIT() WIZCHIP.CRIS._exit() + + + +//////////////////////// +// Basic I/O Function // +//////////////////////// +// +//M20150601 : uint16_t AddrSel --> uint32_t AddrSel +// +/** + * @ingroup Basic_IO_function_W5100S + * @brief It reads 1 byte value from a register. + * @param AddrSel Register address + * @return The value of register + */ +uint8_t WIZCHIP_READ (uint32_t AddrSel); + +/** + * @ingroup Basic_IO_function_W5100S + * @brief It writes 1 byte value to a register. + * @param AddrSel Register address + * @param wb Write data + * @return void + */ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ); + +/** + * @ingroup Basic_IO_function_W5100S + * @brief It reads sequence data from registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to read data + * @param len Data length + */ +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5100S + * @brief It writes sequence data to registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to write data + * @param len Data length + */ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + + +///////////////////////////////// +// Common Register IO function // +///////////////////////////////// + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set Mode Register + * @param (uint8_t)mr The value to be set. + * @sa getMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define setMR(mr) WIZCHIP_WRITE(MR,mr) +#else + #define setMR(mr) (*((uint8_t*)MR) = mr) +#endif + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get @ref MR. + * @return uint8_t. The value of Mode register. + * @sa setMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define getMR() WIZCHIP_READ(MR) +#else + #define getMR() (*(uint8_t*)MR) +#endif + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set @ref GAR. + * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes. + * @sa getGAR() + */ +#define setGAR(gar) \ + WIZCHIP_WRITE_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get @ref GAR. + * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes. + * @sa setGAR() + */ +#define getGAR(gar) \ + WIZCHIP_READ_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set @ref SUBR. + * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes. + * @note If subr is null pointer, set the backup subnet to SUBR. \n + * If subr is 0.0.0.0, back up SUBR and clear it. \n + * Otherwize, set subr to SUBR + * @sa getSUBR() + */ +#define setSUBR(subr) \ + WIZCHIP_WRITE_BUF(SUBR,subr,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get @ref SUBR. + * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes. + * @sa setSUBR() + */ +#define getSUBR(subr) \ + WIZCHIP_READ_BUF(SUBR, subr, 4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set @ref SHAR. + * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + * @sa getSHAR() + */ +#define setSHAR(shar) \ + WIZCHIP_WRITE_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get @ref SHAR. + * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + * @sa setSHAR() + */ +#define getSHAR(shar) \ + WIZCHIP_READ_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set @ref SIPR. + * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes. + * @sa getSIPR() +*/ +#define setSIPR(sipr) \ + WIZCHIP_WRITE_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get @ref SIPR. + * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes. + * @sa setSIPR() + */ +#define getSIPR(sipr) \ + WIZCHIP_READ_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref IR register + * @param (uint8_t)ir Value to set \ref IR register. + * @sa getIR() + */ +#define setIR(ir) \ + WIZCHIP_WRITE(IR, (ir & 0xE0)) //peter 2016.11.07 unreachable interrupt bit added + //WIZCHIP_WRITE(IR, (ir & 0xA0)) +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref IR register + * @return uint8_t. Value of \ref IR register. + * @sa setIR() + */ +#define getIR() \ + (WIZCHIP_READ(IR) & 0xE0) //peter 2016.11.07 unreachable interrupt bit added + //(WIZCHIP_READ(IR) & 0xA0) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref _IMR_ register + * @param (uint8_t)imr Value to set @ref _IMR_ register. + * @sa getIMR() + */ +#define setIMR(imr) \ + WIZCHIP_WRITE(_IMR_, imr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref _IMR_ register + * @return uint8_t. Value of @ref _IMR_ register. + * @sa setIMR() + */ +#define getIMR() \ + WIZCHIP_READ(_IMR_) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref _RTR_ register + * @param (uint16_t)rtr Value to set @ref _RTR_ register. + * @sa getRTR() + */ +#define setRTR(rtr) {\ + WIZCHIP_WRITE(_RTR_, (uint8_t)(rtr >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(_RTR_,1), (uint8_t) rtr); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref _RTR_ register + * @return uint16_t. Value of @ref _RTR_ register. + * @sa setRTR() + */ +#define getRTR() \ + (((uint16_t)WIZCHIP_READ(_RTR_) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(_RTR_,1))) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref _RCR_ register + * @param (uint8_t)rcr Value to set @ref _RCR_ register. + * @sa getRCR() + */ +#define setRCR(rcr) \ + WIZCHIP_WRITE(_RCR_, rcr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref _RCR_ register + * @return uint8_t. Value of @ref _RCR_ register. + * @sa setRCR() + */ +#define getRCR() \ + WIZCHIP_READ(_RCR_) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref RMSR register + * @sa getRMSR() + */ +#define setRMSR(rmsr) \ + WIZCHIP_WRITE(RMSR,rmsr) // Receicve Memory Size + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref RMSR register + * @return uint8_t. Value of @ref RMSR register. + * @sa setRMSR() + */ + #define getRMSR() \ + WIZCHIP_READ(RMSR) // Receicve Memory Size + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref TMSR register + * @sa getTMSR() + */ +#define setTMSR(tmsr) \ + WIZCHIP_WRITE(TMSR,tmsr) // Receicve Memory Size + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref TMSR register + * @return uint8_t. Value of @ref TMSR register. + * @sa setTMSR() + */ +#define getTMSR() \ + WIZCHIP_READ(TMSR) + + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PATR register + * @return uint16_t. Value to set \ref PATR register + */ +#define getPATR() \ + (((uint16_t)WIZCHIP_READ(PATR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PATR,1))) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PPPALGO register + * @return uint8_t. Value to set \ref PPPALGO register + */ +#define getPPPALGO() \ + WIZCHIP_READ(PPPALGO) + + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PTIMER register + * @param (uint8_t)ptimer Value to set \ref PTIMER register. + * @sa getPTIMER() + */ +#define setPTIMER(ptimer) \ + WIZCHIP_WRITE(PTIMER, ptimer) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PTIMER register + * @return uint8_t. Value of @ref PTIMER register. + * @sa setPTIMER() + */ +#define getPTIMER() \ + WIZCHIP_READ(PTIMER) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PMAGIC register + * @param (uint8_t)pmagic Value to set @ref PMAGIC register. + * @sa getPMAGIC() + */ +#define setPMAGIC(pmagic) \ + WIZCHIP_WRITE(PMAGIC, pmagic) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PMAGIC register + * @return uint8_t. Value of @ref PMAGIC register. + * @sa setPMAGIC() + */ +#define getPMAGIC() \ + WIZCHIP_READ(PMAGIC) + + +//todo Functions for W5100S + +/*----------------------------------------------------------------------*/ +/* W5100S only */ +/*----------------------------------------------------------------------*/ + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref IR2 register + * @param (uint8_t)ir2 Value to set @ref IR2 register. + * @sa getIR2() + */ +#define setIR2(ir2) \ + WIZCHIP_WRITE(IR2, ir2) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref IR2 register + * @return uint8_t. Value of @ref IR2 register. + * @sa setIR2() + */ +#define getIR2() \ + WIZCHIP_READ(IR2) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref IMR2 register + * @param (uint8_t)imr2 Value to set @ref IMR2 register. + * @sa setIMR2() + */ +#define setIMR2(imr2) \ + WIZCHIP_WRITE(IMR2,imr2) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref IMR2 register + * @return uint8_t. Value of @ref IMR2 register. + * @sa getIMR2() + */ +#define getIMR2() \ + WIZCHIP_READ(IMR2) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref UIPR(Unreachable IP Address Register) registers + * @param (uint8_t*)uipr Value to set @ref UIPR registers. + * @sa setUIPR() + */ +#define setUIPR(uipr) \ + WIZCHIP_WRITE_BUF(UIPR,uipr,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref UIPR(Unreachable IP Address Register) registers + * @param (uint8_t*)uipr Value to get @ref UIPR registers + * @sa setUIPR() + */ +#define getUIPR(uipr) \ + WIZCHIP_READ_BUF(UIPR,uipr,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref UPORTR(Unreachable Port Address Register) register + * @param (uint16_t)uportr Value to set @ref UPORTR register. + * @sa getUPORTR() + */ +#define setUPORTR(uportr) {\ + WIZCHIP_WRITE(UPORTR, (uint8_t)(uportr >> 8)); \ + WIZCHIP_WRITE(UPORTR+1, (uint8_t) uportr); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref UPORTR(Unreachable Port Address Register) register + * @return uint16_t. Value of @ref UPORTR register. + * @sa setUPORTR() + */ +#define getUPORTR() \ + (((uint16_t)WIZCHIP_READ(UPORTR) << 8) + WIZCHIP_READ(UPORTR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref MR2 register + * @param (uint8_t)mr2 Value to set @ref MR2 registers. + * @sa getMR2() + */ +#define setMR2(mr2) \ + WIZCHIP_WRITE(MR2,mr2) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref MR2 register + * @return uint8_t. Value of @ref MR2 register. + * @sa setMR2() + */ +#define getMR2() \ + WIZCHIP_READ(MR2) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHAR registers + * @param (uint8_t*)phar Value to set @ref PHAR registers. + * @sa getPHAR() + */ +#define setPHAR(phar) \ + WIZCHIP_WRITE_BUF(PHAR,phar,6) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHAR registers + * @param (uint8_t*)phar Pointer variable to get @ref PHAR registers. + * @sa setPHAR() + */ +#define getPHAR(phar) \ + WIZCHIP_READ_BUF(PHAR,phar,6) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PSIDR register + * @param (uint16_t)psidr Value to set @ref PSIDR register. + * @sa getPSIDR() + */ +#define setPSIDR(psidr) {\ + WIZCHIP_WRITE(PSIDR, (uint8_t)(psidr >> 8)); \ + WIZCHIP_WRITE(PSIDR+1, (uint8_t) psidr); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PSIDR register + * @return uint16_t. Value of @ref PSIDR register. + * @sa setPSIDR() + */ +#define getPSIDR() \ + (((uint16_t)WIZCHIP_READ(PSIDR) << 8) + WIZCHIP_READ(PSIDR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PMRUR register + * @param (uint16_t)pmrur Value to set @ref PMRUR register. + * @sa getPMRUR() + */ +#define setPMRUR(pmrur) {\ + WIZCHIP_WRITE(PMRUR, (uint8_t)(pmrur >> 8)); \ + WIZCHIP_WRITE(PMRUR+1, (uint8_t) pmrur); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PMRUR register + * @return uint16_t. Value of @ref PMRUR register. + * @sa setPMRUR() + */ +#define getPMRUR() \ + (((uint16_t)WIZCHIP_READ(PMRUR) << 8) + WIZCHIP_READ(PMRUR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYSR register + * @return uint8_t. Value of @ref PHYSR register. + * @sa setPHYSR() + */ +#define getPHYSR() \ + WIZCHIP_READ(PHYSR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYSR1 register + * @return uint8_t. Value of @ref PHYSR1 register. + * @sa setPHYSR1() + */ +#define getPHYSR1() \ + WIZCHIP_READ(PHYSR1) + +/** + * For internal uses + * The address of the PHY is fixed as "0x0A". + */ +#define getPHYAR() \ + WIZCHIP_READ(PHYAR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYRAR register + * @return uint8_t. Value of @ref PHYRAR register. + * @sa setPHYRAR() + */ +#define getPHYRAR() \ + WIZCHIP_READ(PHYRAR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYRR register + * @param (uint8_t)phyrar Value to set @ref PHYRR register. + * @sa getPHYRR() + */ +#define setPHYRR(phyrar) \ + WIZCHIP_WRITE(PHYRAR, phyrar) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYDIR register + * @return uint16_t. Value of @ref PHYDIR register. + * @sa setPHYRAR() + */ +//read the value of the phy data input register +#define getPHYDIR() \ + (((uint16_t)WIZCHIP_READ(PHYDIR+1) << 8) + WIZCHIP_READ(PHYDIR)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYDIR register + * @param (uint16_t)phydir Value to set @ref PHYDIR register. + * @sa getPHYDIR() + */ +//write the value of the phy data input register +#define setPHYDIR(phydir) {\ + WIZCHIP_WRITE(PHYDIR+1, (uint8_t)(phydir >> 8)); \ + WIZCHIP_WRITE(PHYDIR, (uint8_t) phydir); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYDOR register + * @return uint16_t. Value of @ref PHYDOR register. + * @sa setPHYDOR() + */ +//read the value of the phy data output register +#define getPHYDOR() \ + (((uint16_t)WIZCHIP_READ(PHYDOR+1) << 8) + WIZCHIP_READ(PHYDOR)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYDOR register + * @param (uint16_t)phydor Value to set @ref PHYDOR register. + * @sa getPHYDOR() + */ +//write the value of the phy data output register +#define setPHYDOR(phydor) {\ + WIZCHIP_WRITE(PHYDOR, (uint8_t)(phydor >> 8)); \ + WIZCHIP_WRITE(PHYDOR+1, (uint8_t) phydor); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYACR register + * @return uint8_t. Value of @ref PHYACR register. + * @sa setPHYACR() + */ +//read the value of the phy action register ***This register will be cleared automatically*** +#define getPHYACR() \ + WIZCHIP_READ(PHYACR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYACR register + * @param (uint8_t)phyacr Value to set @ref PHYACR register. + * @sa getPHYACR() + */ +//write the value of the phy action register +#define setPHYACR(phyacr) \ + WIZCHIP_WRITE(PHYACR,phyacr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYDIVR register + * @param (uint8_t)phydivr Value to set @ref PHYDIVR register. + * @sa getPHYDIVR() + */ +#define setPHYDIVR(phydivr) \ + WIZCHIP_WRITE(PHYDIVR, phydivr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYDIVR register + * @return uint8_t. Value of @ref PHYDIVR register. + * @sa setPHYDIVR() + */ +#define getPHYDIVR() \ + WIZCHIP_READ(PHYDIVR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYCR0 register + * @param (uint8_t)phych0 Value to set @ref PHYCR0 register. + * @sa getPHYCR0() + */ +#define setPHYCR0(phych0) \ + WIZCHIP_WRITE(PHYCR0,phych0) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYCR0 register + * @return uint8_t. Value of @ref PHYCR0 register. + * @sa setPHYCR0() + */ +#define getPHYCR0() \ + WIZCHIP_READ(PHYCR0) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PHYCR1 register + * @param (uint8_t)phycr1 Value to set @ref PHYCR1 register. + * @sa getPHYCR1() + */ +#define setPHYCR1(phycr1) \ + WIZCHIP_WRITE(PHYCR1,phycr1) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PHYCR1 register + * @return uint8_t. Value of @ref PHYCR1 register. + * @sa setPHYCR1() + */ +#define getPHYCR1() \ + WIZCHIP_READ(PHYCR1) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref SLCR register + * @param (uint8_t)rqcr Value to set @ref SLCR register. + * @sa getSLCR() + */ +#define setSLCR(rqcr) \ + WIZCHIP_WRITE(SLCR, rqcr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref RQCR register + * @return uint8_t. Value of @ref RQCR register. + * @sa setRQCR() + */ +#define getSLCR() \ + WIZCHIP_READ(RQCR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref SLRTR register + * @param (uint16_t)slrtr Value to set @ref SLRTR register. + * @sa getSLRTR() + */ +#define setSLRTR(slrtr) \ + WIZCHIP_WRITE(SLRTR, (uint8_t)(slrtr >> 8)); \ + WIZCHIP_WRITE(SLRTR+1, (uint8_t) slrtr); \ + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLRTR register + * @return uint16_t. Value of @ref SLRTR register. + * @sa setSLRTR() + */ +#define getSLRTR() \ + (((uint16_t)WIZCHIP_READ(SLRTR) << 8) + WIZCHIP_READ(SLRTR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref SLRCR register + * @param (uint8_t)slrcr Value to set @ref SLRCR register. + * @sa getSLRCR() + */ +#define setSLRCR(slrcr) \ + WIZCHIP_WRITE(SLRCR,slrcr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLRCR register + * @return uint8_t. Value of @ref SLRCR register. + * @sa setSLRCR() + */ +#define getSLRCR() \ + WIZCHIP_READ(SLRCR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref SLPIPR registers + * @param (uint8_t*)slpipr Values to set @ref SLPIPR registers. + * @sa getSLPIPR() + */ +#define setSLPIPR(slpipr) \ + WIZCHIP_WRITE_BUF(SLPIPR,slpipr,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLPIPR registers + * @param (uint8_t*)slpipr Values to get @ref SLPIPR registers. + * @sa getSLPIPR() + */ +#define getSLPIPR(slpipr) \ + WIZCHIP_READ_BUF(SLPIPR,slpipr,4) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLPHAR registers + * @param (uint8_t*)slphar Values to set @ref SLPHAR registers. + * @sa getSLPHAR() + */ +#define setSLPHAR(slphar) \ + WIZCHIP_WRITE_BUF(SLPHAR,slphar,6) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLPHAR registers + * @param (uint8_t*)slphar Values to get @ref SLPHAR registers. + * @sa getSLPHAR() + */ +#define getSLPHAR(slphar) \ + WIZCHIP_READ_BUF(SLPHAR,slphar,6) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PINGSEQR register + * @param (uint16_t)pingseqr Value to set @ref PINGSEQR register. + * @sa getPINGSEQR() + */ +#define setPINGSEQR(pingseqr) {\ + WIZCHIP_WRITE(PINGSEQR, (uint8_t)(pingseqr >> 8)); \ + WIZCHIP_WRITE(PINGSEQR+1, (uint8_t) pingseqr); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PINGSEQR register + * @return uint16_t. Value of @ref PINGSEQR register. + * @sa setPINGSEQR() + */ +#define getPINGSEQR() \ + (((uint16_t)WIZCHIP_READ(PINGSEQR) << 8) + WIZCHIP_READ(PINGSEQR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref PINGIDR register + * @param (uint16_t)pingidr Value to set @ref PINGIDR register. + * @sa getPINGIDR() + */ +#define setPINGIDR(pingidr) {\ + WIZCHIP_WRITE(PINGIDR, (uint8_t)(pingidr >> 8)); \ + WIZCHIP_WRITE(PINGIDR+1, (uint8_t) pingidr); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref PINGIDR register + * @return uint16_t. Value of @ref PINGIDR register. + * @sa setPINGIDR() + */ +#define getPINGIDR() \ + (((uint16_t)WIZCHIP_READ(PINGIDR) << 8) + WIZCHIP_READ(PINGIDR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref SLIMR register + * @param (uint8_t)slimr Value to set @ref SLIMR register. + * @sa getSLIMR() + */ +#define setSLIMR(slimr) \ + WIZCHIP_WRITE(SLIMR, slimr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLIMR register + * @return uint8_t. Value of @ref SLIMR register. + * @sa setSLIMR() + */ +#define getSLIMR() \ + WIZCHIP_READ(SLIMR) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref SLIR register + * @param (uint8_t)slir Value to set @ref SLIR register. + * @sa getSLIMR() + */ +#define setSLIR(slir) \ + WIZCHIP_WRITE(SLIR, slir) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref SLIMR register + * @return uint8_t. Value of @ref SLIMR register. + * @sa setSLIMR() + */ +#define getSLIR() \ + WIZCHIP_READ(SLIR) + +/*Hidden functions for W5100S*/ +#define setDBGOUT(dbgout) {\ + WIZCHIP_WRITE(DBGOUT,(uint8_t)(dbgout >> 16)); \ + WIZCHIP_WRITE(DBGOUT,(uint8_t)(dbgout >> 8)); \ + WIZCHIP_WRITE(DBGOUT,(uint8_t)(dbgout)); \ + } + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref NICMAXCOLR register + * @param (uint8_t)nicmaxcolr Value to set @ref NICMAXCOLR register. + * @sa getNICMAXCOLR() + */ +#define setNICMAXCOLR(nicmaxcolr) \ + WIZCHIP_WRITE(NICMAXCOLR,nicmaxcolr) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref NICMAXCOLR register + * @return uint8_t. Value of @ref NICMAXCOLR register. + * @sa setNICMAXCOLR() + */ +#define getNICMAXCOLR() \ + WIZCHIP_READ(NICMAXCOLR) + +/*Clock lock/unlock*/ + +/** + * @ingroup Common_register_access_function_W5100S + * @brief LOCK Chip Information + * @sa CHIPULLOCK() + */ +#define CHIPLOCK() \ + WIZCHIP_WRITE(CHIPLCKR,0xff) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Unlock Chip Information + * @sa CHIPLOCK() + */ +#define CHIPUNLOCK() \ + WIZCHIP_WRITE(CHIPLCKR,0xCE) + + +/** + * @ingroup Common_register_access_function_W5100S + * @brief LOCK Chip Information + * @sa CHIPULLOCK() + */ +/*Network information lock/unlock*/ +#define NETLOCK() \ + WIZCHIP_WRITE(NETLCKR,0x3A) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Unlock Chip Information + * @sa CHIPLOCK() + */ +#define NETUNLOCK() \ + WIZCHIP_WRITE(NETLCKR,0xC5) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Lock PHYCR0,CR1 Information + * @sa CHIPULLOCK() + */ +/*PHY CR0,CR1 lock/unlock*/ +#define PHYLOCK() \ + WIZCHIP_WRITE(PHYLCKR,0xff) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Lock PHYCR0,CR1 Information + * @sa CHIPULLOCK() + */ +#define PHYUNLOCK() \ + WIZCHIP_WRITE(PHYLCKR,0x53) + +/** + * @ingroup Version register_access_function_W5100SS + * @brief Get version information. + * @return uint16_t. It must be "0x51" + */ +#define getVER() \ + (WIZCHIP_READ(VERR)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Get \ref TCNTR register + * @return uint16_t. Value of @ref TCNTR register. + * @sa setNTCNTR() + */ +/*Get 100us internal counter*/ +#define getTCNTR() \ + (((uint16_t)WIZCHIP_READ(TCNTR) << 8) + WIZCHIP_READ(TCNTR+1)) + +/** + * @ingroup Common_register_access_function_W5100S + * @brief Set \ref TCNTR register + * @param (uint8_t) + Value to set @ref TCNTR register. + * @sa getTCNTCLKR() + */ +/*Reset 100us internal counter(TCNTR)*/ +#define setTCNTCLKR(var) \ + WIZCHIP_WRITE(TCNTCLKR, var) + +/*w5100s only end*/ + + + + + +/////////////////////////////////// +// Socket N register I/O function // +/////////////////////////////////// +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_MR register + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * @param mr Value to set @ref Sn_MR + * @sa getSn_MR() + */ +#define setSn_MR(sn, mr) \ + WIZCHIP_WRITE(Sn_MR(sn),mr) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_MR register + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * @return Value of @ref Sn_MR. + * @sa setSn_MR() + */ +#define getSn_MR(sn) \ + WIZCHIP_READ(Sn_MR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)cr Value to set @ref Sn_CR + * @sa getSn_CR() + */ +#define setSn_CR(sn, cr) \ + WIZCHIP_WRITE(Sn_CR(sn), cr) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_CR. + * @sa setSn_CR() + */ +#define getSn_CR(sn) \ + WIZCHIP_READ(Sn_CR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)ir Value to set @ref Sn_IR + * @sa getSn_IR() + */ +#define setSn_IR(sn, ir) \ + WIZCHIP_WRITE(Sn_IR(sn), ir) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_IR. + * @sa setSn_IR() + */ +#define getSn_IR(sn) \ + WIZCHIP_READ(Sn_IR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_SR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_SR. + */ +#define getSn_SR(sn) \ + WIZCHIP_READ(Sn_SR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)port Value to set @ref Sn_PORT. + * @sa getSn_PORT() + */ +#define setSn_PORT(sn, port) { \ + WIZCHIP_WRITE(Sn_PORT(sn), (uint8_t)(port >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1), (uint8_t) port); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_PORT. + * @sa setSn_PORT() + */ +#define getSn_PORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_PORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes. + * @sa getSn_DHAR() + */ +#define setSn_DHAR(sn, dhar) \ + WIZCHIP_WRITE_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes. + * @sa setSn_DHAR() + */ +#define getSn_DHAR(sn, dhar) \ + WIZCHIP_READ_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes. + * @sa getSn_DIPR() + */ +#define setSn_DIPR(sn, dipr) \ + WIZCHIP_WRITE_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes. + * @sa SetSn_DIPR() + */ +#define getSn_DIPR(sn, dipr) \ + WIZCHIP_READ_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)dport Value to set @ref Sn_DPORT + * @sa getSn_DPORT() + */ +#define setSn_DPORT(sn, dport) { \ + WIZCHIP_WRITE(Sn_DPORT(sn), (uint8_t) (dport>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1), (uint8_t) dport); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_DPORT. + * @sa setSn_DPORT() + */ +#define getSn_DPORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_DPORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)mss Value to set @ref Sn_MSSR + * @sa setSn_MSSR() + */ +#define setSn_MSSR(sn, mss) { \ + WIZCHIP_WRITE(Sn_MSSR(sn), (uint8_t)(mss>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1), (uint8_t) mss); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_MSSR. + * @sa setSn_MSSR() + */ +#define getSn_MSSR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_MSSR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_PROTO register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)proto Value to set \ref Sn_PROTO + * @sa getSn_PROTO() + */ +#define setSn_PROTO(sn, proto) \ + WIZCHIP_WRITE(Sn_PROTO(sn), proto) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_PROTO register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_PROTO. + * @sa setSn_PROTO() + */ +#define getSn_PROTO(sn) \ + WIZCHIP_READ(Sn_PROTO(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)tos Value to set @ref Sn_TOS + * @sa getSn_TOS() + */ +#define setSn_TOS(sn, tos) \ + WIZCHIP_WRITE(Sn_TOS(sn), tos) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of Sn_TOS. + * @sa setSn_TOS() + */ +#define getSn_TOS(sn) \ + WIZCHIP_READ(Sn_TOS(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @param (uint8_t)ttl Value to set @ref Sn_TTL + * @sa getSn_TTL() + */ +#define setSn_TTL(sn, ttl) \ + WIZCHIP_WRITE(Sn_TTL(sn), ttl) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of @ref Sn_TTL. + * @sa setSn_TTL() + */ +#define getSn_TTL(sn) \ + WIZCHIP_READ(Sn_TTL(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_RXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @param (uint8_t)rxmemsize Value to set \ref Sn_RXMEM_SIZE + * @sa getSn_RXMEM_SIZE() + */ +#define setSn_RXMEM_SIZE(sn, rxmemsize) \ + WIZCHIP_WRITE(RMSR, (WIZCHIP_READ(RMSR) & ~(0x03 << (2*sn))) | (rxmemsize << (2*sn))) +#define setSn_RXBUF_SIZE(sn,rxmemsize) setSn_RXMEM_SIZE(sn,rxmemsize) +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_RXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_RXMEM. + * @sa setSn_RXMEM_SIZE() + */ +#define getSn_RXMEM_SIZE(sn) \ + ((WIZCHIP_READ(RMSR) & (0x03 << (2*sn))) >> (2*sn)) +#define getSn_RXBUF_SIZE(sn) getSn_RXMEM_SIZE(sn) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_TXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)txmemsize Value to set \ref Sn_TXMEM_SIZE + * @sa getSn_TXMEM_SIZE() + */ +#define setSn_TXMEM_SIZE(sn, txmemsize) \ + WIZCHIP_WRITE(TMSR, (WIZCHIP_READ(TMSR) & ~(0x03 << (2*sn))) | (txmemsize << (2*sn))) +#define setSn_TXBUF_SIZE(sn, txmemsize) setSn_TXMEM_SIZE(sn,txmemsize) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_TXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_TXMEM_SIZE. + * @sa setSn_TXMEM_SIZE() + */ +#define getSn_TXMEM_SIZE(sn) \ + ((WIZCHIP_READ(TMSR) & (0x03 << (2*sn))) >> (2*sn)) +#define getSn_TXBUF_SIZE(sn) getSn_TXMEM_SIZE(sn) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_TX_FSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_FSR. + */ +uint16_t getSn_TX_FSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_TX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_RD. + */ +#define getSn_TX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)txwr Value to set @ref Sn_TX_WR + * @sa GetSn_TX_WR() + */ +#define setSn_TX_WR(sn, txwr) { \ + WIZCHIP_WRITE(Sn_TX_WR(sn), (uint8_t)(txwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1), (uint8_t) txwr); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_WR. + * @sa setSn_TX_WR() + */ +#define getSn_TX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_RX_RSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_RSR. + */ +uint16_t getSn_RX_RSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD + * @sa getSn_RX_RD() + */ +#define setSn_RX_RD(sn, rxrd) { \ + WIZCHIP_WRITE(Sn_RX_RD(sn), (uint8_t)(rxrd>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1), (uint8_t) rxrd); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @regurn uint16_t. Value of @ref Sn_RX_RD. + * @sa setSn_RX_RD() + */ +#define getSn_RX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rxwr Value to set \ref Sn_RX_WR + * @sa getSn_RX_WR() + */ +#define setSn_RX_WR(sn, rxwr) { \ + WIZCHIP_WRITE(Sn_RX_WR(sn), (uint8_t)(rxwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1), (uint8_t) rxwr); \ + } + + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_WR. + */ +#define getSn_RX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set @ref Sn_FRAGR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)frag Value to set \ref Sn_FRAGR + * @sa getSn_FRAG() + */ +#define setSn_FRAGR(sn, fragr) { \ + WIZCHIP_WRITE(Sn_FRAGR(sn), (uint8_t)(fragr >>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_FRAGR(sn),1), (uint8_t) fragr); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get @ref Sn_FRAGR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_FRAGR. + * @sa setSn_FRAG() + */ +#define getSn_FRAGR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_FRAGR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_FRAGR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the max RX buffer size of socket sn + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Max buffer size + */ +#define getSn_RxMAX(sn) \ + ((uint16_t)(0x0001 << getSn_RXMEM_SIZE(sn)) << 10) + + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the max TX buffer size of socket sn + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Max buffer size + */ +#define getSn_TxMAX(sn) \ + ((uint16_t)(0x0001 << getSn_TXMEM_SIZE(sn)) << 10) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the mask of socket sn RX buffer. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Mask value + */ +#define getSn_RxMASK(sn) \ + (getSn_RxMAX(sn) - 1) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the mask of socket sn TX buffer + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Mask value + */ +#define getSn_TxMASK(sn) \ + (getSn_TxMAX(sn) - 1) + + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the base address of socket sn RX buffer. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n RX buffer base address. + */ +uint32_t getSn_RxBASE(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the base address of socket sn TX buffer. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n TX buffer base address. + */ +uint32_t getSn_TxBASE(uint8_t sn); + + +/*socket register W5100S only*/ + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set the interrupt mask register of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)imr Value to set \ref Sn_IMR + * @sa getSn_IMR(sn) + */ +#define setSn_IMR(sn,imr) \ + WIZCHIP_WRITE(Sn_IMR(sn),imr) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the interrupt mask register of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n interrupt mask register. + */ +#define getSn_IMR(sn) \ + WIZCHIP_READ(Sn_IMR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set the Sn_MR2 value of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param mr2 Value of Sn_MR2 register to set. + */ +#define setSn_MR2(sn,mr2) \ + WIZCHIP_WRITE(Sn_MR2(sn), mr2) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the Sn_MR2 value of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n Sn_MR2 register. + */ +#define getSn_MR2(sn) \ + WIZCHIP_READ(Sn_MR2(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set the Sn_KPALVTR value of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param kpalvtr Value of the Sn_KPALVTR register to set. + */ +#define setSn_KPALVTR(sn,kpalvtr) \ + WIZCHIP_WRITE(Sn_KPALVTR(sn), kpalvtr) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the Sn_KPALVTR value of socket sn + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of the Sn_KPALVTR register. + */ +#define getSn_KPALVTR(sn) \ + WIZCHIP_READ(Sn_KPALVTR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the Sn_TSR register of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of the Socket n Sn_TSR register. + */ +#define getSn_TSR(sn) \ + WIZCHIP_READ(Sn_TSR(sn)) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set the Sn_RTR register of socket sn. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rtr Value of the Socket n Sn_RTR register to set. + */ +#define setSn_RTR(sn,rtr) { \ + WIZCHIP_WRITE(Sn_RTR(sn), (uint8_t)(rtr >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RTR(sn),1), (uint8_t) rtr); \ + } + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the Sn_RTR register of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of the Socket n Sn_RTR register. + */ +#define getSn_RTR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RTR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RTR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Set the Sn_RCR register of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of the Socket n Sn_RCR register to set. + */ +#define setSn_RCR(sn,rcr) \ + WIZCHIP_WRITE(Sn_RCR(sn),rcr) + +/** + * @ingroup Socket_register_access_function_W5100S + * @brief Get the Sn_RCR of socket sn. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of the Socket n Sn_RCR. + */ +#define getSn_RCR(sn) \ + WIZCHIP_READ(Sn_RCR(sn)) + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// +/** + * @ingroup Basic_IO_function_W5100S + * @brief It copies data to internal TX memory + * + * @details This function reads the Tx write pointer register and after that, + * it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + * and updates the Tx write pointer register. + * This function is being called by send() and sendto() function also. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param wizdata Pointer buffer to write data + * @param len Data length + * @sa wiz_recv_data() + */ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5100S + * @brief It copies data to your buffer from internal RX memory + * + * @details This function read the Rx read pointer register and after that, + * it copies the received data from internal RX memory + * to wizdata(pointer variable) of the length of len(variable) bytes. + * This function is being called by recv() also. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param wizdata Pointer buffer to read data + * @param len Data length + * @sa wiz_send_data() + */ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5100S + * @brief It discard the received data in RX memory. + * @details It discards the data of the length of len(variable) bytes in internal RX memory. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param len Data length + */ +void wiz_recv_ignore(uint8_t sn, uint16_t len); + +/** + * @ingroup Special_function_W5100S + * @brief Write data to the PHY via MDC/MDIO interface. + * @details Write command data to the PHY via MDC/MDIO interface. + * @param (uint8_t)PHYMDIO_regadr Address of the PHY register. It should be PHYMDIO_BMCR or PHYMDIO_BMSR. + * @param (uint16_t)var Data to write to the PHY register. Please refer to the bit definitions of the BMCR and BMSR register. + */ +void wiz_mdio_write(uint8_t PHYMDIO_regadr, uint16_t var); + +/** + * @ingroup Special_function_W5100S + * @brief Read data from the PHY via MDC/MDIO interface. + * @details Read command or status data from the PHY via MDC/MDIO interface. + * @param (uint8_t)PHYMDIO_regadr Address of the PHY register. It should be PHYMDIO_BMCR or PHYMDIO_BMSR. + * @return The value of the PHY register + */ +uint16_t wiz_mdio_read(uint8_t PHYMDIO_regadr); + +/** + * @ingroup Special_function_W5100S + * @brief Delay function + * @details Delay function using internal 100us timer of the W5100S + * @param (uint32_t)ms Time to delay in milliseconds. + */ +void wiz_delay_ms(uint32_t ms); + +/// @cond DOXY_APPLY_CODE +#endif +/// @endcond + +#ifdef __cplusplus +} +#endif + +#endif //_W5100S_H_ + + + diff --git a/Ethernet/W5200/w5200.c b/Ethernet/W5200/w5200.c new file mode 100644 index 0000000..52bd5f5 --- /dev/null +++ b/Ethernet/W5200/w5200.c @@ -0,0 +1,353 @@ +//***************************************************************************** +// +//! \file w5200.c +//! \brief W5200 HAL Interface. +//! \version 1.0.0 +//! \date 2013/10/21 +//! \par Revision history +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#include "w5200.h" + +#if (_WIZCHIP_ == 5200) +/** +@brief This function writes the data into W5200 registers. +*/ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ) +{ + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + WIZCHIP.IF.SPI._write_byte(_W5200_SPI_WRITE_); // Data write command and Write data length upper + WIZCHIP.IF.SPI._write_byte(0x01); // Write data length lower + WIZCHIP.IF.SPI._write_byte(wb); // Data write (write 1byte data) + +#elif ( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) ) + + //add indirect bus + //M20150601 : Rename the function for integrating with W5300 + //WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + //WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x000000FF)); + //WIZCHIP.IF.BUS._write_byte(IDM_DR,wb); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x000000FF)); + WIZCHIP.IF.BUS._write_data(IDM_DR,wb); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5200. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} +/** +@brief This function reads the value from W5200 registers. +*/ +uint8_t WIZCHIP_READ(uint32_t AddrSel) +{ + uint8_t ret; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + WIZCHIP.IF.SPI._write_byte(_W5200_SPI_READ_); // Read data length upper + WIZCHIP.IF.SPI._write_byte(0x01); // Data length lower + ret = WIZCHIP.IF.SPI._read_byte(); + +#elif ( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) ) + + //add indirect bus + //M20150601 : Rename the function for integrating with W5300 + //WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + //WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x000000FF)); + //ret = WIZCHIP.IF.BUS._read_byte(IDM_DR); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x000000FF)); + ret = WIZCHIP.IF.BUS._read_data(IDM_DR); + +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5200. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); + return ret; +} + + +/** +@brief This function writes into W5200 memory(Buffer) +*/ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint16_t i = 0; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + WIZCHIP.IF.SPI._write_byte(_W5200_SPI_WRITE_ | ((len & 0x7F00) >> 8)); // Write data op code and length upper + WIZCHIP.IF.SPI._write_byte((len & 0x00FF) >> 0); // length lower + for(i = 0; i < len; i++) + WIZCHIP.IF.SPI._write_byte(pBuf[i]); + +#elif ( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) ) + //M20150601 : Rename the function for integrating with W5300 + /* + WIZCHIP_WRITE(MR,WIZCHIP_READ(MR) | MR_AI); + WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x000000FF)); + for(i = 0 ; i < len; i++) + WIZCHIP.IF.BUS._write_byte(IDM_DR,pBuf[i]); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); + */ + setMR(getMR() | MR_AI); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x000000FF)); + for(i = 0 ; i < len; i++) + WIZCHIP.IF.BUS._write_data(IDM_DR,pBuf[i]); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5200. !!!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} + +/** +@brief This function reads into W5200 memory(Buffer) +*/ +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint16_t i = 0; + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_)) + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + WIZCHIP.IF.SPI._write_byte( _W5200_SPI_READ_ | ((len & 0x7F00) >> 8)); // Write data op code and length upper + WIZCHIP.IF.SPI._write_byte((len & 0x00FF) >> 0); // length lower + for(i = 0; i < len; i++) + pBuf[i] = WIZCHIP.IF.SPI._read_byte(); + +#elif ( (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) ) + //M20150601 : Rename the function for integrating with W5300 + /* + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) | MR_AI); + WIZCHIP.IF.BUS._write_byte(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.BUS._write_byte(IDM_AR1,(AddrSel & 0x000000FF)); + for(i = 0 ; i < len; i++) + pBuf[i] = WIZCHIP.IF.BUS._read_byte(IDM_DR); + WIZCHIP_WRITE(MR, WIZCHIP_READ(MR) & ~MR_AI); + */ + setMR(getMR() | MR_AI); + WIZCHIP.IF.BUS._write_data(IDM_AR0,(AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.BUS._write_data(IDM_AR1,(AddrSel & 0x000000FF)); + for(i = 0 ; i < len; i++) + pBuf[i] = WIZCHIP.IF.BUS._read_data(IDM_DR); + setMR(getMR() & ~MR_AI); +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5200. !!!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} + +/////////////////////////////////// +// Socket N regsiter IO function // +/////////////////////////////////// + +uint16_t getSn_TX_FSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + do + { + val1 = WIZCHIP_READ(Sn_TX_FSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_TX_FSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + } + }while (val != val1); + return val; +} + + +uint16_t getSn_RX_RSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + do + { + val1 = WIZCHIP_READ(Sn_RX_RSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_RX_RSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + } + }while (val != val1); + return val; +} + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// + +uint16_t getSn_RxBASE(uint8_t sn) +{ + int8_t i; + uint16_t rxbase = _WIZCHIP_IO_RXBUF_; + for(i = 0; i < sn; i++) + rxbase += getSn_RxMAX(i); + return rxbase; +} + +uint16_t getSn_TxBASE(uint8_t sn) +{ + int8_t i; + uint16_t txbase = _WIZCHIP_IO_TXBUF_; + for(i = 0; i < sn; i++) + txbase += getSn_TxMAX(i); + return txbase; +} + +/** +@brief This function is being called by send() and sendto() function also. for copy the data form application buffer to Transmite buffer of the chip. + +This function read the Tx write pointer register and after copy the data in buffer update the Tx write pointer +register. User should read upper byte first and lower byte later to get proper value. +And this function is being used for copy the data form application buffer to Transmite +buffer of the chip. It calculate the actual physical address where one has to write +the data in transmite buffer. Here also take care of the condition while it exceed +the Tx memory uper-bound of socket. + +*/ + +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + + uint16_t ptr; + uint16_t size; + uint16_t dst_mask; + uint8_t * dst_ptr; + + ptr = getSn_TX_WR(sn); + + + dst_mask = (uint32_t)ptr & getSn_TxMASK(sn); + dst_ptr = (uint8_t*)((uint32_t)getSn_TxBASE(sn) + dst_mask); + + if (dst_mask + len > getSn_TxMAX(sn)) + { + size = getSn_TxMAX(sn) - dst_mask; + WIZCHIP_WRITE_BUF((uint32_t)dst_ptr, wizdata, size); + wizdata += size; + size = len - size; + dst_ptr = (uint8_t*)((uint32_t)getSn_TxBASE(sn)); + WIZCHIP_WRITE_BUF((uint32_t)dst_ptr, wizdata, size); + } + else + { + WIZCHIP_WRITE_BUF((uint32_t)dst_ptr, wizdata, len); + } + + ptr += len; + + setSn_TX_WR(sn, ptr); +} + + +/** +@brief This function is being called by recv() also. This function is being used for copy the data form Receive buffer of the chip to application buffer. + +This function read the Rx read pointer register +and after copy the data from receive buffer update the Rx write pointer register. +User should read upper byte first and lower byte later to get proper value. +It calculate the actual physical address where one has to read +the data from Receive buffer. Here also take care of the condition while it exceed +the Rx memory uper-bound of socket. +*/ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t src_mask; + uint8_t * src_ptr; + + ptr = getSn_RX_RD(sn); + + src_mask = (uint32_t)ptr & getSn_RxMASK(sn); + src_ptr = (uint8_t *)((uint32_t)getSn_RxBASE(sn) + src_mask); + + if( (src_mask + len) > getSn_RxMAX(sn) ) + { + size = getSn_RxMAX(sn) - src_mask; + WIZCHIP_READ_BUF((uint32_t)src_ptr, (uint8_t*)wizdata, size); + wizdata += size; + size = len - size; + src_ptr = (uint8_t*)((uint32_t)getSn_RxBASE(sn)); + WIZCHIP_READ_BUF((uint32_t)src_ptr, (uint8_t*)wizdata, size); + } + else + { + WIZCHIP_READ_BUF((uint32_t)src_ptr, (uint8_t*)wizdata, len); + } + + ptr += len; + + setSn_RX_RD(sn, ptr); +} + +void wiz_recv_ignore(uint8_t sn, uint16_t len) +{ + uint16_t ptr; + + ptr = getSn_RX_RD(sn); + + ptr += len; + setSn_RX_RD(sn,ptr); +} + +#endif diff --git a/Ethernet/W5200/w5200.h b/Ethernet/W5200/w5200.h new file mode 100644 index 0000000..0fcfe3e --- /dev/null +++ b/Ethernet/W5200/w5200.h @@ -0,0 +1,2110 @@ +//* **************************************************************************** +//! \file w5200.h +//! \brief W5200 HAL Header File. +//! \version 1.0.0 +//! \date 2015/03/23 +//! \par Revision history +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#ifndef _W5200_H +#define _W5200_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "wizchip_conf.h" + +/// \cond DOXY_APPLY_CODE +#if (_WIZCHIP_ == 5200) +/// \endcond + +#define _WIZCHIP_SN_BASE_ (0x4000) +#define _WIZCHIP_SN_SIZE_ (0x0100) +#define _WIZCHIP_IO_TXBUF_ (0x8000) /* Internal Tx buffer address of the iinchip */ +#define _WIZCHIP_IO_RXBUF_ (0xC000) /* Internal Rx buffer address of the iinchip */ + +#define _W5200_SPI_READ_ (0x00 << 7) ///< SPI interface Read operation in Control Phase +#define _W5200_SPI_WRITE_ (0x01 << 7) ///< SPI interface Write operation in Control Phase + +#define WIZCHIP_CREG_BLOCK 0x00 ///< Common register block +#define WIZCHIP_SREG_BLOCK(N) (_WIZCHIP_SN_BASE_+ _WIZCHIP_SN_SIZE_*N) ///< Socket N register block + +#define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + N) ///< Increase offset address + +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) + #define IDM_AR0 ((_WIZCHIP_IO_BASE_ + 0x0001)) + #define IDM_AR1 ((_WIZCHIP_IO_BASE_ + 0x0002)) + #define IDM_DR ((_WIZCHIP_IO_BASE_ + 0x0003)) + #define _W5200_IO_BASE_ 0x0000 +#elif (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define _W5200_IO_BASE_ 0x0000 +#endif + +/////////////////////////////////////// +// Definition For Legacy Chip Driver // +/////////////////////////////////////// +#define IINCHIP_READ(ADDR) WIZCHIP_READ(ADDR) ///< The defined for legacy chip driver +#define IINCHIP_WRITE(ADDR,VAL) WIZCHIP_WRITE(ADDR,VAL) ///< The defined for legacy chip driver +#define IINCHIP_READ_BUF(ADDR,BUF,LEN) WIZCHIP_READ_BUF(ADDR,BUF,LEN) ///< The defined for legacy chip driver +#define IINCHIP_WRITE_BUF(ADDR,BUF,LEN) WIZCHIP_WRITE(ADDR,BUF,LEN) ///< The defined for legacy chip driver + + +//----------- defgroup -------------------------------- + +/** + * @defgroup W5200 W5200 + * @brief WHIZCHIP register defines and I/O functions of @b W5200. + * + * - @ref WIZCHIP_register_W5200 : @ref Common_register_group_W5200 and @ref Socket_register_group_W5200 + * - @ref WIZCHIP_IO_Functions_W5200 : @ref Basic_IO_function_W5200, @ref Common_register_access_function_W5200 and @ref Socket_register_group_W5200 + */ + + /** + * @defgroup WIZCHIP_register_W5200 WIZCHIP register + * @ingroup W5200 + * @brief WIZCHIP register defines register group of W5200 . + * + * - \ref Common_register_group_W5200 : Common register group w5200 + * - \ref Socket_register_group_W5200 : \c SOCKET n register group w5200 + */ + + +/** + * @defgroup WIZCHIP_IO_Functions_W5200 WIZCHIP I/O functions + * @ingroup W5200 + * @brief This supports the basic I/O functions for \ref WIZCHIP_register_W5200. + * + * - Basic I/O function \n + * WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() \n\n + * + * - \ref Common_register_group_W5200 access functions \n + * -# @b Mode \n + * getMR(), setMR() + * -# @b Interrupt \n + * getIR(), setIR(), getIMR(), setIMR(), getIR2(), setIR2(), getIMR2(), setIMR2(), getINTLEVEL(), setINTLEVEL() + * -# Network Information \n + * getSHAR(), setSHAR(), getGAR(), setGAR(), getSUBR(), setSUBR(), getSIPR(), setSIPR() + * -# @b Retransmission \n + * getRCR(), setRCR(), getRTR(), setRTR() + * -# @b PPPoE \n + * getPTIMER(), setPTIMER(), getPMAGIC(), getPMAGIC() + * -# @b etc. \n + * getPHYSTATUS(), getVERSIONR() \n\n + * + * - \ref Socket_register_group_W5200 access functions \n + * -# SOCKET control \n + * getSn_MR(), setSn_MR(), getSn_CR(), setSn_CR(), getSn_IMR(), setSn_IMR(), getSn_IR(), setSn_IR() + * -# SOCKET information \n + * getSn_SR(), getSn_DHAR(), setSn_DHAR(), getSn_PORT(), setSn_PORT(), getSn_DIPR(), setSn_DIPR(), getSn_DPORT(), setSn_DPORT() + * getSn_MSSR(), setSn_MSSR() + * -# SOCKET communication \n + * getSn_RXMEM_SIZE(), setSn_RXMEM_SIZE(), getSn_TXMEM_SIZE(), setSn_TXMEM_SIZE() \n + * getSn_TX_RD(), getSn_TX_WR(), setSn_TX_WR() \n + * getSn_RX_RD(), setSn_RX_RD(), getSn_RX_WR() \n + * getSn_TX_FSR(), getSn_RX_RSR() + * -# IP header field \n + * getSn_FRAG(), setSn_FRAG(), getSn_TOS(), setSn_TOS() \n + * getSn_TTL(), setSn_TTL() + */ + +/** + * @defgroup Common_register_group_W5200 Common register + * @ingroup WIZCHIP_register_W5200 + * @brief Common register group\n + * It set the basic for the networking\n + * It set the configuration such as interrupt, network information, ICMP, etc. + * @details + * @sa MR : Mode register. + * @sa GAR, SUBR, SHAR, SIPR + * @sa INTLEVEL, IR, _IMR_, IR2, IMR2 : Interrupt. + * @sa _RTR_, _RCR_ : Data retransmission. + * @sa PTIMER, PMAGIC : PPPoE. + * @sa PHYSTATUS, VERSIONR : etc. + */ + + + /** + * @defgroup Socket_register_group_W5200 Socket register + * @ingroup WIZCHIP_register_W5200 + * @brief Socket register group\n + * Socket register configures and control SOCKETn which is necessary to data communication. + * @details + * @sa Sn_MR, Sn_CR, Sn_IR, Sn_IMR : SOCKETn Control + * @sa Sn_SR, Sn_PORT, Sn_DHAR, Sn_DIPR, Sn_DPORT : SOCKETn Information + * @sa Sn_MSSR, Sn_TOS, Sn_TTL, Sn_FRAG : Internet protocol. + * @sa Sn_RXMEM_SIZE, Sn_TXMEM_SIZE, Sn_TX_FSR, Sn_TX_RD, Sn_TX_WR, Sn_RX_RSR, Sn_RX_RD, Sn_RX_WR : Data communication + */ + + /** + * @defgroup Basic_IO_function_W5200 Basic I/O function + * @ingroup WIZCHIP_IO_Functions_W5200 + * @brief These are basic input/output functions to read values from register or write values to register. + */ + +/** + * @defgroup Common_register_access_function_W5200 Common register access functions + * @ingroup WIZCHIP_IO_Functions_W5200 + * @brief These are functions to access common registers. + */ + +/** + * @defgroup Socket_register_access_function_W5200 Socket register access functions + * @ingroup WIZCHIP_IO_Functions_W5200 + * @brief These are functions to access socket registers. + */ + + //----------------------------------------------------------------------------------- + +//----------------------------- W5200 Common Registers IOMAP ----------------------------- +/** + * @ingroup Common_register_group_W5200 + * @brief Mode Register address(R/W)\n + * \ref MR is used for S/W reset, ping block mode, PPPoE mode and etc. + * @details Each bit of \ref MR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    RST Reserved WOL PB PPPoE Reserved AI IND
    + * - \ref MR_RST : Reset + * - \ref MR_WOL : Wake on LAN + * - \ref MR_PB : Ping block + * - \ref MR_PPPOE : PPPoE mode + * - \ref MR_AI : Address Auto-Increment in Indirect Bus Interface + * - \ref MR_IND : Indirect Bus Interface mode + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) + #define MR (_WIZCHIP_IO_BASE_ + (0x0000)) // Mode +#else + #define MR (_W5200_IO_BASE_ + (0x0000)) // Mode +#endif + +/** + * @ingroup Common_register_group_W5200 + * @brief Gateway IP Register address(R/W) + * @details \ref GAR configures the default gateway address. + */ +#define GAR (_W5200_IO_BASE_ + (0x0001)) // GW Address + +/** + * @ingroup Common_register_group_W5200 + * @brief Subnet mask Register address(R/W) + * @details \ref SUBR configures the subnet mask address. + */ +#define SUBR (_W5200_IO_BASE_ + (0x0005)) // SN Mask Address + +/** + * @ingroup Common_register_group_W5200 + * @brief Source MAC Register address(R/W) + * @details \ref SHAR configures the source hardware address. + */ +#define SHAR (_W5200_IO_BASE_ + (0x0009)) // Source Hardware Address + +/** + * @ingroup Common_register_group_W5200 + * @brief Source IP Register address(R/W) + * @details \ref SIPR configures the source IP address. + */ +#define SIPR (_W5200_IO_BASE_ + (0x000F)) // Source IP Address + +// Reserved (_W5200_IO_BASE_ + (0x0013)) +// Reserved (_W5200_IO_BASE_ + (0x0014)) + +/** + * @ingroup Common_register_group_W5200 + * @brief Interrupt Register(R/W) + * @details \ref IR indicates the interrupt status. Each bit of \ref IR will be still until the bit will be written to by the host. + * If \ref IR is not equal to x00 INTn PIN is asserted to low until it is x00\n\n + * Each bit of \ref IR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    CONFLICT Reserved PPPoE Reserved Reserved Reserved Reserved Reserved
    + * - \ref IR_CONFLICT : IP conflict + * - \ref IR_PPPoE : PPPoE connection close + */ +#define IR (_W5200_IO_BASE_ + (0x0015)) // Interrupt + +/** + * @ingroup Common_register_group_W5200 + * @brief Socket Interrupt Mask Register(R/W) + * @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR2. + * When a bit of \ref _IMR_ is and the corresponding bit of \ref IR2 is Interrupt will be issued. + * In other words, if a bit of \ref _IMR_, an interrupt will be not issued even if the corresponding bit of \ref IR2 is set + * @note This Register is same operated as SMIR of W5100, W5300 and W5550.\n + * So, \ref setSIMR() set a value to _IMR_ for integrating with ioLibrary + */ +#define _IMR_ (_W5200_IO_BASE_ + (0x0016)) // Socket Interrupt Mask + +/** + * @ingroup Common_register_group_W5200 + * @brief Timeout register address( 1 is 100us )(R/W) + * @details \ref _RTR_ configures the retransmission timeout period. The unit of timeout period is 100us and the default of \ref _RTR_ is x07D0. + * And so the default timeout period is 200ms(100us X 2000). During the time configured by \ref _RTR_, W5200 waits for the peer response + * to the packet that is transmitted by \ref Sn_CR (CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command). + * If the peer does not respond within the \ref _RTR_ time, W5200 retransmits the packet or issues timeout. + */ +#define _RTR_ (_W5200_IO_BASE_ + (0x0017)) // Retry Time + +/** + * @ingroup Common_register_group_W5200 + * @brief Retry count register(R/W) + * @details \ref _RCR_ configures the number of time of retransmission. + * When retransmission occurs as many as ref _RCR_+1 Timeout interrupt is issued (\ref Sn_IR_TIMEOUT = '1'). + */ +#define _RCR_ (_W5200_IO_BASE_ + (0x0019)) // Retry Count + +// Reserved (_W5200_IO_BASE_ + (0x001A)) +// Reserved (_W5200_IO_BASE_ + (0x001B)) + +/** + * @ingroup Common_register_group_W5200 + * @brief PPP LCP Request Timer register in PPPoE mode(R) + * @details \ref PATR notifies authentication method that has been agreed at the connection with + * PPPoE Server. W5200 supports two types of Authentication method - PAP and CHAP. + */ +#define PATR (_W5200_IO_BASE_ + (0x001C)) + +/** + * @ingroup Common_register_group_W5200 + * @brief PPP LCP Request Timer register in PPPoE mode(R) + * @details \ref PPPALGO notifies authentication algorithm in PPPoE mode. For detailed information, + * please refer to PPPoE application note. + */ +#define PPPALGO (_W5200_IO_BASE_ + (0x001E)) // Authentication Algorithm in PPPoE + +/** + * @ingroup Common_register_group_W5200 + * @brief chip version register address(R) + * @details \ref VERSIONR always indicates the W5200 version as @b 0x03. + */ +#define VERSIONR (_W5200_IO_BASE_ + (0x001F)) // Chip version + +// Reserved (_W5200_IO_BASE_ + (0x0020)) +// Reserved (_W5200_IO_BASE_ + (0x0021)) +// Reserved (_W5200_IO_BASE_ + (0x0022)) +// Reserved (_W5200_IO_BASE_ + (0x0023)) +// Reserved (_W5200_IO_BASE_ + (0x0024)) +// Reserved (_W5200_IO_BASE_ + (0x0025)) +// Reserved (_W5200_IO_BASE_ + (0x0026)) +// Reserved (_W5200_IO_BASE_ + (0x0027)) + +/** + * @ingroup Common_register_group_W5200 + * @brief PPP LCP Request Timer register in PPPoE mode(R) + * @details \ref PTIMER configures the time for sending LCP echo request. The unit of time is 25ms. + */ +#define PTIMER (_W5200_IO_BASE_ + (0x0028)) // PPP LCP RequestTimer + +/** + * @ingroup Common_register_group_W5200 + * @brief PPP LCP Magic number register in PPPoE mode(R) + * @details \ref PMAGIC configures the 4bytes magic number to be used in LCP negotiation. + */ +#define PMAGIC (_W5200_IO_BASE_ + (0x0029)) // PPP LCP Magic number + +// Reserved (_W5200_IO_BASE_ + (0x002A)) +// Reserved (_W5200_IO_BASE_ + (0x002B)) +// Reserved (_W5200_IO_BASE_ + (0x002C)) +// Reserved (_W5200_IO_BASE_ + (0x002D)) +// Reserved (_W5200_IO_BASE_ + (0x002E)) +// Reserved (_W5200_IO_BASE_ + (0x002F)) + +/** + * @ingroup Common_register_group_W5200 + * @brief Set Interrupt low level timer register address(R/W) + * @details \ref INTLEVEL configures the Interrupt Assert Time. + */ +#define INTLEVEL (_W5200_IO_BASE_ + (0x0030)) // Interrupt Low Level Timer + +// Reserved (_W5200_IO_BASE_ + (0x0032)) +// Reserved (_W5200_IO_BASE_ + (0x0033)) + +/** + * @ingroup Common_register_group_W5200 + * @brief Socket Interrupt Register(R/W) + * @details \ref IR2 indicates the interrupt status of Socket.\n + * Each bit of \ref IR2 be still until \ref Sn_IR is cleared by the host.\n + * If \ref Sn_IR is not equal to x00 the n-th bit of \ref IR2 is and INTn PIN is asserted until \ref IR2 is x00 */ +#define IR2 (_W5200_IO_BASE_ + (0x0034)) // Socket Interrupt + +/** + * @ingroup Common_register_group_W5200 + * @brief PHYSTATUS(R/W) + * @details \ref PHYSTATUS is the Register to indicate W5200 status of PHY. + * + * + * + *
    7 6 5 4 3 2 1 0
    Reserved Reserved LINK POWERSAVE POWERDOWN Reserved Reserved Reserved
    + * - \ref PHYSTATUS_LINK : Link Status Register[Read Only] + * - \ref PHYSTATUS_POWERSAVE : Power save mode of PHY[R/W] + * - \ref PHYSTATUS_POWERDOWN : Power down mode of PHY[R/W] + */ +#define PHYSTATUS (_W5200_IO_BASE_ + (0x0035)) // PHY Status + +/** + * @ingroup Common_register_group_W5200 + * @brief Interrupt mask register(R/W) + * @details \ref IMR2 is used to mask interrupts. Each bit of \ref _IMR_ corresponds to each bit of \ref IR. + * When a bit of \ref IMR2 is and the corresponding bit of \ref IR is an interrupt will be issued. In other words, + * if a bit of \ref IMR2 is an interrupt will not be issued even if the corresponding bit of \ref IR is \n\n + * Each bit of \ref IMR2 defined as the following. + * + * + * + *
    7 6 5 4 3 2 1 0
    IM_IR7 Reserved IM_IR5 Reserved Reserved Reserved Reserved Reserved
    + * - \ref IM_IR7 : IP Conflict Interrupt Mask + * - \ref IM_IR5 : PPPoE Close Interrupt Mask + * @note This Register is same operated as _IMR_ of W5100, W5300 and W5550.\n + * So, \ref setIMR() set a value to IMR2 for integrating with ioLibrary + */ +#define IMR2 (_W5200_IO_BASE_ + (0x0036)) // Interrupt Mask + + +//----------------------------- W5200 Socket Registers ----------------------------- + +//--------------------------- For Backward Compatibility --------------------------- + +/** + * @ingroup Socket_register_group_W5200 + * @brief socket Mode register(R/W) + * @details \ref Sn_MR configures the option or protocol type of Socket n.\n\n + * Each bit of \ref Sn_MR defined as the following. + * + * + * + *
    7 6 5 4 3 2 1 0
    MULTI MF ND/MC Reserved Protocol[3] Protocol[2] Protocol[1] Protocol[0]
    + * - \ref Sn_MR_MULTI : Support UDP Multicasting + * - \ref Sn_MR_MF : Support MACRAW + * - \ref Sn_MR_ND : No Delayed Ack(TCP) flag + * - \ref Sn_MR_MC : IGMP version used in UDP mulitcasting + * - Protocol + * + * + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 0 0 0 Closed
    0 0 0 1 TCP
    0 0 1 0 UDP
    0 1 0 0 MACRAW
    + * - In case of Socket 0 + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 1 0 0 MACRAW
    0 1 0 1 PPPoE
    + * - \ref Sn_MR_MACRAW : MAC LAYER RAW SOCK \n + * - \ref Sn_MR_UDP : UDP + * - \ref Sn_MR_TCP : TCP + * - \ref Sn_MR_CLOSE : Unused socket + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0000)) // socket Mode register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Socket command register(R/W) + * @details This is used to set the command for Socket n such as OPEN, CLOSE, CONNECT, LISTEN, SEND, and RECEIVE.\n + * After W5200 accepts the command, the \ref Sn_CR register is automatically cleared to 0x00. + * Even though \ref Sn_CR is cleared to 0x00, the command is still being processed.\n + * To check whether the command is completed or not, please check the \ref Sn_IR or \ref Sn_SR. + * - \ref Sn_CR_OPEN : Initialize or open socket. + * - \ref Sn_CR_LISTEN : Wait connection request in TCP mode(Server mode) + * - \ref Sn_CR_CONNECT : Send connection request in TCP mode(Client mode) + * - \ref Sn_CR_DISCON : Send closing request in TCP mode. + * - \ref Sn_CR_CLOSE : Close socket. + * - \ref Sn_CR_SEND : Update TX buffer pointer and send data. + * - \ref Sn_CR_SEND_MAC : Send data with MAC address, so without ARP process. + * - \ref Sn_CR_SEND_KEEP : Send keep alive message. + * - \ref Sn_CR_RECV : Update RX buffer pointer and receive data. + * - In case of S0_MR(P3:P0) = S0_MR_PPPoE + * + * + * + * + * + * + * + *
    Value Symbol Description
    0x23 PCON PPPoE connection begins by transmitting PPPoE discovery packet
    0x24 PDISCON Closes PPPoE connection
    0x25 PCR In each phase, it transmits REQ message.
    0x26 PCN In each phase, it transmits NAK message.
    0x27 PCJ In each phase, it transmits REJECT message.
    + */ +#define Sn_CR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0001)) // channel Sn_CR register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Socket interrupt register(R) + * @details \ref Sn_IR indicates the status of Socket Interrupt such as establishment, termination, receiving data, timeout).\n + * When an interrupt occurs and the corresponding bit of \ref Sn_IMR is the corresponding bit of \ref Sn_IR becomes \n + * In order to clear the \ref Sn_IR bit, the host should write the bit to \n + * + * + * + *
    7 6 5 4 3 2 1 0
    PRECV PFAIL PNEXT SEND_OK TIMEOUT RECV DISCON CON
    + * - \ref Sn_IR_PRECV : PPP Receive Interrupt + * - \ref Sn_IR_PFAIL : PPP Fail Interrupt + * - \ref Sn_IR_PNEXT : PPP Next Phase Interrupt + * - \ref Sn_IR_SENDOK : SEND_OK Interrupt + * - \ref Sn_IR_TIMEOUT : TIMEOUT Interrupt + * - \ref Sn_IR_RECV : RECV Interrupt + * - \ref Sn_IR_DISCON : DISCON Interrupt + * - \ref Sn_IR_CON : CON Interrupt + */ +#define Sn_IR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0002)) // channel interrupt register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Socket status register(R) + * @details \ref Sn_SR indicates the status of Socket n.\n + * The status of Socket n is changed by \ref Sn_CR or some special control packet as SYN, FIN packet in TCP. + * @par Normal status + * - \ref SOCK_CLOSED : Closed + * - \ref SOCK_INIT : Initiate state + * - \ref SOCK_LISTEN : Listen state + * - \ref SOCK_ESTABLISHED : Success to connect + * - \ref SOCK_CLOSE_WAIT : Closing state + * - \ref SOCK_UDP : UDP socket + * - \ref SOCK_MACRAW : MAC raw mode socket + *@par Temporary status during changing the status of Socket n. + * - \ref SOCK_SYNSENT : This indicates Socket n sent the connect-request packet (SYN packet) to a peer. + * - \ref SOCK_SYNRECV : It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer. + * - \ref SOCK_FIN_WAIT : Connection state + * - \ref SOCK_CLOSING : Closing state + * - \ref SOCK_TIME_WAIT : Closing state + * - \ref SOCK_LAST_ACK : Closing state + */ +#define Sn_SR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0003)) // channel status register + +/** + * @ingroup Socket_register_group_W5200 + * @brief source port register(R/W) + * @details \ref Sn_PORT configures the source port number of Socket n. + * It is valid when Socket n is used in TCP/UDP mode. It should be set before OPEN command is ordered. +*/ +#define Sn_PORT(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0004)) // source port register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Peer MAC register address(R/W) + * @details \ref Sn_DHAR configures the destination hardware address of Socket n when using SEND_MAC command in UDP mode or + * it indicates that it is acquired in ARP-process by CONNECT/SEND command. + */ +#define Sn_DHAR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0006)) // Peer MAC register address + +/** + * @ingroup Socket_register_group_W5200 + * @brief Peer IP register address(R/W) + * @details \ref Sn_DIPR configures or indicates the destination IP address of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP client mode, it configures an IP address of TCP server before CONNECT command. + * In TCP server mode, it indicates an IP address of TCP client after successfully establishing connection. + * In UDP mode, it configures an IP address of peer to be received the UDP packet by SEND or SEND_MAC command. + */ +#define Sn_DIPR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x000C)) // Peer IP register address + +/** + * @ingroup Socket_register_group_W5200 + * @brief Peer port register address(R/W) + * @details \ref Sn_DPORT configures or indicates the destination port number of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP clientmode, it configures the listen port number of TCP server before CONNECT command. + * In TCP Servermode, it indicates the port number of TCP client after successfully establishing connection. + * In UDP mode, it configures the port number of peer to be transmitted the UDP packet by SEND/SEND_MAC command. + */ +#define Sn_DPORT(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0010)) // Peer port register address + +/** + * @ingroup Socket_register_group_W5200 + * @brief Maximum Segment Size(Sn_MSSR0) register address(R/W) + * @details \ref Sn_MSSR configures or indicates the MTU(Maximum Transfer Unit) of Socket n. + */ +#define Sn_MSSR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0012)) // Maximum Segment Size(Sn_MSSR0) register address + +/** + * @ingroup Socket_register_group_W5200 + * @brief IP Protocol(PROTO) Register(R/W) + * @details \ref Sn_PROTO that sets the protocol number field of the IP header at the IP layer. It is + * valid only in IPRAW mode, and ignored in other modes. + */ +#define Sn_PROTO(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0014)) // Protocol of IP Header field register in IP raw mode + +/** + * @ingroup Socket_register_group_W5200 + * @brief IP Type of Service(TOS) Register(R/W) + * @details \ref Sn_TOS configures the TOS(Type Of Service field in IP Header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TOS(sn) (WIZCHIP_SREG_BLOCK(sn) + 0x0015) // IP Type of Service(TOS) Register + +/** + * @ingroup Socket_register_group_W5200 + * @brief IP Time to live(TTL) Register(R/W) + * @details \ref Sn_TTL configures the TTL(Time To Live field in IP header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TTL(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0016)) // IP Time to live(TTL) Register + +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0017)) +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0018)) +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0019)) +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001A)) +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001B)) +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001C)) +// Reserved (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001D)) + +/** + * @ingroup Socket_register_group_W5200 + * @brief Receive memory size register(R/W) + * @details \ref Sn_RXMEM_SIZE configures the RX buffer block size of Socket n. + * Socket n RX Buffer Block size can be configured with 1,2,4,8, and 16 Kbytes. + * If a different size is configured, the data cannot be normally received from a peer. + * Although Socket n RX Buffer Block size is initially configured to 2Kbytes, + * user can re-configure its size using \ref Sn_RXMEM_SIZE. The total sum of \ref Sn_RXMEM_SIZE can not be exceed 16Kbytes. + * When exceeded, the data reception error is occurred. + */ +#define Sn_RXMEM_SIZE(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001E)) // Receive memory size reigster + +/** + * @ingroup Socket_register_group_W5200 + * @brief Transmit memory size register(R/W) + * @details \ref Sn_TXMEM_SIZE configures the TX buffer block size of Socket n. Socket n TX Buffer Block size can be configured with 1,2,4,8, and 16 Kbytes. + * If a different size is configured, the data can't be normally transmitted to a peer. + * Although Socket n TX Buffer Block size is initially configured to 2Kbytes, + * user can be re-configure its size using \ref Sn_TXMEM_SIZE. The total sum of \ref Sn_TXMEM_SIZE can not be exceed 16Kbytes. + * When exceeded, the data transmission error is occurred. + */ +#define Sn_TXMEM_SIZE(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x001F)) // Transmit memory size reigster + +/** + * @ingroup Socket_register_group_W5200 + * @brief Transmit free memory size register(R) + * @details \ref Sn_TX_FSR indicates the free size of Socket n TX Buffer Block. It is initialized to the configured size by \ref Sn_TXMEM_SIZE. + * Data bigger than \ref Sn_TX_FSR should not be saved in the Socket n TX Buffer because the bigger data overwrites the previous saved data not yet sent. + * Therefore, check before saving the data to the Socket n TX Buffer, and if data is equal or smaller than its checked size, + * transmit the data with SEND/SEND_MAC command after saving the data in Socket n TX buffer. But, if data is bigger than its checked size, + * transmit the data after dividing into the checked size and saving in the Socket n TX buffer. + */ +#define Sn_TX_FSR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0020)) // Transmit free memory size register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Transmit memory read pointer register address(R) + * @details \ref Sn_TX_RD is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001), it is re-initialized while connecting with TCP. + * After its initialization, it is auto-increased by SEND command. + * SEND command transmits the saved data from the current \ref Sn_TX_RD to the \ref Sn_TX_WR in the Socket n TX Buffer. + * After transmitting the saved data, the SEND command increases the \ref Sn_TX_RD as same as the \ref Sn_TX_WR. + * If its increment value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_TX_RD(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0022)) // Transmit memory read pointer register address + +/** + * @ingroup Socket_register_group_W5200 + * @brief Transmit memory write pointer register address(R/W) + * @details \ref Sn_TX_WR is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001), it is re-initialized while connecting with TCP.\n + * It should be read or be updated like as follows.\n + * 1. Read the starting address for saving the transmitting data.\n + * 2. Save the transmitting data from the starting address of Socket n TX buffer.\n + * 3. After saving the transmitting data, update \ref Sn_TX_WR to the increased value as many as transmitting data size. + * If the increment value exceeds the maximum value 0xFFFF(greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value.\n + * 4. Transmit the saved data in Socket n TX Buffer by using SEND/SEND command + */ +#define Sn_TX_WR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0024)) // Transmit memory write pointer register address + +/** + * @ingroup Socket_register_group_W5200 + * @brief Received data size register(R) + * @details \ref Sn_RX_RSR indicates the data size received and saved in Socket n RX Buffer. + * \ref Sn_RX_RSR does not exceed the \ref Sn_RXMEM_SIZE and is calculated as the difference between + * Socket n RX Write Pointer (\ref Sn_RX_WR)and Socket n RX Read Pointer (\ref Sn_RX_RD) + */ +#define Sn_RX_RSR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0026)) // Received data size register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Read point of Receive memory(R/W) + * @details \ref Sn_RX_RD is initialized by OPEN command. Make sure to be read or updated as follows.\n + * 1. Read the starting save address of the received data.\n + * 2. Read data from the starting address of Socket n RX Buffer.\n + * 3. After reading the received data, Update \ref Sn_RX_RD to the increased value as many as the reading size. + * If the increment value exceeds the maximum value 0xFFFF, that is, is greater than 0x10000 and the carry bit occurs, + * update with the lower 16bits value ignored the carry bit.\n + * 4. Order RECV command is for notifying the updated \ref Sn_RX_RD to W5200. + */ +#define Sn_RX_RD(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x0028)) // Read point of Receive memory + +/** + * @ingroup Socket_register_group_W5200 + * @brief Write point of Receive memory(R) + * @details \ref Sn_RX_WR is initialized by OPEN command and it is auto-increased by the data reception. + * If the increased value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_RX_WR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002A)) // Write point of Receive memory + +/** + * @ingroup Socket_register_group_W5200 + * @brief socket interrupt mask register(R) + * @details \ref Sn_IMR masks the interrupt of Socket n. + * Each bit corresponds to each bit of \ref Sn_IR. When a Socket n Interrupt is occurred and the corresponding bit of \ref Sn_IMR is + * the corresponding bit of \ref Sn_IR becomes When both the corresponding bit of \ref Sn_IMR and \ref Sn_IR are and the n-th bit of \ref IR is + * Host is interrupted by asserted INTn PIN to low. + */ +#define Sn_IMR(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002C)) // socket interrupt mask register + +/** + * @ingroup Socket_register_group_W5200 + * @brief Fragment field value in IP header register(R/W) + * @details \ref Sn_FRAG configures the FRAG(Fragment field in IP header). + */ +#define Sn_FRAG(sn) (_W5200_IO_BASE_ + WIZCHIP_SREG_BLOCK(sn) + (0x002D)) // frag field value in IP header register + + +//----------------------------- W5200 Register values ----------------------------- + +/* MODE register values */ +/** + * @brief Reset + * @details If this bit is All internal registers will be initialized. It will be automatically cleared as after S/W reset. + */ +#define MR_RST 0x80 ///< reset + +/** + * @brief Wake on LAN + * @details 0 : Disable WOL mode\n + * 1 : Enable WOL mode\n + * If WOL mode is enabled and the received magic packet over UDP has been normally processed, the Interrupt PIN (INTn) asserts to low. + * When using WOL mode, the UDP Socket should be opened with any source port number. (Refer to Socket n Mode Register (\ref Sn_MR) for opening Socket.) + * @note The magic packet over UDP supported by W5200 consists of 6 bytes synchronization stream (xFFFFFFFFFFFF and + * 16 times Target MAC address stream in UDP payload. The options such like password are ignored. You can use any UDP source port number for WOL mode. + */ +#define MR_WOL 0x20 ///< Wake on Lan + +/** + * @brief Ping block + * @details 0 : Disable Ping block\n + * 1 : Enable Ping block\n + * If the bit is it blocks the response to a ping request. + */ +#define MR_PB 0x10 ///< ping block + +/** + * @brief Enable PPPoE + * @details 0 : DisablePPPoE mode\n + * 1 : EnablePPPoE mode\n + * If you use ADSL, this bit should be '1'. + */ +#define MR_PPPOE 0x08 ///< enable pppoe + +/** + * @brief Address Auto-Increment in Indirect Bus Interface + * @details 0 : Disable auto-increment \n + * 1 : Enable auto-incremente \n + * At the Indirect Bus Interface mode, if this bit is set as ��1��, the address will + * be automatically increased by 1 whenever read and write are performed. + */ +#define MR_AI 0x02 ///< auto-increment in indirect mode + +/** + * @brief Indirect Bus Interface mode + * @details 0 : Disable Indirect bus Interface mode \n + * 1 : Enable Indirect bus Interface mode \n + * If this bit is set as ��1��, Indirect Bus Interface mode is set. + */ +#define MR_IND 0x01 ///< enable indirect mode + +/* IR register values */ +/** + * @brief Check IP conflict. + * @details Bit is set as when own source IP address is same with the sender IP address in the received ARP request. + */ +#define IR_CONFLICT 0x80 ///< check ip confict + +/** + * @brief Get the PPPoE close message. + * @details When PPPoE is disconnected during PPPoE mode, this bit is set. + */ +#define IR_PPPoE 0x20 ///< get the PPPoE close message + +/** + * @brief Link Status [Read Only] + * @details 0: Link down \n 1: Link up \n + */ +#define PHYSTATUS_LINK 0x20 + +/** + * @brief Power save mode of PHY + * @details 0: Disable Power save mode \n 1: Enable Power save mode \n + */ +#define PHYSTATUS_POWERSAVE 0x10 + +/** + * @brief Power down mode of PHY + * @details 0: Disable Power down mode \n 1: Enable Power down mode\n + */ +#define PHYSTATUS_POWERDOWN 0x08 + +// Sn_MR values +/* Sn_MR Default values */ +/** + * @brief Unused socket + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_CLOSE 0x00 ///< unused socket + +/** + * @brief TCP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_TCP 0x01 ///< TCP + +/** + * @brief UDP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_UDP 0x02 ///< UDP +#define Sn_MR_IPRAW 0x03 ///< IP LAYER RAW SOCK + +/** + * @brief MAC LAYER RAW SOCK + * @details This configures the protocol mode of Socket n. + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR_MACRAW 0x04 ///< MAC LAYER RAW SOCK + +/** + * @brief PPPoE + * @details This configures the protocol mode of Socket n. + * @note PPPoE mode should be only used in Socket 0. + */ +#define Sn_MR_PPPOE 0x05 ///< PPPoE + +/** + * @brief No Delayed Ack(TCP), Multicast flag + * @details 0 : Disable No Delayed ACK option\n + * 1 : Enable No Delayed ACK option\n + * This bit is applied only during TCP mode (P[3:0] = 001).\n + * When this bit is It sends the ACK packet without delay as soon as a Data packet is received from a peer.\n + * When this bit is It sends the ACK packet after waiting for the timeout time configured by \ref _RTR_. + */ +#define Sn_MR_ND 0x20 ///< No Delayed Ack(TCP) flag + +/* Sn_MR Default values */ +/** + * @brief Support UDP Multicasting + * @details 0 : disable Multicasting\n + * 1 : enable Multicasting\n + * This bit is applied only during UDP mode(P[3:0] = 010).\n + * To use multicasting, \ref Sn_DIPR & \ref Sn_DPORT should be respectively configured with the multicast group IP address & port number + * before Socket n is opened by OPEN command of \ref Sn_CR. + */ +#define Sn_MR_MC Sn_MR_ND ///< Select IGMP version 1(0) or 2(1) + +/** + * @brief Multicast Blocking in \ref Sn_MR_MACRAW mode + * @details 0 : using IGMP version 2\n + * 1 : using IGMP version 1\n + * This bit is applied only during UDP mode(P[3:0] = 010 and MULTI = '1') + * It configures the version for IGMP messages (Join/Leave/Report). + */ +#define Sn_MR_MF 0x40 ///< Use MAC filter +#define Sn_MR_MFEN Sn_MR_MF + +/* Sn_MR Default values */ +/** + * @brief Support UDP Multicasting + * @details 0 : disable Multicasting\n + * 1 : enable Multicasting\n + * This bit is applied only during UDP mode(P[3:0] = 010).\n + * To use multicasting, \ref Sn_DIPR & \ref Sn_DPORT should be respectively configured with the multicast group IP address & port number + * before Socket n is opened by OPEN command of \ref Sn_CR. + */ +#define Sn_MR_MULTI 0x80 ///< support multicating + +/* Sn_CR values */ +/** + * @brief Initialize or open socket + * @details Socket n is initialized and opened according to the protocol selected in Sn_MR(P3:P0). + * The table below shows the value of \ref Sn_SR corresponding to \ref Sn_MR.\n + * + * + * + * + * + * + * + * + *
    \b Sn_MR (P[3:0]) \b Sn_SR
    Sn_MR_CLOSE (000) --
    Sn_MR_TCP (001) SOCK_INIT (0x13)
    Sn_MR_UDP (010) SOCK_UDP (0x22)
    S0_MR_IPRAW (011) SOCK_IPRAW (0x32)
    S0_MR_MACRAW (100) SOCK_MACRAW (0x42)
    S0_MR_PPPoE (101) SOCK_PPPoE (0x5F)
    + */ +#define Sn_CR_OPEN 0x01 ///< initialize or open socket + +/** + * @brief Wait connection request in TCP mode(Server mode) + * @details This is valid only in TCP mode (Sn_MR(P3:P0) = \ref Sn_MR_TCP).// + * In this mode, Socket n operates as a 'TCP server' and waits for connection-request (SYN packet) from any 'TCP client'.// + * The \ref Sn_SR changes the state from SOCK_INIT to SOCKET_LISTEN.// + * When a 'TCP client' connection request is successfully established, + * the \ref Sn_SR changes from SOCK_LISTEN to SOCK_ESTABLISHED and the Sn_IR(0) becomes + * But when a 'TCP client' connection request is failed, Sn_IR(3) becomes and the status of \ref Sn_SR changes to SOCK_CLOSED. + */ +#define Sn_CR_LISTEN 0x02 ///< wait connection request in tcp mode(Server mode) + +/** + * @brief Send connection request in TCP mode(Client mode) + * @details To connect, a connect-request (SYN packet) is sent to TCP serverconfigured by \ref Sn_DIPR & Sn_DPORT(destination address & port). + * If the connect-request is successful, the \ref Sn_SR is changed to \ref SOCK_ESTABLISHED and the Sn_IR(0) becomes \n\n + * The connect-request fails in the following three cases.\n + * 1. When a @b ARPTO occurs (\ref Sn_IR[3] = '1') because destination hardware address is not acquired through the ARP-process.\n + * 2. When a @b SYN/ACK packet is not received and @b TCPTO (Sn_IR(3) ='1')\n + * 3. When a @b RST packet is received instead of a @b SYN/ACK packet. In these cases, \ref Sn_SR is changed to \ref SOCK_CLOSED. + * @note This is valid only in TCP mode and operates when Socket n acts as TCP client + */ +#define Sn_CR_CONNECT 0x04 ///< send connection request in tcp mode(Client mode) + +/** + * @brief Send closing request in TCP mode + * @details Regardless of TCP serveror TCP client the DISCON command processes the disconnect-process (Active closeor Passive close.\n + * @par Active close + * it transmits disconnect-request(FIN packet) to the connected peer\n + * @par Passive close + * When FIN packet is received from peer, a FIN packet is replied back to the peer.\n + * @details When the disconnect-process is successful (that is, FIN/ACK packet is received successfully), \ref Sn_SR is changed to \ref SOCK_CLOSED.\n + * Otherwise, TCPTO occurs (Sn_IR(3)='1') and then \ref Sn_SR is changed to \ref SOCK_CLOSED. + * @note Valid only in TCP mode. + */ +#define Sn_CR_DISCON 0x08 ///< send closing reqeuset in tcp mode + +/** + * @brief Close socket + * @details Sn_SR is changed to \ref SOCK_CLOSED. + */ +#define Sn_CR_CLOSE 0x10 + +/** + * @brief Update TX buffer pointer and send data + * @details SEND transmits all the data in the Socket n TX buffer.\n + * For more details, please refer to Socket n TX Free Size Register (\ref Sn_TX_FSR), Socket n, + * TX Write Pointer Register(\ref Sn_TX_WR), and Socket n TX Read Pointer Register(\ref Sn_TX_RD). + */ +#define Sn_CR_SEND 0x20 + +/** + * @brief Send data with MAC address, so without ARP process + * @details The basic operation is same as SEND.\n + * Normally SEND transmits data after destination hardware address is acquired by the automatic ARP-process(Address Resolution Protocol).\n + * But SEND_MAC transmits data without the automatic ARP-process.\n + * In this case, the destination hardware address is acquired from \ref Sn_DHAR configured by host, instead of APR-process. + * @note Valid only in UDP mode. + */ +#define Sn_CR_SEND_MAC 0x21 + +/** + * @brief Send keep alive message + * @details It checks the connection status by sending 1byte keep-alive packet.\n + * If the peer can not respond to the keep-alive packet during timeout time, the connection is terminated and the timeout interrupt will occur. + * @note Valid only in TCP mode. + */ +#define Sn_CR_SEND_KEEP 0x22 + +/** + * @brief Update RX buffer pointer and receive data + * @details RECV completes the processing of the received data in Socket n RX Buffer by using a RX read pointer register (\ref Sn_RX_RD).\n + * For more details, refer to Socket n RX Received Size Register (\ref Sn_RX_RSR), Socket n RX Write Pointer Register (\ref Sn_RX_WR), + * and Socket n RX Read Pointer Register (\ref Sn_RX_RD). + */ +#define Sn_CR_RECV 0x40 + +/** + * @brief PPPoE connection + * @details PPPoE connection begins by transmitting PPPoE discovery packet + */ +#define Sn_CR_PCON 0x23 + +/** + * @brief Closes PPPoE connection + * @details Closes PPPoE connection + */ +#define Sn_CR_PDISCON 0x24 + +/** + * @brief REQ message transmission + * @details In each phase, it transmits REQ message. + */ +#define Sn_CR_PCR 0x25 + +/** + * @brief NAK massage transmission + * @details In each phase, it transmits NAK message. + */ +#define Sn_CR_PCN 0x26 + +/** + * @brief REJECT message transmission + * @details In each phase, it transmits REJECT message. + */ +#define Sn_CR_PCJ 0x27 + +/* Sn_IR values */ +/** + * @brief PPP Receive Interrupt + * @details PPP Receive Interrupts when the option which is not supported is received. + */ +#define Sn_IR_PRECV 0x80 + +/** + * @brief PPP Fail Interrupt + * @details PPP Fail Interrupts when PAP Authentication is failed. + */ +#define Sn_IR_PFAIL 0x40 + +/** + * @brief PPP Next Phase Interrupt + * @details PPP Next Phase Interrupts when the phase is changed during ADSL connection process. + */ +#define Sn_IR_PNEXT 0x20 + +/** + * @brief SEND_OK Interrupt + * @details This is issued when SEND command is completed. + */ +#define Sn_IR_SENDOK 0x10 ///< complete sending + +/** + * @brief TIMEOUT Interrupt + * @details This is issued when ARPTO or TCPTO occurs. + */ +#define Sn_IR_TIMEOUT 0x08 ///< assert timeout + +/** + * @brief RECV Interrupt + * @details This is issued whenever data is received from a peer. + */ +#define Sn_IR_RECV 0x04 + +/** + * @brief DISCON Interrupt + * @details This is issued when FIN or FIN/ACK packet is received from a peer. + */ +#define Sn_IR_DISCON 0x02 + +/** + * @brief CON Interrupt + * @details This is issued one time when the connection with peer is successful and then \ref Sn_SR is changed to \ref SOCK_ESTABLISHED. + */ +#define Sn_IR_CON 0x01 + +/* Sn_SR values */ +/** + * @brief Closed + * @details This indicates that Socket n is released.\n + * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to \ref SOCK_CLOSED regardless of previous status. + */ +#define SOCK_CLOSED 0x00 ///< closed + +/** + * @brief Initiate state + * @details This indicates Socket n is opened with TCP mode.\n + * It is changed to \ref SOCK_INIT when Sn_MR(P[3:0]) = 001)and OPEN command is ordered.\n + * After \ref SOCK_INIT, user can use LISTEN /CONNECT command. + */ +#define SOCK_INIT 0x13 ///< init state + +/** + * @brief Listen state + * @details This indicates Socket n is operating as TCP servermode and waiting for connection-request (SYN packet) from a peer (TCP client).\n + * It will change to \ref SOCK_ESTABLISHED when the connection-request is successfully accepted.\n + * Otherwise it will change to \ref SOCK_CLOSED after TCPTO occurred (Sn_IR(TIMEOUT) = '1'). + */ +#define SOCK_LISTEN 0x14 + +/** + * @brief Connection state + * @details This indicates Socket n sent the connect-request packet (SYN packet) to a peer.\n + * It is temporarily shown when \ref Sn_SR is changed from \ref SOCK_INIT to \ref SOCK_ESTABLISHED by CONNECT command.\n + * If connect-accept(SYN/ACK packet) is received from the peer at SOCK_SYNSENT, it changes to \ref SOCK_ESTABLISHED.\n + * Otherwise, it changes to \ref SOCK_CLOSED after TCPTO (\ref Sn_IR[TIMEOUT] = '1') is occurred. + */ +#define SOCK_SYNSENT 0x15 + +/** + * @brief Connection state + * @details It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.\n + * If socket n sends the response (SYN/ACK packet) to the peer successfully, it changes to \ref SOCK_ESTABLISHED. \n + * If not, it changes to \ref SOCK_CLOSED after timeout occurs (\ref Sn_IR[TIMEOUT] = '1'). + */ +#define SOCK_SYNRECV 0x16 + +/** + * @brief Success to connect + * @details This indicates the status of the connection of Socket n.\n + * It changes to \ref SOCK_ESTABLISHED when the TCP SERVERprocessed the SYN packet from the TCP CLIENTduring \ref SOCK_LISTEN, or + * when the CONNECT command is successful.\n + * During \ref SOCK_ESTABLISHED, DATA packet can be transferred using SEND or RECV command. + */ +#define SOCK_ESTABLISHED 0x17 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_FIN_WAIT 0x18 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_CLOSING 0x1A + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to \ref SOCK_CLOSED. + */ +#define SOCK_TIME_WAIT 0x1B + +/** + * @brief Closing state + * @details This indicates Socket n received the disconnect-request (FIN packet) from the connected peer.\n + * This is half-closing status, and data can be transferred.\n + * For full-closing, DISCON command is used. But For just-closing, CLOSE command is used. + */ +#define SOCK_CLOSE_WAIT 0x1C + +/** + * @brief Closing state + * @details This indicates Socket n is waiting for the response (FIN/ACK packet) to the disconnect-request (FIN packet) by passive-close.\n + * It changes to \ref SOCK_CLOSED when Socket n received the response successfully, or when timeout occurs (\ref Sn_IR[TIMEOUT] = '1'). + */ +#define SOCK_LAST_ACK 0x1D + +/** + * @brief UDP socket + * @details This indicates Socket n is opened in UDP mode(Sn_MR(P[3:0]) = 010).\n + * It changes to SOCK_UDP when Sn_MR(P[3:0]) = 010 and OPEN command is ordered.\n + * Unlike TCP mode, data can be transfered without the connection-process. + */ +#define SOCK_UDP 0x22 ///< udp socket + +/** +* @brief IP raw mode socket + * @details TThe socket is opened in IPRAW mode. The SOCKET status is change to SOCK_IPRAW when Sn_MR (P3:P0) is + * Sn_MR_IPRAW and OPEN command is used.\n + * IP Packet can be transferred without a connection similar to the UDP mode. +*/ +#define SOCK_IPRAW 0x32 ///< ip raw mode socket + +/** + * @brief MAC raw mode socket + * @details This indicates Socket 0 is opened in MACRAW mode (S0_MR(P[3:0]) = 100and is valid only in Socket 0.\n + * It changes to SOCK_MACRAW when S0_MR(P[3:0] = 100)and OPEN command is ordered.\n + * Like UDP mode socket, MACRAW mode Socket 0 can transfer a MAC packet (Ethernet frame) without the connection-process. + */ +#define SOCK_MACRAW 0x42 ///< mac raw mode socket + +/** + * @brief PPPoE mode socket + * @details It is the status that SOCKET0 is open as PPPoE mode. It is changed to SOCK_PPPoE in case of S0_CR=OPEN and S0_MR + * (P3:P0)=S0_MR_PPPoE.\n + * It is temporarily used at the PPPoE +connection. + */ +#define SOCK_PPPOE 0x5F ///< pppoe socket + +// IP PROTOCOL +#define IPPROTO_IP 0 ///< Dummy for IP +#define IPPROTO_ICMP 1 ///< Control message protocol +#define IPPROTO_IGMP 2 ///< Internet group management protocol +#define IPPROTO_GGP 3 ///< GW^2 (deprecated) +#define IPPROTO_TCP 6 ///< TCP +#define IPPROTO_PUP 12 ///< PUP +#define IPPROTO_UDP 17 ///< UDP +#define IPPROTO_IDP 22 ///< XNS idp +#define IPPROTO_ND 77 ///< UNOFFICIAL net disk protocol +#define IPPROTO_RAW 255 ///< Raw IP packet + +/** + * @brief Enter a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n \n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt.\n + * In OS environment, You can replace it to critical section api supported by OS. + * + * \sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * \sa WIZCHIP_CRITICAL_EXIT() + */ +#define WIZCHIP_CRITICAL_ENTER() WIZCHIP.CRIS._enter() + +#ifdef _exit +#undef _exit +#endif + +/** + * @brief Exit a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n\n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt. \n + * In OS environment, You can replace it to critical section api supported by OS. + * + * @sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * @sa WIZCHIP_CRITICAL_ENTER() + */ +#define WIZCHIP_CRITICAL_EXIT() WIZCHIP.CRIS._exit() + + + +//////////////////////// +// Basic I/O Function // +//////////////////////// +/** + * @ingroup Basic_IO_function_W5200 + * @brief It reads 1 byte value from a register. + * @param AddrSel Register address + * @return The value of register + */ +uint8_t WIZCHIP_READ (uint32_t AddrSel); + +/** + * @ingroup Basic_IO_function_W5200 + * @brief It writes 1 byte value to a register. + * @param AddrSel Register address + * @param wb Write data + * @return void + */ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ); + +/** + * @ingroup Basic_IO_function_W5200 + * @brief It reads sequence data from registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to read data + * @param len Data length + */ +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5200 + * @brief It writes sequence data to registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to write data + * @param len Data length + */ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + + +///////////////////////////////// +// Common Register IO function // +///////////////////////////////// + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set Mode Register + * @param (uint8_t)mr The value to be set. + * @sa getMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define setMR(mr) WIZCHIP_WRITE(MR,mr) +#else + #define setMR(mr) (*((uint8_t*)MR) = mr) +#endif + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get @ref MR. + * @return uint8_t. The value of Mode register. + * @sa setMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #define getMR() WIZCHIP_READ(MR) +#else + #define getMR() (*(uint8_t*)MR) +#endif + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set @ref GAR. + * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes. + * @sa getGAR() + */ +#define setGAR(gar) \ + WIZCHIP_WRITE_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get @ref GAR. + * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes. + * @sa setGAR() + */ +#define getGAR(gar) \ + WIZCHIP_READ_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set @ref SUBR. + * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes. + * @note If subr is null pointer, set the backup subnet to SUBR. \n + * If subr is 0.0.0.0, back up SUBR and clear it. \n + * Otherwize, set subr to SUBR + * @sa getSUBR() + */ +#define setSUBR(subr) \ + WIZCHIP_WRITE_BUF(SUBR, subr,4) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get @ref SUBR. + * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes. + * @sa setSUBR() + */ +#define getSUBR(subr) \ + WIZCHIP_READ_BUF(SUBR, subr, 4) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set @ref SHAR. + * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + * @sa getSHAR() + */ +#define setSHAR(shar) \ + WIZCHIP_WRITE_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get @ref SHAR. + * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + * @sa setSHAR() + */ +#define getSHAR(shar) \ + WIZCHIP_READ_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set @ref SIPR. + * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes. + * @sa getSIPR() +*/ +#define setSIPR(sipr) \ + WIZCHIP_WRITE_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get @ref SIPR. + * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes. + * @sa setSIPR() + */ +#define getSIPR(sipr) \ + WIZCHIP_READ_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref IR register + * @param (uint8_t)ir Value to set \ref IR register. + * @sa getIR() + */ +#define setIR(ir) \ + WIZCHIP_WRITE(IR, (ir & 0xA0)) +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref IR register + * @return uint8_t. Value of \ref IR register. + * @sa setIR() + */ +#define getIR() \ + (WIZCHIP_READ(IR) & 0xA0) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref IMR2 register + * @param (uint8_t)imr Value to set @ref IMR2 register. + * @sa getIMR() + */ +//M20150410 : Replace _IMR_ with IMR2 for integrating with ioLibrary +/* +#define setIMR(imr) \ + WIZCHIP_WRITE(_IMR_, imr) +*/ +#define setIMR(imr) \ + WIZCHIP_WRITE(IMR2, imr & 0xA0) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref IMR2 register + * @return uint8_t. Value of @ref IMR2 register. + * @sa setIMR() + */ +//M20150410 : Replace _IMR_ with IMR2 for integrating with ioLibrary +/* +#define getIMR() \ + WIZCHIP_READ(_IMR_) +*/ +#define getIMR() \ + (WIZCHIP_READ(IMR2) & 0xA0) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref _RTR_ register + * @param (uint16_t)rtr Value to set @ref _RTR_ register. + * @sa getRTR() + */ +#define setRTR(rtr) {\ + WIZCHIP_WRITE(_RTR_, (uint8_t)(rtr >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(_RTR_,1), (uint8_t) rtr); \ + } + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref _RTR_ register + * @return uint16_t. Value of @ref _RTR_ register. + * @sa setRTR() + */ +#define getRTR() \ + (((uint16_t)WIZCHIP_READ(_RTR_) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(_RTR_,1))) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref _RCR_ register + * @param (uint8_t)rcr Value to set @ref _RCR_ register. + * @sa getRCR() + */ +#define setRCR(rcr) \ + WIZCHIP_WRITE(_RCR_, rcr) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref _RCR_ register + * @return uint8_t. Value of @ref _RCR_ register. + * @sa setRCR() + */ +#define getRCR() \ + WIZCHIP_READ(_RCR_) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref PATR register + * @return uint16_t. Value to set \ref PATR register + */ +#define getPATR() \ + (((uint16_t)WIZCHIP_READ(PATR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PATR,1))) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref PPPALGO register + * @return uint8_t. Value to set \ref PPPALGO register + */ +#define getPPPALGO() \ + WIZCHIP_READ(PPPALGO) + + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref VERSIONR register + * @return uint8_t. Value to set \ref VERSIONR register + */ +#define getVERSIONR() \ + WIZCHIP_READ(VERSIONR) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref PTIMER register + * @param (uint8_t)ptimer Value to set \ref PTIMER register. + * @sa getPTIMER() + */ +#define setPTIMER(ptimer) \ + WIZCHIP_WRITE(PTIMER, ptimer) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref PTIMER register + * @return uint8_t. Value of @ref PTIMER register. + * @sa setPTIMER() + */ +#define getPTIMER() \ + WIZCHIP_READ(PTIMER) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref PMAGIC register + * @param (uint8_t)pmagic Value to set @ref PMAGIC register. + * @sa getPMAGIC() + */ +#define setPMAGIC(pmagic) \ + WIZCHIP_WRITE(PMAGIC, pmagic) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref PMAGIC register + * @return uint8_t. Value of @ref PMAGIC register. + * @sa setPMAGIC() + */ +#define getPMAGIC() \ + WIZCHIP_READ(PMAGIC) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set @ref INTLEVEL register + * @param (uint16_t)intlevel Value to set @ref INTLEVEL register. + * @sa getINTLEVEL() + */ +#define setINTLEVEL(intlevel) {\ + WIZCHIP_WRITE(INTLEVEL, (uint8_t)(intlevel >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(INTLEVEL,1), (uint8_t) intlevel); \ + } +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get @ref INTLEVEL register + * @return uint16_t. Value of @ref INTLEVEL register. + * @sa setINTLEVEL() + */ +#define getINTLEVEL() \ + (((uint16_t)WIZCHIP_READ(INTLEVEL) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(INTLEVEL,1))) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref IR2 register + * @param (uint8_t)ir2 Value to set \ref IR2 register. + * @sa getIR2() + */ +#define setIR2(ir2) \ + WIZCHIP_WRITE(IR2, ir2) +#define setSIR(ir2) setIR2(ir2) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref IR2 register + * @return uint8_t. Value of \ref IR2 register. + * @sa setIR2() + */ +#define getIR2() \ + WIZCHIP_READ(IR2) +#define getSIR() getIR2() + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref PHYSTATUS register + * @return uint8_t. Value to set \ref PHYSTATUS register. + */ +#define getPHYSTATUS() \ + WIZCHIP_READ(PHYSTATUS) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Set \ref _IMR_ register + * @param (uint8_t)imr2 Value to set \ref IMR2 register. + * @sa getIMR2() + * @note If possible, Don't use this function. Instead, Use setSIMR() for compatible with ioLibrary. + */ + //M20150410 : Replace IMR2 with _IMR_ for integrating with ioLibrary +/* +#define setIMR2(imr2) \ + WIZCHIP_WRITE(IMR2, (imr2 & 0xA0)) +*/ +#define setIMR2(imr2) \ + WIZCHIP_WRITE(_IMR_, imr2) +#define setSIMR(imr2) setIMR2(imr2) + +/** + * @ingroup Common_register_access_function_W5200 + * @brief Get \ref _IMR_ register + * @return uint8_t. Value of \ref IMR2 register. + * @sa setIMR2() + */ + //M20150410 : Replace IMR2 with _IMR_ for integrating with ioLibrary +/* +#define getIMR2() \ + (WIZCHIP_READ(IMR2) & 0xA0) +*/ +#define getIMR2() \ + WIZCHIP_READ(_IMR_) +#define getSIMR() getIMR2() +/////////////////////////////////// +// Socket N register I/O function // +/////////////////////////////////// +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_MR register + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * @param mr Value to set @ref Sn_MR + * @sa getSn_MR() + */ +#define setSn_MR(sn, mr) \ + WIZCHIP_WRITE(Sn_MR(sn),mr) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_MR register + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ expect bit 4. + * @return Value of @ref Sn_MR. + * @sa setSn_MR() + */ +#define getSn_MR(sn) \ + WIZCHIP_READ(Sn_MR(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)cr Value to set @ref Sn_CR + * @sa getSn_CR() + */ +#define setSn_CR(sn, cr) \ + WIZCHIP_WRITE(Sn_CR(sn), cr) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_CR. + * @sa setSn_CR() + */ +#define getSn_CR(sn) \ + WIZCHIP_READ(Sn_CR(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)ir Value to set @ref Sn_IR + * @sa getSn_IR() + */ +#define setSn_IR(sn, ir) \ + WIZCHIP_WRITE(Sn_IR(sn), ir) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_IR. + * @sa setSn_IR() + */ +#define getSn_IR(sn) \ + WIZCHIP_READ(Sn_IR(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)imr Value to set @ref Sn_IMR + * @sa getSn_IMR() +*/ +#define setSn_IMR(sn, imr) \ + WIZCHIP_WRITE(Sn_IMR(sn), imr) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_IMR. + * @sa setSn_IMR() + */ +#define getSn_IMR(sn) \ + WIZCHIP_READ(Sn_IMR(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_SR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_SR. + */ +#define getSn_SR(sn) \ + WIZCHIP_READ(Sn_SR(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)port Value to set @ref Sn_PORT. + * @sa getSn_PORT() + */ +#define setSn_PORT(sn, port) { \ + WIZCHIP_WRITE(Sn_PORT(sn), (uint8_t)(port >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1), (uint8_t) port); \ + } + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_PORT. + * @sa setSn_PORT() + */ +#define getSn_PORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_PORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes. + * @sa getSn_DHAR() + */ +#define setSn_DHAR(sn, dhar) \ + WIZCHIP_WRITE_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes. + * @sa setSn_DHAR() + */ +#define getSn_DHAR(sn, dhar) \ + WIZCHIP_READ_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes. + * @sa getSn_DIPR() + */ +#define setSn_DIPR(sn, dipr) \ + WIZCHIP_WRITE_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes. + * @sa SetSn_DIPR() + */ +#define getSn_DIPR(sn, dipr) \ + WIZCHIP_READ_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)dport Value to set @ref Sn_DPORT + * @sa getSn_DPORT() + */ +#define setSn_DPORT(sn, dport) { \ + WIZCHIP_WRITE(Sn_DPORT(sn), (uint8_t) (dport>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1), (uint8_t) dport); \ + } + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_DPORT. + * @sa setSn_DPORT() + */ +#define getSn_DPORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_DPORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)mss Value to set @ref Sn_MSSR + * @sa setSn_MSSR() + */ +#define setSn_MSSR(sn, mss) { \ + WIZCHIP_WRITE(Sn_MSSR(sn), (uint8_t)(mss>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1), (uint8_t) mss); \ + } + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_MSSR. + * @sa setSn_MSSR() + */ +#define getSn_MSSR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_MSSR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_PROTO register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)proto Value to set \ref Sn_PROTO + * @sa getSn_PROTO() + */ +//M20150601 : Fixed Wrong Register address +/* +#define setSn_PROTO(sn, proto) \ + WIZCHIP_WRITE(Sn_TOS(sn), tos) +*/ +#define setSn_PROTO(sn, proto) \ + WIZCHIP_WRITE(Sn_PROTO(sn), proto) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_PROTO register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_PROTO. + * @sa setSn_PROTO() + */ +//M20150601 : Fixed Wrong Register address +/* +#define getSn_PROTO(sn) \ + WIZCHIP_READ(Sn_TOS(sn)) +*/ +#define getSn_PROTO(sn) \ + WIZCHIP_READ(Sn_PROTO(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)tos Value to set @ref Sn_TOS + * @sa getSn_TOS() + */ +#define setSn_TOS(sn, tos) \ + WIZCHIP_WRITE(Sn_TOS(sn), tos) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of Sn_TOS. + * @sa setSn_TOS() + */ +#define getSn_TOS(sn) \ + WIZCHIP_READ(Sn_TOS(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @param (uint8_t)ttl Value to set @ref Sn_TTL + * @sa getSn_TTL() + */ +#define setSn_TTL(sn, ttl) \ + WIZCHIP_WRITE(Sn_TTL(sn), ttl) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of @ref Sn_TTL. + * @sa setSn_TTL() + */ +#define getSn_TTL(sn) \ + WIZCHIP_READ(Sn_TTL(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_RXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @param (uint8_t)rxmemsize Value to set \ref Sn_RXMEM_SIZE + * @sa getSn_RXMEM_SIZE() + */ +#define setSn_RXMEM_SIZE(sn, rxmemsize) \ + WIZCHIP_WRITE(Sn_RXMEM_SIZE(sn),rxmemsize) + +#define setSn_RXBUF_SIZE(sn,rxmemsize) setSn_RXMEM_SIZE(sn,rxmemsize) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_RXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_RXMEM. + * @sa setSn_RXMEM_SIZE() + */ +#define getSn_RXMEM_SIZE(sn) \ + WIZCHIP_READ(Sn_RXMEM_SIZE(sn)) + +#define getSn_RXBUF_SIZE(sn) getSn_RXMEM_SIZE(sn) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_TXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)txmemsize Value to set \ref Sn_TXMEM_SIZE + * @sa getSn_TXMEM_SIZE() + */ +#define setSn_TXMEM_SIZE(sn, txmemsize) \ + WIZCHIP_WRITE(Sn_TXMEM_SIZE(sn), txmemsize) + +#define setSn_TXBUF_SIZE(sn, txmemsize) setSn_TXMEM_SIZE(sn,txmemsize) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_TXMEM_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_TXMEM_SIZE. + * @sa setSn_TXMEM_SIZE() + */ +#define getSn_TXMEM_SIZE(sn) \ + WIZCHIP_READ(Sn_TXMEM_SIZE(sn)) + +#define getSn_TXBUF_SIZE(sn) getSn_TXMEM_SIZE(sn) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_TX_FSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_FSR. + */ +uint16_t getSn_TX_FSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_TX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_RD. + */ +#define getSn_TX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)txwr Value to set @ref Sn_TX_WR + * @sa GetSn_TX_WR() + */ +#define setSn_TX_WR(sn, txwr) { \ + WIZCHIP_WRITE(Sn_TX_WR(sn), (uint8_t)(txwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1), (uint8_t) txwr); \ + } + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_TX_WR. + * @sa setSn_TX_WR() + */ +#define getSn_TX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_RX_RSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_RSR. + */ +uint16_t getSn_RX_RSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD + * @sa getSn_RX_RD() + */ +#define setSn_RX_RD(sn, rxrd) { \ + WIZCHIP_WRITE(Sn_RX_RD(sn), (uint8_t)(rxrd>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1), (uint8_t) rxrd); \ + } + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_RD. + * @sa setSn_RX_RD() + */ +#define getSn_RX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)rxwr Value to set \ref Sn_RX_WR + * @sa getSn_RX_WR() + */ +#define setSn_RX_WR(sn, rxwr) { \ + WIZCHIP_WRITE(Sn_RX_WR(sn), (uint8_t)(rxwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1), (uint8_t) rxwr); \ + } + + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_RX_WR. + */ +#define getSn_RX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)imr Value to set \ref Sn_IMR + * @sa getSn_IMR() + */ +#define setSn_IMR(sn ,imr) \ + WIZCHIP_WRITE(Sn_IMR(sn), imr) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_IMR. + * @sa setSn_IMR() + */ +#define getSn_IMR(sn) \ + WIZCHIP_READ(Sn_IMR(sn)) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Set @ref Sn_FRAG register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint16_t)frag Value to set \ref Sn_FRAG + * @sa getSn_FRAG() + */ +#define setSn_FRAG(sn, frag) { \ + WIZCHIP_WRITE(Sn_FRAG(sn), (uint8_t)(frag >>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1), (uint8_t) frag); \ + } + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get @ref Sn_FRAG register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of @ref Sn_FRAG. + * @sa setSn_FRAG() + */ +#define getSn_FRAG(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_FRAG(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1))) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get the max RX buffer size of socket sn + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Max buffer size + */ +#define getSn_RxMAX(sn) \ + ((uint16_t)getSn_RXMEM_SIZE(sn) << 10) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get the max TX buffer size of socket sn + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Max buffer size + */ +#define getSn_TxMAX(sn) \ + ((uint16_t)getSn_TXMEM_SIZE(sn) << 10) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get the mask of socket sn RX buffer. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Mask value + */ +#define getSn_RxMASK(sn) \ + ((uint16_t)getSn_RxMAX(sn) - 1) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get the mask of socket sn TX buffer + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Mask value + */ +#define getSn_TxMASK(sn) \ + ((uint16_t)getSn_TxMAX(sn) - 1) + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get the base address of socket sn RX buffer. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n RX buffer base address. + */ +uint16_t getSn_RxBASE(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5200 + * @brief Get the base address of socket sn TX buffer. + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint16_t. Value of Socket n TX buffer base address. + */ +uint16_t getSn_TxBASE(uint8_t sn); + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// +/** + * @ingroup Basic_IO_function_W5200 + * @brief It copies data to internal TX memory + * + * @details This function reads the Tx write pointer register and after that, + * it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + * and updates the Tx write pointer register. + * This function is being called by send() and sendto() function also. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param wizdata Pointer buffer to write data + * @param len Data length + * @sa wiz_recv_data() + */ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5200 + * @brief It copies data to your buffer from internal RX memory + * + * @details This function read the Rx read pointer register and after that, + * it copies the received data from internal RX memory + * to wizdata(pointer variable) of the length of len(variable) bytes. + * This function is being called by recv() also. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param wizdata Pointer buffer to read data + * @param len Data length + * @sa wiz_send_data() + */ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function_W5200 + * @brief It discard the received data in RX memory. + * @details It discards the data of the length of len(variable) bytes in internal RX memory. + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param len Data length + */ +void wiz_recv_ignore(uint8_t sn, uint16_t len); + +/// \cond DOXY_APPLY_CODE +#endif +/// \endcond + +#ifdef __cplusplus +} +#endif + +#endif //_W5200_H_ + + + diff --git a/Ethernet/W5300/w5300.c b/Ethernet/W5300/w5300.c new file mode 100644 index 0000000..4b5e60b --- /dev/null +++ b/Ethernet/W5300/w5300.c @@ -0,0 +1,225 @@ +//***************************************************************************** +// +//! \file w5300.h +//! \brief W5300 HAL implement File. +//! \version 1.0.0 +//! \date 2015/05/01 +//! \par Revision history +//! <2015/05/01> 1st Released for integrating with ioLibrary +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2015, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#include +#include "wizchip_conf.h" + +#if _WIZCHIP_ == 5300 + + extern uint8_t sock_remained_byte[_WIZCHIP_SOCK_NUM_]; + extern uint8_t sock_pack_info[_WIZCHIP_SOCK_NUM_]; + + +/*********************** + * Basic I/O Function * + ***********************/ + +void WIZCHIP_WRITE(uint32_t AddrSel, uint16_t wb ) +{ + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) ) + #if(_WIZCHIP_IO_BUS_WIDTH_ == 8) + WIZCHIP.IF.BUS._write_data(AddrSel, (uint8_t)(wb>>8)); + WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(AddrSel,1),(uint8_t)wb); + #elif(_WIZCHIP_IO_BUS_WIDTH_ == 16) + WIZCHIP.IF.BUS._write_data(AddrSel, wb); + #else + #error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16" + #endif +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + #if(_WIZCHIP_IO_BUS_WIDTH_ == 8) + WIZCHIP.IF.BUS._write_data(IDM_AR, (uint8_t)(AddrSel >> 8)); + WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(IDM_AR,1),(uint8_t)AddrSel); + WIZCHIP.IF.BUS._write_data(IDM_DR,(uint8_t)(wb>>8)); + WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(IDM_DR,1),(uint8_t)wb); + #elif(_WIZCHIP_IO_BUS_WIDTH_ == 16) + WIZCHIP.IF.BUS._write_data(IDM_AR, (uint16_t)AddrSel); + WIZCHIP.IF.BUS._write_data(IDM_DR, wb); + #else + #error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16" + #endif +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5300. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} + +uint16_t WIZCHIP_READ(uint32_t AddrSel) +{ + uint16_t ret; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + +#if ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) ) + #if (_WIZCHIP_IO_BUS_WIDTH_ == 8) + ret = (((uint16_t)WIZCHIP.IF.BUS._read_data(AddrSel)) << 8) | + (((uint16_t)WIZCHIP.IF.BUS._read_data(WIZCHIP_OFFSET_INC(AddrSel,1))) & 0x00FF) ; + #elif(_WIZCHIP_IO_BUS_WIDTH_ == 16) + ret = WIZCHIP.IF.BUS._read_data(AddrSel); + #else + #error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16" + #endif +#elif ( (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) ) + #if(_WIZCHIP_IO_BUS_WIDTH_ == 8) + WIZCHIP.IF.BUS._write_data(IDM_AR, (uint8_t)(AddrSel >> 8)); + WIZCHIP.IF.BUS._write_data(WIZCHIP_OFFSET_INC(IDM_AR,1),(uint8_t)AddrSel); + ret = (((uint16_t)WIZCHIP.IF.BUS._read_data(IDM_DR)) << 8) | + (((uint16_t)WIZCHIP.IF.BUS._read_data(WIZCHIP_OFFSET_INC(IDM_DR,1))) & 0x00FF); + #elif(_WIZCHIP_IO_BUS_WIDTH_ == 16) + WIZCHIP.IF.BUS._write_data(IDM_AR, (uint16_t)AddrSel); + ret = WIZCHIP.IF.BUS._read_data(IDM_DR); + #else + #error "Abnoraml _WIZCHIP_IO_BUS_WIDTH_. Should be 8 or 16" + #endif +#else + #error "Unknown _WIZCHIP_IO_MODE_ in W5300. !!!" +#endif + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); + return ret; +} + + +void setTMSR(uint8_t sn,uint8_t tmsr) +{ + uint16_t tmem; + tmem = WIZCHIP_READ(WIZCHIP_OFFSET_INC(TMS01R, (sn & 0xFE))); + if(sn & 0x01) tmem = (tmem & 0xFF00) | (((uint16_t)tmsr ) & 0x00FF) ; + else tmem = (tmem & 0x00FF) | (((uint16_t)tmsr) << 8) ; + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(TMS01R, (sn & 0xFE)),tmem); +} + +uint8_t getTMSR(uint8_t sn) +{ + if(sn & 0x01) + return (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(TMS01R, (sn & 0xFE))) & 0x00FF); + return (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(TMS01R, (sn & 0xFE))) >> 8); +} + +void setRMSR(uint8_t sn,uint8_t rmsr) +{ + uint16_t rmem; + rmem = WIZCHIP_READ(WIZCHIP_OFFSET_INC(RMS01R, (sn & 0xFE))); + if(sn & 0x01) rmem = (rmem & 0xFF00) | (((uint16_t)rmsr ) & 0x00FF) ; + else rmem = (rmem & 0x00FF) | (((uint16_t)rmsr) << 8) ; + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(RMS01R, (sn & 0xFE)),rmem); +} + +uint8_t getRMSR(uint8_t sn) +{ + if(sn & 0x01) + return (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(RMS01R, (sn & 0xFE))) & 0x00FF); + return (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(RMS01R, (sn & 0xFE))) >> 8); +} + +uint32_t getSn_TX_FSR(uint8_t sn) +{ + uint32_t free_tx_size=0; + uint32_t free_tx_size1=1; + while(1) + { + free_tx_size = (((uint32_t)WIZCHIP_READ(Sn_TX_FSR(sn))) << 16) | + (((uint32_t)WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),2))) & 0x0000FFFF); // read + if(free_tx_size == free_tx_size1) break; // if first == sencond, Sn_TX_FSR value is valid. + free_tx_size1 = free_tx_size; // save second value into first + } + return free_tx_size; +} + +uint32_t getSn_RX_RSR(uint8_t sn) +{ + uint32_t received_rx_size=0; + uint32_t received_rx_size1=1; + while(1) + { + received_rx_size = (((uint32_t)WIZCHIP_READ(Sn_RX_RSR(sn))) << 16) | + (((uint32_t)WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),2))) & 0x0000FFFF); + if(received_rx_size == received_rx_size1) break; + received_rx_size1 = received_rx_size; // if first == sencond, Sn_RX_RSR value is valid. + } // save second value into first + return received_rx_size + (uint32_t)((sock_pack_info[sn] & 0x02) ? 1 : 0); +} + + +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint32_t len) +{ + uint32_t i = 0; + if(len == 0) return; + + for(i = 0; i < len ; i += 2) + setSn_TX_FIFOR(sn, (((uint16_t)wizdata[i]) << 8) | (((uint16_t)wizdata[i+1]) & 0x00FF)) +} + +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint32_t len) +{ + uint16_t rd = 0; + uint32_t i = 0; + + if(len == 0) return; + + for(i = 0; i < len; i++) + { + if((i & 0x01)==0) + { + rd = getSn_RX_FIFOR(sn); + wizdata[i] = (uint8_t)(rd >> 8); + } + else wizdata[i] = (uint8_t)rd; // For checking the memory access violation + } + sock_remained_byte[sn] = (uint8_t)rd; // back up the remaind fifo byte. +} + +void wiz_recv_ignore(uint8_t sn, uint32_t len) +{ + uint32_t i = 0; + for(i = 0; i < len ; i += 2) getSn_RX_FIFOR(sn); +} + + +#endif diff --git a/Ethernet/W5300/w5300.h b/Ethernet/W5300/w5300.h new file mode 100644 index 0000000..a8bcd18 --- /dev/null +++ b/Ethernet/W5300/w5300.h @@ -0,0 +1,2336 @@ +#ifndef _W5300_H_ +#define _W5300_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +//***************************************************************************** +// +//! \file w5300.h +//! \brief W5300 HAL Header File. +//! \version 1.0.0 +//! \date 2015/05/01 +//! \par Revision history +//! <2015/05/01> 1st Released for integrating with ioLibrary +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2015, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +#include +#include "wizchip_conf.h" + +/// \cond DOXY_APPLY_CODE +#if (_WIZCHIP_ == 5300) +/// \endcond + +#define _WIZCHIP_SN_BASE_ (0x0200) +#define _WIZCHIP_SN_SIZE_ (0x0040) + + +#define WIZCHIP_CREG_BLOCK 0x00 ///< Common register block +#define WIZCHIP_SREG_BLOCK(N) (_WIZCHIP_SN_BASE_+ _WIZCHIP_SN_SIZE_*N) ///< Socket N register block + +#define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + N) ///< Increase offset address + +#if (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_DIR_) + #define _W5300_IO_BASE_ _WIZCHIP_IO_BASE_ +#elif (_WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_) + #define IDM_AR ((_WIZCHIP_IO_BASE_ + 0x0002)) ///< Indirect mode address register + #define IDM_DR ((_WIZCHIP_IO_BASE_ + 0x0004)) ///< Indirect mode data register + #define _W5300_IO_BASE_ 0x0000 +#elif (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_) + #error "Unkonw _WIZCHIP_IO_MODE_" +#endif + +/////////////////////////////////////// +// Definition For Legacy Chip Driver // +/////////////////////////////////////// +#define IINCHIP_READ(ADDR) WIZCHIP_READ(ADDR) ///< The defined for legacy chip driver +#define IINCHIP_WRITE(ADDR,VAL) WIZCHIP_WRITE(ADDR,VAL) ///< The defined for legacy chip driver +//#define IINCHIP_READ_BUF(ADDR,BUF,LEN) WIZCHIP_READ_BUF(ADDR,BUF,LEN) ///< The defined for legacy chip driver +//#define IINCHIP_WRITE_BUF(ADDR,BUF,LEN) WIZCHIP_WRITE(ADDR,BUF,LEN) ///< The defined for legacy chip driver + +//-------------------------- defgroup --------------------------------- +/** + * @defgroup W5300 W5300 + * + * @brief WHIZCHIP register defines and I/O functions of @b W5300. + * + * - @ref WIZCHIP_register_W5300 : @ref Common_register_group_W5300 and @ref Socket_register_group_W5300 + * - @ref WIZCHIP_IO_Functions_W5300 : @ref Basic_IO_function_W5300, @ref Common_register_access_function_W5300 and @ref Socket_register_access_function_W5300 + */ + + +/** + * @defgroup WIZCHIP_register_W5300 WIZCHIP register + * @ingroup W5300 + * + * @brief WHIZCHIP register defines register group of @b W5300. + * + * - @ref Common_register_group_W5300 : Common register group + * - @ref Socket_register_group_W5300 : \c SOCKET n register group + */ + + +/** + * @defgroup WIZCHIP_IO_Functions_W5300 WIZCHIP I/O functions + * @ingroup W5300 + * + * @brief This supports the basic I/O functions for @ref WIZCHIP_register_W5300. + * + * - Basic I/O function \n + * WIZCHIP_READ(), WIZCHIP_WRITE() \n\n + * + * - @ref Common_register_group_W5300 access functions \n + * -# @b Mode \n + * getMR(), setMR() + * -# @b Interrupt \n + * getIR(), setIR(), getIMR(), setIMR(), getSIR(), setSIR(), getSIMR(), setSIMR() + * -# Network Information \n + * getSHAR(), setSHAR(), getGAR(), setGAR(), getSUBR(), setSUBR(), getSIPR(), setSIPR() + * -# @b Retransmission \n + * getRCR(), setRCR(), getRTR(), setRTR() + * -# @b PPPoE \n + * getPTIMER(), setPTIMER(), getPMAGIC(), getPMAGIC(), getPSID(), setPSID(), getPHAR(), setPHAR(), getPMRU(), setPMRU() + * -# ICMP packet \n + * getUIPR(), getUPORTR() + * -# @b Socket Memory \n + * getMTYPER(), setMTYPER() \n + * getTMS01R(), getTMS23R(), getTMS45R(), getTMS67R(), setTMS01R(), setTMS23R(), setTMS45R(), setTMS67R() \n + * getRMS01R(), getRMS23R(), getRMS45R(), getRMS67R(), setRMS01R(), setRMS23R(), setRMS45R(), setRMS67R() \n + * -# @b etc. \n + * getPn_BRDYR(), setPn_BRDYR(), getPn_BDPTHR(), setPn_BDPTHR(), getIDR() \n\n + * + * - \ref Socket_register_group_W5300 access functions \n + * -# SOCKET control \n + * getSn_MR(), setSn_MR(), getSn_CR(), setSn_CR(), getSn_IMR(), setSn_IMR(), getSn_IR(), setSn_IR() + * -# SOCKET information \n + * getSn_SR(), getSn_DHAR(), setSn_DHAR(), getSn_PORT(), setSn_PORT(), getSn_DIPR(), setSn_DIPR(), getSn_DPORT(), setSn_DPORT() + * getSn_MSSR(), setSn_MSSR() + * -# SOCKET communication \n + * getSn_RXBUF_SIZE(), setSn_RXBUF_SIZE(), getSn_TXBUF_SIZE(), setSn_TXBUF_SIZE() \n + * getSn_TX_RD(), getSn_TX_WR(), setSn_TX_WR() \n + * getSn_RX_RD(), setSn_RX_RD(), getSn_RX_WR() \n + * getSn_TX_FSR(), getSn_RX_RSR(), getSn_KPALVTR(), setSn_KPALVTR() + * -# IP header field \n + * getSn_FRAG(), setSn_FRAG(), getSn_TOS(), setSn_TOS() \n + * getSn_TTL(), setSn_TTL() + */ + + +/** + * @defgroup Common_register_group_W5300 Common register + * @ingroup WIZCHIP_register_W5300 + * + * @brief Common register group\n + * It set the basic for the networking\n + * It set the configuration such as interrupt, network information, ICMP, etc. + * @details + * @sa MR : Mode register. + * @sa GAR, SUBR, SHAR, SIPR : Network Configuration + * @sa IR, _IMR_ : Interrupt. + * @sa MTYPER, TMS01R,TMS23R, TMS45R, TMS67R,RMS01R,RMS23R, RMS45R, RMS67R : Socket TX/RX memory + * @sa _RTR_, _RCR_ : Data retransmission. + * @sa PTIMER, PMAGIC, PSID, PDHAR : PPPoE. + * @sa UIPR, UPORTR, FMTUR : ICMP message. + * @sa Pn_BRDYR, Pn_BDPTHR, IDR : etc. + */ + + +/** + * @defgroup Socket_register_group_W5300 Socket register + * @ingroup WIZCHIP_register_W5300 + * + * @brief Socket register group.\n + * Socket register configures and control SOCKETn which is necessary to data communication. + * @details + * @sa Sn_MR, Sn_CR, Sn_IR, Sn_IMR : SOCKETn Control + * @sa Sn_SR, Sn_PORT, Sn_DHAR, Sn_DIPR, Sn_DPORT : SOCKETn Information + * @sa Sn_MSSR, Sn_TOS, Sn_TTL, Sn_KPALVTR, Sn_FRAG : Internet protocol. + * @sa Sn_TX_WRSR, Sn_TX_FSR, Sn_TX_RD, Sn_TX_WR, Sn_RX_RSR, Sn_RX_RD, Sn_RX_WR, Sn_TX_FIFOR, Sn_RX_FIFOR : Data communication + */ + + + /** + * @defgroup Basic_IO_function_W5300 Basic I/O function + * @ingroup WIZCHIP_IO_Functions_W5300 + * @brief These are basic input/output functions to read values from register or write values to register. + */ + +/** + * @defgroup Common_register_access_function_W5300 Common register access functions + * @ingroup WIZCHIP_IO_Functions_W5300 + * @brief These are functions to access common registers. + */ + +/** + * @defgroup Socket_register_access_function_W5300 Socket register access functions + * @ingroup WIZCHIP_IO_Functions_W5300 + * @brief These are functions to access socket registers. + */ + +//------------------------------- defgroup end -------------------------------------------- + +//----------------------------- W5300 Common Registers ----------------------------- +/** + * @ingroup Common_register_group_W5300 + * @brief Mode Register address(R/W)\n + * @ref MR is used for S/W reset, ping block mode, PPPoE mode and etc. + * @details Each bit of @ref MR defined as follows. + * + * + * + * + * + *
    15 14 13 12 11 10 9 8
    DBW MPF WDFRDF Reserved FS
    7 6 5 4 3 2 1 0
    RST Reserved WOL PB PPPoE Reserved FARP Reserved
    + * - \ref MR_DBW : Data bus width (0 : 8 Bit, 1 : 16 Bit), Read Only + * - \ref MR_MPF : Received a Pause Frame from MAC layer (0 : Normal Frame, 1 : Pause Frame), Read Only + * - \ref MR_WDF : Write Data Fetch time (When CS signal is low, W5300 Fetch a written data by Host after PLL_CLK * MR_WDF) + * - \ref MR_RDH : Read Data Hold time (0 : No use data hold time, 1 : Use data hold time, 2 PLL_CLK) + * - \ref MR_FS : FIFO Swap (0 : Disable Swap, 1 : Enable Swap) + * - \ref MR_RST : Reset + * - \ref MR_WOL : Wake on LAN + * - \ref MR_PB : Ping block + * - \ref MR_PPPOE : PPPoE mode + * - \ref MR_FARP : Force ARP mode + */ +#define MR (_WIZCHIP_IO_BASE_) + +/** + * @ingroup Common_register_group_W5300 + * @brief Interrupt Register(R/W) + * @details \ref IR indicates the interrupt status. Each bit of \ref IR will be still until the bit will be written to by the host. + * If \ref IR is not equal to 0x0000 INTn PIN is asserted to low until it is 0x0000\n\n + * Each bit of \ref IR defined as follows. + * + * + * + * + * + *
    15 14 13 12 11 10 9 8
    IPCF DPUR PPPT FMTU Reserved Reserved Reserved Reserved
    7 6 5 4 3 2 1 0
    S7_INT S6_INT S5_INT S4_INT S3_INT S2_INT S1_INT S0_INT
    + * - \ref IR_IPCF : IP conflict + * - \ref IR_DPUR : Destination Port Unreachable + * - \ref IR_PPPT : PPPoE Termination + * - \ref IR_FMTU : Fragmented MTU + * - \ref IR_SnINT(n) : Interrupted from SOCKETn + * + * @note : In W5300, IR is operated same as IR and SIR in other WIZCHIP(5100,5200,W5500) + */ +#define IR (_W5300_IO_BASE_ + 0x02) + +/** + * @ingroup Common_register_group_W5300 + * @brief Socket Interrupt Mask Register(R/W) + * @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR. + * When a bit of _IMR_ is and the corresponding bit of \ref IR is Interrupt will be issued. + * In other words, if a bit of _IMR_, an interrupt will be not issued even if the corresponding bit of \ref IR is set + * @note : In W5300, _IMR_ is operated same as _IMR_ and SIMR in other WIZCHIP(5100,5200,W5500) + */ +#define _IMR_ (_W5300_IO_BASE_ + 0x04) + + +//#define ICFGR (_W5300_IO_BASE_ + 0x06) +//#define INTLEVEL ICFGR + +/** + * @ingroup Common_register_group_W5300 + * @brief Source MAC Register address(R/W) + * @details @ref SHAR configures the source hardware address. + */ +#define SHAR (_W5300_IO_BASE_ + 0x08) + + +/** + * @ingroup Common_register_group_W5300 + * @brief Gateway IP Register address(R/W) + * @details @ref GAR configures the default gateway address. + */ + #define GAR (_W5300_IO_BASE_ + 0x10) + +/** + * @ingroup Common_register_group_W5300 + * @brief Subnet mask Register address(R/W) + * @details @ref SUBR configures the subnet mask address. + */ +#define SUBR (_W5300_IO_BASE_ + 0x14) + +/** + * @ingroup Common_register_group_W5300 + * @brief Source IP Register address(R/W) + * @details @ref SIPR configures the source IP address. + */ +#define SIPR (_W5300_IO_BASE_ + 0x18) + +/** + * @ingroup Common_register_group_W5300 + * @brief Timeout register address( 1 is 100us )(R/W) + * @details @ref _RTR_ configures the retransmission timeout period. The unit of timeout period is 100us and the default of @ref _RTR_ is x07D0. + * And so the default timeout period is 200ms(100us X 2000). During the time configured by @ref _RTR_, W5300 waits for the peer response + * to the packet that is transmitted by \ref Sn_CR (CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command). + * If the peer does not respond within the @ref _RTR_ time, W5300 retransmits the packet or issues timeout. + */ + #define _RTR_ (_W5300_IO_BASE_ + 0x1C) + +/** + * @ingroup Common_register_group_W5300 + * @brief Retry count register(R/W) + * @details @ref _RCR_ configures the number of time of retransmission. + * When retransmission occurs as many as ref _RCR_+1 Timeout interrupt is issued (@ref Sn_IR_TIMEOUT = '1'). + */ +#define _RCR_ (_W5300_IO_BASE_ + 0x1E) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 0 & 1 + * @details TMS01R configures the TX buffer block size of \c SOCKET 0 & 1. The default value is configured with 8KB and can be configure from 0 to 64KB with unit 1KB. + * But the sum of all SOCKET TX buffer size should be multiple of 8 and the sum of all SOCKET TX and RX memory size can't exceed 128KB. + * When exceeded nor multiple of 8, the data transmittion is invalid. + */ +#define TMS01R (_W5300_IO_BASE_ + 0x20) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 2 & 3 + * @details refer to \ref TMS01R + */ +#define TMS23R (TMS01R + 2) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 4 & 5 + * @details refer to \ref TMS01R + */ +#define TMS45R (TMS01R + 4) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 6 & 7 + * @details refer to \ref TMS01R + */ +#define TMS67R (TMS01R + 6) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 0. + * @details refer to \ref TMS01R + */ +#define TMSR0 TMS01R + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 1. + * @details refer to \ref TMS01R + */ +#define TMSR1 (TMSR0 + 1) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 2. + * @details refer to \ref TMS01R + */ +#define TMSR2 (TMSR0 + 2) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 3. + * @details refer to \ref TMS01R + */ +#define TMSR3 (TMSR0 + 3) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 4. + * @details refer to \ref TMS01R + */ +#define TMSR4 (TMSR0 + 4) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 5. + * @details refer to \ref TMS01R + */ +#define TMSR5 (TMSR0 + 5) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 6. + * @details refer to \ref TMS01R + */ +#define TMSR6 (TMSR0 + 6) + +/** + * @ingroup Common_register_group_W5300 + * @brief TX memory size of \c SOCKET 7. + * @details refer to \ref TMS01R + */ +#define TMSR7 (TMSR0 + 7) + + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 0 & 1 + * @details RMS01R configures the RX buffer block size of \c SOCKET 0 & 1. The default value is configured with 8KB and can be configure from 0 to 64KB with unit 1KB. + * But the sum of all SOCKET RX buffer size should be multiple of 8 and the sum of all SOCKET RX and TX memory size can't exceed 128KB. + * When exceeded nor multiple of 8, the data reception is invalid. + */ +#define RMS01R (_W5300_IO_BASE_ + 0x28) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 2 & 3 + * @details Refer to \ref RMS01R + */ +#define RMS23R (RMS01R + 2) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 4 & 5 + * @details Refer to \ref RMS01R + */ +#define RMS45R (RMS01R + 4) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 6 & 7 + * @details Refer to \ref RMS01R + */ +#define RMS67R (RMS01R + 6) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 0. + * @details refer to \ref RMS01R + */ +#define RMSR0 RMS01R + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 1. + * @details refer to \ref RMS01R + */ +#define RMSR1 (RMSR0 + 1) + +/** + * @ingroup Common_register_group_5300 + * @brief RX memory size of \c SOCKET 2. + * @details refer to \ref RMS01R + */ +#define RMSR2 (RMSR0 + 2) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 3. + * @details refer to \ref RMS01R + */ +#define RMSR3 (RMSR0 + 3) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 4. + * @details refer to \ref RMS01R + */ +#define RMSR4 (RMSR0 + 4) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 5. + * @details refer to \ref RMS01R + */ +#define RMSR5 (RMSR0 + 5) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 6. + * @details refer to \ref RMS01R + */ +#define RMSR6 (RMSR0 + 6) + +/** + * @ingroup Common_register_group_W5300 + * @brief RX memory size of \c SOCKET 7. + * @details refer to \ref RMS01R + */ +#define RMSR7 (RMSR0 + 7) + + + +/** + * @ingroup Common_register_group_W5300 + * @brief Memory Type Register + * @details W5300’s 128Kbytes data memory (Internal TX/RX memory) is composed of 16 memory blocks + * of 8Kbytes. MTYPER configures type of each 8KB memory block in order to select RX or TX memory. + * The type of 8KB memory block corresponds to each bit of MTYPER. When the bit is ‘1’, it is used as TX + * memory, and the bit is ‘0’, it is used as RX memory. MTYPER is configured as TX memory type + * from the lower bit. The rest of the bits not configured as TX memory, should be set as ‘0’. + */ +#define MTYPER (_W5300_IO_BASE_ + 0x30) + +/** + * @ingroup Common_register_group_W5300 + * @brief PPPoE Authentication Type register + * @details It notifies authentication method negotiated with PPPoE server. + * W5300 supports 2 types of authentication methods. + * - PAP : 0xC023 + * - CHAP : 0xC223 + */ +#define PATR (_W5300_IO_BASE_ + 0x32) + +//#define PPPALGOR (_W5300_IO_BASE_ + 0x34) + +/** + * @ingroup Common_register_group_W5300 + * @brief PPP Link Control Protocol Request Timer Register + * @details It configures transmitting timer of link control protocol (LCP) echo request. Value 1 is about 25ms. + */ +#define PTIMER (_W5300_IO_BASE_ + 0x36) + +/** + * @ingroup Common_register_group_W5300 + * @brief PPP LCP magic number register + * @details It configures byte value to be used for 4bytes “Magic Number” during LCP negotiation with PPPoE server. + */ +#define PMAGICR (_W5300_IO_BASE_ + 0x38) + +//#define PSTATER (_W5300_IO_BASE_ + 0x3A) + +/** + * @ingroup Common_register_group_W5300 + * @brief PPPoE session ID register + * @details It notifies PPP session ID to be used for communication with PPPoE server (acquired by PPPoE-process of W5300). + */ +#define PSIDR (_W5300_IO_BASE_ + 0x3C) + +/** + * @ingroup Common_register_group_W5300 + * @brief PPPoE destination hardware address register + * @details It notifies hardware address of PPPoE server (acquired by PPPoE-process of W5300). + */ +#define PDHAR (_W5300_IO_BASE_ + 0x40) + +/** + * @ingroup Common_register_group_W5300 + * @brief Unreachable IP address register + * @details When trying to transmit UDP data to destination port number which is not open, + * W5300 can receive ICMP (Destination port unreachable) packet. \n + * In this case, \ref IR_DPUR bit of \ref IR becomes '1'. + * And destination IP address and unreachable port number of ICMP packet can be acquired through UIPR and \ref UPORTR. + */ +#define UIPR (_W5300_IO_BASE_ + 0x48) + +/** + * @ingroup Common_register_group_W5300 + * @brief Unreachable port number register + * @details Refer to \ref UIPR. + */ +#define UPORTR (_W5300_IO_BASE_ + 0x4C) + +/** + * @ingroup Common_register_group_W5300 + * @brief Fragment MTU register + * @details When communicating with the peer having a different MTU, W5300 can receive an ICMP(Fragment MTU) packet. + * At this case, IR(FMTU) becomes ‘1’ and destination IP address and fragment MTU value of ICMP packet can be acquired through UIPR and FMTUR. + * In order to keep communicating with the peer having Fragment MTU, set the FMTUR first in Sn_MSSR of the SOCKETn, and try the next communication. + */ +#define FMTUR (_W5300_IO_BASE_ + 0x4E) + +//#define Sn_RTCR(n) (_W5300_IO_BASE_ + 0x50 + n*2) + +/** + * @ingroup Common_register_group_W5300 + * @brief PIN 'BRDYn' configure register + * @details It configures the PIN "BRDYn" which is monitoring TX/RX memory status of the specified SOCKET. + * If the free buffer size of TX memory is same or bigger than the buffer depth of \ref Pn_BDPTHR, + * or received buffer size of RX memory is same or bigger than the \ref Pn_BDPTHR, + * PIN "BRDYn" is signaled. + * + * + * + * + * + *
    15 14 13 12 11 10 9 8
    Reserved, Read as 0
    7 6 5 4 3 2 1 0
    PEN MT PPL Reserved SN
    + * + * - \ref Pn_PEN Enable PIN 'BRDYn' (0 : Disable, 1 : Enable) + * - \ref Pn_MT Monitoring Memory type (0 : RX memory, 1 : TX Memory) + * - \ref Pn_PPL PIN Polarity bit of Pn_BRDYR. (0 : Low sensitive, 1 : High sensitive) + * - \ref Pn_SN(n) Monitoring SOCKET number of Pn_BRDYR + */ +#define Pn_BRDYR(n) (_W5300_IO_BASE_ + 0x60 + n*4) + +/** + * @ingroup Common_register_group_W5300 + * @brief PIN 'BRDYn' buffer depth Register + * @details It configures buffer depth of PIN "BRDYn". + * When monitoring TX memory and \ref Sn_TX_FSR is same or bigger than Pn_BDPTHR, the PIN "BRDYn" is signaled. + * When monitoring RX memory and if \ref Sn_RX_RSR is same or bigger than Pn_BDPTHR, PIN "BRDYn" is signaled. + * The value for Pn_BDPTHR can't exceed TX/RX memory size allocated by TMSR or RMSR such like as \ref TMS01R or \ref RMS01R. + */ +#define Pn_BDPTHR(n) (_W5300_IO_BASE_ + 0x60 + n*4 + 2) + +/** + * @ingroup Common_register_group_W5300 + * @brief W5300 identification register. + * @details Read Only. 0x5300. + */ +#define IDR (_W5300_IO_BASE_ + 0xFE) +#define VERSIONR IDR + + +//----------------------------- W5300 SOCKET Registers ----------------------------- + +/** + * @ingroup Socket_register_group_W5300 + * @brief Socket Mode register(R/W) + * @details @ref Sn_MR configures the option or protocol type of Socket n.\n\n + * Each bit of @ref Sn_MR defined as the following. + * + * + * + * + * + *
    15 14 13 12 11 10 9 8
    Reserved. Read as 0 ALIGN
    7 6 5 4 3 2 1 0
    MULTI MF ND/IGMPv Reserved PROTOCOL[3:0]
    + * - @ref Sn_MR_ALIGN : Alignment bit of Sn_MR, Only valid in \ref Sn_MR_TCP. (C0 : Include TCP PACK_INFO, 1 : Not include TCP PACK_INFO) + * - @ref Sn_MR_MULTI : Support UDP Multicasting + * - @ref Sn_MR_MF : Enable MAC Filter (0 : Disable, 1 - Enable), When enabled, W5300 can receive only both own and broadcast packet. + * - @ref Sn_MR_ND : No Delayed Ack(TCP) flag + * - @ref Sn_MR_IGMPv : IGMP version used in UDP mulitcasting. (0 : Version 2, 1 : Version 2) + * - PROTOCOL[3:0] + * + * + * + * + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 0 0 0 Closed
    0 0 0 1 TCP
    0 0 1 0 UDP
    0 0 1 1 IPCRAW
    0 1 0 0 MACRAW
    0 1 0 1 PPPoE
    + * + * - @ref Sn_MR_PPPoE : PPPoE + * - @ref Sn_MR_MACRAW : MAC LAYER RAW SOCK + * - @ref Sn_MR_IPRAW : IP LAYER RAW SOCK + * - @ref Sn_MR_UDP : UDP + * - @ref Sn_MR_TCP : TCP + * - @ref Sn_MR_CLOSE : Unused socket + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x00) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Socket command register(R/W) + * @details This is used to set the command for Socket n such as OPEN, CLOSE, CONNECT, LISTEN, SEND, and RECEIVE.\n + * After W5500 accepts the command, the @ref Sn_CR register is automatically cleared to 0x00. + * Even though @ref Sn_CR is cleared to 0x00, the command is still being processed.\n + * To check whether the command is completed or not, please check the @ref Sn_IR or @ref Sn_SR. + * - @ref Sn_CR_OPEN : Initialize or open socket. + * - @ref Sn_CR_LISTEN : Wait connection request in TCP mode(Server mode) + * - @ref Sn_CR_CONNECT : Send connection request in TCP mode(Client mode) + * - @ref Sn_CR_DISCON : Send closing request in TCP mode. + * - @ref Sn_CR_CLOSE : Close socket. + * - @ref Sn_CR_SEND : Update TX buffer pointer and send data. + * - @ref Sn_CR_SEND_MAC : Send data with MAC address, so without ARP process. + * - @ref Sn_CR_SEND_KEEP : Send keep alive message. + * - @ref Sn_CR_RECV : Update RX buffer pointer and receive data. + * - @ref Sn_CR_PCON : PPPoE connection begins by transmitting PPPoE discovery packet. + * - @ref Sn_CR_PDISCON : Closes PPPoE connection. + * - @ref Sn_CR_PCR : In each phase, it transmits REQ message. + * - @ref Sn_CR_PCN : In each phase, it transmits NAK message. + * - @ref Sn_CR_PCJ : In each phase, it transmits REJECT message. + */ +#define Sn_CR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x02) + +/** + * @ingroup Socket_register_group_W5300 + * @brief socket interrupt mask register(R) + * @details @ref Sn_IMR masks the interrupt of Socket n. + * Each bit corresponds to each bit of @ref Sn_IR. When a Socket n Interrupt is occurred and the corresponding bit of @ref Sn_IMR is + * the corresponding bit of @ref Sn_IR becomes When both the corresponding bit of @ref Sn_IMR and @ref Sn_IR are and the n-th bit of @ref IR is + * Host is interrupted by asserted INTn PIN to low. + */ +#define Sn_IMR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x04) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Socket interrupt register(R) + * @details @ref Sn_IR indicates the status of Socket Interrupt such as establishment, termination, receiving data, timeout).\n + * When an interrupt occurs and the corresponding bit of @ref Sn_IMR is the corresponding bit of @ref Sn_IR becomes \n + * In order to clear the @ref Sn_IR bit, the host should write the bit to \n + * + * + * + * + * + *
    15 14 13 12 11 10 9 8
    Reserved. Read as 0
    7 6 5 4 3 2 1 0
    PRECV PFAIL PNEXT SENDOK TIMEOUT RECV DISCON CON
    + * - \ref Sn_IR_PRECV : PPP receive + * - \ref Sn_IR_PFAIL : PPP fail + * - \ref Sn_IR_PNEXT : PPP next phase + * - \ref Sn_IR_SENDOK : SENDOK + * - \ref Sn_IR_TIMEOUT : TIMEOUT + * - \ref Sn_IR_RECV : RECV + * - \ref Sn_IR_DISCON : DISCON + * - \ref Sn_IR_CON : CON + */ +#define Sn_IR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x06) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Socket status register(R) + * @details @ref Sn_SSR indicates the status of Socket n.\n + * The status of Socket n is changed by @ref Sn_CR or some special control packet as SYN, FIN packet in TCP. + * @par Normal status + * - @ref SOCK_CLOSED : Closed + * - @ref SOCK_INIT : Initiate state + * - @ref SOCK_LISTEN : Listen state + * - @ref SOCK_ESTABLISHED : Success to connect + * - @ref SOCK_CLOSE_WAIT : Closing state + * - @ref SOCK_UDP : UDP socket + * - @ref SOCK_IPRAW : IPRAW socket + * - @ref SOCK_MACRAW : MAC raw mode socket + * - @ref SOCK_PPPoE : PPPoE mode Socket + *@par Temporary status during changing the status of Socket n. + * - @ref SOCK_SYNSENT : This indicates Socket n sent the connect-request packet (SYN packet) to a peer. + * - @ref SOCK_SYNRECV : It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer. + * - @ref SOCK_FIN_WAIT : Connection state + * - @ref SOCK_CLOSING : Closing state + * - @ref SOCK_TIME_WAIT : Closing state + * - @ref SOCK_LAST_ACK : Closing state + * - @ref SOCK_ARP : ARP request state + */ +#define Sn_SSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x08) +#define Sn_SR(n) Sn_SSR(n) ///< For Compatible ioLibrary. Refer to @ref Sn_SSR(n) + +/** + * @ingroup Socket_register_group_W5300 + * @brief source port register(R/W) + * @details @ref Sn_PORTR configures the source port number of Socket n. + * It is valid when Socket n is used in TCP/UPD mode. It should be set before OPEN command is ordered. + */ +#define Sn_PORTR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0A) +#define Sn_PORT(n) Sn_PORTR(n) ///< For compatible ioLibrary. Refer to @ref Sn_PORTR(n). + +/** + * @ingroup Socket_register_group_W5300 + * @brief Peer MAC register address(R/W) + * @details @ref Sn_DHAR configures the destination hardware address of Socket n when using SEND_MAC command in UDP mode or + * it indicates that it is acquired in ARP-process by CONNECT/SEND command. + */ +#define Sn_DHAR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0C) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Peer port register address(R/W) + * @details @ref Sn_DPORTR configures or indicates the destination port number of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP clientmode, it configures the listen port number of TCP serverbefore CONNECT command. + * In TCP Servermode, it indicates the port number of TCP client after successfully establishing connection. + * In UDP mode, it configures the port number of peer to be transmitted the UDP packet by SEND/SEND_MAC command. + */ +#define Sn_DPORTR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x12) +#define Sn_DPORT(n) Sn_DPORTR(n) ///< For compatible ioLibrary. Refer to \ref Sn_DPORTR. + + +/** + * @ingroup Socket_register_group_W5300 + * @brief Peer IP register address(R/W) + * @details @ref Sn_DIPR configures or indicates the destination IP address of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP client mode, it configures an IP address of TCP serverbefore CONNECT command. + * In TCP server mode, it indicates an IP address of TCP clientafter successfully establishing connection. + * In UDP mode, it configures an IP address of peer to be received the UDP packet by SEND or SEND_MAC command. + */ + #define Sn_DIPR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x14) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Maximum Segment Size(Sn_MSSR0) register address(R/W) + * @details @ref Sn_MSSR configures or indicates the MTU(Maximum Transfer Unit) of Socket n. + */ +#define Sn_MSSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x18) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Keep Alive Timer register(R/W) + * @details @ref Sn_KPALVTR configures the transmitting timer of KEEP ALIVE(KA)packet of SOCKETn. It is valid only in TCP mode, + * and ignored in other modes. The time unit is 5s. + * KA packet is transmittable after @ref Sn_SR is changed to SOCK_ESTABLISHED and after the data is transmitted or received to/from a peer at least once. + * In case of '@ref Sn_KPALVTR > 0', W5500 automatically transmits KA packet after time-period for checking the TCP connection (Auto-keepalive-process). + * In case of '@ref Sn_KPALVTR = 0', Auto-keep-alive-process will not operate, + * and KA packet can be transmitted by SEND_KEEP command by the host (Manual-keep-alive-process). + * Manual-keep-alive-process is ignored in case of '@ref Sn_KPALVTR > 0'. + */ +#define Sn_KPALVTR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x1A) + +/** + * @ingroup Socket_register_group_W5300 + * @brief IP Protocol(PROTO) Register(R/W) + * @details \ref Sn_PROTO that sets the protocol number field of the IP header at the IP layer. It is + * valid only in IPRAW mode, and ignored in other modes. + */ +#define Sn_PROTOR(n) Sn_KPALVTR(n) + + +/** + * @ingroup Socket_register_group_W5300 + * @brief IP Type of Service(TOS) Register(R/W) + * @details @ref Sn_TOSR configures the TOS(Type Of Service field in IP Header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TOSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x1C) +#define Sn_TOS(n) Sn_TOSR(n) ///< For compatible ioLibrary. Refer to Sn_TOSR + +/** + * @ingroup Socket_register_group_W5300 + * @brief IP Time to live(TTL) Register(R/W) + * @details @ref Sn_TTLR configures the TTL(Time To Live field in IP header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TTLR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x1E) +#define Sn_TTL(n) Sn_TTLR(n) ///< For compatible ioLibrary. Refer to Sn_TTLR + +/** + * @ingroup Socket_register_group_W5300 + * @brief SOCKETn TX write size register(R/W) + * @details It sets the byte size of the data written in internal TX memory through @ref Sn_TX_FIFOR. + * It is set before SEND or SEND_MAC command, and can't be bigger than internal TX memory + * size set by TMSR such as @ref TMS01R, TMS23R and etc. + */ +#define Sn_TX_WRSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x20) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Transmit free memory size register(R) + * @details Sn_TX_FSR indicates the free size of Socket n TX Buffer Block. It is initialized to the configured size by TMSR such as @ref TMS01SR. + * Data bigger than Sn_TX_FSR should not be saved in the Socket n TX Buffer because the bigger data overwrites the previous saved data not yet sent. + * Therefore, check before saving the data to the Socket n TX Buffer, and if data is equal or smaller than its checked size, + * transmit the data with SEND/SEND_MAC command after saving the data in Socket n TX buffer. But, if data is bigger than its checked size, + * transmit the data after dividing into the checked size and saving in the Socket n TX buffer. + */ +#define Sn_TX_FSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0024) + +/** + * @ingroup Socket_register_group_w5300 + * @brief Received data size register(R) + * @details @ref Sn_RX_RSR indicates the data size received and saved in Socket n RX Buffer. + * @ref Sn_RX_RSR does not exceed the RMSR such as @ref RMS01SR and is calculated as the difference between + * ?Socket n RX Write Pointer (@ref Sn_RX_WR)and Socket n RX Read Pointer (@ref Sn_RX_RD) + */ +#define Sn_RX_RSR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x0028) + +/** + * @ingroup Socket_register_group_W5300 + * @brief Fragment field value in IP header register(R/W) + * @details @ref Sn_FRAGR configures the FRAG(Fragment field in IP header). + */ +#define Sn_FRAGR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x002C) +#define Sn_FRAG(n) Sn_FRAGR(n) + +/** + * @ingroup Socket_register_group_W5300 + * @brief SOCKET n TX FIFO regsiter + * @details It indirectly accesses internal TX memory of SOCKETn. + * The internal TX memory can't be accessed directly by the host, but can be accessed through Sn_TX_FIFOR. + * If @ref MR(MT) = '0', only the Host-Write of internal TX memory is allowed through Sn_TX_FIFOR. + * But if @ref MR(MT) is '1', both of Host-Read and Host-Write are allowed. + */ +#define Sn_TX_FIFOR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x2E) + +/** + * @ingroup Socket_register_group_W5300 + * @brief SOCKET n RX FIFO register + * @details It indirectly accesses to internal RX memory of SOCKETn. + * The internal RX memory can't be directly accessed by the host, but can be accessed through Sn_RX_FIFOR. + * If MR(MT) = '0', only the Host-Read of internal RX memory is allowed through Sn_RX_FIFOR. + * But if MR(MT) is '1', both of Host-Read and Host-Write are allowed. + */ +#define Sn_RX_FIFOR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x30) + +//#define Sn_TX_SADR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x32) + +//#define Sn_RX_SADR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x34) + +//#define Sn_TX_RD(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x36) + +//#define Sn_TX_WR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x38) + +//#define Sn_TX_ACK(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x3A) + +//#define Sn_RX_RD(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x3C) + +//#define Sn_RX_WR(n) (_W5300_IO_BASE_ + WIZCHIP_SREG_BLOCK(n) + 0x3E) + + +/************************************/ +/* The bit of MR regsiter defintion */ +/************************************/ +#define MR_DBW (1 << 15) /**< Data bus width bit of \ref MR. Read Only. (0 : 8Bit, 1 : 16Bit)*/ +#define MR_MPF (1 << 14) /**< Mac layer pause frame bit of \ref MR. (0 : Disable, 1 : Enable)*/ +#define MR_WDF(X) ((X & 0x07) << 11) /**< Write data fetch time bit of \ref MR. Fetch Data from DATA bus after PLL_CLK * MR_WDF[2:0]*/ +#define MR_RDH (1 << 10) /**< Read data hold time bit of \ref MR. Hold Data on DATA bus during 2 * PLL_CLK after CS high*/ +#define MR_FS (1 << 8) /**< FIFO swap bit of \ref MR. Swap MSB & LSB of \ref Sn_TX_FIFOR & Sn_RX_FIFOR (0 : No swap, 1 : Swap) */ +#define MR_RST (1 << 7) /**< S/W reset bit of \ref MR. (0 : Normal Operation, 1 : Reset (automatically clear after reset))*/ +#define MR_MT (1 << 5) /**< Memory test bit of \ref MR. (0 : Normal, 1 : Internal Socket memory write & read Test)*/ +#define MR_PB (1 << 4) /**< Ping block bit of \ref MR. (0 : Unblock, 1 : Block)*/ +#define MR_PPPoE (1 << 3) /**< PPPoE bit of \ref MR. (0 : No use PPPoE, 1: Use PPPoE)*/ +#define MR_DBS (1 << 2) /**< Data bus swap of \ref MR. Valid only 16bit mode (0 : No swap, 1 : Swap)*/ +#define MR_IND (1 << 0) /**< Indirect mode bit of \ref MR. (0 : Direct mode, 1 : Indirect mode) */ + + +/************************************/ +/* The bit of IR regsiter definition */ +/************************************/ +#define IR_IPCF (1 << 7) /**< IP conflict bit of \ref IR. To clear, Write the bit to '1'. */ +#define IR_DPUR (1 << 6) /**< Destination port unreachable bit of \ref IR. To clear, Write the bit to '1'. */ +#define IR_PPPT (1 << 5) /**< PPPoE terminate bit of \ref IR. To clear, Write the bit to '1'. */ +#define IR_FMTU (1 << 4) /**< Fragment MTU bit of IR. To clear, Write the bit to '1'. */ +#define IR_SnINT(n) (0x01 << n) /**< SOCKETn interrupt occurrence bit of \ref IR. To clear, Clear \ref Sn_IR*/ + +/*****************************************/ +/* The bit of Pn_BRDYR regsiter definition*/ +/*****************************************/ +#define Pn_PEN (1 << 7) /**< PIN 'BRDYn' enable bit of Pn_BRDYR. */ +#define Pn_MT (1 << 6) /**< PIN memory type bit of Pn_BRDYR. */ +#define Pn_PPL (1 << 5) /**< PIN Polarity bit of Pn_BRDYR. */ +#define Pn_SN(n) ((n & 0x07) << 0) /**< What socket to monitor. */ + + +/***************************************/ +/* The bit of Sn_MR regsiter definition */ +/***************************************/ +/** + * @brief Alignment bit of \ref Sn_MR. + * @details It is valid only in the TCP (\ref Sn_MR_TCP) with TCP communication, + * when every the received DATA packet size is of even number and set as '1', + * data receiving performance can be improved by removing PACKET-INFO(data size) that is attached to every the received DATA packet. + */ +#define Sn_MR_ALIGN (1 << 8) + +/** + * @brief Multicasting bit of \ref Sn_MR + * @details It is valid only in UDP (\ref Sn_MR_UDP). + * In order to implement multicasting, set the IP address and port number in @ref Sn_DIPR and @ref Sn_DPORTR respectively before "OPEN" command(@ref Sn_CR_OPEN).\n + * 0 : Disable, 1 : Enable + */ +#define Sn_MR_MULTI (1 << 7) + +/** + * @brief MAC filter bit of \ref Sn_MR + * @details It is valid in MACRAW(@ref Sn_MR_MACRAW). + * When this bit is set as ‘1’, W5300 can receive packet that is belong in itself or broadcasting. + * When this bit is set as ‘0’, W5300 can receive all packets on Ethernet. + * When using the hybrid TCP/IP stack, it is recommended to be set as ‘1’ for reducing the receiving overhead of host. \n + * 0 : Disable, 1 : Enable + */ +#define Sn_MR_MF (1 << 6) + +/** + * @brief IGMP version bit of \ref Sn_MR + * details It is valid in case of @ref Sn_MR_MULTI='1' and UDP(@ref Sn_MR_UDP). + * It configures IGMP version to send IGMP message such as Join/Leave/Report to multicast-group. \n + * 0 : IGMPv2, 1 : IGMPv1 + */ +#define Sn_MR_IGMPv (1 << 5) +#define Sn_MR_MC Sn_MR_IGMPv ///< For compatible ioLibrary + +/** + * @brief No delayed ack bit of \ref Sn_MR + * @details It is valid in TCP(@ref Sn_MR_TCP). + * In case that it is set as '1', ACK packet is transmitted right after receiving DATA packet from the peer. + * It is recommended to be set as '1' for TCP performance improvement. + * In case that it is set as '0', ACK packet is transmitted after the time set in @ref _RTR_ regardless of DATA packet receipt.\n + * 0 : No use, 1 : Use + */ +#define Sn_MR_ND (1 << 5) + +/** + * @brief No mode + * @details This configures the protocol mode of Socket n. + * @sa Sn_MR + */ +#define Sn_MR_CLOSE 0x00 + +/** + * @brief TCP mode + * @details This configures the protocol mode of Socket n. + * @sa Sn_MR + */ +#define Sn_MR_TCP 0x01 + +/** + * @brief UDP mode + * @details This configures the protocol mode of Socket n. + * @sa Sn_MR + */ +#define Sn_MR_UDP 0x02 /**< Protocol bits of \ref Sn_MR. */ + +/** + * @brief IP LAYER RAW mode + * @details This configures the protocol mode of Socket n. + * @sa Sn_MR + */ +#define Sn_MR_IPRAW 0x03 /**< Protocol bits of \ref Sn_MR. */ + +/** + * @brief MAC LAYER RAW mode + * @details This configures the protocol mode of Socket 0. + * @sa Sn_MR + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR_MACRAW 0x04 + +/** + * @brief PPPoE mode + * @details This configures the protocol mode of Socket 0. + * @sa Sn_MR + * @note PPPoE mode should be only used in Socket 0. + */ +#define Sn_MR_PPPoE 0x05 /**< Protocol bits of \ref Sn_MR. */ + +#define SOCK_STREAM Sn_MR_TCP /**< For Berkeley Socket API, Refer to @ref Sn_MR_TCP */ +#define SOCK_DGRAM Sn_MR_UDP /**< For Berkeley Socket API, Refer to @ref Sn_MR_UDP */ + + + +/******************************/ +/* The values of CR definition */ +/******************************/ +/** + * @brief Initialize or open a socket + * @details Socket n is initialized and opened according to the protocol selected in Sn_MR(P3:P0). + * The table below shows the value of @ref Sn_SR corresponding to @ref Sn_MR.\n + * + * + * + * + * + * + * + * + *
    \b Sn_MR (P[3:0]) \b Sn_SR
    Sn_MR_CLOSE (000)
    Sn_MR_TCP (001) SOCK_INIT (0x13)
    Sn_MR_UDP (010) SOCK_UDP (0x22)
    Sn_MR_IPRAW (010) SOCK_IPRAW (0x32)
    Sn_MR_MACRAW (100) SOCK_MACRAW (0x42)
    Sn_MR_PPPoE (101) SOCK_PPPoE (0x5F)
    + */ +#define Sn_CR_OPEN 0x01 + +/** + * @brief Wait connection request in TCP mode(Server mode) + * @details This is valid only in TCP mode (\ref Sn_MR(P3:P0) = \ref Sn_MR_TCP). + * In this mode, Socket n operates as a TCP serverand waits for connection-request (SYN packet) from any TCP client + * The @ref Sn_SR changes the state from \ref SOCK_INIT to \ref SOCKET_LISTEN. + * When a TCP clientconnection request is successfully established, + * the @ref Sn_SR changes from SOCK_LISTEN to SOCK_ESTABLISHED and the @ref Sn_IR(0) becomes + * But when a TCP clientconnection request is failed, @ref Sn_IR(3) becomes and the status of @ref Sn_SR changes to SOCK_CLOSED. + */ +#define Sn_CR_LISTEN 0x02 + +/** + * @brief Send connection request in TCP mode(Client mode) + * @details To connect, a connect-request (SYN packet) is sent to TCP serverconfigured by @ref Sn_DIPR & Sn_DPORT(destination address & port). + * If the connect-request is successful, the @ref Sn_SR is changed to @ref SOCK_ESTABLISHED and the Sn_IR(0) becomes \n\n + * The connect-request fails in the following three cases.\n + * 1. When a @b ARPTO occurs (@ref Sn_IR[3] = '1') because destination hardware address is not acquired through the ARP-process.\n + * 2. When a @b SYN/ACK packet is not received and @b TCPTO (Sn_IR(3) = )\n + * 3. When a @b RST packet is received instead of a @b SYN/ACK packet. In these cases, @ref Sn_SR is changed to @ref SOCK_CLOSED. + * @note This is valid only in TCP mode and operates when Socket n acts as TCP client + */ +#define Sn_CR_CONNECT 0x04 + +/** + * @brief Send closing request in TCP mode + * @details Regardless of TCP serveror TCP client the DISCON command processes the disconnect-process (b>Active close
    or Passive close.\n + * @par Active close + * it transmits disconnect-request(FIN packet) to the connected peer\n + * @par Passive close + * When FIN packet is received from peer, a FIN packet is replied back to the peer.\n + * @details When the disconnect-process is successful (that is, FIN/ACK packet is received successfully), @ref Sn_SR is changed to @ref SOCK_CLOSED.\n + * Otherwise, @b TCPTO occurs (\ref Sn_IR[3]='1') and then @ref Sn_SR is changed to @ref SOCK_CLOSED. + * @note Valid only in TCP mode. + */ +#define Sn_CR_DISCON 0x08 + +/** + * @brief Close socket + * @details @ref Sn_SR is changed to @ref SOCK_CLOSED. + */ +#define Sn_CR_CLOSE 0x10 + +/** + * @brief Update TX buffer pointer and send data + * @details SEND command transmits all the data in the Socket n TX buffer thru @ref Sn_TX_FIFOR.\n + * For more details, please refer to Socket n TX Free Size Register (@ref Sn_TX_FSR) and Socket TX Write Size register (@ref Sn_TX_WRSR). + */ +#define Sn_CR_SEND 0x20 + +/** + * @brief Send data with MAC address, so without ARP process + * @details The basic operation is same as SEND.\n + * Normally SEND command transmits data after destination hardware address is acquired by the automatic ARP-process(Address Resolution Protocol).\n + * But SEND_MAC command transmits data without the automatic ARP-process.\n + * In this case, the destination hardware address is acquired from @ref Sn_DHAR configured by host, instead of APR-process. + * @note Valid only in UDP mode. + */ +#define Sn_CR_SEND_MAC 0x21 + +/** + * @brief Send keep alive message + * @details It checks the connection status by sending 1byte keep-alive packet.\n + * If the peer can not respond to the keep-alive packet during timeout time, the connection is terminated and the timeout interrupt will occur. + * @note Valid only in TCP mode. + */ +#define Sn_CR_SEND_KEEP 0x22 + +/** + * @brief Update RX buffer pointer and receive data + * @details RECV completes the processing of the received data in Socket n RX Buffer thru @ref Sn_RX_FIFOR).\n + * For more details, refer to Socket n RX Received Size Register (@ref Sn_RX_RSR) & @ref Sn_RX_FIFOR. + */ +#define Sn_CR_RECV 0x40 /**< RECV command value of \ref Sn_CR */ + +#define Sn_CR_PCON 0x23 /**< PPPoE connection begins by transmitting PPPoE discovery packet. Refer to \ref Sn_CR */ +#define Sn_CR_PDISCON 0x24 /**< Closes PPPoE connection. Refer to \ref Sn_CR */ +#define Sn_CR_PCR 0x25 /**< In each phase, it transmits REQ message. Refer to \ref Sn_CR */ +#define Sn_CR_PCN 0x26 /**< In each phase, it transmits NAK message. Refer to \ref Sn_CR */ +#define Sn_CR_PCJ 0x27 /**< In each phase, it transmits REJECT message. Refer to \ref Sn_CR */ + + +/*********************************/ +/* The values of Sn_IR definition */ +/*********************************/ +#define Sn_IR_PRECV 0x80 /**< It is set in the case that option data which is not supported is received. Refer to \ref Sn_IR */ +#define Sn_IR_PFAIL 0x40 /**< It is set in the case that PAP authentication is failed. Refer to \ref Sn_IR */ +#define Sn_IR_PNEXT 0x20 /**< It is set in the case that the phase is changed during PPPoE connection process. \ref Sn_IR */ +#define Sn_IR_SENDOK 0x10 /**< It is set when SEND command is completed. Refer to \ref Sn_IR */ +#define Sn_IR_TIMEOUT 0x08 /**< It is set when ARPTO or TCPTO is occured. Refer to \ref Sn_IR */ +#define Sn_IR_RECV 0x04 /**< It is set whenever data is received from a peer. Refer to \ref Sn_IR */ +#define Sn_IR_DISCON 0x02 /**< It is set when FIN or FIN/ACK packet is received from a peer. Refer to \ref Sn_IR */ +#define Sn_IR_CON 0x01 /**< It is set one time when the connection is successful and then @ref Sn_SR is changed to @ref SOCK_ESTABLISHED. */ + +/**********************************/ +/* The values of Sn_SSR definition */ +/**********************************/ +/** + * @brief The state of SOCKET intialized or closed + * @details This indicates that Socket n is released.\n + * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to @ref SOCK_CLOSED regardless of previous status. + */ +#define SOCK_CLOSED 0x00 + +/** + * @brief The state of ARP process + * @details It is temporary state for getting a peer MAC address when TCP connect or UDP Data Send\n + * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to @ref SOCK_CLOSED regardless of previous status. + */ +#define SOCK_ARP 0x01 /**< ARP-request is transmitted in order to acquire destination hardware address. */ + +/** + * @brief Initiate state in TCP. + * @details This indicates Socket n is opened with TCP mode.\n + * It is changed to @ref SOCK_INIT when \ref Sn_MR(P[3:0]) = '001' and OPEN command(\ref Sn_CR_OPEN) is ordered.\n + * After SOCK_INIT, user can use LISTEN(@ref Sn_CR_LISTEN)/CONNECT(@ref Sn_CR_CONNET) command. + */ +#define SOCK_INIT 0x13 + +/** + * @brief Listen state + * @details This indicates Socket n is operating as TCP servermode and waiting for connection-request (SYN packet) from a peer TCP client.\n + * It will change to @ref SOCK_ESTALBLISHED when the connection-request is successfully accepted.\n + * Otherwise it will change to @ref SOCK_CLOSED after TCPTO (@ref Sn_IR_TIMEOUT = '1') is occurred. + */ +#define SOCK_LISTEN 0x14 + +/** + * @brief Connection state + * @details This indicates Socket n sent the connect-request packet (SYN packet) to a peer.\n + * It is temporarily shown when @ref Sn_SR is changed from @ref SOCK_INIT to @ref SOCK_ESTABLISHED by @ref Sn_CR_CONNECT command.\n + * If connect-accept(SYN/ACK packet) is received from the peer at SOCK_SYNSENT, it changes to @ref SOCK_ESTABLISHED.\n + * Otherwise, it changes to @ref SOCK_CLOSED after TCPTO (@ref Sn_IR_TIMEOUT = '1') is occurred. + */ +#define SOCK_SYNSENT 0x15 + +/** + * @brief Connection state + * @details It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.\n + * If socket n sends the response (SYN/ACK packet) to the peer successfully, it changes to @ref SOCK_ESTABLISHED. \n + * If not, it changes to @ref SOCK_CLOSED after timeout (@ref Sn_IR_TIMEOUT = '1') is occurred. + */ +#define SOCK_SYNRECV 0x16 + +/** + * @brief Success to connect + * @details This indicates the status of the connection of Socket n.\n + * It changes to @ref SOCK_ESTABLISHED when the TCP SERVERprocessed the SYN packet from the TCP CLIENTduring @ref SOCK_LISTEN, or + * when the @ref Sn_CR_CONNECT command is successful.\n + * During @ref SOCK_ESTABLISHED, DATA packet can be transferred using @ref Sn_CR_SEND or @ref Sn_CR_RECV command. + */ +#define SOCK_ESTABLISHED 0x17 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout(@ref Sn_CR_TIMTEOUT = '1') is occurred, these change to @ref SOCK_CLOSED. + */ +#define SOCK_FIN_WAIT 0x18 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED. + */ +#define SOCK_CLOSING 0x1A + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED. + */ +#define SOCK_TIME_WAIT 0x1B + +/** + * @brief Closing state + * @details This indicates Socket n received the disconnect-request (FIN packet) from the connected peer.\n + * This is half-closing status, and data can be transferred.\n + * For full-closing, @ref Sn_CR_DISCON command is used. But For just-closing, @ref Sn_CR_CLOSE command is used. + */ +#define SOCK_CLOSE_WAIT 0x1C + +/** + * @brief Closing state + * @details This indicates Socket n is waiting for the response (FIN/ACK packet) to the disconnect-request (FIN packet) by passive-close.\n + * It changes to @ref SOCK_CLOSED when Socket n received the response successfully, or when timeout (@ref Sn_IR_TIMEOUT = '1') is occurred. + */ +#define SOCK_LAST_ACK 0x1D + +/** + * @brief UDP socket + * @details This indicates Socket n is opened in UDP mode(@ref Sn_MR(P[3:0]) = '010').\n + * It changes to SOCK_UDP when @ref Sn_MR(P[3:0]) = '010' and @ref Sn_CR_OPEN command is ordered.\n + * Unlike TCP mode, data can be transfered without the connection-process. + */ +#define SOCK_UDP 0x22 + +/** + * @brief IP raw mode socket + * @details TThe socket is opened in IPRAW mode. The SOCKET status is change to SOCK_IPRAW when @ref Sn_MR (P3:P0) is + * Sn_MR_IPRAW and @ref Sn_CR_OPEN command is used.\n + * IP Packet can be transferred without a connection similar to the UDP mode. +*/ +#define SOCK_IPRAW 0x32 + +/** + * @brief MAC raw mode socket + * @details This indicates Socket 0 is opened in MACRAW mode (@ref Sn_MR(P[3:0]) = '100' and n = 0) and is valid only in Socket 0.\n + * It changes to SOCK_MACRAW when @ref Sn_MR(P[3:0] = 100)and @ ref Sn_CR_OPEN command is ordered.\n + * Like UDP mode socket, MACRAW mode Socket 0 can transfer a MAC packet (Ethernet frame) without the connection-process. + */ +#define SOCK_MACRAW 0x42 /**< SOCKET0 is open as MACRAW mode. */ + +/** + * @brief PPPoE mode socket + * @details It is the status that SOCKET0 is opened as PPPoE mode. + * It is changed to SOCK_PPPoE in case of @ref Sn_CR_OPEN command is ordered and @ref Sn_MR(P3:P0)= @ref Sn_MR_PPPoE\n + * It is temporarily used at the PPPoE connection. + */ +#define SOCK_PPPoE 0x5F /**< SOCKET0 is open as PPPoE mode. */ + +/* IP PROTOCOL */ +#define IPPROTO_IP 0 //< Dummy for IP +#define IPPROTO_ICMP 1 //< Control message protocol +#define IPPROTO_IGMP 2 //< Internet group management protocol +#define IPPROTO_GGP 3 //< Gateway^2 (deprecated) +#define IPPROTO_TCP 6 //< TCP +#define IPPROTO_PUP 12 //< PUP +#define IPPROTO_UDP 17 //< UDP +#define IPPROTO_IDP 22 //< XNS idp +#define IPPROTO_ND 77 //< UNOFFICIAL net disk protocol +#define IPPROTO_RAW 255 //< Raw IP packet + + +/** + * @brief Enter a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n \n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt.\n + * In OS environment, You can replace it to critical section api supported by OS. + * + * \sa WIZCHIP_READ(), WIZCHIP_WRITE() + * \sa WIZCHIP_CRITICAL_EXIT() + */ +#define WIZCHIP_CRITICAL_ENTER() WIZCHIP.CRIS._enter() + +#ifdef _exit +#undef _exit +#endif + +/** + * @brief Exit a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n\n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt. \n + * In OS environment, You can replace it to critical section api supported by OS. + * + * @sa WIZCHIP_READ(), WIZCHIP_WRITE() + * @sa WIZCHIP_CRITICAL_ENTER() + */ +#define WIZCHIP_CRITICAL_EXIT() WIZCHIP.CRIS._exit() + +//////////////////////// +// Basic I/O Function // +//////////////////////// + +/** + * @ingroup Basic_IO_function_W5300 + * @brief It reads 1 byte value from a register. + * @param AddrSel Register address + * @return The value of register + */ +uint16_t WIZCHIP_READ (uint32_t AddrSel); + +/** + * @ingroup Basic_IO_function_W5300 + * @brief It writes 1 byte value to a register. + * @param AddrSel Register address + * @param wb Write data + * @return void + */ +void WIZCHIP_WRITE(uint32_t AddrSel, uint16_t wb ); + +/*********************************** + * COMMON Register Access Function * + ***********************************/ + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set Mode Register + * @param (@ref iodata_t)mr The value to be set. + * @sa getMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) + #if (_WIZCHIP_IO_BUS_WIDTH_ == 8) + #define setMR(mr) \ + (*((uint8_t*)MR) = (uint8_t)((mr) >> 8)); (*((uint8_t*)WIZCHIP_OFFSET_INC(MR,1)) = (uint8_t)((mr) & 0xFF)) + #elif (_WIZCHIP_IO_BUS_WIDTH_ == 16) + #define setMR(mr) (*((uint16_t*)MR) = (uint16_t)((mr) & 0xFFFF)) + #else + #error "Unknown _WIZCHIP_IO_BUS_WIDTH_. You should be define _WIZCHIP_IO_BUS_WIDTH as 8 or 16." + #endif +#else + #error "Unknown _WIZCHIP_IO_MODE_" +#endif + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref MR. + * @return @ref iodata_t. The value of Mode register. + * @sa setMR() + */ +#if (_WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_) + #if (_WIZCHIP_IO_BUS_WIDTH_ == 8) + #define getMR() (((uint16_t)(*((uint8_t*)MR)) << 8) + (((uint16_t)(*((uint8_t*)WIZCHIP_OFFSET_INC(MR,1)))) & 0x00FF)) + #elif(_WIZCHIP_IO_BUS_WIDTH_ == 16) + #define getMR() (*((uint16_t*)MR)) + #else + #error "Unknown _WIZCHIP_IO_BUS_WIDTH_. You should be define _WIZCHIP_IO_BUS_WIDTH as 8 or 16." + #endif +#else + #error "Unknown _WIZCHIP_IO_MODE_" +#endif + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set \ref IR register + * @param (uint16_t)ir Value to set \ref IR register. + * @sa getIR() + */ +#define setIR(ir) \ + WIZCHIP_WRITE(IR, ir & 0xF0FF) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get \ref IR register + * @return uint8_t. Value of \ref IR register. + * @sa setIR() + */ +#define getIR() \ + (WIZCHIP_READ(IR) & 0xF0FF) + + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set \ref _IMR_ register + * @param (uint16_t)imr Value to set @ref _IMR_ register. + * @sa getIMR() + */ +#define setIMR(imr) \ + WIZCHIP_WRITE(_IMR_, imr & 0xF0FF) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get \ref _IMR_ register + * @return uint16_t. Value of \ref IR register. + * @sa setIMR() + */ +#define getIMR() \ + (WIZCHIP_READ(_IMR_) & 0xF0FF) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set local MAC address + * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + * @sa getSHAR() + */ +#define setSHAR(shar) { \ + WIZCHIP_WRITE(SHAR, (((uint16_t)((shar)[0])) << 8) + (((uint16_t)((shar)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SHAR,2), (((uint16_t)((shar)[2])) << 8) + (((uint16_t)((shar)[3])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SHAR,4), (((uint16_t)((shar)[4])) << 8) + (((uint16_t)((shar)[5])) & 0x00FF)); \ + } + +/** + * @ingroup Common_register_access_function + * @brief Get local MAC address + * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + * @sa setSHAR() + */ +#define getSHAR(shar) { \ + (shar)[0] = (uint8_t)(WIZCHIP_READ(SHAR) >> 8); \ + (shar)[1] = (uint8_t)(WIZCHIP_READ(SHAR)); \ + (shar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,2)) >> 8); \ + (shar)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,2))); \ + (shar)[4] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,4)) >> 8); \ + (shar)[5] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SHAR,4))); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set gateway IP address + * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes. + * @sa getGAR() + */ +#define setGAR(gar) { \ + WIZCHIP_WRITE(GAR, (((uint16_t)((gar)[0])) << 8) + (((uint16_t)((gar)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(GAR,2), (((uint16_t)((gar)[2])) << 8) + (((uint16_t)((gar)[3])) & 0x00FF)); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get gateway IP address + * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes. + * @sa setGAR() + */ +#define getGAR(gar) { \ + (gar)[0] = (uint8_t)(WIZCHIP_READ(GAR) >> 8); \ + (gar)[1] = (uint8_t)(WIZCHIP_READ(GAR)); \ + (gar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(GAR,2)) >> 8); \ + (gar)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(GAR,2))); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set subnet mask address + * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes. + * @sa getSUBR() + */ +#define setSUBR(subr) { \ + WIZCHIP_WRITE(SUBR, (((uint16_t)((subr)[0])) << 8) + (((uint16_t)((subr)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SUBR,2), (((uint16_t)((subr)[2])) << 8) + (((uint16_t)((subr)[3])) & 0x00FF)); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get subnet mask address + * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes. + * @sa setSUBR() + */ +#define getSUBR(subr) { \ + (subr)[0] = (uint8_t)(WIZCHIP_READ(SUBR) >> 8); \ + (subr)[1] = (uint8_t)(WIZCHIP_READ(SUBR)); \ + (subr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SUBR,2)) >> 8); \ + (subr)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SUBR,2))); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set local IP address + * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes. + * @sa getSIPR() + */ +#define setSIPR(sipr) { \ + WIZCHIP_WRITE(SIPR, (((uint16_t)((sipr)[0])) << 8) + (((uint16_t)((sipr)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(SIPR,2), (((uint16_t)((sipr)[2])) << 8) + (((uint16_t)((sipr)[3])) & 0x00FF)); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get local IP address + * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes. + * @sa setSIPR() + */ +#define getSIPR(sipr) { \ + (sipr)[0] = (uint8_t)(WIZCHIP_READ(SIPR) >> 8); \ + (sipr)[1] = (uint8_t)(WIZCHIP_READ(SIPR)); \ + (sipr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SIPR,2)) >> 8); \ + (sipr)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(SIPR,2))); \ + } + + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref _RTR_ register + * @param (uint16_t)rtr Value to set @ref _RTR_ register. + * @sa getRTR() + */ +#define setRTR(rtr) \ + WIZCHIP_WRITE(_RTR_, rtr) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref _RTR_ register + * @return uint16_t. Value of @ref _RTR_ register. + * @sa setRTR() + */ +#define getRTR() \ + WIZCHIP_READ(_RTR_) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref _RCR_ register + * @param (uint8_t)rcr Value to set @ref _RCR_ register. + * @sa getRCR() + */ +#define setRCR(rcr) \ + WIZCHIP_WRITE(_RCR_, ((uint16_t)rcr)&0x00FF) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref _RCR_ register + * @return uint8_t. Value of @ref _RCR_ register. + * @sa setRCR() + */ +#define getRCR() \ + ((uint8_t)(WIZCHIP_READ(_RCR_) & 0x00FF)) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref TMS01R register + * @param (uint16_t)tms01r Value to set @ref TMS01R register. The lower socket memory size is located at MSB of tms01r. + * @sa getTMS01R() + */ +#define setTMS01R(tms01r) \ + WIZCHIP_WRITE(TMS01R,tms01r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref TMS01R register + * @return uint16_t. Value of @ref TMS01R register. + * @sa setTMS01R() + */ +#define getTMS01R() \ + WIZCHIP_READ(TMS01R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref TMS23R register + * @param (uint16_t)tms23r Value to set @ref TMS23R register. The lower socket memory size is located at MSB of tms01r. + * @sa getTMS23R() + */ +#define setTMS23R(tms23r) \ + WIZCHIP_WRITE(TMS23R,tms23r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref TMS23R register + * @return uint16_t. Value of @ref TMS23R register. + * @sa setTMS23R() + */ +#define getTMS23R() \ + WIZCHIP_READ(TMS23R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref TMS45R register + * @param (uint16_t)tms45r Value to set @ref TMS45R register. The lower socket memory size is located at MSB of tms45r. + * @sa getTMS45R() + */ +#define setTMS45R(tms45r) \ + WIZCHIP_WRITE(TMS45R,tms45r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref TMS45R register + * @return uint16_t. Value of @ref TMS45R register. + * @sa setTMS45R() + */ +#define getTMS45R() \ + WIZCHIP_READ(TMS45R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref TMS67R register + * @param (uint16_t)tms67r Value to set @ref TMS67R register. The lower socket memory size is located at MSB of tms67r. + * @sa getTMS67R() + */ +#define setTMS67R(tms67r) \ + WIZCHIP_WRITE(TMS67R,tms67r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref TMS67R register + * @return uint16_t. Value of @ref TMS67R register. + * @sa setTMS67R() + */ +#define getTMS67R() \ + WIZCHIP_READ(TMS67R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref TMSR0 ~ @ref TMSR7 register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)tmsr Value to set @ref TMSR0 ~@ref TMSR7 register. + * @sa getTMSR() + */ +void setTMSR(uint8_t sn,uint8_t tmsr); +#define setSn_TXBUF_SIZE(sn, tmsr) setTMSR(sn, tmsr) ///< For compatible ioLibrary + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref TMSR0 ~ @ref TMSR7 register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref TMSR0 ~ @ref TMSR7 + * @sa getTMSR() + */ +uint8_t getTMSR(uint8_t sn); +#define getSn_TXBUF_SIZE(sn) getTMSR(sn) ///< For compatible ioLibrary + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref RMS01R register + * @param (uint16_t)rms01r Value to set @ref RMS01R register. The lower socket memory size is located at MSB of rms01r. + * @sa getRMS01R() + */ +#define setRMS01R(rms01r) \ + WIZCHIP_WRITE(RMS01R,rms01r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref RMS01R register + * @return uint16_t. Value of @ref RMS01R register. + * @sa setRMS01R() + */ +#define getRMS01R() \ + WIZCHIP_READ(RMS01R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref RMS23R register + * @param (uint16_t)rms23r Value to set @ref RMS23R register. The lower socket memory size is located at MSB of rms01r. + * @sa getRMS23R() + */ +#define setRMS23R(rms23r) \ + WIZCHIP_WRITE(RMS23R,rms23r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref RMS23R register + * @return uint16_t. Value of @ref RMS23R register. + * @sa setRMS23R() + */ +#define getRMS23R() \ + WIZCHIP_READ(RMS23R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref RMS45R register + * @param (uint16_t)rms45r Value to set @ref RMS45R register. The lower socket memory size is located at MSB of rms45r. + * @sa getRMS45R() + */ +#define setRMS45R(rms45r) \ + WIZCHIP_WRITE(RMS45R,rms45r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref RMS45R register + * @return uint16_t. Value of @ref RMS45R register. + * @sa setRMS45R() + */ +#define getRMS45R() \ + WIZCHIP_READ(RMS45R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref RMS67R register + * @param (uint16_t)rms67r Value to set @ref RMS67R register. The lower socket memory size is located at MSB of rms67r. + * @sa getRMS67R() + */ +#define setRMS67R(rms67r) \ + WIZCHIP_WRITE(RMS67R,rms67r) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref RMS67R register + * @return uint16_t. Value of @ref RMS67R register. + * @sa setRMS67R() + */ +#define getRMS67R() \ + WIZCHIP_READ(RMS67R) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref RMS01R ~ @ref RMS67R register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)rmsr Value to set @ref RMSR0 ~@ref RMSR7 register. + * @sa getTMSR() + */ +void setRMSR(uint8_t sn,uint8_t rmsr); +#define setSn_RXBUF_SIZE(sn,rmsr) setRMSR(sn, rmsr) ///< For compatible ioLibrary + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref RMS01R ~ @ref RMS67R register + * @param (uint8_t)sn Socket number. It shoudl be 0 ~ 7. + * @return uint8_t. Value of @ref RMSR0 ~ @ref RMSR7 register. + * @sa setRMSR() + */ +uint8_t getRMSR(uint8_t sn); +#define getSn_RXBUF_SIZE(sn) getRMSR(sn) ///< For compatible ioLibrary + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref MTYPER register + * @param (uint16_t)mtyper Value to set @ref MTYPER register. + * @sa getMTYPER() + */ +#define setMTYPER(mtype) \ + WIZCHIP_WRITE(MTYPER, mtype) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref MTYPER register + * @return uint16_t. Value of @ref MTYPER register. + * @sa setMTYPER() + */ +#define getMTYPER() \ + WIZCHIP_READ(MTYPER) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref RATR register + * @return uint16_t. Value of @ref PATR register. + */ +#define getPATR() \ + WIZCHIP_READ(PATR) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref PTIMER register + * @param (uint8_t)ptimer Value to set @ref PTIMER register. + * @sa getPTIMER() + */ +#define setPTIMER(ptimer) \ + WIZCHIP_WRITE(PTIMER, ((uint16_t)ptimer) & 0x00FF) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref PTIMER register + * @return uint8_t. Value of @ref PTIMER register. + * @sa setPTIMER() + */ +#define getPTIMER() \ + ((uint8_t)(WIZCHIP_READ(PTIMER) & 0x00FF)) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref PMAGIC register + * @param (uint8_t)pmagic Value to set @ref PMAGIC register. + * @sa getPMAGIC() + */ +#define setPMAGIC(pmagic) \ + WIZCHIP_WRITE(PMAGIC, ((uint16_t)pmagic) & 0x00FF) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref PMAGIC register + * @return uint8_t. Value of @ref PMAGIC register. + * @sa setPMAGIC() + */ +#define getPMAGIC() \ + ((uint8_t)(WIZCHIP_READ(PMAGIC) & 0x00FF)) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref PSID register + * @return uint16_t. Value of @ref PSID register. + */ +#define getPSIDR() \ + WIZCHIP_READ(PSIDR) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref PDHAR register + * @param (uint8_t*)pdhar Pointer variable to PPP destination MAC register address. It should be allocated 6 bytes. + */ +#define getPDHAR(pdhar) { \ + (pdhar)[0] = (uint8_t)(WIZCHIP_READ(PDHAR) >> 8); \ + (pdhar)[1] = (uint8_t)(WIZCHIP_READ(PDHAR)); \ + (pdhar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,2)) >> 8); \ + (pdhar)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,2))); \ + (pdhar)[4] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,4)) >> 8); \ + (pdhar)[5] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(PDHAR,4))); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get unreachable IP address. @ref UIPR + * @param (uint8_t*)uipr Pointer variable to get unreachable IP address. It should be allocated 4 bytes. + */ +#define getUIPR(uipr) { \ + (uipr)[0] = (uint8_t)(WIZCHIP_READ(UIPR) >> 8); \ + (uipr)[1] = (uint8_t)(WIZCHIP_READ(UIPR)); \ + (uipr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(UIPR,2)) >> 8); \ + (uipr)[3] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(UIPR,2))); \ + } + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref UPORTR register + * @return uint16_t. Value of @ref UPORTR register. + */ +#define getUPORTR() \ + WIZCHIP_READ(UPORTR) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref FMTUR register + * @return uint16_t. Value of @ref FMTUR register. + */ +#define getFMTUR() \ + WIZCHIP_READ(FMTUR) + + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref Pn_BRDYR register + * @return uint8_t. Value of @ref Pn_BRDYR register. + */ +#define getPn_BRDYR(p) \ + ((uint8_t)(WIZCHIP_READ(Pn_BRDYR(p)) & 0x00FF)) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref Pn_BRDYR register + * @param p Pin number (p = 0,1,2,3) + * @param brdyr Set a value @ref Pn_BRDYR(p). + */ +#define setPn_BRDYR(p, brdyr) \ + WIZCHIP_WRITE(Pn_BRDYR(p), brdyr & 0x00E7) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref Pn_BDPTHR register + * @param p Pin number (p = 0,1,2,3) + * @return uint16_t. Value of @ref Pn_BDPTHR register. + */ +#define getPn_BDPTHR(p) \ + WIZCHIP_READ(Pn_BDPTHR(p)) + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Set @ref Pn_BDPTHR register + * @param p Pin number (p = 0,1,2,3) + * @param bdpthr Value of @ref Pn_BDPTHR + */ +#define setPn_BDPTHR(p, bdpthr) \ + WIZCHIP_WRITE(Pn_BDPTHR(p),bdpthr) + + +/** + * @ingroup Common_register_access_function_W5300 + * @brief Get @ref IDR register + * @return uint16_t. Always 0x5300. + */ +#define getIDR() \ + WIZCHIP_READ(IDR) + + +/*********************************** + * SOCKET Register Access Function * + ***********************************/ + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_MR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)mr Value to set @ref Sn_MR + * @sa getSn_MR() + */ +#define setSn_MR(sn, mr) \ + WIZCHIP_WRITE(Sn_MR(sn),mr) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_MR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_MR. + * @sa setSn_MR() + */ +#define getSn_MR(sn) \ + WIZCHIP_READ(Sn_MR(sn)) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)cr Value to set @ref Sn_CR + * @sa getSn_CR() + */ +#define setSn_CR(sn, cr) \ + WIZCHIP_WRITE(Sn_CR(sn), ((uint16_t)cr) & 0x00FF) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_CR. + * @sa setSn_CR() + */ +#define getSn_CR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_CR(sn))) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)imr Value to set @ref Sn_IMR + * @sa getSn_IMR() + */ +#define setSn_IMR(sn, imr) \ + WIZCHIP_WRITE(Sn_IMR(sn), ((uint16_t)imr) & 0x00FF) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_IMR. + * @sa setSn_IMR() + */ +#define getSn_IMR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_IMR(sn))) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)ir Value to set @ref Sn_IR + * @sa getSn_IR() + */ +#define setSn_IR(sn, ir) \ + WIZCHIP_WRITE(Sn_IR(sn), ((uint16_t)ir) & 0x00FF) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_IR. + * @sa setSn_IR() + */ +#define getSn_IR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_IR(sn))) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_SR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_SR. + */ +#define getSn_SSR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_SR(sn))) +#define getSn_SR(sn) getSn_SSR(sn) ///< For compatible ioLibrary. Refer to getSn_SSR(). + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_PORTR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)port Variable to set @ref Sn_PORTR. + * @sa getSn_PORTR() + */ +#define setSn_PORTR(sn, port) \ + WIZCHIP_WRITE(Sn_PORTR(sn), port) +#define setSn_PORT(sn, port) setSn_PORTR(sn, port) ///< For compatible ioLibrary + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_PORTR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Variable of @ref Sn_PORTR. + * @sa setSn_PORTR() + */ +#define getSn_PORTR(sn) \ + WIZCHIP_READ(Sn_PORTR(sn)) +#define getSn_PORT(sn) getSn_PORTR(sn) ///< For compatible ioLibrary + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes. + * @sa getSn_DHAR() + */ +#define setSn_DHAR(sn, dhar) { \ + WIZCHIP_WRITE(Sn_DHAR(sn), (((uint16_t)((dhar)[0])) << 8) + (((uint16_t)((dhar)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),2), (((uint16_t)((dhar)[0])) << 8) + (((uint16_t)((dhar)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),4), (((uint16_t)((dhar)[0])) << 8) + (((uint16_t)((dhar)[1])) & 0x00FF)); \ + } + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_MR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes. + * @sa setSn_DHAR() + */ +#define getSn_DHAR(sn, dhar) { \ + (dhar)[0] = (uint8_t)(WIZCHIP_READ(Sn_DHAR(sn)) >> 8); \ + (dhar)[1] = (uint8_t) WIZCHIP_READ(Sn_DHAR(sn)); \ + (dhar)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),2)) >> 8); \ + (dhar)[3] = (uint8_t) WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),2)); \ + (dhar)[4] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),4)) >> 8); \ + (dhar)[5] = (uint8_t) WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DHAR(sn),4)); \ + } + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)dport Value to set @ref Sn_DPORT + * @sa getSn_DPORT() + */ +#define setSn_DPORTR(sn, dport) \ + WIZCHIP_WRITE(Sn_DPORTR(sn),dport) +#define setSn_DPORT(sn, dport) setSn_DPORTR(sn,dport) ///< For compatible ioLibrary. Refer to @ref Sn_DPORTR. + + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_DPORT. + * @sa setSn_DPORT() + * @note This function is not available because W5300 have a bug to read @ref Sn_DPORTR. \n + * Don't use this function. + */ +#define getSn_DPORTR(sn) \ + WIZCHIP_READ(Sn_DPORTR(sn)) +#define getSn_DPORT(sn) getSn_DPORTR(sn) ///< For compatible ioLibrary. Refer to @ref Sn_DPORTR. + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes. + * @sa getSn_DIPR() + */ +#define setSn_DIPR(sn, dipr) { \ + WIZCHIP_WRITE(Sn_DIPR(sn), (((uint16_t)((dipr)[0])) << 8) + (((uint16_t)((dipr)[1])) & 0x00FF)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DIPR(sn),2), (((uint16_t)((dipr)[2])) << 8) + (((uint16_t)((dipr)[3])) & 0x00FF)); \ + } + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes. + * @sa setSn_DIPR() + */ +#define getSn_DIPR(sn, dipr) { \ + (dipr)[0] = (uint8_t)(WIZCHIP_READ(Sn_DIPR(sn)) >> 8); \ + (dipr)[1] = (uint8_t) WIZCHIP_READ(Sn_DIPR(sn)); \ + (dipr)[2] = (uint8_t)(WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DIPR(sn),2)) >> 8); \ + (dipr)[3] = (uint8_t) WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DIPR(sn),2)); \ + } + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)mss Value to set @ref Sn_MSSR + * @sa setSn_MSSR() + */ +#define setSn_MSSR(sn, mss) \ + WIZCHIP_WRITE(Sn_MSSR(sn), mss) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_MSSR. + * @sa setSn_MSSR() + */ +#define getSn_MSSR(sn) \ + WIZCHIP_READ(Sn_MSSR(sn)) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_KPALVTR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)kpalvt Value to set @ref Sn_KPALVTR + * @sa getSn_KPALVTR() + */ +#define setSn_KPALVTR(sn, kpalvt) \ + WIZCHIP_WRITE(Sn_KPALVTR(sn), (WIZCHIP_READ(Sn_KPALVTR(sn)) & 0x00FF) | (((uint16_t)kpalvt)<<8)) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_KPALVTR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_KPALVTR. + * @sa setSn_KPALVTR() + */ +#define getSn_KPALVTR(sn) \ + ((uint8_t)(WIZCHIP_READ(Sn_KPALVTR(sn)) >> 8)) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_PROTOR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)proto Value to set \ref Sn_PROTOR + * @sa getSn_PROTOR() + */ +#define setSn_PROTOR(sn, proto) \ + WIZCHIP_WRITE(Sn_PROTOR(sn),(WIZCHIP_READ(Sn_PROTOR(sn)) & 0xFF00) | (((uint16_t)proto) & 0x00FF)) +#define setSn_PROTO(sn,proto) setSn_PROTOR(sn,proto) ///< For compatible ioLibrary + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_PROTOR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return uint8_t. Value of @ref Sn_PROTOR. + * @sa setSn_PROTOR() + */ +#define getSn_PROTOR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_PROTOR(sn))) +#define getSn_PROTO(sn) getSn_PROTOR(sn) ///< For compatible ioLibrary + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_TX_WRSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint32_t)txwrs Value to set @ref Sn_KPALVTR (It should be <= 0x00010000) + * @sa getSn_TX_WRSR() + */ +#define setSn_TX_WRSR(sn, txwrs) { \ + WIZCHIP_WRITE(Sn_TX_WRSR(sn), (uint16_t)(((uint32_t)txwrs) >> 16)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_TX_WRSR(sn),2), (uint16_t)txwrs); \ + } + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_TX_WRSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint32_t. Value of Sn_TX_WRSR. + * @sa setSn_TX_WRSR() + */ +#define getSn_TX_WRSR(sn) \ + ( (((uint32_t)WIZCHIP_READ(Sn_TX_WRSR(sn))) << 16) + (((uint32_t)WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WRSR(sn),1))) & 0x0000FFFF) ) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_TX_FSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint32_t. Value of @ref Sn_TX_FSR. + */ +uint32_t getSn_TX_FSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_RX_RSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint32_t. Value of @ref Sn_RX_RSR. + */ +uint32_t getSn_RX_RSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_TX_FIFOR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)txfifo. Value to set @ref Sn_TX_FIFOR. + */ +#define setSn_TX_FIFOR(sn, txfifo) \ + WIZCHIP_WRITE(Sn_TX_FIFOR(sn), txfifo); + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_RX_FIFOR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_RX_FIFOR. + */ +#define getSn_RX_FIFOR(sn) \ + WIZCHIP_READ(Sn_RX_FIFOR(sn)); + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_TOSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param (uint8_t)tos Value to set @ref Sn_TOSR + * @sa getSn_TOSR() + */ +#define setSn_TOSR(sn, tos) \ + WIZCHIP_WRITE(Sn_TOS(sn), ((uint16_t)tos) & 0x00FF) +#define setSn_TOS(sn,tos) setSn_TOSR(sn,tos) ///< For compatible ioLibrar + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_TOSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_ . + * @return uint8_t. Value of Sn_TOSR. + * @sa setSn_TOSR() + */ +#define getSn_TOSR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_TOSR(sn))) +#define getSn_TOS(sn) getSn_TOSR(sn) ///< For compatible ioLibrar + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_TTLR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)ttl Value to set @ref Sn_TTLR + * @sa getSn_TTLR() + */ +#define setSn_TTLR(sn, ttl) \ + WIZCHIP_WRITE(Sn_TTLR(sn), ((uint16_t)ttl) & 0x00FF) +#define setSn_TTL(sn,ttl) setSn_TTLR(sn,ttl) ///< For compatible ioLibrary + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_TTLR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_TTLR. + * @sa setSn_TTLR() + */ +#define getSn_TTLR(sn) \ + ((uint8_t)WIZCHIP_READ(Sn_TTL(sn))) +#define getSn_TTL(sn) getSn_TTLR(sn) ///< For compatible ioLibrary + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Set @ref Sn_FRAGR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)frag Value to set @ref Sn_FRAGR + * @sa getSn_FRAGR() + */ +#define setSn_FRAGR(sn, frag) \ + WIZCHIP_WRITE(Sn_FRAGR(sn), ((uint16_t)frag) & 0x00FF) +#define setSn_FRAG(sn,frag) setSn_FRAGR(sn,flag) + +/** + * @ingroup Socket_register_access_function_W5300 + * @brief Get @ref Sn_FRAGR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_FRAGR. + * @sa setSn_FRAGR() + */ +#define getSn_FRAGR(sn) \ + (WIZCHIP_READ(Sn_FRAG(sn))) +#define getSn_FRAG(sn) getSn_FRAGR(sn) + + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// + +/** + * @brief Socket_register_access_function_W5300 + * @brief Gets the max buffer size of socket sn passed as parameter. + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint32_t. Value of Socket n RX max buffer size. + */ +#define getSn_RxMAX(sn) \ + (((uint32_t)getSn_RXBUF_SIZE(sn)) << 10) + +/** + * @brief Socket_register_access_function_W5300 + * @brief Gets the max buffer size of socket sn passed as parameters. + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint32_t. Value of Socket n TX max buffer size. + */ +#define getSn_TxMAX(sn) \ + (((uint32_t)getSn_TXBUF_SIZE(sn)) << 10) + +/** + * @ingroup Basic_IO_function_W5300 + * @brief It copies data to internal TX memory + * + * @details This function reads the Tx write pointer register and after that, + * it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + * and updates the Tx write pointer register. + * This function is being called by send() and sendto() function also. + * + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param wizdata Pointer buffer to write data + * @param len Data length + * @sa wiz_recv_data() + */ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint32_t len); + +/** + * @ingroup Basic_IO_function_W5300 + * @brief It copies data to your buffer from internal RX memory + * + * @details This function read the Rx read pointer register and after that, + * it copies the received data from internal RX memory + * to wizdata(pointer variable) of the length of len(variable) bytes. + * This function is being called by recv() also. + * + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param wizdata Pointer buffer to read data + * @param len Data length + * @sa wiz_send_data() + */ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint32_t len); + +/** + * @ingroup Basic_IO_function_W5300 + * @brief It discard the received data in RX memory. + * @details It discards the data of the length of len(variable) bytes in internal RX memory. + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param len Data length + */ +void wiz_recv_ignore(uint8_t sn, uint32_t len); + +/// \cond DOXY_APPLY_CODE +#endif +/// \endcond + +#ifdef __cplusplus +} +#endif + +#endif // _W5300_H_ diff --git a/Ethernet/W5500/w5500.c b/Ethernet/W5500/w5500.c new file mode 100644 index 0000000..68d4cb8 --- /dev/null +++ b/Ethernet/W5500/w5500.c @@ -0,0 +1,267 @@ +//***************************************************************************** +// +//! \file w5500.c +//! \brief W5500 HAL Interface. +//! \version 1.0.2 +//! \date 2013/10/21 +//! \par Revision history +//! <2015/02/05> Notice +//! The version history is not updated after this point. +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! <2014/05/01> V1.0.2 +//! 1. Implicit type casting -> Explicit type casting. Refer to M20140501 +//! Fixed the problem on porting into under 32bit MCU +//! Issued by Mathias ClauBen, wizwiki forum ID Think01 and bobh +//! Thank for your interesting and serious advices. +//! <2013/12/20> V1.0.1 +//! 1. Remove warning +//! 2. WIZCHIP_READ_BUF WIZCHIP_WRITE_BUF in case _WIZCHIP_IO_MODE_SPI_FDM_ +//! for loop optimized(removed). refer to M20131220 +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** +//#include +#include "w5500.h" + +#define _W5500_SPI_VDM_OP_ 0x00 +#define _W5500_SPI_FDM_OP_LEN1_ 0x01 +#define _W5500_SPI_FDM_OP_LEN2_ 0x02 +#define _W5500_SPI_FDM_OP_LEN4_ 0x03 + +#if (_WIZCHIP_ == 5500) +//////////////////////////////////////////////////// + +uint8_t WIZCHIP_READ(uint32_t AddrSel) +{ + uint8_t ret; + uint8_t spi_data[3]; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + + AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_); + + if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation + { + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + } + else // burst operation + { + spi_data[0] = (AddrSel & 0x00FF0000) >> 16; + spi_data[1] = (AddrSel & 0x0000FF00) >> 8; + spi_data[2] = (AddrSel & 0x000000FF) >> 0; + WIZCHIP.IF.SPI._write_burst(spi_data, 3); + } + ret = WIZCHIP.IF.SPI._read_byte(); + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); + return ret; +} + +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ) +{ + uint8_t spi_data[4]; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + + AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_); + + //if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation + if(!WIZCHIP.IF.SPI._write_burst) // byte operation + { + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + WIZCHIP.IF.SPI._write_byte(wb); + } + else // burst operation + { + spi_data[0] = (AddrSel & 0x00FF0000) >> 16; + spi_data[1] = (AddrSel & 0x0000FF00) >> 8; + spi_data[2] = (AddrSel & 0x000000FF) >> 0; + spi_data[3] = wb; + WIZCHIP.IF.SPI._write_burst(spi_data, 4); + } + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} + +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint8_t spi_data[3]; + uint16_t i; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + + AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_); + + if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation + { + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + for(i = 0; i < len; i++) + pBuf[i] = WIZCHIP.IF.SPI._read_byte(); + } + else // burst operation + { + spi_data[0] = (AddrSel & 0x00FF0000) >> 16; + spi_data[1] = (AddrSel & 0x0000FF00) >> 8; + spi_data[2] = (AddrSel & 0x000000FF) >> 0; + WIZCHIP.IF.SPI._write_burst(spi_data, 3); + WIZCHIP.IF.SPI._read_burst(pBuf, len); + } + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} + +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len) +{ + uint8_t spi_data[3]; + uint16_t i; + + WIZCHIP_CRITICAL_ENTER(); + WIZCHIP.CS._select(); + + AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_); + + if(!WIZCHIP.IF.SPI._write_burst) // byte operation + { + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8); + WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0); + for(i = 0; i < len; i++) + WIZCHIP.IF.SPI._write_byte(pBuf[i]); + } + else // burst operation + { + spi_data[0] = (AddrSel & 0x00FF0000) >> 16; + spi_data[1] = (AddrSel & 0x0000FF00) >> 8; + spi_data[2] = (AddrSel & 0x000000FF) >> 0; + WIZCHIP.IF.SPI._write_burst(spi_data, 3); + WIZCHIP.IF.SPI._write_burst(pBuf, len); + } + + WIZCHIP.CS._deselect(); + WIZCHIP_CRITICAL_EXIT(); +} + + +uint16_t getSn_TX_FSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + + do + { + val1 = WIZCHIP_READ(Sn_TX_FSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_TX_FSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); + } + }while (val != val1); + return val; +} + + +uint16_t getSn_RX_RSR(uint8_t sn) +{ + uint16_t val=0,val1=0; + + do + { + val1 = WIZCHIP_READ(Sn_RX_RSR(sn)); + val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + if (val1 != 0) + { + val = WIZCHIP_READ(Sn_RX_RSR(sn)); + val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); + } + }while (val != val1); + return val; +} + +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr = 0; + uint32_t addrsel = 0; + + if(len == 0) return; + ptr = getSn_TX_WR(sn); + //M20140501 : implict type casting -> explict type casting + //addrsel = (ptr << 8) + (WIZCHIP_TXBUF_BLOCK(sn) << 3); + addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_TXBUF_BLOCK(sn) << 3); + // + WIZCHIP_WRITE_BUF(addrsel,wizdata, len); + + ptr += len; + setSn_TX_WR(sn,ptr); +} + +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr = 0; + uint32_t addrsel = 0; + + if(len == 0) return; + ptr = getSn_RX_RD(sn); + //M20140501 : implict type casting -> explict type casting + //addrsel = ((ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sn) << 3); + addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sn) << 3); + // + WIZCHIP_READ_BUF(addrsel, wizdata, len); + ptr += len; + + setSn_RX_RD(sn,ptr); +} + + +void wiz_recv_ignore(uint8_t sn, uint16_t len) +{ + uint16_t ptr = 0; + + ptr = getSn_RX_RD(sn); + ptr += len; + setSn_RX_RD(sn,ptr); +} + +#endif diff --git a/Ethernet/W5500/w5500.h b/Ethernet/W5500/w5500.h new file mode 100644 index 0000000..3afc16e --- /dev/null +++ b/Ethernet/W5500/w5500.h @@ -0,0 +1,2163 @@ +//***************************************************************************** +// +//! \file w5500.h +//! \brief W5500 HAL Header File. +//! \version 1.0.0 +//! \date 2013/10/21 +//! \par Revision history +//! <2015/02/05> Notice +//! The version history is not updated after this point. +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +// + +#ifndef _W5500_H_ +#define _W5500_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "wizchip_conf.h" + +/// @cond DOXY_APPLY_CODE +#if (_WIZCHIP_ == 5500) +/// @endcond + +#define _W5500_IO_BASE_ 0x00000000 + +#define _W5500_SPI_READ_ (0x00 << 2) //< SPI interface Read operation in Control Phase +#define _W5500_SPI_WRITE_ (0x01 << 2) //< SPI interface Write operation in Control Phase + +#define WIZCHIP_CREG_BLOCK 0x00 //< Common register block +#define WIZCHIP_SREG_BLOCK(N) (1+4*N) //< Socket N register block +#define WIZCHIP_TXBUF_BLOCK(N) (2+4*N) //< Socket N Tx buffer address block +#define WIZCHIP_RXBUF_BLOCK(N) (3+4*N) //< Socket N Rx buffer address block + +#define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + (N<<8)) //< Increase offset address + + +/////////////////////////////////////// +// Definition For Legacy Chip Driver // +/////////////////////////////////////// +#define IINCHIP_READ(ADDR) WIZCHIP_READ(ADDR) ///< The defined for legacy chip driver +#define IINCHIP_WRITE(ADDR,VAL) WIZCHIP_WRITE(ADDR,VAL) ///< The defined for legacy chip driver +#define IINCHIP_READ_BUF(ADDR,BUF,LEN) WIZCHIP_READ_BUF(ADDR,BUF,LEN) ///< The defined for legacy chip driver +#define IINCHIP_WRITE_BUF(ADDR,BUF,LEN) WIZCHIP_WRITE(ADDR,BUF,LEN) ///< The defined for legacy chip driver + +////////////////////////////// +//-------------------------- defgroup --------------------------------- +/** + * @defgroup W5500 W5500 + * + * @brief WHIZCHIP register defines and I/O functions of @b W5500. + * + * - @ref WIZCHIP_register : @ref Common_register_group and @ref Socket_register_group + * - @ref WIZCHIP_IO_Functions : @ref Basic_IO_function, @ref Common_register_access_function and @ref Socket_register_access_function + */ + + +/** + * @defgroup WIZCHIP_register WIZCHIP register + * @ingroup W5500 + * + * @brief WHIZCHIP register defines register group of @b W5500. + * + * - @ref Common_register_group : Common register group + * - @ref Socket_register_group : \c SOCKET n register group + */ + + +/** + * @defgroup WIZCHIP_IO_Functions WIZCHIP I/O functions + * @ingroup W5500 + * + * @brief This supports the basic I/O functions for @ref WIZCHIP_register. + * + * - Basic I/O function \n + * WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() \n\n + * + * - @ref Common_register_group access functions \n + * -# @b Mode \n + * getMR(), setMR() + * -# @b Interrupt \n + * getIR(), setIR(), getIMR(), setIMR(), getSIR(), setSIR(), getSIMR(), setSIMR(), getINTLEVEL(), setINTLEVEL() + * -# Network Information \n + * getSHAR(), setSHAR(), getGAR(), setGAR(), getSUBR(), setSUBR(), getSIPR(), setSIPR() + * -# @b Retransmission \n + * getRCR(), setRCR(), getRTR(), setRTR() + * -# @b PPPoE \n + * getPTIMER(), setPTIMER(), getPMAGIC(), getPMAGIC(), getPSID(), setPSID(), getPHAR(), setPHAR(), getPMRU(), setPMRU() + * -# ICMP packet \n + * getUIPR(), getUPORTR() + * -# @b etc. \n + * getPHYCFGR(), setPHYCFGR(), getVERSIONR() \n\n + * + * - \ref Socket_register_group access functions \n + * -# SOCKET control \n + * getSn_MR(), setSn_MR(), getSn_CR(), setSn_CR(), getSn_IMR(), setSn_IMR(), getSn_IR(), setSn_IR() + * -# SOCKET information \n + * getSn_SR(), getSn_DHAR(), setSn_DHAR(), getSn_PORT(), setSn_PORT(), getSn_DIPR(), setSn_DIPR(), getSn_DPORT(), setSn_DPORT() + * getSn_MSSR(), setSn_MSSR() + * -# SOCKET communication \n + * getSn_RXBUF_SIZE(), setSn_RXBUF_SIZE(), getSn_TXBUF_SIZE(), setSn_TXBUF_SIZE() \n + * getSn_TX_RD(), getSn_TX_WR(), setSn_TX_WR() \n + * getSn_RX_RD(), setSn_RX_RD(), getSn_RX_WR() \n + * getSn_TX_FSR(), getSn_RX_RSR(), getSn_KPALVTR(), setSn_KPALVTR() + * -# IP header field \n + * getSn_FRAG(), setSn_FRAG(), getSn_TOS(), setSn_TOS() \n + * getSn_TTL(), setSn_TTL() + */ + + + +/** + * @defgroup Common_register_group Common register + * @ingroup WIZCHIP_register + * + * @brief Common register group\n + * It set the basic for the networking\n + * It set the configuration such as interrupt, network information, ICMP, etc. + * @details + * @sa MR : Mode register. + * @sa GAR, SUBR, SHAR, SIPR + * @sa INTLEVEL, IR, IMR, SIR, SIMR : Interrupt. + * @sa _RTR_, _RCR_ : Data retransmission. + * @sa PTIMER, PMAGIC, PHAR, PSID, PMRU : PPPoE. + * @sa UIPR, UPORTR : ICMP message. + * @sa PHYCFGR, VERSIONR : etc. + */ + + + +/** + * @defgroup Socket_register_group Socket register + * @ingroup WIZCHIP_register + * + * @brief Socket register group.\n + * Socket register configures and control SOCKETn which is necessary to data communication. + * @details + * @sa Sn_MR, Sn_CR, Sn_IR, Sn_IMR : SOCKETn Control + * @sa Sn_SR, Sn_PORT, Sn_DHAR, Sn_DIPR, Sn_DPORT : SOCKETn Information + * @sa Sn_MSSR, Sn_TOS, Sn_TTL, Sn_KPALVTR, Sn_FRAG : Internet protocol. + * @sa Sn_RXBUF_SIZE, Sn_TXBUF_SIZE, Sn_TX_FSR, Sn_TX_RD, Sn_TX_WR, Sn_RX_RSR, Sn_RX_RD, Sn_RX_WR : Data communication + */ + + + + /** + * @defgroup Basic_IO_function Basic I/O function + * @ingroup WIZCHIP_IO_Functions + * @brief These are basic input/output functions to read values from register or write values to register. + */ + +/** + * @defgroup Common_register_access_function Common register access functions + * @ingroup WIZCHIP_IO_Functions + * @brief These are functions to access common registers. + */ + +/** + * @defgroup Socket_register_access_function Socket register access functions + * @ingroup WIZCHIP_IO_Functions + * @brief These are functions to access socket registers. + */ + +//------------------------------- defgroup end -------------------------------------------- +//----------------------------- W5500 Common Registers IOMAP ----------------------------- +/** + * @ingroup Common_register_group + * @brief Mode Register address(R/W)\n + * @ref MR is used for S/W reset, ping block mode, PPPoE mode and etc. + * @details Each bit of @ref MR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    RST Reserved WOL PB PPPoE Reserved FARP Reserved
    + * - \ref MR_RST : Reset + * - \ref MR_WOL : Wake on LAN + * - \ref MR_PB : Ping block + * - \ref MR_PPPOE : PPPoE mode + * - \ref MR_FARP : Force ARP mode + */ +#define MR (_W5500_IO_BASE_ + (0x0000 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Gateway IP Register address(R/W) + * @details @ref GAR configures the default gateway address. + */ +#define GAR (_W5500_IO_BASE_ + (0x0001 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Subnet mask Register address(R/W) + * @details @ref SUBR configures the subnet mask address. + */ +#define SUBR (_W5500_IO_BASE_ + (0x0005 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Source MAC Register address(R/W) + * @details @ref SHAR configures the source hardware address. + */ +#define SHAR (_W5500_IO_BASE_ + (0x0009 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Source IP Register address(R/W) + * @details @ref SIPR configures the source IP address. + */ +#define SIPR (_W5500_IO_BASE_ + (0x000F << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Set Interrupt low level timer register address(R/W) + * @details @ref INTLEVEL configures the Interrupt Assert Time. + */ +#define INTLEVEL (_W5500_IO_BASE_ + (0x0013 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Interrupt Register(R/W) + * @details @ref IR indicates the interrupt status. Each bit of @ref IR will be still until the bit will be written to by the host. + * If @ref IR is not equal to x00 INTn PIN is asserted to low until it is x00\n\n + * Each bit of @ref IR defined as follows. + * + * + * + *
    7 6 5 4 3 2 1 0
    CONFLICT UNREACH PPPoE MP Reserved Reserved Reserved Reserved
    + * - \ref IR_CONFLICT : IP conflict + * - \ref IR_UNREACH : Destination unreachable + * - \ref IR_PPPoE : PPPoE connection close + * - \ref IR_MP : Magic packet + */ +#define IR (_W5500_IO_BASE_ + (0x0015 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Interrupt mask register(R/W) + * @details @ref _IMR_ is used to mask interrupts. Each bit of @ref _IMR_ corresponds to each bit of @ref IR. + * When a bit of @ref _IMR_ is and the corresponding bit of @ref IR is an interrupt will be issued. In other words, + * if a bit of @ref _IMR_ is an interrupt will not be issued even if the corresponding bit of @ref IR is \n\n + * Each bit of @ref _IMR_ defined as the following. + * + * + * + *
    7 6 5 4 3 2 1 0
    IM_IR7 IM_IR6 IM_IR5 IM_IR4 Reserved Reserved Reserved Reserved
    + * - \ref IM_IR7 : IP Conflict Interrupt Mask + * - \ref IM_IR6 : Destination unreachable Interrupt Mask + * - \ref IM_IR5 : PPPoE Close Interrupt Mask + * - \ref IM_IR4 : Magic Packet Interrupt Mask + */ +//M20150401 : Rename SYMBOE ( Re-define error in a compile) +//#define IMR (_W5500_IO_BASE_ + (0x0016 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +#define _IMR_ (_W5500_IO_BASE_ + (0x0016 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Socket Interrupt Register(R/W) + * @details @ref SIR indicates the interrupt status of Socket.\n + * Each bit of @ref SIR be still until @ref Sn_IR is cleared by the host.\n + * If @ref Sn_IR is not equal to x00 the n-th bit of @ref SIR is and INTn PIN is asserted until @ref SIR is x00 */ +#define SIR (_W5500_IO_BASE_ + (0x0017 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Socket Interrupt Mask Register(R/W) + * @details Each bit of @ref SIMR corresponds to each bit of @ref SIR. + * When a bit of @ref SIMR is and the corresponding bit of @ref SIR is Interrupt will be issued. + * In other words, if a bit of @ref SIMR is an interrupt will be not issued even if the corresponding bit of @ref SIR is + */ +#define SIMR (_W5500_IO_BASE_ + (0x0018 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Timeout register address( 1 is 100us )(R/W) + * @details @ref _RTR_ configures the retransmission timeout period. The unit of timeout period is 100us and the default of @ref _RTR_ is x07D0. + * And so the default timeout period is 200ms(100us X 2000). During the time configured by @ref _RTR_, W5500 waits for the peer response + * to the packet that is transmitted by \ref Sn_CR (CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP command). + * If the peer does not respond within the @ref _RTR_ time, W5500 retransmits the packet or issues timeout. + */ +//M20150401 : Rename SYMBOE ( Re-define error in a compile) +//#define RTR (_W5500_IO_BASE_ + (0x0019 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +#define _RTR_ (_W5500_IO_BASE_ + (0x0019 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Retry count register(R/W) + * @details @ref _RCR_ configures the number of time of retransmission. + * When retransmission occurs as many as ref _RCR_+1 Timeout interrupt is issued (@ref Sn_IR_TIMEOUT = '1'). + */ +//M20150401 : Rename SYMBOE ( Re-define error in a compile) +//#define RCR (_W5500_IO_BASE_ + (0x001B << 8) + (WIZCHIP_CREG_BLOCK << 3)) +#define _RCR_ (_W5500_IO_BASE_ + (0x001B << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief PPP LCP Request Timer register in PPPoE mode(R/W) + * @details @ref PTIMER configures the time for sending LCP echo request. The unit of time is 25ms. + */ +#define PTIMER (_W5500_IO_BASE_ + (0x001C << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief PPP LCP Magic number register in PPPoE mode(R/W) + * @details @ref PMAGIC configures the 4bytes magic number to be used in LCP negotiation. + */ +#define PMAGIC (_W5500_IO_BASE_ + (0x001D << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief PPP Destination MAC Register address(R/W) + * @details @ref PHAR configures the PPPoE server hardware address that is acquired during PPPoE connection process. + */ +#define PHAR (_W5500_IO_BASE_ + (0x001E << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief PPP Session Identification Register(R/W) + * @details @ref PSID configures the PPPoE sever session ID acquired during PPPoE connection process. + */ +#define PSID (_W5500_IO_BASE_ + (0x0024 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief PPP Maximum Segment Size(MSS) register(R/W) + * @details @ref PMRU configures the maximum receive unit of PPPoE. + */ +#define PMRU (_W5500_IO_BASE_ + (0x0026 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Unreachable IP register address in UDP mode(R) + * @details W5500 receives an ICMP packet(Destination port unreachable) when data is sent to a port number + * which socket is not open and @ref IR_UNREACH bit of @ref IR becomes and @ref UIPR & @ref UPORTR indicates + * the destination IP address & port number respectively. + */ +#define UIPR (_W5500_IO_BASE_ + (0x0028 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief Unreachable Port register address in UDP mode(R) + * @details W5500 receives an ICMP packet(Destination port unreachable) when data is sent to a port number + * which socket is not open and @ref IR_UNREACH bit of @ref IR becomes and @ref UIPR & @ref UPORTR + * indicates the destination IP address & port number respectively. + */ +#define UPORTR (_W5500_IO_BASE_ + (0x002C << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief PHY Status Register(R/W) + * @details @ref PHYCFGR configures PHY operation mode and resets PHY. In addition, @ref PHYCFGR indicates the status of PHY such as duplex, Speed, Link. + */ +#define PHYCFGR (_W5500_IO_BASE_ + (0x002E << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +// Reserved (_W5500_IO_BASE_ + (0x002F << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0030 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0031 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0032 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0033 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0034 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0035 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0036 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0037 << 8) + (WIZCHIP_CREG_BLOCK << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0038 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + +/** + * @ingroup Common_register_group + * @brief chip version register address(R) + * @details @ref VERSIONR always indicates the W5500 version as @b 0x04. + */ +#define VERSIONR (_W5500_IO_BASE_ + (0x0039 << 8) + (WIZCHIP_CREG_BLOCK << 3)) + + +//----------------------------- W5500 Socket Registers IOMAP ----------------------------- +/** + * @ingroup Socket_register_group + * @brief socket Mode register(R/W) + * @details @ref Sn_MR configures the option or protocol type of Socket n.\n\n + * Each bit of @ref Sn_MR defined as the following. + * + * + * + *
    7 6 5 4 3 2 1 0
    MULTI/MFEN BCASTB ND/MC/MMB UCASTB/MIP6B Protocol[3] Protocol[2] Protocol[1] Protocol[0]
    + * - @ref Sn_MR_MULTI : Support UDP Multicasting + * - @ref Sn_MR_BCASTB : Broadcast block in UDP Multicasting + * - @ref Sn_MR_ND : No Delayed Ack(TCP) flag + * - @ref Sn_MR_MC : IGMP version used in UDP mulitcasting + * - @ref Sn_MR_MMB : Multicast Blocking in @ref Sn_MR_MACRAW mode + * - @ref Sn_MR_UCASTB : Unicast Block in UDP Multicating + * - @ref Sn_MR_MIP6B : IPv6 packet Blocking in @ref Sn_MR_MACRAW mode + * - Protocol + * + * + * + * + * + * + *
    Protocol[3] Protocol[2] Protocol[1] Protocol[0] @b Meaning
    0 0 0 0 Closed
    0 0 0 1 TCP
    0 0 1 0 UDP
    0 1 0 0 MACRAW
    + * - @ref Sn_MR_MACRAW : MAC LAYER RAW SOCK \n + * - @ref Sn_MR_UDP : UDP + * - @ref Sn_MR_TCP : TCP + * - @ref Sn_MR_CLOSE : Unused socket + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR(N) (_W5500_IO_BASE_ + (0x0000 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Socket command register(R/W) + * @details This is used to set the command for Socket n such as OPEN, CLOSE, CONNECT, LISTEN, SEND, and RECEIVE.\n + * After W5500 accepts the command, the @ref Sn_CR register is automatically cleared to 0x00. + * Even though @ref Sn_CR is cleared to 0x00, the command is still being processed.\n + * To check whether the command is completed or not, please check the @ref Sn_IR or @ref Sn_SR. + * - @ref Sn_CR_OPEN : Initialize or open socket. + * - @ref Sn_CR_LISTEN : Wait connection request in TCP mode(Server mode) + * - @ref Sn_CR_CONNECT : Send connection request in TCP mode(Client mode) + * - @ref Sn_CR_DISCON : Send closing request in TCP mode. + * - @ref Sn_CR_CLOSE : Close socket. + * - @ref Sn_CR_SEND : Update TX buffer pointer and send data. + * - @ref Sn_CR_SEND_MAC : Send data with MAC address, so without ARP process. + * - @ref Sn_CR_SEND_KEEP : Send keep alive message. + * - @ref Sn_CR_RECV : Update RX buffer pointer and receive data. + */ +#define Sn_CR(N) (_W5500_IO_BASE_ + (0x0001 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Socket interrupt register(R) + * @details @ref Sn_IR indicates the status of Socket Interrupt such as establishment, termination, receiving data, timeout).\n + * When an interrupt occurs and the corresponding bit of @ref Sn_IMR is the corresponding bit of @ref Sn_IR becomes \n + * In order to clear the @ref Sn_IR bit, the host should write the bit to \n + * + * + * + *
    7 6 5 4 3 2 1 0
    Reserved Reserved Reserved SEND_OK TIMEOUT RECV DISCON CON
    + * - \ref Sn_IR_SENDOK : SEND_OK Interrupt + * - \ref Sn_IR_TIMEOUT : TIMEOUT Interrupt + * - \ref Sn_IR_RECV : RECV Interrupt + * - \ref Sn_IR_DISCON : DISCON Interrupt + * - \ref Sn_IR_CON : CON Interrupt + */ +#define Sn_IR(N) (_W5500_IO_BASE_ + (0x0002 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Socket status register(R) + * @details @ref Sn_SR indicates the status of Socket n.\n + * The status of Socket n is changed by @ref Sn_CR or some special control packet as SYN, FIN packet in TCP. + * @par Normal status + * - @ref SOCK_CLOSED : Closed + * - @ref SOCK_INIT : Initiate state + * - @ref SOCK_LISTEN : Listen state + * - @ref SOCK_ESTABLISHED : Success to connect + * - @ref SOCK_CLOSE_WAIT : Closing state + * - @ref SOCK_UDP : UDP socket + * - @ref SOCK_MACRAW : MAC raw mode socket + *@par Temporary status during changing the status of Socket n. + * - @ref SOCK_SYNSENT : This indicates Socket n sent the connect-request packet (SYN packet) to a peer. + * - @ref SOCK_SYNRECV : It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer. + * - @ref SOCK_FIN_WAIT : Connection state + * - @ref SOCK_CLOSING : Closing state + * - @ref SOCK_TIME_WAIT : Closing state + * - @ref SOCK_LAST_ACK : Closing state + */ +#define Sn_SR(N) (_W5500_IO_BASE_ + (0x0003 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief source port register(R/W) + * @details @ref Sn_PORT configures the source port number of Socket n. + * It is valid when Socket n is used in TCP/UDP mode. It should be set before OPEN command is ordered. + */ +#define Sn_PORT(N) (_W5500_IO_BASE_ + (0x0004 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Peer MAC register address(R/W) + * @details @ref Sn_DHAR configures the destination hardware address of Socket n when using SEND_MAC command in UDP mode or + * it indicates that it is acquired in ARP-process by CONNECT/SEND command. + */ +#define Sn_DHAR(N) (_W5500_IO_BASE_ + (0x0006 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Peer IP register address(R/W) + * @details @ref Sn_DIPR configures or indicates the destination IP address of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP client mode, it configures an IP address of TCP serverbefore CONNECT command. + * In TCP server mode, it indicates an IP address of TCP clientafter successfully establishing connection. + * In UDP mode, it configures an IP address of peer to be received the UDP packet by SEND or SEND_MAC command. + */ +#define Sn_DIPR(N) (_W5500_IO_BASE_ + (0x000C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Peer port register address(R/W) + * @details @ref Sn_DPORT configures or indicates the destination port number of Socket n. It is valid when Socket n is used in TCP/UDP mode. + * In TCP clientmode, it configures the listen port number of TCP serverbefore CONNECT command. + * In TCP Servermode, it indicates the port number of TCP client after successfully establishing connection. + * In UDP mode, it configures the port number of peer to be transmitted the UDP packet by SEND/SEND_MAC command. + */ +#define Sn_DPORT(N) (_W5500_IO_BASE_ + (0x0010 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Maximum Segment Size(Sn_MSSR0) register address(R/W) + * @details @ref Sn_MSSR configures or indicates the MTU(Maximum Transfer Unit) of Socket n. + */ +#define Sn_MSSR(N) (_W5500_IO_BASE_ + (0x0012 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +// Reserved (_W5500_IO_BASE_ + (0x0014 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief IP Type of Service(TOS) Register(R/W) + * @details @ref Sn_TOS configures the TOS(Type Of Service field in IP Header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TOS(N) (_W5500_IO_BASE_ + (0x0015 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +/** + * @ingroup Socket_register_group + * @brief IP Time to live(TTL) Register(R/W) + * @details @ref Sn_TTL configures the TTL(Time To Live field in IP header) of Socket n. + * It is set before OPEN command. + */ +#define Sn_TTL(N) (_W5500_IO_BASE_ + (0x0016 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0017 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0018 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x0019 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x001A << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x001B << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x001C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) +// Reserved (_W5500_IO_BASE_ + (0x001D << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Receive memory size register(R/W) + * @details @ref Sn_RXBUF_SIZE configures the RX buffer block size of Socket n. + * Socket n RX Buffer Block size can be configured with 1,2,4,8, and 16 Kbytes. + * If a different size is configured, the data cannot be normally received from a peer. + * Although Socket n RX Buffer Block size is initially configured to 2Kbytes, + * user can re-configure its size using @ref Sn_RXBUF_SIZE. The total sum of @ref Sn_RXBUF_SIZE can not be exceed 16Kbytes. + * When exceeded, the data reception error is occurred. + */ +#define Sn_RXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001E << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Transmit memory size register(R/W) + * @details @ref Sn_TXBUF_SIZE configures the TX buffer block size of Socket n. Socket n TX Buffer Block size can be configured with 1,2,4,8, and 16 Kbytes. + * If a different size is configured, the data can�t be normally transmitted to a peer. + * Although Socket n TX Buffer Block size is initially configured to 2Kbytes, + * user can be re-configure its size using @ref Sn_TXBUF_SIZE. The total sum of @ref Sn_TXBUF_SIZE can not be exceed 16Kbytes. + * When exceeded, the data transmission error is occurred. + */ +#define Sn_TXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Transmit free memory size register(R) + * @details @ref Sn_TX_FSR indicates the free size of Socket n TX Buffer Block. It is initialized to the configured size by @ref Sn_TXBUF_SIZE. + * Data bigger than @ref Sn_TX_FSR should not be saved in the Socket n TX Buffer because the bigger data overwrites the previous saved data not yet sent. + * Therefore, check before saving the data to the Socket n TX Buffer, and if data is equal or smaller than its checked size, + * transmit the data with SEND/SEND_MAC command after saving the data in Socket n TX buffer. But, if data is bigger than its checked size, + * transmit the data after dividing into the checked size and saving in the Socket n TX buffer. + */ +#define Sn_TX_FSR(N) (_W5500_IO_BASE_ + (0x0020 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Transmit memory read pointer register address(R) + * @details @ref Sn_TX_RD is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001, it is re-initialized while connecting with TCP. + * After its initialization, it is auto-increased by SEND command. + * SEND command transmits the saved data from the current @ref Sn_TX_RD to the @ref Sn_TX_WR in the Socket n TX Buffer. + * After transmitting the saved data, the SEND command increases the @ref Sn_TX_RD as same as the @ref Sn_TX_WR. + * If its increment value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_TX_RD(N) (_W5500_IO_BASE_ + (0x0022 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Transmit memory write pointer register address(R/W) + * @details @ref Sn_TX_WR is initialized by OPEN command. However, if Sn_MR(P[3:0]) is TCP mode(001, it is re-initialized while connecting with TCP.\n + * It should be read or be updated like as follows.\n + * 1. Read the starting address for saving the transmitting data.\n + * 2. Save the transmitting data from the starting address of Socket n TX buffer.\n + * 3. After saving the transmitting data, update @ref Sn_TX_WR to the increased value as many as transmitting data size. + * If the increment value exceeds the maximum value 0xFFFF(greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value.\n + * 4. Transmit the saved data in Socket n TX Buffer by using SEND/SEND command + */ +#define Sn_TX_WR(N) (_W5500_IO_BASE_ + (0x0024 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Received data size register(R) + * @details @ref Sn_RX_RSR indicates the data size received and saved in Socket n RX Buffer. + * @ref Sn_RX_RSR does not exceed the @ref Sn_RXBUF_SIZE and is calculated as the difference between + * �Socket n RX Write Pointer (@ref Sn_RX_WR)and �Socket n RX Read Pointer (@ref Sn_RX_RD) + */ +#define Sn_RX_RSR(N) (_W5500_IO_BASE_ + (0x0026 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Read point of Receive memory(R/W) + * @details @ref Sn_RX_RD is initialized by OPEN command. Make sure to be read or updated as follows.\n + * 1. Read the starting save address of the received data.\n + * 2. Read data from the starting address of Socket n RX Buffer.\n + * 3. After reading the received data, Update @ref Sn_RX_RD to the increased value as many as the reading size. + * If the increment value exceeds the maximum value 0xFFFF, that is, is greater than 0x10000 and the carry bit occurs, + * update with the lower 16bits value ignored the carry bit.\n + * 4. Order RECV command is for notifying the updated @ref Sn_RX_RD to W5500. + */ +#define Sn_RX_RD(N) (_W5500_IO_BASE_ + (0x0028 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Write point of Receive memory(R) + * @details @ref Sn_RX_WR is initialized by OPEN command and it is auto-increased by the data reception. + * If the increased value exceeds the maximum value 0xFFFF, (greater than 0x10000 and the carry bit occurs), + * then the carry bit is ignored and will automatically update with the lower 16bits value. + */ +#define Sn_RX_WR(N) (_W5500_IO_BASE_ + (0x002A << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief socket interrupt mask register(R) + * @details @ref Sn_IMR masks the interrupt of Socket n. + * Each bit corresponds to each bit of @ref Sn_IR. When a Socket n Interrupt is occurred and the corresponding bit of @ref Sn_IMR is + * the corresponding bit of @ref Sn_IR becomes When both the corresponding bit of @ref Sn_IMR and @ref Sn_IR are and the n-th bit of @ref IR is + * Host is interrupted by asserted INTn PIN to low. + */ +#define Sn_IMR(N) (_W5500_IO_BASE_ + (0x002C << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Fragment field value in IP header register(R/W) + * @details @ref Sn_FRAG configures the FRAG(Fragment field in IP header). + */ +#define Sn_FRAG(N) (_W5500_IO_BASE_ + (0x002D << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +/** + * @ingroup Socket_register_group + * @brief Keep Alive Timer register(R/W) + * @details @ref Sn_KPALVTR configures the transmitting timer of �KEEP ALIVE(KA)packet of SOCKETn. It is valid only in TCP mode, + * and ignored in other modes. The time unit is 5s. + * KA packet is transmittable after @ref Sn_SR is changed to SOCK_ESTABLISHED and after the data is transmitted or received to/from a peer at least once. + * In case of '@ref Sn_KPALVTR > 0', W5500 automatically transmits KA packet after time-period for checking the TCP connection (Auto-keepalive-process). + * In case of '@ref Sn_KPALVTR = 0', Auto-keep-alive-process will not operate, + * and KA packet can be transmitted by SEND_KEEP command by the host (Manual-keep-alive-process). + * Manual-keep-alive-process is ignored in case of '@ref Sn_KPALVTR > 0'. + */ +#define Sn_KPALVTR(N) (_W5500_IO_BASE_ + (0x002F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + +//#define Sn_TSR(N) (_W5500_IO_BASE_ + (0x0030 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3)) + + +//----------------------------- W5500 Register values ----------------------------- + +/* MODE register values */ +/** + * @brief Reset + * @details If this bit is All internal registers will be initialized. It will be automatically cleared as after S/W reset. + */ +#define MR_RST 0x80 + +/** + * @brief Wake on LAN + * @details 0 : Disable WOL mode\n + * 1 : Enable WOL mode\n + * If WOL mode is enabled and the received magic packet over UDP has been normally processed, the Interrupt PIN (INTn) asserts to low. + * When using WOL mode, the UDP Socket should be opened with any source port number. (Refer to Socket n Mode Register (@ref Sn_MR) for opening Socket.) + * @note The magic packet over UDP supported by W5500 consists of 6 bytes synchronization stream (xFFFFFFFFFFFF and + * 16 times Target MAC address stream in UDP payload. The options such like password are ignored. You can use any UDP source port number for WOL mode. + */ +#define MR_WOL 0x20 + +/** + * @brief Ping block + * @details 0 : Disable Ping block\n + * 1 : Enable Ping block\n + * If the bit is it blocks the response to a ping request. + */ +#define MR_PB 0x10 + +/** + * @brief Enable PPPoE + * @details 0 : DisablePPPoE mode\n + * 1 : EnablePPPoE mode\n + * If you use ADSL, this bit should be + */ +#define MR_PPPOE 0x08 + +/** + * @brief Enable UDP_FORCE_ARP CHECHK + * @details 0 : Disable Force ARP mode\n + * 1 : Enable Force ARP mode\n + * In Force ARP mode, It forces on sending ARP Request whenever data is sent. + */ +#define MR_FARP 0x02 + +/* IR register values */ +/** + * @brief Check IP conflict. + * @details Bit is set as when own source IP address is same with the sender IP address in the received ARP request. + */ +#define IR_CONFLICT 0x80 + +/** + * @brief Get the destination unreachable message in UDP sending. + * @details When receiving the ICMP (Destination port unreachable) packet, this bit is set as + * When this bit is Destination Information such as IP address and Port number may be checked with the corresponding @ref UIPR & @ref UPORTR. + */ +#define IR_UNREACH 0x40 + +/** + * @brief Get the PPPoE close message. + * @details When PPPoE is disconnected during PPPoE mode, this bit is set. + */ +#define IR_PPPoE 0x20 + +/** + * @brief Get the magic packet interrupt. + * @details When WOL mode is enabled and receives the magic packet over UDP, this bit is set. + */ +#define IR_MP 0x10 + + +/* PHYCFGR register value */ +#define PHYCFGR_RST ~(1<<7) //< For PHY reset, must operate AND mask. +#define PHYCFGR_OPMD (1<<6) // Configre PHY with OPMDC value +#define PHYCFGR_OPMDC_ALLA (7<<3) +#define PHYCFGR_OPMDC_PDOWN (6<<3) +#define PHYCFGR_OPMDC_NA (5<<3) +#define PHYCFGR_OPMDC_100FA (4<<3) +#define PHYCFGR_OPMDC_100F (3<<3) +#define PHYCFGR_OPMDC_100H (2<<3) +#define PHYCFGR_OPMDC_10F (1<<3) +#define PHYCFGR_OPMDC_10H (0<<3) +#define PHYCFGR_DPX_FULL (1<<2) +#define PHYCFGR_DPX_HALF (0<<2) +#define PHYCFGR_SPD_100 (1<<1) +#define PHYCFGR_SPD_10 (0<<1) +#define PHYCFGR_LNK_ON (1<<0) +#define PHYCFGR_LNK_OFF (0<<0) + +/* IMR register values */ +/** + * @brief IP Conflict Interrupt Mask. + * @details 0: Disable IP Conflict Interrupt\n + * 1: Enable IP Conflict Interrupt + */ +#define IM_IR7 0x80 + +/** + * @brief Destination unreachable Interrupt Mask. + * @details 0: Disable Destination unreachable Interrupt\n + * 1: Enable Destination unreachable Interrupt + */ +#define IM_IR6 0x40 + +/** + * @brief PPPoE Close Interrupt Mask. + * @details 0: Disable PPPoE Close Interrupt\n + * 1: Enable PPPoE Close Interrupt + */ +#define IM_IR5 0x20 + +/** + * @brief Magic Packet Interrupt Mask. + * @details 0: Disable Magic Packet Interrupt\n + * 1: Enable Magic Packet Interrupt + */ +#define IM_IR4 0x10 + +/* Sn_MR Default values */ +/** + * @brief Support UDP Multicasting + * @details 0 : disable Multicasting\n + * 1 : enable Multicasting\n + * This bit is applied only during UDP mode(P[3:0] = 010.\n + * To use multicasting, @ref Sn_DIPR & @ref Sn_DPORT should be respectively configured with the multicast group IP address & port number + * before Socket n is opened by OPEN command of @ref Sn_CR. + */ +#define Sn_MR_MULTI 0x80 + +/** + * @brief Broadcast block in UDP Multicasting. + * @details 0 : disable Broadcast Blocking\n + * 1 : enable Broadcast Blocking\n + * This bit blocks to receive broadcasting packet during UDP mode(P[3:0] = 010.\m + * In addition, This bit does when MACRAW mode(P[3:0] = 100 + */ +#define Sn_MR_BCASTB 0x40 + +/** + * @brief No Delayed Ack(TCP), Multicast flag + * @details 0 : Disable No Delayed ACK option\n + * 1 : Enable No Delayed ACK option\n + * This bit is applied only during TCP mode (P[3:0] = 001.\n + * When this bit is It sends the ACK packet without delay as soon as a Data packet is received from a peer.\n + * When this bit is It sends the ACK packet after waiting for the timeout time configured by @ref _RTR_. + */ +#define Sn_MR_ND 0x20 + +/** + * @brief Unicast Block in UDP Multicasting + * @details 0 : disable Unicast Blocking\n + * 1 : enable Unicast Blocking\n + * This bit blocks receiving the unicast packet during UDP mode(P[3:0] = 010 and MULTI = + */ +#define Sn_MR_UCASTB 0x10 + +/** + * @brief MAC LAYER RAW SOCK + * @details This configures the protocol mode of Socket n. + * @note MACRAW mode should be only used in Socket 0. + */ +#define Sn_MR_MACRAW 0x04 + +#define Sn_MR_IPRAW 0x03 /**< IP LAYER RAW SOCK */ + +/** + * @brief UDP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_UDP 0x02 + +/** + * @brief TCP + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_TCP 0x01 + +/** + * @brief Unused socket + * @details This configures the protocol mode of Socket n. + */ +#define Sn_MR_CLOSE 0x00 + +/* Sn_MR values used with Sn_MR_MACRAW */ +/** + * @brief MAC filter enable in @ref Sn_MR_MACRAW mode + * @details 0 : disable MAC Filtering\n + * 1 : enable MAC Filtering\n + * This bit is applied only during MACRAW mode(P[3:0] = 100.\n + * When set as W5500 can only receive broadcasting packet or packet sent to itself. + * When this bit is W5500 can receive all packets on Ethernet. + * If user wants to implement Hybrid TCP/IP stack, + * it is recommended that this bit is set as for reducing host overhead to process the all received packets. + */ +#define Sn_MR_MFEN Sn_MR_MULTI + +/** + * @brief Multicast Blocking in @ref Sn_MR_MACRAW mode + * @details 0 : using IGMP version 2\n + * 1 : using IGMP version 1\n + * This bit is applied only during UDP mode(P[3:0] = 010 and MULTI = + * It configures the version for IGMP messages (Join/Leave/Report). + */ +#define Sn_MR_MMB Sn_MR_ND + +/** + * @brief IPv6 packet Blocking in @ref Sn_MR_MACRAW mode + * @details 0 : disable IPv6 Blocking\n + * 1 : enable IPv6 Blocking\n + * This bit is applied only during MACRAW mode (P[3:0] = 100. It blocks to receiving the IPv6 packet. + */ +#define Sn_MR_MIP6B Sn_MR_UCASTB + +/* Sn_MR value used with Sn_MR_UDP & Sn_MR_MULTI */ +/** + * @brief IGMP version used in UDP mulitcasting + * @details 0 : disable Multicast Blocking\n + * 1 : enable Multicast Blocking\n + * This bit is applied only when MACRAW mode(P[3:0] = 100. It blocks to receive the packet with multicast MAC address. + */ +#define Sn_MR_MC Sn_MR_ND + +/* Sn_MR alternate values */ +/** + * @brief For Berkeley Socket API + */ +#define SOCK_STREAM Sn_MR_TCP + +/** + * @brief For Berkeley Socket API + */ +#define SOCK_DGRAM Sn_MR_UDP + + +/* Sn_CR values */ +/** + * @brief Initialize or open socket + * @details Socket n is initialized and opened according to the protocol selected in Sn_MR(P3:P0). + * The table below shows the value of @ref Sn_SR corresponding to @ref Sn_MR.\n + * + * + * + * + * + * + *
    \b Sn_MR (P[3:0]) \b Sn_SR
    Sn_MR_CLOSE (000)
    Sn_MR_TCP (001) SOCK_INIT (0x13)
    Sn_MR_UDP (010) SOCK_UDP (0x22)
    S0_MR_MACRAW (100) SOCK_MACRAW (0x02)
    + */ +#define Sn_CR_OPEN 0x01 + +/** + * @brief Wait connection request in TCP mode(Server mode) + * @details This is valid only in TCP mode (\ref Sn_MR(P3:P0) = \ref Sn_MR_TCP). + * In this mode, Socket n operates as a TCP serverand waits for connection-request (SYN packet) from any TCP client + * The @ref Sn_SR changes the state from \ref SOCK_INIT to \ref SOCKET_LISTEN. + * When a TCP clientconnection request is successfully established, + * the @ref Sn_SR changes from SOCK_LISTEN to SOCK_ESTABLISHED and the @ref Sn_IR(0) becomes + * But when a TCP clientconnection request is failed, @ref Sn_IR(3) becomes and the status of @ref Sn_SR changes to SOCK_CLOSED. + */ +#define Sn_CR_LISTEN 0x02 + +/** + * @brief Send connection request in TCP mode(Client mode) + * @details To connect, a connect-request (SYN packet) is sent to TCP serverconfigured by @ref Sn_DIPR & Sn_DPORT(destination address & port). + * If the connect-request is successful, the @ref Sn_SR is changed to @ref SOCK_ESTABLISHED and the Sn_IR(0) becomes \n\n + * The connect-request fails in the following three cases.\n + * 1. When a @b ARPTO occurs (@ref Sn_IR[3] = ) because destination hardware address is not acquired through the ARP-process.\n + * 2. When a @b SYN/ACK packet is not received and @b TCPTO (Sn_IR(3) = )\n + * 3. When a @b RST packet is received instead of a @b SYN/ACK packet. In these cases, @ref Sn_SR is changed to @ref SOCK_CLOSED. + * @note This is valid only in TCP mode and operates when Socket n acts as TCP client + */ +#define Sn_CR_CONNECT 0x04 + +/** + * @brief Send closing request in TCP mode + * @details Regardless of TCP serveror TCP client the DISCON command processes the disconnect-process (b>Active close
    or Passive close.\n + * @par Active close + * it transmits disconnect-request(FIN packet) to the connected peer\n + * @par Passive close + * When FIN packet is received from peer, a FIN packet is replied back to the peer.\n + * @details When the disconnect-process is successful (that is, FIN/ACK packet is received successfully), @ref Sn_SR is changed to @ref SOCK_CLOSED.\n + * Otherwise, TCPTO occurs (\ref Sn_IR(3)='1') and then @ref Sn_SR is changed to @ref SOCK_CLOSED. + * @note Valid only in TCP mode. + */ +#define Sn_CR_DISCON 0x08 + +/** + * @brief Close socket + * @details Sn_SR is changed to @ref SOCK_CLOSED. + */ +#define Sn_CR_CLOSE 0x10 + +/** + * @brief Update TX buffer pointer and send data + * @details SEND transmits all the data in the Socket n TX buffer.\n + * For more details, please refer to Socket n TX Free Size Register (@ref Sn_TX_FSR), Socket n, + * TX Write Pointer Register(@ref Sn_TX_WR), and Socket n TX Read Pointer Register(@ref Sn_TX_RD). + */ +#define Sn_CR_SEND 0x20 + +/** + * @brief Send data with MAC address, so without ARP process + * @details The basic operation is same as SEND.\n + * Normally SEND transmits data after destination hardware address is acquired by the automatic ARP-process(Address Resolution Protocol).\n + * But SEND_MAC transmits data without the automatic ARP-process.\n + * In this case, the destination hardware address is acquired from @ref Sn_DHAR configured by host, instead of APR-process. + * @note Valid only in UDP mode. + */ +#define Sn_CR_SEND_MAC 0x21 + +/** + * @brief Send keep alive message + * @details It checks the connection status by sending 1byte keep-alive packet.\n + * If the peer can not respond to the keep-alive packet during timeout time, the connection is terminated and the timeout interrupt will occur. + * @note Valid only in TCP mode. + */ +#define Sn_CR_SEND_KEEP 0x22 + +/** + * @brief Update RX buffer pointer and receive data + * @details RECV completes the processing of the received data in Socket n RX Buffer by using a RX read pointer register (@ref Sn_RX_RD).\n + * For more details, refer to Socket n RX Received Size Register (@ref Sn_RX_RSR), Socket n RX Write Pointer Register (@ref Sn_RX_WR), + * and Socket n RX Read Pointer Register (@ref Sn_RX_RD). + */ +#define Sn_CR_RECV 0x40 + +/* Sn_IR values */ +/** + * @brief SEND_OK Interrupt + * @details This is issued when SEND command is completed. + */ +#define Sn_IR_SENDOK 0x10 + +/** + * @brief TIMEOUT Interrupt + * @details This is issued when ARPTO or TCPTO occurs. + */ +#define Sn_IR_TIMEOUT 0x08 + +/** + * @brief RECV Interrupt + * @details This is issued whenever data is received from a peer. + */ +#define Sn_IR_RECV 0x04 + +/** + * @brief DISCON Interrupt + * @details This is issued when FIN or FIN/ACK packet is received from a peer. + */ +#define Sn_IR_DISCON 0x02 + +/** + * @brief CON Interrupt + * @details This is issued one time when the connection with peer is successful and then @ref Sn_SR is changed to @ref SOCK_ESTABLISHED. + */ +#define Sn_IR_CON 0x01 + +/* Sn_SR values */ +/** + * @brief Closed + * @details This indicates that Socket n is released.\n + * When DICON, CLOSE command is ordered, or when a timeout occurs, it is changed to @ref SOCK_CLOSED regardless of previous status. + */ +#define SOCK_CLOSED 0x00 + +/** + * @brief Initiate state + * @details This indicates Socket n is opened with TCP mode.\n + * It is changed to @ref SOCK_INIT when @ref Sn_MR(P[3:0]) = 001 and OPEN command is ordered.\n + * After @ref SOCK_INIT, user can use LISTEN /CONNECT command. + */ +#define SOCK_INIT 0x13 + +/** + * @brief Listen state + * @details This indicates Socket n is operating as TCP servermode and waiting for connection-request (SYN packet) from a peer TCP client.\n + * It will change to @ref SOCK_ESTALBLISHED when the connection-request is successfully accepted.\n + * Otherwise it will change to @ref SOCK_CLOSED after TCPTO @ref Sn_IR(TIMEOUT) = '1') is occurred. + */ +#define SOCK_LISTEN 0x14 + +/** + * @brief Connection state + * @details This indicates Socket n sent the connect-request packet (SYN packet) to a peer.\n + * It is temporarily shown when @ref Sn_SR is changed from @ref SOCK_INIT to @ref SOCK_ESTABLISHED by CONNECT command.\n + * If connect-accept(SYN/ACK packet) is received from the peer at SOCK_SYNSENT, it changes to @ref SOCK_ESTABLISHED.\n + * Otherwise, it changes to @ref SOCK_CLOSED after TCPTO (@ref Sn_IR[TIMEOUT] = '1') is occurred. + */ +#define SOCK_SYNSENT 0x15 + +/** + * @brief Connection state + * @details It indicates Socket n successfully received the connect-request packet (SYN packet) from a peer.\n + * If socket n sends the response (SYN/ACK packet) to the peer successfully, it changes to @ref SOCK_ESTABLISHED. \n + * If not, it changes to @ref SOCK_CLOSED after timeout (@ref Sn_IR[TIMEOUT] = '1') is occurred. + */ +#define SOCK_SYNRECV 0x16 + +/** + * @brief Success to connect + * @details This indicates the status of the connection of Socket n.\n + * It changes to @ref SOCK_ESTABLISHED when the TCP SERVERprocessed the SYN packet from the TCP CLIENTduring @ref SOCK_LISTEN, or + * when the CONNECT command is successful.\n + * During @ref SOCK_ESTABLISHED, DATA packet can be transferred using SEND or RECV command. + */ +#define SOCK_ESTABLISHED 0x17 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED. + */ +#define SOCK_FIN_WAIT 0x18 + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED. + */ +#define SOCK_CLOSING 0x1A + +/** + * @brief Closing state + * @details These indicate Socket n is closing.\n + * These are shown in disconnect-process such as active-close and passive-close.\n + * When Disconnect-process is successfully completed, or when timeout occurs, these change to @ref SOCK_CLOSED. + */ +#define SOCK_TIME_WAIT 0x1B + +/** + * @brief Closing state + * @details This indicates Socket n received the disconnect-request (FIN packet) from the connected peer.\n + * This is half-closing status, and data can be transferred.\n + * For full-closing, DISCON command is used. But For just-closing, CLOSE command is used. + */ +#define SOCK_CLOSE_WAIT 0x1C + +/** + * @brief Closing state + * @details This indicates Socket n is waiting for the response (FIN/ACK packet) to the disconnect-request (FIN packet) by passive-close.\n + * It changes to @ref SOCK_CLOSED when Socket n received the response successfully, or when timeout(@ref Sn_IR[TIMEOUT] = '1') is occurred. + */ +#define SOCK_LAST_ACK 0x1D + +/** + * @brief UDP socket + * @details This indicates Socket n is opened in UDP mode(@ref Sn_MR(P[3:0]) = '010').\n + * It changes to SOCK_UDP when @ref Sn_MR(P[3:0]) = '010' and @ref Sn_CR_OPEN command is ordered.\n + * Unlike TCP mode, data can be transfered without the connection-process. + */ +#define SOCK_UDP 0x22 + +#define SOCK_IPRAW 0x32 /**< IP raw mode socket */ + +/** + * @brief MAC raw mode socket + * @details This indicates Socket 0 is opened in MACRAW mode (S0_MR(P[3:0]) = 100and is valid only in Socket 0.\n + * It changes to SOCK_MACRAW when S0_MR(P[3:0] = 100and OPEN command is ordered.\n + * Like UDP mode socket, MACRAW mode Socket 0 can transfer a MAC packet (Ethernet frame) without the connection-process. + */ +#define SOCK_MACRAW 0x42 + +//#define SOCK_PPPOE 0x5F + +/* IP PROTOCOL */ +#define IPPROTO_IP 0 //< Dummy for IP +#define IPPROTO_ICMP 1 //< Control message protocol +#define IPPROTO_IGMP 2 //< Internet group management protocol +#define IPPROTO_GGP 3 //< Gateway^2 (deprecated) +#define IPPROTO_TCP 6 //< TCP +#define IPPROTO_PUP 12 //< PUP +#define IPPROTO_UDP 17 //< UDP +#define IPPROTO_IDP 22 //< XNS idp +#define IPPROTO_ND 77 //< UNOFFICIAL net disk protocol +#define IPPROTO_RAW 255 //< Raw IP packet + + +/** + * @brief Enter a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n \n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt.\n + * In OS environment, You can replace it to critical section api supported by OS. + * + * \sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * \sa WIZCHIP_CRITICAL_EXIT() + */ +#define WIZCHIP_CRITICAL_ENTER() WIZCHIP.CRIS._enter() + +#ifdef _exit +#undef _exit +#endif + +/** + * @brief Exit a critical section + * + * @details It is provided to protect your shared code which are executed without distribution. \n\n + * + * In non-OS environment, It can be just implemented by disabling whole interrupt. \n + * In OS environment, You can replace it to critical section api supported by OS. + * + * @sa WIZCHIP_READ(), WIZCHIP_WRITE(), WIZCHIP_READ_BUF(), WIZCHIP_WRITE_BUF() + * @sa WIZCHIP_CRITICAL_ENTER() + */ +#define WIZCHIP_CRITICAL_EXIT() WIZCHIP.CRIS._exit() + + +//////////////////////// +// Basic I/O Function // +//////////////////////// + +/** + * @ingroup Basic_IO_function + * @brief It reads 1 byte value from a register. + * @param AddrSel Register address + * @return The value of register + */ +uint8_t WIZCHIP_READ (uint32_t AddrSel); + +/** + * @ingroup Basic_IO_function + * @brief It writes 1 byte value to a register. + * @param AddrSel Register address + * @param wb Write data + * @return void + */ +void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb ); + +/** + * @ingroup Basic_IO_function + * @brief It reads sequence data from registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to read data + * @param len Data length + */ +void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + +/** + * @ingroup Basic_IO_function + * @brief It writes sequence data to registers. + * @param AddrSel Register address + * @param pBuf Pointer buffer to write data + * @param len Data length + */ +void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len); + +///////////////////////////////// +// Common Register I/O function // +///////////////////////////////// +/** + * @ingroup Common_register_access_function + * @brief Set Mode Register + * @param (uint8_t)mr The value to be set. + * @sa getMR() + */ +#define setMR(mr) \ + WIZCHIP_WRITE(MR,mr) + + +/** + * @ingroup Common_register_access_function + * @brief Get Mode Register + * @return uint8_t. The value of Mode register. + * @sa setMR() + */ +#define getMR() \ + WIZCHIP_READ(MR) + +/** + * @ingroup Common_register_access_function + * @brief Set gateway IP address + * @param (uint8_t*)gar Pointer variable to set gateway IP address. It should be allocated 4 bytes. + * @sa getGAR() + */ +#define setGAR(gar) \ + WIZCHIP_WRITE_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function + * @brief Get gateway IP address + * @param (uint8_t*)gar Pointer variable to get gateway IP address. It should be allocated 4 bytes. + * @sa setGAR() + */ +#define getGAR(gar) \ + WIZCHIP_READ_BUF(GAR,gar,4) + +/** + * @ingroup Common_register_access_function + * @brief Set subnet mask address + * @param (uint8_t*)subr Pointer variable to set subnet mask address. It should be allocated 4 bytes. + * @sa getSUBR() + */ +#define setSUBR(subr) \ + WIZCHIP_WRITE_BUF(SUBR, subr,4) + + +/** + * @ingroup Common_register_access_function + * @brief Get subnet mask address + * @param (uint8_t*)subr Pointer variable to get subnet mask address. It should be allocated 4 bytes. + * @sa setSUBR() + */ +#define getSUBR(subr) \ + WIZCHIP_READ_BUF(SUBR, subr, 4) + +/** + * @ingroup Common_register_access_function + * @brief Set local MAC address + * @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + * @sa getSHAR() + */ +#define setSHAR(shar) \ + WIZCHIP_WRITE_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function + * @brief Get local MAC address + * @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + * @sa setSHAR() + */ +#define getSHAR(shar) \ + WIZCHIP_READ_BUF(SHAR, shar, 6) + +/** + * @ingroup Common_register_access_function + * @brief Set local IP address + * @param (uint8_t*)sipr Pointer variable to set local IP address. It should be allocated 4 bytes. + * @sa getSIPR() + */ +#define setSIPR(sipr) \ + WIZCHIP_WRITE_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function + * @brief Get local IP address + * @param (uint8_t*)sipr Pointer variable to get local IP address. It should be allocated 4 bytes. + * @sa setSIPR() + */ +#define getSIPR(sipr) \ + WIZCHIP_READ_BUF(SIPR, sipr, 4) + +/** + * @ingroup Common_register_access_function + * @brief Set INTLEVEL register + * @param (uint16_t)intlevel Value to set @ref INTLEVEL register. + * @sa getINTLEVEL() + */ +#define setINTLEVEL(intlevel) {\ + WIZCHIP_WRITE(INTLEVEL, (uint8_t)(intlevel >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(INTLEVEL,1), (uint8_t) intlevel); \ + } + + +/** + * @ingroup Common_register_access_function + * @brief Get INTLEVEL register + * @return uint16_t. Value of @ref INTLEVEL register. + * @sa setINTLEVEL() + */ +//M20150401 : Type explict declaration +/* +#define getINTLEVEL() \ + ((WIZCHIP_READ(INTLEVEL) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(INTLEVEL,1))) +*/ +#define getINTLEVEL() \ + (((uint16_t)WIZCHIP_READ(INTLEVEL) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(INTLEVEL,1))) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref IR register + * @param (uint8_t)ir Value to set @ref IR register. + * @sa getIR() + */ +#define setIR(ir) \ + WIZCHIP_WRITE(IR, (ir & 0xF0)) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref IR register + * @return uint8_t. Value of @ref IR register. + * @sa setIR() + */ +#define getIR() \ + (WIZCHIP_READ(IR) & 0xF0) +/** + * @ingroup Common_register_access_function + * @brief Set @ref _IMR_ register + * @param (uint8_t)imr Value to set @ref _IMR_ register. + * @sa getIMR() + */ +#define setIMR(imr) \ + WIZCHIP_WRITE(_IMR_, imr) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref _IMR_ register + * @return uint8_t. Value of @ref _IMR_ register. + * @sa setIMR() + */ +#define getIMR() \ + WIZCHIP_READ(_IMR_) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref SIR register + * @param (uint8_t)sir Value to set @ref SIR register. + * @sa getSIR() + */ +#define setSIR(sir) \ + WIZCHIP_WRITE(SIR, sir) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref SIR register + * @return uint8_t. Value of @ref SIR register. + * @sa setSIR() + */ +#define getSIR() \ + WIZCHIP_READ(SIR) +/** + * @ingroup Common_register_access_function + * @brief Set @ref SIMR register + * @param (uint8_t)simr Value to set @ref SIMR register. + * @sa getSIMR() + */ +#define setSIMR(simr) \ + WIZCHIP_WRITE(SIMR, simr) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref SIMR register + * @return uint8_t. Value of @ref SIMR register. + * @sa setSIMR() + */ +#define getSIMR() \ + WIZCHIP_READ(SIMR) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref _RTR_ register + * @param (uint16_t)rtr Value to set @ref _RTR_ register. + * @sa getRTR() + */ +#define setRTR(rtr) {\ + WIZCHIP_WRITE(_RTR_, (uint8_t)(rtr >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(_RTR_,1), (uint8_t) rtr); \ + } + +/** + * @ingroup Common_register_access_function + * @brief Get @ref _RTR_ register + * @return uint16_t. Value of @ref _RTR_ register. + * @sa setRTR() + */ +//M20150401 : Type explict declaration +/* +#define getRTR() \ + ((WIZCHIP_READ(_RTR_) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(_RTR_,1))) +*/ +#define getRTR() \ + (((uint16_t)WIZCHIP_READ(_RTR_) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(_RTR_,1))) + + +/** + * @ingroup Common_register_access_function + * @brief Set @ref _RCR_ register + * @param (uint8_t)rcr Value to set @ref _RCR_ register. + * @sa getRCR() + */ +#define setRCR(rcr) \ + WIZCHIP_WRITE(_RCR_, rcr) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref _RCR_ register + * @return uint8_t. Value of @ref _RCR_ register. + * @sa setRCR() + */ +#define getRCR() \ + WIZCHIP_READ(_RCR_) + +//================================================== test done =========================================================== + +/** + * @ingroup Common_register_access_function + * @brief Set @ref PTIMER register + * @param (uint8_t)ptimer Value to set @ref PTIMER register. + * @sa getPTIMER() + */ +#define setPTIMER(ptimer) \ + WIZCHIP_WRITE(PTIMER, ptimer) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref PTIMER register + * @return uint8_t. Value of @ref PTIMER register. + * @sa setPTIMER() + */ +#define getPTIMER() \ + WIZCHIP_READ(PTIMER) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref PMAGIC register + * @param (uint8_t)pmagic Value to set @ref PMAGIC register. + * @sa getPMAGIC() + */ +#define setPMAGIC(pmagic) \ + WIZCHIP_WRITE(PMAGIC, pmagic) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref PMAGIC register + * @return uint8_t. Value of @ref PMAGIC register. + * @sa setPMAGIC() + */ +#define getPMAGIC() \ + WIZCHIP_READ(PMAGIC) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref PHAR address + * @param (uint8_t*)phar Pointer variable to set PPP destination MAC register address. It should be allocated 6 bytes. + * @sa getPHAR() + */ +#define setPHAR(phar) \ + WIZCHIP_WRITE_BUF(PHAR, phar, 6) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref PHAR address + * @param (uint8_t*)phar Pointer variable to PPP destination MAC register address. It should be allocated 6 bytes. + * @sa setPHAR() + */ +#define getPHAR(phar) \ + WIZCHIP_READ_BUF(PHAR, phar, 6) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref PSID register + * @param (uint16_t)psid Value to set @ref PSID register. + * @sa getPSID() + */ +#define setPSID(psid) {\ + WIZCHIP_WRITE(PSID, (uint8_t)(psid >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(PSID,1), (uint8_t) psid); \ + } + +/** + * @ingroup Common_register_access_function + * @brief Get @ref PSID register + * @return uint16_t. Value of @ref PSID register. + * @sa setPSID() + */ +//uint16_t getPSID(void); +//M20150401 : Type explict declaration +/* +#define getPSID() \ + ((WIZCHIP_READ(PSID) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PSID,1))) +*/ +#define getPSID() \ + (((uint16_t)WIZCHIP_READ(PSID) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PSID,1))) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref PMRU register + * @param (uint16_t)pmru Value to set @ref PMRU register. + * @sa getPMRU() + */ +#define setPMRU(pmru) { \ + WIZCHIP_WRITE(PMRU, (uint8_t)(pmru>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(PMRU,1), (uint8_t) pmru); \ + } + +/** + * @ingroup Common_register_access_function + * @brief Get @ref PMRU register + * @return uint16_t. Value of @ref PMRU register. + * @sa setPMRU() + */ +//M20150401 : Type explict declaration +/* +#define getPMRU() \ + ((WIZCHIP_READ(PMRU) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PMRU,1))) +*/ +#define getPMRU() \ + (((uint16_t)WIZCHIP_READ(PMRU) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(PMRU,1))) + +/** + * @ingroup Common_register_access_function + * @brief Get unreachable IP address + * @param (uint8_t*)uipr Pointer variable to get unreachable IP address. It should be allocated 4 bytes. + */ +//M20150401 : Size Error of UIPR (6 -> 4) +/* +#define getUIPR(uipr) \ + WIZCHIP_READ_BUF(UIPR,uipr,6) +*/ +#define getUIPR(uipr) \ + WIZCHIP_READ_BUF(UIPR,uipr,4) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref UPORTR register + * @return uint16_t. Value of @ref UPORTR register. + */ +//M20150401 : Type explict declaration +/* +#define getUPORTR() \ + ((WIZCHIP_READ(UPORTR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(UPORTR,1))) +*/ +#define getUPORTR() \ + (((uint16_t)WIZCHIP_READ(UPORTR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(UPORTR,1))) + +/** + * @ingroup Common_register_access_function + * @brief Set @ref PHYCFGR register + * @param (uint8_t)phycfgr Value to set @ref PHYCFGR register. + * @sa getPHYCFGR() + */ +#define setPHYCFGR(phycfgr) \ + WIZCHIP_WRITE(PHYCFGR, phycfgr) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref PHYCFGR register + * @return uint8_t. Value of @ref PHYCFGR register. + * @sa setPHYCFGR() + */ +#define getPHYCFGR() \ + WIZCHIP_READ(PHYCFGR) + +/** + * @ingroup Common_register_access_function + * @brief Get @ref VERSIONR register + * @return uint8_t. Value of @ref VERSIONR register. + */ +#define getVERSIONR() \ + WIZCHIP_READ(VERSIONR) + +///////////////////////////////////// + +/////////////////////////////////// +// Socket N register I/O function // +/////////////////////////////////// +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_MR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)mr Value to set @ref Sn_MR + * @sa getSn_MR() + */ +#define setSn_MR(sn, mr) \ + WIZCHIP_WRITE(Sn_MR(sn),mr) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_MR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_MR. + * @sa setSn_MR() + */ +#define getSn_MR(sn) \ + WIZCHIP_READ(Sn_MR(sn)) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)cr Value to set @ref Sn_CR + * @sa getSn_CR() + */ +#define setSn_CR(sn, cr) \ + WIZCHIP_WRITE(Sn_CR(sn), cr) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_CR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_CR. + * @sa setSn_CR() + */ +#define getSn_CR(sn) \ + WIZCHIP_READ(Sn_CR(sn)) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)ir Value to set @ref Sn_IR + * @sa getSn_IR() + */ +#define setSn_IR(sn, ir) \ + WIZCHIP_WRITE(Sn_IR(sn), (ir & 0x1F)) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_IR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_IR. + * @sa setSn_IR() + */ +#define getSn_IR(sn) \ + (WIZCHIP_READ(Sn_IR(sn)) & 0x1F) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)imr Value to set @ref Sn_IMR + * @sa getSn_IMR() + */ +#define setSn_IMR(sn, imr) \ + WIZCHIP_WRITE(Sn_IMR(sn), (imr & 0x1F)) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_IMR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_IMR. + * @sa setSn_IMR() + */ +#define getSn_IMR(sn) \ + (WIZCHIP_READ(Sn_IMR(sn)) & 0x1F) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_SR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_SR. + */ +#define getSn_SR(sn) \ + WIZCHIP_READ(Sn_SR(sn)) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)port Value to set @ref Sn_PORT. + * @sa getSn_PORT() + */ +#define setSn_PORT(sn, port) { \ + WIZCHIP_WRITE(Sn_PORT(sn), (uint8_t)(port >> 8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1), (uint8_t) port); \ + } + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_PORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_PORT. + * @sa setSn_PORT() + */ +//M20150401 : Type explict declaration +/* +#define getSn_PORT(sn) \ + ((WIZCHIP_READ(Sn_PORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1))) +*/ +#define getSn_PORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_PORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_PORT(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_DHAR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dhar Pointer variable to set socket n destination hardware address. It should be allocated 6 bytes. + * @sa getSn_DHAR() + */ +#define setSn_DHAR(sn, dhar) \ + WIZCHIP_WRITE_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_MR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dhar Pointer variable to get socket n destination hardware address. It should be allocated 6 bytes. + * @sa setSn_DHAR() + */ +#define getSn_DHAR(sn, dhar) \ + WIZCHIP_READ_BUF(Sn_DHAR(sn), dhar, 6) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dipr Pointer variable to set socket n destination IP address. It should be allocated 4 bytes. + * @sa getSn_DIPR() + */ +#define setSn_DIPR(sn, dipr) \ + WIZCHIP_WRITE_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_DIPR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t*)dipr Pointer variable to get socket n destination IP address. It should be allocated 4 bytes. + * @sa setSn_DIPR() + */ +#define getSn_DIPR(sn, dipr) \ + WIZCHIP_READ_BUF(Sn_DIPR(sn), dipr, 4) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)dport Value to set @ref Sn_DPORT + * @sa getSn_DPORT() + */ +#define setSn_DPORT(sn, dport) { \ + WIZCHIP_WRITE(Sn_DPORT(sn), (uint8_t) (dport>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1), (uint8_t) dport); \ + } + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_DPORT register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_DPORT. + * @sa setSn_DPORT() + */ +//M20150401 : Type explict declaration +/* +#define getSn_DPORT(sn) \ + ((WIZCHIP_READ(Sn_DPORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1))) +*/ +#define getSn_DPORT(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_DPORT(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_DPORT(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)mss Value to set @ref Sn_MSSR + * @sa setSn_MSSR() + */ +#define setSn_MSSR(sn, mss) { \ + WIZCHIP_WRITE(Sn_MSSR(sn), (uint8_t)(mss>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1), (uint8_t) mss); \ + } + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_MSSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_MSSR. + * @sa setSn_MSSR() + */ +//M20150401 : Type explict declaration +/* +#define getSn_MSSR(sn) \ + ((WIZCHIP_READ(Sn_MSSR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1))) +*/ +#define getSn_MSSR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_MSSR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_MSSR(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)tos Value to set @ref Sn_TOS + * @sa getSn_TOS() + */ +#define setSn_TOS(sn, tos) \ + WIZCHIP_WRITE(Sn_TOS(sn), tos) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_TOS register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of Sn_TOS. + * @sa setSn_TOS() + */ +#define getSn_TOS(sn) \ + WIZCHIP_READ(Sn_TOS(sn)) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)ttl Value to set @ref Sn_TTL + * @sa getSn_TTL() + */ +#define setSn_TTL(sn, ttl) \ + WIZCHIP_WRITE(Sn_TTL(sn), ttl) + + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_TTL register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_TTL. + * @sa setSn_TTL() + */ +#define getSn_TTL(sn) \ + WIZCHIP_READ(Sn_TTL(sn)) + + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_RXBUF_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)rxbufsize Value to set @ref Sn_RXBUF_SIZE + * @sa getSn_RXBUF_SIZE() + */ +#define setSn_RXBUF_SIZE(sn, rxbufsize) \ + WIZCHIP_WRITE(Sn_RXBUF_SIZE(sn),rxbufsize) + + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_RXBUF_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_RXBUF_SIZE. + * @sa setSn_RXBUF_SIZE() + */ +#define getSn_RXBUF_SIZE(sn) \ + WIZCHIP_READ(Sn_RXBUF_SIZE(sn)) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_TXBUF_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)txbufsize Value to set @ref Sn_TXBUF_SIZE + * @sa getSn_TXBUF_SIZE() + */ +#define setSn_TXBUF_SIZE(sn, txbufsize) \ + WIZCHIP_WRITE(Sn_TXBUF_SIZE(sn), txbufsize) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_TXBUF_SIZE register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_TXBUF_SIZE. + * @sa setSn_TXBUF_SIZE() + */ +#define getSn_TXBUF_SIZE(sn) \ + WIZCHIP_READ(Sn_TXBUF_SIZE(sn)) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_TX_FSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_TX_FSR. + */ +uint16_t getSn_TX_FSR(uint8_t sn); + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_TX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_TX_RD. + */ +//M20150401 : Type explict declaration +/* +#define getSn_TX_RD(sn) \ + ((WIZCHIP_READ(Sn_TX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_RD(sn),1))) +*/ +#define getSn_TX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)txwr Value to set @ref Sn_TX_WR + * @sa GetSn_TX_WR() + */ +#define setSn_TX_WR(sn, txwr) { \ + WIZCHIP_WRITE(Sn_TX_WR(sn), (uint8_t)(txwr>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1), (uint8_t) txwr); \ + } + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_TX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_TX_WR. + * @sa setSn_TX_WR() + */ +//M20150401 : Type explict declaration +/* +#define getSn_TX_WR(sn) \ + ((WIZCHIP_READ(Sn_TX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1))) +*/ +#define getSn_TX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_TX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_WR(sn),1))) + + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_RX_RSR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_RX_RSR. + */ +uint16_t getSn_RX_RSR(uint8_t sn); + + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)rxrd Value to set @ref Sn_RX_RD + * @sa getSn_RX_RD() + */ +#define setSn_RX_RD(sn, rxrd) { \ + WIZCHIP_WRITE(Sn_RX_RD(sn), (uint8_t)(rxrd>>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1), (uint8_t) rxrd); \ + } + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_RX_RD register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_RX_RD. + * @sa setSn_RX_RD() + */ +//M20150401 : Type explict declaration +/* +#define getSn_RX_RD(sn) \ + ((WIZCHIP_READ(Sn_RX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1))) +*/ +#define getSn_RX_RD(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_RD(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RD(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_RX_WR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_RX_WR. + */ +//M20150401 : Type explict declaration +/* +#define getSn_RX_WR(sn) \ + ((WIZCHIP_READ(Sn_RX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1))) +*/ +#define getSn_RX_WR(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_RX_WR(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_WR(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_FRAG register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint16_t)frag Value to set @ref Sn_FRAG + * @sa getSn_FRAD() + */ +#define setSn_FRAG(sn, frag) { \ + WIZCHIP_WRITE(Sn_FRAG(sn), (uint8_t)(frag >>8)); \ + WIZCHIP_WRITE(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1), (uint8_t) frag); \ + } + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_FRAG register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of @ref Sn_FRAG. + * @sa setSn_FRAG() + */ +//M20150401 : Type explict declaration +/* +#define getSn_FRAG(sn) \ + ((WIZCHIP_READ(Sn_FRAG(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1))) +*/ +#define getSn_FRAG(sn) \ + (((uint16_t)WIZCHIP_READ(Sn_FRAG(sn)) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_FRAG(sn),1))) + +/** + * @ingroup Socket_register_access_function + * @brief Set @ref Sn_KPALVTR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param (uint8_t)kpalvt Value to set @ref Sn_KPALVTR + * @sa getSn_KPALVTR() + */ +#define setSn_KPALVTR(sn, kpalvt) \ + WIZCHIP_WRITE(Sn_KPALVTR(sn), kpalvt) + +/** + * @ingroup Socket_register_access_function + * @brief Get @ref Sn_KPALVTR register + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint8_t. Value of @ref Sn_KPALVTR. + * @sa setSn_KPALVTR() + */ +#define getSn_KPALVTR(sn) \ + WIZCHIP_READ(Sn_KPALVTR(sn)) + +////////////////////////////////////// + +///////////////////////////////////// +// Sn_TXBUF & Sn_RXBUF IO function // +///////////////////////////////////// +/** + * @brief Socket_register_access_function + * @brief Gets the max buffer size of socket sn passed as parameter. + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of Socket n RX max buffer size. + */ +//M20150401 : Type explict declaration +/* +#define getSn_RxMAX(sn) \ + (getSn_RXBUF_SIZE(sn) << 10) +*/ +#define getSn_RxMAX(sn) \ + (((uint16_t)getSn_RXBUF_SIZE(sn)) << 10) + +/** + * @brief Socket_register_access_function + * @brief Gets the max buffer size of socket sn passed as parameters. + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @return uint16_t. Value of Socket n TX max buffer size. + */ +//M20150401 : Type explict declaration +/* +#define getSn_TxMAX(sn) \ + (getSn_TXBUF_SIZE(sn) << 10) +*/ +#define getSn_TxMAX(sn) \ + (((uint16_t)getSn_TXBUF_SIZE(sn)) << 10) + +/** + * @ingroup Basic_IO_function + * @brief It copies data to internal TX memory + * + * @details This function reads the Tx write pointer register and after that, + * it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + * and updates the Tx write pointer register. + * This function is being called by send() and sendto() function also. + * + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param wizdata Pointer buffer to write data + * @param len Data length + * @sa wiz_recv_data() + */ +void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function + * @brief It copies data to your buffer from internal RX memory + * + * @details This function read the Rx read pointer register and after that, + * it copies the received data from internal RX memory + * to wizdata(pointer variable) of the length of len(variable) bytes. + * This function is being called by recv() also. + * + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param wizdata Pointer buffer to read data + * @param len Data length + * @sa wiz_send_data() + */ +void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len); + +/** + * @ingroup Basic_IO_function + * @brief It discard the received data in RX memory. + * @details It discards the data of the length of len(variable) bytes in internal RX memory. + * @param (uint8_t)sn Socket number. It should be 0 ~ 7. + * @param len Data length + */ +void wiz_recv_ignore(uint8_t sn, uint16_t len); + +/// @cond DOXY_APPLY_CODE +#endif +/// @endcond + +#ifdef __cplusplus +} +#endif + +#endif // _W5500_H_ diff --git a/Ethernet/socket.c b/Ethernet/socket.c new file mode 100644 index 0000000..412a65d --- /dev/null +++ b/Ethernet/socket.c @@ -0,0 +1,931 @@ +//***************************************************************************** +// +//! \file socket.c +//! \brief SOCKET APIs Implements file. +//! \details SOCKET APIs like as Berkeley Socket APIs. +//! \version 1.0.3 +//! \date 2013/10/21 +//! \par Revision history +//! <2015/02/05> Notice +//! The version history is not updated after this point. +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! <2014/05/01> V1.0.3. Refer to M20140501 +//! 1. Implicit type casting -> Explicit type casting. +//! 2. replace 0x01 with PACK_REMAINED in recvfrom() +//! 3. Validation a destination ip in connect() & sendto(): +//! It occurs a fatal error on converting unint32 address if uint8* addr parameter is not aligned by 4byte address. +//! Copy 4 byte addr value into temporary uint32 variable and then compares it. +//! <2013/12/20> V1.0.2 Refer to M20131220 +//! Remove Warning. +//! <2013/11/04> V1.0.1 2nd Release. Refer to "20131104". +//! In sendto(), Add to clear timeout interrupt status (Sn_IR_TIMEOUT) +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** +#include "socket.h" + +//M20150401 : Typing Error +//#define SOCK_ANY_PORT_NUM 0xC000; +#define SOCK_ANY_PORT_NUM 0xC000 + +static uint16_t sock_any_port = SOCK_ANY_PORT_NUM; +static uint16_t sock_io_mode = 0; +static uint16_t sock_is_sending = 0; + +static uint16_t sock_remained_size[_WIZCHIP_SOCK_NUM_] = {0,0,}; + +//M20150601 : For extern decleation +//static uint8_t sock_pack_info[_WIZCHIP_SOCK_NUM_] = {0,}; +uint8_t sock_pack_info[_WIZCHIP_SOCK_NUM_] = {0,}; +// + +#if _WIZCHIP_ == 5200 + static uint16_t sock_next_rd[_WIZCHIP_SOCK_NUM_] ={0,}; +#endif + +//A20150601 : For integrating with W5300 +#if _WIZCHIP_ == 5300 + uint8_t sock_remained_byte[_WIZCHIP_SOCK_NUM_] = {0,}; // set by wiz_recv_data() +#endif + + +#define CHECK_SOCKNUM() \ + do{ \ + if(sn > _WIZCHIP_SOCK_NUM_) return SOCKERR_SOCKNUM; \ + }while(0); \ + +#define CHECK_SOCKMODE(mode) \ + do{ \ + if((getSn_MR(sn) & 0x0F) != mode) return SOCKERR_SOCKMODE; \ + }while(0); \ + +#define CHECK_SOCKINIT() \ + do{ \ + if((getSn_SR(sn) != SOCK_INIT)) return SOCKERR_SOCKINIT; \ + }while(0); \ + +#define CHECK_SOCKDATA() \ + do{ \ + if(len == 0) return SOCKERR_DATALEN; \ + }while(0); \ + + + +int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) +{ + CHECK_SOCKNUM(); + switch(protocol) + { + case Sn_MR_TCP : + { + //M20150601 : Fixed the warning - taddr will never be NULL + /* + uint8_t taddr[4]; + getSIPR(taddr); + */ + uint32_t taddr; + getSIPR((uint8_t*)&taddr); + if(taddr == 0) return SOCKERR_SOCKINIT; + break; + } + case Sn_MR_UDP : + case Sn_MR_MACRAW : + case Sn_MR_IPRAW : + break; + #if ( _WIZCHIP_ < 5200 ) + case Sn_MR_PPPoE : + break; + #endif + default : + return SOCKERR_SOCKMODE; + } + //M20150601 : For SF_TCP_ALIGN & W5300 + //if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG; + if((flag & 0x04) != 0) return SOCKERR_SOCKFLAG; +#if _WIZCHIP_ == 5200 + if(flag & 0x10) return SOCKERR_SOCKFLAG; +#endif + + if(flag != 0) + { + switch(protocol) + { + case Sn_MR_TCP: + //M20150601 : For SF_TCP_ALIGN & W5300 + #if _WIZCHIP_ == 5300 + if((flag & (SF_TCP_NODELAY|SF_IO_NONBLOCK|SF_TCP_ALIGN))==0) return SOCKERR_SOCKFLAG; + #else + if((flag & (SF_TCP_NODELAY|SF_IO_NONBLOCK))==0) return SOCKERR_SOCKFLAG; + #endif + + break; + case Sn_MR_UDP: + if(flag & SF_IGMP_VER2) + { + if((flag & SF_MULTI_ENABLE)==0) return SOCKERR_SOCKFLAG; + } + #if _WIZCHIP_ == 5500 + if(flag & SF_UNI_BLOCK) + { + if((flag & SF_MULTI_ENABLE) == 0) return SOCKERR_SOCKFLAG; + } + #endif + break; + default: + break; + } + } + close(sn); + //M20150601 + #if _WIZCHIP_ == 5300 + setSn_MR(sn, ((uint16_t)(protocol | (flag & 0xF0))) | (((uint16_t)(flag & 0x02)) << 7) ); + #else + setSn_MR(sn, (protocol | (flag & 0xF0))); + #endif + if(!port) + { + port = sock_any_port++; + if(sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM; + } + setSn_PORT(sn,port); + setSn_CR(sn,Sn_CR_OPEN); + while(getSn_CR(sn)); + //A20150401 : For release the previous sock_io_mode + sock_io_mode &= ~(1 < sn + //if( ((getSn_MR(s)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(s) != getSn_TxMAX(s)) ) + if( ((getSn_MR(sn)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(sn) != getSn_TxMAX(sn)) ) + { + uint8_t destip[4] = {0, 0, 0, 1}; + // TODO + // You can wait for completing to sending data; + // wait about 1 second; + // if you have completed to send data, skip the code of erratum 1 + // ex> wait_1s(); + // if (getSn_TX_FSR(s) == getSn_TxMAX(s)) continue; + // + //M20160503 : The socket() of close() calls close() itself again. It occures a infinite loop - close()->socket()->close()->socket()-> ~ + //socket(s,Sn_MR_UDP,0x3000,0); + //sendto(s,destip,1,destip,0x3000); // send the dummy data to an unknown destination(0.0.0.1). + setSn_MR(sn,Sn_MR_UDP); + setSn_PORTR(sn, 0x3000); + setSn_CR(sn,Sn_CR_OPEN); + while(getSn_CR(sn) != 0); + while(getSn_SR(sn) != SOCK_UDP); + sendto(sn,destip,1,destip,0x3000); // send the dummy data to an unknown destination(0.0.0.1). + }; +#endif + setSn_CR(sn,Sn_CR_CLOSE); + /* wait to process the command... */ + while( getSn_CR(sn) ); + /* clear all interrupt of the socket. */ + setSn_IR(sn, 0xFF); + //A20150401 : Release the sock_io_mode of socket n. + sock_io_mode &= ~(1< freesize) len = freesize; // check size not to exceed MAX size. + while(1) + { + freesize = getSn_TX_FSR(sn); + tmp = getSn_SR(sn); + if ((tmp != SOCK_ESTABLISHED) && (tmp != SOCK_CLOSE_WAIT)) + { + close(sn); + return SOCKERR_SOCKSTATUS; + } + if( (sock_io_mode & (1< freesize) ) return SOCK_BUSY; + if(len <= freesize) break; + } + wiz_send_data(sn, buf, len); + #if _WIZCHIP_ == 5200 + sock_next_rd[sn] = getSn_TX_RD(sn) + len; + #endif + + #if _WIZCHIP_ == 5300 + setSn_TX_WRSR(sn,len); + #endif + + setSn_CR(sn,Sn_CR_SEND); + /* wait to process the command... */ + while(getSn_CR(sn)); + sock_is_sending |= (1 << sn); + //M20150409 : Explicit Type Casting + //return len; + return (int32_t)len; +} + + +int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len) +{ + uint8_t tmp = 0; + uint16_t recvsize = 0; +//A20150601 : For integarating with W5300 +#if _WIZCHIP_ == 5300 + uint8_t head[2]; + uint16_t mr; +#endif +// + CHECK_SOCKNUM(); + CHECK_SOCKMODE(Sn_MR_TCP); + CHECK_SOCKDATA(); + + recvsize = getSn_RxMAX(sn); + if(recvsize < len) len = recvsize; + +//A20150601 : For Integrating with W5300 +#if _WIZCHIP_ == 5300 + //sock_pack_info[sn] = PACK_COMPLETED; // for clear + if(sock_remained_size[sn] == 0) + { +#endif +// + while(1) + { + recvsize = getSn_RX_RSR(sn); + tmp = getSn_SR(sn); + if (tmp != SOCK_ESTABLISHED) + { + if(tmp == SOCK_CLOSE_WAIT) + { + if(recvsize != 0) break; + else if(getSn_TX_FSR(sn) == getSn_TxMAX(sn)) + { + close(sn); + return SOCKERR_SOCKSTATUS; + } + } + else + { + close(sn); + return SOCKERR_SOCKSTATUS; + } + } + if((sock_io_mode & (1< sock_remained_size[sn]) len = sock_remained_size[sn]; + recvsize = len; + if(sock_pack_info[sn] & PACK_FIFOBYTE) + { + *buf = sock_remained_byte[sn]; + buf++; + sock_pack_info[sn] &= ~(PACK_FIFOBYTE); + recvsize -= 1; + sock_remained_size[sn] -= 1; + } + if(recvsize != 0) + { + wiz_recv_data(sn, buf, recvsize); + setSn_CR(sn,Sn_CR_RECV); + while(getSn_CR(sn)); + } + sock_remained_size[sn] -= recvsize; + if(sock_remained_size[sn] != 0) + { + sock_pack_info[sn] |= PACK_REMAINED; + if(recvsize & 0x1) sock_pack_info[sn] |= PACK_FIFOBYTE; + } + else sock_pack_info[sn] = PACK_COMPLETED; + if(getSn_MR(sn) & Sn_MR_ALIGN) sock_remained_size[sn] = 0; + //len = recvsize; +#else + if(recvsize < len) len = recvsize; + wiz_recv_data(sn, buf, len); + setSn_CR(sn,Sn_CR_RECV); + while(getSn_CR(sn)); +#endif + + //M20150409 : Explicit Type Casting + //return len; + return (int32_t)len; +} + +int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port) +{ + uint8_t tmp = 0; + uint16_t freesize = 0; + uint32_t taddr; + + CHECK_SOCKNUM(); + switch(getSn_MR(sn) & 0x0F) + { + case Sn_MR_UDP: + case Sn_MR_MACRAW: +// break; +// #if ( _WIZCHIP_ < 5200 ) + case Sn_MR_IPRAW: + break; +// #endif + default: + return SOCKERR_SOCKMODE; + } + CHECK_SOCKDATA(); + //M20140501 : For avoiding fatal error on memory align mismatched + //if(*((uint32_t*)addr) == 0) return SOCKERR_IPINVALID; + //{ + //uint32_t taddr; + taddr = ((uint32_t)addr[0]) & 0x000000FF; + taddr = (taddr << 8) + ((uint32_t)addr[1] & 0x000000FF); + taddr = (taddr << 8) + ((uint32_t)addr[2] & 0x000000FF); + taddr = (taddr << 8) + ((uint32_t)addr[3] & 0x000000FF); + //} + // + //if(*((uint32_t*)addr) == 0) return SOCKERR_IPINVALID; + if((taddr == 0) && ((getSn_MR(sn)&Sn_MR_MACRAW) != Sn_MR_MACRAW)) return SOCKERR_IPINVALID; + if((port == 0) && ((getSn_MR(sn)&Sn_MR_MACRAW) != Sn_MR_MACRAW)) return SOCKERR_PORTZERO; + tmp = getSn_SR(sn); +//#if ( _WIZCHIP_ < 5200 ) + if((tmp != SOCK_MACRAW) && (tmp != SOCK_UDP) && (tmp != SOCK_IPRAW)) return SOCKERR_SOCKSTATUS; +//#else +// if(tmp != SOCK_MACRAW && tmp != SOCK_UDP) return SOCKERR_SOCKSTATUS; +//#endif + + setSn_DIPR(sn,addr); + setSn_DPORT(sn,port); + freesize = getSn_TxMAX(sn); + if (len > freesize) len = freesize; // check size not to exceed MAX size. + while(1) + { + freesize = getSn_TX_FSR(sn); + if(getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED; + if( (sock_io_mode & (1< freesize) ) return SOCK_BUSY; + if(len <= freesize) break; + }; + wiz_send_data(sn, buf, len); + + #if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata) + getSIPR((uint8_t*)&taddr); + if(taddr == 0) + { + getSUBR((uint8_t*)&taddr); + setSUBR((uint8_t*)"\x00\x00\x00\x00"); + } + else taddr = 0; + #endif + +//A20150601 : For W5300 +#if _WIZCHIP_ == 5300 + setSn_TX_WRSR(sn, len); +#endif +// + setSn_CR(sn,Sn_CR_SEND); + /* wait to process the command... */ + while(getSn_CR(sn)); + while(1) + { + tmp = getSn_IR(sn); + if(tmp & Sn_IR_SENDOK) + { + setSn_IR(sn, Sn_IR_SENDOK); + break; + } + //M:20131104 + //else if(tmp & Sn_IR_TIMEOUT) return SOCKERR_TIMEOUT; + else if(tmp & Sn_IR_TIMEOUT) + { + setSn_IR(sn, Sn_IR_TIMEOUT); + //M20150409 : Fixed the lost of sign bits by type casting. + //len = (uint16_t)SOCKERR_TIMEOUT; + //break; + #if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata) + if(taddr) setSUBR((uint8_t*)&taddr); + #endif + return SOCKERR_TIMEOUT; + } + //////////// + } + #if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata) + if(taddr) setSUBR((uint8_t*)&taddr); + #endif + //M20150409 : Explicit Type Casting + //return len; + return (int32_t)len; +} + + + +int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port) +{ +//M20150601 : For W5300 +#if _WIZCHIP_ == 5300 + uint16_t mr; + uint16_t mr1; +#else + uint8_t mr; +#endif +// + uint8_t head[8]; + uint16_t pack_len=0; + + CHECK_SOCKNUM(); + //CHECK_SOCKMODE(Sn_MR_UDP); +//A20150601 +#if _WIZCHIP_ == 5300 + mr1 = getMR(); +#endif + + switch((mr=getSn_MR(sn)) & 0x0F) + { + case Sn_MR_UDP: + case Sn_MR_IPRAW: + case Sn_MR_MACRAW: + break; + #if ( _WIZCHIP_ < 5200 ) + case Sn_MR_PPPoE: + break; + #endif + default: + return SOCKERR_SOCKMODE; + } + CHECK_SOCKDATA(); + if(sock_remained_size[sn] == 0) + { + while(1) + { + pack_len = getSn_RX_RSR(sn); + if(getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED; + if( (sock_io_mode & (1< 1514) + { + close(sn); + return SOCKFATAL_PACKLEN; + } + sock_pack_info[sn] = PACK_FIRST; + } + if(len < sock_remained_size[sn]) pack_len = len; + else pack_len = sock_remained_size[sn]; + wiz_recv_data(sn,buf,pack_len); + break; + //#if ( _WIZCHIP_ < 5200 ) + case Sn_MR_IPRAW: + if(sock_remained_size[sn] == 0) + { + wiz_recv_data(sn, head, 6); + setSn_CR(sn,Sn_CR_RECV); + while(getSn_CR(sn)); + addr[0] = head[0]; + addr[1] = head[1]; + addr[2] = head[2]; + addr[3] = head[3]; + sock_remained_size[sn] = head[4]; + //M20150401 : For Typing Error + //sock_remaiend_size[sn] = (sock_remained_size[sn] << 8) + head[5]; + sock_remained_size[sn] = (sock_remained_size[sn] << 8) + head[5]; + sock_pack_info[sn] = PACK_FIRST; + } + // + // Need to packet length check + // + if(len < sock_remained_size[sn]) pack_len = len; + else pack_len = sock_remained_size[sn]; + wiz_recv_data(sn, buf, pack_len); // data copy. + break; + //#endif + default: + wiz_recv_ignore(sn, pack_len); // data copy. + sock_remained_size[sn] = pack_len; + break; + } + setSn_CR(sn,Sn_CR_RECV); + /* wait to process the command... */ + while(getSn_CR(sn)) ; + sock_remained_size[sn] -= pack_len; + //M20150601 : + //if(sock_remained_size[sn] != 0) sock_pack_info[sn] |= 0x01; + if(sock_remained_size[sn] != 0) + { + sock_pack_info[sn] |= PACK_REMAINED; + #if _WIZCHIP_ == 5300 + if(pack_len & 0x01) sock_pack_info[sn] |= PACK_FIFOBYTE; + #endif + } + else sock_pack_info[sn] = PACK_COMPLETED; +#if _WIZCHIP_ == 5300 + pack_len = len; +#endif + // + //M20150409 : Explicit Type Casting + //return pack_len; + return (int32_t)pack_len; +} + + +int8_t ctlsocket(uint8_t sn, ctlsock_type cstype, void* arg) +{ + uint8_t tmp = 0; + CHECK_SOCKNUM(); + switch(cstype) + { + case CS_SET_IOMODE: + tmp = *((uint8_t*)arg); + if(tmp == SOCK_IO_NONBLOCK) sock_io_mode |= (1< explict type casting + //*((uint8_t*)arg) = (sock_io_mode >> sn) & 0x0001; + *((uint8_t*)arg) = (uint8_t)((sock_io_mode >> sn) & 0x0001); + // + break; + case CS_GET_MAXTXBUF: + *((uint16_t*)arg) = getSn_TxMAX(sn); + break; + case CS_GET_MAXRXBUF: + *((uint16_t*)arg) = getSn_RxMAX(sn); + break; + case CS_CLR_INTERRUPT: + if( (*(uint8_t*)arg) > SIK_ALL) return SOCKERR_ARG; + setSn_IR(sn,*(uint8_t*)arg); + break; + case CS_GET_INTERRUPT: + *((uint8_t*)arg) = getSn_IR(sn); + break; + #if _WIZCHIP_ != 5100 + case CS_SET_INTMASK: + if( (*(uint8_t*)arg) > SIK_ALL) return SOCKERR_ARG; + setSn_IMR(sn,*(uint8_t*)arg); + break; + case CS_GET_INTMASK: + *((uint8_t*)arg) = getSn_IMR(sn); + break; + #endif + default: + return SOCKERR_ARG; + } + return SOCK_OK; +} + +int8_t setsockopt(uint8_t sn, sockopt_type sotype, void* arg) +{ + // M20131220 : Remove warning + //uint8_t tmp; + CHECK_SOCKNUM(); + switch(sotype) + { + case SO_TTL: + setSn_TTL(sn,*(uint8_t*)arg); + break; + case SO_TOS: + setSn_TOS(sn,*(uint8_t*)arg); + break; + case SO_MSS: + setSn_MSSR(sn,*(uint16_t*)arg); + break; + case SO_DESTIP: + setSn_DIPR(sn, (uint8_t*)arg); + break; + case SO_DESTPORT: + setSn_DPORT(sn, *(uint16_t*)arg); + break; +#if _WIZCHIP_ != 5100 + case SO_KEEPALIVESEND: + CHECK_SOCKMODE(Sn_MR_TCP); + #if _WIZCHIP_ > 5200 + if(getSn_KPALVTR(sn) != 0) return SOCKERR_SOCKOPT; + #endif + setSn_CR(sn,Sn_CR_SEND_KEEP); + while(getSn_CR(sn) != 0) + { + // M20131220 + //if ((tmp = getSn_IR(sn)) & Sn_IR_TIMEOUT) + if (getSn_IR(sn) & Sn_IR_TIMEOUT) + { + setSn_IR(sn, Sn_IR_TIMEOUT); + return SOCKERR_TIMEOUT; + } + } + break; + #if !( (_WIZCHIP_ == 5100) || (_WIZCHIP_ == 5200) ) + case SO_KEEPALIVEAUTO: + CHECK_SOCKMODE(Sn_MR_TCP); + setSn_KPALVTR(sn,*(uint8_t*)arg); + break; + #endif +#endif + default: + return SOCKERR_ARG; + } + return SOCK_OK; +} + +int8_t getsockopt(uint8_t sn, sockopt_type sotype, void* arg) +{ + CHECK_SOCKNUM(); + switch(sotype) + { + case SO_FLAG: + *(uint8_t*)arg = getSn_MR(sn) & 0xF0; + break; + case SO_TTL: + *(uint8_t*) arg = getSn_TTL(sn); + break; + case SO_TOS: + *(uint8_t*) arg = getSn_TOS(sn); + break; + case SO_MSS: + *(uint16_t*) arg = getSn_MSSR(sn); + break; + case SO_DESTIP: + getSn_DIPR(sn, (uint8_t*)arg); + break; + case SO_DESTPORT: + *(uint16_t*) arg = getSn_DPORT(sn); + break; + #if _WIZCHIP_ > 5200 + case SO_KEEPALIVEAUTO: + CHECK_SOCKMODE(Sn_MR_TCP); + *(uint16_t*) arg = getSn_KPALVTR(sn); + break; + #endif + case SO_SENDBUF: + *(uint16_t*) arg = getSn_TX_FSR(sn); + break; + case SO_RECVBUF: + *(uint16_t*) arg = getSn_RX_RSR(sn); + break; + case SO_STATUS: + *(uint8_t*) arg = getSn_SR(sn); + break; + case SO_REMAINSIZE: + if(getSn_MR(sn) & Sn_MR_TCP) + *(uint16_t*)arg = getSn_RX_RSR(sn); + else + *(uint16_t*)arg = sock_remained_size[sn]; + break; + case SO_PACKINFO: + //CHECK_SOCKMODE(Sn_MR_TCP); +#if _WIZCHIP_ != 5300 + if((getSn_MR(sn) == Sn_MR_TCP)) + return SOCKERR_SOCKMODE; +#endif + *(uint8_t*)arg = sock_pack_info[sn]; + break; + default: + return SOCKERR_SOCKOPT; + } + return SOCK_OK; +} diff --git a/Ethernet/socket.h b/Ethernet/socket.h new file mode 100644 index 0000000..72469a7 --- /dev/null +++ b/Ethernet/socket.h @@ -0,0 +1,489 @@ +//***************************************************************************** +// +//! \file socket.h +//! \brief SOCKET APIs Header file. +//! \details SOCKET APIs like as berkeley socket api. +//! \version 1.0.2 +//! \date 2013/10/21 +//! \par Revision history +//! <2015/02/05> Notice +//! The version history is not updated after this point. +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! <2014/05/01> V1.0.2. Refer to M20140501 +//! 1. Modify the comment : SO_REMAINED -> PACK_REMAINED +//! 2. Add the comment as zero byte udp data reception in getsockopt(). +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** +/** + * @defgroup WIZnet_socket_APIs 1. WIZnet socket APIs + * @brief WIZnet socket APIs are based on Berkeley socket APIs, thus it has much similar name and interface. + * But there is a little bit of difference. + * @details + * Comparison between WIZnet and Berkeley SOCKET APIs + * + * + * + * + * + * + * + * + * + * + * + * + *
    API WIZnet Berkeley
    socket() O O
    bind() X O
    listen() O O
    connect() O O
    accept() X O
    recv() O O
    send() O O
    recvfrom() O O
    sendto() O O
    closesocket() O
    close() & disconnect()
    O
    + * There are @b bind() and @b accept() functions in @b Berkeley SOCKET API but, + * not in @b WIZnet SOCKET API. Because socket() of WIZnet is not only creating a SOCKET but also binding a local port number, + * and listen() of WIZnet is not only listening to connection request from client but also accepting the connection request. \n + * When you program "TCP SERVER" with Berkeley SOCKET API, you can use only one listen port. + * When the listen SOCKET accepts a connection request from a client, it keeps listening. + * After accepting the connection request, a new SOCKET is created and the new SOCKET is used in communication with the client. \n + * Following figure shows network flow diagram by Berkeley SOCKET API. + * @image html Berkeley_SOCKET.jpg "" + * But, When you program "TCP SERVER" with WIZnet SOCKET API, you can use as many as 8 listen SOCKET with same port number. \n + * Because there's no accept() in WIZnet SOCKET APIs, when the listen SOCKET accepts a connection request from a client, + * it is changed in order to communicate with the client. + * And the changed SOCKET is not listening any more and is dedicated for communicating with the client. \n + * If there're many listen SOCKET with same listen port number and a client requests a connection, + * the SOCKET which has the smallest SOCKET number accepts the request and is changed as communication SOCKET. \n + * Following figure shows network flow diagram by WIZnet SOCKET API. + * @image html WIZnet_SOCKET.jpg "" + */ +#ifndef _SOCKET_H_ +#define _SOCKET_H_ +#ifdef __cplusplus + extern "C" { +#endif + +#include "wizchip_conf.h" + +#define SOCKET uint8_t ///< SOCKET type define for legacy driver + +#define SOCK_OK 1 ///< Result is OK about socket process. +#define SOCK_BUSY 0 ///< Socket is busy on processing the operation. Valid only Non-block IO Mode. +#define SOCK_FATAL -1000 ///< Result is fatal error about socket process. + +#define SOCK_ERROR 0 +#define SOCKERR_SOCKNUM (SOCK_ERROR - 1) ///< Invalid socket number +#define SOCKERR_SOCKOPT (SOCK_ERROR - 2) ///< Invalid socket option +#define SOCKERR_SOCKINIT (SOCK_ERROR - 3) ///< Socket is not initialized or SIPR is Zero IP address when Sn_MR_TCP +#define SOCKERR_SOCKCLOSED (SOCK_ERROR - 4) ///< Socket unexpectedly closed. +#define SOCKERR_SOCKMODE (SOCK_ERROR - 5) ///< Invalid socket mode for socket operation. +#define SOCKERR_SOCKFLAG (SOCK_ERROR - 6) ///< Invalid socket flag +#define SOCKERR_SOCKSTATUS (SOCK_ERROR - 7) ///< Invalid socket status for socket operation. +#define SOCKERR_ARG (SOCK_ERROR - 10) ///< Invalid argument. +#define SOCKERR_PORTZERO (SOCK_ERROR - 11) ///< Port number is zero +#define SOCKERR_IPINVALID (SOCK_ERROR - 12) ///< Invalid IP address +#define SOCKERR_TIMEOUT (SOCK_ERROR - 13) ///< Timeout occurred +#define SOCKERR_DATALEN (SOCK_ERROR - 14) ///< Data length is zero or greater than buffer max size. +#define SOCKERR_BUFFER (SOCK_ERROR - 15) ///< Socket buffer is not enough for data communication. + +#define SOCKFATAL_PACKLEN (SOCK_FATAL - 1) ///< Invalid packet length. Fatal Error. + +/* + * SOCKET FLAG + */ +#define SF_ETHER_OWN (Sn_MR_MFEN) ///< In @ref Sn_MR_MACRAW, Receive only the packet as broadcast, multicast and own packet +#define SF_IGMP_VER2 (Sn_MR_MC) ///< In @ref Sn_MR_UDP with \ref SF_MULTI_ENABLE, Select IGMP version 2. +#define SF_TCP_NODELAY (Sn_MR_ND) ///< In @ref Sn_MR_TCP, Use to nodelayed ack. +#define SF_MULTI_ENABLE (Sn_MR_MULTI) ///< In @ref Sn_MR_UDP, Enable multicast mode. + +#if _WIZCHIP_ == 5500 + #define SF_BROAD_BLOCK (Sn_MR_BCASTB) ///< In @ref Sn_MR_UDP or @ref Sn_MR_MACRAW, Block broadcast packet. Valid only in W5500 + #define SF_MULTI_BLOCK (Sn_MR_MMB) ///< In @ref Sn_MR_MACRAW, Block multicast packet. Valid only in W5500 + #define SF_IPv6_BLOCK (Sn_MR_MIP6B) ///< In @ref Sn_MR_MACRAW, Block IPv6 packet. Valid only in W5500 + #define SF_UNI_BLOCK (Sn_MR_UCASTB) ///< In @ref Sn_MR_UDP with \ref SF_MULTI_ENABLE. Valid only in W5500 +#endif + +//A201505 : For W5300 +#if _WIZCHIP_ == 5300 + #define SF_TCP_ALIGN 0x02 ///< Valid only \ref Sn_MR_TCP and W5300, refer to \ref Sn_MR_ALIGN +#endif + +#define SF_IO_NONBLOCK 0x01 ///< Socket nonblock io mode. It used parameter in \ref socket(). + +/* + * UDP & MACRAW Packet Infomation + */ +#define PACK_FIRST 0x80 ///< In Non-TCP packet, It indicates to start receiving a packet. (When W5300, This flag can be applied) +#define PACK_REMAINED 0x01 ///< In Non-TCP packet, It indicates to remain a packet to be received. (When W5300, This flag can be applied) +#define PACK_COMPLETED 0x00 ///< In Non-TCP packet, It indicates to complete to receive a packet. (When W5300, This flag can be applied) +//A20150601 : For Integrating with W5300 +#define PACK_FIFOBYTE 0x02 ///< Valid only W5300, It indicate to have read already the Sn_RX_FIFOR. +// + +/** + * @ingroup WIZnet_socket_APIs + * @brief Open a socket. + * @details Initializes the socket with 'sn' passed as parameter and open. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param protocol Protocol type to operate such as TCP, UDP and MACRAW. + * @param port Port number to be bined. + * @param flag Socket flags as \ref SF_ETHER_OWN, \ref SF_IGMP_VER2, \ref SF_TCP_NODELAY, \ref SF_MULTI_ENABLE, \ref SF_IO_NONBLOCK and so on.\n + * Valid flags only in W5500 : @ref SF_BROAD_BLOCK, @ref SF_MULTI_BLOCK, @ref SF_IPv6_BLOCK, and @ref SF_UNI_BLOCK. + * @sa Sn_MR + * + * @return @b Success : The socket number @b 'sn' passed as parameter\n + * @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number\n + * @ref SOCKERR_SOCKMODE - Not support socket mode as TCP, UDP, and so on. \n + * @ref SOCKERR_SOCKFLAG - Invaild socket flag. + */ +int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Close a socket. + * @details It closes the socket with @b'sn' passed as parameter. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * + * @return @b Success : @ref SOCK_OK \n + * @b Fail : @ref SOCKERR_SOCKNUM - Invalid socket number + */ +int8_t close(uint8_t sn); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Listen to a connection request from a client. + * @details It is listening to a connection request from a client. + * If connection request is accepted successfully, the connection is established. Socket sn is used in passive(server) mode. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return @b Success : @ref SOCK_OK \n + * @b Fail :\n @ref SOCKERR_SOCKINIT - Socket is not initialized \n + * @ref SOCKERR_SOCKCLOSED - Socket closed unexpectedly. + */ +int8_t listen(uint8_t sn); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Try to connect a server. + * @details It requests connection to the server with destination IP address and port number passed as parameter.\n + * @note It is valid only in TCP client mode. + * In block io mode, it does not return until connection is completed. + * In Non-block io mode, it return @ref SOCK_BUSY immediately. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param addr Pointer variable of destination IP address. It should be allocated 4 bytes. + * @param port Destination port number. + * + * @return @b Success : @ref SOCK_OK \n + * @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number\n + * @ref SOCKERR_SOCKMODE - Invalid socket mode\n + * @ref SOCKERR_SOCKINIT - Socket is not initialized\n + * @ref SOCKERR_IPINVALID - Wrong server IP address\n + * @ref SOCKERR_PORTZERO - Server port zero\n + * @ref SOCKERR_TIMEOUT - Timeout occurred during request connection\n + * @ref SOCK_BUSY - In non-block io mode, it returned immediately\n + */ +int8_t connect(uint8_t sn, uint8_t * addr, uint16_t port); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Try to disconnect a connection socket. + * @details It sends request message to disconnect the TCP socket 'sn' passed as parameter to the server or client. + * @note It is valid only in TCP server or client mode. \n + * In block io mode, it does not return until disconnection is completed. \n + * In Non-block io mode, it return @ref SOCK_BUSY immediately. \n + + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @return @b Success : @ref SOCK_OK \n + * @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number \n + * @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n + * @ref SOCKERR_TIMEOUT - Timeout occurred \n + * @ref SOCK_BUSY - Socket is busy. + */ +int8_t disconnect(uint8_t sn); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Send data to the connected peer in TCP socket. + * @details It is used to send outgoing data to the connected socket. + * @note It is valid only in TCP server or client mode. It can't send data greater than socket buffer size. \n + * In block io mode, It doesn't return until data send is completed - socket buffer size is greater than data. \n + * In non-block io mode, It return @ref SOCK_BUSY immediately when socket buffer is not enough. \n + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param buf Pointer buffer containing data to be sent. + * @param len The byte length of data in buf. + * @return @b Success : The sent data size \n + * @b Fail : \n @ref SOCKERR_SOCKSTATUS - Invalid socket status for socket operation \n + * @ref SOCKERR_TIMEOUT - Timeout occurred \n + * @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n + * @ref SOCKERR_SOCKNUM - Invalid socket number \n + * @ref SOCKERR_DATALEN - zero data length \n + * @ref SOCK_BUSY - Socket is busy. + */ +int32_t send(uint8_t sn, uint8_t * buf, uint16_t len); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Receive data from the connected peer. + * @details It is used to read incoming data from the connected socket.\n + * It waits for data as much as the application wants to receive. + * @note It is valid only in TCP server or client mode. It can't receive data greater than socket buffer size. \n + * In block io mode, it doesn't return until data reception is completed - data is filled as len in socket buffer. \n + * In non-block io mode, it return @ref SOCK_BUSY immediately when len is greater than data size in socket buffer. \n + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param buf Pointer buffer to read incoming data. + * @param len The max data length of data in buf. + * @return @b Success : The real received data size \n + * @b Fail :\n + * @ref SOCKERR_SOCKSTATUS - Invalid socket status for socket operation \n + * @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n + * @ref SOCKERR_SOCKNUM - Invalid socket number \n + * @ref SOCKERR_DATALEN - zero data length \n + * @ref SOCK_BUSY - Socket is busy. + */ +int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Sends datagram to the peer with destination IP address and port number passed as parameter. + * @details It sends datagram of UDP or MACRAW to the peer with destination IP address and port number passed as parameter.\n + * Even if the connectionless socket has been previously connected to a specific address, + * the address and port number parameters override the destination address for that particular datagram only. + * @note In block io mode, It doesn't return until data send is completed - socket buffer size is greater than len. + * In non-block io mode, It return @ref SOCK_BUSY immediately when socket buffer is not enough. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param buf Pointer buffer to send outgoing data. + * @param len The byte length of data in buf. + * @param addr Pointer variable of destination IP address. It should be allocated 4 bytes. + * @param port Destination port number. + * + * @return @b Success : The sent data size \n + * @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number \n + * @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n + * @ref SOCKERR_SOCKSTATUS - Invalid socket status for socket operation \n + * @ref SOCKERR_DATALEN - zero data length \n + * @ref SOCKERR_IPINVALID - Wrong server IP address\n + * @ref SOCKERR_PORTZERO - Server port zero\n + * @ref SOCKERR_SOCKCLOSED - Socket unexpectedly closed \n + * @ref SOCKERR_TIMEOUT - Timeout occurred \n + * @ref SOCK_BUSY - Socket is busy. + */ +int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port); + +/** + * @ingroup WIZnet_socket_APIs + * @brief Receive datagram of UDP or MACRAW + * @details This function is an application I/F function which is used to receive the data in other then TCP mode. \n + * This function is used to receive UDP and MAC_RAW mode, and handle the header as well. + * This function can divide to received the packet data. + * On the MACRAW SOCKET, the addr and port parameters are ignored. + * @note In block io mode, it doesn't return until data reception is completed - data is filled as len in socket buffer + * In non-block io mode, it return @ref SOCK_BUSY immediately when len is greater than data size in socket buffer. + * + * @param sn Socket number. It should be 0 ~ @ref \_WIZCHIP_SOCK_NUM_. + * @param buf Pointer buffer to read incoming data. + * @param len The max data length of data in buf. + * When the received packet size <= len, receives data as packet sized. + * When others, receives data as len. + * @param addr Pointer variable of destination IP address. It should be allocated 4 bytes. + * It is valid only when the first call recvfrom for receiving the packet. + * When it is valid, @ref packinfo[7] should be set as '1' after call @ref getsockopt(sn, SO_PACKINFO, &packinfo). + * @param port Pointer variable of destination port number. + * It is valid only when the first call recvform for receiving the packet. +* When it is valid, @ref packinfo[7] should be set as '1' after call @ref getsockopt(sn, SO_PACKINFO, &packinfo). + * + * @return @b Success : This function return real received data size for success.\n + * @b Fail : @ref SOCKERR_DATALEN - zero data length \n + * @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n + * @ref SOCKERR_SOCKNUM - Invalid socket number \n + * @ref SOCKBUSY - Socket is busy. + */ +int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port); + + +///////////////////////////// +// SOCKET CONTROL & OPTION // +///////////////////////////// +#define SOCK_IO_BLOCK 0 ///< Socket Block IO Mode in @ref setsockopt(). +#define SOCK_IO_NONBLOCK 1 ///< Socket Non-block IO Mode in @ref setsockopt(). + +/** + * @defgroup DATA_TYPE DATA TYPE + */ + +/** + * @ingroup DATA_TYPE + * @brief The kind of Socket Interrupt. + * @sa Sn_IR, Sn_IMR, setSn_IR(), getSn_IR(), setSn_IMR(), getSn_IMR() + */ +typedef enum +{ + SIK_CONNECTED = (1 << 0), ///< connected + SIK_DISCONNECTED = (1 << 1), ///< disconnected + SIK_RECEIVED = (1 << 2), ///< data received + SIK_TIMEOUT = (1 << 3), ///< timeout occurred + SIK_SENT = (1 << 4), ///< send ok + //M20150410 : Remove the comma of last member + //SIK_ALL = 0x1F, ///< all interrupt + SIK_ALL = 0x1F ///< all interrupt +}sockint_kind; + +/** + * @ingroup DATA_TYPE + * @brief The type of @ref ctlsocket(). + */ +typedef enum +{ + CS_SET_IOMODE, ///< set socket IO mode with @ref SOCK_IO_BLOCK or @ref SOCK_IO_NONBLOCK + CS_GET_IOMODE, ///< get socket IO mode + CS_GET_MAXTXBUF, ///< get the size of socket buffer allocated in TX memory + CS_GET_MAXRXBUF, ///< get the size of socket buffer allocated in RX memory + CS_CLR_INTERRUPT, ///< clear the interrupt of socket with @ref sockint_kind + CS_GET_INTERRUPT, ///< get the socket interrupt. refer to @ref sockint_kind +#if _WIZCHIP_ > 5100 + CS_SET_INTMASK, ///< set the interrupt mask of socket with @ref sockint_kind, Not supported in W5100 + CS_GET_INTMASK ///< get the masked interrupt of socket. refer to @ref sockint_kind, Not supported in W5100 +#endif +}ctlsock_type; + + +/** + * @ingroup DATA_TYPE + * @brief The type of socket option in @ref setsockopt() or @ref getsockopt() + */ +typedef enum +{ + SO_FLAG, ///< Valid only in getsockopt(), For set flag of socket refer to flag in @ref socket(). + SO_TTL, ///< Set TTL. @ref Sn_TTL ( @ref setSn_TTL(), @ref getSn_TTL() ) + SO_TOS, ///< Set TOS. @ref Sn_TOS ( @ref setSn_TOS(), @ref getSn_TOS() ) + SO_MSS, ///< Set MSS. @ref Sn_MSSR ( @ref setSn_MSSR(), @ref getSn_MSSR() ) + SO_DESTIP, ///< Set the destination IP address. @ref Sn_DIPR ( @ref setSn_DIPR(), @ref getSn_DIPR() ) + SO_DESTPORT, ///< Set the destination Port number. @ref Sn_DPORT ( @ref setSn_DPORT(), @ref getSn_DPORT() ) +#if _WIZCHIP_ != 5100 + SO_KEEPALIVESEND, ///< Valid only in setsockopt. Manually send keep-alive packet in TCP mode, Not supported in W5100 + #if !( (_WIZCHIP_ == 5100) || (_WIZCHIP_ == 5200) ) + SO_KEEPALIVEAUTO, ///< Set/Get keep-alive auto transmission timer in TCP mode, Not supported in W5100, W5200 + #endif +#endif + SO_SENDBUF, ///< Valid only in getsockopt. Get the free data size of Socekt TX buffer. @ref Sn_TX_FSR, @ref getSn_TX_FSR() + SO_RECVBUF, ///< Valid only in getsockopt. Get the received data size in socket RX buffer. @ref Sn_RX_RSR, @ref getSn_RX_RSR() + SO_STATUS, ///< Valid only in getsockopt. Get the socket status. @ref Sn_SR, @ref getSn_SR() + SO_REMAINSIZE, ///< Valid only in getsockopt. Get the remained packet size in other then TCP mode. + SO_PACKINFO ///< Valid only in getsockopt. Get the packet information as @ref PACK_FIRST, @ref PACK_REMAINED, and @ref PACK_COMPLETED in other then TCP mode. +}sockopt_type; + +/** + * @ingroup WIZnet_socket_APIs + * @brief Control socket. + * @details Control IO mode, Interrupt & Mask of socket and get the socket buffer information. + * Refer to @ref ctlsock_type. + * @param sn socket number + * @param cstype type of control socket. refer to @ref ctlsock_type. + * @param arg Data type and value is determined according to @ref ctlsock_type. \n + * + * + * + * + * + *
    @b cstype @b data type@b value
    @ref CS_SET_IOMODE \n @ref CS_GET_IOMODE uint8_t @ref SOCK_IO_BLOCK @ref SOCK_IO_NONBLOCK
    @ref CS_GET_MAXTXBUF \n @ref CS_GET_MAXRXBUF uint16_t 0 ~ 16K
    @ref CS_CLR_INTERRUPT \n @ref CS_GET_INTERRUPT \n @ref CS_SET_INTMASK \n @ref CS_GET_INTMASK @ref sockint_kind @ref SIK_CONNECTED, etc.
    + * @return @b Success @ref SOCK_OK \n + * @b fail @ref SOCKERR_ARG - Invalid argument\n + */ +int8_t ctlsocket(uint8_t sn, ctlsock_type cstype, void* arg); + +/** + * @ingroup WIZnet_socket_APIs + * @brief set socket options + * @details Set socket option like as TTL, MSS, TOS, and so on. Refer to @ref sockopt_type. + * + * @param sn socket number + * @param sotype socket option type. refer to @ref sockopt_type + * @param arg Data type and value is determined according to sotype. \n + * + * + * + * + * + * + * + * + * + *
    @b sotype @b data type@b value
    @ref SO_TTL uint8_t 0 ~ 255
    @ref SO_TOS uint8_t 0 ~ 255
    @ref SO_MSS uint16_t 0 ~ 65535
    @ref SO_DESTIP uint8_t[4]
    @ref SO_DESTPORT uint16_t 0 ~ 65535
    @ref SO_KEEPALIVESEND null null
    @ref SO_KEEPALIVEAUTO uint8_t 0 ~ 255
    + * @return + * - @b Success : @ref SOCK_OK \n + * - @b Fail + * - @ref SOCKERR_SOCKNUM - Invalid Socket number \n + * - @ref SOCKERR_SOCKMODE - Invalid socket mode \n + * - @ref SOCKERR_SOCKOPT - Invalid socket option or its value \n + * - @ref SOCKERR_TIMEOUT - Timeout occurred when sending keep-alive packet \n + */ +int8_t setsockopt(uint8_t sn, sockopt_type sotype, void* arg); + +/** + * @ingroup WIZnet_socket_APIs + * @brief get socket options + * @details Get socket option like as FLAG, TTL, MSS, and so on. Refer to @ref sockopt_type + * @param sn socket number + * @param sotype socket option type. refer to @ref sockopt_type + * @param arg Data type and value is determined according to sotype. \n + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    @b sotype @b data type@b value
    @ref SO_FLAG uint8_t @ref SF_ETHER_OWN, etc...
    @ref SO_TOS uint8_t 0 ~ 255
    @ref SO_MSS uint16_t 0 ~ 65535
    @ref SO_DESTIP uint8_t[4]
    @ref SO_DESTPORT uint16_t
    @ref SO_KEEPALIVEAUTO uint8_t 0 ~ 255
    @ref SO_SENDBUF uint16_t 0 ~ 65535
    @ref SO_RECVBUF uint16_t 0 ~ 65535
    @ref SO_STATUS uint8_t @ref SOCK_ESTABLISHED, etc..
    @ref SO_REMAINSIZE uint16_t 0~ 65535
    @ref SO_PACKINFO uint8_t @ref PACK_FIRST, etc...
    + * @return + * - @b Success : @ref SOCK_OK \n + * - @b Fail + * - @ref SOCKERR_SOCKNUM - Invalid Socket number \n + * - @ref SOCKERR_SOCKOPT - Invalid socket option or its value \n + * - @ref SOCKERR_SOCKMODE - Invalid socket mode \n + * @note + * The option as PACK_REMAINED and SO_PACKINFO is valid only in NON-TCP mode and after call @ref recvfrom(). \n + * When SO_PACKINFO value is PACK_FIRST and the return value of recvfrom() is zero, + * This means the zero byte UDP data(UDP Header only) received. + */ +int8_t getsockopt(uint8_t sn, sockopt_type sotype, void* arg); + +#ifdef __cplusplus + } +#endif + +#endif // _SOCKET_H_ diff --git a/Ethernet/wizchip_conf.c b/Ethernet/wizchip_conf.c new file mode 100644 index 0000000..f6497ba --- /dev/null +++ b/Ethernet/wizchip_conf.c @@ -0,0 +1,908 @@ +//****************************************************************************/ +//! +//! \file wizchip_conf.c +//! \brief WIZCHIP Config Header File. +//! \version 1.0.1 +//! \date 2013/10/21 +//! \par Revision history +//! <2015/02/05> Notice +//! The version history is not updated after this point. +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! <2014/05/01> V1.0.1 Refer to M20140501 +//! 1. Explicit type casting in wizchip_bus_readdata() & wizchip_bus_writedata() +// Issued by Mathias ClauBen. +//! uint32_t type converts into ptrdiff_t first. And then recoverting it into uint8_t* +//! For remove the warning when pointer type size is not 32bit. +//! If ptrdiff_t doesn't support in your complier, You should must replace ptrdiff_t into your suitable pointer type. +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//*****************************************************************************/ +//A20140501 : for use the type - ptrdiff_t +#include +// + +#include "wizchip_conf.h" + +///////////// +//M20150401 : Remove ; in the default callback function such as wizchip_cris_enter(), wizchip_cs_select() and etc. +///////////// + +/** + * @brief Default function to enable interrupt. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_cris_enter(void) {}; +void wizchip_cris_enter(void) {} + +/** + * @brief Default function to disable interrupt. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_cris_exit(void) {}; +void wizchip_cris_exit(void) {} + +/** + * @brief Default function to select chip. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_cs_select(void) {}; +void wizchip_cs_select(void) {} + +/** + * @brief Default function to deselect chip. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_cs_deselect(void) {}; +void wizchip_cs_deselect(void) {} + +/** + * @brief Default function to read in direct or indirect interface. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ + //M20150601 : Rename the function for integrating with W5300 +//uint8_t wizchip_bus_readbyte(uint32_t AddrSel) { return * ((volatile uint8_t *)((ptrdiff_t) AddrSel)); } +iodata_t wizchip_bus_readdata(uint32_t AddrSel) { return * ((volatile iodata_t *)((ptrdiff_t) AddrSel)); } + +/** + * @brief Default function to write in direct or indirect interface. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//M20150601 : Rename the function for integrating with W5300 +//void wizchip_bus_writebyte(uint32_t AddrSel, uint8_t wb) { *((volatile uint8_t*)((ptrdiff_t)AddrSel)) = wb; } +void wizchip_bus_writedata(uint32_t AddrSel, iodata_t wb) { *((volatile iodata_t*)((ptrdiff_t)AddrSel)) = wb; } + +/** + * @brief Default function to read in SPI interface. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//uint8_t wizchip_spi_readbyte(void) {return 0;}; +uint8_t wizchip_spi_readbyte(void) {return 0;} + +/** + * @brief Default function to write in SPI interface. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_spi_writebyte(uint8_t wb) {}; +void wizchip_spi_writebyte(uint8_t wb) {} + +/** + * @brief Default function to burst read in SPI interface. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_spi_readburst(uint8_t* pBuf, uint16_t len) {}; +void wizchip_spi_readburst(uint8_t* pBuf, uint16_t len) {} + +/** + * @brief Default function to burst write in SPI interface. + * @note This function help not to access wrong address. If you do not describe this function or register any functions, + * null function is called. + */ +//void wizchip_spi_writeburst(uint8_t* pBuf, uint16_t len) {}; +void wizchip_spi_writeburst(uint8_t* pBuf, uint16_t len) {} + +/** + * @\ref _WIZCHIP instance + */ +// +//M20150401 : For a compiler didnot support a member of structure +// Replace the assignment of struct members with the assingment of array +// +/* +_WIZCHIP WIZCHIP = + { + .id = _WIZCHIP_ID_, + .if_mode = _WIZCHIP_IO_MODE_, + .CRIS._enter = wizchip_cris_enter, + .CRIS._exit = wizchip_cris_exit, + .CS._select = wizchip_cs_select, + .CS._deselect = wizchip_cs_deselect, + .IF.BUS._read_byte = wizchip_bus_readbyte, + .IF.BUS._write_byte = wizchip_bus_writebyte +// .IF.SPI._read_byte = wizchip_spi_readbyte, +// .IF.SPI._write_byte = wizchip_spi_writebyte + }; +*/ +_WIZCHIP WIZCHIP = +{ + _WIZCHIP_IO_MODE_, + _WIZCHIP_ID_ , + { + wizchip_cris_enter, + wizchip_cris_exit + }, + { + wizchip_cs_select, + wizchip_cs_deselect + }, + { + { + //M20150601 : Rename the function + //wizchip_bus_readbyte, + //wizchip_bus_writebyte + wizchip_bus_readdata, + wizchip_bus_writedata + }, + + } +}; + + +static uint8_t _DNS_[4]; // DNS server ip address +static dhcp_mode _DHCP_; // DHCP mode + +void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void)) +{ + if(!cris_en || !cris_ex) + { + WIZCHIP.CRIS._enter = wizchip_cris_enter; + WIZCHIP.CRIS._exit = wizchip_cris_exit; + } + else + { + WIZCHIP.CRIS._enter = cris_en; + WIZCHIP.CRIS._exit = cris_ex; + } +} + +void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void)) +{ + if(!cs_sel || !cs_desel) + { + WIZCHIP.CS._select = wizchip_cs_select; + WIZCHIP.CS._deselect = wizchip_cs_deselect; + } + else + { + WIZCHIP.CS._select = cs_sel; + WIZCHIP.CS._deselect = cs_desel; + } +} + +//M20150515 : For integrating with W5300 +//void reg_wizchip_bus_cbfunc(uint8_t(*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, uint8_t wb)) +void reg_wizchip_bus_cbfunc(iodata_t(*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, iodata_t wb)) +{ + while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_BUS_)); + //M20150601 : Rename call back function for integrating with W5300 + /* + if(!bus_rb || !bus_wb) + { + WIZCHIP.IF.BUS._read_byte = wizchip_bus_readbyte; + WIZCHIP.IF.BUS._write_byte = wizchip_bus_writebyte; + } + else + { + WIZCHIP.IF.BUS._read_byte = bus_rb; + WIZCHIP.IF.BUS._write_byte = bus_wb; + } + */ + if(!bus_rb || !bus_wb) + { + WIZCHIP.IF.BUS._read_data = wizchip_bus_readdata; + WIZCHIP.IF.BUS._write_data = wizchip_bus_writedata; + } + else + { + WIZCHIP.IF.BUS._read_data = bus_rb; + WIZCHIP.IF.BUS._write_data = bus_wb; + } +} + +void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb)) +{ + while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_SPI_)); + + if(!spi_rb || !spi_wb) + { + WIZCHIP.IF.SPI._read_byte = wizchip_spi_readbyte; + WIZCHIP.IF.SPI._write_byte = wizchip_spi_writebyte; + } + else + { + WIZCHIP.IF.SPI._read_byte = spi_rb; + WIZCHIP.IF.SPI._write_byte = spi_wb; + } +} + +// 20140626 Eric Added for SPI burst operations +void reg_wizchip_spiburst_cbfunc(void (*spi_rb)(uint8_t* pBuf, uint16_t len), void (*spi_wb)(uint8_t* pBuf, uint16_t len)) +{ + while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_SPI_)); + + if(!spi_rb || !spi_wb) + { + WIZCHIP.IF.SPI._read_burst = wizchip_spi_readburst; + WIZCHIP.IF.SPI._write_burst = wizchip_spi_writeburst; + } + else + { + WIZCHIP.IF.SPI._read_burst = spi_rb; + WIZCHIP.IF.SPI._write_burst = spi_wb; + } +} + +int8_t ctlwizchip(ctlwizchip_type cwtype, void* arg) +{ +#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5200 || _WIZCHIP_ == W5500 + uint8_t tmp = 0; +#endif + uint8_t* ptmp[2] = {0,0}; + switch(cwtype) + { + case CW_RESET_WIZCHIP: + wizchip_sw_reset(); + break; + case CW_INIT_WIZCHIP: + if(arg != 0) + { + ptmp[0] = (uint8_t*)arg; + ptmp[1] = ptmp[0] + _WIZCHIP_SOCK_NUM_; + } + return wizchip_init(ptmp[0], ptmp[1]); + case CW_CLR_INTERRUPT: + wizchip_clrinterrupt(*((intr_kind*)arg)); + break; + case CW_GET_INTERRUPT: + *((intr_kind*)arg) = wizchip_getinterrupt(); + break; + case CW_SET_INTRMASK: + wizchip_setinterruptmask(*((intr_kind*)arg)); + break; + case CW_GET_INTRMASK: + *((intr_kind*)arg) = wizchip_getinterruptmask(); + break; + //M20150601 : This can be supported by W5200, W5500 + //#if _WIZCHIP_ > W5100 + #if (_WIZCHIP_ == W5200 || _WIZCHIP_ == W5500) + case CW_SET_INTRTIME: + setINTLEVEL(*(uint16_t*)arg); + break; + case CW_GET_INTRTIME: + *(uint16_t*)arg = getINTLEVEL(); + break; + #endif + case CW_GET_ID: + ((uint8_t*)arg)[0] = WIZCHIP.id[0]; + ((uint8_t*)arg)[1] = WIZCHIP.id[1]; + ((uint8_t*)arg)[2] = WIZCHIP.id[2]; + ((uint8_t*)arg)[3] = WIZCHIP.id[3]; + ((uint8_t*)arg)[4] = WIZCHIP.id[4]; + ((uint8_t*)arg)[5] = 0; + break; + #if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5500 + case CW_RESET_PHY: + wizphy_reset(); + break; + case CW_SET_PHYCONF: + wizphy_setphyconf((wiz_PhyConf*)arg); + break; + case CW_GET_PHYCONF: + wizphy_getphyconf((wiz_PhyConf*)arg); + break; + case CW_GET_PHYSTATUS: + break; + case CW_SET_PHYPOWMODE: + return wizphy_setphypmode(*(uint8_t*)arg); + #endif + #if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5200 || _WIZCHIP_ == W5500 + case CW_GET_PHYPOWMODE: + tmp = wizphy_getphypmode(); + if((int8_t)tmp == -1) return -1; + *(uint8_t*)arg = tmp; + break; + case CW_GET_PHYLINK: + tmp = wizphy_getphylink(); + if((int8_t)tmp == -1) return -1; + *(uint8_t*)arg = tmp; + break; + #endif + default: + return -1; + } + return 0; +} + + +int8_t ctlnetwork(ctlnetwork_type cntype, void* arg) +{ + + switch(cntype) + { + case CN_SET_NETINFO: + wizchip_setnetinfo((wiz_NetInfo*)arg); + break; + case CN_GET_NETINFO: + wizchip_getnetinfo((wiz_NetInfo*)arg); + break; + case CN_SET_NETMODE: + return wizchip_setnetmode(*(netmode_type*)arg); + case CN_GET_NETMODE: + *(netmode_type*)arg = wizchip_getnetmode(); + break; + case CN_SET_TIMEOUT: + wizchip_settimeout((wiz_NetTimeout*)arg); + break; + case CN_GET_TIMEOUT: + wizchip_gettimeout((wiz_NetTimeout*)arg); + break; + default: + return -1; + } + return 0; +} + +void wizchip_sw_reset(void) +{ + uint8_t gw[4], sn[4], sip[4]; + uint8_t mac[6]; +//A20150601 +#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_ + uint16_t mr = (uint16_t)getMR(); + setMR(mr | MR_IND); +#endif +// + getSHAR(mac); + getGAR(gw); getSUBR(sn); getSIPR(sip); + setMR(MR_RST); + getMR(); // for delay +//A2015051 : For indirect bus mode +#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_ + setMR(mr | MR_IND); +#endif +// + setSHAR(mac); + setGAR(gw); + setSUBR(sn); + setSIPR(sip); +} + +int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize) +{ + int8_t i; +#if _WIZCHIP_ < W5200 + int8_t j; +#endif + int8_t tmp = 0; + wizchip_sw_reset(); + if(txsize) + { + tmp = 0; + //M20150601 : For integrating with W5300 + #if _WIZCHIP_ == W5300 + for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++) + { + if(txsize[i] >= 64) return -1; //No use 64KB even if W5300 support max 64KB memory allocation + tmp += txsize[i]; + if(tmp > 128) return -1; + } + if(tmp % 8) return -1; + #else + for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++) + { + tmp += txsize[i]; + + #if _WIZCHIP_ < W5200 //2016.10.28 peter add condition for w5100 and w5100s + if(tmp > 8) return -1; + #else + if(tmp > 16) return -1; + #endif + } + for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++) + { + #if _WIZCHIP_ < W5200 //2016.10.28 peter add condition for w5100 + j = 0; + while((txsize[i] >> j != 1)&&(txsize[i] !=0)){j++;} + setSn_TXBUF_SIZE(i, j); + #else + setSn_TXBUF_SIZE(i, txsize[i]); + #endif + } + + #endif + } + + if(rxsize) + { + tmp = 0; + #if _WIZCHIP_ == W5300 + for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++) + { + if(rxsize[i] >= 64) return -1; //No use 64KB even if W5300 support max 64KB memory allocation + tmp += rxsize[i]; + if(tmp > 128) return -1; + } + if(tmp % 8) return -1; + #else + for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++) + { + tmp += rxsize[i]; + #if _WIZCHIP_ < W5200 //2016.10.28 peter add condition for w5100 and w5100s + if(tmp > 8) return -1; + #else + if(tmp > 16) return -1; + #endif + } + + for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++) + { + #if _WIZCHIP_ < W5200 // add condition for w5100 + j = 0; + while((rxsize[i] >> j != 1)&&(txsize[i] !=0)){j++;} + setSn_RXBUF_SIZE(i, j); + #else + setSn_RXBUF_SIZE(i, rxsize[i]); + #endif + } + #endif + } + return 0; +} + +void wizchip_clrinterrupt(intr_kind intr) +{ + uint8_t ir = (uint8_t)intr; + uint8_t sir = (uint8_t)((uint16_t)intr >> 8); +#if _WIZCHIP_ < W5500 + ir |= (1<<4); // IK_WOL +#endif +#if _WIZCHIP_ == W5200 + ir |= (1 << 6); +#endif + +#if _WIZCHIP_ < W5200 + sir &= 0x0F; +#endif + +#if _WIZCHIP_ <= W5100S + ir |= sir; + setIR(ir); +//A20150601 : For integrating with W5300 +#elif _WIZCHIP_ == W5300 + setIR( ((((uint16_t)ir) << 8) | (((uint16_t)sir) & 0x00FF)) ); +#else + setIR(ir); +//M20200227 : For clear + //setSIR(sir); + for(ir=0; ir<8; ir++){ + if(sir & (0x01 <> 8); + sir = (uint8_t)ret; +#else + ir = getIR(); + sir = getSIR(); +#endif + +//M20150601 : For Integrating with W5300 +//#if _WIZCHIP_ < W5500 +#if _WIZCHIP_ < W5200 + ir &= ~(1<<4); // IK_WOL +#endif +#if _WIZCHIP_ == W5200 + ir &= ~(1 << 6); +#endif + ret = sir; + ret = (ret << 8) + ir; + return (intr_kind)ret; +} + +void wizchip_setinterruptmask(intr_kind intr) +{ + uint8_t imr = (uint8_t)intr; + uint8_t simr = (uint8_t)((uint16_t)intr >> 8); +#if _WIZCHIP_ < W5500 + imr &= ~(1<<4); // IK_WOL +#endif +#if _WIZCHIP_ == W5200 + imr &= ~(1 << 6); +#endif + +#if _WIZCHIP_ < W5200 + simr &= 0x0F; + imr |= simr; + setIMR(imr); +//A20150601 : For integrating with W5300 +#elif _WIZCHIP_ == W5300 + setIMR( ((((uint16_t)imr) << 8) | (((uint16_t)simr) & 0x00FF)) ); +#else + setIMR(imr); + setSIMR(simr); +#endif +} + +intr_kind wizchip_getinterruptmask(void) +{ + uint8_t imr = 0; + uint8_t simr = 0; + uint16_t ret = 0; +#if _WIZCHIP_ < W5200 + imr = getIMR(); + simr = imr & 0x0F; +//A20150601 : For integrating with W5300 +#elif _WIZCHIP_ == W5300 + ret = getIMR(); + imr = (uint8_t)(ret >> 8); + simr = (uint8_t)ret; +#else + imr = getIMR(); + simr = getSIMR(); +#endif + +#if _WIZCHIP_ < W5500 + imr &= ~(1<<4); // IK_WOL +#endif +#if _WIZCHIP_ == W5200 + imr &= ~(1 << 6); // IK_DEST_UNREACH +#endif + ret = simr; + ret = (ret << 8) + imr; + return (intr_kind)ret; +} + +int8_t wizphy_getphylink(void) +{ + int8_t tmp = PHY_LINK_OFF; +#if _WIZCHIP_ == W5100S + if(getPHYSR() & PHYSR_LNK) + tmp = PHY_LINK_ON; +#elif _WIZCHIP_ == W5200 + if(getPHYSTATUS() & PHYSTATUS_LINK) + tmp = PHY_LINK_ON; +#elif _WIZCHIP_ == W5500 + if(getPHYCFGR() & PHYCFGR_LNK_ON) + tmp = PHY_LINK_ON; + +#else + tmp = -1; +#endif + return tmp; +} + +#if _WIZCHIP_ > W5100 + +int8_t wizphy_getphypmode(void) +{ + int8_t tmp = 0; + #if _WIZCHIP_ == W5200 + if(getPHYSTATUS() & PHYSTATUS_POWERDOWN) + tmp = PHY_POWER_DOWN; + else + tmp = PHY_POWER_NORM; + #elif _WIZCHIP_ == 5500 + if((getPHYCFGR() & PHYCFGR_OPMDC_ALLA) == PHYCFGR_OPMDC_PDOWN) + tmp = PHY_POWER_DOWN; + else + tmp = PHY_POWER_NORM; + #else + tmp = -1; + #endif + return tmp; +} +#endif + +#if _WIZCHIP_ == W5100S +void wizphy_reset(void) +{ + uint16_t tmp = wiz_mdio_read(PHYMDIO_BMCR); + tmp |= BMCR_RESET; + wiz_mdio_write(PHYMDIO_BMCR, tmp); + while(wiz_mdio_read(PHYMDIO_BMCR)&BMCR_RESET){} +} + +void wizphy_setphyconf(wiz_PhyConf* phyconf) +{ + uint16_t tmp = wiz_mdio_read(PHYMDIO_BMCR); + if(phyconf->mode == PHY_MODE_AUTONEGO) + tmp |= BMCR_AUTONEGO; + else + { + tmp &= ~BMCR_AUTONEGO; + if(phyconf->duplex == PHY_DUPLEX_FULL) + { + tmp |= BMCR_DUP; + } + else + { + tmp &= ~BMCR_DUP; + } + if(phyconf->speed == PHY_SPEED_100) + { + tmp |= BMCR_SPEED; + } + else + { + tmp &= ~BMCR_SPEED; + } + } + wiz_mdio_write(PHYMDIO_BMCR, tmp); +} + +void wizphy_getphyconf(wiz_PhyConf* phyconf) +{ + uint16_t tmp = 0; + tmp = wiz_mdio_read(PHYMDIO_BMCR); + phyconf->by = PHY_CONFBY_SW; + if(tmp & BMCR_AUTONEGO) + { + phyconf->mode = PHY_MODE_AUTONEGO; + } + else + { + phyconf->mode = PHY_MODE_MANUAL; + if(tmp&BMCR_DUP) phyconf->duplex = PHY_DUPLEX_FULL; + else phyconf->duplex = PHY_DUPLEX_HALF; + if(tmp&BMCR_SPEED) phyconf->speed = PHY_SPEED_100; + else phyconf->speed = PHY_SPEED_10; + } +} + +int8_t wizphy_setphypmode(uint8_t pmode) +{ + uint16_t tmp = 0; + tmp = wiz_mdio_read(PHYMDIO_BMCR); + if( pmode == PHY_POWER_DOWN) + { + tmp |= BMCR_PWDN; + } + else + { + tmp &= ~BMCR_PWDN; + } + wiz_mdio_write(PHYMDIO_BMCR, tmp); + tmp = wiz_mdio_read(PHYMDIO_BMCR); + if( pmode == PHY_POWER_DOWN) + { + if(tmp & BMCR_PWDN) return 0; + } + else + { + if((tmp & BMCR_PWDN) != BMCR_PWDN) return 0; + } + return -1; +} + +#endif +#if _WIZCHIP_ == W5500 +void wizphy_reset(void) +{ + uint8_t tmp = getPHYCFGR(); + tmp &= PHYCFGR_RST; + setPHYCFGR(tmp); + tmp = getPHYCFGR(); + tmp |= ~PHYCFGR_RST; + setPHYCFGR(tmp); +} + +void wizphy_setphyconf(wiz_PhyConf* phyconf) +{ + uint8_t tmp = 0; + if(phyconf->by == PHY_CONFBY_SW) + tmp |= PHYCFGR_OPMD; + else + tmp &= ~PHYCFGR_OPMD; + if(phyconf->mode == PHY_MODE_AUTONEGO) + tmp |= PHYCFGR_OPMDC_ALLA; + else + { + if(phyconf->duplex == PHY_DUPLEX_FULL) + { + if(phyconf->speed == PHY_SPEED_100) + tmp |= PHYCFGR_OPMDC_100F; + else + tmp |= PHYCFGR_OPMDC_10F; + } + else + { + if(phyconf->speed == PHY_SPEED_100) + tmp |= PHYCFGR_OPMDC_100H; + else + tmp |= PHYCFGR_OPMDC_10H; + } + } + setPHYCFGR(tmp); + wizphy_reset(); +} + +void wizphy_getphyconf(wiz_PhyConf* phyconf) +{ + uint8_t tmp = 0; + tmp = getPHYCFGR(); + phyconf->by = (tmp & PHYCFGR_OPMD) ? PHY_CONFBY_SW : PHY_CONFBY_HW; + switch(tmp & PHYCFGR_OPMDC_ALLA) + { + case PHYCFGR_OPMDC_ALLA: + case PHYCFGR_OPMDC_100FA: + phyconf->mode = PHY_MODE_AUTONEGO; + break; + default: + phyconf->mode = PHY_MODE_MANUAL; + break; + } + switch(tmp & PHYCFGR_OPMDC_ALLA) + { + case PHYCFGR_OPMDC_100FA: + case PHYCFGR_OPMDC_100F: + case PHYCFGR_OPMDC_100H: + phyconf->speed = PHY_SPEED_100; + break; + default: + phyconf->speed = PHY_SPEED_10; + break; + } + switch(tmp & PHYCFGR_OPMDC_ALLA) + { + case PHYCFGR_OPMDC_100FA: + case PHYCFGR_OPMDC_100F: + case PHYCFGR_OPMDC_10F: + phyconf->duplex = PHY_DUPLEX_FULL; + break; + default: + phyconf->duplex = PHY_DUPLEX_HALF; + break; + } +} + +void wizphy_getphystat(wiz_PhyConf* phyconf) +{ + uint8_t tmp = getPHYCFGR(); + phyconf->duplex = (tmp & PHYCFGR_DPX_FULL) ? PHY_DUPLEX_FULL : PHY_DUPLEX_HALF; + phyconf->speed = (tmp & PHYCFGR_SPD_100) ? PHY_SPEED_100 : PHY_SPEED_10; +} + +int8_t wizphy_setphypmode(uint8_t pmode) +{ + uint8_t tmp = 0; + tmp = getPHYCFGR(); + if((tmp & PHYCFGR_OPMD)== 0) return -1; + tmp &= ~PHYCFGR_OPMDC_ALLA; + if( pmode == PHY_POWER_DOWN) + tmp |= PHYCFGR_OPMDC_PDOWN; + else + tmp |= PHYCFGR_OPMDC_ALLA; + setPHYCFGR(tmp); + wizphy_reset(); + tmp = getPHYCFGR(); + if( pmode == PHY_POWER_DOWN) + { + if(tmp & PHYCFGR_OPMDC_PDOWN) return 0; + } + else + { + if(tmp & PHYCFGR_OPMDC_ALLA) return 0; + } + return -1; +} +#endif + + +void wizchip_setnetinfo(wiz_NetInfo* pnetinfo) +{ + setSHAR(pnetinfo->mac); + setGAR(pnetinfo->gw); + setSUBR(pnetinfo->sn); + setSIPR(pnetinfo->ip); + _DNS_[0] = pnetinfo->dns[0]; + _DNS_[1] = pnetinfo->dns[1]; + _DNS_[2] = pnetinfo->dns[2]; + _DNS_[3] = pnetinfo->dns[3]; + _DHCP_ = pnetinfo->dhcp; +} + +void wizchip_getnetinfo(wiz_NetInfo* pnetinfo) +{ + getSHAR(pnetinfo->mac); + getGAR(pnetinfo->gw); + getSUBR(pnetinfo->sn); + getSIPR(pnetinfo->ip); + pnetinfo->dns[0]= _DNS_[0]; + pnetinfo->dns[1]= _DNS_[1]; + pnetinfo->dns[2]= _DNS_[2]; + pnetinfo->dns[3]= _DNS_[3]; + pnetinfo->dhcp = _DHCP_; +} + +int8_t wizchip_setnetmode(netmode_type netmode) +{ + uint8_t tmp = 0; +#if _WIZCHIP_ != W5500 + if(netmode & ~(NM_WAKEONLAN | NM_PPPOE | NM_PINGBLOCK)) return -1; +#else + if(netmode & ~(NM_WAKEONLAN | NM_PPPOE | NM_PINGBLOCK | NM_FORCEARP)) return -1; +#endif + tmp = getMR(); + tmp |= (uint8_t)netmode; + setMR(tmp); + return 0; +} + +netmode_type wizchip_getnetmode(void) +{ + return (netmode_type) getMR(); +} + +void wizchip_settimeout(wiz_NetTimeout* nettime) +{ + setRCR(nettime->retry_cnt); + setRTR(nettime->time_100us); +} + +void wizchip_gettimeout(wiz_NetTimeout* nettime) +{ + nettime->retry_cnt = getRCR(); + nettime->time_100us = getRTR(); +} diff --git a/Ethernet/wizchip_conf.h b/Ethernet/wizchip_conf.h new file mode 100644 index 0000000..b2f3fd2 --- /dev/null +++ b/Ethernet/wizchip_conf.h @@ -0,0 +1,661 @@ +//***************************************************************************** +// +//! \file wizchip_conf.h +//! \brief WIZCHIP Config Header File. +//! \version 1.0.0 +//! \date 2013/10/21 +//! \par Revision history +//! <2015/02/05> Notice +//! The version history is not updated after this point. +//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary. +//! >> https://github.com/Wiznet/ioLibrary_Driver +//! <2013/10/21> 1st Release +//! \author MidnightCow +//! \copyright +//! +//! Copyright (c) 2013, WIZnet Co., LTD. +//! All rights reserved. +//! +//! Redistribution and use in source and binary forms, with or without +//! modification, are permitted provided that the following conditions +//! are met: +//! +//! * Redistributions of source code must retain the above copyright +//! notice, this list of conditions and the following disclaimer. +//! * Redistributions in binary form must reproduce the above copyright +//! notice, this list of conditions and the following disclaimer in the +//! documentation and/or other materials provided with the distribution. +//! * Neither the name of the nor the names of its +//! contributors may be used to endorse or promote products derived +//! from this software without specific prior written permission. +//! +//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +//! THE POSSIBILITY OF SUCH DAMAGE. +// +//***************************************************************************** + +/** + * @defgroup extra_functions 2. WIZnet Extra Functions + * + * @brief These functions is optional function. It could be replaced at WIZCHIP I/O function because they were made by WIZCHIP I/O functions. + * @details There are functions of configuring WIZCHIP, network, interrupt, phy, network information and timer. \n + * + */ + +#ifndef _WIZCHIP_CONF_H_ +#define _WIZCHIP_CONF_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +/** + * @brief Select WIZCHIP. + * @todo You should select one, \b W5100, \b W5100S, \b W5200, \b W5300, \b W5500 or etc. \n\n + * ex> #define \_WIZCHIP_ W5500 + */ + +#define W5100 5100 +#define W5100S 5100+5 +#define W5200 5200 +#define W5300 5300 +#define W5500 5500 + +#ifndef _WIZCHIP_ +#define _WIZCHIP_ W5100 // W5100, W5100S, W5200, W5300, W5500 +#endif + +#define _WIZCHIP_IO_MODE_NONE_ 0x0000 +#define _WIZCHIP_IO_MODE_BUS_ 0x0100 /**< Bus interface mode */ +#define _WIZCHIP_IO_MODE_SPI_ 0x0200 /**< SPI interface mode */ +//#define _WIZCHIP_IO_MODE_IIC_ 0x0400 +//#define _WIZCHIP_IO_MODE_SDIO_ 0x0800 +// Add to +// + +#define _WIZCHIP_IO_MODE_BUS_DIR_ (_WIZCHIP_IO_MODE_BUS_ + 1) /**< BUS interface mode for direct */ +#define _WIZCHIP_IO_MODE_BUS_INDIR_ (_WIZCHIP_IO_MODE_BUS_ + 2) /**< BUS interface mode for indirect */ + +#define _WIZCHIP_IO_MODE_SPI_VDM_ (_WIZCHIP_IO_MODE_SPI_ + 1) /**< SPI interface mode for variable length data*/ +#define _WIZCHIP_IO_MODE_SPI_FDM_ (_WIZCHIP_IO_MODE_SPI_ + 2) /**< SPI interface mode for fixed length data mode*/ +#define _WIZCHIP_IO_MODE_SPI_5500_ (_WIZCHIP_IO_MODE_SPI_ + 3) /**< SPI interface mode for fixed length data mode*/ + +#if (_WIZCHIP_ == W5100) + #define _WIZCHIP_ID_ "W5100\0" +/** + * @brief Define interface mode. + * @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ , @ref \_WIZCHIP_IO_MODE_BUS_DIR_ or @ref \_WIZCHIP_IO_MODE_BUS_INDIR_ + */ +// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_DIR_ +// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_ + #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_ + +//A20150601 : Define the unit of IO DATA. + typedef uint8_t iodata_t; +//A20150401 : Indclude W5100.h file + #include "W5100/w5100.h" + +#elif (_WIZCHIP_ == W5100S) +#define _WIZCHIP_ID_ "W5100S\0" +/** +* @brief Define interface mode. +* @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ , @ref \_WIZCHIP_IO_MODE_BUS_DIR_ or @ref \_WIZCHIP_IO_MODE_BUS_INDIR_ +*/ +// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_ + //#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_5500_ + #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_ + +//A20150601 : Define the unit of IO DATA. + typedef uint8_t iodata_t; +//A20150401 : Indclude W5100.h file + #include "W5100S/w5100s.h" +#elif (_WIZCHIP_ == W5200) + #define _WIZCHIP_ID_ "W5200\0" +/** + * @brief Define interface mode. + * @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ or @ref \ _WIZCHIP_IO_MODE_BUS_INDIR_ + */ +#ifndef _WIZCHIP_IO_MODE_ +// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_ + #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_ +#endif +//A20150601 : Define the unit of IO DATA. + typedef uint8_t iodata_t; + #include "W5200/w5200.h" +#elif (_WIZCHIP_ == W5500) + #define _WIZCHIP_ID_ "W5500\0" + +/** + * @brief Define interface mode. \n + * @todo Should select interface mode as chip. + * - @ref \_WIZCHIP_IO_MODE_SPI_ \n + * -@ref \_WIZCHIP_IO_MODE_SPI_VDM_ : Valid only in @ref \_WIZCHIP_ == W5500 \n + * -@ref \_WIZCHIP_IO_MODE_SPI_FDM_ : Valid only in @ref \_WIZCHIP_ == W5500 \n + * - @ref \_WIZCHIP_IO_MODE_BUS_ \n + * - @ref \_WIZCHIP_IO_MODE_BUS_DIR_ \n + * - @ref \_WIZCHIP_IO_MODE_BUS_INDIR_ \n + * - Others will be defined in future. \n\n + * ex> #define \_WIZCHIP_IO_MODE_ \_WIZCHIP_IO_MODE_SPI_VDM_ + * + */ +#ifndef _WIZCHIP_IO_MODE_ + //#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_FDM_ + #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_VDM_ +#endif +//A20150601 : Define the unit of IO DATA. + typedef uint8_t iodata_t; + #include "W5500/w5500.h" +#elif ( _WIZCHIP_ == W5300) + #define _WIZCHIP_ID_ "W5300\0" +/** + * @brief Define interface mode. + * @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ , @ref \_WIZCHIP_IO_MODE_BUS_DIR_ or @ref \_WIZCHIP_IO_MODE_BUS_INDIR_ + */ +#ifndef _WIZCHIP_IO_MODE_ + #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_DIR_ +// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_ +#endif + +//A20150601 : Define the unit and bus width of IO DATA. + /** + * @brief Select the data width 8 or 16 bits. + * @todo you should select the bus width. Select one of 8 or 16. + */ + #ifndef _WIZCHIP_IO_BUS_WIDTH_ + #define _WIZCHIP_IO_BUS_WIDTH_ 16 // 8 + #endif + #if _WIZCHIP_IO_BUS_WIDTH_ == 8 + typedef uint8_t iodata_t; + #elif _WIZCHIP_IO_BUS_WIDTH_ == 16 + typedef uint16_t iodata_t; + #else + #error "Unknown _WIZCHIP_IO_BUS_WIDTH_. It should be 8 or 16." + #endif +// + #include "W5300/w5300.h" +#else + #error "Unknown defined _WIZCHIP_. You should define one of 5100, 5200, and 5500 !!!" +#endif + +#ifndef _WIZCHIP_IO_MODE_ + #error "Undefined _WIZCHIP_IO_MODE_. You should define it !!!" +#endif + +/** + * @brief Define I/O base address when BUS IF mode. + * @todo Should re-define it to fit your system when BUS IF Mode (@ref \_WIZCHIP_IO_MODE_BUS_, + * @ref \_WIZCHIP_IO_MODE_BUS_DIR_, @ref \_WIZCHIP_IO_MODE_BUS_INDIR_). \n\n + * ex> #define \_WIZCHIP_IO_BASE_ 0x00008000 + */ +#if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_ +// #define _WIZCHIP_IO_BASE_ 0x60000000 // for 5100S IND + #define _WIZCHIP_IO_BASE_ 0x68000000 // for W5300 +#elif _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_ + #define _WIZCHIP_IO_BASE_ 0x00000000 // for 5100S SPI +#endif + +#ifndef _WIZCHIP_IO_BASE_ +#define _WIZCHIP_IO_BASE_ 0x00000000 // 0x8000 +#endif + +//M20150401 : Typing Error +//#if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS +#if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_ + #ifndef _WIZCHIP_IO_BASE_ + #error "You should be define _WIZCHIP_IO_BASE to fit your system memory map." + #endif +#endif + +#if _WIZCHIP_ >= W5200 + #define _WIZCHIP_SOCK_NUM_ 8 ///< The count of independant socket of @b WIZCHIP +#else + #define _WIZCHIP_SOCK_NUM_ 4 ///< The count of independant socket of @b WIZCHIP +#endif + + +/******************************************************** +* WIZCHIP BASIC IF functions for SPI, SDIO, I2C , ETC. +*********************************************************/ +/** + * @ingroup DATA_TYPE + * @brief The set of callback functions for W5500:@ref WIZCHIP_IO_Functions W5200:@ref WIZCHIP_IO_Functions_W5200 + */ +typedef struct __WIZCHIP +{ + uint16_t if_mode; ///< host interface mode + uint8_t id[7]; ///< @b WIZCHIP ID such as @b 5100, @b 5200, @b 5500, and so on. + /** + * The set of critical section callback func. + */ + struct _CRIS + { + void (*_enter) (void); ///< crtical section enter + void (*_exit) (void); ///< critial section exit + }CRIS; + /** + * The set of @ref \_WIZCHIP_ select control callback func. + */ + struct _CS + { + void (*_select) (void); ///< @ref \_WIZCHIP_ selected + void (*_deselect)(void); ///< @ref \_WIZCHIP_ deselected + }CS; + /** + * The set of interface IO callback func. + */ + union _IF + { + /** + * For BUS interface IO + */ + //M20156501 : Modify the function name for integrating with W5300 + //struct + //{ + // uint8_t (*_read_byte) (uint32_t AddrSel); + // void (*_write_byte) (uint32_t AddrSel, uint8_t wb); + //}BUS; + struct + { + iodata_t (*_read_data) (uint32_t AddrSel); + void (*_write_data) (uint32_t AddrSel, iodata_t wb); + }BUS; + + /** + * For SPI interface IO + */ + struct + { + uint8_t (*_read_byte) (void); + void (*_write_byte) (uint8_t wb); + void (*_read_burst) (uint8_t* pBuf, uint16_t len); + void (*_write_burst) (uint8_t* pBuf, uint16_t len); + }SPI; + // To be added + // + }IF; +}_WIZCHIP; + +extern _WIZCHIP WIZCHIP; + +/** + * @ingroup DATA_TYPE + * WIZCHIP control type enumration used in @ref ctlwizchip(). + */ +typedef enum +{ + CW_RESET_WIZCHIP, ///< Resets WIZCHIP by softly + CW_INIT_WIZCHIP, ///< Initializes to WIZCHIP with SOCKET buffer size 2 or 1 dimension array typed uint8_t. + CW_GET_INTERRUPT, ///< Get Interrupt status of WIZCHIP + CW_CLR_INTERRUPT, ///< Clears interrupt + CW_SET_INTRMASK, ///< Masks interrupt + CW_GET_INTRMASK, ///< Get interrupt mask + CW_SET_INTRTIME, ///< Set interval time between the current and next interrupt. + CW_GET_INTRTIME, ///< Set interval time between the current and next interrupt. + CW_GET_ID, ///< Gets WIZCHIP name. + +//D20150601 : For no modification your application code +//#if _WIZCHIP_ == W5500 + CW_RESET_PHY, ///< Resets internal PHY. Valid Only W5500 + CW_SET_PHYCONF, ///< When PHY configured by internal register, PHY operation mode (Manual/Auto, 10/100, Half/Full). Valid Only W5000 + CW_GET_PHYCONF, ///< Get PHY operation mode in internal register. Valid Only W5500 + CW_GET_PHYSTATUS, ///< Get real PHY status on operating. Valid Only W5500 + CW_SET_PHYPOWMODE, ///< Set PHY power mode as normal and down when PHYSTATUS.OPMD == 1. Valid Only W5500 +//#endif +//D20150601 : For no modification your application code +//#if _WIZCHIP_ == W5200 || _WIZCHIP_ == W5500 + CW_GET_PHYPOWMODE, ///< Get PHY Power mode as down or normal, Valid Only W5100, W5200 + CW_GET_PHYLINK ///< Get PHY Link status, Valid Only W5100, W5200 +//#endif +}ctlwizchip_type; + +/** + * @ingroup DATA_TYPE + * Network control type enumration used in @ref ctlnetwork(). + */ +typedef enum +{ + CN_SET_NETINFO, ///< Set Network with @ref wiz_NetInfo + CN_GET_NETINFO, ///< Get Network with @ref wiz_NetInfo + CN_SET_NETMODE, ///< Set network mode as WOL, PPPoE, Ping Block, and Force ARP mode + CN_GET_NETMODE, ///< Get network mode as WOL, PPPoE, Ping Block, and Force ARP mode + CN_SET_TIMEOUT, ///< Set network timeout as retry count and time. + CN_GET_TIMEOUT, ///< Get network timeout as retry count and time. +}ctlnetwork_type; + +/** + * @ingroup DATA_TYPE + * Interrupt kind when CW_SET_INTRRUPT, CW_GET_INTERRUPT, CW_SET_INTRMASK + * and CW_GET_INTRMASK is used in @ref ctlnetwork(). + * It can be used with OR operation. + */ +typedef enum +{ +#if _WIZCHIP_ == W5500 + IK_WOL = (1 << 4), ///< Wake On Lan by receiving the magic packet. Valid in W500. +#elif _WIZCHIP_ == W5300 + IK_FMTU = (1 << 4), ///< Received a ICMP message (Fragment MTU) +#endif + + IK_PPPOE_TERMINATED = (1 << 5), ///< PPPoE Disconnected + +#if _WIZCHIP_ != W5200 + IK_DEST_UNREACH = (1 << 6), ///< Destination IP & Port Unreachable, No use in W5200 +#endif + + IK_IP_CONFLICT = (1 << 7), ///< IP conflict occurred + + IK_SOCK_0 = (1 << 8), ///< Socket 0 interrupt + IK_SOCK_1 = (1 << 9), ///< Socket 1 interrupt + IK_SOCK_2 = (1 << 10), ///< Socket 2 interrupt + IK_SOCK_3 = (1 << 11), ///< Socket 3 interrupt +#if _WIZCHIP_ > W5100S + IK_SOCK_4 = (1 << 12), ///< Socket 4 interrupt, No use in 5100 + IK_SOCK_5 = (1 << 13), ///< Socket 5 interrupt, No use in 5100 + IK_SOCK_6 = (1 << 14), ///< Socket 6 interrupt, No use in 5100 + IK_SOCK_7 = (1 << 15), ///< Socket 7 interrupt, No use in 5100 +#endif + +#if _WIZCHIP_ > W5100S + IK_SOCK_ALL = (0xFF << 8) ///< All Socket interrupt +#else + IK_SOCK_ALL = (0x0F << 8) ///< All Socket interrupt +#endif +}intr_kind; + +#define PHY_CONFBY_HW 0 ///< Configured PHY operation mode by HW pin +#define PHY_CONFBY_SW 1 ///< Configured PHY operation mode by SW register +#define PHY_MODE_MANUAL 0 ///< Configured PHY operation mode with user setting. +#define PHY_MODE_AUTONEGO 1 ///< Configured PHY operation mode with auto-negotiation +#define PHY_SPEED_10 0 ///< Link Speed 10 +#define PHY_SPEED_100 1 ///< Link Speed 100 +#define PHY_DUPLEX_HALF 0 ///< Link Half-Duplex +#define PHY_DUPLEX_FULL 1 ///< Link Full-Duplex +#define PHY_LINK_OFF 0 ///< Link Off +#define PHY_LINK_ON 1 ///< Link On +#define PHY_POWER_NORM 0 ///< PHY power normal mode +#define PHY_POWER_DOWN 1 ///< PHY power down mode + + +#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5500 +/** + * @ingroup DATA_TYPE + * It configures PHY configuration when CW_SET PHYCONF or CW_GET_PHYCONF in W5500, + * and it indicates the real PHY status configured by HW or SW in all WIZCHIP. \n + * Valid only in W5500. + */ +typedef struct wiz_PhyConf_t +{ + uint8_t by; ///< set by @ref PHY_CONFBY_HW or @ref PHY_CONFBY_SW + uint8_t mode; ///< set by @ref PHY_MODE_MANUAL or @ref PHY_MODE_AUTONEGO + uint8_t speed; ///< set by @ref PHY_SPEED_10 or @ref PHY_SPEED_100 + uint8_t duplex; ///< set by @ref PHY_DUPLEX_HALF @ref PHY_DUPLEX_FULL + //uint8_t power; ///< set by @ref PHY_POWER_NORM or @ref PHY_POWER_DOWN + //uint8_t link; ///< Valid only in CW_GET_PHYSTATUS. set by @ref PHY_LINK_ON or PHY_DUPLEX_OFF + }wiz_PhyConf; +#endif + +/** + * @ingroup DATA_TYPE + * It used in setting dhcp_mode of @ref wiz_NetInfo. + */ +typedef enum +{ + NETINFO_STATIC = 1, ///< Static IP configuration by manually. + NETINFO_DHCP ///< Dynamic IP configruation from a DHCP sever +}dhcp_mode; + +/** + * @ingroup DATA_TYPE + * Network Information for WIZCHIP + */ +typedef struct wiz_NetInfo_t +{ + uint8_t mac[6]; ///< Source Mac Address + uint8_t ip[4]; ///< Source IP Address + uint8_t sn[4]; ///< Subnet Mask + uint8_t gw[4]; ///< Gateway IP Address + uint8_t dns[4]; ///< DNS server IP Address + dhcp_mode dhcp; ///< 1 - Static, 2 - DHCP +}wiz_NetInfo; + +/** + * @ingroup DATA_TYPE + * Network mode + */ +typedef enum +{ +#if _WIZCHIP_ == W5500 + NM_FORCEARP = (1<<1), ///< Force to APP send whenever udp data is sent. Valid only in W5500 +#endif + NM_WAKEONLAN = (1<<5), ///< Wake On Lan + NM_PINGBLOCK = (1<<4), ///< Block ping-request + NM_PPPOE = (1<<3), ///< PPPoE mode +}netmode_type; + +/** + * @ingroup DATA_TYPE + * Used in CN_SET_TIMEOUT or CN_GET_TIMEOUT of @ref ctlwizchip() for timeout configruation. + */ +typedef struct wiz_NetTimeout_t +{ + uint8_t retry_cnt; ///< retry count + uint16_t time_100us; ///< time unit 100us +}wiz_NetTimeout; + +/** + *@brief Registers call back function for critical section of I/O functions such as + *\ref WIZCHIP_READ, @ref WIZCHIP_WRITE, @ref WIZCHIP_READ_BUF and @ref WIZCHIP_WRITE_BUF. + *@param cris_en : callback function for critical section enter. + *@param cris_ex : callback function for critical section exit. + *@todo Describe @ref WIZCHIP_CRITICAL_ENTER and @ref WIZCHIP_CRITICAL_EXIT marco or register your functions. + *@note If you do not describe or register, default functions(@ref wizchip_cris_enter & @ref wizchip_cris_exit) is called. + */ +void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void)); + + +/** + *@brief Registers call back function for WIZCHIP select & deselect. + *@param cs_sel : callback function for WIZCHIP select + *@param cs_desel : callback fucntion for WIZCHIP deselect + *@todo Describe @ref wizchip_cs_select and @ref wizchip_cs_deselect function or register your functions. + *@note If you do not describe or register, null function is called. + */ +void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void)); + +/** + *@brief Registers call back function for bus interface. + *@param bus_rb : callback function to read byte data using system bus + *@param bus_wb : callback function to write byte data using system bus + *@todo Describe @ref wizchip_bus_readbyte and @ref wizchip_bus_writebyte function + *or register your functions. + *@note If you do not describe or register, null function is called. + */ +//M20150601 : For integrating with W5300 +//void reg_wizchip_bus_cbfunc(uint8_t (*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, uint8_t wb)); +void reg_wizchip_bus_cbfunc(iodata_t (*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, iodata_t wb)); + +/** + *@brief Registers call back function for SPI interface. + *@param spi_rb : callback function to read byte using SPI + *@param spi_wb : callback function to write byte using SPI + *@todo Describe \ref wizchip_spi_readbyte and \ref wizchip_spi_writebyte function + *or register your functions. + *@note If you do not describe or register, null function is called. + */ +void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb)); + +/** + *@brief Registers call back function for SPI interface. + *@param spi_rb : callback function to burst read using SPI + *@param spi_wb : callback function to burst write using SPI + *@todo Describe \ref wizchip_spi_readbyte and \ref wizchip_spi_writebyte function + *or register your functions. + *@note If you do not describe or register, null function is called. + */ +void reg_wizchip_spiburst_cbfunc(void (*spi_rb)(uint8_t* pBuf, uint16_t len), void (*spi_wb)(uint8_t* pBuf, uint16_t len)); + +/** + * @ingroup extra_functions + * @brief Controls to the WIZCHIP. + * @details Resets WIZCHIP & internal PHY, Configures PHY mode, Monitor PHY(Link,Speed,Half/Full/Auto), + * controls interrupt & mask and so on. + * @param cwtype : Decides to the control type + * @param arg : arg type is dependent on cwtype. + * @return 0 : Success \n + * -1 : Fail because of invalid \ref ctlwizchip_type or unsupported \ref ctlwizchip_type in WIZCHIP + */ +int8_t ctlwizchip(ctlwizchip_type cwtype, void* arg); + +/** + * @ingroup extra_functions + * @brief Controls to network. + * @details Controls to network environment, mode, timeout and so on. + * @param cntype : Input. Decides to the control type + * @param arg : Inout. arg type is dependent on cntype. + * @return -1 : Fail because of invalid \ref ctlnetwork_type or unsupported \ref ctlnetwork_type in WIZCHIP \n + * 0 : Success + */ +int8_t ctlnetwork(ctlnetwork_type cntype, void* arg); + + +/* + * The following functions are implemented for internal use. + * but You can call these functions for code size reduction instead of ctlwizchip() and ctlnetwork(). + */ + +/** + * @ingroup extra_functions + * @brief Reset WIZCHIP by softly. + */ +void wizchip_sw_reset(void); + +/** + * @ingroup extra_functions + * @brief Initializes WIZCHIP with socket buffer size + * @param txsize Socket tx buffer sizes. If null, initialized the default size 2KB. + * @param rxsize Socket rx buffer sizes. If null, initialized the default size 2KB. + * @return 0 : succcess \n + * -1 : fail. Invalid buffer size + */ +int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize); + +/** + * @ingroup extra_functions + * @brief Clear Interrupt of WIZCHIP. + * @param intr : @ref intr_kind value operated OR. It can type-cast to uint16_t. + */ +void wizchip_clrinterrupt(intr_kind intr); + +/** + * @ingroup extra_functions + * @brief Get Interrupt of WIZCHIP. + * @return @ref intr_kind value operated OR. It can type-cast to uint16_t. + */ +intr_kind wizchip_getinterrupt(void); + +/** + * @ingroup extra_functions + * @brief Mask or Unmask Interrupt of WIZCHIP. + * @param intr : @ref intr_kind value operated OR. It can type-cast to uint16_t. + */ +void wizchip_setinterruptmask(intr_kind intr); + +/** + * @ingroup extra_functions + * @brief Get Interrupt mask of WIZCHIP. + * @return : The operated OR vaule of @ref intr_kind. It can type-cast to uint16_t. + */ +intr_kind wizchip_getinterruptmask(void); + +//todo +#if _WIZCHIP_ > W5100 + int8_t wizphy_getphylink(void); ///< get the link status of phy in WIZCHIP. No use in W5100 + int8_t wizphy_getphypmode(void); ///< get the power mode of PHY in WIZCHIP. No use in W5100 +#endif + +#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5500 + void wizphy_reset(void); ///< Reset phy. Vailid only in W5500 +/** + * @ingroup extra_functions + * @brief Set the phy information for WIZCHIP without power mode + * @param phyconf : @ref wiz_PhyConf + */ + void wizphy_setphyconf(wiz_PhyConf* phyconf); + /** + * @ingroup extra_functions + * @brief Get phy configuration information. + * @param phyconf : @ref wiz_PhyConf + */ + void wizphy_getphyconf(wiz_PhyConf* phyconf); + /** + * @ingroup extra_functions + * @brief Get phy status. + * @param phyconf : @ref wiz_PhyConf + */ + void wizphy_getphystat(wiz_PhyConf* phyconf); + /** + * @ingroup extra_functions + * @brief set the power mode of phy inside WIZCHIP. Refer to @ref PHYCFGR in W5500, @ref PHYSTATUS in W5200 + * @param pmode Settig value of power down mode. + */ + int8_t wizphy_setphypmode(uint8_t pmode); +#endif + +/** +* @ingroup extra_functions + * @brief Set the network information for WIZCHIP + * @param pnetinfo : @ref wizNetInfo + */ +void wizchip_setnetinfo(wiz_NetInfo* pnetinfo); + +/** + * @ingroup extra_functions + * @brief Get the network information for WIZCHIP + * @param pnetinfo : @ref wizNetInfo + */ +void wizchip_getnetinfo(wiz_NetInfo* pnetinfo); + +/** + * @ingroup extra_functions + * @brief Set the network mode such WOL, PPPoE, Ping Block, and etc. + * @param pnetinfo Value of network mode. Refer to @ref netmode_type. + */ +int8_t wizchip_setnetmode(netmode_type netmode); + +/** + * @ingroup extra_functions + * @brief Get the network mode such WOL, PPPoE, Ping Block, and etc. + * @return Value of network mode. Refer to @ref netmode_type. + */ +netmode_type wizchip_getnetmode(void); + +/** + * @ingroup extra_functions + * @brief Set retry time value(@ref _RTR_) and retry count(@ref _RCR_). + * @details @ref _RTR_ configures the retransmission timeout period and @ref _RCR_ configures the number of time of retransmission. + * @param nettime @ref _RTR_ value and @ref _RCR_ value. Refer to @ref wiz_NetTimeout. + */ +void wizchip_settimeout(wiz_NetTimeout* nettime); + +/** + * @ingroup extra_functions + * @brief Get retry time value(@ref _RTR_) and retry count(@ref _RCR_). + * @details @ref _RTR_ configures the retransmission timeout period and @ref _RCR_ configures the number of time of retransmission. + * @param nettime @ref _RTR_ value and @ref _RCR_ value. Refer to @ref wiz_NetTimeout. + */ +void wizchip_gettimeout(wiz_NetTimeout* nettime); +#ifdef __cplusplus + } +#endif + +#endif // _WIZCHIP_CONF_H_ diff --git a/Internet/MQTT/MQTTClient.c b/Internet/MQTT/MQTTClient.c new file mode 100644 index 0000000..f28286e --- /dev/null +++ b/Internet/MQTT/MQTTClient.c @@ -0,0 +1,538 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Allan Stockdill-Mander/Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ +#include "MQTTClient.h" +//#include + + +void NewMessageData(MessageData* md, MQTTString* aTopicName, MQTTMessage* aMessgage) +{ + md->topicName = aTopicName; + md->message = aMessgage; +} + +int32_t getNextPacketId(Client *c) +{ + return c->next_packetid = (c->next_packetid == MAX_PACKET_ID) ? 1 : c->next_packetid + 1; +} + +int32_t sendPacket(Client* c, int32_t length, Timer* timer) +{ + int32_t rc = FAILURE, sent = 0; + + while (sent < length && !expired(timer)) + { + rc = c->ipstack->mqttwrite(c->ipstack, &c->buf[sent], length, left_ms(timer)); + + if (rc < 0) // there was an error writing the data + break; + + sent += rc; + } + + if (sent == length) + { + countdown(&c->ping_timer, c->keepAliveInterval); // record the fact that we have SUCCESSSfully sent the packet + rc = SUCCESSS; + } + else + rc = FAILURE; + + return rc; +} + + +void MQTTClient(Client* c, Network* network, uint32_t command_timeout_ms, uint8_t* buf, size_t buf_size, uint8_t* readbuf, size_t readbuf_size) +{ + c->ipstack = network; + + for (int32_t i = 0; i < MAX_MESSAGE_HANDLERS; ++i) + c->messageHandlers[i].topicFilter = 0; + + c->command_timeout_ms = command_timeout_ms; + c->buf = buf; + c->buf_size = buf_size; + c->readbuf = readbuf; + c->readbuf_size = readbuf_size; + c->isconnected = 0; + c->ping_outstanding = 0; + c->defaultMessageHandler = NULL; + + InitTimer(&c->ping_timer); +} + + +int32_t decodePacket(Client* c, int32_t* value, int32_t timeout) +{ + uint8_t i; + int32_t multiplier = 1; + int32_t len = 0; + const int MAX_NO_OF_REMAINING_LENGTH_BYTES = 4; + + *value = 0; + do + { + int32_t rc = MQTTPACKET_READ_ERROR; + + if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) + { + rc = MQTTPACKET_READ_ERROR; /* bad data */ + goto exit; + } + + rc = c->ipstack->mqttread(c->ipstack, &i, 1, timeout); + + if (rc != 1) + goto exit; + + *value += (i & 127) * multiplier; + multiplier *= 128; + } while ((i & 128) != 0); +exit: + return len; +} + +int32_t readPacket(Client* c, Timer* timer) +{ + int32_t rc = FAILURE; + MQTTHeader header = {0}; + int32_t len = 0; + int32_t rem_len = 0; + + /* 1. read the header byte. This has the packet type in it */ + if (c->ipstack->mqttread(c->ipstack, c->readbuf, 1, left_ms(timer)) != 1) + goto exit; + + len = 1; + /* 2. read the remaining length. This is variable in itself */ + decodePacket(c, &rem_len, left_ms(timer)); + len += MQTTPacket_encode(c->readbuf + 1, rem_len); /* put the original remaining length back into the buffer */ + + /* 3. read the rest of the buffer using a callback to supply the rest of the data */ + if (rem_len > 0 && (c->ipstack->mqttread(c->ipstack, c->readbuf + len, rem_len, left_ms(timer)) != rem_len)) + goto exit; + + header.byte = c->readbuf[0]; + rc = header.bits.type; +exit: + return rc; +} + +// assume topic filter and name is in correct format +// # can only be at end +// + and # can only be next to separator +char isTopicMatched(char* topicFilter, MQTTString* topicName) +{ + char* curf = topicFilter; + char* curn = topicName->lenstring.data; + char* curn_end = curn + topicName->lenstring.len; + + while (*curf && curn < curn_end) + { + if (*curn == '/' && *curf != '/') + break; + + if (*curf != '+' && *curf != '#' && *curf != *curn) + break; + + if (*curf == '+') + { // skip until we meet the next separator, or end of string + char* nextpos = curn + 1; + + while (nextpos < curn_end && *nextpos != '/') + nextpos = ++curn + 1; + } + else if (*curf == '#') + curn = curn_end - 1; // skip until end of string + + curf++; + curn++; + } + + return (curn == curn_end) && (*curf == '\0'); +} + +int32_t deliverMessage(Client* c, MQTTString* topicName, MQTTMessage* message) +{ + int32_t rc = FAILURE; + + // we have to find the right message handler - indexed by topic + for (int32_t i = 0; i < MAX_MESSAGE_HANDLERS; ++i) + { + if (c->messageHandlers[i].topicFilter != 0 && (MQTTPacket_equals(topicName, (char*)c->messageHandlers[i].topicFilter) || + isTopicMatched((char*)c->messageHandlers[i].topicFilter, topicName))) + { + if (c->messageHandlers[i].fp != NULL) + { + MessageData md; + NewMessageData(&md, topicName, message); + c->messageHandlers[i].fp(&md); + rc = SUCCESSS; + } + } + } + + if (rc == FAILURE && c->defaultMessageHandler != NULL) + { + MessageData md; + NewMessageData(&md, topicName, message); + c->defaultMessageHandler(&md); + rc = SUCCESSS; + } + + return rc; +} + +int32_t keepalive(Client* c) +{ + int32_t rc = FAILURE; + + if (c->keepAliveInterval == 0) + { + rc = SUCCESSS; + goto exit; + } + + if (expired(&c->ping_timer)) + { + if (!c->ping_outstanding) + { + Timer timer; + InitTimer(&timer); + countdown_ms(&timer, 1000); + int32_t len = MQTTSerialize_pingreq(c->buf, c->buf_size); + + if (len > 0 && (rc = sendPacket(c, len, &timer)) == SUCCESSS) // send the ping packet + c->ping_outstanding = 1; + } + } + +exit: + return rc; +} + +int32_t cycle(Client* c, Timer* timer) +{ + // read the socket, see what work is due + uint16_t packet_type = readPacket(c, timer); + + int32_t len = 0, rc = SUCCESSS; + + switch (packet_type) + { + case CONNACK: + case PUBACK: + case SUBACK: + break; + case PUBLISH: + { + MQTTString topicName; + MQTTMessage msg; + + if (MQTTDeserialize_publish((uint8_t*)&msg.dup, (uint8_t*)&msg.qos, (uint8_t*)&msg.retained, (uint16_t*)&msg.id, &topicName, + (uint8_t**)&msg.payload, (int32_t*)&msg.payloadlen, c->readbuf, c->readbuf_size) != 1) + goto exit; + + deliverMessage(c, &topicName, &msg); + + if (msg.qos != QOS0) + { + if (msg.qos == QOS1) + len = MQTTSerialize_ack(c->buf, c->buf_size, PUBACK, 0, msg.id); + else if (msg.qos == QOS2) + len = MQTTSerialize_ack(c->buf, c->buf_size, PUBREC, 0, msg.id); + + if (len <= 0) + rc = FAILURE; + else + rc = sendPacket(c, len, timer); + + if (rc == FAILURE) + goto exit; // there was a problem + } + break; + } + case PUBREC: + { + uint16_t mypacketid; + uint8_t dup, type; + + if (MQTTDeserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) + rc = FAILURE; + else if ((len = MQTTSerialize_ack(c->buf, c->buf_size, PUBREL, 0, mypacketid)) <= 0) + rc = FAILURE; + else if ((rc = sendPacket(c, len, timer)) != SUCCESSS) // send the PUBREL packet + rc = FAILURE; // there was a problem + + if (rc == FAILURE) + goto exit; // there was a problem + + break; + } + case PUBCOMP: + break; + case PINGRESP: + c->ping_outstanding = 0; + break; + } + keepalive(c); +exit: + if (rc == SUCCESSS) + rc = packet_type; + + return rc; +} + +int32_t MQTTYield(Client* c, int32_t timeout_ms) +{ + int32_t rc = SUCCESSS; + Timer timer; + + InitTimer(&timer); + countdown_ms(&timer, timeout_ms); + + while (!expired(&timer)) + { + if (cycle(c, &timer) == FAILURE) + { + rc = FAILURE; + break; + } + } + + return rc; +} + +// only used in single-threaded mode where one command at a time is in process +int32_t waitfor(Client* c, int32_t packet_type, Timer* timer) +{ + int32_t rc = FAILURE; + + do + { + if (expired(timer)) + break; // we timed out + } + while ((rc = cycle(c, timer)) != packet_type); + + return rc; +} + +int32_t MQTTConnect(Client* c, MQTTPacket_connectData* options) +{ + Timer connect_timer; + int32_t rc = FAILURE; + MQTTPacket_connectData default_options = MQTTPacket_connectData_initializer; + int32_t len = 0; + + InitTimer(&connect_timer); + countdown_ms(&connect_timer, c->command_timeout_ms); + + if (c->isconnected) // don't send connect packet again if we are already connected + goto exit; + + if (options == 0) + options = &default_options; // set default options if none were supplied + + c->keepAliveInterval = options->keepAliveInterval; + countdown(&c->ping_timer, c->keepAliveInterval); + + if ((len = MQTTSerialize_connect(c->buf, c->buf_size, options)) <= 0) + goto exit; + + if ((rc = sendPacket(c, len, &connect_timer)) != SUCCESSS) // send the connect packet + goto exit; // there was a problem + + // this will be a blocking call, wait for the connack + if (waitfor(c, CONNACK, &connect_timer) == CONNACK) + { + uint8_t connack_rc = 255; + int8_t sessionPresent = 0; + + if (MQTTDeserialize_connack((uint8_t*)&sessionPresent, &connack_rc, c->readbuf, c->readbuf_size) == 1) + rc = connack_rc; + else + rc = FAILURE; + } + else + rc = FAILURE; + +exit: + if (rc == SUCCESSS) + c->isconnected = 1; + + return rc; +} + + +int32_t MQTTSubscribe(Client* c, const char* topicFilter, enum QoS qos, messageHandler messageHandler) +{ + int32_t rc = FAILURE; + Timer timer; + int32_t len = 0; + MQTTString topic = MQTTString_initializer; + topic.cstring = (char *)topicFilter; + + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); + + if (!c->isconnected) + goto exit; + + len = MQTTSerialize_subscribe(c->buf, c->buf_size, 0, getNextPacketId(c), 1, &topic, (int32_t*)&qos); + + if (len <= 0) + goto exit; + + if ((rc = sendPacket(c, len, &timer)) != SUCCESSS) // send the subscribe packet + goto exit; // there was a problem + + if (waitfor(c, SUBACK, &timer) == SUBACK) // wait for suback + { + int32_t count = 0, grantedQoS = -1; + uint16_t mypacketid; + + if (MQTTDeserialize_suback(&mypacketid, 1, &count, &grantedQoS, c->readbuf, c->readbuf_size) == 1) + rc = grantedQoS; // 0, 1, 2 or 0x80 + + if (rc != 0x80) + { + for (int32_t i = 0; i < MAX_MESSAGE_HANDLERS; ++i) + { + if (c->messageHandlers[i].topicFilter == 0) + { + c->messageHandlers[i].topicFilter = topicFilter; + c->messageHandlers[i].fp = messageHandler; + rc = 0; + break; + } + } + } + } + else + rc = FAILURE; + +exit: + return rc; +} + +int32_t MQTTUnsubscribe(Client* c, const char* topicFilter) +{ + int32_t rc = FAILURE; + Timer timer; + MQTTString topic = MQTTString_initializer; + topic.cstring = (char *)topicFilter; + int32_t len = 0; + + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); + + if (!c->isconnected) + goto exit; + + if ((len = MQTTSerialize_unsubscribe(c->buf, c->buf_size, 0, getNextPacketId(c), 1, &topic)) <= 0) + goto exit; + + if ((rc = sendPacket(c, len, &timer)) != SUCCESSS) // send the subscribe packet + goto exit; // there was a problem + + if (waitfor(c, UNSUBACK, &timer) == UNSUBACK) + { + uint16_t mypacketid; // should be the same as the packetid above + + if (MQTTDeserialize_unsuback(&mypacketid, c->readbuf, c->readbuf_size) == 1) + rc = 0; + } + else + rc = FAILURE; + +exit: + return rc; +} + +int32_t MQTTPublish(Client* c, const char* topicName, MQTTMessage* message) +{ + int32_t rc = FAILURE; + Timer timer; + MQTTString topic = MQTTString_initializer; + topic.cstring = (char *)topicName; + int32_t len = 0; + + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); + + if (!c->isconnected) + goto exit; + + if (message->qos == QOS1 || message->qos == QOS2) + message->id = getNextPacketId(c); + + len = MQTTSerialize_publish(c->buf, c->buf_size, 0, message->qos, message->retained, message->id, + topic, (uint8_t*)message->payload, message->payloadlen); + + if (len <= 0) + goto exit; + + if ((rc = sendPacket(c, len, &timer)) != SUCCESSS) // send the subscribe packet + goto exit; // there was a problem + + if (message->qos == QOS1) + { + if (waitfor(c, PUBACK, &timer) == PUBACK) + { + uint16_t mypacketid; + uint8_t dup, type; + + if (MQTTDeserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) + rc = FAILURE; + } + else + rc = FAILURE; + } + else if (message->qos == QOS2) + { + if (waitfor(c, PUBCOMP, &timer) == PUBCOMP) + { + uint16_t mypacketid; + uint8_t dup, type; + + if (MQTTDeserialize_ack(&type, &dup, &mypacketid, c->readbuf, c->readbuf_size) != 1) + rc = FAILURE; + } + else + rc = FAILURE; + } + +exit: + return rc; +} + + +int32_t MQTTDisconnect(Client* c) +{ + int32_t rc = FAILURE; + Timer timer; // we might wait for incomplete incoming publishes to complete + int32_t len = MQTTSerialize_disconnect(c->buf, c->buf_size); + + InitTimer(&timer); + countdown_ms(&timer, c->command_timeout_ms); + + if (len > 0) + rc = sendPacket(c, len, &timer); // send the disconnect packet + + c->isconnected = 0; + return rc; +} + diff --git a/Internet/MQTT/MQTTClient.h b/Internet/MQTT/MQTTClient.h new file mode 100644 index 0000000..3b0ed88 --- /dev/null +++ b/Internet/MQTT/MQTTClient.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Allan Stockdill-Mander/Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#ifndef __MQTT_CLIENT_C_ +#define __MQTT_CLIENT_C_ + +#include "MQTTPacket.h" +#include "mqtt_interface.h" //Platform specific implementation header file +#include "stdio.h" + +#define MAX_PACKET_ID 65535 +#define MAX_MESSAGE_HANDLERS 5 + +enum QoS +{ + QOS0, + QOS1, + QOS2 +}; + +// all failure return codes must be negative +enum returnCode +{ + BUFFER_OVERFLOW = -2, + FAILURE = -1, + SUCCESSS = 0 +}; + +void NewTimer(Timer*); + +typedef struct MQTTMessage MQTTMessage; + +typedef struct MessageData MessageData; + +struct MQTTMessage +{ + enum QoS qos; + char retained; + char dup; + uint16_t id; + void *payload; + size_t payloadlen; +}; + +struct MessageData +{ + MQTTMessage* message; + MQTTString* topicName; +}; + +typedef void (*messageHandler)(MessageData*); + +typedef struct Client Client; + +int32_t MQTTConnect (Client*, MQTTPacket_connectData*); +int32_t MQTTPublish (Client*, const char*, MQTTMessage*); +int32_t MQTTSubscribe (Client*, const char*, enum QoS, messageHandler); +int32_t MQTTUnsubscribe (Client*, const char*); +int32_t MQTTDisconnect (Client*); +int32_t MQTTYield (Client*, int32_t); + +void setDefaultMessageHandler(Client*, messageHandler); + +void MQTTClient(Client*, Network*, uint32_t, unsigned char*, size_t, unsigned char*, size_t); + +struct Client +{ + uint32_t next_packetid; + uint32_t command_timeout_ms; + size_t buf_size, readbuf_size; + uint8_t *buf; + uint8_t *readbuf; + uint32_t keepAliveInterval; + int8_t ping_outstanding; + int32_t isconnected; + + struct MessageHandlers + { + const char* topicFilter; + void (*fp) (MessageData*); + } messageHandlers[MAX_MESSAGE_HANDLERS]; // Message handlers are indexed by subscription topic + + void (*defaultMessageHandler) (MessageData*); + + Network* ipstack; + Timer ping_timer; +}; + +#define DefaultClient {0, 0, 0, 0, NULL, NULL, 0, 0, 0} + +#endif diff --git a/Internet/MQTT/MQTTPacket/src/MQTTConnect.h b/Internet/MQTT/MQTTPacket/src/MQTTConnect.h new file mode 100644 index 0000000..0902137 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTConnect.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTCONNECT_H_ +#define MQTTCONNECT_H_ + +#include + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + + +typedef union +{ + uint8_t all; /**< all connect flags */ +#if defined(REVERSED) + struct + { + uint8_t username : 1; /**< 3.1 user name */ + uint8_t password : 1; /**< 3.1 password */ + uint8_t willRetain : 1; /**< will retain setting */ + uint8_t willQoS : 2; /**< will QoS value */ + uint8_t will : 1; /**< will flag */ + uint8_t cleansession: 1; /**< clean session flag */ + uint8_t : 1; /**< unused */ + } bits; +#else + struct + { + uint8_t : 1; /**< unused */ + uint8_t cleansession: 1; /**< cleansession flag */ + uint8_t will : 1; /**< will flag */ + uint8_t willQoS : 2; /**< will QoS value */ + uint8_t willRetain : 1; /**< will retain setting */ + uint8_t password : 1; /**< 3.1 password */ + uint8_t username : 1; /**< 3.1 user name */ + } bits; +#endif +} MQTTConnectFlags; /**< connect flags byte */ + + + +/** Defines the MQTT "Last Will and Testament" (LWT) settings for the connect packet. */ +typedef struct +{ + /** The eyecatcher for this structure. must be MQTW. */ + int8_t struct_id[4]; + /** The version number of this structure. Must be 0 */ + int16_t struct_version; + /** The LWT topic to which the LWT message will be published. */ + MQTTString topicName; + /** The LWT payload. */ + MQTTString message; + /** The retained flag for the LWT message (see MQTTAsync_message.retained). */ + uint8_t retained; + /** The quality of service setting for the LWT message (see MQTTAsync_message.qos and @ref qos). */ + int8_t qos; +} MQTTPacket_willOptions; + + +#define MQTTPacket_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 0, {NULL, {0, NULL}}, {NULL, {0, NULL}}, 0, 0 } + + +typedef struct +{ + /** The eyecatcher for this structure. must be MQTC. */ + int8_t struct_id[4]; + /** The version number of this structure. Must be 0 */ + uint16_t struct_version; + /** Version of MQTT to be used. 3 = 3.1 4 = 3.1.1 */ + uint8_t MQTTVersion; + MQTTString clientID; + uint16_t keepAliveInterval; + uint8_t cleansession; + uint8_t willFlag; + MQTTPacket_willOptions will; + MQTTString username; + MQTTString password; +} MQTTPacket_connectData; + +typedef union +{ + unsigned char all; /**< all connack flags */ +#if defined(REVERSED) + struct + { + uint8_t sessionpresent : 1; /**< session present flag */ + uint8_t : 7; /**< unused */ + } bits; +#else + struct + { + uint8_t : 7; /**< unused */ + uint8_t sessionpresent : 1; /**< session present flag */ + } bits; +#endif +} MQTTConnackFlags; /**< connack flags byte */ + +#define MQTTPacket_connectData_initializer { {'M', 'Q', 'T', 'C'}, 0, 4, {NULL, {0, NULL}}, 60, 1, 0, \ + MQTTPacket_willOptions_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} } + +DLLExport int32_t MQTTSerialize_connect(uint8_t* buf, int32_t buflen, MQTTPacket_connectData* options); +DLLExport int32_t MQTTDeserialize_connect(MQTTPacket_connectData* data, uint8_t* buf, int32_t len); + +DLLExport int32_t MQTTSerialize_connack(uint8_t* buf, int32_t buflen, uint8_t connack_rc, uint8_t sessionPresent); +DLLExport int32_t MQTTDeserialize_connack(uint8_t* sessionPresent, uint8_t* connack_rc, uint8_t* buf, int32_t buflen); + +DLLExport int32_t MQTTSerialize_disconnect(uint8_t* buf, int32_t buflen); +DLLExport int32_t MQTTSerialize_pingreq(uint8_t* buf, int32_t buflen); + +#endif /* MQTTCONNECT_H_ */ diff --git a/Internet/MQTT/MQTTPacket/src/MQTTConnectClient.c b/Internet/MQTT/MQTTPacket/src/MQTTConnectClient.c new file mode 100644 index 0000000..178e01e --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTConnectClient.c @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + +/** + * Determines the length of the MQTT connect packet that would be produced using the supplied connect options. + * @param options the options to be used to build the connect packet + * @return the length of buffer needed to contain the serialized version of the packet + */ +int32_t MQTTSerialize_connectLength(MQTTPacket_connectData* options) +{ + int32_t len = 0; + + FUNC_ENTRY; + + if (options->MQTTVersion == 3) + len = 12; /* variable depending on MQTT or MQIsdp */ + else if (options->MQTTVersion == 4) + len = 10; + + len += MQTTstrlen(options->clientID) + 2; + if (options->willFlag) + len += MQTTstrlen(options->will.topicName) + 2 + MQTTstrlen(options->will.message) + 2; + if (options->username.cstring || options->username.lenstring.data) + len += MQTTstrlen(options->username)+2; + if (options->password.cstring || options->password.lenstring.data) + len += MQTTstrlen(options->password)+2; + + FUNC_EXIT_RC(len); + return len; +} + + +/** + * Serializes the connect options into the buffer. + * @param buf the buffer into which the packet will be serialized + * @param len the length in bytes of the supplied buffer + * @param options the options to be used to build the connect packet + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_connect(uint8_t* buf, int32_t buflen, MQTTPacket_connectData* options) +{ + uint8_t *ptr = buf; + MQTTHeader header = {0}; + MQTTConnectFlags flags = {0}; + int32_t len = 0; + int32_t rc = -1; + + FUNC_ENTRY; + if (MQTTPacket_len(len = MQTTSerialize_connectLength(options)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = CONNECT; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, len); /* write remaining length */ + + if (options->MQTTVersion == 4) + { + writeCString(&ptr, "MQTT"); + writeChar(&ptr, (char) 4); + } + else + { + writeCString(&ptr, "MQIsdp"); + writeChar(&ptr, (char) 3); + } + + flags.all = 0; + flags.bits.cleansession = options->cleansession; + flags.bits.will = (options->willFlag) ? 1 : 0; + + if (flags.bits.will) + { + flags.bits.willQoS = options->will.qos; + flags.bits.willRetain = options->will.retained; + } + + if (options->username.cstring || options->username.lenstring.data) + flags.bits.username = 1; + if (options->password.cstring || options->password.lenstring.data) + flags.bits.password = 1; + + writeChar(&ptr, flags.all); + writeInt(&ptr, options->keepAliveInterval); + writeMQTTString(&ptr, options->clientID); + + if (options->willFlag) + { + writeMQTTString(&ptr, options->will.topicName); + writeMQTTString(&ptr, options->will.message); + } + + if (flags.bits.username) + writeMQTTString(&ptr, options->username); + if (flags.bits.password) + writeMQTTString(&ptr, options->password); + + rc = ptr - buf; + + exit: FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into connack data - return code + * @param sessionPresent the session present flag returned (only for MQTT 3.1.1) + * @param connack_rc returned integer value of the connack return code + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param len the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int32_t MQTTDeserialize_connack(uint8_t* sessionPresent, uint8_t* connack_rc, uint8_t* buf, int32_t buflen) +{ + MQTTHeader header = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = NULL; + int32_t rc = 0; + int32_t mylen; + MQTTConnackFlags flags = {0}; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != CONNACK) + goto exit; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + if (enddata - curdata < 2) + goto exit; + + flags.all = readChar(&curdata); + *sessionPresent = flags.bits.sessionpresent; + *connack_rc = readChar(&curdata); + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes a 0-length packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer, to avoid overruns + * @param packettype the message type + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_zero(uint8_t* buf, int32_t buflen, uint8_t packettype) +{ + MQTTHeader header = {0}; + int32_t rc = -1; + uint8_t *ptr = buf; + + FUNC_ENTRY; + if (buflen < 2) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + header.byte = 0; + header.bits.type = packettype; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 0); /* write remaining length */ + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer, to avoid overruns + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_disconnect(uint8_t* buf, int32_t buflen) +{ + return MQTTSerialize_zero(buf, buflen, DISCONNECT); +} + + +/** + * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer, to avoid overruns + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_pingreq(uint8_t* buf, int32_t buflen) +{ + return MQTTSerialize_zero(buf, buflen, PINGREQ); +} diff --git a/Internet/MQTT/MQTTPacket/src/MQTTConnectServer.c b/Internet/MQTT/MQTTPacket/src/MQTTConnectServer.c new file mode 100644 index 0000000..c4a0edb --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTConnectServer.c @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" +#include + +#define min(a, b) ((a < b) ? a : b) + + +/** + * Validates MQTT protocol name and version combinations + * @param protocol the MQTT protocol name as an MQTTString + * @param version the MQTT protocol version number, as in the connect packet + * @return correct MQTT combination? 1 is true, 0 is false + */ +int32_t MQTTPacket_checkVersion(MQTTString* protocol, int32_t version) +{ + int32_t rc = 0; + + if (version == 3 && memcmp(protocol->lenstring.data, "MQIsdp", min(6, protocol->lenstring.len)) == 0) + rc = 1; + else if (version == 4 && memcmp(protocol->lenstring.data, "MQTT", min(4, protocol->lenstring.len)) == 0) + rc = 1; + + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into connect data structure + * @param data the connect data structure to be filled out + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param len the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int32_t MQTTDeserialize_connect(MQTTPacket_connectData* data, uint8_t* buf, int32_t len) +{ + MQTTHeader header = {0}; + MQTTConnectFlags flags = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = &buf[len]; + int32_t rc = 0; + MQTTString Protocol; + int32_t version; + int32_t mylen = 0; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + if (header.bits.type != CONNECT) + goto exit; + + curdata += MQTTPacket_decodeBuf(curdata, &mylen); /* read remaining length */ + + /* do we have enough data to read the protocol version byte? */ + if (!readMQTTLenString(&Protocol, &curdata, enddata) || enddata - curdata < 0) + goto exit; + + version = (int)readChar(&curdata); /* Protocol version */ + + /* If we don't recognize the protocol version, we don't parse the connect packet on the + * basis that we don't know what the format will be. */ + if (MQTTPacket_checkVersion(&Protocol, version)) + { + flags.all = readChar(&curdata); + data->cleansession = flags.bits.cleansession; + data->keepAliveInterval = readInt(&curdata); + + if (!readMQTTLenString(&data->clientID, &curdata, enddata)) + goto exit; + + data->willFlag = flags.bits.will; + if (flags.bits.will) + { + data->will.qos = flags.bits.willQoS; + data->will.retained = flags.bits.willRetain; + + if (!readMQTTLenString(&data->will.topicName, &curdata, enddata) || + !readMQTTLenString(&data->will.message, &curdata, enddata)) + goto exit; + } + + if (flags.bits.username) + { + if (enddata - curdata < 3 || !readMQTTLenString(&data->username, &curdata, enddata)) + goto exit; /* username flag set, but no username supplied - invalid */ + if (flags.bits.password && + (enddata - curdata < 3 || !readMQTTLenString(&data->password, &curdata, enddata))) + goto exit; /* password flag set, but no password supplied - invalid */ + } + else if (flags.bits.password) + goto exit; /* password flag set without username - invalid */ + + rc = 1; + } +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes the connack packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param connack_rc the integer connack return code to be used + * @param sessionPresent the MQTT 3.1.1 sessionPresent flag + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_connack(uint8_t* buf, int32_t buflen, uint8_t connack_rc, uint8_t sessionPresent) +{ + MQTTHeader header = {0}; + int32_t rc = 0; + uint8_t *ptr = buf; + MQTTConnackFlags flags = {0}; + + FUNC_ENTRY; + if (buflen < 2) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = CONNACK; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ + + flags.all = 0; + flags.bits.sessionpresent = sessionPresent; + writeChar(&ptr, flags.all); + writeChar(&ptr, connack_rc); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTDeserializePublish.c b/Internet/MQTT/MQTTPacket/src/MQTTDeserializePublish.c new file mode 100644 index 0000000..8d3445e --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTDeserializePublish.c @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" +#include + +#define min(a, b) ((a < b) ? 1 : 0) + +/** + * Deserializes the supplied (wire) buffer into publish data + * @param dup returned integer - the MQTT dup flag + * @param qos returned integer - the MQTT QoS value + * @param retained returned integer - the MQTT retained flag + * @param packetid returned integer - the MQTT packet identifier + * @param topicName returned MQTTString - the MQTT topic in the publish + * @param payload returned byte buffer - the MQTT publish payload + * @param payloadlen returned integer - the length of the MQTT payload + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success + */ +int32_t MQTTDeserialize_publish(uint8_t* dup, uint8_t* qos, uint8_t* retained, uint16_t* packetid, MQTTString* topicName, + uint8_t** payload, int32_t* payloadlen, uint8_t* buf, int32_t buflen) +{ + MQTTHeader header = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = NULL; + int32_t rc = 0; + int32_t mylen = 0; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + + if (header.bits.type != PUBLISH) + goto exit; + + *dup = header.bits.dup; + *qos = header.bits.qos; + *retained = header.bits.retain; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + /* do we have enough data to read the protocol version byte? */ + if (!readMQTTLenString(topicName, &curdata, enddata) || enddata - curdata < 0) + goto exit; + + if (*qos > 0) + *packetid = readInt(&curdata); + + *payloadlen = enddata - curdata; + *payload = curdata; + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into an ack + * @param packettype returned integer - the MQTT packet type + * @param dup returned integer - the MQTT dup flag + * @param packetid returned integer - the MQTT packet identifier + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int32_t MQTTDeserialize_ack(uint8_t* packettype, uint8_t* dup, uint16_t* packetid, uint8_t* buf, int32_t buflen) +{ + MQTTHeader header = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = NULL; + int32_t rc = 0; + int32_t mylen; + + FUNC_ENTRY; + header.byte = readChar(&curdata); + *dup = header.bits.dup; + *packettype = header.bits.type; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + if (enddata - curdata < 2) + goto exit; + + *packetid = readInt(&curdata); + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTFormat.c b/Internet/MQTT/MQTTPacket/src/MQTTFormat.c new file mode 100644 index 0000000..40a56d4 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTFormat.c @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" + +#include + + +const char* MQTTPacket_names[] = +{ + "RESERVED", "CONNECT", "CONNACK", "PUBLISH", "PUBACK", "PUBREC", "PUBREL", + "PUBCOMP", "SUBSCRIBE", "SUBACK", "UNSUBSCRIBE", "UNSUBACK", "PINGREQ", + "PINGRESP", "DISCONNECT" +}; + + +const char* MQTTPacket_getName(uint16_t packetid) +{ + return MQTTPacket_names[packetid]; +} + + +int32_t MQTTStringFormat_connect(char* strbuf, int32_t strbuflen, MQTTPacket_connectData* data) +{ + int32_t strindex = 0; + + strindex = snprintf(strbuf, strbuflen, + "CONNECT MQTT version %ld, client id %.*s, clean session %ld, keep alive %d", + (int32_t)data->MQTTVersion, (int)data->clientID.lenstring.len, data->clientID.lenstring.data, + (int32_t)data->cleansession, data->keepAliveInterval); + if (data->willFlag) + strindex += snprintf(&strbuf[strindex], strbuflen - strindex, + ", will QoS %d, will retain %d, will topic %.*s, will message %.*s", + data->will.qos, data->will.retained, + (int)data->will.topicName.lenstring.len, data->will.topicName.lenstring.data, + (int)data->will.message.lenstring.len, data->will.message.lenstring.data); + if (data->username.lenstring.data && data->username.lenstring.len > 0) + strindex += snprintf(&strbuf[strindex], strbuflen - strindex, + ", user name %.*s", (int)data->username.lenstring.len, data->username.lenstring.data); + if (data->password.lenstring.data && data->password.lenstring.len > 0) + strindex += snprintf(&strbuf[strindex], strbuflen - strindex, + ", password %.*s", (int)data->password.lenstring.len, data->password.lenstring.data); + return strindex; +} + + +int32_t MQTTStringFormat_connack(char* strbuf, int32_t strbuflen, uint8_t connack_rc, uint8_t sessionPresent) +{ + int32_t strindex = snprintf(strbuf, strbuflen, "CONNACK session present %d, rc %d", sessionPresent, connack_rc); + return strindex; +} + + +int32_t MQTTStringFormat_publish(char* strbuf, int32_t strbuflen, uint8_t dup, uint8_t qos, uint8_t retained, + uint16_t packetid, MQTTString topicName, uint8_t* payload, int32_t payloadlen) +{ + int32_t strindex = snprintf(strbuf, strbuflen, + "PUBLISH dup %d, QoS %d, retained %d, packet id %d, topic %.*s, payload length %ld, payload %.*s", + dup, qos, retained, packetid, + (topicName.lenstring.len < 20) ? (int)topicName.lenstring.len : 20, topicName.lenstring.data, + payloadlen, (payloadlen < 20) ? (int)payloadlen : 20, payload); + return strindex; +} + + +int32_t MQTTStringFormat_ack(char* strbuf, int32_t strbuflen, uint8_t packettype, uint8_t dup, uint16_t packetid) +{ + int32_t strindex = snprintf(strbuf, strbuflen, "%s, packet id %d", MQTTPacket_names[packettype], packetid); + + if (dup) + strindex += snprintf(strbuf + strindex, strbuflen - strindex, ", dup %d", dup); + + return strindex; +} + + +int32_t MQTTStringFormat_subscribe(char* strbuf, int32_t strbuflen, uint8_t dup, uint16_t packetid, int32_t count, + MQTTString topicFilters[], int32_t requestedQoSs[]) +{ + return snprintf(strbuf, strbuflen, "SUBSCRIBE dup %d, packet id %d count %ld topic %.*s qos %ld", + dup, packetid, count, (int)topicFilters[0].lenstring.len, topicFilters[0].lenstring.data, + requestedQoSs[0]); +} + + +int32_t MQTTStringFormat_suback(char* strbuf, int32_t strbuflen, uint16_t packetid, int32_t count, int32_t* grantedQoSs) +{ + return snprintf(strbuf, strbuflen, + "SUBACK packet id %d count %ld granted qos %ld", packetid, count, grantedQoSs[0]); +} + + +int32_t MQTTStringFormat_unsubscribe(char* strbuf, int32_t strbuflen, uint8_t dup, uint16_t packetid, + int32_t count, MQTTString topicFilters[]) +{ + return snprintf(strbuf, strbuflen, "UNSUBSCRIBE dup %d, packet id %d count %ld topic %.*s", + dup, packetid, count, (int)topicFilters[0].lenstring.len, topicFilters[0].lenstring.data); +} + + +char* MQTTFormat_toClientString(char* strbuf, int32_t strbuflen, uint8_t* buf, int32_t buflen) +{ + int32_t index = 0; + int32_t rem_length = 0; + MQTTHeader header = {0}; + int32_t strindex = 0; + + header.byte = buf[index++]; + index += MQTTPacket_decodeBuf(&buf[index], &rem_length); + + switch (header.bits.type) + { + case CONNACK: + { + uint8_t sessionPresent, connack_rc; + if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) == 1) + strindex = MQTTStringFormat_connack(strbuf, strbuflen, connack_rc, sessionPresent); + } + break; + case PUBLISH: + { + uint8_t dup, retained, *payload; + uint16_t packetid; + uint8_t qos; + int32_t payloadlen; + MQTTString topicName = MQTTString_initializer; + + if (MQTTDeserialize_publish(&dup, &qos, &retained, &packetid, &topicName, + &payload, &payloadlen, buf, buflen) == 1) + strindex = MQTTStringFormat_publish(strbuf, strbuflen, dup, qos, retained, + packetid, topicName, payload, payloadlen); + } + break; + case PUBACK: + case PUBREC: + case PUBREL: + case PUBCOMP: + { + uint8_t packettype, dup; + uint16_t packetid; + if (MQTTDeserialize_ack(&packettype, &dup, &packetid, buf, buflen) == 1) + strindex = MQTTStringFormat_ack(strbuf, strbuflen, packettype, dup, packetid); + } + break; + case SUBACK: + { + uint16_t packetid; + int32_t maxcount = 1, count = 0; + int32_t grantedQoSs[1]; + if (MQTTDeserialize_suback(&packetid, maxcount, &count, grantedQoSs, buf, buflen) == 1) + strindex = MQTTStringFormat_suback(strbuf, strbuflen, packetid, count, grantedQoSs); + } + break; + case UNSUBACK: + { + uint16_t packetid; + if (MQTTDeserialize_unsuback(&packetid, buf, buflen) == 1) + strindex = MQTTStringFormat_ack(strbuf, strbuflen, UNSUBACK, 0, packetid); + } + break; + case PINGREQ: + case PINGRESP: + case DISCONNECT: + strindex = snprintf(strbuf, strbuflen, "%s", MQTTPacket_names[header.bits.type]); + break; + } + + (void) strindex; + + return strbuf; +} + + +char* MQTTFormat_toServerString(char* strbuf, int32_t strbuflen, uint8_t* buf, int32_t buflen) +{ + int32_t index = 0; + int32_t rem_length = 0; + MQTTHeader header = {0}; + int32_t strindex = 0; + + header.byte = buf[index++]; + index += MQTTPacket_decodeBuf(&buf[index], &rem_length); + + switch (header.bits.type) + { + case CONNECT: + { + MQTTPacket_connectData data; + int32_t rc; + + if ((rc = MQTTDeserialize_connect(&data, buf, buflen)) == 1) + strindex = MQTTStringFormat_connect(strbuf, strbuflen, &data); + } + break; + case PUBLISH: + { + uint8_t dup, retained, *payload; + uint16_t packetid; + uint8_t qos; + int32_t payloadlen; + MQTTString topicName = MQTTString_initializer; + + if (MQTTDeserialize_publish(&dup, &qos, &retained, &packetid, &topicName, + &payload, &payloadlen, buf, buflen) == 1) + strindex = MQTTStringFormat_publish(strbuf, strbuflen, dup, qos, retained, + packetid, topicName, payload, payloadlen); + } + break; + case PUBACK: + case PUBREC: + case PUBREL: + case PUBCOMP: + { + uint8_t packettype, dup; + uint16_t packetid; + + if (MQTTDeserialize_ack(&packettype, &dup, &packetid, buf, buflen) == 1) + strindex = MQTTStringFormat_ack(strbuf, strbuflen, packettype, dup, packetid); + } + break; + case SUBSCRIBE: + { + uint8_t dup; + uint16_t packetid; + int32_t maxcount = 1, count = 0; + MQTTString topicFilters[1]; + int32_t requestedQoSs[1]; + + if (MQTTDeserialize_subscribe(&dup, &packetid, maxcount, &count, + topicFilters, requestedQoSs, buf, buflen) == 1) + strindex = MQTTStringFormat_subscribe(strbuf, strbuflen, dup, packetid, count, topicFilters, requestedQoSs);; + } + break; + case UNSUBSCRIBE: + { + uint8_t dup; + uint16_t packetid; + int32_t maxcount = 1, count = 0; + MQTTString topicFilters[1]; + if (MQTTDeserialize_unsubscribe(&dup, &packetid, maxcount, &count, topicFilters, buf, buflen) == 1) + strindex = MQTTStringFormat_unsubscribe(strbuf, strbuflen, dup, packetid, count, topicFilters); + } + break; + case PINGREQ: + case PINGRESP: + case DISCONNECT: + strindex = snprintf(strbuf, strbuflen, "%s", MQTTPacket_names[header.bits.type]); + break; + } + + (void) strindex; + strbuf[strbuflen] = '\0'; + return strbuf; +} diff --git a/Internet/MQTT/MQTTPacket/src/MQTTFormat.h b/Internet/MQTT/MQTTPacket/src/MQTTFormat.h new file mode 100644 index 0000000..a921aea --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTFormat.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#if !defined(MQTTFORMAT_H) +#define MQTTFORMAT_H + +#include "StackTrace.h" +#include "MQTTPacket.h" + +const char* MQTTPacket_getName(uint16_t packetid); +int32_t MQTTStringFormat_connect(char* strbuf, int32_t strbuflen, MQTTPacket_connectData* data); +int32_t MQTTStringFormat_connack(char* strbuf, int32_t strbuflen, uint8_t connack_rc, uint8_t sessionPresent); +int32_t MQTTStringFormat_publish(char* strbuf, int32_t strbuflen, uint8_t dup, uint8_t qos, uint8_t retained, + uint16_t packetid, MQTTString topicName, uint8_t* payload, int32_t payloadlen); +int32_t MQTTStringFormat_ack(char* strbuf, int32_t strbuflen, uint8_t packettype, uint8_t dup, uint16_t packetid); +int32_t MQTTStringFormat_subscribe(char* strbuf, int32_t strbuflen, uint8_t dup, uint16_t packetid, int32_t count, + MQTTString topicFilters[], int32_t requestedQoSs[]); +int32_t MQTTStringFormat_suback(char* strbuf, int32_t strbuflen, uint16_t packetid, int32_t count, int32_t* grantedQoSs); +int32_t MQTTStringFormat_unsubscribe(char* strbuf, int32_t strbuflen, uint8_t dup, uint16_t packetid, + int32_t count, MQTTString topicFilters[]); +char* MQTTFormat_toClientString(char* strbuf, int32_t strbuflen, uint8_t* buf, int32_t buflen); +char* MQTTFormat_toServerString(char* strbuf, int32_t strbuflen, uint8_t* buf, int32_t buflen); + +#endif diff --git a/Internet/MQTT/MQTTPacket/src/MQTTPacket.c b/Internet/MQTT/MQTTPacket/src/MQTTPacket.c new file mode 100644 index 0000000..f608549 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTPacket.c @@ -0,0 +1,443 @@ +/******************************************************************************* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Sergio R. Caprile - non-blocking packet read functions for stream transport + *******************************************************************************/ + +#include "StackTrace.h" +#include "MQTTPacket.h" +#include + +/** + * Encodes the message length according to the MQTT algorithm + * @param buf the buffer into which the encoded data is written + * @param length the length to be encoded + * @return the number of bytes written to buffer + */ +int32_t MQTTPacket_encode(uint8_t* buf, int32_t length) +{ + int32_t rc = 0; + + FUNC_ENTRY; + do + { + uint8_t d = length % 128; + length /= 128; + + /* if there are more digits to encode, set the top bit of this digit */ + if (length > 0) + d |= 0x80; + + buf[rc++] = d; + } while (length > 0); + + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Decodes the message length according to the MQTT algorithm + * @param getcharfn pointer to function to read the next character from the data source + * @param value the decoded length returned + * @return the number of bytes read from the socket + */ +int32_t MQTTPacket_decode(int32_t (*getcharfn)(uint8_t*, int32_t), int32_t* value) +{ + uint8_t c; + int32_t multiplier = 1; + int32_t len = 0; + +#define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 + + FUNC_ENTRY; + *value = 0; + + do + { + int32_t rc = MQTTPACKET_READ_ERROR; + + if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) + { + rc = MQTTPACKET_READ_ERROR; /* bad data */ + goto exit; + } + + rc = (*getcharfn)(&c, 1); + + if (rc != 1) + goto exit; + + *value += (c & 127) * multiplier; + multiplier *= 128; + } while ((c & 128) != 0); + +exit: + FUNC_EXIT_RC(len); + return len; +} + + +int32_t MQTTPacket_len(int32_t rem_len) +{ + rem_len += 1; /* header byte */ + + /* now remaining_length field */ + if (rem_len < 128) + rem_len += 1; + else if (rem_len < 16384) + rem_len += 2; + else if (rem_len < 2097151) + rem_len += 3; + else + rem_len += 4; + + return rem_len; +} + + +static uint8_t* bufptr; + +int32_t bufchar(uint8_t* c, int32_t count) +{ + for (int32_t i = 0; i < count; ++i) + *c = *bufptr++; + + return count; +} + + +int32_t MQTTPacket_decodeBuf(uint8_t* buf, int32_t* value) +{ + bufptr = buf; + return MQTTPacket_decode(bufchar, value); +} + + +/** + * Calculates an integer from two bytes read from the input buffer + * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned + * @return the integer value calculated + */ +int32_t readInt(uint8_t** pptr) +{ + uint8_t* ptr = *pptr; + int32_t len = 256*(*ptr) + (*(ptr+1)); + *pptr += 2; + return len; +} + + +/** + * Reads one character from the input buffer. + * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned + * @return the character read + */ +char readChar(uint8_t** pptr) +{ + char c = **pptr; + (*pptr)++; + return c; +} + + +/** + * Writes one character to an output buffer. + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param c the character to write + */ +void writeChar(uint8_t** pptr, char c) +{ + **pptr = c; + (*pptr)++; +} + + +/** + * Writes an integer as 2 bytes to an output buffer. + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param anInt the integer to write + */ +void writeInt(uint8_t** pptr, int32_t anInt) +{ + **pptr = (uint8_t)(anInt / 256); + (*pptr)++; + **pptr = (uint8_t)(anInt % 256); + (*pptr)++; +} + + +/** + * Writes a "UTF" string to an output buffer. Converts C string to length-delimited. + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param string the C string to write + */ +void writeCString(uint8_t** pptr, const char* string) +{ + int32_t len = strlen(string); + writeInt(pptr, len); + memcpy(*pptr, string, len); + *pptr += len; +} + + +int32_t getLenStringLen(char* ptr) +{ + int32_t len = 256*((uint8_t)(*ptr)) + (uint8_t)(*(ptr+1)); + return len; +} + + +void writeMQTTString(uint8_t** pptr, MQTTString mqttstring) +{ + if (mqttstring.lenstring.len > 0) + { + writeInt(pptr, mqttstring.lenstring.len); + memcpy(*pptr, mqttstring.lenstring.data, mqttstring.lenstring.len); + *pptr += mqttstring.lenstring.len; + } + else if (mqttstring.cstring) + writeCString(pptr, mqttstring.cstring); + else + writeInt(pptr, 0); +} + + +/** + * @param mqttstring the MQTTString structure into which the data is to be read + * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned + * @param enddata pointer to the end of the data: do not read beyond + * @return 1 if successful, 0 if not + */ +int32_t readMQTTLenString(MQTTString* mqttstring, uint8_t** pptr, uint8_t* enddata) +{ + int32_t rc = 0; + + FUNC_ENTRY; + + /* the first two bytes are the length of the string */ + if (enddata - (*pptr) > 1) /* enough length to read the integer? */ + { + mqttstring->lenstring.len = readInt(pptr); /* increments pptr to point past length */ + + if (&(*pptr)[mqttstring->lenstring.len] <= enddata) + { + mqttstring->lenstring.data = (char*)*pptr; + *pptr += mqttstring->lenstring.len; + rc = 1; + } + } + + mqttstring->cstring = NULL; + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Return the length of the MQTTstring - C string if there is one, otherwise the length delimited string + * @param mqttstring the string to return the length of + * @return the length of the string + */ +int32_t MQTTstrlen(MQTTString mqttstring) +{ + int rc = 0; + + if (mqttstring.cstring) + rc = strlen(mqttstring.cstring); + else + rc = mqttstring.lenstring.len; + + return rc; +} + + +/** + * Compares an MQTTString to a C string + * @param a the MQTTString to compare + * @param bptr the C string to compare + * @return boolean - equal or not + */ +int32_t MQTTPacket_equals(MQTTString* a, char* bptr) +{ + int32_t alen = 0, blen = 0; + char *aptr; + + if (a->cstring) + { + aptr = a->cstring; + alen = strlen(a->cstring); + } + else + { + aptr = a->lenstring.data; + alen = a->lenstring.len; + } + + blen = strlen(bptr); + + return (alen == blen) && (strncmp(aptr, bptr, alen) == 0); +} + + +/** + * Helper function to read packet data from some source into a buffer + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param getfn pointer to a function which will read any number of bytes from the needed source + * @return integer MQTT packet type, or -1 on error + * @note the whole message must fit into the caller's buffer + */ +int32_t MQTTPacket_read(uint8_t* buf, int32_t buflen, int32_t (*getfn)(uint8_t*, int32_t)) +{ + int32_t rc = -1; + MQTTHeader header = {0}; + int32_t len = 0; + int32_t rem_len = 0; + + /* 1. read the header byte. This has the packet type in it */ + if ((*getfn)(buf, 1) != 1) + goto exit; + + len = 1; + /* 2. read the remaining length. This is variable in itself */ + MQTTPacket_decode(getfn, &rem_len); + len += MQTTPacket_encode(buf + 1, rem_len); /* put the original remaining length back into the buffer */ + + /* 3. read the rest of the buffer using a callback to supply the rest of the data */ + if((rem_len + len) > buflen) + goto exit; + if ((*getfn)(buf + len, rem_len) != rem_len) + goto exit; + + header.byte = buf[0]; + rc = header.bits.type; +exit: + return rc; +} + +/** + * Decodes the message length according to the MQTT algorithm, non-blocking + * @param trp pointer to a transport structure holding what is needed to solve getting data from it + * @param value the decoded length returned + * @return integer the number of bytes read from the socket, 0 for call again, or -1 on error + */ +static int32_t MQTTPacket_decodenb(MQTTTransport *trp) +{ + uint8_t c; + int32_t rc = MQTTPACKET_READ_ERROR; + + FUNC_ENTRY; + + if (trp->len == 0) + { /* initialize on first call */ + trp->multiplier = 1; + trp->rem_len = 0; + } + + do + { + int32_t frc; + + if (trp->len >= MAX_NO_OF_REMAINING_LENGTH_BYTES) + goto exit; + + if ((frc=(*trp->getfn)(trp->sck, &c, 1)) == -1) + goto exit; + + if (frc == 0) + { + rc = 0; + goto exit; + } + + ++(trp->len); + trp->rem_len += (c & 127) * trp->multiplier; + trp->multiplier *= 128; + } while ((c & 128) != 0); + + rc = trp->len; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + +/** + * Helper function to read packet data from some source into a buffer, non-blocking + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param trp pointer to a transport structure holding what is needed to solve getting data from it + * @return integer MQTT packet type, 0 for call again, or -1 on error + * @note the whole message must fit into the caller's buffer + */ +int32_t MQTTPacket_readnb(uint8_t* buf, int32_t buflen, MQTTTransport *trp) +{ + int32_t rc = -1, frc; + MQTTHeader header = {0}; + + switch (trp->state) + { + default: + trp->state = 0; + /*FALLTHROUGH*/ + case 0: + /* read the header byte. This has the packet type in it */ + if ((frc=(*trp->getfn)(trp->sck, buf, 1)) == -1) + goto exit; + + if (frc == 0) + return 0; + + trp->len = 0; + ++trp->state; + + /*FALLTHROUGH*/ + /* read the remaining length. This is variable in itself */ + case 1: + if ((frc=MQTTPacket_decodenb(trp)) == MQTTPACKET_READ_ERROR) + goto exit; + + if (frc == 0) + return 0; + + trp->len = 1 + MQTTPacket_encode(buf + 1, trp->rem_len); /* put the original remaining length back into the buffer */ + + if ((trp->rem_len + trp->len) > buflen) + goto exit; + + ++trp->state; + /*FALLTHROUGH*/ + case 2: + /* read the rest of the buffer using a callback to supply the rest of the data */ + if ((frc=(*trp->getfn)(trp->sck, buf + trp->len, trp->rem_len)) == -1) + goto exit; + + if (frc == 0) + return 0; + + trp->rem_len -= frc; + trp->len += frc; + + if (trp->rem_len) + return 0; + + header.byte = buf[0]; + rc = header.bits.type; + break; + } +exit: + trp->state = 0; + return rc; +} + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTPacket.h b/Internet/MQTT/MQTTPacket/src/MQTTPacket.h new file mode 100644 index 0000000..0b9c474 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTPacket.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTPACKET_H_ +#define MQTTPACKET_H_ + +#include + + +#if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ +extern "C" { +#endif + +#if defined(WIN32_DLL) || defined(WIN64_DLL) + #define DLLImport __declspec(dllimport) + #define DLLExport __declspec(dllexport) +#elif defined(LINUX_SO) + #define DLLImport extern + #define DLLExport __attribute__ ((visibility ("default"))) +#else + #define DLLImport + #define DLLExport +#endif + +enum errors +{ + MQTTPACKET_BUFFER_TOO_SHORT = -2, + MQTTPACKET_READ_ERROR = -1, + MQTTPACKET_READ_COMPLETE +}; + +enum msgTypes +{ + CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, + SUBACK, UNSUBSCRIBE, UNSUBACK, PINGREQ, PINGRESP, DISCONNECT +}; + +/** + * Bitfields for the MQTT header byte. + */ +typedef union +{ + uint8_t byte; /**< the whole byte */ +#if defined(REVERSED) + struct + { + uint8_t type : 4; /**< message type nibble */ + uint8_t dup : 1; /**< DUP flag bit */ + uint8_t qos : 2; /**< QoS value, 0, 1 or 2 */ + uint8_t retain : 1; /**< retained flag bit */ + } bits; +#else + struct + { + uint8_t retain : 1; /**< retained flag bit */ + uint8_t qos : 2; /**< QoS value, 0, 1 or 2 */ + uint8_t dup : 1; /**< DUP flag bit */ + uint8_t type : 4; /**< message type nibble */ +} bits; +#endif +} MQTTHeader; + +typedef struct +{ + int32_t len; + char* data; +} MQTTLenString; + +typedef struct +{ + char* cstring; + MQTTLenString lenstring; +} MQTTString; + +#define MQTTString_initializer {NULL, {0, NULL}} + +int32_t MQTTstrlen(MQTTString mqttstring); + +#include "MQTTConnect.h" +#include "MQTTPublish.h" +#include "MQTTSubscribe.h" +#include "MQTTUnsubscribe.h" +#include "MQTTFormat.h" + +int32_t MQTTSerialize_ack(uint8_t* buf, int32_t buflen, uint8_t type, uint8_t dup, uint16_t packetid); +int32_t MQTTDeserialize_ack(uint8_t* packettype, uint8_t* dup, uint16_t* packetid, uint8_t* buf, int32_t buflen); + +int32_t MQTTPacket_len(int32_t rem_len); +int32_t MQTTPacket_equals(MQTTString* a, char* b); + +int32_t MQTTPacket_encode(uint8_t* buf, int32_t length); +int32_t MQTTPacket_decode(int32_t (*getcharfn)(uint8_t*, int32_t), int32_t* value); +int32_t MQTTPacket_decodeBuf(uint8_t* buf, int32_t* value); + +int32_t readInt(uint8_t** pptr); +char readChar(uint8_t** pptr); +void writeChar(uint8_t** pptr, char c); +void writeInt(uint8_t** pptr, int32_t anInt); +int32_t readMQTTLenString(MQTTString* mqttstring, uint8_t** pptr, uint8_t* enddata); +void writeCString(uint8_t** pptr, const char* string); +void writeMQTTString(uint8_t** pptr, MQTTString mqttstring); + +DLLExport int32_t MQTTPacket_read(uint8_t* buf, int32_t buflen, int32_t (*getfn)(uint8_t*, int32_t)); + +typedef struct +{ + int32_t (*getfn)(void *, uint8_t*, int32_t); /* must return -1 for error, 0 for call again, or the number of bytes read */ + void *sck; /* pointer to whatever the system may use to identify the transport */ + int32_t multiplier; + int32_t rem_len; + int32_t len; + char state; +}MQTTTransport; + +int32_t MQTTPacket_readnb(uint8_t* buf, int32_t buflen, MQTTTransport *trp); + +#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ +} +#endif + + +#endif /* MQTTPACKET_H_ */ diff --git a/Internet/MQTT/MQTTPacket/src/MQTTPublish.h b/Internet/MQTT/MQTTPacket/src/MQTTPublish.h new file mode 100644 index 0000000..87b86f7 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTPublish.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTPUBLISH_H_ +#define MQTTPUBLISH_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + +DLLExport int32_t MQTTSerialize_publish(uint8_t* buf, int32_t buflen, uint8_t dup, uint8_t qos, uint8_t retained, uint16_t packetid, + MQTTString topicName, uint8_t* payload, int32_t payloadlen); + +DLLExport int32_t MQTTDeserialize_publish(uint8_t* dup, uint8_t* qos, uint8_t* retained, uint16_t* packetid, MQTTString* topicName, + uint8_t** payload, int32_t* payloadlen, uint8_t* buf, int32_t len); + +DLLExport int32_t MQTTSerialize_puback(uint8_t* buf, int32_t buflen, uint16_t packetid); +DLLExport int32_t MQTTSerialize_pubrel(uint8_t* buf, int32_t buflen, uint8_t dup, uint16_t packetid); +DLLExport int32_t MQTTSerialize_pubcomp(uint8_t* buf, int32_t buflen, uint16_t packetid); + +#endif /* MQTTPUBLISH_H_ */ diff --git a/Internet/MQTT/MQTTPacket/src/MQTTSerializePublish.c b/Internet/MQTT/MQTTPacket/src/MQTTSerializePublish.c new file mode 100644 index 0000000..32d281f --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTSerializePublish.c @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Ian Craggs - fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=453144 + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + + +/** + * Determines the length of the MQTT publish packet that would be produced using the supplied parameters + * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) + * @param topicName the topic name to be used in the publish + * @param payloadlen the length of the payload to be sent + * @return the length of buffer needed to contain the serialized version of the packet + */ +int32_t MQTTSerialize_publishLength(uint8_t qos, MQTTString topicName, int32_t payloadlen) +{ + int32_t len = 2 + MQTTstrlen(topicName) + payloadlen; + + if (qos > 0) + len += 2; /* packetid */ + + return len; +} + + +/** + * Serializes the supplied publish data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param dup integer - the MQTT dup flag + * @param qos integer - the MQTT QoS value + * @param retained integer - the MQTT retained flag + * @param packetid integer - the MQTT packet identifier + * @param topicName MQTTString - the MQTT topic in the publish + * @param payload byte buffer - the MQTT publish payload + * @param payloadlen integer - the length of the MQTT payload + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTSerialize_publish(uint8_t* buf, int32_t buflen, uint8_t dup, uint8_t qos, uint8_t retained, uint16_t packetid, + MQTTString topicName, uint8_t* payload, int32_t payloadlen) +{ + uint8_t *ptr = buf; + MQTTHeader header = {0}; + int32_t rem_len = 0; + int32_t rc = 0; + + FUNC_ENTRY; + + if (MQTTPacket_len(rem_len = MQTTSerialize_publishLength(qos, topicName, payloadlen)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.bits.type = PUBLISH; + header.bits.dup = dup; + header.bits.qos = qos; + header.bits.retain = retained; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; + + writeMQTTString(&ptr, topicName); + + if (qos > 0) + writeInt(&ptr, packetid); + + memcpy(ptr, payload, payloadlen); + ptr += payloadlen; + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + + +/** + * Serializes the ack packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param type the MQTT packet type + * @param dup the MQTT dup flag + * @param packetid the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_ack(uint8_t* buf, int32_t buflen, uint8_t packettype, uint8_t dup, uint16_t packetid) +{ + MQTTHeader header = {0}; + int32_t rc = 0; + uint8_t *ptr = buf; + + FUNC_ENTRY; + + if (buflen < 4) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.bits.type = packettype; + header.bits.dup = dup; + header.bits.qos = (packettype == PUBREL) ? 1 : 0; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ + writeInt(&ptr, packetid); + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes a puback packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_puback(uint8_t* buf, int32_t buflen, uint16_t packetid) +{ + return MQTTSerialize_ack(buf, buflen, PUBACK, 0, packetid); +} + + +/** + * Serializes a pubrel packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param dup integer - the MQTT dup flag + * @param packetid integer - the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_pubrel(uint8_t* buf, int32_t buflen, uint8_t dup, uint16_t packetid) +{ + return MQTTSerialize_ack(buf, buflen, PUBREL, dup, packetid); +} + + +/** + * Serializes a pubrel packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @return serialized length, or error if 0 + */ +int32_t MQTTSerialize_pubcomp(uint8_t* buf, int32_t buflen, uint16_t packetid) +{ + return MQTTSerialize_ack(buf, buflen, PUBCOMP, 0, packetid); +} + + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTSubscribe.h b/Internet/MQTT/MQTTPacket/src/MQTTSubscribe.h new file mode 100644 index 0000000..e55ee1f --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTSubscribe.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTSUBSCRIBE_H_ +#define MQTTSUBSCRIBE_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + +DLLExport int32_t MQTTSerialize_subscribe(uint8_t* buf, int32_t buflen, uint8_t dup, uint16_t packetid, + int32_t count, MQTTString topicFilters[], int32_t requestedQoSs[]); + +DLLExport int32_t MQTTDeserialize_subscribe(uint8_t* dup, uint16_t* packetid, + int32_t maxcount, int32_t* count, MQTTString topicFilters[], int32_t requestedQoSs[], uint8_t* buf, int32_t len); + +DLLExport int32_t MQTTSerialize_suback(uint8_t* buf, int32_t buflen, uint16_t packetid, int32_t count, int32_t* grantedQoSs); +DLLExport int32_t MQTTDeserialize_suback(uint16_t* packetid, int32_t maxcount, int32_t* count, int32_t grantedQoSs[], uint8_t* buf, int32_t len); + + +#endif /* MQTTSUBSCRIBE_H_ */ diff --git a/Internet/MQTT/MQTTPacket/src/MQTTSubscribeClient.c b/Internet/MQTT/MQTTPacket/src/MQTTSubscribeClient.c new file mode 100644 index 0000000..253f9d2 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTSubscribeClient.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + +/** + * Determines the length of the MQTT subscribe packet that would be produced using the supplied parameters + * @param count the number of topic filter strings in topicFilters + * @param topicFilters the array of topic filter strings to be used in the publish + * @return the length of buffer needed to contain the serialized version of the packet + */ +int32_t MQTTSerialize_subscribeLength(int32_t count, MQTTString topicFilters[]) +{ + int32_t len = 2; /* packetid */ + + for (int32_t i = 0; i < count; ++i) + len += 2 + MQTTstrlen(topicFilters[i]) + 1; /* length + topic + req_qos */ + + return len; +} + + +/** + * Serializes the supplied subscribe data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied bufferr + * @param dup integer - the MQTT dup flag + * @param packetid integer - the MQTT packet identifier + * @param count - number of members in the topicFilters and reqQos arrays + * @param topicFilters - array of topic filter names + * @param requestedQoSs - array of requested QoS + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTSerialize_subscribe(uint8_t* buf, int32_t buflen, uint8_t dup, uint16_t packetid, int32_t count, + MQTTString topicFilters[], int32_t requestedQoSs[]) +{ + uint8_t *ptr = buf; + MQTTHeader header = {0}; + int32_t rem_len = 0; + int32_t rc = 0; + + FUNC_ENTRY; + + if (MQTTPacket_len(rem_len = MQTTSerialize_subscribeLength(count, topicFilters)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = SUBSCRIBE; + header.bits.dup = dup; + header.bits.qos = 1; + writeChar(&ptr, header.byte); /* write header */ + + ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; + + writeInt(&ptr, packetid); + + for (int32_t i = 0; i < count; ++i) + { + writeMQTTString(&ptr, topicFilters[i]); + writeChar(&ptr, requestedQoSs[i]); + } + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + + +/** + * Deserializes the supplied (wire) buffer into suback data + * @param packetid returned integer - the MQTT packet identifier + * @param maxcount - the maximum number of members allowed in the grantedQoSs array + * @param count returned integer - number of members in the grantedQoSs array + * @param grantedQoSs returned array of integers - the granted qualities of service + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int32_t MQTTDeserialize_suback(uint16_t* packetid, int32_t maxcount, int32_t* count, int32_t grantedQoSs[], uint8_t* buf, int32_t buflen) +{ + MQTTHeader header = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = NULL; + int32_t rc = 0; + int32_t mylen; + + FUNC_ENTRY; + + header.byte = readChar(&curdata); + if (header.bits.type != SUBACK) + goto exit; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + if (enddata - curdata < 2) + goto exit; + + *packetid = readInt(&curdata); + + *count = 0; + + while (curdata < enddata) + { + if (*count > maxcount) + { + rc = -1; + goto exit; + } + grantedQoSs[(*count)++] = readChar(&curdata); + } + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTSubscribeServer.c b/Internet/MQTT/MQTTPacket/src/MQTTSubscribeServer.c new file mode 100644 index 0000000..da3d492 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTSubscribeServer.c @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + + +/** + * Deserializes the supplied (wire) buffer into subscribe data + * @param dup integer returned - the MQTT dup flag + * @param packetid integer returned - the MQTT packet identifier + * @param maxcount - the maximum number of members allowed in the topicFilters and requestedQoSs arrays + * @param count - number of members in the topicFilters and requestedQoSs arrays + * @param topicFilters - array of topic filter names + * @param requestedQoSs - array of requested QoS + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTDeserialize_subscribe(uint8_t* dup, uint16_t* packetid, int32_t maxcount, int32_t* count, MQTTString topicFilters[], + int32_t requestedQoSs[], uint8_t* buf, int32_t buflen) +{ + MQTTHeader header = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = NULL; + int32_t rc = -1; + int32_t mylen = 0; + + FUNC_ENTRY; + + header.byte = readChar(&curdata); + + if (header.bits.type != SUBSCRIBE) + goto exit; + + *dup = header.bits.dup; + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + *packetid = readInt(&curdata); + *count = 0; + + while (curdata < enddata) + { + if (!readMQTTLenString(&topicFilters[*count], &curdata, enddata)) + goto exit; + + if (curdata >= enddata) /* do we have enough data to read the req_qos version byte? */ + goto exit; + + requestedQoSs[*count] = readChar(&curdata); + (*count)++; + } + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes the supplied suback data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @param count - number of members in the grantedQoSs array + * @param grantedQoSs - array of granted QoS + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTSerialize_suback(uint8_t* buf, int32_t buflen, uint16_t packetid, int32_t count, int32_t* grantedQoSs) +{ + MQTTHeader header = {0}; + int32_t rc = -1; + uint8_t *ptr = buf; + + FUNC_ENTRY; + + if (buflen < 2 + count) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = SUBACK; + writeChar(&ptr, header.byte); /* write header */ + ptr += MQTTPacket_encode(ptr, 2 + count); /* write remaining length */ + writeInt(&ptr, packetid); + + for (int32_t i = 0; i < count; ++i) + writeChar(&ptr, grantedQoSs[i]); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribe.h b/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribe.h new file mode 100644 index 0000000..e68d1a6 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribe.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Xiang Rong - 442039 Add makefile to Embedded C client + *******************************************************************************/ + +#ifndef MQTTUNSUBSCRIBE_H_ +#define MQTTUNSUBSCRIBE_H_ + +#if !defined(DLLImport) + #define DLLImport +#endif +#if !defined(DLLExport) + #define DLLExport +#endif + +DLLExport int32_t MQTTSerialize_unsubscribe(uint8_t* buf, int32_t buflen, uint8_t dup, uint16_t packetid, + int32_t count, MQTTString topicFilters[]); + +DLLExport int32_t MQTTDeserialize_unsubscribe(uint8_t* dup, uint16_t* packetid, int32_t max_count, int32_t* count, MQTTString topicFilters[], + uint8_t* buf, int32_t len); + +DLLExport int32_t MQTTSerialize_unsuback(uint8_t* buf, int32_t buflen, uint16_t packetid); +DLLExport int32_t MQTTDeserialize_unsuback(uint16_t* packetid, uint8_t* buf, int32_t len); + +#endif /* MQTTUNSUBSCRIBE_H_ */ diff --git a/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeClient.c b/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeClient.c new file mode 100644 index 0000000..132507c --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeClient.c @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ + +#include "MQTTPacket.h" +#include "StackTrace.h" + +#include + +/** + * Determines the length of the MQTT unsubscribe packet that would be produced using the supplied parameters + * @param count the number of topic filter strings in topicFilters + * @param topicFilters the array of topic filter strings to be used in the publish + * @return the length of buffer needed to contain the serialized version of the packet + */ +int32_t MQTTSerialize_unsubscribeLength(int32_t count, MQTTString topicFilters[]) +{ + int32_t len = 2; /* packetid */ + + for (int32_t i = 0; i < count; ++i) + len += 2 + MQTTstrlen(topicFilters[i]); /* length + topic*/ + + return len; +} + + +/** + * Serializes the supplied unsubscribe data into the supplied buffer, ready for sending + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @param dup integer - the MQTT dup flag + * @param packetid integer - the MQTT packet identifier + * @param count - number of members in the topicFilters array + * @param topicFilters - array of topic filter names + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTSerialize_unsubscribe(uint8_t* buf, int32_t buflen, uint8_t dup, uint16_t packetid, + int32_t count, MQTTString topicFilters[]) +{ + uint8_t *ptr = buf; + MQTTHeader header = {0}; + int32_t rem_len = 0; + int32_t rc = -1; + + FUNC_ENTRY; + + if (MQTTPacket_len(rem_len = MQTTSerialize_unsubscribeLength(count, topicFilters)) > buflen) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = UNSUBSCRIBE; + header.bits.dup = dup; + header.bits.qos = 1; + writeChar(&ptr, header.byte); /* write header */ + ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; + writeInt(&ptr, packetid); + + for (int32_t i = 0; i < count; ++i) + writeMQTTString(&ptr, topicFilters[i]); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Deserializes the supplied (wire) buffer into unsuback data + * @param packetid returned integer - the MQTT packet identifier + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int32_t MQTTDeserialize_unsuback(uint16_t* packetid, uint8_t* buf, int32_t buflen) +{ + uint8_t type = 0; + uint8_t dup = 0; + int32_t rc = 0; + + FUNC_ENTRY; + + rc = MQTTDeserialize_ack(&type, &dup, packetid, buf, buflen); + + if (type == UNSUBACK) + rc = 1; + + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeServer.c b/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeServer.c new file mode 100644 index 0000000..2bbf86b --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/MQTTUnsubscribeServer.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + *******************************************************************************/ +#include "MQTTPacket.h" +#include "StackTrace.h" +#include + +/** + * Deserializes the supplied (wire) buffer into unsubscribe data + * @param dup integer returned - the MQTT dup flag + * @param packetid integer returned - the MQTT packet identifier + * @param maxcount - the maximum number of members allowed in the topicFilters and requestedQoSs arrays + * @param count - number of members in the topicFilters and requestedQoSs arrays + * @param topicFilters - array of topic filter names + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTDeserialize_unsubscribe(uint8_t* dup, uint16_t* packetid, int32_t maxcount, int32_t* count, MQTTString topicFilters[], + uint8_t* buf, int32_t len) +{ + MQTTHeader header = {0}; + uint8_t* curdata = buf; + uint8_t* enddata = NULL; + int32_t rc = 0; + int32_t mylen = 0; + + FUNC_ENTRY; + + header.byte = readChar(&curdata); + if (header.bits.type != UNSUBSCRIBE) + goto exit; + *dup = header.bits.dup; + + curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ + enddata = curdata + mylen; + + *packetid = readInt(&curdata); + *count = 0; + + while (curdata < enddata) + { + if (!readMQTTLenString(&topicFilters[*count], &curdata, enddata)) + goto exit; + (*count)++; + } + + rc = 1; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + +/** + * Serializes the supplied unsuback data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buflen the length in bytes of the supplied buffer + * @param packetid integer - the MQTT packet identifier + * @return the length of the serialized data. <= 0 indicates error + */ +int32_t MQTTSerialize_unsuback(uint8_t* buf, int32_t buflen, uint16_t packetid) +{ + MQTTHeader header = {0}; + int32_t rc = 0; + uint8_t *ptr = buf; + + FUNC_ENTRY; + + if (buflen < 2) + { + rc = MQTTPACKET_BUFFER_TOO_SHORT; + goto exit; + } + + header.byte = 0; + header.bits.type = UNSUBACK; + writeChar(&ptr, header.byte); /* write header */ + ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ + writeInt(&ptr, packetid); + + rc = ptr - buf; +exit: + FUNC_EXIT_RC(rc); + return rc; +} + + diff --git a/Internet/MQTT/MQTTPacket/src/StackTrace.h b/Internet/MQTT/MQTTPacket/src/StackTrace.h new file mode 100644 index 0000000..5ba0a85 --- /dev/null +++ b/Internet/MQTT/MQTTPacket/src/StackTrace.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2014 IBM Corp. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * and Eclipse Distribution License v1.0 which accompany this distribution. + * + * The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Ian Craggs - initial API and implementation and/or initial documentation + * Ian Craggs - fix for bug #434081 + *******************************************************************************/ + +#ifndef STACKTRACE_H_ +#define STACKTRACE_H_ + +#include +#define NOSTACKTRACE 1 + +#if defined(NOSTACKTRACE) +#define FUNC_ENTRY +#define FUNC_ENTRY_NOLOG +#define FUNC_ENTRY_MED +#define FUNC_ENTRY_MAX +#define FUNC_EXIT +#define FUNC_EXIT_NOLOG +#define FUNC_EXIT_MED +#define FUNC_EXIT_MAX +#define FUNC_EXIT_RC(x) +#define FUNC_EXIT_MED_RC(x) +#define FUNC_EXIT_MAX_RC(x) + +#else + +#if defined(WIN32) +#define inline __inline +#define FUNC_ENTRY StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MINIMUM) +#define FUNC_ENTRY_NOLOG StackTrace_entry(__FUNCTION__, __LINE__, -1) +#define FUNC_ENTRY_MED StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MEDIUM) +#define FUNC_ENTRY_MAX StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MAXIMUM) +#define FUNC_EXIT StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MINIMUM) +#define FUNC_EXIT_NOLOG StackTrace_exit(__FUNCTION__, __LINE__, -1) +#define FUNC_EXIT_MED StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MEDIUM) +#define FUNC_EXIT_MAX StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MAXIMUM) +#define FUNC_EXIT_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MINIMUM) +#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MEDIUM) +#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MAXIMUM) +#else +#define FUNC_ENTRY StackTrace_entry(__func__, __LINE__, TRACE_MINIMUM) +#define FUNC_ENTRY_NOLOG StackTrace_entry(__func__, __LINE__, -1) +#define FUNC_ENTRY_MED StackTrace_entry(__func__, __LINE__, TRACE_MEDIUM) +#define FUNC_ENTRY_MAX StackTrace_entry(__func__, __LINE__, TRACE_MAXIMUM) +#define FUNC_EXIT StackTrace_exit(__func__, __LINE__, NULL, TRACE_MINIMUM) +#define FUNC_EXIT_NOLOG StackTrace_exit(__func__, __LINE__, NULL, -1) +#define FUNC_EXIT_MED StackTrace_exit(__func__, __LINE__, NULL, TRACE_MEDIUM) +#define FUNC_EXIT_MAX StackTrace_exit(__func__, __LINE__, NULL, TRACE_MAXIMUM) +#define FUNC_EXIT_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MINIMUM) +#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MEDIUM) +#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MAXIMUM) + +void StackTrace_entry(const char* name, int32_t line, int32_t trace); +void StackTrace_exit(const char* name, int32_t line, void* return_value, int32_t trace); + +void StackTrace_printStack(FILE* dest); +char* StackTrace_get(unsigned long); + +#endif + +#endif + + + + +#endif /* STACKTRACE_H_ */ diff --git a/Internet/MQTT/mqtt_interface.c b/Internet/MQTT/mqtt_interface.c new file mode 100644 index 0000000..9fac0b4 --- /dev/null +++ b/Internet/MQTT/mqtt_interface.c @@ -0,0 +1,80 @@ +#include "mqtt_interface.h" +#include "wizchip_conf.h" +#include "socket.h" +//#include +#include +#include "millis.h" + +/* +uint32_t MilliTimer; + +void MilliTimer_Handler(void) +{ + MilliTimer++; +} +*/ + +int8_t expired(Timer* timer) +{ + int32_t left = (timer->end_time) - millis(); + return (left < 0); +} + +void countdown_ms(Timer* timer, uint32_t timeout) +{ + timer->end_time = millis() + timeout; +} + +void countdown(Timer* timer, uint32_t timeout) +{ + timer->end_time = millis() + (timeout * 1000UL); +} + +int32_t left_ms(Timer* timer) +{ + int32_t left = timer->end_time - millis(); + return (left < 0) ? 0 : left; +} + +void InitTimer(Timer* timer) +{ + timer->end_time = 0; +} + + +void NewNetwork(Network* n) +{ + //n->my_socket = 0; //initialized outside actually.. + n->mqttread = w5500_read; + n->mqttwrite = w5500_write; + n->disconnect = w5500_disconnect; +} + +int32_t w5500_read(Network* n, uint8_t* buffer, int32_t len, int32_t timeout_ms) +{ + if ((getSn_SR(n->my_socket) == SOCK_ESTABLISHED) && (getSn_RX_RSR(n->my_socket) > 0)) + return recv(n->my_socket, buffer, len); + + return 0; +} + +int32_t w5500_write(Network* n, uint8_t* buffer, int32_t len, int32_t timeout_ms) +{ + if (getSn_SR(n->my_socket) == SOCK_ESTABLISHED) + return send(n->my_socket, buffer, len); + + return 0; +} + +void w5500_disconnect(Network* n) +{ + disconnect(n->my_socket); +} + +int32_t ConnectNetwork(Network* n, uint8_t* ip, uint16_t port) +{ + socket(n->my_socket, Sn_MR_TCP, 12345, 0); + connect(n->my_socket, ip, port); + + return 0; +} diff --git a/Internet/MQTT/mqtt_interface.h b/Internet/MQTT/mqtt_interface.h new file mode 100644 index 0000000..469438f --- /dev/null +++ b/Internet/MQTT/mqtt_interface.h @@ -0,0 +1,41 @@ +#ifndef __MQTT_INTERFACE_H_ +#define __MQTT_INTERFACE_H_ + +#include + +typedef struct Timer Timer; + +struct Timer +{ + uint32_t systick_period; + uint32_t end_time; +}; + +typedef struct Network Network; + +struct Network +{ + int32_t my_socket; + int32_t (*mqttread) (Network*, uint8_t*, int32_t, int32_t); + int32_t (*mqttwrite) (Network*, uint8_t*, int32_t, int32_t); + void (*disconnect) (Network*); +}; + +void InitTimer(Timer*); +/* +void MilliTimer_Handler(void); +*/ + +int8_t expired(Timer*); +void countdown_ms(Timer*, uint32_t); +void countdown(Timer*, uint32_t); +int32_t left_ms(Timer*); + +int32_t w5500_read(Network*, uint8_t*, int32_t, int32_t); +int32_t w5500_write(Network*, uint8_t*, int32_t, int32_t); +void w5500_disconnect(Network*); +void NewNetwork(Network*); + +int32_t ConnectNetwork(Network*, uint8_t*, uint16_t); + +#endif diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e5279be --- /dev/null +++ b/Makefile @@ -0,0 +1,58 @@ +TARGET = main +SRCS := $(shell find -name '*.c') +FILES = $(SRCS:%.c=%) #main uart avrIOhelper/io-helper #uart#hier alle c-Datein reinschreiben, trennung durch " " und ohne .c-Endung +MCU = atmega2560 +PROGC = m2560 +CC = avr-gcc +TOOL = atmelice_isp +#TOOL = avrispmkii +#TOOL = usbasp-clone + +BUILDDIR = Builds + +DEFINES = -I . -IInternet/MQTT -I Internet/MQTT/MQTTPacket/src -I Ethernet/W5500 -I Ethernet -DF_CPU=16000000UL -D_WIZCHIP_=W5100 + +CFLAGS =-mmcu=$(MCU) -O2 -Wall -Wpedantic $(DEFINES) -std=c99 -ffunction-sections -fdata-sections +LDFLAGS =-mmcu=$(MCU) -Wl,--gc-sections + +LDFILES = $(foreach FILE,$(FILES),$(BUILDDIR)/$(FILE).o) + +all: clean $(BUILDDIR)/$(TARGET).elf + +$(BUILDDIR)/%.o: %.c + mkdir -p $(dir $@) + $(CC) $(CFLAGS) -c $< -o $(BUILDDIR)/$*.o + +$(BUILDDIR)/$(TARGET).elf: $(LDFILES) + mkdir -p $(dir $@) + $(CC) $(LDFLAGS) $(LDFILES) -o $(BUILDDIR)/$(TARGET).elf + +$(BUILDDIR)/$(TARGET).hex : $(BUILDDIR)/$(TARGET).elf + avr-objcopy -j .data -j .text -O ihex $< $@ + +fuse: + avrdude -p $(PROGC) -c $(TOOL) -U lfuse:w:0xE8:m -U hfuse:w:0xD1:m + +load: $(BUILDDIR)/$(TARGET).hex + avrdude -p $(PROGC) -c $(TOOL) -U flash:w:$(BUILDDIR)/$(TARGET).hex -v -B 4MHz + +program: clean load + +reset: + avrdude -p $(PROGC) -c $(TOOL) + +size: $(BUILDDIR)/$(TARGET).elf + avr-size -C --mcu=$(MCU) $(BUILDDIR)/$(TARGET).elf + +.PHONY=clean +clean: + rm -rf $(BUILDDIR) + + +#Fuse m1284p external Osz. Long startuptime +# avrdude -c usbasp-clone -p m1284p -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m + +#Fuse m1284p internal Osz. Long startuptime +# avrdude -c usbasp-clone -p m1284p -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..cfdb7d5 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +## Network Config + +|Parameter| Value +|---------|------------- +| IP Adr. | 192.168.2.1 +| Subnet | 255.255.0.0 +| MAC | 00-08-dc-ab-cd-f1 + +### MQTT + +#### Connect to MQTT Host 192.168.5.2 + +##### Publish +|Topic |Values | Unit +|--------------------------------------------------------|------------|------- +| TODO | | + + +##### Subscribe + +|Topic |Values | Unit +|--------------------------------------------------------|------------|------- +| TODO | | + +## Hardware usage + +### Timers + +|Timer| Type | Usage | Mode | used ISRs | Output connected +|-----|--------|-------------------------------|------------------------|----------------|------------------ +| 0 | 8 bit | Millis Tick Timer (1kHz) | 2 (CTC) | COMPA | - + +### UART + +|UART| Usage +|----|---------------------------------- +| 0 | Debug Prints (connected to USB) +| 1 | +| 2 | +| 3 | diff --git a/avrIOhelper/io-helper.c b/avrIOhelper/io-helper.c new file mode 100644 index 0000000..3efd96b --- /dev/null +++ b/avrIOhelper/io-helper.c @@ -0,0 +1,3245 @@ +#include +#include "io-helper.h" + + +volatile uint8_t outStates[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t outStatesBlinking[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t inStatesRaw[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t inStates[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t ioHelperDebounceTable[NUMBER_OF_INPUT_BYTES*8]; + +volatile uint8_t oldInstates[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t inStatesBothEdges[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t inStatesRisingEdge[NUMBER_OF_INPUT_BYTES]; +volatile uint8_t inStatesFallingEdge[NUMBER_OF_INPUT_BYTES]; + +volatile uint8_t ioHelperDebounceTable[NUMBER_OF_INPUT_BYTES*8]; + +uint8_t read_Input(uint8_t nr, uint8_t type) { + uint8_t state = 0; + switch (type) { + case LEVEL: + state = ioHelperReadBit(inStates, nr); + break; + case EDGE: + state = ioHelperReadBit(inStatesBothEdges, nr); + ioHelperSetBit(inStatesBothEdges, nr, 0); + break; + case RISING: + state = ioHelperReadBit(inStatesRisingEdge, nr); + ioHelperSetBit(inStatesRisingEdge, nr, 0); + break; + case FALLING: + state = ioHelperReadBit(inStatesFallingEdge, nr); + ioHelperSetBit(inStatesFallingEdge, nr, 0); + break; + } + + //reset edges after being read once + // if (state) { + // if (type == EDGE) + // ioHelperSetBit(inStatesBothEdges, nr, OFF); + // if (type == RISING) + // ioHelperSetBit(inStatesRisingEdge, nr, OFF); + // if (type == FALLING) + // ioHelperSetBit(inStatesFallingEdge, nr, OFF); + // } + + return state; +} + +void set_Output(uint8_t nr, uint8_t state) { + switch (state) { + case BLINK: + ioHelperSetBit(outStatesBlinking, nr, ON); + break; + case TOGGLE: + ioHelperSetBit(outStatesBlinking, nr, OFF); + if (ioHelperReadBit(outStates, nr)) { + ioHelperSetBit(outStates, nr, OFF); + } else { + ioHelperSetBit(outStates, nr, ON); + } + break; + case ON: + ioHelperSetBit(outStates, nr, ON); + ioHelperSetBit(outStatesBlinking, nr, OFF); + break; + case OFF: + ioHelperSetBit(outStates, nr, OFF); + ioHelperSetBit(outStatesBlinking, nr, OFF); + break; + } +} + +void ioHelperInitBuffer(void){ + for(uint8_t i = 0; i < NUMBER_OF_INPUT_BYTES; i++){ + outStates[i]= 0; + inStatesRaw[i] = 0; + inStates[i] = 0; + + oldInstates[i] = 0; + inStatesBothEdges[i] = 0; + inStatesRisingEdge[i] = 0; + inStatesFallingEdge[i] = 0; + } + for(uint8_t i = 0; i < NUMBER_OF_INPUT_BYTES*8; i++){ + ioHelperDebounceTable[i] = 0; + } +} + +/* Flankenwechsel Rising Falling + alt neu | (alt XOR neu) | (Flankenwechsel UND neu) | (flankenwechsel UND alt) + 0 0 | 0 | 0 | 0 + 0 1 | 1 | 1 | 0 + 1 0 | 1 | 0 | 1 + 1 1 | 0 | 0 | 0 + */ +void ioHelperEdgeDetector(void){ + for (uint8_t i = 0; i < NUMBER_OF_INPUT_BYTES; i++){ + inStatesBothEdges[i] = oldInstates[i] ^ inStates[i]; + inStatesRisingEdge[i] = inStatesBothEdges[i] & inStates[i]; + inStatesFallingEdge[i] = inStatesBothEdges[i] & oldInstates[i]; + oldInstates[i] = inStates[i]; + } +} + + +/* @brief: copies a single bit from one char to another char (or arrays thereof) + * + * + */ +void ioHelperCpArb(volatile uint8_t *source, uint16_t sourceNr,volatile uint8_t *target, uint16_t targetNr) { + if(*(source+(sourceNr/8))&(1<<(sourceNr-((sourceNr/8)*8)))) + { + *(target+(targetNr/8))|=(1<<(targetNr-((targetNr/8)*8))); + } else *(target+(targetNr/8))&=~(1<<(targetNr-((targetNr/8)*8))); +} + + +/* debounceing: */ +void ioHelperDebounce(void) { + static volatile uint8_t tablePos=0; + for(uint8_t i = 0; i< NUMBER_OF_INPUT_BYTES*8; i++) { + ioHelperCpArb(inStatesRaw,i,ioHelperDebounceTable,i*8+tablePos); + if(ioHelperDebounceTable[i]==0) ioHelperSetBit(inStates,i,0); + else if(ioHelperDebounceTable[i]==0xFF) ioHelperSetBit(inStates,i,1); + } + if (tablePos<7) { + tablePos++; + } else tablePos=0; +} + + +void ioHelperSetBit(volatile uint8_t *list, uint8_t nr, uint8_t state) { + unsigned char ArC=0; + ArC=nr/8; + if(state) *(list+ArC)|=(1<<(nr-(ArC*8))); + else *(list+ArC)&=~(1<<(nr-(ArC*8))); +} + +unsigned char ioHelperReadBit(volatile uint8_t *list, uint8_t nr) { + unsigned char ArC=0; + ArC=nr/8; + if (*(list+ArC)&(1<<(nr-(ArC*8)))) + { + return 1; + } else return 0; +} + +void ioHelperCpBit(uint8_t reg, uint8_t bi, uint8_t bo) { + ioHelperSetBit(inStatesRaw,bo,reg&(1< + +#define LEVEL 0 +#define EDGE 1 +#define RISING 2 +#define FALLING 3 + +#define OFF 0 +#define ON 1 +#define BLINK 2 +#define TOGGLE 3 + + +#define NUMBER_OF_INPUT_BYTES 4 + +extern volatile uint8_t outStates[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t outStatesBlinking[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t inStates[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t inStatesRaw[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t ioHelperDebounceTable[NUMBER_OF_INPUT_BYTES*8]; +extern volatile uint8_t oldInstates[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t inStatesBothEdges[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t inStatesRisingEdge[NUMBER_OF_INPUT_BYTES]; +extern volatile uint8_t inStatesFallingEdge[NUMBER_OF_INPUT_BYTES]; + + +uint8_t read_Input(uint8_t nr, uint8_t type); +void set_Output(uint8_t nr, uint8_t state); + +void ioHelperInitBuffer(void); +void ioHelperSetOuts(void); +void ioHelperReadPins(void); +void ioHelperIoConf(void); +void ioHelperSetBit(volatile uint8_t *list, uint8_t nr, uint8_t state); +unsigned char ioHelperReadBit(volatile uint8_t *list, uint8_t nr); +void ioHelperDebounce(void); +void ioHelperEdgeDetector(void); + +//Outputs +//Verknüpfen von Pin | Bit mit Bitposition (0...n) outStates[0...n/8]. +#define BitPE4 0 //D0 +#define BitPE5 1 //D1 +#define BitPG5 2 //D2 +#define BitPE3 3 //D3 +#define BitPH3 4 //D4 +#define BitPH4 5 //D5 +#define BitPH5 6 //D6 +#define BitPH6 7 //D7 + +#define BitPB4 8 //D8 +#define BitPB5 9 //D9 +#define BitPB6 10 //D10 +#define BitPB7 11 //D11 +#define BitPL7 12 //D12 +#define BitPL6 13 //D13 +#define BitPL5 14 //D14 +#define BitPL4 15 //D15 + +#define BitPL3 16 //D16 +#define BitPL2 17 //D17 +#define BitPL1 18 //D18 +#define BitPL0 19 //D19 +#define BitPD4 20 //D20 +#define BitPD5 21 //D21 +#define BitPD6 22 //D22 +#define BitPJ4 23 //D23 + + +#define LED_GRN_NOTAUS_ANLAGE BitPE4 +#define LED_ROT_NOTAUS_ANLAGE BitPE5 +#define LED_GRN_NOTAUS_SCHRANK BitPG5 +#define LED_ROT_NOTAUS_SCHRANK BitPE3 +#define LED_PLC_OK BitPH5 +#define LED_BUS_OK BitPD4 + + +//Inputs +//Verknüpfen von Pin | Bit mit Bitposition (0...n) inStates[0...n/8]. +#define BitPinF0 0 //A0 +#define BitPinF1 1 //A1 +#define BitPinF2 2 //A2 +#define BitPinF3 3 //A3 +#define BitPinF4 4 //A4 +#define BitPinF5 5 //A5 +#define BitPinF6 6 //A6 +#define BitPinF7 7 //A7 + +#define BitPinK0 8 //A8 +#define BitPinK1 9 //A9 +#define BitPinD3 10 //INO +#define BitPinD2 11 //IN1 + +#define IN_ANLAGE_EIN_INV BitPinF5 +#define IN_NOTAUS_ANLAGE BitPinF7 +#define IN_NOTAUS_SCHRANK BitPinK0 + +#endif diff --git a/avrIOhelper/iohelperhelper.py b/avrIOhelper/iohelperhelper.py new file mode 100644 index 0000000..e3efc70 --- /dev/null +++ b/avrIOhelper/iohelperhelper.py @@ -0,0 +1,155 @@ +import string + +ddr="""#ifdef DDRA +DDRA|=0 +#ifdef BitPA0 +|(1<<0) +#endif +#ifdef BitPA1 +|(1<<1) +#endif +#ifdef BitPA2 +|(1<<2) +#endif +#ifdef BitPA3 +|(1<<3) +#endif +#ifdef BitPA4 +|(1<<4) +#endif +#ifdef BitPA5 +|(1<<5) +#endif +#ifdef BitPA6 +|(1<<6) +#endif +#ifdef BitPA7 +|(1<<7) +#endif +|0; + +#endif + +""" + +port=""" +#ifdef PORTA +PORTA|=0 +#ifdef BitPA0 +|(getBit1(BitPA0)<<0) +#endif +#ifdef BitPA1 +|(getBit1(BitPA1)<<1) +#endif +#ifdef BitPA2 +|(getBit1(BitPA2)<<2) +#endif +#ifdef BitPA3 +|(getBit1(BitPA3)<<3) +#endif +#ifdef BitPA4 +|(getBit1(BitPA4)<<4) +#endif +#ifdef BitPA5 +|(getBit1(BitPA5)<<5) +#endif +#ifdef BitPA6 +|(getBit1(BitPA6)<<6) +#endif +#ifdef BitPA7 +|(getBit1(BitPA7)<<7) +#endif +|0; + +PORTA&=~(0 +#ifdef BitPA0 +|(getBit0(BitPA0)<<0) +#endif +#ifdef BitPA1 +|(getBit0(BitPA1)<<1) +#endif +#ifdef BitPA2 +|(getBit0(BitPA2)<<2) +#endif +#ifdef BitPA3 +|(getBit0(BitPA3)<<3) +#endif +#ifdef BitPA4 +|(getBit0(BitPA4)<<4) +#endif +#ifdef BitPA5 +|(getBit0(BitPA5)<<5) +#endif +#ifdef BitPA6 +|(getBit0(BitPA6)<<6) +#endif +#ifdef BitPA7 +|(getBit0(BitPA7)<<7) +#endif +|0); +#endif + +""" + +pin=""" +#ifdef PINA +#ifdef BitPinA0 +ioHelperCpBit(PINA,0,BitPinA0); +#endif +#ifdef BitPinA1 +ioHelperCpBit(PINA,1,BitPinA1); +#endif +#ifdef BitPinA2 +ioHelperCpBit(PINA,2,BitPinA2); +#endif +#ifdef BitPinA3 +ioHelperCpBit(PINA,3,BitPinA3); +#endif +#ifdef BitPinA4 +ioHelperCpBit(PINA,4,BitPinA4); +#endif +#ifdef BitPinA5 +ioHelperCpBit(PINA,5,BitPinA5); +#endif +#ifdef BitPinA6 +ioHelperCpBit(PINA,6,BitPinA6); +#endif +#ifdef BitPinA7 +ioHelperCpBit(PINA,7,BitPinA7); +#endif +#endif + +""" + +port_letters=list(string.ascii_uppercase); + +allddr=[] +for x in range(0,len(port_letters)): + allddr.append(ddr) + allddr[x]=allddr[x].replace("DDRA","DDR"+port_letters[x]) + allddr[x]=allddr[x].replace("BitPA","BitP"+port_letters[x]) + +allport=[] +for x in range(0,len(port_letters)): + allport.append(port) + allport[x]=allport[x].replace("PORTA","PORT"+port_letters[x]) + allport[x]=allport[x].replace("BitPA","BitP"+port_letters[x]) + +allpin=[] +for x in range(0,len(port_letters)): + allpin.append(pin) + allpin[x]=allpin[x].replace("PINA","PIN"+port_letters[x]) + allpin[x]=allpin[x].replace("BitPinA","BitPin"+port_letters[x]) + + +for x in allddr: + #print(x) + pass + +for x in allport: + #print(x) + pass + +for x in allpin: + print(x) + pass diff --git a/compile_flags.txt b/compile_flags.txt new file mode 100644 index 0000000..4e0c1cc --- /dev/null +++ b/compile_flags.txt @@ -0,0 +1,18 @@ +-D +__AVR_ATmega2560__ +-D +F_CPU=16000000UL +-D +_WIZCHIP_=W5100 +-I +/usr/lib/avr/include +-I +Internet +-I +Internet/MQTT +-I +Internet/MQTT/MQTTPacket/src +-I +Ethernet +-I +Ethernet/W5500 diff --git a/main.c b/main.c new file mode 100644 index 0000000..7ca309c --- /dev/null +++ b/main.c @@ -0,0 +1,247 @@ +#include +#include +#include // WatchDog +#include + +#include "Ethernet/socket.h" +#include "Ethernet/wizchip_conf.h" + +#include "Internet/MQTT/mqtt_interface.h" +#include "Internet/MQTT/MQTTClient.h" + +#include "avrIOhelper/io-helper.h" +#include "millis.h" +#include "uart.h" +#include "spi.h" +#include "mqtt.h" + +#include "util/delay.h" + +#define PLC_MQTT_ENABLED 0 + +Client mqtt_client; + +//***********Prologue for fast WDT disable & and save reason of reset/power-up: BEGIN +uint8_t mcucsr_mirror __attribute__ ((section (".noinit"))); + +// This is for fast WDT disable & and save reason of reset/power-up +void get_mcusr(void) \ + __attribute__((naked)) \ + __attribute__((section(".init3"))); +void get_mcusr(void) +{ + mcucsr_mirror = MCUSR; + MCUSR = 0; + wdt_disable(); +} +//***********Prologue for fast WDT disable & and save reason of reset/power-up: END + + +//FUNC headers +static void avr_init(void); +void timer0_init(void); +void print_network_information(void); + +void IO_LIBRARY_Init(void) { + uint8_t bufSize[] = {2, 2, 2, 2, 2, 2, 2, 2}; + + reg_wizchip_cs_cbfunc(spi_select, spi_deselect); + reg_wizchip_spi_cbfunc(spi_read, spi_write); + //reg_wizchip_spiburst_cbfunc(spi_rb_burst, spi_wb_burst); + + wizchip_init(bufSize, bufSize); + wizchip_setnetinfo(&netInfo); + //wizchip_setinterruptmask(IK_SOCK_0); +} + +void do_notaus(){ + if(read_Input(IN_NOTAUS_ANLAGE, LEVEL) || read_Input(IN_NOTAUS_SCHRANK, LEVEL)){ // NOTAUS + set_Output(LED_GRN_NOTAUS_SCHRANK, OFF); // disable green lamps + set_Output(LED_GRN_NOTAUS_ANLAGE, OFF); + } + + if(read_Input(IN_NOTAUS_ANLAGE, LEVEL) && read_Input(IN_NOTAUS_SCHRANK, LEVEL)){ // both activated + set_Output(LED_ROT_NOTAUS_ANLAGE, BLINK); + set_Output(LED_ROT_NOTAUS_SCHRANK, BLINK); + } + else if(read_Input(IN_NOTAUS_ANLAGE, LEVEL)){ // top one activated + set_Output(LED_ROT_NOTAUS_ANLAGE, BLINK); + set_Output(LED_ROT_NOTAUS_SCHRANK, ON); + } + else if(read_Input(IN_NOTAUS_SCHRANK, LEVEL)){ // bottom one activated + set_Output(LED_ROT_NOTAUS_SCHRANK, BLINK); + set_Output(LED_ROT_NOTAUS_ANLAGE, ON); + } + else{ // none activated + set_Output(LED_ROT_NOTAUS_SCHRANK, OFF); + set_Output(LED_ROT_NOTAUS_ANLAGE, OFF); + if(!read_Input(IN_ANLAGE_EIN_INV, LEVEL)){ + set_Output(LED_GRN_NOTAUS_ANLAGE, ON); + set_Output(LED_GRN_NOTAUS_SCHRANK, ON); + } + else{ + set_Output(LED_GRN_NOTAUS_ANLAGE, ON); + set_Output(LED_GRN_NOTAUS_SCHRANK, ON); + set_Output(LED_ROT_NOTAUS_ANLAGE, ON); + set_Output(LED_ROT_NOTAUS_SCHRANK, ON); + } + } +} + +int main() +{ + // INIT MCU + avr_init(); + spi_init(); //SPI Master, MODE0, 4Mhz(DIV4), CS_PB.3=HIGH - suitable for WIZNET 5x00(1/2/5) + //spi_speed_tst(); / Here on SPI pins: MOSI 400Khz freq out, on SCLK 3.2MhzOUT (Witk SPI CLK 4Mhz) + + ioHelperInitBuffer(); + ioHelperIoConf(); + + //Wizchip WIZ5500 Ethernet initialize + IO_LIBRARY_Init(); //After that ping must working + print_network_information(); + +#if PLC_MQTT_ENABLED + //****************MQTT client initialize + //Find MQTT broker and connect with it + uint8_t mqtt_buf[100]; + int32_t mqtt_rc = 0; + Network mqtt_network; + mqtt_network.my_socket = SOCK_MQTT; + + printf(">>Trying connect to MQTT broker: %d.%d.%d.%d ..\r\n", MQTT_targetIP[0], MQTT_targetIP[1], MQTT_targetIP[2], MQTT_targetIP[3]); + NewNetwork(&mqtt_network); + ConnectNetwork(&mqtt_network, MQTT_targetIP, 1883); + MQTTClient(&mqtt_client, &mqtt_network, 1000, mqtt_buf, 100, mqtt_readBuffer, MQTT_BUFFER_SIZE); + + //Connection to MQTT broker + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + data.willFlag = 0; + data.MQTTVersion = 4;//3; + data.clientID.cstring = (char*)"controllino_wasserbecken"; + data.username.cstring = (char*)"Wasserbecken"; + data.password.cstring = (char*)"\0"; + data.keepAliveInterval = 10; + data.cleansession = 1; + mqtt_rc = MQTTConnect(&mqtt_client, &data); + if (mqtt_rc == SUCCESSS) + { + printf("++MQTT Connected SUCCESS: %ld\r\n", mqtt_rc); + } + else + { + printf("--MQTT Connected ERROR: %ld\r\n", mqtt_rc); + while(1); //Reboot the board + } + + // Subscribe to all topics + char SubString[] = "/Filamentanlage/02_Wasserbecken/#"; + //char SubString[] = "/Filamentanlage/03_Wasserbecken/#"; + mqtt_rc = MQTTSubscribe(&mqtt_client, SubString, QOS0, messageArrived); + printf("Subscribed (%s) %ld\r\n", SubString, mqtt_rc); +#endif + + + ioHelperSetBit(outStatesBlinking, LED_PLC_OK, 1); + + uint32_t timer_blink_outs = millis(); + uint32_t timer_send_uptime = millis(); + + printf("anlage: %x\n\r", read_Input(IN_ANLAGE_EIN_INV, LEVEL)); + + while(1) + { + wdt_reset(); // WDT reset at least every sec + + ioHelperReadPins(); + ioHelperDebounce(); + ioHelperEdgeDetector(); + + // Toggle all outs which are set to blinking + if(millis() - timer_blink_outs > 500){ + outStates[0] ^= outStatesBlinking[0]; + outStates[1] ^= outStatesBlinking[1]; + timer_blink_outs = millis(); + } + +#if PLC_MQTT_ENABLED + // send misc info + if(millis() - timer_send_uptime > 5000){ + timer_send_uptime += 5000; + char msg[64]; + sprintf(msg, "%ld", millis()/1000); + mqtt_pub(&mqtt_client, "/Filamentanlage/02_Wasserbecken/uptime", msg, strlen(msg)); + } +#endif + + + if(read_Input(IN_ANLAGE_EIN_INV, FALLING)){ + printf("anlage ein\n\r"); + } + // ioHelperSetBit(outStates, LED_GRN_NOTAUS_SCHRANK, 1); + //} + //else{ + // ioHelperSetBit(outStates, LED_GRN_NOTAUS_SCHRANK, 0); + //} + do_notaus(); + +#if PLC_MQTT_ENABLED + ioHelperSetBit(outStates, LED_BUS_OK, 1); + ioHelperSetOuts(); + MQTTYield(&mqtt_client, 10); //blocking call + ioHelperSetBit(outStates, LED_BUS_OK, 0); +#endif + ioHelperSetOuts(); + } + return 0; +} + +// Timer0 +// 1ms IRQ +// Used for millis() timing +void timer0_init(void) +{ + TCCR0A = (1<250kHz:250-=>1kHz) + TIMSK0 |= 1< +#include +#include "millis.h" + +volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days + +ISR (TIMER0_COMPA_vect) +{ + _millis++; // INC millis tick +} + +unsigned long millis(void) +{ + unsigned long i; + cli(); + // Atomic tick reading + i = _millis; + sei(); + return i; +} diff --git a/millis.h b/millis.h new file mode 100644 index 0000000..21fef16 --- /dev/null +++ b/millis.h @@ -0,0 +1,7 @@ +#ifndef _MILLIS_H_ +#define _MILLIS_H_ + +#define TICK_PER_SEC 1000UL +unsigned long millis(void); + +#endif diff --git a/mqtt.c b/mqtt.c new file mode 100644 index 0000000..de27cf5 --- /dev/null +++ b/mqtt.c @@ -0,0 +1,66 @@ +#include +#include "mqtt.h" + +uint8_t mqtt_readBuffer[MQTT_BUFFER_SIZE]; +volatile uint16_t mes_id; + +wiz_NetInfo netInfo = { .mac = {0x00, 0x08, 0xdc, 0xab, 0xcd, 0xf1}, // Mac address + .ip = {192, 168, 2, 1}, // IP address + .sn = {255, 255, 0, 0}, // Subnet mask + .dns = {0,0,0,0}, // DNS address (google dns) + .gw = {192, 168, 0, 1}, // Gateway address + .dhcp = NETINFO_STATIC}; //Static IP configuration +uint8_t MQTT_targetIP[4] = {192, 168, 5, 2}; + +//MQTT subscribe call-back is here +void messageArrived(MessageData* md) +{ + char _topic_name[64] = "\0"; + char _message[128] = "\0"; + + MQTTMessage* message = md->message; + MQTTString* topic = md->topicName; + strncpy(_topic_name, topic->lenstring.data, topic->lenstring.len); + strncpy(_message, message->payload, message->payloadlen); + printf("<topicName-> + /* + for (uint8_t i = 0; i < md->topicName->lenstring.len; i++) + putchar(*(md->topicName->lenstring.data + i)); + + printf(" (%.*s)\r\n", (int32_t)message->payloadlen, (char*)message->payload); + */ +} + +void mqtt_pub(Client* mqtt_client, char * mqtt_topic, char * mqtt_msg, int mqtt_msg_len) +{ + static uint32_t mqtt_pub_count = 0; + static uint8_t mqtt_err_cnt = 0; + int32_t mqtt_rc; + + printf(">>MQTT pub msg nr%lu ", ++mqtt_pub_count); + MQTTMessage pubMessage; + pubMessage.qos = QOS0; + pubMessage.id = mes_id++; + pubMessage.payloadlen = (size_t)mqtt_msg_len; + pubMessage.payload = mqtt_msg; + mqtt_rc = MQTTPublish(mqtt_client, mqtt_topic , &pubMessage); + //Analize MQTT publish result (for MQTT failover mode) + if (mqtt_rc == SUCCESSS) + { + mqtt_err_cnt = 0; + printf(" - OK\r\n"); + } + else + { + printf(" - ERROR\r\n"); + //Reboot device after 20 continuous errors (~ 20sec) + //while(1); + if(mqtt_err_cnt++ > 20) + { + printf("Connection with MQTT Broker was lost!!\r\nReboot the board..\r\n"); + while(1); + } + } +} diff --git a/mqtt.h b/mqtt.h new file mode 100644 index 0000000..3e18522 --- /dev/null +++ b/mqtt.h @@ -0,0 +1,18 @@ +#ifndef _MQTT_H_ +#define _MQTT_H_ + +#include "Ethernet/socket.h" +#include "Internet/MQTT/mqtt_interface.h" +#include "Internet/MQTT/MQTTClient.h" + +#define SOCK_MQTT 2 +#define MQTT_BUFFER_SIZE 512 // 2048 + +extern uint8_t mqtt_readBuffer[MQTT_BUFFER_SIZE]; +extern wiz_NetInfo netInfo; +extern uint8_t MQTT_targetIP[4]; + +void messageArrived(MessageData* md); +void mqtt_pub(Client* mqtt_client, char * mqtt_topic, char * mqtt_msg, int mqtt_msg_len); + +#endif diff --git a/spi.c b/spi.c new file mode 100644 index 0000000..72a9e1c --- /dev/null +++ b/spi.c @@ -0,0 +1,37 @@ +#include "spi.h" + +void spi_select(void) +{ + CS_PORT&=~(1< + +#define SPI_PORT PORTB /* target-specific port containing the SPI lines */ +#define SPI_DDR DDRB /* target-specific DDR for the SPI port lines */ + +#define CS_DDR DDRJ /* target-specific DDR for chip-select */ +#define CS_PORT PORTJ /* target-specific port used as chip-select */ +#define CS_BIT 3 /* target-specific port line used as chip-select */ + +uint8_t spi_read(); +void spi_write(uint8_t d); +void spi_select(void); +void spi_deselect(void); +unsigned char spi_xchg(unsigned char val); +void spi_init(void); + +#endif diff --git a/uart.c b/uart.c new file mode 100644 index 0000000..aa928c8 --- /dev/null +++ b/uart.c @@ -0,0 +1,53 @@ +#include +#include "uart.h" + +static int uart_putchar(char c, FILE *stream); + +FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); + +void uart_init() +{ + DDRD |= 1 << 1; // TX + UART_BAUD_REGH = (BAUDRATE>>8); + UART_BAUD_REGL = BAUDRATE; // set baud rate + + UART_CTRL_REGB |= (1< + +#define BAUD 9600 +#define BAUDRATE ((F_CPU)/(BAUD*16UL)-1) + +#define UART_BAUD_REGH UBRR0H +#define UART_BAUD_REGL UBRR0L + +#define UART_CTRL_REGA UCSR0A +#define UART_CTRL_REGB UCSR0B +#define UART_CTRL_REGC UCSR0C + +// UCSRA +#define UART_UDRE_BM UDRE0 +#define UART_RXC_BM RXC0 + +// UCSRB +#define UART_TXEN_BM TXEN0 +#define UART_RXEN_BM RXEN0 +#define UART_RXCIE_BM RXCIE0 + +// UCSRC +#define UART_URSEL_BM 0 /* only for old atmega */ +#define UART_UCSZ0_BM UCSZ00 +#define UART_UCSZ1_BM UCSZ01 + +#define UART_DATA_REG UDR0 + +void uart_init (void); +void read_sync(char buffer[], uint8_t buffersize, uint8_t * bufferindex); + +#endif + +