ࡱ>  y{|nH` ߲_MPEBPNG  IHDR pHYs  gAMA|Q cHRMz%u0`:o_FH9IDATx 0 ~Y=k';t@0?z`[ra$` رAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ Hb#7 `Q0 F(`Qg1 <vG00% XJh<"( -`Q0 F(`Q@38( ;v z # HرAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0` A"'&/?%72}b pKim/v z#@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@XJRymP.{c4 pA>f@ygo^رa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;jp 5 8Lرa[;j`ho` ?; ! ر@_^` @v ׆`mzHر@_^` @v ׆`mzHر@_^` @v ׆`mzHر@_^` @v ׆`mzHر@_^` @v ׆`mzHrP`  )=`Q0 F(`O" (`FF{ci%`Q0 F(vI2`g`8x)=:0 F()ܵg 7 Q0 F(@wch@c40khfT , w~|0>63)1xr`i`7 S0 {IZ |p&+ @; !`@v ׆ Hر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`&` ر@_^`& @vX2xÔi%&{VDp(m##$hhQ0 F,x3?; h`Q0 F;`Q0 %0ÿ/x 2u%0n`iw7u@~Mعca]si] ?&11Q `a.q_^D@1x!wD MV "pcB`JC}Me "   dE@;&@ mgn5@Uرc`Vpf YF"  b@Pn4F(#zdFd( ,0 F(:~ '2.b3c%Y ה/jpO `㣸`)܍.!^V)8c`mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `mz` `ǎQaRnOݔ9[T P'2.~`ǎi`N ɝp Ej/v z#@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@v@@ F@aqI)IENDB`nvG[S*˂N8}PNG  IHDRn2w pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb C|Aab;q í73 _a?,12220312p13q1q0ȉp1(0h3X( 3H r  >|Ű 2ӏ ?d70 L,L ,̐H~e*DAM^CSOIGbG@ X]FsOv]~p a_0Ё0s1(0q1٠\$ aga`a`1|F'`$zg}c7$2 Hy8E7!qD׈{'Ò#֝ypkΠ!`(`(/Ƞ++'E5;/?pKW_2#(03T$ \Ԇ\]"0Oua{ _ X,`e&J\޿꓏>~)JcVdXc=" hqczaG-/k(àe@fEMg20#^4&%"y(Iām53s2("4}wʗg7`X o@TW_bP`tUeHW3)G Ƒ ÖbAqD(7C쐩/ǐ83ц ڃ8GN#7ѕ -~ 'I_D[ p2 *ϭ8!e)p'!,8t^S!^,V .6A'2=xwPD+O>1vaΛ ܢJaߕ`ߢ+ \O:_~YoPGXa0"9ǁAQ^֮İpyi2L3` {1i4LX$J[\~pчAqDRĝÄxc[ JU:ʐ8\l;/a2m=g$!&@ 9 W~0dbV@Z45``ea{`A-T}C@DGk^p m_ J}pq]pe $IlL J r4 4,Ainõ{oGWI, DT:h1MW&>NԑuHf(ր `q".f1;>2Ϳ?1xk0 v@8#˗_ ":ip:=3A Q+/0,֋H,-T}N^{ xGVsP8T 8'c`a@D^g4f_*AIa^9Pq70-N7 01~Ձ ona|apn0u vVfpi  =up8z.‡ =p%x4:x @9V`s}*A08j&7^cg>~Z"þsO؁EO`T.H2Zbo5/PTq 1op= ֻ1$)1-,A7 C hY guPR7h8@> (8x@̐ +P dО5w8e 2X4Q ^ 4 YTe6FY6@[5 -ң j@)a3جt*j V?G?<:LC۬@51T |زRx5:u+ l0UkuQO}d@J)ˎ2 < p͒ @Oܬd/BD52` s1`4?vgph$112F>M-RJbzS-#7`mw3\Xt3[ȋ|NFā6yVkw^~Π(M ,r$3 /?~68~3|_`.b608٘ 9LFXE)NUq^f9@grbU(@71T~qg`c 䖝1Lui~pwݷ .B&9(]bhX}a ~ZrYvXk[z6bh.,/HM2Q~bv`.L_3 SllֵU==c~88Ig,FAbW`Yc ̭%>@#*@ﰱPk PYH?h7кLP?X rp! `@4v Jvi q,e, ן~ P)}oF #x9zA Gtg'1gE(!uйd?ac s2@ C#:m{C&C=y7|dpMUE"&7@E&h5X Z`Gd3e6߆VCv%pÊTGCKS$P`>ENPP  z.fy q6`#`~ڍ mP // A=@AM@fV@u~`KPI\xaE/h!H ZOP܃o/@CQ$45IENDB`nsRwqQ*PNG  IHDR 9в pHYs.#.#x?vgAMAe=S cHRMntpp;2yIDATx1 z:ءcA )۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`ߎ[OcGy$%۱ i(`La W; Ǖ%'+I -Em#vL0̿kLp cUuEp!o50'$ >Ⱦ]NطC#bK#5dwUuݑQO o4 Lha@7@?o AdZ o&!-5)l ~ڿ-t1 %)vl AL?4" *0{@֏K$ҟob`M@OCTTϪiB{_=BXo'0IEk`Ld+hܨ=/dÎq?oِ# 6`1`NA(CE"P&ʡe׭ `ԳpEL d?ā]`X;6 ])Q^?c<;/%ќ|zE1[; @V6)+A +; <++07HE&*>cD?LlfX3_FIŘ  6hr3PFzv=g\̽\fbݙZ"o]}ާ^V>=-$vඛ[gYT/;i0^EZuGܿ @S8= c9+8KhCcB ?*h@^B ȯQknz_J?BZvC ݄ݐ>vJD77^i국fV3uٯJeEq?ܮ|ʓvulcC]̚+0w8Ca;.6q2q0IXLa1YL"i4B5U 5Iӯ  ӫ׌'^f ;Ϧe 5 B aH$ | . >C*QG~\^@=wy(,~SO2v=[MGg]S2&us{9A:C p#Xmܹ!_$!5 ,;# ѴVn73~ރGW7!R zԃz$4؀Ozex(!zH{*Ka뱍oivB6I~X'^mhYτAoػ(fLVcج:Z%UuW 19M?YV/@H3[Gp/''=~42AX:Fq=?G$ F޴H50صEXc}u&պzUW^Wc۳p7Ͷqu%d3߿o=7j^;Vz83.w8`q@ xO!\+89`\*V |$.}ȯ_ȣ+ޭN7(pX8q~C!nOHH!6tkPo^VBd#pEx7qϢ!,d^6Z]>m6Zgػ{a0՜:xoh4XhJqq@ -ү_W3 9wO_ueYz'N~Qv4Q]!iƐHA^-Bh rz[~u~k9?Y(=&O@^uFz—koϧYWM0{Ԟ`q0 WG` z8 WAcVVHEBhG zC֛|V6,: |ߴaS>@/h6EڏXqKq|L,}-N(  bĩ >(Oxz #׹v ?}iM%{w qlM\zƞձŠ!?vv; CC L3EojHI2˞sui\Tذʅ<| }pӡ1diں>KFKR Iy(ꌅDj!^ݒV(DK,+|_zNIc:64|5wuɵ=@a[80t+1U##1Tav Lz,+8Y?vWNa^;GQ׿tx>Ӆژo^?,Ԗ־czu/Lx_ EHs^vǺܜ9-ϠގFþ a6Ԅy]pnLAkR(ф (Х/r .tjs]o>Ce(۔/UTU>D[_~A;@8e(3! Ai̠Lksb-4n?_Vqv .BZo1dlmnb9޽ DQ 6\ht` ` `bHF h4zf |~d\}Y>XW҈d^ u?\~C }4V5 #t:[In7e,G. M; Nxif?`q8 [7uDΞ-Y?> ~ |uQmJ3݊j}.!u.a! Ї 0۰G/I 'áX$WQ~sڶpYAgu.*wrTU-{9/ػ( ǻZEh}-D4 x.r+ $"_dN¶VV4 }haM 6?\kIkuVU>!<?O{W9b}YY*>/p~ׇ?D_NAbܮMszZy*1䛦i b^L]að6q&v.€# (D,EehY@X~ur t<,9BxNh*oe ~T!Hc7C}ε@贏6!m]3װG^L6zOݩY 5}arX(Tn5;2z/  m_`r0YC8+JV\D5lJ#hD$y_? t mX7I1]]f3 h#5ѦD[?jwmmH!&>]DmmN)ܑ>砇]y ?1}ㇽgW_LD<ӡvqJ0Y k"m$ػa( ].aJ{81KP!)N/v L>|fL[>cmek\ sk>1~t &}iGH+^ƖdOB٪GX- CMwpOǭ_pKۗy}}KzkC`q nPl(xg#!w8PIz åp&^́PWͣ !"!N)U Շ=sI F8zyȩc >RMO#>b!}b{0dBi05)ƠRDD2@b_8O H5K,zIh'[1sV9zkwH@ңxxk{ B̚@pc}C9qlAÅ@"]hcw!*!;v$ѫ{Gm ?&Suu+=,3z~x|v}Ws~>Ksǚ Ȓ s@rG}!zw8`F3{ D1PHe"Ὡ!@X/df?9~ iS׫u -RX#;Ϸake$gb&} !"ñHc\!w8Pߪn;y /hV o(5 7Cah[dRӹo򠑅>6Ҷ^\A]#1)ީ^|N(El`ScF\v|D=T+ .E#tJV' `e -áA,m@cAgXI: B|E5fVd:b+81GvG'/G/~$˚#,}b]z(x=-~A{]Y)j.x ] Ck k:~8.{ `qF.4lʽu"yU5r/g9n_`4QF:Fy3飈k')8 ?EOR\&}~z,| s}{/ǐ?^ԏ%dlddm=GA ۼW<x O9Hm'>h Q:|@dveo^! цϓp=}ܛ1v#rV'E[>d9F~= 0K{O. x''Ĵ5jȠC> -*/T`-v68.HG!>R$44CYG!6`2L/b@]ѣ+ ׏ura}oͳQεrHcC`R0 tnQ7jj3?SHnz~ۦ 8#@ڲvu#їՏXG~Gc1I5~a/Hbne$w/S,]λxHӁ7aȐÐG C`Q gJxg'7lk61Z>6C: ,}t8w##IQu4n.?=M ?L~k$D y yj]/dYkǷ!7rXiƐ1yGxHwD2?ac ,SVt+.\Oc(D ){w `xE%DVk1a=q,[> >|mc)6?CQG#5{Oɓ`,9L*N^mֻtI[Q➹ K[RxACa .w.,RlĚ2 A, O˾&DuQE}{;S\G AR?^GhjGG+ڈA 2L,7m@$Nsy#JOػca0Fi7o%'pȅ!kRi —<`m Abl-ʅ)QJDIIWQ\śO[лnؤ#)8݃9vG|$MáCkӹ ?:ߋgE89דrE ŋ'a\ iXc"ȗ]`qWruw.TZ :($&ST+Qyw8fה:)h4>Tk7)!9Hȧ#*N%q2/M&jvSV0$wq1kw"87-|B7ػa E $/j5bLME<?N[x/R״(r?AJ)zɣ3r;i >"H|z1.{n aT­\Q+F O1B P} ;_Cu9ulأ:ދ@[~@>?~Q6wpУ>q#<|j#-" $X10{x*}Mc bI4yk7wa䈡?R4z,ȸq\)#?ʵ%~\k:y ?n4:x:vҊ> $=V!a 0-]CxU:S[V!+y@x p<5yLh9tG=㜆 2?B9ӝ#~SfW! 7r[m0/,\qb~68&{wp @V'p5GpWMAҨKz?_vrkbǠ?rK#ITB15An|~Z H!e)atxzw8¶o=>]_ UuA2^rZOsQm2~7ػ(OhVm崅vNڜTz͢s@|*8Pqq y\o9hS;bGGȣGG>i"袏qhr H=Q;Q|N S@Tn}L_@8x&!s'C A( èo( 6+x7j*"8po'N4?S$Kx5e @q%H9 yIqG,?;;<#^ @G-!> w8F ]xBXF8&L:I߯i|L.e7rȱ{dYaX"DTDAS7 GS4ydBVY:t}<}a HHW\W- a_id+){w0 `N:8-JI1XLMyZgЩo?ȟRNu?R1xs/#AB'9h?V6YLp?z0-Sz@Cw"7=0 a<œxSNNV?y$~? D\_dn,bk$c? C1l"Hꜭ c*HX=֕/  C"OF!Xd|_P:t ;J~m8q̑LF :B| !eR<5doLyG?$6^=]Xw/a[QG t#6AZHkrp[A @a EWJݠt cr&&y@Pt•/d_/)+k~ ,)G^)G:jc ATDWV?"|DTM^6c3-|R91_FZ'ػ[a -B`Hp.U!FIGaerXBx @6pϗ#tdz]x9?rE M f\颏#ԯEm&h_;Ewj+ 1=L>AjǯH-a￿f`Q08 YXk_h1$bc)6U>Ȇ]ymU)Ïx2iX}?7`[ HS=K#G=Xj4bw<b2ݙmH#AKA {+'0 V #w" 4{ ?X8znn;iC}\~6pŏ[ȷYGb <2g'3y#ed>>9ȣ~LkRŏr/7G@ =6458jixi|@ 5"ݻ 0@Q(Fdcfa;@|EiXJ deWI}F$.ک҆1{f~>HkGN^ď.،}JIywlSG K!~NG4BZAj*>w7`Fzф܃eJC+V^BBJ'z~oĘyQM)r1OQ}qGL ֠w߇n{G+vG=#Xk dO! %{w EQ4qqWո]XH*(N3<ȍ1-wLP@{(e#4Ǎ(#{l'ʇ5hC}6G~<_wѥc1YrhdXGA h[ݜI< ^ƻI uСۗO~u917xyW#eCHG pj9?RXB 1lAjAYk)䨇K P- >-Ul!uR8C$8O's?Z7Gj>^5z7X$At8*s vG)/1MoGػml3?z.kȣ̥E'c֟2ݱ 0.A?GZ46s x|~^x BQmFg ʔZ3 } MO2͐rǸ>*A I%s؛@~yX<وC q<]_B m gQ`m(E Dd:HFUƖ) x}%2?~1Ի)Quiȁl"Y- Q#8;J?- O-ݱ 0г2Dj`!0!E=,8?rrXJBy9|oݱ 0@Q"?0M=+.W.GcU#rsx>9haG:!T6"\a]<*wTZM a]x$00P0vk^3)E]1O𿿆e7wTwG\S@ZGn)]1L}/>Ǻqm)Awi:8RTe}J2N?l8bKBf%/ػca( q 1 R7s&x- zs5ip6϶Bl#o?׺#BR }028~dc| *@.xnἹ#64{}zػca( ] up#k,BrDS.Or8}GD,)rR?i9 QZ[zx" $wh }\ >=ū~,h}aw)@F'VWKxuFkk@6}?tպGfcBrϱH#"vhmڻURC=r^һ'^<,8cr;a@}A_?OPDkzm2 dA=هG_;>$l?1UYU [O}"Z%mZ;Sd5[f|1\Jm\~\WoZL9}Ĺ<ػ ã-_bhm@~|_bxc6F s " VP;5i'呥_\c.(Gx$U?h=xBY A hZG!Bq'PQO |;%ZZ5Q1Geߟy&{w PԂV_T#Ș@m'@r >d׉|=N N_ۅi;~ÏtڑGn|iW^01H.{0 CTo2MH`J9` /oGlA1d3j'휇LUh ?coFZu&әjog Q6VZ=g?ڲ|Ċ3hG|uO,d'[#㋨õNػwa k ?( d$:V_55{;t4.G&g-kaes8pWl^F!9A"#rf} ;6[Lw*P@զg2Hj ItyyIʻ[) ~Tꨂ%,ȵ@e s8R5ެui۞0F 0P̀"+vWx蠌0}?Oc~][>G)e#BG5<]N8c48.@yh3oDxwqrurtr<\`EssH H8nh?v_t0 xBX7P;=!?ᎅ){w Fas6ۤ jE?l~ FF>48fP4R?(p7w5;УhE6q:HbIn$Yͭ,gVlljk`ԺmQ} 90I5s yN9xcJve.w^X_Q_Y},"2ô71j}ԛ?@B!Ѝ! {gA 05t Z%Z$H!HJ.EQ_Hͅ Iw!ʜ΃U:-=-f](]lDE/Gz6}[WUAXŸ+״}LLLNc*=ڹ6۳.^B=f 9GV1H%<`nV0 ڌHԢ+iDЦ (hӜBB}@dnA؊l<v $QH;Hk&u@_nidǦ}d?hG@zm}SCC?B߃U/e&㑬SYͣFrA< _BIjABe: w`nV0 \PE]D벹j_3'NBBp!!/u !|KЯuct7~~iҍWTBjl+2~ÿAP Z3 ~GA0'שVgEU={~^ͺuվ :7Vo~,}_t9&t v ]3!7{of1*dϷzf0Cs9D?DDr ?sTkGݻ 0Ј]~gяAP )IZAs4A6 Ax;"B_(춋2^M!pGNGNG6k>;ms]SkMM4~TX $2CY%ȓ6H5z!$ͭS]a o X-|t[_F- F&deP?B\!6) ! xD"YNZL^M, n}mK5U!Ǣsbⵃ4c@jVoCEI@*?hAPG oW ){w0PtB n[z;49xb؝5d )A"|o } Q{CG"Tj!fT;E4~>R1[@)fAD?Fʹ١7+a9Uuڧ/w6dvG1 {]Aj{ֿc{U[AH9Nq]tR XA(!ջ:x@޼ې]ahĥࠃыBEAID) ~oܛkH^Xa:BmBbǦgԝ3{^󩰇P w"}QN*Q^,Qih %j ^~+)cS!XcG'2~XY~U${ BKCCs/>C/SF Est35#uק ?z4jCs?N IzvlmJ, _ !s `Hďx6葻TvلqNM.>r[NC. x>H+=`N( ?"oܼ Zك=XX[Xf;AKf,$$!THF9Ԯ] } Ī˯Քjjy9sHEX/ֺV7Ḷ7/clt NVK @.UX10(Q_ػca(YH؝9'CxgFؘ@HyTP#v7 kY0u\ <զn5|(M#I~q?w*@O]]7G-|'wp=$iRT~^r]ڡ7j=$6-2}>a$o9i-R/Z>Z{~v`G } -ҡ_I!']o Tl׳p/tR7RCcN ߦjcؼ $VzhOap0VH͸miG]gQ0Hj+,p-f5%\owS>mB"5=9Oػ{0 'h'vvY-El\É!\@b` "W2 _Y8a׬ c$ck~MesHlo2Huc m I5p@bcvTBH&vͱS?wgv cΗ[>V?TFw.*SuKL\أr4a6oT xݛ a>( "ع 8[8(؆<]r@Lay)QR9CIS?0@톐z?Qs0Hɜ Hu,.}w|0MF*QɅ@rH"7x4 Q>E 2S1 eى 4@/N|T&y5}WU_:ǜƆR|F0Dmb!^*έ y槂=UCmK;_v?x96 zuꪂ&ѳ(Sa #HHFs \+`HB N)gV4i; }Q$ f5My}V[jcS'wjهƇAZ&y#=( R {ZC b>I2폧t\ [Ja. $h"[~tAMaC)5K0PFBt@"b%98ϒ*WO?^JZNtn;*Q >;73v_||KcǬ c"T=R#F#ǘ Sv wpt?r`9J9BHR檲=}-> ;AzQhҲC`Ơ`&`&D,TH)HzObgmxž?2/kuV?ˌ*dB0C9bPHv9^sT#S H~X^n|rQ})<FZTcݱ 0P cvb` a$`$4|&{}Są%wtؔvW# v-$jlMt^VSl;|۫G]s3zA=[:DcG#zFx-j(\r?0-,D-Ka#B4q 1*$d{McHH_'2?2ﻴ.f(1O-Bޭ{sFEsG˺cٟ_@j;C@Hخ Q$:C-Q g)vt<]r4t:t ku:[t} H!{wp0 C4* %rQ/ c}&DᏙI 3{ZkOsz;g f ѷ=wdgFַ7#Z;RՖR۫έG30H6$ӻc`Q(nZ{ Xz `<:Z L*a" B>_~~," dBj{h9e^WKhi _7?o6|hjG4kxm ]B[9֥t;](24ypAz 59!X*qBxɟIa7>t6u춫Fz=&Q{RYy1]cKnc? R|>u@0Ў b&Η[\+ a u)9f ?CW/ػa0 )^\Ap^^<:(C"RHi)^"8=~_hhcn!ZcKVHM4o>>Z0!@Ho$[D5 H(=G6m7z9S F,A]sVme}P;AT  P 5] DۘH#KS}q. o,nGK=z_&^'zk}QoT  G vHk> {DKaްZ%9gτe䐮{z<_>T؎D>6cmO?>Y`* |/,})b#Z K5ʥewY9fn:(6=匭}mY/垹h<_2̍{m)TZ_ؔbM:/z{Y?>jzASA pqqpW76TZ#uܽSjqX..p VjCL[i;!=طwa(  ())Y Y%XQ(L9]_lKD Pv >Why=36Փ8LPHkc@?2~CjP ZZt܅04 _̛S(;FaBGW [t&yI(|"E~l4vy=#\oG. Kk-<PiZA- ֗{2O9x``ٵ_sƼ:! oػ{a b*$F`` J&a3ƠCENrG1{M$H]Dʧiv(9^1TF#;6^FcUg0D>^I_!s'B"]A"A)@"Z@d9sU9O|ڸЮwwʨ7fZwBK@C}!d}dZ LXZz>[)uODAqt9jZj[{Sw6QFY8QP9q0v{%/B( + T+2-{ku#~D>2+@d$@V9~3ȵ ߆ ՏL2ȵ9*a]iZȠ;FAڎNM^x GoiVc} 8c]nG4hѤnj=Zk+T o9{Q<4}n#_Ԧ~Lzw3vH ?2#}.9M?-v,!<;lRw- 22O^d %ೖ3Ya pIovoǢ{hE4Fs&_qjaY;H[M֌h^G ֎vٔ\ Ioػa( 5r֓8#8K0sxb_|߭BI <X<}5B=6r uz/Ucި `(,0꿣'HuȮ F]={ w?!x:2?z{` l#{w0 8JW^QݼG-IWG24P/?ti拷3 )5| f[gG;L[.?[-jY&ZsƍeG~J!~t:!xvhjK؆A(Mj*t SC̕})J^ $$\dm_ |lTqf Rd35Keƴg6 %~7DecdO{ OJsF!5ݻ"\lK0 =vm,@)%8#)S?SnMvS8 ,$N4("(Y4'"xHG2& 5j sx$'I=Oj^Ytm3oE竫gݱ 0P ]Rd`,b,2L^,@.Nx>nZh?#Է̆?2FZ+Ǣܗ#{}PPycĞ' ad!? PFk:@3u,i[7/>@_ػwa x`o()l$F!x@BS$R0m=ړ_tڤGt~mm[`( : ID1H-랖0㺞 3J+yO}[MY>zػ{$( RhgARә[1o>Xlˆr\CF1$ZWsk#W? ~@O?? fwFh]n5sYK?G*f: }n*<}κbn+@j n }f/MQәyI<˺.u gdy`L7=wAno]A }|j/,13։#AHtoչ duUFgSI{[OIA*SzÈa2_YރBiҦJaJMxݮaŎdj{qk$=?=V 2Ndc5}Unf\(R]iNUos.Xrp:1 0=FD#:vj{&,߷%Q_h46Y;>jٸ-֜}ZEkjGikYM4, #NXKh}d(#JX3>H;ڷv)dzξw6`F f11+ {` i#9G6Qir_Ck w׏?jO'H  >Bn4BҞJkGG W68>wmcZ͡ UShjd xQlYdn[?jQD4舊)Oo)]?df4G#? F"G&)uwbIkRZeYI]XAkC'.]:Oй/#t%jmA9r!?'?2?@7?2iuKkO0$NT7Z^`:CCX;b2=jz NB"e@)EE[gM\sػwa t!6ej_ 7*kRPZ}!Xq^, ~v Tu41{j3#FeFeȂ 1q,ל j[kz^ӿ w:P@q2Lq7C&9+4,$|@ǚ.K_G~43m  GtVi5z/|'9ZkEFO$ dD{${C 3.zyO>׋ i ?ػ{ H!e rOaFHJAc p>ZNhѺv/Qq4NVE&}+TKڿJ- {B[@FG6+53幕[7}7}f/I;a VA=۸ҭwPtRŴMQL @J&l ld|QwyeAڎDqm)s&cZXsy_I`O}zK*_65ħ>Gqzj:~d1 fyӈRU]Nz+*סc=zRzJKn28cO:~֜oC}X_H %꡵4aa<`~R8ϼZYmZu-ZHIunM!Z3(" 1gE0K Ci1-?xHqyEa*Lcr?35 ":[j:دUC U 9^\//2Uk`j-5MpDZYC\>ZLMFڌڍsġd㱹mtjWgKrΙ-8m$#Bi}n LTp$,{w0P??VSJHM5fza*OfG"|G]꼾WHcӷSILĈIJ8L y8Nw.c=SFyg㟂$uG6\k>E"WB3a.Cap"6G`'sJҸ!N@I_ZCA!ܮ `^ho7Zc #_۶o߻_{w+0Ǜnnm6[͊XEh̷>d0?>V0? Ύ^hZr@j:Ch)5 pF} 5r)X4tQ-i#AҚη1jax}v z-Ǻ_ 92Г^U A0žʖxcyz;^6G0G[|[1Ut-mX k!ksr>nJOzC`15u5qזY# ïu9S#ƌ7)m$>+l}!a)S B,11 SAr1D -ta!0Obb'aK+'qb8 c?D yvc+rMVX|g{TPa;izx#)E|mcZ)^SV8#yF A?j3tLu账d CCo' &J2pػa ÓWn];3i'hMEVT o4_p:=^۲^;I3-M϶{z^r- 7mS<3F73ILY>kpFX` jVkzU",jH+`B.p.dQk2=D[=o &{wЂ0 aՓ/J&A `×C!A^kxۮ7 zw\{VG?D"JX?ޟך(  ]sZs}R=D1,a iHx j?7Y #-g hDs)1kTδFm2gYQWbRsFTWXLu;?JH?!<`Za0 gx*WIee >'VNa!_Jvٽ >+~^/ sl=s5ƑQ$ ~n; !35}6fQ(]=̤caDqUvMAEUFyS:sFx|Fҙ'stoj_Pj3Zq;I!xpd0 `_k/HM Άtќb|ҨN{ i߃$#{w aؤI$9GLRiqy(P5wGѫoE*đ[M834#x9gޛ?󀳁o?:ۇmϮƩpʩjx#c8QE Lqdk!L./&J,w/;@[ذ#$ot[.a[E7bCxo+-s7~x}JY}^c/xa ZJ>]STDޅj3la=Ұ:u2<B-xwö:k̇jhcf2斐ʞ~XJ֭Q4ZHa& |a;a0 7uk_EP$F/AMSu98 @cT+9W+i;:W+hqG7m-L>]"A#]}sIȓ.u ~3$_dq1Dy$gC!.)I#~X9E3/[ ~=A5`"LEv$.} ݮ CavAiA>ϯMBCpMt9ކ(^>֎}:+}-ƞ]@vgH z 1N9X橞.c  nQ|HFede`2hI@ 4qr:}v$dL|Ŵ H~]oiiKc{c`Fl!u>AqjC:pG 3<(k=X {8U}PV)IW^Yu/ww+0 2oI ">g:C^>FEmk dL>LMޙrm&T }xn9 %OI}FL*BI狕?L!M|2FN #r}S)&`u7Cda衧BamΌ%t 2 ׺C&=s *|Yw%Q ^gSnZԶ=XCFM ?=#Y.$=qĪ |odZ3 hM@G9t)q;4u ^XŠLXدGOx*rcZ ޽ Q*h9 BargV|rjVX;NG:)_6xQhVtxg8{{AD91gycИfcrgqL15~"ͶcG޷xi}N!tv /B9RVOĕoe]l[`7nw-P@":fI>9 }hDJ܇rϛ픾* ٲyt⇂17[}B uR<$.~ёKȑ1 {D̺蜎PT4i|ie\j)ΜSY@8r|E uMc C_C Mnq;Za:}v̶/9dW|qhw]}@.ۺQ 2> HSki[j͚Y3?;۬f_ʽidgi-Q@vHoflY;Q@r%eҮ H;WBI0!?){w mkZBC/ETLF^+ 7ZR 2?EU?G>]X-<ǮkޕsZnױca)#yL1#%u|nrFF1)I@\.@^G?]q׊U@☌1_".FK9.Nk)u8Z]-@ QD욊 DW EpS#~ʌѫv>'c_z]ޯVv29d~,ㄣW}Y0ɨX8,Zz/P1$W+`va9KE/=Jń p%SȬO:cjutqTcߨG<{Uh=ֻy~CGb .STcϹ ya|ڢ 3s }tU@G  Pt17)/`b?blgS<$8bu_yyP仅S tpn{ Z[E"6A(hRH}96L&jV?1{f'tr@S<5 #;wv7" C;*&z*C4FkY#;S?D}ٿD[w( ~XSt[`@`+PCҲ-u/VsII%}G%`(_yT ݴyo7d4Sw26N?}ƒc$jHЀlB+h_KDl{SLYU 0'qinuqD s};(AؿB oQCżqt ='vL0̿kL@Zd8Fl!_=};6a ֶ66]EiwB\ طomp "* +:pcb'w+`ߎi`w{$pGaDbk'vLk;u6:o};@o@i1CطCA[ @#qbo$ ~#l9GC]&  ;H+c8b`N`ug1tQi\!}'vBe;@ⵄ u:zb.e/8$31 0.xǹK  ?:ŭDq` $ gFɿ5 $1a1auu #9 ݱ i( s  - eچb؋!s "&܁ 0~;n-$5[>3`[OcGdKطcAQ s  ƎHKطcAQ s 0 ?'<c* v ?'vL pP(LطcAQ s  lrJ7tQA2dq)@LV2S" {L]hbt聮's_ /u l;o=%`.طcAQ s  Mc2$TطcAQ s  @tk") 2AIyvJ$羓~jGGUmAqL2 8@I0ald\i零a>T҅96Zw'!s鷛I庽S㪇_ѩhM^wtuZYdT\hO5M\4q=CW|[d9ZC=}h{øc\{ ޽ Cq9f m5Ê}@4u`ί?kkjr כ$eIV|#kt> mkk1''ɐ?P7ݷiS@8/;C M$(&wl* f;U xH4U WTLsz% 5nmyi%psֲGR}ػA0 Ðn)X"ys:Jj}|GZzĜE>6oQl`#qa؝\Sjd['14@MJc|b(p16JrQԋ_eA{^1x3 t']Cg_̬; dco\ +_a; *l#Mj{#rp5=2q浍,B e;_GvmwZT 6 Rgj85Ѝ :lEήA g tQnsq2ϼuGλHacPs~ruJ e_]QvhukW-L(,I*UC%*fRc:nB 2Й 鱦7$S?Pdωr. ]#@ڽ.}ܜz> aĹk׮mb+Lyv+t[}D ,YD9P9;^82E׎cG ?LJcTF˵z7IQԿ`0Sfըhm-XZ2@I4Gc0CJ/s8J5`l+˓ޟad5Fw bF5[7 6470F%N7Z!= R[F9Ff>{QmA<5zyη7ώ\}]yHy W틔m;ᴑ3}TC3z}p3x΅S&& Yb:Zr%J!ͭg{鳎!aZwiPɮb wZPL.4gZ$QG b {| ڋ9v׌hHNxe+ap(8ɶ vRG,t'懜m$*+"޾td_ m=6K!Y#/wT]>5{, BGf,7#HES脕Enx^:_o҂EL y"F+|\&Opy.I?xY(@VQ 0[sU1۔r͖hRjd%<:ik{'sZ};8B{cdwJ?;jA04ϔ(2tiSo&M`g$;^?!K U9nC'o8 GVVMxm 9!ِ>%8q#}w4|hόo|Z>v%D7]e&Bw.5H ;c =EȴYX6cAۏƋۤY*عLG]{DbNXkqfg%lO[idYIeM9RmԐ< "N ߣ,s=UNYz>ILj-$XA]_9|\c[T$;}^ccQ񦄸K7|D*N i:ksYAT)(.Ժ[(s@L[W3po.[\r-9G]9G;T+&c@l$8v1f(4k ENӾ8)$x޸̤u)K4/˧ġ,nUʆ2E $Z#cɛE"IdH7r"n48ڥ7wZ{!CMe#v18j,t{2{KI :$yop~_Ǔ^s{َCmAKJ*&>O/;} &=$ F1aE3réĩ":;HvfXkտK1W>U lG)ݍOB+} |ǰi}&zؘLce*#kĢLYBĐΏFC`䐼H-C͝$7rѽ,>$yu|71ors x)×>Z eGQp;vovMWǸB[m7a@*UW)@6invv7XH}#! a܋BM|CYVEI٣*.tEL{ҡC: d$,ZIIki0LV;ɵ(!ENgSMKdmHז"'i ku#7()ªƵlD_1#6Pkgn Q ̔S@ѣB6ab7n`w3ZP}-UM !飨類z(OLP*d5@̄F"R@YLk,KkUKw[X{k)c0ho'@2=08cuקi~c.?  ?;ք N6 ^JJ߳b[M--m dv`~ 3 Céd(#Hฦ(PHCi Q$w(i#:BlrJdlMQ.Fnh[X؂}{$\*HF#cJ􏠟I"?0KνQg$2#NdϞ2}HWI c!gG4{L'V|S2X3Nm'tDNR 1$U}N:{^(利lsy9,tf[3->`\V(:CdX@۫Avo7okYpLUlt~ )lSSYQ),P^H|;Q&2:ΩXBO 3uVXఐJ֣x-A&[ L W !]L$Ĺ~ '5-{ڽtr iw~- P6a ?^Dp &Mz!pF{I7 ܓ s1[ Ns>Ժ8!vPZ=8uKi)D< ^,tNsCNںb[+XZZ _խZo)ߐii JT(Qޯ{jMI"z>6s #)!EbHL~H!r"|H95o# x12οmf>sn[҇CRMzV }SeG.{(2}!yv8p8`P"H=*g}s3[3\ k ozIBH{]J=5mۥdx߅|g7C*k70 sMؐD )BHil z hFC0S-=W 'OM2Iӄ#cx\=zεCCN*y x 9!'y$h7! U=1fd!fY~FIHD擄+q?6Nw*z]Иa:19$N Iv<6Aks\ Bziey/be6Ֆ^Q>jx8ċt>2>^ϊ{LߣHLQ,0S{{{\o+cE50٥ye%y)bT<]bH/(A<m[E#5NJw/kw.; @OP[{,PAT*U'N&$) YڻT>kX;hk?q#$ M !#R)=G"y1UH%L{VJTxR?]]\.#s[MɊ"QrG\/DJQj|I?8RH 315Uk 'K/ޏ <|=|b+f"ricc~i8Hy*;û&0 #=A^}ܑ UC}i۩$jN|G's, !]Zt^uu㶡+OL 9 4 alWRu#PlT $1]+,5C>cF#mV_BH'ϺXW.[+|Lࢇ-{pi}x]Zɉi*R3 u&YX YksV>&`\\֩3Ml@!-_yBC:>!S)MrZ:xJ ݼ]hh~.C r?J  1!?t5O‡O)\%!:)z\BPꭱ5=#dU5Nm]SUiik^%{~u:~*Xb}L xNBH[ !~ׇdsH\/B "mwz"si)HPBb-Q*$8IJU y8d8 2,EBIZ-}R;j[ x+-.v˵nlx# r̒CL)*gAM %3f ~ۨf+Hxԩ~e2vL<ךL{zׯsPc< d|KȬH|cB@ W'lU$}!@s!>a$畮 A᏷^;X AXE$#BZۊh$tWm[3}nVA+8Z(k˧~,F9tXq& @l07[M_sc x/\>ؾJ[3ͱyM/I GJ^]usQnT.Wm$u!]lc,y1lB.‰>Zyvqy!vK׻7z|YSY#{gϔ0Darh!vY9l3V>$d=g_ Xv\YtsYB<${D %#Q^Y:*q3k.~hh}k_#%l`Bq LPI "7ƅr1d> r@LyKqCׅ˪m"k%ӱ>nGHN"{VtPY D )CΧd-zarxcJo]Rf7븐gT+[b5eU%I.۸6>#S?\]k#uqo5Cmx}GD#{g0 'NЉ^7C㶶IҦ0Ѝ~8 ɁFNm u?}KSa~b,i֬EO#fڄ$JgRF*ѷBBHBDґ 2G,rtBGMERR/ rrIܘblQ-j %8җUaQA8:27aym%F(jY'R3UAC[kŒemB߶KHk± 9"JVٮ/.t=wzm`\ (r ҊOt{ ~b?2U?6 ~!#헙Lƾ 6O|_J]*>DfJmMձ1Qx\#ÇٕRH$G1t+lJ{Rj".6nv.T 1*8N!umj ;Y{8?=,!N_;b B xҋ|EPAЍ&$m,TJv7n//?ᵏ;YHBGK, 1qlL%zPF*E*4CK*%\\UFPMXlVʚjsҒ6r'KT%d7oƥbɭʮĮ|VZyb}D&9Y &6RRh#msvABH؏} 1) >X5~~x@w7zv/=-tcIVfb!~DËRINzM*\"[YQ&/i ${Xb"/<'꫟m\W|kf6Ժ<]SU !^.|'i:7 I$y Az@BdL ǔ2&l!/_w; 0Sq؀xwq@Ƅ(Iکߩkɖ3=/>*0>: 4I҇BI:L۲pHv)ǩ#"%|. jٕG)ztJGeZynjI>;|,Y'sZkvHY_\&H*qMYK?O$b "Q^ǔC~CkH!$:zC,!DuH\*ŠAC,tKpܟ wOt:t8?G9c>kUKv kq#iDɿ.}h)Q^MRY%{آ2*+]rfH.g؞9~/]#b)SAm-߿I)e6ʡNs\bd/aYAy}O/ki9 sR N׼U)"،iO[~p'/';:!h@Dxhh>y(h-}0*Y 叄IgDrPT-$džkRZȏdUZcv|2p-q4,ߋ/}$ 'rHC%(/ DOQHސ\A8{`dMmtԽy ~ûw$yxRuC+RB$9J1Ror"+}XJE{;TtˋI"AsBT3My)g SV.I:tEdԾT6%~H;!.fRxJ 5MDz?; .Th/}+ Ewힲl6 &=!m ] [h9n2^hX-KSGelV,.|dQHJMc"c!IMcQ; k~] S\[vVڋ|T_LwݓEsI a8!<9d\~,d1DzʼnY xaC ̒As0uar٩.ߞh{`_(AkǮGaBQ|Ďq֖>R>&kGS$R/U,jgdjo\T RȔ(|N|l,bAu[!dMRX(g^ !/4ď`b7qHJt4Cb7 w5ѣ!$k6A_c|3-vZD Qڇ$~DBI$w4D ޡ:*z omԽZ<׫]%1$M I!E!֣?ޥ5.s5s ଦt;'X#M1} >+DnOz/;a( s(c*ɚ4iM΁-Kӻєq AAAAAGޗKJ熠چ 2qv߮0hɡGR<*n 2DD~Y.!|d0HX{. t<Kw-M"ʊ~1%ugXP[YYhnܙ;P5P8c@οs u1ar֏dͶ ӵS =jOt|7d9}VW1OeS )D|{̥#8ھ!w\9?V65mDInq"x,T |Ad rBҔ S} q"Eۇ |Qz{.Φ"~ÏdXI uJ,gC\=Q/ђ>|ɘaaIc@<];5=}P/fߣsP[{/SB\lSSƼz:ZE%OAxf/+r3{sfNbGwYIIu"HJ |K:^.wibKy`q0&Er ( QҬǬ/"Ak Z@i? 1|,OZ *6?!6. ><5V]Siǒ@r=ORiǵGkhD[PKn%$ y}3Y+Tkk" 9S)VRBb)Btcu'Ks4rY bC"/H_MRAD e9>ا0¯l/GoA۲{<:8KC/rGrM<٭"RmҒiYY-MlIj.+IGW=z峾*3R2;Mc o=_f)DRA&v.1# TA晤AX T8TEPCPZ\:FI df'dJt c-mϧE֧x$Wν"F)aZCxbO ɓB򔐲}@NRܜ bs1$}VgD b Bda$$; ?QVas~,Vw\HO#c^`8&D./>lXE:cyb{^{U3~5;#$}RD:wA(/ &.mD\S A]A~,Iyûx;Mx"{經@ i1Y5H5x4* tGzr We 3|ѩF+Mo7a (=by#&*%,wzl"R#}BdD aoeV=A83Ii̐//?rz{OJG `5Ԁ<^lfd)oTX(@D!>"~Q2JXr˨HMcD#KNo9n]%gI\\Ja%|FGdXeש(-|ڐ 6G &!%OtEOZ~46 KK@]XAq\NQk3s'hSBs 4ih7AAAAAX޶z4_ʀBИ2\3-W:7@G GzL6ljRPa Ͳ\'3H-ҚL})0şG it,;=vJH}MO)addž߀}$7d=0Թ`l̈́3ُbX5?hC k' M M-@snZ|AWi1Esl2+?M؎M H ~&׺??sp~g@}]@{ֱR5jjNki"I"&PX̌ԫ=b`W iw M ]ۥTzEoZ ҏ;O0Fm+<*T!X1L, ]l_'v$HA:g#mHm>n󪮚_4L :l~QE6tf͈aͱ&bxB-|ǽv)c1GXj bo0I._:rRi 4:msOq$|8o\*bKĉ 6 D#32{uqH#~S-~ ߘlڪO~[sVO/µY;*qdGdK@cM}s$鷍 sfcak|ޗBF[B\2.G}6MQ|D]Zo.R϶Qv6#cۘ rwWϏ84qt&ɓ'ŋb6d7IJ-Xxe2plW,;l?fM&lĖe{G9LYHa"bEM}6h󬡙 "'VYqYу&~"DTۧ6SCRbJ)d>h"B m~-1!. ";OJPۊDt^mXΆlm<\p7&ϯ>Y+cO(‡]W%5ũ{>v^S/ !Z' 'dTZR4pSAEja< /D|A\LrվΩ zjx7?=~;a *C]B,Pa18qB܃(딍cD;" DW%?x߻*+||2-1]=$Ql$Xib谥(Iz \C $$ّMit a5?$Ԑ)$6TQ^DmJ'S&S9;(ABGKAL<9mvzS %7wlzD~oMD saI"~|qFק| $CtN7%[rKY_6^ !"mGV#]HcK/[@Y,ՍO=>)&jZMa̿Ǜ=_ϖ=Tof@\cdg싩'3Kl_2}|B7eA zqQ/*l7:bCX zX+A}Fky0:؟vu#Hk䝳:uN?%`*|4 qtfDŃY:yY mދ/|LHf h}Q#I0ٹ#}pnl2HV[i y" Dᮧ?6v==A z-׋O9?yN+_`y0zvRELԡ]:HPuV)Ns&$QH}UʹyۃE-6~3 $ -?sHL/~tHFe6Jᇊ6ʤp4cӲKr2/dm~| g!DFz tu3 *|4vr`cM 1]m" 5Ms{ _nI.2R5py/o2#AH(DcCbwڣ1ak1.%!}z^,zQYlu5}\'"}E΍ סƯ xXk WʯinVR6k_Oz,e*-{0yAMDP$BTxI 60o~ MbBߏJ_M%B%{RHugyq82%DALMؗ R7~\ |;vko]gdrI8E^j 73y|9d,t fw:2 1<ԏ]3.HJ`4\v3ďzzi[tL}?A7= qϑt1Aީ$HA4sb5"DOڸpSRH@=|Z@ׯrCf5a 7Mq)}AܺR"B26?sgnҨ(-MtLh$|g>?sՇ~ZG[ȶ~5\W } x-q5jmmICCQ&}%=WCal$\ xY)> "DTQZEρ"7}xVH*rx>p\O2e'lx,_wƪ P}(ҒB.) ˒,K:%lF3ɼ[ҟXIuW&R(vew3!C $?T?2Cďqڇ2w(oI0^X. !r CÛovsX6 ~:0kz ׳֎Ew@Npޜ(bUw~Ycm-՗6`V(<%HKE‹;@rGD$h?ArSs s52Wh:AW q17bbdgANEhuGaH</$o߈ NEz.L,ڌ7!{vyhuw*E%y%CL=߮<>Fv`6`lV0z3AJ9t/bq׉L~T+U'BK pԯwr>{"G;׭N5il\dF$azl.|)~iH8tq7JYS55T61.Ϧ,t!O@V˹zh~4:!Y@K鷞-:Y/_D|A`ߟbmF3%M.Odyk*66ãcdd<.jԏ'~)S#~*~PoARv'_A/wX'+]@LHg]2DI̝eّUn$ $ DaTBLXQƝ UV.te"(̝V VcBrΦ P: CӋϜۍ\_erVvHF7.I0E(qaF}r8^K\ 8a7l3 dw@V)Dącu]ALغ^mn5۞o1㇬0`5/kFZz2>W…$,vtbV 曮qkxj3-ap5X_;q5'HѡH>y^)WMepSamkApP-:N: Z5MR $kz!,?I1:H@OMGBi졧ꩲ]zl4M6lxf&> ~ ]+Hb: #inrY8i{:a@dc(/ew˭跞>t#"ej}V!*>CITs dIp>zϷ ݩ QfxLaA)6 őߦ ! J;i -o:X=H/ʗ$X?ঊJ]|m'|kR*7$tXbwnGJQ:H?ǿ%|tvc;m4Q q?}59m,C;ots!=0w;b V  Gp3D lP:(Ab{VRv?'yz5Ua7zh@ô?4xCH2"*oďyت6g@sƕwA B.x|J}=ᷟ7[p^oPߐu~cy{׷[ybhjS?rsBe6d#B|Ѵs_R6}8 ӟF7>zbgS:êaz`{yu 6 ϥ[@(@Ns [Av3Xi ̤./ɃЃ z;&鮂PBYhO??pϵִsϹvp\l^Bt+Gc?Bm M 1Hh6cʲ#S@V?V:2d9f-_|Mz4Qn+ snF, n+T;( =ugD<t!#mNEDU23!2JzbXRѤ}Oq|3TNKgjb7h6HwP"s=8M'4 lFhMV> fv-TK2BS1:=a%a- w,[]3NAA%5BtTP1x^{)!!{(Mh3ǝ ܶSxu=!a }yLq>c> 3G8y͵v B#\?BD#» ? @RPM6}9VM4B,f[{?c|+HL4:萊7E3Y6Ӂ*VY%ާN!b.$Jr~0)kd,`l7-~xu+c]_H:^)$\ Qͧ̍#W'va~o%w*SScn:4;F4fqj;]?jj>8Ƽxȉy >6Uyr"v湵I> ypom,i+VQ90k+?/!{g0 Ds  0uaaKW %w>tHLMJsg=?  YGy>> # y҄E(ж=& "~ooP2`H[נ(_=3 u@o+^BSoyӌiͰ&PqTߠ9!J=M%جj5Cvr8u L^dղZ)XgOꦔj̐07FTm H>:sHf+ڨ ??FZl-u;ºvKH6/c_>$~&Rק'E/K|r|# Im¨$(U7Mr{Z3Ȳ !^Z D#ü@H?_[ vMRG^u*HIqM"Vn.%=Y`/]ӏ盻"H+$52 97MkL ӏEÔӘRKsIwӽ9D w|~O$i[LCjTX;"}ER:<+i6f>T滝ԏF`})vcRERt?: mE9^)nP[;|>^vqsA: *hP*:AA UH`U$U4K,V'ѺR>zqNv^EGo}GƄEC% *U#Əic9J=F'~SO77uN{CdwxQ29'5ݏ ͺFf"RΗ%;5K%u&Բ v[-&UI:~(KiRӇؑGA>'2~Qr>¥i sU55C`qw&ƌ1Bkwƪ AN X?E`ϸ;{IT>8n-Dv~ `~fy*c$#A" kMe ։ "#Eɲ":?=A4߂-71i#i AX.%SAͽ..[?_i~q%zȹA%Yf:"1h #x|TIՄr7k/77g1_G=}=P=ߚm4nujrufUs!$׾Oϖr{I`q0 ϒ0gugXci0@a$-.ҷChTZ(Id׋v5}6#t%&+.jey2B"#fw@?mƂ]Iߴh2 qEneq4ɻ K8g#ݳuIPFίSyB`qj߯tX5iu.Ӑ)#>2 ~d` _+i䓩?r/X Hul7~$jd&?fyвP;vA8Ԡ"#hnq jKK;}EF-u[O>0e6<ٰG a^~zTC{:a"uLZS?t#Ak.:A\ڳy&]T .נ-Hm}R?]˵fII<XL) Zd\PLnr:)khn}uB=CMp!|N Gޘ{@`Ž[f,UWtJn?@]&A-<ShˈqmH-+2S2|@>䰾̸xt2}z]R4 e;?l͉]er~y3P`{ Ad" $tAvŶ}tO[tn0}T[ 6Iq # /Gk^Μ.r6r[Hl>J*8+{PiqM6qN.8G='IޞNO+p_3`e1TWiqvVfˣ>)8x;՞2N[]5u+-jo_=М~}0xwms\S`Eog<8Ek9o1C[{ǴW,=SU<5{tn&8[]a iA+ϠSSD }Ph~ o0ZU3:F!rmX#^"GX$gm,WUeߠn QlbU,ƞNW! ŢnrުiOh2$5Iw>YO~IbROI\ y_o%묢mk^|?ѴNb͵,n>kڹ{u罦>00'Y\`U"0<;BBz,-l| $ff'$ )>dCrl~ [JsCV7q+?GMϾxTsQ^;yL@>׏(f]? s7u\E[ zn.Mnj]o>u]';uo%S^x'nQLRTa7YZ=H*w]+|/  bLOCT'U|e˅ʃT DbjdkTesY&!v~zZa?m:y;?w6O3s"܍pn)\\vs =]@M!?b8-u(tJ>m]*%aZB!%1H=Z k gg'ژZ;k(5d,a̬SCt@K%amHqB\k"41m)PG99@57?˜Z@bG9mWV|4 >`rlWA*ȍr .R']]ֲ#`ףpdi _/$OM^ȯd9hC\*RwG(Gl>8m!}ϝ"=jRv<EDnx; rىz4 atf`[V#p-'`5P=IJ%**J"M<@IKym:s2Yک[ŏG?\fY.~(RE Yb1 HvERknDr`oYHa',VE W9,9nDgi/LES&?$Ņzq~IN2鑆OEW7 oL24Cb޾Pl*xږI"R4č.кKG/+n8qg8x!COMgKʥƽu5<ș"2A3SUBX WmHq\@n/;h<;+xMtQ#נּ&c7a ^z4d#l nQHIJldmVo?kAY[mJB v^M"E'.K9o5{4[<\VK$Z.Wz_%M5%dJuj誾fFR`}bj4>,U%}HQ?ј~u2C{q23Y͂/NkpgךфT4Y#&1̑A0Eaąq Y.dN[ML$lllmG!j~mzz*| DU%r؜Z8w =Ä!]xc*d#Q!>VA.r[kɵ3 p},\6u ZֱXZo֑~pmN߀sƄbPɱ%şUQ1ǹ8'(@ctH%d `Q m3bxVָ6 cnt׽Iֽcst+1'wػca +"$ߥCJ䒦i-R|R/Go]_-6,1%Q 6Qf>@ʬ(6iDY3sNA.}>t }',NZO}mSQ'Ynw.m]C³Բ6O^|Mq;@(ABNŠ}|t|ҵXI7pa7X_!IV~t@$Ή]YGЇ?("۲Ù@4kw?-A1[Х}!A2k?n%t}.V B; %4w.>bD}cwQcdPvjh2RtvHBSm{Ωug޷:6 e D. LYe%!E,RK'OA;A͓&>9Cy@ Va @lx$ y+Ŏ f~>G},}. T>qRd+ތ қpG;'u8j5NHRe ټiiΟ sfc7K/;{}1v؇[!x?2Qc<0G`nRb0 O2n'pgR6ɴu)>PtSc4dyp:CZcG葽Cܦ|XG7 h|9dX#Y4+yz9?-_EՐem8jOwn|_ԭS95>JҪqcދpHl'~OީCY=rwj~VZsʟi?1t7 O;{aMWWFDK IkTU$vڦO9y%޵ZuJ;ln:-Y}PZGQfssgWl>@2#&z 6tsSC%-F,Z Y)V $\ >DQjɌiWRr;t4%jʳr,ܟVy={y#1=PgRO݃eם> ǝlwkہ~,mbdr`4PCDl(yܫ\^U׫ZI c4`k]2Hkk-Ϯ)F,[iNcvsYq🤛y)tEf7PjRsAcT -E>j x#=I}imyA_gz}~|Ug#nLw[FRM Ya?w5I 4JbOhҖ4Iõx鳱by+voTg:/ Ό ݞ2D~4z4X7"Ј@99׷`7H5sɕ N^_gQ*{ Ea pȉS"`/ 1 CKsw;vuC PGPtM0$u(O5jwE0uC:!ؔZiwsVR\çk}}z~P`U5cjkLzJ`10lla{Vkαu~CŶ|ۯo›GfA hmh=@Zڶ;D9c_Wͧ#FaHpĉ qG}^|m7⏼y_1y'g >&wGtky~z)5cmckE 1׹U.79V:vg_A 0ФqVpSx y]$iU }J.g@Y)_C$)MtzO]cqA>p=cB ?Pl1`>lμM<hn7^z>@j?lͽie+޴ͶK;C 4 q?ە00 !t  $jljҨC?+ e5ijkȦc]%zx[? ,IT5&m/<)b/E|T +ffQW111ݱ/ DnuwW=Y;.!vc].<Eɰ}˃(ks6k.ܦ{ڍXiQ3Rۇ ICTp-5%1Rûҵ~4Fj#͚mi- k&$/_0<`ikH>r/[w dR;A_%zn(q|30'U@ʸ>HDw6DF IJṛ7eP[mzk^XC<. *"Տl>o++רzl>{+lNU auH}KNnHyHI9W/_\/6il=|Zz+!§ 0E'_ &d2)J[p(#]%r _+Oyৼs|"43oa; N֫,7xhb>,րGUw}pugqF4;Js-Ҏ/1٪M5 E_cы-ɩc9/e늹n ?\<~m&B Ħk.DelpIgl=Wu妨k|p6at! <`Ra07E|W $UCZ/2ʾ'곌GaxNG{kCS?u{i-XߏZluV՚NZǩ?X>OUB#=omm|KuHDq2Km)gncW{߯@rS~ysکےR)]NO;AE4阀a$ β%RX l.K+E؆Xֶ!d6~h6%H 'q `6Oـ6{r -l4HdHE TnJOZq-\ gmCXw`0iv珔2򣪶x)`D+G(F^e'_~/;~-<I4WMZyKǒlkZ_w\:2K}maJUٚŸicq>֚i" XK̝KjZk,V9O\& ,5u-صXY_Ud M 񛗗F϶WX$y1oػca Ö(C_wh(8b:%=( {&Ϝd hXS?>=ߋ5S¥GG4s˦4(_ӏbfLMGO7Ǣe8ȣ R'D-h51b6emlrn,pRoػcA p.N 89&Zr@L&6b%Qnt~*? |#UHtb;e3CPkPI;mY܂@ڍTsʧx~X_ުyXc@tً>ڥ2 }Q~{s 3XWkJ mB\*8sԑB74N6m+R*vT$!v7w9 .=Lvj6X \l5wb/|~v9U7XW~Xc!(VakV!]iJw56.HJ8٬UN@̌1 @y+IV&YGwMQa8W6\f%>NPjG{Hf?O'~H֬ S@ުW&Kص s[6e_y tiu7c±Ty7/u.ԿJ&njdR^(]<`qb(gXj:: N/EMő MޓR%JVo~N𨑖9S(`HKB EayBp[4}ym\{6}Tv^x92k~'f=aZ>C&ah&Dz{y )u$UpY= &ߌr|<bv4zaC뷑Bkt|6lHlzUKvyL$!9xT:`Os_x5Pt,sG/6wS-K7aܡsWV1ӭLHq2uC b^P_l+[_s;v=N.c"X.m;)ZO2UyxLy,>ּc߬<{6o9I`S<W*]eeĸMݾw׉[l;وI s<զ2%Y_ue9VbaSWp{a2w?_/Vtqh6,btK/=?ʉ%n)y>lD.DnE$2[iaQ>6x׍g|Ѥxͭ V"ib%|~RjxQsn,P"~]^a vn.9xsjh,m#?Mhӎu,41AJlt7oՕm'S*Ƙ󲤐L֒AU|>* ә&i;a vڍx Í{JLU"ļ6|_`d2/FL͝sXC=҈%G=wB_{|x4._?+xWӛG=s8o[ cVxFcG7N@w(/ <{+MOښmD!)DZ-hk5!&Nhݲ۪|EI a3mƝ /bQXZ[j|/1m ߏ1dpLem=ahfN#Aދu۲ۇ m$ (1Z GP D$WL̠eetyrp39TDVL=}]v~JW.PRuX'R5_~!MhNhb_uһ+bb]' . QpE1k-u?ŝ+֘8\hnD kq;VA8>8 ˸.ғ\/1 VRM+,1X-nы8bUyec 0I>lQtuk! ɮ+nh]z>^>j/o jJ0d LHUefxlcXi_cEi0[6n"7:3?uC!VDBC\Ї^7ΟivާvN.W/pIA0DTd53`V03/"^6"" ODPA'(G8> z]ov^V1"*RIgѲ|,>V`cnh<`P0|.|6l 9}=O!B*aA >U=+FXm H FДHLw@J`c=!.5כQ:*F(:Y)P{Çk-l4<іׅ ?:sc5;a e^W_y´? 2mA q^?8<+5c$yJcy>ia6z|r7#GQnlIe{s+i-c?K:BDO>&UHsL7t/q? Eu sGm[ㅃNr]'=]aj({X?XaR#oy<~G]A _&c qq8JR`rRRB~ j:}HjL=L)|TI E2%$"yu^N&i3ǨX+AD=Df$9&KmEm-5Dg0?!'4{S|ODIRB TD;BojNiZM :!) ۍcr9ܐ@twd;&$Km%j\Xta\ٽZVWx ٤6 atF^dtnBrdC0[2HF+ke?]~9o %#LM|McAGs. .ހnAȰ>'z45u }q'|dY%Zǒ"d$w,G +"/^LjcwrxA\#($hYbKGs!X+iZ/"E1$o:HX uc+I 1$-t/[L<Ӆ+}zі慡+,]9<KɭuLi}D؋_;a Nt^xx7.OMl~dR[ TxoϸhCZ#f{yZ&L.f ?#;R??Yj mXl>|a)+Hp3:cf :WUcTɽ)'Ɇү7Nň; NAI#6XzqmQVIȰӍ)j3 ڍ[\;yXiX.ʌjol22Ə`Yx 6ޗsܛNNnw_3Aqj\?ȸ쨭-mD\ڄ@s%@`lVWY/nҚ3(~$carfID%wˆ]hj?D20w%*ɣ9>>>>^ְ1RKԳKzS?$ fq}I$ujWZiݦvtJpX;d$ ēg*D紜-!z9sUv[q`uq)Gqyc2PRr ju@C^Njdsm7MR_(`^ŽTEm*#$0&_#.qk_Vu(ù/s~u}\Bw|oqxdq" ,za8.n&CQbXTb:A꭮[nt@"d#7w"@2k. Yuڥ:{TN*Q1H !'{W[8r$@gB;'v7>=Y~@Hf ^ )RpΓߧ ﯂ /-{g0ƭq 7mhMcf611@`tC.nt&S۫}Fѹ Db}ٟƏg#Gc>lh=&9RnEK}6}Зm1B饖Y9B1 LEhA5䡏x -a!6Hb܄/NAv[!kz\ӱ}?FZu՛>]1-X}{),-6 =ޫ3坱Ak1F')B/?yz๐L2IMB=PV7+ VUe#0L0ɣHWG|7OJ"_ev[/o?dž҃FGei[Ju-(5KIvd)sbp{y1lt HwD@iW B?q`<}lQ%?0`IEJx;z>2c.Drdwv+@Ikq-v ?Hu'diY؋@ihrQRZșX](Z[n"|\H?/>^DX#O?۞mC}K&ö=_kG!N ?!Bo!AoU xת""<^l#ȯi y;W%$dtN."9%,OȄ))]+bR@RE?D9NhLS):ֶ&H7 B<읻N@EQ_'"DQ4j-6JTG/u!ˋA@ $M;@Jc*y=cc?w8Ǐs:F#H\_p*>`Y0zt Х$!R]K:6dI x0{@`qlbXAs {h wl(ru#l]ǎSG#=;Lc}.}أ㥕g+UN0!)" *B^4BPnq.[?$voU+t#gס~XAQ0HEnRw9sXsIý&[?~a{X?\_OْE? eUcF [s4h 4 Q@ŋE~ԃZkٙn&*Ex?XI&˼yB!B!BȉW@R؆=I9[c4!1k瘴~4&%RGKL&hjI֨%};<әLLI=cZsUa[gbA' ?#c3FsFB{[[U5#Y,}aY 7W-n66PW}VDQ܋"R6M~}I$K# n hs&@T%'KwbO`C{%jUl1E~#tx\B!%664C]A$s- P\'E8șZoA)2 4u@8[h% wQSMHSbg2BE9身.g+&Wo&fD/Բ Gl}=_T@J?8^8=.#GF5$NV\oe Adi=1Bo*; HYsz* 1G݌d|)1O%{g0 ᳃Z,,?P:u@BXvZ V>!vHw?)&s}N(2pdqSSۗ,_>d){^xHg72$%ƊqKE - _Yl;Z -$K V@/H pu;:К 77K徻@t~z4Җ,@Qŏ65gA44;ػ(  zֽs!-ڴR4x)$] 5gbz$?VùAkpA0Z$hi?\{1^_Z?, {t_|]vx֣d{K Lҹn҉|d2>o`FFʨ ŵ@`>DR ??ܿ@0d׵>8V6; as:,S'D$/Z08abaS>à]igNmsfeϞw, Qo&k!66bh#ւ3fnn ~**hc$xO|AwjHoe p8`d)$Rm:M!٠c?Z?,Z?  ~lw{/w ~GL~sz@Vx\uPB $>; $a =yzB V^Ǯrj!!OmHk`M!q|<,7_> jFn5YZ HCvdd2.dx; 0FokutrEtQQlmon} ΁І!~ 3 rU‡.H"V޽AJM 1#w8-|? wTS?Lڈ賓~!^H[HY(ίt#?d1I7bn\a')?Z#;T,%$no$Ghr\K(]3Ck$ɨ+>6I:nNqI}Yhݱ Ph%{jk[=5o ";b?B ?tӠNlV!I|赸F[֏jz?nrȯ m MfHIAῩNCCHRVoXHķ9?oBt(j[[@Wѐl=.^{Ĭ)5niq-- Ye2fHL Е=K@gvA,-,?AN *;{dm.0l杁6W-xyN<$O-{Mň?;X?q^eDWG"J L9G6!ަlsɃ7CX‘~rޥoWN8=BE\=O==丄DWGJ!'e?sGO/=Vfݙ#jyhm+QzhGL "eyg/D5`RylFm{ً&R*89^D0599be̕ Kf\ey\JGM4.07d[~5d'v09W^|6({w0adAw뮺j)̌9gJ qϗnlm oN~k?m-[C錱%:9w<$.ߛ?YCCdaT?Rz-/ ~~Gea(;}`!`C?>5ZP"B{>6.5t2n@hYZ?N} `a"&SCI#NEs^w/- ^eo-$tS/(/w:QϲFA݂[vjJ"lkϞ9'D?ާaBd&FҚ`P5v`AÂ#Is9 T_e/Z?=;βKV4~ź(A?V?uX)}?6 X!G"WB e?bMB9~}:'Afi\~z>+590j{pEا] !dd`C7hd׏v<=| 8:V"+rynooU\u$7;uѮ*H]{WJD;$D DzȷXwy F[_V]ӈws]ڈWP&3wk-.CVp_O~!;cpǿB'm5NN=PsrIT~'7SLruq"/%X & qxvNJ)=y |{*ܴ_Ê> KB2LfQ<97h7!8t?U*H"E-8Nǣ]H V史XaŶI@fCx`\b/x%㋶f8k;|q}n2t[|j"&Fz8u#$ǧ X}gc%fCFzQTOy]ܹz\/PQuU@t.pZ!fv@XrE [siAC$hQ#ك566sH<}'8o\_{>.<bH?dL5 %uIDs42M1h7) (C;lȢZHSW$y  Wb[ [Z~}]\^u?7gGԔ[5g~.~Zt%S,yR+˙zZ^I{G` R(:"Pԃx[\hc'i%X=lHN@`VkgOR|gk5@G9-!]^9jWK٬rMKΞaPFl; 1!G_m⤥tzɊk;N[ٖCp$9"WaG!A& pJl]}4QFҡZn]Gl|\<4lZǐ0NO8ZNžb$YғR 1 Bbl]!M ?<ݛ|~q&L"(W&˥4qGOsSw?Z+P`:U jNjXs[p b!/m|\&W="&-tgNbr 1}fek"ʾ󵜖= }Η?1_ ?w;@)xģGģ'Mtڥ@cL ,@`S)? ?gK *4Pj_kmvt/'oݣNzX6e$[:{ѹCq*6H dr[ z*B|oz}I$ݓ?*ϯ"Q]XcB>b.WAHXEܗ[F6q%l^[xmp܅,,W2MK+Rqt5VKi~_x?Wұ]M/}u|Fף6đq>>wIdBG.ɩЖ&SÐ02VjNbGF>`lV([+7pj(S517&INr=@8\zb=,öKi& bUia'EWGnk"iD  +VjÄQc$lm1x gWrclo$\L1nF{M\Χ*&hWw(TmL.O,FBRp)ıj*UV5>9R# ߴF sx) x>3dMW|o ← 8A<d^پs9|^GTG.Q@xkIʋn@EDe?pEw2ux3ã 6MMz2z㱈OF*5} Cy)4MMk q(aV}_a)yw׷Ee9r]EZmgn;\G<^jhffA8n,4|:#`M[aUFHSfU\ة0= i#aǵLj1,z{Wە^fߚ8% hulB4v+Iq|dq?j/'|޹& DQ΄(]I%d Ц`fbϏgcL>s$$@r<cEGq1:zeU"O-Rc=Yq5i+L.qqbI(Qf̷CBCCDˉ7~&A25qwצ ͬ4kpg Zi@=R)1,x e( kU@Z3mqnMQ.JW޿>otko;{Նa(+JBJǾA%Si!2V?*vY$ WFG Nh=R@w)>#,fEp_ԕĎz0')IG?vW 6 2OAl!|JAHGRXE&MoH`=/jMI=*biWXgN񹂷s1>Gf5r4AoHBre6ptچ Z{!RK Ү R%?@ yÖ$K%yYYp w: PŸ˿8N{[JS$s&DH=@+l״r|OX΋GR?xLqE-jRnM^!!!^>CdN??fiiowYRNYih⾵<ڰc) OS?2H Lv\8F5ݶ<`:'+7ZǒQ_E2H’foq~.TNqO b"H.s / A"p)^:>=_x, w^x!ddk, XJ-lk;Z#{1)j͙\C?lwkjCI[7}Hci sfb&iϯGٷZϷ͹a싱f4w%3Hel1)cb;T #'e̳{כaNSLKKf۝+%{g@ EF7B_пZ rEidfVA)Φ4}P_au**1uosri{n{;%p VX5e1=r(+',A#X?Qak4 q< BA[]̓BOy]Z@'#) qgx{iofR r}B 3~MigX>76W|M}Z(28ϭfSX +y<~(_geiiV=H&pp+n<G.{0aϴذXU7\Ea@H_ vۤDJ93oC\̩Z41&jpAۧ[\byJaCjreFz*閨iߨm;Gy&Ь?HsXX6Y~Ga_[ p[$ǧ==qYx. Bp0y;R}wI?E|]2[wZY]nYZ*|uϨQFҧ'x){tYu_$[h2O%nM@՞*Gԉ68-c|}u &.qyN \3 U{\MA ȅ?;!G/tud;;_p= p{3C޷!OKA œx*x#Ud/ܸI2VW*}?v%M3k^ p Iuןd{>Z?rHLv c'ʛ;5uiC8MNIV&4:hl7RqrИզxboܚRsd2~JO#O<>͛9ANqQuz\hhecgs1gM|4 QVbڷC1]jިpDzL:{{=>\WJ{9Y(@Q 9,ڑj788q|}E$(}M+אg:Ц٢KGHJ#QPsa ';N4R*#H(DWԉ\;Q sy맗wƉgJt{=?M yW`y*INZ6%I-.$3i۫}xpV׷~'Ƥ.fRS]M|ZD\T&c~?\'~ 40~HgOf\/cQ@Xdl(~23.o~s]GK)Lc~TYmY բa01:0Kb<=FוCbJHlOt~;N0c D[.%@H`gLKIVN$?63@m_faq˒#3xD`܈@"[ե{}I֦!K-%)%7u^ĵDg#\<0p4b>?CL !q}xo7:Ht|jJṛD[Ʊ7Jh4EHnO$P9FT1̉|7gap?kw]1!?>{$(,i mƒ]O:M Zsy'{Z!Y g6 :Ŝ? z!j6lU8Mkٳ,;g|%"5r w0o[d,оk4E) {Q25IYKKW?2q9'\rzWMPmn9o|OG{w^4Hl,fd>:'?NT/6$0~& ;OB*ȒmZDD$Q0QbLfG#L%iy\Jq19NO#>XņF%q*t *#/;;XFY4$6Jem_pvl=q؊ALXu{h|0`5,`e6KX,<4vPaWc@l4f ))吏^]0F?P{llrNΒpS2ǃb=³H#3 RR& bmTvx2}(xF@DV.˜Y/VZ u0R9~zpBIdp)7=MGJaN!qpEWq{-; ˆ.N>*)S@3cH{_W߮/J2sEcnq13grfC٬l5@v Dصo5]˥#wm#7w6R?D;=c0t>\"%H$H0Dju%VF9Jhlh|&NE*:bP\x?Jx4w\~?}~H]mlIO 3}>o͟B {~9ӤR=M}jWv=l|sI}] ds =$^JYe=d/ F2~&ٙڻOMdKyce߰>{ף<[:5w>- AMjz ',Ho VU3;;iT/_&%n6y0_c4x~ wkQIE+ɋ ;fUQAM1*$UtL)YDbDV}4j*ʖ4M"v+i"E`oR_kW3zz~G٢q(܉6.qtҙbH2Vtv9uA,Nq}1'%!kڷ˕JDV8ﰣ?aj t6??OKܽz u4.m8pt1>˳2Te[1x&&Ni4Ar"AtW+IlH$Ǿq-'gMKe~3$VLU|Ӗ&H`>`lz0< !$Q.TMg_JҞ? ;yF'%օx}JO,m_Vf/ɋMҼ$TaZEB_- 'vNNrLɖbt`\Cclle1Tۜ~[⤍УplvA7'zX~cqbԣ>{> @i[]A,\:L"^!X T-PPn !Y~Q cHgp0I`g{IWYۨkɫqm,UZ$@&9) ʻ;OP)MdatW#.2 ƴ&ߑv4b%K^{ב-C׼c xX;'F%$$oh⎨F&0jx1OӍ"h6skp<"mSuh'ͭBZ9ْ{1~rI"K&PHFHi:^Mĥɇ3t9rRGq>s<ƌuVaq qfC+O6\_5a6m.gJO6{ö 7ȬYk~%aNU~L СR㎏Q.c漨͑lښm0:!w~+ P?I[A=q](((K47 ͠izҝ|>mcǮ> NOoItЬL-Tړʢ 9|[*~UB^ԢݰnrC?7D'L%G/D"S~h1w4qT}ƶGV]ݿ 7<q}7Wfi}qSGЃF]',_hy~v%"ՙ$skbPqh^5< Aphsd}ʋ{`HV·gA脀"pLqJIVW"yԸ8?c'; \urE >ȘWlqo;ca 9J#?13 2 R6l_1 T(mR)J~L)%B:Aie\S$h/D5bYҌ3P6UlQ;2WAFM&v!!F5vð>nSi"i"M+@<4ڕ4OjR;"Ə7W]^HN/h~ڒ>`F;&wnl'_'%P;ԏḿb>On:5 DhK+CuCM2H6/-\%:hV|Vlfm1!{g@ ;?Jh5/QD@cOJqHfvo֣:; D qqlTH"t/M j7]p 䵣 [BBP]fGcVdF30;ChEa4tO f Y>DRADi"׆HDcH:Dz p0$פssz0|}]a)n'f+I( k5/ <NKWkd$m4mL r8dY7c=$-g p]@&/k8_$9zG'|8'EGcW\^nNio6hj5wf1Ç?<?{HD7El?PY +@l JV-s.~5DRf8RwZLZ}_Gw;b OFvQ#ѳ=zL;$Hmv{i<@pɫNK%?Z*QWn{Hrz Uv{(X % \Q%;֟OB`H99MTq\w`'f'Q;;|<>}OѺSoRe5{0^XqNv-~)7If 0a¬pĜY\1}~1;G?t5~3:ԏbJˊ`!n[@@8:#%I6)&pZ>׳CO3vJ6u%~ĘNHlei)uI@@wU:SJԡ>9/}&-e" 0VΠ“h"A<={o *&vflfK|ߥ]66e}o `//yO{qLbBbk EXiG&?;ZIN7TA;tt}GrRs_nEL"r{(R4"` J *z FEHC4n"(B]dw(H׹r d,akʺ7l:xAFh)"\nL!#<[ !9upbp^y+/zӸƤV>Q#t'(@Zv|ߥae"9"6~wj@G;c>dרfڗkqĜ??UhB){g0 D᱓* n83w@,X;vH 4b3݄ XM봕qƱ<@`W?BcŶ %˙ 9hk*"/!ژpSj:_awYt"Y :6Syl+ EHquPǐ'DVה9{0NɅQD(!p,M~[0- L6#pE^ 棬SM: 0j^˦.Ǐ-MKd*$5rV̱;d 'oǺt&5V\pfW`0sOۏQz>u !_<=~ۻN_xBGA>D;'%%bv+cunDž`"Qxt":e"7;Hib Icd\M; I-񳏣漙4- -?0 4 QΡ@U ΰ0Ё1T*qZI"rM^{ _b= |'!O}b.NYkϘ?h1?Ae:3s-(1{J7[J$.cb n"t(sI[ϓ;4VrIMv13 *:D7(CM $AVZQ\$qlu?a./z^5ZzGޭS֎v oXs(pmnr,ۨ>dˏ=޺Kn+pxDBr_=/\>8yo8ޯy g6Dw^ts5נ V@E]Ä. .<>Rع۱r N o?%2CYTٛPu"RVox[7@/-L){g1᤮{_Gq/Ļ`"hLen3i%t[z1ZD!)gӝC[+ rtXB%QXsiRpp.}r樓@Zb(>Z%iPuœ#n"\9DoթsF|KP ,k۴}Ä/8WܹCs^ث%۳"~T_z$bl5pXH3b |r }QQ%R}LW7=\?w8Ƶ<6;:+1ABjfkg+b0'DVD 883́ߗ+Rvewۓ ?&G=w=k;@XS&acbT!W轹`X)"Nb.{RDQӴoNaea)iC' Cg !Sb>M=$JdBI%MFi"MeqHQDxDgHj3Ej<,Md\nPX.^ڎ^f;΄ݫ[Mq~e4.i#c_"Wīlp0QWaJltc~j bc'H . wK/k[{{r#,湙Mm]j%}7RcG$4\OCHJ HC$S_f@rJ|_,!~jFÎ9h&{w aP;tѸi&MmiKPd Y0 ikCMH$DKx3A7~G뿺vy= UX̺ȇ0 \7lBIw.X4W\ۙbG(qWchr〫Y0EmϪnD(N;g/OYlVfQ{ĆvHv˜?s!:n!kqa O;ܸ9ن鶹s'2@w7 Qd(-Ez+ѥt+IL]XKDBB͘,ΗpcMBH$5(nϊj?m"m"wDTQĴmrc#Ca){$=˷{[5([i 7k( yqd͵Wà5lE#>R>>cȩ,-s v‚W폢F?B.\qs}wqqmh5\xYm|ػa(ϒhE<&^8;9c\ --I ~IGB_K6xO @5l.ykD坩qM]]AqE|)^Ûm&bWdYqtc`4׫eᏸ^~M'ay[ߛ~KzqG.lZ ~$uŸB *e:C m{@V;&& Cl\QYay}`V0qFgO{_n"9Xn"rM2ӬMpX8*E8-*DnPӘu0ڶ{8ji}=\!3] ƶӉXϋUk+]\j=?DWף@>|KM;׺C?Ɣq" y/ْ|AB$-2D ͻc\Gt[WR>Eah|t~Rzw69 1'W܀={]cf<ΌG_}R4$Jp7.xAيm8]'7OAot7Žży ;H n E+]X;I^s .7tB)6.gp(ZXqn&|O/hpZeˠeN/s-<}SR7l 6b!K܊;%zŘP޳~%ClKNDfllN;}͒|IGχW8 E BwGb8"pm1ؚ/bk%^vBmQtke))2F R5wI񟊟m洜giiK0Mf%b 7SeͼO,8+QD&&1ijŅHʹBL[~0~&b\ MtF/8ΰϘn2kX4HzU(ԍ&b5g~$QC0L\ S^e |f²`KZT UbMq ~-I&a)A4i.M_9i˦8 =[aJe>wCeS;ș5t]b 8ͱOzTE3GBSHL~P塏mY A?mn#;O4竑^eyJY~n X@ꑪGIn0I^b7 kB q5oy1<),\];5ze/KnA 6t+C v A!T1< LJ&҆Di m" / G~^]nh/j=k O- ~+k."M @2N%RwhZqu[@M#ԡ9GBM򡵋gɩl?V' w80Tv9lH܀$S}j٪,/&`??MdB5 58OY,4v=8_߯KY5?^s*1pdZN..<% C1B_hdmm:nH⤯2q vGt&MC Z{/wm?`\254pm֍\7+Pxݥ Da>3@+h >"hi͟ΌSAHxwG9_nf!IHXPȀcpXp<"kq>/i&_sˌƲ&.8%kY/fOuq ?9Q`;΄?g ? 쏍춮Ca$QKӱUaC ;9!ma.ƔbUl] syI~}TWr"$nw+ @VA=ݣ'A<{$dP 6f-`etUY{՝Cv#B1Yq Q79fy|U6L~iM$uv6-G. dHp(9q,v} VŵVl Unt@П@ ÙC[l} Ul%jեwD*duWh?4@|D?@n/?n6@4Mnv>H H}c,A=L%K{нu?%`e1nX2ỦõmfǛD92L> Ka"~$(R4*j} 0 ꇑ1R`l'l44q2e5w4݄}gB sN6X?{.]0;pꍏ~?/?Tjq<,/5o[7}&~(I\^焘H"bB f?) r9e\;F NMDotn0irC]L楓F @=`|V8MѰr`5~=5dvV<1W0ns 2ɝCR_|o4nrfjޫBl;j0j\~rmwMtMnϫaSˮfĻ+z몈MM.|) ryB?.A&}ȃYDR7ػa S5,'*n+=a:Rv.KEYӤ!oʻ\n8g ᐶtYYM'ulcgl7 mx*:W<}OdsJrN z<1vȺYy ~#.@?w?շ>e꒧H|OkZvHHD4; |s,Դ0Haqm8t V_إϡZKXA𵾂/on8J b/!%0BG|0((@f,GC3 6v1fǺh6Vc~n|\,#6#`R2rt^6r9i60yjw5#>wi|u^aǴHHJqqQd 0և2%K-RkEu%kE:o"pؓ>w @s@RŔF6:wPq1J瑬S&ׇh+c\#?k /bn75s=^.l iՎu$ۡ\ocj- wiq]lVq/XHǥGL7 C>شl0v) BlS6cFŐYQ[YL#&Gt׮V)2J 9=y#1UZjc)olWmWN^_TGD.w6)@IWn\xxpѝ &3ih MyW;C`]Ӳ!\|/5 TsFzeȨx~05 ^VʛOtF?yaሽ]^Nju]?j'Gۋlw-<RYCyn ڐy~ID* к!4mgH@ 2@2Qos-*'w( il֍W.(@&{w0a834 xADI2mu%BCd1/ 3O<ӛ?jKI tЎٸ{z'>5 !Zf^3C2$;6E۪)KJkV)ԯ֘Oo gf V*Oc?-,.! O SBȥ''mR_Oh׹~vJqz aψ=4/q0$ 4Lg15Ⱦv@Ͽ{f,HO)U-{w0 axvE(+*&LӴ݈4 mE+3NËgHSIC PH@t=HZ5!Ƽ:ƙ6|[/Ϟt ԁj8peù"̭8[oɯmvL֋\[ּ!n.=g~ i86G(b  I7*]G> 鳬^9z侗}6AHj#B<<ulҪJW]$O~ZU ;|ٳ\:9{{7CJo?fp"WRʇdz>G D{mUHh7_4cl45AȨ n-9Lb E|21펔c[a/vJf;VA0|c" _pr ($6i.СI9=@L]ԳL.5z>1J1Q?R m vB F,!=9#q ?k^Trh4k>;rZ@|sy/\CW4g+C6+mpaKgZ?\gz<fgh4Dt.1¬%gGn,k w7)@'Q+qxWn]CFM2i} (ҍBC 1C~X8#E%Lh#ZoS@Rᝅ @|}H~pߍ-vrn_ \PoD ZU8uA}U6ۃ/ʏSYN)DBm>G!ii'8TP~&yC%L~b?=ҍAuy&sk `Q(  -=XhaQNv(")?01SƵ? cX`ch! oH uxӇ榏*7X,8-B!.4Ÿ+E7W>9b/oamMk7l顐$S/+Y-hhr94)|ml.lB=;,!޿l) ^Sxya4Wk?R4Cz0$48M^A GO`apw F]hRF}41M3`lg.7{v(CYha$ qH!VG[^I~΀ H,! Ê}a FU}% 8+n2qVpq7{Prǟ$~6l ;=O֫LKbw*` ⨛ߋ89"I4u+(> JrrʢUuuUK96fl,G zA߮/+?4!WI?6| 05U8Unk@B v]Gھ MGZ%N{MϽ?,*g3i]@5|€hLlQ3@"qN9qKtۋ`Kc'N.9_+o&KSӌ nnp?@B®AtW7bn|ic1L`MgԽfYݪ7-b+[ZkfPK ) զ2b¦X ]W>%冢u1B-f/&drN_OS9}kwm.>9Z6vNx4%>gY^ޛ|,W.F$2\h@Z.-uN(&*EiMv,}{IA0 :u{r.@&٩Ri:/i0}MmC5 {Z@}ع#?ҽG4|RGZHW!Ki(D!/~LaO8ts4~ |5tv]>uǻ ƈ!( >B \ L- uXolL^Rz1[ [겆xp{/ػca IEGWWAllKJұP@*RB { ||xwUT2q#O)7L қį,ϓ:τ Dgj:G!zM=a6EA ?4(ݙ?{<wC^c#ec'SC"yx^4-b;F@ݚgweysm$9 @ݱ  Ĺp/P,Io Mz8@ظGх>\ d}m#Dނ!n]- m#C(%1:ۊÖZC cm8omj)G z|~2*[9{6B|J}JԽcyحݱ 0\l):CjrMnBh'h < x\>c \Lo tL|t2'Z?o1$t?0sGd]|k5?Y!i^QN@BM$/5f)=%unIՁSN Oo1 0Vq]QH܅:ث.%C~@X c7x/6!71- ~&y&}= |cY񩜜s?MZvۻ.z H 7"#4A_X3Wx 3i]O|Hs+9_ =`U( #A.X1{ɬQE?"$$l= |ЇvlÃ8b97bkHCC7GylA~oXs0@^ڨ<$yۍ{o7M]!‡H]m\H'%1KK{p&'D2,B^?'g~KSex3!y-{w0EQ()PKll*LblLADRu7VjٖA1.x#]@F! s ,}h|A(h$$io3Y^>f89qGuX6im]>Nr[ i]4aEUV>P@DszIA(|[&8E*ZF sPH: Rr=<\?}a$FmT⊰ HB p<}4cUdpmyd]G| :>]D6ldKVu8ѸBb'ѻ6CQzmp?xU!GG>;1C[f\9; "q1!U݂ ׾w-`-թO@݄Nu2gLtI΃CRV,$uMJЇRQ"o ^78>?#^6hz,|ßrߖJŕQfhmTmÆBcn >d\ luhi͞O vn!h#qNJA;{l'how&3_z  CQN;XApp|r\]D ^sMnPŔҊ 9=@hٝj~||,fjG T21nߐ.SCq?@FÆ9Xި?(Qy/3o Yo q{?+Kow'_n|su@$[?gmfX6?( H "Lv,PHqݱ 0TAq'7_Bћ4EQ'oi i%C= I[>rcyY'/[>D G [҄>bly;sDZ8 uXأi"Y#L-Ho(?|L4\#Hc#C Éw/(<4ѬO ~$k@p.tNr[LJ5/4Xa7~ki(lR[@n;&{g0 (cxv%x!Șz\d Bт7&ihIr@~ٌj[ҕFi~m^+j}UEw'9YpVxtBwCVPQ&4ÎqIlCލI:wϳuz-dqmUu6 =x1X(ۧVeUw9>wrxx3$z"*Cj6 yAllGPki5t!:MxTTo"͂4ԼD]@/w*PoRG_pprstޤi؈z)-(xц֫>?L֌[>GՀaVΨn(C%B0I1œ<ͧ @2̵SӇ [2w1?|{ M>vbbK ~hGr<]e);g~Nކ!Ɔ=߁/1f;h5 7ߠYȁ Q(kۯ 1t~^9R'Q\JFU 51$(m}^\/\a1ϔZcNinY?=l-"]Xapz[upqqN Jbܤ1"PIBq(W!X<뮦OBBoh82!>GkSm" }L}<> ~~|$XUjԀ`ûoT65t,ەnx?Y&nE}(r 7~!iߓ8=D_OeNc6{*FF@F&waabw*Ps3TGPؤ7io(NEԢJ r8@?mMU$!6acW-%H!Fr\G5&oC)XRhۉ }TmYt>|cWNqmpaWB nlGȋiSB?O-qnwwco>m1@H xϲГEKTD1dX,ɡ9عt ݽ 0/_8)hJžJB)Z!bz B})4_>#uT|p~qRj|p=D\Ե}HI'2|X >[)ALlq&vf{b0Ǚ\oF6Y H0ncS=X?|r!&4&wP mnO!{w `x4ˠz"Da]6A…Jw9dRZ!$aࣟ13C# ;#&H;|G+|>uôsMF?z[;1 AeU xJ~p0Z$rWaGyd B4? }(8=(L /dxv+ʶPg 27^p:}DP!# LD.y FN߿6:#Co%8T'|FŒTŐ$ }h8#?Ww^| "w$TkME"~=Eq8’mn."|Cʇ[M&,SustK g[jFtu Ba>nEU]vLAR^$C0Keq"Yu#UR1UԽ# 6Xܼ*E p X>@~B~|ÿC~ ?@**ibyUqG9l9mm ?\[3/{A7g3U~|W,xKwػa Qt^-dI&.   x&m+CNG)E(!(Hq&" WHU,GCRMX;)FIA7}eV>ߧ}Йk[x"t?\Vc9e\9Q'؄cة*;SnTÚfmfυ> oqlA\~:~N nw @w~-P3z^/=KP[g {TYvh/5IjNبrI$RȂd2GS]҇z!#^.}翭9vŏT!@/˕X.Vg7} Ro]:|'˩BRʍԼq}>FL`|4GeBT^9KO %K 0DYwЉ HDY[( ݦe |=4$[@/CcF?@i  gC!1tb!}{Bp 4|l5#Ѻ( 8<]rGh 69kjX}  նBpRܰ{B#MH}wa&=HW^w,PO[i.NN h.' ԊHYlVDh| Y^wA x]kr k |h獲È,>>!АJ0I]}yRt~lcS6=E ^NGͺvu{c75C07VΦE;%e$ ꍧ4n|<<@ @ 7@hٌ83.> dҝ{&ng> xׄYOЅ=~GmV]I]|@QcA( ^tQ#kۈ_6G}d)G , PIAЇ?SC{o=\A>Q} vf=Xq6}GӸL#j.1@ul4 Saᜱ>?ޞ0V | 0T~]t]Pݴ场-2Ey=?7jɅS|ꀹ fL(oЫl:Gp6D #4|.,4)8!]@Gw^xBǍ}[;|d. ,,쳚D|$ %Qz!xW}kLWx_ŧ/Vxv  9\,mdri6g8^G#0obg~swpMMO6һ ||7Tapv^O&{w q|̈uЭt֪K)$ N>ѝzqUذՆC{v 깥man#oT[G_74Sؔ"AfC- .V~|qo';[/~{y@aR+H 6}C 6=,HjDćD4_`^v( Dx{tڅ^ 0&ҖrIYp2@}n]ˡi{uLVB>L`H j!@1 &tbS᣻ s Ϲ5:{t\_{ Q>Zaw}YD9uS+o"}`7Gb!T |XSUZ+b8a"#8 !uɵgG X0Gbk;,R P)+[?Vߟ:_@K}>Paۺ6R|7@bgW9Kÿߟiüm^ 6%{w Ea|*B/a%`= 㪢SSA1q: }}_niE^ ŏEWa[V~mu- Z~)Q={R0 {Z\} ٰNǹ)X@Q 0F̰fv02:',]#+`M\^.RܮL[-qaXSs=BG+C7Lg Wg z+ #V̥sD4L(9T?*a$C~Ux/|XbR*QJQQd'̥|צ_Ew;a +|>|Cg/ŧmzp}L)ORiPw2DŽ1$ X6>ac畟hs9Ύ[܄7=0+ \\K-:1g7 'l7q9\OSY%:h+l(DTYN!iem ͣ=i9FH!֙k/>>ʾRC[>D|!Wa ҈P[4/?x܇P祥@Dץ$v:)-dj1Wtc')47φfƿyJ#{gԂ ; ,uw,0::hdgu.al [k4,gkc]·/74C"C F&"*"Q |$!yƋHJڒ+E]awGևʍ~tʇKJWlLIc#6jo}eWX'BxAy,EP/_-] ?C:v}i`D[s`Ǜ26ùXqw<`^v( Bti \R iHY j e {v(böP! q-)Qlߨc`C|#W.,9 -!!$<\l0eF|a@?H{a6ܱ(5}_`jDxG5ϛO^n]k\vUyv{ -!0F 27#}+q4VP!% c3/[w+Ag#5u Ȇ3ETXE ldL8k{ش8Mc{bQ!$ot{=,ğ$? Ņ$ŔCo >fb}<zCC, "⫝̸/]ł'SE ó㟙+o2屪)(.[F؟%$i[iݱ0[q4q_ArocTAHbғC>4{hIp!d÷\lXH@~4\cvj>ڦ绸CąP=>;o|c-渾O;Dg4b4c$%x"su#涏}{M|#a L5!j9E;aRx {w Ea OPT`۹ύ 80.fq̶lxo{Cثr-> Cqv/,$vLqi|OGbg!njOpMSдEl/b#|9wg b۶<_\J;.;Qb%XGKYN.K#Kp{Jt$gRIS41Bt -\蔏\ILHEMDyD]CL!DL.( %Z̸Bǔ!GYGNR>65M+,!C?aܞ|sԍ7Q=ޗVH8Peӕc;R B"<)ͅ[h@Xo j'; /;a(n#0z魧 Y,y$4>x}Oe+l `yTkaݺ6eh[1#t{WkLY_ZcI X"9ki><L !֥I9Pq8 W`v(b\j\itT 3Tw1޳M #8.ݰkk{@b {ؚbxkI፵uX:G=2ECV}j6|*i s40|Og?𛮷] vH{|n׿x OcTU c$ojnw-`U֠]\h77sEi#0m>=*G.q,?̓. *yNùsyGgw<κkwVі6oT/>S @Oe ,I_^MWi G^GwZ:jm㜞w7-BQ綨;[8%7Blċ]C!l{xaJF M5ѦaoБ!2DKh--=b^Rvkfjpu=|DZ=]ySA)-Ch?_ow&lSCAy= oIBD?lhm=՗ġ`U( ߖ@_ͭ/A,4)7x  *!+=k󛰇k̅=ldaX,{3iDf#ϥlvv۷ |>+^>zt|L%v88ﴈ>By- R`Hw8NSS힝[夾L-{w a8.|] !}P4X’!h߰ǣܳ] v{*j==츖qn^UDW9bC_G-!ʾk=qMl[sLO?D}[@Dd,Eɏ=}8ֹU{o+x~\i_ mwF;A(򌉻U.Z)Ch!$$ ,(EJ=o}ߦ=g4 "(T/ y[HU4 K+$rBA3DR^Ivو72Q #KM3c|Ko*=;`]yn17ŋΓ9.X{#sO̩<fCD/XQGi̖gwtbZ3^x٬0ap#[jJ5&v-5 DCXʉʊ%+7`y0uS9noIiH Q% q1RFP- &#|J0HI0)C׉Ǒ=KGh˳VPBțf{~ 0JS ʾm*BSepsMr?>8c-Uxz y"@oZ_/ß;\A(c k VM NTYUq!+=A6sc}t+a aq|%xq#jMBuqC#_ikhר+}\_OⰇs=z~_">> a*OC)!Vv BY>JpD牿4&V1k0ljr{YA0o \"T"3NA/i&!+vZ>%7c*]x#=Ǵa eϵ߅=&E("67 uu]#uc=l=yYI7w=4࿍7iLfOd_P;\v$8*?,wػa V%fHBb=[PЅ)H,4.&9Т7 C,H~ XWc .~!{,b~ N̢=Zlr=nxgݣ{usy';΢h,} Ŀ5>Ԗ>'J y~=`LW0iA-EP]-mLv[mkբ k Sq^k<v[_f19r< D<ߖaď"5EL0F(589$t8$jVHi#VN~I"F0Ge}$'vN=zږ1=玞/}u14{ZU ȟȗ _z?KMj}n\~}6}?|f$BS.Rk*}6-'ػa íc7%KAv> {(#@b1bNꡝ9jЮmZc- ]Ea;백c֋:zA4!K6wV} f{Y#k]{VO@CMu;l|fn%.Aʶ뇎^{֐#Q+%rzwf;@F|1LZJghs^K2,mz{%k=n]`M\!γ˦?aʱivNS+ u<ַuP# .EʸH֑qf9Qv^øZAF*0iQ皈=KbxM|Q= =~viq `&C9O;1+Ɨ|<@~y[-..1U`A iEAv:K ܙq /wD3 R?r-[[t!q4c*p4&$3ݣ<|T1 &>9c6_! ч Sb,=btW=6nCUݲ=pyuS=W<̘\ؠ$=K׀ }v+{gׂ w*Y]-tM0;f: o5X=X+Y,;` q +F.LJ\TT) !Z‡Ɉ#!byF(p~c$5!JZHR6"#Ō\FJ h$#{Ȯ{+x0`ҍG_ghD`'4~ƽ=2Լ}x"CV|*َW`U0&U|t-iR/Ds:eP v} G͹2VMc8_{D&9Uru['"Ƽ#3U.~DZG=Ki$?tb^窫3^| r{YA0+D*|k:A̘Ens3݈#mnmN^]Rr.xuԳۍW('"| !D==ocr47gyOct^ |C\{ޒ,2 kĸpcaٺs\|PӇ6n]d@nr]Ze|Ljuw7+aFgMF7B(KhI5J=BQFG))XDOБw{ύFj?Jr8t|{#^HQ?c69O=k%`ˑ֣@!h]{uA4oa°cv5DS!.3Ep ) zc{}D=}갡&0׍#U//-KRG9޷bLa /'MGZ&Ja#́bcֻб#4&vl͏DpMc +F.c~<_<@N)|uS?31~O,'9~w+ً;hAlҥX1Va_CܦуWt9_iX }|q#6vc`#a;:׆)h%l9-=)<2 { =۰Gl&zX|ηf/QER6]?zکZؙݱ0 EQtƊI`6J"gjS;T ?bٟe9^t<^:C1S?u*H ~ %0aGWצPtI|cJxzcأ{u=>[{q_{l@/ =&ƙ/݁Zi-z k. c0 <`nV(OAA0ΌSHᜥ~2.ԅ kjc{Oxύk-MY;T0j͡n=F!IU_7= {{5񃉸xln#/9Hrl? <`ZzF=C1ST#90և:75p@DokUuUpVrK fyx8["˞4n9۫vvB61Qv0fNsHۇ t1;rB1<iR7MTF=ʹZVs {YZoOMzSӍꄠ9_>;~ai'qb=Qowػwa0 謠)IX=g̟v(d/>vYRbu#|Āƥj$;v1.&1t  < |4 $ ًaa]0!rÍqv8}4~LޞznsoIapZ:vY T| kW!o2>VC |j ? >tR\>@uW{}gT=y-{ ĦHtw!߼50_V;?G/@E\nԠGDs%@0Uaq?=|Gn-XpP7~7wM-=gᏖvqx |LH9] {-b`_ZkL~oݻ 0ѐ"ݥ~.]E̥)7P)ҡ/?9.a4Lm#(_H E1/oGY">b .jQ"c{|+s_=c'awϔNvw8`FA\M0 H@ 0/~zznW`qGjT} 8 $4kD# }Q1!)9(I}.(cniti8=[i!~vkyc;AHtT!VD9XߕC} }hc>"c| 9"зQ=sGJ-=Szv~|>g-S Ap&WNƉd˜T EiԆ ,gAkX ϓЀF;b4aNְG-D>=Whp9ܐ޿t&".ͮ |cTs`^%l][c1[7Z˯6w/0 x; 0EW+X =%D 3Up 5hcH Ck!gq_su|>chdk g?||4G|"4/~>rhw* PEN:N:Hb"XB5!CO܇gƽ9QHoFw|||=}Y]&zSM 0I…=C-Pܤ43ZQl}!!~ X]SmY<ט "kvܻGCGb[] u?jkPx~ǒGhQCWW)= `y/*xlXʢ9y}9) Ca p:<c"6@S钩} pVv 9N=bQ5?ua9$%>}iGFy1F#}#V>$qw1_Hߏ~ jmuvv;;[Xah*BgHC#Dl89[@ 9)u?džǸNa|^1>meR+cȫo>iZ {͝ ҷU>3g]](;B ϴQ:t.uMGmzXGGA =XϨ &i˓}8xqZNzq(enxF&D8&gC:}tF>5_8 ;j?#B)Q>jP^.B 8nδQ]ߤ4g vyȈ[ڻ1|sƹ5έn;é#oB4_ [c>R~X BEqv?H5uanw*P@['7*5Js%R+=]Ϸts:Lsʘ: H]=v?n(]?r |txByuIq5[Gs\lٍ?l<h#bX@?ֳKF1 0QC;zsyi FmA2f^]_wt4yq<;X,z@B\!up$k;F ?@i{!pz* ybIeAhEI&b]( @ ~{q=[ :J@گۚRZ&k{_er}z*ǹX{Tt8OH1H{~O}bG`U ( H5/[XL`a<\,~z^-yb.~G;ux|絏=^ECވ>{DD6P%"b5ޑw2M Ah+ Іi!=Wtag L甃y=s\0c~,HjÏ[״pCbŴ5'G>qE_D !6  kб>^L94ۋ=6g:OPw7)@g; V(LkT}PSHTXmnْMNoh2"IpՏ~lA H{ yXÂB ,XӡU:}h/ |4VuOBнH\Αtεl\L_-|۷n@o1!Gō$֩~AIr?  ~@L2=!҇M>֐pH2Ix#iۑQ?ny%Yt>#IFfm|6a\6kAaفo}q+bm垅?>|Xc!~)'>=6*oػa ‘ƅx#NdbE\H޷k1 t+݃)LfbG= !W b$E _u?M8DI{&h 3C)XΥ#{ =H[s1=ԵM~M"yv1VK= /מ#S]A U&R-U$='ai)PBν Q 7i5}B&IK6Q B Id=-䏇Z)gtec3Gm8>@TЁF\pq\:R!;[SD^p&p%q^d @"ALpX~e< n%S?2ի),ԗKg,s]KES^] ޽ CQNu" %w #{k):7h_8ww9_ݾ-5U l6>7=Oژ ~0G ~}x\fϾm0|Dz`o 38WQA} w:!>8 ﵛR~+?&M ^5IA E^) 0)kzΦ^w*Pon# }:&8.:!*41p ,& % x*8B ]ժ~d* %聫a.:~~Pʨϛ.h ?RGGu=c1z27nMqb{r&j0QiX!HX}em -8@2O{{}?nί7=DRw*PotuRQL4zT*.JJ{_MjO~#@p̛>h׌6n@$ja<}󫖏޾1k>▏Q#k Io^7YZسչ%b 3As~iuR~?4B x*Px=G(;a NaeBW~/nݻWtD(G4B540LmE&@ݔS蛻>7ށ2dj^aFr(GthT\?RQJPRDGt(C=0DZ'^~8` ݏLߐq&4k# 裶jQ ݸ#Xe=νkKr'ryθkR 6⏶ "x|.R^,^͵5 Bb=N\\6بu5Dw*P"/?Pt4&i[h okVg^{Cͣ y"?vpG?G1zr#x?ykG5?֏hZ>ҺԐЇUĵu ֏N8D^Y=^xéRs3yLօY@H 仭ö^.6@ebom7 _>@Y>w* ag&bK&Eԑ9ib5O.n|*>8v>s1^TWtC|/BBd?Raհ⢏swWK҅n_Uȇ 6Dp a[ )D #KaіI"py9qI3ŬGK1R&׶_ǫ3z] N} Qʇvto10 4T;m)_d}:=0\9+tFٴty1?c-" V|hd]%g"p8 ~`6L6mnPþ5n9`^҇..{ V+{g A $}oi+ӘxQgNV8 \^XKCD숱IYC~*$r,{== .|TIHH);҇JTRI"VsY星ѶIqя0 Z"$wR;E,a ctYI r7PJMwQnΥ^&/?c [Α)|sıǺ.ߟs{A(\Um90фވF `m}ǩ!O?Ix(<$k4|7o>zlWG)vXtlNɳC-ց6CڼRz':,%"[lk1 =_}H^~[v]A?^wwݽ+7;w%A s Eߎ0BGME :siđcQD1Gf9_\AH B+n3OT]>|\|rDZ$A,"R>"^koٹrVE׾I7Iq֒|'{Xy|yM,QZg+ |"r.爁 qW.y:QbMCĿܚ/nSux};&`^^A /GtĘ(-(,pKK!m@ÇdVV JhkmL {h$ AhMGS~xCK0W9UX3$|Lޯ7GhKH 2!^:C{\N"CxzH~gg)ZJ1Zˡ+3q1F%}׏<UХdoaMbm_}ё91;MޞҰ} #|7/O: VW Ahk݃_3M܁4@O+ҙD"t^ip)cfhp۾c[l0ÄM + }d̛ -Y#}Ic/7ec2tUC׽vM$M]ۋVizl4/w*l=B˟\s@w/` \B4]85m@|i`w P:u-ӑNݻ* ؾqA9K㠄Ʊr!<m|B' 9[/ MM۝fčueE4"# ѧ~$(A帻mFX?:a_C$6?tNkjpop\F /Z> |O|viPꦕNÇ*Xϸ )&Mۭ',M&a j\CU4}{/Z*b)h^Kؼov͹6z92?_3Ah[qN"W.qeLts) J!ۋY4->5iutgb4U^a^aY)pb, QDWA@`a˔]]? ?NeF밎]>.M]>DݹZDmpX,HU>}~tF>Vל\;ο?}NI-Y[(pRE1+3%eR& 3d(@d8+X^XG"Թ@0¯I {(RCtm ^,w`^Z( TPVM.Zsљ!U,BL18 $Y$ӡoH][GGÎ@tˇ4~f dh~-zKol |x!̮*wuŶ|E)EMUE5ߺT 5|$դ46b?igIۢΟ 4MsΚ롿 C7@}vFg(uosq[feC6^l3R0i# o1 qMZH‡~/!)6n'QN>å|ӏw/h&o:L03EdOZ3ɂWj_;O{ox5%1pul%;fzqnPr~Fo1-,xO@صb^A 0Mұ:u cԡ zm{bE;YbCh.fk1AdY]7_?bD@*l̏C!75cLUL<7JZ>-n]xc$Ca]8kClH[B޵|zɬCxh[>Lia'A9V}_έ&48/kV8鵂NJcw|4{Mmȶq>_L`W~4읽j0F,2dfrt,$6 0 /|B[,tY|ۉs]e,4(R&,xHH 1UG)ԩ05-}J'|F$'~ĴtOnUUʇ=`2÷G?e;`=Η#*ҨbGzf:5I8I1xRcBS6÷fɼY-. {Q1nSWI( <{Ia0Dt=tAKoc$Bx`NNj: 29PG w.:~Xi IM"i]}>Q?Lh0_8Z?в_CżZ#ǐG<]4cZ>Z Aqi9}3ZyGu1`g/<A 0AA!:?T.S A.u3G"KL!Y*VNg}lGhЭos" oZ? KXy>tc!y1q34G;vK}>?\|sJ?|1uԏI?XcQ1_r/.縫pT&~fAwX{Rn=gX x7_x0寴R=:s"\B:@`qwW9N-rFNh豩D,L%+!h>8 e/C9K)飖6u羅^aʇU;?FmQ >!>^;_;σR{HQ@l4Q57ZJ$}6.%}Y✔ߟC)eiQs_+S;`_CΞaÒ,KNN&!C@T)ҝOrj'4-&8CO,E]M[k U8:yDtSA~GDE]}S" ?B2yQu(, wZ?ч sh_ 9٣ GMsv{ˢCtAۓI=Js՘Ҟ O?|ӖTf$C9?gW8"y||Bd͢Pc{9KSE_w69 @qDU+!.3NQSEIQ;E zrPi8}#}gi|X @.ˇI!C쮇w9&Y$=9ԋ=i. ]{x_-g\Xz5XպWQ\` P[h՞K]d.y n&kvֱ?+ɞOR|za¿[A e)_[tA[:7}V)Ȑ><@7.Te6lަ=v"*v }ǷGؗB:aCylQ|:9KeC|1\x^ \o)QKtLu3*>]wm@˵u 2ۧ_f,n&Ue3Y?FLGe$?`w*PM(]|Wr ! &3pЦ?)9@`Lʓ[Yh 䡅&.vh#$ ?'6&*~XJ"}<8mG|h$mvgWnY>^<e:&٣N, ̣,u+<ÚK^JD=̦l,f#}4s^_3M*ٵ ׄjj An0E$EUĊ=R'8)Hm{،Y1#>mּL Dw?.?>Z>B{NJ чD<\:DNQ9{}cGB\>83$۟{ׇ1$%D>J˕5Q}471r\/ػ( sТeo jMĤhl!4T#3x}s2M};f m?M fO),(\Ç,Op㌤h>_'?i6~j>#9iZ&aD(壛oƍsES>hxbK)J}1^w:|8}n~h*Hvvc-;{z'{$DF=֫Q،k&vaMػ .B "/^Kh9١碠0?%*1é G~Jm] ~G&O?tclc4G!C~tMzGp tf,s_ր7>?~6wۃA=&O\_9vf_+j".WU]*`Q0 x9 "!L%6IBRR$H?? ժ9d21\PH61x=S<~tb^arȶ2?|"}(!V\E';Zn/ XYsթl-ݯG׍ r{EHZCa2O Ujڬ--5&h,?^i~UfA 0JMU.EdoEZN;: vMi]JGlpG[@dzCK0 RDiM+57z؅3١#>a׌[>lt 7}i3}&φ[gޟik{@i=pa:7\LJUaGW!*I,i~]Gq[.$]`aN !1č]e ̩:eEմ*iIũՇ.=={ 831kk}hqo_rDxZ`D *H!vNǦTE/Fkw.I|O⏅:[Q7U:ڱuh4оMS+nhW|P&RZ=U fYan,ǞĎ\mzQY'aX5s1_Қ c8m?xM+U՘Na"%N{[>Uatc{-Pv&T ?֛˾߀ 2ńM||Xۻ=%%_w*Po Mt|'rEp+"zoRNcmBzrxOlW':1->19&Z@ic =5pv|PA)Y~2m xHC85wto0!dlGW8&u$m Y7̖nl4&=Gdar^~kTGx.PX` ;98Kټ`w:AB02VYZ[(4F%Aev&kbI n>=쬌BuX#>$~D0'4V>ЇVV|.>վ@C&v8<_zOI9s>IlB(?|ղu uw=*lm yc> L;^7&{wЂ q}B}AxKwfei{xΧF oЇ{ }8Z@I v֏#CD G[$A#5?RKǂ}v':Hiz؍C[kTk8k;~A]=̼k!C1O#/>6aŞH}+׆K ap3x B$h6AA %U7cr.9XȈ.!>շ}hZ!s k?x!j ~| k}A}]bPܔ[n? 8Hm67v*Լy\tQ8zvN15{M]a RXo'6:3Wܘ&(IMnik[@HlI1OM4}$mH# G=}/?NxrQC@6Z /۷mr=ޞ׫'v]3<b<8ψA(5d]v>L@Į y"{g0 ;11!ЍD(JJ9J"$+=О?`==7/Mf`M`,w,OGqŻ(GjQQ|q۩h;9S8$zC+#nxٚ>[$G~~H -ZuB |G8c@b4HDAO4#d"QAKQkpN3S@taCDeCׇGln%Rk+/Ms rl-kD0G XVLSw1 ?d76dQi=kE?ua8){2| 4 `ɪ!&q#q3lDJiҭH">Ɋ%ϿiJqj]u3R}D3/ky9Z? 7{Kb U1k]ɸp~?εf7{`W0]b>w( .얻w>vb7qb|ȉlx¯v=,v-ᲉX8ӥ=1IL0-bb_5Q,z؛H=С:Y+/{2I{"$ ;fA0k KnqOkBU}@18"ף_B?DPt$QXVvund{_Ї9rv ł"q>?l+V:l'N&}(e!@`+'u@ ~xN{Ӊ+`|V ̏b`_L݅@ӨxZSSヽ'&aմ{0UeaAZx}HI 1޻ְ .х` SBR @"n͘ |4)ܚxfbG 9;ΗlG*4f,Suȁ*΅jO^֎ݭBKY_ee?&7z9 wǺk, 'Dk;S&apR#Gq'Sp f2ҊEO!_3Qqj H~uGSB ?/bE L %=፮(|td$RЎ>qQ~c[Ɯ:]*l%m.仐uL"~@jRE qXwWVې1 }X(JmUv=ĉB6<=惋'=w~~$[?<{åc 3\*d/W9pÉdyklZ É=Vb* %O}8>4\ko:cɃ͗ @M:DzsN.B9AAEwb|-2{ŤE!X-h{Mmaw QK S$1vJ;|S=/8ù&{]_ԏ~ܖ}z*p ]Ķ$M#L;{}N 6&$4Nwp i&yqeH2yIi{ˤE#uҳ.х@]`U0 [\\jwڒ S4$ۇ,K a"(2V!EN.izh,LWɄ?ІkCvkg몒&' ŷ{׃ai=! ~46p'ŻnǰPS!kB"8r?a1[6;+SGw}M]>m/b%z":w8F)1ύމ^wֆ@>w(P]G / x`I_Mq(CAt_ppu;8're+N(jnheQëGt"e׏8J7 ~Gq ~Ƨ²փK+kq~]Ϧ\i33ǮɁgCLz3>޺iyۨwгF+?4VҤ21 ~ʸwSfA 9C)-$KCકc6iQ$B~~@r*YR1&aBDg?m`!>D^wLK0qšv>Ahj鶭~fkt.p$٦ot.C : l{Cy"ZH|SY>~gQN}MtT|}2o@`y0|XX;c. /wBRSYqF"79E]l>m[V>eq/v?tqq nڹ [twGu ]6?#H,3c-RwuBli[wAQW{̜>rof~,Gnzj i\b_/Mk#. D3]Vwz,w1p,".sǫ3}x¯`uԏa#_L^87G>wv]s"w r#-#w&. QeE6/T  aTҡcoRQw!glnP!'d|Ԭ⦴l(F#iA?o9Ed|Lķ&w;ohMcb+HcLtnVcͅOT[G74bb v0ޅUlѢBo}d$ulHuYA  "?i;M^=1I!byݱ0YHκ.FcH -v5,Jp8@V6a:<2aC!:\4d9$@k\#{qaB# X{̄<1aZ@N=FWuQIΩ:1Ύ:57s r=(\3ha_ '*~O|ݶCcXjy?g"ZO&2y6ҳ^=z aa4/;b ЃG nfe|Ʉ&@Nȼ\׆Zk}_-Ņ]\ibw~H{{]D EaG3IR*aOIQ_YS+/SKn8* }.0DCFGcHr'?%vq+g}=o+qBltU?L?ho','+֖@zLՙ?R5ewjE.Cc3)!9"!?<~ʙ> c5wr+Q%r+ .{w0 a$ZmA'WW+FN]miҚ BiJ N>@7,yR. {OY*H j*Npɯ2r<9RWʗ׍i>*) W֩S.KF41؏;{ocQ/[+:U[?NmGlqoÞĵY%]sAkI6n+ EdB_$ddlwOΊ3։„nbbeyހ7`$4tRw}TI{7TZm ?ƚ\_s[q##$x,xQ=l- =$:y)'o&-6|a|H qM>Mk&m/[y?xpV.aF(ofN, 7~a@^`3^mzS̠ڌb|F!ǘ9u,θǧ^? gf9n.hu$V2rDGɓLSPދzw.OxZmK]iΥظ{!0-{0Dax& XN-dg/"h0 gDU4ϢZMB k6mqꥵtDk }5=o09R$ L58 =\lpGN| ]T gj uVp~a|$!m ݞ_W۞P5^=V˙Lg5sHj9E64Ctr* Q{H55~s6(c؜ q\ >4ҦiPgb"Sau ^ R|e 854S,C@'ܯɘa! >Hp`f5zL^%G-E֋ƏZq1upXϸ@:G@|;ByᧁPFBX(݈<+!^w:0O33#͌ r u!E(?)YeG R_Ƕͭ}`MYw¿ {w~|jq JՏaViA;Ŷf?wy|W8-J=Q!Vɾ&t.UAJo&PhАllb_o4bGƂk%9?$ttnpob)³xRGkhc> j(S\J8xbMHOݶbREt+1dX/x"}}w ¶df;][4\, %L&5֔l"k)BNXw˹??GBGhd~ź,b2 O>#g$ VƆ9TiϺ7qTa;wzz*7yar{mDQf՝@jto<'ſb`! _B f" >%7G>*]Xm)-VHn"(Wc+K4 5s?eGqv#Q!G?j4bmum=y7ػ{ ó heceG ʺĐB b&Cv>@oe9;n:wfaIȝ-]y>oxեvyAM(+ƐQ>K@Z#8$4lw{?0jumiݱxhni__Oʜ>rESs͚|^Z4ZI::]5]HVr;ׅ%$U C¾? 0K&Tg7rq\Vbr8HA}n*5>r##ȝ)6=>CtA򦻥)7XCS &C!1k8d)LH?)k!BbKeM`5*RȲ\] grCI8nK$wYIZxJ>Aޝ8S(LNM2t=_){@ Daxl-}w_lYeIAlc6a.OXu&đ[@$~JnD;/)N=+I"?0(@f1s ީ|Di>`^"_3>\_H *Ԭ!(J';˽I}WR{Ѷ@&vFiM5Ї /n$}`Q0 8xg @W/⢣`ŘAQcI|@#i$P:=!`Gzϫն@B#oC ^xB|㇆?|vw~-8|)aR$5KgL 8 JkckmKiSpߩMm֝Z'="]{YTg%׿F.{3rnbJ$mе͂ @`U8_.}pvpsqtѡVl(`)CG~4eIz^bcW.1 jBHL =HGT*Ϛd:ⅆmS?Rrb˺'c6qؙ l?&{ƿ>ϒ \x ajMTIIiח47ٴ`6>&~TTj4J$~h]S A$%;svוMnR>$+"RBE&a$*++x".\T4ʹIZ*YE[7EJ6{]0`Wj'Kwi;_7E 2>.0N ˻ZPj_Waw($>\@$X_o'2~b5ޓ R_bM}ǟSQh dn"&֘`^U~b b>}v%ax :]D}vYIN&뱗(i e9_Y~nPk6_v梳MEde+F~Pour 8#K>k3m%{1 Dѱ(Q|?@G,3(fs$k7(D+ @;𜛍CƾkBC.NegN)},͕]j2 y5bΗO_-!biliGvlP̩X AbL@J^nneM?ClN>GkNÓ.P9\{qq-ms~EK>?ͷk @WXD R=W'Ru#ׄD-(Q|Ck^ا"aՙݿGM\d[j!!wy1Z;R:aZI:7/s,y7Z -_UkD;"L1;ػa dѺ{v/NIӕ(bM!0xŦ@MIIcC!)D409{G r0q>#]yEKyEpJæ}{>}n81)jbI*@"ĥ:r=(]&V{j )0^DS`x"Cۮc=o~ɨ1aZrzl~$xޏ-7ѢSq|k0:N wػb(M'"؈K8cӈ#`Ҿ $_2`1T5ezV, d>gu$%vۆ?CSIHl]rm8q?w6uyi@zuvy˂@x_K c]>?4yg;LNވ쓄X}vi(: ^Jw>$|@ػca d|Wp렻:J%AA?J.B %cD D x[#=[J>R&E u@wZ3PЀOk`b ~ z=Pȵu;`"2=ݸiP~q/e]oZ\u ivuNB/jڊXzmOHc!E\K{i*Z!U c0$J(dp\wnw80mu+`\JN4R@XRPE~y@ɡ,) vHs|U7 C޴@Hjy+0r~76ܳZ\Cl0 G~7l+{_t%j%b5 Зm ]v:vÇ=̚gB!;yFaWoԖw?%}}Sa !W^S{a::3QqB7?_'[#}b"|ɬE " 4^quO\DżƎh)P $x$NV ӌ@J)H7'R{Tʢ{2Hlnjyc%|DO~4zܔd!AS%~ݿ^ijAZ*G"9Ú9|d\E$w?+QϘ$JkIW[X~64&v:fKj:5)47$LC@70gW?ʧTr89\.|_7ʰb1堇z!u27V}>|҄s} Ⓩu'q)RJyHG#[|;9O&c[?<޹';A0ZQ8N }0&&X5?|mUtrJ\ŠQ)NXp紐%f!in'zGGZc)/d']dէgy!Q ꇍe)MYE'_(nBI3֗i9iwk˨ԉTKͭ1\L D `In@^_y` C I'muW!t;*n.Fc:}l.-'X}~SC Z8#Vl'E ۊy*] Bn]Z[w;tfLFT.D3Hݿd18:5qݸ>o1?ܲ)^N#BUہ1&9b{ g}]Jq~is7𼕧/7r廊d#Q_>y;{GA0|g--]F$$ǝ8 X'Mbc { xvuW 6>kK8pCi`j]ER+iY2e,s"s?\? rYuSS˓J)A5*;\c2$o)]5Sx,O5.q#9k L;kY$yaZ@0RGw*1- zSm%Um. P;FA8^_MpsUEpm-TO6t*Xcx_|Ҙ5Iz`t* l8*_~C|,~^cfuo $$juPHhB6<9[ c_&Иc}ŵ868Ly ݫ CaO II6MNҺ84TQ9̋p讚^/NkdGX$X=Եg6?k1*vigmT> $+I:@?KcAt &{nַ6ݦTU棧i]bXa g;"3*?c`Rm(!GWxaػw ÓMoYXXjIfgv5^ B$̙C_YNn.ԑ@mz`сHRaH; umGSǀpZͯ;XO{ P!vx{5& M48Td1ecG\GYឫ߹?I,O}[j8Ə{xrWA0|Rޅy .mMҞTC BCq;X+qC_M&: ]C~@^FLt+0hB  s-{_[..8i>dZڰU&& pQQSS"!nB놾Q͕u޷7Z@{kY$ʏ~#Qi~[nC!qsާA0hD%j?7qψ\7^&!{0 q*T :WXqDiTR+v즋8_k' :LΧ[~`|p=l7uىCARkTR7fb2`9OSE>  < Á0ze, \3X^ }Xv;;J*9 Jj|Z{Y`_(󣾢уpUAxvP޼hx~k7 }.(wy዇Ϲ~{!\vW2dZgm\i[Ψg:ԩѰ-M'LTU6Rf5CRrM^__ď=n0 % zLgejAHc"iAA2AvgB!B!B!#V>p^;Hv!ZM5\k;&q?eq@?} q ڰ{jSzWolH[mm`5 FAnW z{ ZKcU4>?/Hnyq7pЯ@2ؐq=Zu [6|~}-z^Hu2)̦KKœS[AB Yy7K L*X@*&l'4HQUQc_4jGSQw/w69d `)ߗ8ǏᬸMON&vM Uy71Hʡ;۹kM*,Yj:'-7oÓ&$MvbcKvB_u0ek~Pt ~_ N4^b.$Hc=$G\w<4$/>GAd./7pC|M"aIfsj÷&4bigB*>'R깽b>d.oWCP@_w*@/QЂ N!|խJmrĢU?u)!)%wP"vSu;v7ڡR\֙U\"În>ͩ'VT.ú;uֵ_W8n"i 8,$OHMI4Map~,|-Cr.Ǻ-I ﰾ~s 1cV$~ b8i~9M)<&{Er$ۭ!pWpMf ؀ 1 !lks=8iIuN!f@ŐnʇKK#_K#F NbNM] EwoJ K_vU}~+~HQHV jƩ.>xk"C/Π(5?=ɨet/0rNB|D#w)@ D\ 7.D7b$ J]JC74fT2Raҳ1]@Q>mAP;]L"~Ni5bGD-ڄBd.CCӍ0E:קԉ!cᏲh_:HmomA A4V? y"xOu53?&z$]1%5n.!!wO[v&`lra0j'{-'S 8B b08N&U ӢQ2Nf'W']]KVPwq{l:mGޱz}@f_9~0Yj jǠev 8Q/-cG"]! q^.iTX]Z/8WH%,\eMm[MO dгՃ %%?݊o_P7WO;6*hbgID-bdBY<=1󱫿\v~hYd;7\qGn{ӱo[&. cRҰ+`K0BK"73Mg!'ϾLɩ8#l1|sF/;{a( ߦ*:vqp|pvqp((6͟u[`M*BsY` S&c s!-}ٴkZ-\˓=LfPĦmF|"JN6y$M \:t>3k\xQ78-j嵊5@A@ZtY-rX~s^ex=6S?d FEKoHrě;#C 7[a?`@si° +H8WXUbY&I(JERcb'"/ziikHk_q{UݞGvZ~\r}K[cez[_ﲗYFK+\)Ϗ6 bfm2tWMU@(ޡAMް`{}A.?0 IYC mXj 0hGjOIq|~jG>?]h͝іCxyσ?ݫ* т9K%WŐXALUcL5Om(*H* kB>zyIyDNkHZ`U0_LC'tu}GpmM/5i(8XD(mT(gȗ#}'vG0;HgEeNeʃ ,fɦw]w-]MzZ3^Z߷yKW. .[d_>O!_ I\Ėj]~yG96? :Yds#C7~0I]dQǏM4.a_i0yFѾ;(G Byb0&|#> @3Sa KZ'q8zOች8vpj{iRSI ڪ`Sɗ' [%O'0 dF FYy-N;ABw qˇ-Qa›Ǽ^7k{ϭp 5@lѶǛZ^C#y6а@lXDv[']?ͧ7٬*N:&k(z~H vnXZ t>mY [#wn]] D+$J1'i@R|_#lջ9]TP-%ٔBsI?~wϫ޷}r];{@iηa; 9rZX]]߾}o9]ok`k"7ďi48z si*mc6>!هRVk6}zwpZؼq_~j9/Hm)BdL2a^46_}w}>ӑ՟Wݼ~@BhE;1$Teb;$q$XNq)Q$ YJۛDJWPyDR&c@C^{{ǟ 7;vM 8.MD:^BCGGC;x=PbYAAcx/?@p9h%NtNrYeB_ܣAGp?$n% BtZS}qqT) )f b)R5\c ۖ@$Iͺ~e1FHK/6ڴ?o,mN~/A#a#ipNu wӯ Ղ^g%Yp,s#?4b ;>ǹA1vg <v_75FpͰrj DjI_kCG| 1 2x4|\f}|JU6k/}-J!_Z#i?llB z0h1E=SCȍ$h#H 1 E3?. @;&m-z^G6l[ЬgqB(B`1␇eqc,vF7"/g`kCz i T2^?ʃ.ic9T'!}[et1HٺkUu*I"u%S)۽H^&bz,g!4lg0nG"C$iǦz)5 kڇ@| n!6Ѵ'ͮn8 ػ0#$"!&1(L& Nq?1|??m%R_@dhE~}a}M'% V:uY#F(F:NjlMdl[qa0Tt { bx#!L7U \5!aep<-bp /2&2YXN|~j72m8h5i#,jp Y#?L÷yv LU?Ө$6MC L;v$PYf5a ]tS( JCV-iI2v&&s@F$D/ p>=pv1}i78[=ba&ŅzX->lH=fNC?~>D]fc Z_@ĖՋnyAfTvfA|r>_n]M쵐Zd҅Q^K';]cG@ !AsK {1gSGUhKS#K:7C'‡Q҇o瞛 p;a $AET(x/"6|u+-nH]h'iR@Dilc sktSx^aCPl=,ٶ{}Bհ{}!?Lu#;W&ClKT.nVz<D+`[X5D A@$# db"RgG6 mW;8$̏\߹yA AA{z}uϢ*A1NM"|,F#)m>LKEÃ(D!}*cfR+@^^?p%_w6- AD驈`ͣ_ xgOE ^6q?f7iB[y(l7 fR8>>gx~S9`3].|Ztӂ:9.5΀SmkzZ8$Z19שqޮoĤd8MlծmvU٭x<Ɠ:طb;:ch\Δf憨֣O$Vv:.-EBo;( ~]E*.WF\$B47o ED]thBΜg3bA$Nj]]b89@۱hn>?ݺ|6r}5?q>kjGirӕU˾ۭp:=$6ڹ}tvMnƚ*Hh?4\(pԺHoR;>@îPBI!} _c>a>&HB[dz~d\˛OoY;b!wK 1Sjrh@#O) o@ݛQ&U?^Xښ?a{?qj*>ʾC85I_!T98FΝ wvW1(X(XKﰵR"̌{畉NbD΁͆f!|=@StŶW 5cdmCdz${j({a)mqQ |2}AћfI˛$ >Wͦ^Wo^xsJ@E_&Yh*хKV mSљydB @ '>eV1 !Vmq@Nxo=z8ݕW~:cvpy"P\[ >̖wv hpI#c>n@g|G*=w% ! '$ R|T!iHNqB &GIY%󥕇Lg>cߩ\d){U!,Y9҅6GbF_0yv1Lb^}ceNH>'^Ng?8D&{g0љ]+B*hi'bD8 !Ia.P ': 0/Ȟpk LݜyŸGY6mQ_' 9|~Dj?ROK8Q-Th9I aF;ϫN$;3~햭TO?ܚK@;6 }[{!ĵQ8 mAvٱ2{#kB޼<6Vͻ\meu!WFNetnQ$ 4o衃Fm _ď^W>adhG%H\, ih?]zvW[h5w6- A. Bg$zMqIr`ьiy3v *|Lj˲G8#A,DZ+![fǾUD13?_z߽&LщI 1IU.Y3JgC9$7h ȰN"C.daMIyl'MR?bI`IwyьqȚAN#AR~Oyii[/zzD*~$ ifgv7"߃$MJaZ~/H8;=IW pN)Z7_u9a@Gx{M7b>"6#UXe;B?9ZNpt! -F5[xZD1i]% ${1542fմvXDPAZG4?R?+H _kZMrL]~-׻ ^d")!~Y^ڹuӚųB4¤Y]5j]j#f'cTi$ !H˾Q^OHS)zoVme>pȇJ1g[QDnM2-e fpk۪-=?M]^fy}^n/ &I`į`aѪhϵG%[Ąo䏹2Tj ;1*%M]%Γf!Sh>3]bgN!h,W/@$陋[ФThHo4B"]snRك\?Lg:o?Dڐ⇊ " x,J 2Ry\.Q]DWV$߾-vlmzXZ ?f@Lc^ëw ` y>6xu;O\Qa}>k 8Uݱ O^'Hҙwb3& xieXr 6l*el2Oܠ(R)Tq+;SV9VmlvLq{΢ Ǹ7c%mq܊( әSW=?N\zQS>j H` "t;ǩ$lk"-+eV^y oV.-+Ǯ $qKP DĭYM&R >D 4MzyC5D g{?/bɃ'<{XJ"h{葓HX"hv4#VYE%yn&%9ЏDý2!O5 M"K4a uEpe?Qd*,S?$~N ]LE 1˘齅!/?؁o;܄a Ό W7bübDHA'BrBAs|!;X3!"L w'i95JGkׁ-yZdrLJnQczAL߇=rfk?_ÄLI9dKٕ^4W|d.1rXx'>+|pѢ/h|_m}nI ? DHIZ -M\49$ ԏ8\O. ]Ō8l:T6iCT C! M%CjK!~דA>cA1قzG lKSQж_lKQ?a Ű\ϩ|xA*/,{g0 QhPHztEvvJv3.Bm;lF0OߛB򯎥aD&٧6I}\txAN 7a}*ck4"țqoVj@Ce$[xNBT-EPS?䩦JKytZI%BIA4$WDCTH94>1!VT%=Br;RmNrT'I߯c'%m,9?Gdί7&,S?Bq^< /mχm=;,T!M-z17SXagW#+,0l%P}_(M[un/?G \;s8l jk{~Gp-/rwT0yH]ȃ485p\JSP.;3^ !80A? C眼6p4eRtVsykB_}ul!Ds(qV;c_[ډ4d6<$iZ?b y&X`KZ8l5eĎ/Lv_L0iA)VP? gO !.MX史M{/ǾgĶ kP]\N- 9&6zV$v̮MDt,b xPhEP5O/|ȗAN1 E=i/HWC{:;$ڊM{hR&*I|be!_yE[` dɝnSqI@j|ݍ<=ppOƎ0xg=B$uP H ]4B8 )1=8 9~cA~43@hЊ "X]u={Vh5XDm/j!n;bjHuXA:_[tF%D#>"0L=Qcz8r4/`X搊,?~˷%N}̦ BBghk3/{ii Kť wFt!(Ll{Z(rN)LC: y\ kwOҏ(N)S~U O͘*.ZՅ\/ќUn'Y.v.ţOڪ飶gSG~,?B U is gNM fL !i11 $aBݎ !0#H6FII9# /R?vzj~2TyMm>mj~ِ{ ƳÌc*HK)ff.5DgG1h-&a1?Ҕ_+Cey=y~`O;{b zV&(9DZnAsP: HIm`WZF!ݨ>OM^myHWT )ɗYYBnZtt6ގpxl*q>vA}sïpK#zxϕ1'"qx w²6L@nҜhA!"HдY I8)2f$'Zć !!Ҟ?ObQN+ w{kLJyԱldGԏNLs;YB_i6CwqBHx>_w+ AA{Ow<'B ^bgI4x}@6 eia\7Wd)dNmYg0NƮ1kFF4feWMMBϯ{6VvYwj҇ v5<ď(z&ؽ,|$x.SÜB |rOU睡ֽ5  i J}0 >5]Jb*L Q>\4 !勻oyaӞ١=j4V!)H*ɋs_&,ŏ>EcTtԏ~ !)HZa̓DV>}M82w @tt:fBK||$ ARy:鑟rAe۫Hs 6mjs|9,f-Ujg`.bD؂Vd2-n?} |m&f &hUh"G<2+1yT0!*MYyy!tft5OoX5l NH d~a@( xib9lY;s(j0$z lA%2W3dg$UD;%~5\у $ܡRke^hRG$x]{NՏ{a JS13^pY0bjIm_| 4 DQtfEE\5tn-SFͻyiB$$2 %?J {@V!J t)㰊m yK޶MߤG޾ۗtu1M94|C9q>.u|(tïoIiI P]:?r8+ <ץ6^hdBr O7?glEcHHHސ R8^i +[#G%dyC({jWK҇bSyI c؆ s&==#w+ @$ 7IЫO'hEI2&1`>X -;e@`6}Ԧ?Jꑥ|5;kDR1)d>:ݹ?xW2Ld*q=ɐQ)ïGI҇S&IÞ}!4?h3"kbX:[DsӵKyߤ 25|L(S_L uy&A".|HM0G~G}?Hե jA RLH<_wv+ @ ^/>w W$&3Yڂ?nlHsr CeSMjO~MG/3,L|Zr/[ 9c;.ѷX[5D?hQ *b.6&S!. 2#Iݎno^ ?뇸 :d(в.Ib|vER3h `S_>cދ[+urH_@7_bN뷠bb %8vՖ2A80}ϡph<|>5I$Gws$ =h% ou&hnCA_'Ju?`lR:Dv.ԪeAc&zocJʼy +ݠxU! oMguH + :L37jYO :H~=TژCx0H%DICGj KQl?|Q !(qj7yB|HCvWWA Ec:^Um63#M=)tL.98,UDŽd X78_pq>K&ǀ(5{,LlA!ab*P6M2 }t?4iU! s?$zE4[W G{B"EE{MnQQ @69RY.&Zo@ވx'ٯ|i?L%yrݶyG@(x4I&?^V ?KsnyHqVCABlr?=D[ʂc1C$BRl0Mp?@~&ňq sJ!vcK9 ٤6 QxB9@n#=CmOMhJ"yF#N 6B#aU2NhA~ 8FuQqP?EC%$ʉl(X<|9ﲺԏb( C >%|ؚt.ݑCq$V¤@a\p/ldч2~HNe#")FcPT.Ns9<̛Kn @E>_ U.jh< ( QJIv"+ y 0 T3Dc7t׏p EYGEšڿn}wp^( f]҃8M 9CQ&D6a@b AOzy}r6Fx|؛E#fSQ"R‡O?|>?+EcIq-*pm@~7"X]u2$_&PXP"I-D okwhs]#'6"~ HX.~bXg^^}3_w. P i0bT J~OcB$THQ3H(/Lpр܊FG ʂ6KCQQ7Ŧ}8IEN+$WمĹL|~ 7,h]4eSEenA$z4) uWo RKle0Qsk}R7$oWm[p$͜SFڄ)$Ɍ"kgρ2`&d[??wXKd~.i=JH}::mv`_"{w0 DaxVq%p+{ҍh$(U(%y @ H{uPgqk[:+ Po Z"^2$_M>y~7^߬ggݕ@~DX-N>1~# ?:9b]?Zaj} wԏM/QcrrO jlejka &*TСL3sl i.!wCƯeur:M:۶Y'YǒM 0_p/.\zoE=DO[ڂ H% jbɇtKHO̅H/nEX4W[bߤ4LiUbxʧ}dț\fk7Z9\dr< ~#~gY !#?*'px :IQF)夑2 ^R1 $~({b2;_/Dv*H" v#%n}ym+ ҈߻ 0$YH.ltR)uLI)>%~6#Kx'^0x a\Oݠ6-@QlSBﳩTR Qs> \ELBr8@q[D!`"#9\Sf`/e>L8sϘuyVK֛V7 Ef&#>֏v˃~iymfĵDy=$|AdOQMl=q+4=ͩi1s-dT9ş{Q{]V WN|<`lV0zm:2+_7ܻ19N\uq 1m<穀Y}Wp#CbXk훘B %, P^ƛ=YB_xK5 ĥ}E\2»^Me1dPϏZ|ώz]]z̋~g0h0&pft?G:CHEc zx+tkH@m78. ճcHڐcG\e;PˇKgh_?=_04 a.&D7/ĀBJ]>'vXTE Oډ%>Cp tNt&ݙ ϯkqnk!&qqE$yUeܟ9oUd$+e!h?f^qm @By(je+o{ldۄWe3o$@#R82U M4eѦ{65Jbu#6Mf?N~8ޑ?rA+g! ?; J\zw_%!5΍OO_bїk5_|y_OOcv>NPUX*nݹ{e0J!B@@Yb"p",EBHj(-S}?q1\Oޜ14<ԉ4GVuC)_Mw>4PYmP%YYZ-fOrOG/^;͞ضmU&pGs#1. uƹH4O?mqyD:P,h*9~MUvycGwMAlUGn ?iWg5a Hz rjߪk >*Ewٍɘ*g$˲f(ֻ+s; ֢/;fN =eWuOrZLswoCRFi9cN:NxhO?Z=s!^A-?6RM2tY4>1ƉÉ5e8Ik~%޾pBd+mP3< 2F4߭=zV 1~#` ̥ "]0(iK>5| & Ca3TTԭRv`cm2U*:%";J{!żi>kԽX$|S@)_1UA 2dܘa~5Kď8_}}ے$/_`?ڵ-xx$1ڼ̒xyrz^tz[hi^2lä RTI6mH(S⇕C$P Ydg?B t$[-~7T ?U|KgRs\>)u$ܘj0OS6`=`` K&9ij]ŎOJOjQ~,#O8gm} *Pׄ Uء愐=lbԺZ#~0eh? E\o(b2~%k%߃GbOǹ[W=ndvE>iě2Dcu&I"^TFwmo{"sHv~9V9.0q=WJmf TvDZݸe g!s-O%) a7ԡCDбDם"ʬܜRD!A)| ̜'|zv[kBDW<}FhQxTqU5A{qCY߫(Ad ,0~Sv9Ary~"UVs84l؀ mj܈J?ڂZ~t~֣o~ #Q_~+  `o<K^A TŸ8h)K4r-~h9| 1, Ql\>l9I!}# ?~D߸JY Htf%uTid,(j':*xj_!jY?;'?Q^&M7Y/a2JvnUvݡ.K?,Q$޽"k/QRb*S?xLRZc|/["H񃗐~c6!Ǿ.[?CaM K:).VǽiҨEADIK+!ގ@g/-!Qq@a0@rguB RCAK W(UUطA*+ fٵ][ߗ mKYmE;/sO2],12h9XN"kHKyǠxpFHu[C}Z?wj?pcOlw`Z0 @qb0v5. s 'mbن}@liEϏC'G.~ݍܭUG!0h#?rdjS@l>YuƱُ^$76z?=k=Ope $ ^k7qlj#GU&},5lGwL*̃On:>ֵie AIZgK>kZJ>\JiBqBW8W>zD% ^ i7ZY=G~nʾ>mAOk 6Kq,׹A_){g0 VBH\W RR^Y{KfX| +u!6;rzqomnwk|kB,?R@j{nH IzZ-U/o$WPZBoI% $i!G׈ <{d =|qzr6W"e;Eyz~<%?>b"FHv_VcT+Zx?B&[H/wiRMIkBrJt:_R? 1z>1J6>Ù;K%agN27t+uB[,'׵K Ɣs&C󤓋p (~Oc>\/wq'_I |!BGMEr#Hi5dOKƀXߤ?? Eh%j_H8_w+@i$Ͼ5Lf$"+|J% 6_~"'q,+:~Vl[']DHq?OfwWm9&5tciOڑ81½1bwBkǫV o.jlW^#>,mgyR@, p| 6 QTwr}.Л.HJgI!Lyd x&~ :Jmfrċ.Fߴ]h\(Ӳx݌n  u,b Hkx?Ԍz&m,)yVZ=oJ̾?c{PrѠKR~ƭn'7~>1ja@<bgCM(y}= 5fs#±A,18,q09 ~$Y?cذHD*H@|9rbRqR@\vi%8KwRᥨ;=%;_G@B+n"H@8=ZD1$/DmW, dqE$&bicq-~4d.~{}T k\m{ +N[>3EqWHS7a (B )(ҤyoodD1aY֎-m`{ Ar7ޗ@Zı0ziI6 3+#V%~(H+`YbhTvH?Pka'B oLν{UB(BH{hٳM2ulKF⇄U(812Fci~4ZG'uٔD$?uz ^0idC]qBøY}O}> /?>>YdW`AQaaKٞ {SHBi/¾4Z j}y G[V P\m]Oe] 5TFuU@j d Cnw #U@6'9dGd !:f˥hJyCqͿ36B F8> R CW뾻,RV;G[ydO~ϯ5<5^).?g!{0 Ea\Cg0$IJ#V A99@e/)]]rmT g53ckhVKsĹIJ.֧MCH5R4\5B^n,ll1TVe^h$ޡ*`$rȒq|tNIo?IO &C96un,su vΗAAnw805-, p&$v!C%Ci:y)Mf/IjxoK˝.BDRY\v-7םpll"1K;\o*~a13xS UdqVbŮgn<CД'gK%}9&FboPO.ȣ.ûz4;sBwH>ڻ黗AT"υx`szݽr3_κ3B'W/p\e?23&{璃 EѶ \wǁCNi__s& %%rHho%h0sJ3tjR[;>pfM !=Z4&!^45VxQsG31mCҁ, $ffwd1+E$9YęCjJ)8SH/S4}Gwn0oBaИK &}d3iEGwfx3cYΫiZgey6{?#`\`lV0F?W^<4ɦ&Ղ-5y6T%V6(oK>/$Yйu^hBmN,E<~oESjs/% $`t dJ@JH)J;%ED!NQ htJ @2g0 tƥ@^y\ms.F4 t7B@2>!fEcH '+}v?|eG!kRt|1w;܆A vWKO"]vdџ00dEU{qY0" ?DVajZyxm%~'Ϯ[}Ϗk3wx~bpyW_BE:D&)BI tL4 p9Á Ļ4S1m7k1l.JbʨŽ퓲S3U5rv]&.G,΢*цr);lգMb0~Lʣ5GnWf 7ǘqg'鮓1ryǧn43HAh]x o{j2vZbUh=M &* <`i쏫jwۭ0=k> q.̡ ~{QC 3susa@rxDۄlаAlgq9n,lvu!vhk_jcʋHG>Q}QÇ>ҡ }kwo"0}/>לZwo>B/ KW{G7c`cdސL3P>ls3Axn"nL4LبtJ+6RIC2K?gS徑?*[ bD m%+7%G+{ĽxߏX@b{($ع"1uk%ިڶ#A#uЂ'7B07 }D9vM+aIp>G6VINǔ5kH{-:HX=sc+t:s%`kmYaB,S,x{4r:_ #{g Ѷ. 0Ġjh(_? Q9qYM(G1d+ I"^HM 8 ?@O䀭@<BWӇ$H#14 8<,!>WuBfTor񆎵 !H[!Q)F;Ebnz{}JNZ?OX׎zd7 BpI˥Cgg88nxϗ w?-`ǟgA)E@Wn6ˠCPZo#ϛ`.NTכl7w(7m1v,g+&4h g(v~?ڭ`?DY%{ A)AvA  {+x !ݽBPKFFgy`b8:5秚>B#9BIJ칾k?#NWϛ׵A(jO+6NW܊ ҿ#p:/r8VGLD 9@yǍq|Zs\,چ5l=Q?uy߱@J:#ٺA!;zG9 j$b,ԡ ]@ܫrWⱑpH/ | v1X#|wxt=O-W˅h- HB="vi~^l?qg9^7p3 ѹAX.ׅktJlw{ў"ػ{$a !5?566v6vDIH} gV͏ V=ʜ;s؇NV.@[@"Gj1ǫϼan!uMU~ Ȫ ]K$7Fǝ~jZieȣ_ jh'Bl+jU&eLV:ӧc9!?“ yK[֖?\_17VhS8$TbTmr76){0 Dљ 6[V@ljA>8G:V[Ud"ś5&LDKLrmkZ\[? ]i7>$p] 9a R q=#&anFn!ȴq-}jș.O .R Bh?9 :o/Ubrl36S۟>&rD#{AkWR[b>9 ?fU 5Z9^_!ۮ _-!_Kz"m [5qҞ!$>O_Ώ p|  QS7^AW&cNcZ Q@Be (6Ӝl fgCAW~x'J <~8iz,o & Br*ph;4א.Hع&V\Tky {VcyU$"uZb}w¸c;m/S]0wR,UsV>ڗS"=㺹]&VlDsJcK TrMxڍ׻}܋=Ǯ{s<\gAKG?IGEF}I)(X|\ hxwcY/^QyGlV#PAt%ƚrgܺ6yDOve\@璘$m1Hon<,@bNhqW@#哜Ŕ߇3m5H;G)0FzOy0|R39GN?e6!-!Y1H_ˈ@`XujP( >R$. a^n'Yl/*{g0 Dљt q Yb5w 3vu=ɒJ'S߃^K@SN]zl` ?֮Gt, ۧA.6d wY?mܛ#.1qOrjjL2*#ex}VmM_bKJ6#O]l7% 2[;$Cc7;/ty UQõ 拏ս]b!6Q|чxƔ7wr}u)盳bq/ .d b(DzkXџCǬZYR"Wac` ra_ද pܐV=ƐNݪ]@j SE2ibf /IU@‡H M6hU? 骀XB"Q* K ;ہ4S*=Pd[`TNL9SeESWuW?Iw_Kq0ꜽy>Əss3كZ-Y40ҎNK<\zU,k} -hvoNяm6|\呑w#?lT\@\:?JӨ-o듋k}a^A0=hbV)]RP!==,0['u_~>]dnz>^˰}Zlz#Ge5H~.cn5PBJRH*H/hlL+{sKIzoXey긩RG _ѳŕXHtFNW/CĖL]8@b!DEs"֧%`gHg_AD*~hkWxVmy޹4 ax&E!e Ga/%v,9)4CJjԓDr,cߑoq\pQkr }+LVer{3<=nigҚ0 6ç5~кcmj zdW ])W8_>%Ua4%z{faߛaceN?=m95ֺhLwD~N~F5٘i׏޿u!B[ґ6)9\>9V+dj늅7!n[Ib&,<3X9zt$ɺ i_}o?(H]ו>+Iv3K  *xg(xck֦][ec vnf,1id q6DU/]?KL[N菭.u\؎JFMhKLvhgĘ w#H RJϔ2x_?X%$%I_?#RBkR^dJ|C>vf"`~Dxe|f?c]%s :|h3"n'Iv/4_} :*xh~`D}D[v?xcf[ aw|=x]=O[<?}5 Jꢴfdໆ&?͊MdG4o8/[*:W=܋Ii/3n!z&u|u.RH5J&Ble`LM5@A ~2 s{[KRN͗ѝ.7n:02w;cb ۦ+ xv$6fx.!vr%9K.iVɱɆ!8,X`Cu#Wgrqd$$6IT]$i.)fV]Hˤw?S; fѺk|OQZOƮ^9]$c69>|oHF6sZv~ͮca *:$0|?۟XV<^XnϿ5Sjm%3-g X3]l]^o[Ɠߘk֒?yNʭ'%]nt?ȧA @ EӍ@Nq…;7dB-@.2ɐB6%;[8_rlGrPVS_ jkZ*eDCʲz)"`"'3kN"Sڶl˕n"x,)gn 2ԛj9֞WDˡwvc|:sl(߇z2iJ}stMz%zGZ>yM||p1n0m]s/Хsѕ!TUmpHQ}`@Y;{Gog~ּLN":!Igl(K+}9daۚcdUٜ5S׾m׏:CwkbgXQߋvI."Ven9h7ʉ1aahJ{uܽwWv9^:'̟ 0 #^=Q&771tmnl í[LH-9//VI0 W#YDZ#|V7-xuֿZ0[8.$!c}?]?=7u[ vXUڴ-V Z68HogpVqI$φzJo_Rp(Nm3Pt(6q{{~N.[c+V1q"cxiwD?d()>1% ك^'ֶtPm/kng:{WA0q~p@\T(,&.M#=H} 0ï $OťPmNpui orWmsn(oqm0rb ;Fh˞ lBJ5"EG\>AO[˛OAXC Ǥ[ 5kv`I?&m3 j\_(? ̮ ]/\MC H , {6s> п^qzlj{el|` u0\G,  ( !{ h4v 2 KfuK&^w@~@x3S9]LֱVkhQt*(D~qIv)J|Z* IbZ-u-/33KlO󾭌_#)'FI-CU;I Zx2?1D؟߻f<8R%C "nro1"R1"YPa[bX?o~pDM! M^aw灹b%`g= 0"ƌFPNJyj)jIb%us}g% msR~|M/ݵ'OcYZ]3fLZB2b cZHɞS+.$Nh9/sm<9 /Ygӵ0d~zǡɼn"KKҷQW;BտU]vNIt#3,%(WPCi86>B;`UF0n]ݵL !..vߟMSS&a YȩM)"C@X_\+]jV!@|?ACEzOMtxtӝ br:5H(rvtVa5=Dc&?m71GlW0+^U  FEgO0Sx|vKo8̈;a '邮o{}'QDx]$vfҴ "wiZJfGjo0<,<q KPhD˺yL#޻s|skq#iU8"<=ƲV)G芍l 8 *y0NvG?{}pˣEU-Pcu]'no*@TG/ŕa_%OVSM?r1 c>N175OتD?نd9F6״1D$kTS &yU'}s@ȿ^Caw ?#&]8gw{ƒ80`U0>{'VB|B!|4+6iJ;fFh G.27s}30~gjl~Z[g:>:&}[`|>4tvM)n?wlK"r͗29k ,}.Q6AV6jXj$K҈\交N}6Y$>F{yHwo㛼x1h^n@eKqXM}3xA #_mAy„άfMUz\e.MOW_.c%/ljN}'y>"6K}gͯ*uQ| T4J[NO]Ccu[q#eWBfY?lx7ʏ @FZBm-mZAd3׹fD s *#(@O?m|?ڌLrW Wo(ܕB;eX'\(ׁ6j@|/*a:ŠnzEMpu9ͮf2[>ǰP~~\n{ In mK=GdA$Sz }\$21Y~6+ܼFd@DD$xn?Y:# kBnogSw(pnzW'g' J ڦi~ [EE?{_@Zl C{./mk`2\jBD|XYIDs GsYmXGί}(gXAQ4Jh~MMuHҏ~o>Ypn/RHN ") iI z}2qo `3XTzϬ葋O[*P(iR0iߊb%֐ރ}#ҙYcܩ1/;Ԅ( d}t]DK_]]@-T} HoNt R>$/!A!p|chK` ;B&S8)Ǚs\kNffwL̹[Fܷ#ܒVȭSj>2Y$Q"6'Yc dz#o~N.2 5_F!{til6M#mkm($}ec)B/@f/TS>$"Y?T!xU*{mP iwɹm-@jBmՕ7!<OC:aENGX=O0?o21#1>CU TTTrus_ܲSr:[+IƇۢ.mm1nWf$̔u,q-aݲvc\';FSKK4Q)-\-)/cjŨhc5Yx4'P×~HDHگDᨤ1QB^ߚn [(_B:%PZ]Ns=nՅͩܚ*%3q-lK56q#tkvw6OqWw]'9Aڱƻ>vLidzH<4C1y=sԑȴ,RuKVܾm?xakq8t_Ԧ4xw; o  P KּeFr}W؃pf< ۺ$?)@ڛkX2p^MeMNz3q۞:mתJ{. ƛuO狙dn=xmSg30pHsiz䪤k8=5<=cFfe8o]o_S4X肶i,E?X ڗs|.79p}t saP~S먦4QAudRS*5\e4.ԕ$f"8#kP[5XCqՏ믍slj.?w @{<Rz'zT("$͘Nt-b\&3C0ͤ?"z|Z}hr]v}i/mByz}y\_e<6("\,و$Yu`:+dHG[|$Ǝ_=j#Cn2> 0 # h@ku X/{Kg}>0}s_P,p)w /ϕU̮롳Gu U(C;ŷm éb|Hcuk(]tx tHC݀fWx}ۅOoSûEsHfd|]AC~:(C;SeD u.%}tdIHjUQt!V6O@̉^I7Lgc"kIl?^qas+P0B eo p=dEڋ 蹅? 4w>QA?"XXL bkߏIrޓS?"J@bA@\CCrsh {CG^_A;("ݸ]GKW.J^K2㼗6ICx;4 4}5,DC.z}_#&O'w7<ܺS!6EW6?084CGZl!< i<&R_zRAg?@K1/V6j[M^_sC`|}MKinƮenI ) 9@F3oh?ͻBk=?;c( X``o9[la$** ς82@G76"w tmC &,"@24QJ5#:y|L 0dm6Î)$?|\j!=|~S ~'ɲ| 22jfX5zH|>0׫wGqvKx$];fj?_tsD/OF[V)Uźh҅umx=y#deί;j:Y^: \3=R2Ò&_)V:X}\d8; +|G@y9U@Z|y~L㊦3;/*z]&ѐ5GT=9֖@[p - ܠ$#2~%jD!yE_b~0;{a( ۡ@x WbC'XY* m)%R&v~|s|0yPgr=87qcw}L O\٩5++&!EhT@M&wUc m[L >ʧaҾe@T ڜSfΧ4 >ruin->\=uJ)lOYĐNRNIJOMIe*L6?U~9'IY\]읇 aS e\c;C2/Z؝b;PO:e5R[W-+Lub/Lo?O;Մ(D5|>g](n\t+A.tUjg(JM2d0w}3@Z:MKj>Vߋ[-VbBaWF]EIWNL p,6j~a( (k#5}` :evX}[뤽B>>֝ꫢymQdi'WҮ>ژ#>Ϣ 6'S㎇^G=y!.B-mA54l#J)L !6Ɉ-ZN$7x[5{dŇ CqDW77x`i_@}hӴ 2Au]Ax.#w!dHdU[gṒ%E vMnDDz] f bw]?Daڤ~H@>5rJ_lGy4>Q'\/. fc18gR2C-g'632/c9HG^dǭv5u;@⟴gNhmNjviH,xDűA5PA-~o/<܇={ż"J1''ko>WO^X`AAnl]n[bRYiٙ#8B`tu{_xMމ~>=X@K,E1#}dUv"-"ΰ~*;Ѭ}#~?q6>xV&{y|~9Yܤkc@6H57xkW?ڹ1y6mrBrkH˺ P t}OJlޟ^38 #摁:'5ۙ#E )ېZZM?TbrKj]w59."X62/i `aegxa$^v^)"DjqlGJ|?)cJ^;; ġصS KS95id8W6xۍF`׶Olq.hlm==RV2EIЉ&ԑglu.{!ԡM@l "c,T$= BhV匳R 4ႅGW7tQ> s:S^^B$u$'?*_.}DZ`O윮AT^munqmstz|yMŸތl5&01ɔrvZ'{6ǓCL e `fXωe,=X½$Xa1aꋒoW]^?3i3ßfdbfaCS crg;=) ohMb|ɻ{H- 蟸wu&*!,9oi;ز:ns+cv|Wy'޻-LS%\u3 wdZ^v[GWTk͕|QWrü'Qtg}m=ܿ<az~x8'uAо}pr0k 3йǃ9dVR.>03]ꖣxآ$ k kp]rJb^n@>gə%=]$P;'Ѕ_8}$W/RLjbK,_)'b\ޏG?L&׷ϳO;a ς =Aoر ĢBB&A[ܨ"J&N93|3@~X?|e_ckU@p`}BeYyݧ3b"79?WYf);TPGue/$*},~x_.LdHYՏvSej@Ve0ZFB (x! B.UѪ U0qn[}8(Z1*bU?Rv,?TL*99>@[e}1քU-W8/dJ+; K;@oin[`yǫ)SPIߤ E%ǜ0 ~̻읽N0o6Ȃ y F U Hȵ}_}Ue5:ܜ{0lxRoy^G_:sgvmX%!cTmk_gnH  Š,%}˫}U%άj񱓩 D Zپ8GSX1gckA1e̦ϋR?$v]u|x| ۣO|G ʧ8o qID(uM nc?^~Bva4>|OC7-tE>>:Cyys`ni0^UM^vc-uajX3jW[jDH``@&[V%#~ł٣I>V1}n}._wv9 Q-w&\K0;Smf2SZDiZIϹAgRǐ"v_?45?15bLo85$ߢ&ͶYzGB4Sj}_ NATBNI&!  &}#㇟Kw5f/:zzY ݵՋkn]A9 nކ.ΩY8V*NU()~p}֘ߣCGp?^0~9|; )Hݗ׀1$L LwƖj tdljbړNa,Kc1cΫd祼oN N@o6] OҰܺu+Jܙ[$b~_BB2\r=@Fдú~Ɛ1) @~Cܮqc1&cxNNuf"w[@BqsA8zk# x\X'IBC;F]~hG~a'6*:̆G+Gv;Ѣd6r:iuf/QRILp) Q4st7bޗB1Wb>WJ5'7 })D/ ,M O79>*wBi{ hYlTݵmRB{) goI=1.xǽL_]X7a;RXXESN,`C+ԍ Pg;@s P {py"n(6M&MU|Oۆ6έ(mQHk@Fky~J+?맭Y?s kV?kPG;JfljuTcPG?cXSR?bo u%o#֛@rccw]T_u7>l8wy f/o'36ዞ)zH /;"&KS+^WK&ZjE./[#Iv,eRg@7 TՖɎI(XfMZ 's ?a" 4 a eC+6FXZ*("6;qڸR>R/5 ˶Nsu /r^v3ysj*`l2f]O,#*YTL BruP~iIʔ7ט}?f#y}:>ikhmu^ D\YJ~ɛWᾕONٖ:ߞ;616M ލbmR\K8E IAkxWml\`l8sQ!;_->,Z2ln 5 `/-4Yޅ.M2P&Ɛ5b0`}"AǒƖ &1 f|;m0^b2$V1>Sч" =>a%7Ii حKгy W Y<ЍBjbiLL%L~d$dy `ދzc1G(KK?\``)Gs۶0\~VDiEg4"P8G~I8јOIӇt[9SWo*&q@ 7v9FYWa665V%H\?^~FE9|& @޽_$?\|r$ &Q n)z=NҜlW&R.@~6Df:_|SAĤgBNl17Nr:kX FɆ.:l@\Su /GR`jq*1YG}M;0b ?K&aOQa@HKl8+W`ذf?@4iӔ$Oꢱ+YI[$A@G^F&yqX6D"ZFbSG^ۣGki|oz{zFsy=Kg'ҭ(w좽3^aPزck{7f!u'GϋlE'-6rfS:G7;.8 _^F Κd>pbQץ8CCTj? }JDf$'bH A8$WaM`S$stz<q(KDQ"4k<`عj'('\?|̊3|w: @>Bdo vfEL<Ht RQD(Ԙrvh mTFYHEٌ{ Cx^Ԯ!E8;0KlG9ɽƺ}4qx^^?t&S8K(_rᄝJb|IMQ5zԭno 9~,V`?CA'CFWpX15tr]?tp6E!Z$mEň8$wz%+ o9ZIx >dd}.9.04;]NǖsM*A#QIx(JkR8]r 4u2[0,T+)V)0EiUMbUR6a<.Ȭ]iqlkS /a4tqqz6pƈ<\ճ4p3{G>~+dl6:E tч_\rF"g}}=̲vY~H*'"1Ye}J Fႎ^bq{gS>f ҇N`Itn_kp* ~Ķvcc'3s( l.ٛn{>NX$JzXd\&L=\SO\@;P9r'S:;٥xk H[L M04ڊCTIY l_F_f >T?K#]G8P-{W0 DI?  Ʈl0 &vX*B66;qҦ)d=)c;s p!uDuu뺺#2~oߒ9VU U5ϯKTMߺd N\`]>rԿiRhꃇ8aއ}H@3IvL9-ELEԁIrVl<i}6{:&t1&ǷoE&s W @$WAY >tVet}7A'U?B|#zzh7 x#-SH^9҂+ޕG3+=ي fS>,:1~(و|Sq`^˵;tE#YeΈ.M,"pENX| 4 aЁ'`l # b)eHH @j|w]&@BoEU$]}w0Cd#fh: 5 j1,%Zp \CE}:stS5t5cr~+>>}BM,ub͸tn5dViDFuIoRWjV$b&2dg-2wAX;E5i'UeӸ8cG#F㇭~6%N^bJ1Z=n?4m!}>O[xA `e|h{ R9{nçxAFpɫv4.qBVu,ڪ!@m_P/t3oǁs"$ ?l?>4,Nϋޮfz*_ijddkeeqL  |(H4У1_!DW'kS77I{;GXڒZ !V Zo0 ɒL6DM ~N2~ѼUՁ,Z3~Ҍ/~zd 1CΘ'W@".&n|WfhdC y}}b/@Bk};.DMN1߃C8C!EcӸbm$1cK_?>@5o~>/2k-ʪeMBn,0-œ'}sdR)5Fd֕-\@@O[/y,hb+v3^u6_1{XB~ ;\S501*q[# JA.S-rdL~? L X ΗJ@'ћ E x-ԻROAAfӄl 4n.f;?? oErY\Aھw cٹ]]5C6W- 4~Ww]2#VcBIܾNa&4oQٍR,#Zv5 qgsÂs%, `}e$"]+ ^CV…;9ޥ'+qGz6p7],//wh3ɺMr"x&'9{9a5R ,AVpdl~HwHr1#0OSi1q'{0 Ds (b1ڑ 3L, H0YPEqBRױS~R:Rv/{ ɀ6Wb14&Y%VL{W:wSWBn_2$W7Y;}ՉcmkaU0%ڗtKi#E-=Z#'@(ʏWZMMLh\I;*^g>JbQlTV ~_<^wG3Y2n@}+VALt`7u 5]`@Iד8zu# (7X֕,*zh >E_4)K@[J$bhiQn^y!{g0 /2<o/пwz'Ap; MҐ6(AY,ɗ~B@ ʅJG%wñHՂA#}ۚ'|/C/8p w>Bn ei?' V2yU,kYvc^^ /`g, ^Pz>\R@Wy|YtEח d(튭$ >7=Ƌ)#n 'iGU-L[ Umv ОC},^Eiᇝ` ?Xa 5ۀO7JPY);sIKJr"<. 0JUbY5nbۗTbz~Vb|7n yۓC8, Ǿ@g Dx?ċ]"NnՑ,0߃A֜pt-0`[aҍ+sl!v$4ԍ)O"f%^s3X̉?}Ѯ{ï]J@H7t#nܸ '(nX jܙ$3<i@Iܙ~l Gw_i D]Tl@Dj`=}޴=wtMl,.wI Kq?ߌg~5zBAr+ڻXZr?bu,Soft|F;t':c+tҘ⵼vi cqLBkЎLPt{2Mvzn%b`o>ܴe\GN* ? )^Ly?Gk Ոb;J#o HeLF=S(eR @ڙi"B[gRN- ;;`w+`^X-j^q "LC13e01b3i0:P` O j{JOokJp{D6NI$ 'O/tr>0,| մ4 pAGM'ŽM<2ǐm˛dMӴMƞXWzH7_ >1^ &FFsD&Kok 3B$c %HhctѮMi uF;U ;Z6.EsWfLJӛtv\-R@-Ӝ_tyѧӁvk϶"۔@\e^>f][V/X,g4!T AH;%./+%71? >4>}>)I˚ddi:ZbK0R=Nz8ɨ%?ǂT L̵:)ummRAdIRI/kr^̤(A42vE 5׺5 0߇۷Be!'H s608W-3~~YH/efs;n$[_ػ~(BI''WG{\\\ܤNUP (R/1]rq5}BXs:r >dgU#$ Bl_9{)=tΪ"uWiykr? wn W+y6֙4M̋MSoLd4򙔪}(iHGbP`X,S:ۇ%i{;7|HLcEq+5 ARÿ*A BεB;O绸|+>rG'}X"}NvBӧw?zqwyKe,C&1Z㺀$C$2"!?6@T$^կxWА baUbZZ u+f}n"h PXS@v6%V  Q-(Y0O"sʾ 'fۺoX:OŌ i.`u(HP:X`J~3bHcyI6)-U{j!r^w@Ђ QAfm&TM~@FЁՖ!`9۰6KF[#H]i""n}R_ߚ4k2ؾ3S:E&jV5_m)ac!o̖f! V?L\>3`7Zgi]uioخά*'(延f*c>>la'$t3a1 9. BbB?0jbH2sނy\)@4PAU%~Gt0q `wZ3I)*OњkFvHubk0ϹCӏL:Z&4sq3=>:taaT]Zc|H&HHC7I6,r|Cח]ve@L|T9V[Wf|NqMA,(`M9O*ȴd}pM`iTY?<_2^ȇ hc+{ײ0EoRpSA.m >+qceADq'734M4d.s3,7~aS"r&h X%,W4GEgݛ'mL7+"& Q;Mov41 KC5u;'츭ٓ7a;7X?\4ڭ ;68 ֬=)JjH 섉 l9 '01YG brg 07<n;>x JhǘdTzG%op4) 6#O(eI.\]- _4Q"S5]5įNy$QR=2ŵ Dn |G4&+ZB[][Y&mB ox\HїmP+c!B*'ȣ))MYf%i@^床>1LPz6N *ڄܟ׏)M^7]MO@J 'x7`=$zA]t Qx/i)YHigg̓ք9M?pH:%@b?o}Y@K}~ۺXWH7uښvF׭6ȇJ|DJ'\Oi| lK ix0 J\:[k]?)i}9Ì.x±wp 9GD!vD ddPު$/+HW1qi30gmgMݣ6on Tq0fGFn.|]GyMit?"?~I\@$. „/zz"+=R?cW%+#+,*"2rd2qfmg@uOhqBڑ68ԕ  p וG+}mHLHtD?dԚN[_ϭ*LͦC#+.w1g/4| մ4l+( ^E^?7EA$xV֏Yw6viMd& 0F\߷hK\丌&B>$~ce H`0 DA~{:y1;oWD}8wmа#0Mn{ݍZ0,W`&[Tϳ(Qא:yD-Ek^8IaZӵqG'k) «:AYPK}= hw?BHQNsk7g<~部KTHyX9/'5^,q"DpCLG̨F 0ymAh?ЌIW%gTeAr}`Rי;(&m>:xjH:<}M'n-Rmd;ue:3AV5&,"]SAĪ'mGb2[Kέ@^]KQ#.9?3QC9GtvLo~pw, At Bj[ 6v֟`cc!haK#A%w+;5.D{p|Bn}o D >_{y"mD&%h\@p{?b_cGӶ^Gh?QoD)l["|=1V# Au&1W,URˉZb+k jr7cmEZtX`<Ք|C-S5(7M᪭ L)9me~%Ҏ!")v AbwT <|.}gS@YnsuZ >8TʡkD}̻SB%Yqr=B{hGr sbݐɲO܎#>*X*R̷e}L$Y_p8=Bu+kHۡ8D( \e i:?hpХy(0¼Ru 0Y>e'BKX!\չTb.s%4B$0OP_}Zj(|ݾ&o|6?w>- An7 EP/= z(b5]'OmHM-5nf̓_~l]tA~s*X!m?C!]ϳcC^okuAaRa"[X#SYD"ѮԔ0X#L%S; ?oGWGh=w/#q+𾶋<8I ls;[U⪅WvW/g}-S4 vV9H@a6"rQbgE=lNAA?( QN&uRSp5K;% #2Tte!rXmRO/\_s:)sa_>ܾK,J+|].j<*qaibSneWF?w-+ QtUnBЅ;q"X]w;KɌޙ$GMQr؎Ezy@K`l ņ'Q&5VY evռ)e?|FIV~Ɵu{Iw..>R7xOd4:S*mMI-1^ed ]&\W>K "0y-!RdH Mq3G؝sv5K]3=Px5}1˜~gu!$z^ Q~C{Vtm>e'{Cn䄏DYA驥uOHRZ;N{o[rZHVM%ezfKnyS no~R\Xm+^1q7kXASRFb@B/0Ӟ<$yætR3'5<4o*~|vűEsN$&MNsNm͏2XdmzFW_&DWUxiR;OwG]a ψ ~@T EB H< DPgy:_IHlǏ(v3;Ɖ8k_6]׬']}/PQX E!#i3'qC}!iuT+d<ޕ})n*Yd/ArƽCъ05.7j%kT?R@ %>UYkYGVٽ5 ⬣k CQmA$yG:xxzB1T!֛HS̗,Eba4Sxɾ:rc;W\>cl5%GelEgWpDt}`$>g!52a#~lr.EOcTbW_1VvS.B uqsy+E_ -!v5㔰BoBX# ,)AB\4*5aXi]Aڜ&Y"i&]W3:uc_SԊ.qk|$e?Rn'Z}q@w.- QiR^7 u+).T7RI<<2sg2ISs%f*%IwjYINɬ8G]GUHm !>cAAAn, zo]F՘MAHh2Fx>|AMg(7L6 o՝XRҸ/M5ۢc9hFЯ7mɖuL s8)@ K q5zӃ>mPq& ~d F {Ɲ( kB5@H#7A!J?UT9K9ԏrm ;S 6V%{{jf>M9j- ¡x.o^q<Ť"}Zؤ4D/i !Uu0>v R:eXtf.*%@Pù6օ1r߉hu\W 1_rTE;e5$)*1%",cֹ(=S}B^Yy8isaj02p:83mviok01R%aJSx867 + C^X~PߵL&gE_3{raS0dj!YaO+̚pLmvzكĝbTB =R7j>+d H^H0hA29pA+߻?ܟA=-+ FxfCUV9Oks$F!ڲ+H]IS֨d-*^#+sѭ1ĺ|k0^YyMb2Uć>`yb۔ 212X@Be@L.,CBܑ]܋_P_!i,>gX{#'!<HHlPyAǜ^1Ec0[1#0`MYD_FQDlϻUtylY\]!g=pZ2]5qBΰdUVP]Td H;uVAƶ*{t1p Hk $ aIJ'&QJ jI;56Qו @zJwH1?@d MA]E!6)|s)m߬8621%v)Au-;nî1NᔏԮ*&]ԕ<~+L|G$- :xVE:sp#_1ADu4D0Lb/K#G< `r5")i1saJ!gtyINj~c#&΋ #;B =QU"yG|P-qHA9'Qi(DM)NSum E:kBULKZS0k`[QuMУl;֟dVeEi:I9} t.UGV2f#EvR5-PbXs d]2R&k!H:yFp:b{+k?`#5Zȉ?(7QQЅVQ֦1;$L=GB-mB{g"zaWDtQ,l>:,X{0i.<fؗwƪ*;%(#>lWI(J=?PUG쀧6?Q}i3)c".GOMڍ8"y4dC,MMrb`jXo&a8Lic;&w .T(7>VtۦnVL1SA>U'}&FwWuvr|35MLr t;WJX*Ɏr@rw V SGtk?êߔlv|_5h4xĺȜcטX&65=ξw:iV<}u.iIT^'&64*~'&j>0Lg+%{vFn4j[!B}NOػa0RD ㍣7$1a8Y'\!D ~KU-:aժ~US?#_cc#+KW\srشdZbȵ۝4d4jlYC1aEsS<2IIp i!W!I]a5!Mײug>oj1HZ’r#p'n|cN=1.͕z<,_Nۨ8tDnH$Z)&NRS[mAk֠tLqmلC{Ye/t #>{juHBxB_NpF s)FPإ\SчhDu49bчG&4"SR_s}__,Xopy+x5 ڨ/sE!siSA$̭jFԯ,4sITm$MD4>ş\\,Y㤏Vvצ&\3ķJ@ǃhrՇeP*P(Q(q6d.,$iRBvnϊkŤ \'=ߤR@'C8U 沚mܥ(ڟ;Z}ǝdڨZm !\OCmȳMߗ=$7PAwOHN4wL\ЎK~*F 2=?d:ٸ_Aw[+8<1Ȗ[t㎭+)!DCI_5}$5O&>w=@AAT4 'GJ/okDc.`&%W-b'{g0[… Wq .ܹ(nM eL3dȢd(ܛ~@Dž\qpV,9 Jmlcm{=S(n٤챋cJ, I`lKpIH#&[Ktw6qomxPbu<<d|~(WL./d_ ubScAtV-Eڌr{kwŊ'1Vh ͺ1ß:^7&mM`*i7kGAĚGú|Tـ?/?&r}n"$9v"I\/Gk~1{hzD!=L*?2}L~nY&5){g@ EPAO;B}OC)RLl:ҖmdC -̴Ϗ֕>.E(E߻ &\@6/l:u^kv_7"K 0d8rr\׏x/5 ߼PO ?^8 d|U3 B))CP%ċBR7j캃Ƶt(ޱ~5Av%fk2{e"Ed%ngqtr q@pn|]NeY B#j"uc#oj*VxPk9`˭Q&j;W볏/n85?w P Pw#f˜>@h֡5Ȗ~m(GJ]}:@~"/l7d?3ąRel TO`35`ƗZ?| ښ?Rs? C !-%䱑]87>Ve0HB=}M!0OKyOBߗL~L8?[l X y=..H5hd C([7]&!KF}r¥ǿҹqFhk =&{粚0ჵхPMŗ-CEKv\i239 |CsϏ%}Vdzh4. I3G_Hn-Z7<3ہ\#v',thc:+[9n zK KNL1l2J~Vu=z`[⦷@0>*fxyGKƅtlrt B+t@v 3cA}08;: 81"W7/r>H[ Z2E.ĚtmkƍT?< $~-eŲT{$D৚gWcC^C{V-k?R\ٜ~ͷE4!G 9;-vq ~[|M8C%~lD}; 줫HS YxԹ^348*2y{|.WPNkI׮GS?9Ka [qSTȪ $tbNKʍf77;g@}`~R8 č Y=TOڅ E(0PbfCd%>LS~GxY bUЕRa%skڊ:\) 1)CG1$}Q>;|B:n6l>I2Vf )&/~Oz6Ju׿.lj8$}) rcG'϶]6;d:c]^*鍎NmK/)^~D7*. Q>rpS}bhcsNӵ1(Fu<8Ow*A]6b7~iZ|DYc07943a ?ZJuZոs\i[@l粈("Ҋm6S.\r7Y}O̻gl0Ed n+,q்E "4jU| VENf%>p|I~Oq~; BL?5;C> l"'q8|[dd䅱F1cO Tທ{'Z&!:D̿ӿEԿ8GNw*PuAp7~ q VE66MiLruP@%=Lh z,Bt^n%]B }w~1ms~0]D AǦб-Usm1ٝ@ : Os{R"f*Db@ǖdN&om59{ ttTma?"&"$"^qcw4kǐ0t.]v{_U'^;=˙ 00ʎ^oAD(JLbj| MS4 lwnw쾨^@yMm m価6TfEw~rO/V"RS?6/(Մ?ƄI^Ն=rK ޜL :H/H{},8B ݣ a X3{!GvV)4R(=l`l6)e@GΗ)4?* x9$&ZB$#kC y#vT'u!QYlzOeNkc9{;D5[kEkxMi }?z @ O,J l Qu- ( ulvɐ&g@ˆӭwݬea*٫!HJjHcz!G{V>?Mί?u{i!Y- 㥝G`q07x2/-8' ήٙF|FJi?O6ֿ?v|:0vSkj~k~՜+~OnݤjKh~ucs/ Gm\7\ ӏ#_ػca 2E&b ("хƊB(HU>Av@Y'<.%ںvG\GR: $:_w_0]$ڗ&] zg?iKɻ%_ػca( =S=f=zn=Gɩ(tyO\L..0J9=3A>rLJzSĞKA7?^{2gkkj,9u#Lɝe:C^O 3ػC "{z=$H4W@aYTIޓ̴Tlj($Q }T7[fB 36}fg@ֽ>zYVU~י }D5(m^fW3~k۳o&}`Q q_nĕdv[K:m[ yh)) C@.OY4t>a!2#DtZಾ O>}P:ܳkџjgO&[|nkGm-Ï_4~s6tt-{0Et܄+rV.] +I$L^`t_9r t<- (K#βL͍٫vlG&#j.iM{k7F&ȑ9gk#.҈֊=hi?c9_2Mފ{;Fa0ΞGUZp$qI‹(|ߤ&>\~?9,繨%Xi?Ԟsm?j"!Hi^i$l=7Ok]/#V~V#EYv@ xl b*f&ݝ2+^|S?nͲyd~=hmmnX$OtHm^if#ϯtӌTd\fh_O37ʹ>J;`nm eX)X< $SBP澯w$ %ySq}@`W9eۖz1剬RS{DR;vll|VV-VSxw.ϿKԑRT?>Ϟ%DsJ9˭`qvtfa`KxVgG0$ 6D%yo6MXHR{Lː1ᣰc&Xℵd.UJƣ#_,=)7_HH߈>jbNjP#G~mQbr?S}xvbGA%[Hc'v@6bbv6ރٝ0[ c@][sne\TY0G>M&DQύUߚ\Oܔ)h4O}ҢR ԾKBL5~D6!S #Aҽx0#/ػcb(]rkw\^lm,Mb+KO Kn^yQ6J1Ck DR~v7g> Gop_Ht&>ykQ{7ڵ-cz<K;FA:x-<'A; eԄ>RH^IM/`^w(P,Sy^;t2.+H")"-~ߖ& T&hwzsjƥXB }<*?x6[y;~!VvmeN qd1Go?Wl6=cUj k`M0RprGv p'7 Bbr$㸟y P3:ml֫JP $_&t) 3 `2LtTcd~ !}Y.GU4 ҽ`m _ioCZ b lILDGM.~_U/ P1Kۇs} *∉)҆K!#5}w4s 1 ߾%I>^{g֏󵻇IX.zcn;AS1 F`DEOAMC$v{۲&}]{6e^5CY# Dv#}￙U$ mvϵ `#ktiuɂӱG6v<(שdݱ AЩc˱ 02lrݛQ =`'9|{N>Vc,Ә&ՐDKKH)Ȅ:;Bv`g!1{mx޾ASd;}΍i3K}!Cȹ  Q%X Ұ1eAti2H4@(h(BG^yX Bܟ8c6!eG&\R}=RlHc ,X̓ Nc*2wG^]oq.^ E?GA :x O%C ߦs>t'TL_7^/@|teSA2 cS?;4mx<_W>[aA%# P#:J2(B㤠HJJay s;dnGԇkT"J:~ˍީ19ݼ~b;`{$++-Hti/q:7̆D;FA:"XDVHJӦ A֌N0qzǪmb^Ƣ^C ڷһA/Aޛns} OLtQ jHwv|H`̌){w0 8WppDs9x8YR%?iG= Y, p8^r ",gmhdWꩱiT秱Լy+HΎ CB!}a; 1z !0'0 xn8s"H0L`HH08TMY}jy3Mj Ј%2U,泪Hz.$ />iԌ|}^S}?' r-5HI# RZO^6@>w6BQ@Nd1&6E =umN|zۢ` x.{w@ Dt,@.%r1X.A`W@,i'#& w^6X+M)Mj:4M:;7m:Hגw(@sIWNNNApu B)RP{Svi;Hg` ?t8^| a/̦0_"G,!|S(a׎eR5u;}BGu%&匶BM MK㶊V}Xw]=L BG>7)%);FA 5"@pCO `UPm7tK<_?+U="x)w~]~ 6LFYMa<:;jxVWu0)OS$CǷFz&% }Tmwö9rt&>gzH:pw;6A0zhm+v#89+u6;ApؘwNMk҄@ 4sѺ@֛cOGalxĂT5 HG~&t|2V* 7RG͌@Jb\nIx#d>cW]v~iO ͡J{Onw)QԦ}m<{DmUqFDd2 308€no8TQ jv.n+٬$϶Kײ\CCo~ck!ر`I?g5ŧ?1MЂ9093S?džת"uRU 泾Yy{  a?Ó Gpsca'12;a&n (6H&8 T~X {,**:"jt;!]?\gVpKGMMKJDU-I@%QQ Mwyx.Y^ڒbE;@Xޝz"T>hqXMhPZژ_G澏,Iⴄ93TMNBB: ~4AhvQmػca( ç"H.] `W}Nn]A+&A =\ 3F])B?Q|~2fӉePG>|a Ȼ 0BC bб"oy pv6F}qpX{8:\WZkvYA0|(vB*hE]WF]T#4C3"}TpQP#njW*L)&ML6 b+,3YL'cUӆ=^ ǧ~ ;!H* wӿ-x~;j']ϕwl.<Ow!8HrKKrIR|8& 8y {HQҗ@\ |C$&P N ݣ`_D[s4A)E8D  ?7PB{ɉ,(ik?gT|:vg#!9qend< Qu] \BTh {e.EK ?7sK=FRbwBUUgGi)|y}?bM.>m6ػA tCvVZm"M0R@~ bs7#c0jH~Nn(G]#$C.e֟wy.{w DQ0(+B [X(̔!\ ?0:v!H.G<$._h& DZ4/g|dIzuVBEPIཕ l %!uy9U*lna( :;n>Șrc#`HSS_폗z0 PZ" BK¡ 8g .OcYHMj bdrR04Q}#?uY /<vػcA0v)h \"xoA?~ }ۭGئ}4}HH!=B9r H`^r(fC@2sF€n~ډJE(*g̯+|>oScY$>İJ.39=W;fJ/{w!E_f"(MA2W|yq؂9&Pj?C1ږHUG8ݳ.㷼{9]=sn Hzx;A|3y.<#h} mb$M/a@)!e w|u?^OQ%?eAyבѷG zGDoܿL[߸~0QM%  h+˱ A}Z(39"tԛ'qc ?qJt0ݤL \ۜk9"%0) VRJF.Mp۶u#j8m ]<^/_.-{w! P> ^~A,D fY8Ӆ@L<g'nS?2GLr_ȿ} -SıF:Ea>²wB|Lb}O\$ λ3dʤך`Q0fqMuVrLgaaoSݷb1y2>RVY;ψ@.'e#!K7:H^5G붆"e㎊ȕ{IX %6@-V%19 Rßc ~D#E$MhHG#clubmgjiy3{P`q(rSx+/a(L̒.)IKHhjqNP1\ߡ!A GEH]SǢ#5!I֐ $^xϲrqygl]_vmq2 ޽0CQ/m; D9fv wA2ϡ{M ~m R $+WS ռiX?&l7,b {b6'׈8t<Ͻ;0qfu@nߗ O[m![aH??r=rܖeކ!<>~팯?.{w ewpff4`D[R`-t(K;0oa[-6yBrc?{0$/RACU~|Vye{H4u_o7Κ9zC"qno#u=:B){ 73lC1h(9Z4ک_~,?q3}{9oUBb?u\}Zќ!/s ~=i*<>Sxb_k {*{w `[x'G`48%M o}]fr:ПC%%4UJ#8<.VZg! >bGd'+sG5$^z{OHDZk6v`vI4q%I, DJ_]o/ػcA( 8?n.,VڮsB:@+7ʮt?wst<`Q {cV=A] bT'YLAA|SOy=߲x&= k}3K\J0Ec1EQGHC*:M8];o(j۰+Qh,BIFLsr @^¡kc2f>^_NF@<~LǺG ?B\зbGkxN{Tj!~W1#][=H#_sDW?waŧM -aGD{XѶ6;nw(P@b3l@+ed=J8D1^yɥvݧNcIGHB3[`#4~0=Wl4Ľ6~n.׼QjHyLu.`nR0>­ƟРLLMJ v㧚QE:O9ͻ+YUBZaKl]'|3:QB QwX*r+)juěѫ[{XqM߹ ޽0Q"qCdR3lqOO/LD!eZ@"ۄAAΠef:)16}yB"y#!jcGo {sne- w= Plh-6M(!_?>m6uڟqlUd( u_%~_K#Hk1^6Rl|9[Q|G!/w   ar0,*E 0|Xu9s(GR\~ۥ_HA ~cRϛ<- !HX dBbl 4u^ >|*-W~gݱ 0|"RH^x}.W'w~=ƏrYOMϿ|qu9QmG bhqoKQxX~XV<_ Q z .\("D*ĐָS|JӄҮ; ?UKonIvU9)R#Fj =+?z([~DnOc9>^b?v;z7#Z9K?FopROػa } &m. D!8ma6k PetF>J~OG&w G|Tw#~EKZ!~ްG8PRim@:Y̞w( A@r#E4I- Mx3 uv~*5\̻s t76Ρ Q-(sQP/<^c,Ꮘ}.R8<7;n iCk ~ |oI?`QpTܕBŤ]Tp[hiL p<6KQgOAíRm9 :|MkRsMQv%S>׽9}{w}. DQAKA6|:I8gl+/WoD.{@C$@*KGscj!?Pccq(z?_/M1E}g|j {ru1 0^k:$HmII ]Mm7 lw a*E_kբ7ƻCDZL 9ΦU`Y4ѥp"ӴW#9k4\Ov9W>5E#.ݗBҀIkzG=~[?w:P@ NN,KRj%8tiީW䯫PsL46ǻqqȅlS $?Q=E3??r`r >v2Qh:GOiL ԝ=.}Ki=d R/{w0 D4htJ&T%=dQB!; ?Suj}~7MG!ɶz7%_4t.^ۅ?@*1=%xOáDFwY75jƼ{&{w0 E8I Hisu^PTt)6aHh~3h?9 l=Rn s 崯e8){~3G#[b2)1Fɤ/-w(P{#x!\!/IZ}%%ޛ Z֞)C'S>Ropzj\]mHי,(?8?ҴEGAx:|c"s|=nQ{wyJZd-Rgarqػca %n^A6@+Z?V%7cn<  yM!%}Oޏ/-{ڱnaG^ki}ZBj {w E}i`\y:IEBt067 fp>v}wc eː$2@_ضJGNeǼrePVrQGD[3>Z{kV ȚDe=xKwػw( ܀BogH2IpN7H`ȫ cK+u5r*?'2w#n)&\ApHc,0y;mw}B;XA0Gנ'C'!% 6S} C; Y\14}\ ҭ|dsS%m m!o˭~wGɣ޿+}[?Fczn_wiN)(cK_RU[&" pswpXfHQZ+%t^|@by)I/{*{Qo6 [ٚqL44~ly] vA@ ~.sMc@5 ?thMs~?CrZ9Z>TԘ7T#Dw:Py{Gqs5 **E}IhzK[j>ŏ7N*ϛPB*XtBUˤ8W$AOT޺~뗧٣ }|~ q+Zvo[zVrܚ5FGIFX V >!{w0 aVŕzQd_c B| ^[)j]|<~ҐbY)!2 = ??GSl}/s[v{&~&}hQ!1qo#~\rMյ%FejOo $kAޚƵA 0Ṷx R (&i'1MhWh"jC]kKtVJUW= ~>䫑7%RoN4o߻ 4??bbu~?s1.@fHW!'1qpsWQ>wu^9jws>޻D3y  Qk{7ʭ,ΈtA\(ZhP<z@hFKө~߶mصo$k )AM#ȷ Aљ?)u"o&֠Aig_SȹYPvGyn# Y]dt6=z"qhD﮻ 0 >CՓu 8,œMIfw`t;lpm6٣S5s?,mUDl?oAeZDmj< ?!Q(E\@,vv˱{s/>,U2`וC7\zagE^sjܱ${w0 a_MCp 8%'쐺!S; bIU?-3O)Myrr.;1YKT>՟?~wPr::ts;ny׷um]T\T>}1~-0/0gbKȺZ.X]C.8Kٴ߆7nN4>҆!ƝݏϬHeeJ*;aow(`)x/i<ppNU&i39>8ٴn=17̵!vf[ rayhC, :$|66aiAz.?Æɩ9IAD!I1y$c^Ω?&ZRH.uHV;j1HmԾc)lz?g.{w0 Ea8"8>k;98;9֛л9RhK[ȿ>>6ȱyC 2a9i;THP /RBSi Q$ƾDmY Zh?(i>&ܴ~$C|T,@B?3=nzV`^!/՘>OD;/ (x>`rVaa 4;xl.+Z%)t:Lq⿄P ۟!y؇~2;uo :O`OjjG;#y]rN 7$:9H I:';|C3u"jꇾEQ%5iyzǣ}!7}^o=Ê>t1~=#q`q( uسW560*0733Cb5'ȯ>&Bȵhć?jxm?xh$n<A$@|yremuzH ~?}q>b?X=cXK3,pb $C] Es yckdK׮Z{e>|`nr ʲv ]tJ$D'!]$ x \b09y).02[ߚO$WIمZm5D؏l^b4cF$K@!2F!xzNbb}\|a~Xcǰm87ѭrmԶ94Qu}Bz|9~~Ɨڱ(܏r;3sVQF#3㥈CbA0܂yT MU ?PX>4$,'aZ 犯eƬ[@@6Xot&IGInq"@d#lF;%$xi? ߙGcJvSn(0%Q=1?jс.|v:>og{Mc.j(5r;?ηZGuEc[# 6{`nV (˶Kޤn&r rƙ{D+hc5.lciE Com0n;C0# ~#! >cĪ$nbY |?>DGX8~>u*CBN$?wG 6-b4AE)pcBVٵsAKm][jWOػa(µ :p=݁tX'IT4%I ju'/fQ^黶v@^wj?=_qc|.1H<_B}v "cdxaK!Ag<Gz^ #QF =BG ;Ĺ/AՏn|;w~.*̍?t!@td1'&h?JQ ?|Y?8 @x l~ AđşL&%" -/ȿ0eH$=qK#H|Ul+/# kA*# Hq725 M|nܹ>S=9~XxFjV>^q:~ BlDmχi{9%G_xe|9Rz nw)@Уtƭ)blg&BPAh!.x@~uc搁1ö $Нnf/  9dG %.fp4dUT1D!ykrX>+c~w~ ?FģS{: 1MiGgsHe^_p*?$ ?jCg#k1aGA0ѵSypO-`g2A> h;?> sݘquj }t Vj!nl۽XߪEiR`!#Dt IK#岊?ޑs̷A YGߔ >4>`Gj I]ٵ'] ~C  5pLmjaڵYyo/ػCa [Ix[<Ɓ^kt`C, zM`l{S@C s4aS5iȣ Bǫ) g[W?5@:1͗}U$IQH|b~X)/M?j?oG--z[O2[&ap/!ĕKWE$F}Pp%,hb+sa.m) __vZ7t;Y0}<y !֏*?Dp"ґ |?j=kjM MQ"hC72 NnSw={Ïx6XhCC¬ ip16{Hҳ}a*szFG{  a#$ _""ɲ3. ($$FQ} L@OW@j!Rf A֛=Ri1GͪG3DC>[V2 =k~.EQLtL=S^a 0 [" g})4@_?Lď]@r\ͨ8 H-:zf<_tQ>չX6Eh 5H,.`Gte,>K>9{d~,jzXsIo.P EHKo+,ȭ[:KapAq+;U1QiޛN !-M b:3=hmI r5ȹpG)]!ϖ۝_l~>|m.v٘y\ m(hG)&g7h帵կ]lA huA{uDA6mD3*瀸 v @~ @}4f?r!и:1t&eU~A_` Dm^r:~}=vS] ږ8D ?JC"GRG<+?^&{wς0 Ea8tpp'WTjiNC_2dz5h!q=?B ^ ~X!jSwCծvAbc/J<_M>d1"$<<~9J!: }sKZC7 /Qׂ)%VӉ5=c\ 0z ޽ aRPY"*ƌЅIoP]y @~@ϧH(-X k$t_p>jהնbNuW9:VBc+ Z/BDZ~DO>E Mx?EX.= ^ww-PwfeE7MdTP!cEœsǍMhiedgvc}`d%/mxOFGjxzGV|iB&By!6H6[wY>@?3{ʨӶ.=T6Rݥ6~M MĂ@ǐPP={}=L"K @9^Pb\J04}!32 Ə2az`d+7a (C e PZCMuC$+k)Q$L\u*a7"Cp1^;֦W-1oB[?ћ:I ~hmAb!/W%{w 8?jNש6)A0 Ll?'k[WxC{ulnO He1* wyzszvOpFgqFA ^UU*B?N|`R(6vki(3 } ^a|U $ͯ!X=ܱ2jT)^\N?XI('#fcOUHU(bV]#Tc61šSc8yu>;HajYZf#&QH@|:Qϡl,2why(d "* r*wxlZ@%?f7UGR)z7gO֫Y#6e+`^v(7k6911* aU^T]G[Lq@}}~⏖++hɸEƇ~qJ㼦x<; ?vYXXudǧwR?}+k+?ߍC> $^w/) A9`v>D\H** {<gogQh "Ta U[&--~[ArGXk8O/{3mCj7Mh* Q(^QBV w~G^OoƏ,GOػA vSX'c)A 1n2w/i]76P=(3Z0oxy X'M kpef.5j'gQ`#jqgL,c9WvI 0 PΨRc㶋g08D|$EZ?c 5w}'rIۭUvx͵hWO??<~pϙ1qնB+a*rOkXu73MOػA ʭ]L)ƾ\|Ekr!; o* L?x-ITA}i!mlH8K#Ѻ3s.kl׽&HmQ}!1|~kGA)夌6!)d e9 td H6Il^>$!-WLG G|&m U , H}a.56T}(Z.rv+==SeAm+!GiiqYyo/G4+ѿm w8'f=:}ܛk6 %PH|c,D0 !dmWQcnU%Y@u'O>tw) 1EGJNU8 O  Kt+a=N>>,X ?{_zóu,.9 4:&d+/B.1&$ ,z%Y=c+wu9&uɝDfqD2`̜t~W!]ǏH~{wT5?Uw/ ; 0E_s L#  >QrD}$Uaգ?m\'1?z_ MHAH5]#E|k&geoi+{Ga(vHFEaүA߇r䘜q^@~6nG|_wAr5w+7}XCQt OB X U Wx ]#*1۫/y  QoW$9 m4+/#>l}*H%ϰa&|ו{OYkL~n.b]s&`LG +{$}6cTܗ=Koػa i֮ a$cEWh݈>#a6 V},qqC85&NX[ O"fsU:I }ji#{W|`q(p+'"ƸfP <.?:Q{` YPŹڕݳ3/?z^] LLY+j#.l;a(Wvc#f-{ @3ɫy!d}g 3P͹ =#5Y؜$^Yr#@ޛg$_2ߝ'!H~T1FwL]nCqQ 0EW0DkUs44 YR"- 1۳u>?5GAFzs' 呂>m?#?g܌"Q,@F!+1:}–o|U]Bhؑ9,LD 2s~uO#I Y_vH bq5{1䦀RG #3ԗ[Ϝc5=c\Bobd]?CG`Q( h (Z C̀ U{|]­-@"K!1gc^%d\e< -(dƧTjqBJTÓJXKػcaթBZX.η#T[@"1.*[?,nm(Q ϣLڵ51fo?Vs<g6Q1!C\`&9ZO0keI FqW6"oHg [#ڭ9j)?j=!ּwB!x+.;?f@fNջcI 0 @Qw@ =@Gw~\h H~a@rDO(,N!H9J*ɞJ?"jjͮywu _@hW]4EὩPꁮD ϱE51$.g~VO=kRE*c֝#:$bt@*DbY}u_=?~;H٢MqtA{d(3m wɋi?tY- ]8{a^n~ q!}Jžw|/]BfmYYM#^m`7ݟH {Px61R<gwZ;:-d"I5~TA,)Ӝߙ{ٳ9f ; ّ:(ͣ@ORT/;H:u3W dZx2(p l+!lmh7JHѮ&?η9[0H:"oĠ@*s=ҹx/Si83G|1jʿG.ػ` 3RcT=V笔I$TOyi*9 $[q9"t2k~+OC*wcq*fB~=^!I˃W6ػcae]ФlJѭ @^ܓ5w@];k ٷWw+ H{, u]qTB= ٻṈ‡>ػca `I :Baa@6L!R}# D B jCH7rU76Gs:oxw80@{* qyokJS~OB  Hv+1rpc6Gg+ o@ϹL\[@v3ݢǮw'1 PV5۔ j'zu@C4jAH=7絢g;rK77[G V1ڳ=Kr P?M'yo)h:Xkzޟb?NA";pGZ|4<pO[@XCgH=w)@@-uB 何$g@X}YlݻXZZ!oyaEQ)r.}(}R×I ϼL f1G>sN;1w)@@.huwU(L?l(LуLKGe%ӂٕ}0LJsQaԤ|i4̬ݟ3g%{w)0?4 eh@xtȩ_*J"_wC#S?L`Dw_M? >1=,A Phٵe&{KDPK?@n-L{/~yEAl8GfV=s.o昑AvӚ)v Pe]IC+0hL&S)^m17~D-p-IĺlԇjY${۱ _3ղF<߉WwԗUe-{w0vp֦*ԻIPBBVCljccӍ s x\G~Olzޕz};Fjh )$?@z1qE:+`D,TMgesM٧C8Qy32c(\9 @G+XY73!ELyu1 H>Qo wisO T̄An{{( ]V#wT1id׋)G_2Lhj"h~t[md+Qb`ߎQ rtmaL ȭS_|mwRfV3.ػ" $Ɋ_QZ>Iu2,˦9]Qap0ީ"_k7ow) !&4s][z1z 1Hl\qwE$ 7&Мo9@0M3W uT 6H6B~?@xI֢29ms_S) /V e0s w0y6x1WPmW_þ5wXo* ?ֆ !Qtz V |FC!:ٷ|zpT|d&{B zA3 ^t>cT \01U~r/;GV4U vlE= d2@i4!Ϊhx[PV.eG`GoYٝ& T@1l^{o(!$f "h@y]r\}};AtsAZ>d!ٷ&4 ;A?Zo}'6t=YO#ZwA`ߎm@  LL?Gs@3[[^ۡ K3Dd  ;3 ;طca]Қ5|L"1 ?`i%/6v[o<@@X`4vG\o<@@X`4vG\o<@@X`4vG\o<@@X`4vG\o<@@X`4vG\o<@@Sց\NÐXIENDB`nH-< yezPNG  IHDR pHYs  gAMA|Q cHRMz%u0`:o_FH3IDATx 0Haz6NءAh%؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $1 E7{iw>[w#;tLA0Xɻ@|O2l# Ygl'}; |P4_./'a .kرAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ HH@v@@ F@0؁ A.` رAփ\ @c0`[ra$$ RQ|TiF!N fI\ܧ^tc00ہ A.HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ HرAփ\ Hر!`03-Xc4F(C7_kA1 F(`Q0e4F(C 0AJAQ0 Fj)ѐ` ٣@<0sơ<~ d1`wjr .Vعb[[B%E  @ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0@0@ Q/0? 0K0?7>H+a]m" 0KPI3uq7ɭ & o$C   o"H   {HPO;&A !#wg@'Xػc"be):rx@#? "A 1hX@ A;(@ m55"c$,"81 Ah+ w,#@UĨ6;YYpq Q0 FxFb(4i32̣!1 F(6Alh4\@{%̯^33W y#75j @ k"FX>$;@ֿ5AC80`hoMl*0N` رa[? Hرa[? Hرa[? Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hرa[? Hرa[?Hر@5+H A)aw]7Nm*1.a8c40 Ζ?r7#I5 f@c00؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $؁ A. $%܉zNIENDB`@=_[ut= kpYV5xY]lU>wfۖkb h Tv-P$)ƚS HAx؄(Q^E| >4FImm"!֠iPd=gۻSJtw9ΌHN[@ڳ` ּ@@_ Q.liа_7r$dnbɨA:޽Hm|enQ$ݮG k4f!na*io,?Oj;۩T ]sZbř{S~cl= U\.bՍDsB%k 'o0F{ /Wd2ǖ1\WWiCCCSYCA+e4V(  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/l/ 0DArialNew RomanTT@wܖ 0ܖ"DTimes New RomanTT@wܖ 0ܖ B).  @t?" dld  @@`` x3 ?  X\cfghijklm _b$` ߲_MPEBHb$G[S*˂N8}~H$b$sRwqQ*$Z[b$-< yezH~K _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;dХ 0(p@ ppq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  = ?"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP !>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) 0:;NG5=85 8B5@0BC@00d>2PA$2545=85 ++ P  2545=85 ++ :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& ZifO- iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.tfO 0 " lK.2"5E=>;>38O Cluster OpenMP@ P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AN84"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN.  MB>< A;CG05 C7;K =5 >1;040NB >1I59 (shared) ?0<OBLN (:0: 2 OpenMP), MB> @5H05BAO ?@>3@0<<=K< ?CB5< 2 181;8>B5:5  "@0A?@545;5==0O >1I0O ?0<OBL (distributed shared memory).lbb"33Z          @ %   .  O92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   P:2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   Q;2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   S=2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   T>2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  V@2"5E=>;>38O Cluster OpenMP@ &>340 <>6=> 8A?>;L7>20BL Cluster OpenMP 8<55BAO E>@>H> CA:>@5=85 =0 @0A?0@0;;5;5==>9 OpenMP ?@>3@0<<5 =52KA>:85 B@51>20=8O : A8=E@>=870F88 40==KE N(k( T|   -  6 WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               ;~!>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP@1P G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK? P /P 0` ̙33` ` ff3333f` 333MMM` f` f` 3` ̙333` ̙333` ̙333` ̙333` ̙333f` f3j?" dl,d?" dl %  %" @% ` v?" dd   " @ `@t?" dld  @@``PZ 1d 1d@1d`1d`h" d   " @@ ``pt1" d1 d0" d0 d0dt1" d1 d0" d0 d0d     (  X  C "A fon2"  H_ж_ж 'd  l03>;>2>: 0  B|_ж_ж   ,;O ?@02:8 AB@C:BC@K I5;:=8B5 <KHLN B>@>9 C@>25=L AB@C:BC@K "@5B89 C@>25=L AB@C:BC@K '5B25@BK9 C@>25=L AB@C:BC@K OBK9 C@>25=L AB@C:BC@K (5AB>9 C@>25=L AB@C:BC@K !54L<>9 C@>25=L AB@C:BC@K >AL<>9 C@>25=L AB@C:BC@K 52OBK9 C@>25=L AB@C:BC@K$ ,  BhQ_ж_ж ^ ]  *dZ5Pk ( C ^y.  BQ_ж_ж ^  Q *dZ5Pk ( C ^y\  BQ_ж_ж wc Q */29dZ5Pk ( C ^y  <!Q_ȯ_ȯ ?=g) ~8653>@>4A:89 >AC40@AB25==K9 C=825@A8B5B 8<. .. >10G52A:>3>@]@ Z5Pk ( C ^yL  c $ ? &L   c $ ?nCHV  C A021"f  C 0Aintel_white"AB   s *޽h ? f3 .D>@<;5=85 ?> C<>;G0=8N  0` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴` ̙333f` f3>?" dd@,|?" dd@   " @ ` v?" dd   " @ `PR    @ ` ` p>>  x   (  V  C Afon"  0` ^ ` ` Z*  0` ^  ` T* V  C A021"f  C 0Aintel_white"A  <`_ȯ_ȯ ?"=g) ~8653>@>4A:89 >AC40@AB25==K9 C=825@A8B5B 8<. .. >10G52A:>3>@]@ Z5Pk ( C ^yD  B_ж_ж wc */29dZ5Pk ( C ^y  H_ж_ж 'd  l03>;>2>: 0  B_ж_ж   ,;O ?@02:8 AB@C:BC@K I5;:=8B5 <KHLN B>@>9 C@>25=L AB@C:BC@K "@5B89 C@>25=L AB@C:BC@K '5B25@BK9 C@>25=L AB@C:BC@K OBK9 C@>25=L AB@C:BC@K (5AB>9 C@>25=L AB@C:BC@K !54L<>9 C@>25=L AB@C:BC@K >AL<>9 C@>25=L AB@C:BC@K 52OBK9 C@>25=L AB@C:BC@K$ Z  c $ ?"nCHH  0޽h ? 33D<___PPT10..@1 ,!?5F80;L=>5 >D>@<;5=85^ 0 0 z(   ^"  6G$ ?R"  s *G ?  HLQ ) Q 0  B@`  - Q 0<  c $޽h ? ̙3380___PPT10.f  0L0 @h(     `V ?Tq^  V nZ5Pk ( C ^y   `V ? ^'  V V  <`_ȯ_ȯ ? TC  0 ?@8<5@5 181;8>B5:8 0;3>@8B<>2 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabalistic Network Library (PNL) BG5B 70 ?5@8>4 A 01.07.06 ?> 30.09.06 ]d' 0X(Z5Pk ( C ^y<  c $޽h ? ̙33ZR___PPT102.]0G+D' C= @B D' = @BA?%,( < +O%,( < ++  0 8*(  8x 8 c $s`'d  ` r 8 S tt` ` H 8 0޽h ? ̙333f___PPT10i.@wb+D=' C= @B +  0  F(   x  c $S`'d  `   c $P^` ` "p`PpH  0޽h ? ̙33___PPT10i.iG+D=' C= @B +0  0 00(  x  c $`9)   ` x  c $l`I ` ` H  0޽h ? f380___PPT10.@$M  0 0(  x  c $@Q'd  Q x  c $H` Q H  0޽h ? 33___PPT10i.0YbO+D=' C= @B +0  0 0(  x  c $9)    x  c $xI `  H  0޽h ? ̙333f80___PPT10.0_4  0 p(  ~  s *; q  ;    Ty_ж_ж [ ;  ,PrstuH  0޽h ? ̙33___PPT10i.i@+D=' C= @B +  0 `(  ~  s *L q     T4; _ж_ж [  ,PrstuH  0޽h ? ̙33___PPT10i.i@+D=' C= @B +  0 (  ~  s *PN q  N    T(n_ж_ж [ N  ,PrstuH  0޽h ? ̙33___PPT10i.i@+D=' C= @B +  0 <(  ~  s *z~9)   ~ ~  s *VI ` ~ H  0޽h ? ̙333f___PPT10i.' +D=' C= @B +  0  0(  x  c $ͳ 'd   x  c $A    H  0޽h ? f3___PPT10i.2+D=' C= @B +  0  0(  x  c $ 'd   x  c $P    H  0޽h ? f3___PPT10i.2+D=' C= @B +  0  0(  x  c $ Y 'd   x  c $[    H  0޽h ? f3___PPT10i.|*+D=' C= @B +3  0 JB (  x  c $| 'd   x  c $      B _ж_ж ?"6@ NNN?NG <8B0F8O ?0<OB8 =C6=> A8=E@>=878@>20BL 40==K5 <564C C7;0<8 ?@8 GB5=88/70?8A88(=!(= M  BD _ж_ж ?"6@ NNN?N T  ,<8B0F8O 548=>3> ?@>AB@0=AB2> ?>B>:>2 =0 A0<>< 45;5 =0 C7;0E 2K?>;=O5BAO =5A:>;L:> ?@>F5AA>24'(7('7 ^H  0޽h ? f3___PPT10i.|*+D=' C= @B +   0  >(  x  c $ 'd   x  c $      B _ж_ж ?"6@ NNN?NG <8B0F8O ?0<OB8 =C6=> A8=E@>=878@>20BL 40==K5 <564C C7;0<8 ?@8 GB5=88/70?8A88(=!(= M  B _ж_ж ?"6@ NNN?N T  ,<8B0F8O 548=>3> ?@>AB@0=AB2> ?>B>:>2 =0 A0<>< 45;5 =0 C7;0E 2K?>;=O5BAO =5A:>;L:> ?@>F5AA>24'(7('7 ^v  B _ж_ж ?"6@ NNN?N'  l@>3@0<<8AB 4>;65= C<5=LH0BL G8A;> @0745;O5<KE 40==KE!7(73 7  Bt _ж_ж ?"6@ NNN?N H, ./2=K< >1@07>< >?@545;O5< G8A;> ?@>F5AA>2 8 G8A;> ?>B>:>2 =0 :064>< ?@>F5AA5 2 ini D09;5X(X32N  H  0޽h ? f3___PPT10i.|*+D=' C= @B +0  0  0(  x  c $ 'd   x  c $x    H  0޽h ? f380___PPT10.C=   0 |t  (  x  c $ 'd   x  c $C     B4C_ж_ж ?"6@ NNN?N  $=0;>38G=> OpenMP: 8A?>;L7>20=85 48@5:B82 (?@>AB>B0 ?@>3@0<<8@>20=8O) 381:>ABL & ,(>!(Q&  @H  0޽h ? f380___PPT10.C=  0 ^V (  x  c $TC'd  C x  c $C C   B)C_ж_ж ?"6@ NNN?N$  B=0;>38G=> OpenMP: 8A?>;L7>20=85 48@5:B82 (?@>AB>B0 ?@>3@0<<8@>20=8O) 381:>ABL & A>15==>AB8: =C6=> O2=> >?@545;OBL :0:85 40==K5 4>;6=K 1KBL 2 @0745;O5<>9 ?0<OB8Z(>!( (D!(^D&     Np3C_ж_ж ?"6@ NNN?N H7  N( H  0޽h ? f380___PPT10.C=0  0  0(  x  c $CC'd  C x  c $EC C H  0޽h ? f380___PPT10.0  0  0(  x  c $\UC'd  C x  c $VC C H  0޽h ? f380___PPT10.0  0 0 0(  x  c $l_C'd  C x  c $rC C H  0޽h ? f380___PPT10.$  0 0(  x  c $E9)    x  c $VI `  H  0޽h ? ̙333f___PPT10i.' +D=' C= @B +  0 <(  ~  s *rN 9)   N  ~  s *0I ` N  H  0޽h ? ̙333f___PPT10i.' +D=' C= @B +  0 <(  ~  s *hN 9)   N  ~  s *N I ` N  H  0޽h ? ̙333f___PPT10i.' +D=' C= @B +  0 (  ~  s *͇q     TH~_ж_ж   ,rPBRH  0޽h ? ̙33___PPT10i.i@+D=' C= @B +  0 (  ~  s *LN q  N    T0e_ж_ж  N  ,rPBRH  0޽h ? ̙33___PPT10i.i@+D=' C= @B +  0 @ <(  ~  s * 9)    ~  s *ljI `   H  0޽h ? ̙333f___PPT10i.' +D=' C= @B + 0 `0(  B  s *޽h ? ̙33 5r "5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP !>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) 0:;NG5=85 8B5@0BC@00d>2PA$2545=85 ++ P  2545=85 ++ :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& ZifO- iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJQLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~PPowerPoint Document(K"DocumentSummaryInformation8   4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/l/ 0DArialNew RomanTT@wܖ 0ܖ"DTimes New RomanTT@wܖ 0ܖ B).  @t?" dld  @@`` x3 ?  X\cfghijklm _b$` ߲_MPEBHb$G[S*˂N8}~H$b$sRwqQ*$Z[b$-< yezH~K _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;dХ 0(p@ ppq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =>"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP !>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) 0:;NG5=85 8B5@0BC@00d>2PA$2545=85 ++ P  2545=85 ++ :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& ZifO- iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.tfO 0 " lK.2"5E=>;>38O Cluster OpenMP@ P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AN84"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN.  MB>< A;CG05 C7;K =5 >1;040NB >1I59 (shared) ?0<OBLN (:0: 2 OpenMP), MB> @5H05BAO ?@>3@0<<=K< ?CB5< 2 181;8>B5:5  "@0A?@545;5==0O >1I0O ?0<OBL (distributed shared memory).lbb"33Z          @ %   .  O92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   P:2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   Q;2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   S=2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   T>2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  V@2"5E=>;>38O Cluster OpenMP@ &>340 <>6=> 8A?>;L7>20BL Cluster OpenMP 8<55BAO E>@>H> CA:>@5=85 =0 @0A?0@0;;5;5==>9 OpenMP ?@>3@0<<5 =52KA>:85 B@51>20=8O : A8=E@>=870F88 40==KE N(k( T|   -  6 WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               ;~!>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP@1P G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P  0 p(  ~  s *; q  ;    Ty_ж_ж [ ;  ,PrstuH  0޽h ? ̙33___PPT10i.i@+D=' C= @B +rD,.X1>V(kY  4http://developer.intel.com6http://developer.i      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO]RSTUVWXYZ[\^_`abcdefghijklmnopqrstuvwxz{|}~Oh+'0HP T Cluster OpenMPAnna A. Labutina303@Gs@P3՜.+,D՜.+,   >B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.tfO 0 " lK.2"5E=>;>38O Cluster OpenMP@ P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AN84"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN.  MB>< A;CG05 C7;K =5 >1;040NB >1I59 (shared) ?0<OBLN (:0: 2 OpenMP), MB> @5H05BAO ?@>3@0<<=K< ?CB5< 2 181;8>B5:5  "@0A?@545;5==0O >1I0O ?0<OBL (distributed shared memory).lbb"33Z          @ %   .  O92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   P:2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   Q;2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   S=2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   T>2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  V@2"5E=>;>38O Cluster OpenMP@ &>340 <>6=> 8A?>;L7>20BL Cluster OpenMP 8<55BAO E>@>H> CA:>@5=85 =0 @0A?0@0;;5;5==>9 OpenMP ?@>3@0<<5 =52KA>:85 B@51>20=8O : A8=E@>=870F88 40==KE N(k( T|   -  6 WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               ;~!>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP@1P G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P^ 0 0 z(   ^"  6G$ ?kR"  s *G ?k  HLQ RƱ9- Q 0  B@`   Q 0<  c $gU ? ̙3380___PPT10.fh ` (    0$w =9    R*    0D2w v 9   T*    6*w 1=j    R*    6w 1v j   T*  H  0gU ? 3380___PPT10.~ad 0 `0(  B  s *gU ? ̙33 5r 9/UY/KY1W(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/l/ 0DArialNew RomanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ B).  @t?" dld  @@`` :2!3 ?  X\cfghijklm _b$` ߲_MPEBHb$G[S*˂N8}~H$b$sRwqQ*$Z[b$-< yezH~K _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =R@"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP@ P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AN84"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN.  MB>< A;CG05 C7;K =5 >1;040NB >1I59 (shared) ?0<OBLN (:0: 2 OpenMP), MB> @5H05BAO ?@>3@0<<=K< ?CB5< 2 181;8>B5:5  "@0A?@545;5==0O >1I0O ?0<OBL (distributed shared memory).lbb"33Z          @ %   .  O92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   P:2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   Q;2"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   S=2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   T>2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  V@2"5E=>;>38O Cluster OpenMP@ &>340 <>6=> 8A?>;L7>20BL Cluster OpenMP 8<55BAO E>@>H> CA:>@5=85 =0 @0A?0@0;;5;5==>9 OpenMP ?@>3@0<<5 =52KA>:85 B@51>20=8O : A8=E@>=870F88 40==KE N(k( T|   -  6 WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               ;~!>740=85 ?0@0;;5;L=>9 ?@>3@0<<K A 8A?>;L7>20=85< Cluster OpenMP@1P G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0L    4P H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P  0  F(   x  c $PV'd  V   c $TE V "p`PpH  0޽h ? ̙33___PPT10i.iG+D=' = @B +  0 p <(  ~  s **9)    ~  s *.I `  H  0޽h ? ̙333f___PPT10i.' +D=' = @B +r ;ZCsZ1nr(kY ?    OLE +  8@ _PID_HLINKSAhttp://developer.intel.com/4http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594\vXDڊԄԎ `+D Bу 7Et8a,׈@2QWQ  > . & o*ռU+oe>H&SrBMݎ0KqF #?d5c2}{ H^iC NuBcz]p!7(K|R oߏcuߥ8RhX,Nop')& 2'qd JI j)D}8i7]Jg)R_F(! R_rTcֵ>]Ydہݑy-Kao8{ܻjýmWró3e;yͩ=#GjIq18Ԧ1,?,fCMp*+8<3Si5#c++6 9=];W*ܱ8PyS}<֛ Jě"SBKǨxh]mmjG5|T4|@4Oû4KÛ {\cO{7gXÇ5|S_4|LOO=[Mh3h\Tr؛νܡ15wOsG;JTRNrRJ]3qnf^+-«yɗ;%M{|5A$z/؇wG\¶2=F]D|$ WP,Ezjd15$&bpQ׉ Yss9._K,s<ɐB*kp߄lC8V屡e\lCڰ:^ !mXdžqdž64ذcú640R3h=Oq{ܓX5߆;f{o3_bnwxIy$<~%Yi[bp3 HVmسtHXv#['Ut @?Mksv%WyB!!Zm B@AD@?ib? k1 4|` 1$9޻{.읙3s̙oΜ^Acj2$ VT PuA{ BTf <HFԬ6 riQFDzʐi+jزL;[85QHI4 fs+`@ŏ 0ڎt<0J8H,F#}};ӌmű<.SDOqno0u  +}{e&ѱ&e"b91zyA/gΜI:ʔ~e_kkoUHHX * =GcXH(\ &qoH+0ߍ icmHv&ƧSwjߡ[4~oRWxΗs[b-%1̫n|EυS{)mX}.FzfN췋ku_'<|ԽL]H2H'Z)`KZm6f;9cuØiw'MY7Auu'|˗nJ_&lndӋH'۶b "զYl[i7(c]' l[1|10Od_oh.3ՓMO#]Rl{K.'l:nɶ%m7C' 6B~mɦ{b1Ee4o.h}z4qa`{ܓW{pxeOl. _w6:8qƍB(HtQ/č؎Tv,JS_q| j߷Ĝm n6{BVlkOI㚟UJ?-;G% `} ]7s`)=Pl"d6Dp!lK*Pj^j^ߩ;5~-E7jF_ QƗ*T|D>covV*SitLsJY;hN^kTE_Sq~:nzNً2|C![FM{#fp 9v>Hhi`oDnW^ hAN5u9ȡ^pE4iXf&Side΂&U#|2<[)u>2TAfg;:Ǽt>]t>C9.:.:yN;`{]tC.:e]t^C繶A/+X.:WyNS>{%/3:5iJʔlHvyF̸O+2s9=x4MM,wroYKG(,7)_ 74_41SPӾC <OvuG|"mmZՖ?uU7*w;COD15vϐ۱>|L3|_7Ѐ |?C9o3mDmi߻/JW}>Gak)$ _e_mo&xSN~t }#[k^;;;ny߷r?zwquw]v0~>qNBXPN$@-,E9݁Eyzz.?4 f?<^&afȌb f$// f|+l8!MqHMccg)"}Jus;;u>>;M[(M"I?MAc,~?PׂVbn{jg*6W2SU!YD1H6L׶e'xH<~H;bnc(GvS?@=:Ss CH_;6,kpYV5xZolTE}wr-Z"FANi1?H$-FAi%Q#I5~(ƀH$~C5H"C4MΙ}׽{wa]&owgffwgwg*Z ~y'nTQ(@*C@PpV$fԬFJskSQpW0i7heNUx҄"])F >W Pmgp:B-!]iT F\7WVn~݇ݷ^Pݫ:P.s1=DKr{]]ǁQow^sk}*ݿ-ݿ-WE|޽yG >} _zo VaaRy:X%ZDMmt!zɜba|!"EɾL8 a?$W{G{KE[Il/{~d/cf|_d2ycu~a*@~h|9\>ͼ6y>NW>Ez\¾V[oM˹Nu\,צmƮM FFWl&E@i,٠)ҚTzީ9Jo!G:oÒ꘦%;yAܬFרӘ'J5N:4È9B%հ" o-m-lldH[-nj%Ȗo;'H-ݞǒ(~o;>|n7}'J͚o;Y?9vN?扒RSh|Gn4V5lҧbɧjJ-vd=tDI5]ӞmG6;> :yڮp #dn3yi=ʹΔg&R n311|Ny?ޤ=cbxspYGK^u(o𶚦opp?|:<԰\JSq4sΔo3XiS}o tn,ڨ%:W.w H{{ܚ]qV1o}krMzw]կrSzf\%LMEجI=# !^.oò6^L)o7{J)[ gs?FGJ^Gfd߬ckccc4zu[hlLAc+jYvr9 р?bO(quEΠH7R!0of>!0|1_|1fJ\烹2杘 swi\Wick\$Ƴ:#kG49cc|'$ϵJg,ϓ&f^B1+1+)ysCV:D1+VVa/o*7gf_S?,z#QΟjOg;NzH΁V5( фV.?UθJ?[B{c}Jqܿ=rX<"{Xuhr!lsRʁm@ug«'4?siL=cVMqW}>BLljS{KS1keˢG!u:MR-XwsR0_e9X>%Bmt[<~݋O|clxYFIt̓4*^)2CއG7b|'VwbbŽ]],+/Ӕ/7luf1B}H{/|s8)w`,E{!׎#!|}?>ÛZwZssM=u4f<ɞ{LPϋcX&b?^Y: !Y+2j񥭫8MKeQw.|{C 3x465Ʊf)/\V 4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ DCourier NewmanTT@wܖ 0ܖ1 B).  @t?" dld  @@`` 8*3 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =W"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP@ P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   bFN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>? Intel Thread Checker 4>;65= ?>:070BL >H81:8 2 :>45. Intel Thread Profiler 4>;65= ?><>GL =09B8 ?@8G8=K 70<54;5=8O.." " !"6"9  x #    " )cGN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>? Intel Thread Checker 4>;65= ?>:070BL >H81:8 2 :>45. Intel Thread Profiler 4>;65= ?>:070BL :0: @01>B0NB ?>B>:8.." " !"6"6  x #    " &dHN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>? Intel Thread Checker 4>;65= ?>:070BL >H81:8 2 :>45. Intel Thread Profiler 4>;65= ?>:070BL :0: @01>B0NB ?>B>:8.." " !"6"6  x #    " &eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H gKN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (4?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? "0:0O @50;870F8O 8A?>;L7C5B <8=8<0;L=>5 G8A;> ?5@5AK;>:. B  T:$H PhLN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? "0:0O @50;870F8O 8A?>;L7C5B <8=8<0;L=>5 G8A;> ?5@5AK;>:. >MB><C 2 Cluster OpenMP <>6=> 8A?>;L7>20BL <5=LH5 sharable 40==KE! t  T9333 3bH X     iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? jNN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (0: MB>3> 4>18BLAO? 1K;0 ?5@5?8A0=0 @50;870F8O MPI API ?>4 Cluster OpenMP; 2 ?0@0;;5;L=CN A5:F8N 1K; ?><5I5= 25AL :>4 B5AB>2>3> ?@8;>65=8O;*xxV/    BkON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P<  0  8<(  8~ 8 s *쪰9)    ~ 8 s *H AI `  H 8 0޽h ? f380___PPT10.@$M  0 p 4<(  4~ 4 s *}'d   ~ 4 s *  H 4 0޽h ? 33___PPT10i.0YbO+D=' k= @B +  0  L(  x  c $&'d  & x  c $& &   Bk_ж_ж ?"6@ NNN?N Tf ,$ 0 0\ MB>< A;CG05 C7;K =5 >1;040NB >1I59 (shared) ?0<OBLN (:0: 2 OpenMP), MB> @5H05BAO ?@>3@0<<=K< ?CB5< 2 181;8>B5:5  "@0A?@545;5==0O >1I0O ?0<OBL (distributed shared memory).0.8b3n%   .    QQH  0޽h ? f3___PPT10.2+PQFDO' k= @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+0 +  0 ~ v  (  x  c $p8&'d  & x  c $H9& &   Blk_ж_ж ?"6@ NNN?NG,$ 0 <8B0F8O ?0<OB8 =C6=> A8=E@>=878@>20BL 40==K5 <564C C7;0<8 ?@8 GB5=88/70?8A88(=!(= M  Bk_ж_ж ?"6@ NNN?N T ,$ 0 ,<8B0F8O 548=>3> ?@>AB@0=AB2> ?>B>:>2 =0 A0<>< 45;5 =0 C7;0E 2K?>;=O5BAO =5A:>;L:> ?@>F5AA>24'(7('7 ^  Bv_ж_ж ?"6@ NNN?N' ,$ 0 l@>3@0<<8AB 4>;65= C<5=LH0BL G8A;> @0745;O5<KE 40==KE!7(73 7  B,v_ж_ж ?"6@ NNN?N H,,$ 0 ./2=K< >1@07>< >?@545;O5< G8A;> ?@>F5AA>2 8 G8A;> ?>B>:>2 =0 :064>< ?@>F5AA5 2 ini D09;5X(X32N  H  0޽h ? f3  ___PPT10 .|*+ǝԓD' k= @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(++0+0 ++0+0 ++0+0 ++0+0 +f   0  B(  x  c $l&'d  & x  c $Ȏ& &   Bk_ж_ж ?"6@ NNN?N ,$ 0 $=0;>38G=> OpenMP: 8A?>;L7>20=85 48@5:B82 (?@>AB>B0 ?@>3@0<<8@>20=8O) 381:>ABL & ,(>!(Q&  @  Buk_ж_ж ?"6@ NNN?N  ,$ 0 A>15==>AB8: =C6=> O2=> >?@545;OBL :0:85 40==K5 4>;6=K 1KBL 2 @0745;O5<>9 ?0<OB88 (D!( D QH  0޽h ? f3\T___PPT104.C=+o-?D' k= @B DS' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+p+0+0 ++0+0 +!  0  ~(  x  c $&'d  & x  c $L& & F  Bϰ_ж_ж ,$ 0  8<55BAO E>@>H> CA:>@5=85 =0 @0A?0@0;;5;5==>9 OpenMP ?@>3@0<<5 =52KA>:85 B@51>20=8O : A8=E@>=870F88 40==KE Nk TV -  6 H  0޽h ? f3___PPT10.+PQFDO' k= @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+0 +  0  <(  ~  s *| 'd   ~  s *   H  0޽h ? 33___PPT10i.+D=' k= @B +  0  0(  x  c ${'d   x  c $  H  0޽h ? f3___PPT10i.4"+D=' k= @B +  0  0(  x  c $8c'd   x  c $,V  H  0޽h ? f3___PPT10i.4"+D=' k= @B +7  0 NF (  x  c $,'d   x  c $    Nh_ж_ж ?"6@ NNN?N   @8 70<54;5=88 2 2,5 @070 Profiler ?@54A:07K20; ;8=59=>5 CA:>@5=85!D(D3$ "  Bק_ж_ж ?"6@ NNN?N6  :J>4 Linux 8=AB@C<5=B0F8O =5 ?@>H;0. >4 Windows ?@>H;0 B>;L:> 18=0@=0O 8=AB@C<5=B0F8O, 345 =0945=> 3 >H81:8 (2 3>=:8 40==KE  JTree; >H81:0 GB5=8O/70?8A8 Pearl)(3  +  H  0޽h ? f3___PPT10i.4"+D=' k= @B +Q  0  v(  x  c $ܧ'd   x  c $    Nd_ж_ж ?"6@ NNN?N   @8 70<54;5=88 2 2,5 @070 Profiler ?@54A:07K20; ;8=59=>5 CA:>@5=85!D(D3$ "  Bpd_ж_ж ?"6@ NNN?N6  :J>4 Linux 8=AB@C<5=B0F8O =5 ?@>H;0. >4 Windows ?@>H;0 B>;L:> 18=0@=0O 8=AB@C<5=B0F8O, 345 =0945=> 3 >H81:8 (2 3>=:8 40==KE  JTree; >H81:0 GB5=8O/70?8A8 Pearl)(3  +     `0d_ж_ж 3)?"6@ NNN?NR ,$D 0 PluAked(`32  H  0޽h ? f3 ___PPT10..4"+D{' d= @B D6' = @BA?%,( < +O%,( < +Dm' =%(%(D' =%(D' =A@BB#BB0B%()))D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-g6B fade*<3<*D' =+4 8?HCB4DBCBB*k3>'Bstyle.rotation<*D' =+4 8?RCBBCB#ppt_hB*Y3>B ppt_h<*D' =+4 8?RCBBCB#ppt_wB*Y3>B ppt_w<*+8+0+0 +  0   0(   x   c $*d'd  d x   c $\d d H   0޽h ? f3___PPT10i./+D=' k= @B +  0  0(  x  c $\Bd'd  d x  c $   0 @ (>(  (x ( c $d'd  d  (0  F_ж_жA     ? @  5% 8c8c     ?A)BCD|E||# "0e@       @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abz   dH ( 0޽h ? f380___PPT10. i:   0 P ,>(  ,x , c $Ld'd  d  ,0  F_ж_жA     ? @  5% 8c8c     ?A)BCD|E||# "0e@       @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abgf   dH , 0޽h ? f3___PPT10i.V+D=' k= @B +0 4xZ}pT?$d_H7a7-%E@|*-X A)qF[NZujՠÌu:tqRKDžN{nɤ{{tS}Qtt!PM![~#*2 dI6rj.WEKߠV<Ŵ6ڛ}WȘ +4W`Y`?ǂ#Dn^7qu5훐FۨI_i(Y%1..+Zi'5@;$kPȘR\D+.ԶFRf Si+;z5 ٞ>bLכ3wsr  Q%rr5O Gax\Mn*EMrgf+xTZ ydYtUJ-3l]4Sӈ}3ϲ9WƗ~bNe\ Tb5ļ'R*~teG >zJ{owhh'\:fio$֐7[HǩcqtL_˧ߑVC(Rc]b*6T]yZwoliޱuƼ4^[7j]gSs6R)oCvl˴z4A[75E n<[`f,ܲ}l:Ëwf5z\)buBEtc(bn ʿp6Wub7*qAj!-XwRg1[x*Zc}j8}~:#nhmc!E]^/Q 땀}^G*TBz :xn54㙉aqgq7zkp&=[/7mt9x|R5blhoihM:Ri 8T[6k,nrnq1d='.׳w7%.h|Bs Ǔw5\z7nswG2qwF|V?tV%|{NMC>9'=O"ƣAzZ9[q/|,?nryrp(7 vɻÖwUG(y+ Uvf:uN̢e\6F@"0YуxSJbw,CUE&K$ɜB fgw:Df~>5.݋Cn'Y7N5gy)] bں|FS7"p^޸7I-Noٞĥ5Ɩ;`h HP,K:wz~ 8Җje5*^7TW},sq'x=('d зqUekeH@{A]ڃPgAV}=܈+#B2O(}9hzva )LTbbn[6#&? ku9m'Q6"R_M^Ȍcy_F{N큎WRcèAUyU+1;ȵ^I%"[w5sxW#sd1f%YsksjqRfər;4r= J3΅ sNJmQjVNI>wNPl<5]{gVkػBѲO=u E skR}ڛC>=}B{zYr~Z@)WgϜ}wySczOT{P:䛈N-H=CPK-B_,S9giYZI9TDh:+C:V􋘈'e (X#`!G0+ ;Bz5iOེء20= կ#5s ;.kworOZ7YCe3֎/؜@6$/Ʊ) ( q B4$UI#|J)_E"m"QˇhRHiB|}l]p y͛7~3kR>|la$&0kSd2I$sxBØG&Zi7~2{\Mqp+H Mc_E_XPc1(um[UxŔ.iB}:XcU*@$ю=11益MZQ+%1(M MU q&D ܓO40E=zS{;P:t=tc.\9 m0 s%(OL<41|*Պ4ak;y?.DDW|mYFMq'ѕ)]6a'l OS!Xd#N|ZN== 1c//i~r^\AmBdg 0RP C]cڿDDkwϟaݶ˄>yAUy8 dY2Nm@Ƥ_;AƲ?T~!cʕ^Lb&%_{%mGsfsg{_7?}wCG淬eR{ޟ>xpxUjw?8) 5h Kxl5}Һz'~F 8_; cfe^+;ΰ{u{wg9i4-n-fmg7FAhw]=V|]4ӔTqmmcMF_EQsp7٫Y8QC7m3,YO]|ov‹ܺU%AcDݸXآ&TϿV*h 5 DxƩ8 f9/\Rݥ2|sih#A#X9fJ%R|vZzĝ-n56Y.w.]{s!PZnMxu07U+[|=1G] kc1H8*dsq&.=>7OzJXyM<zjYhǣ~MVͧ&mր{@5{ŀtWqE(\ Jc`4q=clGlP7]xw'g!`nFQu˜Jl/?ɣL"ڋgmNO̡:hl$$A:> 7`(shT g8Ń CKr|Z-oZ$%qbBUHȄe\(>-ƿ ׹,Wp}md$ c3ߋ&~[zp>FXl$+P$h`,SUZV8.-B>IuBV"m- LBm/"jEO)3D nf^`\kd-MKM}CVs7Ie2X) RX@ež;DJ8ZthN٪zPPvKcRRξ\J6+ϲIV oL=ȂZJ5d2uwj$xE]\Ģq? _eCx[d&jC B]}i 8Zf$! I8ѪjNKa0}ސic^ ]x߁Ayڜyl4 f[~՚~\\200M ԮҪDN+.|y4o ?$-O/+-.\&~;yN뚣"(Zr,AqRENߴ^wH6<-/㏛zz{>pvOkFzpGͺCע3=vy=?=HżSh~ 20C/8|S !g}jKG[j1}Ĕ>$?h .\[E+c]g4xt;;Ť#ɦf15EpnM~-30׋(te0'62(d .C:x`/?]@eQnv΃]T_$v@]_oxo!*)} $«}T>8GG6PsLEX;M4# H uBI <_3N(陡α+;$1`\Rto/J^t$NX€4s5Klf0=G#&qeDe7gb9g3ǜQG7sD} h)AB'\Q(Z?vo"{î==jXj G-6 p 1PT,J 6 f)G 1IfcH ;EؾkN,!3S39$frqv+8[Ҩyz&QdL&K@)t7sGf.bv258@"7bzNL)ּ yIf h@X,zt,NjBGGҎ,:i[|.@萾谲 AN)ASBW&BOJxZ pTcI6ٛ&lB$SyoMM_@5RBE0@0<`C0\y0 ̕KyӉM`ljWĽ]3Ji|]Eȟ=l0ӀȧRO|i52:i1cȹ̓9̒s߿GmR@YHy26sNI{Oqa/ d\~hs ?oZ/I6KI4̙w! 0?|ݮ冰3k6+2a/b{{drtjoi Jxl~Uʙw#kxߨw~#Ƅˣ HJ|i;EuV[ܴze˸%ii4+mY~iS3n7;^%l9lO`\~kr>9g ˗X$!_b k6n5KZMou}$l-QfG͎ŎŎ:Gy]4˯Pų<Ϗw^ ۉ\gU?_ (H!<a3)Ǯ@ьo:bV89QN|U|ëjw՛N>f+;Kr D!Pܒ GZ Q}'{ r<\C7.AT Jx2zj/-gB<NF+&+"TUDhl_J(I\EdjN..w&ntBjEGHۛ`t&٭Vt+z!:DWL7p  %IMCKC^JO.a;R je|\W|*ܧ`q[{ZڮCvjRO(1^?6!f_ApWrޑa`A&5-"ܟ܅*:)zTV9G?b`'BH|]5rj<$,%[ P#];h#B4*#3?nGp+@.sg snk a۲M8nRI  ЯżGi Y7{#ulFȋ|xnP hi>o{`y8bĔR:#^:^fY8٬T3vyP'.Anz!zL` 4GSq= +cdP&ɣd?x JEIRdF. jX%ڠy0sUGNj) q=Tբv@Z* mp*x䤤x)YSFʠz#02?7 @T N F|i$r:ԁdoWxO}!RfZobγsۇ3 D-†_ 4Z $WPnӋ0@Q/5# UH0֭kt/m|飋xY61^z5nQ6`Xl^Rtexe;wfhE=~"pS2 oPe J^SD B܋Ku8^fk3Af+IdkySeu?iz6ښ>f+6 @]LfMtS,"(J EuPl-*(J EuPKBQkΐ%Z(M<ߓ;G sUM_܅C +yK.r;3,O+n nA 5 ^}}=;InRYzI[5S|м&= 5 (dx^o3/a'qndk>Ϸ2]E9P/Svi 2BIeX?cTt3aY+0#~`uht"ia] pDp:sRr7?T@|G^^D獏GEAʎ nqǒBIѐ2W-bS=2XM+b NTy< OקgMb3^,!c|΄599xJ^FkW^AOW=%cLW6z^iV+ ټ5֠7ɍ4i2LHSDO Y DOW4b#k3'k/rT%S}=A&3hB:%r&r8BRqLL` ۗ~> T ?e%17=ǭɷdGf G:[НF)Í,$Q/} "JQMtBpS/Vo>bǚiQA!(w3%cF] l$E4.qպxq9h!"Fω찲{d SVs!ja KxJ5)!*K9[C5af6`ԲkX#,efDn1(j@`2%pȪB9' f=##M \7-uqI6\`ePȪ"$abdGNWL?LJLbW\I>gP9 =@S{i"P/{ĸqfNxW}Yw|o38N^sTa2TwIwztfoӣ3;N ,[YIqmSgGgZљ^))*3 ]irGntt7q۾gnW&FnZqQKk?@rxMcOlRU[[0#9^}`!C۳lAL9vm1.b(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ DCourier NewmanTT@wܖ 0ܖ1 B).  @t?" dld  @@`` 8%3 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =G"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 8      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|}~7 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? jNN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (0: MB>3> 4>18BLAO? 1K;0 ?5@5?8A0=0 @50;870F8O MPI API ?>4 Cluster OpenMP; 2 ?0@0;;5;L=CN A5:F8N 1K; ?><5I5= 25AL :>4 B5AB>2>3> ?@8;>65=8O;*xxV/    BkON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P  0 <(  ~  s *$V9)   V ~  s *DVI ` V H  0޽h ? ̙333f___PPT10i.' +D=' k= @B +  0    (  x  c ${'d   x  c $  2  Bk_ж_ж P ,$ 0 Intel Thread Checker 4>;65= ?>:070BL >H81:8 2 :>45. Intel Thread Profiler 4>;65= ?><>GL =09B8 ?@8G8=K 70<54;5=8O.Lw"7 " 90 # )  N,rA_ж_ж ?"6@ NNN?N  ,$ 0 @8 70<54;5=88 2 2,5 @070 Profiler ?@54A:07K20; ;8=59=>5 CA:>@5=85!D(D3$ "  BA_ж_ж ?"6@ NNN?N6 ,$ 0 :J>4 Linux 8=AB@C<5=B0F8O =5 ?@>H;0. >4 Windows ?@>H;0 B>;L:> 18=0@=0O 8=AB@C<5=B0F8O, 345 =0945=> 3 >H81:8 (2 3>=:8 40==KE  JTree; >H81:0 GB5=8O/70?8A8 Pearl)(3  +     `0 WA_ж_ж 3)?"6@ NNN?NR ,$D 0 PluAked(`32  H  0޽h ? f3___PPT10.4"+D ' A= @B DA ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(DM' =%(D' =%(D' =A@BB#BB0B%()))D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-g6B fade*<3<*D' =+4 8?HCB4DBCBB*k3>'Bstyle.rotation<*D' =+4 8?RCBBCB#ppt_hB*Y3>B ppt_h<*D' =+4 8?RCBBCB#ppt_wB*Y3>B ppt_w<*++0+0 ++0+0 ++0+0 ++0+0 +   0  (  x  c $\Bd'd  d x  c $;L7C5B <8=8<0;L=>5 G8A;> ?5@5AK;>:. $;: ;  B,d_ж_ж 5  ,$ 0 Z-B> ?>72>;O5B 8 2 Cluster OpenMP @50;870F88 8A?>;L7>20BL <5=LH5 sharable 40==KE!JRA333J     H  0޽h ? f3\T___PPT104.@2o+o-?D' = @B DS' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+p+0+0 ++0+0 +0 4xZ}pT?$d_H7a7-%E@|*-X A)qF[NZujՠÌu:tqRKDžN{nɤ{{tS}Qtt!PM![~#*2 dI6rj.WEKߠV<Ŵ6ڛ}WȘ +4W`Y`?ǂ#Dn^7qu5훐FۨI_i(Y%1..+Zi'5@;$kPȘR\D+.ԶFRf Si+;z5 ٞ>bLכ3wsr  Q%rr5O Gax\Mn*EMrgf+xTZ ydYtUJ-3l]4Sӈ}3ϲ9WƗ~bNe\ Tb5ļ'R*~teG >zJ{owhh'\:fio$֐7[HǩcqtL_˧ߑVC(Rc]b*6T]yZwoliޱuƼ4^[7j]gSs6R)oCvl˴z4A[75E n<[`f,ܲ}l:Ëwf5z\)buBEtc(bn ʿp6Wub7*qAj!-XwRg1[x*Zc}j8}~:#nhmc!E]^/Q 땀}^G*TBz :xn54㙉aqgq7zkp&=[/7mt9x|R5blhoihM:Ri 8T[6k,nrnq1d='.׳w7%.h|Bs Ǔw5\z7nswG2qwF|V?tV%|{NMC>9'=O"ƣAzZ9[q/|,?nryrp(7 vɻÖwUG(y+ Uvf:uN̢e\6F@"0YуxSJbw,CUE&K$ɜB fgw:Df~>5.݋Cn'Y7N5gy)] bں|FS7"p^޸7I-Noٞĥ5Ɩ;`h HP,K:wz~ 8Җje5*^7TW},sq'x=('d зqUekeH@{A]ڃPgAV}=܈+#B2O(}9hzva )LTbbn[6#&? ku9m'Q6"R_M^Ȍcy_F{N큎WRcèAUyU+1;ȵ^I%"[w5sxW#sd1f%YsksjqRfər;4r= J3΅ sNJmQjVNI>wNPl<5]{gVkػBѲO=u E skR}ڛC>=}B{zYr~Z@)WgϜ}wySczOT{P:䛈N-H=CPK-B_,S9giYZI9TDh:+C:V􋘈'e (X#`!G0+ ;Bz5iOེء20= կ#5s ;.kworOZ7YCe3֎/؜@6$/Ʊ) ( q B4$UI#|J)_E"m"QˇhRHiB|}l]p y͛7~3kR>|la$&0kSd2I$sxBØG&Zi7~2{\Mqp+H Mc_E_XPc1(um[UxŔ.iB}:XcU*@$ю=11益MZQ+%1(M MU q&D ܓO40E=zS{;P:t=tc.\9 m0 s%(OL<41|*Պ4ak;y?.DDW|mYFMq'ѕ)]6a'l OS!Xd#N|ZN== 1c//i~r^\AmBdg 0RP C]cڿDDkwϟaݶ˄>yAUy8 dY2Nm@Ƥ_;AƲ?T~!cʕ^Lb&%_{%mGsfsg{_7?}wCG淬eR{ޟ>xpxUjw?8) 5h Kxl5}Һz'~F 8_; cfe^+;ΰ{u{wg9i4-n-fmg7FAhw]=V|]4ӔTqmmcMF_EQsp7٫Y8QC7m3,YO]|ov‹ܺU%AcDݸXآ&TϿV*h 5 DxƩ8 f9/\Rݥ2|sih#A#X9fJ%R|vZzĝ-n56Y.w.]{s!PZnMxu07U+[|=1G] kc1H8*dsq&.=>7OzJXyM<zjYhǣ~MVͧ&mր{@5{ŀtWqE(\ Jc`4q=clGlP7]xw'g!`nFQu˜Jl/?ɣL"ڋgmNO̡:hl$$A:> 7`(shT g8Ń CKr|Z-oZ$%qbBUHȄe\(>-ƿ ׹,Wp}md$ c3ߋ&~[zp>FXl$+P$h`,SUZV8.-B>IuBV"m- LBm/"jEO)3D nf^`\kd-MKM}CVs7Ie2X) RX@ež;DJ8ZthN٪zPPvKcRRξ\J6+ϲIV oL=ȂZJ5d2uwj$xE]\Ģq? _eCx[d&jC B]}i 8Zf$! I8ѪjNKa0}ސic^ ]x߁Ayڜyl4 f[~՚~\\200M ԮҪDN+.|y4o ?$-O/+-.\&~;yN뚣"(Zr,AqRENߴ^wH6<-/㏛zz{>pvOkFzpGͺCע3=vy=?=HżSh~ 20C/8|S !g}jKG[j1}Ĕ>$?h .\[E+c]g4xt;;Ť#ɦf15EpnM~-30׋(te0'62(d .C:x`/?]@eQnv΃]T_$v@]_oxo!*)} $«}T>8GG6PsLEX;M4# H uBI <_3N(陡α+;$1`\Rto/J^t$NX€4s5Klf0=G#&qeDe7gb9g3ǜQG7sD} h)AB'\Q(Z?vo"{î==jXj G-6 p 1PT,J 6 f)G 1IfcH ;EؾkN,!3S39$frqv+8[Ҩyz&QdL&K@)t7sGf.bv258@"7bzNL)ּ yIf h@X,zt,NjBGGҎ,:i[|.@萾谲 AN)ASBW&BOJxZ pTcI6ٛ&lB$SyoMM_@5RBE0@0<`C0\y0 ̕KyӉM`ljWĽ]3Ji|]Eȟ=l0ӀȧRO|i52:i1cȹ̓9̒s߿GmR@YHy26sNI{Oqa/ d\~hs ?oZ/I6KI4̙w! 0?|ݮ冰3k6+2a/b{{drtjoi Jxl~Uʙw#kxߨw~#Ƅˣ HJ|i;EuV[ܴze˸%ii4+mY~iS3n7;^%l9lO`\~kr>9g ˗X$!_b k6n5KZMou}$l-QfG͎ŎŎ:Gy]4˯Pų<Ϗw^ ۉ\gU?_ (H!<a3)Ǯ@ьo:bV89QN|U|ëjw՛N>f+;Kr D!Pܒ GZ Q}'{ r<\C7.AT Jx2zj/-gB<NF+&+"TUDhl_J(I\EdjN..w&ntBjEGHۛ`t&٭Vt+z!:DWL7p  %IMCKC^JO.a;R je|\W|*ܧ`q[{ZڮCvjRO(1^?6!f_ApWrޑa`A&5-"ܟ܅*:)zTV9G?b`'BH|]5rj<$,%[ P#];h#B4*#3?nGp+@.sg snk a۲M8nRI  ЯżGi Y7{#ulFȋ|xnP hi>o{`y8bĔR:#^:^fY8٬T3vyP'.Anz!zL` 4GSq= +cdP&ɣd?x JEIRdF. jX%ڠy0sUGNj) q=Tբv@Z* mp*x䤤x)YSFʠz#02?7 @T N F|i$r:ԁdoWxO}!RfZobγsۇ3 D-†_ 4Z $WPnӋ0@Q/5# UH0֭kt/m|飋xY61^z5nQ6`Xl^Rtexe;wfhE=~"pS2 oPe J^SD B܋Ku8^fk3Af+IdkySeu?iz6ښ>f+6 @]LfMtS,"(J EuPl-*(J EuPKBQkΐ%Z(M<ߓ;G sUM_܅C +yK.r;3,O+n nA 5 ^}}=;InRYzI[5S|м&= 5 (dx^o3/a'qndk>Ϸ2]E9P/Svi 2BIeX?cTt3aY+0#~`uht"ia] pDp:sRr7?T@|G^^D獏GEAʎ nqǒBIѐ2W-bS=2XM+b NTy< OקgMb3^,!c|΄599xJ^FkW^AOW=%cLW6z^iV+ ټ5֠7ɍ4i2LHSDO Y DOW4b#k3'k/rT%S}=A&3hB:%r&r8BRqLL` ۗ~> T ?e%17=ǭɷdGf G:[НF)Í,$Q/} "JQMtBpS/Vo>bǚiQA!(w3%cF] l$E4.qպxq9h!"Fω찲{d SVs!ja KxJ5)!*K9[C5af6`ԲkX#,efDn1(j@`2%pȪB9' f=##M \7-uqI6\`ePȪ"$abdGNWL?LJLbW\I>gP9 =@S{i"P/{ĸqfNxW}Yw|o38N^sTa2TwIwztfoӣ3;N ,[YIqmSgGgZљ^))*3 ]irGntt7q۾gnW&FnZqQKk?@r0KPc[0iaefJm1_(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ DCourier NewmanTT@wܖ 0ܖ1 B).  @t?" dld  @@`` 8$3 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =E"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? kON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P  0  r(  x  c $d'd  d x  c $d d :  B d_ж_ж M@,$ 0  1K;0 ?5@5?8A0=0 @50;870F8O MPI API ?>4 Cluster OpenMP; 2 ?0@0;;5;L=CN A5:F8N 1K; ?><5I5= 25AL :>4 B5AB>2>3> ?@8;>65=8O;*xxV    BH  0޽h ? f3___PPT10.@/+PQFDO' k= @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+0 +0 4xZ}pT?$d_H7a7-%E@|*-X A)qF[NZujՠÌu:tqRKDžN{nɤ{{tS}Qtt!PM![~#*2 dI6rj.WEKߠV<Ŵ6ڛ}WȘ +4W`Y`?ǂ#Dn^7qu5훐FۨI_i(Y%1..+Zi'5@;$kPȘR\D+.ԶFRf Si+;z5 ٞ>bLכ3wsr  Q%rr5O Gax\Mn*EMrgf+xTZ ydYtUJ-3l]4Sӈ}3ϲ9WƗ~bNe\ Tb5ļ'R*~teG >zJ{owhh'\:fio$֐7[HǩcqtL_˧ߑVC(Rc]b*6T]yZwoliޱuƼ4^[7j]gSs6R)oCvl˴z4A[75E n<[`f,ܲ}l:Ëwf5z\)buBEtc(bn ʿp6Wub7*qAj!-XwRg1[x*Zc}j8}~:#nhmc!E]^/Q 땀}^G*TBz :xn54㙉aqgq7zkp&=[/7mt9x|R5blhoihM:Ri 8T[6k,nrnq1d='.׳w7%.h|Bs Ǔw5\z7nswG2qwF|V?tV%|{NMC>9'=O"ƣAzZ9[q/|,?nryrp(7 vɻÖwUG(y+ Uvf:uN̢e\6F@"0YуxSJbw,CUE&K$ɜB fgw:Df~>5.݋Cn'Y7N5gy)] bں|FS7"p^޸7I-Noٞĥ5Ɩ;`h HP,K:wz~ 8Җje5*^7TW},sq'x=('d зqUekeH@{A]ڃPgAV}=܈+#B2O(}9hzva )LTbbn[6#&? ku9m'Q6"R_M^Ȍcy_F{N큎WRcèAUyU+1;ȵ^I%"[w5sxW#sd1f%YsksjqRfər;4r= J3΅ sNJmQjVNI>wNPl<5]{gVkػBѲO=u E skR}ڛC>=}B{zYr~Z@)WgϜ}wySczOT{P:䛈N-H=CPK-B_,S9giYZI9TDh:+C:V􋘈'e (X#`!G0+ ;Bz5iOེء20= կ#5s ;.kworOZ7YCe3֎/؜@6$/Ʊ) ( q B4$UI#|J)_E"m"QˇhRHiB|}l]p y͛7~3kR>|la$&0kSd2I$sxBØG&Zi7~2{\Mqp+H Mc_E_XPc1(um[UxŔ.iB}:XcU*@$ю=11益MZQ+%1(M MU q&D ܓO40E=zS{;P:t=tc.\9 m0 s%(OL<41|*Պ4ak;y?.DDW|mYFMq'ѕ)]6a'l OS!Xd#N|ZN== 1c//i~r^\AmBdg 0RP C]cڿDDkwϟaݶ˄>yAUy8 dY2Nm@Ƥ_;AƲ?T~!cʕ^Lb&%_{%mGsfsg{_7?}wCG淬eR{ޟ>xpxUjw?8) 5h Kxl5}Һz'~F 8_; cfe^+;ΰ{u{wg9i4-n-fmg7FAhw]=V|]4ӔTqmmcMF_EQsp7٫Y8QC7m3,YO]|ov‹ܺU%AcDݸXآ&TϿV*h 5 DxƩ8 f9/\Rݥ2|sih#A#X9fJ%R|vZzĝ-n56Y.w.]{s!PZnMxu07U+[|=1G] kc1H8*dsq&.=>7OzJXyM<zjYhǣ~MVͧ&mր{@5{ŀtWqE(\ Jc`4q=clGlP7]xw'g!`nFQu˜Jl/?ɣL"ڋgmNO̡:hl$$A:> 7`(shT g8Ń CKr|Z-oZ$%qbBUHȄe\(>-ƿ ׹,Wp}md$ c3ߋ&~[zp>FXl$+P$h`,SUZV8.-B>IuBV"m- LBm/"jEO)3D nf^`\kd-MKM}CVs7Ie2X) RX@ež;DJ8ZthN٪zPPvKcRRξ\J6+ϲIV oL=ȂZJ5d2uwj$xE]\Ģq? _eCx[d&jC B]}i 8Zf$! I8ѪjNKa0}ސic^ ]x߁Ayڜyl4 f[~՚~\\200M ԮҪDN+.|y4o ?$-O/+-.\&~;yN뚣"(Zr,AqRENߴ^wH6<-/㏛zz{>pvOkFzpGͺCע3=vy=?=HżSh~ 20C/8|S !g}jKG[j1}Ĕ>$?h .\[E+c]g4xt;;Ť#ɦf15EpnM~-30׋(te0'62(d .C:x`/?]@eQnv΃]T_$v@]_oxo!*)} $«}T>8GG6PsLEX;M4# H uBI <_3N(陡α+;$1`\Rto/J^t$NX€4s5Klf0=G#&qeDe7gb9g3ǜQG7sD} h)AB'\Q(Z?vo"{î==jXj G-6 p 1PT,J 6 f)G 1IfcH ;EؾkN,!3S39$frqv+8[Ҩyz&QdL&K@)t7sGf.bv258@"7bzNL)ּ yIf h@X,zt,NjBGGҎ,:i[|.@萾谲 AN)ASBW&BOJxZ pTcI6ٛ&lB$SyoMM_@5RBE0@0<`C0\y0 ̕KyӉM`ljWĽ]3Ji|]Eȟ=l0ӀȧRO|i52:i1cȹ̓9̒s߿GmR@YHy26sNI{Oqa/ d\~hs ?oZ/I6KI4̙w! 0?|ݮ冰3k6+2a/b{{drtjoi Jxl~Uʙw#kxߨw~#Ƅˣ HJ|i;EuV[ܴze˸%ii4+mY~iS3n7;^%l9lO`\~kr>9g ˗X$!_b k6n5KZMou}$l-QfG͎ŎŎ:Gy]4˯Pų<Ϗw^ ۉ\gU?_ (H!<a3)Ǯ@ьo:bV89QN|U|ëjw՛N>f+;Kr D!Pܒ GZ Q}'{ r<\C7.AT Jx2zj/-gB<NF+&+"TUDhl_J(I\EdjN..w&ntBjEGHۛ`t&٭Vt+z!:DWL7p  %IMCKC^JO.a;R je|\W|*ܧ`q[{ZڮCvjRO(1^?6!f_ApWrޑa`A&5-"ܟ܅*:)zTV9G?b`'BH|]5rj<$,%[ P#];h#B4*#3?nGp+@.sg snk a۲M8nRI  ЯżGi Y7{#ulFȋ|xnP hi>o{`y8bĔR:#^:^fY8٬T3vyP'.Anz!zL` 4GSq= +cdP&ɣd?x JEIRdF. jX%ڠy0sUGNj) q=Tբv@Z* mp*x䤤x)YSFʠz#02?7 @T N F|i$r:ԁdoWxO}!RfZobγsۇ3 D-†_ 4Z $WPnӋ0@Q/5# UH0֭kt/m|飋xY61^z5nQ6`Xl^Rtexe;wfhE=~"pS2 oPe J^SD B܋Ku8^fk3Af+IdkySeu?iz6ښ>f+6 @]LfMtS,"(J EuPl-*(J EuPKBQkΐ%Z(M<ߓ;G sUM_܅C +yK.r;3,O+n nA 5 ^}}=;InRYzI[5S|м&= 5 (dx^o3/a'qndk>Ϸ2]E9P/Svi 2BIeX?cTt3aY+0#~`uht"ia] pDp:sRr7?T@|G^^D獏GEAʎ nqǒBIѐ2W-bS=2XM+b NTy< OקgMb3^,!c|΄599xJ^FkW^AOW=%cLW6z^iV+ ټ5֠7ɍ4i2LHSDO Y DOW4b#k3'k/rT%S}=A&3hB:%r&r8BRqLL` ۗ~> T ?e%17=ǭɷdGf G:[НF)Í,$Q/} "JQMtBpS/Vo>bǚiQA!(w3%cF] l$E4.qպxq9h!"Fω찲{d SVs!ja KxJ5)!*K9[C5af6`ԲkX#,efDn1(j@`2%pȪB9' f=##M \7-uqI6\`ePȪ"$abdGNWL?LJLbW\I>gP9 =@S{i"P/{ĸqfNxW}Yw|o38N^sTa2TwIwztfoӣ3;N ,[YIqmSgGgZљ^))*3 ]irGntt7q۾gnW&FnZqQKk?@r P[0;s&3iM,Bm1_(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ DCourier NewmanTT@wܖ 0ܖ1 B).  @t?" dld  @@`` 8$3 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =E"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? kON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P0 4xZ}pT?$d_H7a7-%E@|*-X A)qF[NZujՠÌu:tqRKDžN{nɤ{{tS}Qtt!PM![~#*2 dI6rj.WEKߠV<Ŵ6ڛ}WȘ +4W`Y`?ǂ#Dn^7qu5훐FۨI_i(Y%1..+Zi'5@;$kPȘR\D+.ԶFRf Si+;z5 ٞ>bLכ3wsr  Q%rr5O Gax\Mn*EMrgf+xTZ ydYtUJ-3l]4Sӈ}3ϲ9WƗ~bNe\ Tb5ļ'R*~teG >zJ{owhh'\:fio$֐7[HǩcqtL_˧ߑVC(Rc]b*6T]yZwoliޱuƼ4^[7j]gSs6R)oCvl˴z4A[75E n<[`f,ܲ}l:Ëwf5z\)buBEtc(bn ʿp6Wub7*qAj!-XwRg1[x*Zc}j8}~:#nhmc!E]^/Q 땀}^G*TBz :xn54㙉aqgq7zkp&=[/7mt9x|R5blhoihM:Ri 8T[6k,nrnq1d='.׳w7%.h|Bs Ǔw5\z7nswG2qwF|V?tV%|{NMC>9'=O"ƣAzZ9[q/|,?nryrp(7 vɻÖwUG(y+ Uvf:uN̢e\6F@"0YуxSJbw,CUE&K$ɜB fgw:Df~>5.݋Cn'Y7N5gy)] bں|FS7"p^޸7I-Noٞĥ5Ɩ;`h HP,K:wz~ 8Җje5*^7TW},sq'x=('d зqUekeH@{A]ڃPgAV}=܈+#B2O(}9hzva )LTbbn[6#&? ku9m'Q6"R_M^Ȍcy_F{N큎WRcèAUyU+1;ȵ^I%"[w5sxW#sd1f%YsksjqRfər;4r= J3΅ sNJmQjVNI>wNPl<5]{gVkػBѲO=u E skR}ڛC>=}B{zYr~Z@)WgϜ}wySczOT{P:䛈N-H=CPK-B_,S9giYZI9TDh:+C:V􋘈'e (X#`!G0+ ;Bz5iOེء20= կ#5s ;.kworOZ7YCe3֎/؜@6$/Ʊ) ( q B4$UI#|J)_E"m"QˇhRHiB|}l]p y͛7~3kR>|la$&0kSd2I$sxBØG&Zi7~2{\Mqp+H Mc_E_XPc1(um[UxŔ.iB}:XcU*@$ю=11益MZQ+%1(M MU q&D ܓO40E=zS{;P:t=tc.\9 m0 s%(OL<41|*Պ4ak;y?.DDW|mYFMq'ѕ)]6a'l OS!Xd#N|ZN== 1c//i~r^\AmBdg 0RP C]cڿDDkwϟaݶ˄>yAUy8 dY2Nm@Ƥ_;AƲ?T~!cʕ^Lb&%_{%mGsfsg{_7?}wCG淬eR{ޟ>xpxUjw?8) 5h Kxl5}Һz'~F 8_; cfe^+;ΰ{u{wg9i4-n-fmg7FAhw]=V|]4ӔTqmmcMF_EQsp7٫Y8QC7m3,YO]|ov‹ܺU%AcDݸXآ&TϿV*h 5 DxƩ8 f9/\Rݥ2|sih#A#X9fJ%R|vZzĝ-n56Y.w.]{s!PZnMxu07U+[|=1G] kc1H8*dsq&.=>7OzJXyM<zjYhǣ~MVͧ&mր{@5{ŀtWqE(\ Jc`4q=clGlP7]xw'g!`nFQu˜Jl/?ɣL"ڋgmNO̡:hl$$A:> 7`(shT g8Ń CKr|Z-oZ$%qbBUHȄe\(>-ƿ ׹,Wp}md$ c3ߋ&~[zp>FXl$+P$h`,SUZV8.-B>IuBV"m- LBm/"jEO)3D nf^`\kd-MKM}CVs7Ie2X) RX@ež;DJ8ZthN٪zPPvKcRRξ\J6+ϲIV oL=ȂZJ5d2uwj$xE]\Ģq? _eCx[d&jC B]}i 8Zf$! I8ѪjNKa0}ސic^ ]x߁Ayڜyl4 f[~՚~\\200M ԮҪDN+.|y4o ?$-O/+-.\&~;yN뚣"(Zr,AqRENߴ^wH6<-/㏛zz{>pvOkFzpGͺCע3=vy=?=HżSh~ 20C/8|S !g}jKG[j1}Ĕ>$?h .\[E+c]g4xt;;Ť#ɦf15EpnM~-30׋(te0'62(d .C:x`/?]@eQnv΃]T_$v@]_oxo!*)} $«}T>8GG6PsLEX;M4# H uBI <_3N(陡α+;$1`\Rto/J^t$NX€4s5Klf0=G#&qeDe7gb9g3ǜQG7sD} h)AB'\Q(Z?vo"{î==jXj G-6 p 1PT,J 6 f)G 1IfcH ;EؾkN,!3S39$frqv+8[Ҩyz&QdL&K@)t7sGf.bv258@"7bzNL)ּ yIf h@X,zt,NjBGGҎ,:i[|.@萾谲 AN)ASBW&BOJxZ pTcI6ٛ&lB$SyoMM_@5RBE0@0<`C0\y0 ̕KyӉM`ljWĽ]3Ji|]Eȟ=l0ӀȧRO|i52:i1cȹ̓9̒s߿GmR@YHy26sNI{Oqa/ d\~hs ?oZ/I6KI4̙w! 0?|ݮ冰3k6+2a/b{{drtjoi Jxl~Uʙw#kxߨw~#Ƅˣ HJ|i;EuV[ܴze˸%ii4+mY~iS3n7;^%l9lO`\~kr>9g ˗X$!_b k6n5KZMou}$l-QfG͎ŎŎ:Gy]4˯Pų<Ϗw^ ۉ\gU?_ (H!<a3)Ǯ@ьo:bV89QN|U|ëjw՛N>f+;Kr D!Pܒ GZ Q}'{ r<\C7.AT Jx2zj/-gB<NF+&+"TUDhl_J(I\EdjN..w&ntBjEGHۛ`t&٭Vt+z!:DWL7p  %IMCKC^JO.a;R je|\W|*ܧ`q[{ZڮCvjRO(1^?6!f_ApWrޑa`A&5-"ܟ܅*:)zTV9G?b`'BH|]5rj<$,%[ P#];h#B4*#3?nGp+@.sg snk a۲M8nRI  ЯżGi Y7{#ulFȋ|xnP hi>o{`y8bĔR:#^:^fY8٬T3vyP'.Anz!zL` 4GSq= +cdP&ɣd?x JEIRdF. jX%ڠy0sUGNj) q=Tբv@Z* mp*x䤤x)YSFʠz#02?7 @T N F|i$r:ԁdoWxO}!RfZobγsۇ3 D-†_ 4Z $WPnӋ0@Q/5# UH0֭kt/m|飋xY61^z5nQ6`Xl^Rtexe;wfhE=~"pS2 oPe J^SD B܋Ku8^fk3Af+IdkySeu?iz6ښ>f+6 @]LfMtS,"(J EuPl-*(J EuPKBQkΐ%Z(M<ߓ;G sUM_܅C +yK.r;3,O+n nA 5 ^}}=;InRYzI[5S|м&= 5 (dx^o3/a'qndk>Ϸ2]E9P/Svi 2BIeX?cTt3aY+0#~`uht"ia] pDp:sRr7?T@|G^^D獏GEAʎ nqǒBIѐ2W-bS=2XM+b NTy< OקgMb3^,!c|΄599xJ^FkW^AOW=%cLW6z^iV+ ټ5֠7ɍ4i2LHSDO Y DOW4b#k3'k/rT%S}=A&3hB:%r&r8BRqLL` ۗ~> T ?e%17=ǭɷdGf G:[НF)Í,$Q/} "JQMtBpS/Vo>bǚiQA!(w3%cF] l$E4.qպxq9h!"Fω찲{d SVs!ja KxJ5)!*K9[C5af6`ԲkX#,efDn1(j@`2%pȪB9' f=##M \7-uqI6\`ePȪ"$abdGNWL?LJLbW\I>gP9 =@S{i"P/{ĸqfNxW}Yw|o38N^sTa2TwIwztfoӣ3;N ,[YIqmSgGgZљ^))*3 ]irGntt7q۾gnW&FnZqQKk?@rC[0{MBkm1_(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ DCourier NewmanTT@wܖ 0ܖ1 B).  @t?" dld  @@`` 8$3 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =E"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? kON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P0 4xZ}pT?$d_H7a7-%E@|*-X A)qF[NZujՠÌu:tqRKDžN{nɤ{{tS}Qtt!PM![~#*2 dI6rj.WEKߠV<Ŵ6ڛ}WȘ +4W`Y`?ǂ#Dn^7qu5훐FۨI_i(Y%1..+Zi'5@;$kPȘR\D+.ԶFRf Si+;z5 ٞ>bLכ3wsr  Q%rr5O Gax\  !"#$'&()*+,-./0123Mn*EMrgf+xTZ ydYtUJ-3l]4Sӈ}3ϲ9WƗ~bNe\ Tb5ļ'R*~teG >zJ{owhh'\:fio$֐7[HǩcqtL_˧ߑVC(Rc]b*6T]yZwoliޱuƼ4^[7j]gSs6R)oCvl˴z4A[75E n<[`f,ܲ}l:Ëwf5z\)buBEtc(bn ʿp6Wub7*qAj!-XwRg1[x*Zc}j8}~:#nhmc!E]^/Q 땀}^G*TBz :xn54㙉aqgq7zkp&=[/7mt9x|R5blhoihM:Ri 8T[6k,nrnq1d='.׳w7%.h|Bs Ǔw5\z7nswG2qwF|V?tV%|{NMC>9'=O"ƣAzZ9[q/|,?nryrp(7 vɻÖwUG(y+ Uvf:uN̢e\6F@"0YуxSJbw,CUE&K$ɜB fgw:Df~>5.݋Cn'Y7N5gy)] bں|FS7"p^޸7I-Noٞĥ5Ɩ;`h HP,K:wz~ 8Җje5*^7TW},sq'x=('d зqUekeH@{A]ڃPgAV}=܈+#B2O(}9hzva )LTbbn[6#&? ku9m'Q6"R_M^Ȍcy_F{N큎WRcèAUyU+1;ȵ^I%"[w5sxW#sd1f%YsksjqRfər;4r= J3΅ sNJmQjVNI>wNPl<5]{gVkػBѲO=u E skR}ڛC>=}B{zYr~Z@)WgϜ}wySczOT{P:䛈N-H=CPK-B_,S9giYZI9TDh:+C:V􋘈'e (X#`!G0+ ;Bz5iOེء20= կ#5s ;.kworOZ7YCe3֎/؜@6$/Ʊ) ( q B4$UI#|J)_E"m"QˇhRHiB|}l]p y͛7~3kR>|la$&0kSd2I$sxBØG&Zi7~2{\Mqp+H Mc_E_XPc1(um[UxŔ.iB}:XcU*@$ю=11益MZQ+%1(M MU q&D ܓO40E=zS{;P:t=tc.\9 m0 s%(OL<41|*Պ4ak;y?.DDW|mYFMq'ѕ)]6a'l OS!Xd#N|ZN== 1c//i~r^\AmBdg 0RP C]cڿDDkwϟaݶ˄>yAUy8 dY2Nm@Ƥ_;AƲ?T~!cʕ^Lb&%_{%mGsfsg{_7?}wCG淬eR{ޟ>xpxUjw?8) 5h Kxl5}Һz'~F 8_; cfe^+;ΰ{u{wg9i4-n-fmg7FAhw]=V|]4ӔTqmmcMF_EQsp7٫Y8QC7m3,YO]|ov‹ܺU%AcDݸXآ&TϿV*h 5 DxƩ8 f9/\Rݥ2|sih#A#X9fJ%R|vZzĝ-n56Y.w.]{s!PZnMxu07U+[|=1G] kc1H8*dsq&.=>7OzJXyM<zjYhǣ~MVͧ&mր{@5{ŀtWqE(\ Jc`4q=clGlP7]xw'g!`nFQu˜Jl/?ɣL"ڋgmNO̡:hl$$A:> 7`(shT g8Ń CKr|Z-oZ$%qbBUHȄe\(>-ƿ ׹,Wp}md$ c3ߋ&~[zp>FXl$+P$h`,SUZV8.-B>IuBV"m- LBm/"jEO)3D nf^`\kd-MKM}CVs7Ie2X) RX@ež;DJ8ZthN٪zPPvKcRRξ\J6+ϲIV oL=ȂZJ5d2uwj$xE]\Ģq? _eCx[d&jC B]}i 8Zf$! I8ѪjNKa0}ސic^ ]x߁Ayڜyl4 f[~՚~\\200M ԮҪDN+.|y4o ?$-O/+-.\&~;yN뚣"(Zr,AqRENߴ^wH6<-/㏛zz{>pvOkFzpGͺCע3=vy=?=HżSh~ 20C/8|S !g}jKG[j1}Ĕ>$?h .\[E+c]g4xt;;Ť#ɦf15EpnM~-30׋(te0'62(d .C:x`/?]@eQnv΃]T_$v@]_oxo!*)} $«}T>8GG6PsLEX;M4# H uBI <_3N(陡α+;$1`\Rto/J^t$NX€4s5Klf0=G#&qeDe7gb9g3ǜQG7sD} h)AB'\Q(Z?vo"{î==jXj G-6 p 1PT,J 6 f)G 1IfcH ;EؾkN,!3S39$frqv+8[Ҩyz&QdL&K@)t7sGf.bv258@"7bzNL)ּ yIf h@X,zt,NjBGGҎ,:i[|.@萾谲 AN)ASBW&BOJxZ pTcI6ٛ&lB$SyoMM_@5RBE0@0<`C0\y0 ̕KyӉM`ljWĽ]3Ji|]Eȟ=l0ӀȧRO|i52:i1cȹ̓9̒s߿GmR@YHy26sNI{Oqa/ d\~hs ?oZ/I6KI4̙w! 0?|ݮ冰3k6+2a/b{{drtjoi Jxl~Uʙw#kxߨw~#Ƅˣ HJ|i;EuV[ܴze˸%ii4+mY~iS3n7;^%l9lO`\~kr>9g ˗X$!_b k6n5KZMou}$l-QfG͎ŎŎ:Gy]4˯Pų<Ϗw^ ۉ\gU?_ (H!<a3)Ǯ@ьo:bV89QN|U|ëjw՛N>f+;Kr D!Pܒ GZ Q}'{ r<\C7.AT Jx2zj/-gB<NF+&+"TUDhl_J(I\EdjN..w&ntBjEGHۛ`t&٭Vt+z!:DWL7p  %IMCKC^JO.a;R je|\W|*ܧ`q[{ZڮCvjRO(1^?6!f_ApWrޑa`A&5-"ܟ܅*:)zTV9G?b`'BH|]5rj<$,%[ P#];h#B4*#3?nGp+@.sg snk a۲M8nRI  ЯżGi Y7{#ulFȋ|xnP hi>o{`y8bĔR:#^:^fY8٬T3vyP'.Anz!zL` 4GSq= +cdP&ɣd?x JEIRdF. jX%ڠy0sUGNj) q=Tբv@Z* mp*x䤤x)YSFʠz#02?7 @T N F|i$r:ԁdoWxO}!RfZobγsۇ3 D-†_ 4Z $WPnӋ0@Q/5# UH0֭kt/m|飋xY61^z5nQ6`Xl^Rtexe;wfhE=~"pS2 oPe J^SD B܋Ku8^fk3Af+IdkySeu?iz6ښ>f+6 @]LfMtS,"(J EuPl-*(J EuPKBQkΐ%Z(M<ߓ;G sUM_܅C +yK.r;3,O+n nA 5 ^}}=;InRYzI[5S|м&= 5 (dx^o3/a'qndk>Ϸ2]E9P/Svi 2BIeX?cTt3aY+0#~`uht"ia] pDp:sRr7?T@|G^^D獏GEAʎ nqǒBIѐ2W-bS=2XM+b NTy< OקgMb3^,!c|΄599xJ^FkW^AOW=%cLW6z^iV+ ټ5֠7ɍ4i2LHSDO Y DOW4b#k3'k/rT%S}=A&3hB:%r&r8BRqLL` ۗ~> T ?e%17=ǭɷdGf G:[НF)Í,$Q/} "JQMtBpS/Vo>bǚiQA!(w3%cF] l$E4.qպxq9h!"Fω찲{d SVs!ja KxJ5)!*K9[C5af6`ԲkX#,efDn1(j@`2%pȪB9' f=##M \7-uqI6\`ePȪ"$abdGNWL?LJLbW\I>gP9 =@S{i"P/{ĸqfNxW}Yw|o38N^sTa2TwIwztfoӣ3;N ,[YIqmSgGgZљ^))*3 ]irGntt7q۾gnW&FnZqQKk?@r[0}*5CMRm1_(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT@wܖ 0ܖDTimes New RomanTT@wܖ 0ܖ DCourier NewmanTT@wܖ 0ܖ1 B).  @t?" dld  @@`` 8$3 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKd 0ppp@ <4 w 0Twg4;d;d 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =E"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? kON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 (  ($ I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P0 4xZ}pT?$d_H7a7-%E@|*-X A)qF[NZujՠÌu:tqRKDžN{nɤ{{tS}Qtt!PM![~#*2 dI6rj.WEKߠV<Ŵ6ڛ}WȘ +4W`Y`?ǂ#Dn^7qu5훐FۨI_i(Y%1..+Zi'5@;$kPȘR\D+.ԶFRf Si+;z5 ٞ>bLכ3wsr  Q%rr5O Gax\Mn*EMrgf+xTZ ydYtUJ-3l]4Sӈ}3ϲ9WƗ~bNe\ Tb5ļ'R*~teG >zJ{owhh'\:fio$֐7[HǩcqtL_˧ߑVC(Rc]b*6T]yZwoliޱuƼ4^[7j]gSs6R)oCvl˴z4A[75E n<[`f,ܲ}l:Ëwf5z\)buBEtc(bn ʿp6Wub7*qAj!-XwRg1[x*Zc}j8}~:#nhmc!E]^/Q 땀}^G*TBz :xn54㙉aqgq7zkp&=[/7mt9x|R5blhoihM:Ri 8T[6k,nrnq1d='.׳w7%.h|Bs Ǔw5\z7nswG2qwF|V?tV%|{NMC>9'=O"ƣAzZ9[q/|,?nryrp(7 vɻÖwUG(y+ Uvf:uN̢e\6F@"0YуxSJbw,CUE&K$ɜB fgw:Df~>5.݋Cn'Y7N5gy)] bں|FS7"p^޸7I-Noٞĥ5Ɩ;`h HP,K:wz~ 8Җje5*^7TW},sq'x=('d зqUekeH@{A]ڃPgAV}=܈+#B2O(}9hzva )LTbbn[6#&? ku9m'Q6"R_M^Ȍcy_F{N큎WRcèAUyU+1;ȵ^I%"[w5sxW#sd1f%YsksjqRfər;4r= J3΅ sNJmQjVNI>wNPl<5]{gVkػBѲO=u E skR}ڛC>=}B{zYr~Z@)WgϜ}wySczOT{P:䛈N-H=CPK-B_,S9giYZI9TDh:+C:V􋘈'e (X#`!G0+ ;Bz5iOེء20= կ#5s ;.kworOZ7YCe3֎/؜@6$/Ʊ) ( q B4$UI#|J)_E"m"QˇhRHiB|}l]p y͛7~3kR>|la$&0kSd2I$sxBØG&Zi7~2{\Mqp+H Mc_E_XPc1(um[UxŔ.iB}:XcU*@$ю=11益MZQ+%1(M MU q&D ܓO40E=zS{;P:t=tc.\9 m0 s%(OL<41|*Պ4ak;y?.DDW|mYFMq'ѕ)]6a'l OS!Xd#N|ZN== 1c//i~r^\AmBdg 0RP C]cڿDDkwϟaݶ˄>yAUy8 dY2Nm@Ƥ_;AƲ?T~!cʕ^Lb&%_{%mGsfsg{_7?}wCG淬eR{ޟ>xpxUjw?8) 5h Kxl5}Һz'~F 8_; cfe^+;ΰ{u{wg9i4-n-fmg7FAhw]=V|]4ӔTqmmcMF_EQsp7٫Y8QC7m3,YO]|ov‹ܺU%AcDݸXآ&TϿV*h 5 DxƩ8 f9/\Rݥ2|sih#A#X9fJ%R|vZzĝ-n56Y.w.]{s!PZnMxu07U+[|=1G] kc1H8*dsq&.=>7OzJXyM<zjYhǣ~MVͧ&mր{@5{ŀtWqE(\ Jc`4q=clGlP7]xw'g!`nFQu˜Jl/?ɣL"ڋgmNO̡:hl$$A:> 7`(shT g8Ń CKr|Z-oZ$%qbBUHȄe\(>-ƿ ׹,Wp}md$ c3ߋ&~[zp>FXl$+P$h`,SUZV8.-B>IuBV"m- LBm/"jEO)3D nf^`\kd-MKM}CVs7Ie2X) RX@ež;DJ8ZthN٪zPPvKcRRξ\J6+ϲIV oL=ȂZJ5d2uwj$xE]\Ģq? _eCx[d&jC B]}i 8Zf$! I8ѪjNKa0}ސic^ ]x߁Ayڜyl4 f[~՚~\\200M ԮҪDN+.|y4o ?$-O/+-.\&~;yN뚣"(Zr,AqRENߴ^wH6<-/㏛zz{>pvOkFzpGͺCע3=vy=?=HżSh~ 20C/8|S !g}jKG[j1}Ĕ>$?h .\[E+c]g4xt;;Ť#ɦf15EpnM~-30׋(te0'62(d .C:x`/?]@eQnv΃]T_$v@]_oxo!*)} $«}T>8GG6PsLEX;M4# H uBI <_3N(陡α+;$1`\Rto/J^t$NX€4s5Klf0=G#&qeDe7gb9g3ǜQG7sD} h)AB'\Q(Z?vo"{î==jXj G-6 p 1PT,J 6 f)G 1IfcH ;EؾkN,!3S39$frqv+8[Ҩyz&QdL&K@)t7sGf.bv258@"7bzNL)ּ yIf h@X,zt,NjBGGҎ,:i[|.@萾谲 AN)ASBW&BOJxZ pTcI6ٛ&lB$SyoMM_@5RBE0@0<`C0\y0 ̕KyӉM`ljWĽ]3Ji|]Eȟ=l0ӀȧRO|i52:i1cȹ̓9̒s߿GmR@YHy26sNI{Oqa/ d\~hs ?oZ/I6KI4̙w! 0?|ݮ冰3k6+2a/b{{drtjoi Jxl~Uʙw#kxߨw~#Ƅˣ HJ|i;EuV[ܴze˸%ii4+mY~iS3n7;^%l9lO`\~kr>9g ˗X$!_b k6n5KZMou}$l-QfG͎ŎŎ:Gy]4˯Pų<Ϗw^ ۉ\gU?_ (H!<a3)Ǯ@ьo:bV89QN|U|ëjw՛N>f+;Kr D!Pܒ GZ Q}'{ r<\C7.AT Jx2zj/-gB<NF+&+"TUDhl_J(I\EdjN..w&ntBjEGHۛ`t&٭Vt+z!:DWL7p  %IMCKC^JO.a;R je|\W|*ܧ`q[{ZڮCvjRO(1^?6!f_ApWrޑa`A&5-"ܟ܅*:)zTV9G?b`'BH|]5rj<$,%[ P#];h#B4*#3?nGp+@.sg snk a۲M8nRI  ЯżGi Y7{#ulFȋ|xnP hi>o{`y8bĔR:#^:^fY8٬T3vyP'.Anz!zL` 4GSq= +cdP&ɣd?x JEIRdF. jX%ڠy0sUGNj) q=Tբv@Z* mp*x䤤x)YSFʠz#02?7 @T N F|i$r:ԁdoWxO}!RfZobγsۇ3 D-†_ 4Z $WPnӋ0@Q/5# UH0֭kt/m|飋xY61^z5nQ6`Xl^Rtexe;wfhE=~"pS2 oPe J^SD B܋Ku8^fk3Af+IdkySeu?iz6ښ>f+6 @]LfMtS,"(J EuPl-*(J EuPKBQkΐ%Z(M<ߓ;G sUM_܅C +yK.r;3,O+n nA 5 ^}}=;InRYzI[5S|м&= 5 (dx^o3/a'qndk>Ϸ2]E9P/Svi 2BIeX?cTt3aY+0#~`uht"ia] pDp:sRr7?T@|G^^D獏GEAʎ nqǒBIѐ2W-bS=2XM+b NTy< OקgMb3^,!c|΄599xJ^FkW^AOW=%cLW6z^iV+ ټ5֠7ɍ4i2LHSDO Y DOW4b#k3'k/rT%S}=A&3hB:%r&r8BRqLL` ۗ~> T ?e%17=ǭɷdGf G:[НF)Í,$Q/} "JQMtBpS/Vo>bǚiQA!(w3%cF] l$E4.qպxq9h!"Fω찲{d SVs!ja KxJ5)!*K9[C5af6`ԲkX#,efDn1(j@`2%pȪB9' f=##M \7-uqI6\`ePȪ"$abdGNWL?LJLbW\I>gP9 =@S{i"P/{ĸqfNxW}Yw|o38N^sTa2TwIwztfoӣ3;N ,[YIqmSgGgZљ^))*3 ]irGntt7q۾gnW&FnZqQKk?@rLR[0RM(Rm18(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0http://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT`ܖ 0ܖ"DTimes New RomanTT`ܖ 0ܖ DCourier NewmanTT`ܖ 0ܖ1 B).  @t?" dld  @@`` zl03 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKdP 0ppp@ <4 w 0T<g4;d;d, 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =&w"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{}~  ]  P nV4&5;8 8 7040G8 ?>@B8@>20=8O & &5;L ?>@B8@>20=8O  ?>;CG8BL MDD5:B82=K5 @50;870F88 0;3>@8B<>2 A 8A?>;L7>20=85< =>2>9 B5E=>;>388. 5@2K9 MB0?: Gibbs Sampling Inference Engine EM Learning B>@>9 MB0?: Loopy Belief Propagation (Pearl) Junction Tree Inference Enginep, @Q , @J _+  A oW>@B8@>20=85 =0 ?5@2>< MB0?5 ?@>5:B0 Gibbs Sampling Inference Engine EM Learning$R&+2 + pX8(031: 5@5=>A =0 Linux EM64T $  !1>@:0 ?>4 Linux  CA?5H=> !1>@:0 MPI 25@A88  ?@>1;5<K A :><?8;OF859 !>>B25BAB285 @57C;LB0B>2 !>1@0=K 40<?K 2A5E ACI5AB2CNI8E 25@A89  Windows (32b) 8 Linux (64b) rand() @01>B05B ?>-@07=><C A>15==>AB8 ACI5AB2CNI59 @50;870F88 A?@02;5= ?>@O4>: 703@C7:8 8 35=5@0F88 =01;N45=89 2 MPI 25@A88 B5AB0 4;O EM Learning B:;NG5=0 (?@8 ?><>I8 ?@5?@>F5AA>@0) CAB0=>2:0 <0:A8<0;L=>3> G8A;0 ?>B>:>2 4;O @0AG5B>2\_`$_`$   b   l   XqY,(032: 5@5=>A =0 CLOMP $ !;54>20=85 :>=F5?F88 User s Guide 81;8>B5:0 A:><?8;8@>20;0AL, => B5ABK 7025@H0;8AL >H81:>9 A53<5=B8@>20=8O >445@6:0 A> AB>@>=K :><?8;OB>@0 (8A?>;L7>20=85 @5:><5=4C5<KE :;NG59) =5 ?>72>;8;0 ?>;CG8BL >68405<KE @57C;LB0B>2 A?>;L7>20=85 @5H5=89 4;O :>=B59=5@>2 STL 8 85@0@E89 =0A;54>20=8O =5 C40;>AL 87-70 ?@>1;5< A :><?8;OF859 5>1E>48< 0=0;87 181;8>B5:8 8 A>1AB25==K5 @5H5=8OH"%8"%8<   wrZ,(032: 5@5=>A =0 CLOMP $ 0H5 @5H5=85: >=F5?F8O Cluster OpenMP =5A:>;L:> >B;8G05BAO >B <>45;8 OpenMP, ?>MB><C <K @5H8;8 8E <0:A8<0;L=> A1;878BL: @50;870F8O 2K45;5=8O 48=0<8G5A:>9 ?0<OB8 B>;L:> 2 sharable >1;0AB8 > =0 MB>< ?>@B8@>20=85 =5 70:>=G8;>ALbyG(kC(     `   s[,(032: 5@5=>A =0 CLOMP $ "5?5@L 2K7>2K new 2 :>=AB@C:B>@0E 3;>10;L=KE =5-sharable >1J5:B>2 ?@82>4OB : >H81:0< A53<5=B8@>20=8O 0: =09B8 B0:85 >1J5:BK? 7<5=5=85 A5<0=B8:8 API omp_get_num_procs 2>72@0I05B AB@0==>5 7=0G5=85 omp_set_num_threads AB0; =5157>?0A=K< 2K7>2>< @>1;5<K A :><?8;OF859 ?0@0;;5;L=>9 A5:F88 (:><?8;OB>@ ?5@5AB0; @0A?0@0;;5;820BL >4=C 87 A5:F89)e_,6e_,6     ]     |t\. 57C;LB0BK ?>@B8@>20=8O &  &5;L 1K;0 4>AB83=CB0: >@B8@>20=85 ?@>H;> CA?5H=> "5AB>2K5 ?@8;>65=8O AB018;L=> @01>B0NB 57C;LB0BK @01>BK 0;3>@8B<>2 :>@@5:B=K B=>A8B5;L=>5 CA:>@5=85 <0:A8<0;L=> (4;O Gibbs Sampling  ;8=59=>) > @57C;LB0B =5 8450;5=: MPI 25@A8O 2A5340 =0 30% 1KAB@55NG!NG!n   # u]>@B8@>20=85 =0 2B>@>< MB0?5 ?@>5:B0 Loopy Belief Propagation Junction Tree Inference Engine$^&72 7 v^8(031: 5@5=>A =0 Linux EM64T $   K;8 8A?>;L7>20=K 7=0=8O A ?5@2>3> MB0?0 ! =5 2>7=8:;> B5E=8G5A:8E ?@>1;5<  Junction Tree 2KO2;5=K >H81:8 @0A?@545;5=8O 2KG8A;8B5;L=>9 =03@C7:8 2 OpenMP 25@A88 ! 2=5A5=K ?>?@02:8 2 0;3>@8B< jNw,"z " )   8   w_,(032: 5@5=>A =0 CLOMP $ |!;54>20=85 :>=F5?F88 User s Guide 0 MB>< MB0?5 <K 8A?>;L7>20;8 1>;55 A256CN 25@A8N :><?8;OB>@0, 8 Intel Threading Tools ! ?><>IL >B :><?8;OB>@0 1K;0 1>;55 A>45@60B5;L=>9, => AB>;L 65 =54>AB0B>G=>9 !>1AB25==0O :>=F5?F8O:  :0G5AB25 >1I59 8458 8A?>;L7>20;8 ?>4E>4, =0945==K9 =0 ?5@2>< MB0?5 ?@>5:B0  3;>10;L=0O ?5@53@C7:0 new/delete. >20O ?@>1;5<0: 5:>@@5:B=0O @01>B0 A> AAK;:0<8 2 ?0@0;;5;L=>< @538>=5 ! <K 70<5=8;8 AAK;:8 =0 C:070B5;8"["YL"  r  8"!l  A   L !x`. 57C;LB0BK ?>@B8@>20=8O &   A=>2=0O F5;L 1K;0 4>AB83=CB0: >@B8@>20=85 ?@>H;> CA?5H=> "5AB>2K5 ?@8;>65=8O AB018;L=> @01>B0NB 57C;LB0BK @01>BK 0;3>@8B<>2 :>@@5:B=K > @57C;LB0B B@51C5B >?B8<870F88: <5AB> CA:>@5=8O <K ?>;CG8;8 ;8=59=>5  N$1N  "  1&  ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? kON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 ( >;CG5= ?>;>68B5;L=K9 >?KB 8A?>;L7>20=8O =>2>9 B5E=>;>388 @07@01>B:8 ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A @0A?@545;5==>9 ?0<OBLN Cluster OpenMP.  E>45 8AA;54>20=89 ?>A;54>20B5;L=>ABL ?>@B8@>20=8O OpenMP ?@>3@0<< =0 Cluster OpenMP>?@>1>20=0 =0 ?@8<5@5 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library 8 4>?>;=5=0 =>2K<8 ?C=:B0<8. 07@01>B0=0 8 ?@0:B8G5A:8 >?@>1>20=0 =0 0;3>@8B<0E PNL ?>A;54>20B5;L=>ABL 459AB289 ?> ?>@B8@>20=8N MPI 25@-A89 ?0@0;;5;L=KE ?@>3@0<< =0 Cluster OpenMP. >;CG5=K A@02=8B5;L=K5 >F5=:8 70B@0B =0 ?>@B8@>20=85 A OpenMP 8 MPI (B>;L:> =0 ?@8<5@5 181;8>B5:8 PNL). `Z_ '  5  V * +ya0:;NG5=85 ( 0?@02;5=85 40;L=59H8E 8AA;54>20=89 2 @0<:0E >?8A0==>9 2 =0AB>OI59 @01>B5 B5<K - A@02=5=85 MDD5:B82=>AB8 B@5E B5E=>;>389 A>740=8O ?0@0;;5;L=KE ?@>3@0<<: OpenMP, MPI 8 Cluster OpenMP. A B>G:8 7@5=8O =0:;04=KE @0AE>4>2, :>B>@K5 ?@82=>A8B 8A?>;L7>20=85 2K1@0==>9 B5E=>;>388, A B>G:8 7@5=8O MDD5:B82=>AB8 8 <0AHB018@C5<>AB8 3>B>2KE ?0@0;;5;L=KE 25@A89.8PPt|I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /P  0  @<(  @~ @ s *C'd   ~ @ s *(6  H @ 0޽h ? 33___PPT10i.+D=' = @B +  0 & D(  D~ D s *6'd  6 H D 0޽h ? f3___PPT10i.ې+D=' = @B +  0  H0(  Hx H c $h6'd  6 x H c $h6 6 H H 0޽h ? f3___PPT10i.4"+D=' = @B +  0  LX(  Lx L c $t6'd  6 x L c $6 6   L  `6_ж_жf?"6@`NNN?N   R( H L 0޽h ? f3___PPT10i.4"+D=' = @B +  0  PX(  Px P c $6'd  6 x P c $t) 6   P  `6_ж_жf?"6@`NNN?N`gC R( H P 0޽h ? f3___PPT10i.4"+D=' = @B +  0  T0(  Tx T c $ )'d  ) x T c $) ) H T 0޽h ? f3___PPT10u..4"+D=' = @B +  0  X0(  Xx X c $8)'d  ) x X c $>) ) H X 0޽h ? f3___PPT10i./+D=' = @B +  0 & \(  \~ \ s *T)#'dC  ) H \ 0޽h ? f3___PPT10i.ې+D=' = @B +  0  `0(  `x ` c $e)'d  ) x ` c $8l) ) H ` 0޽h ? f3___PPT10i.4"+D=' = @B +  0 0 d0(  dx d c $)'d  ) x d c $() ) H d 0޽h ? f3___PPT10i.4"+D=' = @B +  0 @ h0(  hx h c $()'d  ) x h c $0) ) H h 0޽h ? f3___PPT10i./+D=' = @B +  0 (  ~  s *1q  1   Tl1_ж_ж  1 ,rPBRH  0޽h ? ̙33___PPT10i.i@+D=' = @B +  0 P l(  l~ l s *9q    l T7_ж_ж   ,rPBRH l 0޽h ? ̙33___PPT10i.i@+D=' = @B +rDJ؉n)lnpns'wz}}%Gay18(kY  4http://developer.intel.com6http://developer.intel.com/fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594fhttp://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594~0hthttp://www.mpi-forum.org/http://www.openmp.org/tp://www.mpi-forum.org2http://www.mpi-forum.org/r*http://www.openmp.org,http://www.openmp.org/[803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel\803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel]803@0<<0 Excel.Chart.80@803@0<<0 Microsoft Office Excel/ 0DArialr NewmanTT`ܖ 0ܖ"DTimes New RomanTT`ܖ 0ܖ DCourier NewmanTT`ܖ 0ܖ1 B).  @t?" dld  @@`` zl03 ?  \cfghijklm 4b$` ߲_MPEBHb$G[S*˂N8}~H"$_[ut=Tb$sRwqQ*$Z[b$-< yezH~K"$`|΍%ŭVO"$:Ss CH_;6ӣ _ж_ж     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||s " 0e@        @ABC DEEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN E5%  N E5%  N F   5%    !"?N@ABC DEFFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abPf3@8 g4KdKdP 0ppp@ <4 w 0T<g4;d;d, 0(p6 pZq$S ʚ;I 9ʚ;<4dddd  x 0 (f___PPT10F pp..kovalenko.a.___PPT9/ 0? -O  =&w"5E=>;>38O @07@01>B:8 @0A?@545;5==KE ?0@0;;5;L=KE ?@>3@0<< A ?><>ILN Cluster OpenMPUtU.E (A?>;=8B5;8 HC@0B>@K: !KA>52 ;5:A0=4@ (#) "0=0=0:8= =4@59 (Intel) #G0AB=8:8: 0<052 =4@59 (ITLab) >20;5=:> ;5:A0=4@ (ITLab) 01CB8=0 ==0 (#) !84=52 ;5:A59 (ITLab)p b2b b^b f2 f]"    ' !>45@60=85 *&5;8 ?@>5:B0 2545=85 "5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< "5E=>;>38O Cluster OpenMP A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O (PNL) ?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O 0:;NG5=85 8B5@0BC@00d  >F   K^T&5;8 ?@>5:B0 + P _S&5;8 ?@>5:B0 fA?>;L7CO @50;870F8N PNL ?>4 OpenMP, @0A?0@0;;5;8BL 0;3>@8B<K 181;8>B5:8 PNL A ?><>ILN Cluster OpenMP =0 Linux EM64T. !@02=8BL ?@>872>48B5;L=>ABL ?0@0;;5;L=KE 25@A89 0;3>@8B<>2 =0 >A=>25 Cluster OpenMP A 25@A8O<8 =0 >A=>25 MPI 8 OpenMP !>1@0BL AB0B8AB8:C, E0@0:B5@87CNICN ?@>F5AA 2=54@5=8O 2 ?@>3@0<<=K9 :>4 C:070==KE 0;3>@8B<>2 181;8>B5:8 PNL c ?>445@6:>9 Cluster OpenMP  @01>B5 =04 0;3>@8B<0<8 181;8>B5:8 ?@8<5=8BL Intel Thread Checker 8 Intel Thread Profiler, A>1@0BL 8 >D>@<8BL >B7K2K ?> 87 8A?>;L7>20=8N ?C1;8:>20BL @57C;LB0BK =0 www.sourceforge.net 24XZ"1p # E{0  KA$2545=85 + P  2545=85 + :0:85 A@54AB20 =5>1E>48<K ?@>3@0<<8ABC 4;O A>740=8O ?0@0;;5;L=>9 ?@>3@0<<K? @>F5AAK >B>:8 =AB@C<5=BK ?5@540G8 40==KE G5@57 A5BL >445@6:0 A> AB>@>=K >?5@0F8>==>9 A8AB5<K =AB@C<5=BK ?0@0;;5;L=>3> ?@>3@0<<8@>20=8O B;04G8:8, A1>@I8:8 B@0AA, ?@54A:070B5;8 MDD5:B82=>AB8 "5E=>;>388 MX7XUXDXXK$7UD$L = R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<< *P D(R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *=>3>?>B>G=>5 ?@>3@0<<8@>20=85  081>;55 >1I89 A?>A>1 A>740=8O ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A >1I59 ?0<OBLN. $C=:F8>=0;L=K ?0@0;;5;87< = =0?8A0=85 @07;8G=KE ?>B>:>2KE DC=:F89. 0@0;;5;87< ?> 40==K< = >1I55 28@BC0;L=>5 04@5A=>5 ?@>AB@0=AB2> ?@>F5AA0. 5>1E>48<0 A8=E@>=870F8O 8 ?@5>4>;5=85 2>7<>6=KE ?@>1;5<: 2708<=>9 1;>:8@>2:8, BC?8:>2, 3>=>: 40==KE,& 0ifJ iE'R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** * OpenMP  MB> B5E=>;>38O, :>B>@0O ?>72>;O5B ?5@5;>68BL @50;870F8N @5H5=89 B8?>2KE ?@>1;5< <=>3>?>B>G=>3> ?@>3@0<<8@>20=8O =0 :><?8;OB>@.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?@>AB>BC 8A?>;L7>20=8O, 381:>ABL 8 2>7<>6=>ABL ?>2B>@=>3> 8A?>;L7>20=8O ?@>3@0<<.f fF)R"5E=>;>388 A>740=8O ?0@0;;5;L=KE ?@>3@0<<** *"MPI  ?@54>AB02;O5B <5E0=87< ?>AB@>5=8O ?0@0;;5;L=KE ?@>3@0<< 2 <>45;8 >1<5=0 A>>1I5=8O<8, E0@0:B5@=>9 4;O @07@01>B:8 2 :;0AB5@=KE A8AB5<0E. !B0=40@B A?5F8D8F8@C5B =01>@ DC=:F89 8 22>48B >?@545;5==K9 C@>25=L 01AB@0:F89 =0 >A=>25 A>>1I5=89, B8?>2, 3@C?? 8 :><<C=8:0B>@>2, 28@BC0;L=KE B>?>;>389.  4>AB>8=AB20< MB>9 B5E=>;>388 <>6=> >B=5AB8 ?5@5=>A8<>ABL 8 ?>2KH5=85 MDD5:B82=>AB8 ?0@0;;5;L=KE ?@>3@0<<.\fO 0 " lK.2"5E=>;>38O Cluster OpenMP2    P M74"5E=>;>38O Cluster OpenMP @  2006 3>4C 2 Intel C++ Compiler 9.1 ?>O28;0AL ?>445@6:0 Cluster OpenMP "5E=>;>38O Cluster OpenMP ?>445@68205B 2K?>;=5=85 OpenMP ?@>3@0<< =0 =5A:>;L:8E 2KG8A;8B5;L=KE C7;0E, A>548=5==KE A5BLN. 2b"          AO92"5E=>;>38O Cluster OpenMP@ LA>15==>AB8 8<8B0F88 2 Cluster OpenMP ''J   R<2"5E=>;>38O Cluster OpenMP@ J0?8A0=85 ?@>3@0<< =0 Cluster OpenMP &&>   U?2"5E=>;>38O Cluster OpenMP@ N>340 <>6=> 8A?>;L7>20BL Cluster OpenMP((2  WA2"5E=>;>38O Cluster OpenMP@ |C6=> 70<5B8BL& A;8 Cluster OpenMP ?@>3@0<<C =0 SMP <0H8=5 >=0 1C45B @01>B0BL :0: OpenMP (=C6=> MB> C:070BL 2 ini D09;5) Cluster OpenMP ?>445@68205BAO ?>:0 B>;L:> =0 EM64T <0H8=0E (Linux) @KG               G*:A?>;L7>20=85 Cluster OpenMP 4;O @0A?0@0;;5;820=8O 0;3>@8B<>2 2K2>40 8 >1CG5=8O 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library (PNL) (b  ]  P nV4&5;8 8 7040G8 ?>@B8@>20=8O & &5;L ?>@B8@>20=8O  ?>;CG8BL MDD5:B82=K5 @50;870F88 0;3>@8B<>2 A 8A?>;L7>20=85< =>2>9 B5E=>;>388. 5@2K9 MB0?: Gibbs Sampling Inference Engine EM Learning B>@>9 MB0?: Loopy Belief Propagation (Pearl) Junction Tree Inference Enginep, @Q , @J _+  A oW>@B8@>20=85 =0 ?5@2>< MB0?5 ?@>5:B0 Gibbs Sampling Inference Engine EM Learning$R&+2 + pX8(031: 5@5=>A =0 Linux EM64T $  !1>@:0 ?>4 Linux  CA?5H=> !1>@:0 MPI 25@A88  ?@>1;5<K A :><?8;OF859 !>>B25BAB285 @57C;LB0B>2 !>1@0=K 40<?K 2A5E ACI5AB2CNI8E 25@A89  Windows (32b) 8 Linux (64b) rand() @01>B05B ?>-@07=><C A>15==>AB8 ACI5AB2CNI59 @50;870F88 A?@02;5= ?>@O4>: 703@C7:8 8 35=5@0F88 =01;N45=89 2 MPI 25@A88 B5AB0 4;O EM Learning B:;NG5=0 (?@8 ?><>I8 ?@5?@>F5AA>@0) CAB0=>2:0 <0:A8<0;L=>3> G8A;0 ?>B>:>2 4;O @0AG5B>2\_`$_`$   b   l   XqY,(032: 5@5=>A =0 CLOMP $ !;54>20=85 :>=F5?F88 User s Guide 81;8>B5:0 A:><?8;8@>20;0AL, => B5ABK 7025@H0;8AL >H81:>9 A53<5=B8@>20=8O >445@6:0 A> AB>@>=K :><?8;OB>@0 (8A?>;L7>20=85 @5:><5=4C5<KE :;NG59) =5 ?>72>;8;0 ?>;CG8BL >68405<KE @57C;LB0B>2 A?>;L7>20=85 @5H5=89 4;O :>=B59=5@>2 STL 8 85@0@E89 =0A;54>20=8O =5 C40;>AL 87-70 ?@>1;5< A :><?8;OF859 5>1E>48< 0=0;87 181;8>B5:8 8 A>1AB25==K5 @5H5=8OH"%8"%8<   wrZ,(032: 5@5=>A =0 CLOMP $ 0H5 @5H5=85: >=F5?F8O Cluster OpenMP =5A:>;L:> >B;8G05BAO >B <>45;8 OpenMP, ?>MB><C <K @5H8;8 8E <0:A8<0;L=> A1;878BL: @50;870F8O 2K45;5=8O 48=0<8G5A:>9 ?0<OB8 B>;L:> 2 sharable >1;0AB8 > =0 MB>< ?>@B8@>20=85 =5 70:>=G8;>ALbyG(kC(     `   s[,(032: 5@5=>A =0 CLOMP $ "5?5@L 2K7>2K new 2 :>=AB@C:B>@0E 3;>10;L=KE =5-sharable >1J5:B>2 ?@82>4OB : >H81:0< A53<5=B8@>20=8O 0: =09B8 B0:85 >1J5:BK? 7<5=5=85 A5<0=B8:8 API omp_get_num_procs 2>72@0I05B AB@0==>5 7=0G5=85 omp_set_num_threads AB0; =5157>?0A=K< 2K7>2>< @>1;5<K A :><?8;OF859 ?0@0;;5;L=>9 A5:F88 (:><?8;OB>@ ?5@5AB0; @0A?0@0;;5;820BL >4=C 87 A5:F89)e_,6e_,6     ]     |t\. 57C;LB0BK ?>@B8@>20=8O &  &5;L 1K;0 4>AB83=CB0: >@B8@>20=85 ?@>H;> CA?5H=> "5AB>2K5 ?@8;>65=8O AB018;L=> @01>B0NB 57C;LB0BK @01>BK 0;3>@8B<>2 :>@@5:B=K B=>A8B5;L=>5 CA:>@5=85 <0:A8<0;L=> (4;O Gibbs Sampling  ;8=59=>) > @57C;LB0B =5 8450;5=: MPI 25@A8O 2A5340 =0 30% 1KAB@55NG!NG!n   # u]>@B8@>20=85 =0 2B>@>< MB0?5 ?@>5:B0 Loopy Belief Propagation Junction Tree Inference Engine$^&72 7 v^8(031: 5@5=>A =0 Linux EM64T $   K;8 8A?>;L7>20=K 7=0=8O A ?5@2>3> MB0?0 ! =5 2>7=8:;> B5E=8G5A:8E ?@>1;5<  Junction Tree 2KO2;5=K >H81:8 @0A?@545;5=8O 2KG8A;8B5;L=>9 =03@C7:8 2 OpenMP 25@A88 ! 2=5A5=K ?>?@02:8 2 0;3>@8B< jNw,"z " )   8   w_,(032: 5@5=>A =0 CLOMP $ |!;54>20=85 :>=F5?F88 User s Guide 0 MB>< MB0?5 <K 8A?>;L7>20;8 1>;55 A256CN 25@A8N :><?8;OB>@0, 8 Intel Threading Tools ! ?><>IL >B :><?8;OB>@0 1K;0 1>;55 A>45@60B5;L=>9, => AB>;L 65 =54>AB0B>G=>9 !>1AB25==0O :>=F5?F8O:  :0G5AB25 >1I59 8458 8A?>;L7>20;8 ?>4E>4, =0945==K9 =0 ?5@2>< MB0?5 ?@>5:B0  3;>10;L=0O ?5@53@C7:0 new/delete. >20O ?@>1;5<0: 5:>@@5:B=0O @01>B0 A> AAK;:0<8 2 ?0@0;;5;L=>< @538>=5 ! <K 70<5=8;8 AAK;:8 =0 C:070B5;8"["YL"  r  8"!l  A   L !x`. 57C;LB0BK ?>@B8@>20=8O &   A=>2=0O F5;L 1K;0 4>AB83=CB0: >@B8@>20=85 ?@>H;> CA?5H=> "5AB>2K5 ?@8;>65=8O AB018;L=> @01>B0NB 57C;LB0BK @01>BK 0;3>@8B<>2 :>@@5:B=K > @57C;LB0B B@51C5B >?B8<870F88: <5AB> CA:>@5=8O <K ?>;CG8;8 ;8=59=>5  N$1N  "  1&  ZC?B8<870F8O Cluster OpenMP @50;870F89 ?0@0;;5;L=KE 0;3>@8B<>2 2K2>40 8 >1CG5=8O QO0>    6P `DN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (>A;5 ?5@2>3> MB0?0 @01>BK =0 2-E 87 4-E 0;3>@8B<>2 =5 C40;>AL ?>;CG8BL CA:>@5=85 (JTree 8 Pearl). >20O 7040G0  >?B8<870F8O 0;3>@8B<>2.z 3    'aEN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (Intel ?@54;>68; 8A?>;L7>20BL 8=AB@C<5=BK Intel Thread Checker 8 Intel Thread Profiler. ;O G53>?Lc." " H #   eIN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (@8G8=K 70<54;5=8O 2K@02=820=85 40==KE (OMP  16 109B, CLOMP  8 109B); <54;5==0O @01>B0 DC=:F89 2K45;5=8O/C40;5=8O ?0<OB8; <=>3> ;8H=8E sharable 40==KE, ?>MB><C <=>3> ?5@5AK;>:.P"(    0  !fJN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (?B8<870F8O ;O @5H5=8O 7040G8 >?B8<870F88 1K;> ?@54;>65=> 8A?>;L7>20BL MPI @50;870F8N. >G5<C? , U U$H iMN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (&0: MB>3> 4>18BLAO? kON?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (lPN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (mQN?B8<870F8O CLOMP-25@A89 0;3>@8B<>2 PNL(( (H+0:;NG5=85  P J-0:;NG5=85 ( >;CG5= ?>;>68B5;L=K9 >?KB 8A?>;L7>20=8O =>2>9 B5E=>;>388 @07@01>B:8 ?0@0;;5;L=KE ?@>3@0<< 4;O A8AB5< A @0A?@545;5==>9 ?0<OBLN Cluster OpenMP.  E>45 8AA;54>20=89 ?>A;54>20B5;L=>ABL ?>@B8@>20=8O OpenMP ?@>3@0<< =0 Cluster OpenMP>?@>1>20=0 =0 ?@8<5@5 181;8>B5:8 >1@01>B:8 25@>OB=>AB=KE A5B59 Probabilistic Network Library 8 4>?>;=5=0 =>2K<8 ?C=:B0<8. 07@01>B0=0 8 ?@0:B8G5A:8 >?@>1>20=0 =0 0;3>@8B<0E PNL ?>A;54>20B5;L=>ABL 459AB289 ?> ?>@B8@>20=8N MPI 25@-A89 ?0@0;;5;L=KE ?@>3@0<< =0 Cluster OpenMP. >;CG5=K A@02=8B5;L=K5 >F5=:8 70B@0B =0 ?>@B8@>20=85 A OpenMP 8 MPI (B>;L:> =0 ?@8<5@5 181;8>B5:8 PNL). `Z_ '  5  V * +ya0:;NG5=85 ( 0?@02;5=85 40;L=59H8E 8AA;54>20=89 2 @0<:0E >?8A0==>9 2 =0AB>OI59 @01>B5 B5<K - A@02=5=85 MDD5:B82=>AB8 B@5E B5E=>;>389 A>740=8O ?0@0;;5;L=KE ?@>3@0<<: OpenMP, MPI 8 Cluster OpenMP. A B>G:8 7@5=8O =0:;04=KE @0AE>4>2, :>B>@K5 ?@82=>A8B 8A?>;L7>20=85 2K1@0==>9 B5E=>;>388, A B>G:8 7@5=8O MDD5:B82=>AB8 8 <0AHB018@C5<>AB8 3>B>2KE ?0@0;;5;L=KE 25@A89.8PPt|I,8B5@0BC@0 ( Belov S.A., Gergel V.P., Sysoyev A.V. Scalable parallel inference algorithms in probabilistic networks // Preproceedings of UK-Russia Workshop on Proactive Computing, N. Novgorod, 2005, P. 5  10. Cluster OpenMP User s Guide Version 9.1: http://developer.intel.com. Gergel V.P. Teaching Course: CS338. Introduction to Parallel Programming: http://www.msdnaacr.net/curriculum/pfv.aspx?ID=6594. D8F80;L=K9 D>@C< MPI: http://www.mpi-forum.org. D8F80;L=K9 A09B OpenMP: http://www.openmp.org.0P(     J  U       D  '     0 0T 0 0XB>?@>AK?  P /PraV"y1Root EntrydO) Fb PicturesCurrent User%>SummaryInformation(0P      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{}~  !"#$'()*+,-./0123      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO]RSTUVWXYZ[\^_`abcdefghijklmnopqrstuvwxz{|}~ PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL "_f" labutina.alabutina.a Labutina PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL( CLOMP- PNL ,_f"Alexey N. PolovinkinAlexey N. Polovinkin