diff --git a/Common/data/CT_skull_512x512_8u.raw b/Common/data/CT_skull_512x512_8u.raw new file mode 100644 index 00000000..9b372c5f Binary files /dev/null and b/Common/data/CT_skull_512x512_8u.raw differ diff --git a/Common/data/CT_skull_512x512_8u_Gray.raw b/Common/data/CT_skull_512x512_8u_Gray.raw new file mode 100644 index 00000000..32dae030 Binary files /dev/null and b/Common/data/CT_skull_512x512_8u_Gray.raw differ diff --git a/Common/data/Lena_512x512_8u_Gray.raw b/Common/data/Lena_512x512_8u_Gray.raw new file mode 100644 index 00000000..dbb4deab --- /dev/null +++ b/Common/data/Lena_512x512_8u_Gray.raw @@ -0,0 +1 @@ +¢¢¢¡¢œ£ ¤ ¡Ÿ›¢Ÿš›¡ ™œšš›—œšš›™šŸž¦Ÿ¦¦¥¦«ª¯­ª««§®¨¦¡ ””šŒvuiaa^\Waf`fcghihgnmkjihmmmlkkknljmlmmkgiiklnunquyvpzxy|zy{|‚{z„‚ƒ€‡‚‚†ˆ„…ƒ‚‚†}~…‚‚€„€€†…‡…†‚†„……‡ƒ†‚ˆ†„……ˆ„……ƒ„‚ƒ„†ˆ†…ƒ…ƒ†‡„†‡ˆ„‰‡†…‡‡ˆ„…‹„ƒ‹…ƒ„„~‚ƒ„‚ƒƒ€†…„‡‚ƒ„ƒ‚„‚ƒ…‡…„†„††Š„ƒ„†€€…‰ŠŽ†ƒƒ€€€„…€‚†„‚~ƒ„}‚††‚~~ƒƒ…~~„ƒ‚ƒ}|~~ƒ}€y{|ywzyvurppsiffhptvyƒ‡‹Œ‘•™˜™žžž¢ž¢ š›”•™•™––š—œš˜œ›š™Ÿšœ™™–™—™˜š˜˜˜˜–—š™˜˜™™žšš›Ÿžžœœœ—›š°ÀÆÍÏÔÔÔ×ÙÚÙÚÜ×ÒË¿«—zjhdggnhqstwuvvx{~yvux|yuzz|xw{ux{{wzyyzz{v{}|}}~z||}uu€z~}}‚{~|x|}~wzrxswvsx{‰£§©«©š€¢¢¢¡¢œ£ ¤ ¡Ÿ›¢Ÿš›¡ ™œšš›—œšš›™šŸž¦Ÿ¦¦¥¦«ª¯­ª««§®¨¦¡ ””šŒvuiaa^\Waf`fcghihgnmkjihmmmlkkknljmlmmkgiiklnunquyvpzxy|zy{|‚{z„‚ƒ€‡‚‚†ˆ„…ƒ‚‚†}~…‚‚€„€€†…‡…†‚†„……‡ƒ†‚ˆ†„……ˆ„……ƒ„‚ƒ„†ˆ†…ƒ…ƒ†‡„†‡ˆ„‰‡†…‡‡ˆ„…‹„ƒ‹…ƒ„„~‚ƒ„‚ƒƒ€†…„‡‚ƒ„ƒ‚„‚ƒ…‡…„†„††Š„ƒ„†€€…‰ŠŽ†ƒƒ€€€„…€‚†„‚~ƒ„}‚††‚~~ƒƒ…~~„ƒ‚ƒ}|~~ƒ}€y{|ywzyvurppsiffhptvyƒ‡‹Œ‘•™˜™žžž¢ž¢ š›”•™•™––š—œš˜œ›š™Ÿšœ™™–™—™˜š˜˜˜˜–—š™˜˜™™žšš›Ÿžžœœœ—›š°ÀÆÍÏÔÔÔ×ÙÚÙÚÜ×ÒË¿«—zjhdggnhqstwuvvx{~yvux|yuzz|xw{ux{{wzyyzz{v{}|}}~z||}uu€z~}}‚{~|x|}~wzrxswvsx{‰£§©«©š€¢¢¢¡¢œ£ ¤ ¡Ÿ›¢Ÿš›¡ ™œšš›—œšš›™šŸž¦Ÿ¦¦¥¦«ª¯­ª««§®¨¦¡ ””šŒvuiaa^\Waf`fcghihgnmkjihmmmlkkknljmlmmkgiiklnunquyvpzxy|zy{|‚{z„‚ƒ€‡‚‚†ˆ„…ƒ‚‚†}~…‚‚€„€€†…‡…†‚†„……‡ƒ†‚ˆ†„……ˆ„……ƒ„‚ƒ„†ˆ†…ƒ…ƒ†‡„†‡ˆ„‰‡†…‡‡ˆ„…‹„ƒ‹…ƒ„„~‚ƒ„‚ƒƒ€†…„‡‚ƒ„ƒ‚„‚ƒ…‡…„†„††Š„ƒ„†€€…‰ŠŽ†ƒƒ€€€„…€‚†„‚~ƒ„}‚††‚~~ƒƒ…~~„ƒ‚ƒ}|~~ƒ}€y{|ywzyvurppsiffhptvyƒ‡‹Œ‘•™˜™žžž¢ž¢ š›”•™•™––š—œš˜œ›š™Ÿšœ™™–™—™˜š˜˜˜˜–—š™˜˜™™žšš›Ÿžžœœœ—›š°ÀÆÍÏÔÔÔ×ÙÚÙÚÜ×ÒË¿«—zjhdggnhqstwuvvx{~yvux|yuzz|xw{ux{{wzyyzz{v{}|}}~z||}uu€z~}}‚{~|x|}~wzrxswvsx{‰£§©«©š€¢¢¢¡¢œ£ ¤ ¡Ÿ›¢Ÿš›¡ ™œšš›—œšš›™šŸž¦Ÿ¦¦¥¦«ª¯­ª««§®¨¦¡ ””šŒvuiaa^\Waf`fcghihgnmkjihmmmlkkknljmlmmkgiiklnunquyvpzxy|zy{|‚{z„‚ƒ€‡‚‚†ˆ„…ƒ‚‚†}~…‚‚€„€€†…‡…†‚†„……‡ƒ†‚ˆ†„……ˆ„……ƒ„‚ƒ„†ˆ†…ƒ…ƒ†‡„†‡ˆ„‰‡†…‡‡ˆ„…‹„ƒ‹…ƒ„„~‚ƒ„‚ƒƒ€†…„‡‚ƒ„ƒ‚„‚ƒ…‡…„†„††Š„ƒ„†€€…‰ŠŽ†ƒƒ€€€„…€‚†„‚~ƒ„}‚††‚~~ƒƒ…~~„ƒ‚ƒ}|~~ƒ}€y{|ywzyvurppsiffhptvyƒ‡‹Œ‘•™˜™žžž¢ž¢ š›”•™•™––š—œš˜œ›š™Ÿšœ™™–™—™˜š˜˜˜˜–—š™˜˜™™žšš›Ÿžžœœœ—›š°ÀÆÍÏÔÔÔ×ÙÚÙÚÜ×ÒË¿«—zjhdggnhqstwuvvx{~yvux|yuzz|xw{ux{{wzyyzz{v{}|}}~z||}uu€z~}}‚{~|x|}~wzrxswvsx{‰£§©«©š€¢¢¢¡¢œ£ ¤ ¡Ÿ›¢Ÿš›¡ ™œšš›—œšš›™šŸž¦Ÿ¦¦¥¦«ª¯­ª««§®¨¦¡ ””šŒvuiaa^\Waf`fcghihgnmkjihmmmlkkknljmlmmkgiiklnunquyvpzxy|zy{|‚{z„‚ƒ€‡‚‚†ˆ„…ƒ‚‚†}~…‚‚€„€€†…‡…†‚†„……‡ƒ†‚ˆ†„……ˆ„……ƒ„‚ƒ„†ˆ†…ƒ…ƒ†‡„†‡ˆ„‰‡†…‡‡ˆ„…‹„ƒ‹…ƒ„„~‚ƒ„‚ƒƒ€†…„‡‚ƒ„ƒ‚„‚ƒ…‡…„†„††Š„ƒ„†€€…‰ŠŽ†ƒƒ€€€„…€‚†„‚~ƒ„}‚††‚~~ƒƒ…~~„ƒ‚ƒ}|~~ƒ}€y{|ywzyvurppsiffhptvyƒ‡‹Œ‘•™˜™žžž¢ž¢ š›”•™•™––š—œš˜œ›š™Ÿšœ™™–™—™˜š˜˜˜˜–—š™˜˜™™žšš›Ÿžžœœœ—›š°ÀÆÍÏÔÔÔ×ÙÚÙÚÜ×ÒË¿«—zjhdggnhqstwuvvx{~yvux|yuzz|xw{ux{{wzyyzz{v{}|}}~z||}uu€z~}}‚{~|x|}~wzrxswvsx{‰£§©«©š€¤¤›¡ŸžŸŸ šŸ™™›šœœ˜—˜˜•œœšš›˜š™˜—œŸ¡¥£§©©«­¯ªª¯ª«§§ž•“zwnme_\^Y^_aeebckgijhjkidigkkejhikiflhnghkohlompwsvwwyvy{yz}y~~|{||‚„ƒ…‚~ƒ…‡ƒ‚„ƒ}€…‚‚€‚‚‚ˆ†‡„††ˆ‡‰‰ˆ††„‡…ˆˆ„††‰†ƒ„„ˆƒ„‚‚…………„…„…ƒ‚……‡„„…ƒˆƒ…†‰„€€€„‚ƒƒƒ~~‚„‰z‚‚€ˆ„‚†ƒƒ†ƒ†€‚„†ƒˆ††ƒ‚„|„ƒ€~€…€ƒ‚€…„{z|„~ƒ}‚‚…~~ƒ€~}}{xyz{{vtssvloiihenlwz€€‹ˆ––”˜›œ ž£žž˜˜—˜™˜–š–’˜›“š›—™™–œœšš™˜˜™——˜—˜›—›–šŸš˜™›—™œš›ž™›œ›™˜•—©¹ÁÇÏÒÔÖ××ÚÙÙÙÛ×ÑǺ£‹neagehponxsvuvwyy}yytzy|z|{zy{uvt{wtyx{~}{}|~yx}|z€{{vv~zx|€|~}|{|x{vsqzyz}~‰Ž•‘Š{fM  £ž ¡Ÿ›Ÿ¡œ¡››œ—™Ÿš™ž–›˜š›˜›—•˜ ž›ššžž¤¥¨§¨ªªª«­¬¬©§¦¥žœ”’Š‚y}kj`aY^[b\c```fhlogecigjejfcghlkkdjhjjheerfjkmpxwrwuwx{€y{{||x~|z€„„€‚†‡}€}†ƒ„zƒ}„…‚‚ƒ~}†ƒ‚‚†‚ˆ†‡„‡„„…†ƒ…†Šƒ„†‚ƒ…‚…„€‚‚…†…††„ƒ…‚ˆ†ƒƒ…€…„‡…‚ˆ„‰|„ƒ€~‚†€€‚‚„ƒ‡Š€€ƒ‚€~‚ƒƒƒƒ…‚†„†…~„…‚€ƒ‡ƒƒ‡…ƒ…~}€|}„‚{ƒ€}~~~ƒ…}ƒ‚~€}{|{{y{z{~wttpoomgggeeqvy~|„‡Œ••™ž¢›šš—˜˜˜™™˜——˜•™—ššš™˜™—™˜—™—š››››˜™™——š—šžš™œšœ˜›œš›š™—•—¡®ÀÇËÐÔÔÖØØÙÛÛÚØÓÍò›€kibeflhqtssw{vrwzxuxz~zy{}~xxuy{x{x~vy€}{{x|z{yv}z}zzz~z|xzz}|~|~~{wxu~}}~yp\N?:žž›œžžœž  ž™™˜—›™œ™š™——šš™—˜˜™™›œ—˜ž£¢¦¨¨¨®¬­«ª®©¬¥¤¢™•–‡„{yqm]]ZSVUW\[c`chmjljhgechilfhgbjghjfgjiihkimnonprsvyz||~~|}zzx{~ƒ€~ƒ€‚ƒ}ƒ…~ƒ…„†ƒ†‚‚ƒ‚‚†…‚ƒ‚ƒ„†…„‡„€„ˆ†ƒ‚ƒ‚ƒ…„„€‚…„‚ƒ…‚‡†ƒƒƒ†ƒ‚‚…„ˆ‰€‹ˆ„ˆƒ‚‚‚€€€€‡‰‚„ƒ€ƒ}|€„„…†„…………~‚„ƒ}†„„„ˆ‚ƒ‚„‚‚}€€†~€~|‚‚€~}„€‚ƒ€€‚‚‚}€|~}{~yxuvyxsvqqtnjilceqtyz~ˆ‰ŒŽ‘“›˜ššœž¢ ŸŸšžœ•—•—š˜“˜™˜™—™–š—˜ ›˜›™œ™™™˜•˜˜šš—š›—––˜–š–šš—šŸœœœ›™œ™š—”–¤´ÁÉÌÏÓÖÖ×ØÙÙÙÙÖÑÈ»¨‹zf`fholqqtrvwqswtwwxs{wux{z}x}|z|v{z|~{||~|z€|x|zv}{y}yyvz~~€y~‚}}{|w€€~~|q^SFC27.››Ÿ £žžž™›››¡œ˜›—š—™˜–œšš™˜œ  ¨¥ª¨¯¨«©ª®­§¨©¤¢Ÿ–’”Šˆ{xnq`^ZWW\\_^fchhggeimjfgdkkgfjikglgelrfjkgqmqmpmqwtvwy{vxz}~‚{}|€€y~~|„„„…‚‚€„ƒ‚‚ƒ€€ƒ‚…Š…„‚………†ƒ„…‰…‚…ƒƒ‚†…‡‚……ƒ†€„‚ƒ‚†„„ƒ…†„ƒƒ‚ˆ€ƒ„z„ƒ†ƒˆ…ƒ€|€|†‡…‹„…„€€ƒƒ„€„†„…ƒƒ………‚ƒ‡ƒ…ƒƒ{‚‚~‚‚}|„|~}ƒ|}€|~‚‚€}€€ƒ~}}{€x}€y~zvysrqqlnpniegkirtxƒ…†‹“™”—™œ›ž¢Ÿœ››š™˜™–—˜›œœ˜›š™šš›žž™œ™œ›—˜š›˜š˜™›ššœœ™š›š˜—››™›™›˜—™˜”œ©ºÃËÎÔÓÔ×ØÙ×ØÚØÕÌó‚nffmljpnrqsu{wu|wzuy|vwzwwv{|{vtwyx{|{~|zvz~zy{}z|x||z}{{|€|z~}€€}}€zk_H@11-.1ššžššš¡™›œ˜›š™™›š™˜š˜›™—š˜•š¢¢¢£¦©§ª¨©¬¨¬«¬©¨ª ›™–Œ‹„yyqj`^Z\Y[Y[a\debbdfkeifbhhoigkjiggeckfccmhlmlhqrstqus|wv{~x}}}y}{}}‚€€}ƒ‚€€ˆ‚ƒƒ€~‚‚„„€€€‚„‚ƒ„€…‚…†‡…‡…ˆ‰…ƒ„…‡Œƒ…„ƒˆŠ„ˆ„ƒ‹„ƒ‚|„„ƒ†ƒ~|~‚†ƒ‚|ƒ€‚}€~€……€‚„~z|€~ƒ‚€ƒƒ‚ƒ‚„€ƒ€€‚‚„ˆ€„„€ƒ„~~€}‚~~|}}~|{y{€}‚€€{}~vz|}}{~|}twwwsrppnpgnigekotv{‚†‹Š•••š™¡¢Ÿ˜žš™œš˜š ›žœšœšž›™—™™™œœœ™™˜š˜š–œ›•–˜šœ™›—˜š™œ™˜”˜™™™š•• ²¾ÆÍÒÒÕÖØÙØØÙÚ×Ô˽ª”zmihhlnposuutuxyuyvxzw{vw}wyxuxzy|zz{}yz{|~{ty}y~~€zz{}€}|}}}|~}ƒ‚{~~|vi`R<5-0/-+››› œšš˜›Ÿ™š›ž™œžœœš——™››–™šš›ž  ¦¤©¥§©«¬¬¦§©¤§¤¢ž”Ž…‰‚{qh`ZYXZ[_bh_adcdhhgefhghcgeknjdggeghedinlnokllqtxrwz{|y}y{zz{~{}‚}„~}€~€„‚‚‚€‚„ƒ†‚}‚}„‚‚…‚‚†€‡…‰‚ƒ„„‚ƒƒ„…ƒ†‡…~„……ƒ‡ƒƒ‰€€‚„†~…‚…‚€‡‚‡~€‚ƒ~‚}~|„|€€„‚ƒ‚€†€€„ƒ€‚„ƒ€ƒ€„€„€€‚‚~€~~|~€~}~||€„€€€€€~€ƒ~|wwzpuuyuorupkninigdmqw|‡‹ˆ”•–š™ŸŸ¡Ÿ£››Ÿ›–™œ˜—›œšŸ žœŸ››š››œšš›š™ž™›žšš˜˜˜™•™šœ—•š˜–—˜š›•••–›¨¸ÂÉÍÒÕÕ××ØØÚÚÙÕÏÅ·£‹middihkmnsmutzztwvty{yuyyuwwwvtxwwvxwy{{}yzu~z{yyz|~{y{||~}€z|{{~„‡‚‚‚}rj[L/34*/11735œœœ™—œ››¡›ŸžœœŸšœž™žš››šŸ¢¥¨§©¦¥ªž¤¥£¤£¢£Ÿ£ Ÿ¤¤œ››–˜‹„„}tec_UXWW^^acfacjkhifeefhjgeggfjmlfcdkhgijgijlknqpsps|wu|yvy~w|}|~†€€…‚~€ƒƒ~ƒ†‚‡…‚€ƒ€~„€ƒƒ‚ƒ‡€‚ƒ…„…„…‚€€€ƒ€~€„}~ˆ€|€‚‚‡~ƒƒ„‚~€ƒ€‚{}~„~„|‚ƒ‡}€‚…€~~ƒ„†Š‚ƒ‚‚ƒƒ†€‚…ƒ‚}~}‚€‚„€„…‚ƒ~€€„ƒ{}~~|~~{~|~€|~}ƒ}|~€€{{}†~€}}z~{x}vwwvzrrqpllppijmhlooqy„Š‘“”’—žœœ£¡¢ £¥ Ÿ £Ÿ ¡ŸŸž £¢ŸŸŸŸ¢ ž¡œš›œ˜œ›ž™œ˜š—š™–—š—••˜—™–—–––”“——”™˜ŽŽ’’ž¬¾ÆÌÐÔ×ØØÛÙÛÛÝÚÕÍÁ³™~pkekslmnqtqtwqtyrxuzwyzxxy{tzy{wx{{~€~€€€ƒ‚…‡…„‰‡‹|q`G82:9.5?22052..///0//0<œœœ—˜œž ŸŸ›žžžŸ¢›œ›Ÿ™žœ¢££¦¦¤¥¨©¦£¥¤¢¥Ÿ¤¥šŸŸ¡ž›™›•Šxqib]XXYV\]a]^bfdejmeighggbenikgdfhibeggjknjjltlnosxww|xz|wy{t{ƒ}€‚€ƒ€|xƒ{~‹~}‚ƒ‚}~ƒ‚ƒ~~‚ƒƒ‚}…„€„ƒ‡†„‚…ƒ‚„‚‚‡„†ƒ……~}ƒƒ€ƒ€€}ƒ„}ƒ||€}~{~€}€€~}~}~~„…€…‚…ˆ‡‚……€…„€€„†‡€€ƒ‚}}€~€€„‚€z~~}z}}€|‚}€|€|{€||~€€{|y~~wxzywvttnnmnkjmjjjknvuu|„…‡Ž”•——›žž£¡¥¤¢¤Ÿ ¢§¢ œ› Ÿ¡Ÿ¡ Ÿž¡  ¢Ÿœ›™œœŸšŸš™œšœ˜•™“œš˜–—•———š—––•—•••‘Ž–¦³ÄÉÎÓÕÙÙÙÜÚÛÛÛØÒË¿©–seigmlpqpuuz|vz}ytvzvz~wyxxyvuxw{yw€}}}€ƒŒ‰†‹„ƒq^I:J>//+,/,1'+4+-+6037756šš˜™—œ™œ£¡¡›žžœœžžŸ¢ £¦¦¨§¤§¨¤§¥ ¢¢¢¢œœ¢¡¢Ÿ¢œ–—’Ž‹†}wrf`_XURX[e^\`a`ehkingliihdhjmfgggebhibghmjpqonppsqxv{xyzxvy|x}}}~~|€€{z„ƒ‚ƒƒ~‚~‚ƒƒz…‚€}€~‚‚€€}ƒ„‡„€…„~ƒ€~€„}€€’„†ƒ…‡‚€~}~|}y|{€}~}€{}}~€|€€y€~|~}}z‚|~~€~‚€…ƒ„€†‚€„ƒ…‚ƒ‚…|€}}z~{€€‚z€}{€}€~€}~||{}~…€€|}{}~}{y„yusonjlnljhhhmopwy€}ˆŒŒ‘“š™™žŸ¡¢¡¢¡¢¡¡¢§¦¢¡Ÿ¡ ŸŸ¡žžž¢žžŸ ž˜›—šš—šš˜™›œ˜™š˜˜™›˜–——–—˜–—•”—’•”““‘“¬¼ÆÊÑÕÕØÙÛÛÝÜÜÛÕÏǹ¤‚jedijmkrvqvyyvyzv}|z}{x{|zyxyztv|{~zy}„ƒ€…‡‰‹†n^G8>II10'.+-/('.-,*/123669˜˜™œ™››ŸŸŸ›ž››£ž›››š  ¦ ¢¥¥¥§¥§©¥¥¤¡¢ ž¢ŸžŸ ¡  ¡›–™”Œ…ytlc\UVVMRS`]^addggdhdkekfgfiiehfcdikffehgljmnlkqqqrwyzvwv}uyy{|{z}}}€‚|ƒ{|‚ƒ‚€ƒ|‚}‚|ƒ€‚ƒ„€‚€ƒƒ€€‚~€}|‚~~ˆ€€„…‚}‚‚ˆ…ˆ…†€Š‹‚~…Œƒ‚ƒx~y}~{€~z}~€zƒ}‚€||}|}ƒ~|y~€~y„~…ƒƒƒ€…„‚ƒƒ†‚‚…‚~€~~~{}}~€}{ˆ}~|~‚|€{€€‚~€~~{}zyy{|{~wuqlpqkkjgiimlrpuw~‚‰‹’˜›¡¢¡Ÿ¤ ¡ ¢¢¡Ÿžž œ£žžŸž Ÿžœœž› —œ™œ››—™˜š˜—–™——™–˜˜—–˜”——–˜’Ž”’“‘¢²ÄËÎÓÕØØÙÛÜÛÝÝÚÕÍÁ²‘xcgjlmnorrsr||yz}~x|{xz{uxvwyw€||}w{{~€€‡…‡‡†ˆ}o_R51'/:4-&'$(.*)--../73:;//œœž›žœ™žž¡ Ÿšž ŸžŸœšŸžŸœŸ §§©¥¨¤ª¤¤¦¦§ž¢¤ž Ÿ £ ¥žšš“‹‚yqmb`VZ\SUST_^agedjggiigkjtkgjjldhgdicfggkkmljkjostuux|xwt{}{}~|z{„~€~{~€{}ƒ‚~~~‚€‚€„ƒ…‚…ƒ‚ƒ|~‚‚ƒ‚…ƒ}€{~„‚‡…„†ŒŽ‚€‚ƒ€}}{~|~}wx}||z}|~€~‚}~}~€{{|~~}„{{{~~‰„ƒ‚…„ƒ‚…ƒ…ƒ€„€‰}~|€€~€~|€z~~z{€ƒ}~{~|}ƒ€}{}}{y|vxz|yyswknpnpilfiinrvyy~„Šˆ’‘“™šŸž¤ ž¡¡ £Ÿ£¡¡ ¢œŸœžžžŸœœœ ŸŸŸŸ˜ššž˜šŸŸœœ›™˜œ–›œ˜œšš—š—™™”˜–•–—“’“•’›¬½ÆÍÑÕÖ×ÚÚÜÛÝßÝØÏÈÀ¤Žlgghpnrsrln}}|y{{wy}{~{zywstz~zwx~z~}‚…†ˆŠ…~q^F7+/,.5/.'+(,.-.-22/,1933/0žžœ¡œœœœœ¡Ÿžž ›¡ŸžŸœ £¤¥¤©§§«§£¥¤¥¢Ÿšž œ¡¢¡ žœ™˜”Š{vof_UXRUSU__b_ddfdifcjfikggimhdikbhffciigllklnmruqtsy|x{wu{y{y||~||w€|~…€€|€€~~ƒ‚…‚‚…|€†ƒ‚‚ƒƒ†€‚€~…ˆ…‚‚‚‚ƒ‚€„…„„ˆŒ‰Š„ƒ€||{|}}{|xy{x}z{|€€€|z~{}{|}z|€|}€|€€€~~†ƒ€‚‰ƒ€‚„„†ƒˆƒ€„€{~~€}‚~z}}~~}{|~||~~|{zƒ}}|{zz{{}ux|yqzvtnronlijkkrnxz€‡‡‘—šš™ ŸžŸ ¦¡¢ ¡¦ŸŸ Ÿ¢ žœŸŸ šš¡œŸœž›šœ™Ÿœœœœœ›™™˜œ›˜™–—˜—–—™š•–“’•‘“¢°ÂÊÏÒ×ØØÚÚÚÜÝÝÛ×ÏÅ´˜}dfkjllnttstxywwv{yy{vyxyzxx{w|}~{‚z‡ƒ„ˆˆ„spXI5*&)'00.0*,+.,/-0-/1496/58Lž œœžŸŸ Ÿšœ ¢Ÿ›Ÿ ž¦£¨©¨ª©©§¥©©¥¥ ¡Ÿ¡ŸŸšœŸ¡¤¡¥Ÿ¤œ›’Ž‚rofgZYWRV\]`g`aahjjfflggiiikjeihgejjifdgkjmingmrprtstvw{xx|zy{}{~}~}‚yƒ~|z€~}~}ƒ‚†|€‚~ƒ€}‚€‚€ƒ„…€ƒ‚‚€‚€…~„{…‚€{}€~{€€ˆ„ˆƒ…†ƒ…ƒ}{~|€}{xzxyz{||zv{~„}}|}{z|{zy|||{‚€€…„‚~~‚€~€ƒ€„‡‡‡€‚~zz€~}€„€€}~‚|}{}||||y~„€~|}{}wqvv{rzvnlqppoolllnrsv}ƒ„Š’“‘˜–œ›œžžŸ £¡¡Ÿž¢¡¢žŸžžŸ¡ ¡œžŸ ¡›  žžžš››œšœ™š—œž˜ž››œ˜˜˜—š•™—•””“’‘•”Ž”•¨ºÇÌÐÔÖ×ÚÙÛÜÜÝÜÙÔËÁªŽmghjkoqqttrsty|yy}|xx}{{xv{uwzw||…|{ƒƒ€†Š„‚lYF20/'&+--+/35)**921524/52.22>œœŸž œŸžžŸžž£žŸ žžž¥¡¢¢¥¦¦§¤¨¦§¦¥¥£¦¥£Ÿ ŸšžŸž¢¢¤¢¡ž‰€ƒtqe_Y\ZWTZ\]cdd`hejkkhhqgcfilgfgffdgifdekenimjjmoptsvuwyyz{y~|yy{€~}}~~~…ƒ|‚|}~}€€‚‚~‚€€‚‡€…ƒ~€†€ƒ„€‚}|‡|‚€†„‰†…„†‚ˆƒ~€|w{|zxy{{}w{}€{{€~‚€€‚€}~}z|y~€|}{„…‚€€‚~ƒ‚‚Š†…„‚}||€ƒ~~ƒ€€‚ƒ~{xy~€{{~}~‚{‚ƒ}€‚€„ƒyyzsuxuvwturqlqllmlhkrtw{„…‰ˆ‹““——˜œžžœŸŸ¤ ¡¡žžš ¡ŸšŸ¢žžŸŸ›œŸ›™™œšœŸœ™š˜—˜›š› ˜žœš–˜–˜••—–””•”Ž’²ÃÆÏÒÔ×ÙØÚÜÛÝÝÜ×Ò˺Ÿfbirmqqwvqsutst|{t|s|wzzxwx€x{€}€ƒ†‚„ƒ‚zp^J/+(,-.10-1-(-/6)..043251.4898žž¡œž Ÿœ¡¥ ž   ¡ŸŸ£¤¤¦¥¥§§¨«©©¨¨¦¥ŸŸ Ÿž›š¡ž¤¡¡¥Ÿ˜œ•Š…}qqfa^[VVW^_`aagbceinkpnmogdjllcedfkglfghkjkjlmnossuuzw}|{{y{zv|{}||{‚{€~€~{~}ƒ|{}}‚‚~…ƒ€~‚‚…ƒ~…„„ƒƒ~‚„~‚‚‚ƒ~‚€€}‚ƒ‚„€„‚ƒ€…€†‚€~|}zyt{{zzy~y|}}y~~~z~~{}}}€xz}~{|€{„„„~‚|ƒ~€ƒ‚„„~„‡~~‚€}~‚|{y}€|~‚}{~ƒ}z~€{‚|‚}€~€}zyypuxtwuvvrpkpppljlqm||~ˆ†‡‰‰••™˜ ›œŸ¤¡¢ ž š˜¡›ž   ›››œ¡œžš›—šš›œžžšš˜œŸŸ››˜™œž—˜š›š””˜˜•“’”’’‹“¦·ÆËÎÓÖ×ÙÚÞÞÝÜÝÜ×ÐÆ­—vkjjjhnnqstuzuwy|||uxyvw{y}{|y~|~}‚†Šzl[H5(*'*11*-,1/-.5-0441204.1-4582œœœ›ŸŸ›šž žžœŸŸŸ¢ ž¡¥¨¤ª¨¨©¦ª©¦¥¦¨¤£¢žŸžœŸœŸŸ£Ÿ Ÿ£œ˜™’‡„xlic\YVU[[cb_]aefdfggnhlmmklkndcdechgadfggjijmquqpptutyzvxxy~xvw~{|}~}}€{z‚ƒ}€ƒ~y‚{{}~{ƒ}‚ƒ~ƒ}ƒ‚€‚‚„}„ƒ‚†€„‚‚€„Š…‚~}€„€†ƒƒ‡‡}‚~††€|{|wx|z{zy}|xm|}~||w{|~~~}€{||}{|zƒ~‚€‚€~}…„‡‚„ƒ€}€~|}}~~~w‚€€~}|~‚~y}~~{~{~}|}z€}|‚||~y|w|xwxwsshtpmmolikijjsx€z‚…‡‹Ž‹‘—–˜›œžŸŸ ¡Ÿ¢  œž ž  ž ž›¡ž›’žžžžœœœœžœŸ›™›œ™œ œœœšš™››š™™•™——•““‚Œ– µ½Æ¾ËÑÐÔØØÛÚÞÞÝÚÑÌ» „tptjvpqrvyuutvwuy{yzyw||v|{|„€…„†}xnVC314()+84.)/.*+/103753323.23<88››ž  ™ ž›ž¡£ ¡¡¤¡ £¤¤§§ª©ªªª«ª¦¨§¨¤Ÿ   Ÿ  £ £¤œ›—”ˆ„|voe_X]X]X_`\_ahbadgiihghkhjjndfgffcbifiiljijopkonruuuvv{{x€|~wx|~|}€~€~…{{}†}~~€‚€~‚ƒ€…‚ƒ‚„ƒ„‚„ƒƒ„„}ƒ„ƒ†~†€‚ƒ‚…‡€„€~~~|||{x~z|zzuuw|{xy{~}|}~}|||z|x|z}w}}{‚~~ƒ„~€}€†„ƒ‚ƒ€‚{€}|‚„~€~‚~z€~||}~|€}}|y~~~|yvzyyrumqnkmrlghknmrt{|€ƒˆˆ‰Ž‘”–š™™›œŸ ¢ ž  ›Ÿžžœ ¡Ÿ¡ŸŸžœ¡Ÿž››žš›œ™žœœœ—œ™žœ›››œœœšš™˜˜–™——–•••Š¢²ÀÊÐÓÖØØÜÜßÞÝÞÝØÔɸšnjihmkourqtssxtyy||}|x}z|~{|~‡ƒƒƒxk^F83&%/1'(553463*.9;63511/10032:77   œœœ¡œ¢žžŸŸ¢¢¡Ÿ¢¡¤¥¢¨©¦¦§¦§¦§¥¤§¨¦ › ¢ŸžžŸ £Ÿ£¡ž™˜”…ƒ{smf^`QU[\aZ[fbc`cigfjjihikhbggcggfce`ieffhfoomrkstrpvru{rzx}|{yu~y||~|€€‚‚~‚‚|}‚}}‚}|~€€…‚…ƒ…~}€€ƒ‚„†|„}„‚€‚ƒƒ~‚‚€„‚€…†‰†‚|}|}||yz|y~x{vu{zw|w|||{{€„{yy}xy~}z}~}z|~ƒ‚~„‚€€€‡„‚„‚ƒ€„€{~‚‚ƒ}|€~|y~~{€y{}|||‚z~}|~~{{|||xuryrporjtmnfloputw||‚ˆŠ‘‘—˜š—œšŸ™ ›¡¤ ŸŸŸœœžžŸ›ž ›žŸ››œŸœšš›œœž›¡›šœ™šš™™œœšš™—š™•™—˜˜‘“–’Ž—«ºÉÍÑÕ×ÙÙÚÞßÝÞÞÜÕÏÀ°riigijnisqosvuvwzyyzxyx{€€~|€‚‚…‡‚{qbK9.+(&*,*+-27<244085-03:115037;438ŸŸ›ž œ›žžŸ£¥¡¢Ÿ¡ §£¥¥¦©¦¨¨¨¨¦§¦§¤¨¦££¡žœ ŸšžŸŸ ¥¢¢˜š‘Žˆ†}rmc_\VYYXX]abcebghohhghgiiiggjglhfgffd_bihgkknpntruvvtvzzyu{|w{|€y{|{~{z„€|}„}…{|}|y}„…ƒƒ‚~‚~||ƒ~…‚‚‚€~‚~€|~…‡…ƒ}€{‚~~{y|{{z{yxz{xz{z|z{}ƒzv{xw{zuwzw€{|}~„€{ƒ†‚„€„…„…†„€~~€€ƒ€€|…||~~{~{ƒ}~|€}xz€|{~~}{}|xxvs{vqwrnnqrkxphnnostxw}€†ˆ‰‹”–˜•—š›œ žŸž›œž›žœŸœ™››œ—Ÿ Ÿœœž—žœ›ž››—œ›œœ—žœš˜–˜šœ”š”’”‘–ŽŽ¡´ÁÊÐÕÕÙÞÝßÝßÞßÞÛÑȽ¥†igkbokpqrqsrtv{x|}{vzw{y……€†‹ƒ}taF4-++(,+%+/0,6:06C4343173312067410-ŸŸŸœ  ¡žž¤¡¢¢Ÿ§¢¤¢£¦¨§¦§¦¦§¥¨©¤©¦¨¡¢¡›ž›ž¡Ÿ™¡ž  Ÿ ›˜“‹‡‚ƒujl`XYUU]W]eacgdcbeckhdgfgfgedhhebhdhkikhjfmlnosomsvwtuvzyvxxuy{~y}xw}{}€~|‚~†„|~{}|‚zy‚„|‚z|~ƒ‚}}z€}‚{|„~„€€‚ƒ}|‚}€„€}‚}x}~}}z€}|€{zzy}}~x}†€{}|~~|zw{|wywwx}}zvy€‚‚‚ƒƒ…€ƒ…ƒ‚…~~{{€}~€}|€~}€~{{}{|z|ƒ}~|||||~‚€zx}u}wuzurvyqprvqomgjmnpvxy{„‚‰ŒŠ‹““™›™š›› ˜œš¡ž œ™žœŸœŸžž›œ›œ˜žœŸœ™š›¡Ÿœœ›œ›ž˜››œ›š—›œ™›œ™™•™•••—––—“’Ž’”¨¸ÇÌÔÕ×ÚÛÞÜÝÞÞÞÝÔÍȲ–{icjhdkqrtrqqvwyv||||y€‡}ˆˆ…}yj[J;)**())/-.5528:87843.16120-3/875/1+žžŸžŸœŸ¢ªª¤ž¢¡¢¡¦¤¤ª¦©¨¥ª§©§¥¦§¦¤¡££  š›žŸžž ¡ ¡ ¡Ÿ›”‹†„}wke]YRSRR[XeY[dcigfigecfbgddjfifech`eikhiijnkkrqoorwuqu{{sxypyzz{wyy}‚…z{€|zƒ„~{|}€}y}xz|}}|€~~‚|{{{€€‚‡„‡†ˆŒˆ…‚„~~ƒ„}|~|~|{}w{{{wv~x‚wz}|||~}~zvuztzyzvxx|{~z|€€€€€~‚~€ƒƒ€„„‚€……„}~~€‚€ƒ}~~~y~x|z|€„}|{€€|}€~{€~z{zx~zxuur|wzrqsooolmhnkwr|€…‡ŠŒŒ’””•–™›šœ™šžžš››› šš›œœ  œš›™›Ÿ¢œ˜™›œŸ››œš››šœšœ™˜ž›š•••—–˜•‘’—’’‹‘ŒŽ›­¾ÈÑÔÖÚÛÛÜÝÞßàÞÜÓË¿¨Šq_`gfokonvsuqt|||x|z€{„ƒ……vi[B8+'),*,).,-.1/,1236446.:3:311.442+,+ŸŸ £žŸ¡¢ž¢žž¢¤£¤£¦¥¨©§¨¨¥ª¨§¢¥££££¡¢¡¢œžœž¢¡ ž¢¡¡ ¢œ˜—ŠŒƒ{upc\SPRWRW[Z^]cbicglhehcbfddjdegefggiggcdhfimlootsrqvvs{xxwvvuyx|}y€{|{|}zz~|~‚~€||z|y|||~€{ƒ}~€€ƒ~ƒ‚|~|}~{‚~~…€€„€}ƒ{€~„‚}€~€|}}}}}|y{~{{xuz~}xvx{}~|yzvzvwwxuvv{yvy{}}|}}‚}‚}€}…‡ƒ€„€‚ƒ~~€{€€}‚„|}~}}{}}~~{{}}}€€}x|}€€|}}yvyyuvz}uwtsmnikhhkjpr|~~†ˆˆ’“—–•˜˜š™›››ŸŸŸ› œœ›Ÿšœœ™› ™™šœœž›ž——™›™œž¢œœ›œ™œ˜——˜›˜™—–•™“š•‘–’’ŠŽŒ‘¢¹ÄÍÒÔ×ÛÜÞÜÞÞßàÞØÑ˹œ}ebacjhnnoorsqwvvux{~x}„€‡†uk\K7-+01,()**'.5042576=98<5854274.,1//34¤¤Ÿ¡¡ŸžŸœ  Ÿ¤¡¤ ¦§§¨©¨¦¢£¤¤¤¡ž£¡£¥ŸŸ¡ŸŸž¢¡¡¢ž¢¡žš›™‘‘‰‡}vl`WZWQSRV\bbccecfeeglodeiedfdgcihgdiifadghgpqlpputtuutx{uuzurzvv|||{|{|||z}€€~y|~yyw|{„~„€‚€‚‡„}}zz€„‡}€~ƒƒƒƒ†~€~ƒ€}€€ƒƒ‚{~‚€}€}{~~{„yyywx{‚yz{yuzyz{zutt{uxwytvzv{z~yy}}|€‚}|z„‚‚~~…‚ƒ‚€~}~}z€|~‚‚ƒ}}~€‚€€{}}~{{{z~€}~€{}~~|zz~|zxwsvrsstssuonpilmmrvv{}ƒƒ…‰Ž”“’—“–˜—›™™˜›œ››¢ŸŸœšœœ››››ž ™œ›™›››šš˜•˜›œŸœŸœŸš˜Ÿ›™Ÿ—™•™–›“”’••‘“•‘“•ŽŒŒŒ‹Œ˜¯¿ÈÏÒ×ÚÜÝÞÝÞààÞÝÖÐÅ°taacpnolmoqrvxxpvx||ƒ€ƒƒ…xl\J5+&,(-1,00,(.:@CJD>??@8=2351242.1,,..9¤¤¥¡£¡¢ ¡£¡ ¢ ¦¤£¤§©¨¥¥¤¥¤¢  £¥¤§¥¡£›¡žŸžŸ¡   ¡ ¡¤žœš™’‡zthc_XSOPU[c[Zdajjgfhcfbdifjeefdfcdldchfkeiiimtossurrxwuyu{yyz|xxyyx~vxxz~€{z}}~}€}~{y}z~|zxƒ€|~…ƒ|‚}~„‚|~€}€~ƒƒ„‚€‚€€‚‚„}}€‚~}}|„~u‚yxx€|{xurxwyxyy{yx{twxvzwwvzyw{}~}}~ƒ„„‚€~€€z|{z}|~‚€€}€|~€yy}€€€}}€y~|z~~|}{|~{ywuyqsttvvrnuqprtlmnrqy||€„‰‹ŽŽ“•”“”™˜˜™˜› š›š œœ˜ žž™Ÿœ—ššœ˜œœ˜›–—š˜˜ššœžœœšœš˜›™™—”š˜˜—“•”–—“’’‘ŽŽŒ‹’¥·ÄÌÓÕ×ÚÜÝÞÝàààÝÙÑÉÀ¢„kcehhrgkpnnqurvxz{x€„ƒ„yo[K81,&,1,)*-3-(,02375071334000.//4/-,.,/2¢¢  £Ÿ žŸ£¤¡ ¦£¥§©ª©¨§¦¤¥£Ÿ ¢¢£ Ÿ  œ¢¡Ÿ¡Ÿž ¡žž¢ ¢ž¡œ™–’Šˆ~ysfd^XSPSXYYbVXkffphfkdbbdeeegeccjdfbibfefbhfgknoorruzxxtwxyww}zwvvy{xz{wz~~€|{|zy}y{|}|~z|}‚{‚{ƒ~‚|€ƒƒ…|€}ƒƒ~{€€€€…{~~z‚€}~||y€||~|zzzywttuxyttxuxywxxuxszxxyx|€~€{‚‚…„ƒ~~‚~|}ƒ~|~~z€€~||}}}}z‚~~~~z€~†~z}|w~|zxxxrtqtqusnxtnnllrmpr}y{‚„…‡‹‘Ž“’““•—˜™™››š››Ÿ›ŸŸš™›œžš›˜™›š™œœœ˜˜—™—›—šœŸ ›œ™™š›˜™™–—˜••”•““•‘”ŽŽŒŠ‹Š˜®¿ËÐÔ×ÚÚÝÞÝßßáÞÛÕÍÅ®•xdaimkljoqtpqoptx|y|ƒƒ}{p`P56.+,+-*-(*/4.3:55393;41.47600,.0--,,.),ŸŸ¡¡Ÿ ›Ÿ¢ ž¥¤©©§ª§¤¡¡Ÿ¢¥œ Ÿ žžœ¤¤ ¡š ¢ ¡ ž ¢¢Ÿš–Ž‹‡~|ohd]VXQPSY\Xbdigecheckfggehgiilabkcdaiegggiiimpnprsqyxxyytvxwzz{~x|y}{y€zy|€|‚}{}{|€{~‡}ƒ|€{|~€ƒ}z€‚‚€|€‚ƒ‚ƒ‚‚‚€ƒ}‡~€‚‚|~~|ƒ}|~|†ƒ€€||{€z|z|x}ywxwswuyzvyxttuvxuqsuxww||}|€€~~‚€€€†~€{z~~|€w|ƒ‰ƒ}||}‚‚„|}}|||||€~‚|{|{}zzyzxuqyurrrwsqxrmpmknqsww}|~‡ˆ„Ž‘’’—”––˜™™˜š—œ™™žŸ™™››œ›˜ššœ››˜œ–š™˜š˜™š™š™œšš™›››š—˜—–”’”—–‘••–‘‘ŒŒŠ‹‹Œ“¢µÄÊÒ×ÙÛÛÜÞÞÞßßßÚÔʺ¢…kbgglgimjqnqksrxz|„ƒvp^Q=..+,)()+.*,40.6569;<5335191230/42+/---(0žž£Ÿ¢£¤¡£ Ÿ¢¡£¦§¨¨©§¬¥  ¡Ÿžž›Ÿž™ž ¡ž¥ž›Ÿž Ÿ¡  ¡¢š•‘Ž•€€xla]VUOYWV`_\_dbdgidfjgjliifdmjcekjehbbkiehlmkolprqr|{wzxxttuvy|{x}z|z{x}w|}ƒ€vzz{~z|x‚„‚ƒ}€€€€|~}~z|}€}€~~}„€ƒ|}}ƒ€€|ƒ}€‚}|€~†€€}z}z}~{uy}||yx{rztuqwxpwztvtzvyswt|zyy{|}z|€~€‚}ƒ|{€€€{ƒ€…}~~€‚‚‚|{€€{|z€~{|}~‚}uvwx~zwuu{ursqsqpnomlmjlmqrwy‡ŠŠŒ‹“‘”“•””–™›™˜˜œŸ š™˜š›™™šš›Ÿ—œ™››š˜˜™œœœ˜—™›–•Ÿœœ›—–š——–”–’‘‘’‘‘Ž‘‘‹Œ‹‹ŒŒ–®¼ÈÎÔØÚÜÛÝÞÜÞàÞÞ×Íų“xcafilmkinktquvyy}‰wq^H?,0,'*+),./0//875;9D>=:914532833/-+--/3-(,¡¡ œ¡££Ÿ¡Ÿ ¢¤§§­©©®¥¢ž Ÿœ››œ›š™œš›   ¤ž  œžž¢£ ž¢œ™™”…€|tia_]SOWUZ][`ddhablibegjceieejohdffecifeefjljkmnqqwusxtxyzwyy|{~y}€€z~}{{€z|}||}{{|{~}€~}~€}„€~}€}}|~z~€€‚€ƒ€€‚„‚~ƒ…~~€}}€†…}~ƒ}z~z„‚‚‚~~{|x{|ytx|~y‘€€‹Š|y}{tuxstsswwvxv}~xvwwzz‡}€{}|~{y‚~€€{€€‚€ƒ}‚}~{~„ƒ}€}|{}€}|{zy{{||tuyppostttprmjlkoqpqrz}„†‹ŠŠŒ‘“”–—–—–—–œœš›œšœ››™š—™——–˜›˜˜˜˜›™œ™š˜—™›—›˜˜˜—”™“—””Ž’Ž‘‘Ž‹‘µÄËÑÔØØÛÝÞÝÞßßÞÚÒÍÀ§†jaifkjimoqrptwyx‚zkaN91++)).0-)10122616<94:84=7:531341,*+...0/*0¡¡ž¡Ÿœ¡ŸŸ ¡¢¡§«©¬©£¡¡š˜š›ššœžšž› šŸ¢¥¤ ŸŸŸž¡ ¢¡¡¦ Ÿ˜˜•ˆ}qia_XRNRS`\]``bbecdhgjeigbjafbgjieekdfgjgglrmkmouwvtvxwysvzvz{zy{xw{{}{{}€}‚~x{{}z€z~€€€‰‹~‚~~}{|{„…„ƒ~‚€…|€ƒ€}|‚|||‚„ƒ‚{}}y~~zzz~y|~|{}z}zƒ“‹ª°™¨³¢’š£“‹”ƒuy{vsvyuz|{|wvzyzzyx|z}xyy‚~}€z€€€€ƒ‚~|}|ƒ{‚}}~}}ƒy|€||yyuwwqsvnuvqonnfkmjnsptz~…‹ŠŒŠŽ’–“˜••˜™š––™˜™›››ššš›—š›š›šš›˜Ÿœ™›˜›žœ™›œ——››™™™———””•••’Œ“”ŽŽ‘ŒŒ‰‘‹—©¹ÈÏÏÖÙÜÝÜÞÞßßßÝ×ÏDzšvdcjehkkpxpory}~wf^P:/+00/+-++)/1,10451999>;:5332/76;1/+,,/3/-1,¤¤ž¡£ž¢ ž¡¢£¤§¥¦§¤Ÿ¤œšŸš™œš™•—–šš˜›ž¤¡¤¦££ž  £¢ ¡¤Ÿœšš–„{tif[YVNUR]ZYZ_^dcidgemhhlglhidkikefeegffjgmtmomuttrsw|xvzyzyz~xz|zyy|y{x€}}~z|~y~{€}€‚‚}}„€„‚}~z~€€‚“‚ƒ€€…‚‹x~~‚}}…{€‰Œˆyz~€|z{~~„”Œ‡Œ‹†‰„‡œŽ‘±·œ±º©¢²±¥¦®·¬Ÿ¤§›†{{rwvuuswywvzzxx|||}~}{||y}€}€…„„‚}}y~{}€||}{}}z{}{|zwvtwsqtonuwqnnqmjjopurvx€„‡ˆ‹ŒŽ’”–•“–——–™ššš˜œœ›–›™™—™—–™˜–š˜˜œ›™šš›™œš—˜›™•š˜—”••“‘•’“•“Ž”ŽŽŽ–‰ŽŒŒŽ²ÀÌÍÔÕÜÛÜÝßààßÞÛÔÎÀ«lafuiimtuuty|||shWR?/-+++310+**0-.0345;:7:7;4777=5*;2/5+.-.-3,,/££Ÿ¥¤£ŸžŸ¡¤£¢ªª¨ª¡ Ÿœ™š•˜•˜”–“”—˜šœŸ£¢¢¥¡¡£ž£¨£Ÿ¢¢Ÿ˜’’‚ƒ{kfaZYQUS]Zcbadagghglhelmqkedgedeekeficfjelqjonoqqrvwyywwy|u{z{yz|z~~|}{~}||€~ƒ~{~~z~~~„||~€€‚‚„~~||€z}‚ƒ~€ƒƒ…‡…}‚}{|€€||}…„‡~~~}y‚„Œ|™›ˆŽ’‹”š™ž´³›¡·¯¤§´±Ÿ®½½­°»À½®§§§yxtqsuqvuptzx{z|zz{{}|{|€{‚‚ƒ„‚‚y|}}~||{{~{…x~}}|{z{{wwxxvvsvtptuqponkjpgkpquvxƒƒ‰ŒŠ‹“Ž”‘‘”””—”–˜™™š›œš›œ›—˜•›—››–š˜˜™››™˜š››˜˜•–˜•š—•“˜“““’‘’‘“”‘ŽŽ‹‘ŒŒ–¨¹ÆËÒÕØÛÜÝßÝßßßÜÚÑ˼ }nl}oonpuor{u}wiXB/-.,.*,100,*.2042285789@>;:87232,/++0+-/-+/00-££  ¡ ž£Ÿ¢¢¢ª§©ª¬§¤¢ž›š˜•—“–”–—““”™¡¥¢ £Ÿ¢¡Ÿ›¡¤££¢¡›—˜‰Šƒ}lh\^XSRU[Z^_[]_gcefljhjijmddgfkdgeeieghhjkpoqrnoplovuxy|ywy||{{€|zz}||{{€}~~‚y}~|}ƒ~€„ƒ{}}€‚~~€}ƒ|ƒ†ƒ~€}~‚~€}}ˆ„}ƒŒz‰‹ƒ–™Ž— ž§­¨™«¸® ²²¨¢²À·§±ÁÀ³¯»Ä¶£¢Ÿ Ž}zyqtutssuy{y{z~{{yy~}}‚ƒ‚ƒ€€ƒ„ƒ‚‚ƒ€}€ƒy~€€}‚|||~ƒ~}x{yvxxxwuqoposnrrpklkmlpqwx{|€Šˆ‘Ž‘•‘’––“˜˜˜œ™œššššš˜•˜™–˜™˜š™›šš›—ššž˜˜•—––•˜––•“”’Ž“–‘‘Ž‘’Ž‘‰’‹Ž‹Œ‹Œ—¯¿ËÍÑÖÙÜÝÞÞÝàÞßÜ×Ðů”shliemtqr{|yrmaM;,'.(%))+,*)/0222:<33;66=9:873341.**,--0/(.,/05£££ £ ¡žšŸ¤¨©ª¨¬©£ œš™™‘“’“Œ’’•‘—›š¡¢¡Ÿž¢¡žžž ¡§¢¢¢ ››™–ŒŠ…€xod_\[SRWWZ[`_hbbdddedfhfhjdjegjgifeaedehjjoosprpppqwvwwyxuvzx|z}|||z}~€{~z‚€~}}}~|~~€}€…‚„~~y||ƒ‚‚~{}€€ƒƒƒƒ€„~€€ƒ€y{}z}ƒ}€ƒ”‘–‹š–’œ•‘‘“–™Ÿ›¢³¡“¦ª²¬­¹´¢®¸¶°¨ºÆ¸¬²¼Âº±¯¸¿Â»®Ÿzvwrwxssvsxzy{x|}|z~ƒƒ„‚~„‚‚{}z‚‚{~~|}~~|{~}|~~|twwyxwuunrpqorpllkinkppzv|„ƒ…‰‹Ž‘“’Œ‘Ž—‘™–”–™–™š˜™˜šœšš˜’•™˜—˜˜—˜–˜™œ›š™™›—••–™™”•—””–’”‘Ž“ŽŒ‰ŒŽ’‹‹’•¢·ÄÊÒÕÙØÚÜÝßàààÞÚÕ˼¨…kngkowtv||ui\L2+%)+-1*,*0,,+025278536H:?997?>84,-'+,*)05/261/,¡¡¢¡ž   Ÿ¢¥¤©«®¥¨§¡˜—’‘’Ž“’–™ ££§¢¦ž £ ¡ £¢£¡ ›š”‡ƒylbX^QSXY\[]Zccbcbkfjiehjhcfeecghjfedffhgnlpnqorsmstxy|y{{{zzy|}}z{„~|x|y}~z}ƒz|}|€~„‚„€€ƒ‰‚€‚}~‚{}~|€…€†€‚‚€‡€}€||~zx{}Šƒ–‘˜™’•›’ž ™’’–Ž’žž¤´°šž¦²¡¦¯³´¯µº«©¯¹º²®´¸¹±¨²¹¹¿ÀÁÁ½»«›‘€uuprzoszyvx{{{|zz~€…‚ƒ€‡~}€€}{|{}|{~{}~~|€}}~yyuuyuyx|vmpmronookjnlnpsv}}„‚†Ž‡ŒŽ’‘‘•––’–•š˜›š™™š˜š˜™š˜šš™›˜š˜”ž——˜›š›˜”•—–š”’’‘‘–•Ž“‘‹ŽŽŠŒŽŒŒ‹‘’–©¼ÇÍÑÖØÚÛÝßßàáàÞÙÒȵœ€njlux}z€sg]G90)%))**,,),--).25919677685;65368,0.(),++,*/+0+/2¡¡Ÿ¡žŸ›¡¡Ÿ£¦©«­©«¥ Ÿ™˜“ŽŒ‰Œ‘•›ž£¤¥¤ Ÿ¤¡¤Ÿ £¢¢¤£¡ž›˜’ˆ‚tid\WVRSSYY[^aX^bbdglfgfiegfbfehhjhnngffllomoqropuvvtzzxuwzvuwx|}z}‚}{{}||{~}~€z~}‡Š€€}‚€€{„~ƒ†~‚}||}ƒ~„…‰€{€~}‚}|€~}~„‰”•Œ–—””‘•™‰”Ÿ—”›• ©¯­ž¯¦ §°¨ª¹Á¹«¸µ­«©´º¯§¥±²²·º¾¿»¸¼¼½½»±œƒqqmorxwwz{xwyy~||„€~|€~{~~{|}z~|€{{|vvtytyxvrqtvssnqoonmjjgnhoptt{†…‰‰Ž’‘Ž‘‘“’‘‘‘•”—–”–››—™—›™–™›™–˜›™š™–˜—˜—˜—›™•™™–—“’’–‘”Œ‹Ž‰ŒŒ‹ˆŽ‰‹‰Œ‡ŠŒŽ”´¿ÊÑÓ×ÚÙÜßàáâááÝ×Ï¿«Žwqowrwzze]J3-+*(*+)*/--,*./-.7307223643266832//&++-*/0,+-0()/  Ÿšœ¢¢¡ ¨§ª¨ª©¥¢žš™’‘‹‹‘‹ˆŽ’—˜ ¤¢¥¤¡¡Ÿ¡œ £¤§¡¢£¡š–”‰‚~wmeaTVRRPXY_\ZXfeeefihghefieblifddfhlfgbmgllimtqsttwuxxw}|}twzxyz|}€‚}{y}zz~{z~‚||‚€ƒ€~ƒ€ƒ‚‡~‚„‚|†|…~~~~~}‚~€€€€€|~~}||}ƒŒ‹’’—œ‹Ÿ•‘†“•™“—–­­¡ª´¬¡¦«©¤¶¸¸­¸¹¹®¨¸º¶ŸŸ­­§¯µÀµ¯­º¼½¼ÁÄÁ¾»¶®žŒ|uusvvrusw{uy}||~{}{}z|~€}~ƒ~z|{|}~|€{{txv{xwtx{tvqospoplmhlgkmmowv~‚ˆˆŒŽ‹š‘ŽŽŽ“”—‘‘–š˜—™šŸ—œ™–š˜•———–˜›™————˜™––™™”™–•‘’”‘‘–“ŽŒ‹‹ŽŽ‹ŒŒ’‹‘ŽŠ‰ŽŽ‘—§ºÄÌÐÕØÙÛÜßàââãâÝÔ;¦ˆtotvvwsdL:1*)'(),-+)+///*.+22;641384532/5100/2,,///2,-/*(1,,¢¢¡¡  ¢£§§¨©§§¥¤¢›š—’‘‰‡‡ˆŠ‰…Ž–šŸ£¢££¤¦£Ÿ¢¢¡¤¥¥¢¢Ÿž›–“„}vhf_USPOZVW^\]^fafbglgkeejkaklffiiedjijkpnkjlksqswrvx{xy}y{xwyx€|}{€{z}~}|z|}||}†‚|€{‚ƒ~€‚ƒ‚~z€‚}~{€€}‚~z€}~~‰ŒŠ‘•–œ’Šƒ’‹•¢¥¡ž¯°¡Ÿ¨­¦¯´°¬¸²µ¯¨³¸¶« ©¬«ª­·µ®¨¶»¾¸­·¿ÄÂÁ¾¿½¶¯£jmsrtvw{tƒ{z||€~{}}}|}€{yx€{w{{|y{}vzwvwywwvoqrtqoqrpqsljjhjmrnt{„‚‡…Œ‹Œ‘’””Ž“–““““”–—””˜›—˜˜›—œ”›•”———–˜•—••–—”–•““•’’“’’‹Ž’Ž‹Œ‹ŒŠŠŒŠŒŠ‰ŒŠ‹‹‡ˆŽ˜«½ÈÎÔ×ØÜÞààààãáàÛÔɶ™}vyyvsgO:.-,($%(+/+-+..1+-2593;617-053323144,0+3321144*,),,)ŸŸ ¡žž¢¤¤¨¦©ª¨¦ª ¡›“ƒƒ€†‡‰‘”›ž¤¢¤£¢¥Ÿ£¤¢£¢¥¡¦ œ –‘Šˆzvla]UQSWXVZb`\ag`fbefjhhb^legjhdgchljeciglllrptyvurtyzzxvyzz{xx}}~y€~ƒ~}{}~y|}€‚ƒ‹}~z~€‚€ƒƒy€€}{}zy~‚}{|€~|y~{~€~€‚‚Š—”‡‹Ž’’¡•†“…†Œ”“‘–™Ž—©«¢¡¡ž ¬¬§¨²º«°²¹»ª­­±«§¨µ®¤¬¸»ºµ­µ»Àþ´·ÀÆ¿ÃÀ¿´Ÿƒurptssuu{vx|z|z}}€}}|ƒ‚||~~zv€}~{||zv{{zzvyxusvmpsuoomoqsrmiiejolry{}„……‹Œ’’“ŒŽ‘‘Ž“”’”•”••š•˜™š˜™š™™–”“—˜–š”••”“’‘”–˜“’“”“’ŽŽŽ”’“Œ‹ŒŒŠˆŠŒŒ‰ŽŽŒ‹ŽŽ‰ŒŠŒ‰‡Š›´ÅËÐÕØÜÞÞàßàâããÞÙÑÈ°‘wy}naO?0'&,1*.),.410/450789757708-7703,3)(-3525.51./0/11*/3žž¢¢ ¢§¦§¦©¦ª¦¦¢ ž—“ŒˆŠ‚ƒ††ˆ—œ¢¡¥¤¤¤¡¢£Ÿ¢¢¡¦§¡¤¢¢ ˜“Œ‡~vobZUINRVWYXW\]__]bdeehe_bggebghfggoggfiefoonpwxuttxw{vyuyv{{~zz~}~€{~}|}~~y|~~„ƒƒ„€z€‚}}~~}{€‚~}€}}{‚wz}|~ƒ…‚~}€|ƒ„……‚š’“„Š•‘”›œ“Ž—‹‡Ž¢Ÿ’•Ÿ ›˜ª¢¥®©š¨³¬£¨»¿´²®²°§²·°¥§°»À°¤®·¾·²¸¹½ÂÂÄ¿¾ÀÅż¯}ooqu{ssvtz{~}}z{‚}~€ƒ|}~{y‚~‚xu|}yzz|zvu|uvy|orrtrtopqkpjkkik|ksv{}„‡Œ‰Œ”‘•Ž‘Ž“ŽŽ““”“••—›—–›˜™˜—š™“›•–’™•š˜•–“‘““‘“’“’””“’‘‘ŽŽ’ŽŽŒ†ŒŒ‹ŠŒŽŒŒŒŽ‹‹ŽŒ‰‰ˆ’ª¾ÉÏÓ×ÚÝÝàßáââââÝ×滑ypbY<2.5%+)'(67+00524206467589133546-.**-/359:/10+0/)*+,.2¡¡£œž ¢¦§¬«ª©¦¤ ž›˜—ˆ‡‡€|~…‹’˜š¡¢¥¤¥£¥¡¡¤§§¦¥¤¤¡¢£˜‘‰†xl^[TOONQWTXX]`b^_dhddfkbdddfkihhfdjghiiifonknqzrssxwwwzvwx{|vv€x}~}|y€{{~y„|~~|€ƒ~|ƒ€…ƒ{ƒ‚€€x}|z€€|}~€……„ˆŠ……}|z‡Ž–•‘Œ„”Žš‘‹–’’””Œ‘¡‹†œ™’œ››œ¡ª™š¤­ •¨µ¶´§¹·§¶º·«¦§º»®­¯´º»°ªµ»ÃÃÁ·½¾ÀÉÉÊÄ¿¸¨yposswysuz{~}}{‡€~yƒ~z~zy}~}|yy|yw|{{uzvwxuwujtsrsnqtolmpkidp{lrz|€‰‹–ŒŠ’‘‘Œ’””“”””’–™”˜˜˜—˜™™˜”–“”’”–””’–•“•‘‘“’‘Ž’‘ŽŽ“Ž‰ŒˆŒŽ‹ŠŠŠ‹ŽŽŽŒ‰‹ŒŒˆ‡Š‹™²ÂÊÓÖÜÜÞßßàáäãââÝ×˶“xgSA,').(,**$14)*./3553534375043633/.**087521/.,*(6'*/-60,žžŸ ¥£§¥«­ªª¥¤ —”‡€{zz€}†‰–™œ ¤¦£¤¤¥¤£¡¥¦¥§¤§¤¢Ÿž™–•„ˆ}wk^YVMOMRUWR][\cc`]_^_bdd_ehddcdeaeeggomgfhkmkrtspqvttvxxzxw{y}}yyz~yy|z~|{|~{{€y{y{~|{€|{‡z||{z|{y}|„€ƒ†„‘›•‰€xy~ƒ‰–•ŽŒ˜Ž“‡”ŠŽ”†ž”“š”“‘“˜¦Ÿ‘•©¦ž¢©¬¢§±µ²­§¶¯¥­»º±¤£·À½±«µ»¼¼º»¸»ÃÄÇÇÄÁ¿ÃÅ´ž€qpomvos}||z{‚|~{~y{x}‚€|y|w~|yw}zwyrqqouoqrptqonouimrmmjjmopyx~‚„‰ŒŒŒŽ“’”••’‘‘’““–”“–—•—˜•˜•–•œ””•”’—“”’‘’‘“–‘“’‘Ž“‘‘ŽŠ‘‹†‹ˆŒ‹ŠˆŽ‹Œ‰ŽŒŽŒ‹ˆŒ…ŠŒ¤·ÅÐÒÚÝßÞÞààâäããáÙÒǦxX?2,)-'',&+&-)/04889:7;14=58250355/21,2/67;9/..9-'*,--2.-ŸŸ¢¢¢¥¢§§­­§©¢¢›•–Ž…||xvww}‰Œ’˜™›Ÿ¡¢£§¤£§¦¢¤£¤¦ ¤¡Ÿ š–˜‘†‡~qhbXTMLNVUTWZ`^_c\badaddbihd_gbifba^ekmlmjihonqprvqstzuvw{z{yxx||{}ytz|yww{}|z}{~‚€{~|}€~‚|}}wxy|{wwˆŽŒ˜”•œ“‹ˆ€zvsx{‹€„Ž„‰ˆ‰—•Œ••ŠŒŒ– Ž¢—‹šœ”“££ ª§–§­¥¤ §´°¯¬¬¥«±¹º©¡´´½¹¯¬»Ãù²¹¾ÀÀÄ¿ÿÁÄÈƽ¨‰vqmlst|{yzy}|}‡€zuxvx€{~{zzx}{{xzwwsvttrrqnpolnsmllmjighkhnospsz€~‰ˆ‘‘““”’Ž‘“˜‘“–““”‘——™˜•”œ™˜—“•’’““‘–”’Ž‘”’’–ŒŽ‘ŠŒŒŒŒ†‹ŠŽŒŠ‰ŽˆŠ‹ŒŠ‹‹†‰ˆˆ–«¿ÍÒÕÚÜÜßßàáãâãáÞØ͸„L/--)*)&.3&+)3-)+647911878005>2;=4229--/6;23/-01*(,/--1,2¢¢¢ £§ª¨®®§©¥ž ™”—Š„{yswuswƒ‹—–™¢¦¤¤¤¤§£¤¤¡ ¤¥¥¤£žž––’…qjbYTMNLMNWefZceb_a]_cdebbgccecbcbcceiiejiiklmspntqyvuswuuxzvxxxvzzz{y{wwwxv||„~|~}ƒ}}~|~||z~zx~„Ž‚~ˆž¤ž•—“‘†}}trxz}ˆ|†††Œ…‡Šˆ‡ƒŠ„Š‡–Ÿ˜‘”š’•˜©¡‘—§ ¡°°¬œŸ¬¤©¯¬©£«¸¶¬ª¬¯¼²«¯¹Âžµ±¾Ãżºº¿ÅÆÂÇþ¾ÅÉÅ°˜~nmmqwvxuvvwxwx}zxyxxwy}vxzz~{{{vwrrrqvuvsrtnrpnmoniiggkgmpkrtt|€†‰ŠŒŠ•‘”““”’Ž“‘’“’š“‘”“””™›™–™˜••–‘•’Ž—’’“‘’‘”‘““ŠŽŒ‹ŠŽŒŠ‹‰ŒŠ‰‡‹‹ŒŽ•ŠŠˆ‰¡·ÉÍÒ×ÛÜÞáããâãääâß×»ƒC*+'*+&(,1*04+1)/.46566017543552,,.4..32.1/-.1.9/93,+'/04  ¤¡ª¨©¬«¬§§¢¡œ™˜–Žˆwtomgqw†Šš–šœ¤¡©¨§¢¥¨¤¥ ¤¤¡ ¥¥ žœ”‰Ž…vi_XSONRVU_b[\[`^dhibbaeeb_aegaacedbhlfknkijlmpppqkwr}pttxqww{~wyw{twyv€xy}{xzw}z~z{{ƒ~}}€||€}|{||~{x{‰­´š–£š•“‘†€€|z}}wy}xƒ…ˆ…„…ƒ‡„ƒŠ™Ž™Ÿ—••–œ—”˜ —•¦¯£ªŸ©­¨©¬Ÿ›«¬¸²¯®µ·°¨«ººÀ¾´³¹À½Á¾º»¿ÂÇÉþ½Á¿ÄÈÉÉÁ¹¤„pnmxywpryvwwu|yvx}{szy~vzwy{xzw{yysvpsrorpuqpmoiilikcfbhjjnsux€†ƒ‰Ž“’‘“‘‘“‘‹”Ž’”“’“‘’•’š—š•˜™––š•–”Ž“‘’‘‘’’’•Ž‘’ŠŽŒŽŽŒ‹‡‹Œ‰ˆŒŽŽ‹‹‹ŠŠ‰‹“©ÁÆÏÔÙÛÝßàäåäæåáàÖ³p."!)%($'),0.031)-4944230222533./-.-0011M7325/.+667/-.9328¢¢Ÿ¥¬¦¨ª««©§¡Ÿœ›—•‹‡zynijekt~ˆ‡“–™œŸŸ©©¥¥¢¦¥¤¡£¦¢¥¤¥¢ ¡›™“Ž‹zoa\UYSIJLTZQUS\][c`fni`]dccbag_eajfhegcjhgkonnpopq}svrxzvty{{wwxyyzzy€}z{~xzy€}~|}|€}„€{u{y€{v‡¦«•–“ˆˆ„…}|„zzy~v{|v†ˆŠ†ƒ|yƒƒŒ‘‘‹…Š~›Œ¤–“’œ— ¬ªž—¦ ¤³±¤ ¡§°¨«©¹»¶°§¥·À¾³²¶¼ÁÁ·³´ÀÁÂÁ½À¾¿¿ÄÈÇÆÁÄÅÉÅ·ž‚jssslttpptqwzx|xyvwzyvxwsvyyzyuvvurttsursooqolpnlkhgfgnjpout|ƒ‡…ˆŽ‘‘“”•”‘’Ž’””•”“Ž“—–“•“–—˜š™•—ŽŽ‘Ž’’”Œ‘ŒŒŒŽŒŒŒŒŒŽŽŒ’ŽŒŽŒ‰Š‡‡Ž“°ÂÉÏÕ×ÛÜßâääåæåÞÖ¸p)$"-((*---)/3'-25478;65473<=;1+/,-*+14236426+'*137*-,/721¡¡¢§ª©«­«©£ žž–•’‡~umebdgr|‚…”š™ž ¤¦¥ª¤¨¡«¦¦¢¢¥¤¥¢¤žž˜•‘‰„~xodWWRJLNRR[YWU^X[^`abac^[c`d`ec_djgbbgeihiqkslmottsruzqp|uvywzuyrxyyyzz|z}{}}{z|{}{~|€z~{}}{y{~†~z‡…‚‹‹‰†…„|v|‚yytxxxxx~Š‡‹Œ†…†ƒ{x€ˆ†Š“…|‹”šœ—Ÿ” ££ª¡£§Ÿ¢­›Ÿ°¯¬¥«®µ¾ª¢³·¼¾µ±¯½¿À·¨¯¼ÄÀ¿¹²»ÁÄÇÂÁÁÁÂÃÈÎÉÆ·¤Œxrqtopoqxzuwuxuvv{{xuywxtxswvwtwturrspopqhkllnmeiefbhhoppwyƒ‰‡Š“”’•“‘‘‘Ž’•’’•‘““‘””“•—“•˜˜—š”˜”’‘‘ŒŒ‹Ž‘‘‘•”“‘ŽŒ‘‹ŒŠŽ‹Ž‹ŒŽŒŒŽŽŒŽŽ‹Š‹Ž‰”¨¹ÆÏÖÙÛßáãäååæáØÄ7"'*')*(.)).00224388452554564-.,-).*218;/40,./**--/,*37982¤¤¥¥¥«¬°¦©¤¤ž›–•Žzrgf[[gq{„†”“™šžž¨¨¦¥¦¤¤¤¢¨£¥§¤¢§£™–“‹†sla[SMJRMSTVSYW]X\aa]_``a^ce`c`f`ffbhbfgghcgimiqpnrqyputsovxyuzzry|~wxx|wxyz{|}|€|~{||zx|yz~}’±˜xz{|}‰†|zw~|{|}}z}|~{ƒ‡„ƒ‚Œƒ€†€“‹…‚‘„•™‰™ —”¢¤ ›¤¥—¢£– ¯¥¬­¥§±·¶´´°±¼ÀÀ´¶½¼¿·­®¸¿Â÷°º½ÀÄÅÀ»½ÃÇÉÉÊƽÄÅǸ’~liloopqswvustuxy{wzw{www|xzvxuuwssqpmtqnogmikghli_blliouw‚‡‹ˆ“–”–’’Ž”‘‘“•“’–’’’’•™”””“˜–ž˜•’•ŽŽŒŒŒ‹ŽŽ‘Ž“ŽŒŽ‘””“ŽŽŒŽŒŒŠŽŠŒ‘Ž’Ž‹‹ŽŠŽ—¯¾ËÔÙÛÞáâåæäáÚ˦Z$''')+,+*-2)'/./5345782777550,/+,/-+237631/++,,0.-1/346;:3¥¥§¨®±«¬¨©¡Ÿž›•”ŽŠytihZ[[cpx~†–˜›¢Ÿ¥©¤¦§¦¢¥¤££©£©¥¢§¡ž˜—’ƒ|vja]PQHJMKOPUUZ_[b^`^c^Z`^gdecbbccbeffkifhikjmmhkmnvxrvwppyryvzw{sy|zyw{}zwv}yz~{{{|zy{}{{|}y||‡¯ÅŒop}|{z‚{€{|yvv|yzvy|~y}†}„‹‚†ƒ€…ˆŒŒ„Š‡‰‡”™“Š™žž›Ÿ§ š’’¤¬•®³¶¯¥¤«¶·½½¼»¹¾¾µ°°·¼¿Àº·¿¼ÀÆÀ¹µ½¿ÂÈÇÅÀ¾ÃÂÃËÈö oinilnonpstsvzvqxwsyxvuuuvtuqsuusqokrnmkloijmmghcejloqsx€€†Œˆ”””””‘‘““”Ž’’Ž‘““’’“’—™”š—“••ŒŠ‘‹‹ŽŒŽ“ŒŽŽ‘’Ž•ŽŒˆŠŒŒ‹Š‰’Ž‘’•ŽŽŒŽ‰‰Šž³ÈÐÖÚàâãäåàÚжy3!&)'"$&*+*31+34/485512.;=4482(-.-.+.246280.-*)-*/(13787310¤¤©­®®¬¬¨§œž›–•’ˆƒxle\RPWcpy€‡‹”™œžŸ¦¤¨£¨¤¤§¦¤££¤¤¦¢£¢™š–‹ul_YOJJIOTWOSVUXY]___]_^_aea^ibcff_ggfchhjiigomhjspmtsu|rrywwrtsvusz}{{{z}{x{v|}|}~€}x€}zx|zzz—°“hem~{{ztyxvtvzzw||vyzyzx…‹ˆ…†ƒ…~uy‚‹Œ‚‹‹Š„‘‰”–Ž‡¢“’¥Ÿ–’§§ŸŸ¬´±¡ ¬¯¯·µ¸·º½¼º±ª¸¼¾»´¹¼À¿º¶®´ÂÃÃÁÁ¿À¿ÃÂÉÆÆÃÁÁÁ¿°™~milkmnkruttrtvvrvsuuwuutvsxvqsspsptqpppgkjleihhdhlmmy‚ƒ‡‹‘’”–˜˜””“‘’Ž’Œ’Œ‘“’’“™–˜™—‘Œ‡Š‰ŒŒŒ—“ŒŒŒŽŒŽŽŒŠ‹ŽŽŽŠŠŠŒ‘‘Œ‘‘ŒŒŽŽŒŽŒ’“£·ÏØÚÞâääàÚÑ»‹D'&"***%)(*.+1.127;<56633;492,,'++()01-731/7..+-/)./00630,'$§§ª¬¯­ªª¥ ¡ ™–’‘†€ui^UQOWhlw‚ƒŽ•–ž¡¨¥ª¦¥§¥£¦§¦ £¢¢¥¤ŸŸš–”Œ„|sq^UNMIGLQPTVZXZ_]\^[b[ba`a__bcbfkadhagnjgfdmfhiemomruqurrwzxsqquwuz€yzzy|z|y}xy{|}|yyzyv}zŒ½¨lZWjmwx}vyzoz|yrx|yxzu{zp~}‡ƒ‚Š‡„~|‚……†Šˆ‡‹‹†‡‚Œ•‘‘• –ž—Š—Ÿš›¤´º°¥¤¢¬¸³­­ºº¾¼°°º½½¿»·°·Ã¾À¼°­µ¾ÁÆľ½ÂÄÇÄÆÇÆÂÂÁÀÀÅÄÁº£}njglgmjqos}qprpwrsrt{wvtrtwrnrooskkloknkikibfdbejloq}‰‰‹Ž‘””•—”™•”’’’’Ž•ŽŽ“‘”•––•˜“‘’Œˆ‰ŒŽŽŒ‘‘’’‘ŽŽ‹ŽŒŒŽŽŒŽ‰Œ“’Š‘Ž‘Œ’‘–ªÊÔØÞáâÞØÒ¾™V0#+#%+++)*)+.5,384;827=784;865-,.+/-21551-).+...0..866;6,'" ªª²¬¯°«ªª š•‘‘‰}oe]XGNZfry…‹Ž”˜›¥££§§¦£§¨¥¦Ÿ¤¥¡Ÿ¤£š“‘Žˆ‰€wndZQRIFNJOPTW[\`[]\_b^^_bbafgbb`bc`ghbdhbemfijejksqqpruoqpsrusqvuw‚|}zx{~{zx}{yz|{}z}x{{tsy}¡Î¨faZns}yxz‚xww~zusyww|wus}~ƒ‡wy‰{„…„ƒ†…†‹€•’„…˜ŠŽ’“œ¤š˜¤°¸¬œ«²¶µ­ª´¹¸º·®©·¼¿Á·§¶¿Ã½³¶¹¿ÁÀ¾Á½¼ÃÈÈÇ¿ÂÂÂÃÄÅý¾ÃÂÀ©vedaihjnlqoqqlspprntvrttsutsoonokllnklllikgidegjrpyz{†‹‹Š‘”•–—”•”—”’‘’“‘’‹’ŽŽŽ‹Ž‹”‘”•—•’‘‹ŒŽŠŒŒŽŒ‹‘‘‘‘‘‘ŒŒŽ‘ŽŒŒŽŒŒ‰’ŽŒŽ‘ŒŽ•Ž“Ž’“Ÿ¹ÌÔÛßÛ×Ó¾”W3)(*%,**./-(-*410886:173::63441(&*,2224193/))./*//876:75+&#§§§®ª­¦ª¤š—–‹‡€vlZPJKOUcnvƒ‰‘–™¥£¢¦ª¤¨¤¤¡¥£¥Ÿ¥¤¤ ¡ž˜™‘……}ulbVTPHDKVQSTZ_]\]d_`d^f`b`bddeg_befhfbcdcgeiljmoooqosrrqskrxsruwtsx}zvxt|vw|yz{w|x||}|{}y|y|{—°†i_ensttsv||twzvz|ƒ‚yxtxsuz|€ƒ…†y{ˆ}~†‡€‡ŽŒ{ŠŒ’”‹ˆ˜¡œžª©¥£¦²·±¬¤§¶·¸±«®º¹¼º±¶¸¶¼Ä¿µ³¹Â¼¶º¾ÂÄÅÅÃÁ¾ÂÇÇÇÄÁ¼À¾ÃÇÇÈÄ»¡ƒldfgipijgjnmsossmstrsqqqputookompnjgljjmldhfifksrv……‹•”’–——š——”–”“‘‘’’Ž”‹Ž’ŒŒˆ“–™’–‘“ŽŠ‹Ž‹‘Ž•“”Ž“ŒŒ‘’Œ‹ŽŽŽŒŠ‘ŽŒ“Ž‘’‘”’•“•—®ÅÐÙÚÖξ›b1,%&*,-/)+-*.+,052041.5:67548-,,..--02503,-+-(*0*,395;?:<)#««®®­«§¡žžœš•„~zk^RNLJQYbqw‰Ž”š¡¤£¦¥ª¨¥£¢¤¤¥¢¢¤¤¡Ÿœœ—‰‡„}rj^SVFIFPMTXX[T\ZZa]_bdad`c_cacbcdcifebgddnjkinomqlptqonstppuutwwxtuvwyxwvx~{€~zy‚|~}{|~{|€y{€rlpsoswxvz~{tutw€{~x|p{y~…}„‚ˆ„‰€~††‰‘…†„‰ƒ†ˆˆ‹Š˜™—–š©£”œ«²¹¬¤³·´±¦ª·´·¹³²¶µ¸¾¾³´´¶¼ÅŽº¹¼¾Á¾¾Ã¼¿ÃÅÉÉÊÃÁ¼ÁÇÊÉÅÈÉÆɽª†pffnljhjiikhioqrrptsorqpqrlokpnpkikngijghafflnpru„‹Œ“•—›š•˜‘–—””‘”Ž‹‹’‰Š‰‹‹”—˜™’ŽŽ”ŒŽŽ‘“‘’’”ŽŒŽŽŒŠŽ’”Š‘‘‘Ž“’“”–—“•˜¥¿ËÔÒË·“Z6'++**,,,,)*(.+2-;3-1623357780/2,032176496/++20,0//4:?E<0&"#¯¯ª¨«¦¦¤ ›”“ˆ„uj_QHJJQW^gqv†Œ”˜œ£¦¦¨ª¥§¢¢£¤§¢¤¤£¢Ÿš™•Š‹ƒ~sm]PPFHILPWVXWT[\]_dhibadal_`fhaccchcee`iafjkklnllopwvvjlmoqvtqvuxvxvwwxuyx|www{|w{z{yy}{|{€Ÿ‡plmsrrnqzvwvupn{z{xrz~|}}}yw~€„Ž‡‡‚{‚‰ˆƒŠ‡“‰…ˆ‚yz‰†€€’–Š‡›¢‘–Ÿ£®§›©­µ²©¡ª±¼»­¥®°¸Á¹¯§¯µºÀÆø´ÀÅÅü¹¹ÃÃÅÈÂÂÀ¾ÃÄÉÈÇÀÁ¾ÀÆÌÌÊÈÇËųka_bdcdgfekjjoqppuunpqprmsioimhikhnmjjli`cjgnqyz†‹‹”–—š—›™˜˜––›•••˜‘ˆ‹†ˆ‰ˆˆ†‰……‰‹ŠŒ•“•”’‘’’Œ‘’Ž‘‘‹Ž‘Ž‹‹‹Œ”Ž‘Ž‘‘“’“•“‘•”‘”™–š™•²½·¢S5-++-2,)*)-*-3,,2/'41001<;2142/-,03?4763-4.12)*231.14EBL?<.%"6¬¬¬«ª¨£¡š”‘Š…}re[PKLGNW`eox„Œ‘˜™¡ ¥¤¥©«¦¥¥¤¦¦¡¢£¡¡£›š”‘ŒŠ„xsi_QKOHGMPSUS_ZX]^]eecb_bnqgbeb]a`dgbde]bahehhooomnpqrpqztsrvtoqzqsyxtypuywyzvy}zz|}|v{zsw{~•{mrqnpuwsyssqmklzxwvtz}z{€„|yx‹„|…}x‰}‰ŽŽ†ywƒƒ‘ˆ‹“’”Œ‘—š…š££šŸ£²° ž««²²®©±´¼¼½¸®®³¿Âÿ¹¸½¿ÄÈ¿¹¼¿ÄÇÃÁÃÁÁÅÅÆÆÆÁ¼¼ÃÅÈÈÌËÉÇÆÌËɵ’rbW\]bb\cegdklhprpmpqqjnlmijilmoqoilggecdjinov€‚‡Œ‘•—›˜˜™™—˜”“˜““‘Ž‹Š„‡„†€ˆ„ƒ„ƒ‡‡Š’˜•“‘’‘‹‹Ž’“•“‘“Ž‘ŽŽ‰ŒŽŽ’‹Ž’‘”‘‘–”‘‘””–—’–“˜™›˜›ŸŸ ˜tI11(),13-))+,.2240/35020:761<:21)()/2=>725.2*+0++95/9?DJHC52+!4a««¬ª§§¢›–“‰ƒ}wl_RSKJGQWcdlx€†Œ‘–™ž¢¨©©©©§©¥¨¥£¢¡£¡ž¡œ›–’‰Œ‚zyl]TLLHEGNPU\VX]c`de^fdf\_faaeda^af`bee`ehgfmkljmklumqnqwtuptuurtyvv}vxwyzxyxzxz}}yz~xx|uzŠ¢ˆvinvoryuupnslnntrqvruy}|{|{t|‰Šxs}ƒ‹‰…„„Š€Ž‹y|ˆ‚„’†„‰–•ƒƒ•–’‰Œ–£›‘œ¨«£˜ ª´³¥›¡³½¼··¯±¹¼ÀÀ»¿¼»ÁÅľ¸¹ÀÅÇÄÀºÀÄÄÆÇÆý»ÃÅÇÇÉÇÂÂÇËÊÊËÊËô p\_\_^[]ebdfikjsnkhnoonkgieknlkonhlfhfcegimuw|„†“’•˜›˜™˜™œ—˜™•”“‘Š‡‡†„‡†ƒ~€‚‡‡‹•”˜•”•‘‘Ž‘‘–’‘Ž‹‘Ž’‘’ŽŽ”Ž‘’‹’”–”“””••šœš£—ˆmO43,.02'*-.'/3/1*13554471460,01-,+(,/6;:611-<2,,005578@E@E<*%%$3^¯¯ª¬§¢¡Ÿ’ŠypcXPMLMNOXcgty~‰Š˜› ¢¤¦ª§¦¦¨¦¢¥¢¤£¥¤ ž—“’†‚}ym[UGPIGMRRWWVY]`Z\]ca\bdefcciee\eef`bbaekgkkiiolomtqrptovtosqsqtwuw}xxxvx|zyw{}{y{~||xxyy‡´´|looqtupqklqiolpppvtyv‚‰zo~…‚ytyŠ‡ƒ‰ŠŠ~Œ†zx…‡„’~‘‚€•Š”ž›ŽŒ›¤¥’œ ©«žŸ£¨¶¹·¬¯µ´¹»¼¸³³¿ÁÂÿ½³½ÂÄÅ»¾ÃÉÆÅÄÄÀÀÁÀÄÄÇÆÆÃÃÇÈÅÉÄÃÇÅÈËȘrmljcYX`^e`fgepkkkopnonjiikkjdjqfhgff`fcjnmr‚†’”“–™˜š—šŸ™œ˜™–““•”–‰†…„‚~~€|y€|‚†…—™”•‘‘‘Ž’–““””’•ŠŒŽŠ‹‘ŒŽ“Ž‘‘‘“‘š‘”“‘˜””“”•˜žœš–ˆqQ:0-/0-+&&/).&()/25;7&$),1;[v‰™¢¨¦¦¡žš˜—‡…xqgYQPXUVYSQIWafn{„”“¡¤©¤¨¦§¨«ª©¥¥¢¤ Ÿ¢œš˜‘‚zsg`WOILIQSSWYWX^debia_f_cceia]fecbcggddffffjjghqnrnyqtz~poquqtoxpro||ww|wu||yxz|vx{z~}{Ž‰uuqqpmjlcgitoiq{w{xvurwpjzz}zƒyvyƒ„‡z…€wv‚„‹Š…{‹Š„~†Œ„‚ˆ‹‰•””Ž‹•‘‰£ª¡›¥­®¶´­²³¼ÁÀÀºµ¶´¾ÀÀ»³²¹ÀÂÆÅ´·ÄÌÅĽ¸»Àż½²«µ½ÈÇÏÐÔÖ×ÔÕ×ØÙ×ØØÛÞââäåãÚ»yTRSRY`aeiihddbfcecdchggegd`^cfhkmkv|„‰‰’”–••›››—œ—™˜––—˜—‘‘ˆˆ{vsneafhfhnx{€‡‹‹Ž””––““’‘‘“’’‘”“Ž‘Ž‘Ž‘‘‹ŽŽŽ‘“‘”•••”’––—œž›|Z@8/.-+**,-$&.2,.043144332313+)(-**+6/8>:0-27/11.0.069AGOUL;3)$$1>Vkƒ–Ÿ¢ª¡¡£ž—–’Ž†~tm`^QMSRTUUXPV_js~…ˆ‘˜šž¤£¤¨¥¥ª§¦§§¨¤¤¤¢ ¢™•’Š}zrk]WVMJBKMSRSX\^]__\a`[babghcbd]aceeiefbffhhkklgpnmpkpruvowxovu|zwx{xwv}x|w€y{uvvwz‚}|€‹†|ztnjnimnijonlnrus}qprwro|~€{~}|w~‡zv…ƒ|y~~x~ˆ‡{ˆƒ„“•w…†††™˜ŠŠ•’Ÿ‘”ž¨¤”Œ¬¯¶´¯ª±¾¿ÃÀ·°­»»¿½µ¯³¿¾Á¿¾À»¾ÂÃÃÀ¸¶¾¾º¶µ°·ÀÉÏÓÒÒÓÑÕÚ×ÓÔÒÖ×ÖÖØÛßâáææâÕ¡aRLQV\`dchgfbehgecefgbdhdf_ediflrsrƒ€‡ˆ’”–›™™œ˜œ›™™—™—œ•‰†xplg]`Zcdgqy€‚ƒ‡Ž‘—š–““”‹”“ŽŒŽ‘•““Œ‹•‘Ž’”—–—–˜—ƒmG-*.1++-0)*)/55-1,19<-02<042538.-)*/348790/,2/..,1025=DJYQI=3*,0CYp…‘—Ÿ¥©žž¤š––’…„wpjYSOQSRSPSUTXcir~‚†–•šœ£¡¥¥¨§¦¦¥¦ª¦¤¦£¥£Ÿ››—”ŠŠ}wsgYWOJKDKPTYW\[^X]d`a`ge^\]bjdhafgf`jecahghijlnpolmpnrrrqoospzwyr{|y{{wywzzwywv{w|~~}ƒŒ~tujmpgmmrmnonxruv€{pspnw€ywz{w{rv~{s…~‚€vz„‚‡‡‡z…‡‚}Š‰†{Š–¡Œ~‹’’•–¥£Ž¢©®©ªª´ºÁ½±«¶·ºÀŶ«³¸»ÄÅ¿¸³·ÂÃÅƾ·¶º¼»´°·ÁÃÉÒÒÖÒØÓÒÑÒ××ÖÒÒÔÖÖÙ××ÜßãáãáÜ»ƒYJRY[\cacfgdkedbhhefddaef^][`emmpsƒ†ˆ””•˜››™™—œ›˜˜›š™›˜–“ŽŒ†€yqe`][[TXanmw‚‡ŠŒ’‘•“–‘”Ž‘‘“‘‘“Œ’Œ’“Œ“‘”Ž’’‘’““‘”–•™–œš’€nO5,*14',9&,,%9*0.319852154765../-'*/6A5<;70-(120**2/7;DMPQOF=/'0ERfwŠŽš”•™–œ™™•”ˆ}vh^UQORWXVUZSXVU\^fqw|‰–›¡£§¨¦§ª¦ª¦§¦¤¦¤£¡œš˜“Œˆ}tphe]VRKOPRUTVX]\^c_]bdbe`f]bd]fjnhhidhfe`imegklnpnqosvtsrntvtuzruv~rvyz}wyyw|yz|~{w‚ƒ}wmekmnhqqhlmmkt|rxxvm{}€{}tw~{{|x{qw€sl~~…{ƒ†‡”„ƒˆ‹”}{‹Ž„~„—†ƒ‹’–ŒŽ–¤¨•™¦¦®©£ª´¾Àº±©¸»¾¾Ãú½¼¾¿º¶®©­¬ª¨³½ÄÇÏÒÒÔÓÕÏÑÑÐÑÍÐÑÐÍÒÑÎÐÏÑÓÕÎÌÎÏÒØÙÖÜààÞàáغvTOQVVW\_[\]faadadfec`_bcb`ahjqq‚ŠŠ—”™ ›˜˜——˜—ž›™˜—•’ŽŒ‹~xi_RF9@==MZdnv…ƒŒ“’’“–‹“•’–‘’‘’ŒŒ““ŽŒ“ŽŽ‘•‘“•›•˜š™œž—ŠtT6*)#)),')((+*--;73<6676056643.-$)-2258<821)+-*/.4342==FNQOB?73A5849652,)&&.145598./-)47+2:BMH:9432-,302/>69;;=AFBIPIJLXgr~‰•˜—œ”‰ˆŽˆˆ†}rbZXSSTVUYYWZZZVVXUZ`kpy|ˆ’—•œš£¤¤¨¥©§¤¤¦¥§¥¥¦¢œš–“‰tnj`YOOIIMTW\Y^[]__`a]\cibghe`kihfgafe`gebeikkmniijpnqqxrsttouvrzv}~}zzxxr{yyvsz|‚{sgnkfjnijpjktnqspjuy}zwqtupmu}vnqrqlxz{vxz}‚ˆ{r}‹ˆ…‰‘Š~€„‘‹‰‘‘ŽŠŽŒ‘ŽŠ—–™’‹“‘“–š™¥¨—•¥«±»¼«­´±²¿¿±žžš— ®µÅÏÏÏÎÐØÖÏÎÎËÉÈËÌÎÑÐÅÆÏÐÏÎÎÏÌÏÏËÉÎÐÐÍÉËÏÑÑÐÕØÓÖÙÜááÞÚÜׯoTNNPSSYZYXXZfcac_aa^_`_dgor}€…ˆŠ‘•—™›žššœš™–™˜˜——•–”Žˆˆ{rd\P93)*,4BL[fkqz†‰’•”—–“ŽŒ‘‘ŽŽ‰Œ’”ŽŒ’’‘Ž““’˜‘––œ™›š}fE/*&<745689:/646/-2--+769<26/3+,,0,)7?9;99:/++255374230566:6//,/-)1457:861,0-/830.8>7>BCJLJKCR[dpy…‘“’”››˜…‰–š‚‚|se]OSWZUY\\ZU]ZQSYVWY\hr||„Ž‘˜–šž¢¥¦¤£¦§«¤¦¥¤§¦¡¡ ˜”‰†~{ocb\PLMFKSWTVY_`_```^]ba]bgaabbdfbfb^dahbejjjijkjmnktkstsstrtuvwuwy|v||yuwx{y{y~tiknofhnnprynrqtpluxvzwtttuuytkyxjcfsrs}{~ˆ|v…‚~…‚”’‡…Š”Œƒ…–‘—Œ’”’”‰ŠŒˆ’–•• ¦°¶³¬§¶µ·³¬¢¦¡—¨¼ÆÉËÌÇÈÌÏÎÌÆÌÍÉÉÏÑÕÓÎÎËÈÌÌÆËÍÎÌËÌÍËËÊÊÇËÑÐÔÎÖ×ØÕÚÙØÛßáäåáÝÛÛÁŽXKKNJURSUXYXYTWXZZ\_]cggsv{…‹“•™™œŸ—œ™™˜››œ˜—™˜‘—‘’Œ„|wg]M?/,(--:FSbcisu‚„‘‘”–—•‘‹—’ŽŒ‘ŽŒŽ’Š•’”’‘‘Ž‘’””–˜œœvY=*33*)1,-/-.*-1/36237034498600*-+.3<8;30..0.3/472155<=I?ENKSPWcmx‚‹Ž™“––™”‡…–œ zzwibWVTTQ\[\aZVZ[[X[XTWXdo|‚Œ”“œ¡Ÿ¥¡¤¢¨¨§©¤¢¢ £¢££Ÿ˜—Š…xyod_]SNHMQUXY[[_b_adfb][e^bda`_efcYceccbiehlhgdjimuqpsnystususvvywsysv{zyvzxw}{~tmnjjmmomsmsnowookvuvztsyvzwtssrvnhmuto~}y„„‡~wƒ…„€ƒŒ“‘†’‹Š‰‘’“Š”•“Œ“”ˆ‰ˆˆŽ‰Š–˜Š‘¡ ¬«¦¢§¶¬¹±¤›˜–•°ÃÈÌÌÎÎÌÉÆÊÍËÅÅÇÍÒÒÓÖÔÎÏÐÊÈÊÆÅÉÆËÉÈÅÆÈÉÌÑÐÖØÙÏÔØÙÒÔ×ØØÞÞßãààÜÞÙ¾‚LGJMONLUSUTYUW^[[Y[_afhru~ŠŒ•˜š›Ÿ›™—›˜——œ—™™š’‹‡†~wi\I61(%,07:Sa`gkw{Œ‹‘”•”“’‘’Ž‘’ŒŽ’’Œ‘Ž’‘‘”––•œžŸ—ˆdA*(/&)-'3,')*/*5435363.37420-.,/-025:=DB..025924.02.4A=CHIPQRVcpy…‘”‘•˜™—Š…‹–œž£yymaVRQUUQXicZ\[[ZVXRVTVccqu~…‹‘‘˜™œœ¡£¤§ª¦¦§¤ª¥§¦Ÿ¡Ÿœš–Š„~ykiaWRNKTNPT[^\d`bdcebfaf^^hab_ghg]`kfcb`gikmggjnjnmyvltossssszuxuxwzy{{|}{y||ytvpikijnq{rrnno{qqttxurtssyqcotrhnoqmw}xuƒ‰„}v…†€{‡‰„‘Ž…‚Ž”’‘š”™†x…”Š‡Š“”•Œ‘ £¬§˜¢±µ°ª¬Ÿ ™Œ ©ÁÌÏÏÍÐÏÏÍÈÃÇÉÌËÊÌÙ×ÏÎÐÑÍÊËÉÇÅÂÿÃÉÇÊÉÆÑÏÚÕÚØÖÔÏ×ÕÔÏÓÔÔÙÛÚàãäÞßâÕ¨_TRKJHIPPVOXXW^YZYV^_ehqv‚€†Ž’——˜››™˜œ™˜˜››œ—›“’Œ†~€p`WN<.$%$+6=IOefqxyˆŽŒ’”™•’–‘’“ŒŒ‘ŽŽ•Ž‘Š’‘‘’‘””•˜™›˜pP8''$&%,-+(+*3104776115?;5500.+#(+,46;<@9/+001171146189AAPMMO]gqx‡”•‘‘”””ƒ‡‘˜ ¤¡ssh]SVPXXXX^\[YZXX]WPVVXackzƒ‰Š“•—› ¤§¤¨©§©¤©§§¤¥¥Ÿžžš–Œ„~spd`YSLFMMNWTWa_ca^`pcc`c_beebefccfjeefcaghkfdjijkkqmlttqwxvuqtsvusrvtrxy{}|}wrqrqmlilltunosjmvnquwvrutyyojmslcfmpqswqw…|y„††x}ˆƒ‚€€‹Œ†}…–Š‰“Œ”‘”˜”|~–†’—“—›¡§¤˜¥³ºµ«‘™›‡”®¾¼ÄÑÏÍËÎÎÍÌÉÄÁÉÎÐÍÊÖÔÌÉÊÎËÉÄÈÇƼÀÂÄÏÒÐÈÑÍ×Ó×ÖÒÒÊÏÏÐÍÎÍÐÏÕÓÖÛÝÞÛßÝÄ…iYNMKGQPQNTSRVSXWX``giqw}~ˆŠŒ‘•—™œ™œ™™ž›–—š–››š—š‘‘‡€xmdVM>/%#+,16DPdafty‡ˆˆ”‘”•–Ž‘ŽŠŒŽ“‘‘‘Ž”‘•‘•—™››Œ}c>*))&#)/*,+11027:14:67395550&,)%',/7<6;10(+*30033/0:5=6;?IIO[hqyƒ•”™”’“ˆˆ“™Ÿ¢£¢jjeTORSZXVZYZX]ZZZVZWOXT^dow‚†‹’•Ÿ¢£¥¢¤¥¨¨¦¦¤£¤¥¡žœšœŠwqkvYRGGOWU]XW_^`eX]aheh\badcaf_d`ejhbeg`eigbdehlmootlquvzxxprsstuwxwyxvzx|{}€ƒuuxssmjryojtuppvlpsttwztx{xprrtnmprrry{vv{ƒ{s‹‹|yx‡‹‚€ˆŠ‹…z„‘”‘ƒŽ“‘“““–”ˆ„€‰‹„Ž”“‡›ž™“š§¬°µ¥š‘‰‹¬¼ÊÉÇÎÍËËÉÊÊÉÊÉÇÈÏÒÏÉÇÏÑÍÇÅÈÉÁÂÈÌËÄÈÎÅÑÓÑÉÍÍÔÑÏËÈÏÇÉËÌÍÎÍÌÐÓÓÒÕ×ØÙÜßÕ·žy`VPOKJPMLUXS]XRSU]`iou{‚‡ˆŒ‘”—šœ›˜š››ž˜•š•œš•––“‰~sbXK;/&.@5,*;P\`jjs~€„„Ž’—“”’‘’‹ŒŒŒ‹‹ŒŽ”‘’•‘“˜“œš›œ”…lK95,&#$$*/+,1/2:675?>521931,,,*&%1159<;3-+*185350567?H;=6?FOUbsy‹•’”––‹‹”˜œž¡£¤cc[TTWVSVXY_]Z^[]\VURRZ\Zdjz~…‰Œ‘—šž¢¡¨£¥©§¥¨§§¢¥¢¨¢Ÿž–˜Šˆ‚{nj`YPNJNOKR]\W^ba`ebc`gZhdcdbc]gg`caddhfiifjhgkliqoqpsr}yssxstxuvwwxw{wzvu}†zqrzsovonyjinqoroknxrsztowohnqpl}ypzztsx{|y…zyƒ‚ˆ~|ŽŽ‰€v‡‹‰|Ž˜Š””’‡~‹›ŠŒ‘’Ž‰‹œ™”‘¥«©²¨š™•€~”¦¿½»ÊÎÊÉÊÇÈÉÊÌÌÊÌÌÌÈÏÎÇÂÅÊÇÆÁºÄÅÃÄÎÒÌÉÒÅÌÓÌÇÇÄÇÅÄÄÄÉÏÍÌÎÏÓÏÓÒÓ×ÕÓÓÕÙÝÞÞØ͸š}jTLFJIKLLSSZYV[`_im|}‚†‹’”˜›™››™š˜›•›˜™˜›——“–“ˆ€scUK:0,)#)9B>;T[]dnt€ˆƒ‡‘“’•••‘’ŒŽŽŒ‘‘““”””™˜š™™—‰tY3(+,$$('&'(,-73;;8;<4-4361.,,2.)*2;=;791,,,-6557;9:;??A?9>FRclˆŽ‘“•—••’‡†‘›šž¡¤¢¥``WPTVXUWX[`\_Z[Y]ZXUYTYggkw€ƒˆ“˜šŸ¡¢££¤©¥§¦¨¦£¢¡£Ÿž—“‹‡ƒ~{oiaYRMKJMMMXW_^__aadg_iafdfaadc`ccbhgibmhhfiipiglnlssrzu|twsusqzu|y|yw{vyzˆ†wopqpqsxvnnmnpkoqpoosvorzskp|pwq{xk~}ql€|zwŠ…zˆˆ„zxŠ‰’…~‡‹‚|„–„•“Œ…‘‹ŠŽ—–™Š˜¦ª®£œ“‰zxš¯·ÃÆÀÅËÎÉÉÆÁÅÊÍÎÐÐÎÉÃÃÊÊÉÄþÀÄÀÀÅÌÆÍÔÏÉÍÄÄÊÅÄÂÅÆÆÉÈÉÈÍÑÏÒÑÑÔÒÒÐÕÔÒÕØ×ÚÛÞâáÝÌ´’aFDCHIKIVWRWUV]adnv}ƒ„‰••šž™œšš›¢š˜™š™—š˜“•”‰|rdYR73)-(,<;30983//*)38824833886:<799977740/))$.,02;=<5/*/+0/04:36.669@;C>DRcoˆ’“‘“’••˜’‡š£¢¦¡£¦¦¥WWMXQ]]]WWZ\WXZUZb]VVXSY]cjvz€‹Ž‘“ Ÿ £¥§§©¢¦¥¦£ª§¥¡£ž˜“Ž†ƒxsk_XQJLKONQWT[^]^cb_ejcdhbfaffeacfcbfejfffefjipmmnlmnqtvqrrpw{xxttw‚suzxzŒŽxmhlrklmmusujnkkkomrro{tss|nm|xwx|zuq€zqzzƒ„~z~„„qˆ„ˆ…Ž‹‰‰ƒ‹ŽƒŽ‰ˆˆ‰}…ŒŠ…ŽŽ‰†™˜£ª›¢“€ª¿ÄÅÀ½¿ÅÁÀ¿ÃËÏÊÄÃÌÏÍÎÌÊÊÆ»ÆÇÈÉÄ¿ËÑƹÇÅÄÅÈÇÆÉËÉÊÉÊÍÐÍÊÐÌÌÏÍÏÔÓÑÎÒÑÓÐÑÓÔÖÖ×ÚÚÙÝäàâÛ‘nkR=DHMPQQUW\afkq|}…Š’š–˜ž™››–™—š—–šœ›œª™‰‡‚ylfYS=0'*&',*(11>FO]dqv}€…ˆŠ’–““‘’’ŽŠŽ‘•Š“‘“”•”˜™›š–†tW2)$*'%'&(/++*0<613;6D97722386+*%/18A:950,+19/,;65<266;:>ABGOYm}Š‡‘’‘–˜˜Ž‹”ž¡£¤¦¥¢¢¦ZZUUUYYY\ZYYYZZ\_XXVSWVZ`cqu~‚Œ’—šžŸ££¦ ¥¤¤¨¤£¥¦ ££Ÿš”…|xqkb\SOKLHLUXXUZa\`]Zefdaac_`eeeacdh_fgkodfcfigjlnmmoqpswqusrvuvtuuy}stu|x‰‹‚tpjhimhnnsxxpnvroonolmortzprputpzznu{spy‰‡~~Ž€|yƒŒ„ƒ‹ŽŽ‚„ˆŠ†’–‹‰Žˆ‰Žƒ‚‡„ˆ†Ž–”–˜”Œ}€š®¼ÆÇÆĽ¼½ÇþÁÊÏÊÄÀÅÊÊÇÈÇÅÅÆÃÂÉÍËÄÅÑƸÀÅÄÁÁÊÏÏÎËÍÌÌÍÍÐÍÏÐÌÏÏËÑÒÏÐÎÒÓÓÓÒÓÖ×ØÖÚÙÚÞßááÜÅœwTCEGHGOQMSU^fmsz|ˆ‰”•—™šœœ™šž™™–˜–œ–—š™‰ˆƒxqjYN@5=22*)#**44=NWags|€„‡Š”‘“•‘’Ž‰‹‹ŽŒ‘”•“”•™–š˜‘~`>-%#%'(+%',,-,//6;:8767857735,-*,.067552,.230-.9534?;0:399>O]jz†Œ‘‘’•—’‹‹”¤¥£¥££¤£¢YYZQS[Y[`\X`Y]]Z]^[WUXXZ]eos}ƒŒ‘—¡¥¥¦¦¥¥§§«§¨§¢¢ žœ™•“Šƒ~~rnc_WMIGMNSUU[[^_^`fc_bc^]b`aeeaadceghf`chgdenlmlqooquuvuvxuvuwtyvzyvyxyŒzsjnsoeioonrtqosnqqmtqiprpmqruswrquy~wq{ƒ†Š‚‡…‡wz‡‰Œ„…Ž”“„€‘“‰€Š—‹„‰Š‰‡‚…‰…~€ŠŠ’„„‘“‹‚‚“•…†¦²¾ÇÄÆÆÄÄ÷ÂÊÅÀ½ÂÈÅÃÂÁÆÆÅÆÂÄÅÆÆÇÎËúÅÅÁÅÌÎÊÂÅÎÐÒÐÌÏÎÌÍÐÎÍÑÑÏÐÐÍÑÐÑÑÏÓÓÖÍÏÔÕÕÔ×ÔÔÙÜÜáåÛÄ—`A@CCFHOMUX]ajsƒˆŠ‘–™›œ››˜šš›˜•œ–š—¡—š“Š‡}xlf[P@4-*1)'#(*./8FWYigu€„‰Ž””•‘–“’‘ŒŠŒŠ‹‘“˜•”–˜›š–“ˆqG-3(#(%*+'*)6/5.5A76835077:5//2.1-5:9@F;5-,.9<045342741587>MZqy„‘ŒŽŽŒ‘’“Œ’™¡¤¦£§£¤¢¡ZZVXV^\^Z\\Y][b[VX\XTYZ[aflr€†ˆ‘“”™£¦¤©¥¥¥¥©¤£§£¤¢Ÿš“ŽŠ„~{mkbcWMHFLQQUQY\Z`Z]bc]cecifegefhbecdgcg_cgdgihjnqmnoruruuusxwtyxsrstwwx’ˆxukirojgchmnuuvqmpwooortvripqovuqky|pvu~‚‚„…„yyŒˆŽˆ““ŒŠˆ‹“–‡‚ˆ“‹|„ŽŒ‚€‰Š|{‡ŽˆŽ‘ŽtŽ†{ƒ’Ÿ»Â¾ÀÂÄÆÃÇÆÀ¸ÌÊü»¹Ãľ¿¿¾ÄÄÅÅËÈÉÅÈÀ½ÃÈÉÈÎÓÐËÁÃËÓÓÎÏÑÍÌÍÎÒÍÐÓÎÏËÍÏÏÐÎÒÑÐÊÉÓÓÕÔÓÑÐÔ×ÔÝããÙÂ|KLY[^n€„ˆŠŽ‘“•’“ŽŽ‹‹Œ‹“’‘’‘“—˜œœ•tV4*()$.****2+1,05:773073649630++*50486350(--28744147255094>OSh}‚‹‘’ŒŽ‘‘ŠŠš¢£¤¦¤¤¤¥¥ž¡TT\W^^[]][Z^`Za^YZ^]YVVaaemx†Œ”–žŸŸ ž£¤¥¥¨¥¨¥¢¥¤¤¡Ÿœ›•‘‹†„zql^cTLIMMQRXWW]^a[`^__\^`iegeaef_fdacgfb`jefggikplgkppturvsuvyyxtutuqs{’™zrqnh^gccfjgkt{svvpsnnqxruyvxotnrqyxqnyx~~~…Š{w}ˆŒ„‡“•”Œ‡‡‹ˆ†’Œƒ†‹ƒ…ŒŠ‹„‰Ž……Œ‹‘‡|}Š€ˆœ©³¶Ä¿ÄÇÃÉÆÉļ»ÄÃÀ½½¼ÂĽ¼ºÂÈÅÆÃÃÀ¼ÂÉËÊÍÏÈÇÏÐÑËÅÃÍÖÏÎÏÒÍÎÎÏÑËÓÐÍÈÈÍÍÎÎÑÏÎËÍÕÔÖÔÔÐÒÕÓÓ×àßÞÖµr>46?EGKSXYdlr|~„„‹‘—–—š™›™›™™˜›—˜™˜›™—“’Œ‡€vqdZNE3/,(*+%%%,).49KX]hzx€ƒ…Š“‘‘”‹‹‡‰ŒŒŒ‹‘•Ž””“—›–œ’b@-,+'(,.0*(,,5-2194<74.235G33/0,2033;13,+)).0132>@63/3233:ETfz„‘•’’Œˆ†‰‹“šŸ¡¤¥¥¢¥¢§¡£UUUTP^[^^Z^\Y\\Y][VYVV]^`dt|€„‡’“šŸ›£¢¦¦¦¦ ¥¢¦¢¡ ¢žœ—–’„xmh[^YLLNGKRQ[\]aZ`_c`e]c_hcljhdc_bbdbbdkdagfgpiknmksonsttwtzxvzwtoorsqŽ¼™|ree]mieaklckonssuswlitnjsoqtxskmvqwu|vvx~Šƒ~{…Š…‡–†Œ’Ž‰…†Ž”ˆ†’’Ž€‰‰„„†‰‡y‚‹‰Œƒ€ƒ®¯²²´¶Ã¿ÁÉÊÆÅÅÈÀ¶¹ÄÆÁ½º¹¾ÄÂÿ½ÆÄÀº»ÁÆÇÎÏÍÌÍÍÂÇÑÑÐÌÆÅÎÒÎÌÒÑÎÍËÐËÏÏÊÊÊÒÎÓÏÕÑÑÐÏÐÓÙÖÕÖÕØÔÓÚÛÖÜáÕ§Z;8;BEKPV^^mqy~„„Š“™––˜œ™—˜—šœ™™™™™œš“‘‹ˆ„|vk_ZB;,-.(,++%*&,17AJZdr{z€„Ž‘’’‹†ŠŠ‹”““•–›œ‘…sS/*++,'*2+-3.051:44426844:76131-,-3<;<.1+,+(142301E52/23.:=Lfv€’—”‹‘‰‡‰•™ ¨§©¡¥¥££ ¤TTTRWZY^]]]`[`^^]]Y]V[Y`eipsˆ‡’–›œŸ¤¤¤£¢¢¢¨¢«£ Ÿ¤£žŸš•“Š†wqj_WWPKNJOSUSW[a]`_^[^ee_adeeh`bc^bc_]decfgejigkmopotonrpvxvtqw{mttqq|²Ä|mddidhlgcjhlopoqrqsnnokoqjrpmjssriy}{vx„vy{}…ˆ‰‚{…Ž†Œ’„€ƒ‹‘ŽŽ‘ŒŽŒŠ‡…„}‹€r|‰†z{{w‹ª¶¼»±®°°ÁÅÀÄÍÇÁÀÁÿ¸¾Æƾµ¶»ÁÇÆ¿²¼º»»¾ÃËÉÉËÏÍÌÍÊÂÇÎÓÏÍÈÅÍÑÊÊÐËÇËÎÏÐÕÎÎÌÕÔÑÐÑÐÐÏÌËÎØÙ×××ÖÚ×ÞÜÒÜÝÚʼnE772-,,.+3?:628*-/2-=340/151,46:;D[ny‰••–—ŽŒŠ‡…ˆˆ”™¢¡ £¦££¦¦£¥¢¢XX[TXa[cY]U[Y[_^\]XZZ[XYbgqvƒˆ‘•¡™šŸ¡¤¡£  ¢¡¦¡ž¡¡¢ š›•ŒˆwpiaYSLLMKJTWV_\[[_^^a_^b\aifhbfffd`b`cgeeegehkimljotlqpurqwpqrrqnpjos‡¼¸xgcfggkljdpjnsrjrsmsmqtrqrurnnqpmozz{wƒ|oyŒ‘‰ƒ}ƒŽ‘‚ut‡•Ž…†’™ˆˆ‘†z‚ˆ~xu‰‰v~|¢¼Ã½¹­µ³¹¼ÇÇ»Éɼ½ÃÄÁº¶ÄÅÁ»ÀÂÁÀ±¬µ»ÂÄÄÆËÍÎÊÍÏÈÍÍÉÄÈÎÎÒÎÅÅÑÌÉÐÎÊÍÏÑÑÓÎÎÌÎÍÍÍÏÍÎÑÍÉÌÔÔÓÕÕÖÙ×ÞÛÕÚÙØ×°V><@BBLPZ\bmu~†‹Ž–•—™›™›™›™›››™˜™˜›••“‹ˆ}tk^QA:1.-1-.0&0*(-+/AHTZlvu}‚ŒŠŽ•’‹‹ˆ‹‰ŠŒŒ•‘“”—›™”€gC6()/,+-.)1*(1.561:932<8261626.3-40347210*0/553:62/.4,+.:1.(/24<88;31/25364>=:505)(,-6NWhvˆ‘“š”“‘Œˆ‚Œ“—›žŸ¢¡ ¡¥ ¤ž£¦£¥XXXYXY_dY[`^ZZ]ZY[YXVXUT_eoxz…Œ”˜žŸŸ¤£¨¥¢¥¥££¡¥££§¢žœ–”†wpia^WNDEPUSQVYWY][]cc`gf`cbadadjde`d`gdgafejjgjilnptrunutsstswsooosm€ºÆ¨ŒncYfjkirmdlsnqhlvphrosntommrrvq|{yrz}yyƒ{z{‡‰†ŒŠ•‹}zƒ‰…|ƒ“Š………zˆŒ}{txƒsxt}pw‡£­¶°¬¾Æ¿º¼»Â¸³ÆÁ¸µÀÀ»¿ÀÁǹµÂÁ´µ¶ÁÀÁÂÄÉÆÈËÃÆÍÏÊÉÌÎÎÐÓÉÃÓÑÎÇÀËÓÏËÏÎÍÍÎÐÌÌÎÐÏÎÍËÆÇÊÊÅÊËÐÏÒÕÕÚÕÖÚÞÝßáßÝÐ¥{aP8EJJSW]nu{€†ŒŽ‘–™—™œ™˜›¡š™›—œ™™——”‰†{qi\VA:1.---+..),&(,.-4GMXahrx{‚†‰ŽŽ‹‰Š‰Š†Ž‘ŠŒ”’•—“‰x_7,))*-++1*0-5024970/.06522591//,.6257:415,,4/75;7170.)).88Kfy†’•˜™–“‘Š…Ž“šœ›  £¤Ÿ¥Ÿ ¢¢¢¥¢¡[[X^[Z\\_WYXYZ__XZVUQYWS^epv€…••—žŸ¡Ÿ¢£££¥¥£© ¡¢¢¢¦¢Ÿš–’’Ž~~tkdUWLNKMOXVRVW[`^Z^`b_eabfeedbecefcbedh_fdllipppnprrqqtotvtvvspkioo’ÆÆ©hbhebqtafhkkkjkpuklwmtstopxvvyxs{uw{v„€ƒƒxy„‚ŠŒ‡“–Œ|{ƒ‰‡Ž…s„–’Žˆ‰Ž“‹|}ƒˆ|‚ƒzpfqpny–­¦¬¯¹´¶ÃÈž»À½²º¼½¶ºÅ¾ÀÄž°¬¹¾À¿ÅÅÇÄÄÀÆÉÊÈÃÆÊÌÊËÍÊÌÏοÊÑÑÎÆÈÍÎÍÉËÍËÉÍÌÌÊÌËÉÌÍÊÈÊÎÏËÍÒÕÔÔÕÙÙÖ×Üßßâãàß̤mI7>HKQUblxyƒˆŒ‘‘•—–š–˜œ›šœž˜œ˜›˜•“Ž‚‚|oi[TF96/.+/20(-'%()(*36CN[ajpw}~ƒ—žœš“Œ„Š‹Œ•™––’~gB1++()+0')-1024/3>;7034877:6/42+465:788.*2/-577<;000,%!(.2E\s€Œ“—–•ŽŠ†‡‰•šŸ ¥£¡¢  Ÿ¡¡¡¡ ^^\ZZY[\_YW\]ZZ^]]WXW[\UZelp|ƒŒ‹‘”— ¡¥£¥¥¤¤£¤ ¥ ¢¨¥¢›™’‹ˆzrib[QMGJOQOWYQUV`^]`bdb_`bbgddegiejefefdifllmmqmmkkqoopqlrruolljhjov«Î¾£tbja`egggmmknknpmlrhhotqsupw}zzvt€zwv{wx‡„†ŠŠ‘Œ’ˆ|{‰‡ƒ‚‚†’‹…„‡ƒ…†‰ƒzv…„xnloro¯·­£­¼Á¶ÀÊÈÀ¹»À´³µ·Á»»ÂƼ·³±«³¾ÇÇÂÀÅËÄ»ÀÄÈÈÅÃÂÌÏËÍËËÌÎÅÂÈÑÐÊÉÆÊÎÌÊÌÎÊÆÊÆÈÃÆÃËÐÑÑÎÎÑÍËÊÒÔÒÔÕ×ÖÔ×ÞßßáäáÜÌ¡a87EGOXbo{†‹’–›•š›—™™š™™š™˜šš˜˜“‘Š‡ƒ{ok^SK@15/,0)*2,+)(%('(-6=BKW`mvˆ†“—™•”———˜—™•œ—›Ÿ››Ÿ—ƒ€}qlbRC=72-+)).0+,&1)%'$'-5BOTc„¦ÃÂÉÒÚÚÛØÐꛬ³ÇÄ«•‘ˆq[5,+'&*/-)9353/76/7:5720-8379<74.900;745+--675<3072140.'(,;Pe{†––•‘‰Š…†„“™¡žœ¢ ¢Ÿ ¡žšœ  ¡Ÿ``YaY\X^]WZXZ][[YVX\TOPW[bjs€‹—•šŸ£¢¢¢¥¢¤§ ¥£¤£¤ ££™–‘“‹~ztneYQONILOTUWV^`]]bZ[a\^a`edaeglfadhcglfgmoljmfokmqlqousttqplmjofky³ÕÇ­Œw`cfpijhbfiiisnlinrpqrqpmlxvnu~tut|}€‚‡‰ƒ…‰Œˆ…ƒˆŽ†Š|‚‘‡‡€ˆŽ‡‰’Š…|{y|}mgfkz«¸µ³µ¹¿»¶ºÁ»¶¿½½±»¼½º·¸Â÷¯±¬¬·º¿ÀÇÈÇÊÅÃÃÄÉÈÂÁ½¼ÆÊÊÇÉÍÐÎÏÌÈÈÈÌÊËÌÌÌÊÈÌÎÈÄÆ¿¿ÆÍÌËÍÎÎÑÑÔÓÎËÎÐÌÐÓÒÒÒÕÖÓÔÝßßàãàáܲX5=BJR_hp~‚„ˆ‘š˜–•—•˜›š—š™•—›—šœ—”‹‡~vg\R>>2+..,1-(0*),&(("'-.=Nh›¾ÉÉÓØÝÙÕÕÔÏȾ¹ÆËÓÍÀ©“€Y?/-,.**,1.0-(106718479567;AA:960;854/-6/,0/0288;810,./,+,8M`q…’›––‹‡‰ˆ‰•šœ£¡ ¡  ¢¡Ÿ¡ ŸœŸ ZZac[W[[\XY[UWYTVTVURUSW\flw‚ƒŠ“–—œž ¤¤¤¦£¢¤Ÿ¤¡¦Ÿ£¨¢£™”“ŠŽ}|lg]XSEOJQQRY\]Y`_^^[Z`bf^hlacciaea^aejhixpoiljkignjpnootrnopqkjii„ÄÓÁ¥—rebbnmjdhiilnmslgptpsumhkkldp}ztsu~|v{†ƒy†‰€€ƒ„Š‡ƒ‰‹Œ‚uŠ‰ŠŽ}}sn†~ytmkq…›Ÿ¤¬¹²¸¼¼Âµ°ºÂ´³´¾½»¼½¾¿·±´§¡©¶µ¹Å¿¿ÁÄÃÆÈÄÃÁÃËÈÇĽÁËÉÉÄÌÎÍËÈÊÆÈÊÍÈÇÍÏËÈÄÅÃÇËÊÈÇËËÊÌÎÏÌËÒÔÓÐËÊÉÑÔÔÎÑÓÖÖÖØááàââÞßÄh33BI[]km}ƒŠŒŽ’——–•—˜”›™™››˜™™˜—™š’ŠŒ€vb^UH853'),/--+.-%"&###&2Iq®ÆÍÒÚàÚØÓÎÍÃÂÅÌÒÚ×ÚÚ×ΰpF/)+++2)(6A5*22<::547534969>BA7411;84:2.0,,2626;6610+++.6A=4988>/18054.<49678<44/.32;6E=5.*'$),,?Xiy‰‘“˜••‘ŽŠ‡Œ’˜œœ¡¢§¡ž Ÿ¡¡Ÿ¢ŸŸœžœ UUXXXU\\ZYYYX\[^\a\TSOUQWajtyŒ‹‘˜š›¡¡¥¥¤¤£ ¦£¦¤¢£¡¢ž¡—˜Œ‰€wrfa[PEBCJONQSVYZTWWZ`^]_^^`\_a`_`]^cad^ehmgegejfijnikmlnlpoihebdcŠ××É¥’{lf`eliecgmmnmqlpw|qgomuqvsnht{ztniz‚|}ˆ„‡“‹„}}‘’ˆu{ƒ‹‡‰†Š|xnnyypqnrquŠ™«­²°±¬®ÀÈÁº¹°¹«ª©«¯²¹Áƺ­®¯¹¹ºÅõµÀ¾¼½ÅÆÂÄÃÃÆÈĹ»ÈËÅÄ¿ÁÃÈÆÅÁÅÍÌÈÅÿ¾ÀÁÃÌÏÍÐÌÈÊÏÐÐÎÈÃÇËÌÎÎÍÎÍÑÑÐÐÎÑÒÐÓÑÒÐÒÕÕÖÝäÞßàØÃx?AWZmt{‚‡’‘•••›—•—›™œœ˜š—™š™™–’‘‰xoc\RB3--&)&'2$"#'0LŠ¸ÌÔÜÜÕ͸¡§ÃÐÒ×ÙÜÝÞâßÞàÞàáääêêèãÓ~*(.)+2.*+00.489376:6483610--.41072/+2407:231>61,*)=CKftƒ™˜”—”‘ŽŒ‰’—œ ¡¢¢££ ŸœŸŸŸŸŸž œ ŸœœœžVVTXV]ZY\]_\^^]a^_ZXX[TXZbltzƒ…Œ•˜¡¡£¨£¨¨¥¥¢§¢£¥¡¤ œœš‘ƒ‚~sj]XNCBHIKNRRSUV]Z\Zc`a``b``bcbe`bdba``g`dfmfkfjiijnmsqrmmlpjackŸÖÏ­« rffhajccjmqnrjckvvtrlrutwrtvwy|qp{‰ƒ}~‚‰†€ywv……~sdr†‡Œ‹Œ‚‰†€|w{…zqjnkev™¥¦®°®µµ¹ºº¬¡¡££¬³°²²·µ¹¬  ©±°±µ·»±¶¾¹º¼º¾Á»º½Æ¼Â¼¾ÈÿÂÄÅø¼Ç¼¼Áº¶¸»ÁÅÇÉÌÏÊÉÉÊÊÉÊÐÏÉÉÈÄÃÇÏÍÌÆÀÆËÌÍÍÎÊÌÍÊÌÌÊÇÉÊÎÎÏÐÔØÛààßÜؾ€LGJTjq‚ˆ™›—š˜šœšž™™Ÿœš›™™š™–’Ž…}vkg]TC02,+$)!$%&'2`œ¼ÍÔÚØÒÆ«Ÿ¯ÉÐÒÙÝÙÜÜÝàßÞÛÝÝßáâäêêåÛŸ3(**(),.*110025;556912/.+02/9.52.1/,/.94:>59-4-/.31EWq…‹•š™™’‘„‹’‘˜›ž Ÿž¡Ÿ¡ ¡Ÿž¥    ŸŸž ™ŸœYYUX[WTZZYYYY_^Z_`^UYYYW]civ}„‰”–˜œ¡¥¡¤¨£¨§§§¦¤¢¥£Ÿ œœ—“Œ„„|tdYULIBDHFJPNPYZ]_^[]]ebbhcbbib`b_bcdhc_edfhckhghhiiqsqnoogihehz«ÕÑÀ±§†wici`cd`i`hokeginw~snlmxvnkx|wkpm~~„ƒ‚Œ|tn{‚€qj]u€†‰‹Œ„‰‚{€‚zqonliw” ¢Ÿ¦«º¸³´µ²¬©¡Ÿ¢¦£¥²¸Á¾´¦¢¬­²·¹´«²¹³³¹½½¿¼¸¾¿¿ºÄÄÁ¹µ¿ÈÄÁÂÅÅ¿¾½ÄÀ¹¶µµÁÅÊËÆÈÉÍÌÈÈÊÌÊËÎÉÈÈÉÇÄÂÆÈÊÅÃÅÇÏÌÏÎËÉÍÊËÏÍËÊËÒÒÐÍÎÕØÝâáÝÝÓ²iKKUgo{‚‹‹‘š œ–˜œ™ž›˜š™—™˜•™ŽŒ…{ohYG7+'&' #"%#-Ck²ÆÐÖÖÖÍ»¡·ÎÓÒÙÙÛÛØÙÚÙÚØØÛÞÜÞßâééæÞµA'**,,*),4..05138/-##"#*7_¤ÄÏÕÙÑ˺žš¯¿ÆÕÚÙÛÚØÖÕÔÒÑÒÔÖ×ÓÎÉÊÔÔÞàçêàÎ,()-*-+./11367.70222.+.34/11.&+..8608;96:2160..?Mj~Š•›Ÿ••”ŒŒŒ”—™¡Ÿ œžžš›œ Ÿ¡œ žœž›žŸZZ\[`[[`cX]]]a``c\b__VUY]hkly~Š‹•”™¡¢ªª«¥¥§©¨¦£¥£§¤¢œš•’Œ„ƒ{sl\SNIKMJHOPMWS[Z_\a]df`cab`hgfibfccadgieeeedfnkprprsmtsqqynjiq°ÙÒ¾·±Œ„q_]\b`lidghifprvotqeYbppjlz€€~~~‚†„xr|u|uqrv|…‡ŒŠ…xuryˆ‰~vpovnhi‰”ž¨ª«¯¯º±®¨¨£ž§¢¡¤¤¯¸¹« ¢¯¯º¯®²µ²¸¸µ¬¯­¶¸³¾ÆÁ¹ÂĽ²µ¼µº¹¼Ãú°·»¯ª³ÂÅÉÈÉËÉÃÂÂÇÆÁÄƾ¼¹¾ÄÉËËÈÉÆÆÇÊÉÉËÆÆËÊÌÊÌÐÓÏÎÏÎÐÏÏÍÊËÈËÌÊÌÐÏÍÐÔÖÕÙÞÖĈQWhx~…’’––›š˜šœ ž›š›šš“–‰‚uli_b:*%!&*Cq¨ÉÒÜÙÑÉ´œ“²ÅÌÔÛÜÚÙ×ÖÕÒÑÒÒÒ×ÓÎÐÊÈÍÔ×ÝßåèâÓ’/-,*)+-),0/18821<;:0/.0,/01+/&(12424/<67265//38Eapˆ‘˜›™•Ž’Ž‘•œœ  ¡œŸžžž¡ŸŸž›š››žšžž__Y\Y_Y\]]___a\^`a`^b_Y[[dkr~ƒ„‰‘”—š¡££ª¦¤§¦¦¨¦§§¨¨£ž˜—š‡€uqk`WLFDIFMNSOXX\\\abcdabd`bdbdhcdcgicccfeejgihjnkmpmjoskmnkleg|Å×ÎÀ»¡¡j\Za^ccbeclkpjkqqn_X_luunsv~{{ƒƒ~x|}~~~slhr}~€‹€tpvƒ‰~sptjfjtˆ™£ž£°­®²³µ©¨ŸŸ¢ ¥©§³³°¦—¢°¶»µ¸°«®µ°®´·¶µ»À´²ÇĹ´¿ÃÀ¸¶¸µ³¹·¸ÃÁ°£®¶¹ºÅÉÉÇÇÇÈÇÁ¿ÄÈÅÅÈþ»¹½ÇÉÌËÈÈÄÈËÊÌËÍÊËËÌÏÍÏÐÍÊÇÉÅÈÇÆÈÈÌÎÍÏËÑÏÏÑÑÒÔ×ØÖШk^mv|ƒ‡Ž•—ššœššœšœ™ššœœŸ•“Œ”‡~qp[TF2,($&/M†¶Ë×ÝÙÍÀ«˜–¬ÆÍÕØ×ØØØÖÔÒÒÐÐÐÎÓÐËËÈÍÐÖØÛÝäçåÕ’,(&('*0/03.1201675./,.2115*/*-%/-3+0-17744-.,/>VoƒšŸ›™˜‘‘Ž’“—œ£ Ÿžœžœ™ŸœŸŸœ›ž››œ ŸœŸŸ¡\\_Ya]b`^]a`c[`]`b]_j^bbaanu{…„‘”›œŸž¥¤¨¬¦§¨©¨¤§¨¥¢£›œ™’”‹wng^SOMIMNPDQVXZ]_\_`a_^cbbc_dejdebcf_hckjflmhhjlonlpoqupnjch`h‡Õ×Éí««md[`ggcaliopockko[Vgrqyvxzuxy~ƒ~vpz~znpoy~…‰ˆzty……‰€zrwngiy‘  Ÿ  ­´­±«ªª££š™™¢®¶µ«ž§°¹··º¶µ®®²¯«±¾À»¹Ä¼¯µÁ½µ°Áü¹À·³µ¹¹¶­®´ÁÀ¾¾ÄÈÇÅÈÅÇÇÀ¾ÁÇÈÇÇÄļ¹ÁÈÈÊÈÈÅÄÇÈÉÈÎÐÎÐÇÎÍËÈƾÁÂÇÈÈÉÌÍÌÍÍÎÌÎÍÎÏÐÑÔÖ××ÕÙqjv}‚…“—–—›˜˜™›˜™’–Ž‰†{piZP?4+(+>d—ÁÑÚÙÔ慄£¶ÇÌ××ÖÕÖÖÕÖÖÒÏÎÉÃÈÒÌËËÏÒÓÖÙÜàáæãÖ“'*&)(+--265>4860-3(*+,.30.,+'/+-11/2=6631-**25Md|–—œ™””‘‹‘”šŸ¡Ÿ¡ŸŸ ¡ŸžŸžœŸ¡œ› žœ™š›ŸŸ\\_^cZ_b]^j_fb``ae^b`b]Yablw|‘“™Ÿ¡§¥¦¦¦¨¤«ª§§¥§¦¥£¡š‘Œ{pmc[UHLMLQQRQUZWZ\^`babcbgfdiedcebdbdgdgkhljgllllilopqmrwlif`c•ØÕϼ«©–‰pe^`cjlhjfniljlaS_juprusv|y}€}}zq{{wtgt}~~~‚ˆƒ|{†‚ƒ†‡zqllcp‰£©§¢¡¦©±±§¦¡¡ª¢©¸µ¦˜¥±²¶´¶´¹µ°¯ª§¬¶°¼Â»µ¼¾´­²½¾²´½Áºµ½À¸®ª¤ ³¾ÀÁÃÁ½»ÂÈÇÆÆÊÉÇ»ºÀÇÇÇÆÇÿ½¿ÉÉÊÊËÆÄÅÇÄËÑÍÍÉÀ¾ÁÅÁ¿ÇÈÌÌÎÎÍËÉÉÌÏÎÍÎÏÍÐÒÏÔØØÙÒâ}xv€‡“”•–š›™›žœš›šœœ“–Ž‡‡rlc_WG.-9V„¬ÅÕÙ×Ñȹ®£¯ÀÊÐÔ×ÕÖÔÕÓÑÑÔÏÐɾÃÈÌÊÌÌÐÕÖÚÙÜáâéäÔ’)'&))16116981;+/+-).'),530,216-.1;2636,,%'*13BWp†•šŸš™•’’‹•™œŸ¢žžŸ¡›œžŸ›žœ›žž›œœžœ›ŸŸœ^^_]]]a`c]b`fdba_f_aa_b_`empwŠŽ•šœ ¥¤¤«¨©¤ª¨ª§¨¡¦¥¡ ›’‘‹{qhcTSMNJKMNUVV[X^b^g_h__cdd_kdfbaiffca_dkmjjnflljkrmrrpnmjnhdmŸØÑÔ¸¸ž‹xnk^dhhhabqhide`RVmrsqywnr€xxuy~ƒwvyx{}yvq~ˆŠƒ‚…†•Š††€yuoebjx‰‘œ¦«¬¢¤¬¤¥£œ¡Ÿž¨¨¨¬¨°¡˜¡ª¼·²¶³¹¶²²«««±»½µÂ½´³·»·¶²¸¾±±½¿»°¹¸§œ¦©´Ã½º¼À¼ÁÄÈÇÅÉÈÆÁ¼½¿¿ÆÄÅÆÆÁ½ÂÉÉÊÌÈÄľÂÎÌÁ·³½ÄÂŽÅÍËÊËÎÍËËÄÏÍÌËÎÏÎÎÐÌÏÖÕÖ×ÖÇ©‚€„““—š–˜—šž›™››˜—”““…xk_QF80( " $)@Tj…•›™••“‘‘šœ¡ž¢£¡¢ œ Ÿ›ž›ž›™›ŸŸ˜˜›œ››¡cce`cb\dccccdb`da`_^e\W[afjq~ƒ‡Œ•›™¤£¢¨¤§£©¤¤¨ªª¬¨§©£žš—Šxsj_XTOJOQQOVWYaa^\edgebcfhlhldfhdlgjf`fdielmmqpkmnosvpstnljcdƒÐØÊÏ•’„xqke][`cabgda^kpnqqytkr~|smm}„vneq€|zwx|„{Œ‚„}yt}zƒuf\^d{”›§¡¢ž™ ­¥“”‘œ¯¶®¢“ž­¬¬­®ªª¯º¸®°¬¹¼¿º°¨ª°²´³¾¼±­¯¶¸´±¸¾«š ¨­´°·ºÀ¿½¶¸´´¹À¿½¼ÃÅÇÄÂÄÀÄÃÇÄÄÅÃÊÇÂÁÉËÊÍȹ ™š³ÄÅÈËÆÉÉÆÈÇËÌÈÄÈÊÊÉÇÇÉÉÉÈÆÈÇÌÊÌÑÔÖÒÔÚÚÔÀˆŒ––˜˜—˜™—š“—™““‰‰}tp_dqœºÌÖÛÔË¿²À¸±²ÄÊÏÖØÕÒÒÒÏÏÎÍÍÍËÊÊÉÄÇÈÊÊËÏÐÔÖÙØÚÚÝáâßÝÌl'+))012233254E00/33/-,3.7-16877859;40,# $0KbŒ–—›—•”ŒŽŽ•šŸ¢žŸ Ÿ¡ œ›ššžžšš™››ššœšš™›cc`bdcdbdbcagebd`_a_^a`^bejoxƒ‰‹–”™œ¢¡¤¦§¥¦¨ª¨§£§¨ª§¥¢žš”’Žƒzrj_XOMJOORQZTVY_^a^d^cafeegbfhjfjijcfbcdcghhrhlkqlsokwospiihfÔÒÐΰ“wwoed\\b^dhh`emmmoqnpnpvri`jw„uqejz~€~vu~€‚|u…€zsqz„|mf_p|˜˜ž¥Ÿ¦¥•ž›Ž–¢´²—’–¡²¬·­ª©©«ª°µºµµ¶»¾¿±¨¬«¯µ°±¿¹´­´·µ¶®¬¢˜§°·³µ±°¶¾Á¾¸¼»´±½Á¾¿ÀÄÅÃÆÿ»ÇÇÉÈÄÃÄÆËÃÆÊÈÅ혞¨¶ÄÃÂÇÇÊÇÇÉÉÌÌÇÅÉÈÌÊËÉÈÇÆÄÁÆÆÌÊÊÌÐÐÔÓØ×Ùͺ–Ž‘”˜›š™–—˜˜•“—”‹Œ†…~uow’µÇÓÝ×ÎǾ¶½¿²»ÅÎÐÖÔÔÕÒÑÐÏÊÉÌÎËÉÈÉÇÈÈÍÍÊÎÏÏÒÕØÚÛÜÝßàÝÜÊZ,/)&%--0..--4=67B664/12/.51302-63173,&"!+9\u„‘œ›œ˜–“Ž’š™ ¡ ¡ž¡¡Ÿ›ž¤š™Ÿ›Ÿœœœœ™˜œ—˜šaa`bbdbj`decdccibdj^]]_b\ejq~‡Œ’ššž¡¥¤¦§¦¥¦¨¦£¥ª¥«¤¤žœ•”|sja[VLIRNTOUSTW_]_[dadacabebgdcijjbiddcccehorklmnooqmrpqqldfiªßÒÔȶ zutstf_aWZc`chqmquskejqyk_\f{utughv|~€}}~ƒ|…vqlpwxzviben—›”š˜£¤ŸŸ’Œ—š–•¢§•“˜§©³²¯«¬©¯­®ª©¿¾¹¯©¹¿¶®²¬§°´³°·»±¶³´²¨”°µ·»¹¶³²°¸ÀÀ¾»º¸µº¼½Ã¾»ÀÃÅÃÁ¼ÃÇËÊÅÄÂÆÌÄÅÊÄ°©™¦°¸»»¾ÃÃÅÆÈÊÉÉÊÌÉÉÉËÊÊÊÈÈÅÄÄÄÃÁÇÈËÉËÎÑÑÓÓÔÓ˪’˜šœš™˜˜–‘––”Š„ƒ~ƒ“¬ÄÐØÛÙÌ÷¿¼¼µÀÉÎÔÕÖÑÒÓÑÐÐÌÈÉËÎÌÈÅÈÆÊËËÊÎÑÐÐÒÕØÚÚÛÝàáÜߺ>(1-*+,22,10263774772.+**--/4<1565432'##&4Rk~‹”š›˜›–‘––œž £žž£žœ›ŸŸššš˜™››š›œœš–š™›˜™™eebbcccebdbccfbbdi`_cb^^dcns}„‹‰”˜œ¡¤¥§¥§¦¨««¨§©§§¤£¨Ÿœ˜‘Ž…zvneYRIJMQMOVXVU^]]`geda`hdgfechgcbifb`b[gdllkgillkmonsolne_]jµãÖÏ»±~ulvsfc^[ee]hllhlxpccovncbhuzuuqu{zyvy{}„€Š…|sqwyxwtkfks‰™¢œ›¡¤œ”‹ŒŒ–¤©€‡™¥©¯®°²ª­¬°³¯±°²»µ²§©µ¶³¯©©¬¶·°°¾¼¶®ª¥• ´¿¾¾·¸³¯²²¼ÀÁ½»µ¹¹¹Áÿ»»¼ÂÁ½¹¾ÅÊÉÈÈÆÇÉÉɵ–•¦µ½Ã¾¼¿¾ÃÅÃÊËÇÅÊÈÇËÍÈÊÈÉÇÆÈÅÆÄÄ¿ÃÅÆÉÇËÎÏÏÎÏÑѽ–Ž•ššš•”—‘•—“—”ˆ„ŠšµÀÍØÛÓÏÆ·ºÁ¿±ºÃÇÏÔÕÓÓÑÑÏÐÏËÈÈÍÏËÉÈÆÇËÌÌÇÌÎÒÓÒÕ××ØØÝÜßßÝÞ®4).+0-343,/2.6428630.0/(.-*.521466962'#$+;_s†––œ™—–—”—™¡£ ¤ž ¡ œ š›œšœœœœœœ—›œ›™š››™—›eei_b`_iigbcbefcb`bac`Zcbgouy„Š”•˜žŸ¢¢¦£¦§©«§¨§¥©§§¢Ÿœ›’‰‡yuqgYOPIHOQRVWS]]Zbedhkfgecfefei`^jkdg_d_fdcgjflngqoolpnkhga_i®Þ×ɺžŠy{vmie\cffjkhlpjh``mne_ensvtttxwwwt{{z{~}}xoq||tslklq…”™–£©¢˜š›–‘‘Šˆ’®®ˆ‡‘œ¨ª­±¬¬¬¬±²±·¸«¦¨­³¯ª§­µ»°¬¯¯µ¸¬±Á½®¡˜¢«­²¹¿¾·¶º´³¹¸·¾½Àº»»¹ºÁ¾½¾¹¾ÁÀ¹ÀÅÉÆÊÌÈÉÆÇƵœš¤³¹Áþ¾ÀÁÃÆÇÄÈÆÈÇÇÄÊËÇÈÈÇÅÊÆÇÆÅÅÃÁÅÄÄÉÄÈËÌÏÎÍÖ˧’—˜˜›”›•“˜‘ŽŠŒ™·ÃÍÑÙ×Ðƹ´½Â¶®¹ÆÆÐÒÔÔÒÒÑÏÐÌÉÈÊËËÊÈÆÈÈËËËÊËÎÏÑÕÔ×ÖØØÚÝÜáÝÞØ”*&))/6/9<1/0.40/2046.&*),*+-32/74/3(*-&&-@Qo‹–š›š–“•—™œ £ žž £¡ŸŸœŸ˜ž Ÿœœ˜››™˜˜™››™›bbhbfcedeaaa`cb`h`bbcb`cchmv|‚‹Š•”–˜— §¤¥§¥©ª¨«§©ª§ª¨« ™›‘‹‚{spcYMOLORNVVYX\Z]]a_ddeeafeefgbabgdic`gbggiagfknjjmtlkigfb^_oÀÝÑÀ²—Š}„ƒutoahh_alfioieadhg_Zduvswtwyvpmw€|~‚{zuomr|~uxqqiis‚‡’–™©¤›‘“”•‘“›œ˜Œ†˜šœ¢¬²­«©ª²­µ±²º§ª¨¡­®¬§£¬¾¿º±«­·µ¨±³¡Ÿ¦³¶µ°¯·»ºµ¼¶±·¶´¯¯¸ÂÀ»¸³¯µ¿Á¾¼½¾Ã¾ÀÉÉÉËÌÊż³¨¤«±´»½¼ºÂÇÇÄÇÇÆÅÄÅÆÅÂÄÈÈÄÆÇÆÆÅÉÅÈÅÅÁÀÂÀÉÃÃÄÇÍÏËÔι‘”—˜›š•”•’’Ž–¬ÁÈÔÛÕÒ˾·¸Åª²ÀÈÌÑÕÓÒÑÎÏÎÏÌÊÇÊÊÊÈÇÈÊÉÈËËÌÊÎÑÑÒÔØØ×ØÚÛÝÝÞÛÞÕ/).)+-43/010,-06/6:211.0-0%,236530/3-*-38Jay‹•–šœ˜–“Ž“—šžœ¤¢¡žŸœžœ™œ›ž›šž›œž›™š›šž–—šœ™œcc``ihggecdgbdbbge^cab`ghmpx~„ŒŽ‘˜•›¤¦£¤ª©ª°©«ª©©¬­¨žš•”‹|vl`XMMOJPQUTUZbZa`\cc]_celeehief_ghcdae_dbeckliikllnlnmjib^a„×ÛÌÅœŸ†‰xxxmdlbbjhdjgeZdthYYjnsmprzunbemx€|€…}sijtyvvstsvivŒ’‹—™–œ¢ “‘–›¥¢…vz¡¤£§žœ¦««­°²¸³°¦«¯¦­£ ¬­°®±Ãüµ¬«²¨™¢¯³²µ¸²¬«°»½º³µ³´µ°§ªµ¼¼¶´¬¬³¼ÁÁÂÁÂÿÅÉËÉÉŹ£ž¯¼¼»¾¾¾¿»½ÁÄÂÃÅÆÁÃÃÄýÈÆÅÄÅÄÅÈÆÄÇÂÞ¹ÂÄÄÂÁÆËÍËÐÐÙ–™—š–“•’‰Ÿ»ÁÌÔ×ÒÌÀ³®ÁÈ»´¼ÆÍÏÓÒÔÑÐÏÍÍÍÉÈÊÉÇÉÇÅÉÌÌËËËËÌÌÎÑÒÔÔ×ÓÖÙÚÛÝÝÞÜÞÎh')+&)143-7:./21-27.21(-*.+,,04.5.5011//:I_r„Ž™™™—–‘“““— ¡    ¢ œ¢žŸžŸ›˜œ›˜š ››™›™”››š˜aafc^gaecff^eagbga^]_f\ckmnw†‰Ž•˜˜›œ£¥¦¦¥¬¨©¨¬ª«¬«ªª¥¡›š•Ž…€ulb^OJNLMLRUY[bY\]^c^gbbagkcddcgcfebebbcedhciifllkjijjonb``dÙÙÐÚ””~€~ujkjglfengb^egh_\hqf_gttogZer{yvwx{yrlkv{rrtptr{––”žœ•œ™Ž•“œª¤‹~~Žœœ¥ª¥ž–™§¯¯´¶³·¦¥£©¥¤® ŸŸª¸¹´³¿¿»¯§¢™™±¹¹³°³²±²§¯½À¸´±·³´¯±­«³¾¼³¬«³»ÁÄÇÆÄÀ»ÄÇÃÀ¶¥¤¯½À½Äļ¿¾¿¶¾½»¾ÄÁ½ÂÂÄÿÃÈľÁ¾ÄÄÄÅÅÄÄÀ¹½¾Ã¿¾¿ÂÆÈÍÑÄŸ—˜—˜––“ŽŒ›­¾ÆÏ×ÐÉź¹·ÁÀ¯²¿ÇÎÔÒÓÐÐÍÏÌËËÉÆÇÇÉÈÊÈÊËÌÍÌÍÊËÌÌÍÏÑÓÖÓÔÖØÚÛÛÜÞÝÜÇS,)/22C555450518008++4))*'(,.15543715566FRj~Œ’™”–“””’•›Ÿ¡ ¡¡ ž¡Ÿž›ž›žŸ™œœœ››››œ›œ™›™œ–›ffdfbb`^c`c`fbd^fh`_ca`gcpqv„Œ–˜˜›Ÿ£¤¤¦¦¨ª¬«­­©ª«§¨¦¢¡›“Ž‡|tm`\KOLKIMZ\WYcV_afbhbacbaehd`gehhehg`ke_ehbhkmijlmghlgj_XdgŸÙÖÌÂ¥ž—†ythfgkmemlbdim`YZopne_qqid_kv{yvtx|sqpfm{z{{wuupm€”˜”š”•š•’Ž“Ž—¡¡…x~—  ¦¡£¦¤››Ÿ±½´±¥¬­¤¨¨¤¢¦¬¬¤¦«¾¼¯²¼¸°Ÿ•”£¨³»·³«©ª¯±¯ª®º¿¶®«±²´³±¤§·¼¶±¯®²Â¿½¹¬³³°°ª¨°µº½»½¾¹·»µ³¶··¿Á¾½ÀÅÄÃÅż¸ÀÁÀ¾»ºÄÃÀÇÄÁÁ¾´½Á¿¼ººÂÆÇÍȱ”–’—–”—™¬¾ÃÊÐ×Ôʼ²µÆÇ·±¸ÅÉÔÔÓÒÏÎÎÌÈÊÆÈÊÈÈÇÇÈÇÉÊËÊËÎÍÉÊÍÍÌÐÑÓÒÔÔ×ÛÜàÝÞÝÞÞ¶B((//2/382741271.0-/++(&)-52336638<58>?EL^v†“–š–”“’’—˜žž¡¡ ¢£ŸŸœœŸžœœšŸ¡œ¡ žšš˜›˜–ž›š˜™š˜–—bbe`hbde`cbaf_abefa^e^\ffmlwƒ…‰•šš¡¦£§¦¨¨««­««ª¬­«¬¥¢œš”…€sh`XOPNOKNTUYXaY_]`ef^d``cfggfbfdg^]`faebchehjnjnkniihii`^Xi¶ÜÓÊ·¯¡‹Ž‡z}zj`jojhljinoocfhiifhnuplbpuzyv~~|xkoqsx~}zyxol|“ •’•—“Œ“”Š”˜Ÿ“”„y’˜š   ££§ ¦«¤²·ª¨¬©©§§¦¦¨­³µ¤¡¨½¶­®²«–’®²´°°¯ª®°©­±µ¬°µº·¯§±¶½²ª¨¨¶»ºµ³º½½¶³µ®›¡§¬¬²´¹¾¾Á·»°±«¶µ³¶½º¿¿¾¼¿ÈÅÆÄÅ¿¶¸¿Â¿½¼º¿½ÃÁ¿¿¼µºº¾»¸¶ÀÃÃÉʼ ™“™˜©»ÅÆÎÕÌþÀÁÃÉ¿µ¹ÅÄËÓÔÔÐÎÍÌÍÊÄÇÆÇÊÈÉÉÆÉÇÊÊÌÌÎËËÉÍÏÉÍÌÍÒÐÒÕØÜÜÝßÜÞÞÚ04//2323256:2,76,00)*)&)-44+135//68:BBDIWi~“—””“‘’’š š¡¢¡Ÿž¢›¢Ÿ¢ žœžš›Ÿ ŸŸœ™šš•˜š›™–˜œ˜šffebd``cacaabcdfejbd`_aggmst~€Š“š££¤¥¦¨«¬°¬¬«¨­±¬­­«¥Ÿ›”Š‡}tl^_LNMOPWTZ\`YZa`^ge`e`cde_cefccec__f`dfgidhhlglklgijdb`]ZvÎÝÓɹ¬œ–‹†y€{magfkgbgnnpllolbbkjqoohvwposw„yolroyƒ~~‚|{vpnz’–™˜–ž›”Ž‹‰•Œ‹‘¦¦‰sy„–›Ÿ›š™¡£ž«¯©—©±®©§§«©Ÿ¨£¦µ¶·£ª¼¯£ž˜˜ž¦­°¹²¯®­°®¯¬®´²±ª«¶·«©±À·µ®¨­¸À»³¼¼¿­¥©šœ«µ²´³¸½¾¾¹¡²¯µ³·½½¼º¿ÃÆþ¿ÀÆÈÃÃÀ¾·¸»¾¾¾Á»½Á¿¿¼¾·²¹¾¼¹»¿¾¿ÂÈƶ’”ž«ÅÈÊÌÏʼ¿»ÅÉŽµ¾ÆÇÍÒÔÓÐÏÊÍÍÈÇÈÊÉÈÉÉÊÈÉÊÉËÌÌÌÍËËËËÍÈÈÉÉÒÒÒÓ×ÛÛÜÝÞÞßÖŽ4-/-,006/:355348122-.&'1-43-3942989?:EFTds…“—”–’’‘——˜ Ÿ ¢œŸ ¢›ž¢Ÿœ™œšœžœ˜›™œš˜›˜œ—–œš˜ccg`ccagh`f``bbafeded`^eegqx}…ŠŽ“›Ÿ¥¢¥©©¨¨©¯«­­««³««§¨Ÿ™”Œˆ‚qgc\RQGNPQWZle]W\_a`be`bd`ebcfcdcfa_bf`ficchejfgjeinjifaY]aƒÒÙÕÈÞ¦¥Šƒ„rjncekc_fihgommfgksh`hqorqnpyzypjkr}x}}zpjh}ˆ”™“——”œž”Š†‰”””š•x‡ŽœŸ¤¢›™—œ¤««±—’—¥­¨£¦©®®¨¥§±·¸¬˜¥¬š“™«²°¬¬­´´±±´´±´°ª®µ°¨ª´·±«°¹¹µ©­¸Àº¶¸½Âµ£Ÿ§³ºº··µ¼»¶¶ª£«µÀ¾½¿Ä¿¼¼ÃÈÃÀ¿½ÂÅ¿¼¹µ·¸¿¿Á¾¾¸¿¼½º½¸³µ¾¾¼º·½¼½ÆÉé•«·ÈÔÒÑȾ´®ÄÇÀ»¹ÃÊÌÎÏÑÑÒÏÍÌÍÌÉÈÇÈÌÉÉËÈÇÇÉÊÎÎÌÍÌËÉÊËÉÈÈÆÉÍÒÒÓÔØÙÝÞÝÝàßÑ~+',072667?54+6;963-22,*/.21-,-3/.0>@@EIYn€Œ”—˜–—’‘––›   ¡¡ŸœŸžŸžœœšœ›œœ˜™˜›™››› š™›˜™œddgfdfccbdgcgegbfdabaf`bdmquy„‰Ž•–¢¡§¤¥§«©ª®§­ªª­ª®«©¥£ž”Š{soeZRJMQJNSTWbYZY[]_ddgfdcfcbbbcccb[c_cceadiefgijjffgdca[X\’ÓÕÒȶžµ¥‰‹‰y€vvfejdchnhkkgegnvudenzqlhj{€yqomz|x‚~}sjjtŒ•™—™™’‡„„‹—¡¤ˆsxˆ””’”™¤ œ­¯Ÿ •™™ž¨ª¨¯­³²¬¨¢¬´µ®—’™•¡¨²··¯­¦¥®¶±¯°²³¯§§°¶°¨©µ·±«ª¸¾º·º¾À½¾Áµ¨ª®±±»»¼»¼À½·»¶°°¶½¿¾¾ÂÅÁºÁÆĽÁ¾¾ÀÁ»¸²²ººº¼º»¾µ¶¾¾¼·»µ²»Á»¹º¸º·¿ÅÇ»¦±ÁÈÔÓÓÊ¿³­¾¿¸°¿ÉÈÏÍÐÏÍÍÎËÌÊÌÊÉÇÈÊÇÅÇÈÉÈËÊÌÍÌÏÎÍÌËÍÉÉÆÆÆËÑÓÒÔÒ×ÚÞàÜÞßÞÏd!$),1/11,525/3056/,)-+*3,41.2569@8>@DK]j•–˜–•‘”˜™¢¡  žžŸŸŸŸ¡Ÿ››››™Ÿš—œœ™››™›–––šž™˜aabafbdiigba^\cdaa``faagglpz€‚‹’™™Ÿ¡¢¥©©­««®­­©¯«­®¬©£Ÿœ“‘…|tmh[TOIFKMOTTT[Z][b^bbab_fef`de`bacab`ffaccjegdifihgiefaWXc§ÛÛÑÆ´´¦•ŽŒ‚ytjodbjniokkd`ckmkolrustroszwtnkx}{„~|yrljvˆ˜‘Œ”•—•œ•’‡…‹Ž’š™z{~“•œ”ž££¦ ¨¦ š¥¦¡œ ™ž«¯±·±±µªŸŸ°®®›ž¢«³®°²µ¯¤¥¦®¸¶³±´¬¬¯¬°®®¤©¹·±ª¬½ÂÀÁ¿ÄÀ¸°«°¯´²®°²´µ¾À¾¿¼À¹´¹½¼À¾¿Âû¶ÃÁÀ¼ºµ¹¼»¹³´·¹º¼½º½¹±¹¾¼µ¹·¯²¿¼··º¾¹½Áƽ¾ÇÌÎÐÉŹ¼¾ÄÁ¸½ÂÅÊÎÏÒÍÌÌÌÍÌËÉÈÉÊÊÈÊÃÄÄÇÇÇÉÌÍÍÍÍÌÉËËÏÆÃÂÃÄÎÓÒÓÓÓÔÜÝÞÛßáÞÂJ%$++)'1,',/26F6?8.13)')3/.,-0628A>DNIXkx‚•˜˜”’‘’˜š›  ¢¢¢ ¢¢ž¡œœŸžžœšžšžœ›˜œœœ›—ž—šš™dd`ececfg_da``d_lecbb^efhnsv‚ˆ•ž›ž ª¦««ª¬ª¯¯²®­¯¯«¨«£žš”ˆ~upaWRKMOLRNVX[Y\^``X]ebgcgfaadacbc^^cef^]eb`abifkrgjgea]]Zk¾ÜÖп´·Ÿ”‹‰wplmbejrrmhnacghlohprruu{ytrwrozvz}„zzskifv‹•š”—˜–—ŒŽ“„xvv‹’“—˜™”Ž›ª´©˜˜“¡Ÿ¢¡¡§¡¡¯·¸·³»¶  ¢¥Ÿ”˜«·±µ°©«±³¯­§¥¤µ¹°­®«²±¬©¨§¥°·µ¯®²ÁÆ帰«°¶¶¸¸´¶µ¶³±¹À¼¿¼¿»º¸¸º»ÁÀ¾À»ººÁÀ¿¹°±¶¹µ··¹¶¹¹º¶»»³´»º°²´­­±¶·´¯º¹¹ºÀÇÅÉÎÍÇ·»ÇÂÀÀÈÇÇÊÏÒÎÍÊÈÌËÊÊÊÉÇÅÉÇÅÇÃÅÉÉÉÉÈÉÍËÌÎËÉÍÌÉÃÂÀÆÇÎÐÐÑÐÒÔÛÜÞßàÞÛ¨3',%*0*+351++28215/4-'-(+73<3/;;G[gv‡‘˜˜—™•‘“’–˜žž £ ¥¡¡ ž ›ž œœœ›œŸ››ž››œ››œ™œ˜ž›œ›œiic`ecadb]V^a^g_eadfefbeikovz€‰‘š˜¢¢¤§«¯««¬®±¯­­«­©ª¨¦Ÿ›“Ž…{rr_[RRJGKSOTWYX_aZ]^c^]beac^cdba_dccb`b_i_hbfckljhiddfaZZ_vÎâÓËǬ´»™Œ’š}|„{m{ƒtkmibgrccknitlpsuppkr{z„wxy~~€yxmfr”Ž–›Žˆ‰…ŠŒž—‰{xz‰’““’—›ž‘’¢£š–”•›£Ÿ¦¤¨¯²ªž¥«­³­©¡•¥¥¦£²»µµ©©¥§±¯³´ª¨£­²°­®±¯­¤«§¦£¨´¸º³­¬¯·¸¶µµµµ³´·»¼²°±±²¹¼¼¾ÅÁ»··¼¿¿¾¼¿¹µ±±¶»·¬¦¯²°ºº¼¹¹³®¸·¶°¸¸±©¨¤¤§°²³¹ÃÂÌÍÉ󪪺ÇÉÃÂÃÃÉÎÒÓÓÑÏËËÅÁÄÉÉÈÈÈÇÇÈÆÆÇÇÃÆÉÉËÉÎËÈÌÊÌÎÍû¶¼½ÄÊËÎÒÑÐÔÔÝÛÚÜØÙÊh)'&$1*--3.-*443..,-)/'>0/078=63:.69OMit‡Ž”š—˜”‘•›žŸ£¢ŸŸž  ŸŸŸŸ›Ÿ›šœœ œšž››žš™œœ››™šœ˜šiig_^a_d`cccaaaa````b_bejfpq|~‡’šš ¡©«¬««­­¯°¬¬««°­«¨§žš•Œ†uocXQJGMJMLVZZVZ_bc]eec^]dc_dc_bcdebb^_g`eeaddkpkgjefka\X]zÔÛÔͺ³Â· ”“‰ƒww„‚vskonjmghmjkgos|mgbiqyxstyy€xxrgp€Œ’”“”“˜•…‡Ž¨‡y„€‡“›–”’˜—§š€…— š“’™ª¨¬­«°­³¦¥ §« –˜¤³²ª¢¤°²®ª¨©ª«¯°³³¨¨¦£³¸®°«­¯°©¦©¬©©¹³¬¬®±¸À»¸´³®°°¹¹®¨²¶´¸¹·¼Á¾º»µ¹¿À»¸¸´´°«²³²ª©­²¸¸¹º·»­«µ³¬±³«¤¡§¢£«»¿ÇÑÌþ¶®¥¨¹ÂÅÇÁÅÆÌÐÑÓÔÐÏÎÌȼ¿ÅÇÈÇÇÈÇÉÇÆÃÅÆÄÈËÈÈÉÎÍËËÌÌÏɹ·°´¹ÂÇÊÍÎÒÐÓÓ×ÚÚØØÙ¶A)$ &+.0)+0-2,02605-'(.-++3:655+4'.;P\m|‘š——–‘’•™ žŸ Ÿž œ  Ÿ ¡Ÿ¡žž› ž œžŸžšŸžœ™››œžœžšœeeb`b_aifeae]_a`_`]`af`cdkqu{‡–’—™£ª©ªª¬­°¬®°¬­­±¬©§£¡–“Œ…zsngYQNHJKQUTU]Xb[_a_cf^dbd`^bbbdbf^adc^\dfefdeignggcfhe\Z_~ÒÙÒDZÀµ“Š‘‡†„z|yrtpryggjmoagolmm`Sfuvyqp|{€xqrsjv‚‰‹Œ”›’‘‘„}Œ™¢—wz‰’˜œ•—˜“——œ¢ž’„†ˆ˜ž—”˜©°´´±¬¨ª±§œ–“—–œ¦¶±µ²¨¡¤¡§´¯¥ª¯«­²¸³®¦¤©´²¬®«®®©©±®«¤ª¬°²¬²·»¾¼º¹¸±®µ·´±«¯´¹º·º¾Â¿½¹·¸»¼ºµ±¸¹¶¯¨¤«¶¬­²·¹··¹¹´¥±³¥§°¦Ÿ—£¦°ºÆÎÏ˾³«±³¼¿ÆÅÆÃÄÈÍÏÐÐÐÐÍÌÌÇÀ¾ÄÈÇÉÈÅÇÈÉÇÃÃÅÈÇÊÊÌÊÉÊÌÍÌÎÏ̾¯³«¬¸¿ÇÁÍÍÏÎÍÓ×ØÚØ×Ö’5.#%*--)5--;3/68:623,0.,.,84<75.*&3;Jav†•˜–—’““Ž’•™šž ¡ ££ ¡œ¢¢ š ¢¥››› žž¡Ÿšœžœžœšž ››__a]^bae_db`a_b``cafaea[bjqpw‡Ž“—šŸ¢§§««¯¬«­¬««®¯®«ª§¥¡–„uqb[UNMLPRTUW^\_[`__`bddbc`b`dfbf^f_cdgbbccgghefejjicc`[Y[…ÕÜÎÄÀ»ž³›Œ”–Š„†ˆtsƒ~woutggmogeoomec_gnru…qs{~wstmhr„”Š…‰‘™”ŒˆŽ„Œœ¤†wor†”™–˜–—˜—  žŽ…‹ˆ‹ŸŸœœ¡°·´¬§©©ª›‰”¡°¶±±²¯±ªžŸž­°¯««¯«®¸´¸¬¤§©³´°«¯¨ª­§¨¬¦¨¥¬³³²²·¶¹ºµ±²´´¶º¼²°¬¹··»¾¾ÀÀ¼»·³²¶¶³··¹·°©¤°²¬¦°ºµµ·µ²£¦³©›¥¥œœªºÄÊÎÇ¿º¦¡±¾Ã¼ÃÆÆÈÇËÍÐÍÏÏÍÎÎËÄÁÀÆÆÆÈÈÊÉÅÇÉÅÄÇÅÇÈËÊËËËÍÌÍÍÏξ¯§©¥¨³ºÀ¿ËÏÍÍËÑÕÛÚÕØÌl3."&+('*(*//3033?H8,)+1.26:1>27**$0?VpŒ”šœ˜‘’‘’–œšŸ¢ Ÿ Ÿ¢ ¤Ÿœ¡¢¡ž¡Ÿ¢žž šžŸœž›  ŸœšžœœœœŸž¢¡™cc^_bb_g^mic``_ab`e`Zaaabehs}€Ž‘– £¥¦¦­¬­©°­ª¬­­®«­§¢¤–”ˆ‚xtbYOKNILONSV[[b_b`^_bdcaed_babfc`b_d_e`bdbdgidbgekdegc^[`‘ßÙÎDZ²°‹‹„Šˆsy“„zulifdhhfhwpijmrqjqw}svplipngxƒ‡”‘‡Ž˜”“‡”—’Štlu‡Œ“˜—“”“ž˜™™•Šƒ€‹’Œ“¡­¥š ³³´§¡§£˜Š¬²´³¯±±«©ªŸ˜¢¬µ³®ª®±±²·´­¦¯ª¯²¬¯«¨«¡›¥®¯­¦®³¸´´²­³¦¤±´·¸º¸¶³¬«¶º»½À½¿½¼´´«°±·¶³¸¹·²¯§­·­£²¸¶³¸´«¤®§–š¡ ´¿ÌÎ̹´«©¸¸ÄÄÄÆÃÉËÐÐÌÍÏÌËËÍÇÅÄÂÃÆÈÇÈÇÈÇÈÇÆÈÈÇÇÉËËÊÉÍÍÈÌËÏÒƶ¥£¥§¤ª³ºÁÌÑËÈÉÑÓÚ×Ó׺=-))%)*-.,/+3321:A:2&*.7,2356=730))5Gax…“Ÿœ—“““–˜›ž ŸŸ› ¡Ÿž¡ ŸŸŸŸ¤  Ÿ¡ŸŸœŸž› ¡›žžž™œžœŸŸ›š__bcge`c[a]_``[fd^fb]_^edfptyƒŒŽ™›Ÿ£¦©«ª©ª«¯«®««©¬¬ª¦¤¢š“Žˆ}ysa\ULKLPSUX[W\^^[^`adbdaehd`^aedbc``cc]ccafhgfhgkkfic`^W_˜àÛÒɲ¿¸Ÿš§¢…‚“‘‹z€…€‚yhirddkihlkelstkep‚€sd`efnwŠ“ˆ’˜Šˆ‹†’œžylqv‚‘”‘”Ž‘ššš–››“‰†‡Ž—“˜ ªœ—Ÿ­±¯ž•’“œ¦³®°·´¯¯«¤¥¨£ž¢²²°¯§«±­µµ³«¥¤¤š¢«­°²¨ ¡¬¬¬±­²·¶¦¡ª¯¯±°±·»»·¸µ«±º»¿¼¼»º¸³¯®¯¬°³³²´µ¼·«¥°·§¢·´²²®¨›¢ —›²ÁÉÎÐþ´«®¼¾ººÂÃÄÇËÐÎÏÎÊËËËÊËÆÅÅÄÄÂÆÆÇÅÈÇÇÈÂÆÉÆÉÊÈÉÎËÊËÊÎÍÊÎÊ·­¢›¥ §²ºÄÌÅÀ¿ÄÍÓÕÒÔÒ•*--%).,+-.1800+/60-42+--1-10215400->Rm•›——”‘‘Œ“–ž ¢ŸŸŸ¤¡£¡£ŸŸ› Ÿ¢¢ ›¢œž›œ›Ÿœ›žžž›ž¢ žœœ›¡œ˜__fecg^b_`dbbbade_habb_aehru{}ˆŽ—£Ÿ¥¦¦©¯¬®¬¬¯¬«¯¬²¬©ª¢œ—•ŽŠ|uqd[USQNPSU_\[\^]_Zc\ffgefdbe_`ebdga`fdbeabgggfeihhbeca^Y^”ÙÚÑ·¼³ª·¤–“‹•Ž~€vhpninnhccbeutrknw~rlfbddpˆ•—‘ƒˆ’‘ˆ“Ž„Ž”’Œ‘Žrm{„‡‘”—•›—š™˜—‰Šˆ–—›–ˆ§¤œ—¨¬Ž•¨ª¦¯ªª¬¬±¥¥««¤¦¦ž¡¦³¶±®¬««¯²°ª Ÿ•™›¥±³¯¥¤¥¥¦°²°¤©«¢£§­µ·±°°º»½¹»±¯°¸º¼¹··±´µ¯¯²²³¶²²¶¾·¹«¤¸««±²®©¥˜ ¤¹ÈÐÎÉ¿´²¯¼ÃÿÂÂÃÆÉÍËÏÌËÊÉÈÇÈÉÅÆÄÅÅÅÇÆÉÈÊÇÆÇÅÈÇÇÊÇÉÈÉÌÍÍÌÌÏÊË̽­©Ÿž žŸ¥¯¼ÉÁ¬´»¼ÉÑÑÏÔÅ](%))3)0-+3-/61,/2.0*+,1/.-1*213792>Idv‘—™š•‘“““–›œ Ÿ Ÿ¢£¢¥¡¢ ¡ žž ¡ž¡Ÿœ›œŸ™ŸŸ›šžššœžž›šŸ››™Ÿ›bb_`aa`dc_cj_``a`]f_]caajhls~‚‰“•ž¡¤¡¬«¬«ª¬¯®­¯¬¬­¬®¥£žœ•‰‚slaTXNQKNQWYY_^aaa_bcabhef`gf``c`ecbb`bcaebbdbibafghdcaXZY„ÚÙ˵ö¤²­¨“°ªˆ„š›‡ƒŠzunqtmpnaSUhnrgglw}xvqhiffr†•‘Š†‡ŽŽ‡œ…qsuu”•——’”™¡—‘•”ŒŒŽ™™œ¨¢Šˆ¦¦™•–˜‘¡¬±®®­«§¦¤¦£¬©¨¨¦§¢Ÿ¤§µ³­ª§¡©§¢¥£¢£ ›¥®¬§®©¨«¢­¦šŸ ª±§©­´³²°³»¼º»´¶­³´·¸´°±°´¯­¨¯¶¹¶¹º¶·³±°°Ÿ±«¥¡›¡µÂÍÐÏ¿µ·°¹Â»ÅÃÂÇÉÉÎÈËÌÉÊÇÈÃÆÂÆÂÃÄÆÅÅÅÆÊÈÈÈÆÇÅÆËÉÊÊÆÉËÌËÏÍÐÊÉÏƳ§¦Ÿš›Ÿ¥´¾ºžª³¿ÈÍÎÒÔ¡=(,)(;2766-,50745:.-+*&*1-.-+03::IAEXq‘–—˜˜’”’‘”–›ž™£ ¢Ÿ¡ £žž¡ž¡Ÿ ¥ŸŸ›š¢ž› ¡œ™› Ÿ¡žš›™›žš``b_b]_e[a\\__ab]bba]a^`ghov|„‹“—™›¢¤ª¬ª¬¬°ª«­­­§¨ª««§¥š•Ž†vn_VQONMMRTYX_\_`c[`acbckcdd^`edccca`ce`bgdbeehffhecffdWY\˜Þ×ÇŸ¬¬± •œ©™‚”Œ‚ˆ}pyutnaWS]rmlbjwxwwuwmg^s€Ž‘Ž‹|…ˆ‡‡“ ™qhnwy—””–—˜–“”•——„”œ”˜˜¡ž›—‘Š…Ÿ§£—‡‡•¢ ª²¯²®§£¤¢¤¥ª®©¦«¨©«£žž©«²­¦œž¥¨ª§¡§¢››¨¬®¯®¤šž¡¡ª®®²«¬ª§±²¬­¶º¸º¼·µ«®´±³¯¯®¯°¬¤§¬¸µ´±²²®´Ÿ™®£–¨¢§ž¤¬´ÈÎÊü²¨´ÀÂÀ½ÀÂÁÌÏÎËËÇÊÈÇÆÃÁº¿ÁÀ¿ÂÃÆÆÃÂÅÈÆÆÇÈÈÄÅÉËÊËÇËÌËÊÏÍÏÇËÏ»®Ÿ ™œ›¥°¾¹’‹“¨²¾ÃÈÎÕÏs,,'+,1@8/.6/15>202+0))/.30)')-3CKPOThyˆ•—˜’’’Œ–—œžž ž ¢¢¡¡  Ÿ š¡¡ œœžŸžšžŸžžŸ žžŸœ›ŸŸšœ^^b]\_df`\^a^`^d_b\^\aebffix~„ˆ—œ¢§ªª«¨ª«©¬°¬¨©ª­®§§£œ“ˆƒujfZPTKNMSQYXa_]_^]bcbda__add_cc`dafac`aciebbdfeidggae]_\]šÜÙÊë´ž‘©ž–‰‘‹†Šƒ€‡}}ypiZXaha^ger|wsnusd_w†Œ‹’Œ‹Œ€‡Š…—Ÿ’tnoq‚Š–•‘•œ—–Ž“‹”˜ –•ŠŽ‹Ž–Ÿ¥”Š‹¦¨¤ª²²®ªª¡£¤¤¤¦ªª¨¨­¥©£ ž¥¬®«¢Ÿ¡¥§®§Ÿ¤ª¨¡©«¨¨’š £¬¬­¯«®¬­°°²©¯µ¹¼¹¸·­°­±°±³®®¯®«££¯±µ¹´®®­¦•¥¢“œŸ ©¸ÁÆÎÁ¸³µµ¹½»ÁÂÃÅÈÍÑÍÍÅÉÅÄÊÆÅÀ½º¿Á½ÃÁÂÄÀÂÇÈÆÅÅÉÇÄÆÇÈÊÉÇÉÎÌÈÎÎÏÌÉÑÆ©¤›•—œ ©±¼·~‰”¥¶ºÅÃÎÖ¹?-2-#&<7D-2.2/600.0(2()/16,,2.3:?FNOgt†Œ”—•—”““—ž™žŸœ  ¡Ÿ£¡Ÿ˜˜Ÿ¡¡ ž ž¡ Ÿž–žžžœ››žŸ£œ  ›šœŸœ›eece``]iY\b^d_a]^`c``dh_ceju}…Œ“›žœ¢¥¦ª®ªª©­ª¬©¬­¥¬¦¦¢¤¡š’‘„‚ul`XYNPNNKOXT]_``d`hhicf_^ecedbbebbcaadacdedggcikc_dcc]ZT[—ßÕƳ¿Ã¯˜¤¦ž˜¢ ’‡™Š‰†Ž…{xhfdel_WPaptpmqoqgkt‰ˆ†‡‰ŽŠ‰Š‰„†‹™nrx|‡Œ‹—“—™™’Ž‹‹“Ž–  •‚ˆ•˜•™œ•‘’˜š’¦©«ªª¨­¨¦«£¢¡¤«¬©¨±ª©ª ™¢§®´¢ŸŸ¢§§¦§§¬ª Ÿ£—“œ™¢¦¦¤ª¨±°¯°­°¥­ª¥¬ººº´³²®ª§°°¯¬®®¦¬¥¦¢«·¸·²¬¥ª“•¥—¨´ÀÈÈļ±§®¾¾ÂÀ¾ÃÂÄÍÏÏËÉËÆÇÄÃÄÂÀÁ½¿Â¼¾ÁÀÄÃÄÅÈÉÈÆÈÊËÈÅÆÊÉÈÈÉÏÍÊÏÎÏÉÍг£ š—ž§«²¼½“}‚š§¸ºÀÅÐÓ’/&&/'&).=41J:411,-++*,2/16*+1.9=LTU_p}•˜”—“–›ž ŸŸŸ¡Ÿ¡ ž¡šŸžž Ÿ¡Ÿ¡Ÿœœ¡š¡œš ž— Ÿ œ›œž›žœ™žŸaa]ca\`[\^`[[]``ac^\bdafahow~„•™›ŸŸ£§©ª¬§¨ª©©ª©¬¦ª«¨¤£™–‡ulcWVKLMMLUWZ]_[[c__al`dcbc_bbdbcae`b]aacbcch`bcihac_d_WV_¥ßκ»½·œ´­¤±µ§ˆŒ—‡‚Ž~wpjhdia]T_jtpinpi_dv‹‘…†…‹‰‚†‰……’›Œmvupz†‡‰Š“™š–’”’Ž†‚‘–˜–š‘œŒ‰’ œŸš™—†ˆž«£•—¡§«¦¡¥¤§©­¦¦¦ §©©§¤¬¬¤£ š››¡·°¦ž ¤¥¨«¬¬ œŒ˜Ÿ¦¥Ÿ¤¬¤¤«¨³¯©³°Ÿ¥²¦¢±¸¸º³­¯®¥¥¨®ª¯°®£ª­§Ÿ¯µ°­«¡¢œ™œªºÁÎɹ¶­°´»´´¾ÅÇÇÍËÌÎËËÈÈËÇĽ¹½ÂÀÅ¿½½ÀÀÅÆÄÄÆÉÉÉÈÈËÇÊÈÈÍÈÈÉÌÐÏÎÌÏÎÌÐǤš˜™£©²¹¾—{{Š–¡­¶¹ÇÌØÈY$%'$%((*3/0I@;5-,*'(3,253.+.327AJO[l|ˆ–™—’•‘Ž”Ž“™ž¢Ÿ¢ž£  ¡žŸ  ›¡ ›Ÿž œžŸŸœš™œ› ›œž š œ œ—›œ››aaa^ZZ_\]^W_[]aYW^b][_bbddpx€‡Š’”–¢¡«¨¨©ª©«ª­¬§©©«¨©¥¤ ™•‘…}vjfZXMKMRNQQV\Z]^c^b_d`aeadba^j_]aecca_a``fffgeehf_da_\UXd«ÛÉÂø©­°¬•’¬«Ž’‘yŒšŽ†}vmckgcZ]^pghkilj[YuŒ’’ŠŒ‡‹‰‡Ž‹‹zbw~{…“‹‹‰‘›™‘…‡’‰‡Ž›œ˜y˜”“–¡¢œ›•‘„†’¡¨®¦œššž¦ ›š¤­©­±¢¢Ÿª«¥¥¦¥¤ ¡¡Ÿ•š­®±ª¡¢£¥©¥œ›Žž§ª©«§©¯­¨§¥¨³¬´®£ž°«¥©­¸·µ²¯¬ª§§¨¬°¬« ¢­ª¦©´¬ª¦ —¡”§¶ÂÇÊdz¤±´¾¿¹³¿ÂÄÍÒÒÎËËÈÈÇÆÅú·½À¾»ÂÄÃÃÅÄÈÈÈÈÊÇÈÈÉÉÉÌÈÈËÍÐÎÏÍÐËÐϱ˜“™¡¥£¯·º•}€ƒ¡©®±·ÄÒÚ¹<%*&)&+)+418F740,-&++./6405-,,5??ES`qƒ•”˜œ”–”““•œžžŸŸ¢ ¡¢Ÿ¥¢Ÿ™ž žœžœ  ž ¡ ™žš›œš›œš¤žŸ ›Ÿœš› ™Ÿ\\dh_Y^^_`_ab_````___g^`ejrx€ƒŽ“šž¡£§§¨©®¬«ª­¨®¬¬®©ª§£ œ–“Œ€umb^PIMOMMSU\\]_]d`_`cgdhddea^\_bbc_ece^bdcffcdjb_ab^^YYVa´áÌÇ¿¤µ¸ª”§¡¡†˜ž‚Ž—†yikjfbcljmmhrkf]amŠ’Ž‹Š‡{Œƒ‹“–vjustv‚–‰“’”—ƒ†‘—Ž‰‹†Ÿ‹w‘œ™œ™ŸŸœ…‰Ž‘–«¦§¦ ””˜—¡™¥«°³©¡¡ ¨¢ žœ¡¤¦ £¢›ž ©°ª¦Ÿ–˜•§«Ÿ ž¤Ÿ¦¨¥¦¨««¥¤³±¨©¦¡¨®©«¤®µ°­¯§­¨¦¦¥¶¯­¤ž£²£žª¦¦¢œ—ª¯½Æ̾°ª¡¦¸¼¶¹ÃÆÄÉÐÐÏÌÍÊÊÈÆÁÁ¿À¿¿ÂÂÃÁ¿¿Á¾ÄÄÄÆÄÇÉÉÊÉÉÈÆÆËÉËÈÈÉËËÏÏÏÏÎÌÏÀž™˜¡£©¯´¹•~„‰Žš§­²³µÇÖÖš-##')'&*.2142/603.)+0/:0/22,-/=DGHYl|Œ•›—”“Ž’’˜ž¡ ž¡£  ¡¡¤¡žŸŸ››ž žžžœŸŸŸžžžœš˜œžŸœššš œž›œ__mi`_f_\]ac`a][_\b^^Zaebksu„‰— Ÿ£¥¦¨­«©¬¬«¬«®¨¬«¨¨£ ™–“uleZUMMIQTSX\^`\`b_ebad]a^bea]_`_caaa`beddbigd]a_f`c[ZXTPhÇÜ˪º¹²¡¤¨žŽ——”“†y…™‚sjtsd`killmnlflft†‰Žˆ‰‡Šƒyx‚‹Ž}mw€}u|‰ŒŽ“”‹‹‹ˆ’‰‡Ž’•ˆuŒ‰€—¢šš˜™•ŠŽŸ’š˜š£¦¤ž™‘¨ ›²´±Ÿž˜œž›Ÿ££¥ª¥ª¥ž ¯¯¤‡†‘˜ ¤±®¥¢ž¡§¦ š©¨­ªŸ©²¬¤« ¡§°«¥Ÿ¨ª©¨§±­§¢¥¨¬«¦¡™¨¢™ž—ž¡¢®ºÁÉƶ­©¨°»·ººÄÇÇÉËÍÎÎÉÊÇÅÄÁ¿Á¾¿ÃÁÁÀÁÀÁÀÀÀÇÄÆÇÇÇÆÆËÉÉÇÇÊÉÊÌÌËËÌÎÏÐÏÒÓÐϨ™šœ¢©²¹¶”„‰Ž™™©¬«®®ºÍÛÏm&'%*(.()002.25//%,%*-.584/--057DQNbz‚‘™Ÿ˜”‘Ž“–—šžžŸŸž¢¢¡ŸŸ Ÿœ››ž›Ÿ› žŸ žŸœ›œœšœšžŸ››Ÿœ˜Ÿžœ¢``_dc[[][``aa[][`]`bf^```muv‡Œ—šŸ¤¦¨«¯¬ª­¬ªª«ª©­ª«©¢žš”Š‡ule\XOLMPSRUU]]\cd[acccbdbe_b``fe_`b`bggjjcdfcbi_d`^][Y[UsÑÛƵ°¼¶ ª´¬’‡© ‹‹’ˆy{{tvqwmknfigsme]t…Ž‘ŽŠ‡‹†…}‚}“›`t‚z‚Ž‘’šŒ„‡ŠŒ‰Šš†‘|‚””“š™”Ž‡Œ›ž£ª š˜™£¡ ˜—— ¦¥­§§Ÿ–œ œ Ÿ¤ ¥§«ª«žœ¡£‰ƒ˜ª­¦Ÿ§¬¦¦¡©©£Ÿœ¢­¯«¡¯°ª¦£¦Ÿ©®§  ¡ ¥«®ª«¨£ §«ª¡š—¤˜•‹˜¥°ÁÇž´¥«¸···ÀÄÅÉÌËÊÌÈÈÆÄÄÄÂÂÀ¾¾ÁÂÁÂÂÁÁÅÃÂÂÆÇÈÈÈÍÄÉÈÊÇÉÉÉÌÉÈËÍÍÎÎÐÒÏÒÎÓÀ˜˜ž¦°µ´š†…”™£§¨§¥¬¸ÄÕݵ=&%-&*)/)205.035E)&+.+-365/-+64CFE`o€‹•Ÿ˜•””’’”›šž¡ž¡¡Ÿ¢§Ÿ žšŸ››ššœœ ™ž¡œ›žŸš›œ˜ŸŸœŸ›œœ›ž—œ™››œ]]^ab]]__]\^Ze^]\YZ_\]acdgmuƒ‡Ž˜› ¢¦¥¨«ª¨¨­­§©«««¨«ªª¨™’‘‹€ykbaXSLLTRU[\X\\]`gac\c_c^c`e]bc`cedaadegg_aecafdc`^\]YSS|ÏÔÀ¿Â¼²°¹¸ š“™‘¤“y“Œ‡‚|sutnncghgd``}‹Š”ŽŠ‹Œ‡…€ƒƒ‰†‹ƒki{w~Ž”’”‰‡•™™Ž…†Š‘‹”‹v€†‘”ž•’Ž—‚†” Ÿ¡¡¥š—™šš¢¢••˜§œž›Ÿ›•š¢¢ ¦¦¥Ÿ¦§«©©šŽ”Š‘•– ¨«³¦ž¡¤©­­¨©¤Ÿœ¥©°¥¤²­Ÿ¨­¤œ¡©¦ œœ¢¡¬­¨§¢›œ­¥¤—ž›žœ«²ÁÊô¬«®º»«µÃÃÃÈËÍÈÉÈÇÄÃÅÁ¾À¿Ã¼»¿ÂÂÀÃÅÃÃÄÅÄÆÅÈÆÇÊÊÊÌÊÌÇÊÈÊÌËÌÊÍËÏÑÒÑÑÒÏÌ£›–—ž¨´®œ‰Ž–£©¨©§—˜¨¿ÐÙד.((-1+4+1/./84/)5()2F46:373/33CDEOezŽ–™˜–’–’‹ŽŽ——›ž žŸ  Ÿ Ÿž›œšŸš™žžžž£ŸŸ›žœšœœž™œœžœœœ˜››žœš™šœ›__a`face``__h__`b]e^cdcciqsy‚†‘”–žž¥§¬©­¬¬«®®¬¬«¬¬«ª¦¤£œ’“„|smcSMKFTLSXZYZ]\a`^`f```^_bi^^dbcbbabce^cdbcccifd\^YZTRX àÔɾ¿Ê°£¾°¬š§¤“Ÿ•}™”}‚|xihmja[[z€Š‰Œƒv}‰Œ†‚|ˆŠ’yjryxuxŒˆ‹Š‘‘™—Š‡‹‹‚lsz„‡“‘—Ž –‚’—ž¡š˜œœŸ—œ˜—‘œ¨ª¦ŸŸ¥›’–Œ†‚ƒ~{Š”ƒ’‡œšŸ£Ÿ¥«¡¥¢¤£Ÿ¤©¢šŸž©£©­¨š¥«¥œ¨¬§£ª«Ÿš™¤«¦¢™’¡¢›•–•–šž®·ºÈÇ·¨©°»¼®º¾ÂÊÌÍÉÇƽÁ¾¹¹¹µ´··¸¹ºÀÁÃÁÃÅÀÁÅÅÂÇÅÇÈÈËÊËËÌÊÌÊÊÊÉÇÊÌÉËËÍÐÒÐÑÏ×ÐΪ“™›¨±¨‹“ ¨£¢ˆys~Ÿ²ÄÖÝÔ}(#)),+0-575332/:9.33FD=64=-87.1;IUm—›–’–“”™š šž œŸšžŸœšž›š žœšœœœœššž¡žœ›šœœœšœš œœžœœœž›™™^^]]b]caec_]]]b^aaa^dcfcfmvy~‡‹“—šŸ £¨§§«©­ª­¬­°«®¯ªª¤¡¢œ™–Ž€{qbcUKJLQJRTTX\a]_[\^f`_^`a\^]]__`gdeccbbb[]acg]c`][]WROUšÙÒÊÄÐË·®¾Ç­œ±²§’¨ž’‚‘›”Œ•ukkkbYXjŒˆŠ…yzƒ‡‰~€‡‰{nv~wzŒ’“‡…‰‘–„†’–ˆx|wy‡ˆ‡•š–˜”‡Œ}‰”—¥¡žž›˜™žŸ•“Ÿ˜›š  ¢”ŠŽŠ†|{u|phXY^o–©©žš¤§¤£¥ŸŸ¡¤£œ£¤¢œš¡£¤«¤¡šš£« › £¢¤Ÿ¥¢š›¤«¢šŠ˜¢œ›—‘’¤¹Á¾ÄÀ³¤¢²°ºÀÁ¼ºÊËÍËÅÿ»º»ºµ¹¸ºº¼¿¾ÀÁÀÂÀÃÅ¿ÂÅÇÅÆÇÆÉËËËÌÊÊÌÌÉÍËÈÉÊÊÏËÍÍÒÑÐÓÒÔÕǘ“™¥°¦ŒŒš¢¦™…lglpx–¨¿ÐÜßÃQ%%$)),1+186823=5:.463BD8:1/146/>Iaq†•˜˜—””‘‘Ž“—›œ› žŸŸ ŸŸœŸžœš›œ™š›œ›Ÿžœžžšœ›œžšœšžŸ›››žŸœœšœš^^``b^bbb_e_`^^^bbbahglknnzx…‹—›¡Ÿ£¨««¬¯­ª©«®««¬©©§§££ž––Š†€k]ZQJILIMMQT\\b\b\`[`da``c`b\^e`dcbca`hbca_a`^ea_\^^TPOR×ÎÊÐͽ±Áͺœ¨¶­œ™®ž…•—’‘€w‚lc[Udx‰‚ŒŒ‰…‰zz‚‰‚Žqhu€yw†“•ŒŒŠ‡ˆŽˆ‰‰‹Ž“yx€…~‡ˆŽ’¡—’–‹zu‚––˜¢¨¥žŸž”™‘ˆ˜–Ž‡’”’–“’~zƒ‹ŽŽskaKF©¥¢›œŸ¦¡žœžŸŸ¢ ¤£ £¡ŸŸ¦¢¦¢¡–œ£Ÿ š˜¤¨Ÿ¡¢œ—¤¦œ‹œ™“—©»Ã̾³°®¬¬®¶ÄÅĺÀÉÌÊÉĺ¾»º»»½»¾¹¼½¾ÄÄÀÃÂÃÂÅÂÆÇÈÆÇÅÇËËÉËÉÊÈÉÊÊËÌÊÇËÌÌÌÍÐÑÐÑÒÑÔÏ«’™¥¬žžwmeT`lu~—°ÅÖßÛ©6#()#%-.156;>0-17/2-.9HA4812-16?@Xj~—™•’“’““š›Ÿž¡¡¢ŸœžšŸœž››Ÿ˜š™šž›œœšš›šœœšššž››œšœžœ˜–œ™›š™bb`ba_cec_a_`^_`acgbdfkgiqsz‚…‰”—Ÿ¢£¥©«ª¬ªª¬¯­ª©©¬«©§¥¡œ”“‡vm]\QPJHGLXVZYZ[_dd_a`fec^__Z^^d`d``[^a`e`ebcbbaa_`\VUOMX¡ßÐÔι¶ÄË ¯±«”©¦ ‹¤˜‹‹©–’ƒ†qbY]r‚„|„‰‡†Š€x|‚Š‚fm‚~~w„•“Š…‰‹Œ‰ˆ‰ŒŠzvx€…‹‹€Š‘žŸŽ‡‰€„ˆ‘–›™ œ¢”Œ‹tlejinruv€‚›œ˜€y”œ’‹š‰{kY;}¢¡£¢¡¡¤¤Ÿž˜’›  ¦Ÿ¤¨¢£¢£§ž˜˜œ—£¤–Ž¢©Ÿ™§¡””¦•‹›•š²»ÀÊÄ­žª«­¯¿Â¼ÅÉÃÄÃÈÇÅÀ»À½¾»¿¾À¾¼¿ÁÁÁÂÁÅÅÅÂÆÃÇÅÅÆÉÊÊÈÉÈÉÍÌËÌÈÌÌÎÊÉÍÍÍËÐÏÕÒÒÒÓÑÀ“š¥¬œ‘šŸw]^gd_]nŒ¤»ÕÛÞÒx*+!"$&--6.4,0/3./0+.0<=<424AF7;@Ca|†—˜œ—“”””˜›šŸžŸŸ £Ÿ Ÿžœ¢œžšœ™››šœš›Ÿœžšš ›ž›œšœœ›œœžš›™œ—œ›š›™ee_cbb^``]b^cd^`d`bdelkilnsy‰‹‘•™Ÿ £¨©©¨¬¬­ª«««ª¨¬«¨ª¦£ž™‘‰xnb[UNHIHRMSVXYbXfdab_`aba`]Z]\cab`d^ac]aabghccja``\VTTNTœÞÚÔþÉɽ¨ª¿³–”¼«”˜¨¨›Œ’£’ŽŽƒ|g`dgx€„~€€„†|}‡ŒŽzghv€~s—“‘ˆˆ‹ŠŒŒŠƒmn}‹‰ˆŒ‡…ŠŽ›|y••‘“™œ˜•”‰qc\ckinhg[Y][ipvƒ—˜‡qw£‹“•{iOoŸ¢ £¢¢ £§¦£…ƒˆœž¤£¥¢¢–’‘”•†ayª¨ŸŸ¦”Š˜œ’‚™¤²ÁÅÀ¸²«¡°®¹ÁþÁÈÊÇÄÃÇÅÁ¾¼¸º¿½ÀÀ¿½¿ÀÁÀÃÃÄÆÅÆÅÇÆÉÆÅÇÆÈÌÈÅËÍËÌÉÌÊÌËËÉÉÊÎÌÍÏÑÓÓÔÒÑÉ£›£¨›•œ˜|fQORV]]e¯ÊÚÝÞºC& !!#%,,--+06).5-.-+47<7227343z›ššŽŠ™’Ž©¶ÁÈ¿­ª¨ªª»ÀÄÅÇÅÈÉÈÆÄÆÆÃÁ¾½½¼½ÁÀ¿ÃÀüÁÄÃÃÅÆÆÇÈÅËÉÆÅÉÊÈËÉÌÍÌÍËÉËÌÍÌËËÍÐÍÏÐÒÔÔÕÒ̯¢§¤™’™ŠeVQQPTcbco‡Ÿ±ÇÔÝÝؘ)##"#%$-+.2154+('..0619942-180;7H^w‚‘š—œ”’’•™—Ÿ ž¡Ÿ ¡žžŸ Ÿ›šœ›™œ›ššœœŸž™Ÿœ›™œ›˜™šœ–ššž™Ÿ››™›šš˜œ™``de`bde]cdbc^cbabecfgikjptt~†‹”•šžŸ¥¨§ª¦««¬¬¬ª­­­­­¨§ª£œ›•Œ„{ncZWRHDHHNVXX^Zabf`d^aaea`ae`d`]fa^^ba`_bbdae]`[a]_^XPPQ‘ÛÑËÒѶÅо£˜±ªŸ˜Ÿ¡™ƒ“©žŠ¢œ…zxw€xv~w{{~y„‡‰…z]i~zrŒ’‰Š‹’‹€†„ŽŠ†}uxŠ{ƒ†ŠŠ’™†~xˆŠ—›—˜“‹ˆu\[_w•Ž‡‰Œvtuvm`eWNbocV€‹˜¦¤§££œqfb`_hp{ˆŠ‰•¡¬ ›œ˜”’vli™ ‘€™¡¢”v~wU58NŸ–Ÿ”„Š˜ ¬»ÂƱ¥¤°¤£ºÄÁÊÐÌÉÌÉÄÀÀÂÅÃÁÀÁÁ½À¿ÂÂÀ½ÂÃÂÂÃÅÄÊÈÆÇÇÈÈÉÉÇÈÊÉÊÉÎÌËÊÈÉÌÌÊËËÊËÏÎÐÒÓÔÕ×Ò´¢«Ÿ”˜ŠuWOJVRZW`kp|›²ÂÐÙÚÝÂ[&'%'$%(-,43+.03*--+390663/2116=1688@L]r‹š’•‘—‘‘“˜šŸŸ£ šœ š››Ÿšž¡šŸ›ššœœž›œšš™›š™˜šš˜ž˜™ž˜›™›š™™—•™š™–ccbaa`afac`_^aebg`]adccikot}„ˆŒ”•™ž¢¤©®¬««¯­¯±¬«­ª©¯©¨¦¤œš‚{ndZPJCKNNURRVWY\]a`bga`]`ee^d^d`ebdbfebfcbcbb_dac[WWTMOPŠÙÛÚÇ·ÉÑʳ¶Á»®Ÿ««›€‘¬—ˆ‡¥¢‹†…‡wvqv€uwynx|}‰‡…qeyuvt’ŒŒŽ‰ˆ…€ˆŠˆ„{sn~}……††‡ŒŠ‘‚y‚Š•—•“‘“™™~kgv†Š‰’Š|ƒ}{xwhmhoe[QM8T€˜¬«¥¨¦¨£›„z‚‚wor|u}shcXix€’—’«šŠ~nfg[CPbZ?Ao}q`2"/{¤›“• ±ÃÅ´œ™£¢¢ª¶¾¼¹¼ÄÈÅÇÈÆ¿ÁÁÀÄÃÂÂÀÂÄÂÅ¿¼¾ÃÂÃÅÂÅÆÉÆÇÈÉÇÈÉÉËÇÇÍËÈÌÎÎËÊËÊËÊÊÊÊÍÌÍÏÐÕÓÒ̽«Ÿ–’lVKSXV[Yi_amvˆš´ÆÓÙÚÜ®B' '&.<*,-1/-/32-**'-666=783.-59JUh{“–—““““”—›œ ¤ ¤ž ž¡ ¢›¡ ›žš›™›žž›šž™œš›š›šžš—™˜™™™›š—™š™›˜š˜•™š—“ccd```ccbfd`^babgcacbiejsnw|„ˆŒ”œ£¤¨©¬«¬ª«±¯®­¬«­­ª«§ žš–‹ƒxqcZPLEEOKQORT]Zaa^^g^\_cbdced`beee__hce`afedb`e]_YZVVMQQÖÝÌÃÍÒÅ»²Èŵ¡±¹¤‰—™€†¥ž“›‡ywos|xtroszz€‡‚ikl{xt~‰ŽŽ‡‹‰ˆ‡ƒŠvpu}x†~‚ƒ„…‡ŠŠŠ†}Œ’Š”“”““Œzq~Ž“Šƒxqpnjlg\]XUYZbK:E}¦«¤Ÿ£¡Žr‚Œ…†‹…„shSEAEQ\ogbrgV`a_WX318AE24S^F*!,Y’•›°ºÆ½¨š¡› ´µ½Å¿ÀÀÄÄÅÇÅÁ¾ÂÂÁÆÅÂÅÃÃÁÂþÀÀÀÁÁÄÅÅÅÈÉÈÈÆÉÇÇÊÊÈÆÈÉÊÍÎÎÌÇÉÌÉÎÍËÌÍÌÎÐÔÔÎÁ¬¢ž“‚hXYOLT[cV\^]fx…ž²ÀËÔÙÚÊh(,*$$).///4--.6-))*)+3363/4-0016Edv†––šš•”‘”—¡¢ž ¥ŸŸ¡ Ÿ¡žœŸ ŸŸŸ›š›žš››žššœš››œœ˜š˜›—›››™›–™ššš˜˜œš—bbcbf`a`a_el\bdjkfeighhirt}~ˆŠ‹’™ššŸ¥¦¬ª°¬ª®¬°¯©®ª««¬§£¥¢–’‹„smbVSKGIIOMSUV[b\Z\^]`bc^jegjc_^eikbbebbc`be`bcgca^XXVQRT|ÜÖÁÒÖʶ¿É˼¯¶µ³”¤“‚w™¢‰¡±•€nmpgj~{tsqx„…‚q^fs~{ˆ‹‰‡„‰…ˆ…‹‡†lr{ƒ‚‚…Š„…†€†zŠ‘‰Š‘“™•Š†vs‹“”Šˆ~qfdefkbRIE=;?HC2?y”Ž“£¦¨¢–ƒw‰†|…„z{tna_[SQWt`OEGRRQXCGCP;/,674(-@2&$+Gz¢´Çó¢—œŸŸ ¸ÃÁÊÉÅÆÃÄÅÆÆÁ¾¾¿Ã¿ÈÅÁÆÁ¿ÀÂÁÀÁ¾ÀÂÄÄÄÂÇÇÉÆÅÅÈÊÇÇÊÆÅÊÈÍÍÍÍÌËÍÎÉÌÌÍÊÎÎÏÑÑdz©Ž€qaSPVRTWX\W_dem‚š²ºÈÓÕ×Η1&$ &%$230.35)-7+())(-.57760.,.4NWh~Ž’—š’‘‘•™œ¡¢¡¡ ¡¥¥¡ žžœ¡Ÿœ›œœœ››œœœž›ž››ššš˜™œš™›™™šœ™š™œ™š™šš˜˜aagcdcfa`_dfb`_be`hfgimppw{}‚Š—˜œ ¢¦¨­ª®­«ªª°¬®®®±¯¬«¥ Ÿ—‘Ž…|ngaTJNFDLNTSSZ_Ze^_]Zc_`fcecc^`d`e_aabcf`dabfd`a\][`UOPO~×ÔÏ×͹ÂÍͺ·¼Ä¶¥°§yƒˆ‡‹~š¦§tselrox~xw~ƒ~mYkowqx…‹‹Œ„†‹‡ŠŒŠ…xoty~‚†~‡…‡‰ƒ€‚{Œ’›”‰…Œ”“„l[x•™‰zj\YfkbmXOOSOIE:>HGy‘‹™›š–‘‰Œ†Œ|peVRadS@21*),31Lbu†–•˜–““‘ŽŒ‘šžž¡ ¡Ÿž œŸŸžŸžžŸž£ ››œš™œœžš›™š››™ššœ›™œš–˜™œ›˜›œ™™™›˜š˜eefcccedebe`_g`ddaihlgiijxw|„“ššž¡¦¬¬¬­­­­¬³®®­­¬°¨ª§¢ž—“Š„|of[RIKEKNPTPR\a][^db^_ba`eccg`_fgd`_c[d_bbbfbac_]a^]ZURKoÃÛÚÑ¿½Í͸°ÊÉ¿©©« €z…{p“¨˜„vimijntq~v~ƒwo\_tzxw…ŽŽˆ„‰…‰ˆ‰‘‹vq~|†~…ˆˆ„Ž…zz|‰‹Ž””Œ†‡ˆ‹‡udw†’—Œ€rh\acgneaXV^hkaTGWY_}{•˜Žƒ†Š‡…~oME>ICGD>9Mby€d6:AY@@724166,(..*+.'&$#+Rw­Ã¿®•™ª½ÁÁÂÆÆÇÈÃÂÂÉÄ¿ÁÂÀÂÄÅÅÅÃÁÁÀÀ¼¿ºÀÄÃÂÁÄÇÆÇÇÈÈÈÇÊÇÆÆÉÇÆÇÍÌÑÍÏÊÎÐÍÐÎÌÐËËǬ•‡~le]ZZZXUVXWZ]X^Ycu‡š«º¾ÃÎ×ÙЂ+,(+&)-1*/1111,,2&,5;63448-,,*'06Ln}”•’“ŽŽ‹’•œ¢¡žŸŸ¡  ¡Ÿ žŸŸ œ¡ŸœŸ¡›Ÿœ››œ——™˜š›šžœšœ›š›˜™˜™˜–››—™š˜š˜cc^aakggedb`bb_bfbehklmqnut}„’“™›ž¡¦«¬­ªª¬©¬­ª¬­®«¬©ª¥¥•–…zsfTRPNAKKQTPT_a^\`__d_da_kh`b]`gfib`abdc`aedbdd_db_^XURMc¯ÞÖÃÃÑ˾·ÌÙÅ°º­£–‹zl˜’Š{vjenqmqssz|€k[aiwww“‰‚‡…„†‰Šxv€†€„‚}‡ˆ‹‡ˆ…vs‰’‹‘‹Ž‡xie{†‹‰‰‰ˆ~pX`quvwdX\qtvyme`h^g…~hpu{ŠŒ}hYWMLH<26;GQk€|e>;;9_NA5-.,(.'%*-4+)',07^‰¨Á±˜œ””¥µÃÅÈÇÉÉÈÅÄÂÃÂÅÃÿÁÂÁÄÂÅÅÂÁÁľ»ÁÀÁÅÁÄÃÆÆÇÃÈÈÆÅÈÈËÅÈÉ¿ÂÉÐÏÌËÍËÍÍÏÍÐÏȾ¯–{qb\R[T\`Z\RZXRZ`bfbq†œ§´½ÂÉÐ×Ó¦D&e&-%--08-63732307*+..7971/./$'.?[w…š–”’”—šŸ£¥¡¡¡¤Ÿ Ÿ žŸŸ ¡ ŸžžŸšœ™ž›˜™–—œ–™™š››™™œ˜˜˜™˜šš˜™žš›™˜bbbgchehbfbbcgj\`jcbknkpmrx~‚‘’˜œ¡¦¤ª«©ª°¬¬®ª®­«ª«±¬©¦ ™˜‹ƒyrdYPKGCJOQTSVZZ`fZ\bgdfe`^a^ff`ccaa`eagef_dbbelb`_`^VYTQ] ßÎÊÔÍÀ¸ÍÔ̶ºÄ¬™•—…kƒŽŒ€‡xvusnppmopyƒ€p[gnnru‡Œ‡…†ˆƒ‰ˆ‡†ku€…†€†„Œ~€ƒ†‹†‚x‹‹ˆŒŽˆpZl|‹‘Ž‚|sijt€ˆƒtoft„€zykOJFVci\X^s‰‹u\RLQfH8D85Akwƒ_C9==8DYVG+,0($%#%)GG'%2c]m‘·½±—…•¢¹ÆÆËÊÊÊÈÆÃÅÃÀ½ÂÄ¿½ÁÀÀÀÁÁÀÂÂÅľ¾¼ÀÁÁÀÂÄÁÄÅÅÆÇÅÅÊÉÇÅÇÉýÄÊÓÍÌËÍÍÑÐÐÌɹ”‚naYZUVV[^]YW]TX[Vbenpvž³³¸ÀÅÌÔÔ³X,&1-/%),2055,934.,/+)-/943.++6%-7K]|‹‘”–‘’‘“”¡Ÿ¨£ž Ÿ ¡£œ¢œŸžž¢Ÿ¡ žœž žœ Ÿœ›˜™—™˜™™˜ššœš™›š››œšœ–˜˜šš›™š^^eccdigjdbb`c_behdegkonmtw{ˆ‹“˜œ ¢¬ª¦ª¯­¬ª¬©­°©­®®ª¨¦£ ”†}vcTOFGIKPPSWV]]\\c[^abb__a[cbacgei`cebaae_hhgcbda_[bYVQMX†ÎÓÖÒ½ÊÖʹÈͽ¦ ˆtuox{t{‰~quxrqwlrsy‚~i_pxrrzˆ‰‹Š†‡‡„‡…Šumqz‚„…„†‹„ƒ‚‡|}‚Š‘ŒŒŒ‹Št`tx|…Œ‹…}vfhv„‰hahk~ŽwwsU@SRId`OK^s|o[PTGVU00EAGl†lB0;IMLPAS[eQ963-O]d/./5.%( &1^ƒ³Ã´”ƒ†™±½º³ÅÂÂÉÄÃÂÃÆÄÅÀÂÂÀÀÃÂÁ¾¾ÃÃÄÿ¿ÃÃÄ¿¾¾¿¿¿¿¿ÄÂÃÆÂÄÂÆÇÊÍÌÌËÉËÏÌÒÒÏÐͺŽc\W\]RXYXTWSTV[\`\\`hipq…—¢§±¹ÁÇÄÊÀ<00-((&0&-2023202.+/*--7.23;5903+*)(2Ur†Š“—”’—šž¢¢§¤¡¢¢  Ÿ£¢¢Ÿ£›Ÿ œŸšŸœššžšœœœ›•——š››œ˜œ–™—š–š™™–™aaccmfdghegde[d]`dcodlinnsy†ˆŠ–˜Ÿ¡§«­­­ª««¬§©®­«­«ª¨¦¦Ÿš“Šƒ{of[OMIFNPRSTZb[_]`]]a^b`^e_h^adfafi`bdjg^gdf^da__b`Y]XQRN_¸ØÍÖÖÌÀÈÒ̺Æî—™˜„xih¢›‡†•˜{n{‚‚pnf\dnvsu…„ˆ‘‹ŠˆŠ‡‰|ps|}€……†ˆ…ƒ‡‚|z…Š†Œˆˆƒ†zbm}…ƒ‡…‡„{rhj~ˆ‡{uwwdRN;F:<7=9798vŸ¹¶¢‰sj~›¸ÄÆÄ»»·¶¹¹À¿ÃÃÂÿÀÁ¾Â¿¿½½¿º¾½¿Å¿½Àº¿¾½¾ÀÁÁÁ¿ÃÂÃÄÃÇÇÄÄÉÉÆÇÈËÎËÌÊÀ `[]Z^^a][Y[YUR]Y\djt{‚‰–Ÿª°¶ÁÆÈÆÌÏ3&*+)*-2+--/326/4+,/011&+--327:76/.-27Pj€—–””–˜šŸ£¤¥¢¢¤£¢Ÿ£¢Ÿœ Ÿ¢¡¡œœ¡œ ¢Ÿœž›œžœ™›œ™ššœ–œ—™š™™—›š™—›™˜š›™——›hhijifkgigdbaccbbcblhjmmntv…„Ž“•—¤¦¨ª©¬©ª§«¬®¯¨­ª¬­©£¤›”Œ‡~n`[TPIKOKLTSU[]`[^[Zbcedabb`dcbcamb_a]beddaca\^^_Zbc`\TQSQxÕàȹÊÔξÂÔÒ¸¬¦œ‚w‚{˜”Ž‘œˆwŠ–~}}riefhmxs€…ƒ„Ž‚„Ž‰Œˆ‚umq|~z|‹ƒƒ…ƒƒƒ|yy„ŽˆŠ‹‹‰„vbc||„‚‹€}}f`osd_OLNLEGNNF@147?>A:?CVmlZz“lRd`P6KkeZCv‰ue2FIOS:,2ow9$!# "#,GVu¨Â¸žqnv›´¾ÃÆÃÀ¹½º¹¼¶¹½ÁÂÀ¿À½¾¼¾Ã¼µ¸º¾ÃÀº½Â¿º½ÀÁÁÁÁÀÃÇÁÂÃÂÈÄÆÅÉÅÄÅÉËÉĹ£|ynY\[Z^]\YZ\XW[[Zguw‚Š˜œœ£°³¾ÁÂÂÎÒ´T*$))1.)+,,-660577.+00/*.0120:A89;654;C]rƒ–˜•’Ž›œ¤£§¤¦¥¤¢ ¡¤¤¢œ¡¢ž¡ž  ¤œ¢œœœœ œŸœŸ››šœœ™œš™›œš›™œ›™™–š™™•–kkiefheeffad`]_bc^bigmnliqw~ƒ‡“’–—žž£¨ª¬ª«««ª«®«¬ª¬­«¦¨¡Ÿ›’Œ…p^]RRRJHRNTT]Y]^Z_`e\`^_`b^ad`ad`ffd[_a`ajbi^cc^d]ba[_dORPqÍÛÄÆÒ;ÃÎÍÁ¹¥‰ƒƒ‡”‹Œ‡˜šz…“€yg^`rprnzƒ‡…‚‹Œ†…„‚Š|oq}€ƒv}€ˆ‡‡†„„~{y‚Œ„‡†ŽŠ…}mV{‚~~„‹‰†„rcea_H<>;K]OLNNA=;6;;83:DVj€b]€rRYW>95?[`P\€][KK^c`N0%-xz'$"  %@XƒªÀ²™}ts|šµ»ÀÆĽº³°³µ¶³½ÀÀÁÀ¾¾¼¾¾ÀÀ¼´µ¼»¿¾¼¾À¾¿ººÂÄÁÀ¾ÃÄÄÃÄÄÄÅÆÄÉÅÇÃÅÈÈù‹h}…~b``]e`VXWV[]afn|ˆ”š ¦¢§®²µ»½ÀÇйc-*/2100-4002534134.-,)))-29JjŠs[rz\dL6.2;3GXfkPJOP]kN?4!..ti#"#!)]ˆ§¿­šˆqr†¢¶·¿À¼¹µ±³²´²¹»¿¾¾¿¾¼¿¿½¾¹¼¹º½¿¿º¼Á¿¾½»¿À¿¾¿ÁÀ¿ÀÄÃÂÂÅÅÈÈÈÊÉÈÀ¹ŸxZUvˆ‡ugbab`U]Y^gru{ˆ•šŸœ£§«¦«±µ¶ºÂÇΪ^3&(+/-4-/,.62465:121)*1)**+-3132-9GN.2DSsƒ“˜•——‘ŽŽ™›£¡¤££¥¦¡Ÿ  £¡¡ž Ÿ¡ž ŸžŸ žŸ  Ÿž£žŸŸŸ››™ž›ž›˜œšš™™›™›œš˜›œ————”“˜ffiigogihjb]ddeefdafeekhlny~„‰Œ“™—ž¢¦¥¬ª­¬ª«¬©«¨«©¬ª¨©§¤¢›–Ž„|pc]UTGEMINXQ[[\`_^cZ_c`_abae_cceeag`fca`]f`ccbbb_ccc^XXULLRƒÕàÐÂÆÑʵ·Ñħ­¥£zxƒš‚¤¡zp_luqrk{…‡ˆƒ‰ŠŠ|{wot~{}‚{‡„ˆ„}yvsy‡’’‰†ˆŒ‚ƒ„fL{ˆŒˆ††vgV]SM<0@JUajg[E>6;313554,9I`€„^jf`J0.(3./YqvA8MZlcX=5;!(.}F*(#2Z‹±ºŒ~xx‹­¿½¹ÀÀ¶³±¯¶±²»½»½¿»½¼¼½¿½¿µº½½¾¹¼¼½¾¾½½ÃÁÀ¿ÃÁÁÁÂÂÃÆÅÅÅÅÅÈÌÉļžnhfb]s„Œ„~{mb^`f`dmv…“Ÿ¥¤£¢¥©ª¬°±°ºÄÊÌ­T0.'')1-1,7.3:=;549>-*/(-/,+,4.*,/00/02OgŒ––”‘‘“– ¤¥¤£¤¥¢¥¤¢£¦¦¤¥ ¢£ ££¢¥¡ ¢š¢›žšž¡ŸœœŸžœœœ š›™™›š›—››—˜˜œ™›——™™“kkknjihgiflcik_edaageejljtr~‚…’“šž¢§§«¯ª­¬¨¦¬«ªª¯¬ªª«©¤ž˜“ˆ~rm[YTEEMLRWVXY_V[_]`d\[^^dddaedgdafadbbfcgd`a^gfdacddd^\^STSZ¬ÜÝмÅÏÓ¾³ÍÎÅ©¥©ž¤´œ…—ª“h\fly}„„ˆ‡ˆ…„Š‹€i_cqw}x}z„‡wxyz€€|wwv€Œ…}uoaZNSt€Š‹ŠoZUX>4FRB?RbUD85@B1---3Ba~vdepxia•“¤¦¦¢¥¥¦§£©¦¤©¥¦¬®·»ÀÆÌѺp.)$&'&$+-036.55188=77;681*-*--)-4;89>60+738Xpƒ“˜’’’Ž’Ž‘•ž¤¥£©£¦¤¤¢¢¤¨¥£¦¡Ÿ¤£¢  ££¢ŸžŸžŸ žŸœ›œœ›››œ›œ›š›™›™™—š—–™š™––jjijnfiggjieidbgchfhaefjjqy€‚ˆŒ’–š›£¡¨§­¬«¬ª«­ª«¬«­ª««¢ Ÿš’…|rhZZKFHQJRYSW^\[]_Xb^]d]e`^g_a_ea^e^^c[aefa^ccfdeeebcib\Y[ROV‰ÉßÈÊÓÓĶÈÑ°›¤²±ž°®ˆš›m_et€}ƒ‰‹…‰‡…‡‚xepwvzz|~€wxu~ƒ}|ws{ŠŽŽˆŽ„xmcPKXxy„uXU@:@769./=ON/&#$'-6Gfks\;:<6+2307c{pNN[zvp\2"&)_vI \˜qŒ­«•ˆyy|©»Áµ¿ÄÅƾ»²µ°ª°´·º³·±ºº±µ¶²³³±´´±±«´±º¼»»¾¿º¿¼»ºÀÁÂÂÁÂÂÀÀ¾¡Z01=Wg]?AW†Ž€sftywdvŠ–¥¡¤Ÿ£§©¨¨ª©ª¨¯¬··»ÀÃÎÏÁ|-'((%)*-/,001/78/187145722-,.-01017204,2-53Jewˆ‘”’ŽŽŽ“š¡£¨ ¤¦¥¨¥¥¤ ¡ª¦££¡¡¤£¡¡§¤ ¥¤ ž ŸžŸ¡ŸŸ¡¡ššœœœžœœ™™ššœœ™œ—œ˜™™œœ—šš™•˜kkjmjhkheeggedchahajgbegkms{†Œ’“—Ÿ¢£¦ª«ª©§°«®«¬«¬¨ª«©§ŸŸ›–‡…vhYWLGIJIPYWZ^_[^_]a^ea[abaaaadeh^^]_\_d`add`behcjljffad]ZWRUg¦ÕÒÙÓȽÈÔų«Ÿ ®¹«§¢‚ƒgaen„zz~„Š‹ˆ{jmz‚}{„}~‚yuvx{|wsx‰‹‡‰‹‰~{kjWTOcolO;9B@BEKVIDN=9:;;397,0,--+3*554221--51H`oƒˆ’‘Ž‹ˆ’œ ¢¨£§§¦¥¥©¥¥£¤£¤¦¥§¤§¥¢¡£Ÿ¢¡  ¡Ÿž œœŸ›  žšžž¡žšššš›š™›—ššŸ–˜›š•˜jjkijgigkffddccbicdbbkeihlrz€‰”•™¡£§ª«ª¬¬ª©­¯©ª«­¬«­¬©£žœ’‘‹ukYUNGCFGNOQW]YY\[]`c_]\b`ae^b`cbae^``baeba^`cddfelfejff`cZUZS_¥ÛÜÍÕÚμĽ«›œ­²µ´›®™lYWf~Œ€…†…zy‰}tibj~ƒz‚€y{zwzxsxy~rwƒˆ†Š“ˆŠˆoV<6J\\FDDOZWSEDMbgPF>D?>-+29]xb-*&#&&(HMm;`X,-*,+**3?_RJCTV`^Q=&%M|*-n¥Ÿž~ts‘¬¾ÁÄÇÆÄÀ»¿¿¼º¸¸µ¶¯µµ´µ¯³·´µ´°­®­­±®´·°ª¯µ»»½½ÀÁÁÁ¿½½¾ÃÀ´¶ŸqUMGF926GjmsmQEc‹’jt‰yoi{˜™—©¨©«¨®¬±¶´¹ÀÈʹ~;2*)4"%'**,-/25764336:;;=472/560-+-12206.0377:Sdw„ŽŽ”†•› £¨¤§§¥£ž¦§¢¢¤£¤¡§¡¡¦ ¤¢¡£¥¥¢¢ ›£ ž™¡ŸžœŸŸœ››Ÿ›ž›™™›—›™˜“”™˜—kkmjhlqkkfhfgbddiabdgef^aosx€€Š–šŸ¦¥ª¬­ª¬©««¨ªª¬««­¬©¢¡ ›”‹‡wf[SI@DKIWTWVYYYW]^\ZZ`bbZ_c`^]a`^_cg_^^_d`b`cgkigfljlekfc_\VTXÆØØÝÓÅÆн© ®¯«»°¦ s_bi‡~‚Š„z{|slnt{}„y|y{yww|{|~x‚ˆˆ‹ŠŠ‡wqcM724=C+$(,Trj@(('(+*/QXl5]D))&/-6:Hdg;0'-c¤‘l!)F‘¬’q{yw‚™²¾ÀÃÅÈÃÃÁ¿À½¼½ººµ·µ¹µ´³²³µµ³®°²®ª¬°µ±º®±°µ»½ÀÁ¾À¿ÀÁ¿½¸½¶¯¦˜qZRHP[V=ERgnue_OsŽzl|}btŽ›—–™¤¦£§ª­©¬¶¼ÄÎ̬f3%),&$ #*/-+-112448?<64EC54@62/40+/03707:4100?DVk{‡ŠŠ‰‹ƒƒ‘š¡¦§¤¥¦£¤¢¢¨¦¥¨¤¥¡£¢ ¤¡¢¢¥¦¢¢¡¡ ¥ŸŸ£žŸŸž ›žžŸž™›œŸœš›››œ›™˜™——›•™—š˜šttjmhondlhjjnhbcabacdceecnsw~‰Ž“˜Ÿ§¤ªª«©¨©©¬¬®°®«««®¨¥  ™•Žˆ€wg[MMKCHLOUUS]^^d``^[h`a`b_b```_Z]bbid_bacgbaeejcgfglggddfa]YUW_—ÌàÖÊËÔ϶¤ž¥®§¸½¥ŽjdmzŒ‰ƒ€‚‡~}wtnjpzx}ƒ€zxzyvx~~s{‡‰yumj\eciZTMF>?BTGHFAA`ZNGC==>4-*-1<_~r6)%$,&+3S`a/d8*./4=PJ=>A2--8Wi\)($6{ž‰8")Fi”y^mw†™µÅľÂÆÃÁ¿À¼½¼¾½¸¸²¶¹µ²²¶·¸·¸°¬¯­ª§«´µ´µ²µ¯¸ººÁ½À¼¿½º½º¶»¸²³¤w]LI\h_Q=FiffebJ’„no€vlgƒ“——’¢¦§§®°®µ¼ÊÏÅ™^4()))/5)'+,-24/0-/14;7>87D41//,4+-)+)/23712.1@@JWp€‰ˆ……†‰†ˆ’šž¤¥£¥«©¨©§¤£¢¦§¦¦¢¢ž £¤¤¤¢ ¢¢¡£¢ ¡ žž¢›œŸ›Ÿšœ›ž›žš™›šš˜–™›˜–—”™–gglmmlogrjnkhigb`abcecebejsw‹“›ž¢¤¨§¬¨«­ªª®­®«­®¬­¨£ œ˜”‡|tcWWMJJFLPRRSX\Y]`\]^adecf`adba``]a]h\`]dbab_efefkhlmhffebbb]VTVk­ÝÎÌØØÊ¿¾´¨«©´¸¾¯’tf€‚†„~€ƒ…{}wjktu‚~…†ˆƒ~‚}x}zxv||ˆ‡ŠygihiivtkinZWSRTKB<=BUbZH;A..4,+*-@^q…k*!"%**)9Pad0\.,*=:974;34-0'>etM'#"@„“m%@[e‡}ut`g†¢¸¿ÆÆÃÂÄ¿ÂÁ¾¸ºº¹¶²¶µ³°­¶¸¸··¶¶¯«¥¦¨°´ºµ´²µ±¹º¼½º¹¿¾¸½·°¸ÀÀ¾»®§…fQKJWnlRMX`\^aW[Š|ruvhd{Œ›˜— ¤¬­³µ»ÂÈÍ¿ŽJ4**+5(1%,',-..36213-9854@58/4)+.8/*,.+4161905BDBQgv†‰ˆ‚†…‚~Ž–ž¦¨§§¥¤¨¦¡¤§¤Ÿ¤¥Ÿ¢¢  £¢¢£¤¢£¢¤¡¢¡¡ŸŸ¢¡¡¢ž¡Ÿ ¢¡¡Ÿ žŸžŸžž› š™œ›šš›™—˜”–˜–kkjhhkmoiihdjbgddabb`]\b`jnw€Š•›œ §§ª­®­­ª¬«®©®°ªª¬©¥¤¡•“ˆ{tfVQJJIKNUUWNSW[[\]]_^]baabdg^_aabfaba`_^cd`ceglihgkhfkniffeb\YSWÂÍÝÙÐÇ»¼Âº°«·ºº©”kw™}|{‚‡„…‚}urnpzz~€ƒ€…‚~}}yu}zor‰†‡zvw|v{yvqqdfheY[UA9>DQZZO;5.+(%&"0CBYm„h-))$*0.3Vb^1e.).7<8/1;:6412>nwB-",K€ˆYBp~{‰Qcpbn¢¾Ä¼ÅÆÿÀÀÀ¿¹¸º··µµ¶°¯±²µ´·°¹´®ª¥¥¨«°µ·²°µº²¸½¸¼º¹»¶°³µ²¿ÂÃÀ¾±«“w^SKDJoucKRdaXeXp‚{u|ke|‡“–™ ©´´ºÂÅʶ‚?,,'**.*).%*01357:5611957:?4811,.))01/+/9;6=128GEDXryˆ‡‚„„š §¦¨¨¥¥¨¢£§¡££¢¥¢¡£¢¡¡ ¢£¢¤¢¤¢¤ ¢¡ ¡¥Ÿ£œ¢¢ž¡œžž›¡œšš›œ›š™—œš™•œ–’•–nnljkjfnhbififfebecc\b^cceot{†ˆ”˜ ¦¦¦¦®¬­«­²®­¬«¬ª¬§«£Ÿ›”ˆ~viXQIFIGMNRTVS[[\]YXeca_ca`ab_a_ccdb`_^_aee_eichggilhhiggdfa^_[TTc“ÒàÐÏȼÀÄÇ·µ»¹®‘i]‡ ‰uu|‚„…€tusz{~…€…‹‚{ztztmp~‹„‡‚~€~‚ztyt^_dbYNK>HFWb^^U=:,-&&)(+FBfr‚N)%/*0/(/VKZ:X8&*-;;2+0:5*)'?ppB*%5p‰}dmŽŒ{AVnqƒ±Ã¸¾ÃÃÀ¿À¿ÁÁ¿¶µ··´²²°²±´´²´º±·±­©ªª¬®´¶·¸µºµ·¸»¹¹·¹²´°¸¼¼Á¾Â¾¼¶¬Ÿƒn\\O;Ck|i[hgY_weˆ|x}yrw‡”™™¦²¸»ÇÍɼ›pC/,/&%-*-/)*14.677;94312<2675:21100,6-,,318:194:DGPbrŠ~|xy„”š¥¦¦§¥¦¨§¥¢¥¡¥¢¡ž§¥ ¢Ÿ£¤¥¨¤¥££¢¢¡£¡ žŸŸŸ¢œ š œ  ¡žŸ ž›Ÿœ›–™šš™–™š™—mmmlmkllieefggfdgdbf`b^b`ekryŠ•™ §¥¨§­ª¬­«¬®°®±­­¬¨§¦›’Ž‡€thWQJKCIKPKOWVW[[^Y^baa]baca^`_bebdcfdabc[hdehigjjnlijhojjieaa_YPYrÁâÏÑÌÀÀ½ÆĶÀº¥vWh‘“†stxyƒ{xnuu{y{ƒ…{yƒŒˆ}†‹…ƒ|~yxoz‡†…zhPFIMVXMFLHISRe\ieB931.++'%(2Fkz{@&#%%68@AG?=?J:2/FK=;117<-/-NoWJ1+M~hx ŒlFg~Ž’¸¿º¿Â¾À½Á¿¾¼»·¹µ¶µ®±²µ°³´³¸³²«©¬°­¬²´¶¸º´µ³¶º½¶·²´´º¹¹¿Ã¿ÁÃÁ¸²¢‹zf\^YGEp‡uohmfok}•Œz‚zxŽ’šŸ©·½ÅÇƬ|Y6--+0.)*+/.+,0358935112/392:7269/--000+-17698.,8;:IZmx„ˆ†ƒ{zˆ˜¥¤¨¨ª¥ª¦¦¥¡¡¢ ¢¢¤££¤ ¡££ ¥££¥¡ ¡¥¡ ¡ŸŸž¡œœž œ¡¡  žž™›œš™ š˜›œšš›˜œš˜kkkjnkilieijhgec`bdea^^a`hmqx€Š‹˜ £§©­©¬¬­®«­ª¬¯¯²°ªªª£¢˜”…|qiZSLGGIKSQS[RWW[ZZ`cbd]][_``Z`_dfa_ecchgebbdghdijkkkjomjnndgf]VWT[›ÓÖÍÆ¿û¿¿Æ¼špgŒ˜}tpt~~{|xiv€|‚„„}yw…ysw{|~„rqe^s‡ƒwofVD>C]YI@QWS_Y_`gQD630-2+*#/9Rxlq6"#(+1\b+:5;9569?hŠ†‚„ƒ~…Ž•¥­¶«‚Y@41,'(*+/-.4/+),44877B8966?98699559-(')+3,.73=3/16CHCPkv„ƒ€{}v€ˆ“œ£©§¨¦ª¨ª£¦¢ £¡¤£¥¤¤¥¡£¢££¤¡£¡ ž¡££ž ¢ŸŸ› ŸŸœ¡¡ŸŸœœžœœš››Ÿ™š˜™œ™›š——•–jjjlkplghhdcjgjeegc]_]]_]agp{…”š ¢£¥¨®«¬««²«­¬¬­¯¯®««£žš–ŽŒ„rdYOLDBDJOLTR[WVY\^_]a^`_^ab_`bdadca`_bcb``aiilglhjumlqkikmhk_d_YYUbžÛÜ×ËȾ¿¿Ì™}…¢}|xrstvpdelq|€}‚…€tpvrieo{|€…ˆ‰„ˆ‡‰}nll[A>;BPSKCIW\GL_h_dGBE6>4B60**6CQUIeF*-68AkF*-1453.2/A8;>HB:5E9okTUbŠŽyj–·­ž§»¹¸¸´´±··»ºµ¸µ³®¨¬®¯°®²¯¬­®²«²®®´­¯«®°³²´´²±¶º¿ÀÀÀÀÄÁÀÄÅÂÃÊÊÉÆÄÀ¹§™ŒpbWWXP:@gYRURG@‚‹……ƒˆ€Š˜ž¥ŽmR5(*++&*.,)03221/.089482657:7=99<8/+***.1.125235++2=?LXk~~†„‚{|}ˆ“ ¥¦©¨ª¢¥¨¤¨¢¦¤¡§¡¥¡¢¢§¥£¢¥¡ ¢  ž ¢¢£¢¢£¡¡ ¢ŸŸž  ¡ Ÿœ ž œŸ›œšžš—šœš—–˜——mmlnoklkegghfheifdacaa\\_^jr{†‘’šž¢ ª«­­­¬«­¨¬²¯­¯ª­ªª£›™‘‰ti`RL@EJGQTTSTZ]XZY[c^_\ca`b[a_\_adbcda]cadaeihfnillkoronollkhf`]YUZÕÞàÕÈÂÄÄÀÈÀš—}xyywswrnbjtw{~„‚ywnljpjo€‰Š‡{€€rx„Œ…|qhUC@@EL>=;GRPCI[bT]FFI<87302-,=CHVQcO2?FFEH-*/,..10228/+189<)-+-B_7LK?DkcE^{ŒŠu|¥©›ª´¶°³¯¯´¸´»¹¶µ¯¬ª««©©¬³°©«§­¬¯³¯­¯±¯­²®±°­²²º½ÄÄ¿ÃÀ¾Á¾ÅÃÄÁÅÆÉÉÆÂÂÁ² yg^RRQE.6~URSY@Z„†„‹‚–¢{qqX8))%)).3-)/,+.1513387:=;46<=576783/,')51041:0/516<A>GF;89698@XaNTPCB^e]X_K125-.+/0..14062.1)01%))4OEQilRSY7Lgjtyˆ‹“œ£ªµ¶²­«²³µ²·²°ª©°©§£ª³±¬¬®«­³°´±«²©°¯¯«¢¨ªº¾ÅÄÇÈÄ¿ÃÁÃÁÀÄÅÄÅÃÅÅÅÈÇÄÀ·ªš†sea\KIH8)=mY]TP5_ƒƒ…šš“Š~rhS82($',+)(,+/,47;683858;;>786:520.5.-)%*0138222/0>BBNbw„Šˆƒ„ywv‚Œ‘™ ¥¥¨¥£¤§¨¥¥¥£¤¥§«¡¢£¤£¡£¤¥¨¥ £¢ ¤Ÿ¢¢£     £ ¢¡  Ÿžœ¡žžŸšž››šš˜ž•™˜˜š—iijlhiihkfdijcdedecea]ZYUbhns|„Œ“•–¢ª¨¨©¬ª©¬ª¬¬®°­¬¬­§¦¡š—Œ…‚ul]PLCEJNSJPRT\`^_\aafdfbcgefbf__`_``da]cdgdegjighlnssoknkpjoihc_UUZ~ÒÛÕÔÙÖÇÊÄɾµš…v{€}y~€zljnyzy}xwyqitƒ|‹ŠŽ}~ƒvcZxvtlccVBOF@=:57>.-552:FT;'3fkofXI('(-.4/1.20/-4;2+-.,-)+@]XgxfVV^?[†Œ‹ £¦¬±®³°°´·¸¹´¶°©¨¬®£¦©­¯«®°³¯³´¯¯¨«°¯°­«¤¡®º¿¾½ÁÆÈÈÁÆÃÅÄÂÇÇÇÈÅÅÃÈÊÇ¿¹¯›‹xc^eU@;=+%9C?5406)2"(---/6210-85>FYm~ƒˆƒ~‚zv…•˜Ÿ¡¥§§¥©¦§¤¤¥¦¦£¥¡Ÿ¦¤¤¢£¡£¡§¡¥¤¥£¤ ¡¢ ¢£œŸž  ¢£¢ŸžŸ ššžšžœ œ™—™™—šš—•lljgmhgiifhifefb`ec`a[ZXWddo}|ŠŒ‘–œž£¦©ª®¬©©®¨©¯°­¬°®­«§žœ–†„vhZMLDCHMPLORSY]YWY[bdaa`dd\abdd_gfadca_cbehbhjicgmrprprnlnkllkb`ZZVÒÜÛÒÕÙÍÎƺ£…wquv|w|wvrxv|yzsptptx€ƒ†††ƒ~{vn[Z{qiXVSHJPMK<=:1/(*88FLHMC@DEUPG=;'5KQ8%6p[xw^W2(+*/:-,-0/50/:/))+(&)+@_kƒjWTX`Nr¦ ƒœµ¯¬©±·°¯²´¶º»»¶³¬­­¥£¥ª¬¯¬²³®²´³®¨§ ¯³¬¬ª¢§±¼¼ÀÃÂÂÆÉÆ¿ÃÅÇÄÄÇÅÄÂÅÅÆÆÃÈǼµ¯Ÿ„i\bNQ?7/'0VjbJNLgˆ‰„™’œ––‚u_;-,.%,)%(++,.,1:8968656;77I;A941-/3,-*,+'..802.575GHasw†ˆ†~y|Š“šŸ¡¤¢¥ª£¦¤¦¥¢§§¨¤¡¤ž¢¡£ ¤¤¢¡¤¡¥ Ÿ¢ž¢¡¡¢¤›ž ¢¡¡ž¢¡žž¡¢žžœ œŸŸ¡œžŸœœŸ™—š—˜˜—mmmgkigkeeiggib_da_d`YX\[cgn|~†Š—Ÿ©««¯®ª«®­®®®®®±¯­¬£Ÿ™˜ŽŒ„vj]NIGEMKPNXTY\_XW_``\_cb^eabeb_bc_cd]]_]bbedeimfikpprnpqnqnijdea_ZY|ÑÙÜÖÒÚÔÒÍû†rmjtx€z{qqy|{~yugekuy}‰Šˆ‰……ˆŠ‚}wieXNga]OG(,]Yzl]4(-/2,00040,*03*.!',&6EGQT`;+.5HUB''-Fut~€b9*),--014*/+-""!#&(6_w|mu\MZv“£‹y±˜’·µ³¶³·¶·º»º½ºµ´³«¥¤¢  Ÿ¦£¦««²¹³®¬¦™š¢¥­´¸º¼¼ÁÄÃÈÄÇÈËÊÆÊÇÈÄ¿ÃÈÆÅÌÇÉÆÌÅÄž¶¨…tg[RRB//2/+6MSOHI\‘„ˆ•™‚`G,95,.512-40+.04426;>=8;;HA@>>>530+/'32(0.8311(,38:Xjx…Žˆ€|}„Œ•šœ™Ÿ œ¢¥¢§¨¥¦£¤¦¤¦£§£¥¡ ¡Ÿ¡  ¤¦£Ÿ¡£¤¢ ¤£¥  ¢žŸ žŸŸ ž¡ž›œžŸžšž Ÿ›››œ›œ™™š™“iiokggiigjhgigl``ec_`WYZX\cit‚„‘”›£¥ª¬ªªª®®«­­«¯­­ª­¨¡™•‰|pl\RMHIKFMOTO_Z`]\d]bb`ab_^gaa`eah_cd_`dbeeafjmegloqtsrrtqrmrmjla_[ZzÀÞ×ØØÎÒÙϪxbd`jpxwopqvx~z}umipv~„Š†€…„ƒ„vzywuQ.'*1;4,;SP=90++,/.4/.*/6..)/)*&)#!"$(%._”zgi_[v•´­†w¥ž¦¼¶²³´µ´¹¼À¾¾¾¹´°ª¢¥š›¢¤¥¨«¬°µ¶²°¥¢šž¥«­µ¶´º¸ºÀÅÃÄÁÁÈÈÈÅÇÆÄÈÆÇÅÉÆÆÍÌÌÍÇÉÆÁ·­ŸˆvjZWVB4(-+))DXTQ@Q‡˜†‰¤–œœ‰X806:35,,+0,+30/:8:4:76;9;@F;9C963-3/,+'.6/3..++15:CZj~Š‹Œˆ‡y‡–˜›˜–•›ž ¥¤¤¥§¢¡¤§¨¦¥£ ¢¥¢¡ŸŸž¢œ¡£¢¥£ ¢¤£¢ ¡¡¢ Ÿ£¡ ›ŸžŸŸŸ› Ÿ›œ˜›œ˜™›™—””ffikfhhleoifmbeaaa_c_[\ZX[ctx~„‘š›¡¡¤§®©«¬¯¬¬¬­­­©¬¬©§¤£œ–ŽŠ‚wn`TLLCKNLPSVXYb^_^]cadfhd_hhce`baaeb`gfb]dcinjlgmmnotqnnrroplljba]\n¶ßÚÔÚÔÐ×ÄŒodgfioursnrqsyvrrpov~~{€wƒ‹ƒvq~}vxr]3-&)/<2CYG@20/+,0-027-/2E[PS:>JNYK<+-9cR$#)71Srˆ‡kh^_[G4#"%*$!%$$!2Zƒ›•tZSeu–³¶¤‰w•¬ºº¶¯µº¹»ÀÁÁÀ¼µ²§¨¤¤¡¡¡¥¤ª¯¬´·¶²¬¦¤ ¥ª­«±¸¶¸º¼ÀÅ¿ÂÆÊÊÆÉÇÈÇÅËÇËÊËÍÌÉÍÉÌÇù¯£“l]USG3+).'%6YQL=>;=;+4-*--,,//62/-0//5>Pgv„ŒŠ…ƒ€ŠŽ’˜˜™”“—–š›œ¢§£¤¦¥¤£§¥¥¥¤¢¢£  ££¡  ¢¡¡ ¥£¥¤¤¢£¢¢¡ Ÿ¡¡œœœžžžŸŸœ›ž›ž˜™šŸš™•›–”jjjhknhneiaefbeedddaa`]Z[diky€‡Š—™œ¢©¨«©¬¬ª®®®¯®¬ª­®­¦£Ÿœ–Ž~ufaURIBLKMPROV^e]Zcc_b`eb_deehggf_ac_aabiglfdjfjlomlnnopsqpqmmmngd^^c§ÝÝÖÚÙÑÍ­xlfgjighorouvqwnfgpz„„zz|md„{smr{whW0+%*5?[^5-.++4)***.//+5BLTPM;?HVTD8(9hS#",9+;b†bVPdmbW2%!)"#!'-O…ž¢‚e\b|ž´ª¡¤z{†¯½º®¯´´¿À¿¿Á¾µ®©¥¢¥¢žœ Ÿ¥©¬µ¹¶²°¢ž¢§­¬¬¯»»»¼ÀÀÆÃÀÄÃÆÈËÈÉÆÉÇËËÊËÍÌÍÏÍÍÍÍÉǽ´«˜‡ld[\J3'$/0,0PSKADrš˜’ž¢¨wJ30-..3+)+-3,41/2217826:A>8=>:37./6,0.'/*316-51978HWp~†Ž‡†€‚„’•™›•™•“——˜ž¤ ¤§¨¤¤¥¤¦£¥¤ £¢¢Ÿ Ÿ¢¡  ¤¡¤£¢§¡   ¢ŸšŸ ž ž›ŸžŸŸœœžžŸš™—–˜™›”•cckikngigf`fgcbeefed\bZ\[dhqz~†‰‘™žœ¤¨¤®±­­©«¨°°«¬­®®ª¨£™’‹wfbNGHHFSRQRT[][Z[`^a]fbffdddcikda_eabbcdfhgghigknlnrmsvwunompnkj^facÎßÛÔÚ×ʘkjihijhijpwurwxumt{~‚„„~„jWwzrpqqxnnuhF,'*,=W`U,-(.%+.63-*10+028IUOD9?IJD?0EcY*,<<,2QŽ„W1=?JA=.)%$#" )Uš ‡rlhwž¸´Ÿ¦¢˜{ »º±´¦¶¼Ã¼¼½·µ¬ª¬¡¤¢  žž§°´¶»±°ž˜š¢§¨§¯¯´º¸º½¾¿ÄÄÂÂÆÉËÈÉÊÈÉÈÊËÌËËÑÑÑÐÏÑÑÎËÀ¹®¤‰shXYL>-%)./.AITK>e’™“›­¢™|L,,/20*+.1,1+336145491?:=7?>DG94/*,+1.2-/2=1)--06>N^v‚Ž‹‡„ƒ~‡’–š™š•–—•—š—˜š›žžœ¡Ÿ¡¥§¤¢£ §¡¤¢¤¦¡ŸŸ Ÿ¡¢¡¡£ ¢¦ ¡ Ÿ¢ Ÿ Ÿžž œœœ› ŸžœžŸŸ¡Ÿ™œ›šœ—™š—“–eefdcicgihgaedh`cfcgc_[XY`fmv‚…’–™ £¦§ª­ª«¬ª¬¬°®¯®­­¨¨§žŸ•‰zmiTQJECNLNTQVZaZ`[edda`f^aefafaegbbeececdjdiffgjmijooqwvxrqonpmkhc_]w¹ÜÝÕÚÙɉkhpnpmrihpupmmvpt…†y}€€‚sVespnpoeUVOV?..23Q_aM2*)(&,162.1:204.38STHHEBDAB:?`W+->?7,)&+-.5BLH?V‡™›Ÿ«¥—uM1+1//+)271,.4447:?4;68569@A>5.2/,-'+')-.63.,--68COo}ŠŠ‰…~ƒ”›ž™›™—•”•”œ“••œŸ™œ›¡œ¡¡ž  Ÿ¡¡Ÿž¡ ¡ žŸ¤ ££¡§£¡£œŸœŸ¡žœžŸ›œŸ››œ›œ›š™——••gghfigjfkehhgehgbbde_e`Z\ckpw…Ž‘–œŸ¤¤§©¬®ª«¬¯©­®±¬®®«©¥¢™œ’ƒwkaQQCCGNPQOVZZ_]Z[`b^g`c_`eadfjddchdcecfbfigehdhip}|jottrpspsqppjda^j§ÜÞØÚØ»€qmmorpqsmnvrkkbm}‹|wwz€€€mXVbZ^NK@8@CAC44..Tab?-*',(,3:..7=10.402@PKI@84894566:=AB8?@:503+/.+1222:70(,+46L_t“‡†{}‹‘™›¡›œ˜•š˜–˜˜•’’˜›—˜˜™™Ÿ› £ŸŸŸ£¡¡¡¡ Ÿ £Ÿ§ £¥¤¤Ÿž  ž ¡¡  ›œœ š œœž›˜›˜œ™˜––˜˜•cccmgelfjdhghgdba^b``^Z[YXclu„…“–™ ¤£§¦«©«¯««¬±°­ª¬®¯­¨¡š“Ž‰‡ys`YPLHPQJOQTT^_]`a`eggcjdbilibhcbeegeedhdeiefabgo‹¦{lptrvoqvsnplfdb`h“ÐàÝÛÕ´yrsjptzwtspmofbhz…Š‚|yvlcgP@?:HWOQIKM[[ZC8.7Th[2-(*-&-@B7-@91*.4+/:;AL9:A54HU]P16`:+-?oŽp+-)#&%!"! %6o—§ŽsfrƒŸ´¿±¨¤¤£¥ŸŽƒˆ£¨£ž¨¶Àºµ¬¶´«««¨©«¦¨¤ª§²³®œ‰“œž¦¥§ª­¯³¸»·¼ÁÀÁÀÇÈÃÁÊÈÉÉÊÇÉÉÆÉÍÊÐÐÎÐÒÒÐÐÒÒÏÉĹª†xeaYF70&'&&,8ELO7UžŸ¨¬žˆR07:6:/:+5413A6554:3;97;AA>@;42/,.0010468867+*-16Phxˆ’Œ„‚|€”˜ ¤Ÿž—™—’™˜—–™”“–š˜—›—›œœžŸž ž¢¡ ¡ŸŸ£¡¢ ¡£¡Ÿ£¢¢ žž Ÿ Ÿ¤¡œœ¡žœ››œ›Ÿ™œ˜š˜—™˜•“ccemmiebnfileggbeabbd]a[]`dmu‡’’—œ¡¢¥©ª©¯­­­¬¬®®±®­¬¯­¦¡œ–‰„vleXUHFJMNLSTVZUX^ba^hjcdhfekkeikdcdi`becadaceiil‹¸™qnlrvrvnrrknkjlebg~³ãáÝÔ¦tuqjtt~wssrfdch~‹„„‚‚†{^K[ZPPA964DZ`c:Bj7,/3P€7)-*%$ #!#3jš Žxki}œ´´««¥¥¦¥§£”„§¯¬¢ž°ºÀ¾¼·¶±§¦§¨ª««©ª¬­«§›’•¢ ¡©¨«­®®µº¼»·ÃÃÀÃÃÈÆÄÈËÈÈÈÈÈÊËÌÎÍÒÏÍÎÒÔÐÏÓÔÍÉÿ±¤ŠzlbWL60-,*'*)7ER?A‰—š¤©¥…d93@>52*3;50/;6689869;:>C674.*+*04175>6/)-+-9PqŽ‘‰…ƒƒ†™ž £žœœ—œ—š——–“•—–””–—•˜•—™˜š—ž¡ Ÿ¡ ¡¢ Ÿ¢žŸ¡ Ÿ ¢££ŸŸ › ž™ž››››ž™™››š™™–•˜ggjfegdggfdcgbfbhc`c^^^[X`hhu‡Š•Ÿ¡¢¥ª¬©¬¬ª¯ª­²°­­­¬­ª¨Ÿ›™’‰~uo_XOIGQGMOTOX]Z\\^bafhgbjggfibjlcgbadgaccca`efo¯£wmnrmwttppspsnomgkhošÛäÜÔ¢qlupqvww}slb`qu‡„z~x„Œ…rizkg`IFQSC/-3>7.),+BF@<5622-*)02-76<58(,)*4Jbz‰‹‹‰‚‚‹š›¢¦¤žŸœ››šš˜˜—˜——š”˜˜–’“–—™™–˜•š–šš™˜™šžœžŸ  ¢ ž¢Ÿ ¡¤Ÿ žžœ œšœœ›œššš˜ž—œ™—š—š”“fflqjggkjfdedfgdcbgda][[Y^fqu…“•œŸ£«ª­©¬¬¬«¯®«­®­«­­§¥£š–Œ…‚pkcYSIDFRTSUU]`\]hedcffefgikjkdighcfbdbdabfgcgnŠ†rqoquprqrqutsusstnlllks™Øáܼ~nqtunqorssq|€|}qv„„‚†‡…‚vigjj`YS944569&($-93Zi@&'&.0GQ>07@B*),7476)+-9G:-983GHfkoyYL;:,]˜i@$%-Yƒ –„{s{’´¾ªª¯¸¹­­©¨«­™‰¦§¦¦µº¼¾¿Ä¾³ª¤¨¬§§©¦¢¥˜‘•›œœŸ¦¥¨¦¨«­µ·ºÀÁ½¿ÀÁÅÃÄÊÇÈÉÃÊÊÊÊÉÉÌËÏÑÒÐÑÑÑÑÕÓÓÑÏÎÉȽ«™†rfWPF6.&!")-0JX;L¥£¨¤„hG6<15I9-28326:5;9==97>;AB<<;0.4,*/,0042654()/575853C-(&&.(+Wn>(+.)8@>.47C3+/26=7010.C;0-0==B>AAB7>41-4+1./3365//+-38P_u…‹‰‡ƒƒ–œ¤¨§§¥£œœšš™š––––˜–•–—”‘•“–”••“––••“‘•–™˜˜œœŸ  ¡ ¡žžŸœ›œ™œš›˜™šš™œš™™•–”•—•“”eejhjehfedc^ddccdcb^ZYZ[idfhu{‚Š”™š£¦¨«¨ª­®­°®°¬¯¯­°­­¤¡›•Žor`ZQMORVUSSV[bdacefcdbcgddeceffhccdiaddfigfhilsvqtqqursuwruyytvsstsnpijs¤ÙâÍ—uzvtqqiirƒ}|z„ˆyx‡‡ƒ}tkebc^H-1102?O>+'%,((0NoJ,368>2-,5<;B=DC:80-*-02-/21570**'-8Rr‚‘ŽˆƒŠ—¥¢£¢¥¢¢¦ž œ›œ™”˜—•––—”’‘”“—•–™“”’Ž’‘‘–“–‘–”›œ ›ŸŸœšžŸ›››š›Ÿœ›™›œ›š–™›š›——™––˜˜“˜kkikhkkjde``d_hj]aeY_^^\_`dlr}‡”—ž£¨¦©ª®®¯®®¯®¯¬¯®¯ª¬¥¢–‹„zlaXUNROS[YXZ\\\a\be`dffgei`ecegiagdjdblcejidlpovtrtrlpuvxuwwtsxsuvssrnmm‰ÅâÐ~vwsntmjzˆw||€†Š{„wg`^faL8;:/0@S\.$'(#-'/EiX4FJN5*,.9B111.7646218HK98%&,7k\;fCAQG623Nš‡Q* AxŠ©…xov€¡¶²ª©©®¼¸»½´´¬¶²“™Ž”¦Ÿ£±¹ÅÆÄ»­ª¡¥¦¡£¥§—”ššžš¤¡¨¤¨ª¬®ª¬²µ··¼½ÂÂÃÆÄÃÇÃÆÈÈÈÊÌÌÊÎÊËÐÏÑÎÒÑÑÔÓÕÓÕÔÖÑÏÉ·¢‘~ib]O=5-'"&()'2G_5d­£©©ƒbmM,.1-,339?6;3:9=<=85<3.>AHJ0/*27F00,/=Q?87/',7h`-JQKH/'"$.n‘h.!4iŠ¢Šwyqz–ºª¦¥«­«³¿Á¼¹¹´¸¯‰˜†Š©¤«´»ÅÈÀ²¬§¢ ž¡ª£—™›¡ ›£¥¨ª«­ª­ª¯«±¼º·¾ÀÄÀÃÀÆÇÂÈÇÆÈÌÊËÉÊÌËÏÌÍÎÐÑÒÑÓÓÓÔÓÕÓÑËûª˜…wkYNH7-)*(*..*:V:P£©¨ª]tP/-30046677<76:59>;8<:-'14757;649:?8964<77=@981182/+.,1:8651*0-.9Ss„’‘‰…„‹’œž¤¦©¦¦¡££¡¡¡Ÿ¢¡Ÿœž›ŸŸ›ž™™™™›—˜—™—˜’”–’’’‘’‘•’‘‘•–”™–—›—™›˜›—™˜–™˜–™™›šš——–——–•’cclfggj_bjdff`ja^`\\X^WXWZ`n|}…Š˜›Ÿ£¥ª©ª­¬¯¬¯¬°¯®­­®¨©¤¢ž•“‹‡tg_XKJKMNQW_Y\\_]`^ccbdlfeegdhfhidjhldfkaiigmkhlt{nnu{tuzwzuwyyvuywywsovxw}œ·–w~yrio‚Š‚„…‡€„„‰‰ƒm^\B2-1A8'&BPcg2,(%67'(*+4IgK5$1.>VM44,;4.9*/*5XK2=N.070-B-4NS>#" $3r†Z0Tž“|ovy¶¨¡¥¥ª¯³³º¾º¸»»º®’™v€¬«·ÀÁ¾¸©ª œ™›¡¤™™›™   £¡¨©­­¬­¬²­±°¯²´·»¼ÂÂÃÁÂÃÅÆËÅÃÌËÌÉÊÌËÉÎÍÏÒÑÓÐÐÖÔÕÕÕÖÒÐÊÀ°e_XLC7,-/')$-1T[<}§§®£^m;3.70&0686<5@=BA9;8;=><28565-31.-44422.'+)2E`t‡‹”Ž‡‡ƒŽ”£¦¦£¤¡ ¤¡¤£    œ  £££ œš››œ˜šš™šš˜–”‘‘‘’‘”—’‘””•”‘’“‘•”–˜“™˜Ÿ—–›••–›˜˜™—š›–——•–ffefhgbfbffcbbd_cbc]Y^]UX[imx‡Š“˜— ž¨ª«¬­­°¯¯¬°°¬­¬­¨©¤ ž™”Ž‚tjcSJIKKKXW\\Xaba[ggafbfdaigifiliceehgeigfhgkmhmttvmupqvtzzzuyvyyx~zyxuy~~‰š‰pszvm{†…Š‰†‘ˆ€{{}u`SH1-6JC2&&+?mF2)(1D3'/,&*4I`:-);TWI9-*.7/9*+*;_@*E\2-6&+/>5Od>#! ,O}g^ršŸ‡soy„«¯¢£¡¦¥ªµµ½»¹¶¾»¸±Ÿ˜s|§®ºÂ¿¶®¦¡ ™–›–šš›˜›¡¤¡¢¤©ª­©©«®°°²¯¶µ·´½ÀÁÃÁÄÃÃÇÆËÃÆÇÇÉÊÉËËÉÍÌÏÒÓÑÓÑÕÕÔÔÔÖÒÒÌò£‘ƒn]_VL=2/),*&'0FaAh¡©­£hYB3C<1+;52;9899@;A<:<<=;97,/1532/39762,*(.4D[s|‡“‹Š†‰•¡¡¡¨¤ ££¡¢¤£¤£Ÿ¡ž£¥¦¤žŸ¢Ÿ¡ŸŸ›œ›—™œ˜œ˜™Œ“ŽŒ’”“••“Ž“ŽŒŽ’”Œ’“–—˜—™™–”–š™š›ž™™˜š–—•–ddfibicccffcaec[ae]c_]ZYX_cms~‰Š““œ¨¤¨¬«ª«¯­­®®±®¯­®­«¡¡š•€ui\TTQKKORYVY\___]`bgedggdideeigmddhecedgdimljlpprtwspppprkqjrnnnojefy|…‹ƒpm€‹pmtoz}ƒ‹ŽŒ…}€z|l_XN8/.EX8+!$&Dv?8*'IT21;)%&(3RH>8YbS=2&((177*()?e:&:Z041$'3F4NzS #1afŽ ‡|js‡£±¥ £ œ¢¡¤¯³À»¹¸»·º¹®£Šƒª°·Â¸®§¦Ÿœœš˜ŸŸŸž£ ¡¥¤«ª®®«¬¬¯®¯³²³¶µ»½¾ÁÂÄÄÅÅÆÊÉÅÇÅÇÉÉÊÊËÌÎÌÎÑÐÏÐÒÓÒÕÖÓÑÓÍøª”†tebXP<1+,('((0FdPh¤¬­«mXH1C8,).8=@998(13.-c‹`)!(>kŽ–„zpn†¦¼­œ¢ ž¡¡¥¬¯»¼¹»»º»º²­Ž«´»¶§¨¦¥ š›› ¥¥¢ž£¡¥¡¨¨¯«¯­­°¯®²´´²µ¸¹½¼¿ÁÄÃÅÇÃÇÃÄÇÂÃÅÊÈÉÉÉÍÊÌÏÎÏÑÑÑÒÕÖÒÐÎÊÆ¿¬š‹se[XP@3*$%))+17\IW–ª®ªƒXU-8<.-+08934<87;D>?@B@:81.*+3.1381812,),2:Rr{ƒ‹Ž…‡††Ž”™Ÿ£¢§¥£  ¡ Ÿ žžž Ÿ¡¡¥¡££ £¦¢¤£žžšœ™œ—š’–’‘““’”””ŽŽŒŒŒ’’’’””š—›š”˜—•—–•–”—ffejfbjifbaicd^_a^_f^]ZZU_diyyƒŒ’•˜œ¥ª«««®®®­¯¯°±¯°®®«ª¤£œ“‰ƒvkdWOJLGNSUSST^^_ahbccffcfiihigegkhddfbgkgikhilmqqtxvuzwvustsvqpqnpvtz‰‹pX[Tayzw_p†ƒz‚‚|yz~xlfWE+*=bY,'&!$O|R@/?O*$27821.142/24539.+)30CXv‚‡ŽŒˆ†…„‡˜£¥¡¢¥¢¡¡Ÿ ¢  ¢Ÿ¡Ÿ¢¡¡§¤¢§££¦¢¥¥¡žžœ™šœ›•–˜””‘–•˜’“‘”Ž“ŽŒ‹Œ‘‘‘—˜š˜••”——˜——–˜fffngcfhbce^fe^ab_`he^V[Y\dfuˆ’œœ ¥§«ª¨«­¯¯¯­¯³¯±¬¬­ª©Ÿœ”‰~rg`WTOGKPRV[SX_]^adcddfgd`dkbiigffagiiehjeiikknlmprwwvyvxxwtw}uwwy{v}~’xKLarŒ‘‰fq}{ƒz…‡wwrzohU;/2]nL&%!#'UZ>?64$'=,9>;<2FlpB8F54$&-+:7)&'6jL&*+>\\:::(+]u=(,($ )+Hx†ud[ex™º¯¡ ££¥¢œŸ¢¥®»¾Á»·´¼·¸²ª®¸´«©¦¥§›˜™¡£¨¢£¥¥£¡¥¢¨§§««´²­°¯¯±±±³®®°µ»¼¿¾ÁÃÃÇÃÆÃÁÀÅÁÈÇÈÈËÉÈÌÌËÏÐÒÏÑÔÔÓÕÒÒÍÍų¢‰vd`ZU@3+&)*)'-4PHMx««°‘a[65A28:>H;<>>;;;9DDA?9;861./72..575.2+,,3Jgz†Œ‹Š‡‚‚‰“˜ ¢¢¡¤£¢ ¡¢¤Ÿ£¤¡¢ž £Ÿ¡£¤¤¦¥¦§¢¦§¤¡ ¡ŸœŸœ›—––•”“”•””•‘ŽŽ’ŒŽŽ’ŒŒŽ‘•“–•˜—˜”˜•–—–šddffgeffgbcbab\``aa_aZZVY]dhs~†‹•–ž ¢¤©ª¬©¬®±­¯¯±­¯¯®¬ª¨Ÿž“‘‹smdWOIHKOLRUXZYb^bdbgegfdaffedehiiifhheiggjhjopmqjquqsuyzxzuzyvuxyuuv…¤anv†š¦¹¶}nys}„|€…ƒ|ppzƒuiV8/3BYyK*$ %,K…]QD&)*47#3HLDOhwVINH51''/(7>0%*Dr2*'*?]q=5*,A|:)#,4- !=uŒiVYp¸¸Ÿ ¦§¤§©¥Ÿ¡¨°¾¾½½ºµÀ¹·­®²¶¯­²§•”—ŸŸ ££§¤¤¦¤¦©§©ª«®¯³°±¯±²±±¯°³±¸¸º·¾À¾ÄÅÅÆÂÃÂÂÄÇÈÇÇÉÉËÍËËÐÏÍÒÓÔÒÔÏÑÑÑÌÅ°¤i`TN:1&&''.+47SOGv¬²°“lY78J25:@J<5:C?;8C<<@A?6./12@4252473,3**7ASjy‰Ž‰†€|ƒ’“™¢¢ £¦¢Ÿ¨¡¢¡œ¡ Ÿ¢ ¡¤¤¨¢¥§¥¢¥¦¦£¡› žœœ›˜˜‘”•—“‘•”‘Ž‘Ž‘“Š‘Ž‘’Ž“’•’””˜˜š—ccemb`c^gac_e```\]`_]_\XY\eiw~‡‘‘˜œž¦§ª­¬««®­°®­±®°°³­­£ž˜‹‚tlcQTNGMONRVW]_^^affag_`chblhgjgcddfghfhefflkjpmqrpsvsqxvrwwxyxwyrwvv†§®†~‡Š¼Á•uttww„…~zst€mZ;-.:?Zw?"% $,M‡_d5& $6$'/8GSenVOUC>1++--0<92+*Go.'(%7ct<)&,\g)+/82%#.c™s^Yg“³¹¬ ¨¦¯«­©¥Ÿ ž¨±¼¾¾ºº¸¾¼¶±¶²¯³«¡‹|…‹’––ž¡ £¤¨£§®¨§®¯®±°²°³µµ°´±¯¶¶¶·¶¹¹¾½ÃÂÂÄÂÁÄÄÀÇÄÆÅÅÉÌËÊÈÎÎËÑÐÓÔÓÏÎÎÌËŵ¤”j_QF<0/'%&+-(4CD9x¥±³”uNGAG6?:7+*'((&*).>Q1m¦³³–~OBLH61?>@;97>:8@F:E=58121.3;./7285/+)-2ASgvŒŠŒ††€ƒŠ•—  £œ¤¢ £  ¡Ÿ¡ Ÿ œ¢ž¢žŸ¥¥£¤¢¦¥¥¤£¢¢ ž ›¡ž žš››––—”––‘‘’”Ž’’ŒˆŒŽŽŒ‹‹Ž’hhhemcbhb`beaa`dd]`^]\]_V_ehr|‰ˆ–ž¥¥«««¬¬­¯­­°­±®­¬¬¨¨¤Ÿ•’‹ui]VRJFRRRVWRWX^_``acgdhlffhdhehgeddgeicilgjhpoontnuwysuywuwuxut|—¨µ™‰Ÿ€73=CCNYbu†|}‚‚€yql~q]4.2M^FwW"#)%.:Z€i9$&"/715HMF?;2=B-(+'%*(-00292.VF$$%,Sdl;#$Jm@DO:'!)E}—tZc{©Å¹¤¨§ª²²·«¥™›–§²¸ÀÀ¿¾Å¾¾¿»µ·£mLHRetnyx†‰““™—ž¤ªª­®©±³°³µ´¯²­¬¯°±²¯´·µ¸½½ÄÄÆÆÂÄÀ½½ÂÅÄÆÆÊÊÇÈÉËÌÐÏÐÒÑÏÌÍÈļ²Ÿ’ycG=6201*'*(-%,GY,]ž±²š†_CBB85?A;CJ@=@=EBNS>?68.0*641538>8/+013EVr~‰ŠŠŠ„Š’œ ¢£¡ž¡ž ¢¡¢ž¢ œžž ¡œŸ £¢£¤£¢¢¥¤£¢¤Ÿš›Ÿœš›œš›˜“—–™•’–“’”“‘‘’‘‘ŽŽŽ‹ŒŠŽŒŽŒŠŽŽ‹’ggdafceed^_cddc`dbedd\`XYZ_jr~‚‹’› £¥¨¨­­®°±¯±°°°°°­«§¦¡—’ŠƒwkcWPODJRPWVZ_aY`_cfhihifdaf`Ygdcdgc^dbfghmjklktrvsutuwxtuyywwuy–Í̼¥œ‰E$%$&&'*=m‚‡ˆ|€ƒymirq^TE.=?bFYl?%"$*4Ntr*""&=128?:40//3?2(1)*+4,-433/,G6))(/eTl8)2[[62.(#:yŒŸx_cp–Ź©«¥§°¸¹·«£™š•›£³½ÃÁÀÂÅ¿½»¹¯‰ODGSY]djmgsy}~|„‡Š“—¦¥¬°®´³³¶´´²®±²®¯²®´¶·¶½ºÃÁÂÂÁ¾À¾ÃÃÂÂÄÇÄÈÉÉÇÉËÏÍÌÐÐÌÌÇÁ¹­¤—„oR@<7/1+&$&"%+.?_-PŸ¹µŸ‡^?74>@D9848<=:;HIFEH=5133/221/14321.2*2H]s‚‰‹‰…„…‘—ž ž¢ŸŸ ŸžŸžŸš¤¢žžœœ¡ ŸŸ ¡¤¢§¡ £ žšœššž›˜›››˜™—•˜”“‘–•‘•–•–š‘’Ž‹ŽŽŽ‘Š‘‹‹‹ŠŠ‰‹‰Šbbgddaf`eddabcfeeca_`[_ZZ_dgt~ˆˆ’—š¢£§¦©®­°°°®¯¯°±±°¬ª«ª ž—’Š€yjaXXHIQNUWWSYYYZ_`edeiggiiglefdfjgbcagidfkcghlsnroxyqvuwvwuxuvƒ¯äÉnrV7% %$)$HŒ‰—¥«˜{{oietjO905@Xe@j^("(*':]€i &+A+,.7329*34:0*/)+5:6-1873.IE/*+8_Hk>/3`B+%"*l‹™‚b\lŽ´Áª¥¬­²²¾¿»¬™˜›ž®·½ÀÂÃÅÄÀ¿¾©xUSVX_`_fc[`hdcUemsz}‡œ£¥¬¯³²¶¶´°±²°¯¯µ¬ª¯´¸µ¹»ÁÁÀÁÀÁ»¾¿¾Ã¾¾ÃÁÄÇÉÈÊÈÌÎÏÍÍÍÊÆƲ­¤…pdK?:6-+&'(''**.D`7>›»´ˆwQ243;FLC04B89A>FDE;9.4.2/00274685/*03;RdwƒŽ‰†„}ƒŒ— ¢¢ ¡žžŸ ›ž¢¡ŸŸž››šžž £Ÿ¡¢¡¢£¢£¡Ÿ›˜š–œ™›Ÿ™›˜˜˜˜—“•“’•–““–“ŠŽ‰‹ŒŒŒŽ‰Ž‰ˆ‡‡ˆ†ccgcdcddcggciabched`b]\[^[cfu~‚‰‘–šŸ¤¦¨©®®®³®³²°®°±®¬¬­¤Ÿœ—“Šxk^VPJLIMXRWRW[\c]`d^`hdgiefhhfg`fhcidiiggiimmmmquvxxutvzyxzxyx€¶Þ·l\345+''-')7a˜­ÔÖ¼{ujUPlWF204;\EXƒI)'0),F`~ˆq""''5-'/0/8684>I83)/.59-+%/GENZQ2<<4V2hN&/\5'& *L„¦ƒk[cˆ°½¬§©«®´·½Â»©—š˜žŸ¶»½½ÂÄÂÀÁÀžuegluxwvtkf`gd[RMWT]fkr|…‘—ž¦­°¹µµ°«±²°±®¯¬©²´·¸½¿ÁÁ¿»º»¾¼¿ÂÆÃÆÉÉÇÊÉÌÎÍÌËÉÀ·´¨—€t`^F=8514*'%'''&1A[74}º¸¢ŒzZ9:,;u—žmZ_{©·¬¥¬¬´±·¿Áô¤šœ˜Ÿ¨¶»º¼ÁÂÁÁ¹˜xvy‰ŠŒˆ~xtnjcZO?>DFJKXioz¤§°²°¯¯±³³´¯«¬«¯²´ººÀÄÂÁÁ¿¼¸¼»¾¾ÀÂÂÄÈÊÇÇÇËÌÌÆü®¥›Š€ynh^UC=87.+'(&(*),0WSC==5V\Z‚G*'.$3WY[Vo)! ''%);KAOL;4);OH40*;-'''*%(.Il_2(Nc(J[+7M)!.:mŒž€dax›¿° ª¯°·¹¹Ãǽ®š–šœª¬»¼ºÅÿ¸‘z}ƒˆ•š–•—–”‘Œƒ}th\KC:E==DLW]p„›§©¯°­­´¯®¬®­±¯®±½½º¿ÃÀ½¼ºÁ¾½¼À¿ÀÄÈÇÅý¹®špfc^`[OHF>=C83(',(**/0;C8-y¬¼©’‹`5;-869H>GB;;E@>;;747;30,-109=56451-6L\vŠ‹‰ˆ‚€Š’œ¢¢£¡¥ ›žžžœŸ ›Ÿ›™››œœ™ž™šž›¡œž¡Ÿœœš—ššš—šœ››š–——›œ›šœž˜›œ™“šš”ŽŒ‘Š‹ŠŽˆ„……†…jjdlejhegh`bcdgiedf[b\^]V_`hs}ƒ”œ §¦«¬­­ª­¯²­®²°¯°­­¬© ž”’{mbVLIKKTPW\WZYb]^^_fcngdkegbbda_eegebffccdfjnnmoortnuvuzv{|‹‡†Š”˜¤^E51,#',0Pzˆ’m[_m^?>I_V>67BZOlT./.5-Ea]U:-"$(&'3M?B9,>R)3JS4(5>)("+' ')4OfY[[B&4;(('*&#'#,3N_evS%-[X/* #9tš§‡ngŽ¶Â¬¥ª«´³¾ÂÆÆ¿«¢––¡¨²»¾ÃÄÆÁª|twy…‰Ž——™•Œ{–Ÿ£ŸšŠ…}~sabWSGHD>>AN[xˆ•¡§«¦ª¤¦ª«­®³°¹·»Ä½¿»Áº¹¼ÀÂÅÀÁ½¼À¿¸°§šˆnaWWVMXOUSlnungikaT>3-4*+&&+1F@.x´µ£‘…uE==424VB>CA*"*Qƒ€{ŒePRLqgNGJ:;?Ff]^;1,114\r^P')n‰^*$(1%3F:?8.),28[]a;7/#$#)''&)/0XS_„Q$+I[' 1bŽ¦•q‚§Â· ¦«¯³·»ÆÅú¦•™˜¨ªº¾ÀÄÆÀonz‚‚„ˆ‘‘’‰tz¤¢ ›~‰}[iZ^USNKNHMN`v‡–¤©§¥¨¦ªª­«¯¬µ´¸À¿¾ÀÀ¿¹»Á¼Â¾¿¹·»´§˜ŠuaTWR`_Vkfrf{‰xopd^U<965)*&')-AE1j«µ¤•ƒrV:7296FR9<=<=DB=6;2+.2/15/:88789815@\q‚Š‰‰‚€}ƒŒ–™¢ ¢¥£ž¡žœ¡žœŸœœœ››Ÿš™›œ››™ž™ššœ›ŸœœŸœœš›ž™˜œ–˜™™›™™›œœ›ššœœœ˜š—˜–—š••”‘’Ž‘Ž‰ˆ††ƒ„„ccfchfgefljlehghfc_be]SUYX_ir~~‰“•–œž¤§«°®««®®°¯±±¯±±²­©¢žš“ŠƒxofXMNMPSTWZZ]b``_cdtkgfebgeefdfdaY^caabdnagddiiiglpqqpq†™Ÿ›“‹¨\J:^sqB*%Gƒ†~˜u_O8UY>3=43GOhbi;3636NykR0#1S†|8(%+)3K?7*('0'7WeeL5)#!+++)/'&*34BlmA*1/! !JzžŽ{r€¢¿¸§§©«²¶¼ÁÆÅ¿´¨š œ°´¾ÄÆƼ”loqw~}z{Š‡…ƒ‰rO{›œšœˆq„‰u\mdjc]V]ZQY[bnwŽœ£¢¢£¦©¡¥¨®¯¹¹¸¼ÀÁÀÀÁ½º»¹¿¶¸³³¶¬–m[UY_gtkhqxyl‡ŒzrbcbZJ@6:7*))0(3CA)d¢¶£’€r[812/6@K19A<>I?E339..A43<3034<457='39FMQZzp=FBLGOdr`+"!"7[kV,+1*0ZW5.*$##/Lgkb4(+$'%*21--&,*%',;U&!-a“¡shjŒ¹À°¤«§°¹»ÁÃÊȸ°¨§¦²º»Ä˲tUd_hlke]^bfeikiW>.Dn‘ƒ{SCdoHhn{}j^utolqpfly€Š’›™¢¢¡£§«±¸¿ÃÄÄÆÃÁ¾»½¿¿½·¬£™Š|zzyomup^FWJEZ^T\NJMQIB>AM9)(&--8BK-d›º®nc^--.27^;>D>@>9:12,,-576757740.15">‚¢Œii|¯Åµ£ª§­¯º¿ÄÈÈÊÀµ²¨­­¶½ÆÊ®dSU_b_dgd`JJHBPHO:6/8Ph^J/.BD@UpzVdvzusttwy€†‹“˜›œ¡ œž¦®¯»½ÃÁÃÅÆľ½¿¼¿¾·©Š‡~‡wYPWH75688@F?AD>DLFADI@..*%&.6GL,[œ·°“togV01/7:S;Wk|‰‰Œ‰‚~ƒ‘˜š  ›¡œŸžŸž˜œšžœšœž›žœšœ˜˜™šœ˜››œžœœšš›˜˜œ˜™˜š˜–™š˜˜ž›™š›œš˜šœ››™–•—’’‘–”“”’Ž’Ž“Š‰ˆˆ‡‡hhjeidamcdbcdcbdjb]\]\TWQX^dt‹Ž–˜Ÿ£¥ª­¯±®³°®²°°°³¯±®¨¦¢¢œ—•†€niULGIILMRUXU\__gbcdccfihcfdbccfddaa]^^c_dcfbhgnv~‡™””•œš›œŸ›™–š¥œ”Š—«¬˜zN3B70.+-/;V\8JKQ\r{`1+?IYVJhsN(! "5]?g@&),5Y\+'%%#).0B[u_9*(+-0-(/,-3(/&#"'?HAG:.-0)$%'-HT-K›¯±¥|rnSPD019SD=@@B8=0//2082.-0-794/(&-:^uƒ‰ˆ„€†‚Š‘– žŸž ›œœšžšœ™™›£žœ™™š›››˜›œ›žŸžŸŸ—š“›™—™š•šœ—›™–˜•˜›™›™™˜›™—š“’”’’‘‘ŽŽ‘Š‹‡‰„bbigfdgbbcbgbcccZ\da[U\YPUVgq}‚‰—–¢¥ª¬­®±±­²°²´±°¯®­«¦ Ÿ™„zm`XZKHJJRTWVRY]\^cefjeffdbddbdfbacae`^b_\]^a_jƒš–¡¹»†‡“”•—œ™›™”œ›ž™w_cfx]D+), !*BVg^MO\]ƒ‹iT<=D^iFUsxQ)'%*0d46JG,00bg.+',$'%'+0[z|mO2-*-'+(..+$$+29y¡™l}©Ê´§­²¯°·»ÃÆËž¸¶¹³»ÅÇœOBGFFDC?9425423412.1/.1;0785@+.(&-**8^‚Š‚‚~ƒ}}ƒ‹ŒŽ‘—™›Ÿ¢©´¶ºÁÄÃÆÈÊËÆž¹­žƒvW:<3152233310/-367968877;FF4*(2((&%-KO.Iœ¬± lhULB5-7MG:;9E6<-.,2/5/-;99873-%%.>cyŠŠˆ‚‚†Ž–š  žž žžšŸž›˜›››—–—š—™Ÿš˜ œ˜›œœ›šššœ™œ›ž˜™šš˜™™–˜™š——•ššš˜˜˜™˜˜›——––”‘”ŒŽ‘‘ŽŒŠˆˆˆ‡…†ccigda^bagdd_^_]]^b\\XVQRSQanzƒ‡Ž”›Ÿ¤©¨¨«²­°²°°²²²°®­±©£Ÿ—•‰xnbXYOJGJUSSTYX^VVea^eiidgaebfc_be``dc\^[\ZZ^dw–Ÿ¡Èν}†’“–‘–˜˜›˜šœœ”|kRE:NjdD(&$#)?eth[NOYjˆ\XcPFKlOHa{|T%%-'0_=(6V:.1Xs/&*'#&$% /5pxqq`?&$#'+/23* %*&Z‘¬vgz™Á¦¥«°¬µ³¹ÄÇÊÃÀ¹»¾¸ÂÅ¢WEA@J<5685143392.23-.-.+36?TG62.(.'(/(6Wn‚ˆˆƒz~‚Œ‰‘““œž¥ª´º¾ÁÆËÇÊÊËÊÁ»±ZM;8;068718>910/32277;@547?>22.30,-$+/FD/E”¦´ž‚ne]GGJ03K>?<@A43/,0/130,998285++&,Ig‚’‹ˆ„‡‡Ž•›¢¡¡¡ œœœœŸ˜˜ž™šš™–—™˜ž–– ™›œ˜—˜–›™—››˜›šš›šœ™˜˜–œ–˜œ—™™š™—›–—›™˜˜›•˜–“’“•“‘’’‘‘’Ž‹‰Š‹ˆ„\\`abb_]]d^]`^\_\]Z[RPQNMTXbls‚†Ž•š›¤¢«©­®±®°³±°³¯±¯±­ª¤ž—’‘ŠzncSMFDFOIPVTVSYTYc[]^hfcgae_ac]_da`a_c]\UX]a{ ±¥ÅÔˤxˆ–•’—š™›•™”‹„thN20JRI4'$#!'?YutgNC?7SF;:=:31../34207-11>51.)*4Rm‚Šˆ„…†’˜ž ¡œ žŸœ›œš™——˜™›—šš›—›š™—¡™™š™œ™šžž›œ˜šš™–šš–š™šœš–—–˜˜”–”›˜š••™˜”“’‘ŽŒ‘‹ŠŠŒ‰ŠŠˆ‹‹‡‰‡‡\\[\aa\X\\[a^YZ\^Z_TXSPKMMS]lr~†•–›¤ªª­­°¯®¬®°¯®°¯®°®¨¥Ÿ˜’‹€{qaTMEKGKMSSVYXXZ\_\___afca]]`a`^`d`_^XVWWSTl­ÍÁ®ÐÑŇy‹Ž••›ž’‰ˆˆ‹sW62EM:.'!"!&4wl[F2.S~^E79YXN]YDP„’pK)#%1nzoleQ9+'',)"!%! 2j’§q`~¬È¼¦©©«¯³¸¸ÂÉËÈÁĽ¾ÃÁÅ¥XCKI>;B3//4//0/7.30-+-/+27EZ‰¡–gN7*()+&)-Cctƒˆƒ~€‚‡‰‰‰‘•”˜Ÿ¢«µ»½ÅËÎÎËÐÐʼŸd8592/26529>2U~|i[C0,+,332;78;1..533+'+.3LJ,A“¡¹¬’_ZXG1@4=MJ><:940,/,0//11678125/.3@^y‡‘ŒŠ‰‚‰‘˜ŸŸŸžœŸœžššž˜™˜—˜™˜•œš››•™•—™ŸŸ˜—™™›Ÿœš›š›š˜š›••–ž›š™˜œ“˜–•“˜•––——–””’’ŒŒŒˆ‹‡‰Œ‹‹‡Šˆ†„„bbd\^c_``^bb\[\^[Z\SZRPMKMPah{~ˆ’•ž¢¥«°¯±¯­®¯±³±²²¯±­ª¥Ÿœ™‘ŠƒymbUIJJBINSUWYXc^[^c__e^db`a^cg^]]c[ZYaXVRSTÌ˸·ÑÍ­v{ˆ”“–›œ’|h…‹zhZ>WQ/()(*#!2b|_4-)Cxe1(-0EYWdVN`Ža0'#"/0IE*0/7@3NS)/,+/*')'%*4Hf_IXSl^/()'#%!%R‹Ÿ…ff‘Âƪ¬¦¯²­µµ´ÄÈÊÃÆÄÀ½¿È­aDHPJJE9).001044.*511(./J>D^¢ÀÀ¯”vb:*&%(*,2Pn†€~|~†‡…ŒŒ“”˜™ ¢§¯¸¿ËËÑÓÐÒÎħo@123--*/;8Qq\Kœ–ˆs^@-&)*0675976.(/32.*#-.N@-B’ ·¨‘`RfKB@;?UP<=;:201,/213/2063022+15Kj}‹”ŽŠˆ‡•˜š  ¤žœžž›œ™š›™š™˜–˜—™›—™™™—˜™—–˜˜œœ›œ˜š—–™˜š™™š™š›šš———•š›•—’“—–———“’’Ž‘ŒŠ„ˆ‰‡Š‹‰‹‡ƒŒ†ƒ‡^^aaaa^\]Z__ZZZYZ\XUOUYJLNQ\hs€Œ”™¢ª«¯¯¯¯²®°²°¯³°¯°­«£¢›—‘ƒ{pdWQHILKPTUXX\[[`_d`abaebb_cfa\cc^`]ZXVXWSW†ÍƲ¼Íµ‹y‰‘”—•šœ™‡d[€†‚oOMU6,#"0.+*X€ra5&.7lvD$%)?Uiqc\c}yI8.-%,*?;),0,.0F€f*0.00.*2.*,/1::,1=NYU1*'" !1q˜œj`x°È°¤¨¬³´®µ·¶ÊÌÈÆÁÅÅÅïiKPVUKE<2*))24=LB*.=;-'#'VV@Vx­É˾°£šaF+,:KJ?Nl{‚|yvxˆ…Š‰‘“™¤¦ªºÂÉÏÕ×ÔÔ̵yP611++1,,66[“€E¡£–†jO6+*+*5768:5.3/.1-$&,-N?*6‹¡·©“_XcXD@?>XB<G3#%*822PucM=%&2_rM2&$+,H^{xc]Yup7.*)'F/-0&&7-',>y|>,5++(*+)3/.0..)*,@H@8:$&'!$QŒ ~`lœÅ½¤¬®±¶²±¶¸ÃÎÊÈÆÀÇÅË·kPQXUNC816+)+3@QYP2PG-6Š£²§ŒddUk@?I:^A+3‡§¯©”rYWeO@CGT??:9521,.8=1.136,*+.24AOm{ŒŽ‰†‰‹˜›£Ÿ›Ÿ›Ÿššœžœš—˜–—˜™˜˜—˜œ—ž™™˜–™˜——›š——•˜™˜˜š“–———™—˜˜—–•–””‘‘“–”“’”’Œ‹Œˆ‡‚ƒ…††‚ƒ„‚~‚‚ffca_c]d]`^c\c\\\UTWRSNJFLV]lv†ˆ”™Ÿ£¨­°²²¯¯¬°³±´±¶±±±´¨ Ÿš‹€{pbTNFIJOTUUZZbe[dcdbfeecabcdcleecbea\[\ZTC9L¸œ”­ºÁ°£––“™–”•”xh‘™e1(+)$%(-Joi]D*$.0MY;7E;-0*;GWˆ_A`Z†rA370.+-0)(4)0%'-QˆT6D//##&.&.67/+)'281*$(-5GIa‰t_sªÍ¿©£­ª±ºµ¼¼ÈÈÊÆÅËÉÈÂŒ]aje`VR@6311-.BG_rjF4\bYGABZlJ4W°ÏÌÌÎËÈ¿«€XFX{x]Ykvrpprw{€…†‡‹™œ¥°¶ÀÆÐØÚØÔ½€dMNN2;TO?*-FSFRKD•²¨ ŠkQD6(.6)*/-/3*.)2J?+1=`;*:ƒª±­–{GThWFDWV6:B5613/11/.30101*./78AWrŒˆˆŒ–™œ¡žœž›Ÿœ  ˜š™–—–™–›––˜˜˜––—–˜š˜™–™–—–˜”š˜–™›—š™——™–•›’”•”“•“““’‘’ŽŽŒ‹ŠŒˆ‡……‚††‚‚‚€|„{†‹Žbbcabj\`cc]d^Y\[ZVVXUTNNHIR^luƒ„‹–˜ §¥¬±¯­¯°°®³²µ¶±¶²­®¨¤ž—‹‚{og\PHGJNUWR_a]hcdfbedfacjheefkaabfe]___WF21I–¹„TSk¡½Ãµ©–—”—˜•‰\lrV@%''+'!/8ux[L7)'8NVH46LM/.1:BebMQd”p9/./,*//1+8.*(*0DzxE?,)*,*-,*0:.*%&()+%'"$%-Ji„qUk“½¿§¡˜•™¨­³½ÃÊÊÊÄÀÆÇÆ“ibfsni[TQMC;-*-DJ\tybC9SaTT[SG9A}ÄÑÎÏÒÌÍÇ·•mLFk~j[_oolpuyz{„‰ˆ•› ¥±¸ÁÈÔØÖÓʨ{YUg`<<^dXJCWhUJ:V¢°¥ŒtM>;,,+(*,/0.1),1*'*,33/,2346:654.,.0-6Rh~‹‹Œ‰†‚Š•—™œ›š›ž›™žœ–—˜—œ•œ˜•™™•——–•—™œœ˜›š™˜—™œš˜›•—•–š—••“”Ž“—”—“’”‘‘Œ‹†ŒŠˆˆ€„†~~ŠŠ‘’›£Ÿhh`dcc``b^bdh_\[\\WUQOMJDGNWfx€„”š ¢¦©®²¯¯±®±³µ³³µ°²°°¬£ –‡†{qc[UNISSVRZY_a\`efhkkd`ekjl\gkhliqzkTFG@9/)+?™¬qmˆ–­ÁÔÍÒŵ¬™k8*'*(-0#$&//=\`RD7730J7:/400=<51,1-.05Xk’‹ˆ‡ˆ–™žžšš˜š›–˜˜—––›”–˜š———–™š˜“–œš˜—•—–˜š”™››˜—••˜•“’˜“““–”Ž“‹ˆˆˆ‹‡Š‡……ƒ|€ƒƒ†Œ‘•™ž¢§«ddcc_cbace`___YVZ]V[RLMIDJUZir€‡”šš¡§«°°´±³°±µ¶µ·²µ²°­©¡¢•’Š}yqg^VPPLRTY[[ahecefihgiiggfmecfkftjN827:1-40E‡«…‰²Â½¹ËßîáÒ»x?@*,).)))%)03S`[?88EC<7;UH<9>>HUNVPX‹uhXPt|H4$',:0/19<4'-*-4EO<*(0:1,+',-68'&%# $*024>m”{SU~°¸ž™¨°²³»¾ÃÆÉÊÃÅÃÅŸlgquvu‚„‚|‚{ulWA//Hcqotxq_Q?@KX~ž¼ÊËÉÊÎÌÅû¢”Šƒwis~zops{|wuyx„ƒŠŠŽ“š¤«¯ÀÎÖÛÜ×ϵ~bor“oYMJXXUKLr´¶±¦šiO@512.-0312(.-++**,2P_:3:hª©¸›‡\>V]XQ\P::786./.6532?94/,+,+0;`s‚’ŠŒŠŽ’™žŸ¡Ÿ›œš›œ—ššœ›—•š™˜–š—–——›™™—™•—™—–˜–˜šœ——˜˜˜—˜–••–—–›••–“•”‘’‘’’Ž‘‘‰‰‡‹‡‡……‡‚ƒƒ…†‹Ž™›œ£¥©®±cciga]bd^bcad\]UZYZUROMJEDS\jv|‡Ž–š› ¦¬®°´°³´±²³²µ³³²°®­£¢›‘ŒxrjYVKOSOVYZ_aficgakkhohhjemcgjkdkl;73>7069IUt¶˜Œ¨¾¶ÁÞôñæÏ’8:K/$'/(#&&-3SdQPHSSXG31@VUFESROb_ZE`ƒhhIUm…N6()64,-)?++5,/*5=;7,'7?0'&(,/04&#-,!#!*5--5/,-16'"'#"! 8*M„›{ce‡ÂÆ– ¬°¹µÀÆÆÅÇÄÁÁ»‘ehq{zy{}{†Ž‹Œ‡†„si_Z]^^mw‚‹ŒƒƒŠ‘¶»ÁÄÆÊÍÐÍƵŠ‘™Šsp|ƒ}xrux|ƒ€„„˜£©¶ÈÐÜßÜÖʦ|eYY`w€Š‡€yptˆŽž²º´­¬ŸwdRD0/7>52/5534/.47330ZW519Zœ«¾¢ˆfEJcM`SMH81,02-1,+057:9.,2/+3Mf‹Ž‡‰††Œ•šž¡›œ›žžœœ™›˜—š˜—›––•——–˜—›¡¤™˜”•˜™–•š—œš—™–˜˜–“••–”™’•””•’””ŠŽ‰‡‹‹Œ†…„ˆ‚‚‡’˜šŸ¢¦©­¬²²µ·¹cc_dffbb_bdab[[\[VY[VNIIKISXk{~‰‹“š£¦¬­­°°²´²³¶µ´³±³²®«££š“ˆ„qf]UQTUQX[[Xbdagiilolhnlklq|j@7/)*+58I~xxƒ™˜›§µ¼ª´ØëÙ½‚S=,2:nV*('--.@[y‚€rjU/+/&#'Bc5>X`TM@VLJgŽvx1Nt¤‚hZFJ1--%-8+'$&)13-0,0<@96-+/2C:.4)#'#"+(:n‘’_`{«Í¾¤¦­³ººÄÇÊÇÆþ¼_auyz{~€€€}‡’ŒŒ{tkbhSJp|†‰’•››ž¨­¯»ºÀÃÀ¹¯§ª›“Ž†|tv‚…~}wvxz€€„€ƒŽ”™¦­ºÂÏÜßßÕÊ¥}se_\kw‰‰–Ÿ§®´®£{e[L5.4B?=785:800261226[U777[œ¥¼°‹nRT\SeF>>24,-(.+,+0.657.*'//BYt„Š‹‰‰†Œ’š›œ ››˜š›Ÿ˜–˜•˜š˜•™™“”˜›™˜™š™¢¡œ•š˜š–˜˜šš—š™˜˜–—“–••˜’’‘“‘’”‘ŽˆŠ‰†ŒŠˆˆ„†‡…„„ˆŒ—›ž¡¢¤¬¯¯°²¶¶¹»¾ggfgffc_bab_bcXX]ZZT\OKKI@QYhw‚…˜˜£¥¨«°²³³³µ±´¶¶µ´³¶¯©¥ ž“‰‰€qfaYUSXUXZ[_dhbemnknpjnmrfy T.1,*.1:Fa‡š ž•ž°Ã¿¥ÍÍ´“R72-/.3Sc?-3:Jfz…‡„h]k2$ * #0Lm'7YZNMHN]Oc‹…w7S¦tsoIA1FR$2*($$*%,.4220181.900.)8.&%,""+R„ŸlVk›Â˯£¦­¶¸¼¾ÇÈÉÅÃľ“`[lv{{z†~}„““Ž‡ˆ€plrilxqns„…—™–¨§¬²²ª±´º¼² š—”‡ˆ‰„‚~yvxrx~‚€x‚Œ“–¨µÁÎÛßÞÖÉ©š’{vxu€‹—“’—–œ —Š…€p]L8,/?KC=88:83/.1J6279[T/04Xš »µ’pULVXkB6C@F/-*.9-+13:4991*5ALav†Š‹‡†‘‘– Ÿ œš˜œœ™›”–›–™–––Ž—”–—™œ˜¦¨§•™šš•™˜™››——“˜—•••–“’•”‘“‘Ž‹ŒŒ’‹ˆˆ‹Š‹Ž†„‡†‚}‡™œ £¨ª­³´µ·¶¸¸¼¼¿kkgfbcfaagjc`\Z[ZWTRTOMIHGN[dt€‚Ž•˜ž¥¨ª­²¯±²³³·´µ·µ´´³²«¤£œ“Œˆ{oh]UQOPV\``a_ehjkjpqlnpojlŒ©=%-#)7>Mb˜œ‘”œž™£ž™Ä³ˆL.3.*)$1Hq^P_jtƒ…kSIF]U*$&$()5\x-3`XQJNNN\]~•zRd¨oos@89`I+.-0)#)*.+7-/./0+**2,:-9($$"$#""9wœ†_a¶Ê¸¥¨ª±µº¾ÂÊÊÉÂÁ¿‰^_htw€‚|Š†‚…‘ŽŽŽŽŽ…xu}~~}kmj{n`x…ˆ’–‘“§ŸŸ¢¤¯­«ª®­Ÿ”‹ƒ}€{szz~~‚…Œ‘•«¶¿ÐÛßâÖɲ­­¤žŸŽ…ˆ–Ž…€™›œ‡ub[N@1.8TSKF;65=83)0H6548SK,-4R”›¸µ~ZLMXeI7DA2,1210.)'19<80.69zWlx‡Š…‡…ˆŒ”œžšš›œš™œ˜“˜™™”–“–“•š—”˜š§±Ÿ–˜–˜“›œ™œ–™˜˜™•˜—“”Ž“”•”ŽŠŠŒ’Ž‹ˆ‰„†Š‹…‹†‡„„„ŒŽ— Ÿ¥«¬°±³µ¶¸»¸¸¼º½¿gghieigdkkf`__XY[XVPOORQDIKZg|ˆŽ”žž£§ª«©°²³°´´´²µ¸´·±´¬¤¤›”‰qe]VRVTYZZ`cbfiifpopltqpnkŽ›@**'1Kbn}ž¯™œŽŽŠŒ}…“¤º»sB22<:7,.7Gpnjh[VE5;Ach3("%%)2<`y'5YbZH5EEVep“zge€¡mMnDEk_5&--+%*--*/.+,/1///3193-*1#$!")]‰œnXfœÀÁ¡£¨¯¯º½ÁÇÍÆÅÅÁ–`_imtw~„‚…‹ƒ‡ˆ‰‘’’’ˆ…ƒˆ‰ƒzmgw|cXt€„hjrd~Ÿ¢§§³¯°¨‡|v}x}{€‚†€‰Ž•œ¦´»ÎÚàãÙÍ´¨«§£ž–““—ƒ|yq€tp}X>B>5./+-20-Qt4MI\a]9'2Sfoxgptp„ccwx“h)$&+2-02C)(*0/..-),,/164,(%&# ""1j”mbh»¶¡¡°®µ·¼ÄÄËÉÄÅ™YQ_flv|ˆ…‹Œ“…‹”““Ž‘‘••”‚w€{qn†~‡‰Ž{l…‰€†¦’‘˜˜˜˜‘ŽŽ„~tx‚‚ƒ„}~~‚ˆŠ‘š¥ª¹ËØßßÝϺ®£Ÿ”“ŒŒ„‡…nxrwuqxkUA]OJO[VUQVTD65793-'2=31:PLT3,6Nš´ºžoY9ZcN=2;423451'.6=?0--64Deo€ŒŽŠ…‡ƒŠ–ž ›žŸ ˜™›™šš–—š™–™š—˜—–™“•—˜˜–––˜–™™’–”˜–———–”“˜—–’’”Ž’‘ŽŒŠˆ…†…ƒ‡„Š…ƒ‡Š–œ¡¡©­°²·¸¹¸¸¿½¼¾À¼¼»»½»¾gghifkjd^agaZXYVSUWURQKIFHGUft€…Œ”›¤¦ª­®²´³°´µµ¶´´»»³²­§¦œ•†€ujeWKOWTTZZ_cgklhloqrsnlonoƒaotwŠ‰€r{„’–‚rNAJXTPZXI970'),0.%&5?5-&(22.2:DMTcny„’—›¦«¬­¯³®²²µ·¶¶·¸¸´°µ°¦¤ž•‡viaRNHQPWY\_abgfillliiljkdmx™ †š¤¡¥¬¡€n^EJQK8?TdUP4,.0%*<6*$746>g–Ž‹€~yzqF451&(0WUMD>cukWEjVNG]surz‡ŠxtZD3@-,('*3-,+-0/.-5,..*/)0&'*&! (^„ ‚jf~¨¿¨ ª²·¸´ÀÇÈÉÉ©_IU]cmtt}ƒŠ‡Œ’”“•š™š™–™–•˜™”“’”Š”’ŽŽ––––™š¡¢¤¤›ž¡¢ —‹€ˆ„‰‡†…€‚}~‚‹™¤®¾ÈÑÚßÜÒȸ¶°¦£•’‹Œ†‡ˆ†|}‚|rcii^dgef^aZN<6?9,'&44518;LF.-3HŽ™©»¥„a><\J5<+70181+/3BB6*-*/2Pr‚‹‰‡†‚‚”žž›ž››œ•–›ž™˜›””–•˜•˜›™––—•–—•–‘˜–•’“–”š•––•™””‘‘““’‘’ŒŽŽŽŒŽŽŠ‹‡Š‹„‚ˆ‚†‡’ž¤«®´¹¸º¿¾¿ÀÀ¾Á¾¼¼¼½¼½¾½º¼¼¼ccgdbddd\_^]XXRRUQRPMLFF<829R€ˆƒ}qxtv^L?08.(*3OMKE5?w|oa\J?J@am_bˆUT^]HYNJ++.,.202-(.1763//,,+'"#$!#=xœŽrjo–À²«¦ª°¶»ÀÉËÏ˶`FQ\^gmqyy{‹‡’”˜š™—–“•Ÿ”œœž™œ™”—‘Ž‘’Ž“’—–›Ÿ §§¦¢¤£¢¢§ ’†ƒ…„ƒ†‰‹†ƒ~€{ƒ{ƒŽŸ¥©»ÈÏÕÞÝÕÈ»º¸­¨¡¢›–•“Žˆ„€}|{wsnslhlnmheUQ?;D;.(*85,=<=FS254FŽœ«¼¥‚†^9:]A69+8:.72-11>;6,'()AUs‚ŠŠˆ‚‡‚‰’˜œœš›š™˜—˜šœ•™–••“š•™—•˜•—––••’••–™™•••—™•˜—”‘‘”Ž‘Ž‹ŠŠˆ‡………‚}„•™¡©®´¸¹»½¼¿ÂÁÀ¿¿À¿¿½½¾½¾½¼¼½¾¾hhbbca\`]\Y\XZVSQSTJME@<76?M\p‚ƒ‰’•¢ ¥ªª¬®°¸µ³¶³´··¸¸¸°®§¢Ÿ™ŽŠxh\PRTNR\[][_bejgmlolngljomlxœž®§•Œvsvo`G?=:BMjcYM61('&9<[<1;FB6O`bijrik_dF:3'*,#(<=KHF56NuvdKWa`g`WWŽi:>Y^SjfT9<>7)%./NX:7AW\WmeuLBJFAehQH.,+#"475>UR401Nr‚~w}xvpJIkm@?^‡F&+00,,,,/-'+2'+*/57-310/0&&'+Eƒiej†´¬±³µ»ºÃÃËÎÌÁ?ET`fpoorx}††‡‚Œ•”–››››Ÿ¤¢¢¢¤¦¡¡¢ž™Ÿ›¡¡œœž¥¤ªª£¦°¬­¤¡«¬¡£ª¤£•ŒŒ„…‡‰Žˆˆ~‚~€}Œ˜ ¨´¿ÐØàßÖÇ¿ºº´¯ ™žœ—–—ˆ‡„‚yswpvurrk_UI>H94$,560@;>TK3+3>ˆŸ£¹¯ŒŒj?AJWj{…Š•˜œ£¥¨¯±®±´³¶²·´·´¶¶·±«¦§œ”‘ƒsfZZPJNQ\]]_cbfnioomkliqjlmntuƒ„„pkgqokL>;JGO\n_A//<2+*1=USF//002+)*,6j”nadu¡´ª²µº½¼ÅÊÐÎƉ@?LY`jpqtuw}ƒ…ˆ„‰Œ–“—–œ — £¤§¥¥Ÿ£¦ª¬«¦¥ ¤¦£¦£¥©ª­¨¨°­¨¤¦«°¤¥­¥ž“ŒŽ‡‡Ž‹…‰„€€‹™§±³ÀÏØÜÞ×ÍÁ»¶·¯¦¢œœœšœ—“‹‡„†ƒ~yvqrsomoc`U=>?87)372:?;=;AM[k}„‹“–˜£¦¨«­²°³µ·²¹·¸µ¸¶´µ­§¤›—‘‰vg`\OMTUUZY]d^gfjirnppoqllr„tyxomltrgOCXbv{yw\L83833*4.<^[QF^wvmf€dH45EiuZE&$#&/4,3MShpQB7*3fŒ“{RB:BfRy¥¡Y+/)-.33//341&*,-),15065234)-,O€¢}fdm¹£±µ»»½ÀÃÇÍ̤?>GP[^kptw{||…ˆŒŽ••—˜—œŸ Ÿ§©¨¢¤¡ª«¬±ª©§£¥©£¥§®°°®¬¥©¥¥¥§¦¦¢§œž”Œ‡‰‹Ž’Š††ƒ‚„~€„ˆ—ž§¸ÂÌÖÚÞÙϽµµ±¬¨£ž™˜•—’‹‰†ƒƒ€{z{wyrojhfYB=:86+4/29B<;GA2"-;„Ÿ©µ±¤‘k6;QH*&03C*)',565/+**.>Xu‚‰‡…ƒ†ƒ‰•šžŸ›™ŸšŸ™š›™—•––––”–”•—˜š™—š–™“•‘‘’•”š”–’–‘’‘•““ŽŽ‹‹’‹ŽŒˆ†…†ƒ‚ƒƒš¨®µ¹»¿ÁÄÅÄÃÃÂÄ¿À¿½¿¾½»¼¼¼¾À½¾»½½¿``]^]\WZ\WTUVSNSTOPPDAC<>=HVZgx†‰’ššŸ¨¦©­¯²²±´µ´¸·²¶·µ¯¬§¡¡–‰€ui`WOMQSW[b`d`fgfimnilnornptzyn`nrxoep„“ƒw\>778100.7NlaMOh‚s^ti^>AGl€lP.%$&&/1.8ObqiVP<>RB1,*:|Ÿ§¯·¤Žu87KI)%1A81/)+321../-::;=CPXiu~†˜£¤­¬®±¯´±³±µ´¶²³¶²°­¨£œ˜Œˆnd\YQONPU[\^_adaejfjmlnrqv‡‡„”›¤­¥¤•ŠŒvbKIF=?=CFFB8?_yWFQmxtzX\p^gyr\J*'$(($)1-039C[mtTamlbXZM[•œŸŸ˜vDCia_QQULB&$(434)'/,*)/---+)(,Bw›–l_iv¤¾¦±¼¿»½ÆËÍÀz64=FKUflqptx{zƒ€„‡Œ“˜›–›œŸ¡¤¥¨¨¬§¬­¬°­­¬°²°¬­«©«¬§¤¬°°²®±¬§¢œ›˜•’ŠŒ“Š‡ƒ……{€z~ƒŠœ£°¾ÈÒÜàßÒʾ¶°¯¬­ª£š”“Œ‹‡‡‹‡„ƒ~|y{vsmk\MG7;5315:71F8Y>(#&5yŸ¡¬²¥”wE3F<)%*A3*)+2790+,-+;ZpŒ‹ˆ†……†’ œœžšš™˜™›š›˜—šœšš•”˜š›—•—˜˜™˜—”—‘’“”’’“’“‘Ž‘‹ŠŠ‰†‰‡…‚€Š˜¡¬··¾¿ÂÇÇÆÄÆÅÃÃÃÂÁ¾Á¾¾¿¼¾¼¼¼¿Â¾¿½¿À¿^^]\kc]XV[UUVTVNLLNKKAB=<;BNZgw„Š’˜Ÿ£¥««­±°°³²³µ´¸µ´¶´°­¨¡Ÿ™‰~og^PPNNWZZ\Xa`a]dclnot‚ˆŽ“  ˜¢¡¨«œ¥ycRJLLVQA6679=CF=2HeiSH[ixpSSayqvbD)'$)*'!+712-+5KSjfpuz|pj_Uh‰†h?1_}€ufSVXS/&-26-,10,/50+*+(&',S’¢{feo‡º³­¸¼Â¾ÂËÍÉ‘313>KS__nqtywzz‚‚ƒˆŠŠ‘—™”™œŸ ¡¦©¨­¦¦°¬´°­¨°µ´¯¯®¯¬ª¥©­±­²«­ª¨£¡›—–•Ž‘Œ‹†€}‡‡{~€„•›¬½ÅÖ×àÝÒÌÀ·¬­­«­¨™••‘‹‰‡‹…†…„}‚~z|uxqj[F88;/+17A74I;S7/+'.t ž±­žœyI2A5!!(C<,#/9575../(Ddv„‹ˆ„ƒ…‰™ŸŸŸžš™šš›š”™™˜•—›˜—˜–•••—š—™––—™•“•“”š–‘““’””Ž‘‹Š‡ˆ‹Ž‡…†††‡†ˆœ£©±¸½¿ÁÆÅÈÅÄÅÇÆÄÀÀÁÀ¾¾¾½½¼½¾¿¿À½ÀÂÁÂYY[]gcVWSQTOSRRKJJHDFA>;99CMalz„Š’—ž ¦¨­®®±±³²²²¶µ·¶²·±­¤ œ˜‹‰ƒtj]SONOUY[ZZ^baegfks„” ¢œ ˜“–˜¡…L>>AEE9QlfVLUwqNPbtxbV>.+)2)+&)(.))/0>SOBGnu|~{vjL:50-1_††qb`_I/,343.9,.+0/-+0(()%0ož’nfnu¦¿«´¼¼ÃÂÉÐ̨=+)5@KTYepttty|}~}†ŠŒŒ‘“——”žž£Ÿ¥¨®«¬©­¯µµ­¨©ª±²±¯¶²°°¯­®¯±°°©ª¤¢Ÿš’‘”””’‹Œ„„ƒ„…}‚…Š’§»ÈÖÚàÜÓ̸­­¨§¤¦¢Ÿž–“‰ˆ„‚…}‚€zuunhXF98<3,3?I59D;57ALasz~ˆ‘’œ£¡««­°±¯²´µ³µµ³¶´³²­¥¡ž”ˆth[PJMONRRXYZ`gkgt‚–ž™‰‡‘{‰}pB/4.55;?B?D79ADQg_QN\ZQlŽ~‚[F<33374.,(+(-*/.16;OO?Jjtr‰nL'#"'(7c…’Œ|tjV>4.-..-/,/1-,..10+,6R‰©spt}µ´³»¿ÂÃÆÏϽW(%/4DLW^hnvuvy{}}„‚ŒˆŒ”’–˜–˜š¢¢¤§¨«®­ª®²²³¯¬©³²°±±±°°­®±¯±®­©¨¨¥šœ”““”—”Ž’‰Œ…‚‡…ƒ„ƒ…‰‘§ºÊÓ×ßÚÓÎø®§¥¤¢¡ ž™–’‰‡††…€„‚€~|v~pg^J8>;/+;:A=4CCU7++(/_”§´§–¥Žb9C6()*42+2589+/)*-4Vn€Ž‡Ž‡‡€†–˜Ÿž¢ Ÿš˜—œ™™šš—•“•“™–™•›”’””›˜”•””’‘‘‘‘”’‘‘‘Œ‘Œ‹ŒŠ‡†‡„„‚ƒ„‡¡¥¯·¹ÀÀÂÄÄÄÄÃÄÅÄÅÂÂÂÂÀ¾¿À¾º¾¾ÀÂÃÂÃÂÅÅÄXXSSX_XTQOJMQ^LLLOGFIC>9;;CP\kx‚Ž“–œ£§«¬®°¬²¯µ°²³±¶·¸³´¬§£Ÿ™“‹reYUKOJSPTXZ\ffu‰Œ‡„yu{~ƒ{~€t`SF852B[ZMK>@?@=8I=4>HVcXES]vwboŒ†}t9450454/*/12-4,(0-14G^X@5??SjM/#$(01D`‹~tgE78(-.1..,--.).2)()/:k“—qsvs»¨¶ÀÀÂÂÍÑÉ{,!'.8GT`alov{zy}€~~†€Š‡““‘“––ž¤¦¦§©­­«¯°²¯´¯¯³°µ³®®®³²°²²±¬©§¥¢¡™™š’‘”“ŠŒ‰€……„‚‚{ˆŸ¦»ËÑ×ÜÚÖÏÇ·°ª§£¤¢¢¢–˜“‡Š†††„~ƒ~xzytiZE9?@0-/B<54N@W93+*0\•¡¬¤“¥šk292,*-,6)(13/3))++BYu‚‡‹‹‹‡ƒ‹”˜ž¡ šœœ™›—›ž™——•›——˜—•™––š”•””’–š•’‘””ŽŽ’‘‘ŽŠ‹Š…†‹ƒ‚‚ƒ‡‹œ¨±·º¼ÁÀÂÂÄÃÄÃÂÄÃÆÂÁÂÄÀÁÁ¿¿¿¿¾Á¿ÁÄÃÇÄÊÉÈSSUXRYVQOOQNOUOLJFFDBH>;78?M]kzŒ“—›¢¥©¬¬±³¯°µ³®³µ¸¸´³¬¨§¡›š…~tdYWNQPQVZ[^`hkxƒƒxstpiv~€{vs[^VKEKOINXK::=@86>9HQSmU;F`h‚hxˆvzrh?3-,72-,001*-/-1.1607:_b:,+H\O1(%4UavŽŒ{oZFP9.-%2)/2+-..)'%()2\‡›hyw‚²¸«º¼À¾ÈÑ̘5%'/1:@T`enryvz{|{|††‰ŠŽ“Ž”–››››¥¥§§¬ª«¬°³³³³²¯¬®®®­²¯¬­²³°«©¨¤£ ›››™‘‘Ž‘‹Šˆƒ‚€„~€Œ’ž¥¸ÄÑÚÝÝÛÐǸ±©¥¢¦ŸŸ¢œ˜•ŽŽŒ‡„†€€~~€}{ykkW<4670.4B>54QLS3+((+\”¥¬Ÿ ¡x9=JYky‹’”œ¤¨ª¯°²¯¯²²²³¶»µ°·¯°°¦£œ•†~sk^YNINSWVV_`cljvmmoprqu€‚„xhiej\i`_UUTZZ\>:BC4/:=BLbnp=6KQs}|‘vNHDXkzƒ‰š¡¥©¬®°¯²±³±´´µ³²³±°«§¢—”’‰|of`XIJPQZZZ]`ihnedkmnopo|ƒy\Y\NGZbYUXg^JO;FO647BIT`psX6:(0=4359F]K5,*'-L†¡¬¥|’¨’T'/"&,)/J5560.1-*8Vn‚‰“‹†‡Œ—¡  ¢¢ ™š›˜—™™œš››–——“—•’˜’—‘•••‘’‘‘”“•“•“Ž“•™’‘ŽŽŒ‡‡„†‰€€ƒ‚‘¦²´º¾ÁÄÀÁÀÀÁÁÂÁÁÁÀÂÃÂÁÀÂÄÁÀ¿¾ÃÅÆÄÈÊÈÉÉËËÊSSPMPRQMNKMFKMPHGMJDCBK78?DHYjy~‡—› ¦©¨­²±®±´²·µ³´µ´¯¯«§¡˜’‘ˆ†vg^VMOMZYZ^\bbanhfnmlnvs|ƒ|mN]ZGGQUK]ecL@Y]NK32Gk297/,(,).:52111118-,5A01990SR6)" (Uli†ƒ~–‚C13+('(*($'0$* ":v“’psxužÌ¾¸ÁÀ»ºÊÊ4"%+*/7DLXagtrxt{|~‚€xƒ…„„ˆ‡‘–••’–™ŸŸ¦¦¨©¬«²­°°°´´·½·³®­­¨««¨ª¨®§  ¡šœœ˜’“–•‘Œ‹‰„…„z€€…„ˆ†”¤±ÁÌÙÜÞÜ×Ê´±§¤£¤¤¢žš—–•‘Œˆ…ˆ„€|ug_K:9;7+3@4329F\H2&&#.I… ®¢~£—W(0)+*'3L:3552+.*AZrƒ†ŒŠ‹…‹–¡¡¢  ™š˜—––›—š—˜˜™˜””“‘——™•”˜’”‘’•“–“‘••“‘”ŽŽ’‘ŽŽŒ‰‹ˆ‡€€{ƒ…—£ª¶º½ÀÄÄÂÄÂÀÁÁÁ¿ÀÂÁÂÂÃÁÂÄÄÄÂÀÂÆÆÅÇÌÌÊÊËÉÌËPPQLNNLOLMMOHIFFIIIFB=9;<7>G\ixƒˆ’•˜£¥¨©«¯­³³²²±´¯¯³´²°®¤Ÿ™–•„oh[WMKTNVTYbba`ijnnkqnqtt|~jQPWSYOJfwq[A^~dXB<;GWluy\<18;Pl€“s[esM4@lJ;:&(,)5/67254./56.0,3G63421KW9' +8Neo…ƒpŽšˆY>&%#&,'#"%2%!"(Zˆ“uonr„¾Ç»½Å½½ÃÍ«9.*-6-26?NYdlrqtu{z‚‚~€ˆ„‡…ƒŠ’•—™ž¡¦¨¤§««°±³¶³¯­²¶³¬®­©®°¯«¬©¢¢Ÿœ›˜•‘“Œ’”Œ‡ˆ„…}}|‚„„„ˆ—¦­ºÑÖÚÝÛØÌ·°©¥¤¦ ¢›™—•‘Ž‰„…‰€‚€}zrhaE=:71'19735:H_J1)('+G‹¥ª£„˜¤—`+-$*:(3<=22.,,).I`yƒ‹‹ŠŒ†Š–˜ ¡¡ œšœž—›”›˜šš™—œ—™–•’”•’–•‘—“’‘””•Ž‘••’‘’Œ‹‹‰‰Šˆ„ƒ…€z‚’Ÿ§²»»ÁÅÅÅÅÄÁÁÁ¿ÂÀÁÂÃÃÂÁÂÂÁÂÃÂÅÇÉÆÈÊËÍËÌÍÍÊËSSTRKKGSGIIHJHGFI?AF??<874CKWg}ƒŠ’•ž¡¡ª­ª®±¯®µ°®´®°°°¯­«¤¥ž˜‰ƒuh]QKIMQVWXY^jjgeimmlqrsquse@?Yvfh{{^HF^i^IFI\lvjN;.+4:VQfš‚\YmkA>M:B:*)*+4=326360-3123--I*-,&0@[;'!"0JXeoƒll•¥“vX-$""#$#$!! $9qšŠsroršÅ¹º¾ÄÃÅËÁi10),9.74C]bo`UEIcrkE563979;5XŠl\^p;28@=41*5.3>/33,>3,4211=85,:@.00JC($!:A`eqzgZ°™yD)"+/)# !(&!$)R„žwrsvz¶Ä·½ÄÄÉÐË–2))(4C,1;93)&<11./3E\I-,(%*@x­³®‘‡ž}<*("##1BC?,1834HTix„Ž’”Ÿ¡¥¬¨¬¯®®¬«­®²±­°®®¨¨ž™—Šte\QKHHNYXgqnb_dcfjinjnonpvu¢›‡r_AKEOp|hjF;]{];:69HN7R423@]‰}kM€b718E;94760D53/,/1-)/1.)+-Gj_0$$.D5*-(2Mon{rVJt¬¤™“pH,% !%(#*+*L–xcpz}¬Ê»ÂÈËÐÕÈt4)"%'?D106>*(/3:.58==LWE0&&'$8s¢¯¦—Œš–V8=#!&37?9/6204Je}‰‰‡Š†ƒŽ”£¡¥ œš›š—œ—š—™˜š•˜˜›–“•“–”‘‘’”“‘’’ŽŽ‘Ž‘ŽŒŠŠ‡„†€€€ˆ˜¤°µ¼¿ÁÃÃÅÄÃÀ¿ÁÁÀ½¾¿¿ÂÁÂÃÃÃÈÈÉÉÌÍÌÍÎÍËÎÌÌËÉÊÊÊJJLORMLKKJNLMRHEJFIC;?;6629FXgv€Œ‘›ž¢«¬­±¯«¯©ª­®­­°³°©¥¥•–‰ƒtkXOPDNSOZr„‚d_cbikgjgnyƒˆ•™•‹tTG.?IWp†jP@Vƒ‡X<357UH>6LqŒsX„D'3@9A:@53H83,17+,)+*3''/KHT1(-3=8,,-=_mv†‚hONˆy’±—n1 .!&++('/_”ldpx…ÂÉÅÇÊÍÑÓ¦.!%$'/9G77=GPS]dmmwsz}~ƒ‚…‡ŠŒŒ—”˜•˜˜›œ›œœ¤©¦­««³¯­®°­±¯¬§§««§¨¦£ ¢ž›™”‰‰„‡†„†‡†‚}€z|{{„‰ˆ–¢ª»ÊØÛßÚÕÈ© ¡¡žœšš”’•ˆŽŠˆ†„…€€~vvj[F<5/0/743=89AO\G* $"$0l¨§›„—“Œe4D#0(-;4;+,');Zv€ŠŽ‹‰ˆ†¢ž¡¤ ›šš˜–—˜˜—™™•”—””•–”–•’“Ž‘’’”•‘‹ŽŒŒŒ†‰‡„………‘™©°º½ÁÁÄÂÁÃÀ¾ÀÀ½ÀÀÂÂÂÁÄÅÄÇÈÉÊËÍÑÐÐÎÏÌÎÌÊÊËËÈÌOOKKFGJGEIJJOHDFBBCA>=5275FDAGE>91)5969K_O/'$%%2f˜¤¥™~•Šg<8 #-8?4860,+<]yƒ‹ˆŒ‡‰˜›¢ŸŸ¡ ›šžš™›œ™šš“š’–•”–’”“’”‘’’’“Ž““Ž‹’ˆ‘‰Š‹†Š‡‚€‚‹š£­·¼¿ÃÅÂÂÂÂÂÁÀÀÃÁÁÁÀÁÁÄÂÇÅÉÈËÍÌÐÐÒÑÏÐÌÍÌÊÊÊÉÉËSSNPHNKKKJPHHJJLE@@A;9131/AJ\kwŒŽ“œ¤¦¦ª®«ª¬«©ª®±³°´±°££ ™–Ž~um^OJMLKK_{‡t\Y^]iiv¤©©˜‘‰oE*-7:5Qk€››vHQzz[173/+;tmHMV66V–ˆ‚Œ…\Z’o143597R>7B6+*$.%')$)0'*+@RMLCFM9-8GM[\x› ˜‰`<4Rs›­˜h%!$#%Z‹”|mjsµÍÆËÎÍÍÉ‹0"&&$*&CU8069LVZeeopru}x„~‚…„„…†‹‹“•—˜™˜ Ÿ£œœ £¨£­±©©¦¬¨­°ª©««¤¦ ¤¥žž™™”‘‰…†††ƒˆ†‚…€yyxz|‚‚‚ƒŒ›¦­¹Ê×ÝÞÝÛÏ´¢£¤ ›–“’“ŽŠŒƒ…†ƒ€‚~~yvcPC70((,776D85>JWV0#%#,,a‘¡¦š|–“ŠoK6(#.87940.&/Mfz†ŠŠ‰‹ˆ‹–œ££¢ ¡ œ˜žšžœ˜—š˜™š™›™—“••“–“–‘’‘‘ŒŠŒˆŒŽ‡„ƒƒƒ„¡«µ¼ÀÁÂÇÂÃÿ¿¿ÁÁ¿ÁÀÃÃÆÇÈÊÍËÍÏÑÑÐÑÏÏÏÍÊÈÈÇÆÇÊOOIFKMGROPMIIFFBED?FA96013AJ_iw€ˆ•™ ¢£©®«²¬ª­®«¯·±±±¯¨§£¡˜“Ž†€reYJIFNEPZ~Žz_a]dt†š£¡”…wxd@&,81?n{Š™„b`xxH=1;<-3Q{dCi[29a˜Œu~ˆ`C{…K32<5;G=1:=.,%%)''%)0,1>RZ[PLTO1,GaWOc‰¤¦¨ŸuH3Ca}“_&$#;›~ump}ŸÆÇÊËÌÍ̤>&""#! *@V;74;EPZdelosv{x€~‚……†‚†‰‘Ž‘Ž’“˜–šœžšŸ£¡Ÿ£Ÿ¤ª¬¬¦£©«¬§§«ª¨ª¦¤¥¦žœœ˜”ˆ‡„„……†…ˆ‚ƒ‚€{uw|{}‚ƒˆ‰˜¡¬»ÈÏ×ÛßÜÕ»¡£ª£›˜š““”ŠŽ†‰………~xvo_MC6)'*081>F9<@LVW-%)'.2]Š¢¬›zž™ŒuP. +9631+,'?Vl~Š’Œ‹‰…Œ˜£¡Ÿ ¢ŸŸšœ˜œ›™˜œœ—™——””—“•”˜““•’•’‘“Ž‘‘‹‹‹‰‘Š‰ˆŒŠ‡€‚Ž›¥°¹¼ÀÀÄÃÃÃÁÁ¿ÀÀÀÁ¾À¿¿ÂÅÈÈÉËËÎÎÏÐÒÐÑÒÏÍÎËËÉÉËÊÉËRRLOLNNKNNNJMPLD@>D=983/1,:MVex‰Œ’š¤§ª«¬­«¬¬¬«¬¯¯±­°¬§¥žœ“‹€wbWNJHHHMUr“Žn[dw£¤—€op|ˆ€W1*76=_}€‹ƒSRzxG:>8>917bp\N‘jALyycrqAm—a8;B>;J52:<,'%&& !,5CJaleVTLH/-S^Jc€ª´´®‡O(3Qe‡vX$&X’pnnq…§ÅÈËËËδF'! "*%")FW?;8C>A;5752=ERex}‰•”˜ ¢¦¬©¯®¬­©¬ª­¯¯±±°ª¦¢ —–Š€rdVPEKOIKUd›Šnkˆ¡œ…vio‚Š„qT63?GlŒ{}}\B45AZhbGeŽT;MˆƒveuwFYšx=;=29<71;60("&*%%$)6-;CnzfUB:20MVf{ƒŒ»··µ”])3=\…uF$#6oŸ‹m}vu‘¾ÃÉÊËÏÂc(!"%% &.JUC4;CJQVgijpnz}}{€‚„~ˆŠ‹‡ˆŒ‘—‘––™›•› ¢¢™ž¢¤ªª©¨§§©¨©¦§¥ŸŸ¤¡žœ•™‘‹‹Š…„€‚††„‚||~|wy{{z}ˆ–Ÿ§²¿ÆÓáâáØÉž—œžšš—˜““‘ŽŒŠ„…ƒ‚~yoeYG:-(*-00-6B>DMBMX-( !2Iœ¥¥‹¦‰S**80(++,2Hdv‹‹ˆ‹‡ˆ˜žŸ Ÿ œ›˜˜˜˜™™˜œ™™œ•™—•–’˜“•’””’‘’•““‘‘‘“‘’‘Œ‰‹‹ŽŒ‹…††‚~„Žœ§±»¾ÁÂÄÅÃÁÁÀ¿¿ÁÁÁÀÁÀÃÃÆÈÊÌÌÍÍÎÐÐÑÐÑÐÑÑÍÍÍËÊËÊÊËÍOOOLKOKHIPHGJIGEFA=>::81-/6ATg|€‰’— ¡¨©§ª°«¬­«¬¨°¯¯²­««£ Ÿ”Œˆ~taXQFEFILL\l‘œ……Švmrm{„~ztX;:FOz•wqhBNjZPfczA25Tj\JLxK9W‡vvbv–†X[ŠJ88)-97368/($#)($(=H39>]q€nO>89@Eeuzxu´»¸µ™g,%2KsL& $Oƒ”xoxvw¤ÇÇÎÎÍ̈0%%$& #(&(I\G5A?>;8403/$2FVer}†Ž•š ¤¨¨®¨­¯±°®®¬®±±µ¯­©¤¡ž˜’‹~ue^UMJIJSRUZ[]gk{‚jku…„Œ{tW@:=H^USMWdk`^eA8W`bUI?Ky…FFM>\qTFh‡“¢l?1a5#&-/-3**+40/920/.)0RfI>DNGQc„€v`cYC1CW^G;1)$0,7."-OJl‡uqz}ÈÉʪž¡;&!%'+&&+$%+Xk]?872.5*'/=N`w~„’œŸ¤¨©«®¯¬®¯®°³°²µ²´°««¤›“Š}vmYNHEIJLQW__hu„xjgmry{|vh9:KUb[Yeˆ’¢qF5FŠR''$/@-&.)I=;0+$'#),9a4-RNN_x¨ŒwbPH@Fm†rO:.'"#0/+"(Peh}…jmqq¸ÉÃ¥‚–{3##"($"*%(*[k[@9FHOU]fgkstty|~~‚ƒ‚†…ˆ†‡‹‹’’“”šš˜—˜–˜š•šœžœ¡¡Ÿ¢¦ž¢£££¡œœ˜——‘‘Ž„|yurv{ƒ„ƒ‡…ƒ‚‚ƒx{z€…†Œ•¤«²¸ËÞææàÓÆ–’Ž‘—•–•‘Žˆ…„~}yprdJ0-,(--46-0:CCNRAIA7-!!#2;S„ž©›Ž˜¡^74)'#(",JYt…“ŽŒŽ–¤£ Ÿž›››™š™œ™––˜——–“““”•–••˜™”—•’“””’•‘–“’–‹‹ˆˆ„…ƒƒ’š§µ¿¿ÃÅÅÅÂÁÁÃÃÁÃÁÀÁÀÅÆÊËÌÏÑÒÏÎÏÎÎÏÍËÊËÍÎÏÍÎÏÏÏÍÍÏÏÏÏRRMLMNNNOLPIKNDHA::564/+*$1G}X32=Mr~VEHKEGE04"##/0G˜«™œ•Ÿ’†^(<)!!-+*Phv‡‘”“‘›œ ž›œš˜šš˜–•™”——”š•”““—˜”“”–——›–••”–”’˜‘•ŽŽŠ‰ŠŒ‡ƒ€†‚…•«¹ÁÁÅÇÆÅÃÂÂÂÂÃÁÂÄÄÄÆÈÊËÍÏÎÐÐÐÎÏÍÎÌÊÌÍÏÎÌÐÍÍÏÓÎÎÎÎÏÏTTVQTQMOPIPJGFCC@:?:;8./,&/=Nav}†‹–£¤¦©«ª°¯­¯°¯¯¯°´´²¬¬¬ œ—’‰}zkZPFFEKV_v|ŠŽ‚ohgjllxtuqfIENLI[b[=\rzxNEKZP@MH;9dyK/'6XvŠ`;S††šŠT18f‚>+-*04;JD;5+*.!!$GO>Y[k…ŸXET]l•¢”€_J;E3.(&"$/, "%GŒ˜š–ˆ€vkmdv‚†‘¢­šn5(%&""'.$/E$.Vq\NFCCMYWcjuqwyz€||~€…†…ŒˆŽŽŒŽ’›“˜•••–š›ž›žœœžŸ¢žŸŸŸœ™’’ŽŒŽŠ|sjlt|ƒ†‰Œ‹ˆ‰Œ‡…€}}‚ƒŠ”ž­¶»ÊØäçáÒ‘Ž“•’”““‘Œ‹‰‡‚€ƒ||urgK0.**/0,63/8CBGMK@LB36$# 0.>ƒ’­Ÿž–œ”‹_2;6%"!'.Xp~Œ–‹“Œ‰“› Ÿšž™šš˜š—š˜—”‘˜•“˜š•”•”˜™™—”•˜˜”“™‘”’•“•”¢”‘‰‰„†ƒ‚‰›¥¯¸ÁÁÄÇÄÄÂÁÁ¿ÂÂÂÀÀÃÆÈËËÌÎÐÐÏÐÏÍÍÎÌËËËËËËÍÎÎÏÐÑÐÏÍÍÎÏVVTTPSPPOOOKJIG@A??865.-+(-AOfx~†Ž–š ¤¦««ª¬®¯¯¯¯¯²³±²±±¬©£œš“Š}yeWNKBIS_p…Š‰‚hibjnkjquwmhNDJI”šŽU20P‡F*0/9GL53.*&79# #59APh¡’ži?5@OYfqe?1*-('!'#%0& )wª¡¥¤™•’€uw‚¡ª½°d0$#$'%2&#''$+]qbZDEJK[Zimntx{€w|‚€…‚ˆ‡ˆ‹Š‘Ž‘“•—––˜”˜ ›žœžŸŸ¡ŸŸ ™•’‘Œ‹}wgou}†…Œ‰ŒŒŒŽŽ‰‚{x|~Š’œ«´¼ÇÔÞáÜÓ¾‘’–”‘’ŽˆŠ‡†€y{yrZ>.%)('%0-308?<@JHIK;.7)!"3(6u“¬¢Ÿ–‘’ˆl@22#!&$.[u~“‘Œ‰’¡ œ ›œœš£™˜—”˜–™•’˜•””•••–’“”“”“˜“‘”””‘’‘Ž‡‰†‡„„ ¦³¼ÁÂÃÅÅÄÄÂÁÃÃÿÃÃÅÈËÎÎÏÐÏÎÑÎÌÎÌÌÍËÎÎÌÍÐÏÏÏÐÎÐÐÏÎÍÍSSWVTNOOPIJKJIGKHG>@<;+1)(3ETiv~…‘’™¤¦§¯¯­®®¯®°®±³°³²²­¨¨ œ–‡~skYSLU`mŠƒse`hhkhruwurq]ENFG;[YTnxuvTKZNC=FBQ/FƒPK-,2LsŒcH?e™”`24;f-2=HFC0.'-:I="%))0;GAjRO;+(4;K^smP1,$! %'%: ££¦ ž¦« ž›ž©½¹©]@% &5(.'))(3[ifYGC>-++*9NXiu€ƒ•™ §§««­ª¬®­«®±¯±³´µ®®°£›†~vpbZXly~mf]^bcdgkptwzviXFM>‹ŒB/+8=7*/*1:OC) !'*7J87//+(')1?irpE,%#$'".*a¨ž©©§®©¬¦±´µ¸½¬‹vM5(#%%&,)10/&&2Xh[V?:GTY_dnssu||}|„€~‚€„†‚Š‰Œ–ŽŽ˜–˜“–”––“š›šžš—œ¡Ÿžžž››šš–‘“‘‹”€skt{|†‰‡†‡†‚…‡„Š„~wwuz„”Ÿ­¹ÄÊÍÓÑ˦’“‘”‹ˆŠ€€~}woYC0))++))59225?:1,+:JWez…”—ž£©§­¬­ª®­ª¬®­³¯±±°«¨£˜›‡|madh_gd\\Y\^^adcdjox}uzdXTK25J]bhagzkiWKAK.#2Pl„ZS=A-*6`nSHTvž¬„B64~¥_/(,2+.0-2:^G$&**9KB>9+($*3BKqbOE2''''%%+(!$Œ­¤¨¨³³©°¯³¸³¶´˜zL-(%!"!0,+&()$3`oc\GMLT\]emsoyy|~||ƒ}ƒƒ‚ˆ†‹Š‘Ž‘•”–—•™˜•–”—˜›šŸ˜žžŸžŸ›–•“‰Š„qkp€ˆ†„…‚wns~~€‚„~yzyy„•¦²ÁÈÌÌ̹™’—‘–—‘’‰‰Š„|xvhH0,))-,.,05125:9HG:LWe^_n€veQLC>""8X’˜n`PJ<3*.3T‰sC'%$%*$*+*%7¡³­¯®¿³²·½¸²¯¦ [<5&# !&),//%&(%.]oX\HPLV]adjwsxw|{y|€}ƒ†Š‹‹Š•š”‘™“—™œ•˜™›˜›žœž›ž™žœœ•‘“‹‹†tw‡„…„ŠwV:68GWfrsv}xzy}‚ƒ °¼ÃÈ˾¥™“•’“‘“ˆ‹„}~{q]:2'+%/0.-6;72=B@MK6?N:0/4/$*(&Wšª¦ ‹Œ{_1'2(,/UmŠ“’Ž–œž  ›š—š››˜œ—““’“——–•––•—˜”•“•“““š‘“‘Œ‘‰Š‰‰†ƒ€}‡˜¥­¶½ÁÃÆÄÄÃÄÀÃÅÂÃÄÆÈÈÍÍÍÍÍÎÍÊÎÌÍÍÎÍÎÐÏÎÎÎÐÑÑÐÐÏÑÐÏÑÎÏÏÍLLSOPMNRQHPHHLJECBB:CA89/5ASbo}ƒ‹’•—ž¤¦©©©¬°¯®°¬°°°´³±°°«¥œ—Œ‚}qi`QDOKNSU]Z_bihgjkntqi\NOTK@UeXPfz‘|bVPM5%$5g¥†\X;@]>*9Qym^bXk”«¨j4.Q~;(-006GLA978=DVfu…Ž•˜™Ÿ£¥¨ª­ª­¬¬¯¯®°²±¶²¬¨¨¦Ÿ–‘Š~qdYIKIMNV\\[\afgjfpnpnkOz“¬¬}~˜~`6#(?0Acz“”“’ŒŒ”›žœœœ›˜˜™•›•—–“˜—•••’—–‘—–”–––“•’–’“‘’‘’’‘‘’ŒŽŽŠ‰Š„„…†‡’œ§¶»¾ÁÆÆÄÅÃÅÄÃÄÆÅÅÈÉÌÍÌÎÌÎÏÍÌÎÍÎÏÏÎÎÑÒÐÑÏÑÐÑÑÒÑÒÓÑÎÏÍÍÍMMUJOHOLKQINQNHIF@C>?GE<=?MYgw}‹‘•™¦¨¨¬«¯®¯­®±«°¯²²¯°¬«¦Ÿ—‘‹ƒ|o`TKHCMRQRY[a_cbgholnojTIcaO=]^]Tm}{fYMG*!&/f“€hA4=73-#,-+:Ei‰“š¢­®°¶¾¿¹®€($&'$*.)+4-,-.2(0+10_oneLMObefktvqtu}{x}€ƒƒ„„‰ˆ…‰Ž‘”Ž”—•–•–—™›œ—šš™›ž ›¢š—˜’•“ztw|~~‚{}~€}vnmgamyxz~…š±¼´°«¥¢œ˜””ŒŽ„€‚„€sa@0/1067+)-)B12;8EHU;9BKE.--6@(("2d“¤ªž~™‹jH0!)NWt†““’”–’“’œžž› š˜š™™—–“–”—”—”“–•–•˜”“’‘’’”““‘‘’‘“‹ŠŠ‰……ƒƒŒ™¢®¶¿ÂÃÆÃÃÄÄÄÅÀÅÆÇÇÌÏÎÏÏÎÏÎÎÐÏÏÎÍÐÎÍÑÑÒÕÒÒÑÑÔÑÐÑÑÐÏÏÍÎÎÏNNWONLMOMKMNKFFIIECEGCCGCER`n}ƒ‹”—œœ ¦§¨¬¬«®«ª±±±°´°²µ°¬¨£›‘†xk]UJGFOSW[_`faehjnnwxxpRX_UC=bYRNAPbP:<1+&D‚‹ubUM:U`cO<1>wobQpur›¨xEOo¤k" ')2).l’™zB0,($"# "+W‰yU2)&0A2/M=;TRL]copz‹”–”˜Ÿ¨¤­^7&% #'.8:,0.*)*0&./*0ctsiQIP^flhtnqtw€}€zz|€‚‚‡‡Š‰Š‹Ž•”’““”•“‘‡••“•™—•›˜š› žž™ ž™›–””•‘‰‚}{z}{„‡„…†„ƒ}wvutowv~ˆš­¿»³®§¤Ÿ™›—˜‘Œ‡‰†„„€†umZ302,/830+*0@75@9IMTB?ILC0++78*$"-]¥®Ÿ‘z’Ž[R*%-Nc{’•’ŽŽ’—ŸŸ››šš˜›–“˜˜—™˜”––˜”œ”™–““™“‘–—’•‘“–“‘”ˆŽ††Žˆ€…Ÿ¨±·ÀÁÄÃÅÃÅÄÂÄÂÇÈÈÉÍÏÐÏÍÍÐÐÏÏÏÎÐÎÏÎÐÒÑÒÓÑÑÑÑÑÑÐÐÑÏÎÎÎÍÐÐMMPOJHQONHJCIGLGDAAABIBLKLUfp|„Ž˜™Ÿ¢¥¦§ªª§«¬­¬¬­­°²µµ³­©¤ž–„zodVNHKOOT\V\accgemy}qqdXbT98=U]WU=MVE3*"*Jq‡tiMD]GXVRJC4EuƒiJEezp€©ŽXXz•~1 &+75&/o™§ŒLO6%&"#2o{lM+.#"IZDKeh^dm_n}mlz~„„{‡›´´¶b0&"#$&*;QIJEE,+,-&2;3+Wqyi\SQ[`ijovutu}~}~y}~‡……†††‹‡Œ“‘‘˜‘““•”’—›š‘–—œŸ£˜›žš—“–™’’††…|zz‚€†„†…‚|twvyˆ¨³»¿º´¬¨¡Ÿ›œ”“–Œ‰ˆ†‚††~wh?/,.3-84-/3-=2;98M]M@8OQD2,,:1''#+OŽ¥¯žŽ|‘“dY;''Oo€Ž“”•“‘”š ›—™š›œ™–•“–•—•”•““–”–”•˜™–—““‘Ž’’“‘Ž‹“‹‰‡…‚„‰“žª¶»¿ÂÄÂÃÃÂÅÃÅÄÆÊÉËÍÐÐÒÏÎÐÎÎÐÎÎÏÍÎÐÐÑÓÔÓÑÑÑÏÒÓÏÔÐÎÏÎÎÐÐÑNNTRSKQMOHJNONLGA@?FGKGIORYet~ŒŒ’˜›Ÿ££¤¨¦ªª©¦ª««¯¯¯¶µµ´®«¥Ÿ–‘„zl^TKGGQSU[\^c\cdjvzyuwfZQ-46=U`WVAKEB1%$5f†yhG>>[UUDNFW6,-<-*-",H†£°¡‹{‹ab7+(Ry“”Ž•œ Ÿžšžœ™œ˜–š™–š—–™••“”•—”–“–•’‘””“—Ž’“‘”‘Œ‹ŒŽŒŽ‰…„ƒƒˆ„˜¢­¶¾ÁÄÃÅÂÃÂÄÄÃÄÊÊÍÌÌÏÐÐÏÎÎÎÐÏÏÎÎÎÎÏÏÐÓÑÒÓÒÑÑÑÐÎÏÏÍÏÎËÏÑÒIIONRNRJIGRNSKILDC?DHLLJTRYiz|Š”šš¥¢¢¨©§¨«¨©ªª¬°°°±³³°®ª¥—„wp_ROKIMSTX\Ya``ehtwpsvlaC+*'2N`WYGL;4/0..41+.+23>6:?:RXLOKSBE:41B)1+!$?…«¦wŽ„UbFSV=<\xO\~re\bzyfIgœ‰e…Ž‡w4'$&18+/V€›“ƒ8(" "(Xb6':;IRSdb`fms›¥¶³‰_dj^eu~ŽÀÓËw/(*)-+.*121,EA446131()-0dwzWeNV[_mlrrzxy~{|z|z€„}|ƒ€‰ˆ…ˆŠ•’”““”•™™š›˜›š ž› ›žš›—•’–Ž‘Ž‰…†…ˆ‹•—¦£•“”œ¬ÁÆÇÃÂÂÀµ³«¨¡˜––••ŽŽŠ†…‚vV1110.)/402+12;;=;D^\EAERBA83PuVp~ghkoyhSHTœ’p˜ˆ…X2.(3?.6OqŠ{rgG8$).CV=/5LJakdopknw‹™°±¹žZbp_jw{‰¬ÎÓ 91.,3854198<>>9828340.107`w€_hPS\dmlruxxxx{{|}zx}‚†…„†Š‹‰Œ’ŽŽŽ‘”Ž“—˜š™™›™žž¡›œž›š› –•˜•–•”ŠŒŠŠŒ›¤²¶¤™•¢¯½ÇÅÂÂÂÀ¸³¬¤›˜••Ž‹Š…„ƒ…€€tH52502)..*215+7@?8A]bC>P[L:7.=L)..&!5p‘¥«•nŽ‡T`J:Jd‚“’’‘‘›Ÿšš—š–˜›š™—•š—˜š—”“•––••Ž“’“˜•’“’‘’‘“”Ž”‘ŒŽŠ…„ˆ‚„‡›ª´¹¾ÂÃÃÅÂÂÂÃÃÅÉÊËÍÎÐÑÏÏÎÏÏÎÍÎÌÍÑÏÐÐÑÐÑÒÒÑÑÐÒÑÑÏÏÑÒÑÒÒÒÑÔRRRVPPOSROPSPMLIGFHB@@FLS]ck{‹–—ž ££ª¨¤§¦©­¬¬±¯¯±²±³´¯¬¥Ÿ›—ŠˆpaUNJNORTVZY\^behgpx…•š†O8+,0HVSF>NGIFx“oVC84,.>FLLL>RZ\iqbhrl}mWBO–šjo“ƒoF-)/@45Ki‡{cH-;&0CG4" *5V{}upx€…ŸŸ®½±eXoibt†‰¤ÂѹK/-//04300-331@676611.,+04\st_iUTcahpouwz|~y~€~|€~ƒ‚„Š‹‰ŠˆŒŽ‘Ž““Œ‘“—™š•œ™œ¡£žœžš›˜›˜™•’‘–ŽŒŒ“”™¤²º¾°¡˜£°»ÈÈÀÁ¾Â·±«¢žœ•’’Žˆƒ„€‚}w`;13340/1-*+.24BH:7>c]J:FYD8@4@B-5((!1h ³—n‹†P]S>[k‚Ž’““” œ›ž˜š™šœœ“–—š–™“‘”•”—””’™–Ž‘•’“•“’“’Œ‹ŽŒŽŒ‹„ƒ††„—£¨±»¿ÃÄÂÃÁÃÄÅÇÆÈÌÎÍÐÐÑÎÐÑÐÏÍÌÌÎÍÏÎÒÑÏÎÑÓÑÐÑÒÓÑÑÒÒÏÒÒÑÒÕÔÔQQMLKGFKOQRJNCHJEGA:>@EMVacnz€‰”’œ›Ÿ¡¢¦¦¨¨©¨©¬­°¯´±´´µ¯®¬§ ™”Šˆ}lbTOINLTU\``b``khnv†ž“rV@26:Kc[MERO`m“~Z=;3154AJJUMDEL\gphZrn}viIJŒ k]”~XJ>??MKFkiopC6C=JN:**'07S€‹…}„”©«±¶½Q`cYav“œÂËÂs85655@?>763893>7F?5<,(#/XŒŸ³˜|ŠQY[CftŠ’“’’‘›œžœšžšš›™•™”–•“˜—–™•”’”•”••“•—Ž’’–‘““‘•”“‘ŽŽ‹ŽŠ‹…„„„ˆ™¡¬´¾ÂÃÆÃÃÂÄÄÄÇÉÌÊÏÒÐÐÑÏÏÎÌÏÌÎÍÎÏÎÎÏÏÏÏÑÐÑÑÑÓÒÒÐÑÓÐÑÓÔÒÐÑÓMMQMCFHOMHLPJJIIFDB8;;DJVbfq|†ˆ’•›žŸ¥£¦£¦¨«««©­®®±±¶´µ±¯©£žœ”‚|jgQMKGHRYSX__abfgs†‘˜paU9-;9C]K:FZpu€`B;@.-102@@CH?DBR_^QEepmvrLFsœxU|•||fP?GL\OFV[SfIIB9AF+" -3Iw‘‡ŠŒ–š¥ª¨·µ«[NhUQYh”±ÈÅ}9'%+*)0177;9?A*%$3I{¥«‰ŒŸ¤Ÿ«§¯¼¯‡S[jXYbeŠÃÇ‘7+1&+1'31.12--/61A=;;-2.+*'&JopnfeS`klqqou~zx‚y|}}~y}‚ƒ„„Œ‰ˆ‘ŠŽŽ‹ˆ‰ŒŒŽ“–•————š™•”˜™››œ›˜˜”’™—•’‘““”‘”–•›§´ÅÌÊÁ·©¨³ÀÉÇÅÃÆÆÀ­¦£š—”–’ˆ‡Š‡}uA6-5112,+/*,0.17KD:8QZSG7?C4/2&'"0Bv—¯£‰‰VVoVj|‹“”‘Œ•’— ›š›˜™™—–›–•”–š’‘–•“‘•’““”Ž‘Ž”Ž”‘“Ž‘‘””‘ŒŽ‹ŽŠƒ„†Œ›¥®·¿ÂÁÄÂÃÃÃÆÈÊÊÍÏÎÐÑÑÏÏÎÏÎÏÍÍÌÎÎÏÐÒÑÐÎÐÐÑÑÐÒÒÑÒÖÒÐÓÔÕÒÓÓÑFFLJIEHLIEEMLFIK?A>:3CE0/?201IJ9XKA@KRGQB_|eg[VVFe‰n^•–yw`>>Vho`UNJRI+%%6F3'/?S”µ©‘¥¦­´´¿»«^XbZX^`u É©?)#$)31-+,143/18:;K@EB69WYTE;IOK6?AB3-+($+=w—©¦€‰‰YPrgt‚’”“Ž‰”“™ œš™™š™š˜˜š—“›••™•—“–—””‘“‘—’Œ““’‘’‘“’“‰’‹Œ‰ˆ†ƒ†„›ª³¹ÁÂÂÅÄÅÄÅÉÇÍËÍÑÐÑÒÑÐÏÏÎÍÎÎÎÏÍÎÎÏÑÐÎÎÎÑÑÒÑÔÕÔÑÐÐÒÔÒÓÓÒÔÔMMNCFGLGEGGKMJHFCC=<8?DKY_gp€ƒˆ”–—ž  §§¦ª§ª¨§ª«­¬²±¸¶´±­¬¥Ÿ•Œ‡ylfYJEFIJQ\V^]dfs‰˜ŒsivyhO29@?RJWvˆˆg/-26ED03;256OE7KR>/MD=<1,6/&%*Elfi[vXZceopqrux}{|€~„‚‡†Š‡‰‰Œ‰ŽŽ‹‡Œ’Œ’Œ’”’”™–•““˜—˜˜˜ š˜’’‘––—”•™•™˜œ¤¤°ÁÑÎÍËÁ´«°¾ÌÌÊž¹­© ™‘”‰ŠŒ…|h7---.--02.4--*16@GB9JPYQHA@PB8BC9511*+#/>pŒ¡£}w‹fMnzw…‘‘“’—šžš˜˜——žšš–––™•–‘••••’“–“”••“–’’ŒŽ—‹ŽŽ‘–Š‹Œˆ†‡}„ƒž©¶¼ÁÄÂÅÃÃÃÈÉÊÏÏÐÓÒÏÏÐÐÑÍÍÏÐÐÏÏÐÏÏÐÑÍÏÎÒÏÑÑÔÓÓÓÒÒÐÑÔÑÑÓÓÓÔIIFHHHFBEFA?CDDBB=F=BBFNOYbq|ƒ‹•˜›ž£¢¤¨©©ªª­«®­¬®±³²³±¯ª¤¡š•‰ƒxp^SOFHNLU^TVVex’sofwƒudHB:6\SA>DMFGARyp:1LWt~…n{{ˆe6i™S/7,'+>K25CWfmdjs}–¢¥®¸Â¿±e\ZVXY^r™Á”9*&+-84/6D81.252+2=7J@=B,.4/+))@ccg`zYQ]ivmmwww|}€€‡‚‚„ƒŠ‡†ˆŠŽŒŒŠˆˆ‹’‰‰ŽŒ‹Ž”’’•”“””—’’–›œ’“˜–“‘–””šš™›š¢©¯ÄÓÒÎÍÅ°¦­¶ÆËÌÄÁ¿»¯¥œ”Ž‘’‹Š†Œ‡ƒ|M/.7,1-+7/-71.,2=HMOLU_pw{ˆ”ššž¢¤¦§¨©««ª¬¯¯¯®¬²²±µ°¬§£—“‚zo`UJHDPOPPQ\]wŠ“polj{†v_4>A?Wolp{~g5(/9;4:SRHCD?P@50T_KI9HOD?OftS4HBPzzyitl‚yTƒ§‘:#1;'!*BX\bd_k`gw†•žš§µ¿Ä¹vVeb[YYp“Áœ>),)%)7503767+2:00-@4DKLB57/./*'Aibe_zdI\ahlutt|{~z‚~~„…†ŠŠ‡ˆŠŠ‘‘‡‹ŠŽ‹‡ˆŠŒ‹Ž‹’••‘‘‘•—˜”““’’’—–˜•šššŸ ¥¨­ÃÎÑÍÌÀ¬©±ºÈÎËÌÄ»½±¤œŒŒŽŠ‰Ž‚o<3,-+1.010/.*4754=@=FJOPQLDJI7/D86>23*+')>oŠœ­Œt‘gIs„ƒ‰Ž’•’š›š˜šŸšš˜”™˜›—–•””–œ“”’““”””“‘‘‘”’‘Ž‘“’‘’Ž‹Š†‡‚‚~€ƒ†•¡­µ¾ÀÄÂÄÅÆÇÉÍÌÒÎÐÑÑÍÒÐÎÏÎÐÏÐÐÐÑÏÏÎÑÎÏÐÎÑÒÑÔÔÓÒÓÓÒÐÒÔÔÕÓÓÓÔMMICEJ@HDCFDDBCD@;>=ABNNRT^ov}„Œ•—ž£¤¦¨ª¨¦ª¬ª­­²¯¯±µ²³´¬¦ “’„{raSHDEMSUUX]n‡š€efem†€wW5WN=DKFFE<:7.,%+(>jge[pdS[bfirou|z{‚|€~ƒ„ˆ‰ˆˆ‡ˆ“‹Ž‹Œˆ‰Š‹ŠŠŒŒŠ’ŽŽ’’’‘’”““‘•˜”“–š–ššžª¯ÃÎËÐξ±°¸ÉÓÒÐÌÊÀ¿³£™‰ŽŠŒŠŠŒ€M4),-..+:8311,,1B7><:CHPLMFBHD78B9;9+0*&'&6nœ®Œq’tDq„ŒŠŒ“’›š› ™›œ˜Ÿ–›ž••™š˜”•”“•–’•’”••“—’‘“‘Ž’”‘‘‘’‹ŽˆŠ†‚ƒƒƒ„˜£®¸½ÃÅÄÄÄÇÊÌÌÎÑÐÑÐÑÏÎÏÐÏÎÎÑÐÒÐÏÐÍÎÎÏÎÎÐÔÒÒÔÕÓÒÕÓÔÒÒÓÒÒÔÓÓÓCCF@DA?JBFEDCGEA;EOEEFET^]b:-0>Rt’”vq|“€;&(1Hi}…‹~pmhs‚Š¦¦¨·ÃÀ§VYqUWbfu¦¾r)&(#%(7MPA310.(+706148FHGGA0.1&+(4dg_\n_LP[`gwptyyx{ƒ{~‰‚‡…Œ‰‹ŒˆŒ‹Š‰‡‡ˆ‹ŒŒŠŒ‘“‘‹’”Œ‘’Ž‘“•š™šž££±µ¾ÉÍÔÑËÃÁÅÍÔÊÁÀÀ¾¿µ¨”‰‰Š‹‰ŠŠˆy;*).+-3-8D413+.074=?ELIQKVC@LK?B@=G9//+%&%.j{›¬t}Ksˆ‡“–‘“›š››–™˜œ™œ–——–š““’’“““’”•–’“““™’“’‘‘“’Œ‹ˆˆ‹ˆƒƒ}‹—£®·½ÃÄÄÅÇÊÊÏÎÑÑÑÑÐÑÑÏÐÎÐÏÑÐÑÑÏÑÏÎÎÍÎÎÏÑÔÔÓÔÓÓÓÕÔÔÒÓÕÓÔÕÔÓÔII@;:>>E?C?FDHJACB@?DEBGNU]iz‚‡Œ•œ›£§§§¦¬©­­­¬²°±²¶¶³³®®©¤™”„}shPJFGJORS^~’Šl`cfepƒvjS;JXD39S|gUD*7<43HQA9>=RD;@P`NI\KNA;GHMSQTq]>-2;X€š„nzŽ›†[&%#2Ul‡’£¢”‹‡}‰¤··¶ÂògXlfYbjw½š8'0+,%*?UbF6:23+,>.1+34AARPG12(+)(8`[a^nc[YZdfvoqwx{}€…‚€…„‡‰‰‹ˆŠ‡‹Š‹Šˆ‰ˆ†‹‰ŽŒŒŒ’ŠŒŠˆŒ’‘‘ŽŽŒ“•š™Ÿ ¡¡¤§§¬²¹¼¼ÉÓÏʾ¹¯¯­®¹µµ¦Œˆ…ƒ‡ˆˆŽ‡zX<-*/(,-55K30/.3972=EEGKSORE@ILCKE:F>/-$$'&*]{š­›w…}M}ƒŒ†Œ‘’‹–›œ›œ˜šœšš—–˜”™”——˜“‘“””–™’–”‘“’‘““Œ““”‘‹Œ‰‰ˆ†‚„}†–§±¸¼ÁÆÄÈÊÊËÌÐÏÐÖÓÎÑÑÐÎÎÏÏÑÐÒÑÒÏÐÏÐÎÐÏÒÑÒÒÓ×ÓÕÔÓÔÓÒÔÐÓÕÒÓÒÕFFB;>A@?CIFRU^huˆ’˜››  ¨¨ª¬ª­­ª®±¯­¶´±´´²¯®© ™•Š‚{neSEFIFKLVs—n^_ddip{vjJ:GD6&4kwgX:17B2?LFA<9<\J?TQjfJ]\TRGJKQMGK[qS882K^vwqw†”‹k3)**'Cawˆ†š¢¶¼³­–ª¿Ç¾ÂĵwO]qW\lt‰µ´E,/.(%))A_jK2/20&*94654?DCUNM/*+.)*:[jVWfgSN\^`oqsxu{||‚‚€~‚‚ƒˆ‘††‹ŠŠŽŒ‹Ž‡†‰†‰‰ŠŠˆƒˆŒŠ‘‹‹Š‹Ž“ŽŽ‘™™œœž™œ™–””  ž£­¹À³©¤ œ™ž¤ª«œ‹|}€„…ŽŠ‰„y=0.*/.*2569/.00/836EE>GITOZGAFWPCA;IE/.$'&%(Tš§¢u}„\|‡‹’“Ž——™Ÿ›œ™š™ššš••š˜—›”’”“•”˜˜™““““–”“’‹‘“‘“Ž‘Œ‹ŒŠŠˆŠ€ƒƒ‹™¦¯·»ÁÄÆÇÊÊÌÌÑÑÒÒÒÏÒÑÐÏÐÐÒÑÐÐÐÒÑÑÏÎÐÑÒÐÑÒÑÔØÕÕÔÖÓÒÔÒÕÔÔÔÒÑÔEE<;;?=;BD?DCJCCCB@A@ECMSV_j}€‰Ž•›ž£¢£ª¨«©ª¬¥¯®¬±±´µ´±³±¯¨¢ž—’„zlcQKJJJOTfƒ–ua^^]edq‚ƒhPB=:)';qv}mE:9D3<>EA;77ME?>AavUR``VWLPOOE@GmtRA;:ATXWmƒ€‹‚^+&Rscdl„¤¯ÅÊļ¾ÎʿŲ~W^l[Q\r©Åu)((-%'))?_qR4+,3));4475==FGGC3-4,'*9UfPYiaZGU^dkpsy~}|{ƒ‚„~…„ƒ„‡„‰†‰ŒŽŠŽŒ†‰ˆ‡‹ŽŠ‰†…†‡‚‚…†ˆŒ‰Œ‘Œ‘‘“•’“Ž“‰‡Œ…ˆ‡Ž”‘’—ž¡œ™˜’‘–™™}t{~†ŒŽŠ‚X//2*30/4:251133593?@IE:>TKYHDEQOBA:FG6-&%$$-A}›¤Ÿsv…c}ˆŒ•‘Ž“•žœœš˜˜˜˜—š–•š’—••“”‘‘““—™’“‘”—••‘“”’‘ŽŒ‹Œ‰Š‡‡ˆ„|€‹œ£­¼¿ÀÅÆÊËÌÍÏÑÓÒÑÐÏÑÐÏÎÏÑÐÑÒÑÒÒÐÑÏÏÑÒÑÑÔÑÓÔÔÒÔÖÖÓÔÔÑÔÔÓÔÓÓÔEE<=;:8B@=D@?FBDEB:8?@LNJRYn}€Š‘—›¤£¤¨©¬¬­¬¬¯«¯­±³·¶µ²±¬ª •Œ}yn_NOEEHOYt’†k_Z[acisŽ‡mE6/*(/Wk]€j;00A7:>CC6926@FC?__Raif_VUXJOCA[wlJ329J_Zeƒ‚}‡~T3*:p†h^n…¢±ÄÉÏÍÌÑÈúŒS[ifY[c{˜Æ.%%''*,(7KbI,*,4+'48565BIQEHL6/.-*,<`oNWd]THSX^jppsz{|~‚‚ƒƒ€€ƒ‚„‡„††‰Š‡ŒŽ‹‰ŒŠˆŠŽŠƒ„~~~}‚~ƒ„ƒ‰Žˆ‡Œ‰ˆ‹‰†‚†‡‡†~€~z‹ŒŠ‰–š’ŽŠ†‡ˆˆŽŒ‚qfgu‚ˆŽŠˆw9.-2)-1+020/7/4509/9FJC>FUFWLHPYA@=7;G2-$&,,0?z˜¢Ÿrnƒf€““‘’™ž›š›œš›’˜”–—‘’–‘”““Ž‘”••“’“““”“’’‹‹ŒŒ‡†…€‚~~Šš¨³¸¿ÂÅÇÌÌÍÎÑÑÓÓÒÒÑÑÏÎÐÐÏÓÐÎÐÑÑÒÑÐÑÒÔÓÑÔÓÒÕÔÕÔÔÕÔÓÔÔÕÕÕÒÔÔÕ>>@<;6:?=:=o”¡Ÿxj‰p‚‘”‘’”‹Œ›š—šœšœ—–”—š—’“–—–”’“”‘–““‘˜’””•“Œ“’’Ž’‘Ž‹‹ˆˆƒz}ž©°¹ÀÄÇËÍÏÎÏÓÓÔÐÑÑÑÒÒÑÒÑÏÏÐÎÏÑÑÐÎÐÐÑÒÒÓÔÕÔÕÕÓÔ×ÕÔÔÔÔÒÕÔÔÕÖÔ5557<:7:;6?>?EHJNUZgu‚ˆ“—›Ÿ¡¥¨­¬®­¬¯¯°¯²²²³²³³±´¬¥¤™–Š€ymaN@CDUhˆveVW^]dr‚Žš_B6+,3G\5)CWI@<=9;AONB85217>Hi„}eaeicjcOPPH@>G]znVF`oWQ\wx`UWsˆ”®«œvvŠ¦½¼ÅÕÍÏÊÁ¨eUitfX`kƒ°Æ|-)./+,40,'$=PN0%*01..11;=D4GBJRE++,)/1VzFRVjNLJY`ckowtwy…‚‰„{|‚{ƒ~ƒ………‡ŠŠŽ‹“ŒŽ‹‘“…s]FGNYelnqyx|}€wywtzuosmqqnkjjonnos~{|‰ƒ‰qWLCW_bimhclsˆ’“Ž‰|D,./,+/-576,1.1-2:28?II3=GT=9?@I@@@;<;:DFLKRYal}ƒ•˜™œ¡¢¨¬°®®©±®¯²³²±³´°²´®­¨¡ž”Šzm`RHEHl˜€i[UVW^pŠ“ {^D=/8LXzwayyN:Far`I:^ˆ˜™|s‰«¶À¹ÅÏÐп´yL_nja[d¥É®<$&/122:2&$,5INKWlVMDRYfkovuww€……‚~}}‚€ˆŠˆ‹ŠŠ‹ŒŽ’Ž€q[USVLIHMT\`hhjjkipnsga_]_Z[SQWYZbfovux}zsc\YTZcdotppr}‹Š’Š‰`4(5/-%0.4=3.521-6;6:EKN6HNS=LDPTRF?,.?UF<1#),+6a‰›œ‚v‘…‚‘’Ž’”•”’››˜˜£¡™–˜—–™™™—––’——“’•‘‘““–”‘‘’••“‘’ŒŽ’’’‘‹Œ†ˆ„|…’£­¶¼ÁÅÈÍÌÐÑÑÓÓÓÓÓÒÑÑÑÐÐÐÏÏÏÏÏÑÐÑÐÑÒÒÓÒÒÔÒÒÒÒÔ×ÖÕÕÔÓÕÕÖÖÔ×ÓÕ;;6<575@>B@DBC>>?@@?=JNOPacq{ƒŽ”˜›œ¢£¨«­®¯±²´±²³µ±³²´³±­¬¦ š’ˆtm\VKCY‚žˆk[OVT\f}—“žŠwZ;64AXVC-#(0.5?NL3AKT16H7:95Gt‘†ljeYforeV^UC:@M\z‚…|HF=\LA@?Ro{ywv{‘­¿ÇÇÐÔÔÍÀ£VVhpXacu”Ä»_&%'/,/12.,).3=IF0&)+0+5578>7A?KRM/%%)(1Rl?RQcWJHQ]fkhvwwy}~{~„z}ƒ„ƒˆ‡Œ‰ŠŽŠŒ““’Ž€sjdmdaXZSRWTQU]Z]ealoigff`c`WYYa]enprvttzskongcktƒ}w|ŠŠ’‘‹v?,),0+0.1462+)).4:31@KA<1;RW@OGOPN=:**9WM@1&.0+4Yƒ £‰~‘ƒ‘˜•’•”“•‘ š›¤œš˜›”š—™–˜—˜˜–”–“““˜•’”‘—•‘’‹Ž“‘ŽŒŒ‹Œ…ƒƒ€~y‡‘°¶ºÂÆÉÍÏÒÒÖÒÒÒÓÑÑÑÓÒÑÑÐÑÑÍÏÑÐÑÓÑÑÐÑÒÓÒÓÔÓÔÔÕÕÖ×ÙÖÔÔÕ×ÓÔÕÔÔ9975494;;8>>D>@@?<>@=FQPT[ep{’—œŸ¢¤©­°®¬±°µ±±°±°³µµ³³¯¬¥Ÿš“ˆ‚wp^QKT|‹t\VOSZYs‹–‰„tW@/8QN<@/0'+9=KMY6CMH54X><86CuŽr‰n`dZ]hcfoiaWLQMXgŽ—x?66NE-8DZu€ƒ‚„…‹¾ÓÙÙÓÒȸƒM\hVV_u“¶Å„2-0++73.1,)*+08HC4,67,/5469@55=IPR9*+.'3UgCQRaYRLR\Yeirzx||{~‚~}{}|‚€„„‰†Š‡ˆˆ‹Ž–’‘“Œƒwzx||tnjb^_^a`jliprrsnppmloikkknlkosz}ƒ‚ƒ‚}wxƒ…Žƒ€ƒ’‘‘Š†T3*,1**-012:-*-*+.714FIA85IRQD9+16OO>1$%0*1Q{™ |Œ˜Š™““–”“‘œœœœ™š—˜˜˜š•—™–—“–˜”•—•–•‘“”•”“”““ŽŽ”Ž‘ŠŠˆˆ…‚€€~†•£¬¸ÀÅÈËÏÐÓÒÕÔÔÒÒÒÑÒÒÒÐÐÑÐÐÎÑÑÓÔÔÒÑÐÔÒÑÒÒÔÔÔÔÕÖÔ××ÔÔÕÔÔÖÔÕÓÔ22:96>:;?<<@EGA>@>?CAIYXVZfpz…Ž••™ž¥¥©«­®¯¬²¯¯°¯²µ¶³·µ´ª¨¢ šŒ…wpYTYuŸ—p`TNSR[eƒŒ’‰zoS<0>T:8>71&*C<;89:EVF27YT><<=|˜nccccc]Xhvmjc[U^l|†uUIFBQ7ISoŽ‘‡†„|¯ÙààÔͼšk\j_Sbt”¹ÇŸ<,(/*20-31,3()15B>;,*/*3=696;>8>BGO=**2.2So8RVUVHLN[_deppuww{x„yyy}€}ƒƒƒŒ‡†††…Š’–””’Žˆ}€~{ssnknnrtsv{~||~‚}}z€}‡Š”’•››‡…‚‚ˆŠ‹‰ŠŽ’Œ‰u80,..3-107:4...022;;8FH877DZHLIKJRTG806=\a>.*+.+4Py—£xŒ¢‡˜•Ž–’––’›œœš™›˜—•—™—˜”š–˜—–šœ”““““‘‘“–”••‘“‘’‘’‹’Œˆ†‹„‚‚{ƒˆ˜¥±½¿ÆÌÍÏÒÓÓÒÒÒÒÐÑÑÔÒÑÐÒÓÒÑÐÑÒÒÒÓÑÒÑÒÓÑÓÔÔÔÕÔÕÕÖÖÕÔÕÔÔÕÕÒÖÔÔ665977;;:@::B=B=<<8BCI[[^Vjv{…’˜š ¡¦©ª¯±­¯²®°±²¯µ¶¶°µ²®¨¢›“‰ti\d}››z[PKMVZ^q†”zz{f\E7HG;AD7*,:8.7;.4>VD6:Jf982:ƒ¤’ŒkKOb`c]`Wdakoha^dSZRke<=bHfg€•˜‘Œ‚…|‘ÐãÞÔÀ¥{XinZ^rŸÆ·U').1:34610-,%*:8A:=-)/02<8?7?@2:EJPA+,',3NhCJPXUKNPVabepsuxx}{€yyz|~~~~†‡…‡ŠˆˆŠ‘”’“’’‹Ž‹ˆ…€€|~{€{xw{xz~‡ƒ‰„‚„Œ”‘Ž—˜™˜ž©¨´¯²µ¬¢‘‰…‚ˆŽ“‘Ž“Ž‹|L1+).1-.0,8;--0.2/2;==O@3:9F`IDJQISTME.1;M`=202.)/Lj•£™{‡¢š—”“––•œš™œ™™–”˜œ–›™–‘˜˜•˜˜˜”‘”’“‘‘Ž”’‘”“’’Ž’“‘ŽŽ–ŒŠˆ„ƒz|‹™¤±ºÃÇËÌÑÔÒÕÓÓÕÒÔÑÐÓÐÒÑÓÑÒÐÐÐÕÒÍÔÓÓÐÒÔÔÓÓÕÕÕÕÕÕÔÓÕÓÔÔÓÓÔÓÔÓÒ885;<;;IIOWR__fr~‡‹‘–šœ¦¤¦ª°®¯®¯³°°²¶¹µ¶·µ°¬ª¥œœ•€unk‚¤›€dPKNOSWmŒ˜zvuuc]J>DC6KP<-79,"3.-0?`K53EbB70?‰¯•†oO:UU`fielbb_UXaV>9?gxT:d]yz„››•‰…ˆ€u{²ÜÚ̬_]meeoŽ®´½}80,20795554-1&'3A7<81+-02<@89;;==>ScK;B2*'3+)/EbJ;<:`\/5=‡´–„gJ:;K_mmilj[QMTdV::;QsrSsoxz’—Š…†zry¥ØÒ¹”k]jgmy‚ºº½žA4+62,47370.,')&.1:578**,21?>04A<7;BI=0)-2:M]J?UTMRKHLX``ksqvtquvvywz€{{ƒ€~ƒ‚††ŠŠ‘•’‘—“ŽŠ„ƒ„|~€~}‚}|xwy~‰‡ˆ•™žªµ¸¼¯¾À³¹ÊÆÄËÉIJ£‡‡‡‡Ž”—‹‡‚xC-++(*.032355+))*(629255-27@JeJCJMLSK85/7EGZK4%(1+1Ocœ¦ „‹Ÿ’Ž——•––•—™››šž››š”•š˜š˜•™–›˜š–—–”””š“••’“˜”“Ž“‘“’•”“‘“ŽŽ‡„ƒ……{‹˜¥µ½ÆËÏÓÔÒÕÖÑÔÒÒÒÓÑÑÒÒÑÑÒÒÒÐÒÒÔÓÓÒÓÔÓÕÔÓÔÖÔ×ÕÔÓÕÔÓÒÕÒÓÓÒÑÔÐÏ4486:67A9=@BC:A?@4:>ILST\[bqy„Š’•š¡ ¤­¯®¯°²³¯¯¶°´´¶³²³­¦§¡›˜ˆ}{‰’–„cJHGLQQTc€šufgtjfc?@A1@o}A=;.&&2)'2OfP=7:]h4,E¶“…lG<3IP[llwuk[T[^K;>7L^pcl‚|ƒ~Žš“ˆsw«Ðɘm[jqiŒ”®¼¼¨V.-795:652525(,1-/-5=/<5*+.169573BK?@75-B–°šmN1,BQWYYlyxk]\bG:R:CY_`iŒ€„’›”ˆ†wsœÀиhUkrq‚¡¥³«¢n2.32+14503451/-0(/+3<6590++/6;89B>>>FKC>,)*8AQG4ZPVQ:EMVZeijnqtqwxuwvuy}vzx|€‡~€ƒˆ„‡ˆ‘’–”‘“ŽŠ‹Š†}{{zw|ƒ…}}}‚”—•˜ž¡§¡˜œ—Ÿ§¤¢ ‘„‰‘Ž—•–‘ŠŠu;)*/'.*-+.C1.4+++)(1-:H<,,*59QoLBUQWUHH>7C@A::3;=DTSW[\`l{Š‘•™ž£Ÿ¦¨®°¬°³´±±µ²³³µµ±¯®©§«°¦ž”ˆ‘}cHDABGLOSiˆž€lhmjaXDALW?e˜vO8&)%-+(1Rfb7OF5@mOQL]^F@;>H:A[T114.51R^‘§Ÿ–—žŸ™“’•–’˜š››™œœœžœ› ›—˜–˜—˜–—˜—™–“••–—›““’‘’Ž”Ž”“Ž‘’Ž‰‡ƒ‡‚}~x~‹«¸ÄËÏÓÒ××ÕÕÖÕÓÒÓÑÒÒÑÕÕÔÕÒÔÕÕÕÕÔÔÔÓÕÖ×ÕÕÔÕÒÔÓÑÑÏÑÎÐÒÏÌÎÍÎÍÎÍ::723:3;973=;6>:656=FPPX_^`jxŠ‘—šœŸŸ¨¨¬«¯°´°²³¶³¶³µ·¸²¯­§§¬´´š‹xhR@>@EEOOYs¢‡oiejmmO7D?H;0/-6JTX;NUSH9CHMZ]bgljonvqrqupxxw{}}ƒ„‚~ƒ†‚‰ŒŠ’“‘Œ‹Œˆ……„†~}z{yz~~ƒ‚ƒ€}}Œ‹Œ‘Ž•––“’ŒŽ“ˆ‡ˆ””˜˜‰‰‚h=.)01/0--,22-9D616,9EUfB=JDaRIODD@;8^^2-8-./Fk’¥Ÿ’š¡Žž›“”š”šššœžšœ™›—”˜š•›š–˜›–›•›—š”“š•‘•“—˜”“‘’’Ž’”‘’“‘Œ‘ŒŒ‡ƒ‚„~zx{Ž «¾ÉÎÓÖÖØ×ÖÕÔÔÔÒÔÓÑÓÔÓÖÖÖØÖÖÖÖÕÖÖÕÕØ××ÕÕÓÑÐÑÒÐÎÎÍÌÌÍÍÊËÌÍËÍÌ44.1297656:8;886787AJSQX_k[dr‡Ž“šœŸ ¤§¨¯±²±³±³²¶´³¶¸´µ­¨ªšš‹ƒyg\JEIDKLOb…˜žgadlssfJ7A31c–‹\2'$.51*9CfmH.7XZJV\G‹²mkU‡YJN_lsM=:ST}uvS„ƒ‡|zPm™ž«¤ˆ–…ql°½Äe‡ ««Ìºe4.096-44304<556?4:.359534/03735753?C=8FF@F;54-4AQU?CUCK=>@LOQ\dfigmkknsrvt{wx{|{ƒƒ††…‰†‰‡ˆ„ŠŠ‹ŒŽ‡…Š„…„ƒƒz|~|yy}~~|‡‡„†ˆŽ‰‹ˆƒ‚€†‰’–”‘’‘“Š†}bN1'+.0,5102<9255>4/4:308A86/.:EVdD:MHaWDNCD<:;Za8+7852AqŽ¦ž¢“– Žœš••š”Ÿ˜˜™žš˜š›ž—˜˜™›™™šššš”š•™’˜’”–—”’––‘’“Ž‘ŒŒŽ‰ŒŒˆ„…„}y||‹œ®¿ÇÍÑÕØ××ØÕÔÖÔÓÖÔÓÒÕÕÕÓ×Ö×××ÖÕ×ØÕÕ×ÖÕÔÓÐÏÎÎÎÍÌÌÍËËÌÍÌÌÍËÌËÍ003/22625474:685646:DRXZ[ZYgp€ˆŽ“•™ŸŸ¢¨¬¯³°´³²´³´²±²¶´±®¬¦¢—Š~sjXLKACHKOnŒžƒoafeq|pXG/51>ožŠP,+436.+/RniE,6:ZOWVR›³qgCp”x[Yfxz]E?>9W„‡m`Šƒ}eaz˜²¬}Žuq©Ädž•§°šÐÆX<7578866517;>=66K:634695:82/<=><;=5?A@6?EJJJ><30@DWA?YNPEUi?.4+3+9eˆ¦£Ÿ–£ ™•—š•›—ž›™™œ™™™›™—˜šŸœ—›˜—•––˜•———•’“•“–”‘Ž“‰Ž‰‰‰‡ƒ‚†{ys{‹¡±ÂÇÎÕ×ÖÙÙØ×ÕÕÓÓÕÔÕÔÔÖÔÔÖØ×Ù×ØØÖÖÖÔÔÓÓÐÓÏÏÍÍÌÍÌÍËÍÊËÍÍÏËÍÌÍÍ@@32,/3056>?89;3474?HQ_^WSUhq|ƒ‘–š ¢§ª°±³´²°°´³²µ³¶´³±¬©Ÿ—”Ž€xjZQFDCAGY€š–mdbcfsyeI;5;7Kx ‹K%%02.""8^n]C640SSWTT¨¶…€b8X€‹mlp{wdEJAA7b…ƒŠukp…€eK† ’n”vvŒ®ÌÉ– Á‘Çׯe>953686:358;7<7735.4=<=D66=GC:7=FBB9:14Q_XEIU@[T?PE>58EO^=00./4=hˆŸ¦œ‹™‘›š”•—–—š›˜–š—œ——˜˜š™›–œ››š—•™››—™–•–”—”“””—‘‘“ŽŒŽŒŠ‰‹†ˆƒ~‚xvt}Ž›±ÃÊÐÖØÙØÚØÖÕÕÕÓÕÓÔÔÕÕÕ××ÙØÙØ×Ù×ÖÓÓÓÒÐÐÎÍÎÍÎÌÌÌÍÍÌÌÌÎÎÏÏÏÐÏÐ9933345201:48591;66>NX]]XVUbq|ƒŠ’‘˜œŸŸª­®°³´±³³²±°µ´µ²³­©¦™”ˆvlVRBA@EJ_‡¦‚h^`ihonW?01<9Kqž†F+%133*$DJ2C`Ž˜ˆ|^XxŽr4xƒh’y{’·ÑÀ§³ž©ÜÁv94046-/249;76417470,-.'35:004/,7=;;B968BB:C>?D64/59?QN9LRJ=9@@GGTSXcdkkgeenlnowtvzvz{€‚†…ƒ†Œ‰‡‹Š‹ŠŠŽŒŠˆ…†ƒ…‚‚~}}~}~utttrvvotrrww{…Š” ––””‰{E6X<(+0,'%*-//0,06<59D7-570259/+?C=TX?06444;eŒŸ«Ÿ‘–¡”œ—“”‘››˜››™™™™œ›˜™˜œ•—˜˜œ–œ™™š›š˜•””””“•˜Ž•’Œ“‘ŽŽŒ‹Š‡„„}zytw…œ°ÂÈÐ×ÚÙÚØØÖÖÔÕÕÓÕÕÒÕÖÖ×ØÙØÙÙØÙÕ×ÔÒÑÒÐÎÌÍÌÍÍÎÍÌÏÍÐÐÐÏÏÐÏÒÑÏÒ11002758056-32/.247DQZ`][VXao|‹••› ©ª®±°³±°²±³··´·¸±¯¬ ¡›”‹‚vmYOB?>DKc†¢}dZdmnjeE1*4=Oa†º­ˆ”gB<[Žssw€nGLKT8KxŠƒŽ„yk`uf:n‰zVzuz£Ãή†™³œÊÇŒKJNZB.=H7733*/=c˜º•}›z\:Wƒ™|r€pUZX]Tjnv€ˆ}ebXNl…{Rfˆmt¦ËÑœ‚µ›ÎljB3,3517<:834/679785=91,3,577.)20601786:5495;<69?=69/56EC7COTAA3HDNRNT[YZ_ebfnfkiqrrtzy}~€~€‚†„†ŠˆŠ‡ˆŠŒŒ†‹Ž‰‡†Œ„‡†„„‰‚€„……‡Œƒˆ‡€€…„ƒŠ‹‹”‘˜”™”•™“‡‹‹‘ˆ~@.;W50.*/*,/*02>8:818NA9294749@*08Nt^INOFc\K@J7;H@MbF5?/342`…©ª£••£–›‘“Ž—››˜››Ÿ›–š››š™œœ˜•œœ™›œ˜›™›——š–––•’—‘‘“’ŽŽŠ‘ŠŠ†ƒ}‡~zuuy†š±ÂÌÓÖÙÚØØØ×ÔÕÔ×ÕÕÕÕÖ×××ÖØ××Ö×ÖÓÕÐÐÐÐÎÍÏÏÎÐÏÑÑÐÐÓÒÑÐÒÑÒÒÔÔÑÔ--.0255333443011-0?B:>BEA;066CB6AOSG=7=FTUNWZ]Wcdhgknknpryw{{~€|€ƒ…ˆ‡…ˆ‡‹‡‹‹…Œ‹Š†………‹‡‡Šˆƒ…†ˆŒŽ‹‘‘—Ž“‘”••šš™•œ•ŠŠŒ‹‡^-.>P5,0,*++3.,-<70945@E54401,1<(-5Ip[DMKE]_JAH<=>9M_Q/1/510\‡¨§¤š’¤›™““‘šš–—›œœ˜™šœ˜—˜—˜›™œ˜™œ——›œ›šš™•˜˜”•—‘•’”’‘‹ŽŽŒˆ‹„~||{uw…œ¯ÁÍÓØÚÙÛÙÚÚ×ÕÖ××Õ××Ù××Ö×ØÙÖÕÖÔÕÒÓÐÏÑÎÐÒÏÑÑÐÐÏÐÑÐÓÑÓÒÓÓÓÒÓÓÓ==2.5415041/43/2-4?Tebiaj^flv|ƒ†Ž“–œ¢£ª­°±®³±²±°±²´·´²°¬§¥š“‚}nZVG=C?Ia†–yeVabWWTMH::CEJrf6:152*#)7Q`S64AE5.0A}¢¸…€‹vrLH‰›‡…zjh`u†[PRQ€}t‰qG7;o‰…pi‹yy–È×Âúպ{712.3./4+.2-1./7:741::50+/0;;432513814:8588829:9?0)*+'01,2:42<677<71478/38++:Ns^FSPI]XHGHABBDNVO31286.X†£ªŸ›‘¢œ–’Ÿ›˜˜œšž›››š™—š˜™›š™—œ™•›•™—˜•——–””–“’•’“•‹‹‹Šˆ„„~{wyru‚´ÆÍØØÚÙÛÙÚÙÙÕÕÖÖÔØØÙØ×××ØÙÕÒÔÓÑÑÐÑÒÐÏÐÒÓÒÔÒÑÐÒÔÐÑÒÓÑÒÓÒÓÐÒÐ5542/160.12/0000*3GWchlgdbhor…‡ˆ’–š ¢«­­®±²®³®±°²¶±´´«ª¥£¡–†ym^OF@IDJYyŒm\c`X`YJA;GOIMeV-67,-.')4VaJ38?G48BAi¼†ˆ^u‹uRk¡š„~gle~‚lBGVV|ƒt“z@67]…|fr‹|ƒ¬ÕÛ͵ÕÁ~P7,()--4950150,./>85/::21&23A3..326101/579<=9;6<;A:>7/+56??8CAK=94;CIFEOTY\Xaifflmpnsrw~{€y‚ƒ‰‡†ƒ‹Ž‡‡††Š‰‹Œ‰‰‹‰Š‡ŒŽŽŽ“˜˜–˜š¡Ÿ¡¦ ¢žœ›œž›˜•’ŽˆY2,3TD41"'+*/3-02560C868=?2146+5>+0;Qt`EKCA_XSLMAEFBOUM930;8'QŠ¤¬§¢–¡¡–Œ˜œœ™šž››œœœœ™š•–›™˜™™›™•™”™–˜™—™““—•–‘’–”’”‹Ž‘ˆ„ƒ„{~|suuž·ÄÎÒØÙÛÚÚÙÙ××××ØÕÖØÖ×ÕÕÕÖÚÔÔÓÓÓÐÑÑÑÐÓÓÔÔÓÔÓÓÒÑÒÒÑÑÒÒÒÑÑÒÐÐÑ33/62702/2//.),.26MYeighfehj{|ƒ‰‹—˜¡¥«®¬¯±°°°±²±±²·³²­ª¤Ÿ•‹„}p_TI=AGFUp}qhpbZ^UG@CWZOEcD4?9-.)))=ZYL-2:;6;>9C>?:+.27=>6<81456=303/,+1:;864?9>H954/132J„¡±¤¥–¥¢•†“™™Ÿœœ›œœœšš˜™œœ™˜•––š—“™˜™š›˜›•–“˜—““‘ŽŒ‹ŽŒ‰ŒŠ†…‚€|xuxur‡£·ÇÎÖÚÜÛÛÚÚÙÙÕÖÕÕÖÕÖÕÖÓÔÒÓÔÓÓÒÔÒ×ÒÓÓÓÔÕÔÕÔÓÒÐÑÒÎÑÐÐÏÑÏÏÏÍÌÐÐ00/3+/-0303345214CRadehfhbfny‚Š‹”–›Ÿ¨©¬¯°±³°¯¯­±±µ²³¯­¨¤ ˜”Šˆyk`XKD@BJO[nvrggiUFANDNcaYWb>;3--*',,Eb`F1(/;?>76A‰¦gdgUrwrq`h…˜ƒupylcdZVNGLU‹}€so„g57@935)/66>.50587.+-.,07<98487DB;601/79BB;;AF612=HMC;:@JPWYZ^bejijqqv{{~…„ƒ†„‰‰‹‡Šˆ‰‹‰ŽŽ‘””˜œœ››––——ž©¤¥¥ª¬¬­ª¬¢ž œ¡šš˜•“‘–”„C&'-7I5-*1*.310.469:F<;@J3142?060751>`saHOOLiMTLFDDOLXL>J9;:6,H‹©®£Ÿ–¥¡‘‰š›–– ž ™œ›™šœš™•››š––—˜š•–•–•˜™˜™“‘”“–—”“”‡ŽŠŒŠŠ‰€}{xupuˆ§½ÇÑ×ÙÛÙ×ØÚÛ××ÖÔÓÕÔÔÕÔÔÒÓÔÓÔÕÔÓÔÓÓÖÓÓÔÓÓÕÓÒÒÑÎÏÏÏÐÍÎÏÎÐÏÏËÍÌ,,112.-4916.02306;NYecgec]fqzƒ„‹Œ—šœŸ¥«­±­¬±®®²±±±²²µ´­§§¥š•ƒxp]UKB>FLR]gmlebldHINDX\_``V;5=4-)&(/Hd[A**-3/,,00008797699D<730109L3,)0(,4+/0:6;?:;><;10:AG=/-34/E[peDPQMhSYL?DDKK[L2LA?6<.Q‰§­¡¢—¤£Ž“™˜˜¢žžœ–›œœ™™›œ˜˜™™˜š™™–—›˜”–—’•—˜‘™””‘Ž‘Œ‹ŠŽŠ…ŠŠƒ~}xyvqyŠªÀÍÒØÚÛÛÙÜÚÚØÕ×ÕØÒÔÓÔÔÓÒÓÔÕÔÕ×ÔÕÕÕÕÔÓÓÔÒÒÑÒÑÏÑÑÎÐÏÍÏÏÎÍÏÑËËË,,-1-1/33/0//1945AO[fmkij`gpw„ƒ„‹–˜œ¡¢¨­°®®­­°°°°±®³±²­¨£¢š•Š‚vjaUKABKNUY`mkZck^IEGJMGK[`V@3@901'"-Bd[E00436>GJNw [fnZK\ir€|nxy‰w}‚vok\KHKu—}ad‡„”l-Dn_s„›»Â[..?B1.++.1./44/5.1/5HG?475-,,.69;3,140;22,21131:872935;@74825>=8;;<:65AFNJ9238>FUJRU`bb]gmnquu{‚†…†‚ˆ……Œ‰ˆ‰‹Ž’‹’•”“Ÿ¥£¢››ŸŸ ¦©­°ª§¡¨©®¤¥¤¢¢¡œ•”’š—’Š`30,-LO01(0.-03+2=3342LŒ¡«¡¡—¥ †‘•–™Ÿ ™œ›™—œž•˜˜™••–”••••’–™š˜—˜š–›™”•”‘““ŽŠ‹Ž‹Œ…‰‰††€}wrsy‘±ÃÏÖÚÜÜÛÚÛÛØ×ÕÖÔÔÓÓÒÔÔÓÒÓÕÔ×Ö×Ö×ÕÕÕÒÒÓÒÒÏÏÐÏÑÑÏÏÎÎÏÏÏÎÏÏÏÌÍË//./+-,0/2,.4.1-2@VZdqkihfakt‡„Š”˜œ¦¤©°®­±®­±°­¶®³³´²«ª§ –‹xm]OHB?ESSXfsi^inU67DR>6Iar]7.@744%&.@dT?+&.97>KOOm›VlnG5BDE^z„{m…†~{x€wtiUFPt¢‰b`Œ¡l-:`Z}{…ýT25ZA0,24363591-78067`@>;;6.'&068=22.02>52/-04202:4:>7;:@23<53B=:6CA?7.6FNL>4,47:CELUZ`]_cflosu}}€{„…‚†„Š‹‰ŽŠ‘”’Ž—––¡£§¦¨£¢¤¢¡¥¥¨¦£¥¡¡©¨¤¦¦£¦–š•„A(,,1RC-0.09540,582;F99:A7*05V=+4/5;6K]xjFZLKnNTHBLGEJOA4MX<.01EŽ¦°£Ÿ›  ‹‘š–•šŸœšžœœœ›•“’——–———–™“–””–™–“––—–˜”“–’”ŒŒŠ‹ˆ‰†‡‚‡‡‚{xrs}’µÅÍÓÙÛÞÜØÛÚ×ÕÓÓÒÓÒÔÒÕÓÔÒÕÖÕØÕÕ×ÕÖÔÓÒÑÒÏÐÒÎÏÏÏÏÍÎÎÏÎÎÎÍÐÎÍÌÌÉ..22.57.1.-2100/4JXX\dgedaelz€…‰ŒŒ“—›£¦«¯±²¯°²¯±±±°¯¯±³«¨¤£Ÿ’€{p[SJ??IONXdie[[hI88QI90Cm~Q3/7:<;,1(=cWC0*:A43CSVy’SifA/9;=BTw…~…””…q€|ytf[Ni¥’mhv•ž~SDLP†kQ¥§C8P\73/6/674454214.-;?@:9983/,389A0-(.28=5,..-30/0488<16:74978:88:;?@@09DGNG91-03:DHKOX\Zc_knuv||}}}„†„ˆ†„…‹“’“”’”š™š¡©§©©§¥£¢¦¨©©§¤¥¥««§«¬ª¤œœŽ“—˜”Šk8&'.3N>-,+3034/02747?@>=?3,04J7.://76La|kNNKIqIVN?OMNLRA3IY=17+>‰ª®§žš¡•—˜œ¢™¡››˜™™š‘–›–™——•“–““—•”“––™˜™“•‘“‘”“Ž‹Ž‘ŠŒŒ‹†ŠŒƒ…~€}{tst™·ÊÏ×ÙÜÜÛÚÜØØÕÒÔÒÓÓÒÓÔÕÕÔÖÖÕÖÕÖÕ×ÕÓÔÒÒÎÐÍÎÌÍÍÍÍÍÌÎÍÌÏÐÌÍÌÍÉÆÇ..-,1812-,+-,24,5DTUV\_^`_fnz}ƒ‡ˆŒ•›š¢©©­±°¯¯°®¬°°°²µ³°±«§£œ“„o_TIGDGPSZ`c`dVJI;=>4-/2?ZUD+25=7-;P[˜VbdE82874JUl„Š‰Œ‡jp€‚whdcš“}v|˜‚n]LHx\AVP:@kF133853@932/1756/8@<;<9<+/,08>:/384-2>62-1.5135;94B;67879:7:;;6:B?A64;MHK@04--.27AHPWVX\\ipuuvz~„ƒ„†††‰ŠˆŒ•’˜›˜œ ¨«¯¦¦«¦¦§ª¦§¦¥¤¤¨­¬²¯©£žœŽ’•˜’„Y4(-,7J62319453105>37?>H831*04>7*/1476DZyhQORMrLLL?PWIRUF.JW<8@*@„«±«¡š££Ž”‘›Ÿšžœžœšš•˜–”•————š•š–˜–••”—˜”˜’•˜““”‘ŒŒ‹Š‰Œ‹ŠŠƒ‰ƒ|…~{uurœºÈÑØÛÝÝÜÛÚ×ØÓÓÔÑÒÒÒÒÓÔÔÕÕÖÖÖÖÖÖ×ÔÓÒÑÐÐÏÌÊÍÑÎÌÍËËËÍËËËÊÊÈÇÃÁ¾//.14695/(+-1807@@QPX\`_`cdny€ˆ†ˆ“™š¤¨ª«°­­¯­®°´°¯²³³²«©¢¢ •ƒwp\OD@@HMOXibtvX6776:881M‚sW1.;0>8010;MNC.+/?3+5.0/46I=-214719;2*--//-2:96:;30895969G;26C@C92;JBK<3.,/,08?AJJSRZaektrx{x}~€ƒ‰…†‹‰”“—’š™šŸ¬©§¥¥§¦¦­¦£¨¦¤©§¯§²¬¨ œ•–š’xS0-*5@A53859862944447A6O542/0:9;+04-;9KfthCRTOnISPDRQKIND3VXE:D,G‚®²¦žœ¨”‹“•—˜œ˜š››•š˜‘‘‘–˜•˜–—’–••““’“—”’˜“••—’ŽŽŽŒ‰Ž‰ˆŒ‰†ˆ†‚|zxqt{†£ºËÓØÝÜßÞÙÙ×ÕÓÐÓÏÓÔÒÓÕÖÔÕÕÖ××ÕÕÕÕÔÒÐÏÑÏÍÌÌÎÍÍËËÊËËÊËÊËÆÇÀ½¼µ¬00,,.74202...-,1>:IMR_\`dderz„†‹Ž’›ž¡¨ª«­²­°°°±±°±±²µ²®ª§¢ —‹ƒzk\OKCCFLPX^dyj95549;5+3M€mcA)49@C90-9UFA3)/>--);e‚—tz…W629F>?Z][jk}x~€‹†‚pkpq€uŠ•Ž‘iLnkXszR66CG7538.,6788952/30/35@;;??00+-:7H<422440BB67/+11-/3/9;=;0:B523:>:85?F;804JBHDA.11,+55=>EQRVW]lmqwzzz{~‚…††ŠˆˆŠ•‘Œ’–•—•–›§¥£ ¤¨¦§««©©¤¥¨©§©¨©¤›‘‘’–Š„oQ+%*1D@05528;:643479:;AL73117807238.;?MhtgGJOLoDLEAOWOFMJ7FWG3;+Dˆ­®£¡›ž§‘‘–—˜™•šž›˜›˜––’”•–™—–—˜–™”•’’—™“’••—’•Ž‰Œˆ‡ˆ‡‹ˆ‡‡…„~€{{wsux‡¥¿ÍÒÙàÞÝÞÚØ×ÕÓÒÒÑÕÒÓÓÕÖ×Ö×××ØÕÔÔÔÔÐÐÎÎÍËÎÍÏÏÊËÊÉÇÇÅÅÃÀ¼º´²§ŸŽ22,/53541/1.10-,25CLTYa`dirw€ƒ†‡ˆ‘–œž¢¦©­­®¯­­¯°±²±±²²­²¬§ Ÿ•Œ…zmZNG<@BLNV\qwO:21483<,1Y}^eH/39;GA00DR@E0%/5.+!;\€z~„j826GH@^kWomipx‚‡ŽˆŠrhqys}†ŠŠ™†\SWL`kZA=827:923/7463;35/67:6766112;7>CBFL@13,*,6E=..24:54283...632/.27<:58<=C948<=<;D972=7444-/3=7>OOVYacfckorx{~{€ƒ‚€†Š‰‰Ž‘“’’‘˜–›œœ›¤§¦¨¤¨«­¤¡¤¢¤¥¥žŸœ˜š’’‘Š|mW.+14A9438;;699<777:16EM<749@0.299876DUdpgPWVKfIRKMOZQTWN>O_H;7.E„¯«Ÿ™ œŽ‹‹Œ’’’“’“”’–—”–˜’”––“–—•’“”‘‘•–“”“““ŠŽ‹Š‰ŒŒ‹ˆˆˆˆˆ„€|yxuu{’²ÅÏÔÚÜÜÝÜÙØÖÕÑÒÒÒÕÔÕÔÔÔÖÔÕÖÖÖÓÕÔÒÒÐÐÎËÎÎÍÍÌÌËÊÆþµ³¯¦™ŽƒsbQ=;00.,+--...+&++/5478BJX_`ggnu~ŠŒ“–˜ž¢§§®­¬«©¯¯°¯²´²²¯²¬¬¥¦œ–ƒzlXNC?C?DKa{pR@888+,4BIHhRAXE508A:?C@FBEB2((742',?‚¢†w‰}[>8E\NJQV[wm]m\l„™•š˜zxqx‹•žµ¡]FNlokxY82206012260141863879=ACGQ@77008:H>7.34=3:8;:2351776525:;:>=A@88479<9?9973;JFFFJ622..3.,36=?NHJK\V]XZ_jouosyuq€~ƒ……‹‘‹‘”“•——™œ§¤§¦¦ª¨£ žžž£™ž —’ŽŒ‰{iT0,*5@:=@96;=48<47>;6?TH993;H36<34.2<=TangJXTQbMZKJO`QUTJ>R\G>:1Pˆ¬«›˜žš‘‰‡ƒ‰ˆ‹Œ‘‘Ž’“›“–’——•––“˜“””–“•”˜”‘‘ŽŒ‹Šˆˆ‰Œ‡„Š†‡†}|ywrs€·ÅÎÖÙÜÝÛÙÙØØÕÓÓÒÔÔÔÔÒÓÔ×ÔÕÖÕÕÓÓÓÒÐÍÏÍÎÍÍÍÊÊÇÅÿ¹´§ “taMA8210,,+6/.0241/,)*36008=KT^adikqz‹‹–šœŸ¤¥ªª­­­®­ª¯±¯¯±°²¯¬¬§¦›’xhYPC56@HdvaVFWd2,*+CO_kL>LM>29@F;=AT=8E2)*75:$!0y¤ˆw‰‚WA8@PMGEAVkxh~pZ\e…˜…qo{z‹–š£¤usz‡wq€nA110-/25<423227015778EBNN8.11.3>K=481630937840327.*/1,8358>;<7569389@QIGIE<=5<,4+48:>:BFFGED@ELTZ^]fnqwqyzyƒ…ƒ†ŒŒ“——˜—‘›Ÿ¢¥¦¤¤¦¢ž–š™™š™–’‹Œˆˆ†vaA*,..9926886362;777085J?4247936/276?>?T`qfNVULaMZHMT`R\YI7L[G;<-V°¬š™žœš…†€€‚ƒ†ŠŠ‹‘ŒŠŽ‘Ž“‘“——””—”›™‘———”•“‘”““‘‘‘ŽŽŽ‹ŠŒŠˆ‹‡…‹ˆ„~€ztvuw†¤ºÉÐÖÙÜÜÜØ×ØÕÔÑÓÔÓÔÓÔÕÖÔÕÕÕÔÔÒÒÔÏÐÐÏÍÎÌÌÉÇÄÂÀ¼¸²¨£jUA4320.++((,)/3.1,-+*+'*2+2479JA;882'+5-7,.-}¥Ž‚’Œ_H?@YWMD@O\yrw|dTZw’vSmz‡…ŠŸŸ‘“……Ž™Œ‹d>-(+(*,./142883235ADIFNQ2*'))4?S;2..//059;70---50+*0456379>=:=8?HD@AAA3;>>LGGNLG=<9>C<8@@<8C::><1Y°¯–š¤”‘‡€}wvw}‚ƒ…ƒˆ‡‰ŒŽ“‘Ž•‘”–”“—”—“™””“”““‘ŽŽ‹’Ž‰Š†ƒƒ‰‡~|wwqu{¯ÀÊÒ×ÛÛÛÚØØÖÕÕÐÒÔÔÕÑÓÒÓÓÔÓÓÓÏÒÐÑÏÎÑÎÎÌÊÈÃÁ½»´±¦š‡fJ:4-*+*--++///+,,0/*/),.)5))1?@BT^^^]ZcsyƒˆŠ”–ŸŸŸ¤¬¬ª­ª­¬«®­¯¯±µ³±®§¢ ›’Š~odXB8AIl‘®ÈŒ^dsŸv/-*)0FQUG=:;A9<928EI;,.?6+-1.3)#)bŸ’Š“˜|ZNRc`PA8A\t†pŠkPLd‚nZl…Œ¤™‹Œ„˜ª«›˜š†K56./-/157/4891642AIJEPM82))+-?W;030<20/6985-2444.43/53069;>BA9AFA;AAEDHMR^[Y``bf]flrwxsw~‚……†‰’”“••”œž¡¦¡¡ —••˜˜‘‘‹†€†Ši[?9347545:777591>758958L>3696.,43..8A?>S\qlPSWTbRXKVIXOX^GADJQCM4T³±“›£”’‡|~qpvwyz‚†}ƒ‡„†‰‡ˆŽ‰Œ“”’‘’’•’—–“‘’”‘‘”‘‹Šˆ………„ˆz{zwusuy”³ÂÌÑÕÜÛÛØÖÕÕÒÓÓÒÔÔÔÑÓÒÓÓÔÓÑÒÒÒÑÑÎÐÎËÈÉÅľ·±¨ ˜†s^K;4*)$())*)*-//,,.=3/.(+,0()')-1?EKWbaY\dlz€†‰’˜œ£¥¬«®®®­ª¬®®¯¬²²µ±­ª¡ŸšŽ‡zqaSERMZ@35>9?FG03153*/3*3*-4\›ƒ˜{dbn^LB8:_h‡ƒ‘rQ=Ujphlpƒ“•¢šŠ‚Šx{—® ›¥pF<573624232231155BQTDSQ604-.->L<10-63--3975+0/174*.4381:;><>>978>;;@A5.66C297@:8-7;OI999;/3=72.7C7AN^rgLV]Z_VTFRMPQYVK;KIS8<;;955?EJQSQGCKJQU\mllknlty}}‡†……‘Œˆ…‡„ˆ…†Œ†…’“”•¤£›£¢ž ¢£¥¨¨¨©¨°«®«©ª¡¢ ¤¤ ”‚pIA>;6566>418:6559857:=A575401874/8J::R[klQROWiUTKILYV[ZG=FIFKF:d™´©Œ …rfzukhmqrqsvu{zu|x€z}‚†‚‚„‰‡†‡Š”‘•’‘Ž”ŽŽŒŠŠ‰‡‡‰†…€~€zyvqtuŽ®ÂËÔ××ÙØ×ÓÓÐÑÒÐÒÐÏÐÔÐÑÐÑÏÑÑÎÍÎÎÏÌÉǼ¸±°¢˜‡o^H9/,#))+*)(021;:<=22:=6338/,(&+%(,,(3?CHMUPKMVhx†Š™™ž¡¥¬©¯¬®­­¬®ª«¬­®°°¯¦£›”‚umcl‡­ÑÛœIXWB?\²ŠJ?7@1&0F][LE@BAC9CN624:?D2*/5-33(9g‘zwxo˜z`KLXN<82=GUeZJQnˆ¤™€`JT|—œ¤‰vF?>6?t£´ ¤“rC+'(*/+/-1317=JHOVF0-%'.3JO212,0.,/62757,01001-+14323889<964?A884210014IDGRYWQXejjmowuy}‚‚‚…†…‹ŠŠ‡ŠŠ‡ŠŠŠ‹Œ—–˜™›ž™š•™•–œœœœ¡œ¡¤ž£¨¬­¶µ»½ÁÄÅÁ¶®ŒrZD@7937616=73532<6==244*'28304I=;MXpmRROWbPYLQRUQ^bLIIPGG=Cd±›£™€~reyurihmoklpqyxsxwyyqwz{y}|‚ƒ‡„‹‰ˆŒ’Œ‹ŽŒŠ‡ŒˆŽ†„~zzwwnqz“³ÁËÓ×ÙÙÙ×ÑÑÏÐÑÓÑÐÏÑÕÑÐÎÏÏÏÏÎÏÎÌÍÊÇÿ»°¬§šŠuaP9/,*1-,(9$+,2>EDAE88467::5.-0(*+')*(3=CFJQNLJRbu~‡‰”™¡§«©®­®­®®­­ª­ª­¯®¬¨£œ‘‰…vsp‘±ØÔ—MDufI;K…fJ5+6(+&BgVDJ>:?:JRG8143RM2.)11//.BpŒw~h}—}gJOQJXjmTRS_aQ[NKQLL\^GEQP?J<>kš±™–ž–zmisv|permmlqrqprtuurpuuvtuv}z~z{†„‰Š‰‹‡ŠˆŒˆŠŠˆ‡‰Š‡†…~|zyyyov|žµÅÐÕØØÚÖÔÐÏÍÑÐÑÑÏÒÐÕÑÐÑÏÒÎÎÐÍÍÍËÇÄÅ»µ­¤“€nUA4-.&&'&)1125@GMPJI77576?D2;13*-%+%)(7;=AGLINHQas†ˆŽ•›œ¥§¨ª«¬«®©¬®««±­±­®©§¡š‘Š‰|š»ÚÏ™M?TPEB8QtV2'),"(/;c`VI=98?MS=68;2YU:1.4/64.=kˆyqaˆ“Ž‚[HE>*)+;Pv~em‘š—pkUQ_p~—˜xi„‚]J:@V©«³®ž–t>+0/1-3-64:CDOVR?75*2*;U^2./14526029982.-/-2026/3148999=4229E;49-/5--?EJRPT_fjorw}‚ƒ…zy€€‚ƒ„‚†††„ˆƒ‡‡ˆŽ“””—“–™›—š•”˜•’•’”“–——ž §ª®´²¹ÁÁÁÄÆÆÈÆÇÈĶ¡ˆiK=:395934-63964-3.(*.0+5/5S?NXirQLSUWMdGRMFNZ]IJMO@HH?n¢²˜š ‘~zriymzxofompsnluqnqqrsruxotvtssv{z{‚~~ƒƒ„‡‡†ˆ†ˆŠ……‹†ƒƒ}€}zutps}›´ÇÏÓÕ×ØÕÓÏÍÏÐÏÏÏÐÒÒÐÐÐÐÐÏÏÏËÌÌÊÇÉÀÀ¹²«¢“†q\D600&$%((.2:@2/-3-@FQ743-14:,000466-//421+/244747;>@@9;;@81846936?:46;465<95.1,30<4;6=UOSYfrVGPPXUbMTQKQ^\JOQSGL>Enª¬’™˜~yyttzyrqrpnnwuqroptpnqompqsssuux~x{}€}„ˆ†„‚……„ƒ„„||xxsvs€¢»ÉÐÓÖÖÕÔÑÍÌÏÍÎÏÍÌÑÑÐÑÐÑÐÑÑÍÉÌÉÄÃÿ¾·±¨žx_J?1,-**/-34==DNTQTQNH@@?EHAA9933422-%)'-7;@JJEBJLXju{ƒ‹•š ¢§©©¬®­ª©«©®©¯­­©©¥ Ÿ–’Ÿ»Ì­kF6?PVJ20Všv5'%&($ &9T]YJED7;;,:40=AD887725=6024;LSUSU_gnvyy‚ƒ{‚€€xz~{‚€‡†ƒƒ††…Š†ˆŠ‡“”—’“’‘‘’”Ž’—Ÿ ¥¬­¬³¸¹ÀÂÄÆÅÅÅÇÅÉÌËÎÏ˼¬‘rWD=:9556886:82244;159=FYXZos_KTO[S]DQRLN_[LJNPNRAIt±©”š•‰€x~t…~}€{usywqrrrrlpopnqmoinlminlmuoqwzxxyv|yxy}€ƒ‚€~|z|zwrur¢¹ÆÍÑ×ÖÕÓÏÍÌÌÌÍÏÎÑÒÓÏÏÎÑÐÑÑÐÊÈž½»·°­“vgJ9-,&/.-169;=AJNUKSMJIKKCH=>B<;793565-2.07BDCACADK\do~ˆŽ•›¢¥§©¬ª¨ª«¬¤ª«¯©­¯«¨£¡Ÿ—œ¬ÊÉ£iMB>CBKXM;94*-.8EW@?3.7<60-1+669?21.183447320188?;968<>966:4/89?:GQ\kv}„Ž”›Ÿ¤§­ªª«©¦¨««¬««®¯¬¨¨¤ ›µÏË vTE?8MGH7@e¦¤U2'$)($"#4GZXO=+*4E<.5495CxjTGA=L@87=59Fp„…}dQ[ƒŽ„x{wy}xšœ¦\HRNOUwoX`Zj‘VC=^uu wvVX¦«H:*+265;9@JRD2+'**+9K\=4..3941222,29<32/47552-49326;<:99:9;;5389/34DGRX\ditnv{|}{}~{}yz{}~~‚„„„††ˆ‡Œ‹‰ŠŠŒŽ’”‘“Š‹ŒŒŽŽ‘–˜—ž¥«««±°¹º¾ÂÁÅÅÇÈÆÆÊÈÈÌÉËÊÊÌʲœy\>411*/5*&)1))'137?QXK^vZFLLXOSIIPCQ^SPFANYJ7J†µ£•—’„~zŠ„ƒ‚…Š„z~zx{sprrfhmkfhlldjjgiielkqqnwusrosmtrswussxxpomlprz¤»ÇÌÏÕÒÑÎËÌËÍËÎÏÏÑÑÑÒÏÏÐÑÒÐÎÍÄý¹´®¥•…p`H4%*&+-06>=?@GHMQVVOWOZ[oocgXVJBEB=5541-143BD?B:49=BJVhs}‚Ž“™¢¤§««©¨­ª©¬«©©¨°¯­ª¨©¬±Â¾™{fWE>@@KW?`‹¦€6'!&#),&"+1FVNI/*9>:-04/8HkqhQ9;DB<>>(*/M‡Œ‚s[Zjsouˆˆ•œk?BSc]KZsk``cs{xcPLc“˜“¶Ÿ…}S5y¶©p=)*)0964@HWH;-1,2-6TT=51.:70,1*/,5:6744,03.3/620*06>>>9;8?<63<8,57EJUU\^hvuqzyzw|€~z|}{}}„„ƒŠƒŠŠŠ‡‰‰Š‰ŽŽ‰ŒŽ‰ŠŒŽ——˜ £¬ª«³´·º¿ÁÅÄÄÅÈÉÆÊÉÇÈÊÊÇÌËËÌÎʶšw`@0-02-)%$&'$)4:BT[IWtYGQM]LWIMTBU\PQCBEED5M‰´ ••–‚~€~…ƒ„…‹‰†|}}€wwvxytrtqjiiikiffaag^fijiimshkhiimmokooilonlgfgj£¹ÃÎÎÔÑÒÎÌÈÍËÌÐÐÏÏÑÐÑÑÏÏÑÏÐÏÌÇÁº¶°«”{cP@36.)*+1998;?EKPSUXWTQRYXyytpcc\RPJI>@873387?<48;501:@J\muˆ˜£¨§«§¨«­§©¬©¬ª©°²±¶¾º±«˜rgVNBFB_aT‡—‚V0+$/-1'''-,9MUU@0GT+%,-5-;YkfT=II>8MQ,"$;m—‡xt\V<FOei]KVqvmdinubcbt~’³Åšz~_:?‹°V1)0.925AJWL6-,(147U[9./.751-13.)0265431,3340/3438F8::@4469:114=OHYVbmvyzyzpz}€}}~{}}}{~{€„ŒŠŠƒ‡„‡Š†‹ŒŒŽŽ‹‡ŒŒŠ’ŒŽŽ”™™¡¥¨«¬µ¸¹¼½¿ÄÅÃÇÇÆÆÇÈÇÊÌÊÊÉÈÌÌÏÑÎDz–xV82.)&#(%$$)52APMJQs`CIOYMVGPO@P[LH@IK@H5R‰³”˜•“ƒ|…‚ˆ‹‡„„…Œ†‚}}vu}ssnqmkikhhbebefgadYablelecdeeiidhlkphdaae_`Ÿ´¿ÈÍÐÐÑÍÍËÈÊÎÏÏÏÍÐÐÎÑÏÑÐÒÑÏÌÃÀ¶±§˜xaF2.-*.027=C.)'*#(&)*.-3/0,56..*42,/==6512/61/,1,37:9?<<5=;==@998.-08NPSZ^iou}ysz{y~{}€|}€y„‚Š‡Š…ˆˆ††ŠŠŽ‹‹‘ŒŠŠ‹Œ‹ŠŠŽŽ”“˜™¡¨ª¬­³¸½¾¾ÁÁÃÁÅÇÅÆÈÊÈÉÈÌÊÉÉÊÌÍÌÐÑÏÈ´“jH2)%&)$"#'11CNH]Ul^@FNXOXNLNCOTFI@NC9P0[Š³™™‹“ˆ}ˆ‹‹ˆ†‹ˆŠ‹…‚…~ƒ~~zxttyrqmkahifdbcdg``_aeba_e\bc`dnmlnmc\ZXTXv—¬¿ÉÏÐÐÎËÍËËÍÎÏÐÏÏÌÒÐÏÎÑÎÍÌËÉ屩˜ƒ`E3-,3125=;EAFBCILIUWTQRTVVXY‚ypi^YTTQAD:-)$%'((&&&-.+.@Wb`pM #0198LtlaUMKBQkB$% (8Lƒ…„|whUJKTaKP|‹w7@eo`_bZbfeb{ouosokos_•«ˆQAVIPNJi•d3.3:40>LZ@5..&%+9P_:0--811,-50./6<687:2300-,1;7956=<6:DI@74;71.24FLQ[[jkostuz~~yx}|x{~{‚€ƒ†ˆ…‰„‰†…‰ˆ‰‹ˆ“‘‰‹‹‹Œ‘ŒŽ“”‘šž¢©®¯µ¸»º¾¿½ÁÁÂÃÄÃÄÉÉÊÈÈÊÊÌÈÉÉÍËÌÐÐÒÐèˆ]61+$$&&%04HJJ[QlfBOJYJTIKKARTHIDGJ@P1]°–••’‰‚‘ŽŒŒ‰‰ˆ‹‰ˆƒˆˆ„„„€}~ƒy}xw{nnqkhojibdb`b`a]c`]bX\_d]hnkqnfd\VNMXk¬ÀÉÎÑÐÍÎÌËËÍÏÐÑÑÑÏÎÐÐÍÎÎËÉÈÃÀ¶§œ‰iK-'-+-5A=AAGDCGJMPNUSRRQXTRRT„„„ƒ‚~}xk`\UVOFAB?MK;>8816.7AFUfr}ˆ’—¡§§ª«§©¬¯«ª¬¨¬µ´³´°¤¢ –Š„yi[PP`ˆgÌ¢:1.$'.&(((%)0(*)3M_wvG!%)19CvwiSIOKar@%"#$)8Qt“Œ„…wdYk\?Y|Ži>3Tw~gfdhskTY†|nrmovj…¤¡~YhD4R^P’œV37547CERA300,&+7QO54-+43./-/-'+476=62343--2059;95=<=?KJ@86762016=FQ_bggssqwyw{|zzyx~€}€‚}†ˆƒ‡…‹ˆ†‹ˆŠŽ‹‰ŠŽ‰Œ‰ŠŒŽ“•–—™ ¡¢§§¬²¹·¹¾¾½¿¾ÁÂÀÀÂÄÆÅÇÉÇËÌÍËÊÌÐËÐÎÒÓÓϾ™nJ,*( $%84MGHVQh_FHJVGOEGI;RNEKGOL;K3_Ž«™’‰†—Ž‹‹Œƒ”‹†‡†„„ƒ†„€~}zuuqsprmggkdbc_a[aa`YYZaY`hotpnni^PLHOh‹¬¿ÈÎÏÏÍËÌËÍÍÐÓÒÒÏÍÐÎÍÌÍÊÈÂü¶©sS8.(/2>HOJMJJKHKHOTQXQPYS[\VVUŠŠ…‡‚ƒ†smkb[YRNGFMQG@9952/1@LZ`p‰‘™Ÿ¡¥¥©§ª§«««ª©§ª¯¯±«¬¦¢Ÿ”€rh[TdZ´Ò~5-.,+*(*/'*2+)'+5EP€~E!$&%.4@xoOJMNuxC1,.#'58;8990:4125469737=DCHLB<5?;124:AJTefhjnsnnury|x}~€…†}„€†‰†…‰‹ŒˆŠŒ‹‰ŽŒŒ‡Š‹Ž•”“–œ ›¡¨§¬­±¶¶º¾½¼À½¼½¾¾ÀÄÇÂÅÆÈÇÉÊËÉÉÌÌÍÎÐÒÔÒÐÆ«‡S2+&#%58KF7WWefD@IPFRHCI@IRAGKQD8G6e–¥ “‰‡‡™’Š‹Ž‡ˆ††‡ƒ‡……ƒƒ|}z}{wrqppmmegbbdZ]_`YYZZ_cov{sxqi_SLGQcŽ­ÂÊÎÐÎÎÍÌÉÍÏÑÒÓÒÏÏÎÏÏÍÍÊÁ¾·±ªš„qSA2--7@CKOMOOIFMMHRSTYUS]RYY[YW‰‰…„‹…„‚|yuj^\UPPRSLIC<;.635?KXfn|†’™ ¢¦§©©§©©¨®­«©©¬¯¬§ª§£›“Ž†ym]^lŸdaÀÀ\'*2(''.)-*++''6?=HF}sB%$##29KŠsGHM`vb6-6*'(3HQWVMk†ybc€”ŽEBO@=R}kpnxlKR‡žyuƒ†ˆwkik™šg4//Yƒcš W3.7:FGM43+.'$)=bV?83-6;;204,,+4>739OF232205350:599<:@FLC8@884/8>NPY_cmnmpuuu{zx|}|~„€~x‚‡‰„ŽŒ‹‹‹‹Œ‹ŒŒ‹ˆŒ‘’“Š‘’••››ž¡¥­­®±µ¶¹º¼¼¾½½¼½ÁÀÃÁÃÃÁÉÇÊÈËÊÍÊÊÌÏÑÒÑÑÔÓ˺c9.!%+-=<0A[eb@>IKKP@ILCLSJFEJ=:B:r ¤š–Žˆ‚ˆ•’’”ŒˆŠ†‰‡‡ˆ‰‡………ˆ‡€z{w}yrtqtmjmhg\fb\UYU`_iuy€yvupeYOLLb¯ÀÌÎÑÐÎÎÎÍÐÑÔÔÓÐÐÐÎÏÏÎÊÅ»°«¢‚_O:.,21?EGKMVOIPMQRRTTXXZ\YQRXWSU‹‹ˆ‰‹‡‡…„yvng`ZUQTSNEF72.*/@HTho|‡‘™££§¦§ª§¬¦«ª©©¬«®ª®«©¥£–soyp Ul¿œ;-,'%++(.+'**,%Aic]Xvh@& "*@qˆ‹cBHUndD-19."+DdY]B8EVuljy™ƒ`MB@STE>]‚zqvpubVm’£‡tƒ‡{^dp} –a3)2Ndl¢…B188DK>27,-'-/8^IC10387562:/1-0495:FD33624,164616>>;EKSL9779217CSPWbdiwvvqsstzw|z€|ƒ{z{ƒ‡…‡Œ‰‹Ž‰…‹†‹†ˆ‹‹’‘“—ššœŸ¥®¬­°µµ·¹»¾¾½¿½»¼ÁÁÄÃÁÂÁÆÆÈÈÉÉÌËÌÏÎÎÐÑÐÒÕÓПsB0-1-;:49]b_F@LMNPHCPIZSJ@HL>3F0,*2?JUdqyˆŽ˜¢¤¨¨¦ªª¨¨©¬¬­«««®­¨£ œ•Š}x†’~³Ž`t›t..,*)/)(&$&(!#+6k}{t{lXC-,*3Kp‡tG;HZYJ<@5-,);eq`MA6:Dfk„†~V?89GIPP?D_‚{{vpjfu‡ –y…‡dMmcq¢ŽJ%-1Mp}©d744?<>53,--+/=ZOG:23;3281602050<67?JD4364:33:><4AA8>LPPD;927379PO`Zfimstsxvvy{~~~yy‚„†‡Š‹‰ŽŒŒ“‹Ž‹Œ†‹Š‡†‹’’‘“’”—šžŸ¤£¨«±¯±´¸¶»¾¿¼¼¾»¿¾ÀÄÂÃÂÀÈÅÉÉÇÌÍËÌÎËÐÏÐÒÑÒÓÖÓÈ«yH.-68009VeaG>MGGOA@QEPSCDEF45E;z©˜œ•‰Š’š›”‘‘’‘‹Ž‹‹‡ŒˆŒ‹‰‡‹…‡…„{‚{{x{xx{runnnnqfcfZbbktw†‚}rnaSNEVt›·ÄÉÑÐÑÑÒÎÐÑÒÕÖÓÓÒÒÑÏÎÍɾ¬›‡kV<0'+)3=LPPUVSJNJNOXXX[[^[]]\RUMRW[‡‡‹‹‹ŒŠŽ†…|sqj`_bXSOK<0+*29DTdsz‡’•Ÿ¢¦§¨«ª©¬¨ª«¬«°°®«¬©¤ž™‘Š€w“•—Ål_|zY3'--.+,,&&'# $$*;dˆƒzph][h~†„lJ=FBPDEPY0'-:^wuN;;;CPw‚‚mMPL:;OPMWSEMhtu{zr}…›‰˜Š†|†u:B?@==D96IOOG636<82DBHWC),IeybG;NE<;:EXV\QFTquyz|žƒŽ‘„ˆŠV//-<€¢j3%-Pf±m11?>8632,.02=`O>950;55:.41/.71889A98=74332.2„«“™“†‹–˜“˜‘“”‘””‘‘ŽŽŽ‰‹‹ŒŒˆ†‰Šˆ‰„…€‚‚|wwvuxspsqmjdedmvx‚†Š}xohXSTiŽ©¾ÊÏÐÑÑÓÑÔÒÐÓÔÔÔÐÑÏÎÍÎÉÁ³˜ZC0*5-1,.1?Iz‘VL:8DD6;9=Nfb_LL`ys}~†’†‡‚•Œ‚—m3)&7‹¯œa-+A\^¯•B/>;80.(0*0/4^KCB1/@545651*-0-3@=@;=9984222/;9IITI?P?D+/6Fˆ¨•œ”‡„Œ••‘”•’’‘•ŽŠ‘Œ‘‘‰‰ˆŠŠŠ„„‹‡„‚}z|zyxtvxn}kginrtƒ‡‰wldYU]y˜±ÄÌÏÔÔÒÒÓÒÓÔÓÒÕÔÒÏÏËËÉƹ¤xT9+)*::NY[Z]YZVUQRNQ[a_c_ecb`^[TNSP[]}}Œ‹Œ’•˜•”ŽŽ„€zuodZQFC?UU^cI<10/)7WRWZosqrqux„~|~rnu{}‡ˆ‹Š‰Š†‡‰‰ŽŽ‰ŒŒ‰††‡ˆ‰‹‡Ž”–œœœ Ÿ¢¡¤¦§§©­­³²²µ··¹º¸»¼»·À½¾ÂÄÅÅÇÃÃÉÉÉÌÍÏÐÍÏÒÒÔÒÔÖÔ××Òº‰U0(6APSA2=9B77@JFPC>K:C(.5KŽ§”œ”…„Žš•”‘—“‘‘‘’ŽŽŽŒ‹‹†…ˆ†…‡††…€ƒ{|~~€xv}wywusnkmpy~€„„voj`Zbˆ£¹ÆËÐÔÒÔÖÕÔÔÓÓÔÖÕÑÑÊÊÉÇ¿± ‚fF0$+07FP[[]YVSVXVQPR\`afcnd_\\Y\ZRV\`||……Š“—™–“”“Œ†‚ytjbVGB:7*'6HUfo{†’¡¤¨­¯«®®®ª­­«¬¬¯±®©¥¦Ÿ˜ŒÄÖݬcYdGY99>?81.,,1)/(&*03BQR8 %$3ENB>A@C9;28LeigSV]Wdqs…ƒƒ‹‚ƒ£–„¤Ÿg0#%<Š°»„93`Vb·686/0-&2+.-8UP:945<5160926333-<8C?A6+152916:Q@K:@FRY]`XA9,010MUI_ortrruyyƒƒ€spptxƒ„‰‰‰Œ‡‹ˆ„†‹‰‹‡‰Œ†‰‰ŠŠŽŒ“’•™™™Ÿœ£ž ¤¥§©«­±¯³µ´³µ¹¸¹½º»½½¼¿ÀÂÃÃÄÄÆËÈÊÌÎÏÍÌÑÑÐÑÔÖÔ×Ø×ѹ†M44EMXBAE?C?>JNOUIKJ?I.6:U”­‘š˜†ˆ–’˜“–”“‘–‘ŽŽ–Œ’‘ŒŠŠ‡‰†Š‹‰…~€ƒƒyyzxxyrpptt{‚ƒ‚…uqmeamŒª½ÈËÒÓÔÔÒÒÕÓÓÕÔÔÕÒÎËÈÿ¸¬”|W;+%,5FNUZ^WYYUTRXRU\aheheei`\ZY]SV^ef~~ƒ…‘–™—•—”‘ˆ€„{vh^UH?7-+7JTam|†“™Ÿ£¦¬­­®®¯¬®­®®°±±°­§¤œ—•Ž—ÆÖØ–qxiV-0+662135?5379.:?AIN7,,,8KYKFBB:;5400=?AFHB@:?94$$%=bˆžs@.0E?@XHEC<@LgrhVXR[gp„Ž‰ƒzˆœ€Œ¤}I((+]¥¿³b>pUL¤žF.2.))*0-)15UHC34395/74764-377;=EAD36314758:S:DB9NO^cgeK51,-*BKMSovqwswv~~zqpqx†ƒˆˆŠ’Š‰‡‡Š‰ŠŽŽˆŒŽŠ‹Œ’‘“”—•›š  Ÿ¤¢¥¥¨¥«©®±±¯´²±¸´¶¶º¹½½½À¾ÂÁÁÁÂÅÆÉÊÉÉÌÍÍÐÒÑÑÔÔÓÔÖ×ÕØеvC-9@O?/:4;56GORRDJCDF'28]ž©“”“„ˆ•““•š”ŽŽŽ‘‘”’ŒŽŽ‹ŒŠ‹‹ŽŠˆ†ˆˆ…‚‚ƒ}|„‡wwtvqsw|}}ƒztpehz˜±ÁÊÏÑÔÓÓÒÒÔÔÕÔÓÔÓÐÌÊƺ³£‘oQ:.,2?KTZ\U]aY\XYQWU_``kliib^^YX]XS]d^y|€‡Ž“—˜˜——•“ˆ„……}pbVMA7)+8ASaq†™ £§«®°²°¬¬¯«­°¬³®«­¥Ÿ¡–•ŽÎÛчy‹¡^$#(6&+03:<:;555D=BLG>4,*9X_QB=78?8>?A358;03+.>11.),9VˆŽqO3(79CRPLGH@CTnlY[OT[i~Œ’ˆ€‹™Š\“†sF58H›¡È—WyU>‚¸j7948/14528;XHB7=6;6:;<;849:;60.-?SM[qysywvu~zzsfnx…‰ƒƒ†„ŠˆŠˆŠˆˆ‰ŠŒ‰Š‰Œ‰Š‘’““•™™œ¡¢¤¡ž£¨©¥§«§«¯®°²³·°²µ·ºÀ»¼¼½¿ÀÁÁÃÂÈÆËÈÉÌÎÎÑÏÑÑÔÔÓÒÔ×ØÚÙϳo;87GA/04=63?COF:LING)/8`£¦Ž•‡ˆ’•’’““˜“’“‘‹‡’Ž‹‹ŽŠ‹ŠŠ‹Š‹ˆ‡Šƒƒ„ƒ€€€~~{xxztww|{€„…‚€}pnn…Ÿ¶ÄËÐÔÓÓÕÔÓÓÔÕÒÖÖÔÐÍÉý³§™„gH44/9FUZYZW\\^`[YWUXciiunihg^_\WURW_`^yyu~~ƒŒ‘“•——™–•Žˆ‡†ymZXE2,->HP]m}‰–› ¦§­°±®¬­¬®­«­°°±ª©¥¥Ÿ–””ÆÛÇu[sŽÅi$$ '#$/177;<<:9AH>PLG6/&:QG@;722:AA@C@5=,*+/1/=B8//9Npjpg<),7GQJKRGOKM`yfddSUgv„“Œ…Š|Šˆ_t†…m\SD‰‡±­s_A9[·Œ?2.+,,1643=aKE:=9F5=6<:839368;<@DI9:AQO_v{u‚zvrvzsltx€‡‰ˆ…ˆ…ˆ‡‡ŠŽŽŠˆ‡ŒˆŽŠ‘“˜”—™››Ÿ  ž¡¥¦©¤¨©¢©°«­°±µ±²±´¸»»»»¹¿Á¿ÀÃÂÆÈÅÉÌÊÎÎÍÐÏÐÒÒÔÓÖÚ×ÙØ×ίf9+?C-2.;-5FFH?=HNN<(1:iª¢Œ‘‡ŠŒ’”š•‘“‘‘”’‹Œ‘’ŽŠ‰‰‡ˆˆŠ…Š†‚‚‚‚z}yuxwtuzz‚…~‚zuop‰§»ÉÎÒÓÓÔÕÓÕÔÓÕÖÔÔÔÐÌÅ¿º®Ÿ|^B317DN\a^[[Z__^ZZYZejoks€mie`b]UQT]_``ffjo{‚ˆ‹’š˜œ˜“•’ˆpePB3*/6GXdo}…’—¤«°¯®°±­±­¯®­®´°®«¨£¡›”Œ®Ð¾gNLÄN#($-).-+3360+31@MFFABA31557;3,14FT[IFA961#*+*,>L6-,33GQft[4.3:FC>GETHIKnue`UN\vˆŽŽ„Š…}di‚Štmbxyz—Š[/2?¨®W.0210.3+19^G?A<8F367042,-/34<;@H@18:836427HEEC=K_gjng]J;/*,=LGctxvxuupqo{‚‚…„ƒ‡‡†Š‹‰ŠŠŒŒŒŽ’Ž‡Œ‹“—“•˜—› ¢¤Ÿ¢¢£¤¢§¨©¯°­ª¬®±°®³¶²µ¸¶¶¸¼¿¿Ã¿ÄÅÇÉÈÌÈÌÐÌÐÎÑÒÕÕÓÕØ××ÚÙÙΣ[/0;&*-1-6AMI6661&))*+@bO/$&'9D\rg[7//B><@GULAD[zqg[USw‡ŽŒƒ‡€~ogŠ‹`Nj}^Oxª€1-5ŒÅu5.*-(,)(->aD>8?;>/3-/72/)1:6=9;S=778/01-38AEBC>K\hvvgcO5)0+6PKWozu~srplm|ƒ€ƒ€ˆ†‡‹ŽŒ‰Šˆˆ‘‰ŠŠˆ’ˆ‡Ž’‹‰‹Ž•’”—›—›ž¡¡Ÿž¡£¥¡§¦§¬°®¯®®°±¯¸´³¶ºµ¶·»¼ÁÂÆÃÃÆÈÈÊÈÍÍÌÏÒÏÐÔÓÒÖÖØØØÙÛØÈF09/)',21?KB;;B9E0&/@{­‹‹Ž‰•–”˜˜““ŒŒ‘ŽŠŽ‰Œ‹ŒŠŒ‰ŒŠ‰‡ƒ………ˆ„„†~€€x{~z}|~„‡Š„ƒ€€{z‚¡·ÅÊÐÓ×ÔÓÔÖÖÔÕÖÕÖÕÑÌÈÁ¸®£{eRA=>LQ__`[]WY[]Z\[admjpoolgf_\c[\`]digfGGN^mx}ƒˆ––Ÿ¡Ÿ  ¢œŒ‡{mWH2),6DV`ozˆ—œ¡¤ª¯°¯¯±¯¯°¬®²³¶²­ªª¨ š“Œ¬¦qd@LX(%%%0//-'*-22.--7FC438@?/**2+,$-3Ogf^@6@<8&%)-,9m\<,&'-<-&/@‚®ŸŒŽŠ‘”•”•”“‘“”‘‘’ŒŠ‘‰‹ŠŠŒ‹Œˆ‰ƒ„‡Š‚„†„}€}y}~|{€‚†‰‰‡‡€z}…¨½ÇÍÒÕÕÖÒÔÔÕÕÔÓÔÓÓÑÍɾ¶ –‚nYIBAKMU`b_YXX[[[[]adjominmnic_]^ZTY`bfgh;;EVir~ˆ‹“˜£¥¡¢¤ž–Žƒt`H3.,4@Sat€‹—Ÿ¤©®±µ¯±°°¬¯±°³³µ±¯§¤Ÿ›•Œ·«tywCU6)*'(%(5&&&*6..'-E^A0.7;883..++)*?`mcc:7JHA+(0))6bdA&&+-;OcdVaH..BANFKGFJTFoxdYXu“†}zƒ”‡w‹š•{V‚yN-<«Å…83dÚºM)#&*1%$+7\@:<48?33025-*/5325:@M?//03+-',3II=@B\esv}ni]A-0)/HQW]xr|eewu‹‡‡…~~‡‡Š…Šˆ‰‰†‹ŽŒŠŠ‰ˆ‹‹ˆ‘“•”•”™š›Ÿž¤ž¡¡£¥¤§¤ª­±®¬®­­¯²¶¹µ¶º´¶¼ÂÁÀÂÂÃÅÄÆËÍÍËÍÎÑÐÒÑÒÓÖÖØØÙÙÜÛÒ°k@5-*(3,:AC26?D=%%0I‹®›ˆˆŒ‡–””Ž’”“Œ“‘’ŽŒŒ‘Œ‹ŽŽ‹Š‰Š……‡‚†‰~‚€ƒ|}}~|€„„ˆ‡ˆ~||‹¯¾ÈËÔ×ØÖÓÔÕÕÓÕÓÕÒÒÏËÉ¿²›Œ{bSFGEL[^bc]SZ]_a^`cccjltpnljceb[_X_`bbffg228N`hv{…‡’›£¦£¥¤¡˜’ˆƒwgT6*&4AS]m‹“ž¦©±±²±¯²¯¯°°±²³²®¯«£œ™ ¿Åz}MS>,()')(2****6,-.:_O4.0:<5850+,/)/J^njY3+ORF.'(*&3RvT2(0)1R]LTYeC08AOMKJHFTC[sh]Xyvzsvowt”Ž}¤§{‹j>+9dÁ®Y;TÏÍe,(%%*%+.7YB=@6:D677682+15494=@C;5;<54/*/7IH=?EShnywsh_H2.*1OTUashsgu€„ŒŠ…ƒ}„†ˆ‰‡ˆŠ‰…ŒŒ‰‰Œ‹‰ŠŠ‹ŽŽ’”–˜˜˜˜œ› ¥ž¡Ÿ¢¢¤¥¤¦ª­®©­¯±µ¶³¯µ¸½¸¹»¿¾½ÁÃÄÄÁÅÈËÌËÌÎÏÑÒÐÓÔÖÕÖ×ÙÛÝÝÚÏšT50,,01Cmi_Z}|hbpjl|‹xŸ©¯š‹^.$(5½APÆÑq& #$($%&0X;;A1?@01443,4)15-89>C66=7432(-2BI:4LWot|upjbK4-(-JMVck`umy|€‡†‚„‚…‡††‰‹ŽŒŒ‰‡ŒŒŠ‹‹‘Œ”•—•••—˜›žŸœ¡ £¡¥¦¦§ª­¬­±«²±´²±µ¶¼¹ºº¾¾»ÁÂÂÄÄÄÈÉËÌÊËÎÎÑÒÐÒÖÕ×ÛÙÙÜÝÜ×Á€I+'*/20<4/-5@?$)4`š£’ˆ‚‰Ž‘Š”““—Œ‘‘Ž‘“‘‹‘ŽŽŒŽ‘ŽŠŒŠ‰‹ŒŠ‡†ŠŠ†…„€„{{}€ƒz|‚…‡„ˆ‡‡ˆŠ‡œ³ÁÍÒ×ÙÙ×ÖÕÕ×ÖÓÒÔÔÑÍÈÁ¹£Œt`ONMSOUZd`_W\badacchlptuvmib\X\]^[a`hjihhg%%.8N]mr‹—¡£¢¤§©¤ž”„}oV;*#/@R\p—žŸ¥¬«®±³¶²±²²¯³²³®¬®¨££œ•§ÖžocFZb/$,$(.-)**17.-0Tf6014-.D=262.))2Qh}lJ1*-/-A;66N_hux}qpjP2&)(NIRecj{u}{~ƒ‡ˆ„……‰„…‰ˆˆ‰‡‹‰ŽŒŽŽŒŽŽŽ‰‹‹Š™”•˜˜™˜œšŸž ¢¢ £¤¦¨«§§¯¬®¬±²°´¶¶¶º»¼¿¿½ÁÄÄÅÇÇÇÈÌËËÌÎÐÏÏÐÒÖÖØ×ÙÙÜÞÜÜÓ³f1%&/-1<;--2F5$&8až¡ŽŒ‚‹Œ•’–’””‘ŽŒŽ“ŒŽ‹‘’ŒŒ‹ŒŠ‹‰‹Œˆˆ†ˆ…†…‡‚~~…‰||€„ˆ†ˆˆŠŠ‰†‹§·ÆËÓÖØ×ÕÒÓÕÖÖÓÓÒÑÐÎȾ³ž„iVHHOPSTZ`^WW]cc`_ceioqqsnk`]ZV`Z_\bddhgkdf&&*4BRbnv…˜£¤Ÿ¦«§§Ÿ™…r]>-'/9J`r‚Ž–œ §¬°°°±®³±³±®¯±´´²­¨§ž›”‰ºŽƒrH{~(% **1&''6/%,EeR3*)31*1?/9112//Ts}pQ,*:N=:&$("!,IaaC3%.EJ^\o]Rl‚„qku˜—®¥•{P,$#$2bˆhN¸Ùž0$%%$$'+3O;98/DC13-46.+-513:DQR@/3:7?<++7=:<9R`osuxul`S8.'';JPfgt}vx~‚‡‰…‚‚„„€‚„†‰‡‡Š‹ŒŠŒ‹‹ŽŒ‹ŒŽŒŒ”–™•™—ššœžŸŸ¡¡¡¡ ¢¤§§«¬©©«¬®±°²µµ¹···º¾½¾¿ÀÁÄÄÅÊÉÊÉËÌÌÐÐÐÍÑÔÕÖÖÙÛßáÝÜÛË•=$%(-8l9(-6A2#%6k¢›Ž‡ƒŽˆ‘–”—“‘‘‘’’’Ž’‘•‘Ž‘ŽˆŒŒˆˆ‹ŒŽ†‹‰‹‰ˆ‹ˆ†ƒ„…€…}‚{~x}x€ƒ†‹Ž‘‘’˜¬ºÆÍÓ×ØØÔÔÖÖÖÕÒÒÐÐÐÍȼ­—t]LJKNWV]`^YUW`fdcaeflqtmoh_a[X]Y]^dghhikhid##'+4BOerˆ• ©¥¨«©«¢œ’Œ‚|^C('-2Maq~˜œ ¦«¯±±®±¯®±±µ´²²¯²¬©£¤”‡†qK’x2!$".4*/(*31,3[QB5+**252501.4-/3KmƒrL(%3K;H-&+#"*8F`bJ1%.`UD98KchYOKeeeed[L@CR`tx\QpŒ…jh‚‘µ¦xd8'+Gˆ|N¹Û²4!2$($(%:OD=<4FD2,14.+,)33367JY:-;781;--6?9;FWetvvxwicQ6+*'>C`igtyr{€„ˆ‡ƒ…‡„†ˆƒŠˆ‰‹ˆŽ‹Œ‹ˆŒŒŒ‹Ž“‰Ž‘‘‘”—•’–•›˜›ž¡Ÿ ¥¦¦¥£¥©§¬¬­°²³¯±·¸¶²¹¼¿ÄÀÀÁÁÄÅÄÊÊËÌËËÎÐÏÐÏÒÕÑÕÕØÛÛßÞÝÜÕºi'+')/16(,7<*&&8lž–”‡‹••˜“‘’”‘ŽŒ•‹Œ‰‹Œ‹Œ‰‹‹Š‡ˆŠ…‰ˆ‹ˆˆ‚„€‚}€‚y{{vx‚Œ”•› Ÿ¡©¶½ÆÎÔ××ÖÕÔ×ÖÕÖÑÑÏÑÏÍÅ»¢mXLKPSUW\bVV\[^hhckkjmrohed\VYW]\]dhdhhgieje""*+26Hdn„“œ¥§«ª«¬¡™”…w^<,))3ASp~”›ž¦ª¯®­¯¯®¯¯µ®±²±²°«ª¨ ™•ŒexÁŸLYJ,$"+05,,)+,44CR<40*,.-2<0(1,4002Xo„rV7,6SDE;$+&"'-0Ac`F6+R[B67H[g_TLYigopxhZE?YjhXPr’Šhx”…™³|]dT4KŒŸ`ºÛºF$**(!&'5PI9<=MN264.4,.354-18JT92/868/)06:7:N\gsqnqtl]N-'&%BJYgjupq€€„„|€‚ˆ……†ˆ„ƒ€Š‰ˆŠ‡Ž‰‹ŠŽŒ‹‘ŽŠ’’‘Ž”’““—–••šœš¡ŸŸž¥£¦¢¥¤¨§ª«ª®¯°²´¸¶´´¶»¼½¾¼ÁÃÄÁÄÉÈÉÎÏÏÏÑÎÐÏÓÔÔØÕ×ÛÚÜÝÛÜÛКD9$,+31.*30'!(<~ —˜‡‹—˜‘•’””“‘‘‘ŒŽŒ’‹Ž‰‰ŒŠ‹‹‰„ŒŠŠ‹Ž‡„ˆƒˆ‡…„‚€||||z|x‡‘›œ¤©°´¸ÁÄÉÏÒ×Õ×ÖÖØÕÔÖÔÒÒÐÍʯš~jXMOUWZ_\YVZ[`cgkiknqqpmi`^`XWRWY^efhgfi_bgc%/3fK7-;NL[[WL^ssqummL?R[^WPgŽ“y“”y–¥\=Es›±Ö¶>++*)&(CUC4:DON20454+.3083;8GA7*1..242-646;N^`mitpn]dZ91*,?Odbfzyqw}€…|x€ƒ†‰‡‚„„…Œˆ†ˆˆŠŒŒ‹Œ‰“‘‘—•’‘˜‘”—–™šš—žžœ¢¢§¨§§«¨«¬¬®«±µ´³²´¸¸º»½º½¿ÅÃÄÆËÇÊÌÌÍÐÓÑÐÑÔÔÕÖØÚÛÜÚÜÜßÜÏ™:#,&/1'&,*+'+IŽ•š¥„ˆ‹˜––””‘Ž”’Ž‘ŽŒ‹Ž‰ŠŒŠŠŠ‰†‡„‰‡Š€„„……|€zv‚yys{‡™Ÿ§¬·¹¼¾ÁÊËÏÒÕ×Ù×ÖÖÖÕÔÓÓÑÎËÇıŠmZRXXVZ_`c\VZacffemonromgd]^[SSXY__gghfkfacie%%'$.58Qm}”œ¥«¬©­«ª¢“‰wW3!)(->Yp’™£¤¤±±°³²²³®¯¯²³´¯³¯®©¤¡›—ˆ{if{ert.&'(/31***209E:690/+332,4*)..-,,:_ƒs.*..<^M5-$")*F%+6=L[h`h_D,1M@:UhVIqrlnejaMRQZRIYu“• —†š™“;"':TI4:k«¶Ó­8" "(FN=/5LXO021-50(2-<765CB52,03:F?5887JX`kmqigecb[?6&8?9-361/3.24,/1/-22'5O|–‰l5%%'-JXB5#$'?:WiYVepeQbTFQ]YKUav‘Œ”””•y¡¦j' 0C5,1fºº¶Ä.")()$(LPM.8Hg\3/774.1;+/.:;O;5-)(27-.:=4CWbkrkc`cfmocB2+2?T[Xjsv|„‰ƒ…‚ƒƒ„„‡ˆŒ‰‰Œ‹‰‰‡Š‡‰Š‹ŠŽ‹‘’“’’””˜—™šœœšž›¡ Ÿ¡Ÿ¢¨¢¦®­ª«±¯®«°·º»·ºº¹¼º½¿ÁÃÅÈÊÌËÎËÐÑÓÏÐÒ×ÔÔÔÖ×ÙÚÚÝÝÝßÛÖ²S&$')!"*% .a•’š›‘€‘”•˜—“•”š’’”““‘Ž‘Ž‘‹‹‰‹‹‡Š‰Š‡‰…†ƒ…|{€|{z{~–£®²½ÁÅÇÃÈÊÌÏÐÔ××ÙÖ×××ÔØÕÒÏÌÊÄ»­–yeZ]U^\Za_W[_caifijnprtpie_ZXVWX^^cbglfia^bgdbn##)0+03I_vŠ™Ÿ©«®­¬¤¡œ‘ƒqU6&#',FZk~‹“™œ§¬°±²¶´°±®²³±µ´µµ´®©¦Ÿ›–‹†‘~~‘E)+2:8)*+-/9=:003;31+.0047590---9ZŠ—b;*$"+GYJ>$'/G?0%4=D7(#3=1./8dO5Mef`Vlj[X[KKYQQRaqŽƒ—š…ls¯¥‚vM),.,/8Z·½¸¸r*("(,+.8WSU36F_N:74:5557541=:B;6-+*,00-8:7LW`jja`_mrst^B.1*>`\beqx|€ƒ‚‚~‚~…‰‡Š‰ˆˆŠ‹‰‹†…†ŠŒŠŠŒ‹†Ž’““‘”–™œœš›˜ŸžœŸ¦¨§¨¦¨©©­¯¯°²±¶¹¸º¶·º¼¼¾ÁÃÂÇÆÉÌÍÍÏÐÐÏÏÓÔÓÓÒÖÖ×ÛÜÜÛÜÞàÚˇ0#' $$( #3k‘‘ž•ŽƒŽ’““”•—–—“’‘–’Ž–Ž“‹Š†‹Š‰„‡……ƒŠ…‡‚€‚~}z{z}x~‚‘¡­¸¿ÃÅÈÆÈÉËÌÎÒ×ÖÙØØÙÖÖÖÖÓÔÒÌɾ³¢‹rcZ[V`Z[^]Z\cbjjkkmpptqlhd^[^Z[^]]hbiocg__]jekh !%-6?H_u‹—œ£««®¬¨¤˜’rP4" ,@ZmŽ‘™¢¨«¯³±±°°¯°³¬µµ·¶µ²®­¥Ÿœ“€”²~zp61+4:.%'-09@<00..5*++%-,3410-1+3@k’’|c7#$$'?WM9+'2J@:0663YX=AdkeYrvcWc[CQH=Udn‹‡Škp…¨Ÿkrn1%."+1T·ºº™U*&!#%)8WTV);ITM//8;377/2117@GJ=+''2:006N_=9RfX_ixrab\WOG8Wi{‘~jƒž kgL-0+*1S¶¶­n=3:(""&*3VQF+9MPJ0/9;/0+,22.7?A[Yboqw„ˆ€€…†‡Žˆ‹†…‰‹‡ˆ‹‰…ˆ‹†ˆ‹‹‡ˆŽ‹‹Œ“‘”””–—˜™™œ™ž›ž £§££¨¦¨¨«¬¬­°°³´³³¹¹Áº»½ÁÂÁÃÅÈÉÉÊÍÌÍÑÎÑÓÓÔÕÓÕÕÖÖØØÛÜÞßÜØÅj&.1""%& 9…’”ˆ–Ž—–—–’‘”‘‘‘•’‰‘Ž‹’ŠŠ‹‰Œ„‡€€ƒˆˆ„†€„ƒƒ€‚{z|vywx‘¨¹ÃÊËÏÐÏÍÉÈÊÊÍÑÖÙÚÙ××Ö×Ö×ÖÐÎÈ¿°¡‘yd`XZ\][[\XXafjkhrqpsvtpm[_W[\YWXbdhgfjedagchkig #(-EZr‰”™Ÿ¤©©ªª¥œ„u[9% $/?Um|†•š£§©°²²³±±³°²¯²³´µµ²³©© š’ž®stp3(+:4/+)5A?46/*-16+23(+93(&&&()8e~‰ŠnV4%(0+)8B6,$;U<55.548<,+/402.;OH4ThF_msqdZNRVK3Kaw™™‚rky™ ‚•yC4..6g»¬›TAji)!)!%?SOM3AJKJ4168+2123-.<924A763/16<;7EOQaklqwxzxxqeK/*.K^Yjnqwƒ…ƒ„„ƒ†ˆƒ‰†‡†‡‡‹‡ˆ‡Š‰Œ„†‡‡‡‡Œ„‰Œ“’”Ž‘’—•š—™š˜™žžž Ÿ¡§¥ª£§§ª¬¬­®¯²°³µµ¼¼º¼ºÀÀÃÄÄÆÉÊËÍÐÏÐÎÓÒÒÓÒÓÔÔÖÖ××ÚÜÝÝÝÛÐœ<+*$!"$!=Ž“‘Š›“‘–“–”””•’“’’””’”ŽŽ‘ŽŠŠŒŒ‹‡‡‡„…‡‡…‡†}€€€€~}ww{†ž³ÁÉÏÒÔÕÒÐÌÍËÉÏÐÔØÙ×××Ø×ÖÕÔÐËĺ©˜‡n`]V\]^\ZZX`ddeekprppsrqfe_XYZ\_aahjfjigda^ehifa  %,=Wt‡—˜ž§¨®«ª¦”†pS7 "$/?Ri}‰—™¡¦©¬®µ±³±±³±®´±¶´µ¯®¨¦Ÿ™–Œ…•«gHF+.9/%/0=C:136*'2*,,)(,85%#$-,Uˆ€€mY=/1-024A1,)EU7645311?3'48,.+8OK=UaCYq{vkMDKEE9>Qt¤—€†Œ–˜yYr¤w\P=GŠµ›‚r–„zˆlb<$*$&'/547*DK53;7'-16-,5?-+01GF7G`AKmˆxt\958<6=K ŒŠˆˆ™™˜g3B‹™Špwnx¨­–qV™Â¨D%%,*@PIF/?F;=84;21A>,250176333;:2;69/1E@/482$)-0+09:33/(@BA=F@8c}†c<499@GV‰š‹‹ŠŽ˜˜Ÿ|Q5yŒ‚=Vz›²ªœ‚‹²È¨E##$'FL=?0=F8CA9918AC4./52:10305>6098;NUipyu|{{|xvvcR-+;SUbeouy€…‡†€‰Šˆ‡†Ž…Šˆ†‰ˆ‡Š‰…†‡‹ƒŠ„Š‰‹ŒŽŒ‘Ž““’’˜”˜˜š™–œž¢¢Ÿ¡¥ž¦¦¤¤«­³¯ª¯±±´·¹»¸¼»½ÀÀÄÁÆÉËÍÌÍÎÐÐÒÏÒÑ×ÓÖÔ×Õ×ÖÖÚÝÜÞÞÜÒ—4 -aŠŒŽ™‹•Ÿ–“’—•“Ž”“Ž“‘”ŽˆŠŒŠˆ‰Š‹‡ˆˆ†††‰ƒƒ‚|}|xx{~—·ÈÏÓØÚÛÙ×ÕÐÎÐÏÒÔÖÚÚÚØØØ×ÕÔÐÇ¿´£~la`ad[\XYWWZ[^khlnlrqophb^a]WYX^beliejh_ck_`kih_[" ")5Je{˜¤¦­®­©¥ž˜Š{_>%#*7Olƒˆ‘¢¥¯²·³´³²´²²µ³´¶´µ¯®«¥ œ“†™};0'.1378D?7()*8%+)2+,.)2,."'%+7R}tMsvR>4$,(&+(/59EL=&+92!&&(/)7F68*%>J>B414Fl††mE.AFTN^‡‹Œ‹’–œ •wITC:pœ§ž›Š”­¬{/&-(.FL>5/:<2/B>;KS^nx{s}||€xyys\E2/JX^^lpwz|„€‚‰‰‹‹Œ‡…‹ŠŠŠ‡‰‡‡‡ˆ…Šˆ‰Š‡‰‰Š‰ŒŒŒŽŽ’’’’”•‘•–œšžž  œ¢£¦  ¥¤§­¬¯¯ª¬´²µ¶¸¸»½»»¾ÀÀÁÃÄÈÌËËÑÐÏÎÒÐÑÑÔÕÓÖ×ÖÖØÙÚÜÜßÝضN!! -bˆ‹’‹‘Ÿ•—•’‘‘ŠŽ’‘Ž‹‘ŠŠŒ†ŠŽ…ƒ…‹…‚„‚~{{~{zwtvy‚ ¹ÊÒÖÙÛÚØØÔÒÒÒÓÔÕØØÙØØÙØÖÔÑÍÅ»«›†yed_ab]Z\WRZdd]flmpttsoge^b]\YY^abjjhhgggeioakjdVO!! &%5IfzŒ™£§«­­­¦Ÿ•Š|bC)$'(8Slz‡“¡§©±²²´±¯°¬µ¶±µ´µµ±®¬¥¡›–‰…€“C12.;B<>58*$%+-*+,/,,1/4)'$-)=XypI>mpB72).'*..*8;HJ?(.<7#'%'-6=H;<)";495?>2,04-1-4HA=PRdqzxv{}y{{{oZE2+CYY`im{wz{~ƒƒ†ƒˆ†‡‰ˆŠ‹Š‰Š‹‰‰„†ˆ‡†…Œ‹Š‹…ŽŒŒ‘”Ž“—’–šœ›œž œ £ ¦§§¦ª­¯¯ª®³°¶µ¸·¸»½¾ÀÁÃÃÅÇÉÈÇÉÏÐÏÌÏÑÑÒÓÔÓÕÖÕ×ØÙÙÛÝÞÜÚÄs"!3k†‹‹’ŠŸœ•Ž”’‘‘“’‹ŽŠŠŒ‡‹ŽŠŠˆ‰……‚„„„…~€{{zv}{w|†¥¾ËÐÔÙÛÚÙÔÓÑÐÐÓÔÔÖ×Ù×ØØÕÕÒÐÉô¢–„ufge_b_\X^W\_[aklonrormkc_\_^Y^]`dhigiffkacdab^XVS#,*{mK>21.+)(226FPF7&(2:)&.(0.7E95' -SH53;8D1.2?9506?92141183;L@JPWny{z|~|yvvto\70-PZ\`hqz}||€„„†‡ˆ‰ˆˆ‰‹‰†‰‰‹‰‹ˆ‰ˆ‰ŠŒ‰‹ŒˆˆŒŽŽ‘‘Ž‘’’Ž‘–”””–œ˜˜žœ›žŸŸ ¢¡¦£¥¦¨­¯¬²²´¶µ¶·¹»½¾ÂÀÄÄÅÆÉÇËÉÎÐÏÏÏÏÏÒÐÔÒÔÓÖ×ØÖØÚÛÜÛÙÏ™-#5wŽ…Š‹•Žœ’Ž“ŽŽ’Ž‘†‹‹‹ŠŽŒŒŽŒˆŠ‰‰ˆ€ƒƒƒ„‚zƒ}{w{zwzyŒ¬ÁÌÓÖØÛØ×ÖÒÏÏÏÑÖÕØØØÙÖÔÔÓÐÍÅ»¯™Ž{pkigggd^^b\aaaghkstvqhif``Z\[\^cghijkgigh^]ad_VQZ\  !*3IivŒ˜Ÿ¦¯®°«¦¢–jG($%)6Of|‡”›¢©«®±²°²²¯±²±³¶³µµ¯°¨¤Ÿ›™‘‡|{sC;9.-M…`GTI/,)./27\xmiovzuipgr…‰†ˆ‘tC?r‹‰“›šŸ·¾±Ÿ^9(#$"4`C+7M=1/7=>/;8?8+7::01.>:6920558CFAKMYpwz~|z{xzreP;0+O\[\fp|}ƒ…‚ƒƒ…‡‰ŠŠŠŠŽ‰‰ŠŠ†‰†‹‡Ž‰ˆ‰ˆ‹‘“Ž•‘—’’š™š™œš  ž£¢¢¥£¥¤«­¯­³¯³³²´µ»¼¾À¿¿ÃÃÅÇÇÉÊÌÑÍÎÎÐÑÑÒÓÕÑÔÔÔÖÕ×ÙÙÛÜÜÚÓ­D'=ŒƒŒŒ’ŽŽ—š•‘“‘’’‘’“’ŽŒ‰ˆˆŠŠŠŒ‹†ŠˆŠ‚ˆ‚ƒ†„z}}zz|xxz~“°ÃÍÒÕÙÙØÕÒÏÏÐÎÑÔÖØÙØØØ×ÖÒÏË´¦•Š|qlhjkfed^]a_^b`mqwvunhjff\_XZ[^aejkklfgac^^]]\YRRP! "'6N]}Ž–ž¤«°­ª§Ÿ•Ž~nF,%#(2OcyŠ–Ÿ ¨ª±±°²±°±±¯µ²±²±³°¬ª¢¡œ˜’‡yukSC:;DF7,+++**.0.++.-6.',*7::IXL/'*4^UPS<40/+1./>SPC7.'*6//+'+35BK<&"*S`H0937JXP\qxzzq„…€Ž˜oP>Q€„|„–ž®¸ªŠxW?($'3ZU2(BG>32=N=+<:@?08?:1,5=;1/23115CFEPVcnx{{€y}{|}zumL:/.S\W`jmy‚ƒƒ…‰ƒ„ˆŒ‹ˆ‹Œ‹ˆˆ†‡†‰‰‹†‡Š‰‰‰Ž‡‹ŠŽŠ‰Ž‘•Ž‘‘”–›—™žœšž¡¡¡¡¦¥¨©ª«­®°¯±±³³·»º¾½¿ÀÂÀÃÆÅÄÉÌÏÎÐËÏÐÏÑÒÔÓ×ÓÔÕÕÖØÙÙÚÛÜØÃj=}†ƒ†““‘‘˜˜Ž“”Œˆ‹Œ‹ˆŠ‹Œ‹ŠŠ…ˆ…ƒƒƒ„ƒ€}}€z}zx€€“¯ÃÌÒ×××ÖÒÏÎÌÍÐÒÖÕÚÚØØÙØÕÒÌƼ¯›Ž†xpnjiicjebaeab`bltpttqnijh`_\[^^`ahgkdjhhaiZ`^VVQSO!%(1Im|Š–œ¤ª®ªª¦¡–}lW4&'+>Nb}ˆ“˜£§­°²®®®°±­­­­««°±¬¦£Ÿ—›‘‹tseJ///,+#.FX<:;0&(/*+*()49GA6'"*McV95-)3==Afmz~‰ˆ}~ˆŽ›o_YM`}x‡”š•’—¤—€[H;Ys7'2AJ72/I1,3&.O]X@5/..866Baw{Œ€€€r…•}zkmVRefn™Žy‘©°µ¥yq‡r?5=QO8204A/3@;ISM5<720D;83.2)02BJDMQYfqw{€w…|y}{|n?8.7S\blmy||ƒ…†ƒ†ƒƒ„Œ‰ŠŒ‘‰††‡ŠŒ……ˆ†…ˆ†‰‰‹ŠŒŒŒŒŽ“”““’—™——ŸŸ¡ŸžŸž¢¡¤¦©©ª¬©«®´¶¸»º¾À¾ÀÁ¾ÅÆÇÉÉÊÍÍËÎÏÐÑÑÑÒÒÔÔÔÖÙØÕ×ÙÙÜÜÛѤ?!N‚‡Š”’–™œ‘Œ‹‘ŒŽŒŽˆŒ’‡†‹‹ŒŠ‹‰‹Œ‰†ƒ…ˆ…€|€ƒ‚}y|{{yzƒ‡š´ÈÎÔÖÖØÒÏÍËÊÎÏÓÕØÚÚØ×ÕÖÑÍȾ¬›xxuxriifbZac^bfabdnqqnoqf`\[XY\^bgigegjk`\]_cYY[UUPQ!&-Fbs’”›¢¨­¬«¨¢šŽ‚xX3,&,6Ccu†”™Ÿ¦¬®²³²­­¬¬­ª¨¦«­°­«¨¢œ™—‹‚†“zB>:.53(/,1,/*,-02>1./2@ViI,)+1/3/=]KM[YK.&703,;@4/4E7,-'12+232@R7$5=:R[R=B0*+'4;AYwŽŽy|oˆx†bmgE>16OgrXj€¢—‰”’ŸˆqlvugR@9EG.6AH[[I8:324877.02..6GHIIQ\hr}zzw~}|€xw_F7*;S_belz{||}‚…„…ƒ„„‰ˆŒ‰ŽŽŠŒ‰Œ‡‰†ƒ‡……‡Œˆ‰‰ŒŠ‹Ž’“”––”™›—œ›  £ Ÿ£¤£¥©ª¦¦ª¯´²·¹··¾¾¼¿ÁÀÄÇÉÇÉËÎËÍÍÎÏÎÐÒÒØÓÔÔÖ×Ö××ØÙÛÛÚÕ¶V#\ƒˆŠŒ”‹’–’™‘ŽŽŽŒŽ†Œ‰‹‹Š‡ˆŒŒ‹ˆˆ‰ŒŠ‰‡ˆŠ†ˆƒ‚€~}~|||}‚‹¶ÈÎÔÖØÖÒÐÎÊËÍÑÒÔØÙÙÜÕÖÔÍÉô¦“ˆ~yvuzqhgg_^_cdcikifmnrkneab\^Z[[Z]gkhfaikcabhaSQT[WPP$!#4?[mˆ”Ÿ¨§¬¬ª¦£š‘„u\4$",7K`r„’›¡§¬®°²´­­¬®«¬ª«¯±¯®¨§¢ž™”Š†‹ˆ’q;GM,.-*+-2*)+.*+-628+-6MG4*-/0222:`UXXVN:(3-06<3*.3;:(44.///5.-QJ'5;D\eF/@6!"&)3@Jt—‰pƒvŽ†y€aZsF$!&&2_X2:>RHFzŒoˆ…ŠŽ„~sgjtgL[id_;=;9-*.4951.01/=GJNTWenuzy|{€{zx]K>1FUclgrzz€}€†……‡†„€‹†ŒŒŒ‹‡Š‰Šˆˆ„‚‡„……‰ˆ‹Œ‰Ž†Ž‘“—˜˜”˜™››œ–œž¡¢Ÿ¡¢¥¥©©¨¨¥ª¯´±¸·¶¹½¼½¾Á¿ÃÃÆÇÇÉËÊÎÎÍÎÍÏÑÐÔÓÔÓÔÙÕ×ØØÚÙØÛÖÆy!$_‚Žˆ‹–•“—ž‘’ŒŽ‘ŠŽ‰‹ŒˆŒŠŽ‹‰‹‰†Š„€{€w}|{€†€¢»ÊÏÓÕÖÕÑÍÍËÊÍÎÑÕ×Ú×ÚÖÕÔÐɼ«›Œzwqwxrijkf`fbb\bdgkolmmlaZ\X[ZX^b]mlhghcfb^]d^STV]YZX#%.JXpƒ˜ž§¨­®­¨£œ’‡uU/$%);Jbwƒ“š ©ª°±±±¯´®¯²®¯­³²°°©¨ŸŸ—“Œš†j6EN,*()1,(8-,.*+597-,01H/:/05:45+4\VUNF?75,.>AK7206C=*-7<+82-,1MB%-7WhqA$<>%!"*/D\k|”€hˆŒ„j{nLj](#"+Si,'')(3dG3;Hr|€ƒ{}–¢š„tRA.E,+74,(-;,-,3-431+,*002425=56-14MXSNG@5?7(A@33&/.D>.771,+#%'7A:0(8Tni8%4H6&84@Ra|‰tUq‹‘m[k‘ˆcatO)!#*E{1#--)LO( !,KIYHCHx¨¦}mmgE;DD560?764*665;HHLUX^js}}{z€‚~‚€uRF49RVgigt…‚~ƒ„…‰††‚†‰Œ‰‰Š‹‹Š‹‰‡…‰Ž‰Š†…†††„ˆ‡‰†„ŠŽŒŽ“”–“˜™”™–™žœ›žž¡¡¤§©«¨¦ª¬³±µ±µ¶¹¹¼Á¾ÁÂÃÅÅÅÉÉËÌÌÍÍÎÑÒÏÑÓÒÓÓÕÕÖÖÖØ×ÙÚÙÓ²G!/y„ƒŽŽŒ˜‹‘‘’’š™‘ŽŒŽŒ‘Ž‹‡‹‹Š‰‡ŽŠŽ‰Š‹ˆ‡Š††Œ„|€€„|‚}€‚ª½ÈÏÒÕÙÕÑÌÍÉÌÍÏÒ×ÞÛÙÙÕÒÍÇÁ´ŸŽ„xsqpttqhgigk[_^eikkipgiec^[WWUSY`dfijkggZV\b__UWV`][Z]##"""+9Ni| ¦­¬ª®­£˜‰pX;%)*8Hcy„œ §«­¯®³°°²²²±¯²´±±¯­©« œ˜•–xcZ97?+/7123*89-0./24-)+60.*-7=.315>C41.,1CE5**(/*.#68E;7.1Xqf3 #=R-+5@D[^s†rLeŒŽq\Wx’‚]~u8$*-:{A#-*2W.!%/DBB559OdX=He‚iUN<32488=2)442FDJTVVdju{|z€|‚~~cNF+;LSf]kw‚„„ƒ……„‡ˆˆ‰ŒŒŒŽ‹‹Ž‹Š‰‰‰‰Šˆˆ‚„„‡…‡ˆˆ‹‡Š‹‹ŒŽ’–˜•™”•˜›žŸœœœœŸ¢¨¢¤¦©§­­°®°²´²¸º½Â¿ÃÀÃÅÄÅÇËÉÌÎÎÏÎÍÏÑÑÒÓÓÔÕÖÕÖÖØ××ØØÕ¾^5uƒ„Œ‰‘‹’—”“”ŸŽŽ“‘Ž‹Œˆ‰‰Œ‰‰ˆŠ‰Œ‰Žˆ‹……†‰‡|€|‚€}…Ž¦¾ÅÊÐÕØÖÐÎÊÇÉÍÐÓØÚÜÚÖÔÑÍÇ»­šwvupwwjkgefc[[`gafienfddb\ZUTUV^echhghhj^[[\b\X[V^\V_[ $#0-Mc}™Ÿ¥®¬­¬ª¡™‰qWC''*GG_uˆ˜ž¥­«¬³°¯²³°³°²´³´²±¯¨¦£’‹šzkU45.(,2483+,-.--,2-.3,-8108@=501*9AGKGA8:4,56<00+0;7DF7+/'-'"#0<>'+-6ZrcB$#*VU=AIR[`ay{ag€ƒxdY{~wŠZ)&+4xP%(%IF& $=@F;463GCK21KSaedr~ƒ……ƒ„‡†ˆŠˆŠŽ‰ŒŠˆ‡Œ‹‰ˆ‹ˆ‰ˆ„Š„‰†ˆˆ†Œ‰‰Š‹ŠŒŒ‹’“’”“‘–•”žžžžŸ£ ¢§§¦ª©­«­®¯°µ¶¸»¾À¿¿¿ÁÄÃÅÅÉÊÍÍÑÍÐÎÏÒÑÒÑÒÔÕÕÔÕÖÖÕ××Ø×Ë‚! 3|~‰–‹—”““‘œ’ŽŽ•’Œ‹Šˆ‰ŒˆˆŠ‹‡ŒˆˆŠˆŠ…ƒ€‚ƒ€|}~~~ƒŠ¥³ÀËÐÓÖÒÏÍÉÇÉÍÒÓØÚÛØÕÕÏÊú¨—ƒzxvwsssrmjii``]W_efgcjhb_WUYSTY]`dfkmihcfaZda^aZYVZ`a^b!!!!(,2Ee~Ž–¡©©®¯©¤Ÿ˜…z]E%&3;Fhw‚—§¬®°°²°³°¯´³±²³µ±²®¦¤ŸœŽ…”|mX668-+3<@,(0()'.)762.10-39>=?50-108BOAF8:22<<3,/7-0BEJC,1*$('&6H4*&,>WiFR9#!>k]@JP[`fywzxs`vuiqƒŽ…zC(/A;I7>A0**,,+*79IU+'('.-(:K-(&8Q]L>\]4%,UlVGM`rakuty{cji_qtuy’Œk0+0iv)*09(&&.:D=<;1MTEB5,1/*)+,9CHPUX_djtw{~|}„€ƒtVL63QVhfgx€€„ƒ„‚†‰‰’‰Šˆ‰‹ŒŒŽ‰‘Œˆˆƒ…‡‡Š„‡Œ‡ˆ‹Š‹ŠŠ‹ŒŽŒ“’‘˜˜‘˜š–›šœœž¡££¥¨¥¦¦¨ª­¬¯¯²µ¸¶¸¼¿À¾ÃÂÄÇÇÆÈÈÈÍÐÏÎÏÏÐÐÒÓÑÔÕ×ÕÕÔÔÖÚ×ØÓ²D >~z‡“—–š“•’ŒŽ‘’‹“•‘‹ŠŒŽŒŠ‰Œ‰‰†…ˆ„‡‚ƒ{‚„†‡ƒŠ–©µ¾ÉËÍÊÌÊÉÆÈÎÑÖÚÜÚÖÔÓÌž°¡Œyuvuxppmlhogg`Yb_^cahj^Z\SKQXVecdihhccbi_]]`e_]_ZZ\X\]__&&$)! %'1C`uˆ›™ž©ªª¨¥žšˆy]C.-4AM`v‚‘–œ§ª¬¬¯±¯±¯²±±°²´±¶¯±ª©¢™Š‘ ¢~qi6;7;3'33*++.)((382-*3.:DDC=B0(05/3?G<<7>>B@-+(150032KZ6)')*,2>A-")>]Z>6TlT;<=TgeSNdM@VeŠƒgmi\JZr}ˆ•‹‹V-5Wr+,6/)&/-I]xƒ— ¨­°±±¯°­®±³³¯°±´ª¬¨¡™’Ÿ‡x61GF/'=3)*.$%')95247TceU;85.,--+3=C;;=9?6101?//<35(20DW)",-,3==4%,UbF@6DLfbA&$;|~hf\s†}‡„mWPE6@Trv‡”mQY_-9G<#&$3B<;76.):>5I:4503101@2/'5+/4;?JPWX[lhlrtx~}~v^I53GSaflr}„€…ˆ†‡‹ˆ‹ŒˆŽ‰Ž‹Œ‹‹‰Œ‹‰„‰‡…‡‹‡Š‹‰ˆˆ‰ŠŠ‹““••’“”˜–ž™˜š›š Ÿ ¡©¦¥¤¤¢¨ªª¬¬°µ³¸¹ºº»ÁÂÁÀÇÇÉÇÆÊËÍÍÏÐÑÎÑÑÐÑÓÔÔÓÓÓÖÔÔ×ØÔЭHRz‚Ž‹‚•’‘’‘Š‘‘‘”‹”•‘ŽŒ‹‹ŽŒ‰‰ˆ…‡Šƒ†‡€„ˆ†‚…‡Š‰ˆˆ‰Œš¤­³´µ²»ÁÈÏÕØÜÚ×ÕÑÍÊĸ¡“ƒynrljpoiiecaVa\[`efga]ZSNFNSZbemngdagf^XZW[][^Zcc[a_aa`T**'%'"$#.8Tl‚™£©«¨­¨¡—‡|fT535BM[r†‹–ž¦¨­¯±³¯°²³­°±±±µ¶ªª¨¤ Œ‹œ¢˜„h83VO61;()&-&+,.029HQbZH9202,),*58BD>=K:/5/-1<=5976.-8Cg4**175/:A59XH=C9EJhqM'&$G…’“œlŽwY‰~skbY;BAr~j†`lr:]v*!*;<@75;/.C<=E86./450584-$.-08@HNTQY_nlmuvz{{}}{~{wuYD5=MY`cox€„ˆ„Š‹Œ‰Ž‹Ž‹’Ž‹Œ‰Š‰‰‹‰ˆ‹Š‰‰Š‡…‰ŠŒƒ„ˆŠ‡‹Š‹ŒŽ’’“”–™•˜š—œš™œ›ŸžŸ¥¡£¤¡§©¬©«ª®³°¸¹»¸ºÀÁ¿ÀÂÈÆÈÅÉËËÌÐÐÍÍÎÓÒÒÓÔÕÔÔÔÕÕÕÕÖÕÓÂj\xƒ‹Ž…{„‰ŠŽŽŒ‘Ž•Ž’•’‘Œ‹ŽŒŽˆ‰ˆ†‡ƒ~…‚†…†…‡‰ŠŽ‰‰ŒŽ‰—Ÿ¤¨«¨±ÀÈÑÕÕß×ØÔÓÎÆÀ³¡Œ€yoniljhhl`b`W[]_dhab_\YPMFQXaemojfadecYYUX`Y]_]eY\`df_XT++,.'$"'+6Qg…› ¦«ª©££—„lXA54BN]uƒ‘œ¨©­°®°­²±®±°¯²²²´²«ª¦ž™¥ž…^@9dT4+6#%%(,#':6@U]\N8.2')-*.'+5=AA=;<21-804:D=:<7+2-8]C&4:<4*3MLRI589;::Onh8%$M‹¦ ul ‚i‚rZdUG;BDipwœzw€L†£Š&",.5;:51/5?1=>63.84/0236+.+-23@KUUTVdmrusxz}}z~{umW:0@Raaflzƒ…‚‹ˆˆŒŠ‹ŽŽŠ‰‡‹‹’”ˆŒŠ‹Š„‰Œ‡ˆˆŠŠ†‡‰Œˆ‰ˆ††ˆ†‡‹Œ‹Œ‘—’’š••”–˜™“žœžžŸœ ž¢¤¥¥©¦ª­«­­°¯µ¹º¸¼¾Â¿ÀÄÃÄÇÈÆÉÍÎÎÐÎÐÑÔÒÒÔÓÔÕÔÓÕÖÖÕÖÖÒɈex‡‘Œ‰szƒƒ†…††‡ŽŒŽ’‘’““‘“ŽŽŒŽŽŒ†‡‰‡‰„‚‡…„ŒŒŠ‹Œ‡Š‹ŒŠ‰ŽŠ‘™œ¡±ÃÌÐÕ×ÝÙÕÔÐÍɯžŒvpqqokfdf^]YT^_agc_^^ULKJTR]bfomihg``bY\XUZW[d\c`_]`_ZPJ**% $#&0Nh|Žš¤¨ª¬¦¤™†s]B::CH[p†Œ–¥¨«®¯²¯°¯®°±¬±²¯³°ª¨¢ž˜Ž•¢¤†a?<`V741%(&*)+>MNZ\N>@1/-0*+((*+1AI58H;11.66;E@CEH;2)++F@16=1.(-S`a<0/4558De{Y5"%+HcoTo‡tn|ƒVSJ;1>2]y€r›Ÿ|{s¨©X%$5-0:2*/'1<72/00036.2+(130'.1:>JOX]ahmuuzyy}~{|{}zrbO6+BT^cqv{†…‡‰ˆ‡ŠŒŽ’Œ‡ŽŽ“‘‹ŒŒ‹‡‹‹Š‰Š‰‰‰„ˆŠ…†‚†‰ˆ†ƒ†Š‹‹ŽŽ’”˜’—˜—š–›—š œž¡£¤¢£¤¨§­«­¯®´¸··¹½½À¿ÁÂÄÅÉÈÈÈÊÌÍÏÏÏÐÑÓÔÕÔÖÓÓÒÔÔÕÖ×ÖÖÌ«lwˆ‘Žˆwpuw}€„‹…‰‹Œ““Ž’”Ž”ŽŒ’‘“‰ŒŒ†ˆ„‰‡‰‹‹‹’‹Š‹†‚†“¯ÁÌÓØÚÜÚ×ÖÑÌŸªš‡|tnmlknd`^aXZZc\c`bcZVRNHORUafkknjea\^YXZXXZ\^bb`_ZagZUPG&&(&'('14HdtŒ™š¥©¬¥¢£šŽƒx]G9:?J]pŒšš©§ª®²±±¬¯®°¯¯´±³°±­¨¤ š‘‡Ÿ«‹g@H\[.;21*)1)/DPPND6/31/1/23/0,19DB7CNA962;>:D=CD=::0-0?I:H9')*3Lmh8)*,270C]h^=C))1?:8Q`ls}‘iRD<+83IVr‚}¬›’—¯”9$,11:91-),:>6043-31.9+/.1..0.7NXp“œ¢¦¬­°¯®®­¯¯±¯´°±³¯ª¬¤¢š’†‹•­j:N]`276)*0+018<7;43393-2,04/+11:C77OGC641/<29CG@4/'$0=ToW5+*'+73Gjka@CO*!0.-68Db~•ƒmQ9+01?EGƒ{œ³«´¢i),324:=.1+4?58@34/27/-.+4,/)1,8@KOOTdomnpuszy~{zz{{xhR7.CTaXjt}‚ˆ‰„‰†ŽŒˆ‹‹Œ‹‹‹Ž•–‘‘ˆŒˆ‰Œ‹‹ŠˆŠ‡‡…Šˆ‹ŒŒ‰‡ŠŽŒŽ“’“–•–“•–—™˜š™œ™žžž¡Ÿ £¦£¬¬®­®²±¶´¹´»¼ÀÁ¿ÄÃÃÇÈÈÉËËÎÐÒÒÒÐÑÓÓÓÔÕÕÔÕÖÖÔÖØ×É—zŽ•Š{uaaglqhnotsv~}‚……‰‹‘Ž‘”’Œ‰ŒŠ‡Ž…‡“‘•—’‘Ž‹Œ‰„…„¡·ÆÏÖÛÜÜÙÖÓÐɾ°¢Žxqlollijd\`R][\edf_WTWPKOSZ\cgiibe__\_WQW\VW\_`_\Y_c[[SG?$$(#&"&+#,Ne~‘—Ÿ©¡¤¢ —Œ†v[E::=M]p‰’š¡¥§®­®¯¯±®®°¯°±³±¯°§ª¤ž”†‹§’a8G`D;:0))1*2*8223-/4/0/1)+<-)-4:=1-&+##);[f@6.()-5LWtynZ4QM%.@31))6Ps˜Z;,6;SN4Yovª©¨y4!'-/0:.,(&1E6461+111/*((*/5.43:@MINZgnptutuz~ƒ|{zyn\A11CU__m|‚ˆ…„†‡‹Š‰‡ŠŒŒŠ’‘ŽŽ‹Œ‹Ž‹Œ‰Œ‡„ˆ…Ž‹Ž‡ŒŒ‹Š‹‘“–”’•—–”–”–—š™œœž Ÿ£¤¦§§¨­«¯±²´´µ¹µ¼¾ÀÀÀÇÅÄÅÉÉÊÌÍÌÐÒÑÒÑÒÓÔÐÓ×ÖÕÖÔÕÓÕØØѬ~‰†un[VX^o]gimjqtvt{ƒ~…‹ˆŽŠ”‘”Ž‹Ž‹‰‹Š†…‘’’”š”•ŽŒˆ…‹˜•£»ÊÏÖÞÛÝ×ÕÓÍŸ§™ˆ{ttopjhbe^[ZS]^fib`YPILIOS[]`ahkfdidf__ZW_^Zbada^\\^WXPHD:''%*' !'$0Lh€—›¡£¤¡ž¡–…v`IA<=KVn|‹’˜Ÿ£§­®°­°±¯¯°¯®±±±­®¨¤¤›’Š|ˆ‘\;J\?2?4-))((--.1,1270-+-,6>4+1=J48B@97537?LOC8--4805@E7-+('&(+FgO1351*+5Gk{wvoC6^=*=;2)(#>\š–^2/4BVYD\@Wž[%!13095.'%)8?7233**6.+,%-(/:.+1;FIQTbjmoovuwwvzy~~ylOA43K[Zit|ƒ‚ƒ‹ˆ‰…†‘Šˆˆ‹‰ŠˆŽŒ‘“ŽŒŒŒ‹‹‹ˆ‡ˆ‰‡Šˆ‹‹ŠŽ’‘Ž’“•’“—•”–˜–š–™›œŸ¡ž¢¤£§¨§«¬ª®µ¯±µ·¸¼¼½¿ÁÄÄÄÇÈÊËËÍËÏÏÏÑÒÓÒÕÒÔÓ×ÕÕÔÕÔÖØØÔ½Œ‰‡riiUMR`gZ[\cdjgnlvw{|€‚…‹ˆ‹‹”ŒŒŒ‰‹ˆŽŽŒ‹Œ‹‰Š‹“•—‘™•Ž“‹‹Œˆ…‰‘’ªÀËÐÙÛÝÜÖÖÑËÁ´¥”‚uqpmlfb`_[W]Z\`bcabQMMQLSXXdffhde`b]aZXTU_Z_abeb^Z`c[OLE5<&&&!#)(3Mi|Š“—£§§¨¤šŽ„pYG;?AL]nŠŸ¡ª¬ª®°°°¯¯°±±±´±²°«¨¦ ›˜€„”’dBQ_@@I24+1(/-.041;2.1-+-*.6.*;J=,@G<43<:8C_UJ:3)'1+/02/02.*%'+QY6+654/.5Ec{xt…h8CU4$$& "!##*3Der…‘š¢ª®¯ª¨¡–ˆp[D<<@P\k‡’š¢¢¯­««°°¯±®±±±°µ³±°ª¢¤”‹€|†‡`GM`I=CFEOU_ioosvssux~~{{ypVC52=PZan„‰†„„‡…†…ƒ‰‹‡Œ‹‰ŒŠ”Œ‘ŽŒŠŒ‹ˆ‹‰Ž‹…‰Œ†ˆ†Šˆ†ŠŠŠŒŒ”‘•”œ“”—š›™›˜š—™œŸ¢£ Ÿ£¢¤¥¦¨ª«¨¬ª³µ¶µ»¼»¾¾¾ÃÃÄÃÇÊÉÌÍÏÐÑÓÑÑÓÖ×ÕÔÙÔÕØÖÖÕØÛÙÒ­uWRONFOMaKLQVUU`_abffimoor{wyy|~…„ƒ„‰†‡Š‡‹‹’–‘“›˜šš‘ŠŠˆƒ†„†‹Œ–¤¸ÆÏÔÙÛÜÚÕÐËÅ»¬—‰~tokfe[VMOMNUY_edaYSMGDJRNZ`meeac^[bb][\Y^ZagfhcZ]]UVQK?=@5##$!')#(.E[nƒ“œ¦®®®¯¨¢ŠxaC>ABIVl~Š“™ ¥ª«­ª­¯­¯°±°²³²³³©ª¥¢ —Ž€|‚vaSN^QI>+$'*)/3:;A5.1509+-/+:6;EA27D?:24489LAIM961&/')8600,')&(:LD)+/=IN=5F;()-8@MD8A1)?V}l[bg^t.&)30471)/)/3++.528))"&%*3+49CDCFMO\gnrostwt{zy|}}{uaL0.4MV^bv††‡‰ˆ„„‡†ˆ‹‹ŒŒŽŽŽ‹‘ŽŽ‘‹ŽŽŽŽŠŒ‰‰‡†Šˆ‹Š…‡‰‡Š‹Š‹’‘”””“•–”™›—˜—ššžŸŸž¡¡¤¤¦§ª©©¨««®¯´¶º½½¼¿ÁÁÀÂÄÆËÎÍÍÐÐÐÑÐÓÓÕÔÔÓØÕÖ××××ÚÙÚع}cQRPK<>IMDCPPOQYX\XU_adbhmosutpt~{‚~„‡ˆŒ‰“–š›œšŸ˜‘Ž„€|€€ƒˆ’›®ÀËÒÕÛÞÜÙÓÏÈ¿²¦Ž‚yumddYYVLKWP\]_b_]VJHGIMURcjjhd]_^db]\_[V[^gjhi`^]\R\OMD<6;##%%"""%).;,&-)1821&&+66.*21''1)*(%(,..2=GIKNU[eusuxwqusus|vtyq\I0+9JU[erƒ†‚†ˆ‰†‡†‹ˆ‘ŽŽ’”‰ŠŠŒ‹‹ŽŒ‰ŠŒˆ‡‹……‡‹‡ˆŠŠ‹Œ‰‹“Š”“‘“š•’–š˜–¡šž›ž  ¡¢¢§§©¨¨¨«¬°¯±³¹¾»·¼¾ÀÀÃÃÆÊÊÍÏÌÐÏÐÎÒÒÓ×ÓÔÓÖÓÖØØÙÙÛÚÚÎVDMSRDYaMFJFEDDGKRNQOTX]UY\]^`_cchknmnos{ƒ~‡‰–œ¤¢š’’€†„…„˜¢¼ÊÑÕÙÝÝÛ×Ðɽ°Ÿˆ{qj^VZSRPEMPUWZ`^]SPEDMUWdairf`^]Z_\]`_WZ``adhjc`aa^OJJ<6859"" !#%1)5CcŒ›£¦¬±¯°­¨ž†v]:5:HTk|…Ž›œ£©ª¬«¯«¯±²±±­±²³®¯­§¤Ÿ–‘‹}{sh]JL\^D%')',=B312/-./,8/.,4@L772-BE>3+16<,WV_mx†„†€ƒŠŠƒ…‚†‰ˆ’ˆ‹ŽŽ’ŽŠ‹Š‘Œˆ‡‰Œ‰‡†ŒˆŠŒ‡Š„‰„‡‰Œ‡ŒŠŒŽŒŽ‹“’’“—‘•–—š˜››œžž ¢¤¤©¬¨¨®«®­­°µ»»»¹½¿¿ÁÃÅÇÇÊÊÌÍÏÐÎÐÐÓÒÔÓÔÕÕÕÖÖØØÙÛÚÚÕ¥^IPSWGX_SIQOQMLOHPIHLQPUSSRQNXTX\[b_eccenmzz…ˆ‹‘”žŸœ—‘Ž‘••‹”¥¼ÉÒÙÚÛÜ×ÓÍù¦™Šwj^\UTQIJFLRYbb_^ZSGHDPY`fbhle\]^\a^][[U^_ebied_[d]WJJF:715< ##$&"%%5Dmˆ› ¦¬°²®®©ž‘ƒw`<4;')),,*/++-/39HG4,1/CD9061/3AJ=@G669846-..+0*78910%10Ft.!$0_t[O]jƒov¬pUO80/ALCZV_[Q]a—u,)43:776473-*)%(0@/((+.--+-+-*1(::9>GSOR[drpwrx{{rvuxuxtr\9,,/DXcet}…‡ˆƒ„‰‰‡„…Šˆ‡ˆŠŽŠŠ‹‹‰‰Š‘Ž‡‹Š‰’‰‡†Š‹‹…††‰‡‡ˆ‡…‹‘Ž‘‘’“‘•“’˜•™•›˜šž¢œŸ  ¥¥§¨§ªª©«ª¬²¶·¹¶½½¾¼ÅÄÅÈÊÈÈËÌÎÎÏÑÑÑÒÓÓÔÖÕÕÖ×ØØÚØÙÛ×·aFQSZSX_RRPSQNQRJRSLJIJELHHNKMPQQSVM^^Z`cllp|€†”˜š›™Ž•¢Ÿ›™”•’š­¿ÊÓØÝÝÛÖÒʾ²›‚xja_TOKHDJPSU^`YWVPNKJPT]chjfcc`^Y_`]X[Z[g[fini^fbaZVNDJA:,44''%%!!'.EoŠ–Ÿ©«¯¯°®©Ÿ’Š}lC;@FWgx…”¢¦©«­­¬±«®´¬°³µ³´¯­¦¡ š‡q_p`D[Z`8&##+36.'&/-+'-,-.-@DG@3+..=FA/0124?C@CG?6=6A;**(&..11543/91BU%"&CeaISc€cŽ«˜jpW+17WgYm‚sa?JNMW^jqvyxx{utszvwuqcB.)%1D^ijw‚„…‡…†††„†‹ˆ„‹‰‹’‰Š‹Š“Œ‰ˆ‹ŠŒŽŽ‰‰‘‹‰‰Š††‡…‚„‰‡„ˆŠŒŒˆ‹‘’‰Œ‘‘’‘”•‘™———–˜žž¢ž ¢¤¤¥ª©¨ª§«¨­°´´¹µº»¾½ÁÂÅÆÊÊÊÉÌÎÏÏÏÐÒÓÕÓÓÓÕÖÕÖ×ØÛØÚÚØÅyMJTVP`_VY^XSVQSMWKNCH@JGJA?DFJGLFKGPOJIRWaetw}ˆ‹Œ–“š ©¤¡š—•š£¶ÆÎÔÛÝÜÚÔÏŹ¦™Œ}oaYPKF:>=FIOTX\YSVNILKQ\aclm]U][]`]^d]VZX[aeghdW^b]\PPO?6:234''&"!!! (4Gg•Ÿ§«¯¯²®¨¢šŽ{kD4=JRju†–¤¤ª¬«¬°±¯²±®°²³´´®°¨£œš“~^Qp‚dRY\^9%$)1;4)-1/-.(,*-/HHH>60/44LJ9..2328E@;FB:7EB<4))%5342397450,2%%%'-NV]O_t‚q_¥Œ‡xC?KUgb[„i@64'&7/*+.476GA3-**38-/)+)&)&%(,*,+45<:CUUP\eipvvtwvuvyxuwiN6$'-DRijq~ƒ…ˆˆ†‡††„‡‰‡ŠŠ‰Ž‹‹ŒŽŒŽŒŒŒ‘Ž‘ŽŒŒ‰ŠˆŒŠ‰Œ†‹‡†…„…Š‡††‰ŒŽŒŽ‘“˜“”——–•™—šœšž š¡Ÿ££¤¦¥©§©©®®²²¹¸¹º¿¿ÀÂÆÄÆÈÈËÌÎÏÍÏÐÑÐÒÓÒÔÓÔÔÔÖØÛ×ÙÚÙÍŽJFMYRc\^_b][TQXP^PPMMGJB;>BD?D=??C?AB>AARVX\jvy{‡Œ’ª®¯©¦š”’Ÿ«»ÈÑÕÚÙÙÙÓÊÀ°’„ri]SNJ@:=AEB=293()/6<*84752/$#*",3-);afZfz~q|‘hKq€WiVf}s\H0&#/*,.063;3+.(--10))(&%-)+'),)(.36;:FWXV`gptvqrtxuvvywulO5'$.3MVfmx‚‚‡€ˆ‰‰ˆ†Š…‡ˆŠŠŒ‰Š‹ŒŒŒ‰ŽŽ’Œ’‰ˆŒ‹‹‹Š‹‹ŽˆŠ‡‡‰‰†‰‰…ŒŠŽ‹ŠŠ’’‘’’•’––’——˜›™›¡šŸ¢¢¢¤¥§¨¥ª©±¯±³··½º»»¿ÁÁÇÈÇÄÈÊÑÏÏÍÐÑÐÐÔÒÔÕÔÕÕÕ×ÙÙ×ÚÚÓ«WENYYd\`a^`W\]`VVRWKULMDKD?B?:=3:8623/53;AJOZehotwˆš­¸º¹µ® ’—£±¿ÉÒÓØÙÙÔÏɽ®‹{j^SOF?=8:@WPPYXKIEIQLT\Wllohe`[]^Y[W[`WZ[X]dfejeab\ZXOD??98645**)()%+,)'0Gd†–¢¨¬²´µ®ª£ž‘„nG<8J[bz„š £¥©¨¯±±¯®°®¬¯³³²´³¯¬¦ŸœŽdA_uu]RSQU7',.77('%'-+%*+0:MS41;6/*/0HE51)0596;5))2>+,9==99+(.5;8,#+Glj^nˆŒzr†”‹isŠ_e^OMcp]I.(.'+./35<2,-,)+50-)&&)')'&(*',+2485175)+322178@LQbbfu‘­¼½ÁÀº¯¦–ž¥²ÂÌÒÕÚÙØÔͶ§“„o]YNK@<748EPMPURNMOMT\^ahjlijb\Z[WUZUUX[^]Zbefffcaa\\PK<9<7454311/.-,52663Nh†™Ÿ¦«±µ³¯­§¢™ŒlK>;NXf|ˆ–ŸŸ§©«¬¯¯­®®­®°´´´´°°¬¦¡˜ŒeMZx~[FBFE0()4=1)'&+/,&+.8JF>8.4=5/./@@5-++/COE?2:>698?73=94123-'(.7>=4*,18..$(+Lcmlp†™’wdu‘ˆjnqPX_9BnpVC)'('0/6:1.*7/,2--(**-.*("(*,*)+28ADPUZ^ikpqqvnvvswxrphG2+$+6N[er{ƒ„‚ƒ†‡‡„‡‡‰‡Š‹‹‰ŠŽ‹Œ‹‰ˆ‹Ž‰‹‘ŽŠŽŽŒˆ‹Ž†‹Œ‰‡‰‡‡„‡‹Š‰‹‰‡‹‹ŒŒ“‘“™˜–™˜™™›™š›ž¡œ¢Ÿ¤£¡£¨««­±°®³·¶¹¹¼»¼ÃÃÆÄÇÆËÊÌÌÍÎÐÐÐÒÑÓÓÕÓÔÕ×Ø×ÙØØ×ˈMPT]`_dfdefi_Yb[ZZXYSPNLFC??<;938.-..0,,,15:A[Wo‡¥¶ÂÃÁÀ¼³§Ÿ ¦¸ÃÍÒÕ×ØÕÓËÀ° ‹yjWMKD:99>=HOLSQLOJHMZ_bhdpkphe^[[XUYUSY[]Zadbiibcb`XTLI;:<8220200/086<;697Kl€“¢©­³´µ´¯«§žˆlN=10,(-&2==8<.171+(&,,B[jgn˜¦’yer‰„dY`LaYJc]MK,(&),571*(+,/3=:::+-+1'%#*))''.;CJFSYahhqnxrsuvxxv{ukM6+'(3BScm}~„‚€„‹‹‡‡†…Š‰‰ˆ‹‡Œ‹‰‰‹Š‰‰‰ŽŠŽ‘Œ“Œ‹‘Ž‹Š‹Š…Š…ŽŽ†…ˆ‡‰ŠŒˆ†…ŠŒŒ‹‘““˜•“”—™œ›œ™›œ›Ÿ  ž¢¤§¤¦¨©°´¯®³³³¶¶¸»¿ÁÄÄÃÇÇÌÌÌËÏÍÎÏÐÏÒÔÕÓÔÔÖ×ÙÙØØØØÒ¥YNV[``dmihefdfea\^X\WQOLHHII?;:4/30&'+*#&+546B_z˜¯ÀÆÈź´©¡ ¨¼ÇÐÒÓÙÔÔÏƺ«•…iYQFIA99;IJINQWOOMIDKWYZ^dllfe]_XU[]QR\TUXY`eclehc]^TSJG9>=74325..9FCFDBAADSgy¡§¯²µ¶¶²°¬šƒhT=@JZhw…‘–ž¥«ª­±®±¬®©°³±¶¸²³°«¦£™€\^W‘hF@<1=),27%,(+'319>7.+131/7>-(+,07=7+)6FCG8>>8:87:8>8BELLSSSQF@CIRYZfdpkkfa\XVVRSPZNP_Y`ajlgffd\\WQE::A659338::MPMLKIDGFUfzŽš«±±¶··´²«š†sYD>5D>44;8<@143/+)'(3+%(-;I90&6O9/./01&0Rd€‹“’„„qPPdr{lŠŒhP-(!&176*$(-+-*"()-*-($'+&0),/3;JJFPV`dilssspwvvrvwoa>/*)*5L_cw‚…€…‡‹‡‡„‰‰‰Š‹Šˆˆ‡ŠŒŒ‰‹Š‘ŠˆŽ•‘“‹‹Œ‰Ž‹ŒŒŽŠˆŒˆ‡Š‹ˆ†ˆŒ“Œ‡‹‹‹‹ŽŠˆ‹Ž‘’‘’“••š˜˜žŸšœž¢£§©¨¬°³°­°´¸¹»¼¾ÀÀÃÅÆÆÄÈÉÍÌÌÐÏÑÑÏÑÓÒÔÒÕÓÕÖØÖÙ×ØÖÉSUY]`eijglpgfgf_cbY`]XXTSJRH@9=9.10*3$$%0&#*Cs”´ÃÉÌÍÒƸ¡˜”¢¶ÅÌÒÕ××ÓÐǾª”z\VKH5;;C:HELORNOJHBEJV\`npnib^ZXTOUSVTXPRW[cejomrgc_[UIEB>H:5445=IISVPTOTNMRXewˆ˜§¬²·¸»µ°«šˆybICRThu“ Ÿ¤«­±¯±±¯®¬¯±²¹¶·°­«¦‘knb^…‹rHD28.%446,-6-GNH>/)).*.-3?<6..643>>47>D;65@J86M7C>111./)/)42+'%+3;8-6[E4;300$#3Mhƒv‘‚†wg[_ye>\wl+)++38,.3)1).(,(*)/%%$**1((,-;JPMKYXehquqvupt|vyttcJ4+,(,@Sbpyƒ‚~…ˆ†ˆˆƒ……‰‰‹ŽŠ‰ŠŒŠ‹ŠŠŒ‹Ž‹“‹Ž”Œ‘‰ŠŠŠ‡‰†Šˆ‡‹ŽˆŒˆˆŠ‹ŠŒŒŒ’“’‘‘‘”–›œœ›šœ›ž£¢¦¤¦¨¯¬­¬±´¶²¸·»¾ÂÂÄÃÄÄÉÈËÉÎÎÎÏÐÒÓÐÐÔÓÔÕÖ×ÖÕØÙÛ×Ì–WUWZ_dbglhhkmhndde`cbZUVVOOOFI>760)-/,,%" #,Es™ºÅÌÍÎÎųš—›­½ÇÏÑÔÖÓÑÌÁµœ†aJJA?52>YY\XWXPRWV\`pyˆ™¦ª³¸·¹·­©™‹wcJBIZhs‡‹—Ÿ¢¨ª®³­®°±±¯²­·´¼´®¬®§ŸŒnq\l‡„j]K0-,%222066;AO670214(,/623;47--3<5/;EF:0:CG7768<9/7,,3--,5/2-4*4.8+684BFA14=CM8:C:@IDJJLBCDFBKSXcejkmfa\\UURRKMQSMVWX[bitprnhfb_XQLHOGD==98:BXXY_\[Y[da[hwzˆ™¥ª²´··³®«¤”pTKWaerƒŽ–œŸ¥§¬°°³²°°­±¯´¸¹·³®©¦ ‡qpap||b\[9,+'&5+1=1.340,,33/0100,2303013021D@8*.=IP;?H<=@B*+./)*+(1896,'':ND4F=7;4/,55C@CE\tŒ—’†dGXgwJ1,36,1%/*),**+).(#&'"#(0./06>LLMJQ\ggurso~uuvyvbJ*'#),MNYbty€~~€„†„‡ƒ‰†ˆ‰‰ŒŠŠŽ‹ŠŒ‡Šˆ‹‹‡Œ‹‘ŽŽŒŽŽ‘ŽŒŠ‹ˆ‹ŠŠˆ†ˆ…‰‰‰ˆŒŽŒˆŠ‡‹ŽŽ‹•’•–––—–œ›š˜œ ŸŸ¡¤¦¨§©§§¨­®®±¶º»½½ÂÀÄÈÆÄÈËËÌÌÐÐÎÍÎÒÐÔÒÔÔÕÔÔÖ××Ø×ÕÇ‹MPTYb`hklilmklihbb^i]VY\ZUWPIRJBA?:/.(-*)+-Ip•®¾ÄÈÌÈÀ³«­­ºÃÇÉËÌÊ¿·¬•uTF95554:=B?DOSC@EBELOSaagmmnjaXPPSMOKONNOXX_agiptuda^_YTPSOTDB>8;;DCTTXYZUZ[c`dkzƒœ¥ª°¶¶·µ´®¥•ƒsYEQbeqŒ–š£¨«®±²±±³²°¯±µ·¹¶³®ª§Ÿ…fmaq{u[VR=-+*242.+*-0156,-.0+*763B?0413*,)-:11.8>BM;3A71<<;9++/-1*,5A?71#/EIduŽ—€]bvWKA2/24/++)+'-,(,01(###"$*,5-.3:DILPQRjijty}ruqxtte>+%$",=KVeo{}}€‚„„ƒ…ˆ††‰†„‹‹ŠŠ‹ˆŒ‰ŠˆŽŒ‰’‡ŒŽŽŽŒ“Ž‘ŠŠŽ‹‰ŠŠˆˆˆ…‹‹Š‰‹Ž‹Œ‡ŒŠŠ’“‘‘•—š–˜™–˜œœžž¡¢¡Ÿ¤£¤£§¦©«¯¯³¸¶¶¼»¿ÁÂÁÄÅÇÊÈÊÊÎÏÎÑÎÏÑÑÔÔÕ×ÔÔÒÕ×ÖØ×Ï¢aJPY^_fjfmjjllpjkhbbYdZ_YUNPRPIG>E<54-,5188Fk¦¸ÂÇÉÉÄ»»¸¹ºÄËÇÇÅõ¤–wYA;774067;DEGNNEA@FMISX`jikib]XRMGLIINJJNSV]bbdjrpsib_]TSSVVQL>=;8;DAUU[][YZbaflq{ƒœ¤¬­²¶··³®¤”ˆw]FQ`gs€‹–œ£¦ª¬±°¯±µ®²°²³¹¸¶²±­ª¡‡cmet{uZXQ47,17,),1.-30/,-0(2+-445@<4102/0/*/*.2:GER:0:72=AGA-)/00$&59?F:$-09?IJ,610?CV9;@IT;:HrLh†‹zwz>3/*001.23).65)*&2)''#!&'015-6."#!+4OWekt~€~‚‚€ƒ„ˆ††Œ†‡‰Š‹‹†‰Ž‹Œ‰‹ŒŠ‹‹ŠˆˆŒ‹”Œ‹‰‹Œ’‹ˆŠŒŽŽŠŒ‰†‹‡ˆ…ŠŒ‰‹‘ŒŒ‹Š‰ŽŽ‘‘Ž’•˜—”“–˜˜œšžŸŸ¡Ÿ¥£¦Ÿ¢§¦­¯±­³º¶¸¸¹½ÁÀ¿ÃÅÇÊÈÌËÎÍÏÑÎÑÑÐÐÔÔÔÕÑÏÒÕÙÚ×ÓµjMRW__hjminmkkhdgaia^c^\^WRTWUMFGB>:733,/78Ic… ´ÄÈËÈÆÅ¿¾¾ÁÆ¿Á»®¤zYE=6324356AFLBK@?CDMNSZ\bjjl^cfSRKJKOQQLLQPUYbjkqrsgfhe[USPRSHF::>?>B?VV]YVbbbdlmu‚‰‹Ÿ¦ª¯³´·¶³¯©˜‰w^GY\ft‚Š“š¦©¨¬°¯¯±³²°µ±··¸´²±¬§¥Š[Yo{wp[XI,,,,8/,*/.0+29/-1-0,1517@:.+92760.*+)1;;>C959/-EGQS50260+$.B;TJ7)--7GW33;/5Fg[7/ETYFLwFHdw‰Ž‚k3*+.04-+(0*/6+)*/+,($""(+,246BOKGEU^chgnvyvstuqX:+!$+1=L[bgsx|}{ƒ„…ƒƒˆˆ‡‹ˆˆ‹†Œ‹ˆ‰‹‹ƒ‹Š‰ŠŠ‹‰ŒŽ“‘ŒŠ’•ŠŽŒŽŒŽŠŠ‰Š„ŠŠŽˆ‹‹Œ‹‹Š’‘’–’”˜–˜œ››š £ ¦¦¦¢¢¤§©¯´®°³³¶¶¸¿¾¾ÃÁÃÆÇÉÊËÎÏÎÎÎÑÓÒÓÕÓÒÕÓÐÕÖ×ØÙÓljNPUYX\dfjnpqllhhfea`a_[_WUVWPMLKKCBB>4:69>HZ€Ÿ·ÂÇÊÉÈÉÇÀ½»¾´°© ŽviOD?236949?EDKE?AAGFVTb_afgfea]^VSKEOJJNRTQTY_hgkqtlh`^[_URQLODD=;]L,:/.?\mK08Ah]g~PBUex•šs?132/.--2//21.)'++)&***1,,/8:HJEMQ]fddnqyywoqfN*)!&,1AKQdeqx}}z|~}„‚‚ˆ„‡„‚ˆŽ‰ŠŠŒŒŠˆ‰ŠŒ…Š‹ŠŠŒ‰‹Š‘‘’ŒŠŒŒŽŽŽ’ŒŽŒ‰ŠŠ‹ˆŠŠŠ‰‹ŒŠŠ““‘’’“”•—˜—˜œž £Ÿ¤§ž¡¤¥©¬¯­®°±³¶¹»¾¿ÀÀÂÄÅÈÈÊËÍÍÎÏÑÐÓÔÒÑÖÕÔÑÓØÖ×××Íž`PTTZa]fehmkohgifj]]ad]a^Y`TSQKGTIHFBACKIKO_žµÃÉÎÍÍÏÉÆ÷µ¯§¡˜Št`UK;614496@?BJK=AAAALSW^amihif[XZNPNJRKLKQNQXealprsoge`]]bVYQICD?4?=CIFDIIV\bbkklsxz„†š¨¯®²µ³°«¬¢™‰{eJR_gsŠ’›Ÿ¦¤­®®°®²²²¶¶¶¹¸³³°­§ ”ZLz}wg\L3(('71104.,-03'3-;:4*+8/5@70--44-)./2QPBNK<,,8=KVWU=)(+66+$/SGXgP=799>P_\fqrtpts‹˜¦ª«³°°¯¯«¢–ŠulPQ_hr€Š’£¥®°­®­¯°°²³²¶¶·¶°°ª¥Ÿ•kKi~vugQ++,-41*/=:/,?5,-9@61)52058<611/&,-0*6DZS<_^<2/?:ERU\S:*-*-.+*C[NGSG?:F2\a1.DE93QOLEQ\„›ŒkLX:$2LiF+4/(4.*,54-()'%*&"$#*'*/7EJLPU[ddnedgTN9+# '+:IT^eejoruuz~z‚„ƒ„‚ƒ…„Š‡Š…‹‰Œ‰‰Š‡Œ‰Œ’‹Š‹Š‹ŒŒŽ“““Œ“Ž‹‰‡Ž‹‰‹ŽŠŒ‡‹‰‡ŠŒŒŒ’“™’‘“••™—œ™™¡£žŸ¢  ¦¦«ª¥¨¦ª¯¯³²´¹¹»½¾ÀÃÅÄÆÉÉÉÍÌËÌÑÒÒÒÓÔÔÔÔÔÖÙ×Ö×ÕÉŽQTOZZ__fgbljeefjhcadbde]c`aXWRWUPVTZXZURR]u¡µÃÎÓÕÒÑÉÀ¯ ‚p\TLIC>;7;:6IECJLK;DBDLVVWecoihgd][SOJGGAJLOLNW]]^lossqkegh]V\`WJSG9:@=GMLE@877PX]epmrqsouw‹’¡§¨¬±°­®¨£—„viZ[]imŠ“˜ž©©­¬¬¯°±¯´°´¶¶¹³²¯­¨ ˜mFaxkkgK,'%+1&*-3:18>?*(9B99.108E9G?5+&',+4)2ERD@yT;3,@>Yb\YUI-'/(0+,AaX@0AD34,EvQ+:AM1/[RIAXj•“„H\H%5GX[3'(#%&,,13.&'&$/'$%%(),9?PQTR^ad_^ZL<,/-%-/-?HTaejhmsuwvx}{|z~‡†‰„„‡‚Š…†ˆ†ˆ†ˆŒ‡‘‹‹Œ‹‰ŠŒŒŽŽ””’“Œ‘•’ŒŠŒ‡Ž‹ŠŒ‘ˆˆŽŽ‘’“’“’••šš˜›žŸ  ¢¡¤§§¥¦©©«±¯¬³µ·¹º¾¾»ÁÀÄÅÆÊÈÎÌÍÍÐÑÑÒÓÓÔÓÓÕÔÙÕ×ØÔΠYMRUa_bddedgbghmnag___b\bbaZYXUTX\]V^\X[XZwŒ ³ÄÍÒÒÐʵ¤Ž}iUPD@?I?NFIFB@LFPZ\dhhlhe``YbSIGEGDDCRPT[\\hmpqrmjdhfg^\]PHHA5@C?EHEK?966LT]hooqrkinw„ŠŸ¤¬®®±®®ª£“†vcTX`gmŽ“œ¡¦©­¬²°±°²±³³¶¶¶³³°­¨¥šoCVulj`>,&%)0).,0=.-?:/2:C9.+3.0*ELGC30(-3/-5OQB<a?0,7'*3.6-/\^G*,81./Kzw>1>CB8YNUCG`‹–‚GNG(9IBS9')&!(-00-(%+$$-/&,(*,6FHOPWR\YQC:8I*&-'#1;CT]_dcilpvvwvx}||~z„ƒƒ‚ƒ‡ˆˆ†‡‰†‡…Š„…‡ˆ‘Š‹Žˆ‹Ž‰‘Ž”’•’“–‘’’ŽŽ’ŽŽ‡‹Š‹ŠŒ‡Œ‹ŠŒŠ‡‹‰’‘•”•‘–••˜—™œšœžŸŸŸ¢¦©ª§­­©°¯­²µ¹´ºº¼¿ÃÁÃÅÇÈÇÈÎÍÎÏÓÐÓÕÕÖÕÓÓÖØÖÖ×ÕѳgINSX``]agbdebgdggeb^ic`cfddUWWW[Wb[]`^[WZqˆ±ÂÈÍÌÈÁ¹©—zaZNMJL?AD:;AIILSMINJEIEXTagkkmphhe[XXIJG?BI>DLSV\]_kqqpjpmfeb`\\RKH?79>JEEFGD:5//BRU]fhdffdfu~˜¡¥­°³³²¬¥˜‡xfYWajq}‰Ž™ž£ª­¯°±²²³´´´µ··²¯¯ª¤£šuOTnglZ3+*(+.801=41265'3;F69+*0/33LGF5.,/22*;TU@>~_:0.9AVXi_P_L,(-73,)FmVQ3EA0,*%06/1)$)+-(/32+*149BCHPQE:720,2&%,-6:IST[bfbhmquzz}w{||~‚„ƒ„ƒ€ˆˆ‰††ƒ…Œ‰Œˆ…‰Š‹‘ŠŒŒŽ†‡ŠŠ‰‘ŽŽŽŽ‘““‘““‘’ŽŒŒŒ‹ŠŠ‹ŠŒ‡ŒŒ‹‹Œ‰‹’‹Œ–‘“•“–˜››˜™œŸ ¡Ÿ¤¥§¨«©¬®­®®±´µ·¸º¾À¿ÁÃÆÇÇÇÌÏÌÏÎÏÐÑÓÓÓÒÑÒÔÖ××ÖÕÕÀ†RNQSZc`eedealfgigcccgfbfd`b\^a_babgd\]Z]bn‚™ª¹ÄÆŸ©–aWRGPULHFE>FLIEKLKGJBKLPV\blrmosg__QNKNLF?>@IDCCKF@>9**DPQYbhhlmnkorvy}yz~y|||{}€|~„‚€ƒ…†‰‰„‡‡Š†…Šˆ‹ˆ‹ŠŽ‡Š‡…Š‘‹‹ŽŽŽ“’‘‘““”’˜ŒŒŽ‘ŠŽˆ‹Š‡‹‹ŽŒ‹ŒŽŽ‘–’””™•šž›œœžž¡Ÿ£¡¦©§«±°±¯±´³³ºº¼¹¿Â¿ÀÅÆÇËÉËÊÐÏÓÍÎÔÔÓÓÔÓÕØÔÖÖÒѬ`MQTXZZ`_b^d`jflhicggidebd^^bagdljiklididjs‚˜££¤ ›Œp^YOSGRMLDOHMKLKHQQNIHEIRTYbghprrbbZWTQGIMF?@@CFOS^ekilvvqsvphege[VPEA@@C;DE=BD=18.,,6B?INU]VdZio|‚” «¬°¯±¯«¦ž~taY^fn…’—›£§«¯±°°´µ´´´µ·¸¹´°¯©¦ŸˆeDHWL7*133(&+...31-4:87E?H3/3116/Od5)&335,97DD4IlL=(%2NdTiwet_I7;B60.7igA&E!,A95uŠM2W52:#,D5"!,.-+%&3403-+1,,,+$++)(()'59:ADLULU]_Yanorvy{~€ƒ~‚}~‚„€€|‚‚…„‡†ˆ„ƒ…Ž‡…‰…†ŠŽˆŒ‰ŒŠ‡Ž‰ŒŠŠŒŒ‰ˆ’Ž“ŒŽ’‘’’Ž”‰ŒŽŒŒ‡ŠŠŒ‹Š‘ŒŽ‹ŒŽ‹ŽŽ’Ž”–”•–”›™ žŸŸ¢¤¤¤§¨«¯°±°±²¶µ·¹¹¹¿¿¿ÂÄÆÇÊÇÌÌËÎÐÑÓÓÔÓÔÒÖÔ×Ö×ÕÔѺpHOSXTY[[c`a`cfmjnfjkkjieeehbjhhklpnnlejheo‰™”Ž…wgYTTOGJJKOKMPTQUOKMJGGNPNR`^ekiood[ZWFKEEDEA<@AHN_fgrkprtxvprgdbh[SHHDAB>;?@B@C891/,,25=6ZoJ6/(57]ajsvclfK4,/*4C-ao`/#-"(M4@„y@LL:=IU€myzb|ˆoaL52J')*(*(-()+1-3:)(+2(%$&'*847?KLMRUUY]\decioquvxvy||y{|€‚€€~€{‚€„‚„„†ƒ~†Šˆ„Žˆ‹ŠŒˆ‹††…‰Œ‹‹Ž‰ŠŽŽŒŽ•’ŒŽ“’‘’•‘”“‘ŽŽŽŒŽŒŠ‰Ž‰‘ŽŽŒ‘‹Ž“‘“š•™™—™žŸž ž¡ž¡£¤©§¨¨­°±±±³¹¶º¹º»¾½¿ÂÂÆÅÅÈËËÍÏÏÐÕÒÓÕÒÒÕÖÖÕ×ØØÖĆKLQRSUYb`bfdddjgiimqlhecafeflnkttorlnijnkos{}€~xoeWUUPNPROMUTSVZYOSPQMAFISXadnfgjge^ZPOJBCAI9<;BEQSchempqwrrrqmcef`ZSIIG:CA=7:<>7680,222:>9CSYRXYYis|›¤§­®®¬«¤yt\blrw†™¤­¯¬¯²µ²µ±³´·¶ºº¶­¦¥¤¡•n>?ML-#-7).%+2-33,/1-98<>=4@./C62Rj>',87.34CEI;`kB4%+/3]^inuldjL6,'!1[ASo}J #,=O4Krf8AN44O€vj‚dIe}nlf9(:)*-2.0**,,)*#&+%)%&..20;>=>GQRT[\WW^chllwruw{{w{yzyz|~~€{€‚ƒ‚~}…„„„†‡……ˆˆŠ‹ˆˆˆ‡‡‹‡ˆ‹‹ŒŽ‘ŽŠ‹’Ž’““”‘‘•”’Ž”“‹Ž‘‘Ž‰ŒŒ‘‹‹‹“”–•——”˜–™œžžŸŸœ ¤©¤¤¥¥«¬¯±°¶¸µ¹º¾º¾¼ÀÀÄÂÅÆÈÉÉÌÍËÎÏÑÔÔÔÓÒÔÔÔÖÕ×ÕÍžYFVQVU^\Ybbafdhjmgmknpiihiecqoqtxpppnlqrnmpoqvqmhc]ZSTXTQUSU^[VUPUUOMBJFNTW]dbhkq[eRPIMGFBF=B=@@LQ\ijinmoqvztvqjli\XNHDEB>>?9=A<3542///855:BHOPWTXct}›¡¤­®¯¬©¤™Œwma`iu{…‹”Ÿ¦©ª¯±¯²´±µ´³´´·¶³­§©¡¡”m=9FQ.+/4*3-7JF0+,)826?ED:8=78@>2JwO,&/2*20<OF2290-*-98546)+.18@CHJ8@48@<+>l\6%8-(0/9>T\^S7.,+'5I]pZJ||wh2$.$2X[_uM)';9XJ9wy:1UM:exbz}b8?opaV56-,+,-1))(% )%#,+599AEHKMTWXW^`edbilnsswtuwuwzx{z}|~~}}€ƒ…ƒ€|‚€~|‚}„‰‡††‰†…‡†‰†………ˆ‰ˆŽŠ‹ŒŽŽŠŒ‹ŽŒŒ“’‘“‘‰‘”“Œ’–’ŽŒ‹ŒŽŠŽŒ‹“Œ“•‘•–‘’™™›››˜žŸ ¡¤¦¨«§©°¯®°±¶³¸»¼½½¼¾¾ÃÃÆÈÅÇËÌÌÍÏÑÔÒÓÒÒÔÓ×Õ×ÔÓÔ¼|NNKSVQT\\abbdfljmhrmnojhnlsrustsqtorsswplhmffgfb_`[Z[Ya`a_fa`[VUXNNMQPPVY^ffffbfTO[NNUKJI@BA>=OT\fhlmuvwy|qpjhgdbSREJFA;88=>A<:787:/:::7:9dqZ=k~{vN+&(#EmimŠe9"&JGCDR\bfztou{wunkjhd`]TEGB>=><;6>;682393322B:???=CLMOLZmvŒœ¦®³º¾»º³©ŸŠ†zm`kn~„— ¥«®°´²±´³³±¸¹»¹´´±«¦¡›tYF;EG;JD0/*'26)-6/,6949C>84::===23@dP11-(-).=Dea7/(.*&1Cdoj=Jv{h5!''$2dmd‘mD-# )=bUtvG"0BHfqjvyshTLCHF)'$%+%6.)('.1;,..589:CMOVU[bakqppnoooopvux{{{|‚|}~‚‚|€}}€€‚‰‡……‡‡‹’‡ˆŒˆŠˆ†Š‰ˆŠŽŒŒŒ‹‹‹Ž‘ŒŒ‘•’’–“’“”‘‘Ž•‘™’ŒŒ‘“‹Ž’‘Ž’•‘““““˜•”–˜™š›šžŸ££¦¢¦©¥©©­¬±²°±±¶¹º¼»¼¿ÂÄÄÂÅÇÉËÉÏÏÓÒÑÑÑÑÐÓÖÔÕ×ÔÌœVEIQRY[\\bcdfhhpnokjmsouqssuuyy{xtqstqqumjjdkgegdba`^gjljjgca^WVRMQSTVU^acdaUOVORKDDKKMDQJHLBNTYbiqsqvzyyukjom`]SMEH;:9<6@86241835--559:C@;;@>CGJSfsŒª·¼ÂÃÀÁ¼¶«–‡uhaju|†™£©¬°²³²³º´´¸¹¶¸º³´¯¥–tMF9-@I?=46*1054,30.+;80;B785564@E;05Z`7/+./%(AInd3/$%)))=`pq@7iˆ‚zO0*).0Dhd†vPG);WY`f2$+>JeirpkTOD@5I-)-0$-/.*-20+/55/36@DKRY\]d_koqputrrxsuxwyz|{|{€~{€€„~€~‚ƒ}€‚Ž„ƒ…‹‰…†Šˆ‚ƒ‡‹†‰ˆ†‹ˆŒ…‰ˆŒŒŽ‘Œ‹ŽŒ‹ŒŽ’’”“‘“’‘“Œ””––Ž“‹”“Ž‘•“’“š•“’•˜™˜•˜™œ™œŸ¡£¢£¦¤¦©­©©°³²´´³´·»¹º»¿ÂÅÃÃÆÇËËËÎÏÒÓÒÑÑÎÐÓÔÔÓÔÒή`DCIQRXX^cbdhhikkpppqnnvtzwwrr{xsuorqwloolfjhhbhda`ebjhoqlkk`a[VSKKPQV]^]ce]SNKOGFIEKGJIIHAJNQYafnwss{swwpjggc]YSJ@D8<6<;695146/+0/6338::94=A::ECGfuŒ¢±ÁÃÈÈÈÅĸ£}igou‡‘šŸ¤¨°¯±²´°¶´´»¶¹¼¹µ²«ž~ZC>15:=7-;;0,7>:,-/,/935@C468947=C=20MeT1(,05(=V}n;C&41-)9gjwB0SŠ‚‚e:72('QrcwwFL?<6::9A85888275311485417D=@A?H_xŒªºÅÈÎËÉÉÆƼ°›hczqz…šŸ¥¨°°±²²³·±´¶º¸¸¸µ°¥˜wgQJ96??7131/'*:5-(7-,427DA:228==;?=/+@Vi8*)+),=k‰nC1#//03FumxD3@vŒ…}T>6),GUdd‚NHO0 #1473728A@008>=3171+41..+/-6/6<<4;8489HA>249FhL%%*-0FscB1)135)>tg}J>@eŽŠ…l=1*$%8QgtY,MA$!$0UPAl…e8$):VCNh{n`M*5S1%,+($)0027068=JNXW_]fgfkorqtuswtusssuyx|}x}€}}}y}{|}‚|‚‚‡†‚€ƒ‚ƒ‚‚……‰…„‡Š‰‹Š†‰ˆ‡‡‹Š‡ˆŒˆŒˆ‰‹‹Ž‘“‘Š’’–‘•’“–“‘““˜“‘‘•““’“–““’Ž•’“—–“‘”•”˜—–•–™˜›£›Ÿž¢¤££¥§®©¨«¯²²µµ²²¶¸¼¹¹º¾ÃÅÈÇÅÇÌÈÌÌÍÎÎÎÑÑÑÏÓÐÖÕÕÒÊ¡TLLPPUWU[ZUUZenmjfliswxz{v{zvttwtvosrsrtkskjkikgmnqurutqoiic]]WVW]a_`cedeVURNDCICCOAAGJFGP_Yfimuz{zzvwnklh^[ZNOFI9@4:8?:9736<897:FQ116780/46:;>=Gi|‘·ÃÅÈËÌËÉÈÇÄ·«˜shsp{„‹—Ÿ£§­¯±®¯¯¶³³´²·´´¯²¯§•€tmMD=41'1=N8):03(04*@B646;4>>@B:AM9(24Z_%&/,.Q‚ŠVE0*13.(Gsj‚@BIR„ˆuM,*'',>`lf-:8903=B>551-1>;CK\00415835:A7::IhšÀÂÅÇÊËÊÌÈǺ²¥{ers‚–œ¢§¬±¯¯³°¶²²²·µ¶³±´ª¨“{„vVG97./-9A007?1..?1RA:<68765A>3+/*1,Tup~8@VJh†’„S.)&)*1RduK+;L=(':PVBGmo:#2_HFWyi>_soc*#%#$)*,2437314799:K835=7B9?MBFGP2.+BjG74-.a‘gMK;*2/88Zus|/:WJO]•‹p?,+3'-Ueyg.-?O8*2MZFFOaW,-HN;Wv|UdnxQ1%##"%(,-3=?HNQ[\Wbbiifekkwomrxvuxrx|tvyzz{€‚€}|€}~{~ƒ‡…€„…‚…ƒ‚€„†ˆ…„ˆ‰†‰†…ƒ……‹ŽŒŠ‰Š‰Ž‹ˆ‰ŽŒ”‘‘‘”“’’’••’‘’‘’—•—•••–—”“•”‘——–“™š›š™š™”™Ÿ¡¡Ÿ¤¦¥¥§¥¥¦¦¬ª±°®­²³·¸»º¹º¾¿ÀÃÅÆÈÄÉÇÍÏÎÎÏÑÐÑÐÑÒÒÔÒÔÒÅ‹LNQEUUXUYkcff`dighpvswxxtuty~uzw~wrwusslqqurotxy}~‚wvpkia]^`]^bggbZ[USXSYVWMXUINNELMNPXbhpvz}€~y|uuhkhcWWQQ?<841/,.22483E:36:?Fh€ŸÃÃÅÇÅÈÌÊÆÅÁ½·ª‚hlu}„•¡¢¨®¯²±±°²³±µ³·³·²¬­¤‚y}e]34211+/8+)5;4)J623<;-:A6A;KWETBQA:89AKG7)3f‰YJK6.039?Pjiy%2^MRD…™^1+%/8VzcO3.HF77:\[=@?X4'5LNQo|GS_vˆvP/!'$%+*07:>HMPXV[_aeejkipusstrx}vwxxuxxv{y€€}}{|€~~…ƒƒ‚‚ƒƒ†……€€|ƒˆ…‡‰Š†Œ†‡‡‰…†‡ŠŒŠ‰‰‹Š‹‹ŒŽŽ’‘•““”’‹ŒŽ–““’‘“•™•“•™”‘™’••“’“•—”•›šš›™›™ššž¡¡ ¤£¥¢£Ÿ¢§§¨«±±¬®³±¸¹º¹·½¼¿ÁÁÄÂÇÈÉÈÉÍÍÍÍÒÐÐÓÒÒÓÓÓÔÓÌ ]DOMPQUSVY^bhbcigjqspsvzuyv{{|{tysturptvwwxsuz~€}ƒyuqjg]][\X__c]VYVWMOVOS[UNWPKRIKNXZ^httz„}‚{tomi`^XOIE@;A6,+.:6779BA:BJM`ZX^55//55168<258?`xŸÀÂÂÂÉÇÈÇƼ´®„hrtxˆ‘–Ÿ¡¨­²°¯°²µ¶±³µ´·º±ª¯˜vigVV43870)4+-+27;/*79<9B59G:?=MSHXHNF006=AP<0;…ŒM>Lnqy)*U]IGpŒsB,"0:P„d}d4232DF8M^Z@A<>(35MKQhP>P]ƒ„|_/#)*'.LN@\FKN3-65>TD4M˜‰@1E=/1D>8Qvuv*)K]JJLgz…e=)+9Mƒw{i80&#'9FJQX]dfa`**1.6.10<4,57?Ro–¿ÁÄÄÈÇÆÆÅÁ½¸³¦hmwƒ‰š ¡©ª²°´²µ³³µ´¶´·µ³¯®¢xIWZ?/8F=0%.)*.>A<((5M14@8DF7@?MG4Hwsr+"=ZJSFO]ˆwZ:7-G|‰db2&.*'2==[CRJ?CA-(4+8SnE9KOklcrY783=OQQNTXRXZdbjhinpptrtwurwz}yz}||~{~z{~|{ƒ€~~€}~‚|€€ƒ…†‚€‚‚ƒƒ…„‡†‰ŒŽ„„ƒ…Š…†ˆ†Š‹‰ˆŠ‹Œ‰ŽŽ’‘“‘‘”Ž‘ŽŠ–—’‘“’”••’š”–“•’“—–˜“’”—•–˜—’–•››Ÿššœœž¢ ¢¢¦§¨¥££¨§©©¬­¬­®´´·¶º¾½À¿ÁÂÂÃÂÈÆÇËÉËËÌÎÒÓÓÐÑÔÓÔÕÔÄŠe[_]RXY]^[UW[daeokgnmvpu{~…„‚„~|w|yyzyxx~ƒ‚ˆ†Ž†ˆ€||rqic_[ZbYWQWQLOHJKOW\^_UYYSUQUNT[^eisu|‚„|wuh_XNNF?9514--0-/4-45:FEOP\achcb++636.13:3-245Nl‘¸ÂÃÄÈÅÅÆÂÁ¿¶±Ÿwhnw‚‡ŽšŸ£¢§°­µ´²´µ²¶´¶µ¶°²®£~M^^D84G0+&+&'6=F;!&6H*.JF>U8A?IF8EHETA959IgaF† [945LC%2:9Hqqq1'/QMKCH?vŠv\:1>}“]U-$141'01EAORCAF/'643It`-)>^eIQyZ99JSPQQS^YZZ^edkjlnmpppyuyv|xxw}z}z{}|‚‚}|}~€|~~‚ƒ…ƒƒ…„‡„ƒ‚ƒƒ‡‡‰‰Š††‰…„„‰†ˆ†‡Š‰‹Œ‹ŠŽŽŒŠŠŽ‘’“ŽŽŽŽŽ•‘“’‘’’“•“—•˜•”“”“—”—”—˜“–—•™•šžœ£—œšœž£Ÿ¢¥§¥¢¥£¨©©¨«¬­¯­³·¸¸¸ºÀ¿¿¿ÂÁÂÁÄÆÇÊÉÊËÍÏÏÐÑÏÐÔÓÒÔÓÌœumoe^^X][[Y\a^aakgjiex|~†‡„ƒ~y~}}}x|€„Š‰ŠŒ‡†{vvkd^U\ZYTRNGMIGMEPVYZZ\Y[ZSVRPSY`]fpv}€z‚€€{{wqe_TJ>;::922+))1-35:CHKR^[aidgik++636.13:3-245Nl‘¸ÂÃÄÈÅÅÆÂÁ¿¶±Ÿwhnw‚‡ŽšŸ£¢§°­µ´²´µ²¶´¶µ¶°²®£~M^^D84G0+&+&'6=F;!&6H*.JF>U8A?IF8EHETA959IgaF† [945LC%2:9Hqqq1'/QMKCH?vŠv\:1>}“]U-$141'01EAORCAF/'643It`-)>^eIQyZ99JSPQQS^YZZ^edkjlnmpppyuyv|xxw}z}z{}|‚‚}|}~€|~~‚ƒ…ƒƒ…„‡„ƒ‚ƒƒ‡‡‰‰Š††‰…„„‰†ˆ†‡Š‰‹Œ‹ŠŽŽŒŠŠŽ‘’“ŽŽŽŽŽ•‘“’‘’’“•“—•˜•”“”“—”—”—˜“–—•™•šžœ£—œšœž£Ÿ¢¥§¥¢¥£¨©©¨«¬­¯­³·¸¸¸ºÀ¿¿¿ÂÁÂÁÄÆÇÊÉÊËÍÏÏÐÑÏÐÔÓÒÔÓÌœumoe^^X][[Y\a^aakgjiex|~†‡„ƒ~y~}}}x|€„Š‰ŠŒ‡†{vvkd^U\ZYTRNGMIGMEPVYZZ\Y[ZSVRPSY`]fpv}€z‚€€{{wqe_TJ>;::922+))1-35:CHKR^[aidgik \ No newline at end of file diff --git a/Common/data/PCB2_1024x683_8u.raw b/Common/data/PCB2_1024x683_8u.raw new file mode 100644 index 00000000..72861d01 Binary files /dev/null and b/Common/data/PCB2_1024x683_8u.raw differ diff --git a/Common/data/PCB_1280x720_8u.raw b/Common/data/PCB_1280x720_8u.raw new file mode 100644 index 00000000..19106f4f Binary files /dev/null and b/Common/data/PCB_1280x720_8u.raw differ diff --git a/Common/data/PCB_METAL_509x335_8u.raw b/Common/data/PCB_METAL_509x335_8u.raw new file mode 100644 index 00000000..37e299ec Binary files /dev/null and b/Common/data/PCB_METAL_509x335_8u.raw differ diff --git a/Common/data/Rocks_512x512_8u_Gray.raw b/Common/data/Rocks_512x512_8u_Gray.raw new file mode 100644 index 00000000..b82db6f5 --- /dev/null +++ b/Common/data/Rocks_512x512_8u_Gray.raw @@ -0,0 +1,285 @@ +¤¦©«°¯­¯²¸»³­¬«§¥ª®¯ª¦¤£¦¬¯®®±¶²°®²±±²¶¸²¯«ª«¬«¨¦¦¦¦¤¨ª¬¯±°­ªª°´³¯«¦¢¡˜•––•¬¹ÀÀ¸±¯°®¦¡›ž¡¤¤Œ†ƒ‹”œ£ª¯­°¯¯®¯¬ª¬°¶»»¶±­«±³¯ª§§ª­±³µµµ²±±¯´¹¿ÅÁ¶±¯­£œ£¨¨«´»¾½¼¼¼·µ²³°´¸»¹¸¹¾½¶®ª¦¨¨¨«®µ´´¶²®«ª¨©ª­°³±««©¯µº¼¹´´¸¹··¹µ³¯±±°²µ¶¸¼º·¶¸´°®«ª¬¬¨«²´³¯¯««°±¶¿ÄÄú´°ª¥¥§ª«¦¦¨­­­­®ª¨£ ¡©ª¥¤§¨­µº¾Á½¸µ¹»¼¼·¬©©­±±¬©°ºÁ¾¹¶¸º»¼¹¯©¨§§¨ª¥¡¦²¶¶³²°ª¦¥¨¨¦¬¯¬©©ª¨ª¨§§«°²³³¯«¨Ÿ™¢¥§©©¤ž—‘“—š£­¯«¥£¡˜”’’˜š™—˜›Ÿ¤ š’”—•’‰‚~}{‚ˆŽŒ‰ˆˆ†€ƒ€‚…ˆ‹‡‚{vvvsroheaZK7'&,0/-,&',0046899::61.-,.*%$!%)'*177:@BFLSZ]VSPOLNTVYXZ]ckib[eouvsnmnppuw{€|x¨ª­±²³®®´»¹µ­©§¦¦­¯®¬¨¥£§ª°®°µ¶´²¯²´°±µ¸²³±®®®®¬«ª®­©ª«°³´´²¬©­²²°¬§¢™˜”—œ¡«´¼À½µ¯®¯¬§Ÿ˜›¡¤§§£ž’Š–™¢¦©¬°±²±±­¨¬´¼¼³¬©¨¯¶²¬¤¡œ¡ª®°²²°®®¬²¸¾Â¿¹¯©¥Ÿ™—¦®¶ÃÉÇÅÅÀ¼¸´²³±²¸¹·¶¹¼»±«¬©ª¬ªª±¶¸¹¹¶±¬­­¬®®°°¯ª¨­²·»º´³·»¿»¹·´°¯¯®²´µ·¹¹»·¶¸µ±±®­®­¬¯°±±°®««±¶»ÄÊËÊǺ±®ª¦¦ªª¬¦¢£§©©©§§£›™Ÿ¦«§¥¨ª«¯³¸½½·¸·¸º»µ®©«®®¯­¬³¼¿¿»·¹»»¼»³®¯®­®¬©¢©¯¶¸···´¯¬¯­²¸º´­­©§§¨¨¨«±±³³³¬¥¡›¡§©©§¤Ÿ˜”˜™Ÿ©­«§¡ž˜š–‘•š˜”—ž¢¥¤¡›–™™š–…‚‚„‰‰Š‰‰Š†}yyv}‚‡‰‰‚yusqrpojd\VI6(&(,+-0.*,+%.2256762+)%&-*##(('#%*)*3;AKQZbd`VOHFHKRY\]ahlkb^eorrmiimomosuvxwz}~{¨«­±³²®­³¸¹³ª©§¤©¯´³¯ª§¦ª®°°±µ¶´°®²´°®³·´µ³®¬­®¯®«®­ª¬¯²³¸º¹¯¨¬®®®¬©¦ œ–’˜¡¨²»¿ÀÁ·¯¯¯ª¦ž˜› ¥¦«ª¦Ÿ—–™š› £¥©«®±²°­¬«²»º±ª¦§­´³®¤œ•œ¨«®°¯­ª¨¨®µ¹¾¼¸¯©¢œ˜š ­µÀÉÏÍÊÈý¹´±²±³¶¹µµ¹¼¹²¯°¯®®­«±¶¶¹¹·³°³´¶¶³²³®¬®±·»½¹µ·¹¾À¼º¶³°¯±±³µ¹¹º¹º·µ¹µ²²¯«««¬¬®®¬«­«­´¹¿ÅÉÉÆÄ·­¬§¥§«®¯©¢¢¥¦¦££¢–˜ ª­¬«¬­­®±µº¼º·¶¶¸¹µ¯­®­¬­®°·½¿¿º¹¸ºº¼¹³¯°±²­ª§¤¦¬³·¶¹¼»¸µµ¶»ÀÀº³±¯¬«¬¬«®±±±±±¬¦¡¢§©¬ª¤Ÿ™”•™˜š¢¨¦¢›™™—‘•—˜—•—œ ¤¥¥ ›ŸšŽ‡……‚‡‰ˆ‰Š‰ztuz‚…‰‰‚yssqpqrqg\PH7'#!#(-33/.*"#&$.///+$"$*'#''(&$%'&(16=FMVadcYNKHGGNUXZ^digfgjloidaaejjhmomopu{¦©©«°®ª¬±·º²««©¨«²¸µ±­ª¨«°±±³´¶²±®³²±­²µ¶·µ­ªª­±­­­ªª­¯³¶¿Äõ­ªª©ª«­¬«¤šž§¯¸¼¿ÂÁº´²°ª¦  ¥§§¯®ª¥¡›œž ¢££¤©¯¯®¯­®°¶´¯¦¦§«°´®¤—˜£«ª­«¨¥¥¥ª²¶¹º·±ª¤ ¡¦¬³¼ÄÍÎÏÌËÇ¿¸´µ¶´·¸¹²²·º¹´±±²±¯¬¬±µ·¶·¸¶¶º¿ÁÁ¿ºµ°®´·½¼½¹º·¸½¼º¸¶³°±²²²µº¹¸¶·´³´´´±­ª¤¥©««ª©¥©¦­·¼ÀÃÅŽ®¨¦¤¤¦ª®¯«¥¢¤¤¢ž¢ ™“–¡«³°°³±²°¯´¹¹¸¶µµµ¶´±¯°¯¬¯¯³¹½½¼º¸·¶¶¸³°±²´±©¥¤¡£©²¸¶¶½¿¼¸»¾Àļ¶µ³²³²®®±°¯­®­¬«¦¢¦¬¬­ª¢žž™—™–—–”–šš—–š™””••–˜¡¢ žŸžŸ›’‹Š‡†ŠŠ‰ŠŒ‹‚|xx€ƒ‡…‚{qrrpsvtk`RF7* %-//-)$""'&&%"!"'$#%'&$$$%"$-16;CMX`b[UQOLDHNSTZ_agjhhih`[ZZ\hkhlnonou~‚ƒ¥¥§¦¦¨¨¬¯µº¶­¬­¬­¯µ·²¬©ª®®°²±¶³±°®°³®¬²²µ¸µ­¦§«²°¬«©§«²´ºÀÌÉ¿³°­ª©­±±±°«§ª°µ¹¾½¾Â½¶µ±¬¨¥£¦ªª«­­¨¥££ ¡£¤¥¥¤¡©®°²°¯­®°°¬¨©¨ª¯°«£˜˜¤¦¨§¦¦¥¥¦«­²¶¶¶µ±°­­¶»¾¿ÄÊÌÌÌÏÉÁ½¹·ºº¹»·³²·»º¶´µ³²°­ª­²´µ¹¸¹»¿ÃÈÉÆ¿¹³´¸À½¼¼¹·¹ººº···¶´µ±«¬­°²²³µ²±³°±°«¨¥£¨«ª©¦£¢¤¨µÀž¹¬¥¥  ¤¦ª®©¦¢£¢  ¡ —‘–£®²±¶·´°®­±¹¼º¸µµ¸¶¸´±²³®²°±µ·µ··µ³³¶µ´³¶¶¶²«£¡¡¥ª´¸·µº»¼¹»ÁÅÅÅ¿º¸¸¸¸¶²±±°®ª¨©ªª¨¦©¯°®©¢œ¡Ÿ™™——•™–’–™˜™šœ™•‘‘”‘‘”šŸœžœ—Š‰ŽŒŒŽ‹ˆz{|{z~‚ywsqrrvsnaTF=,!!'())! !! "!$'"!%$$"""  &+.4A?& (.2149?DGIHLNNNW[_c`[Z^[[ZWWVVTW_efcbª££¦¨©©§¦§¨±¸»¹²¯­©¦¨¨«±²²²­®¯««¬°²²®²²¯¬«¬®°«¥¨©³··´«Ÿœ¦«ª«©«®´²±®±¹¼¹¹¶³³³µ¸¼¼½¼º¶°°³³²´´´µ³¬¨¦§¦¥¥¥¤¥©©¨««®±±µ»ÀÁ¿¼·´²­«¨©§¨ª­ª¨§§­±°®«§¤¥©«¨¬²·º¹¶·¼ÀÁÀ¾½»°¦¥¥¥®´µ´·¾À¾½¼»¸¸¹¸´·¹½¼»»¹»¼¼º·³¯¯«¦©®³±±²³´°²³³´¸·ºÂ¾µ®ª¥¡¡¨¬¯°°®±²ª¦©ª¬°³°®­ª«¬¬ª¦¥¤§¬­«®´»¹²¨ ˜œ¦³¸²©¤¢£§«­®®ª¥¦ª®²´µ°ª¬««°´³µ³®«ªª­°´¶¶¹¹¹»½½¾¼¾º³°°²±±³µ´°¯²¯¬¬±±¹¾À½¼¸±¬ª©¨ª¥£§§ª¬¯´±¬©¦¤§­³³¬¥Ÿšš ª«¦¡™—”––˜˜—“‘‘‘“’‘””’‰ˆ‰ˆ…‹”˜˜—–••‰†‡„|z~{qkhfjlppolopljdZPC.   #((*/5;DHIFIMJLRY[\\WUWWWUTVUXXWakjih©¥¤¥ª§§¦¥££®·¼¼·´°®¬©§¨ª¯®°¬¬ªªª«°µµ¶¹¹´­¬¨«®©¦¤¦­µº·¬¡–œ¨­±±°´µ´³¶¸½¼¸µ²¯­¬°±µ¹»»»¶±¯¯¬­­±²²³®¨©©©ª§¤œž £§«¯³²±µ·¼Á¿»´²®­§¥¦¨¥©«¨¨¦§«²±¯°©¤¤©©ªª­±·¸²±¸½¾¾½¾¼±£›ž¥¬°±¶»¼¹¶¸·´·¹·¶¶·¸º···¹º¹¸µ±®ª¦¤§¯¶²­¬¯¯­²³´³µ³´º½º³­¨¤ §««««¬«©¬§§¨«±¶¹¶±¬§¡§§§§¤¡¤©©©©±·¶±ªŸ£®¶¼³ª¥ ¡¦¨¯µ¶±¯¬­±³±®¦¢¦¦«¯¶µ±­© £§®²µµ¸º¸¾¾¾º»½¹µ°°±²°³µ³¯°´µ³°²´¸½À¼»µ¯«¨§¨¤¡¢¦«±°±¶³®­«©ª¬²°¥Ÿ›••š¢£¢žš—–“–——˜—“•””“‘‘“”‘’ŽŠ‰Œƒ€…—œœš˜––•–’Ž‹„{x{xrljiikpnjinolmi`VI6&    + + + + "-29@FECEHGGKPSVVTSSRSSQVWXWW_jlmmª¦¤¦«¬ª¨¥¡¢«²»¾º¶µ³¯¬¦¥¨©¬­­«¬ªª¬¯³²¶»½¹³«§©©ª©¥¦ª°µ·®¢›Ÿ¦°¸»º¹¸·ººÀý¹±¬©¨ª­³¸º¹¹·´®¯®«­®°µµ¯ª§§©ª¨£š™Ÿ¢¥¬²·¸µ´´·¹»¶±®¬¨¤¡§ª¥§¨¨§¤§¬´¸¸¸²ª¥¥¦§§ª±·¸µ±´º¼»¿À¼±¢’’š ¥ª­²·º¸µ´²±¶¼¹·´³´µ¶²´·¸¶µ±®«ª¦¥¬²¶³¬ªª©­³·¸¹·´°´·µ°©©¤¢©¬­«®­«¨¤££Ÿ¡«³µ¶²¬¨£¥§¨§¤¢¤ª«§¦¯´µ±«¥¤¨°¹»µ«¥¤ ¤©°·»ºµµ²³´°ª¥ ¡§­¶»¹±ª£ ¢¥¨¯´´µµ¸»¼½½ºº¾¼µ±°³²°²´°®°·¶´´µ¸¼Àÿ¹¸´®­­­­¨ª­³´³°³±¯®¯°®¯´²¦œ––’”šœš˜••˜–˜™””——™˜•””‘‘”‘’“’Œ‹‡‡’—›šš™˜˜˜–‘Œ†ƒvuxyvqpnnoppnloonmmbXN<'   "(09??=DFIJLLPSWVQRSUXWWWYXW\dcch©§¥©­±±¯ª¦¥§­·¼¹¸·´°­¨¥§¥¨«¬¬©ª­­ª­«©±·µ±ª¥¥¨¨¦¥£¦«­²¬§ ¤ª±½Ã¾½¹»º½ÂÇÊŽ´­«©­´¹º»¹·¸³¯°°®¯¯°³µ°¨¥£¤¦¥Ÿ˜šœ£¨¬³¹¼º¶²²¶·¶°ª©©¦¦«°¯©§¨¨¦£­¹½¾¾¸°©¤£¤¦¨¯´µ´°±¹¼½¿Á¿³¢’™Ÿ¤§ª­´º¹¶³³´¹½º¶³±³´µ¶´µ¶µ±°¬ªª¨¨¬³·²¯ª©§¬´¹¼½¼·´³´°­§§¦¢¥¬®°°¯¬¥¡šš¥®¶³´²®ª©¨¨¥¡ ¤©ª©¨­±±°«¨¨«±¶·´¯¨¥¡¡¤ª±º»¸¸µµ·µ°©££©°»»µ¯§¤§«­¯³¶µµ´¸º¹»½¼¾À½·¶³³²°±³±±°µ¸²±µ¸¾ÃÇý¹´¯±´µµ±´´¶¶²¯±°­«¬­®®±°¦š””•–•”“••——•’‘”•™˜–—•’““–•“ŒŠ…‹•–“•————•‘‰†€tpu{zvtronqrrmkjkkiaZU@' +  ".469>CIMJLPRWWTSVY]\[Z[\Z]`Z^b¬¬§¨¯³´³±¬©¥§¯¸¹¶·µ±¬ª©§¤§ªª¬©©­®¯¬¥¢¥«®¬©¥¦¨¢¡ ¢£¦«¯­©¥ª¯³¾ÃÀº¸¸»½ÂÇÊÈÁ¸°¬«µ¼À¾»¸·³±²²²²±±²µ°©¥ ¡£¤ š›Ÿ¥ªª²»¾½·­¬°´µ¯©§¨«­³¹¶®«ª¨¥¦­º¾¿À¹±§¢¢¤¦«®³¶³±°¶¼¾¿ÂÀ²£•›¢¤§ªª²¹»·µµµ¹»ºµ¶³´¸¸¶·¶µ²®­¬«««¬°´¹¹³¯®«±µºº»¸¶³´´¯©£¡££¨«°´´³¬¥ š˜–™¤­²¶··µ¯«©¦¢œœŸ§¬ªª¯´°¯®¬©­®²µµ±®ª¦¢ž ©²¹»º·»º¹µ¯¨¦©²º·±¬¤©®²±µ·¸¸¶µº¹·¼¿½¿Á¿½¼¸¹¶²²°±°°´·³®±ºÀÇÆý¸´­²·¸´µ¶¶·¶³¯¯¬©¦¦«®ª­ª£š“’•”””“”••˜–’“‘“––“””‘“–—˜™—“’“‡Ž“““”•”’Ž‹†vosw{wutqpqssnjjlnib_]I0      %,17=DGEFKOVVTVY\_`[\[^[]]XX^­­¦¦ª­±¶µ²¯©¦­µ¶¸¶²­­ª§¥¤¥©ª¬¯¯®¯²¯ª¥¢¢¤¦¦¨§¥¡ŸŸ ¡¢¦¬­©¬°±´»¾»º¶µ¸½ÁÄÆÈŽ³³¶»ÂÆÄÀ»·¸µ°±²´³µ²³µ³®¥Ÿ§¦¢ž¢§ªª±¹¼¹³ª¤©³´¯­«¯²´¸¼·±«©¦¦¨±¹½½¿·­¨¤¥«®±´¶¶¸³°µ¸º¾½¼²¥™–ž£©«¬®³¶¹¹¹¸³¸º¸¹¸¶¸ºº¸¹¶µ°¬©ª©¬¯®±µ···´¶´´¶··´²¯¯¯°¬¤žŸ¥¬±´·¸·±ª¡™›˜œ¥®µ»»»¹±ª¦£¡žšž§«­­³·µ³³¯¬¨¨®µ·¸¶³­©¤¡¦¯´¸¼¼¼ÁÀ¾±¬ª¬¯³´°¬¬¯´µ³¶·¹¹¹¹·¶¶»¿¾½½¾ÂÂÀ»»µ²²°ª«³·¸²³¸¿ÁÄ¿»·±°±³³³±´¶³¶³¯¯ª¦¦§©ª«¨©£™‘Ž–˜–—••”‘—™–“””•”•”’’–š™™œ————œš‹‘‘’Ž’”’‘Š‰ˆ„ztrxzyyxuruusplmmnohfbQ3!      %,39;9>DLRTRSSV\\[XZXZ[YTSX®­¦£¦§­²³´³­©­¶···°©©¤¡¡£¦¦«¯³²¯°³³­©¤žŸ¥¥¥¦¤žžœž¥««ª­°µ¸¹º¸·³°´º¾ÁÂÃüµ·¼ÀÄÄÀ¼¸¶³±¯¯¯²´´±µ·´¯¥›Ÿ¥§¤ ¡£©ª¬²·º¸²©¤¥±µ²­­²´¶º¼·±¬¨¥¥ª³¶·¸»¶°©¦«°´µ¸¹¶·³±±¶º½»·¯¦Ÿš¢¦©®°²³·¸¸¹¸¶·¸µ¶·¶¶¸·¸µ·¶±ª§§©«¬«©ª±·¶²¸º¶µ´µ¯¬ª¬­¬« ™˜¥¯²·¹º»¸³«¢ŸŸ£¨¯·ºº»¶¯©¤££¢¡¡¦«®³¸¼º¸µ°¬¦¤«³ºº¹·²¯®©¨¯±¶»¿ÂÇÈ÷­«¬­¯¯¯¯±²´¶°³³µ¸¹¸¶´´»¿¼¼½¿ÄÃÃÁ¼·²¯«¦¨³¼À¿º¼ÀÀÀ¼¸·³²²´²­°´³´µ´±±«¨©§©©¦¦¦¤—’“š™›—“‘“–š—““’‘‘’Ž”œ™––—˜™œ¡’‘”“’’“‹†‚€~~yuxwz{{xwwurojmmmhgfaP5!    +  + + "'/227=CKOOMMPVZX[[YWXURPV­¬¦¡ £©¯°±°®ª®³´¶´°§ ¡¤¤¤§­°±¯®®°¬©£ ¡¥¦¥¤¤ žœœœ›¡§««­°¸»»··µ°­²¸»»¼½½»¶¸¼¾À¼¶³°¯¯­®¬±³µ´´·µ­¤œ ¢¤£¥¨¬®®³···³­§§­³°®­±´¹½½¼µ®¨¦¦«³·¶¶·¶²©¥«±¶¶µ·¶³±°µ·º»¼¸°«¨¤§­±µ¶´¶¶µ·¼º¸·¶²¶µ³´µ·¸¶¹µ°ª¨¥¥¢¡ž˜š¦²·¸¶µ·µµµ°­­²°­ª¢˜–œ§­´¸¶¹½½º¶¯«­ª«¯¶µµ±±­§¥¥¦¤£¤¦ª¬²¸ºº¹µ°¬¦£§¯¸¸¸¶´³³°­¬«®¹ÁÅÊÊø¯­ª«­¯¯²±²±±±°¯¯´¸»¹²´º¾»¼»¼¿¿À¿½¸³°ª¦§³ÃÆÆÃÁÁ½¹¶µ¶µ´´®­³µ¶µµµ²±¯¬¬ª¨§¥¦¦¤¢œ——šœ™˜•‘Œ‹’˜˜“‹Œˆˆ˜›—•—˜˜›Ÿ›”Ž‘”——”‘†y}}€~zuvuy}|xy{yqmijkgebgeU:$    + + + #+026:@GIHGJRUY]a]\WTRTVª¬¦žœ¢¦ª°­®®¬°¸º»»¶­£ ¢¤¤¥£¦ª­¬®¬ª¨©£ž¡¦¨§§¦¤¡£¢¢£¥«®¬¬²½ÂÁ½¾¾·°³¹·µ³¶º·º¼½»¼»·³¯°®«¬­©«°´¶µ·°©¢ž¡¥ªªªª®°®²²µ¶¸·²¬¬¯´¬ª¦ª¯¶½¿¾¶®¨¦¨®´µ²±´´²«¦©²µ´´µµ¶²´¹»º½¹¸¶±®­²µ¹»»¹¸µ·º¼¸µµ¶´µ¶µ³¶µºº·²¯©¥¤Ÿ™’‹‚‹®·¶³´³·¹¸´³²´²¬¦¡š™ ª¯´¶µµ¹»½ºµµ¶±¬©ª«¥¥¨¬©¨¤¤¤¡£¥¤©®³µµ·±°¬¥¢¦­³¹¹´¯®­®«¨¤®¸¿ÅÆý¶±±²°¯²³³´°®®°±¯­±·¸¶µ·¼¿º¹»´µº¼½¾½·³¯¥©¶ÁÊÇÆÅÂÁþºº´··´±²´¹º¸¶´°°°®¯°®®®«©©¦¢™œž™”‘ˆˆ‰‰‘–˜˜‘‹Šˆ…€‰•—•“”–—™˜’“”—››—’ˆ‚yv{‚‚‚yrrsw€|xx|xqnmpqjfeifX<%   + + + !(*/48>FHEHMOPX[YWQLMPT¬®ª¢ž¡£¨©ª«­®¶½ÁÅÆ»®¦¢¤¦¥¥¤¤¨ª«­°¬ª¨£ ¢§§¦§¦¤¤§©©«ªªª¨ª±»ÅÆÈÊÈÁ¹¸¸µ³²´µ·¶º»¹¶¶³²®®¯¬¬©¢¡©®°²³­©¡£«±··³´±±±±°¯²¶¹·±¯³³¬¨¥¦©±¶¹¶±®©¦©­³¶³±³µµ²®°µ¶³²±±´µµº¹¹·µ¶¶±²°²´ººº¹¹·¹º·´²²³µ¹º·µµµº¸¶±«¦¤ š”‹…z‚®±¯«©«°´¶µµµ³±«¥¡ž¡¨¬¯¯°°±·¹¼»¹º¹´©¢Ÿœ˜£©­©§£¢¢¦¦¥ª¬®°²¶²®¬©¥§«°²²®¥§©¨¥¢ ¨²¹º»¹¶µ·¹¸¶³³µµµ°«¬­®¯­¯²¸·µº¿À»·²¨«´¿ÁÀ¿¼¹²§£©·¿À¾ºº¾Â¾¼¹¹¹¹¶··¼¼º·±®­¬¬¯±­²±­¦¥¥¢œ—˜˜’Œ‡ƒƒ†ˆˆŒ“˜–’’Œ†‡•˜’‹‰Ž‘”’“–—–˜›œ˜„{ssyƒ„†€wqrnt~~yutqpkotvmcad_O7!   + + + + + !%)-3=DFJKLJMPNKEDGJV¯²±¨£ £¥¦¨¬ª«±¾ÃÈÊÇÁµ¬¨¨ª¨¦¦¤¤§ª«¬­©©¨¤§¦¥¦¦¥¦§ª­¬«¬¬©¨©®¸ÃÆÊÌÍǾ»º¸²¯­¯°³µµµ²²²°®¯¬®­«Ÿš §¬­±®¨§«²¾Ä¿º¸¶µ¶´°®¯µº¹¶²²²­©¨¨©¯²³²°«¦¥§­´·´´µµ¸·µ³¸¶³¯®¯°¸¶¶¶¶¶±±´²¯®°µ¸ºº¹¹¹¸¶±°¬¯²´¸¹¸¸¸´·¸³¯ª¤¡–Š…y…¡¯¯©¡£ª°´¶¸¸³²ª§¥£©°±¯¯­®±¸¼¼¾½¹·°¢š““™¡§ª¯­§§§¨¨¦ª¬«­±´°®ª¬¬©ª­®°­¨ª­«§¦£¨¯°®¯®¯µºº¾¸´²µµ´±¬«­¯¯³´´¶·¹¿ÇÅÀ·ª¢ž¯ÁÂÁ¿Â½®Ÿ–˜§¯­­ª®¹ÀÅÂÁ¼»¼¾»¸º¼¿½¹³­§¨ª­°¯°®¬¤¡¢¡ž•““‹…ƒ……‡…‡‰“˜—”Ž‹ŠŽ–˜ƒ{€‡“•™˜––™œ™~vmoy„‡unpnt}‚}qmnoptwumd__[M;"   + "!'4+   +   '39?DECDFGHCCCKR§­´²¬««ª¥¡Ÿ¤£¦«¶¿¿Á¾¶¯°±¬«ª©¦¦¦§§¦¦¨¨©¦©©ª¨¨¦«¯³³®­¨­³²®¬°´½ÃÀÀ½»»º¸µ²®ª«®­°³¶´²±­¬­°±²®®¬°²²±°°®±¶¾Åý¸µ·¼»µ®¬±»¾¸³¬¤žž¢©­®°±µ°¨¥§©¯µ¹·±ª¬°²±´¹¹·°¤Ÿ©¯³·µ³°­¯¯­ª§­´¸·¹º»¹¶±«¥£¦©««ª«­°°°¯­ª¤œ˜“ŒŒŠ™¯¼½³¥šŸ¤¨¬³¶·µ²©§§­µÀ¼¶¯°·»·µ¶·±¨¤ž–”“—œ¡¢«±®®«¥§ª¦¨¨­³¾À¹°®°´¶µ´¶¹»¼¾¼º¹¶±¯°­©§¤¦«±µ¸¸¸µ´³²²²´¯°³¸º¼»»¼ÂÅÅÀ¼¹°²¿Èʾ¾º©“Ž’‘Ž…‚…“¤µ¾ÂÁ¾¹¿ÃÁ¾¼À¾½º³«¨ª¯³¶µ±¬¨¢žœœ™“‘’Ž‰†…‚|~‚ˆ‘ž££ž˜”•™š˜‰‰Œ‘“–š›–ŽŽ”š›’‡ƒ„…ˆ‰‡‡„{sopw€yroqwwwuojgbb]SB.  +    +"*29?@@CFEB@?EI¤«¶µ®®²¯¦žœž¤¥§¬·½À¾´­ª¯¬«­ªªª©¨ª§¦¨¨§§©ªª©§¥ª±µ¶²¬«®¯³²­«¯´¹¼¹·¹¹¸µ¶´¯ªªªªª®­¯¯¯­«­®¯°±°´·¹¸·´¯±²´ºÂ¼·³±µ³±««°½Á¼²«¥š¤ª°±²±´­ª¨«®±¶¹¶±ª¨«°®¯´··­£œ£°´¶´³­ª¬¯¬­¬¯´·¶²³¶µ´±«¦¢£¤£¢£¥¨¦§£ž™—Ž‰“—– ²ÀÁ¶©›žž£«µ¸´±¬¥¤«µ»¿»µ±°µ¸¶³³±­¥¢ Ÿ£¥¦¬³±±ª¨¨©¨§©«³¾Â»µµ¸»¹¸´¸ººº»ºº¸¯«¬«©§¥¢¤ª¯²µµ³±°¯°²´²²²·»¼»½¾ÁÄý¹¹¶¾ÆÆÀ»¾¸§–‘‘Œ‰‰–¡¬º¿À¼º¿ÄÄÀ½¼¼¼¹²«¨«³·¹¸²©¦£š›˜”’“••’‡€~‚†šŸ¢œ˜”˜•˜š“Ž‘‘’•–™œ–ŒˆŒ‘‰‚†‡‰ŽŽŠ‰…|vqqy|vqnqstvtohe`^]UC.    %)3:;AEEEBBCG¨±´²¯¯²³¬Ÿœ¡¢¤¦«²ºÀ¿¶«¨ª©©¬­­®ª¨¨§¥¨¦¦©¨¦¨¥¤¦ª³·¶¯­¨ª®±´³­®°³¸º¶µ¸¶¶¹·°®«¨¨§ª©ª©­®­°±°±±µ¶»½¿¼¶±®¯²²¸º¸°¯«ª­¬«®µ¿ÉÀ·¯§šŸ¥¯´³³´¯¬®±´µ·¹µ¬¤¡¥­ª¬®³³¯¤ ¦°¶µ³­«©®±±²µ´¶¹´°¯³µµ°¬§££¢žŸ ŸŸ›•–š—“”ž¢¥­¹ÁÁ¶©žšššž¥²¸¶³´°©«¯¶·¶µ²±³³³³®ª¦¢ ¢¤§ª¨ª«¬±³´²®§¦¨¦¥©¦«¶¿ÂÁ¾½À¼¹¶µ¶¶´²¶¹¶«¦¨¨ªª§§¦§¨«®®¯¬«­®°²¶µ¶¹¾¿½º½ÄÄÅþ¹¹¹½À¾¾¹¼¹ª•“‘• Ÿª·ÁÂÀ»ÁÇÈ¿¼¼º·¶®«­´º¼¸²§¢¢œ—››—“•“•“‡„‚€„Œ–ž˜˜—————“”””’“˜™“‰‚‚}{}‡–—’‰ypqvyystqosrxvqld]\[PD-  #,3:>?AA@CF¦®²°¬«²·­¥Ÿ£¤£©¯²¶½¿¸­©¨¦¦§­²¯«¨¤£¡£¦¦¥¦¨¦¤¦¥©¯³³­«§©«°µ·²®®±´¹·¶¶µ···´±­©¢£§®«­­¯²³²²µ¶µ·»¾¾»µ¯¬­¯¯°±±­«§¦§ª®°¶¿ÆÁ·¯ª¢š™Ÿ¨®±²²±±³¶¶¶·¶¯¤š–œ¦ª«¬­®®¨¤¬²µ²°«ª¨­²²¶·µ¶·¶¶³³³³²¬¨¥¦¥¢¡¢ ž›–Žˆ‘šŸŸš™ ¨«­³¸»½µ¬Ÿ™› Ÿ¤²¹º·¸·³®°³´³¶´±²³³±®©§¡§¨ª­¯­¯±±±³²±®ª¨­¬­®­©¯·½¾½ÁÅÄ¿¹¸¶·µ±±µ¸´©¢£¥§¦¢¥¦¢¡Ÿ¢«¬­®®¯±³¶¸º½¿½¼º½ÃÆÇÇÁ½¼½»¾Àº¸º»¯¤—•–Ÿ¨ª§¡¦´¿Á½»»ÂÆÇÁ½Á¾¹¶°«¬±µ¸·±§£ š˜œ›—‘’’Œ‡…ƒ‚€ƒˆ–››™˜š˜˜™˜•”“‘’’†€ytyˆ‘›Ÿ›–’‡{porvtrrqppqupmke]\WK?.  &+/258:>B£§©©§ª¯±«¨¥¤¤§®²µ·º¾¸¯©¥¤£§­²¯©¢¢¢¦¥¡¦©§¥¤¥¨­±°ªª¨§¬°²³´±®°´µ¹¹¸¶·¶¸µ²®¨ ›£®±±²µ·¸µµ·¸µµ¸»º¶²°®°±³°®©¨¦§¥¦¨­²¶º¿½¶±°¨ž™˜ ©®°±²²·¹¹¶·²©Ÿ’–¤©«£¥ª«©©°µµ³¯«ª©«±±´µ±±´µ¶¶¶¶±°­«§«¨§ª©¨¢›•—¢§ªª«¬­¯®¯²´¶¶³« ›§¨«¸»¹¶··¶´±±³µ·µ°°´´²²°¬­¯¯­®­­°²´³±®­­®­´·ººµ¯¬°·»¿ÂÂÅÁ»¹·µµ²°´¶³¤œ›œžš–™™•‘œ¬°°±±±µ¶·¹º¿¼¾»º½ÃÉËÊÅÁÀÁ¿ÀÁ¿º»»²«¥ œŸ¦¯³°©©²º¼¶³²¹ÃÄÁ¿ÁÁ¿·²©©«­¯²®§££œ™™™—‘’Žˆˆ…€~|{{‡–›™š›™˜š–“‘Ž‹ŒŠ‹‹ŠŠ‰xw}‰‘›ž™“‰zompqpoonllmmiffb]ZTI?.   "%*,28; ¢¤¤¥¥ªªª§©¨¤«³¸¼»¾½¹¯¨¦£¢¨¬°®©¢¡ŸŸ¤¨¤£¨­¬¨§§¥ª±°­¬«¬«­±±±²³¯²³´¸¹·µ¶·µ³­¦š‘›¯´³·»»¹´¶º¸²³·º¸³°²³´¹¸³­¨¦¥¤¤¨©«°²³·¶³°³°¥›•š¤©®®¯´¸»¹¸µ°¨Ÿ•‘•¥«§ŸŸ§¨©­³¶·´±®§¤©®°°±¬«¯²³¸¶µ²­«©¦§ª¬­°«¦ž•”•›§®­°³´´µ²´´±°³±¬¥ ¥±µ¹¿Â»µ´¶¸¶³µ¶µ¶¶±²´µ¸·¶¸¸¶´±®®®°¶¹µ²°¯±±µ½ÂÁž´¯®³¸¼¾¿ÀÁ»¸¶¸µ±®°³¬ •”–•ˆ‹Œ‰ƒ—¬¸µ´µ¶·»¹¶»»¼¾¼º»ÂÆÉÌÆÅÆÆÄÁÄÀ»¹¹´®ª¦¤¦­³·²«ª®µ¸µ°®´»Â¿¼ÀÁ½»´¬©¨¦§««¥£¤Ÿ˜˜™–•——”Ž‡…„„€}yvvz‚Ž—œšœ›š™–“ŽŒŠŽŽ‹Š“—š–‡yv|Š‘˜›˜”Œtmkmopnjihlkhd_^^ZZSND2""  "&+15¢£¢¡¢¡¥¦§©ª­¨ª´º½»½¼¸®¨¡¡¤§«­ª¦££ ¡§©§§«±¯¬ª§¦ª­®­®ª­¯±¯³°³µ²°±°¶¶´±²´µµ±ª›“šª²·º¾¼¹¶µ¸¶±°·º»µ³±²³¶´¯¬¨¦¨¤Ÿ¢¦©«­°¯°±°³´¨—˜ž¦­®¬®´¶·¶´¯¥™–ž©­¬§¦©«¨«²¶µ¶²®¦¥§«©¬ª¦§ª®°¶µ´¯ª¦¥œ¢¤ª¬¬¨£œ—–Ÿ¨¬¬¯´¶¶·³´´³±²²¯ª§­»ÁÄÆÅÀ»¶¸»¸µ¶¶´´¶µ³´µµ·¹¸¹¸µ³±±±´¹»µµ°³´´µ¹½ÀÁ¾¸°°³¶·¹¸¼½¼¸³²³°ª©¨£™‘”–•Š‰ŽŠ€‚–®¼º·¸¹¼»¹¶¶¹¿ÀÀº»º½ÀÅÄÂÃÄÅÀÂþº»µ®©¦£¨«®°¬¨¨®³¹¸¸³³ºÀ¿½½¿À¾¶¯«ª¨§©§¥¢¤Ÿ˜˜œŸ žš—‘‡††…ƒ€|yx{„™ž™˜š—–˜•“’ŽŽŽ”™žŸ›ŠzyŠ“š—Ž‰ƒznjlmoojihklnlhd\ZXXTPI4$  !%)£¤£Ÿž ŸŸ¡¦ª©§¨¬²¶¹¹¸´¯¨¢¢¥¨­¬«©¨¨¤£§©«©­±¯«¬ª¦¨©«©§¨®°µ³°­²²´³²³·´°©¬®³´³²¬¢¦°¶¹¿¿¾¹·µ¶³­¬´º¼¸µ±²±µ´­«¬ª¨¢š› £©ª¬­¯¯®°²­£œ›Ÿ¤«®¬­±²±²¯ª£žœ›¥­®¯­®¯«¨­¯´³³´¯©¨¨¦¤§§¨§¨¨¬´³²­©¦ ˜™—Ÿ«°­«¤–”ž§§¦¬±´··³¸¸¸¶´³²¯­´ÅÉÅÇÅÃÂÀ½¹¹¶¶¶´¶·¶µµ³²µ¸µ¸¸´±°°³·º½µ±³µ·´²³²¶º»¹··¸··¶³¸¸·³°±³°¨¤¤ –“”–•‹ˆ”Ž†…—®¼¾»¸ºº»·´µ¶º¿¾¸³®°³¹½¼¾Â¾ºÀÁÀ¼»¶°¬¨¦§§¨©¥§ª°³º¸»µ³¶½¾º¹¾ÃÁ¼µ±°­«­©¤¦¥¢šš££ ›š’ŒŠ‰†„~~~„‰šŸš–”’“’‘’’‘”™œ ›ˆ‚‡–™“Š„€yomsuqoidejoopkf`XSUTOI3"   £§¨£¢¡šž¤§¨¤¥¦«±·ºµ²¯¨§¨©«­®®®­±­¬°­ª«ª©ª©«ªªª¬©ª¦¢©±³²­«°µ··¹º¸´ª£Ÿ§«°²·¹µ´·»¹¼¼¸´±°°­«®´¼½¹´µµµ·³¯«ª¬ª¤ž¡¡£©®°²³²±³·³«¥¤ £©®®­®°¯­°¯¦¡Ÿ£¨°³®²´³°©©­®­®®­¬¨©ª©§©ª©¤£¨­®­«§¤¦¢Ÿ¢¨¬´²«¤›•˜Ÿ©«©«°´´±³¸»¼¹³°°±±½ÊÍÇ¿½¾½¹·´¹¼¿¿À¼º¹µ³³±´·¹¶°¬©©­²¸¼·µ±±²®§¥¦ª´¹¼¾¿¾¾¹´´³´µ±¬¯²®©¥£Ÿ˜•”–•Œ”—’‹™®¼¼º¸¸¸¹´±¯±°±°¦›—£®µ····¶¹¾½¾º·°­ª§§¤¢¢§­²´·¼¾»¸³¸¹¹¶·º¿¾½½¼¹³±±¬¦¥¦£››ž¡ š›™”‘Ž‰ƒ€ƒ†•›˜”‘‰ŠŒ”•“’Ž–›šŸ›—’ŽŽ‘–”Ž…€‚}wx}|ztnkmoqsomibZVWTOG5%!  ¡¤¥¥¢ Ÿž£§¨©¦¤¢©¯´º¸³®¬ª««¯¯­­¬®°°±°¬©«¨¤§¨««©«­­«¦Ÿ£­²¯«ª¯µµ·º¸µ°£›—ž¦«²¹»¹¸¹¸µ´³­«§¦§§§¬³¸»¹µ´µ¸¶³¯©¥ª¬¨¥¢£¤¨¬°µ·¶´³µ³¯«¨£¡ª®­­°±°­®®ª£¢¦­²²¯²´´°«¨ª«¨©ª¬­©ªª©¨ªª«¦Ÿ¤«¬¬©¦¥««­¯¯²³°¬¤›—œ¥®°²²³²®­°´·¼¹²­­±¶ÃÍÐȼ·¶¶µ²®®¸ÂÇÇÄÀº¶³µµ²´´¹¶­§¢¡©±¶º´²¯¯¬¨¡ Ÿ¥ª³¹º¿¾½¸µ±³µ²®©©ª§¤£¢ ˜–•˜™”“–—“‘›¯»¾¼º·¸µ²®¬«ª¨¥—’˜Ÿª±°°µ¶º»»¸·²«­¨§§£Ÿ¡«µ»º¼À¾½¼¹¸¸·´µ¶¹»»½¿¿¹´±®¦¤¦¢œ›Ÿ  žŸœ—•Š…€}€ƒ‚„‰‘––”Ž‹ˆ‹ŠŒ’““‘—›ššœ˜”‘Žƒ}y}~x|€vsqsuuuspng^\^ZTK7&$()&$#!%$"      ¡Ÿ¡ ¢¦¨§¥¦¢¡£«²¸¸·³ªª¬­­¯®­©­±±°°¯¬¬ª¥§©¬«©¬¬°®ª¦¤­³²©¨­¯±¶¶¶²¯¦Ÿž ¥«°µ¶µ¶´°®­©¥£Ÿ˜› ¤ª²·¹¸¶¶¶¶·µ²­ª©ªª¥¥¤£¥©®²··³³²±´³³®¨¨¬°±¶¶²¯­¬ª¥¥§­¯­­¯²²°«©«­­ª¨­«¨¨ª¨¥¦¥§£ ¤¨«©ª¤©¬±´³²³³®ª¨¢ž¥­³´³¶¶²«««°´¹¹²®±·¼ÂÌÌø±±­­«§«·ÀÈÊÈü¸º»¹¶²²¶´®¨¨¨¬¯³´²®®­­©¤¡Ÿ¢¦®³··»¹·´³²²±­¦¥£ŸŸ¢£¡š™™Ÿ¢›››–’–­º¿¾º·´µ´²­«©¤ –Œ‘–£««ª´¹»»»¼¸³±±­­©£ ¯»À¼À¿¿ÁÀ¾º¸´µ²³·µ¶º»¿¸³¯ª¥¢¢¡›ž›œž››š‘‰„€€€‚…Œ“”‹‡ˆ‰Š••””””˜›ššš˜“Š…„ƒ‚~wuyxux}}zwsqqtturrpjc_aZVN9&  "!##$*(''%! '$ $'%"!#&$ ! —–›š›Ÿ ¢§§¨§¦£¢¡¤¬±³µ³°©©ª­¯®¬­­°±²²±²²­©¨§«¯­«¬¯±¬ª¨®²±ª¦©««¯³²¯­ª¥¤¤©­±°±°­ª§£ œšŠ–¢ª¯³¶·µ¶´´¶¸¶¶±¬ª¨£¢¢¢¤¨®µµ¶µ°±µ·ºº´®¬­³·º»¸±ªª§¥§ª¯±¯¬­¯¯®««¬­¬§©ª¬§¦§£›œœ ¤¦¨©©ª²·¸·µ´²±¯«§¨°µ¹¹µ²°­«¬ª«°´¸¶´·¿¾ÂƼ¶³®¬«©¨¬·¿ÄÈÄÀ½¼¿¿¾³­¯²´¯®­¯¯°®®­«ª«ª¨¦¦¦¤¦¬±¯±µ¶´³±°««§£¡ œŸ§ª¦™›¢¨¤¡¢£ ¡¢¨±½Â¿¸´²²³´¬¨ ˜•’ŒŒŽ‘Ÿ«ª¦²º»¹¹½¾¹¸¶·³¬¥œŸ±Á½¾½ÀÅĽ¸³³³µ¹¸³¸½½º²ª§¥Ÿ¤¢ Ÿœœš–—œžŸ ž˜‹‡~‚‚ˆ‹ŒŠ‰…††‡‰’—––—–˜š™™———Œ~xuvyyuuvqnuxyywrrstprpppkgeb]VR>)$"! ""!  !#$%$',*'%&(')%#)/+&"$&&#! !!#" # !#&(!‘Ž•™šž¡¤¦¨¨§¦£¢¡£©²¶·µ¯¬¯¯²¯¨ª­®¯°²´µ³¯ª¦¨­±®«©­®®««®°®¬¨¨¨¨«¬¬¬­©¥¡£§­±±¯¬¬§¥ š––•‹„• ¨®²¶¶¶µ´²³·¸¸³¬ª¨£¡  ¡¦¯³¸¹·²±²µ¸»·±®±²¶»º·²­«¨§ª­±³²¯®¬«®¬ª­¬¨§¥««¨©©¢š˜”˜š™ž¡¥¦ª«­³µ³´´³µ²±±±±¶¼º´°ª¨©«ªª«¬°¶¶·½À¾¾»µµ¶³°®°¯±¹¾ÀÃÁ¾½¼¾¿¾µ­­±´²±±²°°®«ªª©©ª«©¨«¬ª««ªª¯µ´²²®¨¥¢¡¡¡ £«¯§ž˜˜Ÿ¥¦¦¨¨ª®±³¹Àĸ±¯°²²¨ž“‹‹‹‹’–¤¯¯¬´»½½¼¼À¿¼ºº¼´ª¡¡±¿Â¼»¿ÁÃÅÄÀº´±±´¸¸µ¶¼½¹®¥¦¤¡¡£¢¡¢Ÿ›˜˜œœžŸž˜’Ž‹…ƒ„‚…†††ˆ„‚ˆ‘–“”—–—––—••“‰~uuwyyvtrngmswwurqqponoorqjc_[VS?-**&%%##$%%% ##')+*++-+''((''%$*1,(##&(%# "#! !"$!$'*('#$''$#'%(*% !#Œ“–›šœŸ¤§§¦§¦¤ ¡¦®º½¹°­±²µ²­¬¯±®°´¶´²¯©§¦­³°ª©¨ª¬¨¨ª­®¬©©ªª«ª«¯­§ ž›£©®²°¬¬«©£œ•’“ŽŠ’›¢¨®´µ··¶´´²²³³¯«§§¤  ŸŸ¢¬²¹½¹³°±´¶·µ³±²°­´¸´²¯¬ªª¬³¸µ´°¯¬®­­¬­®ª§¨­­­­©¤œ–•–—›¢¥¨¨¯²±±±°²²´°±µ··¹º¸°¤Ÿ¢©«¬¬««®±¶¸¼¿¾»¹¶³´·¹¶³µ¶¸¼¿ÁÂÀ¼¹¸¼»ºµ­­°²®²²³´±¯«©¦¥¥§©¨¨ª¬©¨¥¢¦¯³±²²­¦ ž Ÿ£¤ª®°¨ ›šŸ¥¦©«¬¯¶¸º¾¿Á¾¹¯±±±¯¤•‡†‡‡‰Ž“˜§µ³±¹¾½½½½ÁÁÀÀÀ÷¦Ÿ«»¹¸º½¾ÃÃÃÀ¸²¯¯´···¹··³¨¡£¥¤£Ÿ¡£¡Ÿ›™›œœ›˜’‡„‚ƒ€|x}†‡„ƒƒ‹“–‘“•–”—•’Œ‡||}}{yrpfdjswzwrpspqorsvqha\UPO=-,...,*+*+,)$""&)*/,*,-+&'()+)&)*/,($')/*%&"!"''&')'((-.,+)+-+'''**.-+&%$#%“•˜™›ž››œž£¥¤££¤¡¢¦°»¾·°¬°µ¸³¯°¯±®­±´´²±ªª§¬²²¬¨¨««©¬®¯®°¬¯²³²±¯°¯¦£Ÿ˜¥¬±²°®¯­§£›˜™“™ž¡¤©®²³´µµ¶³±®¬¬¨¥¥¥¥¢¡¢ž¡§³»¿½¶³±°²··µµ±¬¨¬°²°®¬¬«´½¿¿¼¸µ°²±±¯­®®¯±±±°°°©£¡›™™¤©¨ª¯®¯®°±¯°®¬©³º¹·´¯¥›“˜ §­«§ª©°³·¹¼»¹¹´´µ¹»º¶·º¿ÄÅÀ¾½¹µ·µ··±¯¯¯°¯®±·³µ±­§¥¢ ¤¨§¨­ª§£œ¢«±±®°ª¢›œ £¨©«¯°¬§ ž¢§©ª««¯µ¹·¹¼¾»´´²³°­ –………„ˆŽ“œ©¶¶µ¹¹½¼»¾ÁÄÀÂÅÊÊÁ­Ÿ¦±²³·»»¿¿¾¾º°¬­°µµ¶·¶±ª¤ ¥¨¦¤ ŸŸšš›œŸžœŸš••‘‰†ƒƒytx„„‚ƒ‰”–‘‘••–˜•‘‹‡†‚€‚€}ytphgow}~xuyyxxuwwqfZTOKG>,*224342221-)'(*-23//02,*&+0210.012-+,.20+,'$!!'*,-.+,-)*,-/110+$(+,--.0/,'%#–˜›œžŸŸš›Ÿ£¤¢¡¡¢£¥©°·¹·°­µ¸º¶¯¯³²®©«­®®®¬«©­±²¬ª«®¯¯²²°°°²µ¹¹¸¶´´¯©¦¤¡ž£©¯±±°°¯©£žžœ›Ÿ£¦£¥¬®­®³³³±®ª§¥¤¢¤¤¢¤¦¤ Ÿ¦²»À¾¹µ²±²²¸¸¹µ°§©¯°®¬««®·ÀÂÂÁÀ¾º¸·³®­¬°´µµ±°±¯¬¥¥¡Ÿ¢§©§¤¦§¤¦­±®¨¦£¤¯¸¹µ®©ž‰‡Ÿ§««§¥ª¯±²´´µµ·´¶»½»··ºÂǽ»¼ºµ³¶¶µ³²²²²¬«¯·´¶³«¤£ Ÿ£ª®¯¯¬¤œ–š ª¯®¬ª¤™”˜Ÿ¦««ª¬°±¬§¡¦¬¬©©«­°±±²´¼·±°²±­§¡š‘…ƒ†…‡Ž—¢«¶µ´´µ¸¹»¼½ÁÀÀÃÈÊij¡¢©«²¶¶·»¹¼»¹²­®³µ´µ¶±©¤¤¢¦ª§¤¡œ›˜š›œœœš›œ™˜”‹‡…ƒ‚|w|€ƒ‚†Ž’Ž‹’——•’‡„~‚ƒzxwtsw{€…ˆƒ|y{xwsndZTNHD:-)1332432310-./032322693./16:53667751./30./,)&)-///.,*+**/0131/*''.+(%'+0.&"%˜›œ ¡¢¤Ÿ £¤£¡¢¡¥©¬²¸º¼¶·»½Àº³³¸¸±¬©¨§©«ª«ª­°²®­®²··¶¸²±²´¶»»º·¹¶±­©«¨¨¨«°±²µ´¯©¢ž¡ ¢¤§¥¥¨©©¦ª®¯¬«§££¤¢££¢£§§Ÿ£¯¹À¿¼¶´°²´»½½¹¶¬­®««ªª¨®¸½ÁÀÅÇÅÂÁ¿º´¯©­±·µ³±²¯«¥¤ŸŸŸ £¨¨¥  —›¥¬«¦¡Ÿ¢²º»´¬¦›Œƒ†—¨¬¬¨¤§¬­®®°°³´µ´¹¼¼·¸½ÂÂÁ»½½»´³µ·µ¶¶´²±©§®µ¶µ°«¥¡ž›¡­¶º¸´¨œ™ž§¬­¬©§‡Ž›§­­ª¬±´´®¨¨­­©¦§««©ª¬±¶¶°¬­®©£¡œ“†„†ˆ‹›©°¶´´±¯³µ¸º¼¼½º¾ÁÅÀ°¡£©ª°´´´¶µ¹º¶³°²µ´±°±© ¡¡£§¦¢ ž›˜–——˜˜™—”—šœš–’‹††ƒ‚}z}€}|ƒŒ‹‰‹Œ“˜˜˜’‹„ƒ„yzyyz€†‰Š„|x~€zytqke_XRKG:1-035/+.///-.224433738>726:?=926:;;95/,.33431467540,((--/2485530-.1-& (+,'%(–—ž¡¤§§§¥£¤¦¥¦¥£¦¬°´º¹»º»¼¿Â¾··¼¾¸²­©¥©©©¬««°°¯±³¶»»º¸µ²³¶ººµµ·¹»¶°°°¬®±³µµµº¸²«¦ ¡ £§¬¬­©«§¦¨©§©ª¦£¢¤¤¥¤¤££¢ ššª·½Á¾»¹¹¹»¾À¾¼·²¬¬¬ª¬ª¬®²·ºÂÈÍÏÌÈÇÄÁµª¦«±²²³µ³¯©¤œœœŸ§ª§¦£ž“• ©¬¨¦¥¬¶¾¾µ®¨ “ŒŠ‰–¥¬©¨¤©ª­­®°±±²±³µ¹»¹¹¼Á¾»¾À¼·µ¶¶¸¸·´¯­¨¥¬µ·´°¨§¥ž–Ÿ¯½Á¿¹®¦¦«°¯°®­¨œ‡|„–¨°²¯±¶¹¸³¨¦¬­©¥¦¨©¨¥¦«²±¯¬«­¨¤¤Ÿ˜‹‘—šž¥¯³µ´²±³³·»»¹¹º¸·»º·«¢¤«¬±¶·³³³µµ¸µ±°²­©ª¬©¡ ¥¥£¡žšš—•“Ž’•”‘’™ Ÿ™“Œ†„„|{{}{zy{ˆ‰…‰Š‹”—––‘‰„ƒˆ„~{z{|€ƒ‡ˆ‰Šƒzu|zyoia\ZUKC=1-132.+.01/0266996897;;75;AEF>127663/-,/499=@EBDB<60*23379>A@<==9712+!"(,)*-2•”› ¤§©«¨¥¤¥¦¦§¢¤«²··¹¹¸µ¸½½¸³´º½¹µ®ª©­¯®«¬®¯¯®¯¯±¶¸·³°¯µ¹¿ºµ´¶¸¸¶±±®­²´¶ºººº¼¸±ª¦£¥¦§«°±¯«§¨¥¦¨ªª¬§££¢¤¥¥£¤£¢œ—•œ­¸½À¾¼½¼¼½½»¸´±­¬¬«¬­««¬±·ÁÊÐÐÎÊÊÉǹ©¢¥§¬¯²µ·²¬§¤Ÿœ §¬­¬«¥ž›¡¬¯®ª®³»À»µ¬¦¡›•›¦ª¨¨©¬«¬ª¬¯²²²±±´¶··¸½ÂÄ¿¼ÀÀ»³±´µ´µ´²°®§¨¯´´³­©¦¦¢˜ž±½Âû¯©©­²±±®®©ˆ|€•§±¶µ¶¸¼»²©¦«¬©¥¥¨§¦¥¢§­®®«ª«©¤¤£›–”š£¥§­²³°°°°²¶¹½¾¾¼½¹¶µµ²«¦©±±µ¹¸·³¬«®²²°°¯©§¨«¨¢¢££¡Ÿ™˜•“‰‡–“Ž‘™ŸŸ›–†„‚|yyywwrpsz†ˆ„„ƒ‡‘’”Ž‡†‚†‰†}z{y|€ƒ‡ƒƒ„}utx}€}yqf^YZVI>7.-0340.143336;9997:::6535:<;>?>>DGGIHIG@875+)-,1389˜—˜ £¥¦§¦¢¢¤¨§¥¡¡¦¯´¶¶¶µ³¶¶¶³®°¸»º¶®ª¬®¯¯¬¬¯°±­­«¯°²²±¬¬µº¼¿»µ³´µ±¯®«­²´¶¼»¹¹¸µ²°¬«¬­¬«²³°¬¨©©¬­¯®¬¨¥£¢¥¥¥¥¢¡ œ—”—£°¼Á¾¹¼»¶¸¸µ²¯«««©©«©©«©«²¾ÅÇÇÃÄÈÊǼ®¤ £§®°¶µ³°­«§£ ¢¥«¯¯¯¬©©ª¯¯¯«°¶º¼·±«¨¢žž£«¬­¬¬¯°«©«­²³´²³³²±²µºÁþ½½º´±µ¶²´´°¯°ª©¯±±°­©«ª©¥¦±¼¾¿º®§ª®±°®­­¬¤”‰žª±¶··¸·³°¨¥ªª¨¥¦¨¥¥§¥¤ª®®¬«ª¨§¦¤ ™¨ª«®°®¯ª­®²¹¸¿Á¿¼¼¸µ´³²¯¯±µ³·»¹¶°¤Ÿ¡¦««ªª§¤§¬¦£¥¡Ÿž›š•”‰…„š–““˜ž   ›’Œ‰„}|xuqniho{…‹ˆ……Œ‘“–‰‡‚†„€{yux{€…‚€~yurvwz{yyria`]VG?5,/468315968:;@?<967=;7867=>==60-+-,-2568==<=DHEJOOMKNMLFCCFJLPUUUPGA;853799:<˜œŸ¢¤¥¤¤ Ÿ¤©§¥¤ ¥­±´³´´´·¹´²±³¸½¸µ­¨«°®­¬®­±´®­®­¯¯´²¯®²¸½¾¿¹¶·²®ª©©©­³¹¼½¹²°°°¯°°²°°°¯³³±°®®°´µ´±¬¨¥£¢£¤¤¤žš–“” ¬¸À»¸µ´´²²²®©§©ª¨§§§§¨«¯·¾Â¿»ÀÅËÈÀ·«¡¦©¯µ·²²±¯®©¢ ¡¤ª±±²°¯¯®±­«°µµ´³®«§§§©«­­¯°®®¯°±¯­«®°³µ´µ³°°¯°¶¹»¾º¹º¶³²²´¸¹²±¯®«©ª¬¬ª©ª«®®ªª°´¸¹µ­¨ª¯°¯¯¯¯¯«¤Ÿ¤«®µ·¶´³¯©«¬§«¬©¤§¦¥§¦¢¢¥¨«¬ª©¬¬«§¢¢œ ª¬ª¨¨§©¬¯±¶¹º¾½»¹¸¶²···º··´³°³´®¥›Žœ£§©ª§¥ª«©¦¥¤ š˜“ŽŒ‰…}›—“‘”™Ÿ¥¦¤ž˜‘‹ƒ~zyvoliit}†Š…‚‡‡‡”‘”†„€~wuusrv{{}yy}xuuususqqohc`]VG>9/0366878=<;=AEE?9::>B@?>>?=<::79899;>BB@@B?=AC=CMRRVWZRLLLPRTWZ]]YOIB>:=>>=<=–šŸ¡¡¡££ž›œŸ£¦§¥£¥¬±°¯²±³¶¸¶´µ¶»¼·²«§¨¬¬¬­®®°²°°­¬­¯³³±±³·ºÀ¾½»¸°ª¥ ¢¯¶¹¼¸²¯¬«¬°³µ´±®®°²°±¯°µµµ³°­¯«¦¡¢¢¡¢ š•‘•Ÿ«¸»¶²¯®®®®­¨¥¥¨©¨¦¦¤¥¦ª°¸À¿À¼¾ÃÆÄÀº³¬ª§¥©±¶´³²²±¯®®¬©®²¶¶¶µ³°±­ª®±°°±®©¥¥§ª¯²²²­®°¯±µµ±¯¯°±´´µ³³°¬®³²µ··µµ¶´²¯²¸¸¶±®ª§¥¨¨ªª§¤§©ª¬«¬®®°®ª§ª±¯®®®¯°²®ª­°³·¹´°«¨¦«ª¨¬ª¥£¥¤¤¦ª¡Ÿ¢¢¥¦¦©¬¬¬¨¤£Ÿ ¨ª§¡¢ª¯¶·¸ººº¸·¸µ±¶¸º¼¼¼¶²­¬­ª¥—ˆ…‘ž¢§ª¨¨¬ª¦£¤£ž›•“‹Œ†|w–˜•’’™ ¦¨¥ ›‘ˆ~zz~zvtv~ƒ‡‡„…ŠŒŒŽŒŠ†€|xwurtvtqtrpprxxxutsrqmgghb_\XSGEA:8:;?@===;=>CIHA<9;?@B?@>>>?>@CBB@ABBBD@?@>?BEBFMSW\\ZURSSVWX\_[\WOJGCACCAB>;–œ£¥¢¢£¤ —–™¥§¦¦§­²°¯²²²´¸¶µ¸¹ºº¶¯ª¦¨¦©««®®°²³³®«¬°´µµ¶¶·¹ÀÆÃÿÁ¸®¦—Šš«³¶·¸±®¬¬«±´¶¸´®­­­«®¯±¶·¶³®­®¬§¥££ ¡¤¡–‘“—ž¬´·²°¬ª©¨©§¤¦¨«­«ª©§§§¨¯·½Á¾¼¹¹¼¿½¼¼º·±«§¦°µµ··¹»»À¼¶´³¹·¸¹¶²°¯ª¬¯®¯±®©¢¤¦«®´²±¯¯±®³·¹µ³¯¯±³··µµ³°²³±²¶¶·´´²°­±·º¹²¯ª  £¦­¬¥ ¢£¨®®­««¬ª§©¯®¬ª«ª®¯³³°³´¶¹¸²§£¤¥©©¨ª¨¢ ££§¬ª¦¤£¤¤¤¥§«­®ª¦¤ŸŸ£¥¢š’“œ¤°³µ³´µ¸¶µ¶²°³·»À¿¼¹°«§¤¦¤šˆ…Ž—ž¥¦¨«®«¥¡¤£žš–“Ž‰{{Œ”˜š•“—ž£¤£¡œ’„zty|ƒ€~|ƒˆ‰‡…‰‰ˆ„~xvrqpqvyxtrljinw{wsrpnqjdba][YUNLKHFABAFJFCA=>>DMOJD@<;=<><;<::=>ABHJLRY]a^ZWXWXXUX\b_[ULKIHLNMKFA<“œ¤¥¤¥¨ª§¡š™›¡¥¤¥©¬¯²²±²³¶¶¶··¹º¸³¯«¨¦¦¦¨¬«®¯±´³®«®´¶¶¹·¶´·ÂÊÉÈÈÈŹª›’˜®¶¹¹·´±®««¯´·¶·²¬©§¤¨¬­²´²±­ªª¨¢ ¡ ŸŸ£¢š”“–©±²¬¨§¦¦¦¨¥¢§§®³±®³µ±°²µ¹¾¿¾ºµ¶ºº»º¹·µµ°ª©°±³³µº¿ÄÆËǼ´µ¶¶´µ¸µ³­¬¬¬¬­²±®©§©­±±°¯®°²®¯²³²­««­³µ¸¹¸¸´³²­«³¹·´´¯¬¬°³¸·µ®¨ž˜ž©¯­¨¢ž¢¦««ªª¨¦§¨©­®©§¦¢¡«±´´µ¶·¸¸®¤¡¢£¦¨¤¤£Ÿš ¤«­­ª«¨¤£¤¤¦­¯¯­«¦¢Ÿ¥£ž““›¤¨¬ª¨¥¨¬°³³³²·¹½½¼¹µ¯¦£¥¤§¡•”š ¢¥¨®¯«¦¢¤£™™–‰‚‚…Š—›™™“”˜œžžœ”tqw€}…‡‰‡‡‚„ˆ‰‰…‚~}{{zwvwvx{wsokhjnvytonkimnhd_[ZXUSOROGGFCFKKFE=<>BMPNIF?;??<;9:<==9:<;78<989:<>BHLLLHDCHB;=9><888:CHELLGFIJJFNSROSTTUY_jhc]ZZ[Z]`\WWRJ’˜žŸž£¨§ª¨¡¢£££¦¦¦ª©©¦ª­¬««®²»¼¸±¬­¦¤¥¨¨©¬®±²´¯­¯µ¸¹ºº·´µ¿ÉÊÆÆÆú³«©°¸·¹º¶±«ª©©®±·¶·´°©¦¢£©­°®ª«©¥¤¤¢¤¤¢ ¡¢Ÿ›™—œ§¬«¤Ÿ ¤§¬­¨¨¬¯³»»¸º»¿¾½½¼½»¸¶´´´°«¥¢ Ÿ¡¨¬®°®§¥¨°»¼ÀÄÄ»´±´³°®²²²¯®®¬­¬±±±±«§¬¯ª£ž¤©¬¬«ª«ª¨©®¯´µ¶´´´´³¯­°²¶³®©¦¥¦ªª¯³±­¨Ÿ¥«¯°ª£££¡¤¤§£ œ¥¦¨¨¦¨¥ž›Ÿ©´´´³¶·¶°ª¥£¥¨­±ª¤¢¡œ£§§¬ª«¤£ ¤¨¯³±°¯­§£§¥¡™–™Ÿ¥®±¯¢‘‘¢®®°°³º¿Àº´±¯ª£¢£¢¥¦¤£¡¡¥©¨¨«ª£œšœ›––—–‹‰‰•›œ žž™”’—˜›œž”‰~wz‚†ƒ~|„„ƒ€}y}ƒ|}‚…ƒ€zywusolcZ\bgllighgeffd_WXYXWTQQKEEB@AGIIBBCCDGHKLKFHJF?>;@GMNJJKIGKIF@@?AIONRUOKIEABKUWVZ[[ZZ`ehb\^`\]``\Y[WS’–šœž¢¢¢¤¦¦£Ÿ¤§¥§©¥¦©§©©¦¤§¨¥¤ª³¹·´±­©¦£¥¨¨­°±´µ´°²¸º»½¾ºµ·½ÅÆľ¹¶¯ªª¯·¿º·¸µ®§£¤¥©°´¸µ³¯­©¡›¢§¬¯«®¬¨¦©©ªªªª§§§¤ œ£¨ª¢ž ¥¬¯°¬­²¶¸¼½¹¹¾¿ÁÁÀ¿¼·µ³°®¯©¢œ™—“—œ¤©­¬¨¢¤ª°´´¹½»³²²²°°±´¯®­¬¬¬¬®±±±¬«¬¯¨Ÿ–ž¦¬°­«¨«¬¬­¯¬¯¯­®¯±±±¯®¯°«©¨¥§©ª¤­²°«¨§¥¨­°°¬§¦§¢Ÿ ¢ž—’¢¥««¯°©££ª¯±¯²¶¸¸³¯ª©¬µÁ½°§¢Ÿœ—˜š¢¨©¨¦¤¢¡¨¬±²³²¬¨¦«ª§¡ž ¨±¹¹®¡Ÿ§³±¬­²¶½º¸¶°¬© ¢¦£¨§§¦¥¥¦ªª§ª¦¡š—˜—˜›š—”’•œ¡££¢ œš’‘–™Ÿ—Ž…z…†€{|€ƒ„„‚€‚~|uy‚„€€~}zvqok`VX]aeecehffgfc_ZX[WTPLJF@BB=@EGDGMLNLHHJKKEGGFGDAAINOLMONMSTOKKLOTVW\ba[UMCFQZ^`ikiebbgf__^`Z]cd`_a\[‘”—›ž¡¤¤¢¥¦£ £©§§¨¦¦¥§«­§£§¨¥¡¢ª³µ¶±¯­ª¦¦¨¨®±²´µ´³´¹»»¼¼¼¶´¹¿¿»µ°¬£ž¦¯¸Â¾¹º·®¢œœ›Ÿª´·µ°¬¬ª¡“— §««®­ª©ª«­¬¬­®®®«¨¦£ŸŸ¢£ ˜Ÿ¥°´¶´³¹¹¸¹¼¹»¼ÂÃÃÁ¼¹µ²°«ªª¢›˜”“‘•£¨¨¦¥¢¤¦¦¨­µ¸´³²³´³³³®ª¬­¬¯­®°±±­«­¬«¡š ¨­²­ª§©«ª«©¤¥¢Ÿ¢¨¬°¯­¬««§¤¦¨­«¬¥ª±°­«ªª¬¬­¯¯ª§§¢œžž›“‹Œ˜ ¥ª¯³·µ®¬®¯°®²·¸¸µ±¯®²ÁÉÆ´£œ™•Ž‹Ž›£¥¦¦¥¤¡¡¨­­­¬«¦¦¬¯­§¤££ª´»¼¸ª§­´±ªª­³¸¸¶´®¨¥££¦¦©©§§¨¥¥¦¨§¦§¡›™—™¢Ÿœ™”‘”šŸ£¤£žš—‘ŽŽ“—œ™”Š€„Šˆƒ€€ƒ„„†‡…ƒ„{vqz‚‚ƒƒ‚}usom^TV]\_cca`aeffc`\ZZ[UOHHDAAA=?ADFJQSRNFFIJGB@CINOMIKLLLNNLIORQOSVYZX[`fig_WMIW^`hpuuqliiga`b`]blokjgba“”•™œž¢¥¢¦¨¨£¤¦¥¦¥¡¢¤¦©«§£¦ª§¢¡¬²²°¯®«¦§§¨¯²±²±²°³¸»¼¼º¹·µµ¸¸±­ª¨¢ž¢ª¸ÁÀ¼¼¼³§ž˜‘•£°µµ®«¬¬¡Œ™£¨¬°°¯­«ªª­¬¯°²¶³³±¬¦ žžœœ ¤°ºÀ¾Á½»¹¹¶µ»ÂÅÿºµ®¬¬§¥¤Ÿ—•Ž”š ¤¤§ª¨ª©¥¥¨­³·¶²±¶²²±¯®°¯¯±®¯±±±¯«­°®©¤§©®®¬§¦¦¨©¥£žš™”—¤©¬­¬©§£¤§¬«¬«§©²°®®«¬¬­©­°¬«©¥£ š•˜¡§­±µ¹¹·´³²±°³¶·¶¶´µ¶½ÄÈDZš“”ˆƒŠ–ž¡¡¤¥¢ž ¦««§©§£©°°¯­­¬¬°·»¹¸±ª®³³¬§§¬´´³°­§¤¥¥§¨«ª§ª¨¢¢¤¥¥¦¦¢ššœž£¢ ˜”–šž ¡›šš™˜’‹‘˜œ—‘†ˆŠ†ƒ‚‚ƒ…‰†……€ztty€ƒˆˆ‚}tmmm^TVYX\`b]Y[`bdd_^ZZWSJGIB>@B???BFIQSOLFEGGFDADJNPRPNNNQTTLILONPQWZ\ZY]cffc_YX_a`hu{zwqopmgdccdkw|wsmhh”šœž ¤¥¦§¢¡¢¢¢¢ ¢¢¥¦©¢ž¤©¤Ÿž£«¬ªª«¨¦¥©ª¯°°®¬©ª³¹½À¿½¶³³´¶µ²­¬©¥¡£¨µ¿¾»ÂÁÀ¶¯¤—šŸ¬¸·°«°°¢–”–Ÿ©¬±²´²°ª®®®¬¯´µ·¸µ·¯¦Ÿ¡¡¢¡¤±½ÅÉÊÆÿ»·°¯µ¿Âǹ³«§§¤¢¡™“Ž“––—£¥§¬°²³·µ±°²µ¸º±¬°®­®®²³²³´®­®¯±°­°±¯­¬¬«ª¨¥¢¢¦©¦¥¡œ˜“•ž¥ª«©©§¤¤¬©«««ª®°±®®¯­®®¬¯±±®­ª©§¢ž™“—Ÿ¦¯³³¸·¹¹·´²¯³´·¶¸º¹¼ÀÂľ©‘‰ŒŒ……Š–žž¡§¥¡Ÿ¦«¨§§§©®±³³³³´´¶º¸¸¸·²±µ¸±ª¥¥¯°­­ª¤¥§©ªª«¬¨«©£¡¥©§¦§¥¡žž£¢¢ œ™˜›œœ˜–——•–‘’”–—•Š‹„}‚ƒ„…‚~}yv{~{€‡…voilmdUVTSVZ\YUW\acdd^XURMIIID=?A??@CBFRQPKGGGJKHEGJMNOQNSUWZ[ROSQORTXZ[XVU]dcdfdcff`fqyyxvrurjjgikq{}yumfjŠ‹’—š™šœ ¡¤£££¢££¡¡¤¤¦©ª¤žŸŸŸž ¡§¨§¥¥¦¥©ª«¯°¯­­§§²ºÁÇÆÀ¹µµ¶µ´³®®­¨£§¬´»¼»ÀÅÆÁ»³¤ž ®¹¹µ°¯°¨Ÿ–˜¡¥¬±´µ¶´±±²¯­­°³´´´µ³ª£¦ªª©¬´¾ÄÉÈŽ¹´¬©®¹ÃÈž´­©¨¦¦¢š’’•›¡¢¤§¬°±µ¶·º½¿¾½½¼¼»°ª«ª¨©¯±±²³²¯§¦¨¨§§«¯¯­«¬§¤¡¡¡¡¦¦¨¥£žš˜“•˜ž¥¬ª§§¦£¤««ª«¯±¶¶´´³¯¬¬««¯±±¯­©¨¥ ”ŒŠ‘œ¤®³´¸¸¸¹¹³°¯²µ¸º¼¾¼¼½½¿¸¦Ž‹“”“’›  ¡¥©¨¤¡¤§§¤§«¯±³²µ·¹¹·¸¹¸·¹·²±µº¶¯©¥«¬­­«¨¦©«¨ª®¬«ªª£¡©¯¬ª¨©¥¡¢£ ¢¤¤¡ œž¡Ÿœ™–™™——”’“–’ŒˆŽŽ‰‚yx}‚ƒ‚€}|zvz|yz†„~slhpul\UTPUXXVV]bfggf_WUQJJGJD@DBAADD?DKMLFFIJJKHGHKMKMNRSWUWWPOVTTXYXYYXVX]diijigjibfrwxzyxwvqmlmmtxwrmlnq‡ˆ“—–šŸžŸ¡£¤£Ÿ£¡¢¡ ¥¨©ª¦ŸŸ›žžŸ¤¦¨¤¡¥¤¦«¬­°°°±®©¥´»ÃÊËú··³³°°¬¬¬¨¦¨¯´¹¹¹½ÂÀ¿¾¶®¥¤²ºº¸µ²®«£™˜ §­±±²¶·µ¶·³®­®²²´´³°«¥§­¯¯±¶»ÂÄÃÀ½¹¶±§¢¨³ÀÊÇÄ»°«ª©©¦œ”—˜¤ª¬­²¶¶·¸º¹º¿ÁÃÄÂÁ¿¼±«­©§©ª¯°²²³­¥¢ žœž£¨«©¨§¦ žŸ¢¤¥§¢¤£ ŸŸžž ¥©ª¨¤¤¡£©©¨­²¹»º¸º¸³®¨§¨¬°°¯¬¨§ ›—‰Œ’§®³µ¶¹º»¸´±­³´·»¾¼¸µ³µ·³©˜–š¡ œš¢§¥¥¨ª©ª¤¢¤¤£¨¬®²²²¶º¾½¹ºº¸¸¹´¯¬¯¶´¯ª¦©¬¯­­©¤¦¦¦¦«¯¯°­¥£§®±­«¬¥¤¤§¢¤¥§¤¢£¨§£¢¡ž˜™›™–”’‘—™•‘‰Žˆ~y|}€ƒ‚~||xwyy{~„…}vnjv€t`WQRWXUU_ejljgcYUROKKHEECGFIKLHFDHGDDDIKLKJIKLMMMPTSRUTRPOOQTWWWW[[\]begijjgijehsv{€‚ƒƒ€||zwv{xpotuyŠ‡Š‘”›šŸž¡¢¦¦¤¡¥¢£¢¢¥¨¨©¤£ž ŸžŸ£§¥¥¥¢£¦ª¬¯±´µ·´¯­µ¾ÃÍÎƺµ²±«©ª¨¦¨¤¦¨¯³º¶µ»¿»¼¾»µ®°º¼½¾»¸µ±«¢ £©±²°®²µ·¹»·³³¯²µ²°°®©«­­­¬®±¶»¾»µ³³³³¬§©²¿ÈÊÄ¿µ­ª¬ª¨¤Ÿ £ª°±´¸»¹¼º¸´¯³¸½ÀÁÁ½¹´®°¬ª©­¯²°³´¯¤ ›šš›£©©¦¤¡ ¢¢¤§§§£¥¦ª¨§§¦¨¦¢¢§©©¥¡ ¦­ªª«²»¾¼¹»»µ©¦¤¦ª¬ª¬©ª¤ ›••‘•¡¦­±¶µ·¸·³²±®°°³µ¶¸¶°®¬­³·±©¥ª©¢Ÿ ¤§¤¢¢¥­¬©¥¤¥¦¥ª¯®¯¯´¼¿½¼º»¹¸´¯§¦¦ª«¬©ª«¬¬¯­¦£ŸŸ£­±³±¨¡¢¨¨¥¥¢ žŸ¢¤¤§¥¤¤¤¨©¨§¦ ™šš”‘‘Ž˜š˜’‘“„‚…ƒƒ‚ƒƒƒ‚€{yvswz}€€…~tprz†gVW[_`]^flopic^WTTPMMIIHHKONRQNLNONQOLORNOLOORSQTVXWXZ\]ZURVZ]b^^adcdefeeghhgigirx~ƒƒ†‹‹Š‹‡€}zyuw}‚„Šˆ‹‘˜ž›œ›œŸ¥£¢¤¤¤¥¤ ¡§ªª©¥¢¡Ÿœž¢¥¦¨¨¥¤§ª®±¶¶·¹¹´°º¿ÆÏÐÆ»´°ª¥¦¨§¨§¨§©¯³¸¸·»»º¹¼ºµ±µ»¹¼ÁÀ¾»¶³¬¦ªª²¶´²µ¸¸º½º¸¶³²³±­¬«©®´³°®®°³·¹´¬§©±·¸µ³»ÂÈÉÅ¿¹°®®¬©¨§©¬±´±³¹½¿À½¸­¥£¬·½¿½·´²±±¯®­®°³°²µ°¤ž›œž¤©¨¥¤¡Ÿ¢¢¥¨¨¤£¥¬®°®ª«°®¤¡§¨¨¤¢Ÿ¨¯¯¬­²¾Â½¹¸·µª¥¦¨«ª©§¨¥¢˜˜—“¨­¯±µµ´¶±­¬®°°±²²¶¶´¯©¥§¬³·²°°­¤£¡¤§£ž ¤«¬«¢£¨¨§§¨¨¨©®·»º¹¸»¸µ°­¤£¡£§¨©©­­¬¯¬§¤¡ Ÿ¡©°´´¬£ŸŸž›˜•“‘–šŸ¤¥¥¤¤¤¦§¦¦§¢›œ”Ž“‘Ž“–‘‰‡‹‡…‚„†„„€yrqnrxz|€€{vtt}ˆlbehic\\jopmf_[VSVRNMKMKJNOQRVTTVVXZWUWRPSUQSWUX]^\YX\cic\]bgprlgddegefffdfggjilry€„…‚„ˆŠ‡…|usy†“‡‰Œ’œžŸ››šš£¢¢¥¥¥¨¤ ¡¥¨©©¦¦£ ŸŸ¢¥¬¬©£¤¨¬²·¶¶¶·´²¸¿ÉÏÌĹ²®¨¥¦¨©©ª¨©­±µ»½º½¼¼¹º¹´±´¸¶·½À¼»¹¹¶°®¬±¶¶¶¹¼½¾¿»¹·²²³¶²­ªª¯¶¸µ³¶´²¶¹²¬¥¤²½ÃÁÁÀÅÆÈÄÅ¿µ²¯­­®¯¯´¹¶­°´¹½ÂÁ½®›¥³¾À¾µ±±²±¯°±°³°®®±­§ Ÿ¡Ÿ¡¥©¨§¦£¡¡¢£¥§¤ ž¥®¯°¬«°²«¥¢§¦£Ÿ£¦­­¬¬±½Àº¸µ´±®©ª®­¬ªª¦¢ ™•šš›¢­±²²µ¶µ²­¨«°³¶´³²·´´¯«¤Ÿ¤©°´²²­¨¦¦¨¨¦¢£¤©¬¦ž¢§©¨§¥¤¤¥§²¶´´µ·µ´°©¦¦£¡§§§©¬°²°¯®«¨¥¤ ¡§°´µ°¦œšš™•‘ŒŠŒ“™Ÿ¢£££¢£¤¡¦§¡žŸž•ŽŽ‹ŒŒŠŠŒŒ”™•Ž‹…€„……ƒ}uonpty{||}€|ytsx~uhjqvqcZ^ikmkaYVUWTQLKKLMHMMSVVVWWX\]YXXVRQTTWX\`bd_ZV[cigb`hqvukc^^a`bfegeefiknpt{€‚ƒ„‡‡ƒ„‚€}wty…Œ˜ž†ˆ‘—ž££žœŸ¢£¥£¥¨§£Ÿ¢£¥¦ª¨§¥¢  ¡¤ª­¦¤¡¥ª®²³³²³´²¸¾ÆÉÇÁº·²¬¨¨©­¬ª¦¨¬®³¹½½½¼¼½¾À¿º¹»¸³·¸´´¶¸»¸³¯±µ·¸º¼»¼½º¸¶²´¶···±°´¸¶¹·¶·³¶¸³¬©«·ÅÌÊÉÇÆÇÆÇÅ¿¸³²±°³´¶¹»¸²®±´·¿Â¾³£˜¡°¹Ã¿¸²®°¯­°³²°¬©«¯ª¦¥¤¡ ¤¦§¥§§¥¢¥££§§¤Ÿ›œ¨°¯­¬°´°¬¨§¦¡¡£¥¨¨¨«±¹¼·´²²°«ª®¯®±­¨¥¡žœ›œŸ§±µ·¶··³°«¥ª²¸¸¶¸¶¶¸´³°§˜›£©­¬¬¨§¥¥¥¥¥¢£¤¥¡žž¦©¦¢Ÿ  ¢¦¯³°®¯²±°­©¦¤¢¤©¨¥¨§­²µ´³²¬§¢ž¡©­±´¯¨ ™˜š˜‰‡‹’˜ŸžžŸŸ¢¡¢¥©§ ¡¡–‹ŒŠ‡‡‡‰‡‚Š–—•‰†ˆˆˆ†‚zsrwx~€€~yrqigg]dvvlb^_fjjh]UW\[WRNKJKJHKOVTTUZZ]^`[[[XSNRSW\_`^^[TSZ`egdclrsk_YW[__bfkjifgkoqty}ƒ†‰ƒ€€ƒ…„ƒƒƒ‰–ž¤Œ“™Ÿ¡¡ žœ››¢£¥¥¨¬«§¢ ž ¤¦¨ª¨¤Ÿž ¤¤©£¢¤¡¤¦©«®®­®¯´¹½ÂÄÁ¿¾¹²®ª©¬«ª§¦©¬°µº»»º¼¼¿ÅÆÂÀÀ½¸¹¸±°²µ¹ºµ®±´µ·¸··¸¹·µ´²³¶¸·ºµ²¸¹·¹¶µ¶²³·³°®²¼ÊÎÍÊÉÆÅÃÃÁ¼·³²±±±´µ¹½¹µ±¯±µ¹¾½·¬ ¤®ºÀÀº²¯®ª§«®¯­ª§©¬ª¦¤¤¡Ÿ ¤¤¥¨ª¦¦¦¢£¥§¦£Ÿž§¯²­¨¯²±°ª¥¡ ¢¤¤¤¤¦¨¯µ´®®­­°®®­­®¯¬¨¦££¥¥¦§¨°´¹º¹·´±®©©­µºº¸¸·´±®°±¦šŽ—Ÿ¥¬­«ª§£¦¦§¡ žœŸ¤¨¤ŸžŸ£©¬ªª«¯®­«¨¥¤¡£¨¦¢£¤¬±³³²¯«¤ œ£©­°­§¢œš›˜Žˆ‰Ž”™œœ›žŸ¢£¥¨­¨¡¢Ÿ—‰†Œ‰‡†…y€’˜“’“’‡„„†…†ƒ}wyyx……„€}ytpe]_Zcrrga]_aggg_Z^a^]TMLJKIGINRTUTWW\_]Z]`[QLKPW__\YSQPQW]cbbiptvnd``addgnrsrnjorvy|‚‚„‡ˆ‚z~‚„ŠŒ‹‹™ ¥””—ŸŸ ž››ž¡¢¤§ª¬±²­¥ œœ ¢¥¦§£ œŸžŸž›žœ ¡¡¦¤£¦§«²µ¶½ÁÁÀ¿·²«§§ª¥¢¤¢§©­´·¶³¸¹»ÂÄÄÃÃÁ¿½»´°®²µ¶²°±³µ¹¹¸µ¶¶±¯¯¬°²µµµ¶µ¸·¹¹·º¸µ´µ²±¯´¿ÊËËËÊÅÁ¾»¼·²°®¯­«­°¶»»µ´°¬­±µº·²®«°·Á¿½¶°­©¤¨¨©¨¤¦ª®ª¥¤££›¤¤¨ª¦¦¤¢ ¢©««§§©°³¯¦ª­°«©Ÿ¡¢£¡¢§©¬®¬¥§©­®°¯¯ª«¯«¨¥£¨¬¯³¶¸·¶»¸µ²°®ª©«°¹½¼»µ²²««¯°§–ˆ‡™¡«´¶¯«§©ª©£Ÿ˜™›ž¡¤¢œ›œž¢¤££¥ª«ª©§¤¦§£§¤¡¡¦¬±¯¯®ª¤¡ž—•™Ÿ£¦§¦£žŸ—‰Œ‘—žžœ™œž £¦¥©©§¢ œ•ˆ…‹•—‘‹ˆƒyp~“™—–•Œ…ƒ‚‚€|zz{zƒ‰†…ƒ|wsmfa^bhppf][[`ffb__bda]SMGJMJGIMOSSRSUXZWV`a\PHFN]`_\YSLKMU]``bmu{€{vqlhjgmw~|yzvwx|‚€„†††„ƒ€††…Œ’“•™œŸ¤›™žž ¢¢Ÿ¡££¦§§«®±³¯ª¦›—œ¡¢§§¤œœš•••—˜˜››œ™—”™œ¢©¬¯²¸»»¼¸³­¥¤¤Ÿ› ¡£©¯´²³´´µ¹ÀÁ¿Á¿½¿»¶±­¬±³±±²²µ¹¼¹¹¸¶±ª©©¬±³µ´³µ·¸¹¾ÀÁÀ¹µ³¯¯¯³¹ÄÇÇÈÅÁÀ»¹º¶°®««©¤¡¦¯·º¸²¬¦¥¨­´¸¶¶³²º¿Â¼º´¯«§¤¥§¤¢£©­¨¤¥¦¥ ›š¡¦©«¨¤ ž¡¨­°­¬¨°²­©¦¬­©£ ›¡££¢¤§¨¨©¦ž£¥ª­°°¯ª©¯­©¨¨¬±¸»Âÿ½¹·´®¬«©«­´º¿¾¹´°¬©ª­±ªšŽ’—¢«·Á¼´°®­­§–”•™›ž¡ Ÿ ¡Ÿš—–•“˜ž¢¦¦£¡¢¦©«ª¤¢§ª¯°®®«§¡¡”Ž’—› ¢¥ŸŸš“‹ŠŽ”™ ¢ ž¢¢¢¢¡ ¥¦¢¡›–ˆ‚šž›•Œ†{q€”œ›™’‹‚€€€}~|}}~€…ŠŠ„€zsoiccgjnrlc]Z\afhcZ^ba^[SKHLNNJMPPRTRNRTSOU_d\SIHT`cbc_YUORY]``cjvƒ„€zsstpr{|yz||}€„†€‚‡‡‡ˆ‰ŽŽŠŠ˜ ¢££¤¢¡¢£¢žœ ¡¤£¤¥¦§¨©©¬©­¬©¤›–™›ž¤¤ Ÿžž™–””–•˜›š‘ŽŠŠŽ”¡¥©¬­­²´µ´¯©¤¢ž™–šœž¥­µµ³²²¯±·º¼»»¹¼¹³¯«ª¬±²²³²µ¸»¶´µ¯­©¨¨ª®²´µ¯³µ·¹¿ÅÅÀ·±°®¬¯°¶½ÀÂÁÀ¾¾½½½¹µ°®ª¨Ÿ–š¢®´³¯¨£¡¦¬®³¸¹»»½ÂÄÁ¾¹³¯ª§¨¨¦¢¤¨«¦£¥§¦¡¢§©ª¦£¢žž¡§«®±¬ª¯±­ª«­®«§¢Ÿ£¥¤§¨§ª¨§¥¦£¢¤§ª¬®¬©©®¯««®°·½ÁÄÆÁ»·¶´¯«ª§¨¬²·¹¹·µ±«©­µ¶¯¦¢¦«±·¿ÆÇź³±­ª¥•’‘”—šŸ¡¢£¢Ÿ—‘‰ƒ„•ž£¤¢¢¤§®°­©ª­¯³´¯­¬§¤¡ž˜’‘—›¡¥ š˜—‘‹’—¡¡žž¡¡Ÿ›—™œ£¥£Ÿ™Žˆ› ¢š“‹€}†•œš–‰……„~||{}‚‚‡ˆ‚~|}{smjfgnqwsle^_`cii`W\ba^]YRNLJKKPSRRTRPTTOJNZ`^VQPYbddfb`\Y[acbcegnuy|{yx{}zy{zxyz|}‚ƒ†‚}€„…ˆ‰Œ’‘Ž—¡«©¨¨¤¡¢§¦¥ žž  ž¡¡¤¦¨¨©¦§©¨¤™““–™¡ŸžŸžžœŸŸ›ž™ŽŠ†‚‰‘›¤«­®¬¬­®ª¨¥¤¢——š˜˜œŸ¬¶µ´´´±³µ¸¸¹ººº¸´±«©¬®²³²±µ·¸¯«ª©ª©¨¨ª®²µ²°¯²²·¹¿½·®¬­°µ±±´µ¹¼¼¸·»¿½¼º·³°«¥›’•˜¤°°«¥¡¥§ª®±¸¾¿¼ÁÃÄÁÀ¾º¸´¯¨¨§¦¨ª«¦¤¢¤££Ÿ¥¨ªªª¨¦¥£¤¨ª«±±®¯±°ª«­®ª©¥¢£¦§¨­®«¬ª©ªª¥§¨¨ª©¥¤¤ª¯­­±´¹¾Áÿº³²°­ª¥£¤¥ª¯´´µ´°««´¹º¸±°²¸¸¶»ÀÂÁº´³«§¢š“Ž‰ŒŽ•š ¢£¡—’Œ„|Š“£¨ªªª­±²°­­®°µ¶²®¬ª¦¥Ÿ›––˜›œŸ¡Ÿ˜•’Ž”—šœœ¡¡Ÿœ™”•œ¢¤£š“Ž’œ   ™Š‡–š™–‘Œ‰‹†~~{x~„ƒ€ywxxurpqsnptusld```aifZTY`a^^\URJEFINQQORTWVXRFJW_^\YT\`aceca`befihdchgjquvvx€~{}{z{}~€„„‡„€‚„…‰‡‰Ž‘“Ÿ¬¯ª¨£Ÿ ›ž£¢¢¢Ÿž™˜—›Ÿ£§ª¨§§§¨¤™™–•œ ¢¤¤¤¥£ ¤¥¦¤§¤¡›•’’š¢¬¯­©¨§©§¥£©§¢›–—œž ©¯¶¹¸¹º··¹º·¹º¼¾¼¸µ°­­¯¯°°°µ¸µ®¤¤¦¨«¬¨«°¶¶¶²®¯­®²µ²­¦¦¬°¶¶µ··¶»¼·³¹¾Á¼¸´µ±¯ª “‘•ª««©§©®±³µ¸½¾¿¾Ã¾¾ÁÀÁ¼¶­ª§©¨ª­¨¢¥¡¢¢¢¢¦¥¨©ª«¬¨¥§§©­³¶°®«¥¡¡§©ª§¢ž £¥¨¬®°«ª¦¨¤¦¦¥§§¤Ÿ™™¤­±²µ¹¸º¾ÄÄÀ¹²®°®©©§£¢¦©ª¬±°®®´»À¾»¶¶ººº¶µ¶¹¹·³¯ª¦¤ž„{|ƒŠ™ ¡œ—‘ŽŠŠ‘›¢§«°³¯¯±±®°¯®¯±²®««ª©¤£ ›˜š——›™••“•–™ššœŸŸœž¢¤ŸŸž›œ ¡¢™–•’™ ¢Ÿ™““™›™–ŽŒ‰††„€{y}€€zwvqpjgluuqkkllfcea_acd^SZ^\Z\]YSLDGINNNNRNLOPKFHU\\\[VY[\_bgfggkklmlkjkekqqns{}}~}€~‚ƒˆ‡‡ˆ‹ŒŠ‹‹‰Ž•š¥­®ª¤Ÿ¡•šž ££ ž˜•–˜Ÿ£¥©¬¨§¦£ŸŸš–›ž¤¦«¬¯ª§§©©ªª©¦¡œ›–•š¢¨¬²­§¤§ª§§ª­©£Ÿ—˜¡¥®²¶·¶··µ·»·µ»¼¿Á½·²­ª©¬­«©¬¯¯®¦¡£¥©¯­©ª±³·¶±¯®¬«­¶²«¨§©®³´¶¹µ·º¼¹¶ºÄÊļ¶³¯°ªŸ“Œ•¡¨«©©­®²··º¼¾½»½½º»ÁÄÂÀ¹®ª¬«©¨«§¤¥¡Ÿ££¦¨¨§ª­®­§¥¦¨ª®³¶¬¥™ŽŠ‹˜¢¥¤Ÿœ¡¦¦©ª©¤¡¡ŸžŸ£¦¥¦¢›••£°´¹º½¾º½¿¿º·³±±®­¬¬¥¢£¤¤¦«®±µ¼Â¾¸¶³·¼»¹···¸·±®ª§¤¢—ƒvy|…Ž›œ—’“—›™¢¦¨­°²°®¬¬¬«¬ª¨«««¦§©«¥¡™˜˜——™š—–˜™šš˜šŸ£Ÿ¢¥¤Ÿž ¡Ÿ›––‘’”–œ¡¡Ÿ™“–˜š–‹‰‰…‰Š…‚}|…€~yzytncclsqmdadcacc_]_ca`Z\^WUWYUQMFINPQRSRKCABB?BNSVZZUSWXX^ffeimmmmmkkihmspmry}~}~}{xz~~‚„‡Œ‘‘ŽŒ‹‰‘— §¯°ª¢¡ž¡Ž‘˜Ÿ£¡žš˜–—š›ž¢¨©§¥£¢ žŸšš›¢¥§¬±³­©ª¨¬«¬¦¤ Ÿœ ¥©¬¯¯¬ª¬­©¬°±¬¦¢¡Ÿ¡¥«­²¶µµµ¶µ¸º···»¿¿¸³¬§¤§©ª¨¤§ªª©¤¡£¥¦©©§¬°±µ´²°¯­«±µ´­ª¦§«­²¶···¼¼¸·¿ÉËÇÁ¹±¬«« –“˜¡¤£¦¨«°³µ¹½¿¼·¹¹·¸¾¿À¼·¯«ª§¦§©ª§¥¡ ž£§©©«¬¯²­§££©®°³´«žˆwov†“¡£ž˜š  ¡¢ž›™š˜˜™Ÿ£¦§ š“–¤°µµ»¿À¿»º¹µ³°°®°¯­¨£žžŸŸ¦«­²·¾Æúµ³±±³´´´²±²³°®«¨¨¥œ‘„€‚ƒ€…’š–’’— ¥¨¥§¨ª®°­¬ª©©¦¥¤¢¤¦¥¤£¥«°ª¡—“––™›š™œ››˜˜˜›Ÿ¢¤¥£žœŸŸ  Ÿœ—–“’’’—Ÿ£Ÿš–––—’Œ…‡„…ˆŠ‡‡‚‚††…„„}upllptsogfdc`bb_\]^^_\ZXVNRTPKLGQWXX^a_YPIJKFFOVTX\XUZZZ\bcagmnlkhhjjinoooqy}|{|{yvv|}{ƒˆ‹’ŽŽ“˜›£©¯®©£  £Ž“™ž¢¦¦¡œš™˜™›¡¥¤¡¢¡ ž›š›žŸ£¦¨¬±¯«¨©©©ª©©©§¥¡¦©«¬­­®®¯¬«¯±±¯«©¦¦§¨§«°µ¸µ¸¸·º»···¸¼¿·­¦¢¢¤¦¨¨§«¯®©¨¥¦¤¥¤¥¦©®±³¶´´²®«±·µ±­©ª¬¯±·¼»»»½¹·½ÄÈÆļµ­«¨¡›™“–™¢¥ª­±´¹½½¸µ¹¹¶º»»¼¹·±®§¦¢¥«­ª§¢ŸŸ£§«¬­®±±­§£¥¨­°²°¨œˆmlq}— œ”‘’“šœž–’‹”œ¡©§¢™—œ§´²°³º½¼»¹³±­¬«¬®«ª¥ ™•™ ¤©©ª°ºÄû¸²°®¬­¯®­­®®®¯®ª§¤¡œ•ŽŠ}€Ž–˜——œ¦ª­«ª¨­²²¬¦§ª¨¦¤¡£¢¡   ¤¬±ª¡”‰Ž””–›œ™œžœ Ÿ›—–—›Ÿ£¥¤ œŸžŸ›œš—–––•› Ÿš—”“”’Š‡ˆˆ…ˆŠŠ‰†„†Š„‡‰„€~uruwz}wqlhec`bb^^[WZ[YVWPLRSONMHT^\]akoc_[Z[XV[\\^b^\_^^^`acfmqljkjmmjhlnorvz|~„~}~„ˆ‰‰‹’’‘“—šŸ¢£¨­«¦£¤¥ª‘”˜ ¥©ª£™—–š›ž¡£¢¡¢¤£¢¢ŸœŸžŸ¡¦¨¨¨¨§¤£¥©«¯¯«§©¬®­­­­¯¯®««­®®«¨¥§¨£ž¥¬¶¸µ··¹º¼º¹¹»»¹±¦žš™Ÿ¥©¬¬±µ´¯­ª©ª¨¥¢£©¬±´·¸·´¯©¯µ¶²¬ª¨¬±¶¹¿½¿»¼¼¸¶»¿ÂÁº°­¨ šœ—‘’•¦¨®²³·»»¶²¶¹·¸¸··´±®ª¦¤ £¨®­¨£ŸŸ¢¥§§ª­­±®§¤¦ª­­«©¡—†wz~„š¡ž—’Ž“–š™„€ƒ~„›¢¤¢™—Ÿ¬±±­¯´·¸»»³­¬ª©¨©¦¤¡›Ž‘š¡¥¢¡¦¸Âý¸³«ªª©©¬­®­­®¯¯ª£¢£ —’’…}Š•˜˜˜› ¨­­«¬²´³§¡£§¨¥¤¡£¢ ž ¢¨®°ª¡“‹““‘–˜˜™›š¡£Ÿœ˜•™›¡¢£ Ÿ›š›žœšžŸžœ››™šŸžž™”’”“ŽŽŒŒŒ†…ˆ…ƒƒ„€„ˆ…‚|tuu|{xtlfcb\\_`[ZXUUXVSQMNRSNMNJT[YX]diecfdfcadfddeb_aa`]`adflojnmmoqpoqquvx{~…†Šˆ…„††……‡ˆ‡‰‘‘’–š £¥©­«¨¦««®•––—Ÿ¥¦¤¡——–”™žŸ¢¥ ¡¢¥§§¦¤¢¡ ŸŸ Ÿž¡¡¢¥¨¢›™œ¢«¯°±¬©©±°¯®¯­¯­¨¦©ªª©¦£¦§¢››¨µ¸µ·¹º¸¹¸¸¸¸·°©Ÿ•“– ¦¬¯¯´¶·³°¯°°¬¥¢Ÿ¦­°´µº¹µ«¨ª±µµ¬¥¦©®µ¹»¼¾¼¹º¶³µ¹¾ÃÄ¿µ­¨Ÿšœ˜ŽŽ’›¦ª­±²´¸¸µµ¸¼·¶´²°­¬©¦¨£Ÿ¢§«©£¡Ÿžš£¨­¯­¨§¨«©§¢ž›”ˆ€„ˆ”¡¥£•’’——‘„xsvwuz…‘œ ¢›š ¥©«ª¬³µ¶ºº¶¯«©¨¦£¡ ž—ŒŠ”ž¢ŸœŸ«¹¼¶³­©¨¦¦£§¬®°¯¯®®¬¥£¢ Ÿ–—–Ž„‘—–—›œ¤¬­®¯²·³¦ ¡¢¤¤¢ ¤¡Ÿ¢¢¥­±±¬£“‹Ž”••–™™œ¡¢ žš•—˜™Ÿž›™—š›—šž£¢žœ›œ   ˜”•Ž„~{}~|z…„€{utvvtmid`\[YX\ZWWVWWTTUROPRRMLSSTTQPUY\chhimlhmmhegb_bb[]bhgkmmimrruz{zzxx||}ƒ‡‰Š‡‡‰†…~ƒ„‡’••™ŸŸ¤¨ª¬«ª­­¬¬™˜™—œŸ¢ š•””“–›œ¡¡£ ¢§©¥¥¡ž £¤¦¥¦¥£¤¤¢§¡˜˜˜ž¨¯´³±«¨­±²±°¯¯«©¤¥©¬¨¢¢¦«§ Ÿ¦±³²²¶µµ¶´µ´µ°ª¥š–œ¥«¯±±²³³´²®±±«¤ž›¦¬°²µ¶µ®¨«®´¶­¡ž¢¨¯´¸¹ºº¼¼¹¶·¸¾ÃÅü³®¨¤§¨£—”•©««¯¯°´·µµº¼¹¸µ¯­®¨©©§¢šœ¢¦¥¥ š”Š•£¨©§¥©©§¦¡›–’ˆ†‹“š¤­¦ ›˜—š˜‹}smops{€ˆ•ŸŸŸžž ¢¦¬²³²´µ°®«¨¤£¡ŸŸž—˜ ¤£  ¢ª­©¨¦¡¥££ŸŸ¥ªªª¦§§¦¥¤£¢ž–™›‚‚‹‘•—˜›¡¬®­­´´¯¤Ÿ¢¤£¢£¢£¤¢¥¦ª¬¯®©¡”‘’“’“–˜˜˜˜œŸžŸ•–—–™œ›˜—•˜™”•œ   žž ¡¢ž›™”’“Ž‘’ˆ~vvtsxzzwux„„~xrsrnhecbb]\[Y\YXUXVWWVVUQOQSNOVZWSPPTUW\`ejnnklnjihcaef^`hlpnnolprv~‚‚‚~~‚‚„ƒ†Œˆ‰Šˆˆ„€…‡‹Ž”–™›Ÿ¡¡¤¨ª¬¬¬®°¬­šœ›˜›™–“”“’—˜› ¡¡¡£¤¦¤£¡¡¦©ªª©§¨§§¦¥ Ÿ£ª±¶¶´®¨¨­±²°°°¬©¥§¬°ª£¡¨°®¨§¦®¯¯±±±³³´²²°­¨¥¦¤ £¦­±³³´µ³²±²¯®ª¥Ÿ–˜ž¤¬¯²²µ³­¬­³´®Ÿ™£¨¯¶¶¶¸¹º¹º··¼¾ÄÅÀ¸¶³²²²­§ž”™£­«©«ª¬°²´µ¹º·¸´°­­«¬«§£ž˜™ £¥£Ÿ•‰x|‹¡  ¢ª­ª¤žš•Œ„†‹’˜š¨®©£žœŸ™vplsxx}†”ž£¡žŸŸ ¥ª°¯¬­¯«ª¨¦¦¢¢ Ÿ –‘“›¤¦¦££ š™›˜™›Ÿ¡¡œš¡¢¡ž™›Ÿ£¤¦ ›™ž–†}„Œ‘—œž£¬±­ª°°ª£ž  ¤¤¤¡§¥¤¥¤¦¨©¨£–“•“•––˜™››˜š ¡¡›˜–™˜—š˜–”–™™““˜œ›šœž¡£¢ œ›˜“”•”’”“†{tqpsvwvqqwƒ~uppniiebeea^\\\\XXTVXXUVSOOQQNNW\ZVTVZ[[V[^fmnklprrnifikgdglnmomovv{‚ˆ‰‹Š„ƒ†††ˆ‰Œ’‘Ž‹‰ŽŽŽŽ‘‘’•™™Ÿ¤£¢§©¬­®±µµ²°˜››™›šš—“”–“”–•™Ÿ¡¢¢¥¥¦£ŸŸŸ¢¤¦¤§¨©©¨¨ª©¦¨¦¦ª¯³´µ®§¤¨­±°­¯¬ª©­°¯­§§«³´­©ª®®­®°±°´³²±¯¬¨«­¬¦¦§ª¯²²µ·¶µ³±®¬©¨¥š“—ž¥¨«­°µ³¯­³´®¥œž¦¯¶´±²µ¶¸º¸¶·»ÀÃÀ»¹¹µµ¶µ¯¥ ©¯«¥ŸŸ£¦¬±·¸¸¶´±¬«¬­­«¦¡—–šž¢¢š‰~wsvž¡›š£­°­¥ž™“‡~ƒšŸŸ¡¦¨¨¤  ¥ ™Œ€xsqx~}}ˆ”žŸ¢¡¢£¢£¥¨­«¨¦§¥¦§§¦£¢ž ž š™—ž¦©§¤¡š‹Œ‘–˜œš˜–™œš””›¥¥¡›œž¡£‹„‹“›ž ¥­°­©­®§œœŸ£¦¥ ¤¥¥¤ ¡¢£ ›—‘“–‘‘–š™™žœ›Ÿ¤¥¤›”—š›š™––”˜š™•—˜š–”˜œœ£¤Ÿ›™—’–™˜•˜”‚zsquvvuqlms~{vqolmlmlifb[Z[\YXYSWWWSSOOQRTNLUZUUY\`b]Z[aekommpyzsnmnokgdgijmps|~‡Ž‰ˆ‰Š‰‰’“‘‹Ž•™ž›•’”™œ ¤ª¦ª®°²³¶º¼¹´–™š›™—–•••””–˜—™£¥¨¨©¥£¡£¢Ÿž¢Ÿ ¢¤§ª««­ª¬¯¬ª«ª¬®°­§£¦­¯¯®¬­¬®²¶¶´²°³¶´³¯±µ´°¯°¬®°³±®­¨««¯®ª¦¦©­³²µ¸·²±­ª¬¬««¢•’˜ ££¥ª«¯±¯´º´¯©¦£ª³¸·³¯°²µ¶·´·¸¼¾¾º¸µ·¶¶¶³ª¢£§§¤–Ž“™¥¯¶¸·²±­¦§©¬®«¨Ÿ”‘•¢ž—ˆzy‰˜§¢›™ «³­§¢™|ƒ‘ž££ ¡¢¢¢¡£§¤˜‡zsuy€„††‹™ ¤¦¦§§¥¥¥§§¥¥¦¤¥¥§¦¤¢ž  Ÿž›œ£¬¬§¡˜Œ†„Š•—•—™—’•–š ¢œ™¤£š”˜Ÿ¦©£—‘Ž“šŸ£¦©¬°«ª­¬£˜š¡¥¤Ÿ £¤¢¡ž™–‘Ž‹‡ˆœŸž¡££§©£™”˜œœ›™–“–™œ˜›œ›“‘–›ŸŸš››––›š—–’‹~tsw|}}unllpu{wrommosurkeZSY\^]YYXTWWSQOOTUPONPSQOX`fcb`eiklokkqvxunlmoif`_bhns{ƒ‰Œ’’ŒŒŠ‰‰†Š’‘“‘˜¤£¡¢ž™’”š¡¢¥¬«®·»º½»½À¼¹”˜œ›˜“•–””•–™˜—™£¨¬«ª¦¢¡¤¤££ŸŸ¡¢¤©©ªªª¬®®«ª©©«®¬ª¨«¯°°¯±±²´¹¸º¼¹¶º»¸¸¸·¹µ²±°««¯°¯¬¬©©«¯­¨§ª¬¯³³¶´´°®©§¦¨«¬¢•Œ‘£¥¡£¥©­±µ»ºµ°«©­´ºº·±¯­±³µ¶¶¹¹º¸·¶¶º¹¹¸´¬¢ ¢Ÿ•‡Šž¯µ¶´±­ª¥¦¨­®®«¤™˜œ›z{Œ—£«¢™˜¢«ª¤ž“‡|wŽ˜Ÿ¢Ÿ¢£¢£¢£§¡–‰|v|…‰‹Œ“¡¡£¤¤¤¥¤£¤¤¤¡¡¤¤££££¢ ¢ ¡ ž™¦¬®¨Ÿ“ˆˆ”•™“‘”‘’’–™ ¤£Ÿ£¤¡” ¥©¥¢š—™ ¤¦§ª¯®««©¨£›–™—¢Ÿ›œ¢¤¡ š™š•“‘’Ž„|‚‹˜Ÿžœ £¡§§ ˜–œ›œ™•“”›ž¡¡™““’–˜›šš™˜””—˜—•’Š~wz{~|sqsrtpprnjjlnrvrkaXS\gi_ZWTTXYTPONQQNNNLMMNU`aa_`fljhggghmpqljnlheb[_isuyƒ…‹‘”‘‹ˆˆŒŠ‰’‘‘•˜œ ŸŸŸœ—‘’š¡¢¤©¬³¼ÂÿÀÀ¿¼—žŸ››˜–”•”––—™˜˜œ£¦©¨¥¤¡¡¤¦¦¥¤ ¡¢¤¨ª©«¬«©§¦¨§©ª¬¯°¬­±°°²¸·¶º¾¾¾Á¿¼¼¾½»¹ºº´°¯­ªª­¯¬­«¬ª«««¥¨©¬¯²±µµ³°¯ª¨§§¬¬¤—‘™¡¤Ÿžž¡¦©°·º¶±«¨©°¸º·±¬¬¬¯±³¶¹¸¹¶·¶¹½ÃÁÁ¼¶¬¥¡œ”Š‰’ ¯µ´¯®ª¦£¦§­¬®­©Ÿ™˜›—‰}w{ƒ’§¨ ˜—› ¤££›Žxy~…Ž–Ÿ¢¡¢¤¦¢£–‡†‰Ž‘‘Œˆ–¡¥¤Ÿœœš› ¡ ›œŸ ¡¡£¢ ¡£¥¥£ ›š¡¦««§žš—––˜š˜—‘’’‘“”—¢ ¡¤¡›‹œ¢¥§£ž ¡¦§¨«®­ª¥¦§¥Ÿœ–’˜›™–› ¢¢¢¡™–””’ˆ€~Œ–šŸžŸ¦¥”—™›œ›˜–––˜œ¡¢£œ”‘Ž’—˜—““‘“—˜——‘Œ}}~€}vtxzzulipomnnlquqe^VUbstg[URWYYZUOPPNMOPJIIIQX\]\[agea``]`gonmkmkie`^fw‚‚€…‰Ž“•–‘ŽŽ“””•“”“—š™˜š™˜˜›žž–˜¢¤¢¥ª±º¿ÂÁ¾¾À¾¦¥ š–“”“”“–”•˜œ¢¢£¢¡¢¥¨©ª§¨¢ŸŸ¡¦§©©­«§§¢¡£¦§©ª®­¬°®®°´´µ¹¼ÁÅÆÆÄÀ½¾¾»¸¹µ±®«©§§§¨¨­©¨©¨¦¦¥¦§¨«­¯±³°®¬ª§¨¨¬®¨šŽ“š›—–šœŸª²µ´°«¨§«³·´±¯²±±²³´»·¹¹¶¶¹¾ÅÉÇÈ÷¯¦ ž˜–“““¡¯±°¯°­¨¦§«¬­®¯¬¥žŸœ‘‚vrvƒ‘œ¡¡˜—šž¡ ¡ €{}€‚†œ £¦¨¦Ÿ›žž˜’•–”Œ„”¤¦¢•’‘’™Ÿœ––˜ž¤¤¡¤¢¢¤«¬«¨¡ž¦­®­¨¦¤¤¤ ŸŸš˜’‘Œ“•œ  ¡¡¡—Ž•› ¦¦¨¥¡¤§§¨¨¨®®¦¡¥¦¤¤¡™‘’•˜—›Ÿ¥©¨¦¡ž–‘••ŽŠ†ˆ˜œŸšŸ¥¥™“’—˜˜—˜—™—“— ¥ž—‘‘“‘—›•Ž’–š˜–‰†‚ƒ€vrrtyyrhjqssrpkkpi_]VYjxym]WXYY[XUNNOPMPOJCGHJMQVYX[ehbdc\]gloknmjgc^`tˆ––Œ‘–™™•’’–š›—•’–—œ¡ žœ›™šž¢Ÿœ› ¦¥¡¤¤«¶»¿¿½¿ÆÈʦ¨¡ž›™–˜˜––˜—••› Ÿ  ¡£¨ª©ªª¨¤žž ¢¥¨ª««©¦¢ ¡¢¢¢¤¤¥¨¬¬¬¯±±µ·¹½ÁÃÅÄ¿»º»¸·²­©§£ ¡¡  ¤¨¦§©©§§¤¤¥¦¨¬¯´³°°®«©«¬¯¯©””’’‘•—ª°°¯«©¦©°´¶´³¸¹¶µ¶¶¸¹¸¹·µ´½ÁÆÉÉĽ±§¡š›˜”˜¢®±°¯­«§£§ªª«­¬¬ª§ ™ŒylntƒšŸ¢Ÿ£¢££ žŸ•…€…„ƒ‚Š™¤¨¦¨©¥œŸŸ˜Ž–—‘‡Œ™žœ“‹Œ“š™”–œ ¦§¦££¢¢«®¯«£ Ÿ§³´³¯®­©¦££ž™“ŠˆŒ’™››œœœ—’‘•œ ¢¥¥£Ÿ¥¦¦¦¥¦§¦¢ ¤¥§¥£œ”–˜šž¦«­®¬§Ÿ—‘“——ŒŽ“—™Ÿ¡œ™ ž˜‘“—˜˜—•••‘‘›Ÿ™•‘“““‘’˜œ–ˆ‹”——‘ŒŠ‚‚†‡~vmnuwsoigpsppnjjid[YUVhrpg^[\_b_[UKKNRORPHDJGIPUZ\\`ejfghgeklnknoifc`bt›˜ŽŽ‘”––•’–šžŸ ›—šŸ¥ª¨¤¡¢žŸ¢ ž›œŸ££¡¤¦«³ºÀÀÁÇÍÔÖš¡¤Ÿœš™—˜™››šžš™žžŸ £¥¥©ªª¨§£¡Ÿž¡¥¦ª¬®ª¦¤£¤£¢¢¢£¥©­ª°¯²¶µ´¶·º¿À¹µ¸¹º¶°§¡žœœ˜—Ÿ¥¤§¨©©¨¦¤¤¥ª­±µ´²°¯«¬«®°®©¡™“‹…‘Œ” ª­­¬ª¥¥¬³³²³·¶¶µ´´³¸»º¸¶µ·»¿Âƽ²«¢š–›˜˜œ¤®°®««§žŸ¥¬««­ª¬¯¬£œ˜…tagx‡—ž©¬««¯°­ª¥£ž—‰†‡|“£©§©­§££¦§¢•”‘€|‘ˆ‡„}…–œ£©ª©¤¥¥¥©­°«¢››¢°µ³³´³­¨¤¢œ›’‹‡ƒ„ŠŒ••––•–“‘“–› ¡¢¢Ÿ¡££¢¡¡ ŸŸ£¨¨©¥ ˜”•š ¥¬°°­­ª¢š˜™›—”˜—˜£ š”–˜•“‘–š˜—•”““ŒŽ–™–’‘””’–›œ’Š‰‰Ž‘“‹‰„ƒ…~smptvpldeljgkjhfhd\XXZajha_`\^ab\VLJNQPSOFBEEFQ[aecdkkihkoooqrnnmga`aevŠ’‰†ˆ’“’”œ ¦§¤ œž¢ª®­§¦¤¤¨¥ ž¡¢££¢©­´º¾ÀÃÉÑÙÚ™žœšš™—–˜˜š›šš¡ žœ¡¤¥©«­®©§¢¢£ŸœŸ¢¥«°®­«¨§§¨¦¢¢¡¢¥©¯°²´·¹µ²µ¸»¼·µ·µµµ°¦šŸŸš™–ž©¨ª¬¬­®«©¨¨­°°´³±°¯¬¬­­¯¯«©¥š‰’”“’˜¡¨­°¯¬§¤©±³°°²²±±¯¯°²¶·³³®°´¶»¿À¼¶¯§žšœŸŸŸ§­¬ª©¨ “–£ª­®¬«®¯ª£Ÿ˜Žpxˆ˜§²´¹µ´³µ¶²ª¤Ÿ—’–˜–Œƒƒ’ §§ª¬®¬¯µ´°£•ŽŽŠ„€z~‚‡‡†‚~yx|ˆŠ˜ ¤¦¨¦¤¦§§¬±±«¤˜’›«°°²µµ°¨£¦¡ž”‰…ˆŒ‘“””•“––––˜ŸžžžŸœœŸŸŸžŸœžš›ž¤¥¤¥¦¢ œ£¥¨®¬¬©§§¤š™™››—‘“““š œ—”‘‘‘Ž’˜››š™˜•••‘’–™“’‘•˜››’Œ‰ŠŽ‹ŠŠ‹ˆ†‚€‚€ysqtrib_cecbefa`e`\]^dklgda]ZZ[]YSLLQQRNJA?DDGRaililqplmpsvvqsplmidihkvƒŠ‰„ˆŒ“’“—¢§§¤£¡ ¦¬®®©¨¨¦¨§¢ ¡Ÿ¡¤¦¦©«±¶¹¼½½ÄËÑÓ–š™››š—™—˜šš˜™—›ž£¢œšŸ¤§¬¯¯²¬¦£¤¤¢ Ÿ £¬¬©ªª©¦§§¦£¡ž–Ÿ§­°µ´¶¹µ³´·¹¸¸¶´³²´¯¤ ž ¢£ ›œ¦­¬¯¯°°²®ª§¨¬­­±±³²³¯¯®­«ªªª©¤™’••—š˜—›¥©¬°±¯©§«°³°±¯®­®¯°­¯°¯®¬«­°³¸º»¼¸²«¤¢£¢¢¦©«©¨¦£ŽŒž¦«¬­­®¬¨¤¢Ÿ–Šƒ‰•£±¶¹½¸µ´´·¶­¤™œ¢¦¢—Žˆ”ž¥©©¬¯°¸¿À½­œŽ‰†„‚…‰„‚†Œ“š¢¤¢¢Ÿž¡¤¦­±³­¥›—›¨­®±¸¸±¨¥£ žœ•Œ‰Ž‘““–•–˜œ›š›œœšš™˜šŸŸœ››š›Ÿ¤¢¡¡¢£¤£¤§¨©¨©§§£¤ œ––˜—‘‘‹Ž˜œ–•“’Š”˜œœœ—–––˜—–”‘ŽŠŒ‘•—š“ŽŠ‰ˆ‰ˆ„‡‰‹‹…€ysroe_Z_b[[^`^\[[\_elusmg_ZXUYYWQNORRPKB<@EELWcnonquvspstvustsonnnqqpw}€€…‹’—˜•’•™ž¡¨¨¨§§§ª¬­©¥¥¥£¥£ŸžŸ ¢§©©¨®¶»»»»º¾ÁÈÍ—œ¡¢¢™™™™š˜–––™ž£¢™œ£¦©¬®­©¦£¦¤¢ Ÿ¢¦©¦§¥¥££¤¢žž™”— ¨¯³´¸¸¶³²µ¹·³´²®¯²®¥¡¢¢¤¦¤¢¡©¬¬¯°²µ³°ª¥¥©ªª­¬®°²°²­­¬¨ª«¬¨¢——›œž¢Ÿš¥¦©«®¬«§«°²±¯­¯­­®®¬­­­­¬­¯°°´´²¶µ±¬¨§¨§£¨©ª¨¨§§¡•” §««®®±¬§¥¥¤Ÿ˜Ž”ž¨²µ¹»¸¶µµ·¶®¤œœ¤««§™ŒŒŽ˜¤¨ª¬«©µÀŵ¦˜’‹‰„€~ˆ–œ™“Ž““”›Ÿ££ œš–œ ¦ª®¯¬¥›——Ÿ¤¦¬´·°¨£¡žœ˜’‹ˆŽ“—–—œ ž›™™——˜—˜Ÿžžœš™˜šŸ£¢Ÿ¡¡¥§¥¤¥¦¦§§¥£¥¢—’“—š˜”Œ‰‹•˜“Ž’‡†Œ“˜š›Ÿœ—•˜š›—’‹Ž”•–˜”‹‰…‚€ƒ„‡†‚~€„‚zsplh_\^ZQRX[]][\`eipxxrh_ZWWYXVRNRUTQLAFKNS_lqqvztqrsrrstxxuwtrppswxy~‰Œ“™Ÿ¡¦°µ¶µ¯¨¦§¥¥§©©©¨ª¦¦¦£¡¢ž¡¦¬®±¶¼¾¼º¸·¸¹¼À˜£©®®¤œ™™———”–›››Ÿž›™œ¢¥¥¥¡ž››Ÿ¦¦¤¤¦¡¡¡ ¢£¢£Ÿ¢¡¡š˜š˜˜•˜£°²µ´¯¬¬¯´¶±¯®ª«­«§¨ª¬­¯°±ª¦¦£¤«±µ¸²­¨¤§¨§¥§«¯¯®®­ª©ª¨¨§«ª¨¡¥§§««¦¦¨§§¨ª«­«¬¯±¯°®±²±®­¨££¦ª¯³··²«¤ ¡¦¬¯±³±«©§§©«­­«§©­¯­ª¬²®©§«®­®«¦¦ªª««¯²·º»¼¸¶­§¢¢ª±­ ‡}…Š‘™œžŸ¤®¹»³¨¡›“ˆ~z~Žœ¢ ž  ¤¤ Ÿ ¢ “‰…Œ‘Ž’– ¢¢™ˆ‹‡œ¨®¬¦¡¡¡¡¡›”ŽŒ’”—••“’••™Ÿ¢¤Ÿ”‘•—™›ž›™—œ›¢¤ Ÿž¢¦¥¢  ¤¦¦¥¥¦¡–…ƒ…ˆ‹ˆŠŽ““˜ ™—•’‰…ƒ~ˆ•–˜•”•˜ž¥ª¨˜˜››™˜•‹„ƒ„{€~~xz}€|zztjfkoka[YZ_gilgffehd]^__ZVW[Z[VRXZWWTPLD@@DHHKVcikquoptvvuswyvsutnnouvuv{†Œ‹š¡¥¬±·¸³ª£œœœ¢§«®­«¨¨§£¤¥¥¨«°´¶¹¼¼¸µ´³µ¶¸¹•§®®¦›˜™—˜–‘”–™›š˜•™ ¦§¥¡™œ ¤¤¦¦¥££¡ ££ Ÿ¡£¢žš™›š˜•–Ÿ¬²´´°¬¬¯³´®®¯­ª­ª¬©ª«­°²°ª©¥ž §¬¯¯­ª¨¤©«¨§¤§ª®®­®ª¨¨¨¨ª­¯«¥¦§¦ª§§§©ª«ª®¯¯®®°±±¬®±´±°®ª¤¡¢¨¯°¶¸³¯§¡Ÿ£§¯µµ´¯¬ª¥¢¤¥§ª«ª¬­¯¬¬¬°­¦©¬°²¯®©¨ª¨¥¥ª±¶º¹»µ°©¦¥¦­°¬Ÿ‹ƒ„‰”—™š™™ §­±¯£”“ŽŒ‚‚‰”¡¡ŸŸŸ ¤¡ ž¡¤¢š„|€||†• ¤ ›™–—š¡©ª§¦¥¥¤¥¢–‘“šš››—•––—ž¢¤ž”Ž‹‘’“——š——šœž£¤¡žžž¥¨ª¥¢ž£¥¥¥¥¥¤–Œ‚‚‚}€†’˜¡¤¡ž–Œ‡…{‚Ž’”•–“’‘˜¡¦¤Ÿ˜˜™™–˜–‹ƒ…‡…ƒƒ‚~{}}}xwrmhcekk_Z[]ejpogbfdfbZY[YXVZ\WWRNSUTRQNJEDEGGFEM]deipmntyxuquvsrttroquuqrz…‰‰Œ—Ÿ¡¦¨¨§¦Ÿ››™š™¥§­®¬ª«ª§ª¬¬¬¯³µµ¶¶´°°±±´·¸¶•™¥«ª¦š—™—––‘’–šž–•š £¢¦£ŸŸŸŸ¡¢¢¥¥¡££¢¢¡œœ ¢¢žš™ššš—™¡­³·¶¯¯®¯´²¯°°­­«®««¦§©ª­®ª©¥œœ¤§§¨¨¨¨¤§­¬¥¥ ¡¥©©«¨§¨©«®±³¬¤¥§¦¦¨¤¥©­­¬¬«®¬«­¯¯­¨®µ¶°°¬¨¦¦«®²µ·´¯­¨£¤«°´µ¯­ª¦¤¡£§«­®²´±®¯¯­¥¥®´²´³®¬ª¦¢¢ª¯µ·¶¶µ«¦§¥¥ª¬­£–‘Ž”› ¢ ›žŸ¢§®®¦›“’Œ††˜ ¢ŸŸ¢£¤£¤¤¢¥£™€y{ysmw‹—Ÿ£¢¦§§¨¬««§£¦¨¤Ÿž™‘’’—šœ›ž›™›šš›ŸŸš‹Œ‹Ž‘›¡¢Ÿ››ž¡£ž¡¢¢§±±¬£¡£§¦¦¥¦¤“‡xvyŠ‘›¥©§£Ÿ™Œ†…€„Œ‘‘‘‘Ž’™Ÿžš••••—™–…Š‹‹‡ƒƒ„‚‚‚€|zypeec[_hkdc_`hrtpibehie__`^^^^ZVPMINQNNOKGGGHJLHEM]dcgoomtuuojnqquxyzyxxxsux‚‰ŠŽ˜ ¢ —“–˜œŸ¡Ÿ¡ £ª¯¯±±´µ²²²°­°°±²±±¯¯³²²µ·¼»’––œ œ—•—•—–’–œš˜—œ¢¢ ¡¡ ¤£££¤¢¢¤¢¢£££¡›žŸ™š––›ŸŸ ¤ª¯³´±®²¯±¯®®¯­¬®®«©¦¤¥¤¦««ª§£ž¡¥§§§©§¤§©©§£œ›œ¡£¢¥¦¦¦§ª°²© ¤¥¤£  ¤§ª¬¬ªª¨§¨ª­°«§ª¯³°±­¬¬¨«­±´µ°­¬©¥ ¢§¯¬¬ªª©¤›šž¡¥«¬¬°±±°°®ª¦¦¬®¯¯²®®ª§¤§©ªª§§«®ª¦§¦¢£¥§£œ–“™¢¨©£Ÿ ¡žŸ£«­©ž™–”‘‘™ Ÿ ¡¡¢¥£££¢˜ƒ}~xuy‚Œ˜¢©®®²³°©¤Ÿ¤§¢™–š›ž¢£  žžœ––š˜Œƒ†ŠˆˆŠ‹”›£¥ œœš›ŸžŸ¡¢¤¨µ¸°¥¢¥¤¤¥¢¡¡Ÿ™“‰‚{w~†— ª¬¦¤œ”Œˆ„†‰ŒŽŽŽŽ‰Š”““‘’•š—Ž‡‹Žˆ‚ƒƒ‚‚ƒ‚€}xricdaY\fsxvqsv||vnikkjeaa`^a^ZULLOKRURPNGFEFILJGFN]fehlmlnpojgnssw{€}|urrv†‰‘Ÿ¦¨¨¦Ÿ››œ¡¤©©¨¦¦ª­±³»À¿»¹¶³°­­°±¯¯¯²²´´µ¶··’Œ‹’”’•––•–‘‘“–”•—¡Ÿ››Ÿ¤««¨ª§££¤¤¢¢¢£¢Ÿœžžœš—‘“› ¢£¥©¯°±°°­¯­«¬­­®¯®­«¦£¢Ÿ ¢¤¥§¦£¢ŸŸ¡¢¢¦¦¡¤¦§¨¦¡žœš ¥¦§¨¬°¯§¢¡ ¤£žž¡£©¬¬ª¨¦¦¦¨­°«§¥­±°²¯®¬©¨©°²¯©©«¨£Ÿœ¢¦¨¬¬­ª¢™šž¢§¬«¨¬­®°°­©©ª¬®°°±°¯®¬ª¬¬«£•œ¢¦©©©¨£ ¢ž›™••š¥ª¨¤¡ŸŸŸž §°®¦Ÿ¡¡Ÿœœ› ¡¢Ÿ ¡¢¦©§§¡™™“Œ…„ƒ€‚}†‘š£¬®®±¶°¨ Ÿ¡¤¢ž››¡Ÿ¤§ª©¤ŸŸž˜Š‹ˆ}‚„Œ–ž Ÿœœ˜š›œžž£ª·¹±§¢££¤¥¢¡ ž–‹†~~„Š’š¥®«¦–‹ˆ‚ƒ‡‰ŠŠ‰ˆ‹‰‡„‡ˆ†‰Œ•š•‹…Š‹ˆ„„„ƒƒƒ‡†€woiadb\]n„‰ƒ}€}wpjmmlfc``^\\WMGMRTWXUPLIDBGIKFHIQ]eddiihkljkntwwz{~…ƒ„xtsu|„Ž—£¬¯°®¨¦¤¢¥¨ª­­§¨§©±¶ÁÊÆÀº¸³®®¯°®®°±¯°±³²¯®­‘‹“““”’•˜˜˜˜ž¡¡¢§¨§¨©¥¤¦¥¥¤¤¥¥Ÿœœœšš–’—œ  ¦ª¯²³²¯­©§§¥ª­­¯°®¨¥Ÿžš—•–ž¢¢Ÿ™šœœŸ£ ¢¡¤¨«¨£¢Ÿ˜˜›Ÿ©«§­²°®©¦¤¥£¢›¡¦¨©§¤¥¡¤¨­¯©¡Ÿ§¬°­¬­­«¬¯°°¯©ªª¨£ š¤«°µµ® ™›ž¤«­­©§ª«¯®«©¥©­¬«¬­®°¯®¯±¯¯­©ª¯¯­«¬«§£Ÿœ—’”™ž£ª¦¢ Ÿ¢¤ª¯´²ª¦¤¤¢¤¥¦¦¨¦¡£¡¢©ª«¨£žžŸŸ›‰ƒ…ƒ„…ˆ’ ¦®¯ªª®¬ª¥¤¦ª§¢¡žŸ¤¥©®«¥  œ’„„‚~xyyx|~‚’›œžžœšš—–™šœž¤ª³²¬¥¤¦¦¦¥£ž£¢Ÿ›–‰““˜ §«ª –‹ˆ‡ƒzvw|„†……„…‡†…†ŠŠ‚‡Ž˜›”‹†‡‡„‚„…‚ƒˆŽ„vpg_``\c~”ž›‡ƒyukghpmidd_^Z[VLKPVZYTPKJGHDEHNQQRV]ddioonqooqstwtruy~„„€|z|‚‰’–œ¤©«ª«§¥©¦¦¦§©«¨¢£¥ª´¾ÆŽ·´¯¬«¯°®±´¶²°²¯®¬©§“’‘‘’‘‘‘•™šž£¥¤ žž ¤£¥¦¦¤£¥¥§¥¦¨¤Ÿœœ™š›—’‘–›ž¡¥©®°¯°«¨¦¦¥¡£§©­®¬©£›ž™’’“—žž˜”•–˜žžŸ¢§©ª¥¢Ÿš˜™ž¢¥§¨¯´´±¬§¤§¦Ÿ–œ¥ª¨¤ žž¡¦­­¦œ›¢ª­«¨©¬¬¯²²­®©«¬§£¡œš£­·¼¹¯¢™˜ ¤ª±®¬®¯°¯¯©¥¡¥©«©«¬­±°°±²°±´¹¸¸´®«ª©¥£žš“Š˜Ÿ¡¤¢¡Ÿ›£«°´¶´®¨¥¢¡¦§«ªª«ª¦£Ÿ¤¦¦¦¤£¢££ž’ˆ‡‰”Ÿ©®²³¯««ª«ª¦«¬¦££žŸ¡£©®±¨¤£¥Ÿ‘ƒ„…ƒ}wwz‰•¡¤¢  Ÿ˜˜––š›Ÿ¥¬±¬£¡¤¥¥¥¤ Ÿ¡Ÿžš—•˜›ŸŸ£¥§¥œ‚‚„vqqt}…ƒƒ…ˆ‡…„ˆŠƒ{~‰•œœ”‰‡…„„†„~zy~„…thaZ]Y\n„“ šˆŠŒ‡{rmcgplhfda]\[WNKRZ[YTOKLGHGGJU]\\Z^adgnrpomlnqpqppmrw{~|zz€Š•›› ¡£¢ ¡¢¥¤¦¥¦¥¢¤¤¡¢¨®¶¼Á¿¸´²¯­¯²²³µ¸¸·³±¯­¬¨ª”‘’“’‘‘‘’Ž‹‘˜œ ¥¨¥¤¢  ¢¤¦§§¢¢Ÿ£¥¦§¦¦£¢žžŸžœ–”–œ¡¤¦§«­­©ª¨§©§¢¡¤¦§¬¬ª¥žœœ˜’’“”™œ˜‘‘“•—œš¡¦¦¥£ Ÿ››ž ¥£¨­±³±¬£¥©¨¢š› ¦¦¡œœ¡¨¬®©¢Ÿ¦«®«¥¤¦ª¯²³­¨©¬ª¥¥¤ ž£¯¶¹¶­š™œ¡©®®°³²²³¯ª£¡¥©«ªª«­®¯®²³³³´·¹¶°¬¨ª§¤¢ž˜„ˆ•ž¢¢¡£¢ ž¢«¯±°¯­«§¥££¨­¯²±²¬¤  ¢¡£¦¨§¤£Žyz…‘š¢«¯´·´±¬ª©©«««©¥¢£ž  ¡¥«¯ª¥¨¨¢•Š‡‹‡}xƒ”¡¬°ª¥¡žŸŸœšœ› §°²¬¦¤¥¢£¡¡š›œ›ž›œœž¢¥¥£¢£ ”†€€~wpnoz€…‚„‡‡‡††ˆˆ„}‚‹–›˜”Ž‰‰‰‡††€xsrsx{uk_TV\^dp{ŠŠˆ”Œ}qkehpojgda\ZYVQQVY[XVRRQNLMKQ\`_ZVV\^`djjjjiknqqsvtvz}~{xz~Š•šššœ›™š £¥¨ª¦¢ž ¢¦¨®·¹¼Á»µ´²°±´´µ³µº»¶¸´±¯«§§‡“”“‘ŒŒ‹ŽŽŒ“˜Ÿ¢¦¥¨§¤ £¦¤§©¥£¢Ÿ£©¦¥¥¦¦§¦¥£ ›—§¨¦¥§ª¬¨«¬­¯¬§¤¥¡¤¦«®©£ž›“‘™ž ›–’••—›œš›Ÿ¢£ ŸŸžž›Ÿ£¥¨«­«­«¥¡ §­¥ŸœžŸ¤šž ¤¥©««¥¥©­®­¨©«¯³¸µ®©§§¦¤¦¦££¦¯¶·²«¥¡¢£¤©®¯²´´²´¯¨£¥¨¬¬¬­«ª­«¯µµ³³°²³®¬¬««ª¨¦£ “†Š”¡¦¥ªªª§ ¡¦ª©ª§«°ª©¦£¨¯¯±³³±§¢¡£¤¡¥§§¢¡›Œzgp|‹ž§¯µ´´·³­«¨¨«¬«¥ ¢££ ¡ž¡§ª«­¬®§œˆŠ‹†‚„¤µ¸¸®£›› £¢¢¢œ¡ª±³¯ªª¨¦¤¤¤ œ›ššŸ£¢¢¦ª¬ª§£¡Ž€‚~xtpw|‚„ˆŽŽŒŒŒ‹‹‡‚†‘—™—‹‹‡…‡Š„~vqqnprmdWRXcknqx{z~€ˆ†rihfjqokfd]WVVUWX[ZXYWUURNOQPV[_YUQRVWYaejmmllmoqtxy}€„…‚|‚‰‘’”Ž’™˜˜š ¡¥§¨¡›œ¢¥°µº½½»·®¬«§¬°­¬®µ¸º»»º´­¨£¦Œ“““Š…‡††‰‹ŠŽŽ’–™›ž¡££Ÿž£¢¤¦ª¨¥¢ž¢¦¥¦¦¥¦¨¦¥¥¤¢ž›Ÿ©¨§¤¥¨ª¨¬¯°±®§¥§¡ ¥ª­®¤Ÿ—Ž…„ˆŠ–ž¢¡œ˜˜—™œ›šš¡¡žž¡ ¡Ÿž¡¤¦ª¬­«­«¥£¦©®§¢ž  ›™ ¢¢¥©©¦¦ª«ª¨¨­°´»Àº¯§£¡£¤§¨¥¦­²´³¯¬ª¬¬«§«¯±²²°®¯«¥£¥©«©ª­­®­­±¶¶µ²¯°¯¬ª©ªª¬¨§¦£›™£¦«¬±±®¥¡¤¨¨¤¥¨­­¨¦¡¦¬­°±±¯¨£¤£££¢§¦ žš‰yip{ŽŸª®³µµ²±¯¬©¨©©¦¤  ¢¡¡ ¡§¬°°±²ªŸ”ŠŠŒ‰‡Š ¯²­¡š”“–›¡¥§¦ ›¢«´µ±­¯ª¤¦¦¥¢š˜¢¥¥¥¨­¯®ª£¢ž…ƒ…ƒ}xy{†ˆ”™—’““ŽŠˆŠ’™œ–†ˆ†„‡‰„}vqomllkcXYbmrswz|ztvz|ug^cfinkieb\WVSUWZYZWYURQPMNPQUY[VRNSUX_eiorspoooqsvw}ƒ…‡……ƒ…‰Ž‹†‹’˜—œŸ £¥¥¤–œ¢¨®´¸·´²®¦££¢¥¥£¢¨¯´¹¾¾¼±«§¦¨{‡Ž’‘„€‚‡ˆŒ•–•™š›œ›œ™šŸ¡¡¡¦©ª¤¢¡¥¥¦¤¤¤¥¢£¦¤¤¢ž¤¨¨¤¢¥§¥§«®±±«§§¨¥¤§«®ª¥Ÿ–Š~{}š¡¤Ÿ™™šœš›ž¢Ÿ›Ÿ¢¦¤¥¡ ¢£§¬®®¬¬«ª¬­¬§¡œ˜žš™ žŸ¡¦¨¨©¬ª¥¥¥«±·¾Ã¿²¥œŸ¡¦«¬«®²·¶´®¬®²²°­¯¯°±°«¨¬©¦¤¦©©§©¬««ª­²·¸·µ±²¯¬©§¨ª©§¥¥¤Ÿ™š §©¨ª°²­¦££§¦¦£¨ªª§££¤¨ª¬­®­¥¢Ÿ¡¡Ÿ ¤¥¢žŽ€v}ˆ–¤¬²³µ³¯ª­®©«©¥¡ žŸ Ÿžž£©­²²²¯§Ÿ”Š‹ŽŽŒ”œŸ”‹‰‹‹šŸ¦©¨¤Ÿ£«µ·²¯­«¥¤¤¤¡›–šž££¦¦¨­¯¯¬§¢Ÿ–Šˆ‡ˆ…€z{„ˆŒ”œ¥¡š˜š’‘’Œ“˜™”‹†‡„„‰‰„~xplllhhbY]elps{}pgihf_Z^bdhgdd_\[XXWWXZWTYWRRMLOQPRUXSTRRT\bioprtqoonoprsx}‚ƒ„ˆ‰‹Š…‡‘—˜œ£¦§¨¦ ˜›Ÿ¥©«­§¥©¥Ÿ ¢¡¢£¡£¦¬³º¾¿º±«©«®s€‹“‹z{yy}…‹•™™›Ÿ›—–›ž  ¡¦©ª©¥  ¤¥¦¦¥£¡ž¡¦¢Ÿ ¡¢¨¥¢ ¡¤§£©­­­¬©©¬©¨ª«­«¤ž˜‹~vy{‹—¡¤¡œœ›™œšž££¢ž¢§©¨§£ žœž¥ª¬­¬¯²³°ª¢œš—›ž›ž¡ ŸŸ ¤¨«­°¨¢¥¤¤©°·Àº±¥œš¢¨­°­°´ºº³®«®´²°­®­¬¬«§¦ªª§¨ª©§¤¤§§¦¦ª°·µ´´´³²®­¬¨©©¦¥¦¦¢Ÿ¡¥©¦£¤¦§§¥¤¢¢¥¦££¥¤¢¦¢¤§¦ªª«ª¦¢žžœŸ¢¤£ Ÿ›““œ¥²´µ¶³³«¦¨ª««¨¤ž žœžœž¡§©©ª¢¢Ÿ—‘ŒŠŒ‘’’‘Œ‘„€„Œ—¢§­¬¨¦¨®²´°««¦££¡ œ•’™ ¦¦¦¨ª­°±­ª¨¢œ“Œ…|x|ƒ‰‘œ¢ª©Ÿ™˜”•”’‘–˜•ŠŒˆƒ‡‰ƒvpnnlkh_Y[_bfo|…‰„te^_``[]`abba__[Z\[ZWVWVTYXVQPNRSOQVXWRNNR[blroqrnpkjlprprwzyz€‡ŒŽ’–••™œ¡§«­­©¤ œ¡£¢¤¤¡žœ  ž¢§§©©§¦©«²º½½º±¯²³·nz…‡zussv~†Ž‘”˜›ž Ÿ ŸœœœžŸ¡¤¨©ª§¥ ž¤¤£¤¤¤¡ £¨¢œŸ£¢žœž¡¥¦¨ª«©©¬­©­®®­©¦ ™Žƒ{}„œ¡Ÿž›šššš›Ÿ£¢  ¤§§¦¥££žš™ž¤¨«¬²´´°§Ÿšš™œŸŸ¤   ž¡¥©¬«¨¤¤£ž ¨³·´­¥žŸ¥ª­«©¬²¸º¶®©°²±°­¬ª§¨¦¦§ªª­­«©©§££¥¦¦¬±´°®°´¸¶³²³°ª¦£¥¦§£¡£¨¨¥¡ ž›Ÿ¡¡¡¢¦¦¥¥¥¢¢¤¤¡¦¦§©¨¥£¡š™™šŸ£¤¢¤¤Ÿœ¡¨°µ¸¶³´³©¢¤¦¥¨¥¡ žžšž¡ Ÿœ—””‹ŠˆŒŽŽ‰‡”šŸ£¥¨¬®®¬««««¨¤¤£¢žž›—–—™¡¥§¦§ª®±°±®­¥Ÿš——””‹€z…Š”œ£¨¨ š–”•–”““”˜—‘ŒŒˆ€‚ˆ…‚xqnoolhbdf^\es}‰‡|paaba\__`_[Z]\ZZZXXXUVTTX\WPNMROOPWZWQLOV\bgilopmlihmsropttru|„ŒŽ“œœ™™Ÿ ¢¡¢¦¥¤£¢¥¤£¢ Ÿž››š¡¦ªªª¬ªª¨©°³¸¶³°´µ»»mu€†‰…|rqsw‡‘“–›  ¤¥£ŸžŸœ¢¦©¨ªª¦Ÿž  ž ¡¢£¡¥¦¢›ž›Ÿ¢ žœ›œŸ¦§§¨¨§©ª©¨«²±¯«¦ ˜‘Š‡›£¡žœœž›œš™Ÿ¡ ¡ £¥¢££¤¤ ›šœ¡§¥¬³³²®¤š™›Ÿ¡£¢¢žš¢§©¨§¥¥¡ž›¢®·±¬§¢¥©­«¬¦ª±·¹µ®¬¬°­­®¬ª§¥¦¨¨¦¦ª«©¨©¨¥¢¤©­±¶³¬¨ª°·¸´¶¶³¬¥¢¦¦¦¡ ¢£¥£¡˜˜™œ£¢¡£¤¤¤¤¢£££¡¤¨©©§¢ ¢ž——–šž¡£¦««©¦¨­´·¸µ²²µ«¢£¢Ÿ ¡ŸžŸžœŸœ››šš—”ŽŽŽŒŠŽŒŠ‹‘ŽŽ”šŸ¢¥¥©­®±¯«©§¤¦¤¤¥ žš›š›žž£¨§¥¥¦«­¯®¯®¥žŸ˜™–Ž…ƒ‡Š’›ž¥¦¡›—”˜˜˜—••—–Š‰ƒ†ŒŠƒ}wrsrnjpwzmciw‰‹€tfaa_]_`_\[WZZZXWVXUTVTU[YUNKMMKJNSYXRSU]adfgjlpnnjjqurmmnnnry‚‹Œ‘› Ÿ¡¡¡ž™•˜›Ÿ ¡¦¥¡ Ÿ›™•˜¤ª«««¬ª«ª¤§«««­°´¸¼¹rx{€„‹„}z}‚ˆŽ’”™¢¦«ª¦¢žŸŸ ž §«©¨©¦ œŸŸž ¢ ¡¢¡£ Ÿ›Ÿ¢£¡    ¤§¨¥¦¥¦§§¨¬±¶³¬¤œ–’“š¡¦£›™™œŸš›ž ¡¡£¦¢¢¥£¦¥£ŸŸ¡¤¥¤©­¬­¨¡™œœž¡¡¡¢§§ ž §©¨¤¢¤¡Ÿ §®´¯©¦¢§©¬¬¨¦«±¸¶²­«¬­««­±¯ª¨§¦¥£¡¥¦¥¥¨¥£¥¦­²µµµ¬¢¨¯³´³²³²«¤£¦¬§ œž ¡£ Ÿœ˜š›Ÿ¢¡ ¡¡¡¡¤¤¦¢Ÿ¡¦¨§£¡ ¡ž™˜šœœžž¦ª°­§§¬¬±°°±µ´°©¤ œžžŸššœ›žœ›˜–•’’‘‘ŽŽŽŒ‡‡‘“—›œ £¦­°­­«£¡¢  ¥¤¤ œ›ž¢¤§¨¨¨¥¤¡£§ª­«©¤¡£ š’‹ˆ„…„‹—œ¡¢Ÿ™˜˜˜™˜—”——•ŒŠ†„‹ŒŒˆƒ~|vqprx†Ž„qms~‰‹‹„ugb^]_``_[YXY^^YYWYYXXXV\XOHEA@=>BILORSY_fhkqprssvxuuuvtnqrqptŠˆ‹“ž¡¢¡¡Ÿ›—“”œ  ¡  ž›˜•”š¢ª®¯ª«®®±¯ª¦§¤¨®¯³·µµouw|‡‡ƒƒˆ’’’”šŸ¤§ª«¨ žž›š¡§§¨¨¥¡ Ÿ¡¡¡¡¡¢¡ Ÿœšœ¡¡¡ ŸŸŸ¡¤¥¥¢¡¢¢¤¥¨«¯°­£œ“”—˜ž¤§Ÿ’’’”™›™™›ŸžŸ ££¢¡£¤¥§¤¢¢¢¢¡œž¤ª­¬§¡  ¡¤¢¡¢ª¨£ŸŸ¢©«©¥¢¥¡¡§«®±­§¥¢¥¨­­«¨ª®³³¯¬«©©¨ª¬±±­¨¥¤£ œ ¡££ £¤¢§«¯²²¯¨ ¥­³¶µ´´²¬£¢¨«©¢žŸŸ £Ÿ™——ŸŸžœ›œžŸ¢¢ œ ¤¨§¤ Ÿ ›—›žœšœŸ¢¦£Ÿ ¥¥¨«­¯´·³°«£œ›šœž™™š˜›™–™™–”ŒŽ’‘‘‹ˆ‡‹‘•˜Ÿ›˜œ §¯¯«§£ œ™˜œž¢¡™œŸ¤§©©¨¦¢ ¡ ¡¤£¡¡ŸŸŸŸ”‡€„‡‡†€{–˜›—”–˜™—–”–š™“Š‰‰‡ŠŒ‹‡„xnkoq{Ž•{or€ŠŒ†wi```__^\YXY\b^YY[\\]YYY[WH@>:87548?CCCIQX\`_^jw~{rsw}€‚…ƒƒ‚†‡‡Š“‹Ÿ¥¥£¡¡¢¦©­­«§¦©¬¯°¬©¬®¯¯®©¨¨¤¤¦¨°·º¾ÀÀ¼º·´·»¿plmq{šž›”’”’Œ‰Œ”™Ÿ¤¨­®«¦¡›”™žžž¤¡¢£¢ŸŸžž ¡¡Ÿ  Ÿ  ¡ ¢¢ ˜˜ž Ÿ››ž ¢¡Ÿ£©¨¦¡œ˜Ž‘™š‘ŒŠ‹‘˜œ›šœ›¡£¤¤¦¥¥¦£¦¤£¤£¤¥¦©¨®²¸¸´¬ª©¨¤£¤©¬§£¥¦¬±³³´¶·¹º¶°ª¤ ££¨®³µµ´¸¸¹¸µ¬¢¡¡¤¦©«¬¬«¨£¡¢¨«­®­ª­®¨—š›šššž¥«¬«¨§¨©¦¤¢¤¡¡ ¡ œš™Ÿ¨ª¥ž £¥©¨¦Ÿ™”™œ ¡¢¢§¨¦¤¦§£ž™šœšš™˜šœŸ£¨©¯¯°«««ª¯°­§£Ÿ¢§£Ÿ—–—™––••”–˜–ŽŒˆˆ’“–›™–––šœžŸ¢¤§¨¥¢ ž›—˜Ÿ¥£Ÿ¡¦ªª¦¡ššŸ žžœŸ™”˜š–Ž‹‘’ŽvSAa’›˜––’‰‰•žž˜“Œˆ„„ƒƒ€€}zxsomiltwuokp|ƒ…ƒ{pid`a]YW[Z`hlib\^a`]YZZZZK<8::CCGKPW]_egfo{}}wttx{|~ƒ…‡‹ŠŠŒŒ‹’”ŠŸ¦¥£¤¥¦¦ª¯®®©ª°²³°®¬¬ª¨©§¤¢¡ž¡¢¥­±¶¸¼À¿½¸º½ÃÇxtrqwˆ’œš––“Œ‡ˆ–Ÿ¡¦¦¦¨¦ž˜šœœš˜œœŸ¡ ŸžŸžœž¢¦¤¢ ŸŸ¢ ¡¡¡Ÿžššœ¡ ŸŸ¢¡ ¢  ¤©¦¤Ÿ™–”•Š‰ˆšŸœœ›™šœ ££££¢£¢££¡¤¢¦«±²²²´³´³­©§¤¢¡£¦£žœ ¤©®±°³¶¸·¶³­§ ¢¢¡¦¬±²µ·¼¿À½¹¯¤ ¢¦¨¨©¨¨§¦ ŸŸ£§ª®¯°µ²ªœ–˜šš—˜ ¨­¯¬©¨©¨¥ ¥¦¤  ¢ Ÿ™—œ¦¨£¢ ¤§¯²®¨ž˜™œžž ¡££¤£¦¦£ž˜›œœš™ž£§¨®°®§¥¤£¤¬¯®ª¤Ÿ£§¢˜•”•›š——™˜—œœš‘‹‰‚€ˆŒ”˜–––•–™ž¢¨ª¨¦§¡ Ÿž™”•ž¤ª¥¡žž¤¥¦£–™ŸŸžŸžš—šœ—““•—”n?Fdƒœ¤¤¡žš•Š…Š”›”‰€z|‚€€~{|wrmkowvqkknv~tlgdda]ZXYUYeje^\Y\YXUYXXSE=:IPT^b^XY]___dflrutsrt|‡‹ŠŒŠ‹†„„†‚}}‰–›š™¡¨§¦¨©¦§©©­®¬«­­«£™’•˜¢¢¢¢¦«¯°²¶º¹´´¸»½ÂŠ‹‰†€ˆŒ“–™™š•Ž‘’‘•”’—›Ÿ¤Ÿ™–šœž¡¢  ¢££¥§ª©©¦ œ›ŸŸ  ¡ ¢¡ž£  ¤¨¨¬«§¨©ª¬«¦œ“Žˆ†‡ƒ€ƒƒƒ‡“˜—™›˜‘‘‘–¡¡¡ŸŸ¡Ÿž ¨´·µ®¬¨¦¦¨£¤¢œ–˜¡¢ žž¡£§«°¶´²­¨¤¢žšž¢£¦©­°±´´³·¹¸¯¦§«­¨¥£¡¤££¢ž˜“”›ž¤¦§¤ Ÿ ¡¢  £ª­®¯°´¸»½¹¶°­¥£¡¡¡—Š‡š¢¤¤¥¨ª­©¢œ•‘“˜š™—˜ššž£¢¡ Ÿž™˜˜›žŸž ¡žœŸ¢©¦¢›Ÿ¡œ˜œ¤£ŸŸœ—˜£¡¡¥¥£ž  ª­ª¨¦¢  ¡¥¦£££˜”ŠŠŽ¤³°««¬¨¢ž˜”‘™ £¤ ž™œœœœž¡ŸžŸ ¡¥¤¤¥¤¥§¦¡¥¢ž—–ž¥©¦¢¢Ÿ›–Œ‡‹•Ÿ¡œ“Š‰‡ˆ…~€…„ƒ„xuvxxuqpqqsusqpne_caXUYTX`bedb`[XZUVVPGA<:76@INZ^`^\dfa^cfjswrqrv~Š‹‡……‹‹Š†…„…†œœ›¦ªªª«©­°±´³¯¬¨©¦Ÿ˜’•›¢©­«¨©°³²µ¸º¹µµ·¸¹¾’“ˆƒƒ„ˆ”•–’‘••’”‘”˜œŸŸ›˜› ¡Ÿœ™š¢¢¤¨©¨¨¥¦ª¬©£ž £¥£ ¢¤£¢¤£¡¦©¬­¬§¤©¨¥¨¢–’‘Š‹‹‡……†‚‚Š‘”“““”’‘’Ÿ¢¢¡¡¡¡žœŸ¥±³®§¤£¥¦¥¢žš”“Ÿ¢¦¥¥¨©ª®²µ¶³®¬¨¥ œ ¤¢¥©¨«¯¯®°²±¯«¬¬®­ª£¢¥¥¢£¢  ˜Œ–ž¢¢Ÿ¡¡¡ž¢¥§¨©¬®°¶¹¼Á¼µ¯¬¥ŸŸŸž™‘™¡¢¢¤©°¯ª¥—ŽŒ”œœž¡£¡Ÿ Ÿš–—˜ž£¤¡¢Ÿ—™œ™œ¡§£š™››ššžœ—š¡¥¢ ¡¢¢¢¡œž£ªª««¨¨¥§ª¬©¦¥¡›••¦´¯¨©«¨ ™“Œ–Ÿ ¢£žž››š››œŸŸ¡££¡¡¡¡¢¡¢£¢¢¡¤Ÿ™šž¥©­­«¤¡ •Œ’š¢ ™’‹ŠŠ‰†|}‚„„yuuyxuttsrttvurpf`cb_]ab`___^ZYX[[]WWPHC?;74=EGOV\bflpohmlrutqvx|†Š‰‡ˆˆ“’ŽŒ‰Š•š¢¡žž ­µ´±²³¶¸¾½»²©¦¢ š––™Ÿ¨²´±¬­³·»º¸»¹·±°´·¶—–…ƒ€€„‡‘”””’•˜‘‘“—œ ¡Ÿš›ŸžŸ™š›ž¢§««©¦¢¡¥©ª¦£¢¤©§¢Ÿž¡¢¤¤¢¢£©««ª¥£¥¤£¡¢œ˜””Œ‘ŠŠˆƒƒ‰“‘ŒŒ‹ŽŒ‘œ¡¢  ¢¡œŸ¦¬®¨¤¡¢¤¦¤Ÿ™–Ž–¡¤©¬­¬««¬®¯¯®ª«©¥ŸœŸ¡£¢¥¤¤££¤§¨ª¨ª°³²®¦¢£¤¤¢¢¡›œ–Š‡Œ”›¡¥¢Ÿ¡¢Ÿ£¦ªª©¬­²¹½¾¿Áº°ª¦¢žšœœ™““œ¡ ¡¢¨°¯ª —‘“¡ ŸŸ  žžŸš˜—˜›¢£ Ÿœ”–œ›™——™¢§Ÿ™•““”•šš”š £ ŸžŸŸœ™›ž¤§ª«¨¦¥¦©©§¦¢Ÿ¡Ÿš–›©µ¯ªª«©¤™‘‹‹–›Ÿ¢¡žž››žšžŸŸ ¤£¡ž™›œ›ž™™œ˜™ ¥©««¦ž›š™’Ž•£ ”ŽŒ‹Šˆ†|……ƒxuuuvttwywvzzwtskddfehnke`[YYURTX\\XTMD=;;96BJGJQW\ekpplnqsupty|€ˆŠŠ‹Ž’™œ›–””–œ¡¢¢££¬¹ÂÀ¾¼º»½Á»²¬¥£Ÿ››Ÿ ¥«µ¶°«¬°¶¶¶¶¶µ±¬ª­³´ŽŠ‚‚ƒ~z~†Œ’’•”–•“’‘“–œ ¤¢Ÿœžžžœš™œ¤©®­­§£ ž¢§§¥¥©©¨£žœ  ¥¤¢¢£¦¨¨¨¢ ¢¡œ ž—””‘•Œ‘‘ŒŒŒ‹Ž‹‰Ž˜Ÿ¢¢ ¡ žœŸ§««¦¡ŸžŸ¤£Ÿ›—–š¡¦«°¯®®®«ª©¦£¤ªª¥ ¢¡£¢¡ž™š¢¦§ª²·¶¯©£££¤¡ —“Š‡–œ¢¦¢ž¢ ž¢§¬ª©®´»ÁÅÂÀ¾µ¨¤¢›™™™•–ž  ¢¡¨°¯§žœš—šž ¡¡žžŸœšžŸŸž ¡žœ ¢£¡žš––œ›¢£¥š–‘ŽŠŠŒ“˜˜•”˜›š™™›ššš˜™œž¡¥£¡¤£Ÿ¡¡ŸžœžœŸš˜©¯«©ª¬ª£ž˜•—›Ÿ ¡šžž¤¤ŸŸš˜˜”•˜–˜˜–’””’™šœ›˜ŒŠ…„ˆ‘š œŒˆ‰Š‰‡ƒƒˆŒŒ„{xtsuvrtxwyzz}yssmfceiimiaZUVSNJLQSUQLF?76:9<:8:@CBFLFHMRTVX\[_bflvtvy{~…†ˆŒ’šŸ¡¡œ™š¢ª°±´¶±««®¬¯°µ·º¼¼¸²­«¨¦©¯±°¯®°°±¯°®¯­¥§®³´´¶·»º{y{‚‡ƒ€‚„…Š“™š•“’”’Ž‘•’“’ŠŒ‘˜› £¦¬±±°¯¬§¢š–’”šœŸ££¡Ÿ¡¨©¨¦¥¥¤¤¡¡  ¤¡žœšš–‘ŽŽŽŽ“  œ—•–ž¤ –’—¡£££ œ›ž¡£¡¡¢Ÿœœžž ¢¦¨¦¦§¬±´¸ººº·´¯©¢›¡«¯­§¡  žš™œ  Ÿ ¤©¦¢ £§¬¨——š¢§¥£™ŽŠŒšŸ ¡¢›Ÿ  ¢¨«©®ºÆËÍÌÆÿ·§š”•˜š’‘•˜¡£¢£¤¢ž–”–œ ¤£¢£¢Ÿ  ›˜™——™Ÿª©¤¢¤¡›™˜šž£¨ª¬¯­§œ˜—‘ŒŠ–˜™—–•’•—œžž ¢Ÿ¡£¤£ŸŸ¢¡£žœš˜˜•ŽŒ”š›–“’‘– §ª§§§£›—–œ¢   ¢¤¤¢ŸœŸž˜’’•’”™™š››Ÿ¤¤ žš†‚…ŠŒ‘‡}”šžš…|z||~ƒ‡†{vrvwwsrpjgmrw}‡€ymc_]YTNOQT\a_YRLKLLHEA<87;BFDGLIKRXWST\`acgnwy{€}‚ˆ‡ŠŒ“˜›š —‘—›¤¬®±±®§¦©©©­µ¹»½½»¶²®¨£¡¦©©©¬®°±²¯²³­«¬³¹¹»¼½¿¿}zz…ƒ‚…†‡ˆ•“‘Ž’’”””’“™œ ¢¦©­°­­ª¨¢Ÿ˜“””™¢¡¢¡ž£¦§§§¥¥¥¤¤¡¢£Ÿž›œš–‘Œ”•”“Ž‘—›š˜•‘””—š“’˜¡¡£¢žžŸžŸŸž›˜™š—š¢§©ª«¬±³·¹¹¶´³¯© œ¢­°¯«¨¦§£œšœŸ£¤¥©­«¦£¡¤¨§Ÿ—–œ£§©£—’–› ¡¤¦¥¡¢£¡£¨ª«³ÃËÌÊÈÇÄÁ¹­ž––˜˜””˜œž¡¤¤ œœš™–—¢¡¢ ¢ œŸ£Ÿ™™–”˜ §§¢žŸœ—–”•˜› ª¨§¬«¦Ÿ ™˜™œ›››š™–™œ  žœ™   §¦§¤¤ ™–‘Œ˜žž›”‘“—œ¥¦£¤¤ ˜˜œ£¡Ÿ›Ÿ¤¥£ ›™šš”‘’•—––—™Ÿ£¤£ “Š‹ŒŽ“”–•“††•œœž˜„~~|z{}~€yqmkptuvsokejr{|~€|pe[[\WPKLPXY\ZTLLILIHGA>759AFEJOQQY][YZ\bdaglrw€…‹‘”—š™šž›˜˜ž£¨¨¬°¯¬ª¬­­±ºÀÄÂÂÀº¶µ®¥¤ ¤¨©­¬¬«©¬±²²±µ»½¼¹¾ÂÃÆ~{z|€~}~ƒˆ‰ˆŽŒŽŽŒ’’‘ŽŽ•—˜”•—šœœž¢©©¬¬¨§¦¤¢ ›•–—Ÿ§«¬«¦¢¢¢§§¨¦¥¥¥¢  ¡žžžœœ›“’”–—œšš–’“•’’‘’ˆ‹Š‹Ž—œ £¡žŸ¡œœ›š››•–”“•šŸ¥¨«©¬°²´´´°¯®®ª§£¨­­­ª¨¦¦¢œ–˜š¡¥¦¬¯«©¦¢¢¦¤žš› ¤©¦¢ šœž ¢§«¬¨§©©§ª¬­·ÇÏÍÇÆÇþ´¨Ÿ•‘“–”‘‘•˜—šŸ¢ž˜–—˜š–˜šžœœœ ¡žš–••—ž¥¢ž™™–––””——¥§ª«ª¤¡ ¢£ Ÿ¢ œœš—•–—›žŸœš›–’“š›š¢¦¥¥¥£Ÿ›—“–™Ÿžœ—“””˜Ÿ ¢¢¡œ˜™œ ŸŸœ ¢¥¥Ÿ™””“‘‘–›—“•—š›ž £¤¤›”˜––•”—––’’‘¡¤¢Ÿ˜‚€~{zwzzsidhlruusnffgmuywxsi^UXXSLDLSWXWWQLHILKJFC>69?HIHMRX[[]\YVY\`bciqx|†Œ”˜š ›——œŸž¢¥§¨°³°°²²µÀÉÑÕÒÌÆ¿ºº´­§¤¦¦¬ª¨§¡œ¦¯´³³¹¾Á¾º½½¿Ä}{vvwusx€…‡ŠŒŽ‹Š‰‹‘Ž•˜–—œœœœ›¤¨¬«§¤¢ ¡¡ ž™˜ž¤­¶¸³®¨§¤¢¥¥¥££¡£Ÿžžž  žŸ ›™—˜—˜Ÿœ›–”“‘Ž‘‰„…„…„‡–™œžœ  žœœž™”‘“šž¥¦©©¦­°±±¯«©«¯°ª¦««©§£¡¢¡ œ––›¡¦ª®°¬©¥¡  ¢ž¢£¢§¤¢¢¡ž¡¡ž££§«®©­®¯­®­®·ÇÑÍÈÈŽµ¬£•’’••–—š›˜˜›ž™—“–™›–““•˜˜š›ššœ›˜”–•–š ž™—”–˜–•”˜–œ¤ª­­¬§¤¢££¤¢£Ÿ›˜–‘’–›š˜™—’“–•“œ ¡ £¤Ÿ››–˜››žž™—–•”–—˜šœœššž›ž¢£¥¥¡š•““‘“–¡¢œ•••–˜›Ÿ¥¨§¡žž˜–“’”””’œ¥¬«©¡šŒ‡„ƒ€{xzzyumekptvwslhegjqussmeYUWXTMHQWZYUTSNGKPQOIE=;;CKKGJQWY\ZWURUW[`ekuwz}‡‹’›¢£¥ ——˜œœššŸ££§°³³³·ºÃÍÖÞàÜÕËÃÀ¾¾¹²¯­«­«¥¡›— ®·µ´¹¿¿¾¸²²±µ}|yvwrty}„ˆŒŒŽŒˆ‰ŒŒ‹‹Œ––’”šœœœš› ¤§¨¦¡ ¡¢ž›¡¨¯µµ·²®©¤¡¢¡¢¡¢££¡Ÿž     œœ˜™™›œœ™˜””‘•’‡…ƒ€‚Ž—˜˜œ ¢£¢Ÿ ŸžŸŸ›”‘•œ£¦§§§¨­¯­¬«¦¤¤«°®©¬«§£¡ žžžžœž¤©­²³­©§¦¤¢£¢¡¢£žž £¦¥¦¦¥¥¦ª©¬ªª¬°±±°¬©²ÃÏÌÉÇ¿²¨žœ˜—•™šœž¢¡¢ Ÿžžž›™™Ÿž™“’”–“””—™–“‘’˜™›žž›˜––”‘•˜š ©¯±³­ª©¨¦¥¤¡¡›š˜”‘“–œž™š›—”—˜˜“™žŸ ¡£¡ž›››šœ ž›˜““’““”˜›žŸŸŸ¢§¨¨¦¢œ•••”˜¡¦¦¡š–”“’•œ¢¥§¦££ ›—‘Ž’‘‘”ž§««§¡˜ˆ‡‡~}~|rpswzzyqljifhnoopj`\W[\XTVX\`\YXWMHNSUQICB=>CIMGFKPQTWTTPUXY^gmqt{‚†Š•œ£©©£™š›š—–›Ÿ¡¨°³³·ÁÇÎÓ×ÜßÚÑÊÆÅÈÉÿº¶³®ª©¦¢Ÿ¨¶¿¾»À¿»¸³¬¥¢«ƒ„€|}z}€ƒ…ˆŠŒŽ‘Ž‹Š‡’Š‰‹Ž”–’—œœœš–š  ¡¢¡¡¥¢œ™™˜› £§«­­­¬«¥Ÿ ¡ ££¢£¢ œœ Ÿ   žŸŸœš—˜˜™šš–”•”“––’Œ‹ˆ†ƒ†‘›š™ž¢¥¤¢¡¡ŸŸž¢œ˜•“•›Ÿ¡£§§ª¯®«ª¨¤ŸŸ¦¬¬¨©©§§¦¤¢Ÿ ¢¢¢¦ª¯³µ´°ª§§¨¨§§¤¥ ›šœ ¤©¨©§¨ª¬ª¨¨¨ª®°±¬¦£¨¸ÃÅþ³§œ”—š˜šž¡¢¤¤££¥¡¢¤¤¢  ¢˜”‘•“Ž”–•“ŒˆŽ•™œžž ›—“Ž’—™Ÿª²µ´°­­§£¤£¢ œ›—˜•“•™› š™š–“–™˜•˜ ¢¤¥¥¢žžœœ›› ¢ Ÿ›’Œ’”˜žžŸžžŸ¤¨§¥¢—”’•–› £¦¥ ™–”’Ž˜Ÿ¥¥¢¤£Ÿ›–Ž‰‹‘’‘”œ¢£¢Ÿš”ˆ‰†~|ƒ‚……xtvz{}wqkgebefhiic\Z[^^ZYYZ]\\Z\UIELSUPE@A=CMRT\\VRTY_iiks|ƒ…„ˆŒ•—•˜˜—•‘ŽŽ’’•–™›£¢¡¢˜œ¢¢£¢¡¥©®®«¯¹¿¿º²±··»¹¶³´´°°¬¯±²±¯®°µµ²²¬«²··~~|}ytx~wux€†Œ“”‘Ž‡ˆ”—œ¡£ œ˜—““””—œ ¡ Ÿ¡ š›ŸžœžŸžŸ¢¡›š Ÿ›•‘•˜—–“”•——––˜›¢¡œžš“”—˜”Œ‡“•‘•––”””’”™Ÿžš’Š‰Ž•™›ž ¡œ™˜™›š–Š‰ŠŒ–ž¥¨¨¥¤ ¡¢§«¯¯±±°¬ª¤œ–šœ¡¢Ÿ ¢£¢£¤¦¦¦¢¡¢Ÿ ž›Ÿ¡¢¢£¤ Ÿžž¡¤¤¥¦¤¥¡š—‘‹Œ‰Ž™¡­±ª¦¦£ £§¥¢  ›œ›œ›™Žˆƒ‚€…‹“˜–› £¢¥¦§¬±±¬¤ ¡¢ š™››š™“‡††Š‹ŽŒŒŽ‘Ž––“‘Ž“–——˜›˜––˜˜—•‘”˜™™š™™”—ž¢¡žŸ¡¢¢ž›š™ž¡¢¢ ž ¡Ÿ—Šƒ†‹Œ‡…†„„ˆŠ‰ƒ}yw~ƒƒ‹‘‘‘Š‡†‡‡‚zyzwmhd\Ybhfigkkf[UVSPPRUY[_ec[ZYVUZYTI@=CMORY]ZWW\elmmu{{|}{{†“˜—šš˜–””““–—šŸŸ Ÿ  œš ¤¥¤£¥©®³´³³¶¹¸±¬­±¶¹»·³±²°±°°±³±®°³µµ´³®«²´·‚}z~~|toovwsmrx‹•š—•”‘‹ˆ‘•™Ÿ œ˜™—’““”–šŸ œšœœ˜‘’™œ›œ› £ Ÿ£¤¡˜’’–˜˜’‘’’“•––—˜œ¡ Ÿžœ•“•–•‘’”˜˜•“”“’’š•‰†’——–“”——š–Š†€Œ“ž¢¤¨¤ ž¢¦ª§¨¨§¤¡ œ•‘•™ŸžŸ¢£¤£¢¥§¤¢žœ™š™”“—›¢¢¢ ™›¤¥¥££¢žœ˜’Œ‰‹‘•”–œ¬´²ª¥£¡Ÿœ¡¢™˜˜–˜˜œž›š›ˆ„ƒŒ”—š—•›¥¥££¥¤¦©«§¤¡ Ÿœš–––››˜”‘’Žˆ‚€‚‚„ŒŒ‘“”’ŽŽ“•˜››™˜”’““”““––——™—•“’–œ¡ŸœŸž—•“‘š¢¡¡›  œ—†ˆ‰‡†‹Š‡‡„……}xy~…”˜˜’‘Š‡‰ˆ‰†}yuvrid_TO]eiiillg\UQWYUVUYX]aaZYZVSUQHCA?FPPQWZ\YW[cgilrx{{wyux‚Œ’–š›˜˜™™—˜™š£¤££¢£žœžŸ¥¦¥§­²·¼»¸³²²®ªª¬´¹ºº·°¯¯°³´±²µ´³³··ºº·²°³´·„€ƒƒvpnruspox}‡‘˜š•™–“‘‘“™Ÿžž›š›”‘“’•—™›—”˜˜––œš˜˜—˜œ žž £¥§¤™—™šœ—•”“’—˜˜™œ¢¢Ÿ–‘’“–—˜šœœ––“•‘‘’Œš¡¡’ƒ{|„‡Š‰ŒŠ‰‰Š’˜˜—“Ž†zwyƒŠ’œ£¨§¡Ÿ£¥¥¦¡  ›š˜”’•š›žž¡¤¥£¤§¥ž—‘“”ŒŒ‘˜œœœ˜™ž£¥¥ Ÿ Ÿœš”Œ–œž©¶¼µ¦Ÿ ž›œœ™˜•–—š¡¡ž› ’…€ƒ’›ž›˜’š£¢ ££¢¤¦£¡ŸŸ›™–“Ž‘–—™”“•–†€€|wtvƒ‹Œ•’“•™› ¢ž›–’ŒŒŒŽ–•–“––—”‘‘”š›œš™œ˜”Œ›¡ ›™›Ÿœ—‘‹‰‡‡ˆŠ‰…ƒ‚„€{~…– ”‹„‡††€|~ƒ€yvtrle^VT^fgkmmnl`VX`cd_ZZY[]\UTVSPMGB@ADLUUQV]]\YZ_ghkqvy{xx{‡‘”š˜™™™˜—›ŸŸ£§©¥£¤Ÿœ¢¡¥¥¤§«°·¹ºº¶®­¬ª««°¶¹¹»¸··¸º½½¸µ¶··²´¹¸ººµ²²³¶~€ƒ„ˆ‡„€yuwtsppwzŠ‘““”•“””’–›ŸŸŸŸŸ˜’“‘’”––‘‘”•‘‘–——••”˜››žŸ¡¦¦¨¥¢ž›š›œœ›œ˜’Ž“™ššœ¡¡š—•”’““–ššžŸž™•–••“‘ŒŽ›¤¥’}€†‡……ˆ‹ŒŒ‘—žžš”Ž‡xtv|‚Œ•Ÿ¥¥¢¤¦¨©£Ÿœœœ™™š™›Ÿ  š™—›Ÿ£¤¥¨¥Ÿ“‹‰‘’‘ˆ…Š“–––”–›¡£¢ŸœŸŸŸš”‹–žŸŸ§¯¹»²¡˜™™—™š™šš™™›žŸ£¦£žœ››Ž‚ˆ”œžš˜”˜Ÿž¢¥¤¤¢œ˜˜˜›š–’Ž‹Œ“—˜•—šž›‡yrns‹Ž’–š›¡žš˜“‹‡…Š“”“‘’–—‘Œ“˜˜—•—š›˜“‘”› ™˜˜œœ˜˜’Ž‹ˆ‡‡Š‹‡‡‚‚ƒ~Š“›Ÿ¢›“†ƒ……{uxƒ{srpib[X\adhlljkibXZbeeaYXWWXXRQPSQKC>;=DKSRMQ\a]YV^dilosyxux~‚‰Ž‘“–™˜™š ¥¨©­«¦¤Ÿœ™ž¤¨¨¤§ª¬±¶·µ°«¤¤¨¬®¬¯´µ¶¸¼¿ÃÇÊËÅÀº¶µ·³³··º¸µ²²´·zy…†ˆ†„‚{trnlkrw|‚‰’’‘’–š›››œž˜”’‘”’ŽŒ‘“““’’–™šœž ¥¤¥¥¤ ›™šœŸŸœ—Ž’™›šœžžš––•–˜—˜›œœŸ š–––’’’Ž“›¥§–‚ˆ‰ŒŠˆŒ”–˜š¡§¡›•Ž‡wrsz‡‘¥§¤¨©¬«¥¢žœ›ššž¡¥¥£œ”“›¡¥§ª¨¢™Œ‡’ŽŒ‡Œ‘“•“‘‘“™ž››Ÿ¢¡›’‹‘™¡¦¥¨®´²¦™—•’•˜›œœœŸ¢¥¨§¢œ˜››˜Š€‡—œœœš—›žžœ¥¥¢Ÿ™’”—™˜‘ŽŠ…‰’˜˜––š¡Ÿ–Œ‡‚}wry…‹‘“‘‘—™—–—•”‘ŽŒ‡ƒ†‹‘Ž‘“˜’’—šœš–“–™›˜–””—ž œš–———•‘Ž‹‹Œ‡†ƒ€zyz‰“˜œœ—Ž‰„…„„{tpt~yqlkc]Y]`dehid`cc^WS\a_[VSTVTTROSURH>549AHMLGJUZXSQT^ghkptvrsu{†ŠŠ‹Œ•˜™œ §±²±³®©£žšœ¡¨­ª£§«­³¶º´±«¥£§­®­®°±´¸¾ÆÊÐÑÍÉ»·´´±´··ºº·¶´´´yvw~€€‚„vplghnsw~„ŠŽŒ‰‹”™š—–•™˜’Ž““ŽŽŒŽŠ‰‰ˆ“•˜™ž¢¤¦¨§£žš˜›Ÿž ž™’Ž“   Ÿš˜•’•šœ›šœŸ ›™—”“——˜˜˜¥ª§Žˆ‹•—–›¡£¡£§¦¡—‰‡€xqtx}€‹—£§¦¨ª­­¦ Ÿ™››œ¡¢§«§ ™“”Ÿ¢¦ª¬ª¨¢˜‘•–‘“—ššœ˜—“’˜˜˜˜ž¤¤œ’˜œ¢¤§©ª£™”–˜‹˜žžžŸ ¤©ª§¢—”—š™‡‰Ž•š›š›œ  ž¡¡¢¡–––›ž™‘Œˆ„‰•˜–”šž›—‘ŒŒˆ…„‰Ž‘••”Ž’”•‹‰‹‹ŒŽŽˆ„†Œ‹‹Ž‘”–•’™ž¡¡Ÿš–—š›˜šœœŸ¡ ™˜”Œˆ‰‘••”“‘”˜˜Ž‡„|vstz‡”––‘Ž‡†ƒ€€xmfelu}zsjf`]Z]_fhhhe_ZZ\WPOUYXUQSUVYVSPTWPF7/3>GKKKEGMMKMLQYa`ejpvtqqv|ƒ†…‰Œ“•š¥¯¹¼¾¾»²¬¦  ¢ª©§£¡¦¬³¼¾¿¸°©¤§«®­­±²²ºÀÇÍÐÏËž¹³³´±³·¹¼¼½¶µ²°wrwyxx{~~yrojeikqx€Š‘’“Œ†ˆŒ•–•”’”’‹Ž’””’““’‘Ž‹ŒŠ„‚~~‰“•—œŸ¢§ª¦£ žš™ž™“‘–Ÿ¢¥¥¢ž˜”’—š›——˜ššš—”‘–—œœ ¥¤¡š“Ž–ž  £¨¨¥¥¦¤ž‰ŠŠ†}vy‚ˆ’ž¤¤¥¨ªª§¡žš™™œ ¡¢¨««§£¡¥§§§©©ª«¦ ž™š—š¡£¢ š—–‘”—™˜—™ š““•˜œ¡£¡›•”™ˆ”žžŸŸ  ¢¡¥¡œ—˜››”–™›™šžžž  ŸŸ ¡ œ™œžž›•“‹’”–““–™˜•“•”•‘Ž‘•˜œœ—””—˜—Ž†„„…‡†‰ŒŒ††Š‰ŠŽ’“’“š    ›˜šœ™˜˜ŸŸž›š–Š†Š“›˜–•™ž”Œ|xsz‹•–“Ž‡~}}|ysg\V[cnqqjb^]\]bgilmjfa[YYXTTWXWTRU[\ZRRQTSL<11;EMTRPMLMF@EKOU_adjqxvtu{€†ˆˆˆ‘•›Ÿ©³¼¿¿Â¿¹³­¦¡¢¢§¥Ÿ ¢§¯»¿Â¹±«£§¬®¬¬®«¯´¼ÄÇËɹµ´²³µ³µ¶¸»½¼¹³¯°potvqruyzzxupnfaclv~‡’‹ˆ‡ˆ‰Ž’••””‘Ž‘‘“•”‘‘Ž‘‰‚|…‘–•›Ÿ ¢¥¦¡ š™››™™š–’Ž‘—ž££¢Ÿ˜“–™—”–”–™™™—™•–•™œš“ŽŒŒ“–§§¥¥¥¢ŸŸ¡Ÿ—‹…ƒ…„|w‰Š“œ¢£££§§¥ žž›™™›Ÿ ¢§«¬ª¦§ªªª©§«ª§¥¥¤¥£œ™ £ŸŸ›š•”–™š—–—˜˜˜”–š›š›œžŸœ“Ž‘–—’•›Ÿž ››™œŸ›˜™œ˜˜˜˜›œœ›Ÿ¡¢Ÿ Ÿ  ¡ žš›ŸŸ œ˜˜–•–˜˜•”””–•’“—œ›•“—›œ ¡›˜™››š‘ˆ‚~€ƒ„‰‡‰ˆ…ˆ‹ˆ†ŠŽ‘˜›š›ž›™›˜•”•—›œœœ˜“•šŸ£¡š™›žž—ˆ{zww{‚‹ŽŠ„zzyxvoh[SQWcijhfb]_`dhmlpmhdb^\Z\\XYWSUTV]ZXQRQSQE6.4:CNRUURMLGAAIOV^`bhqywtv~…ŒŒŠ“—£ª´º¸º¾¼¼¸³ª£¢¥©ª¨¨§«±·»¼·°ª¥¨®®¬¬«¬¬°¸½ÂÃÀ»³®­°³µ²¶¶º½¿½·²±²ifmopvy||zvusnme\gqy„ŽŽŠ‰‰ˆ…ˆ””‘’’”–•“’ŽŒ‡ƒ…‰’•š‘Œ†€ˆ‘”—™žžž ¢ž›˜””“‘•˜˜Œ‹’™œ¢¤žœ•‘––––––“”—–™š˜™Ÿ —‚r~…‹—¡©«§¦¡™••”“Ž‚|}~|zy€”™–”•˜ž£ ¡£¥¨£¤¥ žžŸ¡¢¡¤©ªª¨¥§§¦¦¨¨¨¤Ÿ¢¦ªª¥œš™™œ›š˜š™˜—˜œœœ™––—–™ ¤¢¡ Ÿž•Š„ˆ’–•”™Ÿ¡ žš™•‘”™œžš››ž¡œŸ›šœš ¡ž Ÿ¡£££ž›™šœ¡¡žš™™›Ÿœš™˜š˜’‘’™Ÿ˜•šž¡ Ÿš˜™›œ˜Ž„y~„„†…†‚…‡ŠŠ„„‰Œ•——™™˜™™—””’–š™›žž›™šž £ª§¡›šž•…xsuvz|xpruuxrj`QFLZcifb_^]_dfkmonob^]\ZYXWWWRUSTX[[[TPUTM?5277HLPTV]jswz}{Œ’Ÿ¥§ª­²¶ºº»¼½ÂÃÁ½½»¼¹¸º½ÄÈÉÉļ¹¸»²¬ª«®®³³±¯¯¯°±±¸½½¸¶²³¶··º¿ÅÌÎÈÁ¸³³qmou|‚‚}xqg[`b[]`fs~‰Šƒ††ƒ‚…‹‘ ¢™š›˜˜”ˆxuyˆŒ’’ŒŽŽ–œžš›œžœ™”””’“˜—–‘’‘—˜››™™šš–––•“’‘’•—››œ—”˜žŸ ›•”ŽŽŽ’–˜•‘’‘‘‘’ŒˆŠ“™¡§¥™—ž¤©§¥£ ¢ ¡Ÿœ˜˜›ž¡¤§©§¦©§§¨©§¢˜•–™˜˜™š›œŸ™œž›š–“ŒŠ‹’˜¢¤š˜•”˜œŸ™‘‘—›œšž¤¦¦ž—Ž†Œ•—™˜“”•˜›˜••“”˜š›œ™œŸ   œššœ›šœ œž  ¡ œœ›™œ—“”—œš’Œ‘”–››š™š›™–“‹ˆ†ŠŠ‰Š‹Š†ƒ|‚}‚ˆŒ‘Ž‘ŽŽ‘““‘Ž‘’’•–••˜˜–•˜˜“‘Ž“”†‚{vsspjedcgjfhjigfbbadgaYRQSW\dhgejjaVW]`_ZXSUWUSY^]YXWSO?0)((1LY]]]SNTWWTVY\VPKRZjs|ƒ‡ƒ€}Œ–œ¡¥¦ª­¬°±µ¹¹µµ·º»¾ÁÁ¿ÁÆÄ¿²©§¯µ³²²®§£¡¤¥¨¬¯²¸¶·¿ÃÁ¼¸¶º¾ÄÇÎÐÏËÈÍÍÍ̆ƒ……ˆ‰‡†‹††„xf]TFFHK_v‰‹ŽŒ‰‹Œ‹‰Œ“—Ÿšš™•“‘ŽŽŽŽŽˆˆŒ‘“–—›œ ¤£ ¡¡œ™™–Ž’’–™˜™š–”–‘Ž•–›¡¡š”’—›Ÿ›–“•œ£¥Ÿš—–”“”‘Ž‰‚|umowƒ’£ª®¬¬¬¬¨¡–•œ£¥§ª¬©¢¡Ÿžœ—•˜™——˜—•”›¢¦ª®±²±­©¦¢¡¤£žž žŸž›˜••—žž˜–’Œˆ‡‹‘–™š—–•–•”‘ˆ…~}ƒˆ“‘ŒŒŽ›£Ÿ›”’•™œœ˜‘’“–—™š—”–˜™——˜šž¢Ÿ›™™™››š››—’’˜™˜—š˜™šš–•˜˜™œ ¡¡Ÿ›š™–”Œ‹Š‰ˆŠ‰†……‡ˆˆˆƒ„‡ŒŒ‰ŒŒ‹Š„„ˆ‹Ž‰Š‘–•‘ˆ}tnmojhhnt~ztokieccdcdfcd^_cgmldc`WNQWZ[evxwtk\TMKMSRTW[a^^_[YUPF;-&),/6@HSYZVQQWYYY[\\VOMScoz„‡ˆ†ƒ~ˆ•¡¢¤¥¥¥©¯µ¸·²¯°±´ºÁÀÁÆÊǼ±©¨®¶¸¸¸·²°¬®¯¯²´¶·º¾ÆÏÍÆþ¿ÆÌÑÕÓÔÐÌÍÒÎ͆‚„‡‡†„ƒƒ‚ƒ„}k_Q@CFKZo‚ŽŽŠ‰‰‡††ˆŠ“›žŸœ™–‘Ž‹ŠŠŠŠ’—’Ž‘–™›¡¡¡žžš—™•’’Ž’‘‘”˜œ›˜—’“•˜ž§©¡˜••šœš•““›¤¨¥ œ™–•“ŽŠ„wss|„“¡¨¬­¬¬«©¡–‘˜Ÿ£¥§«¯®§¥ Ÿ˜––˜–———••˜™žª¯³±­¨¢žœ˜–›™—”“’’‘–šš™˜—“Ž‰ŠŽ’•™™•’––•‘ŽŽ‰‹ˆ„Œ’—™š•••“œ¤ œ™—œžŸš•’”–——–””•––•“’˜™˜–•–——š™™‘‰Ž–™™š›››œ™”‘–•—š  œ˜—˜••‘‹‹Š‡‡„ƒ†ˆŠ‰„‡ŠŽˆ†ƒzx‡Œ’’Š‰””””ŠzsfYVUNJR`n~xrnigfddcagiigdcfmqqgd^VQSWY]jx}xk^QKJIMTTUUY[[\WTONB90(&+.16;CKSWUSUY[YVTUVUUVcoy†ˆˆˆ‰…‡“š  Ÿ ¥­³º¹µ²¯®²¶¼½ÁÇÇĺ¯¨¦¬¶¸¸¹º¹·µµ··¸¸¹¸º¾ÆÑÓÏÍÊÉÌÓ×ÝÝÝØÓÏÐÎÉ‚ƒƒ‰ˆ†}{}€}ymaO>FMMRbs„ŽŒŠˆ‰Š††‰˜œ™›™–“‹‰ˆ‰ˆ‹‘’‘ŽŽ’”‘Ž‹”•™œ›˜™›—––”‘””‘’ŒŠŽ•šž›——™˜šž¡”‘“•”“Ž• §§¥££žš–”Š‰„ƒ†‹š¢¦¦§©©©ª¥›–—ž¡¢¥ª°°ª¦£ š–—”•———“‘—£«±°­©¢žš“Ž“‘ŽŽ‹ŽŒŽ“——“–˜–’Œ‡‹”•“’”““Œ‹Ž“”›¡¡¢©¨¤›š–  ŸžŸž™“‘‘Œ’••—“’••’Œ‹–˜™™”‘““”–›š…Ž”•˜™šžž˜Ž’–š›š˜•“•—˜’Š‹‰ˆ††ƒ‚ƒ…ˆ‰‰ˆ‹Ž“’Š„ƒ~{|‰ŽŽŽ’‘Œ‘‘’‡|tl^PI>@EKMQVYVTRPNTW_eoy„‡ŠŒ‹ŽŒ‰‰Œ•œŸ¡žœ¡©²¼¾»µ²¯®±´¶º»¼·±ª©©¬³·¶···µ¸¹··»¹¸¸µ·¿ÇËÏÏÌÏÑÔÜââãÞÖÏÍƃ†Š‰ˆ‚xxz}|wnm^IP[[UZk{‰’‘Š‹‹‰‹‘‘“”—œš—“ˆ‰ˆ…Œ‘‘ŽŽ‘‘Ž‡‰ŠŠ‰Œ‘•‘““‘’‘”•––””ŽŠ‹Š‘›ŸžžŸ››˜˜”’‘Œ‹Š†‰‡ˆŠŠš¦©¦£¦Ÿœ™˜•Œ‰‡Ž•–šŸ¥¦£¤¥¨«­«¡›—˜œœ ¦­°©§§¤£ž›˜––”–•“‘ŽŒŒ™¤¬°¬§¥Ÿ—‘‰‹‘’Œ‰”’“——“†‡‘Œ‹’‘Ž‹ŒŽ’—ž¤ª¬«¯³±¨¢ž–˜™˜›œ›œœš—‘‘“ŽŽ’––“”’•”’‰Š”—™”“•–™š˜‘Š““•™ž£¤¡˜‘ŽŽŽ’’•—•’”•—™’‰‹ˆ‰…„…ƒ‡‰ˆŒ‹ŠŒŽ‘”Ž‰‰‡‰‡†Œ‘’‘Ž”—•‘’”Ž‹xrfXQJ>DXj|‘˜„zsjknlhb]\`fhgffeiiif`[]_]\cs~|ugVSTUUTUTSSQTTSQTNE6,('&-55588;<=FQVY[ZWSV[`elv~ƒ‹“’’•’ŽŠ‰Ž™œ¡ŸŸž¢§¯º½¼´°¬ª©­¬¬²²­«­©¨«°´·¸¸µ·»º¹¶¹ºº·°¬±·¾ÆÊËÊÌÐØãâãâØÏÆ¿¼…„ˆ‡†„€|{~~|vrogXV]\PN[r~‡ŽŠŠŠ‹‹‰‘–››™—•‡††„‰ŽŽŠŠŽ‘‹ŠŒ‰……ŽŒŽ‘“’•–—“–—•Œ‹˜œœœœ››š›–’‹‡‰ƒ€„…Œ‘—¤ª¤££Ÿœœ›–‘–›šš¡¦§¥¦¨ª«¬«¦ œ›™ššŸ§©§¨§¤¤¤¢š˜––—–’‘“—©«¨¥£ž–“”™š™™•‘‘–”’”••‘‰‡Š‰‰‘ŠŠ—Ÿ¦ª®®³¹·°¨–™››œš”’Ž’““””•–”Œ‘”—•‘•™™˜˜“Ž”™˜–™¡¦§¤™“ŽŒ‹Š“”•˜‘†…Š‹‰†ƒƒ†ˆˆŽŒŽ‘ŠŒŽ‹‰•––“”–™—–——•’‹zreVQOXbq‚“£¥™‰ymiklmjebcbeeedefghge\Z`d_ahszype][^ac\WTVTQPTVUQK@-$%))1:65775F^r~ˆˆ†…†‰ˆŠŽŽ‹Ž”˜—••“Ž‹‡‰‰ŠŠŠŠ‡ŒŒŽ‹ŠŽŽ‹†…Š‘‘‘’ŽŽ”•˜šš•—™–’Š‘–•——™š™™—”‹‡‡……†”—””˜£§¤ žž›Ÿž˜“”• ž›ž¦ªªª­ªª¦¨©¦¤¡œ˜˜¢§¨©¨¥¤¥¤¡ž˜””™˜•”’““š ©¬¨¦ œ˜–’”–˜Ÿ¡žœš•’•š˜“”’‰|y‡‹Ž’•–’’‘Œˆ‰Œ”œ¡££¦­³´°«›‰‰Œ˜¡£¦£¢Ÿ˜‘‘””“’‘“”’’’“”•Ž‘‘”—–‘”——“’˜œš•™Ÿ¥¦¡˜’‘‘‘Œ‚€ƒ‡ŒŽ“““”€‡†…~‚‚ƒ‡Œ‰ŠŽ‘““ŠŒ‰ˆŠ‹–™—–•—–—™™—”†veVJRew„’ž¬©Šrkhijjlhhgfbcacghhhe_\Zbdbchrupjd]^cdgbYUZZTPW\YQH7'"$(+29558;>@CIS_higgfnpqnt}ƒ‹”Ÿš•–™—”‘Ž’—œ£§©©¦¢¤ŸŸ ¡  Ÿ¡£ª°´··²®­­°µ·¹¼ÁÅú¶´´·µ²­­­µÂÈÈÅÁ¾ÇÍÐÓÑù¶¶Ã…†ˆˆ†‡‡„ˆ‰ˆ‚ztvrhig]D/1Qhw‡ˆ‰Š‹ŠŠ‹‹Š•“’‘’Ž‹ŒŽŠ‰Š‰‰‹…†‹‹Š‘––˜•”’’˜Ÿ™—–“‘ŽŽ’–—˜™š™›–””–”ŽŒ‰Œ‘’““””œ žš™—šš™—¢¦¡Ÿž¥¨ªª©©¤Ÿ £¦¤¡š™›¡¤§ª§¢¤¥¢žš“’“–—–••–›¡©­©£ ™•“‘‘“˜Ÿžš™—”•˜™—”’’‘Œˆƒ‡Œ‘•—™˜•“‘ŽˆˆŒ•œœœ˜—ž¨­¬ª‡’ž¨©©§§¥ž•”—™™™˜”••““’””“’‘’””‘‘ŽŠŒŒŒ–œ—‘’ ¢ž˜•“—’Œ„z‚Š’•––ˆ~zˆ…}ƒ†‚‚†‰ˆ‹“’ŒŒ‡„†ˆ•™™””––˜˜—”Œˆ„vjhp”š¥¬ªœ‰vhehegffikkjifekkjgfbacijhcgmpkfc^]`bdaXSXYSSW[WO?0'#&+*2865;>>CEJVaefilqw~yuz†‘—žŸ ›™ž¤¤œ˜—š›¡ª®³¯«¦£žŸŸ¢£ž¡¢£«®³¹¼¹¶³²³¹¹»½Á¿¼µ°¯°µµ´²¬±·ÂÉËÅý¿ÄÅÉÉÁ¼¼¾È~ƒ‰ˆ‰‹ŠˆŒ‘”ˆywoosnW>6C^p€ˆˆŽŒŽ‰ˆ‡”“’ŽŒ‹ŒŽ“”–”’Œˆ…†…€‚‡Ž•™—š—––“˜Ÿ¡š˜••—•”“•™››››š™›–˜˜”‹••Ž‘Ž–›™•–—™››–’•˜¢«§  ¡£¤ªª©¡š—Ÿ¢¤¢ŸœŸ ¤©§¢¥¦¤Ÿ•‘“–—••““•™ž¦¨¥¡Ÿ˜’‹ŠŽ“˜›–“’“’•––•‘‘“’““”••—™—•“’Š†ˆ’››œ—‘–›¡¥¥˜Ž›¢¬©¨¦©§¡™•–šžœ›˜––•““”•–’‘’’Ž”“’ŒŒŠ‰‹Ž–š™“‘˜›—”—˜•‘‹‡Š”–˜˜•Ž…xy€ˆ†ƒ‚†ˆ‡‡‹Œ“‘‘’‘‹‰‰‹•œš•”•˜—•’Œ††ŒŽ‰„…‰— ¢¤¦©¢•‡sfcb`__^ajorpoonlgeggeknpicbgkda``^\_aaUPRVUVWVPA3+%$),-1978>CFHJOX\^bhlt}€}Ž¡¤£—ž¥©«¥ššš› §­²²®ª§£ žž™—œ¢£ª®²¸¿¿»»º¹º¹»»º¹²¨£§¨¯´³²¯¯³¾ÄÅü¶·º½ÃÄÃÂÁÃÉ~„‰ŠŽ‘“™¡ž”ˆ{rporvhP?@I_u|ˆ“”’Š‡…Š”••‹‰‰ˆ‰“—š™•‰…†‚€ƒ…ŒŽ‘’–˜™™™—•”‘’šž˜•––—––™œž›™˜™›™–”›™‘‹–•Ž’–›˜“—–˜›™››Ÿ¦­©¤¡žŸ¢ªª¨£–“š Ÿ žŸŸŸŸ¤ª¬©£¥¨¦¢š•“”˜––•’•˜—›£¦¤¡ž›”“Œ‹Ž•–“’‘’”’’‘’“••–—“’”–•—”‘‹ˆ…‰‘›•““–œ¡£œ—šŸ©ª§¤¢¦§¢š“—™œ™—••••–™™˜––”Ž’’’‰‡Œ”šŸž–’–™˜•’”•š›˜”“•“˜™š–”Žˆ‚‡ŽŽˆ‰Š‹‘’’”’”˜š˜’‹Š–š™•’”˜—“Žˆ~‰’–¡¦§¥¢¢˜Œnecb``^\ansuutusnjiifghlmiefghb]_^_]`^^WNQVXZWPD4*'%(+05AHKOLPUZ`aisy~‚ˆ–¢§£ž˜–œ¥ª§ š—˜˜™ž¦«°²¯­«¨¢ž™”‘—£«¬±±·¿ÂÁÂÀÀ½»º¹¶¶®£Ÿ¢§¬®­«¬´¹½»¹³±´¶º¾ÃÂÃÁ½Å…Š‘’”˜š ©¨~vqsz~|fQ?>@btŽ•–“‡†Š’””‘‰†…‰‘””˜—“‰†ƒ…ƒ„ˆŽ•–˜™•–’‘Œ”˜’’‘•””–šžŸ›––•–—•”˜£¤œ”Œ”•‘‹‰‹–™›™”—›š™œžŸ¡¤¥§¨£¤¢ ¢©¬«¢š”˜šš™˜œ £¦¬¬¯¦ž¢¦§¤ ™˜™žš˜™—˜˜¥¥¥¡Ÿ›™”‘‘’“‘’’Ž’“’“’•˜˜–“’’”–™™”ˆ‚€†Ž—¢ š—’Ž“›¢¢¡¡¤¨©¥Ÿ¡¤¥¥œ–’•››˜—•”•–—™œœ˜“ŽŽŽ’ŒŠ‘•—¡£•—–“‘”šž››™—™œ˜—–’ŽŽŽ“ššš“‹‹ŽŽ““’‘’šž˜–‘‰‰‘“”’•˜”Ž†}˜—”’—¡¦¤ œ—“Š}qea``aabky|~|{yxrpnhcb^bcdgigfa[__^`]ZYXRQUZ[UH9+(*.)*4:CJIFGJNOONOZchoy†ˆ‰‰›¡¥¢œ–—™ž¢ ››žŸ ¥­°±¯°³°¬¦£žœž£¬±³±³¶»ÂÄÆľº¸·µ´³¯§¡§¥¥¤©¨§¬±´µ°¬¬¬°··ºÀÁÀ¾»Áƒ‡‹‹‘–›£¬«žŽ„}~‡…zbH93Key‰ŒŒŠ’‘ŽŒŠŽ‘““ˆ……‰““””‘ŽŒ‰ˆ‰……‰‘•˜››•“ŽŒ’–“‘“’’’–›ŸŸœ™—–““”•–š¢§¡›”‘“––…‚Œ’–™˜–š›™™šž  œ¡¢¡¢ £¥§ª«¤œ››š™•–™ž¢¨ª¬¬£œž¤¤¥¢ŸŸ£¡›ššœœ›£¤¢ ›˜”’“‘““‹ŽŽ““’““–•””‘’™žœ–Œ„ƒ˜¢¦¢›”†ƒœ¡¡¤£¥¦¥Ÿœ¢¤¡ž—”•šš–””’’••˜›œœ›“‘‘’”“‘’•˜›ž¢¤Ÿ˜—•’‘–›Ÿžœœž™•–˜—–˜”””“—˜™–Žˆ‹‘ŽŽ”˜šœ™’‹‡Ž’•—“Ž‡€ˆ—Ÿ›–• ¢Ÿ›—’†}pe_^aefir~‚‚ƒ€|vtqjd^ZY[^adfc^\[^_]^[UWVSUWYXNA4+-23/.29CHJGFINRPNS^hqv}ƒŠŽŽ–›¢£¡œœ˜—˜š¤¨«¬±²¶µ³³µµ°®«¬­¬±´µµ³²¶¹¿ÂÃÿ»¶³°±±­§¨ªª§¥¦¥¥¨¬°®«©ª«¯±´¸½¿½½¹½ƒ‡ˆ†ŠŒŒŽ’Ÿ§¥šƒ…Š„ƒ‰‡{hL8.3Ih‚‰‰ˆˆŽ‘“”††ˆ‹‘’’‘ŒŽŒŠ‰†„‡Ž‘’•š››–•’Ž‘’–”’’“”’—œžœš™™—••———šž£¤ ›——˜–Žˆƒ‡•›žœœ™™›œžœ—–›žŸ¡ ¢¤§¦¦¥¡¡£ œ˜”–›Ÿ¡¢¤ ›™œ¡¢¡¡¡ ¢§¤›ž žŸ¤¥ŸžŸ˜‘ŒŠŽŽ‘’“”’ŽŠŒ“’‘“’“’’™¡Ÿ–‹„‡ž¤©§ š“‹xuƒ˜žž ¤¥žœŸŸœ˜—–›š—‘‘‘’”˜˜›››—“‘•–“—œ›š™™›œŸ ¢Ÿ˜”“‘•›¢¥¥£Ÿž ›•–›™™—˜•‘’‹…€‰ŽŒŽ‹“——œ›˜•ŽŽ“—˜”‘Ž‡„‹œ ›”Ž”šš™”†wkb[^cjnms|‚|trla^WUWY[aa_[ZWYZXXXWTVYUVVTPE7-+16542694.(,.4;=>@BJLHLQVU[o|~}|y~‚ƒ‡‹’™££¤©©©ª¨¥Ÿ¡§ª²¼ÁÀ¾¿¼¼ÃÉËÉÄÁ»³¯®¯­­¬¨©«¯´·µ¶¶·±««±´³°­´¹¹¸³´°³»ÀÀÂÂÃÁ½»»¹µ¶»¿ÁÀ¹ŠˆŠ‡…†‰‡ˆŽŽŽˆ|paI>?5& 5ZtƒˆŒŽ˜›™–”‘†ƒ…ŠŒŒŽ’“’•–˜žŸž—••—•Œ’‘‘’“’“šŸ›–’Ž“•–––›š‡‡‹‘•˜™™˜–Ž†„‰Œ“”•™”ŽŠ‰‹’—š™ ¢ œ›ž¢¢¢¡ —”“—š›š›œžŸ˜‘‘‘‘’“’‘’™œ–“•šž ¡ Ÿ ¢ ššš˜™––•–š˜’“”‡ˆ‰‰‹‰“•‘Œ…‚‰‹ŽŒŒŒ“•–——”ŒŽ‘ŽŠ“™œš™–—““‘–˜––˜”•˜™•ŒŠŒ“šŸ˜•˜œ™”‘”–”‹‹ˆ†Œ“™žœœ ¡¢ŸŸœ˜“—™š™–˜˜’Œ‹‹ˆ}y}ƒ‡‹Š“•““”•’ŽŒŒ˜š—”‘ŽŒˆƒ|y}‚„†„€wtrrstqopoklooqrqquyuolkjhlld^YVTRSW^`_YROSTPIB:/()+0735<@CIPNMRZ^_adouz~€‡‘‘•—Ÿ¬²¹¿ÁÂÅľ¸µ±­³ÀÎÒÍľÃÅÌÎÎÉÁ¾º´®­ª¨¥  ¢£©¯²·½½»¼ÀÀ¿º·´²·¸´±¯±´¶½ÃÅÂÇÆÄ¿¼¼º¼½ÀÁ¿Âˆ‹‹ˆ…„Š”’Œ„zvqfWH===:2! ?f„‡‹‘˜™œœ™”Š„„ŠŽŒ‘”‘’– žš–—˜—’‘”””’‘‘‘•›ŸŸ™’Ž‹“˜›š™–˜–‹…‡Š‰‡””––•~‚…‡Œ‹ŽŽ‹……‰ŽŽ‘•™–š›š˜˜›¢¦¦¦–‘’••”–™œŸ›”“’ŽŽ“’“”“–™˜‘’–™š››žž¡¡œ˜•““’–š˜˜”ŽŒŽ‰†„…‡†‚ˆŽŽ‹‡€€‚†‡ƒƒ‚ƒ†ˆŒŒ‘Ž“Š‡ŠŽ•˜š˜–““‘ŒŠŠ“’”–“’•”’‘ŒŽ‘˜œ›™–˜—•“ŽŠŠŽ”‘‹‰ŒŒ†‹”˜š œœœž›•‘•˜š–˜š˜Žˆ†‡‡ˆ…ƒ…†…†ˆˆ†‹’“‘“”‘‹ŒŠ“™–”ŽŠ‰Šˆzz|~‚…„}zwuvwwtrsojionlkjmrrrmjnmmojcYPKMRRU[_YVSSVUK<20-**/598:=AGPY[VV^ceehov‚„Œ’““˜™ §©­³»ÀÄÆÁ»¹¶²²ÀÍÔÐÌÇÅÅÃÈÈÆÀ»¸´±°®­©¡››ž¤ª®³¹¼¼¸»¾¿º·¶³¸¸¶µµ¶¸¹½ÁÃÅÉÊÉû¸·¼¿ÂÆÈɆˆŒŠƒˆ–‘†vjd_^WI@>=7+ )Lk|€ŠŒ–˜™˜”Žˆ„ˆŒ‰‰‘ŽŽ‹Ž•—”“”˜˜“’”“•”““”‘˜Ÿ£¢š”ŽŽ’“˜œ™™™ž›“Ž‹‰†‘“”˜—„ƒ…‡‡‡‡€€„‘‘–•‘”“’”–˜œ££¡ ”ŒŽ’–”‘–›¢¥¡™˜”‹ˆˆŠ“’”•••™œ—Ž‘’’——˜›ŸŸ›™˜”’”™Ÿžš’‹ŒŒ‹†„†ƒ‚‚…ŒŠ‰†ƒ‚…††€|~}|~ƒˆ‰Ž’”‘‹‰ŠŽ”’“‘’’ˆ‚‰‘”—”““““’•——–˜™••‘ŒŽŽ‡…‰’‹”˜˜š™——š›™”Ž’’“”“‹†ƒ„‡ˆŠˆ‡‡‡ˆŠŠ‡‡’’‹‰ˆ–™•‡„‚…ƒƒƒƒ„„„…|zxyzzwsssonpkdccgsrqmjmmlljbXOMNRTWZZVQSRTPE4*,+-+07<:;?@COXZWYaghgjnwˆˆŠ““““•˜¢§¨¨ª±¹½½ºµµ²®¯¸ÉÓÖÖÖÑÊÉÅǺ´³±³´°°¯§¤¢¤§§©­³¹¹º¸¾À¿½¹¶¶·¶µ·¸ºº¼¿ÁÂÆÊǼ¹¸¹ÀÅÉÌу…““”‹xf]VVVQJBA?2& .Ln{„‡Œ’•˜—“ˆ‡‰Š‡†‰ŒŒŒ‡ƒˆŠŒ’––“•—“–•–•”‘’—ž¦£–‘Ž’—šœœœ¡£¡›•‘‹‰Ž’”–›š”Š…‚€„…ƒ€v}Œ•–—”–™—”‹Ž‘‘•˜œœ“ŒŽ’’”–—Ÿ¥¨£š˜™”‡‚†Ž”””–—•˜›š”Œ‡‡‰Ž“——™œœšš˜”‘“—œŸŸ˜ŽŽŠ‰ˆ‡„…‡ŠŒŒ‹ˆˆ‹‹‡}€~}ƒ‡ˆŠ‰‹ŒŽ‰‰ŽŒ‘‘“‘’‡„‰’’•––—••“’’“–•˜˜•“•“Œ†…Œ”š™–“–““•’’—™›šŠŒŠ‹Œ‹‰‡‡ˆŠŒŒŠˆˆ‰ˆ‰‰Š‹’‘ŽŽŒˆ…‡–•‘‰‚~||„ˆ‹‰‡‡‡…€{y{y|{zwwwuvunf`bjqpnkigihee_VPQPRVYZXRRQTSKA0(&%*13:>>=@@DNY\Y]emnknpw€…Š‘•˜˜––™¤ª¥¢¤«±¶·´²¯­¨©´ÁÑÚÜÜÙÓÍÈÿ¹´²²¶·³³²®®­«ª§§­±¸»¹½ÁÃÿ½¼º¸º¼½¾¾¿ÁÄÄÇÊÆÁ¾¼¿¾ÃÈÈÊσ‡”žž›—“m\PNTVQLHE2)%*18<4+,/26=@FQYXZbksuy}ƒ†„‡††ˆˆ‡‡‹‘”—›ž¤§¬°°¯®­«¨£¤¦¬µ´µµ¹µ±¬¨¨²·µ´°¯±­«¨¬­¯¯°«¨¦§¨ª®´»ÆÌÓÖÚÚÛÔ×ÖÓÍËÉÈÉÅÃÅÃÂÃÅÊÊÉÈËË̃„†„ŠŒ~qaV[_YTMD=2%   1Sbovz}~€…†ƒƒ‡‰†ˆŠ““—™› ›–‘‘Œ‰ŠŒ‰Œ““‘’’‘‘‘‘‘“•••™Ÿ ¤§¤Ÿž¡¥¨£Ÿ™š˜•—˜“†…Œ‘“‘’“œ¡¡œ™˜œŸŸ¢¤§­©Ÿ›ŸŸœ¢§¨¬«¤¢£   ›“””–—””™›˜—”ˆ†ˆ‘’’—˜š™–”“‘“•——’‘ˆ‚‰’’‘—˜“‹Š…ŠŠ‹ŒŠ†Š‹‰‰ˆ‡†…€€{}‡Š’—–“’”‘”••“”“”•—’Ž‹‰Š‰ŠŽ’—Ÿ¤¨£¡Ÿš——˜–’’–™›œ›š˜˜™œŸŸ“ŒŽ‘–š˜“‘‘–˜‘ŽŒ‹ˆ†‡‡‹‹‹Ž’•–•˜–‹‘––”‹ŠŽŽŒŠ‡‰ŠŒŒŒ‹‰‡†„|wyvtnsz{}}{ywsttu}‚€xpjha[UZ^[[`geYTVWWPB2*#!+18>7.025<@DHR[[[cnrnr{}{~‚…†…Š”“•˜¦®²³±¯­¨©¤¥¦©¯°­°³³®¦žžª´µ³´´¶²°®®¯¯°±²¯®­®²°·¾ÇÐ×ÜââáÛØØÔÎÉÇÈÇÄÀÁ¿½½ÀÄÇÆÈÊÌÍ…„…Š’–œ–rf``\VNKE>. + +5N`mty}€‚‡…‡Š‡…‡Š““—˜›ŸŸ›—–”“ŒŠ‰ˆ‰‰Ž‘“‘’‘‘’•”Œ’””•–˜šœ¤¨¥¢¡œŸ ¢¡›œ›–‘Œ†‡—›™“– ž™™ž ›Ÿ¤¨¬¦›—–•“‘—£¥ªª©¤¤¢¡££œ—’‘“’“™š˜“Œ†……‰Ž”—˜•˜˜–—˜“ŽŽ’—–‘‹‰Œ’”‘‘–˜”‹‹ŠŠ‰ŠŒŒ‡„„‰ŒŒ†„†‚‚ƒƒ…‹”š˜’’••’’““––—–”ˆˆ‰ŒŒŒ”–š¡¤¢¡¢¡¡¢¤¢žš™›œ›™™šŸ¢¡Ÿ”Œ“ŽŠ–š˜””ŽŽŽ‹†……„……‚††…‡ŠŒ•••’Œ‰Œ””‘ˆˆŒ‘‘‹‰Š‰ˆ‰‰ˆ‹‰‡ƒ~|zwropqwz}zusstsv€‰ƒ|ojd[VX\_\Y^c]XVVWTH9)!!,29?8/024=CEGR]\]affekx~}xvy|‚†‡„‰•“‘’š¢®´·µ°±±©©«©­²³¸¹·¶µª ¢ª²¶¹¹¼½¾½¾½»¼¹»»¸¸¸¹¼º»ÂÊÏÕØÞáÞÚÕÕÐËÉÆÆÇž»¼º¿ÃÇÅÄÅÅÈLJ‡•›¢¥¨¥›~oe]VPNJEA2  6Qaltz~ƒ…ˆˆ‰ƒ‚†Š’”—™›œŸ—–—•”Œ‰…‡‡‰‹“‘”–—•”••“‹ŠŽ“——•—›Ÿ¢¥ ¢ ££žž¡£ ™Š‰ˆŠ‘™ £Ÿ˜œ£Ÿ™–˜š™™šœ  œ’ŽŽŠ‹’™Ÿ££¡Ÿ››š›¤¦œ“’‘‘“”“Šƒ|z€‡–˜˜™—’“‰Š‹Ž•“’“””—˜˜“‹Š‰…ˆŽ‘‰‡†Œ•“‰‡„‚„‡ˆ‹Ž–ž™“’“’Ž”˜——–•”ŽŠŽ‘”™—™ž¢£¤¨§©©ª¥ Ÿ™˜œ›   ™Š‹‡Œ”š›–”Ž‰‰Šˆ…‚ƒ…†ƒ…†††‡Œ’‘‘‰ŠŒ‡ƒŒ’‘‹‹ˆ‰‹ˆˆˆ‰ŠŒ†~xxvpmmlory~~wrrsvtwƒ‰‡yib_WW]cfb\[^\UUVQI;)"/7;@92379+ + (?Vckquy…ˆ„~~}‚Ž•——™žš–“‘’‘Œˆ†ˆ‰‰‰•š˜•‘’’’Š‰‹‘“””˜šš›ŸŸŸŸ žš›¡£¤™Ž’“—¦§¤œš  ›—•””–••–—’‰Ž’–š˜š™š—•’Ž“š™’‘ŽŽŽŽˆƒ‚yx‡‘‘ŒˆŠŠŠ‹ˆ‡‡‘ŽŽ‘“‘“——”ˆ„†„ƒ€„‹Œ‹ˆ†…‰‹ˆ‡„…Š“šž›“‹‹‰Œ“–•“”””“’–––””™žœ––›Ÿ £¤§¨©¥¡œ——›œš——™—”‡Š‹‰‡Ž“—˜—’ˆ‹‰„€z}€€ƒˆŠ‰†ŠŽ’‘‘’ŒŒ‹Œ‹†„‹ŽŽˆƒ…‰ˆˆˆ‰ŒŽŒƒzusqmjklnuxz{upotuuu}‰€l^\WRW`hjf^YZVQSVJ<+ *7<61& +3H]hkorvz…‰…~z}…–––š›˜’Ž‰Œ‘ŽŠˆ…‡‡„‹ŽŒ“˜•‘ŒŒ‹‹‡‹Ž””——•”˜›œž™–“š¡¥¥Ÿ˜—œœ¡©«¤›—šŸœ˜’Ž’––””—‘Œ‹‹’“˜˜—–—˜—˜”Œ“–‘ŽŒ‹‹Š…~|z‚ˆŒŠˆŠŠ‡…‹ˆ‡‹‹†‚„‹‘‘“”‘ŽŽŠ…{u|~~z…‰‡†„ƒƒ‡ŒŠŠ‰ˆ†‡”‘•¡žš”‹‰„‡Ž”––’”•–”’‘—šžœ—–™œ˜’’—–”˜›œ £¥¤ ™—•—™™˜–Ž“Šˆ‰ˆ‡…‹‹ŽŽŠˆ‡„wswy€„ˆ‹‡Œ’“••–“ŽŒ‹‹†ŠŒˆ€~‚‡Š‰Šˆ‘’‡zuqlhffhlsuxvsnovsnq|€sgZUQMT\afbZURQOQLB1 $.9=<>7/23?:3667ADADPbqwutrx{{rruyˆ‰‹Ž’’—˜ž¨±µµ¸¶µ¶¶´²°­­²¸¼»¾ÁÆÆÁ¿ºµ³¶º¾À¾¸¸¹º½¿¿ÄÈÊÈÉÅÅÅÇËÑÔÑÑÒÕÒÎÊÆÈÈÌÌÉÉÆÅÁ¾ÄËÎÎÌŽºººŽŽ‹†|iRIDCEA7)! +  + 2Ialmonu~„‡„}x{}‚„‚‚„‡‰†„‚€…†ˆŠˆˆ‡‡‹‘‘ŠŠŽŒˆ…††‰†~‡––—’“”••’“—ž£¤¤¦¨¬­¬ªª«©§Ÿ’’–•“Œ‘™Ÿž˜’‘ŽŒ‰‹”•”‘‘•™Ÿ—’Ž‹††ˆ‰Œ‰Ž‡ƒ…ŠŠŠˆ†ƒ„‚|‹‹”•—™™–”“’‘““‘‡€‚|„ˆŠ‹Ž’’’”“Ž†{tp„Ž‘—œ¥¦¥Ÿ˜’‹‰‘˜šššš–“‘‘’”–—•“’’’‹”•––––••˜›•ŽŽŽŠ‚}{wry}xyƒ‚„ˆ„~|vprvx‡Š‡‰Š‰‡‹ŒŒ‘Œˆ†…‡‰—˜”Š€…Š…zqkdbcejpsvxwux~…„~wuk[SPLKLPQUSNIKNOOL>/'!+-,38;?D?>>?<=>?DUkuwyvx„ynqt}ˆŽ•—šž£¨¯´µ´³³´´²²±­¬¬®³µ·¹º¾¿¾º·¶¶º½ÃÃÁ½º½¿ÀÀÁÄÉÊÈÉÅÅÃÄÈÎÔÑÒÓÖÕÒÎÉÇËÎÎÌÊÇÅÃÁÅËÍÎÌÇ¿¿ŽŒ‹Œ‹Œ‰…zgRGADA9-$  + + + +   8Qbelorz‚ƒ‚€{yx}~{z|€‚ƒ{}…†ŠŠ‹‹ŠŽ“•Š…‰ŽŒ‰…‚…‡‡†„†Š•™™”“‘“•“•’‘•šž ¤£©¬¯­ª¨¤£¢‘‘•–š•“–™š–‘‰‰ŠŠ‘“‹Š‘•–•‘‰‡„†ˆˆŒŒ‹‰}~„‚‰ˆ†‚…††‚}v{ƒ‰‰‹“•˜››•’‘Œ‰„ƒƒ€ƒ†ˆ‰Ž’’”“‘‹€rjl{‡Œ– ¦¨§¡œ˜–’’–›Ÿ››™“’‘’“”“‘“‘‘ŒŒ‘”•””’•˜™”‘ŽŽŒˆ|wpnsyyvru|~€‚‚|rjouzz…ŠˆŒŒ‰„‰ŒŽŒŠ‰‰Œ‘ŒŠˆŒ‘™œ”‰~†‹Œƒzrleedihkpsuuvx‡‰€wqcSPNLIOPQSQLKKNONF7)"'04258;=DFDEDEA?EJ]lvxyz†…wnpy“‘“™¡¨«¯´µ²®°²²³²µµ±µ²±´µ´µµº¾¾»¹·¼¾ÄÅÇÄÂÂÄÈÈÃÂÆÆÉÈÆÇÅÃÃÇÉËËÎÐÑÒÑÌËÇÉÊËÊÈÄÅÆÅÊÍÍÏÎÊÈÇÅÄŒ‹‰……†‚~}}kZKIC=3'  + +  + ";J[lmrux{}~€yz||y}€ƒ‚~}~‡ŒŽŽ’’Ž‹Š†‰Œ‹…†‹ŠŠ‹‘“˜š—•˜•”•”•”“˜œŸ¡£§­¬¨¤ œœ–‹“›Ÿ žœœš–’‘Œ‹‹‹Œ‹‰‰‰‡†‹‹ˆ…„„ƒ‡†…‡‡‡ŠŽŒ‹€xyvy}€…ˆ‰†€wy}ƒ„‡Œ“˜›–‘ŽŒŒˆ‡„……„‚‚ˆ……†ˆˆ‰ŠŒŽ‘“†€{nfkvz‹•¢«¬©¦¢ ž›˜šžœžŸŸ˜“‘Ž”•’“’Œ‘”—˜˜˜”‘Ž‹Œ’’‡‚}wouxytuy{~~~~}{umfly€}}†‹‘ˆ‰‹‹Š…‰‹†„ƒ…ˆŒ””Ž‘–š˜ˆ‚†‰‚zsprpnnlkntx{x{‚†tiZSOQNLOTQRRPQOQPI>+#+2489<<>BBDDIIHHKUcmw|{{~ƒ€vmt}…‘Ž’— ¤«°¶·º¸²­¬¯²³´¸»¹»¹··¹¹¸¸»¿ÂÀ¾¿ÁÄÆÇÉËÈÇÉÇÈÈÃÃÄÃÃÆÅÄÄÃÆÇÃÆÈÊËÉÌËÉÈÊËÊÊÉÇÉÉÈÍÐÏÑÒÎÏÍÈÇ‹ˆ†ƒ…€|wwxym\QLE9,$"!  + + &9Nhnqsqquy||z}{|€ƒ…„‚}}€ƒŠ‘””‘‘“ŒŒŒ‘’•–‘‹‰Š‹ŒŠŒ”˜šš›š—””–”’“—™œ ¤¥¥¥¢Ÿ—”–Ž†‡ŽšŸ£¡Ÿœš”‘‰Œ‹Œ‘‘Œ‰‰‚~ƒ‡…†‡…ƒ‚~€~|…‰‰ƒ{ywz~€€ˆŒ†~{~€‡ŠŽ’˜–“”‹‹‡ƒƒƒ„‰ŠŠŒŒ‹ŠŠ‰Œ‘Œ~zqkinpŽª¬«¦¢  œ˜˜ž¡¢  œ””•Œ“‘ŒŒŒŽ•—•”“‘‘ŒŒŽ“—–‡ƒ~xvy~||~€~zxsqko}‚}‡ŒŽ‹„†ŠŒ‰……‡†‚‡‘‘‘‹‰‰”ˆƒ…‰Šƒ}vrruvtvpopv}|z|~~ymbXRQTTSTVVVRNQTPJ@3!#)247=@?@BAADIKKNS\dnz}}{y~zroy€„‹“š£§®µººº¹²««­¯±¶º¾½¼º¹¹¹·»º½ÁÆÅÂÆÄÃÄÆÇÇÇÆÄÄÅÃÂÃÀÀ¿ÁÁÁÂÂÆÇÃÀÇÊÇÄÈÈÇÉÊÉËÊÌÉÊËÈËÏÏÔÓÒÑÌÇÄŠŠŠˆƒzwttwl\RLF7&"!  +  + &BGLLOOMRV]cdhmqru|~|~†ŠŒ‰‹‘”™›¢©­¯°µ¶³±²­«©¨¦ª°¸¾¾»¼ºº¸¶¹¹¸º½½¿¾½¾½½º¹·»»¿ÁÀ¿¿ÁÁ¾»¼¼¾ÀÂÆËÍÎÍÉÇÄÁÄÄÆËËÈÈÊÇÅÃÇÊÍËÊÈÁº‚†…†yuvtqkZNLG;-"  + + + + + 3Kdzzvrmqqqlqtvvvxy||€‚…ˆ‰ŠŒŽ‹‰Š‡†ˆ‹ˆƒƒˆ‘Š‹ˆ‰‡Š•˜—™™ž  ¢Ÿš”ŽŽ’‘•—™”ŒŽ”•žš“““”‘Ž‹Š‹Šˆ…„„‚~{}€|yy€‹“†zsy~€‚„„†ˆ’‘Œˆ…„†‚„†ƒŠ•šŸ¡¡›™˜—š–™œ™”“’”˜›˜žŸœ•ŽŠ†‚zv‚’•—•”’‘•–—‹’Ž„sjov†”™—ˆ„Š‹‡ƒ„‡ˆ†…‡‰ˆ„…†‰‹Š‰ƒ|~…Œ“–„~„‡†ƒ„ŠŒ‰‰ƒ€€}ywyz€ˆŽ’•’‹Ž‰‚€{yyz}}~ƒ…ˆˆŒŒ‰‡……ƒ€ƒ‡†‡†~zyxxytpmrvtz‚‡‡ƒymh_^aba\RLPUSUUQKF9' $%*/8>CCHLONNORW]djiilknt|„„ŠŽŽ“˜™œž¡¨¬­®³³°­«¦¨§¨««²¸¼»¹¸º¹¶´·µ¶»»¼¼¾»½ÁÁ½»¸·¸»½¿À¿¼¾Á¿¼¹·¸º»ÁÈÎÑÐÎÉÇÆÃÂÂÄÆÈÇÉÉÊÉÆÇËÊÈÇ¿·†……‚|vsqlf`VNH?5' +   + +  3Oh|~wrmjnolmqtx|{‚ƒ…†††Š‰Š‹‡ƒ‚ƒƒˆŒ†ƒ‚…‰Ž‰ŠŠŠˆˆ†Œ‘’‘”›¡£¤¤¤œ–‘’‘’–“Ž‹‹•˜ššœš—•’•™–‘Ž‹‹ŒŠŠˆˆˆƒ‚{vsutst˜š~}€†††ƒ„ˆ‹Ž’’ŽŒŒ‰†‚‚ˆˆ‡˜¡£Ÿ ˜˜—Œ‘‘‘“™š˜›˜‰„…‚}}‰”™™™š˜•‘•œ›–ŒŠŒ~lebo˜–…„†‡ƒ„…‰‹‡…‡„ƒƒ‚ƒ†‡ƒ~z„ŠŠ…†Œ‘‘Œ…†‡†‡†€{ysqrx|€‚†‰‹ŽŒŒŽŠ…~{www{‚„Œ‹‹ŒŠ‹‹…„„ƒˆ„…„ƒ~~yunglpty€……wmb]Y\_]XRMMTUVSOI;+!+-14:>?EMPMMKLPRX`fijjeemz‡‰ŽŽ’—››ŸŸ¡¥§ª­°±­¨¨ª«««ª­³·¹º··¸·µµµ¸¹º¼»¾¿½¾½¾º¹···º»¼ÁÁÁÄÂþ»»¼½¾ÃÉÎÍÍÉÉÉÇÅÃÁÀÃÆÇÉÍÍÌËÈÈÄ¿¼»¶²‚…ƒ~{vpmg\SPH<4)    + + + +  9Zo}{uojgmqpou~€‚‚ƒ‚ƒ…‰ŠŠ‰…~~‚‰“‰ƒ|€‡‰ˆˆˆˆ‰‡ŽŽ•Ÿ¤¦§¤œ˜”ŽŒ‰ŒŒŠˆˆ‡‰Ž•˜™˜›š››š˜›ž—Œˆ‰‰ŒŽŽŠˆˆ„}|yvqmnljnx†’—‡ƒ†‡‡†ˆƒ€‚‚‡ŒŽ‘ŠŽŽ‰……ŠˆˆŽ™œž ŸŸžš˜•ŽŠ‘‘•–•‘‘‘Œˆ„ƒ„‡„ƒŽ™žž›š•“¤ž•‰‡‡Šˆ~mffk|Œ•˜‘‰„††ƒ‚ƒ‡‹ŒŠ‡……„„‚€ƒ€zwx|‚ˆ‹Š‡†–™˜‘Š‡‡‚‚‚zspiiq{|‚‚…‰‡‡ŠŠŠ‹Šˆ†‚zx~‚…ˆŠ‹Š‹‹‹‹‰…~}|€„€~}ytoigiosv|~~vqf`XRSV[WUQQTWTOKA.$ $.38:=@=CPSJGIJKLP[eikjfej}ˆŒŽŒ‹Œ–›™ ¤¢ ¦§¨¬±«¨¬¯³²±°¯µ¹¹¹¸¸¹¹¸º¼¾¾À¿½½½¾½¸µ·µµ¸·ºº¼¿ÂÂÅÇÃÁÁÂÁÂÄÇËËÉÈÄÃÆÅÅÄÂÀÃÅÆÈÈËËËÈÄ¿·³¶µ³x|~~{uon_SNJA:-$  +  + +  +  :Wjrtqolnspqv‚‚~}‚‚„‰ŒŠ†€|€…“”’ˆ‚~‚ƒ‚…‡‹‹‹‘Œ”¤¤¥¢œ–“Ž‹Œ‰‡†„†‰‘—™—˜˜™˜˜˜™š—ŽŠ‹ŽŽŒ‹†€~zunkkhdhnr‹Š‡†…‹ˆ†‡…ƒ~z{‚‰Š‰‹ˆŠŽ‘‘Œ†‡‹ŒŒ“››››žžœ™•Š‡‹Ž‘”—’Œ‰€€†‰‰ˆšžžš›™•—ž¦Ÿ“ˆƒ……rkks~Œ—˜•‹‚{w{z€…ˆˆ……†‡ˆƒ‚€xvy{ƒ‡……ŠŽ–›—“‰ˆƒ|yrigb_jx}„„…„ƒ„‡ŠŒ‹ˆ…Šˆ…„}~‚†Š‹‹‹ŠŠ‰Š‡‚}yzyx|}|}zulffljlnqvvsoje`YSRWXZVTUWWRJA2&$! '0998::;CRVSOQQPOR]hkjnpqw†Œ‘‘Ž‰†‰Œ”™œ£§¦¤¦§§¬¯ª¬°´¹···¹¼ÀÂÀÁ¾¹¸¹º½¿ÀÀÁ¿ÁÁ½½¼¹¹¸¸º¹»¼»½¿ÁÄÆÆÅÈÅÄÅÅÉÊÉÇÂÀÁÇÇÈÉÆÃÂÂÂÆÅÊËËÇÁ»´±´µ¶qty{vsolbXQME8-%    +  +  + +1J]nuqqrtrqw}€€yx~€€€ƒˆŒŠƒ‚…Œ”“Ž‰‚€‚}xv|…‰‰‹ŽŽ‘– Ÿœ˜”’”Ž‹’”’‘Œ‰†„‡Œ—™•”––—–––™–•–•ŽŠˆ…ysnmkdhjgoƒ‚„†‰‹ˆ†…‚‚~…Š‹‰†…‰‘””‰ˆŽ‘‘–›™™š’Œ‡~‚‰ŽŽ‘—”Ž‰‚z}ƒ†ŒŽŒˆ˜™™———’”œ¢š†…†‡ŠŒ†vptyƒŠ”Œƒ}xqonvy~ƒ„„ˆ‡ˆˆ„}y{||}„ˆŠ”••Ž‰‚{tnkh\Ycry{~~}„ŒŽŠ…‚„…„„‚~y{ƒ†ˆ‰Š††‡‚~{}€~|z{€umklnnjkputmhg`\[XXZ\ZXVXZWPA0%'))29:418;FSZ]]\_ZUVemopv|}ƒ‘‘Œˆ‡Š’˜¢¤¨¨¨§ªª©®¯¬¯µ·º¾¿¿¾ÃÇÊÊÉÅÀ¸¸ºº»»½¾À¿ÀÀÀÁÀ»¹¶¸¹¹¹¹»»¾ÃÈÈÌÌÉÅÃÄÅÆÅÅÁÀÇÐÑÐÏÎÊÉÅÅÃÈÇÈÊÆ¿¶°­µ¸¼pstwsokmibZOB4-(# +     + +5Mcstrttrsw~}wvx|}~ƒ…ŠŒ‰ˆ††ˆ‹Ž’‹‡‚ztrv€‚…‡‰Œ“–š˜’“‹ŒŠ…Ž”•—–‹†ƒ…Œ™œ˜–•–˜•””“‘‘”‘Š‰Š‰Š‹ŒŒ‡€xqojhkojmz|~€‡Ž‘‹‰…„ƒ„…ŠŽŒ‡ƒ…ŒŽ’”“•”–š˜˜—ˆ~y{„ˆ‹‹‘”˜–†…ˆ‹Ž‰”—–•——‘“™œ•‰„†‰Ž”•‹{w|€†ˆ†ˆ†~|zyyzy{~€‚‚„„€{}zv}‚‚€„‡‹‘‘‘ŽŒ…|wrold^ftyzzytvw~†Œ…‚†…‚€}wqrw}€†‰‡ƒ‚‚}||€‚†€yw|„„|qmorpkkmqpjda\YWXX]]WWXZURG5&#,,,58833Vjvwqssqtuqrtssqxƒ†…†‰’–š•–™˜”’Š‰‰†††‰‰Š‰‹’˜œš–˜˜“ŽŠ†‡”——•“‰ˆˆŽ–––‘Žˆƒ€zw{{z„…‡‰‡„‚†ˆˆ‰‡{wutwxxt{€„…‰‘•“ŠŠ‡~…ŒŽŠƒ~‚‡ŒŽ”˜˜˜–““••–“‘’††ˆ‡Š’””Œ…~~‚‡‡‡„‡‹ŽŒ‡wxƒ†ˆŠŽŽ‹…†‰’‹~}‰—™—’ŽŠ‡……‡‰‰„ztsususokjdZWbs{}~~‡‹Œ‡‚€„‡‹Š‡„‚~ytxyyw|~xyvrutqtyz|xsuvxwwxwuuv{€…ƒ‚‚…„‚ƒ~€|l`ao{zridcbabdaeeec`YXWYZ[VNKLK?0$&03028=AFJOSURTX\Z\VV_jnppt}‚†Š‘›¤¦¥¤§¦¥¨¨§¦¨§©©«°³³³¶ºº»ÂÅÂÂÅÅÅþ¸µ¹½¼»¸ºÁÅÿ»º¹¸µ´¶¹»¹··½ÄǼ·±µ·¶·¸·¸º»»¹¸º¹³²¶½ÁÃÄÆÆÆÇÇÇÇÅÆÈÇÆÇ’~lbadbXI3&&"!"  + +  + +   $?]kusqpkkjoswvrpt|~€‚‡ŠŒ”––˜žž˜’Š………„…†‹ŒŠ“™Ÿ©«¦•’’ŽŒˆ„†ŠŒŽ‘””””‘”’‘ŽŠ†}~yvyyuz‚†‡…€ƒ…†††~}{wyy{v}‚‡†‰‹••ŽŒ‡‚‹‹†ƒƒ†‰‘”˜››œœ–”’’”•“—™”Ž‹‰‰Ž•”†y{‚‰‹‹ˆƒ‰‹…~ux|€„†ˆŠ‹Š‰‰Ž…‡‘šœ˜”Œ†…ƒƒ„‡‚ztoqvwvussm^bjy‚‚€}ƒ†Œ‹†…ƒ„„„ƒ†ƒ{vy{ywwvtrqpsphigfknmtyxxxvvtstw}‚ƒ€ƒ„‚‚ykbflusld]YYUY^chhhg]VYWVZ[VRNHA5##*/5248=BKPUUUVVX\]ZW[_jspnrw{~‡‹–œ¡  ¥¨¨§©¥¦¥¦¦©©­±´±³¶¼¼½ÃÆÂÁþ¼¸´µ¼¾¼¼ÁÅÆÃÀ¼¸·´µ¶¹ºººº¼ÄËÊÆ¿¹³¸º¸¸¸¸¹»º¹¼¹¹·¯°¶½ÃÃÅÆÅÅÅÃÄÇÅÈÉÈÆÈ…‚qlfg`UE4'&    +   + + +  8Vbospmggov||xz{z|}~ƒ……Œ‘’•›œ™Œ…€€†‡Š‹ŠŒ’˜ §®§ž–“‘ˆŠŽ‰ŠŒŽ”˜œž––˜”‰…‚~{}{€|x|‚‚‚„ƒƒ…ƒƒ‚‚…~y{wwz„‡ƒ‡Ž•š˜šš“Š‡‡‡ŠŠ‡‡‰“–•–› ¢£¤ž˜–•–“•—šœœ’Œ‹ˆ‘Žƒ{vpvˆ‹‰…ˆ‰‘‰‚€zz‚„ŒŒŽ‘‘ŒŒŒŽ˜žž˜–‹ƒ€~}}||qidgrzzz{yvxz‰‰ˆ€{z}ƒ‡ŽŠ„‚€€|„„xw{{uvxustsrofbc``cjpxxwuqrqppsz|}}~|€ƒ…‚†ƒymhjqttmf^WTPQ[abdc]TOUVSYZZUKC9%$(.0248>ENUSSTRTY_b`^]fnx}|{}~€…‘—š›Ÿ£¨­«¨¨¤¤§¨«¯¯°´²¶ºÁÀÂÅÆÁ¿ÁÂÀ½º·¶¸¹¾¿ÄÆÊËÆÃÀ¿¼»¼¿½º¼»¾ÄÌÓÒÊÅ»¸¼½½»»¹»ºº»»¹º´°¯´¼¾ÀÂÄÅÅÃÄÆÄÈÈÇÆÆÈz‡€rkgg_P@4.,'"  + +  +  +  + 9Patwspmqx|„ƒ…ƒ~|z~~~ƒ‰ŠŒ–“‘Œ…ƒƒ„†‡ŠŠ‰‡ˆ”™ž£ ˜’’”’Š‰„‚ˆ—Ÿš•–‘‹‰„€‚‚‚„€{|€€€‚‚~}{xy|„ƒ}yxvy€„…†‡•›™›˜“Œ‰‰‰‡‰‰‰‹–˜—“˜ž¢¥¤ž™–•’’’“—˜“Š‰‡ŽŽ‡~unko‡ˆ†ƒ†‰†~€€„Œ‘“’’Š‰ŠŒ’’šž›•’…}xutqlfaZSav}}}}€„†‹Œ‰uplpw‚„~z{|yxz~~xwz|~{||xustvmecda[X_hmrollnkijqwyyzzz|€€„„†zljjoutqiaZZTX\^a^[TMKQRTWYWQH=,"&),.5Ibz…†‰…€„†ˆ‹‰…zjcimt|~zvttwvuvslfemx|}€}zvrokeb`_^`bkqspqlebfkoqpiosrpsnlsvuyqhdb`^ZZ`djkicWW]VRVUTWXPE8% $').6=>FNPORQSSRUW]akpxŠ“”‘ŒŒŒ—žŸž¢¨®³¸¾»¶²¬ª¨¬°°®°±ºÃÆÄÄÄÄÀ½¿Â¿¿¿¼»¹´´¾ÆÉÈËÊÍÎËÈÅÇÊŽ¿ÂÅÄËÐÓÑ;¹¹¸µ¶¹º¹»¼»½½¾º·´³·º¿ÃÄÇÈÅÄÂÄÄÅÃÁ½½ˆ€vn`UHC=0(&#&%$" +  + + + + + +   +:R_msvwy{~~|xvuvsvwtvww|€€|sihr|€€~‚„„‚†…„ˆ‹Š‹Žˆy~ƒ†ˆ‹‹Œ‹‰ˆ†€ƒ‡‡‰†‚…‡ŠŽ‘…{tsvvtnpsx~‚…‚}{wy{}€€~|xzzzz…ˆŒ‘‘’’ŽŒŽŽŽ‹‰‰†ƒˆŽ‘’•—™•‘‹||€‡‡‡‡„‡Š‹‡…„ˆŠˆ‰Œ‹ˆƒƒ‚†‰Š‘•–”—›—”“Š‡‚|wrlaVPHKP]qƒŽ‘Œ…‚…ƒ†ˆƒ~vyƒ†ŠŠ…~wtwxtuuldgoxz{{}zxsnnlheddcejprrqph`^bglidbdjklnnorwuwpg_YSTYYakomi\VVWTRVTPRQD9.!%*/5:=?FOPORUUXX[]cgipy‡ŠŽŒŠ“—œ  ¡ž¢£¨«ª°¶³±¯«­²¹¸¶¶·¿ÄÆÁÂÁ¿½½ÂÁÂÂÀ¾½¹µµ½ÅÇÈÈËÎÎÍÊÇÇÆÁ¾¾ÁÅÄÇÎÒÔÐü»»·»¼»»½¼¾¿À¾»¶µ²¶»¿ÅÈÆÈÇÆÅÅÅǼºº}tdYPF?:63-%"$&"! + +  +  + +  :N]lsrpy}~xutnloqottv}~€|wmiqx€}}}}~}ƒ€ˆ‘‘‰|w|‡ˆ‡‰‰ˆŠˆƒƒ„‰Ž‰†††††ŠŒ…xssv|~{wvwxƒˆŠ‡‚xwxz{zywtoqsrsx…‰’‘Ž‹‡ŠŽ‰†…ƒ…’”—˜”“‹†ƒ„€„ƒƒ…‡‡‚„ˆŠ†ˆŠˆ†„„ƒ…ˆ‰Ž•“’•–Šƒ}zvtla^ZX^dn~Š“•Ž†††‚€~y‡Œ‘‰‚yswvqstokmszxvuusspifffdffghorsorlga]djkjhbebcjnouzzutkc[QLSWYagmi`XVUSPPTPLJD6' !!%$(/49;A=@HIJPW\a_`cmqokls†šŸ ££Ÿ ž›žš›¢©«¦¨ª©«©ª±º»¹¶·½ÀÀ¼º¸¶´»¿¿¾¿¾¿ÂÁÂÅÅÈÇ¿ÁÀÁ¿À¿¾½º¹¹º¼½»º¸¹¹¶µ»½¿¿»·¸¹»ÁÅľ¹´±³²µ¹¾ÀÀ½½½º¹¸·³³°¬VMC==>:310--..)"    + +  +    3FU_gotuqlliillnopux}|y†‡††„€zyutzzwpuwvw{€ƒ‰ŒŒŒ’Ž’”—“‡…~‡ŽŠ‹‡‚z{zyyyz€ˆ†ƒzŒ‹„~€|z~~{|ztmpqy‚’‘’•”••ŽŽ‘“““‰†‚„……ƒ‚ƒ„†…†ˆ„‚zyxzzƒ‰ˆŒ‹‡„…†‚…‡‚€||„ˆŒ“”ŠˆŠ…~{xuqmffo~Œ“”’Š…ŠŠŠˆ…€€…ŠŒŠ‡Œ‰‰‡ƒ|utvppsuzzuqoonnnlhdb]\\`gmidea]accabgdadfhmu~€wkb]TQTPNLKLPUTVTX]TIEGB8.' $'%*/187=CF>@A?AHRX]]\ajsrqtx€‰•¢¥§¦¥¡Ÿœ››˜˜Ÿ¦«¨©¦¨©§ª²¹¼¼¸¸½¼¾º¸¶¶´¹ºº·¹¸¼ÁÃÆÈÊÎÊÁ½ºº¹¸¹»»½¹»·¸¸·¶¶··¸¸¸¼ÁÀ½¸±­¬²ºÂÀ»¸µµ´´·»¾Á¾»»¹·¶µ´°®­¬VNMNIE?94.-02-) +  + + +    0@LWdkmnnkiilnnmnpx}}}zz†‡ˆˆƒ{|yux~€~{xzxwwy~…‰Œ‰‹Ž”•“’ŽŽ’–˜•‹ƒ‡ˆ‹Œ‘’Žˆ„|{xwx{|ˆŠ„~}€~zqpqs|ˆ‹“—˜™•‘‹‡„†††…†…ˆ‹‰Š‰…ƒ‚„…ƒ€€|y|ƒ‰‰‰ŽŽŒ‰…„~xrv{€„‰Ž‹‰ˆ„ƒ}}}yslmu‹•—“‰ŠˆŒŠ„‚‚ƒ‡ŒŠ‡…‹Œ‹‹†uqtwxwvtvuploqnrutnlhd_^_fgc^^`\]aecbedcilmpv{zpcXVRPRPLNONRTURRUYPB?;/%&*-05896>9:FS[_chow|~‚ˆŽš¢¦¨¨¨¥¢Ÿš–”˜œ¥©§ª©ªª©«³º»»¹º½½¼¹»¹·¶¸·µ³·»ÀÄÇÆÉÎÎÉÀ»¹¼·µµ·º»»¹¹¶µµµµ¶¸»»»À¼¶¯§¤©³»¹·¹»ºº··¹¾¾½¹¸¸·¸¸³²°±¯XOTRME?:3,(,1-' +  + + +    + +   (8DV_ejnokhjlljfiqv{~}z}„‡‡ƒ||xuu{}z{{~zz|}„†‹‰„‰‰‰•—–•‘“”–™˜Žˆ‚€ƒ„ƒ‡‰”“Žˆƒ~~yxvy{{}ƒ„……‰‹‡‚}€ƒ€}ƒ}ysuuz„‰‹ŒŠ‹–˜——”‘ˆˆˆ…‚ƒ……„…„†‹‹Œˆ‚‚†Šˆ†ƒ~{zv|€ƒˆŠŽ’““Ž‡„…€tvy}‚‡Š‹‹‰‹Š†…‡…„ƒ„‚}zuw‹–—’Œ‹Š‹ˆ……†ˆˆŠ‰†ƒ‰‡…†womqy}yzvuqkiloqpwvtpkga_ada^W[`^`cheabedkqpquxreYSRQQRPKLONMQQPNPPH?5,% '01273549@EC?@>BR^ejsx~ƒ‡‹Š‰‹Ž”œ¢¡¢¤¦¦¦¢ œ›š¢¨¬¬®®«¯²±µ¹¹º·º¿¾¼º»¸··´¶··¼ÃÇÉÉÆÆÉËÅÂÀÀ¿½¼º¸¼½»·¶´´µµ³³·¼½½ÀÂÀ¼¸³«©¬¶¹¸·¼Â¿¿¼¼½½»µ··¸º¹µ¶´±°YVTOKG=7/+*-2.&  +  +     "4GQYcjkjgijjeabhmw|~}{|‚††„~||uuyz|}}~€ƒ„ƒ„„‡ŠŠŽ“–––“––—œœ•†„„€‚‚€‡Œ‘‰„‚€|yxux{y|„‡Š‰†„€€€ƒ„ƒzxwxz€„†††ˆŒ”–™—’Œ…€„€„…„……‡Œ’Ž‰‚€…ŠŠ…‚}zwrruty‡Š““Œ……ˆƒ}ƒ†‡‡‰‰ŒŒ‹ŠŠ†„ˆ‰‰‡‡‰‡†‰‘–—‘‹‹‹†„„„†‡‡ˆ…ƒ‰Œ…„ƒxoknuyyuwumffkkorwwtpjd`_dkhc[]__^`fdaefgimjkprja[USOQOLHGKLKJKHEHIC90&!#&-2/.2559:@EHBFHN]jmpy„‰Œ’ŽŽ“›››žž£©¨¦¦¥¢¡ £©«­®«©°µ¸»¹¸¹º»À¿»½¼»·¸º¾ÀÃÈÉÎÍÉÆÄÆÇÈÅÆÆÅÄÂÀ½¿¿¿¾¹·¸¸´²°²´µµ¹½¾¿¿»¸¶¹¼¼»¾ÀÅÄÄÁ¾º¸·¸´·¹»¼º·µ³¯¯\ZSLLH<4/,,14,"   +      #6@HW`eggjlhd`aggpz{~‚„ˆ‹†€}zx|‚‚ƒ„„ƒ„~|ƒ„ˆ’’”“”–—šœ•Š‡…‡…ƒ„„ˆ‹ˆ€}‚€{yxwz||wx}„†ˆ†ƒ‚…‚€|~€€ƒƒ„„~|}|}€€€„‚‚‚ˆ”“‘‹„ƒƒ„…„„ƒ‚‚…‰’“‘Š…€ƒƒ~~|xyxuonpt|††€‡‹ŠˆŠŽŽ‹‹’”“’‡ˆŒŒˆˆŠŽŒŒŒ’–˜˜‘‹‹ˆˆˆ…‚„‡‡†„ˆ‰…€€}vnjglststuqiholquuwtpf`abgmmi_Z^]ZZ^^^`cffcdegfb`_XTUPKIDFKJJIEA?@@<2(!#)-232./39>?ELMJIQYcnqs{€„ˆŒ‘‘Ž’˜—–—š¢ª«¨§§¦¢£¥¨°°«£¤ª´º½¹·¼½½À½º¹»¸¹»ÀÅÊÌËÍÎÎËÈÄÇÈÈÊËÊÈÇÇÄÂÁþ¿½¹±­«©¦¨®·¼Âÿ¾½½¾¾½ÀÀÀ¼¶µ³µ¸º½¼½º¶³±¬¬ROKCFD911/.2/& +  +     +   $*4ET_beegb_^afgluy{…„‡‰‚€|z~€ƒ……ƒƒ‚†ˆ‡†‡‚……†‰ŽŽ‹ŒŽ’”’“’““Š‰†ˆ‡ˆ††„‡‰‰„ƒ€}{wuyz{{xv}‚‚„„„ƒ~y{|€…ŠŠ‰…€€‚~}~‚†ŒŠˆƒƒ„ˆ‡……„‚„Š”••“’Ž…‚ƒ|tuuw{{xvvwy{‚‰ŽŽ‹…ƒ‡Œ‹‰‹Ž‹ŒŽ–••–Žˆ‰ŒŒ‰†‡’•˜š›˜“ŽŒˆˆ‡ƒ~}…ƒ…††ƒ|xyxvrjciosstusmlljmporsnfbabgmkg\X^a`a\`bbcdcdcddb``]VSRPLIFHJKJEB?=95,#%*-26431359?GSUPLRYertty}ƒŠŽŒ‘–™™˜š¡¨¥£¤¢¡¢¤¦ª­®ªŸ¥°¶º¸·»¼½¾»¶¶¸·¹ºÀÄÆÅÅÈÇÊÊÇÇÉÊÊÊÊËÊÈÈÇÃÃÀÂÄÃÃÿº²¯­¨¢¡ª¶¼ÂÇÄÂÀ½»ººº¼½¾ÀÁ¾¹³²·º»¾¾¾ºµ²¯«¬MG>8>?70/0/-+$ +   +      4GSY]]\[Y[_cchlszƒ‡‡†‚‚€{y|€ƒˆ‡‡‡„ˆ‰‡…„†‰‹‡Œ‘‹Š’•“•‘‡…ƒ…‡††‡†‰‰‹‹Š„€€}z{{{~|wz€…ƒ}}x}~…‹‹‡…ƒ„ƒ‚€~}||}~‚‰ˆˆ…ƒ‚…„ƒ†‚‹”˜šœ™”ˆ‚vrstwyyzzzzy{|ƒˆŠŠ‡ˆŒŽŠˆ‹ŒŒ‹Œ’‘Œ‡‹ŒŒ‰ˆˆ’—™›››—’‰‹Ž„|{€~‚|zyxvtmdfmqtuxtrplejlkpnlecchllkg\X\agfaaeccbbdcfeb``\RLMOMLJHHIGEB=;5*  #&)+/121249@HTWPKNUgtsuuvy|‚…†ˆ‹Œ“™žŸœ ¢¡›Ÿ¡¢¥«¯±°­¨ž£¬µ¹¹¹½¾¿½¹²µµµ·¹½ÁÀ»½ÂÆÉÉÊÊÊÉÉÊÊÉÅÅÄÃÀ¾½¾ÁÄÉÆû´®®¨¢Ÿ­¶¼ÃÅÅÂÀ¾¼·¹ºº»¾¾Á¿»´°·»¿¿ÀÁ¿¶´±¬±OG;38;6044420* + +       /=HOUWUY^^_beiowz~€ƒ††€|usyƒ„ƒƒƒ†…„‡ˆ‹Œ•”Œ‹Ž“–—”’Š‡‚€„†„‚„‡‡‡‡…‚†…‚€~|z~}{||}{ƒ‚~…Š“’‘‹ˆ‡ƒƒ„‚|y|z€„…†Š‚~€‚ƒ……„„‡†„˜›œžž˜Šƒyuw{|yzz||}z{y|€ƒ„†‡ˆŒ‰‹ŒŽŒŒŒ‹ŠŠ‡ŠŒ‹Š‰Š’–š››—“ŠŠ†}z{~||‚€~ƒ~ywvqiijnsvzyrnjddhehhea_dfeec`XQ_inmgdhefjefge_\[^WNKKNQNHGDCDC@;2,#!$"&)))+-137=BIOZ[UOOYfrqqsrsv|~†ŠŠ“–˜šš¢¥£ ¤¥§«±¶¶µ¬¤¢¡©°¶ºº¾¿ÂÂÀ»¸·¹º·»¾½»¸ºÂÉËËËÊÈÈÊËÈÆÅÁ¾½¹·¸¾ÃÄÇÈŽ¶²®«¨¦¯¸½ÄÅÁ¿¿½»»··¹¼»½ÀÁ»µ±µ»»¾¿¼¸³°²¯¶QJ8-361.03466.#  +      +*7CNSUZ_^__bglqtvv}‚‚yspty}}}z€‚ƒˆŒŠ‹’–•Œ‹‘”—”Œ‹Šƒ~~€€€€‚‚…ˆˆˆ†…‚}}€‚}tx~‚……„„‡‰Œ‘‘‹‰‰‡…ƒƒ„}|}|{x{~€†‰†€ƒ„…‡†ˆˆ‡‡ŽšœŸ ˜ƒ~uqz||zwx{|||zxy€„„†‡ŠŠˆŠŒ‘•“‰ˆ‡†‡‡…‡†‡‡ˆˆŒ‘••”‘‰ŠŽŽ…~~|~„€}ƒ‚|xvuqljnou{ypjhaa`__aa_`b^]XXYTXit{vpmlimqlhg`ZUSUMIJKPQKGBABC>:3'#""%'&()*.1114888?EKQ]b]XX^gpnorrtw…‰’“‘’”˜˜ §¥¥¥£§ª¯³µ¶¯§§«³µ»¾¼¼¿ÁÂÁ¿¼¼¼»º¸¾¿¹·¼ÅÈËËÊÇÇÄÉÉÉÈÄ¿º·´µ¶½ÀÀÂÂÀ¼¸µ²¯¬¯´¶»ÁÀÀ¾¾»¼ºµ³¶¹¸¼½½º¶²²µµ¸µ±¯­®¯°µUK7-01/..0200*       +    %8DKQWZZXX[`gmqooty{zvpnqsrtv{xw}„‹ŽŽ’“‹‰Š‘”’‰„…‰ˆ…€ƒ~~~}|}‚‡‡……ƒ€‚…‡…€wy|……†…ˆˆŠ‹‹Œ‹‰‰‰„ƒ„…‚~{zzzzzz€‡Œ‹…ƒ………‰ŠŠŠ†ˆ–šœ›˜’…}yqrz|zvssxzz{xwx€‡„…‡ŒŠ‡Œ’“ŒŠ‡‡ƒ€}|~~|}…‡‰ˆŒ‹Ž‹‰ŽŒ‡~†…~|~~~{~‚„€|yyxplnotzunhc^[ZY]\]acb`]Y\abkv„~snjginkgbZTNKKGDGKLKIE@@CC>6* "&&)-/-,02669>;FMQQQQWY`inoqsuwsqnnpspmpssvy|€…Ž‰…„†‹‘‘’Ž‡†‡‹‹‡†ƒ‚€}{}{xwvz…ƒ††€‚ƒ‚|yx{~€†‡†…ˆ†„„ƒƒ†…††„ƒ…‡ƒ}yruvxvx{„ŒŒ‰†ˆˆˆŒ‘‘‹ˆŽ’”•’‹‚|zusvxytttwz{{xrw‚‡††‰‹‹ˆŒ‰ˆˆ…€|wusqstpou}€„†ŠŽŽŒŒŠŠˆ†‡Œ‹‰}vvxwwry|{yz{|wpptuxsib`YXZZ^\X]bcaabhnux††{ofc\^c^YVSNKFCDBGJFED@>ABE8+  !&&,130,+0479=?CHJPWbhifdhptsrzƒ†ˆ‰‡“–™”•—‘‘˜œž¤§©£¢¥¥¦ª©«¶¼¿ÀÁÄÅ¿¼½º¹¼»¼¹¸·¶¶·¶·»ÀÀÃÅÅÅÆÆÇÅÅ¿¼¶´µ³µ¹¾ÂÂýº¹º»º¸µ°¯²²³³³³µ··´±°²±±³´´´²¯­¥¤£¦§ª©ª«ª®OA6041/.-142)" +    !09CGLNNRUXajmnqsronloprnilnmpux{‡‹ŽŒŒˆ†ƒ‚‰’“”‘ŠŽ“““ŽŠ…„‚~{|}{yvy~ƒ‡ˆˆƒƒ~{wz{{{|~‚…‰ˆˆˆ…}||}~€€‚„„}vnqtvury‰ŽŠˆ‰‰Œ”—˜”ˆŠ‹Œ‘‘Ž‰‚zvvxzxyz~€z}…‡ˆ…†Š‰ŠŠŒŠ‡‡ƒzprqnqqqqnkq}ƒ…ŒŽŽ‰‹Šˆˆ‰Š‡ŠŽ”‘‹~trolhbgqtuv{wpqsssmf_\W[`cd]UV[_cegkswyƒvh^YQSTSPOMMKFDAAFIDA@<;<>;,   ##+354/.1579>CHMOTYchigjiquuu~†‹ŽŠ‹’—ž™——“’–™¢§§¤¡¢¢¤¦¥ªµ¼ÂÃÃÆÉÅÀÁ¾»ººº»º¸·¶µ·µ¹º¼¿ÃÇÇÆÄž¿»¹·¶¶µ¶¸½ÁÀ¼»¼¼»¸´²®®±±±­¬¯³µ·²¯¯¯¯¯±²²²±°«¦¤¦¨««ª¬«¬®E91354/-.496+!  +   *5>??BHOPRVYafjnppnqwwy€…‹•‘“•—ž¢žšœŸŸ£¥£©¦¥£¢£¥£¤«²¼ÁÁÄÁ¼»¼¸¸º¼¼½¼º¹¹¹·¸¶¶¸¼ÄÊÈÅÁÀÂÂÀ¾¹±³²¯­¨©¬§£ª«­¬©¨­®±´¶®¬©¨«¬®¯¬°¶µ³¶¶´¶´¯­§¦ª«­®ªªª¤¡H:68;<658882$ +    +   *6BDFKPRURR[bb__djouz}‚„„ˆ‹Ž‘”˜œœ £¦¨©««ª¨¨¬¯­¨¤£¥£¦¦§§ª¬¯±²²¯­®¶¼¿¾»¼½½¼½¾¼½ÀÃÅÅĽ»¼¾¾¿¾¹³°²¯«§«ª¦©±¶º¸¹¶²­±µ³²°««ª«««²»Âý¶³µ¶¸¸®§¤£¡¥£ ”Š†K?<;;=:853.)" #/9GMQPSY^_beglqqssrvyzxukjuy{‚‡„€}„ˆ‚‚‚€‚„†‰‹‡‡…‚ƒy{~~€€€{wz~|xruvwzzuuz{|‚‚„ˆ‡…‡„„yppw{|{{wwwvttrv{†‡ˆ†‡†ƒ…‡‰ˆŒŒŽˆ†‰ˆ‡‰„„„‚ƒ‡Š…ƒ€€~}ywrruwzw|€€€…‰‰„„‚…ƒ‡‹‹ˆ‡ˆƒ‚„€‚††…‡…„‡ˆ†zxx{xrlegnv{|{zvnmkhgouuk_\`dc^^\[[Z]`bcce_YVVXVVX\UMHMPU]YOIE?88::96+# + #%%%%%,39CGJNSVRPQX]`aafikr{|„……‡‰ˆ‰’˜¡£¥§¨¨¬¯²­«¯±¯«¦¥¨ª«­¬­°±°²±³²±±¸¾ÁÁÀ¿ÀÁ¿¿¼º¼º¾ÀÁÀ¼¸¶º·¸º¸µµ´µ´²±²°®´¹¸¸¸´¯«­°®ª©¨¥¦©ª®±¸ÃĽµ¯®­­­§¡›˜œ¢ž˜‘Š‰NA?>AB=:6/(%  #1=HRQSZYX[]_emosutx…‚€worvx|ˆ…‚€‚ƒ„‚€~{x{~‚…ƒ€€}vwwx}{yvvxwvtsuwvtppu{|}}}|€€€~|xqljqx|~z}}xvuuvy|„„ƒƒƒ‰‡…†Š‹ŒŒŠˆŠ†ˆ‡„……€ƒ‰‰…‚~{xtrsptxyzz{|~‡ˆ…{}ƒƒ…‡…„‡„|y}}z|‚„„„ƒ…†{vuturle`]elnrqpkjijjovyxj\[_ddb[UY^__efege]VSV[XX[ZULHJMQTPNIIA=<>:5'  +"$$&#$,4:@HKNSUQUU[^_agjlmrwy|ƒ„†………‡•¡¥¦§§¦«¯±­¬®°¯®««°³³´µ¶¶¶µ²±´³±°¹¿ÂÀ¾¿¾¿À¿¿º¸·¹º¸¸¸´¶¶´³·º»¸º»¹³¶·µ´´´²±°­¨¥§¨¨¤¤¢  £¨ª¬±¸º¶¯«¦¡ ¡ž™™“”£ž—Ž‰Š_SJBA@=:4/("  + + +    !*6?KKR]ZWYUX`hkoppu|‚„ƒ~yv|}€ˆŠ‚~{vv|y{{uutvz~ƒƒyvxy|zwtrrtuvxvvvwwrqwz}{‚‚~|ypikqx{~€~z}~~~}y|……„‚‚…†‹‰‚}‚„…‡†„…†…†‚‚„‚€‚…†€~zsmllklqux{}{yx}‚|ytx~„…†„…ƒ‚zu}ƒ~~{|}ƒ‚‚zusstqoie_WW`dmrqljhjlnswqbZ\aba]TQU[bfhd``^VTSU\\VWYUODJLRSQLJHC<=8.) "!&##+470% $#!&15:DGIORUZ_\[_ehonpolkrx}xwv{~~ˆŽ“˜š›š˜›Ÿ£§ª¬««­¯´´··µ´®¬§¬®°²¾ÅÉÉÉÈÅÀ¸·µµ³®«¬¬­©ž––“—¢¥¨ª¬±²°°®­°²¯ª¦¢¡¡›š›Ÿ§ª¨¨§¥£ žžžœœ˜•‘Ž‘’”’Œˆ‡‚Š’Ž†}zyl^OFA9:C>1'$    !'%*4:AIMTWX[]^]`ehimosv{|€…‡„†~{zwqnpsy…Š…{smmmnlptsrssvz‡ŽŽ‹†{qmppqposssqtty‚„‡upoqx{|xwskow{|{zxtw€z~ƒŒ‘‹„€|yzyxz||vru|{zzwxuspjkoruy}~…‰†|pswux{|„‘‘Œ‡…ƒ~y}………‚~{|wuxvnppopnmliaXPMLNUZ]_enrqkihhcejibZTVWRSWWTRPQSPKGDMTSOMMOKIHGD?<:8.   $/:?DHNZW[_]Zachkprvvqmrwzvtt{|}ƒŠ’•–—–•˜ ¤¨©ª«ª«¬°³°°­¨¦«¯°²µÁÆÉËÌÎÊÅþ¶±­¥¢¢¥§¤œ––•™Ÿ¤¤£¥§ª©¦¥¦§¨¤ŸŸœš˜––—™Ÿ¤¨©¨©¨¡šš™šš–•‘ŒŠŠ‰‡„ƒ…‰‡tnnaRF?:7EMVZ[[]]_feeecfikpy{}||}}}}zrqpqv}…‘”ˆxqomjls|……}|{‚†ˆ‰ˆƒ}rkhjmlnsvyzzxxy}ugbbgkppquskqvyytplijlmotutx~~||yzy|€€ƒ‚€€~{xuruwsrrvxvsttu{€‚{xwz€„„„‰‡„ˆ†€|xtsuzzxwwxxuwwoiiklkjkkkhcgkkheda`cghda^a_\]`ab_Y\]TOMPRSPRTOHB?HMOOPOMG??@:/(  )5AFMSPNVZV]b``ep}ƒ‚}ywyyz}‚„ˆ’–•““—˜›œœœšš¢¥¦©«®¬¨¨¬±´µ²·½¿½ÀÀÁÁ¿¼¹²¨¥¢¤©«ª¤œŸ››œ™˜Ÿ   ž›—“’—™œ—“Ž‹’•—œ  œ™””› ¡œ–’„€‚‰‰‡†ƒ|{{zurkfcbNDA?ADJNH;/'"    $))&*/38ALRX\^`dgigdeebckmqrqsxz{{xrqqruuy††zsqsqlrz‚‡ˆƒ~xty~yqfbgljnt{‚€|x|}sbW[ekmmlqqnrtxyrpponllpuutuyyyz{xxt{~~‚‚{yxyz|xuxz{tooorx||{{zx}ƒ††‡‹ˆ||}|xuwssuvrsuvstwuld`_YW]bfhikouvqmhc_cd`^Z[[]\__aa`YXVMHKOPMHJNKEB?GJJNONKC964*!  + $2:CIHKRVUZXWW\fx~|zwxz~~~‚„‡‹•——”™šžžœ™——¢¤¥¨¬­®®°´´²²³¸¸µ´³¶µ³®ª¢¢§«¥¢›ŸŸžŸž›šŸ¤¤  Ÿ˜”Œ“•’‘‰ŠŽ‘•’ŒŽ™ Ÿ™‘Ž‡~„ˆˆƒ{vnjoojfa`b^MIIFDEHHC6)"    #!!()-.5?JQY_cacdbefe`\^`cdeknprrqjlpsvot{‚}vtvuqmmt{‚|tqtwxz}~xsicmplr|…‹Œ‰‡‚€vh\^kstqpqrrqtwxyvttronnpqpsvvvy|wtsx‚€€‚‚~}~|z}~{vy}ymhiknvyyxx{yƒˆ‰‹Ž‰}ywvwwvwvvywvsttqolf]SQNGHT\ahkmovrpkdbcb]UTTRUW]]^\a`WSQLHHJMLFDIHBBCIMJJLIB;+%   )5=AGLOSTUXY\gqsrqnqux|}{ƒ„ˆ’——”–—›š›¡ Ÿš¢£Ÿœž¥¬±´µ´´±­®®ª££¥¨ªª¥Ÿ›–œ›ž¤¢ žœŸ¤¡¡¢ ž¡¨«¨¢¢¢¢ •‡ŠŠ‹Œ‹ŽŠˆ†…†ƒ…†‹“–“Ž…€zwu|xph]^``_[TSTONJJHECA@;0%    "(,)*-4?DPZY\_^_fhb]YYY[[[`dfeiifkoqvrouyvprvxrmlnqw{|xsppqptwxztnlpsnv~‰Ž‹ˆ„‚€}wkcenw{vprqoppvyzyxtpjgdehknttswzwpt{€€|~~}~€}yxxsldbfmuz{vwzz…ˆŠ’‘…}{uutrqnrtspljkje\SJHHEJNX`cimkmpnkheec_WOJKLRT[_^Z[WSPPLKJMOKDAEEBBEGIIFE?7*    (0:BILOTV[bikhfcfmrwxxy~€ƒ‰‘’““––™œž›ŸŸŸ˜•”¦¬±±®««¨¥¥¢›šœŸ¤¢Ÿž™˜¡¢£¢›š›Ÿžž¢Ÿž¤¬°¬¥¢ ¡Ÿ˜ŽŠˆ‰ŒŒˆ‡…{{|‚„†ˆƒ}womlkquribZVQTUQKEA=2LLJIDB?;5,'# !%,.0,+-38@LSV[^_``]WRSUWVY\]X]gliostrssuyurtxyuqoootx{zxtssmotwzyqqptsz†‡‡‡…‚||vnjlnvzvqpojmmrwyzwpokfb`agnrupryurtz|{zyyw{{||}{z„‚|{vtogddnuyzvwy|€‚„†Š†€zwrpljikljea_dc[TMFMRVY]`bffhgfggbaaa`[RLKLPPUYYZXVSPOLIGIMLGAAAACB@@BB=82%  + -39EHNRX_chd\]`eltuvx~}€‚‰Ž•———šž ¡Ÿš”—›Ÿ¤¨¤£ ž £¢¢ŸŸ¢¡£¢  œ¡¢¦¨§¤ŸšœžŸžœ£¬±¬¥  ¡ž–ŠŒ†ƒ~{wsrsxyzzxrrlgddeilg_URTLHFB81,& OJIIDB;5-(%#  "&+.27600369AKPX_]``\URPRRU[][Y_kqqtyskmnruttwwxvwrqorvzzzzywutuyzzvsxz{}€€€‚…‚}zzwuqrsvzz{zwussttwxtnkplfcfipwzxxzwwuwvpmrronutwywx~ƒ„{wzvtrmjpw|xutvy}~z|~€„€{xtoplfdjh`YWVYYSLOU\ehgge_^`]``_ZYXWUVQLNQRTSUSSRSRRQNMHFEHIFBAA?AB=:750(  + +  '-8CIPSY_daYWY]finty{}{|~‚ˆŠ‰’•”•”™Ÿ¢¥£˜›ššœ œœš›ž ¡£¤¤¢£¡ŸŸ¡£ £¨¤¢ŸœŸŸŸ Ÿœ¡©«¨¢™–”ŒŒŽƒ}{xvtqklnruvttqpj`]^^dh^UPNG@9/*'NIEGE=6.'#" +    !&*-04732:?BGHKRXZ_b`\WRRTYaed`fruswyoihjnooqnopqpqplmrvutz|zxzz|z{utyxvyzxvw{ƒ|uvwtwxxxz{€}|{{yyxvqiioqonlmpw|{{{zwwwrljjjhkmruvuu{}xxywxupnrwywtqrtvxwxxxxyvqonnljgfee^XVUZ[VRYcimigc_VSSOPVXX[VPONJHKMPQRUPJKMNOPOKGEBEHGD@>?@;61*&!  + + +   *5CJLRY^[YX[_dhlmswxyz}†††‰ŽŽŒŽ”˜› ¢›˜šš˜—œœœš—–•™›ŸŸŸžš˜˜–—››š™š—•—•–š™˜›š™›¡¡š”‘ˆ‰…†‰‹‹Œˆyusqlhegnrusqqpke\XUWXVOH?:2*$" #MFEBB<40$   $(,,11/2>GIKIHMOT[a`a[Y[]aillhlx{x|~rpmklnkkjmmmkkmknqtssz{{{~~|{wxwuoqrrpsw~yrnrtxzzwy{€€|{{zzxuncgruwusopty{{ywuwvrmlhdijqvvurqw{zxxz|yvqpqqssronoprssvwrpnifffghhhggc`^^aa]]cnspiaaZPLMHIJRUWVOLJGGIGFGLNHCEINLMMHDD@CHIE?<>@60%  + + + +    !-28CLQSY_bffffhkppswy†……‡ŠŠ‡ˆŠ‰‰˜žŸ™˜œœ˜›˜–””’“’–œš˜–“Ž””“’Œ‹‹ŒŒŒŒ‘••••Šˆƒ„‡ˆ…~zupllea`cjoplfcbZVSPMIB;81+%"#"#!!KED@9850)$"  !!$*.-01-1=CEIGBEIMRTX\Z^cbeiljinz‚~vpokhihiljikhgkmqttru|}{€~}|xrronpux}yporrtwwvz„†ƒ}yxyw{undelswtsrsx~€}}{z|zwrolhlksxxtpnoututtvtpjgjinnoolnmkknpqljfdcgffgec`ba^`bfg_[clong`\ZRNMIHGJLNMKJIGGHA=?CDB?BILMLGC?@?@CDC<864+#  + + +   + #.8BKSZ^\`affdhhhlow~ƒ€††…ˆŽ‹Œ”››ž¢¢ ›—”’•”––””•–“ŒŽŽŠŠŽ†…‚‚ƒƒ‚‚‡Š‹Ž‹ˆƒ{xuttw|}{unjjec`^Y_`a[TMJGB@<><51,')'#" #()-*))&IIF=622-*$#  !!"$+0010127=??@>BEGIJQUZ`ddgffhhmw‚‚|wmgfbdeeihgeeddglmpppt|€||€€€€€~}wplkptz~{vuxtrrruz€†‰‰~vwwyzwphglrvuwvvy|~~~}}}yvvqonlqurqnnklkkjfgea^`dknnmnmnmkjjjfgfeabehca^]X]]Y\`ca[WXbghd\XWTQPKILLJMMJLKFEF@;9@AB?BHLOKF><;;9<<;61*" + +     + +  $0:ALPMS]cfccdbehlv||~ƒˆ‹“”•’’•—šž¤¡ž–Ž““‘“ŒŽŠ‹‹ˆ‰Š‡~zxxwxzzzz|z}„‚zxsonnooqsmfca^][XRQPKB82241.-..,*)'))()*-,12223-HLG<51/-&   !"!$$$%&#)/3245469:==<@CDADHPVZ_a`cgggkry{tnd`a^_a^accadefdegiiknsxvy~€€€€yplorty‚}~wpnory~†‹ˆ}vquvxwrijrw{~zvuuvvyy|{}{yxxuqrnptrponjhdb]WVWUV[elpnmnorsokea_bdda_cc^WZWTXZ[[]ZYWRQU[_\VVVVUTRPOOMRRLNOIDFA9973-% +   ""$%%&&!%(')1249<::;<@<;?C@@?DJOQWTX\cbefhmljh`[^_`^Y]bdcdjhbaccegflnnrx||}€€ƒ„‚}wqsvuvy}~}zunouwy„zrqpsrsmkox‚€}wnpqqtvuwxxuvwwrwy{}|utrle_\UPNQTY^fknokkmqrmga[X[_^YZ[\XTSUSW`b`][[ZVPNQUTOQRVX\XSSSRVRKJMLLIB>BCCA@BCCA>9572,-.-)! + +   +  #')06==BHDQLH?991+$  #& !$"#%$ #)(*2359<;:<@?97=CCABFFHJIKQTYZ\`dceecbZ\ca]\`adegnj^[^dhjhklikqtw|‚…‹‹†zxwtrruz{{|yuonquwy||wqponqmkgp{ƒzqklrorqpptwwvvutx}€}wqpke^YRONV[aejptplnkjjf`ZWUZ\XSUVZXTTVUYbgc_bde`YRNPMJILPTXXSPPNMHCCHONKCBDFE@@BC=:7302-(%%" + + + + + +  + "%%%%*)'%'%"" "%&(/7=AINUY\ajkklqrssstsrstx{{yzz}€‚€~}{|wptuty}~€}zussrqorrpnnmlligikgfe[TQPPLF?5-($ "!#!%,0.,.7=ACDCAAAAEJIGLSPWQG?:3,)&  " "(&! !"!%$#)),-146548>@;77=CACFFABCBGMRRMO[`]dbca\_aa_`bceijnm^Y]fhjjijiknnqx|€ƒŒŠƒ}xttquxy{ytnnprstuztoqqpmmhdmw|yxtljorsupnmuxyxvvrtuxtsplkhhc^ZVX^goruz|spmiff`ZYVUZ\WVRRWVTVXW]bffaeijf_XZVQNKJJOPPONMHFB=?EHHDA?CDD>@@C<842/.(    + +  + + +  #&'()*+/1/.30,.,,)''+,-.49?EORXY][]`cegb\_ddehjloqswz|xxvuvtoponrvxz{urnihijmppmijgie]Z\VPMF=51141+$ #!&$"+22478757?DHIIKKJIJPSUTRUVRSH@92+*& "('!$%&&"! #%#"#,/+*-14118>@957<@>BFEEA@?BJTRGKVZXY[]\[\]\]_bikmnpl^Y^ffdhdfimnnns{{†Šˆˆ…„|zwrrtwvvsopoprruyojkiinrlekrsssolnrvsrmkkr{}zyxrpplkkigdeggfffeipuwyz|qijhcca_]\XZZWWSPQSPRYX[`bbbdhga\^aa[[WRPOPJJJFDD>>@DDC?>@?@<<<@?;620.("     +   +  "!#%((')&$*),6856;<=@?;524981+),/1>=::?>;3.*)#  + + + + + !$)02121.,-'(124?BA>ABDJMIEGJMJGA<9;<>BDHJHF?AHB:8;CDCAA?FIMPOORSTWPKMPUWYWTTTSWWUVTNFDC9.16;72*$&!"'$!$$$#'($! ")*,+.20,.5:>;54767:>BCDGKQWZXNMTZY[\WUTSUVRPVZ`defd_Y[_aab`\_fljgkopw||z~|||~~xoilpoqtxxwvvtw{tlhe`djptrsnjpqooqpnnjmsttsrsrnmnlllmmmijjhhhhhhjkmswrlif`[\Y[[\WRNQOQVXVQPQQPSRQUZ^[Z[deeeaUNKIHGFGGFDAACB>=?>AA::@<:67;>AILHIFFLSVWUX\^[XTPNPSTQVXXQKADE@846<80-+&/79;87=@A=<:9=BEFDA?=?BHGIE=860"&-6?AD>>97<>=?ABFJMXXSTSNU]^[]`^ZWUUROJLQSW]be_XY\]^`]V]dijklkkknlmoqptz|tkfjmopu{}zwvqovplmibdilospnjkmlklmpqnqrqoljnnfehjjnruurnokiheffbchnqpige[TYZZ\`^XUVQR[\TNQRPQOKMOTZ[WVYYXYTOKFDDBBAFIC@DF@<>A>?<535-$  + + +   !(+/118@KJIMNONMKGMRU\]Z[YVY^_\^chlpqnillknkmojeXILPORQSTNF@>616>B=>@A;9:BBCCAFHGDCBFFJKC:=@><=<631)$   !!"!#"##!!#'(**,033:==<<;67?CCEFDGOV\^XQSSW`ebbb`\XUSSRLLNLLW_a^[YYYYYUTZ`eglljfdcaabeflquogghmloty}xuqnkjkmlidabedhifgiihdimqrrnmia`cgb]bfikowzzuurolifd^Y[afjha_^WMX`_bca^ZVPQX[SMMNPQQQQSVWZYRONOMLIEB>=;:>DC?;>?<7;=<95,'#   +   $/457;BHOURPQVXZ[XU^ehmonpkjiedbhmu|„„ƒyzuz}zpgZ\cdilmkea^[VJDNTQPSKHHJT\VUSXWTLFILOTTNFELQRWWU[_cjlqroj`YY\lzzvuxy{}}~ywrnsx}~€„…ƒ…‡ŒŠŠŒ‹‘“›Ÿœ™˜‘‡y7;831.)# "!$%)('$ $+,(*+/238==<>;56>EGHGDDPU^b[TSTV_ddded_\ZWVVTTRMIOVXTUUTSRSQQX\_adcd``]]\__^bhllimrqkhnssokjhggghgd`_\Z]]\\`fjihknsuqniaZY^]WY_bfjotvuqpqmia]XSRRW\a^YZXRPZ`bba^[VRNNUUOJHJMRQPUVVUXVPJJIHEDA;8865:>=76785355..(!  + + + + +  %.;=A>85=CFHFBFPT]cZUVUUX[afedcb_VVWWWXNHIJKMNNPORTPQXXY^`]\][ZY\]\[\bimnvzxmgdegeddcdhhhhb^^]]`_\Z\emmmpqpplfbZWYYUTU[^fiimmlilmhcZSQNJLPUWYWTSPS\__a[YWURLLNMIJLMPSRSXWWUUTLDBFA==:9996777932330.+'! + +*.7?@>DPYbdb]VV\agmpqu{}|~€€€{|„ŠŒ‹”–”“Žˆ‡…“•–ššž—Ž”˜š”’““ˆŠ“•–•‘‡†‰‹ŠŒˆ„ƒ€„Š‘•†zuv„ˆ‰†‡‘—›œžž¢¦£££¢›ž¡Ÿ ¢£§ª¨¤¡¢££¢Ÿ žž£¡¢žœŸ£¦§¦£¢¢¥¦ •1561*$ !""! !!!"#%(.-&#*/-.,,35026<:8?EGIHGJRUY^WTXXXYX]bbbdb]WTTTWUMHIFKLMOPPTXSTWY[^^Y[ZWV[ZZYYY_dinv{wnc]]^^__`beeiid___acea]]djnmqpjda[XWVXXTRU[]cfeffceimhaXONLHGNTVXUTRSVXXXZVRTTOMIJHHIJNNMKMUSRQQPH?@@;56668877663//-+)&# + +  +  *4;>@=AIR[`cb_YZ`iltyy„„†††ˆ…ˆŠ‹……Œ’“—›žœ¢¥¡¡¤§ª¥š’”›¤¥¤ ¡¦Ÿœž¡§¨§¤¢ŸŸžžœž›™—˜¦©ª¬ª¡˜“•¢¦¤Ÿ—˜œ£¨­²´¹¼·³³°¬«­««ª¬¬«¯´³²±±²´²­¬­«©««¨ œŸ¢¨¯°­¨¦¦¨©ª£-351-%! !" #"!! "(+*+***(*//+0066.0689>@AADJJIIJMUWVXUUY\[\]]]_`a^XVTRTVPLIIJIJMOQPTVRSWYZ_^YVVSQUVVUTUWY^dioni`XWXYZ[Z[[^dfdaabbbge`^bfknnjcXRRUXVWYVTY\affbec`dhjfaXPMJGFNTXYWTWUYXRRRPKKQNJIFCDDBFHHBFJHFGGH@=<;72032443232.+(%   + +  + %,4>CEDGKR[^^``_\ajpty€€‚‰‘‘’”“ŽŽ‘’•› ££¥§ª±´¹º·°¨¨­±°§˜˜ ¦©¬¬ª««¦§ª®²´³²²±±²±®±±¯ªª¯´º»½½ºº´´¸»ÀÁ½´ª¦ª²·¼ÂÇÉǽ»»··¸¶¶¶¸»¹º¿À¾¾¿½¼¹·¸¶²°¯®®¥Ÿ£ª²²°¨¨¦¨­°­0452-%!!!"!&$" ! "$..,)))--/.0,1574,-149DHHKLNKKJORUURTSUX[\[[ZX[]]YZVTSTTTLJLJIHHKNPPRQQWU[\YSONLKLPPORSQSUYY\_\YSQTSRSTUST_aabcda_ceb^__bfje]TMPWVTWYYXZ^ceedddbaefa]TLLKGKPUVWTUYXXTOLNLEEEFC?@?;:;9?>:;?;89=:898:6430020--,+($    $1;?JOPRU]imhdabddluwt|‚†ˆŽ”šœš˜—™ŸŸœ˜•—¥¨¦©¯µ¾ÅÊÊŸ±®´¼·¯¨¤§«±¶µ³´´´²¶ºÀÁÂÁÂÄľÁÄ¿¼»ÀÅÉÊÇÈÄÅÈÈËÐÑÏÍƽ¼½ÂÇÉÎÍÌËÈÆÅÄÃÁÀ¾½¿ÃÂÃÆÉÊÊÉÈÃÀ¾¾¼¹¶³µ¶´°¨¥ª®¯°­©§¦¦«®±1120*& !"##!"!$+0,)*+-1441,0473--4;AELLMOSSRTXZXUSTTTX[\UVVRSVWVUSPSTSPJJKLKILPTTTQNMKKORQOMNLLGFIKOSSUV[WRSYVPRSSSSQQQQYabce`^Y]]\^^]\\`a^YURVSOOSTVV[\^^`fhfefd^XOMNPMPRTTROQTSQROPPNGA?:9420,134665665255554441.//01.(##"   + '.5>FJNV_aajrsleabflt{zy†‰Ž”ŸŸž¡§¨§¥•–œ¢¦¥¨±¹ÄÊÍÌŸ²«­°¶´¯­­®³·¹·¼¾¿ÀÂÄÃÄÄÄÆÇÉÊÈÅÇÉÇÃÆÉÌÐÎÈÅÁÃÈÌÐÓÓÓÓÎÈÇÇÌÏÓÒÔÐÎÎÍÏÏÍÌËÈÆÆÅÃÃÈÍÌÉÉÈÅÂľ¼¹¸½¿À¼¸µ¶·¶²­ª¬¬­¬±¶20/.*# "#$&'#%$%*/--/024350-37:526AGHCEFCCEA;998633565665679:5./1/1-&%&'$"&% ""! !  + !4=CILNVbgeinomrxzywx~‚…ˆˆˆ‡’˜˜›œ¡¤§¬¯®±µ±²µ¸½¿Àº¼¿ÃÀ¸´¯§¤£ª¯¹¿ÅÊËÉÊÎÔÙÛÜÜÜÛÓÉÄÃÃÈËÑÔÖÕÕÓÕÙØÙÚÝÝÛØÎÑÒÓÔÙÚÚÛÖÒÌËÑØÜÝßÛÛØÔÕÔÓÒÒÑÐÑÐÍËÎÑÐÍÌÊÇÉÉËÉÈÉÏÔÔÒÌÈÊÊËÉÄÁÁ¿ÀÀ¾½¿211)$"""#" %('$  !'+)+*),13523133049:>CEIHGGIHJLJJGHFFGCFHEEIKNIGPRQRRRSVWTNPQLOW[YY_dd^YVTTOLKLLHHJNTVVYWRNMGJDC?=@EFACC>=;744412058:9984044.+,...($ ! #"%'&&$""#$  /=HLRTV[fifeikot{ƒ€~ƒ„ˆŒ‹Œ‘•˜¡Ÿ¡¥©¬­­®±²°³·¶¶µ±°®µ»µ²°¬«¬­³»ÅËÑÕÖÓÐÒÛÞÞÝÞÝßÝÖÌÇÅÉÏÓÕÖÙØÖÙÝßÜÜßààÜÕÖÙÙØÙÙÛÝØÔÐÐÖÚÞßÝÛ×ÒÎÒÑÒÔÔÔÔÔÔÎÎÎÑÒÎÎÍÐÎÏÏÍÐÓÖÚÖÓÏÉÉÊÌÊÄÀ¼»½ÁÂÀÂ/02-' "#" %$ !%*--)&  $##!),+*''/4873-.///49:7:IMIILQOMOSVZ[\VTSSSXVSPRRTPLQUWSQQNLLPMHDFEEHKIHKKIHFEGFFHGD?;:AFIIHHE@=<6?=?BBADFBEIIHIGGKJEEB=:43:=@FHGG>8626:<;;;?74?GHEEDCGLJGJHDCFJEBDIJIFEDEMJFFIEFD?BCAA?<<67<:89:<><799400-2442.',..-0,'#!! #" "'*('&%('$" !!2:GU^ghdfjpqnkkrz‰–˜˜™•‘”˜Ÿ¢ Ÿ¡  Ÿ¥©©©¬²´³´²µ·¸½¸¯¡Ž‡Žž®¹¼»¹»¼¿ÄËÍÑÑÑÑÊÉÎÖßäâÜÜ×ÜÝààÛ××ÖÔÕØÚßßàããßÛÝåèèççèãÝÜÙÝáàÝÜÝßàÞØÔÍÈÅÃÊÒÖØÙØØÔÓÑÑÐÒÑÏÍÓÙÛØÐÐ×ÙÜÝÜÙÕÐÎÍÊÉÇÁ»¹¶º¼¾¿+.* ""! ! "" ## # %),*'""#'))*/30/*! *353321008?BFIPXSNILPQRQVY\\_aa_Z[XRTVSQTRSUQID>;=?BB<99;=:;::==<=:?CA=;>>CD@?>;97564264213777248312-/.*)'$$##!!" ! !*+(&'%''" !! ,;EQZcjjcajoqqlmtœ Ÿœšž§¬­¬¬­¯­­´³°¬©«­¬®¬¯´µ»·ªž‹–©¸ÁÅÅÄÃÄÇÊÊËÌËÈÇÆÉÏØàãáÝÛØÚÜààßÛ×ÖÔ×ÜâäáâåäßÙÚáçêêëçãÝØÖÛààáààáàÞ×ÏÇ¿¿ËÔÚÛÛÙ×ÖÙÙÙØ××ÒÐÖÞàÝÕÓÔÕØÚÚÜÚÖÒÏËÈÄ¿½¹³¸¹º½-+'   #  !"%*..,(%%"!#%'(+1276.! (15112335=CGJKQXVHBCILNOPTZ[]^_[ZYUSSXVRRSRTPJC@=@@=@>:<<=>CBBIJJIJMMJB>>EA=<=;=@CCA964118:<4/,%!')/,/3.....00686556655:8889<82357>>99:740223010....00++.///+('""#"!!!"#$&%!!""*.(&'''&%" !#"# &1=KQZbgnpliovvyyx€Š”Ÿ¢ž¤£ §­²²®¬°²¶»¾ºµª¢›•™Ÿ¥«´¹»¸­¢›š©·ÃÉÌÍÌÊÊÊËÇÃÃÄÆÉÎÐÕÝããäààÞÞßàáàÛ×ÖÖÖàäååãäãÞÖÚßäêêêèâÝÚ×ÛâååäãáâßØÏÇÀ¼¿ËØÛÛÛ××ØÚÞßÜÛÚÕÒÛãäåßÛÛÙÛÜÝßáÝØÖÑËÆÃÁ¼¸µ¼½¿-)#   "  $)))&('%#! "#$(-16<3'%,262/243:AGLIIRUQE:=BEEHLQWYYZUVVXSQTXYUQPQMKFEDFEC<;=>BFEGLJGJJECEIIIC@HMHB<>99;4.*'(+/10110//,-+)00/-020277567895/-/3852120/+-.-+-,*))$&&""$&'&&'%!" !! #$$ ! $'*&"&("!''%#$&%%$"" %$"   (:?=BPY^b[SQMC;<43/+,+*--.,')&$%$%'&$))'&%"%''%&&$'#"""!$ !##%$%#" ! !!  "&+00.*#$!!$#%%'&#!!$""!!! !" !4@JYZTV\jwzzzxvx}…•œŸž¢§³¶²³²³´±­²µ¹»¼ÀÁÃÄÇÊËËÊÍÏÌÉż¶·»ÃÌÎÎÎÎÎËÆÂÀ½ÁÄÆÎÑÔÕØÔÕÖÚÞæèëèæææäâÝÚÚÜÜâæéëìììëéèêçãáßâçééëêëëçååãàÞÛÚÜÞÞâÝÞÝØÕÐÑÕØØ×ØÓÏÑÓÕÛßããâäæåâàÝÜÝÝÞÜØÒÍÇÃÃÇÉ($ +  #$&$#"$'&$$$#! ""#*0344/,,+(+,*,+-.18<>?@AEC>BCECDLPNMR[XQOLHKOSWUPRTWWSNJIFB>CIJIECAA>:?:5BQV^aVPPRMCCJIC@=<>>>CB=;63990/:875572+(),./..('(//02996/+*(,05;>=6/*'%&'&'*('*&&&&%&%"&((('&*,)'&()($$" # ##$$!"!!""$"  !!(,12/*%#%""$%$%%&% "!!!!! # ! (AKU__\adr€‚ƒ………†ˆŒ•£¥¢ Ÿ£¬³µ²²³µ¹¶¶¹»»¾¿ÄÇÈÎÏÓÖÒÏÒÓÏË·±µ¹ÁÈÉËÌÍÍÊÆÅÆÇÇÇÈÍÐÔØØ×ÖÙÜâçèéêæèéèæãàßßßäæééêëëíëêêçãááäéèèéçéëéèçãßÜÙØÜáãáßàáÝÙØ×ÙÚØÙØÖÔÑÒÕÕÝãäãåççæãÞÜÜÝÝÞÜØÓÎÊËÌÌ% "$'($$#!"#"%%#!$'(*00.--.,/-+,)++(.458?DGHLOLFCDDDFJOMLU^`^][YSRRUROPSROOMHCDAABGIC=<<<;;CFHSWZ[\WPOQNGGIH@?=:??=CD?:5653,.8436783+)*-/-+-((,/3559;81-*'*.37:970*('(('#$'&&')($&($#(&()&&$#$$$())$"# %%$$%(($"#&+*+(#"""#!# !%+120)"#&#"#%((%!$""!#"!##!%*%!! *>NV`dccfo€†‡ˆŠŒ‹Ž‹Œ’›£¤ ¡ ¨¬±³´²µº¸·¶¹½À¿ÀÁÄÄÌÑÒÓÔÕÔÔÒʼ´±¸ÁÉÉÊÍÏÐÏÎÌÍÎÍÍÎÎÏÒØÛßààáâçêêëéçéêéèãàßÞÞáåäæææèéêìéèæçãçêêëæäèéêéåâÜÙÒÒ×ÛààßáâàÜÚÜÝÚÚÙÙÕ×ÖÔÙØßåçäãæèèäàÞÚÛÝÝÙ×ÒÍËÎÐÐ   #&($"# "!##$"(-09>72.+))-00..////598;@AEIPMJGDGHINQOQW_bfgje_[WUVOOSRLKJEDACGHMI>999=@GQX]^`]YWRLMLKFDID?==:>@>DGC?=82-(,2208986.*-/-++&&(,.013331,)'&)/37960,)%&)('"'(#%)))&&(&&'%(''# "$()%$$&(*')*.-+("!" %*/0/-'$(('#"# $,112/'"$$"!$*($"$" ! #$#%'%&+%"#""! ,@T`dgkhep‡‹’“•ŒŒ™¢£ŸŸ£¨ª°µ³¸½¼¼º·¸ÀÿÁÀ¾ÄËÐÑÒÕÚ×ÙØÒÈÂÇÐÔÖÔÒÖÖÖÙÜÜÜÜÝÜÝÝÝÝÞãçççåæêîïëèææççæçãâÞÛàåççäääèéëëìïíêìíìäáßâæèèçâßÛÕÐÒÙÛßÞãäàÚÙØ×××Ö×ÔÓÔÔØÙáæèãáäçééãÞÜÜÝÞÝ×ÐÌËÌÍÐ  !#%$%#####$$"#).3>CHMMMHJLORUQJOYY_eda^\ZZZSSWTMIKIDEJKJJJA;;?CKQW\[_^XVVQPOOOLKMKDA>=AA?DEB@>92-*.200363-*+/,,-/,&%&((,-./2,*('*/2472+*((%'*'$'& "*-*$"%)('$&&#"  "$#')&$&())'&*-/3/*&"" %*0/1/+'((&"#$!$*-.--)#')+)+,)%!$$""""#"#&%)+) " #&!-9F\gimpnmw„ˆ‘—š˜’Ž•¤§¥¦¨ª¬²·»¾ÃÂÁ¾¼¾Á½»·º¼ÄÎÑÒÔ×ØÚÝÝÖËÊÒÚÚÚØÕÙÝÝÞàâããââåæåãáãåèçæåçêêæâÛ××ÞàßßÜÙÚàæêêêèçæçéììííìêêãÜÙÙÞåæäãààÝ×ÎÌÓ×ØÙÜßÜØÖÔÓÓÓÒÔÓÔÔ×ÛÜâèåààäçëèâàßÝÝàÝ×ÎÉÆÇÍÒ  % ! #$&%'&'$$#%(+*/5;765/,03436:<=857517<@@CFOWUPQSTUWOHNUTX]]Z[Z_a\WW]VMMMNJILMKHIGCEDHQU[[UXXTVUTRRQQOOQLFEE@C@CBBDLUXUWWWXZTPWZXXVWUV]ab`ZX\YRRSRPJLOLHFGJPNQSVWWSUYXWURVYUSSPQLHHGCA?7:<<;<6/,)&()-/*&&*..&%).-+)&'''((**'&# ""'-0*()%%$$'&'(#!+/&#(&!!%&$ "&(#"& #&&&('#%()*%#!$%%&(,,.0*(%$!#%'""#!!$$##'/2253-&%&)))#!$$"!"(-+#$'%%" #!#*:M[bjsxwzzuuywxŽ˜š žœ¡£¦¨¦¦¬³´·¼ÂÆÉËÌÊÆÁ¿¿¶¬©ª·ÂÍÓÖÖØØÜßÝи»ÃÇÈÈÉÏÖÙÝÝÝÜÚØÝâããáÛÖ×ÜâæäèêèæàÓÌÉÊÌÐËÊÌÍÖáéïññïðïîììèâÝÝÞÙÖÖ×ÛßßÝÞßââÛÓÎÍÎÑÓÕØÕÖÕØ×ÙØ×ÚÚÛÞÝßàãåáÝÛÞÝÜÞÙÙÙÙÜÞÙÓÊÂÀÂÂÅ   !!!$'')$"!#$"%((,/1-+*.259=<8;?<=<>AFEEEJTTTVUTX[]\^`XSRQPSY\\[YXZWUTTQPLOQMHHLQTTTUYYXUU[ZWSSW\YXXTPMJJIEA9347<;;60+'%'+,.("$-31(&'*,/,'$$$$'+'($  !')&&'$%''%%*)&'-,(#!## *(#" ! "%! %(('(&%$*()&%#(,.,)))+,&#$#$(-/)&% $###',0/310,*,./,&!!##"&)*%$%$$ !!!*7CVafly~€|wtqsv‚“›¢§¦ª©ª««ª®³·¶¹¾ÄÈÌÏÐÏÊÄ¿½¶­¨ª³½ÈÑÔØÙÙÝßÛÖÆ»»¼¿ÇÇÇÏÓÕÖÕÖØ×ØÞâääßÙÎÎØßåçèìíëéåàßÜÖÒÊÈËÌÓßçîñððððïîìèæàÞàÛØÚÚÜßßàââáãÞÚÔÐÏÑÔÙÙÚÛÝÞÞÞÝÛÚÚÛÜÝáãäåãÝÜÚÙÙ×Ø×ÕÕÖØÖÍÈÄÀÀÀÀ  !!!! "$%&)%!!#"!&'&',.*(%)-37<99@B@ACDIOQMLQSUUROQSZ]]`aXQSRQSXXVTWUUSPQRTQMQRPJNOW[YVX^^[YXY\WTSYZ[]ZWSMJJFJD;6039:9:3.*%(+0,%!*23+($&*.+'!##!&*)("  #(%%&$&*+*''*%'*&(#""$$#,+#! ! &*&"''#$'(%#"%-062+()(&#!"%',03-+$ %''%',132131/.--+$"#&$ %&%##$!!$.?O]cgkuƒxutx~Š˜¢ª®¬®¬­­¯³µ¹º»¼¾ÆÊÏÏÎÍÇÀ¼º´®©®³ºÄËÑÖÙÜàßÝ×Ìž¿ÀÇÎÐÕÖÓÑÏÒÔÖÛÛßââßÛ×ÕÝääæéìíììëêèçá×ËÆÅÄÆÑàêïððñïîïîíéåáàÞÛÚÝÞßâãäãâáÞÚ×ÕÔÕÙÜÞàáâãããÞÛÚÙÚÝÞäääåâÝÝÙ×ÖÓÖÓÒÐÏÓÎÊÆÆÃÂþ     !!$$(&" $$&&!"&$$),%%"$%+08:>BDCEJMRX\XVWYXVTNLPWWW[^UMRVX\aZQPRPLFEJPRONNPOMPV]_`Z[ac_[VVUWTSXX[[[XSMHGHJKE;45989620+()*0/(! '-1+($'*,,&&("&***$ !"!%'''(&(-///,*&$$%#%$"%%#%*)#!#!"%"#*)#!%'%&%#!!'2972)&$$# %*().,('%"&((')-58525871,-(!!"&&# !#$!#&  $8OXgkjmv€……{|‚…Ž—¡«°±°¯¯¯°´·º¹½¹½ÁÆÌÏÏÍÈÁ¸´´®°²¸»¿ÅËÍÓÝßÞÞÚÖÑÊÄÂÅÎÖÚÛÞØÑÎÌÏÓÖÕ××ÛàáäãåçêæèííëíëìíìæÙÉÁ¼¸µÁÓçïïîííïñðïíéåâÝÝàÞáßßßÞÝÙÙÖÕ×ÙÛÞáääãäççæãáÛÜØÛÝáãääâÞÚÙÙÓÐÑÑÎÌËÉÇÃÆÈÈÇÆÂÁ   ! !"$&$#&&%""&&))('&$#&'/8=ADEEFMTW]daYXXVVWQPSWVUZ_XNQZ^emeYSSOFC?BMOMKNNNQV^cdb]Z[c^ZTRQPNSVVVTSQMLGEEJIJC;>?=;94-*)()./' $*/.)$%(-,())##)('$! !$$&&('&$"$(+,-.*&&##$#""#%$"*%" "##('%'-+%#'''%"" "(471/*%#$&'$+.*%&&#! "''(*-/7;857;8/,,(!"#$%#!!"#""" !%'!! !.H\fpppuƒˆ‡~†“–¦­°°²³²³²¶·¹¹¶¸»ÀÅËÒÒÑËĽ³±°´ºÁÄÄÇËÍÒÜáàÞÛÙÓÏÍÌÌÕÚÝáßÜÕÒÌÊÊÆÅÄÇÐÙàåèéêèãçêêêéèëëìæÛÊÁÁ»»ÀÑæîîïðïðñññïêåáÞäãääâßÚÔÎËÌÍÐØÞâäçééèäççåááßÝÜÜßÞßááÞÚÖÕÒÎÍÍÍÌÌÉÄÀÀÁÃÄÅÁ½¼ +  ##"! ""!" %',)$%%&(''*+++))-7>AECDHPTY_f_Y[\YUWWUWXXX\_YTTW_jpmeZTQKD?DJMJMPSSX^chid]VU\^ZTMLLJPVRNLFFHHHGCGFBFFEEA@;5-*,*).-#'-24-#$)+**)*$ %'&%$%%%%%%&&" #$$&+&$$#"$$##"#"""$$$!"!&,+(*.)%#&'#"! $)/0,/.)(*0.--.*%#!!!#&(*-.14;78::5+))($"$&#%$"#$" #$! !%&&#  $-FZhnnosy„‰ˆ‡ƒƒŠ’˜—¦¬®±±¶¶µ´·ºº¹´³·»ÀÈÏÕÒÑËƾ¸¹»ÂÊÈÈÊÌÐØÞäçäàÞÝÝÜÛØÞáàáâÝØÕÎÈÀº´³·ÂÏÛæçëêéåèèçæåäèíìèÜÑÍÒÕÕÚâêñðïòðòñïîìèåààáæèèãßØÌÃÂÂÇÎØáæçéééçèéçåááãáââÜÛÝÝÝÞ×ÓÑÐÍÌÎÔÖÔÓÎÇľ¿¾ºº¹µ   $%$#$"" "'+,,)**('&'-021/+.4:>@BFLSW[aea[`d^VY[ZXYUX^_][ZX^htoj`YTVRLLMMMQUWZ\^bcef^TRWY[SMPNJOTMHD@BEEGD@B@=DJGEA>=6-//.-1,%!#&,46/&&'+)'(($$%$%$$#$"! ! "$""#'&""!"$''" ! )'$"!$(*$',*#$##$"!! !%*,,+.1/01342,*)&"$#""$&)*/31/6567951-(+*&'&&'#&&#"" %'#!!$"$.AUdstnv|‚‰Ž‰‡ˆ…““”™¥®²³·»¹¸¸»½¾¾¹¶¸¼ÁÂÍÒÕÕÓÎÍÉÇËÎËÍÊËÑÖÜæêêéèåæææåâãçåäãßÜÙÐĽ¶­¯µÁÌØåíîïìéçèäããáçíðêâÞÝãéëìïòôñïññðîìëêèçéåççççåàÚÎÂÀÀÇÎÙâæëêíìëçééãáâååãàÙ×ØÝâßÜÔÔÒÎÑÕÛáâáÛÔÉÁ¼¹¶¸µ·  !#!"! "#)*)''*-+*(*/3651017=A@DIMSY[`ca_cf_[\\[\ZZ_ghdc]Z_gomg^UUYXXUQOPUUWZ][^]]`bYSTUSMMRTTUZRLIFFJGC@?=;=CBC>866430014993*%(+.1-((,)&'('),,$&$"#"!#"$$'('$"#! #! " #*,*%$$#*(%##$$# !!#%)/.)//..000-))(&#$%#%(--++.,-/1112/.,+.+&%$$%&%(#!!""'&$!!!!);<<<;:;854750/59A60,*&%)*)'''()'%$%&% %(&%''$(&!! "%%%"&(& !"$$ "$$%$ !,0044/)! %(*)--)#!&065231.0111..+*)&%(''%&'(&# "$ %9Wmsx…‘–˜ž¡¡§£  ¢©±¸º¸µ²¯¶¾ÃÆÈÏÑËƾ¹½ÀÆÎÓÕÕÕÜàââÝ×ÌÇÆÐÛáÞâçíííéâáãèêæßÛÛÛÛÚÛÙÐÈľ¹¾ÍÕÕÑØÝßßÜÕÓÒÎÑÔÔÖØÙØÛßåèêëèçãÝÙÖÐÍǽÂÊÏÓÖÚÞäääæççèéèåäãæççæçéëìæäãäâáäçéçàÐÆÉÑØßÞÝÙÍÌÔÚâãàÙ×ÑÉÃÄÁ½¶µ» +  !#%(**$&()&(.7AF@;;;438=BHT]^`fhgc`^]a[QMPKQTMMUPNPW`cd`TNQU^e_XWY]adaWMRZbcd_\_^_[UQSRNNKGHKKJFB??9:=?>;;97357754/032/2876659@C730/''+*)''&#&&##%#$!$$ %&"&(%$"!!"!!$#!##! "#$'.0164/)"%)+,--,%!#(168665456461+)(&%$')'&%()& !%%"""! #'"/Ifu|†—œ¡£¥©©¥£¥ª²¼¼¼¸µ²±·¾ÃÁ¿ÅÈ´¬°µ¿ÆÏÔ×ÖÚàåçæäÛÐËÏ×àáÞßäêíêáÚ×ÝèìèåßÞßÝÙ×Óĺ·¶±´ÇÔÔÖÙÜàÞØ××Ô×ÔÏÌËÌÇÈÑÙæíðîîéæÞÙÙØÒÌÁ¿ÃÌÏÒÖßäèäççééèéèåäèééëëëëëæãããâãåèçêãÖÎÑ×àåååàÔÒÔØßâÝÙÙÕÑÍÌÍÈÁ¼À    "#&$"#'*(&),,*/5?FD?;?A@;9ADIT\_cjnmkgbdibWTUMQSHFPIJPW]dfb[SRT\\YUV\aficWRPZ\^_]\_ab]URQOMJLKJIGEEDCA<=B>;;77CEFKKFHTY[\_bgjfac`[UY[YWXQQSNQONOOOROF@JNQX^djqxxrkiklilqqtyzzwsmjfdggmqromhcb_cec^XTRPPLGC@D?<9541,.3540.340-+'%&$$)**%#$$# !%,12.)&'$ ##!&&# !"#!  )-/.3=E:.,,-*&()))*++&&&')*..0136330.*''&!#$" &./+,.+-*""#$$$%:Qkz…Œ•”˜¢§¥¤ª´´®°µºÀÃÃÄÃÃÀ¿¿ÀÀ¾º»»¸µ¹Ê×ßâåàØÒÕ×ÜâèëæáßåéíëìêëìîîêçéìñïëäÞÞÝÞßßÙÍÀ¾ÀÃÅÊÒØÛãèìïæÙÑÅÊÕÞåêéçéëïòõöóòîåÓÈÇÊÎÑÓÔ×ÝáåæèéééëëêéèéêèìíîìðòòðëäàáäçéëíìíîéæãàáåæåßÓÍËÌÏÒÕØÜÞÝÜÚ×ÒÊÆÇ + "&(****-%#()&$)34297<<:5/143,))'!%*)(%#!"!#*/3/-*(&"$"!#&"#"" "#),.8HK=.)*('''&+*)*))')((*-.1/1/0//-.),.(""$&&$(3638962-!"# #5K_p{…”˜œ£¬­¦ª¯µ´¯°¸¾ÃÇÇÇÇÇÅÈÈÆÆÅÁ¾½¹»ÇÔÜãåäÚÐÐÑ×ÞãèëìèêëîïïîîíìîïïïòôòðêâÙÛàäæèèßØÖ×ØØÚÞáçêìóïèÚξÊÒàæéìíïñòóõôïîéâÔÊÇÍÐÕØÙÜàæéêèçèêéêèèéèèèêíïìïòòíêâàåçêíííííìëçãââåçâÝÔÐÍÍÍÑÓÖÚÚÙØÖÒÎÉÇÄ "$'(&*,*##*)&)/426?FAB><:>BHPTRMNMPQMNXemlfebZW^ghlvyxz†ŠŽŽ‹—œœ¡£¢¢¤¦¥¦§¨¦£ ž¡ Ÿ ¢›–™Ÿ ›› ¡¢¥¤¤¥¤ œ˜‘Œ†…€}}€yrmmlf]ZXVQOOJFF;351(%+,,(&%")./-)(%! " !#" "%'.?EC8*(*++,,+-.+,,*)('()+04/-/../34/..)#!"#'-5:9:=64.$   -G^lyŠ•œž£ª°®«¯°²²°²º¿ÃÇËÏÎÍÐÕÓÑÎÍËÆÀ¿ÇÐÕÞáÞØÌÁÃÎÕÛáâæêëìïïîïîííêëíîòñòñòëäáâäéëííêåâàÜÝÚÝæéëîñòíæÝÚÚßäæåãâæééêííéæçâÚÓÑÕÔ×ÜÛÞãçéëçåéêêççãâäçéëííîîðïêäßÞâèìíéäååäâßßÝÞâãáÜ×ÕÔÑÏÐÒÔÕÔÔÒÐÌÉÇÄÄ "&)'$*,+&%(+*/4559@CC>9/($!  "##*11)  ! !!# "&#"$+9?927:51/2236821-'&(')),1/*+..-37660+'%$#(021.0/0,''(($ ! "(C_t‹’¤¤¦§®±²¶¹»¸´´½ÁÀÂÈÎÒÑÏÏÍËÊÍÒÖ×ÓÔ×ÚÞáâßØÁ°¬¶ÂÉÌÎÚçëïïïðïíïññðñòòññððêêççåèéìïïëæàÝÛàãççåáâéïîîìíïðìçäÛØØØØÜßãæééèæäçèêêéìëêéíëéêçåãÝÚÛßçííîíííîíèâÝßáèçåÙÐÊÉÊÍÌÏÒÔÔÖÖÔÕÙÛÚÙÚÚ×ÕÓÔÏÌÈÉÉÍÎ  %-121//.+)'+023523:A=15=GIJOZjqqwvquz}†•œŸ¤¨¬°²±²²°«©©«­®¬«ª«¬¬¬°¬«®°³µ·¹·¸¶µ´±´´¹¼¾»¼º³« Ÿ¤§¥£¤¨­®°³°¬¨¦  ¢¢¤ª²»½»··³®ª¦ªª¥¢£¨§¦£¡›–—“ŠŠŒˆ‡‡…€{wuocWPD6/,*(#(40(" $#    "!! $+4203:<522347;:40,((+,*+.2/'*0.+/364/-&&**.573+()($!#)'%""###%3Sl~–˜  ¦§­³±´¹»´¯³¼ÃÁ¿ÉÎÑÑÍÈÄÄÄÐÙÛÝÝÝáãäçéãÝз¬³»ÆÌÒÛçííîíïïìîòòñòòññïîíéæççäæçéíîìêèææçéêéäßÞâéíìëìðóîëçàÚØÔÑÕÚßåééêèèêíðñòóóïìîëëéçà×ÑÐØáéîíììëëíëæãßàåæçæÛÔÏÉÉÍÎÏÑÒÔÓÔÓÒÓÔÔØÛÛÙÕÕÓÍÉÆÄÈÌÍ !! %-02447730/*,5798:>DGCAFQXY[bp}ƒ„‹ŽŽ‘”–—›¢¦©ª¬®±´´³´´³®ª©ª©«­«¯²±°±°°±µ¹¾ÂÁÃÇÄû¸·º»»»¸·¶±«£¤©­ª¯°³µµ±´³¯­«§£¥¤¥§­±³´¸´³²°¬±±¬«ª°®­©ª¨¤£¢Ÿš˜•”—›š˜›™”‹†~sg]RB7,)$+20*"!"$$$   !!"$%'('(,2621447;><7/,+,.,-,240**10--/...*())(-554.+)(%"')*'#$"#$*Ddt…”œžœ¡¥«±µ±±¹¹²®³¼Á¿ÂÇÍÑÔÎÌÍÌÑÜßßßàãæåâãáàà×Ǹº¿ÈÓÜãêíìííïïíððóóññðîêåáÝßâåäææéêíìëííìíïîëçßÛßáçìéìïððîëçâßÚÖÕÙßßççæçéêîòóõõôñîìëêéæÛÉÅÊÔâèëííìëëèèâÞÞàäæéçâÜØÔÑÑÓÒÑÓÓÔÑÎËÉÌËÑ×ØØÔÖÔÑËÆÀÂÈÉ "$$#"" (05645334/**'-486EGPX\_entv||„‹Ž‘“”•—›ž¡ ¡¡Ÿœ ££ ¡©®°²°­°²³³±±´´±³°°´´³»¼ºº¶²±º¿À¿ÀÂÀÄÃÄÂÁ½»¼»º¾¿ÁÃÁ¾¼¼½·±°´¹¼ÂÃÃÅÅÉËÊÅÅÀ¿ÁÂÅÆÃÁÀ¾¿ÁÁ½»¾ÄÈÆÉÉÈËÏÎËÈÉÇÄÅÅÇÈÈÈÇÊÍÌËÉÁÀ¾»¹¹²¯®­±±®¬ª¥™˜˜’Ž…yrj\ND2&#!$%&&" "())'%!!  "$#$$!&%(,1412/.+# !$!!#)/5111125111/2332-((+486220474//--,& ,Ro}ˆ”¢¨¨­¬­²¸¹·®¬²¿ÅËÍÐÑÔÖÕ××ØÖØÝÛÛßàæèéêéÜÐÔÚààÜÖÚÞÞßàâéììîñóõôíçäàßàãäãáÞßäéìïôóóòðìíìîðòòðòîìììðïîòóõôõóòñíèèêêìííêèçéçåäÜÙÙ×ÜáèëêæàÛØÎÈÅÎÝéìèäÜÝÞàßÛØÖÒÓ×ÝãæåâÝÚÖÑÎÉÉËÉÉÌÐÎĺ²¯¹ÃÉÍÙÙÚÓÈÀ½¾Á " %*,+$%# $$&"/@Tcjwƒ‰‹’–š›žžž  Ÿ¡£¢¢¤¡£££¡Ÿž ¤¥¢§­³·¸·µ¶¼¼º··¸¶µ²²²¶µ·½¿½·´±³ºÀÃÃý½ÀÀ¿¾½»º¹º½¿ÃÅÆÃÀ½½¿º¶·¼ÁÃÅÅÆÃÂÅÈÇÅÿ¾¿ÁÄÅÆÇÇÆÇÈÇÃÀÃÈËËÌÌÊÊÌÍÍÍÍÌËËÉÈÈÊÉÊÍÎÎÌËÇÄÁ½»·´²²±²±±²²¬¦Ÿœš”‘‰€vjYF93/,$$ #+,'&$#!!%)*)( ###%%%''&)++,,*'%!!'%#&.362/-.22022131.0-))+-331..+--('*)(#!"#/^z„‹•¡¨ª¬¬ª±»¹²­¬¸ÊÓÓÔÓÕÙÚÙÙÛÛÛ×ÕÐÈÑÞæéîîìàÓÔÙßàÚÕÕÖÔÖ×ÞæíîñôôôòêÞÙ×Ö×ÞääÚ×ÝåìðòôòòñðíììïòïïííêéëëîññóôöõöóõòîìèêìììîíëëêçèèæàÞÜÝáåéèãÝ×ÔÐËÅËÛæèçÝÓÐÐÒÔÔÑÏËÌÐ×ÞäáÛØÔÎÏËÊÍÍËËÑÖÓËûµ¹½¾ÈÒ×ÙÕÏÈÂÁÀ&,/*#%# %,468Pb|‰”ž¢¥§¥©ª¬¬©§¥¥£¥¥©ªªª¨©¨©¢¡¡  £¥¤ª³¹¿¾½¼ÀÀ¿¼¼¹¶µµ´¶¹¸º¼À»·³´µ½ÂÄÄÀ»º½¼¹º¹¸»¶¸¼¿ÃÃÀÁ¿¼ÀÃÁ¼ÀÃÃÇÆÆÅÁ¼¿ÃÄÄÿ¿ÀÂÃÅÇÉÉÉËÈÊÈÆÉÍÒÑÎÎÉÇÈËÎÐÑÒÑÐÎÌÊÍÍÌÎÐÐÏÍÎÉÄ¿»·¶µµ·µ´³¸¸´°©£¤¢Ÿš”•”ˆqaWH>0($'*)%" #$%,451/%!"#&(+*)&'%$(+)%"$*)',6880*'*.--..-/,,,--.,+/42.+(&"#%''# " $7k€…”ž¥ª«­«³ºº²¬­½ÒÙ×ÔÕ×ÛÞÜßáâÞÚÒõÃ×åîñôóéÙÕÚàßÛÒÌÊÈÉÎÙåìíòóòóîãØÑÏÑÔÝæãÛÖÚåíðñòñññíéèêíðîëêéééëêëîññóóóôôóõñîìëëéêìììèæäæèêçãããáåæäßØÒÑÐÍÉËÛäçäÙÑÌÉÈÍÍÌÍÉÉÌÓÝàßÙÕÒÏÎËÊËÌÏÒÖÛÚÖÐÊþº·¿ÎÔÖÙÕÑËÇ $("&-6=FYjw‡‘¨­±²²¯¬¨§©©ª«©¦¦¥¥§¨©«¬­­²¯®«ª©¤¦¨©¯¸½ÁÂÂÂÂÁÁÀ½¼»µ²µ¶µ¸¹»»¼¹µ´¸¹¼¿¿¿»ºº»¼¹º½½½½º¿ÁÁ¿À¾½½ÁÇÈÈÇÈÇÇÅÅÄ¿¾½ÁÁÃÃÁÁÄÅÅÆÇÈËÈËÎÏÎÎÒ×××ÒÑÎÉÉÊÎÔÖ×ÖÕÓÒÏÒÓÍÐÐÐÒÒÑÍÅ¿¼¼¹¸·´·¶³µº¹¶¶±®­¦ š˜–˜™›“Š~reWGA4((+$ !&,3981*($#$&)(*.///*'##'/0*& +1/-06:61*'*+)+-.0/,/0.470-4530+&$" &*)%#"%Bo€†ˆ•¢«±°¯µ»½·±ºËØØ×ÕÖÚáäääççåáØƼÁÒãïõöôìÜÏÒÞäÞÏÈÁ¼ÄÍÙäìîïóõñêßÔÐÐÍÒÚßßØÓ×âéîîïíëíëåçìïðïîìëçëëêêíîîñðððòôóòïðíêçãæååââÞáéëëìêéêæääßØÔÏÑÓÒÕÜâââÜÖÐÊËÍÐÑÑÏËÑÖàááÜÚØØÒÎÍÎÏÓ×ÜßßÛÚ×ÌüºÂÍÓØÛÙ×ÐÈÃ#%$3B\q”Ÿ©±³µ¶µ³²­©§¥§ª­¯±®©¤¢  ¤¨¨«¯²¸¸¸´µ²­©ª«²º¼¿¿¿ÁÁÂÂÁÁÁ¾·±µµ¸·º¼ºº¸µ·º»¹½¹¹¹¸º½¼½ÁÂÁ¿¿½½¿À¾¼¾ÀÀÅÉËÌÉÊÆÇÈÉÌÌÇÅÅÅÆÅÄÃÅÅÅÆÈÇÉÉÉÍÑÒÒÕÙÚÙ×ÖÑËËÉÌÑÔÓÔÖÖÖÓÔÑÌÊÌÎÐÑÏÉÿ¿¿¾¹·µ²°¯²³·¹»µ²°ª£¡Ÿ¡¡ ™›”ˆ‚xoeYC54%!!!#'.671)!!$%%)+,,//.--)%$+141*"(-41.0121.(+./+,148828<67@;35350-(&$$(+)&! ,Gnƒ‡” ¬¶¸³·¿ÁÁÃËÓ×Ø×ÕØÜåçåççèèçãØÏÑ×åñóõòèÛÊÆ×æâØÏÈÊÒÙäéííñõõñéÝÖÒÍËÍÑÔ×ÒÎÒÜçêëëìëìëçéìðñññïìëììêììîííìëìñõõóñïëåàÛÛÞÞÞÜÜàæìíïïïîêêçæâÙÔÖØÙÜÞáàÛ×ÔÑÍÌÎÐÔÔÐÏÓÚàààÝÝÜÙÔÐÏÏÒÖÙÞáßÝÛØÏÅ¿»ÂËÐÓÕÖÔÍÈÄ$*4BGakyž§±¶¹¸¹·±¯¯«¨¥§¦ª®µ¸¸µ®¦¤¢Ÿ§«¯°µ»¿Á¾¼½¸´­ª«±¸½¿½¼ÀÃÆÇÆÆÃÀ¹´´¸¹¼À¾»»¹¸º¾¾¹º¹·¼º¼¾½¾ÂÄ¿Á¿À¾¿À¼½ÀÂÃÅÈËÈÇÆÃÇÉÍÑÐËÉÈÅÇÇÄÅÃÃÃÅÄÆÇÆÇÊÎÏÐÒÔÔÒÒÔÐÌÉÅÆÈÉÍÐÒÓÒÒÒÎÉÉÈÈÇËÊÃÀ½¿¿Â»·³­ª©­¯®²¶±°³¬¤¥¦¤¤¤££Ÿ –‹†‚xvm[H76.'(-11,% "#$%(+)&&'%%%)'%*030+*+,21.00/*+,.21-.16:<53341-& !!%('!2Sx…‰Ž‘•£²¼¾¼¿ÆÈÍÓÔÖ×ÖÔÓÖÞâæäâáæêèêêáÞáæðòóðèÜÍÐÚâåàÚÙáæëïðîíññóðéßØÕÐÐÌÏ×Ù×ÕÙßåëëììëìééêïóôóòñìêììëíîíîëêèìïóôòòíäÚÒÑÒ×ÜßÝÝáãêíìíðîíííîèÛÔÖ××ÜÝÞÝØÑÑÍÎÎÓÔÕÓÐÏÔÛàÞÛØÙÙ×ÑÍÏÏÔÖÚÝÝÙØÖÕÍÆ¿¾ÃÇÍÎÓÒÏÌÈÄ $0Abp…˜¡¨±·»ººººµ²±°­¬¨©««¯´ºº½·°®­¬®³¶¸º½ÂÇÇÅÃļ¶µ¯±º¾ÀÁÀÂÇÌËËÉÅÁ¹·¹º½¿¿¾¼¹¹¼¾¾¼·µ¸ºº½½ºº¼ÀÂÀÃÅÅÃÄÁÀ¿ÀÃÄÃÈÅÆÅÃÂÃÇÈÆÆÅÄÅÄÂÆÅÄÅÄÄÅÇÆÇÄÆÈÊÌÍÎÎÍÉËÌÊÈÈÃÂÂÃÇÐÑÐÐÏÐÏÌÇÆÁ½ÀÃÀ¿¾»»¾»¹·²­¬®­©¬µ¶··°¨ª¬¬ª§§¦¤¦£¡—’““Š{l_J2...,*"##$!%.,)('"$#&*)-244675663332+',/255+/367=DRb_TMC84455-%! #$%#=^z‰•—š£µÂÉÈÉÌÑÖÖÖÔÑÌËÎÓÚäãâÜÚáëïïíëéèëïôððìêáÞàãåáßàåïõòñìçèìîñïéââáàáßäåäãäåéëéççãåèèëíóóóóîîëêìîííïììéçêïõõòîëÜÎÌÊÐÕÚàááäæèéìîññîïñðèÜÕÔÓÖØÜÚÚØÒÎÒÔØÜÝÝÛ×ÓÖÝÞÜ×ÖÔÖÐÐÌÒÒÕÖÚÙ×ÕÐÏÏÉÄÃÁÆÍÌÐÏÏÊÉÉ  #*6H^{œ§­´¶µ¹¹º·µ³°±±±¯¯¬¬¯®®²¸¸·µ¯°³·¸¼ÀÀÀÁÂÇÇÇÄÆÇÂÀÁ»¸½ÁÁÁÀÂÅÉÈÇƼ¹¹»¾ÀÀÁ½»¹¸»½¾»¸¸¹ºº¼¹¸·ºÀÁÃÇÊËÎËÇÆÈÉÉÇÅÅÇÇÇÅÂÅÅý¸¼ÁÃÀÂÁÃÅÅÄÂÆÇÇÄÅÆÈÉËÌÑÏÌÉÈÈÅÅÇÅÆÇÉÎÍÐÏÎÎÏÎÌËɾº½ÀÁÀÁ¿¼¼¼º»»¸¹º¶°³¸½ÃÁ¸°®¯¯¯«¥¦¤§¦£¢™‘”™š’‹~n^KF@82(!#"$"&-/,,'#&%(,27;<@@>=::<;74,'*137724679:=L_ZTMC71264/(!!#$ &Gh~‹”›œ¥±¾ÉÌÌÓÔÕÓÎȼ½ÇÐÚääßÙÖÚçíîíìêéêïñïïìééèääãàßßæîðïëãÖÓàêïóñîëëíëêíêéèèæèçäàÛØÛÞÞáèïñòóòïîíïððïïîëìêëîòóòïæÙÍÉÈÐÖÝááäåææèëìîïïîîéåØÓÑÓÕÙÛÜÜÞÝÞßáãäããäàÚÙÚÚ×ÔÒÒÑÏÌÌÏÑÕÖ×ÖÖÒÏÊËÈÈÅÇÌËÊÈÈÆÄÃÆÄ  '2LeyŽ¤°´¶·¶´¶¹¹µ³³´¯²´³³¯­®±°®°³´¶´±²º¾»¿ÁÁÁÁÄÆÇÅÅÇÅÁÀÃÁ½¾ÀÀ¾½½º»ººº¹·¹¼ÀÀÄÄÄÃÁ¿À¿ÃÃÀ¾Â¿½»¹·¸¹½ÁÄÅÉÌÐÖÐËËÌËËËÆÅÇÇÈÇÅÆÆÄ¿¼¼ÀÃÁÂÃÃÄÄÂÀÅÆÆÇÇÊËÌÌÏÐÓÏÍÍÈÅÈÉÌÍÍÍÎÏÐÏÌÎÐÐÎÎËü¾¼¿ÂÃÃÃÆÂÂÁÄÂÄÂÀ½¼¿ÄÉÈ»¸µµ±¬¤¤£¦¦£Ÿ—“•›žž™“ˆ|qh^OB5"$",0/1,*((+/5>?BBA<8;@@=94)%+00565685342?MME@7,)055/)""%"&OkƒšŸŸŸ¤ªµÃÍÐÒÓÓ͹­¨²ºÎßåçâÙÓ×âèëíìëëéííêèåçèëçããáâåéêíéãÖ¿ÈØåñôõôïïðñðîíëèçæççâÞÚÒÐÒÍÌÓäìðòóòððññññðïîïíìîòñòìäÖÌÈÊÐÙßãâäåäåêëëîîïíèâÜÕÐÏÏÒÙÝáãåèêèèèæäçåáÛÔÑÑÏÎÐÎÊÈÆÅÉÍÑÖÕ×ÕÑÍÈÅÅÇÉÌÌÌÇÂÀ¾½¿Â  !),?Ka{‹œ¨µºµµ·´µµ¸·¸··¶¶º¹½ÁÃÀÁÁ¼´³³´µµ²´»¼»¸»¹»¾ÁÆÆÆÄÄÿ¿¿½¼½¼»¸µ²µ´­°³·¸»ÀÄÄÄÈÈÇÅÆÆÈÉÇÆÄÈÈÃÀ½»¼ÁÂÇÈÇÊÎÔÕÒËÊÌÊÈÈÅÃÇÉÉÊÉÊËÊÆÆÃÂÆÂÄÅÆÆÇÆÃÇÉÊÌÎÎÎÎÍÑÒÔÒÓÒÎËÌÍÎÍÐÐÐÐÏÎÏÍÐÏÐÑÐÊÅÃÁ¼ÁÅÅÉÉÈÅÆÇÈÆÆÇÄÂÃÄÆÈÆÀ¿¼µ²¬¤¤¡¢¢žš–”””›£¨¦¡¢œ”‰~rbP7'%"*/22-,+*.48<=><949>>:72+'/249944620//4>=85/),23/*&!"$!+Vw†”ž¤¡¢¦¬´ÃÍÑÒÐÏÆ»³ª¨³ÄÓâèêäÞØÖÛÝäæèèééççÝÓÌÔÝæåááäååæèèäßÒÃÌÝèð÷õóñðóóðïïëêèæåèæããÝÙÖÏÊÒÝçñôóôóòòïñðïðñíìîññóòíäÓÊÊÍÖÜâãááãääæíïîïïíåÝ×ÖÓÒÔ×àãçëìïîííêæáÛÛÖÒÍÈÅÉËÎÏÉÿÁÄÎÑÕÖÔÓÐÊ¿ÀÆÊÍÍÉÄ¿»º¼ÃÀ  !! 4?81**,,)*,++'+0/0-$"!% %=hƒŒ›¨­«¬²¸»¾ÇÔÕÑÌļ´±¹ÈÎÔÖÔÑÐÐÍÇÉÐÓÙÛßáâà×À¯·¾ÌÜàÞÞâäââæèçèçãæíîðñòðïìðïïïïïïîëêèæéêêêêíðððñòõôóñîëåçêíëìëêëêíïíéÜËÄÊÑÜÞÞÝÝÜÝÝÝäìïðïïëâÝÞààßàßãèìïðïððïìæàÔËÉÍËËÐÐÑÒÎÉžÁÌÔ×ÖÓÎÏÍŽ·¾ÈÐÐËÄÁÁº³²·¿Â "1?IaŒš¤¬¬®°³³³³µ±²¶¶º½ÁÀ¾¹¸¶¸¼¿ÄÄÅÂÄÿ»¶²¯²³´´µµµ³·¼¾¾ÁÁÅÉÉÈÆÅÃÁ¿ÁÂÁ¼¸¶·º½ÀÁÀÁÅÆÆÈÄÇÉÊÊËËËÉÉÌÑÔÓÔÑÑÒÐÐÑÑÖØØ×ÖÓÔÓÑÑÓÍÇÇÆÇËÊËÍÌÎÌÌÊÉÆÄÅÊÏÓÐÑÎÊÌÌÌÌÍÌÎÐÎÎÍÎÍÍÌÌÈÇÊÏÑÒÑÎÐÐÐËÈÊÍÍËÍÌÍÐÑÐÎÌËÌÎÍËÊÆÈÉÈÅÆÃÃÃÁÁÄ¿¾ÀÀ¾¹³®©¡ž¡¦¨©§¨§¨¬­ª§¨§¨«©¤£¥¡œ•’‡wh[I:1.$*.0/,+..00+(.0.772./238==7-$&-/+'($$*-..+(#"!"&%!$>iƒ’¢°¶·¶¼½½¹¿Ï×ÑÎÉÀ¸´»ÈÊÌÉļÀÈÇÈÊÍÑÑÑÓÛÞßÖ¾²¸ÄÌÚààáäãåãèëííðïòñññòïíìíëììêìîîðïëæßØÚ×Ýêïô÷ö÷ôðïïíéäáåçèèéèæçéêììèàÑÌÓØââÝ××Ù×ÙÛâíîíïïéáÝâåäãâãåêìîîðíïìëçãØÑÍÏÓÕÕÕÕÒÐÍž¿ÊÎÏÍÍÊÌÍÉÀ½ÅÐÙ×ÎÆÁ»³²¸ÀÄ "(2K^t¡­²µ··³´´´²²³°±µ¸»½Áþ¼¹·¹¼¾ÁÀ½¼½»¸³°««­²³°°±¶µ¹¿ÃÄÂÃÂÅÅÆÃÿ»»½½¾»¹¹¼¿ÀÁÁÂÃÆÆÆÄÀÄÅÉÌÍÎÎÌÎÓÖ×ÖÔÓÓÓÒÐÒÔ×ÛØÖÕÓÖÕÔÒÐÌÅÂÄÇÉÊÌËÌËËÉÇÈÈÊÍÎÒÓÑÐÎÌÍÒÒÐÎÐÏÐÑÎËÍÊÉÉÊÇÅËÒ×ÖÓÏÐÑÑËÉÊÍÎÏÐÒÒÕÕÓÏÍÍÎÎÎÎËÇÆÊËÊÈÄÄÃÀ¾ÂÁ¿¿À»·³¯«¦¢¬±²²¯­ªª««ª¨§¦¨ª«§¥©§¥Ÿ—Ž…{mZD7-,3320,))+.**-*+//+&)-.693/&"%-3-()$!(,,(%$"$$!&%!#@mˆ˜¥³»º¸¿À¼²³ÉÖÓÏÉÁº¸¼ÈÊÆÇüÃÌÎÏÐÐÐÌÉÎÖÛÞÓ¼®¶ÆÏÞâããäåâåéëíðòòôõðððìêììíðìêëìíïïêßÓËÉÆÏàíòõöõòîçæääãâäçæåååâåçèëëéæàÛàáäãÛÓÒÕ×ØÛæïïîïîéãâèééæåæçêíïïïîííëéäßØÔÔÕÖÕÔÓÑÒÍÇÂÁÅÈÄÆÇÊÏÑËÃÃÌÕÜÚÐÆÃþ¸³ºÀÅ )5C^t‹«µººº¸º··µ´±²±°³´·¶¸ÀÃÅÃÀ¼¼¿¿À¿¼»»¸µ°¬¨©¬²°°­±´¶º¾ÅÃÂÄÁÀÃÀ»¼¼¶·»»¼½»º¼¾ÁÃÃÄÄÉËÆÅÂÄÈÊÌÌÎÏÎÐÔÖÖÔÒÑÑÐÏÑÓÓÙØØÓÑÑÔÕÔÑÍÈÂÀ¾ÂÇÉÌÉËÌÉÇÊÉÊÎÏÍÑÒÎÌËÍÑÕØÔÒÓÓÕÔÏÍÍÍÇÈÇÄÄÌÖÙÕÏËÍÐÑÍÍÍÐÒÕÚÜÚÛØÖÑÑÑÒÓÓÔÐÈÈÉÊÌËÇÆÄ¿¿½½¶¹¸¶³²³²®¯±¸¼¸µ´³¯­¬«ª©¥¦ª­¨¥©ª¦££Ÿ›•’‰|iVH;89640+')),,*'&'# %'.2-'! %.63-*%"$,*("# ##,It‘§±·¸·¾Ä¾­®ÆÕÔÏÊü¼ÄÈÊÈÉÆÅÍÖÙÙÕ×ÔÍÊÎØÜÞÒ¿°¶É×ãééãâãäçéìéíñòóôððíêíîðóðîíìëíïîèÜÍÆÂÁÊÜìòóöõîêáÞàååççèæäãåæçèëêëëíéééëêåÚÓÓÔÖÜâêññðñíêçèððïíêêììîïîììíììëæãÞÚØÕÒÓÐÐÒÒÐÍÇÄÇÇÃÄÊÎÓÐÌÉÉÏÕÛÖÏÊÆÆý»¿ÆÊ (5:5.)179676/+.4,&')*/2.'&""$$#$ F}’›¨®²·¿ËÒÔËÄÉÑ×ÚÕËÀ®«½ÊÎÐÔÕÕÖ×ÕÔ×ÙÙÛßäãááààáßåæìòïæÝÖÖØØÖÔÒÐÓÒÓÒÒÖàéîñòñïñïñôôíÞØÓØãééçáÞáëñ÷õöñìëéèèçéêëëííîíêãäèîðôóñîëëëïðñðñîéåâÝÞãçëëçâÝÞÛÝááãäàÜ×ÑÊÆÇÉÍÏÐÏÒÑÏÍÓ×ÕÒÍËÉÈÌÎÏËÈÆ¿»»¿ÂÃÁ½º²¨¥¤¨',Hj…œ³¹À½¹¾½¼À¿½»¾¿ÄÆÇÉÈÉÇÅÀÀÀÃÇÈÉÇÄÂÁÆÉÍÌÊÄÂÄÆÉÐÕÖÔÑÔÌÇÀ¾¾½¼¹¸··¹¼½¿ÆÌÍÌÍËƺµµ¹¾Â¿½½ÁÁÁÇÐÔÒÑÒÓÑÍÌÍÑÕÔÙ××ÔÕÕÒÓÒÓÏÐÌÉÇÉÈÇÇËËÌÎÍÊÏÑÒÓÒÐÎËÌÌÌÌÏÒÓØØ××ÙØÙÜÝÚÙØØÖ×ÚØÖÑÎÌÐÒÓÑÓÎÍÊÇÌÔÖÒÑÐ××ÕÚÞâááÝÜÚÖÒÎËÌÊÈÌÓÙÙÚÖ×ÖÔÕÖÔÒÏÍÐÓÕÕÒÍÆÁ½¾ÂÂÁ¾¹¶µ²µ¶¹¼¼¼ºµ±¯®¬®­¬©«­¬«©¨¨ª©¥¤¨©£¡¤£ž™—Švg`K86-)09<:<;2,04,%%(*.2/*'!!!! F|“§°¸¿ÉÏÑÉÅÈÐÜßÚÓËÁ½ÉÒ×ÜàâãàÖÐÐÑÕØÜâäääâáßßÚÕÙßåæáÚÕØÚØÚØ×ÒÕ×ÚÜßäëïòôôòñðïóóòîâÛ×ÜãêéåààäëðõôóðîíììëïëéêëçêéçäÞÞàêîòñòðîîíñòïñïîèçãÜÝßåæâÛÔÒÒÐÑÕÜàáàÜÕÌÆÅÇÉÐÓÔÔÔÐÎÏÎÕÔÓÏÊÍÊËÌÈÆÂÀÀ¿¾¾ÁÀ¼»´ª¡™Ÿ¤)?^€œ°¿ÃÅÀ¹µ¶¸¼»½»»¼ÀÄÅÂÄÇÇÆÇÄÃÅÈÊËÊÄ¿ÀÄÆÈÊƽÃÆÉÍÓÖØ×ÔÒÏÈÅÃÄÃÀ¾¾½º¼½ÀÂÅÊËÉÊÌȾº½¿Äü·¸¸¸¹ÃÐÖÓÕÕ×ÕÒÌÎÏÒÖÕØÔ×ÙØ××Ø×ÒÓÐÉÊËËÇÊÎÎÏÎÍËÍÒÒÑÕÑÐÐÏÍÍÎÒÔÙÛÝÚÛÝÜÚÛÛÛØÖ××ØÛÜÜØÕÒÓ××Ø×ÔÒÑÑÖÜÝÝÛØÚÜØÙÞÞÞÞÛÖÓÏÉÇÄÄÅÉÌÑÕÖÖÕÓÔÏÑÔÖÓÑÏÍÑÐÏÐÍÇÄÁÁÁÁ¿À¿¼¸´µ·¸¸¼»¹·³­¨¤£¦£¦¨©ª«§¦¨ª¦¢¤©«ªª¬ª¥£ ™ŽŠo[A4)(687:91+270(+/))--'# #!#!Pz‘–¤¶½ÂÈÍÎÉÅÈÒÛâàÛ××ÕÙÚÝáçëéäÙÏÏÔ×ÜãåæçççååáÛÒÐÕÚßßØÙÙØØÚÛÙ×ÛãçèëîñõõôõóòòóóöôîèàÞâèìëçååçèìðñðïëíëíïðìæäÞÜÙÛÛÚÓÍÕáìïóòôñïëéíîíñïîìéæàãååßÕÐÎÎÍÌÏÖÞäãá×ÍÊÉÈÊÏÕ×ÕÕÒÐÎÎÐÕÒÎÌËÌÊÈÄ¿»¼¿ÃÃÃÄÿ¸³¬£š˜ž¡%8QoŽ¢¶ÃÃĹ´¯²¹½¼½º¼¾ÂÅÃÁÃÅÅÅÃÂÂÃÈÈƽ»»¾ÁÄÄþ½ÃÆÈËÍÑÕÕÓÐÍÌÈÃÆÆÀÄÄ¿¼º¼¾ÀÂÄÆÃÅÉÇÁ¼¼Âÿ¸¸··¶¹ÄÏÖÖÕ×Ú×ÖÓÐÑÓÔÖÕÕÖÚÙØØÙØÒÒÎËÌÏÎËÎÒÓÒÒÏÎÑÔ×ØÙØ×Ú×ÕÓÔ××ÚÝÝÛÝÝÜÛÙÛÙÙÙÚÙÔØÛÜÜØ××ÙÛÚÜÛÛØÙÞÞßâáÞáàÞÞÝÛÝÝÛÖÑÌÊÊËÌÌÐÔÔ×ÕÖÖÕÒÐÒÕ××ÕÕÓÕÓÐÌËÌÈÇÇÄÁÄÃÃÅÀ½½»»º¹¹¹´°«Ÿ™¡¡£¦¨«ª§¥¦§¥¡¢¦©«®±¯¨§¦¡›š—ˆzdS=2432792/594/0/*')(#!"$$" O|”›«»ÆÉÌÍÎÊÇÊÑÝãáÜÞàáßÝÛâæëêåØÐÑØÜâæéèèççæææáÛÖ×ÜßÛ××ÖÔÕØÛÛÝåéìîîñóôõôôóññóôö÷òíçæéêììêéèçèêìíïîìéëííìåØÎÇÆÉÍÐÏÌÅËÛæìñõõôïéäâêðñòðîëèåãâãß×ÐÏÏÑÎÑÕÜãæãÛÏÌÌËÌÐÖ×ÕÖÕÔÕÒÒÔÐÊÈÇÉÈÈÇÀºº½ÄÅÅÄÁ»°ª¥™™ž£(Ib€®ºÃÂÀ¾½µ°­´¹¼¼»·¼¾ÃÅÅÂÃÂÄÂÁÀÃÂÅþ¸µ´·»¿¿ÁÀ½½ÂÇÉÈÇËÌÐÏÍÍÐÎÉÅÅÆÇÇü¸¹ººº¾½½ÃÅÆÀ»¹¿Á¾Á¿¾¼»½ÈÒÖ×Õ××ÛÙØÕÔÕÖÖÔÔ×ÙÚ×ÖÖÔÎÎÎÏÐÔÕÐÓ××ÖÓÐÑÕÙÛÜÝÝßàÜÜÚÚÙÚÜÜÝÞÞßÝÛÛÜÜÜÞÜÚÚØÚÚÜÝÝÝÞààâßàÝÜÞÝßãäáääáààÜßÞÞ×ÓÑÕÕ×Ö×ÚÚØÖÖÖÖ×ÓÒÕØÝÝÝßÝÝÙÔÒÎÎÍÏÍÉÅÃÄÄÇÉÅý¼¸º¸¶±ªœ˜ž¡¥¨ª«¬¬©¨¦¤¥  ¥¨¬¯°­«ª«¦§¢š‘‹wdM;2..7503842/-(&$& #$%"! Fz“›£­ÁÊËËÌÎÎÌÍÔÜäâÝÝâæáÜ×ÞäéèâÙ×ØÞâåèéçèççæåçååäâàà×ÒÐÐÎÐÖÜÝãêíðïïññóôóññðñóöö÷ôñìëëìíêêëëêéèéììíêêêêêæÛÇ¿¼¼ÄÈÉÉÅ¿ÂÑàëñõõóðéãâèïóòííêäãááßÛÕÎÎÑÔÔÖØÞäåãÚÎÌÊËÎÔÕØ×Õ×××××ÑËÅÀÄÇÈÈÈĽ¶ºÀÃÁ¿¼´¨¢œ›š™ž¤,Fs‰©¹ÀÄÆÁ½»¸´¯¯´¸¼º··»ÁÆÂÃÂÀÃÄÂÂÂÀÃÀ¾·³°²¶º½ÂÀÀ¾¾ÄÉÇÅÄÅÅÇÊËÎÐÕÐÌËËÊÉú·µ¹º¼¾¾¾ÂÅÄÁ¿»¾ÂÃÇÉÅÁ¿ÃÉÑÓÒÕÐÓÖØ×ØÖÖÕÖÔÓÕÖØÕÔÕÕÑÑÏÒÔ×ØÖÒÖÔÑÏÐÔØßßÞààáßÞÜÞÙÙÜÝÞßßßáÜÝÜÞßàââàÝÝÛÝÝààßáßãæäááààááãäáâäâàáÜÛßßÚØØÛßÞÝÞÝÛÚØØÚÚ×ÔÓ×ÝâäçæäâßÛØÔÒÒÓÑÏÊÇÅÆËÊÉÇÄÁ½¼º½¼¸°©¢¡¤©­®®±±®©¦§¤£  £¤¦«¯¬®²±²²®ª¤¡™ˆw^D8254//41.,/+%&# !(&$:u•¡¦²¿ÆÄÆËÎÏÎÓÙßäàØ×ßãàØÑ×ßäåáßÝÞäçèééêæåååæëëèêêæàÓÇÄËÍÒÙàãçíïñðîîïóòòòííòó÷÷öóóïíïîëíìíîëééèëíëëíëëéåÜËÁÀÅÉÍÍÊžÁÍÞéíôõôóíèëíñõóïëååâáàßÙÓÏÑÕÚÞßàâçæäÙËÂÆÆËÓÙØÖÔÑÓÖ×ÔÏÆ¿¾ÀÃÃÇÆü¶µ½½»¸¶®¥žš˜œ ¤U€–«½ÁÂÂÁ¾¼ºº´³±µ»½º¸·¼ÀÅÃÀ¾¾ÂÁÂÁ¾º·³³¶¸»¿ÀÁÀ¾»¿ÁÂÁÃÃÃÃÄÇËÓÕÕÕÑÌÊż¹¸¼½ÀÃÅÂÃÄÅÃÀ¿¾ÃÇÉÌÌÇÁÁÂÆÉÊÊÉÇÌÐÕÖÖÖÖÖÖÕÒÒÒÔÖØÚÜÚÙ×ØÖØ×ÔÐÒÑÌÌÍÔÚÞÝÞÜÝÞÝÜÜÙ×ÖØÛÛÞÜÞÞÞÝßÞàááãàßâáàßßÜÛÙÛÞâãâÞßßßßáâàáãâáàÞÜßàÚØÙÝÝÜÛÛÜÜÚÛÛÚØÕÑÐÔÜàãééåáàâÞÙÖÖÓÓÑÍÉÇÇÊËÉÇǾ¼»¼¿¿½·°«ªª®­­²´¯©©§§¦¢ £ ¢¦©«®±³¶·³¯«¨§ž‘…oXSB/.0.,+00-'%$'% .n“¢¨°¹¾¾½ÅÉÊÍÓÜÞãÚÏÊÓÜÝÓÍÐÙÞáâáâãäææèèçæääáäåæéìíêáÑ¿¸¾ËÐÚããåéððîìéìðòòïìïòôööõòóîïïëëêëëêçåæéìîììîìîîìæÚÍÊËÍÏÐÍÈÄÄÍÛåìñôòôïïîðóôðíçãäåãââÝ××ØÝÞäçæçéèãØļ¸¿ÈÔÙÜÖÏËÈÉÌÌÈÀ¾ÂÀÀÂÁÀ½¸´³·¸´³±¬¥££¢ ¡£§Š¡·ÀÀÀ¾½¼»·¸ºº¶µº»¼¼¹¹¿ÃÅÃÀ»¾¾ÁÀÀÀÁ¿¼»¶µ¸·¸º»»¹¸··¶¹¼¾ÃÄÄÀÁÆÌÓØÚÕÐÉþ¸¸¼ÁÃÅÉÇÆÄÅÄÁ¿½ÀÅÈÌÍÈþ¾ÀÂÃÃÃÁÁÅÍÐÔÔÔÖÕÕÔÑÐÓÔÚßââáÞÝÛÚÙ×ÓÏÏÎËÊÌÑÛÞÞÝÛØÙÚÙÙ×ÕÕØÚÚÙ×ÛÝààààáßáãààåäáÞÚÖÓÐÖØàâÝÛÛÛÜÜÝÞÞãäååããàÞàÜØ×Ø××ÕÖÙØÚÝÝÙØÔÍÍÑÖÛàäçãáâåáÞÜÙÕÖÕÓÎÌËÎÍÌÉÇÿ¾¼½ÂÆÆÁ¼¶°°²±¯²¯¯ª««©¤¤Ÿ¡Ÿ¢£¥¨ª­³¸´±­«§¤ —ƒsb;43-(*.-*&!#*& %h‘¤«¯´¹»¹¾ÆÉÈÏÚÞáÚÈ¿Ë×ÙÐÊÌÑÙÞâáâáãååæåèãàßÝÜÞÝãéííæÒ¾¬°ÂÑÛâáßåèìííëêîóñïîðñõööñóóîîêåãäççåààåèëíìíîîïòïîåØËÊËËÊÆÂÀÂÈÕãìïóóóîííðòñíêãÝÞßáããáÝÞßàâççççéåàÕ¸·½Ê×ÚÛÕÍÄÀ½¿À¿¿ÀÁÃÁ¼»»¹³±±³µ±®¬¨£¦¦«ª¨©©«¿ÅÀ¼¼¸¹¹·³··»¸´¶º»»¼¼¿ÁÄþ»¼½¼½¾¾¿¼¹···¶µ¶¹¸¶²²³´´º½ÀÇÿ½¾ÈÏÓÚØÓÉÁ»¹¹¼ÂÆÇÊÉÈÇÆÆÆÁ¿À¾ÆÍÎÌÅÀÀÁÄÊËÇÅÅÁÃËÐÐÑÑÒÕÓÒÒÐÓØÜàãâââáÞÞÛÙÔÍÍÌÎÐÑÕÛÞÞÜÙÒÒÖÙØ×ÔØØÚÕÓÒ×ßáßààÞáäåæäåäÞÚÕÑÏÒÔÛáâÛÙ×ÚÝÝÝÞÞáãæãåãâââß×ÒÑÑÑÐÓÒÓ×ÚÚ×ØÕÐÍÏÒÕÚâãàáããáÞÝÜÚØÙÕÕÔÒÒÔÐÍÊÆÃÃÃÃÊÐÎÎÈÁÁ¾½º¹¹¹´³³´²­¥£ Ÿ £¡žž¢¤±·¸³°­«§¤¤ œ•mOF1#&)'$"! "!).* $c‘¤©¬°¶·¹¹ÁÆÇÉÕÜà×Ä»ÃÐÐÉÂÂÌÑÙÛÙÚÜÜÞáàßÞÛÓÓÑÑÐÌÐÝãååÜǹ¹ÄÕßåáÕÓÕßæîìëíñòîìðññòôóñóðéåßÝâçåâÞßãæíîîìëíîðóòëÞÑÉÅľ¶²¶¼ÆÒâìñóòñìëëëííãÞÖÓÕÚÝßáààáäààãääãããßÔÇÀÄÊÔÞßÜØÏÇÁ¾¾¿ÁÄÃÂÀºµµµ¶¶¶µµ·±¬§ žž§ª¬¬¥§½Æ½¸µµ¹·µ²³´¶¹´²·¹¹»¼ÁÁÀ¿½»¹¸¹»¼»»¹·µ¶´±¯´·¸´³°²´·»»¾¿¹µµ¶ÂÎÔ×ÔÌĽº»¾ÂÆÉÊËÉÆÇÆÆÅÁ¿¿ÀÅÎËÈÅÂÅÆËÎÏÍÊÇÂÂÊÎÍÍÎÏÑÓÔÒÒÕÚÝááààââáßÜÙÒËÊÌÌÎÑÓ×ÞÝÛ×ÎÈÐÖÖÕÔ×ØÕÑÐÎÖßáßÞßàâåééèæãÚÔÓÎÓÓØÜÞÞÛ××ÛàáàßßàáßÞßßàáâàÖÎÉÍÑÒÑÐÏÐÓÓÖÖÒÑÎÎÎÒØÜßÞßßàÜÙÙÚÙØÙÚÚ×ÔÔÕÒÑÌÉÅÅÄÈÏÔÖÔÐÌÉÆÄÁÀÀ½º¹¸¸´®©¥¤¡¢¤¡›˜ž¥±¸¶¶³®­¨¦¨©¦¥šx]G&&%!#%%%!$(,/*  Z£©ª«®°²³ºÁÃÈÑÖÙм¶ÂÉƾ··ÀÈÒÕÕÕÔÖØØØØÕÐÇÅÉËÆÀÇÒÛáâÞÐÁÀÏÜåêáμÊàéëìíìîïîïððïññòòîçáÙÞäçåãààãäèêèãääéðôòîåÝÔÊÁ·¦£°½ËÖâìñóðïëéèçèåÜÐËÊÎÛÞÞßÞßâãàààâßÞßÝÙÒÈÈÏÖàåäßØÕÎÇÈÇÈÊÉÇü²¬¬¯´»º¹¹º°¥œ’Žš£¥¤¥§½¿¼»¶µ´µµ´±¯±´´´³¸¹¸¸»¿ÀÀÀ»¸···»»º¹¹¶·³±¬ª¯¶¶µ³°³···¶³­ª§«³ÀÍÒÑÑÊÀ»½ÁÄÈÈÈËÊÈÅÄÄÿ¿¿ÁÆÍÌÌËËÍÊÎÒÓÓÏÇÃÀÅËÌÎÍÏÑÑÒÓÓØÚÛààáßàáãÞÚØÑÉÈÊËÎÓÑÕØÛÛÔËÆÍÒÕÓÖÖ×ÔÓÏÍÑÚÝÜÛÝáàçìêçäÜÔÏÎÓÖÖÚÛÜÛÛ×ÖÙÞâáÞÜÜÙ××ØÙÚÚÜ×ÐÇÇÉÍÓÑÐÎÍÐÓÔÓÒËÈÊÍÐÕÚßßÝßßÛØØØÙÙÜÝÜØÕÕÓÑÏÌÉÈÆÅÇÊÍÏÐÍÎÉÆÁÀ¿¿¿º¹º¹´¯©§£¥§¦¤œ”˜ ­²±²´³°¬ª¬®¬¬ª¢”ƒpR4'( %!!#&($  N‚¡ª¨ªª®­®¸¼½ÂÇÌÏƼ»Æǹ³´¸¿ÌÔÕÔÔÒÒÓÔÔÑÍÆÄÄÇÆÀÉÒÛàáÞÖÌÏØãèèßÊ´µÆØèëéííëéíîíííìîïîéâÜØÝåéèèæääåèèãÝÔÖÝêððñîçåÞмª¤²ÅÒßæìñóòîëêêèçâ×ÍÇÆÏÛáâÞÜàâäâàÝÝÜÚÜÙÕÎÊÍÔàåèæàÚÙÕÓÔÓÕÓÓÐÊÁµ¦§«±¹¿¾¾¼­›Ž…‘›ž¢¢¹¹¸·´´²±±®®­®¯¯°²³·´³¶º½¼¾¼µµ¸¸¹º¸·¸¸´²­§¨®³´³°°²µ¶´®¦¢Ÿ¥®µÁËÐÏÏÆÀÀÃÅÊÉÊÇÉÉÅÃÄÁ¾½½ÂÃÄÈÊÌÎÏÐÑÐÑÙÝÙÓ̽ºÆËÍÏÏÎÒÔÓÔÕÚÜßàáßÞÝßÞÞÛØÐÊÈÊÏÑÔÕÕÖØÛÙÐÎÒÕÓÖÔ×××ÓÌÈÊÓÙÚÝáããæéëæàÚÍÍÒ×ÙÜÚÙÚÛÙØÕ×ÜÜÞÙÖÓÑÑÒÓÓÓÏÎÌÉÉÊÎÓÒÑÐÍËÍÑÒÓÎÈÅÈÉÍÐÕÚÜßÞÝÛØØØØÚßÝÝÚØÕÒÏÐÏËÊËÈÈÉÉÇÆÈÆÄÀ½¼½½½¾¼¾º·´®§§£¦©¤œ˜š¢¨­¬®´·µ³±®­¯°¯®ª¡•~fG)"   ?tª«§ªª«°µ¹·º½ÀÂÁ½ÃÊÍŽº¸º½ÆÑÐÑÓÎÎÑÏÌÊÆÂÁÁÂÁ¿ÉÕÚßãàÛØ×àåçäØÀµ´ÅØäèìëëèåçêêçãääæéäßÝÙàèééèèèåèèçâØÎÊÒäïòóðíìéâÒĽÄÓÞæëïóòðíêéèæäÜÑÇÆÅÉ×àÞØÚàäåãßÚÚÚÙÙÕÒÏÍÒÞâäæåàÝÝÙÙÛÚÛÜÙÖÐź¬ª©±¸¾¿¿¾®™“ˆƒ„˜š›µ¸¸¸·²°¬««¬ªªª©©ª®°±²´µ·¸¹¹µ´µµµ´²´µ¶²°¬¨­¯³µ²°³³´±®¨£Ÿ£­´¸¿ÈÊËÍÇÃÂÇÉËÎÍÊÈÇÅÂÀ¿¼¼¿ÀÂÂÄÇÌÍÐÑÑÐÓÚÞÝÖÍÈÇÍÒÔÓÔÔÓÓÓÔÖÛÞÞßßÞÛÚÝÞßÞØÑÍÊÏÒÕÖÖÕÕ×ÙÙ×ÖÙÛØÕÖØØØÓÎÉÈÑØÜàáâáåççäàÙÓÓÖÚÜßâÝÛÚÙ×ÕÖ×ÙØÓÍÌÏÒÒÔÒÑÎËÉËÎÐÓÖÔÕØÕÑÑÑÑÐËÊÉÈÉÉËÏÕØÜÞÝÝØÖÕ×ØØØÖÖÕÔÐÏÏÏÎÍËÇÉÈÇÅÅÇÄÀ½¼½¼¾¿¿¾À½½»·°«¦¥§£ŸŸ¡§­¬«®±²·µ²±¯®®®®«¨¤—‡rN0)$$  + + 0k—§©¦¦«­²·¹¸¶³²·¹½ÃÍÌÄÁÁÁÁÀÆÐÐÎÍÊÊÌÊÆÁ¼¹ºº»»¾ÉÔÛàáäãàÜààÞØǹ³ºÉØâæéîíçââåéåàßßãáÞÜÛÚàåéêééèåçëëåÜÖÕÚæïññïìëíêåÝÖØàåèìïððíêæäââàÖÊ¿··¼ÊÑÔÔÖÞâãâßÛÛÛÛ×ÖÑÎÑÛãáàáàÜÚÝÙÚÙÛÜÜÛØÑɽ´«¨°¸¾¾¿º¬ž—•’šžœœµ´²³³¯¬ªªª©¦¨©§¨¨ª®°³´³²´·µ³³µ¶´´¯´¶··³°±±²µ¶³³´´µ¯¦£¥§¬³º»¿ÃÈËËÉÄÃÆÆÈÌÎÊÆÂÀ¾½»¼¼¿¿»»ÁÈÎÏÐÑÑÐÔÙÛÚÓÑÑÓØÛÛÛÚØÖÓÒÒÖÚÜÜÛÛÛÙÙÛÝÛ×ÒÍÉÌÐÕÙÙÕÔÓÓÓÕÕØÝßÜÜÙÙÙØÒÏËÉÎÕÛÝÞÞÝàáàßÜÚÙÚÛÝáâåáÜÙØÕÓÕÕÖ×ÎÇÊÌÏÔÓÔÒÒÐÒÕØÛÙÕ×ÛÝÞÝ×ÑÐÎÎÌÎÐÎÈÅÉÏ×ÜÝÞÛØÕÕÓÓÖÔÒÑÑÐÎÎÐÏÏÎËÆÉÉÇÉÇÈÆ¿º¼½½¿¾¿À½¼¾¿½º²¬ª¨¥§§§¬®­­®²´³¸·³¯®­°­­«¨¤šyXB. '"   )]Ž¡¥¢¥­²¶»¹¸¶°¦¢¬¸ÁÉÈÄÀÁÅÿÅÌËÃÃÃÇÉÆÀ¶±³²´·¹¿ÌÙÜáãååâßÜÙÑŽ²µÀÎ×ÝâæëíåÛÜåååáÝÚÝÜÙÖÕÕÜáæèèèççèíîëäßßáéííìêééíîêéççééìíîííèåàÚÛÜ×ÐÀ¬¥ Ÿ°¾ÈÊÑÖÜàáàÛÚÛÚØÔÐÑÖÞâàÝÛÛØÖÙ×ØØÚÜÚÜÕÍÉö­¬²»ÂÁ¹³©¡žŸš”˜š›®¬¬°²±®¬«ª«ª©ªªªª®°³µ²±±±²´´²³³³µ²³´¸··¶·¸¶¶·µ³´²®©¥£¨®³¸½¿ÁÇÊÌÊÇÇÇÈÅÄÇÊÈÁ¾¹¸¸¼½½½»¹¸¼ÆÌÐÎÎÏÐÏÓÔÒÌÎÕÛÞàßàÛÖÖÒÑÑÓ×ÚØÙÛÝÜÝßÝØÒÍÉËÏÖ×ØÙÕÒÐÍÏÍÐ×ÞßÞÜÙÖÕÕÐÑÐÎÐ×ÙÚ×ÙÚÜÜÜÚÙÙ×ÛÝÝáãáàÛØØÕÓÓÑÓÑÊÇËÏÏÒÖÖÓÔÔ×ÚÞÞÚØÙÞãäáÛÕÐÎÎÒÖ×ÔÍÈÌÒÚßááßÛØØÕÓÑÐÎÐÒÐÏÍÌÏÏÎÍÈÉÉÉÊÊÈÇÃÁ¿ÀÁ¾À¾¿¾»¾ÂÁ¾·±®¬ª«­­­¯°±²´µ¶···³®°¯°¯®ª©¤œ“nZ9  + +$M€˜šœ¢ª¯·»º¼¼µ£œ©µ¾ÄÁº·µº½½ÄÆ¿·¶¸¼¾¿¸´²²°³¹½ÅÓÜàáâáÝÙÖÒÑÌù¹ÀËÑÒÑÔßèêäÚÛáæåãáÞÜØÐÐÕ×Ûâãæååäãçìðíçæååéêèçãâåèèêçæãäãæççéçãß×ÖÖØ×˼© ›”œ²»ÆÌÎÑØÚÚÒÐÐÏÑÒÏÓÚßãáÚÖ×ÓÕÖ×ÖÖØÜÞÚ×ÏËÆ»´³ºÀÅ¿·¯¦£¥¤Ÿ˜”–™š›˜©©ª±··±««ª«©©©©©­°³··´±°°°´±³°°±³°°´¶µ¸¸º»¹¹¸µ²µ°«©§¦®³¸¼ÀÅÈÊÍÎÍËÆÈÈÆÁÂŽ¶³°³º¾½ºµ²²¸¾ÈÊÊËÌÏÎÍÍÌÊÑÖÚÜÝÜÚ×ÔÑÑÑÏÑÓÕÕØÙÚÝßßÝÚÒÎÎÐÕØÙÙÚÖÒËÇËÎÑÙßßÝÛÖÔÕÓÓÔÒÓÖØØØÖÕÙÛÛÛØÖÖÒÖÙÙÚÚÜÛÙ×ÖÙÖÑÏÍÌÉÈÎÐÐÓÔÔÕÔ×ÙÚÜÖ××ÙàåäâÛÔÏÌÐÔÙÛÛ×ÓÒØÝáäààÝÜÚÕÒÐÐÐÐÑÐÏÍÎÎÎÏÏÌËËÊÉÊÉÈÇÅÃÀÀÀ¿ÁÁ¿¾¿Ã¿»µ´²°¯®­®°±³´´³µ´µ·´¯°°¯±°«¬¨¢œ˜“|a=$    +  'Vwƒ‹‘–’‹ˆŒ‘¡²µ·µ²±®¬¯³®§›ŒŒ•ž­¹Âú´¶¼ÄÊÏÏËľÂÉÖßßÝØÏÆÌÖÜÞßàãäççåæããâåçæäáÞÝßáßÜÖÑÌÀµ°­«²ºÀÇÏÖÝßåéèãããàÜÚÛ×ÓÏÍÎ×ÞâåççéêçãÞÙÔÐÍÐÓØÛßÝ×ÐÇÀ½¸­±¼ÆÎÑÍÍÇÅÈÅÃÁ¼¸º¹¿ÅÌÔÛÒÆ¿½º¶¯¯²³´®£ ž–“”’Œˆ‡ƒ}wtnj±±°±³¸º´±¬ª®²´ºº¸··¶¶³¶¶¸¶´®«­°µ·´¯¬¬«¬¬¬®¯±´¶¹¹º¾¾½¿ÃÃÄÄÁÂÄÃÂÁÁ¿¾¾ÄÇÈÇÆÂÁ¾¿¾À¼¼¼¿À¿½½¼»¼¿¿ÅÆËÎÑÐÎÑÒÔÕÖÔÕÔÐÍÌÇÅÅÅÇÈÈËÐÓÙÙØÕÎÌÌÌÌÇÃÂÁÃÍÔÙÜààÞÜÝÚÚÙØØÙÛÞÝÜÛÜßßÞßáãâá×ÐÙßãäããäääääâßÜØÓÊÈÔÚÞââàãääãÞØÑÏÊËÊÇÈÃÁ¼¿ÃÎÔÕÖÔÕÔÕÖÚÕÑɼÁÅÅÍÔÔÖÔÒÔÒÒÔØÚÜÝÝÛÕÎÍÍÈÅÄÅÅÄÁÀºº½¿ÂÄÃÂÂÀ¾¾»¼»¾ÃÄ¿¾ÂÄÈÊÍÊÊÇÆÄÁ¾½¸º»¾¾¾¹·¶²®ª¦¤©¬¬®«¬©qJ5bwƒ—•Žˆ‹‘¡±¹º¸·²°°®²´¬›ŽŽ–¢©¶ÁÄÁ¼¸¼¾ÄÃżµ·¾ÌÕÛÝÚØÐÏÒ×ØÚÞßâæçèêèåçæäââááßâãàßÞÛÔɽ¶³±¸¿ÄÇÌÑ×ÛâçììíìçààÝÝ×ÑÍÏ×ÛÞââäàÜØÑÈÉÉËÍÍÑÖÝâãßÚÔÏÈÄ¿ÃÈÏÓÑÏÉþÀ¿¼¸¸¸¼½¾ÄËÓÙÑÉÃÀ»³­ª¬¬­¨¡ž›››•“‘‹„|urnkjÀ¾¿¿ÀÁ½¹²«¨®²´¹¹¶··¸´²´·º¹±«±´¹¼º²«©©ª«­­­°²³¶¸¸·¸¼½¾ÁÃÂÃÀÃÄÃÁÂÄÄÃÃÉÏÐËÆÁº¿ÃÆÄÄÄÂÃÅÿ»º¼ÁÃÅÆÇÉËËËÊËÍÑÖØÕ×ÒÌÉÈÅÅÃÄÃÄÇÉÌÑÔÚÚÕÒÎÍËÇ¿»·º¾ÆÌÒÙÞÝÚÛÝÛÝÚØÖÖÕØÚÙÛÜÞàßâãäãß×ÑØßäââàáââãåàÜØÕÐÊËØâææåãäååãßÙÒÐÍËÉÈÉÉÅ¿ÀÂÍÓÕÔÑÕ×ØØÛØÔÒÊÄľÀÈÎ×ÚÕÒÔÒÔ×ÙÛÛÚÙÖÓÍÐÐÍÅÁÀÁÀ¾½º¼¾ÀÂÃÃÁÁ¾¾¾»»»ÁÇÉÈÇÅÆÊÊÎÎËÉÉÆ¿¼º»¿ÂÂÀ½»¸¶²¯«¨¢¦§©«¯°¦—ƒQ Gfx‰”•‹Œ”Ÿ«±°®²µ³°±¶¸·¨”•Ÿ£©°»ÁÀÀº¸¼¼º¹ºµ­±¶ÅÍÓÖÙÛØÏÏÓÕØÜÞáäæêêéæåâßßàààßáâáàãâÞÖÍÈÇÇÊÎËÌÉÌÏÓØßêîðîçààÞÚ×ÏÎÒØÜßßßÚ×ÑǾ´º¼ÅÌÌÌÔÝãäãßÝÚ×ÔÓÕÖ××ÓÍÆ»´µ¸¹³´¸½¼½ÁÇÎÔÏÉÄ¿·®¦¡Ÿ ™˜š›ž™’ˆ‚tpmkjkiÍËËËÌȼ¶®«®³·¹¸·µµµ³±³·»µ®­´¼Âü²ª¨©¬­¬¬­¯±³µ····¹»¿ÁÂÃÁÂÄÄÃÂÂÆÇÄÆËÐÎÉÄ»¼ÁÊÐÏÎÊÇÆÅþº»¾ÂÅÆÆÅÄÂÄÄÄÄÄÌÒÕÖÓÏÉÄÃÄÄÂÃÁÀÅÈËÏÔÛÚØÕÏÍÉŽº¸¸½ÄÇÍÕÛÙÙÝÞÞÝÞÛÚÖÔÒ×ÙÖÚÛßàããäàÜÓÌÓÜàßàáàâãäãâÛØØÔÎÐÞçèèæâáâààßÙÔÒÑÎÊÎÍÎÉÅÀÂÌÒÔÕÑÖÚÜÜÚÙØÕÑËÈÃÃÊÐØÚÕÓÏÎÍÑÕØÚÙÙÕÔÕÕØÕÊÃÀÁÁÀ¿¾½½ÁÁÀÂÿÂÂÁ¿À½ÃÊÍËÈÇÆÈÉËÎÊËËÉÅÂÀ½¾¾ÂÄÃÀ¾½¹¸´²­§¢¥¦©­®®©ƒO(4Pgw†‘‘•¨¨§¦§°´µ´¹¼¾µ¨©©©¤¦«¯´¸º¸¹¹µ³µ±¬­³ÃËÍÎÕÚ×ÑÌÍÏÔØÜßåæèèêåáÞÛÚØÚÛÞáàáàâæäßØÔÕ×ØÙÖÏËÉÊÈÊÓáíñïéáÜÚÙÖÓÓÔÖÛÜÚ×ÕÑȾ´¯³¶¾ÄÇÉÒÝäåäàßÝÜÜÝàÞÛÔÑÈÁµ¯°¶¹·¶»¾¼¼¿ÂÈÉÅÂÀº®¥œ™—•——••™™››—†‚wiegefijÑÏÐÏÏ̾ºµ°°²·¼º¸·´³´µ³¶¸³­«µÁü°ª©«­¬­¯¯²³²³µ¸¸¸º¹½ÅÄÃÃÀÃÄ¿ÃÃÆÆÄÈÉÅÁ»ºÀÉÒÕÕÔÏÉÄÁ»´±³¸½ÂÂÀ»·º¾ÁÀÀÀÄÌÑÌËÇÁ¿ÁÂÄÄÃÄ¿ÂÅÊÏÖØÚØÓÏËÈÄÀ¼¼»¼ÀÄËÒÙØÛßáßÞÞÜÜÖÐÏÑÓÒÑÕÚÝáâáÞÚÎÆÎØÜÜÝàååååâàÞÚÜÜÕÖâèèæáÝÛÛÛÛÝØÖÖÕÕÒÒÔÕÒÊÁÁÎÖÖÒÓ×ÜÞÜÛ×ÚÚÕÏÏÌÌÒØÛÜØÑÎÉÆÆÍÑÕÙØÙØÛÞÞÜÑÇÄÇÈÄÅÁÀÁÃÂÀ¿ÁÂÄÆÄÃÀÀÄÊÌÊÆÆÈÌÏÎËÊËÍÎÉÅÿÁÂÄÄÅÂÁ¿½º»¹·®©§ª©¬­®­©™„]3(>Rg|‰’¨©§¤¢¦±·´´¼»º»¹¸­¢˜——¦¶¸¹»½·´µ²¯±¸ÃÎÍÍÓØÙÓÍÊÈÌÓ×ÛßâäééçáÚÑÍÉÉÓØÛÞÝáãããàÛ×ØÞáãâØÍÉÄÁÂÆÛçîñçáÜÙØÙÕÐÏÒÒÓÏÏÐÎÉ¿º·¹º½ÀÂÆÏÚáãáàßÜØØÝÝÝØÑÈ¿»²ª¯¸»¼¼½¼¿»½¾¿¾»¸¸°¤š–˜™š››šš™˜“‰‚|pgba`abcÏËÉËÌȽ½¹²±±¶¹¹¶µ³²µ´³°°®©«²½½½¹±ª©©¬®°°³´µ²²µ¶º»»¼ÂÉËÆÀ¾ÁÀ¾À¿ÁÅÅÄÁÀ»¹¹¾ÅÎÓÕ×ÓÎÆÀ¸³¯«°µºº¼¹´±´»ÀÄÃÃÆËÌÅÃÀ½¼¿ÃÄÄÅÃÁÀÃÇÍÏÒÓÐËÈÇÅľ»½½½ÂÆÉÎÕ×ÛàáÝÜÚÚÛÖÐÑÐÓÐÌÐÖÜÜÝÞÛÖÊÁÍØÜÝáãèèçåâàÝßàßÙØáèèæßÚØØØÚÛÙØÙÙ×ÖÕØØÖÐÆÄÑ××ÕÕÙÝßÜØÔÙÙÔÓÖÕÕØÜÜÝØÓÌÄÂÃÊÏ×ÙÚÞÝÝàÞÛÔÍÉËËÊÊÇÆÆÇÄÀ¹¹º¾ÄÃÂÀ¿ÂÆÊÈÆÈÎÓÓÒÏËÍÐÏÊÆÄÄÆÄÆÃÃÁÀ¿½½¿½º·±¯¯®°±²¯®£š„]6 3I^t‚ˆ‰‹¦®«¦ž ­·µ³³³³¹¾»°¡“Žž²ºº»»¸³¶¶µ·»ÅÍÐÑÔÚÝÕÏËÈËÐÖÛÚÚáææäÞÓÆ·³ºÉÒÙÜÜàâããá×ÔÖÜâæçàÓÊÆÅÄÇÖáèéãÝÞÛÙØÓÊÆÇÈÆÇËÑÐÎÊÇÇÆÄÃÁÃÆÌØááßßÝÚÕÓ×ÚØÑɾ·³°«²¹½¾¼¼¼¹º¼¾¼¸µ´±¦›‘”˜ž¡£££Ÿ›˜—’Œƒ}vnfbba_ZUÌÊÆÈÉÅ¿¼»º¶²±µ·¹µ´²±°³±¬§¤£¤­³´¶´°¬§§ª®°³²³²²²³·½¿¿ÁÇÒÕ;½¿»ÀÀÁÂÄþº·¸¸ÁËÑÔÔÒÏÉÁ»´±°®°¶·¹¹¶³°´¼ÃÈÉÊÍÐÎÈÅÀ½¾ÁÄÄÆÇÄÂÀ¿ÁÈÇÈÈÄ¿½Á¿À½¸»¾ÂÆÊËÐÓÕØÞÞÝÚ×ÚÚ×ÔÕ×ÕÐËÍÕØÛÜÞØÎÿÌ×ÞßãéëêèäâÞÜÝàÞ×ÓáèêäßÚÚÚÛÛÛÛÜÛÛÙ×ØÙÛØÒÈÈÕÛÙÔÕÙÞßÙ×ØÕÖÓ×ÚÛØÚÚÝÜÚÕÈÀ¼¿ÅÒØÛÜÞßßÜÚÚÖÑÎÍÌËÊÊËÍÏÊÁ¹³±¹À¿¾½¾ÁÆÊÈÌÓÙ×ØÔÏÎÑÏÌÉÈÊËÉÄÄÁÁÀ¾¾ÃÁÁ¿º·µ´³²··¶°¬¥™\4 %B\l{ƒ‡‹‘™¡ª«¥››ª·º·¯­«¬°´ª “Œ‘ž®·¸¹¸´´¶º¼½ÀÆÎÓÖ×ÙÚÕÏÎÊÎÓØÙÛÚÝâåãÛÍ»ª¤¯ÃÐÙÝÚÞàâáÞØÏÒÙàèìäÖÏÌÍÐÑÓØàÞÙÛßßÜØιÀÅÁÃÈÏÕØ×ÕÕÓÍÅÁÀÁÉÔÝáßÞÝÚÔÐÔ×ÓÌö¯¬­®³¶º¸¸·´¶³»»º¼¹³« ’•—ŸŸ£¡š“Ž‰~{urmgcbc\RKÉÈÆÃÃÁ½º»¼º¶´µ··³´²®¯°ªª¥Ÿ¡¤¦­°¯°­ª¦£¨«°¯¯­¯¯®°´º¿ÂÀÊ××ÎÄ¿¼¾¿ÁÅÅÅÅÁ¾º¹¿¿ÆÐÑÐÏÑÍļ¸µ¶µ²··¸¸º·´´¶¾ÆÍÑÕ××ÖÎÊÄÀ¿ÀÄÆÇÅÃÀ¾½¿ÃÄÀ¾¼¶´¹½¼½»½ÄÊÎÑÒÑÒÓÕÛÝÜÛØÚÜÛÚÝÞÚÔÏÐÕØÜÞÜ×ȼºÈÕßáçëðìêåáÞÞÜáÝÔÓáèèèáÞßàÞÞàßßÚÙÚØÙÛÚØÓÉÈ×ÜØÕÓÜßàÝÛÛ×ÕÔÙÝÝÛÙÚÚÚÚ×Ê»·ºÇÓÜÜÛààÜÛØØ×ÒÏËÈÈÇÆÉËÐÎÉÁº´º¾À¿¾¼¼¿ÆËÏÐÕÙÜÚ××ÕÕÑÍÌÉÊÏÊÅÂÅÁÁÁÁÃÅÄÃÁ¾»¹·¶¹¹¶´±®£˜„b94Scq}„‰“—™Ÿ¦¥™§·¹¸¶¬¦¤§ª«¢›šš¡°´¶¸¶´¶¸¾ÂÃÄÇÍÑØÕÔÑÏÍÐÏÑÖÙÙÛÙÛáåáÜμ°¦­ÂÎÓØÙÚÝÝÝÜØÑÍÓÚãéåÜÖÖÜáÞÛ×ÛÙÖÚÝßÜÙ̼µ½Á¿»ÂÍ×ÝßÛÛÙÐÄ»¶·ÃÑÜáààáÜÓÔÔÓÑɾ¯¨¤¨¯³¶²°°¬¬¬¬³¹½½»´¨™Ž‘“•˜˜™œ™“‘‰‚yuvqlhfb`TH@ÇÆÅÀ½¼»¸º¼¹·µ¶µ³µµ²®­¬«©¦¤§ª®±²³¯ª¥¥¥©¬¬¬«¬®®®¯±µº¾¿ÃÍÎÆ¿½ÀÀÃÅÅÆÆÅÃÀÁÁÂÁÈÌÎÍÍËȹ¶µ¸·¶··¶¸¸¶´¶¹ÃÉÒÚÜÛÚÓÑÑÊÃÀÁÄÆÇÇÄ¿¼¾¿½¸¶¶³³¹½¿¿ÂÈÌÎÐÒÒÒÒÍÑÔØÛÛÛÛßÜÚÜÜÜØÕÕØÜÝÞÞ×ǸµÇÕÞãèíðíéçâßÞÜßÜÖÖßåæäáááßßÞàáàÝÜÛÚÚÛÚØÐÅÂÓÙØÔÑÖßàÝÞÞÜØÙÜÜÜÙÙÙÙÝÝÛÏúºÄÏ×ÙØÚÛÛÚ×ÖÔÏÊÊÉÈÈÆÄÇÎÑÓÐÊÆÂÀÁÂÂÁ¾ÂÈÏÔØÚÜÜÜÛÚÙÕÒÎÈÆÉËÉÅÅÃÂÂÀÀÅÇÇÆÅÄĽ¹¹¸·¶´³°©¢Œg: +?Wgt}„Š“š¡§¥ £­µ¸¶³©¢¦­²¯ª©¥©¶¹ººººº¾ÀÃÉÈÇËÐÐÍÉÈÆÍÎÑÓÕÕÖ×ÚÞßÝßÙÐÇ»µºÃËÏÑÕÙÖ×ØØÕÏÊÍÕàçäÝÙÝäèæáÝ×ØÓ×ÚÝÜÝÑþÃľÀÁÉÔÛÝßßÛѵ­¸ÇÓÝàààáÞÚÚÙÕÍĹ®¢ ¨²·³­§¤ žŸ¥ª²¸º¸¯¢•‘’’“•––‘‰…€~{qhd_\XJ<4ÃÄÀ»¹¸·¹º½¾º¸¹¹¹¼¹¶²­©¨©§¦©¯±²´³­¨¥¦©««­¬©­²´³³°±¶··º¿¿¼¸ÀÃÄÃÅÆÆÅÆÅÃÄÅÅÃÄÈÉÈÇËÆÀ¸·¹µ···¸·µ··¹¼ÁÇÒÛÝßÜÕÏÓÒÍÅ¿ÂÇËÎÎÌÇÀ½¼»º·¸·¹¸¿ÂÂÂÇÎÒÑÑÑÑÐÏÎÌÔÕÚÛÜÜÜÛÚÚÚÚÙÕÕØÛßßàØź·ÇÔàäèìíêçäáàÞÞÞÜÙÙÞááÞßâáÜÜÛÞààßÝÝÝÛ×Ø×̾»ÐÚÛÕÒØÚÜÛÛÞÝÜÜÝÝÙØÖÔ×ÚÜÜÒÇÀ¼ÁÊÐÒÑÕÕ×ØÔÓÑËÈËÎÏÎËÆÆÌÔ×Ù×ÔËÅÄÄÄÄÆÈÐÖÛßáãâàßÛÙÔÐÎÇÃÆÉÇÈËÆ¿¾¿ÅÇÇÆÇÅÅÀ¼¸¸¶¶µµ´®ª¥ Že1 $B[iry†Š‘œ¥§¦¡¦°´µ±« ¢±¹·¶±¯¶¼¿¾¼½¼¼ÂÄÇÉÌÉËÍÎÇ¿º¿ÇÎÑÑÐÑÓÖÛÝÜØÖÕÐËÈÄÅÇËÍÍÒØÖÔÒÑÎÊÈÊÑÞäâÛÖÝåçåáÝÚÔÑÒ×ÝÞÞ×ËÃÈÈÅÅÆÈÑ×ØÚÝÛÔʼ¿ÅÓÚáàááßßÞÜÜÖÏƾ²¨¢«·¸²§”“˜™¢ª¯³°§Ÿ•Ž’““”—”‘Œˆ…„}|xk`[WSK<0+À¿Á¼»¼½¾¾¾¾½º¼¾¿¾¾»¶®§¤©ª§¬¯´³µ²®¨¨©ª­¬®«¨ª¯´¶¶´®²µ³·¹¹¹º¿ÁÃÂÄÅÅÆÆÄÄÅÅÄÀÁÆÉÊÌÍÌû·²¯¬­±³³µºÀÇÌÑÖÛÞÞÛÖÏÍÐÒÍÄÁÅÎÓÕ×ÓÍÆÃÁÀÃÅÆÈÈÇÉÉÆÈÌÐÔÒÑÑÒÒÓÔÔÕÕÓØØÖØ×ÖØÛÜÚØÔÕØßàÞÕȼ½ÌÚáèêèçäãáÞààÝàßÜÞáâàáááÛØÖ×ÚßßßáãßÙØ×Òȹ¾ÏÙÞÚÒÒÖÙÙ×ÚÚÖÜÝÞßÝÚ×ØÛÜÖÐÈÃÀ¿ÃÇÆÇÍÒÑÒÏÌËÇÉÏÓÔÕÐËÆËÕÜàÞÙÕÍÉÅÃÇÍÓ×ÝáäååèäáÞÛÕÒÐÊÈÄÇÉÌÏÍÇÄÂÂÇÌÉÇÆÆÃÁº¶µµ³µ¶µ®««©¡Žb6)BZchry‰–ž¤ œ¢ª®¯®¦ž ª¸º¹¹¹½ÄÂÁÀ¾»¼ÀÆÅËÏÏÐÑÌÁ¶¸¼ÅÐÔÍÎÍÐØÜÙÕÒÍÍÍÎÐÏÏÓÖÓÕØ×ØÒÎÍÍÊÈËÒÝáßÙÒÕÝàÝÛÙØÖÓÓ×ÙßÞÖÍËÈÌÍÌÊÊÉËÊÌÏÔÐÎÉÊÑÕÙÕÖØÝÜÞààáÜÓÌž¶²±·¸¯ –‹‡Ž–˜¥©«©¢š“‹Ž”””–”•‘‡€zusolj]PNNH?5)"¾½À¼¾ÀÀÁ½»»º¸¸¸¹º¿¾ºµ®«­­¬¯²´·´°®­¬­­­­¬ª¥«°³µµ±­¯´¸¼¼½¾¿¿¿¿ÂÂÄÃÅÇÄÀ¿¿À¿ÁÅËÍÎÎÍƼ²¬©£©®±µ»ÃËÓÚØÚÜÝØÕÐÌÌÑÑÏÈÉÎÕÙØ×ÔÌÅÈÇÊÌÍÏÒÑÑÏÍËÊÎÒÓÏÏÐÒÖÙÝÝÛÕÓÓÔÓÕÕ×ØÛÛÝ×ÖÖÙÝßÝ×ÊÃÆÍÙâççæãâáâÝÞàßàâÞàßàäããâàÙ××ÛÝßÞáâàÛ×ÖÒø¾ÎÕÚÔÐËÐÕØÖ×ØÔ×ÜáâáÞÜÙÚÕÏÉÆ¿¿¿ÀÃËÒÒÐÉÃÃÃÇÌÒÒÒÐÊÅÇÑßààÚÖÒËÆÅÊÒØÛÞàäææéæâàÛÖÖÔÎÉÈÉÊÍÓÎÉÇÅÄÉÍÉÈÈÆÆÁ¼¸·³´··´±¬¬®©Ÿ‹a/ -EW^dks~‰‘”Ž–¢««ª¤š™£¯·»½¿ÂÇÄÁ¿»¶¶º¿ÃÊÑÑÑÏŸ­­µÄÍÒÑÌËÒØØÓÏÉÅÅÈÍÏÑÕÛßÝÙØ×ÒÎÍÏÎËÊÊÐÙÞÚÕÐÔÖÛÛÙÖÙÛÖÒÔ×ÙÖÔÏÌÊËËÍÊÊÊÅÁ¼ÀÈÉÌÏÑÖÖÑËÆÅÍÕÛßáàÚÒËÅþ¸³¶²¥šŠ~†’˜Ÿ¢¦¥¤›•‹‡Œ‘‘Ž‘„|qjhb\XNEFC<6+%¿À¾¼¼¾½½¸¸·¶²³´´¸º¼º¶´²²¯±³µµ³±­®¯±¯­­¬©¦¨¬°±³²¯­°´º½¼½ÂÂÃÁ¿ÁÃÃÅÄÄÄ¿¸¸¼¼¿ÄÉÎÍÎÎȽµ±®¯±´¹½ÇÐÖÛÝÚØÙÕÒÏÍÉÍÒÐÑÐÑÕÙÙÔÐÌÇÇÉÎÐÑÍÐÑÑÏÏÍÍÌÎÒÒÎÑÓÔÚÝááÜÕÑÕÕÖÕÖÕ×ÙÙÙØÖØÛÝÛÜ×ÍÆÇÎ×áäåäâáâáÞßáàââáãßÞââååãßØÕÖÛÝÝââáÝÚ×п¶ÀÊÍÏÍÅÃËÑ×ÖÓÓÑÑØàããßÝÚÖÐÊÂÂÆÂþ¼¿ÅÎ×ÙÒÇÀ¾¿ÅËÐÐÎÏÉÃÆÏÙÝÜØÔÓÎÊÇËÓØÙÛÞááâäåãàßÝÜÙÔÎËËÌÎÒÏËÈÈÇÍÍÊÈÈÇÅþ»¹¹¸¶¹·³®±°¬¦œ‡a7 +2HV]]et}„ˆv„•£¨©£š•ž­¶»½¾ÂÇÅþ»³²ºº¾ÈÓÓÑÍÁ²¦¦­¶ÄÊÊÈÊÌÒÖÑÊǾ¾ÁÃÇÏØÞÜÖÑÎÉÆÌÌËÈÇÇÍÔÚÕÒÎÒÔÙÛÛÙÜÚÖÑÍÎÏÍÒÐËÈÅ¿ÁÄÇÉÇ¿ÁÂÈÌÐÒÖÔÏƾ¼ÂÇÍÓÕÕÐÉÃÀ¾½¶´²« –‹|x„Ž•£¥¦”‰‚…‡‰‹†„‡„|skhcYQKID@?5-'#ÁÄÁ¼»¹¹·¸·¶¶±¯¯°³¶··¶²°±²±´´±°®¬°³´²®®ª¨§ª±³²±²±®²µ·»»¾ÃÆÄÁ¿¿ÄÉÆÃƼ·µº»½ÃÉÌÌÎÌÇ¿º¶·¸¹¼½ÃËÕÚßáÙØÖÒÍËÉËÏÐÒÓÓÒÕÕÐËÈÇÇÇÏÔÔÓÎÌËËËËÈÌÏÎÏÒÏÐÓÓØàãâÝÒÏÖ×ÖÕÖÖÕÖ××ÖÙÜÝÝÝÙÔÑÊÊÒÚÞäããáâåââáâããååââÝáãæêèãÝÕÔÚßààáãàÜÖ˶³¾ÆÉÊÇÂÀÇÏÔÖÔ××ÖÚàãåâãÞÛÔÌÅÁÂÄý¼¼ÃÔÝßÛÏÄÀÂÅÎÒÎÌÌÉÂÄÌÔÙÙÙÕÔÑÍÊÊÏÔÕ×ÚÝÜÞáââããààÜØÒÏÌÏÐÒÏÎËÍÍÏÐÍÊÊÉÈƾ¾½··¶¶¶³°°«©¥›ŠhC 0CQOSbpz€zosŠ™ ¡Ÿš™¢±¸»º¹½ÃÆÆý¸¹¼»¼ÈÓÔÐ˾°¨¢§®¼ÃÈÈÆÉÒÕÔÑÈÀº¹¸¾¾ÅÔÛÕÒÈÁ¾½¿ÆÄÁÁÅÊÐÓÑÍÍÌÏÕØÛÜ×ÖÎÇÈÆÇËÏÑÍù´±¶ÁÆÇÈÅÅÉËÎÕÒÒÑÐÈÀ½¾¾ÅËÊĽµ±¯¯°ªª«§ž˜†}‹“›££¢›Œ…ƒ‚ˆŠ„xz}{sg`^^RGFID=5,& ÃÈþ¼º¶µµ¶·´®¬«¬¯µµ³±°¯±°°°¯¬ª¬°±³¶±­©©¨©¬´·´±±±®²µ¶»¹½ÅÉÆ¿ÀÆËÉÆý¸¸½¾ÁÄÉËËÌǽ¹¹½¾½¾¾ÃÎÔÙÛÝÜÖÕÐÐÍÌÍÎÍÌÌÍÎÏÎÊÇÆÉÈÇÊÑÏÍÌËÈÈÉÊÍÏÐÏÏÏÌÎÐÒØáæãÛÑÍÔ×Ø×ÕÕÖÖÖÕ×ÛÞÞÞÜÚÖÒÏÏÐØÞâáàâäåäâãäääååäáÝáæèëîçÞÔÔÙààâáâàÙϳ­ºÆÉËËÇÈÌÑÕ×ÙÞßÞÞßàááááÝÙÔÌÆÁÂÄÁÀÆÌ×ßáß×ÈÄÆÈÏÐÍËÉÇÃÂÈÒ×Ú×ÕÔÐÍÌËÎÐÒÖÙàÝÝàâàãââàÞÛÖÑÍÏÐÒÒÑÐÐÏÑÐÎÍÌÈËÉÅÃľ¹¶¶¶µ²±®¬¬ª¤ŽjA 3DIHSatzzwx‡‘šž ž¤±¹·¶´²¸¼¼º·¶ºº¹»ÆÒÒÌÆ»³­¨ª°¼ÇÌÌÇÇÏÕ×ÕËÀ¿¼½½ÁÆÐÕÑÍ÷­¬®µ¹º¿ÄÈÍÐÐÎÍÎÏÔÙÛÜ×οÁÁ½ÅÇÊ÷­«¨®¶½¿ÁÃÄÇÌÐÒÏÌÌÊÌƾÀÅÊĺ«¡˜–šœš  ››—‰~‚Ž—¡¢¢š‰†„„…‚yutywod_\]SEDD?7+#ÂÆÄ¿½¹¶´µµ´±¬«¨¨«°´²°®¯²²±±¬¨§ª¯±²²®©§¦¨«®´µ²¯¯°®²´¶¸¹½ÄÈÇÆÂÂÇÌÌÆÄÿººÀÂÅÉÊÊÈÄÁ¼··»½ÁÀ¾¾ÅÍÒÕ×Ú×ÔÒÓÐÐÐÌËÉÄÄÇÇËÊÇÅÈÈÇÆÄÄÆÇÉÉÉÇËÍÐÑÑÍÎËÌÏÑÓÙáæãÛÑÍÓ×ÛØØÖÖØÖØÙÝßàÞÜÙÕÏÌÒÐÓÛßààáäæâããããâäæåãàåæéïëæÞÖÕÝáãâáààÕËô®·ÄÇËÊËÏÒÓ×ØÜáãàÚÙ×Ø×ÙÛÝàÝÓËÇÃÃÈËÑÚÞäãáØÊÅÆÊÏÑÎÌÉÊÆÆËÑÕ×ÙØÔÑÏÏÏÐÐÒÓÙßàßáãâåæåâßßÜÖÏÐÐÑÒÒÓÓÎÎÍÏÎÎÎÎÍÊÉÊĽ¸·¶¶µ±¯®®­ª¦ž‹j= #9@DM\ny{}…—¢¡ž ª³´¬«©¨«ª¨¦ª¬¬­µ¿ÌÌÈú¶²°²·ÄÏÓÐÈÄÉÓØÕËÄÀÀÂÄÉÎÏÑÏǾ´¤–™£¨µ¿ÃÊÍÐÒÐÐÏÐÒØÚÙÓȼ¹ºº·µ¹¾¶¬¦££¥ª°¶¹½ÀÅÊÍÌÉÇÉËÊÊÆÅÅÇÈÀ°¥•Œ’‘’—™››–ˆ€}ƒ—›žŸ˜“Œˆ†ƒ}ztvxvph`^^QG@<80'ÀÃÀ½¼»µ³´²¯¯©©¬¨ª­±¯®°±±±²¯ª©¤§©¬­¬«©©©«¯¯±°°¯±²®±´´¸¹¾ÃÅÃÂÄÂÆÊÈÄÂÀ¿¾¾ÃÅÈÇÆÄÁ¿¼·µ·¼¾Ã¿¿¾ÄÉÏÏÔÔÒÐÒÑÓÐÌÉÆÅÄÁÁÄÅÅÆÈÊÊÅÁ¿¼¿ÂÇÈÇÉËÎÎÎÎËÊÍÎÒÔÓÖÝàÝÕÎÊÐÕÙÛÚÚÚÚÛÛÜàâàßÝØÑËÉÎÐÒÚàãâäåæååäåãäæææãàâãæææàÛ×Øßâââááß×ÐȽ·¹ÂÆÈËÏÓÙÚÚÜÜßáÛÕÏËÇÇÊÏØÜßÙÐÊÃÂÇÑÙÝààãàØÌÈÆËÎÐÏÎÍÍËËÐÖ×ÛÝÜÙÔÓÒÓÑÐÑÓØÜÝÞáäæééæçâááÚÕÕÔÓÔÕÕÓÓÏÐÏÐÐÐÒÒÏÎËÇÁ»¶µ·µ²²±°²¯®¤‹fD!'2;L[iv{‚ˆŠ“š™˜ž¤§¦¤¤¡Ÿ ž›œ›©ºÇÇý¹¹¹·»ÂËÒÕÒÈ¿ÂÊÐÑÈÂÁÂÆËÍÐÑËĽ³ª™˜ž§µÁÅÇÌÐÓÕÔÑÒÓÖÚÙÑȾ¹½»¶°²µ´ª¡Ÿžœ¤¥¬µº¾ÆÇÄÄ¿¼ÂÆÉÇÈÅÄÅù®§ž˜œ›—•–˜››š”‹ƒ‡Ž”™–——•Ž‰ƒ~zyvwttuqjb_WH?861,&!%$¿ÂÀ½½·´´³°¯¯¬­­««¬¬«®®°¯¯­®ª¨¦¥§¦§¨ª¬­®¯²²­®¬®³³®°³´·¼ÀÂÿ¿¿ÀÂÄľ¼¼À¾ÂÅÃÀ¾»¼»»¸¸¶º½ÂÀ½º¾ÅÊÍÏÏÐÐÐÑÐÊÅÅÂÃÁ¿¾¿ÁÂÄÆÈž½»¿ÅÅÅÆÆÉÊÊÌËÈÊÌÏÓÔÒÓÖÚÖÎÇÃËÒÖØÛÛÜÞßàÞâââßÞØÎÆÅÌÏÕÜàâäæååççæåäæçåæäâßààßßÚØÙßßäããáááßÖÏǾ»ÁÅÉÍÔÙÞÞÞÞÝàÞÚÕÎÈÄ¿¿ÄËÖÛÚÕÊÂÀÃËÓ×ÚÛÞÝÔËÆÃÇÊËÐÎÏÎËÎÔÙÚÜÞÝÙÕÔÔÐÐÒÑÒ×ÚÙÛÞãçëëêæãâßÚØÖÖÔÖÕÕÔØØÓÐÏÑÑÔÓÑÎÈÅ¿¶³²´´³±³³²²±¨ž—ƒfE"*3-../24444/-..1.+,¿¿ÄÁ¾º¶¯°²³¶¸ºº¶³³¯³´¶··¶µ¶´³³®­«¬­°±°°¬«²¶´¶¶·¶µµ·³´³µ¼À¼½½»½À½»ºººº¼½¹¸½¿¿ÂÁÁÆÊÆÄÅ¿½¾ÀÀÅÍÏÊÅÁÁÃÆÅÉÉÊÊÉÉÊÊËÈžº¹»¼¿ÆÌÏÐÑÔÓÓÓ×ÖÙÕÔÖÙØÙÖÓÐÕ×ÜÞßÞßÞÜØ×ÛÜÚÚØÓÏÍÑÕÔÓÏÑÔÙÚÜáäæéíîðïêçâÞÛÙÛÞàáãááàÚ×ÙÞâåãáãáßÙÓÓÔÓÖÙØÜàâåäáÝÚÛÙÙ×ÙÚÖÓÑÎÌÍËËÉ¿ºÃÊÎÑÎËÉÌÏÔÓÑÒÒÍÉÇÉËÆËÎÒÕÖÓÕÔÕÖÓÎËÈÄÉÍÖØÚÚÝáãÝÙ×ÚàáåçèéçäâàßàâââàÛÛÝÛØ×ÒÏÍÌÌÉÉÇÈÈÆÇÂÁ½º¹·°°³²¯¯«¦¤£“sR)%24CGHCAB>=>94º¹·¹µ°«©«¯³µ·º»·´°­­­±µµµµ··µµ²±¯°³¹¹º¼»»¹º»º¸¶·³·¹¹½Á¿ÁÀ½¾¿º¼¸¸·¸»ÀÀ¾¼µµ¸¾ÂÁÁ¾ÂÃÀ¿¾¼º¹¶¶´µ¼Ãľ¾ÀÀ¾ÀÄÅÈÌËÎÍÌËËž¼½¾¹¹ÀÉÎÓÒÑÎÏÒÓÓÓÒÔÖÚÜØÙÚÙÙØÝàáââáßÝÚÚÛÝßÞÛØÕÒÑÔÓÑÕÚ×ÒÕ×ÛÞÜáæäåáßÞÜÝÞãçèêêéãàÝÝáåææáÜ×ÔÓÐÓÖ×ÖÚÙÚÞáàßÜÙÙÜÛÚØÔÕÙÙÕÒÏÎÌÍÍÏÑÑÐÐÐÑÐÒÔÖ×ÖÕÒÏÌËÇÅÈÆÃÆÉÎÒÐÏÍÌÏÕØÓÏÊÄÀÉÒÚÝÛÛÛÙ×ÓÐÓÙÛÝÞâààâãääáááàÞØÕ×ÖÖÕÕÕÔÓÒÎÍÍÇÅÆÆÆÄÆÁ½º¶µ´²²²±«£Ÿ¡ ‘wR)"+-5DSZaegd^eimuvv}‡Œ’˜œŸ£§§ª®±¯ª¦¡Ÿ¢¨¬±¶µ³¯®ª¦£¡Ÿ¢«µ»½º¸¹¹³²±µ·¼¼»·³´´³²¯¬¬§£¢ šš–—ž¤©ª©§©§ ›Ÿ¡ž—””˜›—“”˜šš›œœ›“‘Žˆ€zrohjnolg]X]\YYUPKHEHGB?=:2-,)!!&,69=DHKGIKGC@:5´±°®­­«¬®®³·¸¹½¹´²­«­­°°³´¶¸··³²±°¶»º»ÀÁ¿¾¿¿¾¼·´°³·¹¼¾¿½½º»½»¼»»»¼¾À½ºº¸ºÀÀÂÁ½½¿¼»¾¿»¼»µ´´ºÂÿ¾ÂÀÁ¿ÁÂÅÇËÍÎËÍÊü¹¹¼º¹¾ÈÌÏÑÏÌÊÐÕÕ×ÖÕØÙÙÛÞÞÞÝÚÝÞââãßßÞÝÛÛàââÞ×ÏÇÉËÌÎÕÕÔÒÐÔÚßàßâãÞÝÜÚÛÜàâåäæäåãÞÙÚßãååßÙÓÈÇÉÍÔ×ØÛÞÜÞãâÝÜ××ÙÙ×ØØØÙÙÔÏÍÍÎÍÎÑÒÕÔÐÑÑÑÔØÙÖÖÒÎÍÊÈÆÅÄÃÂÇÈÊÌÎËÊÌÐØÛØÕÐÆÃÊÓÚÜÜÖÖÓÒÎÏÔ×ÙÝßàããåçççæäßßÝØÕ×Õ×ÚÙÙÚÙÓÓÎÌÇÃÃÆÄÇÉÅÁ¿º¸·³·µ´®ª¨¢¤¤—yT) %2>FSYZXTV_elrsw}†Ž“—œ›žŸ¤©¨¨¢œ™ ¦©¬¯³°¯­«¨£Ÿž¤²¹¾½ºµ²®¬«ª¨°µ··¶µ³³³®¬§¥£¤¤¤ œ——›¢§§¤ žš˜˜ –‘—š˜”–›š™˜—”‹Š„ztqoloqqmla]\\VSPFCBBBA<8633/***(-8:89?CGKPTOE@84±­ª¬­­¯¯¯®²µ»¾½º´°­««©©¯°´µ³²³±®°±¶º»¼À¾ÀÀÀÀ¾¸³¯´´¶¹»º¹¸·¹¸¸·¹º»»½ÁÀ»¹¼¹»¼½½¼¼¾½¼¼½½½¾¼·µ³¸¾À½½ÀÁÁ¾ÀÁÄÆÉËÍÏÎÊĽ»½¾»»½ÆÊÍÏÍÉËÓ×ÙÛÙÕ×Ö×ÚÞÞàßÞßàáââáàÝÞÛÙÞââÜÖÌÇÅÆÉÎÔÔÕÑÕ×ÝàââãáÞÚØØÙÜÝááÞÝßàâÝÙØÞáãäßØÎÂÃÆËÔ×ÚÜßÝÞßÝÙ×Ö×ÙÚØØ×ØØ×ÕÏÊÐÌÎÐÓÓÕÑÍÌÏÏÑÔÖÕÓÏÌÌÊÈÈÆÇÂÄÉÈÊÍÎÏÒÑÔÛÚÛÕÑÊÆÊÔÛÜÛØÕÒÎÎÏÔÔÕ×ÛÞâäçêéçéçáÞÜÙÙÙÚÝÞÝÜÛÙÕÔÑËÈÅÇÆÅÉÈÇÅÀ¼»¸µ¶·¸´°­ª¨¦¦pN% '06@KOOST\cjqtvvˆŽ“››š˜–› £¥£¡¢§©©ª©ª«ª©©¥¡Ÿ¡ª³·»»¹´¬¨¨¥£Ÿ¤«°µ³´³²±¯©¤¡¢¤¥¤ ˜•”—ž¤£ ›——™šžš–Ž“—”‘””•——“’Ž‡†…}voppmpplkgbZWWPNJC=>>@<60/122.--37<:78=EGOWXQG>85³¯¬¬®®°¯®®±¶½¿¾º³¯««ª¨«­±µ´°¯¯®¯±³¸»»¼¿Â¿ÂÄÇÄÁ¼·²µ²±¶¸¸¹¸µ¶µ¶µ·¸ºº¼¿À»¼»¹¹¹ººº½½½¿¿¿½¿¾¾º·³·»½»¼ÀÁ¿¿ÂÃÆÈËÍÏÒÒÏÊ¿ÂÁ¼»¾ÄÇÊÎÊÈÍÕÚÜÜÙÙ×ÔÕÙÜáßàßÞÞßââßáÞÛÛØÛßàÝÕÎÉÅÆÊÎÔÖ××ÙÙßâáååßÜÕÖÕ×ØÛÝÞÜÛÜàäàÛÛÝáâãÝ×ÌÄÁÄÊÑÖÛÜÝÜÙØØ×Ô×ÙØÙÚÙØØÙÚÕÑÎÏÌÏÓÕÖÓÏËÇÈËÍÑÔÓÑÍËÊÊÉÉÅÅÅÄÈÈËÍÑÕÙÚÜÞÞÙÛØÓÎÒÔÙÜÞÞÜÖÒÐÑÑÐÑÑÖÜàäçëéçéçâÞßÚÚÛÛÞââàÝÙ××ÒÏÌÈÉËÊÉÆÈÇÅÀ¾º¶¶·µµ²®ªª¨¦žŠlD ).6=EMTSV]gptsrwƒŠ–›™˜™—¡£¤¡¨®­ª§¤¥©¦§§¦££¦«¯³´´³´­¨¤  š—™¢¨¬­¯¯¯­¨£Ÿ ¢§¥¢ž•’‘•›Ÿœœ™š››ŸŸ›—‘‹ŽŒ†‡‰”•‡‚‚~voknmhhjfdbXSNJFGD>788760.237:<46;>=;7=BHKQTUPF?95´®¯¬¯¯°¯°®²·»º¼·±¯¬¬¬«®³¶·¶°­­­°²¶º½¼¾Ã¿ÃÅÆÈÇž¹¹·²³µ·¸¹´²²´´´µ¸º¼¾Á¾½¾¹·¹¹º½½¿ÁÃÄÿÁÀ¿¼¸¼¾Á¾¼½½¿ÀÃÊÌÐÑÓÒ×ÙÖÑÎÌÊž¿¾ÁÇËÍÍÊÎÓÙ×Ú×ÕÕÒÓØßßâÞÞàÞßàááÞÛÙÚØÝßáÛÖÐÌËÈËÏÕÔÕÙÙÛÜÞâåäàÙÕÓÑÔÕÖÙÛÚØÚÝãâàßààââÜÖÎÆÄÅÉÑ×ÚÚÛØÖÓÓÒÕÙÛÛØØ×××ÛÜØÔÏÌËÎÖÙÖÖÏÇÅÉÇÊÍÒÔÕÏÌÐÎËÆÈÅÅÇÈÈÈÊÎÒÙßÝÝÝÝááÞÚØÖØÛÝßßÚÓÓÑÑÐÏÐÔÛáäêêçèéèãÝßÞÜÝÜßâååàÛ××ÖÓÒÏÑÑÎÉÆÈÈÇÄÁ¼¸¸¹¸³²¯«¨«ª£ŽiD! + "*.6GJIJQ_mqoottw‰“—œœœ¢Ÿ¢¨¯²­¦§£¨©¦ª«ª­³¹¶´°­¬®«¨£œ–•Ÿ¥©©ª«©§¤œž¢¤£Ÿš—”š›ŸŸš™™›ž¡ ¢¢ž“‡‰‰€xx‚†‡€}|vnhdfe`]a_^YTKHGBBA71/-.0-/57:BEDDGFC?:DIFHJMMHD?:7²°±²³°¯°³±³´´²³¯®­­®°±²·¶·´°­­¬¬°¶º»¾ÀÁÀÁÀÁÁÁÁÂÿ¾¹µ´µ¶·¶´³´µ´´´µ¹º½¾¼¼ºº¸¹º¾¾¿ÁÄÄÃÂÁ¿ÁÁ¿¾¾ÀÂÄÀ½¹º¾ÃÊÐÓÕÕÓÔ×ÙØÙÖÔÍÄÁÁÁÅÉÍÍÎÍÐÔÖÕÕÓÑÏÎÏÔÚÝÞßÝàßÜÝßÝÝ×ÖÙØÛßàÛÕÒÑÐÏÐÒÔÓÒÔ×ÚÙÙÛááÜÖÓÓÐÒÓÕØÚÙÕÒÖÞàßáãæåæÞØÒÊÆÆÉÑ×ÚÜÝÚÔÖÑÑÖÚÜÛÔØØÓ×ÜÝÛÕÍÇÆÈÑ××ÖÐÅÃÆÇÉÍÑÓÒÎÏÓÒÊÈÊÊÉÈÇÇÅÃÄÆËÑÕ×ÙÛàãäÞÙ××ÙÛÞÜÚÖÒÓÑÓÒÓØÞäçéêêéêçâßàááÝÜßâåäâÝØÙÙÙ×ÒÒÒÏÉÊËËÊž»¹¼¼·²±¬ª©«¬¨¤ž‰iE +!(4=AFMZfhhmtvtx|ƒˆ—•••”˜¢«®¬ª§¥©¦§©«ª¬°´³®ª§¥¦ª¥ š˜‘Ž‘ž§§¨§©¦¢ ›š›¡¡Ÿ›–“”•–™™••–˜œž¢¥¥Ÿ”ˆ„€wmoqu~‚‚{ywpica^`ZVXYWTNFFGC@<0*,**+-+/5;DIIKMNHBBHIDCEHIHHIHE¶¹¸»½¸´´±±±°­«¨¨¨«¯²³¶µ¶··³°®®¬ª¯¶ºº½Á¿½½»¸º½ÀÄÄÀ¼¸´´±²´³³´³µ³³³µ¹¹¼½ººº¹»¼½¿ÂÄÇÇÄÀ¿ÀÀ¿À¿¼¾ÁÁÃÁ½ººÀÇÎÔÖÕÓÏÑÓÖ××ØÓÍÆÃÇÈÊÍÐÐÍÎÓÓÔÔÔÑÎÍÊÌÒ×ØÚÛÞááßÝßÞÙÖÕÖÕÙÞßÚÔÓÕÖÖÖ×ÔÒÑÐÓÔÓÕÕØÞØÒÐÐÏÔÒÔÙÚÙÔÊÎÕÚÙÜåèìèá×ÒÌÉÄÊÑ×ÛÞÛÚÖÕÕÔÕÜßÜÖÚÙÖ×ÛÜÙÒÊÄÄÉÍÒÖÔÐÉÂÄÉÊÎÐÑÍËÒÓÓÑÏÐÑÎÌËÅÅÁ½¼½¿ÆÍËÓÚßàÞÜÙ×ÜÝÝÜÚÚÕÔÔÕÕÖ×ßççèéëéêçäßàãàÝÚÜÝááàÚÙØÛÝÙÔÒÒÐÌËÍÏÊÇÁ½¼Âùµ²­¨§ªªª©¥™‰h> + + (1;BKUZZ\hpywv{wv|‚‰Œ‡ˆˆŠ“Ÿ¡§¦¥¤¦¤¡¤£¡¡¥©©«¦¤£¡¢£š”’‹ž¦¨ª««§¤ŸšžŸ›–’‘‘ŒŠˆ‰Œ”– •Žƒ‚{piigeptuvuusmge_`\VRUUTRIA=>>:2,'(,-/.+-4=DHHIONMEFKF@?ACGINUWU·º¼½¼¸´³±®¬¬ª««ª®±¶¶¸¶¹¹¸¹·²°±¯«°µ·¹»¿¿¼»¼¸º»À¾º¶±²³±²¶µ²¶´³²²¶¹½»¾»¼½¾¿ÁÂÃÄÇËÌÉÅÃÃÂÂÁÀ¾ÁÃÄÉÉÿ½ÄËÒÖ×ÕÑÍÍÎÎÏÒÒÐÍÉÅÊÍÏÓÖÓÓÒÕ×ÖÕÔÐÍÍÌÌÏÕÙ×ÙÜáâáàÝÛÙÖÖÕÒÖÛÜ×ÖÕÖØÙÙØØÒÐÌÐÐÑÒÓØÛÙÖÐÑÑÔÕÕØÚ×ÓËÊÑÖØÝâéèèÞ×ÑÌÆÈÉÏØÝÝÝÙØÙÙÙÚÜÞÜÚÞäáââÝØÏÆÀÂÇÊÍÐÐÍÈÅÇÊÌÎÐÎÐÌÐÖ×ÔÔÕÕÑÎÉÈÇÇÆÄÀº¿ÄÉÏÖ×××ÙÖÚÝÝÛÛÜ×ÙØØÚØ×ÙàççåæææåçáÞááàßÝÛßààÞÜØÛÞÞÜÙÖÔÑÎËÍÐÏÊÇÁÀÃû³­¦¡¢¥¬¯¯ª¢™‰b8 &-4;DLJQ^gotw{{tqv{{}€‚„…‰–šžžž›š—–™šœŸ   ¡  œ˜š™’œ£«««­§¢¡ž›š—–‹‹ŽŽ‰€}‚ƒ‰ŠŽ‘’‡€}|umhca^clpsrqoifea]WONOPMJG=76620,123653218AEEDEIKKGGLICDEHKPV_`^³¶¹º¹³°±¯ª¨©«®¯®±µ¹»¸·»ººº·³±²°°°µ¸¶¸½ºº¹º¸·º»½½¼¹¶³²±¯±³µµ¶µµ²µ»½¿¿»·»ÀÀÁÂÂÂÅÇÊÌÈÅÆÆÅÃÂÁ¾ÁÅÈÎÎÊÆÂÇÍÔ×ØÖÓÏÏÌÈÉÊÌÏÍÈÅÉÐÒ×ÚÙÖ×ÙÜÖÔÔÑÐÏÎÏÐÓÒÓÕÙÝãáÞÛÙ×ÕÕÓÎÔÙ×ÔÑÒÕÖØØØØ×ÔÐÑÖÕÒÑÓÙ×ÓÐÑÐÔ×Ø×ØÖÓÎËÏÔÚÝãçæäÝ×ÏÌÉÇËÎØÞßßÙØÙÛÛÚÙÙÚÚáçæèãÜÕÊ¿½ÁÆÈÊÊÌÌÉÇÉÊÍÍÊÎÎÎÑÖ×ØÔÖÓÎÊÆÅÆËÐÎÆÁÁÈÏÔÖ×ÕÔÔØÛÞÝÛÛÛÙÙÙÛÝÛÚÛàååàáââáßÝÝÝÞßßÜÚÝÞàáÜÛÝßâßÝÙÔÐËÊÍÐÐÎÊÅÁ¾»³®£˜˜›¤³º¶¯¨¢—‚[+  +!&+3?BFU\dlvyxskjpnt{ƒ…€ƒ”–˜—˜–”“‘‘’’•–™ž žž¡¥Ÿ™•˜Ÿ¤¦¨¨¥¡žœš™”ˆ†ˆŠ‹Ž‰€„ˆˆˆˆŠ‡ƒ{uwtleaaa^ekmrqoie_a_WNIIJGB?<:50-106:<988664:DCCAABDECJMGEHGJMSYabb°²¶·µ±°±¯¬«©¬¯±±µ·ºº¹¸ºº»¹µ±±²²±²¶·µ¶··¶¶µ¶µ´³·¸·µµµ³±±²³´µ´¶µµ·»ÀÁÀ¼¸¼¾¾¿ÀÀÀÁÂÅÇÄÄÆÆÆÄÃÿÂÄÈÎÐÍÈÄÇÏÓÕ×ÔÔÐÏÌÉÅÄÇÊÎËÇÈÍÔ×ÛÛÙ×ÛÚÖÔÕÔÔÕÓÕÔÔÓÑÑÕØÝßÜÙÔÑÐÐÐÐÕÚ×ÕÑÑÒÓÕÖ×ØØÔÐÔÓÔÎËÊÒÓÑÐÏÎÕÚÛÙØØÖÍÌÊÏÔÚßääàÛÖÒÍÎÎÍÏÙÞßßÙÖØÙÙ×Ô××ÕÞåäåà×ÏŽ¾ÀÅÈÉËÌËÊÈÈÈÎÎËÎÍÏÓ××ÕÒÎÍÈÃÄÄÉÍÒÑÎÇÈÑÕØÚ×ÖÔÔØÜÝÞÜÝÝÚÚÛÜÝÝÝÞáãáßÝßßâßÝÝÜÞàßÜÛÛÜáãßàßÝßááßÙÑÌÌÍÌÍÏËǾ¶­¨ –”›¤µ¿¾µ«¨ ’yM%  %+029GNTaioqojfjot{…‡†„ˆ‘“’‘Ž’’‘“’–šœœœŸŸ£¥£›’”˜Ÿ¢¡œš™™š™”‘Žˆ…„†‡‰‡ƒƒ…‡ˆ‡„ztrtoha_\^agmmpqj`[WWTNF?DE>;41/,*.32;A<740224?<@CDMSOOOMNQVY^^[­­±¶´³¯³²°®¬¯³²³´³´µ´³¶¸¹¶¶²±°®­°³´µµ·¶´···³°®²¶¶µµ´³³²µ¶µ·¹¸¸¸º½ÁÂÁ¾¹¼¾½¼¾»¾¾¿¾ÀÆÉÉÉÈÆÅÁÁ¿ÁÅËËËÈÇÉÍÓÖ××ÒÏÏÎÊÅÄÄÊÒÐÌÍÎÕÝßÝÙÚÙÛÖÔ××ÚØØØÚÚÖÕÑÒ×ÖØØÔÎÊËÌÏÔÚÛØÔÔÓÑÔÖÓÓÕÔÕÔÖ×ÑÊÅÈÍÒÎÌÌÎÓÚÛÙØÔÕÏÉÇÈÐØÞâãáÛØÔÑÒÕÑÕÛßßÞÛÓÓÔ×ÕÒÐÒÓÛàßÞÜÓÌÆ¿¾ÃÈÈÌÏÎÎËÅÄÉÌÐÏÏÏÏÔÕÕÓÎÇÉÈÇÄÈÌÐÓÑÐËÏÖÛÛÛÛØ××ØÛÝÝßßÜÝÝÜßßÝÞßßãääßáâàáààáæåäàÜÙàâäáààÛÚÞäãàØÑÊÊÉÌÎÍÊľµ­¦ —™œ¡³Â¹¯¬¦ž‹qE +   #"&4:FPY^aba_eiqz…†……ˆŒŠ‡†‡‡ˆ‰•™œ—™œœœ™‰†‰”–‘”•–’‹Šƒ€ƒ„……ƒƒ€„‡†…ztrlkomd`YX_bdfgjjcZSOJGA;79:4/,+'$$,35:?92,+-14;BA=<>=?BIU\]ZZWZY\^\XX©§¯´¶¶³³´±±¯°µ´²±±±°°°²µ·¸·´¯®­®¯±µ³µ··µ··¶µ³¯±´´²³±²°³·¸¶º¼½¼½¾À¾¸¼À½ºº¹¹¹¹»ÀÅÉËËÇÈÅÁÀ½¾ÁÇÆÅÆÅÇËÒ××ÕÓÏÎËÈÆÄÆËÓÒÐÍÎÔÛÜÛÚØÙÙÖÕØÝÛÚÙÝàáßÛÕÖÕÕÕÖÓÎÌËÌÑ×ÛÝÙ×××ÕÖÖÓÐÓØÕØÙ×ÓËÆÈÐÒÑÍËÎÑÔÖÔÓÔÔÎÆÀÆÍ×ÝâââÝØÑÒÖØ×ÛÝßßÛ×ÑÐÒÖÕÐÍÎÏÖÝÝÜÖÑÍÊÃÁÇÌÏÓÔÓÑÌÈÇÍÒÓÒÐÏÐÒÐÎÌÉÄÉËÌËÍÑÕÖÔÏÍÑØÙÜÜÝÜÜÛÚÛÜÜÞßÞÞßÞÜßÞßÞàãééåãâßáââçèèçãÞÜßããßßÞØÕÞåêåÚÒÍÉÈÉÏÍÊž´©¡œ–œ››¬¾Á»µ¬¥¡˜‡f<  '0:BKONNOU[bjrz}€„†Šˆ‚}}|€†’——“’“‘Š„€}…ˆˆƒ‡‰‰Š‹…€|{|}€€|yx{€€|spogagc][XX]a_^]`]WRQNGB=62//*%&)(!#+434<81./2438AEDGFDFHQ[\`b`]`aded^\¦¦­³¹··µ´³³³²´³±°¯°°¯®°²¶¹¸µ°¬¯²²´´¶¶·¶¶¸¸¹¹´°±°±¯±°¯¯³¹º·»À¿ÁÂÂÇÅÆÂÀº¾À¾¼¹·¶··º¾ÃÇÈÈÆÄÃÂÀ½½¾ÃÂÂÄÁÅÏ×××ÖÑÎÌËÉÉÇËÍÒÕÓÎÏÔÚØÙÖÕÖÕÐÒ×ÛÛÙÙàâäåàÚÖÖÖÕÖÕÓÑÐÒÔÚàßÛÛÛÚÙ×ØÔÏÒÖÖÛÝÛÔÌÈÊÑÓÑËÆÇÍËÌÍÍÐÒÍþÅÌØàâààÛÕÐÓÛÝÜÝÞÞÛ×ÒÏÏÑÖÔÍÉÉÌÕÛÛÚ×ÐÑÍÉÆËÑ×Ø××ÓÏÏÑÓØ×ÔÑÐÑÑÏÊÈÅÄÊÐÓÒÒ×ÛÛ×ÐÏÒÔÚÛÝÞáàßÜÞÜÛÜÝÛßßáßàÞÞßßçëêèåáááâäæææåååâàããÞÞÙÕÑÚäëèÜÔÎÈÅÌÐÎÇÄÀ´¥œ™œŸ š¡¶¿¾³«¦¡—}b9 + &,5;@A?AGS\ahoqvux|~{}~}xrlimw‡‹ˆ‡…€}yxttwy|zz~€~}xvtuuyx|~yrnhmorspoqnh`_]ZWVWYXWSRTRMOOLF?93.,*'"(,/-)1723588668646=ELPONPSX\\_ddacejmlje¥¨±·º»·¶¶¶¶²°±¶´³²°®­«­¯´¸¶µ³²³·¸··¸¹¹¸¹¸»¼¼¸³±²´±²±¯¯µ¾À»¾ÀÃÅÇÆÆÇÆÆÁ¼¿Á¿½¼¹¶¶´¸½ÄÃÄÆÄÁÂÃÁ½»¼ÁÂÃÃÁÈÒÚÛØÔÓÎÌËËÌÎÉËÑÕÔÒÐÔ×ÚÙØØÕÑÍÐÖ×ÚÚÝßæäãáÝ×ÙÕ×Ö×××ÖÖÙÝÝÞÜÛÞÝÝßÜ×ÑÏÓÖÙÝÝÔÌÅËÏÔÎÄ»¹½ÂÃÃÇÍÐÍÇÀÃËÔÞàÝÜÖÎÍÔÞâÞÝÜÜØ×ÑÔÖÖØ×ÊÅÇËÔÞßÛØÓÒÓÎÍÏÕÙÙÚÙØÖØ×ÜÝÛ×ÔÓÐÑÏÈÅÇÃÉÑÕÕØÜáãâÚÔÖØÙÚÝßââáÞÞÝØÚÚÙÝâßàáÞßßàáäèâáâãäãäæåãçéèæâãáÞÚ×ÒÏØáééáØÒÌÇÎÒÌÇÃÀ´¤™ž¦­« š¬¹¸°ª£Ÿ›œ“|^- $-0047@IPUZ`deijnsyxw{}{uohcdnw|‚…ƒ}usvusvsouvuutststwsqttuuvw{tmb]^agjjlorjb^]WXWVURNNKLMIILI>95/**)%%)/59<<<;47:<;;<98DKSY\Z\dfkhgghgeikkmqql©©¬³¸¹·¶¶¶´´±µ¶·µ¯©§©ª«ª©«­±³´¶¶¶¶¶µ·¹º¸¶·¹ºº»º¼¼»·³²²·¾Á¿¿¿¾ÁÅÆÄÃÁ¿¾¼ÂÅÆ¿½½»¼ÅÆÇļº¾ÀÀÄÂÃÅÈÌÎÐÑÏÒÙÜÙÕÏÍËÍÌÊÊÊÇÉÌÑÑÏÑÔÕÔÖ×ÑÏÑÐÐÐÒÖØÜÝÝÚÜÙÖÔÒÑÓÖÕÖÖÖÖØØ×ÕÓÔÔÛØ×ÙÖÑÓÒÒÔÔÔÏÇÆÈÌÌÌÇ»µ¯°¸»ÂÊÔÙ×ÒËÊÍÒÏÉÂÀÃÆÔÚÜÜ×ÖÒÑÕÖÞáÞßÜÏÁÀÇÓÛáßÜÙ×ÔÒÑÔ××ØÛÛÛÝÜÛÙÙÛÛØÕÓÒÒÍÍÎÎÒÙÜÜÚßâáâáßÛ××××ØÜáâàÜÛÛÛÚÚßßÝÞÞÜÜÞÙØÙÒÌÊÏ×ÝãçèçèèæçæãàÞØ×ÖÔÕÔØÞßÚÓÏÏÎÑÒÐÊÆø¤•Ÿ³¹¹²ª¯·½·²© ››ž›ŠgA %,036=GPXZVY_bhpsrpljgipv~„ƒ~ytpmkpuz|xzxwvokmmllihkrtqnrrrnjdjosuqhb\UQTUSQNMLKKG>:=A>8<;60.()*&*,.4>?=9768889:>>CJTY`a^bgijmhhgfgjkkmqrn««­±µ¸·µ¶´µ²´²±µµ¯¨¨«¬ª¦¥¦¨¬²µ´¸¸µ·¶¶ºº¸µµ¶º½¾¾¿ÀÁ½»¸¶¹¾ÂÂÂÃÁÄÅÄÁ½º¸¸¿ÃÇÈÇÄ¿¿¿ÂÃÅÀ»´´¸»ÀÅÇÌÐÔÖÖ×ÕÔÖÙÕÔÏÉÊÌËÊËÈÉÆÇÊÍÐÑÑÕÔÑÐÎËÎÏÒÔÑÑÔÖ×ØÙÚÙÙÓÑÑÏÏÑÑÔÕÒÓÖÖÑÒÐÎÎÐÏÌÏÑÓÓÔÕÔÒÔÑËÊÇÈÉËÍÇÂÃÃÀÂÉÐÕ×ØÓËÇÉÊÈÃÀÀÃËÔÛÝÚØÖÑÔÔÛßàÞßÞÔżÃÓÞàáâÞØÕÑÑÕÙÚÛÜÝÞÝØ×ÕÕØØÙÔÑÖÖÕÒÓÓÕÚÝÚÚÚÞââàÝÔÒÒÔÏÏÔÛÝÞÙÖØÝÞÜÞÞÜÛÜÜÝÜÜÜÜÓÅÂÇÎÖÞæéììëêèçâßÚÕÒÕÕÔÔÕÖÚ×ÕÓÏÏÒÒÍÉļ³¥š ­¹·µ®®¶¼¼¸±¤šŸš™†`9   #$+5@KNNQRRX_dfgedegghloqpijhhhhnronmikjfgkjlkfikllkgfikjeejlolhc^YVNOQNLJGFCG=4499658:31-,+//2689<>939;9:79?ACEMRY_cfhjhggihklosspnprm±®®±µ¶´´µ´µ´²®¬±³®ª©¬¬¦ž¡¦ª±µ¸»»ºº¹¶¸»¸²´µ·¾ÁÂÁÂÃÃÁ¿¼½ÁÃÃÅÂÄÅĽ¹´²µ»ÂÉÌÌÈÅÃÁÀÁ¿¸±¬¯µ¸½ÁÈÎØÚÚÚØ×ÖÕÕÑÏÇÅÇËËÊËÍËÈÈÊÏÑÑÑÕÓÏÎÐËÍÐÑÔÓÓÑÓÏÒÖØÚ×ÓÍÐÎÍÉËÏÓÏÑÔÔÒÑÍÉÇÆÄÂÉÑ××ÖÕÖÔÔÒÍËÉÆÆÈËÉËÏÑÌÍÑÕÖÔÔÑÈÁÂÃÄÃÂÂÅÊÔÛÝÙ×ÕÖÖÛáâßàãáØ˽ÁÏÞáääâÞØÒÕÖØÚÜÝßßßÙÖÒÐÒÕØÔÔØÚÜØÖÓÕÚÚÖÖ×ÚàâàÙÐÊÌÎÇÃÉÕÝÚÖÓ×ÜÞÝÞÝÜÚÛÛÝÝÞàÜÓȾ½ÂÇÔÝæìðñìéæâÝÙÖÓÓÓÖÖÒÖØ×ÔÔÐÐÒÑÏʼ´ª¢¥®¹º¹´²¶»¿»´ª¡¢£ œ˜…a8! '18>GHENRTY\XYaa]]\\^^]Z]`b^adcbc^^^`cghgighhgea^ZX`babbca][ZWXXPKHIECA@??91-33236:656./5:=AA=AB96<<=<<=@CGINQYbfioojffjlmqtxxqnoni¶³²´·µ´³²²²²°«§¬¯©§ª¬«§  ¦ª­³¶º¾¿¾¾½¸ºº·³³µ¹¾ÅÅÃÂÅÅÄÄÄÀÆÄÄÃÂÅÄÄÀ¼¸¶µµ»ÄÉÍÍÌÇÄÂÀÀ»´±­°¶º½ÂÇÎÕÚØÙÖÖÕÔÒÐÌÈÅÄÊÊËÏÓÒÍËÍÐÏÐÐÓÑÏÐÍÌÌÎÑÓÓÒÏÏÏÐÐÔ×ÔÐÍÑÏÊÇÈÐÕÓÕØÙØÓÒÌÊÈÉÇÎÕÚØØ××ÕÓÔÐÍÌÉÆÈÈÊÎÔÕÐÑÔÚÙ×ÔÑȼ½¿ÄÄÅÆÉÒÙÚÕÒÕØÙÞàßßÞßàÚÌÂÃÏÞàãããàØÔÕ×ÙÚÛÞâãäàÛÕÏÎÓ××ØÜÝÛÙ×ÓÒ×ÙÖÕÔØÚâßÚÐÊÈýºÀÑÞÞÙÖØÝßßÝßÝÝÞÝÝÝßàÞ×ÍÁ¸²´ÇÕÝæïðíéæãâßÚÚ×ÕÙØÖÕÕÖÕÔÐÑÑÎÎ˺´­¥¥­¹¾º¶´¶À¾¹­¤¥¥¡ ž˜…_8#'+345>EHLMKMSSRTTUUWSQUZYUYY[^]Z[]^abfedegbb]YTSPV]_\]\WROQQPRME@@>:99994/+24439<;;:67@ACGFBEGA>>?CGGGJMNRSSXadhmogfjlmprvwtpmmle¹±¯±³³²³²°°°­©¦¦§¦§«­¬­¬«®²²¶¹º¼¾¿¾»µ¸¸µ´µµ¸ÁÈÈÇÇÊÊÆÆÅÄÃÄÃÄÃÄÅǼ¼¼ºº»ÁÈÉÉÇÄÁÀ½»¸´±²´»ÀÀ¼ÁÅËÓÔÔÕÔÒÓÐÌÉÇÃÃÆÉÎÐÕÕÑËÌÌÌÏÍÏÍÌÐÓÎÍÍÍÐÒÎÉÈËËÎÏÒÒÏÍÏËÈÇÌÓÚÚØÜÝÜÛ×ÑÍËÍÍÔÙÙÛÖÖÓÒÒÐÑÑÏÏÉËËÉÍÕØÓÒ×ÙÚÜÙÔΞ»¾ÆÈÉÊËÒØÖÑÐÓÕÙ×ÕÖØÙÛÜ×ÐÇÅÑÝßÞáãßÜ×ÔÖÛÝßâäççäà×ÐÎÒÙÛÛÛßÚØÖÒÕÕØÖÓÔÕÛÞàÜÖÐǽ·¶ÁÓÞáÝÛÞßàßàáãâáàááßßàÛÓ̶²ÃÐØàéíìäæâàààÚÚÙÚÙÔÔÓÑÓÔÒÑÑÍÉÆ¿·¯©¢¡¨µÀ½¸¶¹¿ÆĹ°¦¥¤¢¡¦ž“yH + !)15:?ADGFINPTSRPNQVWQPPRTVVVY\]aaaabd^YVTSQNRUVUVSNHHC@DC>9457864442-,2323:><<=<;CGHMLGJPJ@>BINNLPQOORMU_cfijheilhlsvtrqppjb¸±°°¶³µ´´²±­«©¤¦§¦¨«®®®°²µ¶¶¸¸·»½»º·²·¸µ´´´¸ÀÆÈÆÇËÊÊÈÅÄÃÄÄÃÄÆÈÈļ»¼»»¼ÀÄÅÆ¿¿¿¼»ºµ³¶ºÀÿ½¾ÁÌÐÓÕÓÑÒÎÊÇÅÄÅÉËÊÌÓÒÏÍÍÍÌÏÍÎÎÍÏÓÑÐÍÍÎÍÈÂÂÆÆÇÉÍÐÐÎÌÈÄÅÊÔÚÙØÛÜÜÛÙÔÓÒÔÖ×ÙÜÚ×ÕÒÒÑÑÏÎÏÎÎÎÍÌÏÔ×ÓÓØÜÝÞÜ×ÎÇÁ¾ÄÎÑÑÎÎÒÔÓÎÍÒÖÔÕÓÑÓÖØ×ÑÊÈÅÐÚÚØÛÝßÝØÙÛáâääãçèáßÕÏÍÒÚÜÞÜÜÚØÔÓÓÕÖÔ×Õ×ÚàááÜÓ˽¾ÆÖáãâáßãáàÞáàßÝàáâàßßÞÝ×ÐÇÂÉÒÚÝçëëææâàßÝÛÚÚÙ×ÔÒÐÎÎÎÍÏÏÊĽµ®ª ™¢´À½º¹ºÀÇÅÀ¶¬§¤¢Ÿ£¢œ‡^$  $',067=CEHHLLJJNTPMJLMNQSTVXZ[ZWZ\XQLIIICDGFFJIC=;:6863/-1434555/(+.27:>@AAAABFIOTSPTUNDAGOUURSROQRLQ\fghjillnlortstuutpk¸²®¯³·¸·µ²±ª§¨¦§©©«®®°¯³¸»»¼¼º¸¼¾¹·¶µ¸··¶··»ÁÆÈÆÆÊÌÍÊÆÄÄÃÂÃÅÅÆÆûº»»»¼½¿À¿½½¾¾½½¼¸¸¼ÀÃÃÁÀ¿»»ÇÎÑÒÏÏÎËÄÁÄÆÇËÍÍÌÐÐÍÊÌÌËÌÌÌÎÎÑÒÒÐÎÌÍËƾ¾ÃÅÄÇÍÐÑÏÊÄÁÀÇÑÖØÙØØÙÛÛ×Ö×ÜÜÝÝÝÛÛÖÔÑÑÑÌÈÊÉÌÎÐÐÒ××ÑÕ×ÛÛÜÛÕÐÉÅÄÉÓØØÓÍÌÍÌÊÌÑÖÖÔÑÎÑÓÑÐËÈÄÈÑØ×ÕÔÔØÚØÜßäèæãâààÝÔÎÉÆÍ×ÛÜÛÙ××ÕÔÓÒÒÓÒÒÕÛàåäàÚÑÇÄÆÍÙââáßáãâÞÝÚÖÒÔ×ßãáàßÞßÝÚÖÐÕÙÛâæìêåæãáÜÚÙØÚ×ÔÕÔÐÌÇÃÅÈÆÄÀ¿ºµ°­£•˜®¾¾¿½½ÃÅź²¬¦£ ž ¢™vB +     %)./6>A@?EHGDCGKKJIJMPQNHBHMFA<<;:65622750,+0220/*'.1/05:4*'&-38@@AINOMLNUXXZ]VMGLZhppmmiilkaYafjhfgjmrrpsutxyxxts¶°©©®µº¹¹·µ±«ª©©¬®­®¯®±·¼¿ÀÀ¿º¹½¼·¶¼ÁÅÅÂÁÂÂÅÈÍÏÎËËËÊÉÈÅÆÉÈÉÈÅÄÄÁ¾¾¾¾¿»º¼»¹»½ÀÁÀÀ¿½¾ÁÃÂÂÿÁÆËÌÊÉÊËÆÂÂÅÆÈÉÌÑÓÓÐÌÊÉÇÇÈÊÌÏÏÐÒÓÕØÕÑÍËÇÇÉÉËÊÎÕÒÐÇ»¼ºÂÊÑÑÏÎÉËËÏÔÕÖ×ÖÒÔÕÕÔÒÐÐÎÊÆÂÅËËÍÑÔ×Ö×ÕÕÔÑÒÖØØÕÏÈÂÅÎÒÕÒÌÇÉÈÈÊËÎÏÍÈÉÎÔÕÓÏÒØÜÞßÜØÒÎÒÛßãèëëëæÜØ×ÔÊÁ»ºÁÊÏÓÐÍÊÌÑÓÔÓÑÏÌÐÓÜàåãáÞØÒÎÐÓ×ÙÕÐÍÐØÜÛÖÐËÄÁÅÑÜàãáâàÞÞáààáãêîíëçâÝÛ×ÔÒÔÒÒÐÏÏÏÉÁÂÀ¿½½ÀÀ¾¼»µ©–‘ ¶¿ÅÅÄÆÇÇÅü¶°©¢¤¨®®Ÿ}R3 +       ! #"$!!%-2457329;65:=987=?=@ADEDKPOIJOW\[Z]UKFIZksxurnouvmeilnlgcikpqqqpprstvrp·²°«°µ·ºº¸µ²®ª««¬¯°¬¬¬±±¸½»¾¾¼»½»¹·¾ÇÍÌÉÇÈÈÌÍÐÍÍÉÇÈÆÇÇÆÈÈÉÇÄÀ¾¾¿¾¿¿¿¼¼½¼»¸º½ÀÁÁÃÿ½ÁÃÅÅÃÇÇÆÈÈÉÈÇÆÅÅÁÁÂÅÄÄÇÊÏÒÐÎÌËÌÌÌÎÎÎÑÒÒÔ×ÛÛÛ×ÓÑÌËËËÌÉÍÔÑÏŹ¶ºÀÊÎÎÉÄÂÅÄËÒÒÒÑÐÍÑÏÐÐÎÎÎÍËÈÆËÏÐÌÑÓÖÕÔÖÓÒÏÓÖØÙ×ÑÊÁ¾ÈÐÕÕÍËÏÍÌÌËÉÉÉÅÄÎÕØ×ÔØÞãáßÜÚÓÎ×ÝâæêëêëåÜÔÓÑËÁ½¹¾ÆÊÏÎÊÈÈÎÔÕÕÑÎÍÐÕÜßààÜÜÜ×ÖÔØÛ×ÑÌÅÅÏ×ÕÏÌÉÄÀÀÊÕÜàßááÞÝääàßáçêêçæáÜØÖÓÒÓÒÑÎÎÎÍÈÅÂÃÁÀÃÇÆ¿»¶©”Ž™­¹ÃÅÂÆÆÅÇÇÀº´¬¦¤¨¯±¥‘lH)    +       " "$&,2257:;BA=@CDCDJQTUTPLKLJLWafkonmmie]YY`fkouuuzƒ‰‹†……„|uz€~ytlffhkkgh½½»¶³²µºº¹µ°¨©©¨ª®­­«ªª­²³²°²³¸¹»¼ÀÄÊÏÑÏÐÐÐÎÌÍÉÄÿ¿ÄÄÇÆÆÇÅÁ½¹»¼º¹º¼»¸¹»¹µ±´¼ÇËÍÌÇÄÁÅÉÉÄÁÅÈÊÊÈÂÀÁ½¼¼º¼½¼ÀÅÇÊÌÎÍÍÑ×ÙÛÚØØØÓÐÔÖÔÓÎÑÕØÛÚ×ÓÒÐÌÉÉÆÁÀ··»ÁÄÆÇ¿ÂÇÇÆǾÁÈÇÌÏÎÏÏÓ××ÖÕÔÓÖØÔÕÔÑÑÒÑÏÑÒÓÔÎËÎÏÎËÈÄËÖÚÙÖÖÔÏÌʼ½ÁÊÎÍÌÎÒâéçâãâß×ÖÕÔÑÔ××××ÖÔÏÌÌÈÅÈÉÊÍÏÕÔÓÔÓÓÒÑÎÇÀ¾ÅÏÕØÙÚÛÝáâáÞÜÙÔÑÐÑÏÑØÖÕÐÉÀÁÄĹ°®²¿ÓÝãåãáÚÙÚÜØÛÞÝØÕÔÑÒÒÒÐÍËÊËÉÈÉÉÈÅÅÅÁ½»º´­›‡‚Ž˜©»ÂÁ¿ÀÀÀ¿¹°«©ª¦ž’†}tQ-  +   +  + !##&"##&&&%&$$+21286326;?A@BJJECCIPQUOLMMQZcnuwzzzwplhfhllnosutu~ˆŒŒ‹‰‹‡€‚†ƒ€}yslfehgbfÁ¿¾¹µ´µº»¹´¬¦¤©¨§¬¬ª¬ª¬¬²²²®±´¹º¼¾ÀÀÄÉÍÍÍÎÎÌÍÉÇÅÁ¾ÂÅÈÉÈÉÈÇÁÀ»¿Â¾¹¼¼¹·µµµ±±ºÃÌÐÓÍÉÇÅÊÌÊÅÂÁÄÈÊƾÀ¾»½½½»»¾ÁÅËÍÐÍÎÐÖÙÝÝÛÙÖÔÒÓÕÒÍÉÈÎÓÖØØÖÒÐÊÇÈÅÂÀ¹¹ÀÃÄÅÄÀÁÁÆÉÊÉÅ¿»º¾ÂÈÊÊÌÏÒØÔÓÑÑÒÕÔÕÖÔÓÒÎÌÏÒÐÓÍÆÉÏÍÍËÉÈÐÓÔÕ×ÔÐÊƾ¶¿ÅÎÖØÒÔÝäêëæåãàÚÔÏÌÉÊÏÍËÏÔÖÔÏÊÌÏÎÎÏÑÚÞÝÛ××ÑÌËÎÇÁÂÇÏÔÕÙÜÝàäæãàÝÚÖÔÒÒÏÔÖÕÑÎÁ¼ÀÇÅƾ³µ¹ÈÙÞäåàßÛÜÜÛÚÜÝØÔÒÓÔÕÒÏÎÊÉÈÉÈÊÊÄÅÃľ»º¸±¡’Œ“ ´¼»»µ¶´º¾¾·°«««¨’‹|bC$ +   #&%%%#!$% #$'))(*,138=>>9;?EEDFHHDAC@=?DGKLLNKFA@GKQW]]`jtx|‚…‹‰…|xxuqmmr{†ƒ~ˆ‘•––“Œ‰ˆ…‚}{ytld_XPU¿½½¹¹·¸½¿¼·«¥§§¨¨ª©¬­¬­²·¸·²³·»»½¾Á»¹¹ºº»¼ÀÃÄÄÄÃÂÂÂÄÈÎÎËƽ½¾Á¿¼»¼º·´²±²¶¾ÉÎÎÑÐÍÊÉËÎÊÅÁÁÀÂÁ¿»»»»¹ºº¸µ´¸»ÂÌÐÏÌËÈËÐÔÔÕÖÓÐÌÏÎÌÌÍÍÍÊÉËÐÖÕÏÌËÈÈǽ¾ÀÃÂÄÂÃÆËÑÔÕÔÐÉ¿¶²»ÃÃÁÁÃÊÑÓÒÑÒ×ÕÖÕÖÔÏÌÊÍÑÕÓÐÍËÐÑÑÐÎǼ½Ä½ÃËÌÆÀº·ÃÏÛáâäáãæêëéçåàÜÖÏÇÃÈÍÎÐÏÑÖ×ÐËËÎÌËÌÓÝâàßßÝÓÍÎÏÍËÉËÐÒÔÕØáçèéåâÞÙ×ÓÔÖÖ××ÖÑËÇÄÇÊÌÏÊÈÄÁÈÕÙÝÝãåâââßÜßÛ×ÓÒÔÒÐÎËÇÄÅÄÇÉÉÉÉÆÆŽ¹¶³°ª‰š®·¹¶±¦§²¶¶¯«ª«¨Ÿš™–’…rV4   !&**,++-././015:95;@A?DECBIKNSX\ZWVLGKNS`jklquxz‰Œ“‘‰„}zxtplnu„Žˆ…‰Œ’˜˜—“’Ž‡††…€ywxqe^SIQ½½»º»¹¹ºº»¶°©©««««©©««¯±²³´²¶¼»¼º¼¼¼¹¹¹¶·º»¿ÁÅÇÇÇÄÇÇÌÎÐÎÉÃÀÂÂÄÄÁÀ¿¼¸³±´µ¸·ÁËÏÓÔÓÒÎÊËÊÉÅÂÀÂÁÁÀ¼º»º¸·¸³°´¸¼ÅÍÎÏËÉÆÊÌÐÑÓÕÑÐÍÍÍÉÉÊÊÍÍËÏ×ÚÝ×ÓÏÍÌÊÇÁÃÄÃÅÅÅÉËÏÔÚ×ÖÔÏļº½Á¼·¸¸ÂÌÒÕØÛÚÚÚ×ÖÑȽºÁÌÒÓÒÑÏÑÒÓÒÌŸ·Ã¾½ÃÈÄþÅÌÓÚÞàßãäçêìçåâÞÝÚÕÎËÑÖ×ÕÒÏÔÔÑÎÌËÍÌÐÙßáßßÞÛÔÏÏÒÏËÎÐÔ××ÚáçêêéæãÞÙÚÖÖØÙÛÜÚ×ÑÍÌÎÎÍÎÊÈÊËÒÖÙÕÙßãâåæçåäâÜÖÒÑÏËÊÇÉÇÆÉÉÉÊËÌÉɼ´²²­¬¤”‹‹“›¬¼¾¼µ¦Ÿ¢ª²¶¯®®­¨¡ž›—€hF'   &')''*,.15799:=?DB@?BBAFLKNTVW\aaa`_VNQPZkxwwyw|ƒŠ––’Šƒ|{yrjlqzŠ–”ˆ„ˆ”––Œ‰ˆŒ‰‚€{ywmbTJQ¾¾»¹¸¸¶¶¸¸¶³¯­­­­¬©©¨¨ª««®³´¸¿¾¼¼¼¾¾»¼ºº¸»»½ÃÈÊËÆÃÆËÏÒÓÑÍÈÅÅÅÅÅÄÂÀ»µ°®¶»¼¼ÃÌÑÕ×ØÕÏÈÈÅÅ¿ÀÁÁÀ½¹·µµ´´²¯­°´ºÁÊÏÏËÈÄÇÉÍÎÐÒÐÎËÌÌÇÆÊËÍÍÏÑÚààÛ×ÑÍÎÊÄÀÄÆÄÆÊÍÏÐÑÖØÙÙÖÒËÁ¼¼ºµ®«­¶ÅÍÕÚÛÞÛÜÜÖПµ¾ËÒÑÒÑÑÑÑÑÐʲ³Àþ½ÄÈÇÈÌÒ×ÚÝÛÞàååæéåâßÝßÞÛ×ÕÚßÜØÑËÍÒÏÎÏÎÌÏÕÚáâàßÜ×ÓÎÑÓÑÍÒÕØÚÜàæëìêçåãßÛÚÙØÚÚÜÞÜØÕÓÕÔÒÍÌÇÉÎÓÖØÖÑÕÜâåêîíêéäß×ÓÑÏÊÉÈÊÌÍÍÍËËËÊÉž±®­­­®«›‹‰—¬½Á¾¶«¢¤§±¶±¯¬ª¦ ›œ™™“‡v[=!  ! &)+((%*,-37:>@FEDHGCADCFLPQSXZ\agggfg[PPU`sƒ€€ƒ‡†Š•—”ˆ~|vqszŽ•“‡„…‹’˜–“ŒŠŒ‹‹‡}{zwqfUKR»º¸·´³´¶·¸¹¹³²±±±¬ª¨£¡¥££§®´¸ÁÁ¿ººº¼º»¾¿¿¿¾ÀÄËÎËÆÄÇÍÓÕØÕÏÌÉÈÅÅÅÆÄ¿º·²±¸¼¿ÀÆÎÒÕÚÙÛÔÍÆ¿¾½¾¿¾½¸µ²°±²°®®­¬°µ¼ÆÌÏÎÈÂÄÊËÎÍÒÐÍÌÌËÉÊÌÌËÏÒÖÜàâÜØÒÍÌÉýÁÂÃÇÍÓÑÑÒÖØÛÛ×ÒËÆÁÀ»²§¥¦­½ÌÕ×ÙÛÝÞÞÚÖÎÄÃÈÐÑÑÑÒÓÓÓÑÎÈÀ¶³ÀÈÆ¿ÀÆÌÎÑÕÖÚÝÛÚÝÞáãæéäãßàáâßÚÛÞäßÙÑÊËÏÑÓÔÑÏÏÕÚßãáàÜ×ÑÍÑÑÑÏÓØÚÛÝãèììçãáßÜÙÚÛÚÙÚÝÞÛ×Ö×ÛÛÕÏÊÈÌÓØÚÚÙÓÏÕÝåêîíéçâÝÙÔÕÔÑÎÍÍÏÑÐÐÏÌËÈÆ·­«««¬®¬žŠ‚†‘§ºÂÀ¶¬§§¨±·´¯®ª¤žœ˜˜›–‹~qV6 %)+*')*+.05:=?BKIHLIHFGHNRUTUXZ]dikjhfZNRXet€„ˆ‹Š‰Šˆ‹Ž“‘‡~‚~{|ƒ‰Ž’ˆ…„‚ˆ•˜˜‘ŠŒŠŒˆ€{|xqgYLS¶µ±®¬¬°¶º»½¿¼¹¸´´¯ª¦¢£¡ ž¢¬±·ÀÄÁÀ·¸¸µ»ÁÃÃÄÂÂÇÌÍÊÇÁÇÐÕ××ÖÑÎÊÊÆÅÆÆ¿¼»¹º½ÀÂÅÊÏÒ×ÛÜÜÕÐÄ»¹¹»»½»ºµ²´µ¶±²°°²¯³¶¾ÂËÑÐÍÆÇÊÎÎÏÑÑÒÍÍÎÌÌÏÎÐÓÙÜÝâßàÚÓËÌÊÄÀÂÀ¾ÂÌÓÕÔÓ×ÚÞÞÛÑÎÊÇŸ«§¢¦¹ËÕØ×ÚÜÝÝßÜÛÖÕ×ÙÖÔÕÖ×ÙÕÓÑÊž·¾ÉÅÁÄÌÑÕØÛÛÝÛÝ×ØÞÜßããååããäãÝÛÛàâàÚÓÍÊÌÐØÙÖÓÑÑÕÚàäâÜÔÏËÑÓÏÍÒØÚÜàåéíêäÞÜÛÙ×ÜÜÜÛÜÞÝÛÕØÜàáÜÒÆÈÒÙÞàáÜÕÍÎØáçèåááàÛ×ÖÙØ×ÕÓÑÓÒÔÔÓÐÌÍÇ¿µ®¬¬­­°¯ ‹„¨ºÂÁ¶°©ª©°¸¸´­§¥ ™˜™›™†{nP-!!"&*+-'(-00159BDDHNNMNNMMOQTYYX[_`bgmlhecUKS^fsz‡ŽŽŒ‹ˆŠ‰‰ˆƒ~|€„…†…ˆŠŒ†}~‡Ž˜—“ŒŒŒŠ†ƒƒ}qe\QW´¯«©©¨®µ»¼¿ÁÁ¿º··°©¤¤¦¤Ÿœ¨®¶¾ÂÄÀº··´½ÃÅÄÄÁÃÇËÉÅÁ¿ÇÎÕØØÓÒÍÌÊÅÃÆÄÁÀ¿¾¿½ÀÂÄÅÌÐÒÕÚÛÛ×ÑÉ»·º½¾½¹¸³°¶ºº¹µ³´¶³µ·½ÅÌÓÕÐËÊÎÐÑÏÐÓÔÑÐÑÐÐÒÑÓ×ÜÜÝßÞÝÜÓËËÏÈÃÄ¿¹¼ÆÐÕÓÓ×ÛÞÞØÏËÊËÊŸ®ª£¦¸ÉÔÖÔÕÙÜÞÝÜÛÛ×ÚÚ×ÖÖÙÚØÖÔÐÎɹ»Á¿¾ÅÌÔ×ÜÝÞÝÛÙÕÖÙÙÚÜÜàáåâäàÛ××ÜâÝÙÖÑÍËÏÖÜÚ×ÔÑÕ×ÞâáÜÖÍÌÑÓÎÊÎÔ×ÛâèêêéãÝØÛÙ×ÙÜÜØÚÜÝÛØÙàããÞÒÇÆÓáããåÞÓÈÆÏÝäßÛØÚÚØÓÑÔÖÖÓÑÑÒÔÓÓÔÓÏÎÆÁ»±­­®®°®¢‘…Œ™«¼À¼·®©©¨¯·ºµ®©¥Ÿ›•—š˜Ž†~taC' !! "" "$ %)--.*&%/2227?FKKLSRQQTVXZYY[Y\ahghikif`ZQJSahotwŠŽŒˆƒƒ~||€‡ˆ‰ˆˆ„ˆ‰…€~yvyz†‘“Ž‹Œ‰ˆ†pbYU^³­ª©¨ª®·»¼ÁÀÁÀº·´¯ª¦¥¥¥Ÿœž¦¯´¸¿ÃÀ¼·¶¹¼ÃÅÅÂÁÃÇÉÄÀººÃËÓÕÖÔÒÍÍÉÃÂÁÁÁÀÀ¿¿½ÀÃÆÉÌÐÐÓØÙÙÔÐÊÁ¼¿Â½¹¶²­·»½¼¹³³³²±³»ÄËÔÖÔÐÎÎÒÐÑÑÕÖÖÔÑÑÒÔÓ×ÚÝÝÞÜÛÙØÔÎÊÊÇÅÇÁº¹ÃÌÐÑÔÖ×ÙÕËÿ¿ÅÅÁµ®©¥§µÈÓÒÑÕÙÞáàÞÜÚÖØÙÙÙÚÝÛ×ÔÒÓÒÌż·¾¾ÁÇÏÔØÛàßÝÛÙÕ×ØØÖÔÖÚßâãáÞÖÑ×ÝÞÙÙØÔÏÊÎÖÜÝØÕÑÔÙÞßÜÚÕÎÏÓÓÏÌÌÐÒÖßåçæäàÚÙØ×ÙÙÙØØØÚÝÙÛàßäãáÚÎÍÙäååâÝÓþÌØÚÚÔÑÕÚÕÏÇÉÍËËËÍÐÒÑÒÓÒÑÎƼµ®«¬¬®®¤—–¥²¹¼¸´«§¦¥®¶¼¸¯©¦ š–—œš†tgR;!$& "##%&! $&,/1.-+(+5:879?JMJORPQU[^dda_^\bhlmmhgd`ZSMJScmrtzŠŽˆƒ‚ywz€ˆ‘‘ŒŒŒŠ‡„yust|†‹ŽŽŒ‰†ƒyj[SXc²«¬§©©­¶»»º½¾¼ºµ³­§¥¦¨¦¢Ÿ¡©¯²´¹½¿º»º¹¼ÁÅÃÂÂÃÈÉýº»ÀÇÏÔÔÒÒÒÎËſþÀÀÀ¾½¾ÂÇÊËÏÑÏÒÔÕÓÐËÌÇÁÄž¹¶²°´»º¸²­«¯¯­°·ÃÌÔØØÒÒÑÑÔÒÒÕÛØÕÖÑÖØÙÙÜÛÚÜÙØÚÙ×ÎÉÉÆÇÆú¸¿ÉÌÒÔÒÐÎÇ»¯¬²¶¼»±ªª§¦²ÅÒÖÒÖÞâææãáßÛÙÝÝÝàÝÜØÔÕÖÔÍÈ¿ÄÇÈÐÔÖØÚÜàÝ×ÖÔÒÕÓÔÓÒ×ÜâàÞÙÔÕØÛÞÛÔÕÕÏÈÌÓÝÛÚÓÑÙÞàÝÚÕÐÐÍÒÒÍÌÍÌÍÐÖÜÞÝÚÙÕÔÓÔÕ×Ö×ÖÙÞÜÝÜÝàáãåâÛÙÞæçàßØÌÁ¿ÉÔÙ×ÒÔØÚÖÎÅÄÆÄÆÇÌÏÐÓÓÓÓÎËÆÁÀ»²«­¬¬®¦—Ž˜¨´¹¸¹µ°¦¥£¨²·¶±ª¨¡™—˜œ”‹ƒzoaK1 $'" %$"! !  "!!&$$)+15522.18=@??>DMOMNNNUX\bijieeihjonifb^[USQR\nw}~ˆ‹ŽŒŒ‰†‚|y}„Ž•—––•’ŒŠ†yupv€…Š‘‘Š†€|paXYZd°©¨§©¦ª±µ¶··¼¿½º¸³­¨¨«¬©©ª­³´²µ¹»½»½¼½ÀÂÃÂÁÄÆÈÄ¿¼º¿ÅÌÐÑÑÑÑÑÎÉÂÁ½ÀÁ¿¾¼ÀÂÈËÎÎÏÎÑÒÒÐÊÊÌÈÅÆÇÄ¿»¹¸´·¹·²­§©®±°²¹ÂÍÓØÙØ×ÕÓÒÕÓ×ÛÙÖÖÖ×ØÚÛÚÛÚÚÙØÚÛÖËÇÈÆÆÉļº¿ÊÎÒÕÒÍƾ®££¬¶¹µ±­­ª¨³ÇÒ×Ó×ÞåééçåâÝÛÜààÞÝÙ×ÓÔØÔÍÈÄÅÉÌÎÑÔÙ×ØÙÚ×ÒÑÌÐÑÓÓÕÐÔØÜÛÖÓÐÖÛÝÞÛ×ÖÔÎÇÉÏÜÝØÓÔÞääàØÕÑÎÏÐÐËÉÌÎÌÐÒÕÔÔ××ÕÑÑÓÖ××ÕÖÙàáßßâÝÝÝããâßâäãÝÙÒËÄÈÐÙÛØÔÖÚÛ×ÑËÈÇÆÄÆËÎÌÍÐÑÐÐÐÊÇľ°­¬­®« “‰”¦´¶¹¼½¹°¨¤¥©°°­©¨¡š”˜žŸ›–Ž‚{r_B%"$(%# "#&+*('$"$#%&$"###"%$"'+1661227BBFEBDJPQSVVVYYZcghgglooopnlhaZXVV[`jz‚ƒ„‰”•““’Œˆ…„„Œ–šœœ›–”“‘‘‘Œˆxy€‡“’’“‰xpg`]cce³­­«ª¦¨­°±²³¹¿ÃÁ½¸²¬¬­¯¬®°°´³²²´·º¼¿ÀÁÃÄÅÃÀÂÃÄÄÁ½º½ÁÈËÎÎÐÑÔÏËÄ¿¼¿ÀÁÀ¿¿ÃÇËÎÌÌÍÎÏÏÌÊÇÊÊÈÇÆƾ½º¶¶¶µ®®«­²¸µ³ºÃËÑÕÛÜÚÛÖÔÔÓØÙØ×Ö××ÚÜÜÙÚÚØØ×ÚÚÓÊÅÇÇÈÊÈÀ¼ÀÈÏÒÖÏÇ¿µ©¢¡®¹¼¶±²²°°·ÂÏÔÒÖßçéççæâÞÚÝãâàÝÙ×ÒÓÔÑËÄÅÊÌÏÑÐÓ×ÚØØ×ÑÌÆÅÌÑÔÕÔÓÓ×ØÕËÄÈÑÚÞßÝÙÖÕÐÃÄÍÕÖØÒÖáèçáÜ×ÒÏÑÑÎËÈÊÏÏÑÐÓÒÖØÙØÕÔÕÖÕÖÖÔÖÝäâæãÞÝÞãäããåäßÙÒÌÇÄËÕÙÚØ×Ô××ÔÐÎÎÌÆÃÄËÍÊËÍËÎÑÒÐÌÌ¿¶°°²°«¡“‰™©°²¸¿Ã¾»²«¨§««ª¨¨¡š—–œ¢˜‡~zpZ1!!##$$!"%'%$#!"(-+))&%$"#&(($!$#!""#).8<8477;GJJJIKMQSW\``^`^cgjhjnprsqspkd^[Z][bqz~ƒ…†Œ•™›™š˜“’“–›¡¡ž˜“”˜œœ˜“Œ…‡ˆ“––”““€sf_\^chj´³³²°­®²²´±±µºÁľº²°­­¯¯°³²±¯®°³¹¿ÁÂÇÅÅÄÆÃÀ¿ÀÁÁ»¼¼¼ÁÅÈÇÈÉËÌÉÄÀ¼¾ÂÁÃÄÅÅÉÊÊÍÈÈÉÌÌËÈÈÆÆÄÃÄÄ»º»¸¶µ±¯¯°²µ·¸¹¾ÁÈÍÓ×ÛÞÝÙÖÕÕÙÛ×ÔÖÖØÚÞÝÝÙ××ÖÖ×ÖÒÉÆÆÊËÊǼ¾ÄÌÏÑÐÊ»³®±¼Âĺ±±·¶¶¹¾ÈÒÓÙãéçäßßÝÙÛÞäãâÝÛÙÔÐÐË¿ÀÃÇÍÐÑÏÑ×ÙÙÙÓËÈÉËÔÖÕÙ×××Ò˸´¹ËØÝÝÙ×ØØÕÐÌÏÓÔÑÐÒÞæåàÝÚÙÔÕÖÑÌÈËËÏÓÓÖÙÚÜßÛØ×ØÙÛØØÖÕÞâææåàÞàáããáâáÙÓÎÈÂÄÈÌÕÖ×ÔÐÔÒÓÓÑÏÏĽÃÌÌÌËËÉÌÌÐÒÐÎÈ¿¹··´ªŸ••¥®±®µºÁÂÀº³°®¬«©§¨¡œš—›ž™“†|xjG#$((('#" #&*$##%%(-+(+)())'%%)'"$($&&&-4?HJHNLMRUV\dhehggkmnprsuwwvtrogbacjmoy„†•™™›››—””“‘“•šž¤£ž•“› Ÿ ›“‘’““—–“”•“†vk\VW]bn±±²³°¬®²´´²°°¸¾ÂÃÀ½¸°­®ª¬°²µ³±¯±´ºÁÃÂÄÄÄÆÅÅÀ¼¹¿Á¼»½¼Áþ»ÁÄÀ¾¾ÀÂÃÅÈÇÆÇÉÈÆÄÂÅÊÌÈÈÇÃÁÀÁÂÂÁ»¸»·´´°®­³µ³¶º¼½ÁÄÈËÍÐÓÕÔÕØÙÜÛ×ÑÏÐÔ×ÜÜÛÙÖÖ××ÖÔÎÇÃÃÈÊËȽ¾ÄÉÍÐÐÌÈÄÁ½½ÀÆļ³°¶»¹µ¹ÅÐÖßåêæÝÛÜÙØÙàæâáÞÛØÓÒÍÆ¿»¹ºÁÉÎÊÈÊÏÕÙÛÖÐÍÌÍÏÔÕÖØ×ÖÎÀ«Ÿ®ÊÖÜÞÚØÞãàÝØÑÐÐÍËÔÜáâÜÝÜÛÙ×××ÒËËÍÑÓÖÚÞÞßßÚ×ÙÙÚÜÛÛÔÓÛâæææáÞáââááâßÖÑÊÆÂÁÀÃÍÒÒÐÏÔÓÔÕÔÓÑÇÀÅÍÐÐÍÍÊÈÈÉÎÎÍÌÆ¿ººµ©›™Ÿ­··´·»¿¿¾¹¶³²¬©¤¨¨¢ž™›™•‹‡€|qW: (&'&"!#%()" $&(+,+)(*-0-+,,./.110/-)0=BA>;?BDJEJPPPUZ]bhhkjkmmqsux{|{{zvrmfbciu…‡ˆ“””˜——˜š™›—”‘Œ”—š› £œ‘Œ“™žž–“——–••“’“–’ˆymaXUZ_n¯²²±­­°±±²²®®³¹¾Âÿ»°««¨«²¶¶²±¯°µ¼ÅÅÂÁÄÃÇÈÊžº¿½¼¾º½ÂÄÅź¶¹½¾»¾ÁÁÄÇÈÈÆÆÇÅÃÁÁÁÇÆÉÉÇÄÁÃÂÀÁ»µ³³²²°¯®±´·µ·ºº»ÁÃÆÉÊÊÏÐÑÓØØØÖÓÌÉËÑÖÚÜÚÖÕ×Ø×ÕÒÌÄÀ¾ÂÈËËÇÃÁÃÅÇÈÈÈÅÅÆÁ¿ÀÁ½¹²°³º¼»¼ÇÒÚáçêæÝÛÝÛÙÛáäâßÚÖÓÏÌÊÅ¿»¸¸¹ÂÇĽ½ÄËÕØÙÕÒÏÏÌÊÏÒØÙÖÏÁ¬¦·Í×ÞÞÜàäééäàØÓÐÌÊÑÚÛÜÝÜÜÝÛÙ××ÖÓÑÑÓÕØÛàáßÞÛ×ÙÝáâáÜÖÏÏÖÜáßàãááááââÝÕÏÉÇÄ»µ·ÂÌÌÍÐÒÕÕÔÕÕÔËÈÍÒÏÑÏÌÉÆÆÈÇÊÉÉÇþ¼¹­£¢²º¼¸·»»»º¶´µ²­¨£¥¨£¢™˜—Œ‹†ƒ€€wdI+!%"&&$ #'*' $()(+,-.2545313259998417@ADCBGFHKMQXZ]`behhklijknsvwz{}‚zwqlgacp€‡Œ”˜——˜˜˜š™˜–˜•Žˆ‹‘“•›Ÿœ•’–›œžž›š Ÿ›™–’“’“Žvlb\Z[bo°±°­¬­«®¯°°­¬®´¹½Âļ²¬¬ª®³·³¯­¬¬±ºÄÆÄÃÂÄÉËÍȼ¾Á½¼¼¹¾ÅÈÇƾ¹½¿ÀÂÀÁÂÀÄÆÇÆÇÆÄÄÃÂÅÇÉÉÉÈÄÃÀÃÀ¾¸´®°®®®°°³¸·¹ººº½ÀÃÉËÍÌÎÐÐÕÕÔÒÎËÈÇÉÍ×ÜÛÛÙ×ÖÔÒÏÎÈÀ¼»¿ÆÊÍÉÆÄÁ¾Â¿¿»½ÄÆÃÀ¾¸´±¬¦­³»¿ÂÈÔßäèçãàÝáÝØÛßáâÝØÒÎÈÅÉÆ»¸³¶½ÂÁ¹±±ÂÏÙÙØÖÔÏÈÅÆÑÖÚÛÒÀ±°¿ÑÙÝÝáåèéêçäÞÙÖÓÌÐÕØÛßãäâÝØ×ØÛÛØØØÙÖÛáßàÝØÙÜàåèäßÖÍÆÄÌÒÙÚßßáâáàáÙÑÊÉǼµ±¾ÇËËÎÏÑÐÒØØÖÓÎÒÒÒÎÍÉÂÂÅÄÇÆÅÉÉÅĽ¹²©¢¤±¼¼·³·¶·¶²´·¸²«¨§¨¤žžœ›˜’‹‰ƒ€„‚|s\@&"$%"'('&&%! $&#!#&+--/3699886568<><>:6;>DILPPRMPQWZ`eikkjijmoorwwy}z{„wrmjffkw†“•˜œš››š›š››œ›—”’‘‹ŒŽ‘˜šššœ¡Ÿ¡ž››Ÿ¡œ—–“‘”Žƒvof^]^fr¯±±¯®­®¯±±°®©¬­³º¾Á»²®®®¯²°®§¦¨ª¯·ÁÃÁÁÃÄÉÌÍÉļ¼À¾½º¶¼ÅÊËÉÁ½½¿ÄÃÀÁÁÀÃÃÅÄÇÅÂÃÃÄÅÈÉÈÈÅÁ¾¼¼¼»º·²³±°°±²µ·º»»¼¹»½ÁÇÌÍÎÐÎÏÔÔÏÌÌÈÃÁÅËÖÛÚØÖÔÒÎËÈÈ»¹¸¼ÂÇÈÆÃÃÀ¼»¹·´¸ÁÄÄ¿´¬©¥¡ªµ»¿ÄÊØáåäãÞÛßàÞÙÚÛÝÜÚÖÏËÅÄÆÊǹ¶¶½Ãü³³ÃÑÙÚÚÙÕÎÉÃÈÒØÜÜÓ¿²²¾ËÐÕÚßãååãáßÝÙØÔÐÏÓØÞãèçãßÖÓÙÝÝÛÜÚÚÖÚÝÞÞÛ×ÚÜàäåáÜÚÌÀ¹¿ÅÍ×ÚÛàäãâáÜÓÍËÉÄÀº¹ÃÌÏÎÍÏÌÌÐÕØÖÓÒÔÕÒÌÌÆ¿½ÄÇÇÅÅÈËÊÆ¿¹³ª£¤®¸¼¸³²²³²°¶ºº¶±¬©ª¤Ÿž™’†‚ƒ…€{lU4"'''))&$)'%$$%$##"#&+/2116897777668;;9@>8;@FMSY\[YXZY[bgjkkkkkrwvz{{y{}z~‚|rllkilpx‰–›Ÿ£ Ÿ›œœ›ž Ÿ›š”“‹’‘“–š™š›ž¤£¢Ÿœ˜™œ™–•’“““ƒ|wmighjv°°²°±°°²±²±¯©©«®³º»¹´±³²°­ª¢Ÿ£ª®µ½ÁÀÀÁÃÈÉÉÉÅÀ½¿Á¿¹¹¾ÅËÍÊÄÀ¾ÁÅÁÁÁÁÂÁÁÃÄÄÁ½»ÁÄÇÈÉÈÇĽ¸¶·½¿¾¾¼¸¶³³µ¶·¹½¿¿¿½½½½ÅÉËÍÍÌÍÒÑÌÊÈÆÀ½¾ÅÒ×ÖÕÓÐÊÆÀ¾½ºµ²·¸ÀÆÅÄÀÀ¿¼¹µ²°±½ÂÅÃ÷ª¤¥©±»ÁÁÂÆÔàçÞØÓÓÙßßÛÜÛØØÖÓÐÌÆÅÉÍÎËÁ»¹ÁÄÃÁÀÄÍØÞßÛØÕÑËÉÎÓÚÛÙÒ²²¼ÃÇÌÕÚàßßÛÛÜÙ×ÕÓÎÍÑÕÜãææãÛÒÔØÚÚÛÞÞÚÖÙÛÞÝÝØÜÜàßßÛÜØо°°¶ÄÍÔ×ÞäåâßÜØÑÎÍÇÇÃÃÇÐÒÑÑÍËÌÔØÛÖÐÐÒÔÑÎÊƾ¾ÆËÉÅÃÆËËÆÀ¸µ­§¡ªµ¹·´³°¯¬®·¹¹·´°®©¥žž›•Œ‡„„ƒ„€~saC+!"''%((# &-,)('&(++(*.5335998769:88:<:?BB<@DJLW_ccddbaceehhiihkqz{{}{z}|}€wmjnooqrv„“›¤¥¥Ÿ ž ¢£¢œ˜’Ž’•–˜˜›œ››ž¡¤¤ œŸ›™–•‘“‘Žˆƒzvspqx²±³²²±²³³²²°­«¬­²·»ºº¹·¶¯©£›™›£©³¹¿ÁÁÀÁÀÄÇÇÈÇÃÃÃþÄÉÌÍÌÇÃÃÄÅÆÃÁÃÂÀ¿ÀÀÀ»´´¼ÂÇÇÆÇÄÄÀ»¸¹½ÃÄÄÁ¾¹¶µ¸º»½ÁÄÂÂÂÁÀÁÄÆÉËÍÎÑÓÑÊÉÈþÀÁÅÍÒÐÍÊÈĽ¶µ´³³µ·¼ÁÆÅÁÀÀÁ¾¶²®¨¬·ÁÆÉÉÀ±©­²¼ÄÄÄ¿ÃÑÞãÞÏÃÃÍÖÞßàÞÙØÖÕÕÖÏÑÓÔÑÒÌÁÁÃÆÉÎÏÒØÞßÜÜÙ×ÔÑÏÓÖ×Ö×ÑÀ¹¸¼ÀÄÊÓÚÞàÛÚØÔÓÒÐÑÐÍÏÓÚâäâàÝÖ×ÛÜÜßááÛ×Ô×ØØÚÙÝààßÛÙÛÚÔÅ°«°»ÇËÑÚßßÝÛØÕÔÑÍÌÉÈÇÌÑÓÔÏÍÎÒØáÞ×ÏÍÓ×ÕÏÌÉÄÄËÏÍÊÂÄÆÊÅÁ¼¼·­¥¤°µ¹´±®¨¦«²¹¸¶·´±®¨ žœ››“Œˆ‡…ˆ„‚xkX>+&*'%$#%./++-,/342.3640698;87=>;;>@ADKGBDHMRYcjkkkiillkjiffflovz€ƒ‚}wqou{zxyv€‘š¢¥¤¤ ž  ¡¥¦¥¡œ—’˜ž ¢£¢¦¥¥ ž¢¥¨¤¢¢¥¤£Ÿœ˜”’Š‡††ƒ€~}|±±±±²¯²µµ³´´±°±±´º¿¾¾½º·²¨žœ™ž¥®·¼ÃÆÅÁÁ¾ÁÅÇÈÉÉÊËÊÇÈÌÌÍÎÎËÆÄÄÄÄÄÃÃÃÁÀ½ÀÀ½¹±¯¸ÀÃÄÄÅÆÅÄ¿½½ÀÆÄÅÃÀ¼··¸·¹¼ÀÁÁÁÀÂÃÄÆÉÉÊÌÑÔÖÒÍÊÉÄÄÂÂÅÇËÊÇþ»¸´±³·¹¿ÂÅÅÅÁ½¼¿À¼³¬©©¬µÂËÐÏÄ´«°¸ÅÉÊžÃÑÞãÞϺµ¾ÊÖÞßÜÙØÕÕÚÛßÝÛ×ÕÔÑËÊÌÍÑÖØÙÛÝÝÙØÙÖÓÓÏÏÑÐÏÓÍÆÁÁÃÉÉÌÕÛÞàÜØÕÑÊËÏÐÑÐÓÔØÝáàßÞÚÜÛÜßâæäÜÒÏÑÐÑÔØÝâáßÛÖÙÛ×Í¿¶¶½ÂÅÇÎÖÕÔÑÒÏÑÑÏÍÌÊÌÏÒÒÎËÌÐÚæçáÙÏÌÒØÖÒÏÍÉÉÍÐÑÌÆÂÅÅž¿Á¾µ¬¤ª²µ²±¬¦£§¯¸»»¸·µ²ª¥Ÿœœš“‹ŒŠŠ‹‡‚€zuhV>)(-&%$!#*-,**/04:933781-0789::>??=AFHHMHADNSVaioomlllopnnlhijilrxˆ‰ˆˆ‡„€|xvxƒ„ƒ‚}€’Ÿ¡¢¢¡žŸ  ¡¤£¤¢ Ÿœ™Ÿ¦©©««¬¯«¦¡¡¥§¦£¤©©¨¤ —‘‘Œ‰ˆ‡ˆ…ƒ‚²´²³³²²··µ¸·¶µ´´³¶¼½¾½·µ°¤ œ¡§¯·¾ÄÅÄÄÀ¾ÀÅÅÆÇÊÊÌËËÏÔÒÏÌËÉÅÄÁÂÁÂÀÿ½¾À¿»³¶¼ÀÃÂÃÃÅÆÇÄÁÁÂÄÅÆÅÄÁ»¸¶¶¶¹¼¾¾¿¿ÁÅÃÅÆÈÊÏÑ×ÖÔÎÎÊÈÇÅÄÆÅÇÅÀ¼º¸µµ´·»ÀÅÈÉÇÆ¿¹»½½»­¥§¦­·ÃÎÔÏò¨°ÀËÐÐÉÅËÖâåÞÓÁ³·ÄÐÝáÜÖÕÏÒÙàååß×ØÖÖÕÖÔÖÙÝßßÞÞÜ×ØÖÖÓÐÏÏÎÌÎÏÎÈÈÇÊËÍÑØÛÛÚØÕÑÍÇÃÌÏÒÓÓÓÚÞÜÝÝÜÞÝßÞßâæãÛÔÑÎÌÏÓ×ÜãàÞÙÖÖ×ÖÑÉÄ¿ÂÄÃÃÈÍÍÎÏÌÌÏÒÓÏÍÍÏÑÒÐÇÊÏÙäíëæÚÐÎÓÖÖÔÏÎÍÊËÎÒÎƾº¾Â¼°¨§ª¯³²¬¦žŸ¬º¿¿¿¼¸·®¨¡žŸš–ŒŽ‰…{|ufJ-#,+))*),/-)+024;:4896/.48:;;>??BACGLOPHDKTZ^ckqmkmjlopmljgimlmpwˆŒŒ„{xx}„‰Š‹‰‡Œ–œŸŸŸ Ÿž¡¢£¤£¤¤¢£¢¢¢¦­²³¯¬°®­§¡ ¤££¡¨««ª¥¢Ÿš••Š†‚ƒ‚„}}~°³´³µ²¶¸º·º»¹¸·´µ³´··µ²±­¨¡ž¤ª²¹¿ÃÈÇÅÅÀÃÇÅÆÈÈÊÊËÊÏÐÑÍÈÆÅÄÁÀ¿¿ÁÄÅÇÆÂÀÂÁ¿¾¾ÂÃÆÅÃÅÆÈÊÆÆÆÆÈÌÈÈÈÅ¿½º·µ³·»½¿¾ÂÅÅÄÅÇÉÍÓ××ÓÏËÎÌÊÊÈÅÄÆÃÀ½·ºº·¸º¾ÄÉÊÇÆÂÁ¼¼»º´ª¥§ª¯¼ÈÍÍ̾­¥«¹ÌÒÓÏËÏÙáãàØÌÂÁËÙáäàÙÐÈÍØáåãàÙ×Ø×ÖÖÙ×ÚÝßßßÞÞÛ×ÕÑÒÑÏÏÏÌÍÒÑÍËËËÎÎÓÙÛ××ÓÔÓÐÊËÎÏÑÏÒÔ×ÜÙ×ÖÜÝâßÜÚßàÜØÔÔÔÏÒÙßßàâÜÚØÙØ×ÕÓÏÌËÈÉÇÈËÐÑÑÑÏÎÎÎÎÎÍÏÔÑÍÉÈÒßçêêãßØÔÔÕ×ÒÑÑÒÐËÐÓÏÄ¿¾»°ª²»¿½´«£¢©°±¬¥›™¤·ÂÃÁ¾»¸²ª£¢ ž˜“‹Œ‹†ƒ}{|sV5+('+-/.-.++0556<;88;957=?AA<;=?DEFIPVUQOU\acdffgijjjpqolkeeikoqx€…Œ•”…zy~ƒ‹•œŸŸœž  £§§§¤£¢¡¢¥¥§ª³¸¹¶¬¬­­§ žŸ¡Ÿ£¨¬©«¥¡Ÿœ–˜“ŒŠ†„…}||~±²±³³±²µ¹¹»¾¾¾¾½»º´°°¯°±±«¤œœ §³¼ÃÆÇÇÅÆÂÅÈÈÇÉÉÉÈÉÊËÎÍÈÄÆÆÅÃÀ¿¾ÀÀÃÅÄÄÃÄÄÀÂÁÁÃÄÅÆÄÅÆÆÇÅÈÈËÌÌËÈÈÆÿ¼¸µ¯®¸½À½ÁÅÅÃÄÃÆÌÒÓÓÑÌÊÌÌÊÉÅÅÅÆÆý¸¸¹·¸¼ÂÇÌËÇÀ¾º·µ´¯«¦¥¬±»ÆÊÌÊÄ»« §¶ÆÑÒÌÌÐØÞàÞÛÑÇÇÒÝåèæÞξÇ×ÝááÛÖÕ×ÖÕÖ×Ö×ÙÚÝÝÜÜÙØÔÑÒÓÑÑÒÑÒÓÒÎÍÌÎÍÎÓÙÚ×ÕÐÎÒÒÏÏÑÒÎÌËÌÏÓÐËÍÕÝààÛ××××ÕÓÖÕÔØâèæãáßÝÝÝÛØØÖÕÑÎÌÍÍÍÐÒÔÔÑÍÇÅÇËËÍÑÔÒÑÎÔÜßâäâÞÝÛ××ÖÖÓÑÔÕÕÑÐÔͼ¹¶«¤ª¼Á¿·¦››¢¬°ª ™—›±ÀÄ¿¿½»¶®©¦¢œ˜“‹ˆŒŽ‰{xywe>)%&&)**-,-/25688;9<>:8=BCCEA==@CGGMSVXUV[`ddc_aagkkosttsoiffhkpw~„Œ“•’„z|ƒ‰“˜˜™››¡¤£¡Ÿœ ¥ª©¨¦£¡Ÿž£¥§¬µ¼½»±«««¨¡œ ŸŸ¡§ªª§£ŸŸ™˜’ŽŽŒˆ‚€ƒ³²¯°±¯¯´¹»¾Â¿¿Á¾½º²®­¯¯¯§ œ˜¤±ºÃÈÈÇÇÆÆÇÉÉËÊÈÇÆÆÃÅÇÅÅÃÆÅÅÿ¿½¼½ÁÁÁÄÆÄÄÃÁÀÁÂÃÄÆÆÄÅÅÂÃÆÊÏÑÐËËÇÇÂÁ¼¸±¬©±¼¾½ÁÄÁÂÄÂÂÇËÐÐÎÊÇÊÌÉÆÂÄÉËÌÈ¿¹¹¹¶¶¼ÄÇÌʼº¶³®¨£¡ ¥¯¼ÇÎÏÌÉù®¢¤µÆÎÐÎÏÔÕÜÝÜ×ÎÄÈÒÝäèæÞÐÃÉÖÛÞßÛÖÖ××ØÔÕ×ÖÕÙØÙ×ÕÕÕÑÍËÎÏÒÓÑÓÔÔÐÏÎÎÌÊÏÓÖÒÍÈÉÌÑÎÎÐÏÊÈÉÇÈÉÆÆÊÑÛâàÚØÖÖ×ÖÕÕÖ×ÜåèèãÞÞÝÞÝÛÚ×ÕÔÓÍÍÑÖÖÖ×ÙÔÌ·¶½ÅÇÊÏÕÕÓÔÛÞÝÝÛÙ×ÖÕÔÖÖÔÑÓØÚÙÕÔÔÌü¼¹¯«³¿ÅôŸ“™§ª¥ž——¯»¾½¼¹··±¬§¡š—‰†Œ‹ˆƒ{vxsiN2((.++(,-/11488:::?A??DJKILID@BINNMOQVSU\_ce`accjnmotuuutronqtty}‚Š‘’Ž‚{}…‹“šž¢¥ ¤¦ª©¨¤œœ ¤§ª«¨¨¨£ ¤§¨«²ºÁÀº³®­«¦ž ŸŸ ¦ª©©¤ ž š•“’’––“‹…Œ²°¬©­¯¯³¸¿ÂÃÁ»ººº»º´®¬­±¬§¦¡œŸ¥®¹ÂÇÉÃÉÊÉÊÊÊÉÉÇÅÃÀ¿¿ÁÂÂÃÆÇÂÂÁÁ¿¾½ÀÃÁÄÆÈÆÃÄÁÃÅÅÇÇÅÅÃÁÃÆÌÔÒÒÐÌÉÉÅÁýµ´©¥¯º½ÀÀÁÃÀÂÃÃÆÌÏÏÏÊÇÊÊÇÆÅÆÈÌÊÊû¸¹··¼ÁÅÇÅÿ¾¼·²§ œ¢§¶ÆÏÔÓÑÍÈÀ¶®³½ÉÑÒÑÔÖÚÙÜÛ×ÑÇÉÔßæìêä×ÌÐÕÙÙØÚÖÕØØ×ÕÔÓÓÒÓÖÕÑÐÐÎÌÆÃÄÊÎÑÐÒÓÒÐÏÍÎÎÉÌÒÏÍÈÂÃÉÎÐÑÏÏÌÇÉÉÆÁÁÄËÒÜááÞÚÝÛÙÙ×ÕØ×ÛàãßÝØÖØÙÙÛÚÙØÖÒÏÌÐ×ÚÙÚØÔdzª¬µÁÅÇÌÐÒÑÕØÛÛØÔÓÔÐÍÎÐÑÎÎÓÖÙÚ×ÖÖÏÉÂÁ»¶°¶ÁÈ°Ž’™£¥¡œŸ¡¨³¹¹º¹µ³µ²¯«¥žšŠ†ŠŒˆuvwp\D1-//+&+1367:?@>?AEFHLUYTQROJGHPVQMPPU[[^bebb_^aistsxyw{}}}{‚ƒ‚„…ŒŽŽ‹‡z}†–ž¢§¤££¨¬­®«¥¢¤¦¦ª©ª«ª©¨ª®­®®µÁÉÁ½¹·´©¢ žšž¢§©©¤¢¤¡œ–“˜˜–“Ž‘’±¯©ª­­¯³¸¿ÃÇÁ»¹µ¹»»·³°²±±¯¯®«ª­µ½ÃÈÈÆÈÉÉÊÉÉÊÈÈÅÄÄÃÃÃÄÃÁÆÇÅÄÇÇÅ¿ÀÀ¿ÃÇÇÆÄÁÀÃÆÈÉÇÁ¿¾ÀÁÇÑ××ÔÍÉÈÇÄÅÃÀ»·¯¬±¼À½½Â¿ÁÄÃÂÆÈÌÎÌÉÊËÈÆÉÈÈÊÊÊÇÁºº¹µ³¶»¿ÀÀ¼¼À¿½´ª¤£©°¿ÍÕ×Ù×ÕÒÍÆÃÇÊÏÔÖÕ×ØÕÖÚÛØÔÍÑÙâêïïêÝÒÔÙ×ÕÕÖÔ×ØØÕÐÍÍÍÎÒÔÒÐÎÏÌÇÿ¾ÅËÍÎÏÏÏÏÍÍÎÌËÎÌÍÍÈÂÃÇËÎÏÎÏËÇÈÉÆÅÀÅËÔÙÝßÞÞáÞÛÙÖÖÔÕØÚÞÙÖÔÔÖÙÝÝÜÚÙÖÓÍËÎØÚÚÙÙÒ󞡶ÁÂÄÈÎÐÒÓÔÖÖÒÍÌÌÎÌÈÊÆÂÄÊÍÏÏÏÑÒÎÉÅÀ¾¼·¸½Æóž’’™››šœ¢ª®´¸¸¸¸µ°°²´¯©£—‘‹‹ŠŒ‹€xtuvhQ=61.+(,27<=?CDB??BDGMY[UQSOKKMSSLHLRZbbaehec`[[cptw{}}€ƒ„‡‰Œˆ‡ˆˆ‡†„…€‚Š‘š ¥§¤¤§««¯¬¨§§¦¥¥©©«ª««­±±¯¬°ºÄÄÀ½¹µ¯¨ ž™™œ ¤¥£¡¤¤Ÿ–‹Œ‘““‘”­«¨ª«­¯±¶¸¾ÁÁ¼¸¸¶»»¶µ²´µ¶¸¶¶±¯´º¿ÃÇÈÈÇÆÇÈÈÈÉÇÆÅÅÇÈÇÆÆÂÃÆÈÉÌÎÐÉÇÃÀÀ¼ÁÅÆÄÿ¾ÁÅÈËÇ¿¹¹½¿ÆÓÛÙÓËÈÇÅÂÃÄÄÀ¿·´µ¼¾½ÀÀÁÂÃÂÀÃÈÇÈÉÉÉÉÇÉÊÌÍÉÉÇÄ¿¸³²®®±º½½¾¼¼ÀÃÁ¶«ª«´¹ÆÕÙÚÛÝÝÛÙ×ÓÕÔÔÕØÙÚÕÑÒ×ÚÜØÕÙÜåíïñìßÖØ×ÖÕ×ÕÔÖÖÙÕÌÆÈÊÌÒÔÓÑÎÍÊÅÀ½¾ÄÈÈÉÉÊÌËÍÐÐÎÌÊÊÊÊÈÈÆÆÈËËÌÌÊÇËÍÎËÅÅÌÒÕÛÞßäáÞÙ××ÖÕÖÖÙØÖÒÑÕ×ÛÞÝÞÜÚØÕÍÈÌÕÙØÕÔд©«¸ÂÁÁÈÌÏÐÒÔÔÓÏÊÃÅËÏËÇÁº½ÆËÿÆÌÌÌÌÅ¿¿¿¼»¿Èȼª—”—•‘˜¢­³¶·µµ´°­­®±±­¢ •ŽŒ‰Œyvvsl[J<7/**.28=>ACDEA?=>@GSVQOSNKOQURIGNU`ggegikkicaenrv{{~…ˆ‹Ž‘’–Š…ƒ†‡ŠŽ‘—ž ¤©¨§ª¬«ªª¨¤§§¦¦ªª¬­­¬°²´²«©²º¼ºº¹·¯«§¦š›¡£¤£¥£Ÿ—“Š‰‡Š’‘“«©ª¬°±²³³¶ºº¹¹¸··¹·µµ³³µ¹¼¼·²®²ºÁÂÂÃÁÁ¾½ÃÅÈÇÉÈÇÇÇÊÊÉÅÅÄÇËÈÌÏÎÍËÇÆÃÀ¿ÄÄÄÁ¿½ÀÄÇÉÈ»»½ÂÉÓÜÚÏÉÆľ¼À¿ÃÁ¿º¼¿¿¿ÁÂÀ¿ÃÁÁÅÄÆÆÇÊÉÊÈÊÎÐÊÊÅÃÁ»´²°«§ªµ¹¼¼»»½À¿¸°°¶½ÅÍÚÝÛÝÞÞßßÝÛØÖÕÔÖÚÙÕÎÑÙÞÞÞÝÞÞåëìîçàÛÚÙØ×ÙÚÙÙÛÚÓÉÁ¿ÃÊÐÖÔÓÒÍÇƽÁÆÈÇÊÉËÌÏÒÓÓÓÎÌÊËÍÍÊÉÉÇÇÈÊÍÍÍÑ×ÙÔËÆÇÌÎÔÝããâÝ××ÕÖÕÓÔÕÔÒÏÑÕÙÝâáßßÝÙ×ÎÈÉÔ×ØÔÒÒÌÄ¿ÂÈÈÂÇÌÍÑÑÑÐÓÐƾÂÈÏÑÍÊÁÆÊÉÁ¼ÁÈÊÌËû»¿¿¾ÂÈ˲ —••Œ“¡«´·¶µµ°¬ª©©­°©¥¡œ™–“‘Œˆ|ztnj`TE<30032469<@FEA@;9>ENRNLNLKNRTRNNV]chihlopttlmmtzxy~ƒ‡ŠŒ‘”™™•Ž‰………‰Œ•–›Ÿ ¡¦©ª©­­ª¨©¨ª««ª«­««¬¬ª®¯²±°©®²¯²´´²²®¬¨¢œœ›Ÿ£¥¥£ ››•‰ƒ†Œ‘‘ª¬­¯´´³±±³µ´±·¹ºº¹µ³´³´´¼Á¿¹±°´ÀÆÄÄÿ¹³µ»ÁÇÊÉËÊÉÈÌÇÇÅÅÅÈÊÉËÌÌËÈÇÆÆÃÂÄÇÆÃÁÀÁÂÄËÌÆÄÀ¿ÄÉÔÜ×ÌÃÁÀ¾º¸·¼ÁÅÂÀÀÀ¾¼½½¼½ÀÂÂÄÅÆÈÇÈÊÉÉÊÏÏʾ½¼·´³²­¡Ÿ«±¯¯°²¶¸¸¸³µ½ÈÎÓÜÜÝÚÚÚÝÝÞÜÛ×ÒÓÖÚØÔÍÐÚÝÞÞàÝÛßâååãÜØÛÙØÛÞßÝÛÜÚÒǽ¸¼ÄÏÖÖÖÒÎÊÉÄÂÄÊÍÍÏÐÍÎÏÑÓÕÖÖÑÐÐÐÌÉÅÈÅÅÇËÐÍÏÓØÜÖÊÄÂÂÃÌ×ÜßÝØÔÔÔÓÓÑÓÕÒÐÑÑÔÖÜßáááàÛÖÎÇÊÔ×ÙÔÒÓÔÔÑÐÌÌÊÆÅÊËÏÏÐÏÒÒÉÀÁÈÑÕØÔÍÎÎËÁº½ÃÄÆż¶¹Â¿½¿ÆÇÁ¶¦™—Š™¥­·¸¶¶±®­©¥ª«§¤ š˜›š•’|tmjf]OA511333378;?C=625;ALOLJKIJNRUTRT]cgjhkmlorurquy€€ƒ€€„ˆ‹ŽŽŽ“›Ÿœ˜‘Ž‰Š‹’™œž¡¤¤§¨§¨¬¬«ª«¯²µ²¯­­«©ª¨¦©­°²°®­¯¯³±´³²­©¥ŸœŸ£¤¤¡—–’Žˆ„„‡Œ‘’’¬°¯°²³²°°±¯®­µ¿¿À½¸´´³µ·¾ÃÀº´²½ÇÐÐÌÅÁ¹®°µ¹ÀÅÇËÉÈÆÈÅÃÅÃÃÅÅÇÉÈÉÆÇÈÈÅÅÈÉÉÇÃÂÁÄÁÆËÏËÆÃÂÆÊÔØÔÉ¿½½»¹·µ»ÁÅÃÂÀÁ¿¼½»º¼ÀÂÃÄÂÄÇÆÆÊËËÌÌËż¸»¹µ´²µ±¤ §ª¤¤¢¦§­´¸·¾ÇÎÔÙÞÜÛÜÙØÜÜÛÚÚÖÏÒÚÜÚÓÍÐÙÝÜÚÛÚØÖÚÞÝÛÕÒØÚÜÝáàÜÜÛÚÓÈ»²¹ÁÎÕÙ×ÒÎÍÍÍÇÉÐÔÔÕÑÐÍÍËÐÖÙÛØÖÖÓÌÄÃÂÁÃÆÌÍÏÎÐÕÖÓɽº¼ÆÑÖÙ×ÓÒÔÓÔÔÒÒÒÒÒÒÑÓÓÚÝààáàÝ×ÎÇÊÒ×ØÕÒÔÔØ×ÓÏËÈÃÃÅÈÊÍÏÐÓÑÐÉÅËÒÚÞÚÕÑÒɾ·¶·¶¹¼³¯¶À¿½º½»»´¨ ››•‹‹›ªµ¼»¸³±¯«¥§©§¤ ›š›Ÿ™’‘‚{rkljdYK8022325697:?83148@JONNLHLSWVSSW^einmikhjotssw~†‹‡…‚ƒˆŒŽŽŽ’š œ˜”‘‘—œ ¢§§ª¬¬¨§©«¨«®´¸¼·±±®¬¬®«§§©­±²°±²²±´³²®­¦¢Ÿ  ¢¢¤¦¥¡š“‰†ˆŠ”–—˜ª«¬®°±®®±®­¬®·ÂÆȽº¹º·ºÁÅÄÀ¸»ÃÏ×ÕÍÊü³®°µ¶»ÃÆÆÆÂÂÀÀÁÂÁÃÆÇÅÇÆÈÈÌÌËÊËÍÌÈÃÃÄÄÃÄÉÍËÉÇÂÅÈÍÑÍÅ¿¼½¿½¼ÀÀÃÅÄÀÂÀ¼½½¾½¿ÃÄÃÄÃÃÆÇÆÉÌËÌÊƾ¹¸ºº´±µ¹µ±««¨¦¢Ÿ  §³»ÁÆÏÕÚÜÜÝÚÛÙÚØÚÙÙÖÐÎÔÚßÚÔÎÑÙÜÙÖÖÓÏÏÔØÛÚÒÐ×ÜàâàáÞÚÛÚÓȵ¯¯¼ÊÕÖÔÓÐÐÒÑÐÑ×ÙØ×ÖÑÏÈÅÉÐÖÙÙÙ×ÓÍÇÀÁÀÅËÎÎÏÎÎÐÑÌŽ¼¾ÂÊÔÖÔÕÕÕÕÕÖÖÓÔÔÓÓÑÐÑÓØÝÝÝàáßÚÐÊËÓ×ÙØÕÔÔÖÕÐËÇÆÆÂÁ¿ÂÈÍÑÔÖÕÒÏÌÔÙÙÛ×ÔÒǸ±­¬«²¶¯«¶Â½¹´³´±© ž—‹†‰•§µº¼ºµ¯¯¬¤¥¥ª§£ž›¡“Ž‘ŽƒzqkkljbS>302336:<<<:;=:;?EJRTPQPSZ][[XZ^dlqrmjekmqsuw‚“’ˆ†‰‹Ž“”•—œ—–—–“•›¡£§ª¯±²±®©ª¨ª«±¶¾Àº¶³²¯³³±¬§©¬±´²µ·°°´´±®©¦¦¢¨­ª«©ª¨£œ–‘‰‹‘šœž¦§««­¯°³±±°¯°¸¿ÃÈŽ¼¼¼»»½ÁÁ¿¾»¿ËÓÏÈÃÀº¶²±±³·¼ÃÄÅÂÁ¿¿¿ÁÀÃÄÆÆÅÃÈÊÎÑÒÐÏÍÊÆÀÁÃÂÁÃÆÉÉËÇÆÇÉÊËÈþ¿ÂÂÁÂÄÄÈÉÆÃÄ¿»º½¿ÀÃÃÄÅÅÃÇÊÈÆÉÎÍËÊü¸¸¹¹³¯´¹º·±­¨©¨§©¬®µ¿ÆÎÕÙÜÜÛÙÚÙÛÛÛØ×ÚÔÍÉÍÔ×ÖÐÍÒÚÚÛØ×ÒËÊÏ×ÛÝÙÖÜàâåæãÞÝÛÙÓĪ ­½ÊÎÍÎÎÒÔÖØØÝÝÜÙÖÔÐÇÃÄÉÐÖ××ÖÕÑÉÄÂÃÉÎÎËÌÍÎÐÐËþÀÉÏØÜÜÛÚÛÚ×ÔÕ×ÔÒÓÑÐÎÏÏÑØÜÞÙÝÞÝÚÓÌÌÔØÜÛÙÖÒÕÕÑÍÉÈÈÇľÁÆÍÐÔÔÔÒÐÌÍÑÔÖÕÕÒÌ»¶²±´¶±°»ÆÆÀ¼µµ·³¬¢ž—‹„†˜ª¹½½º·±®ª©§§©¨¢›œŸž›”‘“‘‰|pgeikdXG<64446=?=86;BABFIMTVUSUZ]abb_]^elosqkkoqrqrw‡”™™•‘‘”˜›™š›—“’•”““™ ¤§¬°³µ²­ª¨§§ª®·Á¿¶²±³³³³¬¦¦¬±µ´¶·²¬±±±«©¨¨¨°´´¯¬ªª¦ š’“—•‘Œˆ‹™ž›¤¨ªª­®²·¶¶µ·¹º¾Àż¹¹¹¸·º¾¿¿½¹ºÀÆÅÃÁ¾º¶´³±²µ¹ÀÅÈÆÁÀÁ¿ÀÁÅÄÅ¿ÃÅÉÐÔÕÕÒÐÈÃÀÀÂÅÁÄÇÆÉÊÊÊÊÌÊÌÊÇÅÃÃÅÃÂÂÂÆÆÃÆÆý»»º¾ÁÁÂÄÆÇÅÇÇÆÇÉÊÆþºº½¹µ²·ºº·²±¯³¸¹½¼¹¹¾ÃÍÔ×ÛÛÙÖØÙÜÛØÕÖÖÕÎÄÅÌÎÌÊËÏÕØÜÜÙÓÎÊÎØàãâäåååçåâàÜÙ×Ͼª–’›¨µ¼¿ÃÉÐ×ØÙÛßÞÜÙÙÖÒÍÇÇÈÌÑÒÒÓÓÒÎÇÆÆËÏÍÉÅÅÉÍÍÌÆÃÊÕÞããâââàÞÙÒÓÕÖÓÒÏÍÍÍÎÒÙÝÞÜÚÛÜÚÕÏÎÒÙÞÜÛ×ÑÕÔÑÎÎÎÎÏÍÌÊÌÍÒÑÐÍËÉÈÈËÎÏÓÒÔÑÎËÇÁÀ¼½¸µ½ÈÊÿ¼¾½¸¯¦¡¡–ˆ„Œ›²ÁÃþ¹³°««©ª«©¤žŸ›˜•’“–skeggg\MA:878;?C>837?KROJ?9?IPORVXWVY][^flnqqooopqkkptw{‚‹•Ÿœœž  œ–””™ššœ™˜˜œ¡¦­±³®ª©­®°³µµµ·¶¶µ³µ´´¸±®¯°¯«­²¶¼ÀÄÂÁÁ¿½¶µ²±²®¯¬ª®¯²­¥  žœ™”‘–˜–—•‘‹‹‰‡­¬¯¯¯¬¯°±³º½»»º¹³­©¬°²±¯®­«ª®³·¸º½À½»»¹»»ÀÂÃÁº¸½¿½ÁÃÂÄÁÁÂÁÀÁÃÄÅËÔÚÜÙØ×ÒÑÊÄÅÂÅÉÊÄ»ÁÈÌÈÇÆÅÇÈÆÂÀÁÁ¾ºº´µÁËÏÓÒÊÇÄÆÇÆÇÇÈÇÅÆÆÈÅÀÀÀÂÄÃÁÂÁ¾Á¿ÃÅÄÇÍÖÚÛÖÐÆ»´·¾Ê×ÚÙÙØ×××ÓÏÌÐÎÏÏËÇĽÁÅÄÀÃÉÏÐÍÎÎÍÒÛàæëçãàßÝÚÛØÖÖÙØÑÆ·§§®µ¼ÅÉÓÙÜÙØÙØÛÛÛÛÙ×ÛÕØØØÖÓÒÓÖ××ÕÑÒÒÏÌÍÎÌÈÁÀÁ½¿ÆÍ×ÙßââßÚÖÌźµÅÔÚÚØÔÑÔ××ÕÓÐÐÓØØÖ×ØÚÜÜ×ÐËÈÌÍËÄ¿¾ÂÆÈÍÎÉÀ¾»¿¾¿ÀÁÉÊÊÊËÌÐÓÕÔÒÒÍÍËÅÄÉÊÆÁ¾»ºµ´´°«¢•‹™¬´´´´±®¬¨¥¨¯²­¤žžŸŸ›•‰”„ysorngYMFFGEELPPIA=BJNOQWVVWVYY\gnswwwvvvzxx{}|{†™¡ ¢¥¥¥¢ž—˜˜™™—••›¤§­¶½¼¸µ³³´µ¶¶¸¹¾¾¼¾ºº»º»º¶·¸µµ³¸»ÃÇÈƼ¼·¶³°°¯±¯¬«®²´°«¦¦¥¢œš“”•’‘Œ‹Šˆ¯¯¯°¯¯®¬®²»½½¼¿»µ´²°°°±¯¯­­ª®²µµ·º¼¼»º·¸¼¾ÁÃÁ¼¼¿¿½¿ÃÁ¿½½¿¾½¿ÂÁÃÉÐÙÚÙÙØÒÎÉÃÃÄÃÈÊÆÁÄÊÆÄÂÀ¿ÃÇÇÂÀÁÃÃþ¼¶³¾ÄÇËÏÌÆÇÇÆÆÈÉÇÆÅÄÆÆÇÿÂÄÃÂÁ½½½¾½ÀÄÅÅËÑ×ÖÔОº»½ÇÑÔÕÖÕÔÓÒÏËÊÎÑÑÎÌÇÅÁ½ÁÂÁ»¸ÁÇËÉÎÍÌÐÕÙßâãÞÛ××ÚÛØØ×ØÚ×ÏÀ°¬²»ÄÐÖÚààÜÚÛÜÝÚÚÚØÙÙÔÖØÙØ×Ö××Ø×ÕÒÓÐÎÑÑÒËþ¼»½¾ÂÈÑ×ØÛÝÝÙ×ÐƺµÁÓÜÜÙ×ÓÕÕÖÖÔÒÑÓ×Ø××ØÚÜØÕÏÎËÏÓÑÌÊÈÊÊÌÑÐʼ··»»º¾ÄÊÊÈÉÈÌÑÔÒÒÐËËÉÃÁÂÃþ¹µ³²´²²®¦™™ž©³°¶¹µ±­«§©°²¬¤ ¡Ÿ™•ŽŒŽ“‹„ypstro`QHGKMNMMKGCCFJLNRWWUTVY[_ioux{vvvx„…‡…}~ˆ’šŸ ¡¥¦§©¤™—˜”‘”š§­±ºÂÁ¿½¹¹¹··¹»¿ÁÁ¾¼¼»¼¾½¼»¹¹¹¸½ÂÇËÍÈü¹¶·³¯®¯¯­©¨¬°³²­ªª©¤ž›“’Ž‰†Œ‰ˆ°±¯¯¯­¬ªª±»À¿¼½½½º¶´³²²¯¯­­¬®°³³µ¸º¹¹º¶¶¼ÀÄÅÄÁÂÃÿ¼À¿¾¼»»¼¿¿ÁÀ¿ÅÌÔØ×ÖÔÏÌÆÁÂÄÃÈÈÉÆÄÈÄÁÀ»»ÂÆÆÅÆÇÊÉÌÇÀ¹µº¼ÂÇÍËÊÆÄÂÃÄÅÅÆÄÄÅÄÆ¿ÂÁ¿Á¼º¶¹º»¿ÃÂÁÃËÐÑÐÍÈÄÁ¿ÀÅËÏÐÓÑÑÒÏÊÅÆÊÎÐÏËÇÄÿ¿À¿º´¼ÅÇÈÌÏÍÏÓÕÖÙÝ×ÏÐÓÖØÙØ×ÖÙ×ÔȺ³´¿ÎÙÞáãâßÞÞÞÞÚÙÕÖØÖÑÓ×ÙØ×ØÙ××ÖÓÐÐÏÌÐÒÏÉ¿º¹º»¿¿ÆÊÎÎÒÓÔÔÓÑÊÁ½ÅÕÛÝÙÖÕÑÐÕÖÔÕÓÔØ×Ö×ØÙØÙÔÓÑÑÔØØÖÏÐÎÑÎÑÑÎÈÿ¹·¶³·¾ÉÉÆÇÆÄÉËËÌÌÉÈÅÁ½¼¾¿¼·°²°²´µµ¯ª¤¡¥­¶´»»¸³°«¨©­®ª£  ž˜“‘‹ŠŠƒ}yuwwvum\JGKPORKFA>AEIJPVYXVTW]]emqsxzutv|‚…‹Ž†‰˜›ž¡¡£¦©§¢š™”Œ‘š§®³ºÁÃÁ¿»¹º¸¹º¼ÁÂÁ¿½¹ºº»¿¿¾¼»»»¼ÁÇËÎÏÍÇÁ¿¼À»³®®­«¢Ÿ£©««ª«­©¥Ÿ™“’ˆ†‡‰‡°²²°®°­ª«¯¸À¿¼ºº¹»¸µ³°°²®¬¬­¬¬­®±´·¹ºº·»ÁÅÈËÌÇÄÃĽº½À¾¼»¼À¿ÀÀ¾»ÀÇÑÔÓÕÓÍÇÄÁÅÇÅÇÈÈÆÅÆÄ¿½»»ÁÉÉÈÌÎÑÑÐÍƹ·¸¹¼ÅÉÈÈÄÀÀ¿¾¾ÁÀÁÀÀÁÄÆÄÄÂþ»·´³¸¹½ÂÁ¿ÀÆËÏÍÊÊÈÃÄÀÄÈÉÊÍÎÎÏÌËÅÄÈËËÌÊÃÀÁ¿¿¿À»¸ÁÈÊÌÐÒÒÑÔÔÔÙÙÑÏÌÏÖÚÙÚ×ÔÕÖÔÎù»È×áãååãããàÝÞØÕÔÖ×ÔÐÐÔ××Ø×ÙÖÔÒÏÎËÊËÏÑÏÈÁºº¼¿ÂÃÇÊËÉÅÄÄÈÏÒÏÇÆËÖÜÜÛÖÒÐÏÒ×ÚÖÖÖÕØÔÔÕÔÕ××ÖÖÔØÞÝÚÕÏÐÎÐÍÏÑÏÏÊź°ª©¶ÅÉÉÅÆÂÁÀÅÇÉÇŽ¶¸¹¼½·°±²²µ¸º¹³¬©§°¸»½¿º´²­©¨¬­©¡ššœ™—‘ˆ†ˆˆƒ|wx{xzujVEINQQLB<9=@BFKQVXVV[dfinosyzuu{…ˆŽ‘‹}‡’› ¡¦¨«¨¥›’ŠŠ”›¤¬±¸¿ÂÂÁ¾¼¼¼º»»ÀÁ¿º¼¹º¹¼¾¿¿¿ÁÁÆÆÇÊÏÑÒÒÎÆÆÃÇÁ¹²°­¨Ÿ™œ¡Ÿ¢ª­­¯¨¡›–’““Œˆˆ…†´´³°¯®®«ª­´¹»µ²±´´±°®°°®¬«¬«ª©¥§©¯²´¹»¸¼ÄÈËÍÍÉÃÃþ½¿ÀÁ¼¼»¿À¾½º·»ÂÈÍÒÕÔÎÊÆÁÈÇÅÆÅÄÄÆÇÅÀ½º»ÂÉËÌÏÒÔÓÐÏÈÀº¹¸º¿ÄÇÅÂÀ¿¾¾¼»¼¼»º¾ÃÃÅÄÁ¾¾ºµ²±³µ¹»¿¹¹ÀÅÇÆÈÊÉÅÁ¿¿ÁÁÄÆËÎÌËÉÈÅÆÇÇÇĽº¿À¿¿¿ÁÂÇÌÎÌÐÒÑÑÑÕÙÛÙÒÏÏÐØÛÚÛÚ×ÖÕÓÒÉÀÂÓßææääââßÜÚ×ÓÌÎÒ×ÔÐÏÓ××ØÙÚÖÒÐÐÌÌÍÌÐÑÏÉÿ¼¿ÂÄÇÌËÈľ¸¸¾ËÐÑÌÊÑÙÜÛÜ×ÔÒÑÓØÙØ××ØÖÓÑÒÒÓÔÔÓÑÓÚàßØÔÏËÌÍÏÏÎÒÒÐÌÁ±©§³ÃÈÈÆÆŽÂÈÆÅÂÀ»¶¶º¿½¸±°±±²·¼¼·°ª¨°¹»¿Á»´²­§§¬¯ª ™–—š˜”Ž‰†……€}zzzy|ztbMHMOOJD>?BA@FJNRVVYdkiknosyzux„ˆ‰Ž’Ž†ˆ”˜œ¡¤¨©¨¦Ÿ”…€…–› ¦«±¹½ÂÃÃÂÀ¿¾¼»¹½¿½»»½¾¾½¾¼½ÀÃÈÌÎÎÑÑÑÔÔÐÍÈÉËÇ¿¸³¬¤Ÿ™›œ¡¨¬­­ª¥žš™••–’Ž‹‰…†¶¶¶²°­®®©«¯´¶±ªª­­­­®¯°­«ª©ª©¦¥¢¢ª¯³¹º·»ÃÄËÏÎÌÅÄÅÀ¿Âþ¼¼¿ÀÀ¾º·»¼ÄÉÐÔÕÑÏÉÄÃÁ¿¾½½ÃÇÊǽ¼¼ÄÈÌÎÐÒÔÓÎÍÊÆÁ¾º»¾ÀÄÄ¿¾¼»»¼¹·½À¿¼¼»º»¹²¯­®¯°¯®ª¨°¸º¾ÄÊËƽ»»º¼ÁÅÈÉÈÇÇÅÄÂÄÄ¿ºº¼ÂÂÀÅÉÊËÏÍËÌÌÌËÎÔØÚÚÕÐÒÓ×ØÝßßÚ×ØÔÑËÇÈÖäææäãàÜÚÖÒÏËÄÀÊÓÔÑÒÒØ××ÚÛ×ÓÐÍËÏÒÏÓÔÑËÈÅÃÄÅÅÇÈÈÆ¿·°®¹ÆÏÑÑÑÖÚÜÚÙÙ×ÖÓÖÙÚÚÛÚÛØÑÐÑÐÒÑÏÌËÍ×ßÞÙÒÍËËÎÐÓÏÏÓÒÎƺ²²¸ÆÈÉÊËÉÄÁÀÄÿ¼¹¼¼¾ÁÁ¹±°°®®´»¼¹³­©°¹¼¿¿¼¶²­¨¦¬®©¡š”“–“Ž‹‡‡†‚~||{|€|wl[SNMNIEEHIHEINNQSZ`ioiehkov{vx‚†ˆŒ“’’’’•™žŸ¡¥¤¥ ”ƒtrœ¢¥§­´¼¾ÄÄÅÅÄÁ¾»¸·º½½ÁÃÄÄ¿¾º¹¾ÆËÐÎÐÕÓÑÕÔÏÏÍÉËÈý²ª¥™œœ¡£¦©©ª«¦¡œ›™˜”‘ŒŠŠ…‰³¶µ°­¬«¬­©¬°±¬¥§ª­°®±°¬«¨§§ª¨©©¤¤¨®³·¶µ¸¾ÆÉÏÔÑÍËÇÀ¿¿ÁÃÁÀÁÃÃÄÀ½º¶¸¿ÅÎÔÖÕÔÌż¹¹·¹¿ÄÉÈÿ¿ÄËÎÐÑÒÒÓÏÐÏÌÇÿ¼ÁÁÀÃÄÀ¾½¼º·º½¹»»»¶±¯±´·µ°ª§ªª¨¤œ•“œ§¬°¹ÇÉÅü¶±µº¿À¾À¿ÁÄÄÀ½½¾¹¼ÁÄÃÅÈÌÍÌÊËÈÈÇÆÄÈÎÒÚÚ×ØØØÚÛÜàáÜÛÙÙÒÍÉÐÝäåââàÛÔÓÐÎÌÈúÆÒÔÕÕÖ×ÙÙÚÙÕÑÎÊÎÒÔÔÖÕÒÐÎËÉÉÉÆÅÅÅü­¥¢­ÃÏÔÖÖØ×××ÕØØÚØÙÚÖÚÛÛÜ×ÑÐÒÔÔÓÐÉÉÍØàáÚ×ÓÍÑÒÐÒÐÏÍÑÍÊÁº¼ÄÍÎÍÎÏÎÈÃÂÁÿ¼»¿ÁÃÄÃÀº²®¬©ª²¼½¼¶®©¯¸º¼»¼º·±©©¨§£¡—‘‰‡‰†‡†~€}€€|rfWPMJGEGKNKJNSSUWacjng`ehkqzx{„ˆŠ“—˜˜––™›žžŸ ¢ ˜‹wnj“¡ª¬¬°·¾ÂÃÅÄÀ¿º¶¸··¼¾ÂÇÈÊÉÈû¸º¾ÇÎÒÏÏÒÒÐÑÒÔÐÒÏÍÈĽ²©£Ÿ›¢¥ª©§§¨ª¬¦šœ˜’ŽŠˆ‰ˆ°²³°ª«¨¨¦§«­¯«¥¥ª«­®­«©§¥¤¦«ª«­®®«°´¶´°³¸ÀÈÒÔÐËÉÅÁ½ÁÂÁÂÂÁÁÀ¾¼¹µ³µºÄÎÖÙ×Ôʾ¼¹¸¸··»ÂÇÆÅÃÄÂÆÍÌËÍÎÐÐÏÎÑÊÿ½¾À¾¼½½¼»¼º¹¶¹¾½º¹µ­¤¡¤¦«¬§¢¢§¨¦Ÿ–“œ§¥§­¹¿ÀÃÿ³¬®´ºº¹µ·¼Âþº¼½½¿ÄÆÄÁÅÉÊÈÉÊÉÇÈÅÃÄÈÏÔÙÛÞÝßÞÜÚÜÜÛÛ×ÖÓÏÍÓÜããâßÛÐÉÈÊËÏÍÇÄÇÏÕ×ÖÕØÛÚÚØÓÏÌÌÏÔÕÔÓÒÑÑÔÑÐÐÎÊÅÄÆù­£œ­ÃÓ×ÙÚÒÕÕÓÖÖØÙÙØ×ÔØÚÝÚÔÏÐÔÚÛÛÖÑÏÕÝâàÜÜØÔÑÑÑÏÎÌÌÍÌÆ¿ÃÈÍÑÒÏÍÐËƾÀÁÁ½º¾ÃÊÉÉÅÁº³­«¦ª²»¾¼·¯¨®¸»»½¿¾»¶°«§£ ž—ŒŽ‰„„…‡‡ƒ‚„„ƒƒ„‚‚}fULJGCBEKNJHLOSX]bchlkgijjmv{~~‚…†‹•——•–™›ŸŸŸŸŸ™€y‰œª°²³µ¼ÁÁÂÀ½¶°ª¨®·»ÁÆÇËÍÍÌÉ¿¹¶¸¾ÉÏÒÐÏÑÐÌÌÍÎÑÑÒÐÍÆ¿µª¡œ˜œ¤ª¯²¯ª¬®°«¢œœ–Š‰‡‰Œ‘¯²±°¬§¤££¤§©©§¦¤©§§¨¨¥¦¤¢¡¤«®®°³²¬°´´°­²¶½ÆËÎÊÅÄÀÀÂÂÂÂÁÁ¿¾»¸·´²®²·ÀËÔÖÕÐÄ·µ¶µµ¶µ¸¿ÄÆÆÂÁÁÅÊËÉÆÇÌÍÌÎËŽ¼º¾À¼¸·¸º»¾¼¹¸»¿¼¶­§Ÿš•’–—™™˜›¤¦¤™“•–¢ª©¥«¯³¶½ÁÀµ©®¶¼½·³²ºÃÇÄÀ½ÀÀÃÄÄÀ¾ÁÅÇÆËÍÍËÉÆÃÃÆÍÓ×ÛÜÜÜÚÛÛÚÜÙÓÑÑÓÑÕ×ÞâââÝÔÉÂÄÇËÎÐÌÆÇÌÒÕÕÔÖØØÙØÕÑÏÏÏÓÔÒÍÍÎÒÔÒÐÐÎÌÇÄÆÅ»±ª£±ÉÓØ×ÔÔÖ×ÚÙÕÕÕÕÔÑÍÔØØØÓÍÎÕØÜÝÚ××ÝàâáßÛÛÖÐÎÑÐÌÊÉÇÈÂÂÉÐÓÓÐÍÊÊȼ¿Â¿»¹¾ÇÏÑËÅÀº´®«¨«µ¾¾º³ª¥¬¸¾½»½½¼¹´¬§¢ Ÿ›’ŒŒŒˆ…€‚………‚‚ƒ‡‰…‚ƒ‡kZQKE@>CJLIEHJMU\b`djikoonps~„‚€„‰’—–––šœžžžžžŸš“ŽŒ‘œ¦²¸¹»»ÀÃÂÁ¼µ¯¥œ¨¸¿ÄÊÉÍÍÍËļ´°´»ÂËÏÏÏÑÏÉÈÆÉÌÐÐÑÍÇ·­¢˜–˜¥¯´·¶³¯±¶®¤Ÿœ–ŽŠŠŠŠ‹°´³³±­©¨©««ª©©¦¨ª¬®¬¬ª¨¦¥¢£©«¯²·¸·º¹¸±±±µ¹ÀÇÊƾ¾¾ÁÅÆÅÅÅÅÿ¼·³³²°®³¹¿ÇÉÈĵ³·´µ¶±°²·ºÀ¾¾º½ÁÆÆÆÄÄÆÊËÉÇĽ¹½¾½¹µ¶·¼½¾½·³·º¶®¦Ÿ™—–‘ˆ„€€›§¬§œ˜œž©¯°¯²µ´¶¼Äº±²¸¾¾º¶¹¾ÈÉÆÃÂÂÃÄÄÅ¿¾¾ÂÆÈÌÑÒÏÍÉÆÅÊÏØÖÖÔÕ×ÙØØÚÙÔËËÎÌÐÔØÜßáàÝÕÉÅÉÌÌËÏÉÅÄÍÒÕÒÑÑÑÑÐÒÑÑÔÑÐÑÐÌÇÁÁÊÓÑÑÓÐËÅÁÄÆÀ¸´³½ÉÐÒÏÌÐÙÞßÜÕÑÑÏËÉÊÒÔÔÕÑÌÌÎÖÖ×Ö×ÞÞâáÞÜÙÖÐÎÐÓÐÍÆÃÂÀ¾ÂÍ×ØÕÎÈÅŽ¹½¼¿º³¸ÂÌÏÍƼµ²±°¬­¹ÀÁº´¯©®¹¾»¹·¸¹¶µ¯§Ÿš‘‘Žˆ„„†„€„†‰Š…ƒ„tfXOE@>DJMGDGEEJR\`dihjptqq|†ˆ‡‚…‡‹‘–˜˜›™šœž žœ˜“—œ¢«´¸¼¾ÀÃÆÈÄ¿ºµª¤¦³»ÁÅÇÊÉËÈÅÀ·°­°¶»ÂÈÌÌÌÍÉü»¿ÁÆÉÈþ¼°¦ž™§°¶º¹µ´³µ¯¥žœ—Ž‹‹Š‹°°²²±¯­­­®¯«¨¦¦©¬®°°°¬«¨¥¢¢§ª­²¶½¾À¿º³³³²´¸¾Â¿¼¹º½ÃÅÆÈÉÉÈÅÀ»µ³´¯¬­°´¹¸·µ±±¶¸¹³®¬¬¬¯³´µ·¶º¿ÀÀÂÂÄÆÈÊËËÆ¿¿½¹¶³µ¹¸¸¶³®°²²­Ÿš—””Žƒvqgœª¯¬¤ §ª®µµ´¸º¸¹¿ÇÈ¿¸´¹¾¿¼¼ÀÇÍÌÇÃÃÄÂÁÂÅý»ÁÇÇÌÑÒÐÐËÆÇÌÓÛ×ÏÎÐÔÖØ×ÜÕËÆÅÆÈËÑÕÙÚÚÚÙÔÉÈÊÍÍÉÇÆÁÃÌÐÓÐÏÏÌËÈÆÌÒÑÏÍÏÎɵ°ÀÎÏÏÑÍÉÃÀÅÇÅÁÂÄÈÍÍËÇÊËÖáâÜÔÍÍÌÈÆÆÏÒÒÕÓÏÐÑÓÒÒÓÔÙßÝÜÙ×ÔÎÈÌÑÔÕÎÇľº»ÁÎØ×ÕÎÈÄü·º¾¼·°´¼ÇÍÍɼ´³¶¶¯¯¹ÄÀ·²±­±·½¹²²¶··¶­§¡™˜—”Ž“Š‚‚‚‚€~~„‰ˆ†€~|wj]SJDEGMNHEIIFIP`cfkjkpuuu}„ˆ†‚ƒ…Œ”™œœ›žŸž ž›˜”–¡¤©¯µ¹¼ÀÄÈÈÅ¿Á»´°µ¹¾¿ÁÀÄÆÅÿº´¯²·¹½ÃÆÊËËÈü´³±¶¾À¾¾½¹®¢šš£«±µ¶³´²¯« ›š•ŒŒ‹µ´³°²°®°±±²°§¦¤¦©¬°±°¬¨§¥££¦«®­³»¾ÂÁ»·³°³±±¸¹¹¸¸·ºÀÄÇÈÉÊÌÉÈÄÀ¾»·³±³²³±­°¯°¸º¸´±ª§¤©­³¶´³·¹¼ÂÀÁÃÇÈËÏÏÌÈÁ¼¸¶²´¶·¶´´²¯¯²³¬•’Ž‹‹ƒunlž®¯­©ª°²¹Á½¿ÅÃÀÃÈÌÎÉÁ¼»ºº¸¼ÅÌÐËÅÄÄÄÁÁÄÅļ¸¿ÇÌÏÑÒÓÓÐÉÉËÑÕÔËÆÈÎÓÓ××ÑÌÅÅÆÆÈÐÕÖÕÒÕÖÐËÈÈËÊÉÅÂÁÁÇÊËÉÈÌÌÈÇÆÈÎÏÌËËÎËĹ·ÀÌÏÎÏÍÉÆÇËÎÏÍÏÑÒÖÔÒÏÌÏÕÝâÞÕÏÌËÈÆÄÌÏÐÔÕÓÔÖÔÔÓÓÕÖÙÚÖÕÓÑÌÌÌÐÕÓÍÇ¿¹¶ÁÏÚÖÖÓËÅÄþ¹¹½»¶±³ºÄÊËƹ±´¹½µ´»Åĸ´¸¹¸¹ºº²°´º¹´®¦Ÿ——˜––––”‹†€€|{€‚‚‚~|yvnbWPIGGILHHNOIEP\acehiouwv{€}†Ž˜™›œ››ž £¡¡žž›˜™ ¥¨©¦«¯µ¹½ÁÄÄÁÁÁº¹»¿ÁÁÂÃÃÄÁ¿Á¾¾·µ¸»½¿ÃÄÇÈÊÉǺ´°±¸»½¾Â¾¸¨žšœ¢¨«®¬¯®«¨ ™™”‘ŽŽŽ’“½Á·³²²²¶¶¶¶¶±¨¥§ª¬°°¯ª©©ª¦¤¨­­«®¸¼À¾¶µ¶´´±³µ³¶¸´·½ÁÁÄÅÉÊÊËÉÈÆļ¹¹´°«¬¯±³·»¶¸´¬§¥©³¸º¹¸¸º¾½ÀÀÄÉÉÉËÍÊÁ·°¯®¬²·º¸µ·µ´±¶µ¯¡™“Ž‰„‚|vzŠ¤±´³²´¶ºÀÅÉÊËËÈÉÍÔÔÐÍÄÃÁ¹µ»ÁËÏÈ¿ÄÄÃÇËËƾ¸»ËÐÒÓÓÖÙÔÍËÌÏÒÌÄ¿ÁÈÑÒÒÑÑÎËËÊÊËÔ×ÕÐÏÏÐÑÉÂÄÅÆÉÊÇÆÂÃÃÄÂÇÉËÊÅÊËÏÐÎÎÎÏÏÊÿÇÑÒÐÏÍÍÎÐÑÕÕÕÖÖ×ÙÛÛÙØÔÕÚßÞ×ÏÌËÈÈÈÊÌÍÑÑÐÓÕ×ÕÕÕÕÕÔÕÒÏÍÍÎÌÌÏÐÐÊÃÀ½¹¹ÁÏÛÙÕÑËÉÇÄÀ½½½½¹²µ¸»Ãľ´­°½À»¹¿ÅÅ¿½ÁÁÀ½½º¸³¸¿»µ­¨ ––˜™›žž™“Š‚}~~~{}€€~{yxvoe[RJIEIKLJPMJBIX_^bglqxyy{~||{†“˜œšš–—š¡¤¥ ž ™ž¦«ª§¡›ž¨²µ»½¿½ÁÁ¿ÁÀÄÆÈÊÍÊÂÀ¼½¿½½¹¼ÁÀÂÁÁÁÃÄÇÉÈÃÀ¾¹º»¼ÀÁ½´§   £¨¤§«¬©«¦ž›˜”‘”•‘Äü´¶¹»À¾¹¹¹³¬¨¨ªª­¬ª¨¨««§¤§ªª¤¨±º¿Â¿¸¹¹¹¸´±¯¯²´³´··¸¼¾ÃÇÉÈËËÌËÉÄÁ½¸²­°²³³´»»¹¶²­¬°·½¼¼¼¼»»º¹¼ÄÊËÇÁ¾½²ª©©©«²¹»¸¶¸·µ´·¸±£™”Žˆˆ‰’¡·½¼»ºº¹½ÅÌÎÎÌÉÉÌÒ×ØÒÏÎÌɺ¾ÅÌÎÈÂÀÄÇÉÌÑÑ˽±ºÉÒÔÓÔØÙØÔÒÎÍÏÉÁ¼ÂÍÔÓÑÓÎÓÔÒÑÍÐÕØÖÒÐÐÐÌý½ÀÅÉÎÎÈÅÂÃÄÈÊÉÆÅÃÈÉÐÐÒÒÓÐÏÍÌÊÏÔÒÏÎÎÒÖÖØÙÚÙÙÙÙÜÝÝßÞÙÕØßàÛÔËÊÉÈÇÊÊÌËÉÈÍÐÔÖØÔÓÐÑÒÎÊÉÌÍÈÄÈÊËƾ¼¹¶ºÀÊ×ÕÓÍÉÉÉÈÇÇÃÁ¿º²´´¹º¼¹®ª­ºÂ¼¼ÀÈÈÅÇÆÆÁ¼»À¿½ÀÁ»³¬¨¢™“–š ££•‹ƒ}~|~|{|}|~|xuuoeZQJIJNNOOPQMJP\_adlsxzxz||zyz~Š”œœœš–•™Ÿ¢¢Ÿžžš— ¨®¬¨¢™˜¡­±´¸º»¾½¾¾¿ÃÆÌÑÔÍǾ»¹¹»»º½ÁÀÂÀ¿º»»ÁÈËÊÊÉÅÀ½¾ÁÃÄÀº°¨¤¤¤¦¤¤¨ª¨§¥¥¢˜”‘“’‘ŽÆý·»ÀÃÄ»º¸´®«©¨¨¨©¨¦©«­ª¤¦©¤ ¤°¸¾¿»¹º»½¹¶±«§«±¯®¯­®®³¼ÃÅÇÉËÎÍËÈÄ¿»¸·¶º¸¶ºÀÀ½»¸¶µ¸»¼½¼»¾½·²±³»ÆÇÁ·²¯ª¥£¦§¬³¹º·µ·¹·¸·¸±¢¢•’˜¦³½ÊÍļ¼º¹ÀÈÒÒÑËÈÊÑ×××ÔÍÐÕÒÊÃÀÆÎÎÈÅÀÃÇÌÐÐÑÌÁ¸»ÊÐÓÕÖÛÝÚÖÕÏÏÍÊÿÆÓØÖÓÎÑÕÖ×ÖÖÔ×××ÕÒÓÒÇÀ¼½ÁÅÌÒÑÌÅÀÃÌÐÌËù½ÆÉÏÔÔÔÔÓÏÐÐÏÒÔÒÑÐÔÙÙÙÚÜÜÚÚÚÝÜÞââàÚÓÕÞáÞØÏÊÊÈÇÊÊÊÇÄÁÅÌÒÕÙÓÏÍÐÑËÈÉÌǽ¼ÂÃÁ¼¹¶·¹¿ÉÑÐÏÊÈËÌÊËÍÈÆ»´±µ·¹¸³ª§¨³¾»»ÃÊËÊÌÎǺ³¹ÀÃÂÃÁ½´¬§¢—–œ¢£¤ž™Œ…‚~zzywz|x{wtsurl^QKILMNNLSYZ[`fccit{}zwyzzz{{Ž˜Ÿ œ›š™š ¡¡  ž™™¡©¯¯ª¥œ¡ª­°µ¹ºº·ºº¼ÀÅËÒÔÐʽº¸º»»¼ÀÀÃþ¹´¶¾ÈËËÎÏÊÄÂÁÈÈÊĽ³­ª¨ª¨£¢¦¦£¡£¥¥¤Ÿš’“ý·³¹¾ÀÅÃÁ½¾¹¶³°¯¬©¦ª«­°²­ª¨¨¥ ¤¬·¾Á¾¹¾À¿¾º´­§«¬­ª«¨¤¨¬·½ÀÂÄÈÊÌÍÊÈÄ¿½¼Á¿¾ÂÅÃÀ»¼¼»¿¿¿¼»¼¾»´®¬­¶¿À¹°«©ª¦¦¨¨°¸½»¹³¸ºº¹¸µ«ŸšŸ£œ¤²ÀÏ×Û×ÊÁ½¿¿ÄÊÓÖÕÏÍÓÙÝÜÚÒÍÎÙØÐÆÃÃÇÈÂÀ¿¿ÃÉÌÑÏÉÇÂÁÊÐÓÕÙÜÞÛ×ÕÑÊÈÇÃÄËÔØÖÑÐÔØØÕÕÑÒÐÓÑÑÔÓÐÆÀÂÇÉËÍÔÕÍÿÇÎÓÒȾ³ºÁÈÐÖØÕÖÔÎÍÎÏÐÒÓÔÕ××ÛÙÚÜÜÛÛÜÛÞãææäá×ÓØÞÞÛÔÏÌÌËËÌÍÉÉÂÄËÒÖÕÐÊÍÍÐÎÊÍËÆ¿¸µ»¿ÂÁ½»¾ÀÃÆÎÏÌÉÈÍÎÊËÉÇÄÁ»´´²¶¹¸´­§¨­°³¸¾ÇÊÌËÌŵ©­¹ÂÄÄÀº²¨¦¥¡——žž›–Œ†|vtvux{xvwuqqqlcVLLJJMPQYaghhhfcjy~~|xz{yy{|„—›ž™œœ›œžž ¡Ÿšš£¬°°®©¥¢¦ª¬¯µ¸¼»¸º¹¼ÀÃÊÍÒÍÈƾ»¹º»½¿ÁÄÄĽ··»ÄÇÈÊÎÉÅÃÅÌÔÑËÄ»²®«««§¤¤¢žžŸ¤©¦¡˜‘‹¸±­­²µ»ÁÄÄÅÆÅ¿»¹µ­««¬¯±²®ªª«¦¢¦­·ÂþÃÆÅÅÁ»´®¬«ªª¬©§¦­³·¹º¼ÀÆËÌÌËÇý¾ÅÉÅÂÄÅÁ½¹·¶¼À¾¾¼»¹¹·²°®¯³»¼¶­©«ª¨ªª°¸½Á¾¹µ¹º¶´¶²¦š—šŸ£¦®¾ÍßäâÛÌÂÂÄÇÉÌÐÔÔÎÑØàáàÛÔÌÎ×ØÐľ»¹¸µ´¶»»¿ÈÌÍËËÊÌÎÒÔÒÖÜÛØÔÐÊÅÃÂÂÅÌÒÕÓ×ÙÚÜÚÖÐÇÄÇÊÎÐÑÐ˽»ÁÌÐÎÐÖ×ÏľÁÉÏÐÊ¿¶»ÄÉÐØÖÖØÖÐÎÏÍÍÐÒÓÖÕÕ×ÕØÙ×ÖÚÚÞàçêíçäÞÙÙÛáÝÚ×ÕÔÑÑÐÐÐÏËÇÉÍÑÒÎËÊÌÏÎÍÉËÇÀ¸¶¹¿ÆÅÄÄÈÊÊÈËËÈÇÇÊÍÉÆÅÂÀ¾º¹µ´¹ºº²«¨©¦¡©¸ÀÃÅÄÅÁµ š¯¼ÂŹ±¨¦§£œ••—–—–‘Šƒ}ytrvvw{xxzyvrrme[RNJGNTV\djkhffdkz~~}}~}yyz}„Œ’——–˜šœ›š›œŸŸšš¦­°­­«§¦¬®¯²·ºÁÁÀÂÂÂÄÅÊÍÍËÈž¸¹ºº¿ÀÄÄÅƾ¹¶¹½ÅÄÃÄÂÁÅÇÏ××ÑÍý¸´²¯«¦¥¢ž ¥¦§¢™‹‡‰ˆª§§©«°´½ÂÄÇÊÌÉÇÃľ¶¯­®¯°±­©««¨¤§«¶ÄÆÆÄÅÉÈÊÆÁ¸³°®®®®«ª«°´·¸¹·¸ÀÈÊÌÍÈÄ¿½ÄÆÄÂÂþ·³°°´¼º½»»·´³°°®´¶»¹´­©ªªª¬®µ¼¿Â½¹´¶·³±´±¦š˜›¢§°ºÅÓâââÖÊÄÅÆÉÌÊÎÒÒÍÐØàááÝÕÍÐÕÒË»¶³¯®­°µ¶»ÀÊÌÍÑÓÑÓÓÔÒÓØ×ÕÏÌÅÁ¾¾ÃÆÍÓÕ×ÜßààÛÕÎÁ¼ÁÄÊÌÍÉĶ´¿ÊÏÓÕÙÛÒȾ¾ÅÍÎͺ¿ÅËÑ×ÕÔÒÒÎÎÏÍÏÑÑÑÑÒÕÒÒÕÖÓÖÚÛßåèíêçèäàÞÞàâßÛÛÚÚÖÒÒÔÓÑÌÉËÎÏÎÍÌÍÏÎÊÇÇÇĽ»ÀÀÄÆÈÉËÍÎÌÊÉÇÅÇËÎÊÄ¿¼¾ÀÁ¾¼·µ¹»º²°©§Ÿ•¯»»½¼½½²‘£¸¿ÃÁ¸¯ª§©§•”’Ž‡‚|vrrwvx{zy}€|{wsj`UMJIMSV[chkljgfmx|}|~~}|~€ƒˆŒ’—š›Ÿ›˜š˜™œ›™›¨¬­¬«¬ª¬¯²²¶¼ÁÄÇÈÉÇÉÌÊÇÊÈÈÆ»¶¶·¹¼¿ÃÄÂÁ½·±±±·½¿¿½¿ÂÃÇÎØÙÕÒËÄÀ¹¶²­©¤¡Ÿž ¦¦¦£—Š…‡†¦¨«§©ª®·½¾ÂÇÈÈÈÆÅüµ²´µ´³°¬­­ª©©­¸ÅÊÈÄÄÃÅÆÇÀ¹µ²²±±±¯®¯²·¼º···¼ÄÈËÊÊÆýÀÂÀÃþ½¶²­¬²¶¸¹½¼¶³±°¬²´µ¸¸³­¬ª¨¨­®³¹ºº¶²¯³³²´·²«§£§¨±¸¿ÇÐÙÝÙÏÆÀÂÅÅÇÌÍÒÒËÒÙáäßÜÙÒÎÌÈÄÁ½¹µ³´·µ¹»¼ÅÊÏÒ××ÓÔÒÓÔÔÕÖÑËÆÁ½¾ÁÆÉËÎÑÖØÛÛÚØÓÍÆÁÅÊÎÒÐÊ»¹ÄÐÔÖÙÞÝÖÌÄ¿ÁÉÏÍÉÅÆÉÏÒÕÔÑÏÍÉËÍÎÍÍÍÐÒÒÕÔÕÕÔÖÚÞâåéëêèéééåßßááàáàáßÚ×ÓÒÓÔÏÍÌÏÓÓÓÔÐÍÏËÊËÌÊÈÅÅÅÀÀÄÈÉËÍËÈÅÇÈÉÌÎÊþ¹º¾½»´¯¯¶¹ºµ¯©¦¢™Ÿ¬¹½¼¼¿¿¶£¥²»¼¹³««®®© ˜—•‘Ž‡}zzutxwy||{€€}voeWKGGORT[bfkomijrv||{‚‚ƒ„…„†ŠŽ’•˜š™™›œ™š–”˜™š¡­²±¯®®¯°µ··º¿ÄÇÉÊÍÌÌÍÏËÈÊËËĹ²´¶¹»¾»À¾º¹³¬ª¬°µ·¶¸¼ÂÂÃÉÓÖÔÐËÆ¿¹²¬©¥¤¡£££¨§¡–…„…„«ª¬«©¥«´¶µ¹ÁÄÇÃÁ½ºº¼»»·±¬­­«««®·ÃÇÆÁÁÁÃÄÿ¸±¯®­­¯®­¯±¼¾¼¶³²¶ÀÇÌËÍÊÆÀ¿¿½À¾»¸·³²²³¶¶¶º»·±²®¬­´¶¶µ²²­©¦§«¬°µ·´¯ªª¯³´¶¸²®®²³¶½ÁÃÇÌÑÔÏÉÁÀÂÆÇÈÌÐÖØ××ßåçâÝØÕÎÆÃÂÁ½¼¹¸¼¼¾ÀÀÂÇÌÎÑÖÑÐÑÏÓÔÔÓÐÍÈÆÂÁÃÄÉÊÉÈÉÊÏÐÏÒÍÌÉÇÇÊÐ×ÚÖÏÇÁÄÊÔÙÝÝÞàÚÑËÄÃÈÏÒÓÍÍÐÒÒÓÐÎËÊÉËÊÊÉÊÊÍÓÔÕÕÔÓÒÖÜãåéëëëçèêëçàÚÝÝÞÞÞàÞÚÙÕÓÕÕÑÍÐÔÙÛÜ×ÓÐÐËÌÎÏÏÌÊÈÆÁ¾ÅÈÈÈÍÉÈÅÆÇÆÈÈÆÀ¼·¶··¯¢ž¥­µ»¸±«§¢œ£­¶º½½ÃÇÁ´­¯¶·³²¬ª¬±®«Ÿ—–—•“ˆ€~{yvwxz}}}€€‚xqi^RJFPSV]bdehfdhpxzz{„„†††…„‡Ž“–šœ›˜œ›™š–‘••š¢²··²±°²²··¸»¾ÃÄÆÅÈÊÊÍÍËÈÉÍÏȺ²´·¸¼¼¾½¾»¸´¯­¬­¯­°´ºÃÄÂÈÏÒÐÍÉÅÂÁ¾°©¦¢Ÿ¢£¤¤§¥ –Š‚ƒ†ˆ¨¨ª©§ª­²±°³¼ÀÂÀ½¼À¾¾¾ÀÀ»¸²««­®¯¯¯·¾Ã¿ÀÀÃÄÁ½´²¬©ª©«ª«¯´¾Á¿¹³±µ½ÃÈÊÍÍÇÁ¿¿¼¼»¹¸µ´µ·¸º·´·¶·´²¯¬°¶¸µ°­®¬¨¢¦«ª®±µ´­¥¦ª°´¶·³±±¶¼ÀÆÊÊÇÉËÍËÆÀÃÅÈËÌÍÒ×ÛÙÚßãáÝ×ÒÎÉÃÁÄý»¸·º»ÀÁÃÄÈÊÌËÉÈÅÆÉÌÎÏÎÌÇÅÃÂÄÅÉÌÍÊÈÉÊÇÆÅÈÉÊÇÈÊÎÖÜÞÙÑÊÅËÏÖÜÞÝÝÝÚ×ÒËÅÈÒØÚ×ÕÔÓÑÏÎÌÉÉÉÊËÈÆÇÇËÒÕÔÑÑÐÐÖÞãæéëëçææêéæÜÙØØÖØØÚØÙÖÔÖÔÖÑÏÑÕÚßÞÛÔÎÌËËÎÐÏÌËÊÇÀÂÅÈÉÉÌËÆÄÅÅÂÀÁÀ»·³²¯ªŸ˜ª´¼¼·²®¨£¦®µ¶·½ÆËÊü»½¸³®©ª¬®°ª œœœ˜•’ŽŠƒƒ|zz}~€~{‚yqnfYPLPUW[`]]][]dnrvtux~‚‚……†ƒˆ”šœšš›š–““”š¥°µ¶²±³´³µ··»ÀÂÄÂÀÁÄÆÊÌÉÇËÎÐ˶²·¹º¼½½ÀÁ¾¹³±±±¯®°µ¾ÆÆÄÇÌÐÏÌÈľ¸²§¢žž¡¨©ª§¦¡–Œ†…‰‰¤¢¤§ª®²³±®°¼ÁÀÁ»¹¾À¾¿Á¾»·°¯¬¯±³³³¶¿ÃÀ¿¾¾À½º¸µ­§¥¦¦¥¨¬³¼Á¼¶²®²¹ÀÅÆÊÊÊÆÆÿ¾¹··µ¹½¼¼º´¸º¹¹¹··º¿»²­§¨§¥¤¦«­««°´­£¢ª¬´¶»·²´¹ÀÆÍÐÏÌÈÉËÈÄÀ¿ÆÍÌÎÑÒÖÕÒÑÑÒÔÎÎÊÉÇÿÄÄÀ»¸´¶¸ºÀÁÂÅÈÆ¿º¸»¾ÁÄÉÉÇÉÆÃÃÃÄÉËÏÏÎÍÍÍÌÉÈÉÉÊÊËÍÑÕÙÞØÐÌÎÒÖÙÜÞÛ×ÛÚÚÖÐÆÈÑ×ÚÚÖÔÒÐÏÐÌÊÉÊÍÉÈÈÆÆÌÒÕÔÏÌÍÒÙâåçêëèåäæèéâÚ×ÓÏÐÏÒÓÏÓÓÓÔÖÓÓÑÓÖÛÚÜÙÒÎÌÈÇÌÍÍÎÏÊÄÁÂÆÈÆÉÌÌÍÌÌÊļ½½·µ°ª¥Ÿ“‚ƒ•¥±¹¿½·¶¯§©¯²±²·ÄÌÎÇÃÀ½µ°®ªª­­­¥žœœ›–’‡|vx~‚~|vy{€~upqocZPSWV^_][^^^eimmjioz~‚ˆŒ’”—›ž™šš•ŠŒ“—¡­±³±±´¶·³´·ºÁÆÆÇÄÃÈÉÊÍÊÊÌÐÑÒɾº¹¾½½¿ÀÀÀ¿»´³´³´²³¹¿ÆÉÈÈÌÏÐÌÇÀº´³±¨Ÿ›› ª¯«¨¥ š’‹¢š¢§­²±¯¬±¹¾Â½»¾¾¼»º¹¸²±±®®°²±±´¼Âþ¼½¼½¼º¹¶²«££©©«­²¶¸¶³¯°³¸»¿ÁÃÆÆÆÉËÇÀ¼¸¶·¹¾¿¾À½»¹ºº»¼½ÁÆÇÁ·¬©§§¦¤§«¯¨­°±­ª¨¬®±·º¶°²·½ÅÍÑÍÌÌÎÎÌÉÄÁÄÌÐÎÏÑÏÍÆÄÄÇÇÂÁÂÄž¿À¿»¸³®±³¸½ÁÃÄÀ¹´®·¾¿ÃÆÆÄÇÇÆÆÁÅÌÍÏÍÍÏÏÎÎÏÐÎÍÌÍÎÑÓÕÚÝÚÕÐÒÕÚÛÝÞØÔ×ÙÚÙÑÈÄÉÒÕÕÐÎÎÍÏÍÏÍÌÊÊÇÅÈÇÉÍÒ×ÖÒÍÌÓÜâæéëëèãäääãÝÕÒÏËÉÈÌÌÍÏÓÖÙØÙØ××ØÛÛÚ×ÒÌÈÅÅÈÊÉËÊþÂÄÄÅÆÉÍÏÓÓÐÆ¿¼»¸·³®§¢š¨¯¶½»¹·±«­°°®¯´½ÇÉÅÁÀ¼¶³°­¨«¬ª¥ž™—•“‹„}yvrv~ƒƒ‚|zux~€}xssrl]POVX_^\]^adimqoikqz|}€†‹’———™›œ—‘Š…Œ–¡©­²¯²¸»¼º¼¾ÀÃÈÍÌÈËÌÍÏÍÊÎÐÐÔÕÎÆÁÁÂÂÀÃÃÂÀ¾¹´³¶¶·¶¸¾ÃÈËÉÆÆÊÉÉŽ³®³°ª¤œœ¤¯²®¨¤Ÿš“ŽŽ’£œ–™£©­­«®°´º¾¿½¼¼»¸¶´³¯±±°±±²²²®±¹¾Â½º»¼¼À½º·³«§£§®°°±´¶¶´¯°´¸º¼¼¼¾ÂÄÈËÉÁ½·¶¸½ÁÀÁÃÂÁ½½½¼¼ÁÄÅÆ¿³¬ª¨¤£¤¦ª¬¬°°±°¯¯°±´··³«ª²»ÄËÐËÈËÍÍÎÍÈÃÂÉÎÏÏÑɼ»·¸½¾¸·½ÂÇÄ¿º»½»¸´¬¦¬±¶¼¾»º¹µµ¼½ÁÅÆÇÆÅËËÈÅÉÒÓÑÑÏÎÎÐÔØØ×ÐÌÌÑÒÓÔÙÝÛ×ÒÒ×ÛÛÛÚÖÓÖÜÛÙÓÊÄÆÉÏÍÌËÉËÎÐÍÎÍÈÉÈÄÅÉËÍÒØ×ÔËÌÓÙãåæèéæââàßßß×ÒÐËÂÃÇÍÎÒÖÜÜÜÞßÞÛÝÝÛÛ×ÒÌÇÄÅÅÈÈÈÊÅÃÃÆÆÃÄÅÇËÏÒØÔÉÁÀ½½½¸µ­©¤›ž¨®±´·´´±¯«©¬¬©¨­¸ÁÆÂÁÁ¼¹´´²®ª©©¨¤ž–“‘Œ‡zvqrw‡††ƒ}zvz~ywvuhZHANZ_^\[^bipwywrty~~|„Š’””—›Ÿžžœ•……‹”©®µ´·ºÁÂÁÃÇÇÇÈÌÈÅÅÉÌÌËÉÎÑÓÒÓÏÉÆÅÆÿÀÀÀ¾¸µ´´¸º»»¾ÃÅÊÈÈÅÁ¾ÅÅÁ½´²´³¯©¤£«°´¯¨¢œ•‹”•ª£¡¡§««®°°®±´´ºº·¹¸´³®¯²³³±²µµ¶³³³·º½·¶¶ºÀÁÿ¶¯°©¦«±¹¹¹·¸¶´²°²´¸¹¸¸½¿ÂÆÌǼ¹º¾ÂÄÄÆÊËÆüº¼½¿À½·­¬««§¢ ¡¥«­¯¯±¯´·¶·¹º·°§¨°¸ÁÈÌÉÄÄÇÆÊËÉ¿ÇÌÐÐÌ嶴³·¹µ·¼ÄÊÈÁ»»¸¸¹³®¥¤¨°¶¸»»½ÀÁÀÃÂÄÅÅÅÈÌÌËÈÎÓÕÖÔÓÒÑÒØÝàÚÔÍÊÍÕÓÓÕØÙÔÑÒÕØ×ÖÖÔÓÖÚÜ×ÕÏÉÇÉÌÍÊÉËÊËÎÎÍËÉÇÆÁÄÉÉÌÏÒÕÓÌÍÎÕÙÚÜàÞÜÛÚÙÚÚÜÙÕÎÈÁÀÆÍÎÒÚÝÞàááàÛÚÛÛÙÚÓËËÇÇÊÊÈÉÈÈÇÆÉÈÃÄÅÄÅËÑÕÔÌÄÃÃÿ¸´°«¦§¯µ³´¶±°±¬«­¬¬¨§©±»¿Á¾½ºµ¶µµ®©¥¥¢¡˜“‹ˆ‚€zrtty„ˆŠˆ„€ywzzvuurgXEBNV[_aeeimry}{{{€ƒ…ƒ…‰‘–›Ÿžœ’‹‹Ž“–Ÿ¨®´¶º¿ÂÂÃÆÅÉÈÅľ·ºÄÆÅÿÃÈÊÊÈÄÃÃÃÁ¾¹¼»»º¶²³µ¶¹¼¿ÂÃÂÃÅÃÀ¼¸º¾»¸¸¶¸¹·²°¯±³³®¥œ–’‹Œ’•°®­®¯­°´µ³±¯­®¶¸¶¶´²¯­°±±¯¬¯³µµ¶µ²³µµ²±³·¿ÄÅý¶¶±¨«±ºÀ¾º·¶´±®±°°²²³¹¼¿ÃÄÁ»¶¶º¾ÃÄÄÅÈËÆÁ¾¼¹¼»»¹µ°©«°®§ žœ£©®±¯¯±³´¸º½¼º®¦ª¯²¹ÃÆ¿¾¿¿ÂÉÇÃÁÅËÎËÉý»¸··¸¸º¾ÆËËÅ¿¼ºº¹µ±«£¥©­°³·¾ÅÄÂÁÂÅÄÃÂÄÉÌÉÈËÐÕÔÖ×ÖÔÕÚàâÝÕÌËÎÓÕÒÓÓÓÐÏÏÐÒÔÓÔÓÒÕÙØÖÕÒËÉÉÍÍÊÊÊÉËÊËÉÉÈÇÄ¿ÂÆÊÍÏÑÐÐÎÊËÍÎÍÎÐÒÑÐÏÐÒÕÜØÓÏÊÆÄÊÏÏÒÔÚÜÝààÞÚ×ÚÛÙ×ÑËÈÈÊÊÊÉÆÈÇÆÇÇÇÃÄÆÄÃÆÊÐÏÊÄÃÁÃÿ·¸µ±¬«°³²²³¯¬°­¬®¬­«ªª¬¶¼º¹¹¶²´´²¬£¡ŸŸ˜‘ŽŒŠ†~{ttuy„‡‰‹Šƒ|wyyxxuok]KENSX^cknmlrw{|}…‡‰ˆ‰Š“’•›™›š™—Ž‹Ž”—š¡¨®´¶º½¿ÀÃÄÆÆÇÅ¿·²¸ÃÅÁ¾¸·¹¼¾º´·»À¾¼º¼¼½»¹µµµµ¹»ÀÁÃÀ¾¼¼»º¹·¸²¬±³·¸¹··´´¶±¬¢—‘Ž‹‹Œ³µµ³³³³¶¶µ²­­°³·µµ´²¯­¯±®¬©«°³³µ´°°¯¬­ª­°ºÂÈÈž¹­©®¸½½·µ³±­ª¬ª©««±µ¹»Àþ´­¬²¼ÀÃÂÁÅÂÀ»¹¹¸¸¶¶³±¬¨ª°«¥› §®±²­°²³·»¾¼·­§¦¬¯²¸»¸º»¹»½ÅÇÆÄÅÈËÈÇƾºº»»¾½ÃÇÈÆÁÀ¾¼»¹µ°ª¥¦¨§§¯¹ÂÁÀ¾¾ÁÀÀÀÀÆÅÄÃÆËÍÐÒÖÖÓÓÚàßÜ×ÏËÏÑÑÓÓÔÒÑÐÐÍÐÏÒÔ×ÒÓÕÔÒÓÒÎËÊÍÎÊËÊÊÊÊÈÇÅÇÆÁ½¾ÆËÐÐÐÏÍÌÈÅÅÆÆÆÇÇÈÈÇÊÌÕÙÙÔÑÍÊÊÎÓÓÐÒØÙÛÞßÝÙÛÚÜØÒËÇÅÆËÌÌÈÈÇÅÄÇÄÅÁÄÄÂÄÂÇÊÉÅÁ¿¾ÀÀ¼¹¸·´±®¯°°²²®¬­¯¬­©«¬¬«¬³¹·µµ¯¬°±®© žž›—’ŒŒ‡„€|vtux}…‹ŒŽˆxuvxyvqjcWLOORV_fkkiotw|~‚†‰‰‹‹‹”’‘Ž’—˜™š”Š‹‘˜œž¦ª°´¶¹¼»¼ÂÅÈÇÄÀ¼¶¶»ÂÅÀ·±°±¶¹¶°±¹»½»¾ÀÄÄ¿½¼º¸¹»»¾¼º¶¶¸»½¿½µ«¥¦«®²µ·µ³´±®¨Ÿ’Ž‰†„†…‡¸¸ºµµ····µ³´³µ¹¹¹·¶´²¯±²³±¬­°°°³´´²±¬«©©¬²¹ÂÇÈÈÇ¿µ¬¨®µ´²²®©¦¤¨¨¨®³µ¹¸º¾Ã¿´©¥«¸¿¿¾½¾¼¸µµ¶µ´²±°­ª§§©¨ž™™™¥«°±®­±²µ¼½·³«££¨¬®­°³³·¸·ºÂÃÄÃÁÆÈÅÅÇÇÇÀ¼»¼¾¼½¿ÁÃÄÃÁÀ¾¼»¸·°©¨¦£¡©µ¼À½¼»¹º»¿ÀÀÀ¿½ÁÁÄÈÎÒÑÓÒÖÛÚÔÓÐÌÍÎÑÒÖÕÕÕÔÑÍÍÓÕÚÙÕÓÒÏÏÑÐÍÍËÌÊÉËÎÍÎÎÊÈÈÇÆý¾ÆÍÏÐÐÌÍÉÈÉÅÃÅÄÅÈÉÉÉËÏÓ×ØÕÑÏÏÌÑÕÖÑÔÔØÙÚÛÞÙÙÜØÒÎÊÄÄÉÍÍËËÊÄÃÅÇÅÅÁÂÅÅÃÆÄž»¹¸»»¹·¹¶¶·³¬«¯°±¯¬®±¯®¨«¬®¯¯³´±­­®«­°®§¡Ÿ™•‘Œˆ‰‘‹‰…}xuw}‡ŽŽˆ€tqqqssnnjeYURPRUZ_cejpt{‚†‡Š‹Ž’””‘•™œ›’Œ…ˆ‘™ £§¬®±µ¹¸»¾ÁÆÈÇÄ¿¹»»¿Åÿ¶°±¸½ÂÀ»¶¸¼ººÂÉÌÉÈÈÆÄÀ»¸¶³¶´²³³¶¿ÄÇý®¦§¤¤§­°±®«­«¦™‡„~€}~º¹·¶·»º¹µ´·º¼¾¿¾º¸¶´³¯³µ¶¶³°²°­±´µ³²°¯®««°²µ½ÃÁÄ¿º°¨¬®°°®¨£Ÿ£§ª¯·½¾½»½ÀÄ¿´­§®º¾¾¾¾¿»µ´´³´±²±²­¨¥¦¨¥œ—™™š¢¨®¬®¯°²¶µ¶¶µ¯¨¥¦¬±±®®²³¶¸»ÂÂÁÁÃÂÄÄÄÅÆÇ¿»¹¼»»»½¿ÀÀ¿À¾¾º¸·¸´­¬«¨¥©³»¾¾¼º·¸¼ÁÂÁ¼½¸¼½ÃÆÌÏÏÏÐÑÔÓÐÐÎÍËÍËÍÎÑÑÐÑÒÏÐÐØÚØÔÏÏÍÍÍÐÐÏÍÌËÌÍÎÎÍÏÎÌÌËÈÄ¿¿ÈÍÏÍÍÍÎËÍÌÇÁ¿ÂÄÈËËÊÍÑÓÖ×ÓÑÎÏÎÐÕÖÓÐÓ×Ô×ÚÚÖÔÖÐÍÌÉÈÇÉÍÎËËÉÄÄÇÇÇÇÃÃÅÄÆÆÆľ¹³±®°±³··¶¸¸³¬¦­²²¬©«¯¯®«­®¯¯¬­¬©¦ª¯¯¯®ª£™”‹†€‰‹‰………€}yy~ƒ‡ŒŒ‹†wokmlmmnplf]UQTXZ]cekov{€…Š‹Ž‘”–”’‘•Ÿœ‘‡‡™œ ¡¢¡§¯´¸¼½ÃÆËÉƽº¼½ÁÃÿ¹¶»ÀÅÊÊÄ¿¼¹¹¸ÀÊËËÌÌÉÅ¿¸²¯¬°¯°²µºÁÈÊÇÁ³­¯©¢¥§ª«¨¥¦§ –Œ‡‚€‚‚ƒ~»º·¹»º¼¶±±¹¿ÄÆÅÄÀ»¹¸²¯´¶¶·²­°®ª­²²²°¯¯°­®®®°µ¹»»»¶±­«¯®¯«¦¢œ¥ª®°·ÁÄÀ½¼¾Â½¶®­³º¿ÁÁÄý¹¶´²³³³´²¬¦¤¡¡ž˜•˜˜˜¦«­¯²¶·¶µ³¸¹µ´°²¶¹º·µµ··»ÁÅÄÀ¾ÃÇÉÇÇÇÉž»¹¼¸·¹»¼½¾¾¼¾¿¹¸¹¶³®­¬ª©¬³¹¼ÀÁÀ½¿ÄÉÉÇÁ¾»½ÀÄÉÍÑÒÏÌÐÐÐÒÑÑÐÌËÊÉÇÈËÉÌÌÌÏÒÓÖÕÒÍÊÌÍÐÑÒÏÌÊÊÈÇÉÈÍÑÑÒÒÎÉÇÂÄÇÌÌËÌÎÏÌÍȸ¶¾ÄÉÏÍÉËÍÐÕ×ÓÑÎÏÎÑÓÕÓÏÎÍÎÑÕÓÏÍÊÈÎÏÍÌËËÏÎËËÇÃÃÈÊËÊÅÄÃÆÇÆÄÁºµ®«§¨¨­³´¶¹¸²¬£©°¯«¦ª¯¯®­®°¯¯«­«£¦ª­²­«¥ž—‘‡…ƒxu„„~~|wzz€‚‚‚ƒ}yuqomjhhilg`USW_afjkqtu|ˆ‹ˆŠŒ‹‹‘•—’Œ–œŸ›‰‚ƒŠ—œœ–’—£©²·¼¿ÄÈÈ¿¹½ÂÄÄÃý¼¾ÂÇÎÏÌÅÀ»¹´¹ÂÅÇÊÊȾ¸³¯«­­««¯¯µ½ÄÈļ²²²²ª¥¢£¢ŸžžŸš“Š‡ˆ‰‰„„¾º¹»¹»¸³°±¶¿ÄÄÆÄÀ¿¼¸±®²·¸µ±¬«¯©ª¬°¯®­²´¯¬®«­±´µ·³³®««¬¬«ª¦¡¡¥©®­´º¾¼½¼¿ÀÀ¹·µ¶¸¾¾ÁÆÆ»¹¸´´µ¶µ±©¤¡š˜““”–—œ£ª°µ¸¾¼º¸¶´·»¸·¹¾ÃÃÀ¼¹¸¸ºÃÅÁÀÃÃÇËËÇÊÈý¹¼¿»¶¸¹¸¹»»¿¿¾¼··¶µ®ª§¥¥­µ¹¾ÃÃÂÂÃÇËÎËżÀÄÉÍÓÕÑÐÍÊÌÒÒÒÓÐÐËÈÈÅÅÇÆÈÊÊÎÏÏÓÒÐÊÌÍÐÑÒÐÎÇÄ¿ÃÄÊÒÖÓÔÐÍÉÆÆÉËÉÌÈÍÍÈÃÀ²ª°ºÂÌÎËÈÈËÎÔ×ÔÏÎÐÎÏÓÔÐÎÈÃÄÈËÌÈÅÄÌÓÖÖÐÐÎÍÌÊËÈÁÁÆÉÍÍÈÃÅÄÆÆÁ½º±­ª¨¥¥­±°³¸¹·®ª°±®§ª¬®¯¯¯°±±®¯®©¨©«°±°¨Ÿš’‰‚{rpx~z{zxzx}~||ywvuwsqnjjgkkjdWQX_eflnrvxzƒŒŒ‹ˆˆˆŽ’•—”ŽŒ“——ƒ‚‡“šŸŸ•Ž‡‡‘š£°¶¹½ÀÂÁ»¾ÁÅÇÉÈÇÅÀÂÀÆÌÏÍÇĽ·µ¶¹½ÁÄÈÄ»µ²°±°®©¤¡£¦¯½¾½·°°µ·±¨¡žžž™”’‹ŠˆŠ†††½¹µ³³²³±°±µ¸¼¾¾¾½¼¹³®­²¹»µ±¬­­©¬¯®«­¯´·²­««¯¯²³³±­®ªª©¨§©ª¨§¨«®­°³¸¸¹¼ÀÃÄÂÄ¿º·¸·º¾À¼¹¹´±²±¯­§£¡žš•‘Ž”˜ž¤¬°µ¹¼½»¸¶µ³¶µµ¸ÁÅŽ½½¹»ÀÂÂÀÁÄÄÉÈÆÃÀº¹º¿Á½¹»¼»¾¾¾¾À¿»¸·´´¯«¥¡£¬¶»¼½¿ÀÀÂÃÅÆÃÁ¾¾ÁÅÅÍÓÓÎÌÊÇÌÑÒÒÑÐÐËÊÉÇÉÇÉÇËÊÊËËÎÏÍÊÎÏÒÑÑÐÉ¿¹º½¿ÂÉÍÕØÙ×ÓÎÌÈÉËËÍËËÍÌÆ¿º®¥­¹ÄÊÊÌÈÉËËÑÒÐÌÊËÍÎÑÑÍÅÀ¾½ÂÇÅÂÃÇÎ×ÜØÓÐÏÍÏÎÏÏÊÇÈËÍÍÈÃÂÃÄÄÀ¼º¶°­®±²¸µ´¶ºº·´°°²¬§«¯°¯¯°°³®°°±¬¬­°²²¯¢—’‰}tw}{spxƒ‚}{xyyz{}||{zwtuvvslljhhknjeYPTZ_agklpu|†ŒŽŽŠ‡ˆŽ“—˜˜•“’•”Ž‡„Œ“•›ŸŸ–Š„ƒ|‡– §«­°·¹º½ÃÈÌÍÑÑÌÉÆÅÃÇÌÌƽ¹¹¸·¸¾Á¿ºµ´²µ²±®£ ž¡¨°³´°­²¸º¸­¡ž œ—•’Œ‡ƒƒ†……¼¶®««©­±²±´²´¶¸ºº¹·³¯®³¸¶±­ª«¨§«¯¬­­³··²ª«ª®¯®±°®ª«¬««§§¨®®ª¬¯°®®²²³¶º¼ÀÄľ¹¶´µµ·¹¸·¶²®°­§¡œ—š™”Œˆ‰”™£©¯³¶º¼¼º»¸¸µ²µ³¶½ÁÁ¼»½½»¼¿ÀÀÀÃÄÃÆÆÃÀ»´µ¹½Á½º¾¿½¿À¿¾ÁÀ½¹¸µ´³¯§¥¦®µ¸´³µ¸º½¿¿¾¼»»¿ÃÆÈÍÏÑÌËÉËËÎÒÒÏÐÏËËÉÇÇËËÉËÊÈÆÆÊËÉÌÎÓÙÖÔÐËÄÀ¿ÄÉÌÎÒÕ×ÙØÔÐÉÇÊÊÊÌÌËÎÎÈÁ¼´®¶ÁÈÊÉËÊËÌËÎÒÏËÈÉÎÏÐËÅ»¶¸¹¿À¿ÃÇÎÙÚÖÔÐÐÒÐÑÓÖÔÑÐÐÎÌÆÿ¿ÀÀ¼··¸¶²³¸¼½½¹º¿ºµ±¯«ª¥¤¬°°°¯®¯ª©­±³­®°²³µ®Ÿ‘‹…wrt{}xvzƒ†{}{{{{z{|€}yxzzyunhgedijke[PMU]`gnljs|Šˆ‚„ˆ“–—˜–““’ˆ‚ˆ–•—œ“Š††‚…™Ÿž¢¦«²¹½ÂÅÉÌÒÓÓÎÌÊÆÅÊÊÇÁ½»º¹¹¼¿ÂÁÀ¼º¸¸·¸¸µ¯©§¨©­¬®¨©³¸¾¼°£›–šžž››—‘‰ƒ‡ˆ‡»·±¬¨¬®±±±±³´´µ¶¸ºº·¶±²´³¬ª¦¥¥¤¨¯¯®°±µ·²«¨©¬­«¬­¬ª¬«­¬¦¥ª­ª¬­±¯®­¯¯±³¶¹¼¿¿¾¼µ³±²±²´·´´³±°¯¥•”–Š‹‹”š£­¯³³µ¸¹¹¹»½¼¹¸µµ·»¿¾ºº»º¼»½Á¿ÁÅÆÃÂÃÄý·¶»¾À¾¾½¼½À¾¿¿ÀÁ¿¼¹···¶²®°±´²°­«¯´·¼»º¸º»½ÆÈÉÍÍÊÊËÍÐÎÍÏÐÍÎÏÍÌÌÉÉËÎÍËÊÈÇÇÈÊÊÉÑØÛÜØÔÐËÊËÐÓÕÓÔÔÔÕØÔÍÌÉÉÈÄÇÊËÌÌÉÆÅ¿¼¾ÃÆÈÈÊÍÏËÌÌÏÏËËÉÌÎÎǼµ²·ÁÁ¿ÁÄÉÐÔØÕÓÓÔÒÓÐÐÔ××ÔÒÏÎÈÁÀ¼½¼º·¸¸¹¹¹½¼¼º¹»¿º°«¨£¡œŸ©¯¯¬«ª¦¢£§³·²°°¯²®¨™‰†…yuz€~z|‚†„€||yxxy}€}xwxzzxpjgeiilli]VQT]chupow}€‚ˆ‹‰…ƒ†Š“˜—–’ˆ~„‘””–™—’’•˜˜˜Ÿ£¤¤£¢§­³¼ÁÀÃÊÏÒÒÑÏÌÉÈÈÆÄÃÀ¾¾º¿ÄÅÅÆÄÀ½½½º»¾¿¼¶µ²¯¬¬§¡Ÿ¦­±µ®£œ•’˜šš›˜“†„†…„»¹¶²°³µ··¶¶´´µ³µ·¸»º¹¶³²°¬©¦¤¡¤¬°¯¯®°´·±ª¨¦ªª©ª®¬­°¯­¬¦¤¨ª««®²¯¬®«¬­­²¶¹¼¼½¼¶³°¯­®²²±±²°±²§ž—–™—“ŒŽ’—«¶´°±³´µ·¶¸»¼º¸¶¶¹½Á¾»¸»¹¹¹¼½½¿ÄÆ¿ÀÃÆÆÿÀÃÆÇËËÅ¿¿¿¼¾¿ÀÃÁ¿¼¹·¹¸·¶´´µ³²±¯¯²´¶·µ³µ·½ÅÊÌÌÊÄÆËÐÎÏËÎÐÏÎÏÏÏÐÌËÊÊÊÈÆÇÆÇÊËÌÏÓÚÜÞÙÖÑÌÉËÑÕÖÕÒÒÓÖ×ÒÎÌÌËÈÆÉÍÎÏÎÈÇǾÁÂÃÃÄÉÎÐÏÎÌÌÐËÊÈÈÈÈ¿·±²»ÅÆÅÃÂÇËÏÔ×ÕÕ××ÕÓÎÌÒÔÔÓÒÑÍÇÄÂÁÂÁÀ¿½¼¾ÁÃÁ¿¹¸º»¸²ª¥Ÿœ——£ª¬¬ª©¥¤¦­·º¶²®©ª§ “ƒ||~…‰‰ƒ€~‚‚„ƒ€|ztrtw{}yvruzwrjhhjiiig`ZUV_cistt{„Š‹†…‡ˆ”–•“Š~vw‹‘“”““–›¢¦¥¨ª¬«©¦¢¤¯´¾ÃÄÃÉÍÑÏÎÎÍÉÉÈ¿À¼ÀÄÉÍÌÊÇÃÀ¾¼¼¹ÀÇÇÁ¿»¶²®¥œ—› ¦«¯¨Ÿ™““–™›˜˜˜“Œ‡†‚‡»¼»¸¸¹º»»¹¸·¶µ²²´¶¸¸µµ±®­­«§£¥§­¯®®®¯²¶±¬§¥§©§««¬±²²°¯«©¨§©©¯²®©ª­¬¬«­²µ¶·»¹·±¯®®¯³²°°²¯¯®©¢Ÿž Ÿ—‘Œ‹“–œª³³³²¯°²´¶¶·ºº¹¹»ÀÄü¹»º¹¸¹»»½ÅÄÂÂÆÉÈÈÇÇËÐÓÙÖÎÆÄÁ¼¼½ÀÃÿ¹³²°²º¹·¶¶µ¶³¯¯®¯°±±²±¹ÀÆËÌÅÁÁÅËÎÌÌÏÍÏÊÎÏÏÑÌËÉÈÇÅÀÄÇÆËÏÏÐÕÚßÝÙÖÒËÈÌÑÖÕÕÒÒÓÖÓÐÍÍÍÌËÊÍÏÔÓÐÉÅÇ¿¾Á¾ÀÀÆÍÐÑÐËÌËÈÄÃÂÀ¾¹µ´»ÂÏÐÌÇÆËÑÑÕ××ÚÚÚÖÔÏÍÏÕÕÔÒÐÌÅÅÃÄÄÃÄÃÆÂÆÈÉÈÈÆÀ¹¸¼¹µ©¡›–‘•¢ª®¬ª©ª««³¿¾·´°©¦¦ ‘ƒ|}€‰‹†ƒ‚†„†ƒ~{yvwy|‚ƒytvzxupjjikkkhaZUU_eltusy~€‚††††‡ˆŒ“‘Œƒwnl|‡‹‘‘’”–¡§«ª­¬¬­ª¨¦«°¶½ÂÅÆÉÏÐÑÎÍÍÉÊÈÅÀÀ¿½½ÁÅËÍÍÌÊÃÀ¾º¸´¼ÅÊÉÈÅÀ·¶®ž—••¨­¯©¡š—•”—”“•’‹ˆ……‰º¹¹ººº½¼½º¹¶¶²±±´µ¸¶¶²­ª¬®­©§¨©¨ª«ª««¯²¯«©¥¨©¨§§§ª®­±´¯¨©§¤«³³²¬®¯®«¨ª­²²²·¶²°®°±²µµ°®¯­©¨©¥¢£¤¡›”Œ“—¤©®¯±­­°²²³°´¹½¿ÂÆÉÊĽ½À¾½¸´¸º¿ÄÄÅÇËÌÌËÌÍÑÓØÝÝÖÏÊƾ¼½½ÁÄŽ»°¥¥«³º¸¶¸··²®©¦¨¬°²°±´»ÀÇÍÉÀÁÃÇÌÍÎÌÐÊÆÉÌÐÍÊÆÄÀÂÃÀÃÈÈËÐÒÒÑØÚÚÖÖÓÎÌÐÔØ×ÔÓÓÖÖÖÑÑÒÒÒÏÎÐÒÑÓÑÊÄÃÁ½ÁÂÃÀÁÅÍÑÑÍÊÆÿ½¾¼»¹¸¹½ÃÏÚÝ×ÐÌÏÓÓÔØØÙÚÙÕÔÑÐÑÓÔÓÒËÈÅÄÆÉÇÇÆÇÇÇÇÉÇÈÍÌÇ»··¹³©Ÿ™˜•˜£©¯­¬­¬­®¶¾À»¶­¥¢¢ž•…||„’”“’Ž‹‰Œ‹‹‡~|~~„†…}wvz}ysminopplg_UT_hq|{z{|}€€…ˆˆŒŒ‘‘‹‡}pio~‡Š‰ŒŒŽ’š£©ª¬ª­®­­ª¬±¶¸¼ÃÆÉËÍÐÐÎËÉÈÈÈÅÿ¼ÁÁÂÇËÊÊÉÅÀ¾¾¹·³´¾ÆÌËÍÇÁ¼´§™‹•¡¬°¯«¤¡œ—“ŒŠ‰ˆŠ‹¸¶º¹º½»»¹¸··²°¯²·¸¹¹¸µ¯ª«°°ª««§¥¦§§§©­­­«©§¦¨§¦¤¢¥¦ª¯±°«¥¢£ª±µ³°²°¯«§ª¯³±°°²¯¬®±°´¸·³°¬¨¤¤¦¤£¡Ÿ˜—–““’—¢¤¬­«¬±±²®­±·¼ÁÇÊÌÉÆ¿ÂÂÀ¿ºµ¸»½ÃÂÅËÏÓÒÑÏÍÎÑÒ×ÙÖÑÎÉÁ¿¿¿ÂÅü´§¤©²···¶¶¶°ª¨¥¦¨¬­°°´º¼ÂÈÈÃÃÃÅÈÌÎÎÎÈÅÅÉÎËǽ¼ÀÀ¿ÃÈÈËÍÒÑÐÔØÕÔÔÒÏÑÓ×ÚÚÖÕÓÕÕÕÑÕÕÔÒÑÍÏÑÐÐÐÊÆÃÀÀÂÆÉÈÅÈÍÒÐËÅÀ¾¹º½½¼½½ÀÄÊÔáâÞÕÐÓÓÔÔÖÖÕÖÔÒÑÒÏÐÐÐÒÎÇÆÄÅÊÌÌÈÄÈÆÆÄÅÁÅÊÍǼ·¶µ²ªž™ž¡§­°®­­®««³½½¸³¨›™š•†||„‹•—“‘ŒŠ…~}}ƒ‚ƒ„‡ƒ}vuy{zunklnqrojb[Ybmu€€}z|~~}ƒˆ‹‹Š‹ŽŠ†|qlv‚‰ŒŒŒ’– ¥¥£¦©««ª©­³·¹¼ÀÃÈÍÐÎÑÍÊÇÇÈÊÈÅ¿ÀÃÃÈÉÅÁ¿¼»¼»·°®·¾ÈÌÌÊÇ¿¸­¢‘Šš£¨¬¬§¤£›”ŽŒŽŽŠ‹ŒŒ¶´··º¼¹·µ´³³°¯¯²¸¶·¸¸¶²®­³²¬¬©¦¤¤£§¦ª­ª«­®ª¨¨¦¦£Ÿ¡¢§­°¯©¢ ¡¦¬®±¯¯±±­­«°±¯¬­°­«­¯¯´¶µ´±ª¦£¢£¢Ÿ›™•˜šœœ™˜ž¡¦«ª®±±±¬«¯·¼ÀÄÈÌÊÇþ¿¾½º¹¹¼¾¿ÀÃÍÒÖÕÔÎËÇËÌÌÐÏÐÒÍÆÆÅÀÄÅÄÃÁ¼º¯°·º¹·¶µ´®©ª©¨§¨§©®¶¸·º¾ÀÀÁÁ¾ÂÇÌÎËÇÃÂÈÌÌÆ¿¼»½ÀÁÇÉÉÊÎÐÒÑÒÕÔÕÓÐÍÐÓÙÞßÙÖÒÓÒÑÑÕÖÔÏÌÌÏÐÑÑÑÌÉÉÅÄÆËÌÏÍÐÒÏÉþ¼º¸½ÃÆÃÅÅÉÊÏ×áãßÖÑÔÓÓÔÕÕÕÒÎÎÏÑÏÌÌÏÐÌËÈÆÈÉÏÏÊÆÅÆÄÂÿ¼ÃËƽº¸´±©›› ¤©¬²²²¯±¯¬ª°·¶µ®¢–“••’‹‚…ˆ”™—“‘‘Œƒ~||‚„ƒ„‡‡…€yvwxwslkmopoojfdbhsz~€zyz~€{~‡ˆ‰…ˆ‹Šˆ‚wu…’“–šžŸ¡Ÿœ ¥©¨¨©©­¶¹»½½ÃÊÏÓÒÏÏËÉÈÊËÊÈÆÃÄÄÃÅÄÁ½»»¸¸¹·´­©®¶ÀÆÇÈǺ°§‹—šž¥¦¦¦¤ž—ŽŒŠŠŽµ²´¶¹½¹¶³¯°°­®±³³µ²µ·¸´¯²¶¶±­«¥¢¦¥£¥ª«¨«±²°­ª¨¥¤¡¢§ª®°«£Ÿž›Ÿ£¦¨«¬­­®¬©««©§ª¬¬«ª«­¯°¯±­ª¦¡¢¡žœ™—””—œŸŸŸœŸž ¥¦¨«¯¯¬«®®·º¾ÃÇÉÌÈÄ¿¼¹¹¶·½¾¾¿½ÄËÐÔÓÑÍÆÆÈÇÅÉÊÐÑÐÍËÉÄÅÅÄÂÃÄÆľ¾½º¶´´³­©«­©¤¢¡Ÿ¨²³¯®±²º¼»¸»ÁÇÌËÄÀÃÉÍÐÉÃÀ¾ÁÂÅÌÏÍÌÌÏÎÏÏÒÓÓÒÐÌÐÓÖÜÜÙÔÓÐÑÏÏÓÕÐÊÉÅÊÍÎÏÑÑÐÎÌÇËÌÎÏÐÑÎÇÀ·µ¹¹½ÃËÌÍÍÎÏÎÐÖÝáÝØÑÒÔÔÔÓÓÒÏÍÍÐÒÒÎÎÐÑÐÐÎÉÇÈÌÍÌÅÃÅ¿º»ÃÆÀ¼ºµ°¢——¥¬±²°²²±²®ªª´µ±¨Ÿ—“”—”Ž‰Š–˜™”‘‘’Œ€}~„‡ˆ‡ˆŒŒˆƒ|yzxxrnqttrrmkhhhmuz}|xz~~}‚„ƒ‰ŒŠŠ‰„‹”šŸ¢¤£¢¢œš¡§«¬ª«¯³»¿ÁÀ½¿ÇÐÔÔÏÌÍÊÈÊËËÉÊÇÄÅÄÃÄÀ½»·¸··²²¬¨ª²¼¾ÁÂÄû³« ‘Ž“•™ž¢¢¥¦Ÿš‹‹‹Ž‹µ²´¸½½¼·¯¬¬¬¬­°°²±±¯²³³²±²³®«§¤¢¤££¤¦¦¤¨®²±®­©§§¦§¨ª­®¨¡ŸŸœššœ¡¥§©ª©ª§¦¤¥¦§§¨¨¦¨§©ªªª¨¦¢¢¡ ›˜•””“–›œœ™—›Ÿ¡£¤§ª¨¥¨ª¬¶¼ÀÅÈÉÉÇÁÀ»¹··»½ÀÁ¿ÁÉËÍÎÊÄÃÄÈÆÄÉÇÎÒÑÐÍÌÉÅÄÁÀÃÆÈȺº¶´²³³¯ª««¦¡ž™–£«­©«­³·º·º½ÂÆÈÉÂÅÈÐÏÉþ¼¿ÁÈÏÒÐÏÎÏÌÌÍÑÑÒÐÎÎÐÓÐÕÖÓÐÏÎÎÏËÏÓÍËÆÂÂÅÄÄÆÊËÌËËÉÈÉÏÏÐÊÀ¸°µ»»ÁÈÍÎÌÌÌËÉÌÓÖÝÜÙÔÓÓÓÔÓÓÒÐÎÎÑÔÕÓÐÐÓÒÒÎÊÂÃÅÈÄÀÁÅÃÂÃÀ¸¸¾ÃÁ½¼µª›’”ž¦¬°¬§«­¯°­¦¥¯µ´¬Ÿ˜““•”’””‘Œ’—–’Š‚}„ˆŠˆ†…ˆ‹‡~}{wsorvvsppnliimu|€ƒ~z|€€€€|xyˆ‹Œ‹ˆ„€‡–šž¡¢¢¢¡œŸ£«¯¬®²·»ÃÇÇÄÂÁÃÍÓÒÑÎÉÅÃÄÇÈÉÊÈÇÅÃÃþ¼·´¶¸¸µ³®¯²·ÀÀ½Áÿº¶®¦˜”—›œžŸŸ¥¤Ÿœ—’’’‰†´°µ¸¼À»·²­ª¬«®°°¯²²¯±²²°°®«©§¥¢¡£££¤¢£¤¥¬¯¯¯®¬®­©ª«¬¯¯®«¥¦¢œ—™ £¦¦¦¥¥¤¤¤¥§¦¥§¥Ÿ£¦©ª¨ª¨¥£  ž™—’”’’–™™™˜”šž›ž    £¨«µ½ÁÄÈÉÇÄ¿¾¼¼¹»¾ÀÂÃÂÀÂÅÅÈÉÇÆÃÄÆÇÅÊËÎÒÒÐÐÍËÊÆÁÃÃÅÆÅÁ½¶³²²³µ®¨¨©¦¢œ–’›¦­°¬¯´¹½¾¿¿ÃÆÈÉÈÄÇÌÌÇû¸»ÁÇÐÒÐÎÎÎÍËÍÑÑÒÑÐÒÓÕÒÑÒÌÌÎÍËÊÇÉÉÈÅÂÀ¾¾½º¾ÂÆÈÉÊÊÅÊÏÐÎȾ¶¶¹»¾ÁÊÍÍÌÌÉÇÇÈÏÔÙÜÛÖÕÕÕÕ××ÕÓÐÑÎÔ×ÔÑÕÐÏÍÉÄÀ¾½¿»º¿ÂÂÁÁ¾¸¶¼¼º¹»µ«–›¡§­¬¦£©¬¯®«¢ž§³´¦œ—”“”‘’•”’‹ˆŽ•–’‹‹Šƒ~€…Š‡‚|~~‡Šƒ€‚xpprsusnqrmhhls|‚…‚}}‚ƒ‚{vrq{…ŒŒ†‚}}€‡Œ’•™Ÿ   ¡¢¡¦¬®®°·¼¿ÇÈÊÇÇÁÄËÐÑÍÌÅÁ¾¿ÃÇËÌÊÈÅÂÁÀ½¸·µµ¸¹¸´±´»ÂÇÇ¿ÁÁ¼¹´®Ÿš¡¡¡ Ÿ¡¡Ÿœ—–˜”Žˆ„µ³³µ¹¹¹µ³¯«¬®¯²²³µ°­®¯°®©¨¤¥¨§¤¦¦¦¥ª§¦¥¦ª®°²±±°­ª©©«¯´¶³¯«¥žš˜ ¤¥¥¦¥¥§¦¥¨©§¢§¦¢£©®®²³¯«¦¢ ›˜–•““‘”–œšš—˜›œšœšžŸž ¥©¬¸¾ÂÅÊËÊÆÁ¿¾½¼¾¿Á¿ÀÀ¾¾ÂÁÃÅÅÄÇÇÌÍÍÍÓÒÒÐÐÎÐÍÍÇÀ¾ÀÀÃÅÀÁ¾º´³´³²­¬®­¬¦žšœ¢«¹º¹¶¶¸¿ÄÅÆÅÅÉÍÌËÇÊÉÅ¿¿º»ÁÊÑÒÌËÊÍÌÊËÌÏÑÑÓÕÖØÓÑÐÍÌÌÍÍÌÇÃÃÁ¼»¹¸¸¹¸»¾ÂÅÆÉËÊÉÌÏɽ¿¾¾¿¼ÁÊÐÐÑÐÍÊËÍÐÖÖÙÛÖ×ÙØÙÛÚÙØÖÏÐÖØØÕÓÒÌÈÅÁ¾Á¾¾½¹¿Á¿½¿¾·³³·´³¹¸¬¡Ÿ¤¨©§££¬°®«ª›”¤³´§¡œ˜”””“—˜”‘”˜ˆˆŽ‹…‚‹Œ‰xvv€ŒŒ„€zrlmptqprttpjhmrx€ƒ€|ƒƒ}xpmtxƒ‰‰ˆƒ€~‚‡Ž’—˜™ ¡£¨¨¦¤©ª«²º¿ÄÈÊÊÉÊÄÄÈÌÎÎÍÈÈÈËÌÎÐÎÌÈÃÁÁ¼¹¹´³µ¸¹·²°´ºÃÍÉÄ¿ÀÀ¾¾¼·¨ŸŸ¢¥¦¦¡š—š›—–š™“Ž‰²³²±³±²³±­¬®®®²³²±¬§§©¬­¨¦¥¦©©ª©©¦¨©§§¥§©®±´µ±®©¦¤¤¦¬¶·¶±ª¢——™œŸ¢¤¦§¥¤§§§§¢¤¤¡¢¨¬¯¶ºµ²¬¦ —˜—”‘”˜™—“—˜šš™›œ› ¦§¨µ»¿ÁÈÌÍÈÃÀ½¼¹º½¼¼½¿¾¾¿¿ÁÃÄÇËÌÎÑÒÒÔÔÒÏÏÐÍÏÌú·º¼¿À¿¿¿º³±²³²®®±²³±ª¦¨­¶ÀÀÀ½·¸»ÁÆÇÅÃÈÎÑÐÏËÈÄü»½ÁÇÍÎÈÆÆÇÇÇÆÉÌÎÑÓÒÑÓÐÍÏÎÍÌÌÎÎÉÅż¸¸¸¹··¶½ÁÄÅÇÈÇÇÈÉÅÁÂÅĽºÁËÑÕÙÖÑÐÎÏÒÔÕÖØ×ÖØØÙÝÝÛÜ×ÏÏÕÚØÔÔÐÊÃÀ¾¿ÀÀ¿ÂÂÃÃÀ¾¿½·´³³¯¯µ¶®¤ £¨©¨¦£¨±³¯ª¦ ›§·¶®§¡š––““—˜—’‘“™™”†‚Š‡}vpq|Œ‹†}wpknsqpprstokjjkowzxy€}yxqiksv}„ˆ‡…†ƒ€‰Œ‘””–™› §ªª¦¦©¬ª­¸ÀÂÅÇÆÆÇÆÅÈÉËÏÏÏÏÐÕÔÓÒÑÌÇÁÁ¾»¹¹µ¹·¸µ±­®·ÀÊÉÁ½¿ÁÂÀ¾º­ ž £§¤¡›“Ž‘”•”••‘Š„~®²±®°±­®¯¬¬­­®°²¯®¨¡¡¦««¬«ªª«¬¬«¨¤¦¦¦¥¥¤¨ª®±³¯«¨¥¤¢¤©¯³²®¨¢™•––”››¡¥¥¢¡£¥¥¢ ¡ Ÿ  §¬²´±¯ª§¡œ—•“Œ‡ŠŽ’’”™—˜œœ ££¤­²¶¹½ÁÄÇÄÀ½º¸¹»¼¼¼¾ÀÃÃÃÅÅÇÌÌÏÒÒÒÓÒÑÎÎÎÏÎÐÌô³µº»¹··¸µ³°¯°±®²³³·µ°¯­²¸Â¼¶±²¹¼ÀÁÁÈÍÓÓÐÌÈž»»¾ÅÈÇÄÃÃÅÆÂÁÅÊÎÑÑÐÒÏÎÌÏÐÏÌÊËÍÈÇÇÆÁÀ½»¹¶²²¹¿ÁÂÅÆÅÆÆÆÄÁÄÇȽ¼ÁÊÏÕØÜÖÒÒÐÓÔÔÔØÙØØ×ÕÚÜÛÖÖÐÍÕÚÙ××ÓÊÂÀÂÃÁÀÀÃÇËÉþ¼¹··¶³®«²µ¯¨¤§ª«©§¥¬³±­¥¢Ÿž©µ·®¨¡š•”’“–—˜–’•˜””“’Œ…†Šˆ€tnmp|‘‡‚|ysqssrqortuokfebfknnqw{{zztmglqx}ƒ„ƒ…‰…‡Œ’‘“—¡§¨¨¦§¨­ª®´»¾ÂÄÂÂÆÈÆÇÇÊÊÏÑÑÓ×ØÖÔÐÊľÀÀÀ¼¼¹¶º¹¸µ®©ª®¹Ä½¹»¾½¿¼º®Ÿ—™Ÿ¢¥¢œ”’’’‘‘Š‚}¬°°°²²®¬¬ªª¬©©®¯¯®¦žŸ£¦«°¯­¬®°¯­«§¦¦¥£¨§©«ª¯°¯ªª¦¢££¦«­­ª§¤žš—•””›¢¥¥£¤¤£¡ŸŸ›™š˜œ¢©¬©¨§¥£¤ ›˜“Œ‡Š‹Š‹ŽŽ’“˜£¤¦§¤£©­²³¶¼ÀÃƾ¾½½¾¿¿ÀÁÃÈÊÊÉÆÃÇÉËÍÏÏÎÍÉÈÉËËÎÍË¿²¯°¶¹¹´²´±²´°¶¶´µµ³¶¶²°±³¸½ÃÀº²®®°µ»ÁÅÇÌÐÓÒÒÏËÃÁ½¾ÂÄÄÅÅÅÅÇÇÄÀÄÇÊÍÏÐÐÒÏÏÓÓÑÍÍÏÏÎÌÍÊÄÅÄÀ¾·±¶¼ÁÃÄÄÆÅÇÈÄ¿¾ÀÁ½»»ÁÈËÏÖÛÙÕÔÏÑÓÐÒÖÛØØÕÕÛÝÛØÓÏÐ×ÛÜÝÛØÏÇÆÆÅ¿¹¸¼ÇÐÎÇÀ¸´µ³´µ¯¬³´²®®««­ª§©¬²°ª¢¢Ÿ¢ª³·¯§‘Ž‘’•™šš™”‘“’“”‘’Ž‰‰‹‡€smqu…–“‡}zvvtqortututoie_^aeikmuz|tsnilsxz|}‚†Š‰ŒŽ‘‰Œ•¡£¤¡¢§«­®²µ»¿¾»¾ÅÈÄÆÄÆÌÎÒÒÒÖÖ×ÑÏÇ¿¹¼Á¿¾·µ³²´´±®§¥¥²ÁÅÀ¼º·¹ºº¹¯¡™•š£§£Ÿš•‘’ŽŽ‹‡©¬®­¯¯«©ª¨¦§¦¥©­®®¨Ÿ¡£¦©­­ªª«­¬«ª¦¥¤¢¢§¨©ª©ª®­¨¥¤¡¡£¥¦«¬©©§¢ ›—–“šŸ¢¡ ¡¡ ›š˜—––—£¦¡ž¡¡£˜’Ž‰ŒŠ‹’’“”‘•›¥©«ª¦¨«°´´µ¹¿ÃƾÀ¾¿ÁÀÁÃÉÎÒÐÌÄ¿ÁÂÆÈÈÉÉÊÇÆÈÉËÍÎÌÀ²ª­²¶¶´´²´¸¸¶¸º··¶²±³±®±²·»¿¾º²®¯­°¹ÀÄÈÉÊÎÔÕÖÑÉÃÂÁÁÄÆÄÄÆÈÇÄÂÁÁÅÈÇÉÌÐÏÐÑÓÕÒÑÎÏÎÌÍÍËÉÆÇÅ¿ºµ¹ÀÄÇÇÇÇÆÄÅÁ¼´°·¶¹¸¼ÁÄÆÊÕÚÚ×ÓÎÏÐÐÐÔÙÛØÖÕÚÝÜÚÕÐÐÕÙÛÚÛÙÕÏÍÊĸ© ­¿ÏÑÈ»³°®¬®°°­²µ´±¯¬­­«©«®²²«§¦¥¨ª¯²­¤’‹Œ’•™œžžš–“’’“‘Œ‰ˆ†‚}vw€Œ˜—‰~{xyyyroqsqqstpkia\]_cehnqsrqlhlosuyxv{‰‹‹Ž‹†Œ‰Š‘–™˜–›š¡§«­²µ¸¸·¶ºÀÇÇÅÃÅÌÑÔÔÑÕÕÒÐÎƾ¹»¾¾»¹²¯°±²´²®§¥ª·ÁÀ¼»··ºº·±£—“—¡£¢ž—“’“‘ŒŠ†€¨¬ªª¬¬ª«ª§§§¥¤¥¬¬¬©¤£¦§¬«ª©§¬ª¨¨§¦£ŸŸ¤¨¨¨ª©§¨¤¢¡¡Ÿ £¥ª«¬©ª¦¢˜••–ž¡¡Ÿ¡¡™œ›˜””˜™ ¡›•˜šž Ÿž™”‹ŒŠ‰ŠŒ’•’š¥ª®±«®­²¶·²¸¾ÃÇÁ»ÀÁ¾½½¿ÁÇÍÕØØÔÇÀ¿ÂÂÃÁÃÄÆÆÆÇÈÊÍÍÌ¿²©ª¬¯²³´³µº¼¹¹·¶¶¸³±±±±¯±µ¸½¾¹³¯­¬¯µ¾ÇÇÇÈÈÍÕÙÔÎÊÆÇÄÂÃÁ½¿ÂÂÁ»¾¿À¾¿ÁÈÌÍÍÑÒÑÑÑÐÎÌÇÇËÆÇÇÇƽ¹»ÂÈÉËËÈÆÄþ¶­¬±¸»¸¹¾À¿ÈÕÙÚÕÎËÌÌÍÎÏÖÚÛØØÙÜÛ×ÓÑÏÔ××Õ××ÔÒÓÏƵ¤šŸºÊÌǽ²®¬ªª­¬­²²²°¯¬¯­¬¬¬­°°®¬«¬¬«­­© ”’”–—œ¡¢žš”‘Ž‘’‘Œ„€‚{~‡Žš•‹zy€|voprokpromkc\Z\afilmopkhhgiorvst|‡‹‰ˆ…ˆŒŒŽ••–””˜›£©­°¶µµ³³¸ÀÅÅÃÃÇËÑÕ×ÓÓÒÏÎËƾ¹»¾¿¼¶³¯¯°´µµ³­¤¥ª³··´´¸»¹·­¢—’•  œ›™—”““‹Œˆ„€«©©¨««¬±°®¨©¥¦¥§ª©¥¥¦§¨­­«ª¨©¨¤¦¥¢  œ¡¦ª§§¤¦¨¤¢¡ ž¢ ŸŸ¤¨ª«ª¨£˜š–˜Ÿ¡ ¢¡¡ ›œš—•“˜›œœžœ–™œžœœ—“ŽŽŽŠ‡…„‡– ¨­®®¯¯²·¶´¶¼ÃÂÀ¼ÀŽ¹·½ÀÉÏØÝÛ×ÌÃÄÂÃÁÀ¾ÀÂÂÁÃÄÉËÏÊ´¬¨ª«¯¶»»»¾À¼¹·¶¸»·³²³²±¯³·ºº¸²±°±´ºÂÇÆÂÁÃÆÌÖÑÊÊÊÉÄ¿¿¼¹º¼½»»¼»¸¶·½ÃÇËÌÍÏÎÐÑÐÎÈÄÁÃÄÃÄÅÅÅ¿½¿ÄÇËËËËÆÃþµ³±¸½À¼ººº¿ÇÒ×ÖÑÌÉËÎÎÌÍÓÚÜÜÚÚÙÔÔÐÏÑÕØÙÖÔÖÑÐÔÐɺ«£§¸ÆÈƼ´¯­ª¦§¨«²´±±³°­¯®®«¬­®®­®®¬©¨¬¨¡›˜•–•’“šŸ¤ ›”‘–‘Ž‘Œ…~~‚ƒ€ƒ‰—“Š‚zxz}xpopqomoppkjd\[^bilopnnniifinqqpv|†Š†€€‰’’•˜™™˜•™ž¥¬°³¶µµµµ¹ÁÂÄÄÂÅÉÌÏÐÍÍÌÇÅÄ¿»¼¼½¾½¶¹´¶¸»»½»µ§ž¡¦ª¬®²¹¼¼¸¯¤™”šœŸœœŸ›—–““‘Œ‰‡„€©©¨¨ª¬¬°²°¬¨¥¥¤¤¤¤¢£¦¦©ª­¬©§§¦¢¤¤ Ÿ¢ £©­©¥¢¤¦¥££¢ ¢ œ¡¦¨¨§¦¢šœ›šž Ÿ¡¡ Ÿ˜““”––›™œœšž žš–“’ŽŽŒŠ„€ƒˆ‘–”™Ÿ¤§¨ª¬±´µ²³¸¼¾ÀÀÂĹ«®´»ÃÎ×ÙÙÕÎÇÆÄÿ¿À¿º½½ÁÄÆÈŶ®ª¨«³¹¾Á¿ÂÂÀ»º·»¾¹·µ³³³°´·¹¹·³´¸»½¿ÆÅÃÀ¾¼¾ÅÍËÇÈÉÇÁ¾¼»·¶¸º¸¼»µ³±´»ÃÇÉÊÍÌÎÍÓÑÌÇÁ½ÂÂÁ¿ÁÄÄÃÂÂÅÊÈÊÊËÆÄÄ¿¾¼º½ÁÄÀÀ¾½ÁÉÏÐÏÎÌÈÍÑÐÍÍÓØÝÛÜÚ×ÒÎÍÒÔØÙÜÚÖÏËÍÒÒÌÁ¶³¸½ÄÅÀ»³®ª©¢ž¡¨²¶¶·¶²­¬­­«§¦©­­­¬ª¥¦©©¥ ›–—‘–›¡¢š”–”‘’‹€ƒ……‹’†}yxxskmprroqpokg_[Z\`dilllmlifgikmmot|…ˆ…„Œ‘‘”—™˜™™—™Ÿ§±´¶¸·´¶º½¿ÂÄÃÀÃÅÆÇÈÇý¹··¶º½½¾¾½¹¶·º¼¿ÀÁ¿¹­ Ÿ¡§©ª¯¶¿Á»±¨žš  œž›š™•“Œ‹†ƒ}§¨©¨ªª¬°±°­©¥¦¡££¤£¦©¨¦©®®ª¥£¤£¤¤¢¡¡£¦ª­ª¦¢¢¥¥¥££¢ Ÿœ›ž¢¥¥¦¡Ÿœ›žœœ›žœž¡žœ–‘’“”–––™ž ¡¦£ž–Ž’‘Œ‡ƒ…ˆŽ’–›—•šžžŸ¦ª°²°¬­°´ºÂÀÁ¿° £ª³½ÈÎÓÕÓÍÉÇÅÁÁÁÁ¼¸¹»»¿¾ÁÀ»¶®«§«±¼¿¿À¾Á¿¼º¿½»¶µ²²³±´¶·¶··º¾ÃÂÃÇÅ¿¼º¹»ÁÉÈÃÂÉǼ¼»¶´¶·¹»·±¯­²½ÄÊÊÉÌÌÌÏÓÏÉÄÀ½ÂĽº¾ÂÄÅÅÅÇÉÈÉÉÉÅÃÄÃÂÿ¼¼ÂÄÅÊÈÉÏÎÎÌËÊÌÎÐÒÑÏÓ×ÜÛÜØÓÍÉÉÐÕÛßÞÜÔÊÇÉÑÓÏÄÀÃÂÄÃÁ¾¸´­«¦˜œ¥°µ´µ¶±­ª«ª§¡ ¦¬­­«§£¥ª¨©¦¢œ›™”“˜œ Ÿœ–Œ”–––”‘ˆ…†ƒƒ‰ŒŽŽ‡{zwrkoqsqoppmjbUQRV]aehgiiifdcgghhls}…‡‚€‡Ž’’•˜š™™™™¡¦²µµ·µ´·½ÀÃÃÆÃÁÄÅÁÃý¸²²°±·º»½»¹¸´µ¹¼ÀÁ¿À»²«§§ªªª®¶½À¿¸­£ŸŸ žšœœ›™—“‘‹‰†‚|¥¥©©©ª¨«¬¬§§¤¢¢¥§©©¬¯ª§ª¯¯¬¨¤§§§¨¥¥£¢¤«®«¨£¥¤¤¦¦£¡žœ› Ÿ¢¥¦¢ ž˜›››œ›žž Ÿ›—˜”‘•’”––¡¢§§£›“Ž‹””“—•“‰‹”œ£¤£ ¡¢¡¡ª­­«¥§ª¯¹¿À½µ§›ž¦®¶ÀÆÉÍÎÎËÈÅÂÂÂÁÀ»¸¶···µ±²´¯®®¬­µ¸¹º¸¹½Â¾¿¾»µµµ´··µ·¸¹»»¼ÀÅÆÆÇÇÆÀ½¾¾¿ÄÉÆÂÃÄÊÉÃÁ¿¸µ··¶µ°«­­µ¾ÉÎÎÌÌÍÌÏÏÊÅÁ¿ÀÂÀ½º¿ÄÈÈÆÆÅÆÅÆÈÆÂÁÄÆÅ»±¶¿ÇÌÒÔÕÔÑÐÌÊÍÏÏÒÒÓÓÕÙÜÜÙÖÏÉÆÄÊÒÛÞâÞÓÆÃÆÑÕÒËÈÉÌƾ»¼¹²®§—š¢¯²¯¯±®ª©©¨¤™¡«««ª§¤§¥¨¬©¢žœœœ™œžž™’ŠŠ”•šœ—‡ƒ‚}}‚ˆŠ‡…„~yqnrrrnllklf\NJNU]bedegihcacdhgmovƒ…€‚„‹‘””—¡¡¡¢ ¢£¨®³²²³µ¶»ÀÁÂÂÀÁÆÉÅÅÇž¹·³²°±´³°µ³³´·¶º¼¼½¿¼·³³³°®¯¯³¶»½¼²ª§¤ ™•”–’“—ŽŠ‹Šˆˆƒªª­­««©¨©§¦¤¦¥¡£¨©¬­¬©§¨¬±­§¥¥¨¨©¦¥¤£¦ª¬ª¨§¦¦¤¦£ Ÿ˜¡¡£¤¥¤£žœ›š™œ›œžžŸŸ™”“‘’’—™™›¡¢¤£ ™‘‹ŠŽ•–’”›š“‰˜ ¨«©§ª«§¡¡¦¨£Ÿ ¤©¯´·¸²«£› ª­µ»ÁÂÉËÊÊËÉÅÃÁ¾»·´³±°¯­©¬°°°²±³·¸¶·µ¹¾Ã½À»³°°±²¶¹¸¹¹º»»»¿ÂÅÈÊÊÉÅÂÃÃÄÇÉÄÀÀÂÇÉÉÊÈþ»¹·±«¨«±¹ÄÊÏÎÌËÌÊËÊÇÄÄÂÂÃÁ¼¼ÁËÌÊÉÈÄÃÃÄÇÇÃÁÃÃþ¯¡¨·ÅÏÕÚÛÙÒÍÍËÎÑÓÑÑÒÕÙÛÛÚØÐÉÀ»½ÃÍ×ßãßÓ¿ÅÐÓÐÍÉÌÍÈÁ½½¿½³®ª ˜—¡¨©§§ªªª©«ª¤Ÿ•ž¦©¥£Ÿ ¢¢¤©¨ž™šž¢¡›šš™˜”ŒŠ’•—š›šŽ‡ƒ|}…‰Š‡‰…‚ysouxqomkjii^NNOV_bggffkkihjhggmsxƒƒ‹‘•””™¢¥§¨§©§¦¦©ª¨¬°´´¸ºº¸¹¹½ÃÊÈÈÉļ¹¹·´±¯¯¨§«®±µ·¹»¼ÀÂÄÀ½»¹µ¯­®°²±¶½»·±®©¡›•’“•ŽŠŠŠ†€ª®¯¯¯¬¬«ª§¨¦§§¢ ¤¤ª©«¦¥¦©®¬¨¥§¦§¤¥¦£¥©««¬«©©¦¦¤¤¢¢¡ž žž¡¢¢¤¤¤¡Ÿ™™—˜™šœžž™–”Ž‘•š˜™ŸŸ¡  ™’‰„†Ž‘‘™ Ÿ–Š„†Œ” ¨§§§¯±¬£¡¤¡››ž¢¨­°°°¬«¦¢§¬°¶»¾À¿ÄÅÈÊÌÊÇÁ¿¹±®®«ª®­©­¬®°±±´´¶´´µ¹¾ÁÀ½º·±¬®­®±¶·µ¸»º¸·¹»ÀÄÉËÊËËËÅÅž¼·»ÀÈÌÐÑÌÅÁ½¸±©©¯´¼ÅÈÈÊÇÆÈÇÈÈÇÄÇÇÆÈÅÀÀÄÉÉÈÊÊÅÄÃÄÉÆ¿ÂÁÁ¹¬œ´ÅÒ×ÝÜØÒÎÎÏÑÔÔÑÎÒÔØØÙØÖ˾¶²´»ÄÏØáßÓÁ¼¾ÆÌÊÅÆÌÊż¶·½¹´¯«¢›™ £¡ž£¨¦©ª¬¨£ ™ž¥§£žšŸ£¥¡™”—š §§£›—•’–™š™š‘ˆ†‚~~…†„„ƒ€~ztrvwurqrnjieYNMT^`edhkomorutmknu{€‚‹–——– ¤¤¤¤§©©ª«¨¦§®±³³´°¯¯¯´½ÁÄÃÅÀ¼¹»¼»·¶°¨¥¤«¯´¸»¼¾ÂÄÇÄ¿½»³¬§©¯²²³º½¹´³¯¤›—–’‘”‘ŽŠ‹‰ˆ…‚©®¯®®°¯®­¬¨©ª§¥¡££©¬«¨¦¤¦¨©¦§§§¤¥¥¥¥§§«¬­­­ª©¤¤£¤¨§§¥£ Ÿ£¦¨©ª§¤••‘‘•—›œ–’”‘‹Œ’’–™¡¢ œ‘Š‚†Œ“ «©Ÿ…€œ ¡¤©®²²©£¤ š™› §ª­±®®¯«¨««­²¶¸¼¹¸¼ÀÄÉÊÄÄ¿º´³°«©¬®­¬§¤©°±²µ³²­²¶»»¼¹´²°¬««©¬µ··ºº··¸¸¹»¿ÅÆÈÈËÆÃÀ¿½¸¹¹ºÃÇÍÓÔÍÊÃÀº±­¬±¸ÁÆÈÄÄÂÁÃÄÅÈÇÆÉÊÊËÊÇÄÃÆÆÅÇÉÉÃÂÄÈÇÃÂÂþº­š¦¸É×ÛÞßÙÑÏÐÓ×××ÔÑÐÔ×ØØÔÐǶ¯®²¸¿ÅÐÜÜÒ¿²²¸¾ÂÀÂÇ̵²¶¼½¸²¬¤žŸ¥¦¡ ¦ª¨©­¬¥£Ÿž£©ª¦¢Ÿž¡ ¡£œ”‘”š¢©­©£—“““•™™œ™Š†}~‚~‚~}~|uquvstuvtmkl`QFR\acgkmlmrz}~vpsy}€€‚Ž•™š™•š¡¤¡  ¡¦««¬«¨ª®²µ¸´²­­­­¯µ¶¶»»¸º¼¾¾¾¸²ª£¦©­´¹¹½½ÁÂÆľ½½´©¡¦¬±±±¸¹º¹¶®¡˜•”’Ž‰†ˆ…‚€‚¨©ªªªªªª«ªª§©©¥££¥¨««©§¤¤§§¤¦¥¦¥¥¤£¢£¦§«¬­¬­§£¡¡¢¥ª©¥¢ ¡£§«­¬©¤—”Ž’”•’‘”‹ŠŠŠ‘”šœžž™“‹‹’•—¡¯­¢…€…‘š™š¡©­¯«¥¡ššœ£§§¨ª©ªª©¨«¬«¬±µ¶¶³±´¼ÁÂÁÀ¾º¶µ²««°±¯¬©¤ª°µ´³´¯¬¬®®°²°®¬¬¬ª¬­°¶·µ··¶·µ·¶µ¸»»»¼¾½»¸¹·¸¹ººÀÃÉÍÍÌÈÄÁ¼·²°³¸ÂÈÉÅÂÀ¾ÂÃÅÇÇÉÊÍÍÎÎÎËÉÈÆÄÅÉÇÄÂÆÊÈÆÅÄÂÀ¼±©«·ÂÍÑÖ×ÕÐÍÏÔ×ØÖÕÔÓÕÖ×ÕÐËÀ´®²·»¼¿ÉÔÖÑ¿­©¯¶¼¾ÀÄĽ·¶¹À¿»´¬¤¢¤¦¥¡¡§¨©¬­ª¢Ÿž¢£©ª¨£¡¡¥¢ Ÿ–“˜¤¬­©¦ ™˜—–˜š›œœ›•‹…‚z{}y{|zyxy||totvsu{{vnnl_NIPU^cdfjmlox}yroqty|||‚Œ‘‘••”™¡¥¥¢¡¡¤¨«¬ª©¬²¶ºº·´®«¯®®¯¬¨®±²¸»»ÀÁ»³«¦§©­³¸»¼½¾ÁÃÄÁ¾»µª¢¢¨¯­­±²³³³©œ“ŒŒ‹‹ˆ„ƒ„€{zƒ¥¦§§§§§©§¨§©©¯¬©¦£¥©¨§¦¥££¥¢¤¦¥£¤ Ÿž¢£§««ª©¥¡¡¡ ¢¤§¦žšž¡¥«®­§£•Œ‰ŒŽŽ““’ŽŒ—œ™šœ›•’Œ”’•¢ª«ž‹‚…‘›£ž›Ÿ¡¤§¥¥¢œ—™ ¥§§¤¥£¡¤¦§©­­©­²µµ³®¬´¸¼½½¼¹µ´²¬®³µ³²¬«°µµ³³²±¯¬ª¤¦©«ª©©­¬®±¶·¸´µ´µ´³²¯®³´³±³µ¹··¸·»Á¼½¾ÀÂÃÆÈÅÃÃû·³´¸ÂËËÈÆÃÁÅÄÅÇÉÎÍÎËÏÐÐÐÊÈÄÃÄÆÅÄÅÆÊÊÊÈÆÅƾ·³¶º»ÂÉÌÌËÈÈÏÓÖÖÕÖÕÓÔÓÍȺ±¶º¹¼»¸¾ÎÓÑƸ®®µ¸º½½¼»»º¾ÂÀ¼±ª¤¥£¥£ ¢¥ª«¯°©Ÿ–—œ £¦§§¦¤¦¥¡œ–“—œ¢¨­¬©¨¢—˜ œ›œ”Œ‚}{{xwyuwyuuwv|zoisvuxyrnl_QJMSZ_a`fmoox|vmilmqwz}‡Ž’”’“˜ ¥§¦£¢¥©©©¨©¯µºº·µ²®ª¯±±¯ª¥ª®°¸»¼ÀÀ»¶²ª¨¨«±¶º»¸º»ÂÈȾ·®§£§®«¥§§©¬­¦’ŽŽŒ‹†‚…ƒ~~…¦¦¦¥¨§©¨ª§ª¬¯¯°­¥¤¥¤¦¥¤¦¤¢£¥¦§¦¦¢¡œœŸ ¥¦«©§¦¦§£¤£Ÿ¢©¥Ÿ™šœŸ¨­¬¨¥—•Ž””’‘‹‹Š‘–›˜š›šš•Ž’š¥£™Š‡Žœ©§£  Ÿšž¡¡¢£œ•¤§©¤¥¤¡ ¨«¬°¯®¬«¬±²³±®±µ¶¶¶¶µ³²°­®²µ¶²³±²¸¶³´µ´±°«£¤®¯¯ª­¯¯²µ¶¸´µ³´´´±°°¯°²²²´·¶·µ¸º¿ÃÃÀ¿ÂÀ¿ÃÇÇÈÊȼ¶²¹ÂÍÏÎÉÊÇÇÆÄÆËÎÐÌËÍÏÏÍËÆÅÄÃÄÂÁÂÉÊÊÌÌÍËÌÌÇÁ½ºº½½ÁÃÄÄÈÆËÒÒÒÕÕÔÕÐÍÈ¿·²²½Ã¾»·³¹ÍÓÓÌĽ¼»º»º¹»¹º¼ÂÂÀ¹®¥¢¡¡ŸŸžž¢¦ª¯°«Ÿš—œž£¤¦««¨©§¦¡š˜› ¦©««§§¤¡žž ŸŸ›ž™‰wxzxyyvxywwz||wolqsswyytligaXQTTX]^bhnopx‚xqmlknrw„‘’“”‘”Ÿ¦¨ª¦¦¨©§§¢¦®²¶»¸²¯ª©¯³²´¯ª¬¯²·»¾¿¾¹¼¸²®ª§«²¶ºº¶¹ÂËÌÈÁ»´ª¥«°®©¨¥¦«®«£›˜˜™”ˆ€‚„…„„†…¦§§¥§¦©©©§¨ª®¯®ª¤¡¢¤¤¤¥¦¢ ¥¦¨¨§¦¥ žŸ¡¥¨ª­¬¦¨®®ª¨¤¤¤¨¥Ÿ˜—™œ¡©¨¥£ ž›—•”•šœ˜’’Œ…„‡‹Ž‘•˜•—˜›œ˜•“‘ŠŒ™ Ÿ•Œ“¤¤¢¡¢¡ž¡£¦£ž—Ÿ¤¨ª¦¤£Ÿ¥¯²²²°­¬¬©©°°°²±´³³¯°°°±°«­±µ³´²´¶·µµ¸½»º¶°¨«°´²¯°²²³··¶²±²²²²±®®¯±°²´µµ³²³¶º¿ÂÀÁÂÁ¾½ÁÆÇËÑÌÆ¿¸¸¼ÄÎÐÏËËÊÇÅÂÅÌÐÐËÉËËËÊÉÈÇÃÿÀÀÅÊËÌÎÎÍÎÏÌÆ¿¼¼¾½¼½ÀÄÇÅÉÎÎÍÎÏÔÓÏÊÅ´ž¦´ÄËø±±ºÎØÕÏËÅÅÄÄ¿ºº¹µµ½ÂÀ¾·­£¡ ŸŸ¡Ÿž¡¦ª­¨ œ™œ¢¦¨«®­«¨¦¨¤ ŸŸ£¥ªª¨¦¥¦£¤ žœ™›—‰ƒ{y|ywyvuuux{}ysnlpqottrmfcdaZXXUWZ]^agjlu~}tpnmmoqv„”””Ž„‹›£¨©ªªª©¨£ ¢¨®´·µ±­¨¦­±³³¯«­®¯µº¼»¸»¿À¼·±ªª°µ¸¶µ¹ÂËÉÆ¿¸²ª­´±¬¬ªª®±®¨¥¡££”‹~~…„††¦¨¦¤¦¦©©¨§¨©­°®ª¢¡¡¥¥¦¦¥¡Ÿ£©¨¦¥¦£Ÿ¢¢£¨ª«««©®´´®ª£¥¥¨¦¡›šš›œ ¡Ÿ §¨¥£›—˜ž¢˜Œˆ„ˆ‘‘’‘’–™—•–”™ž›”Ž‹‘œŸŸ¡¤¨¦¥¥¥§«¨¢ž ¥ªª©¥£¡¦®±®«ª«¯®«§©­­°µ³³°­®®°°±­¬«­­¯³¶¶¸¸¸¼ÀÁÁ¼´ª­³´´°±³´µ·¸´±®­­­®¯­±±°±±³µ´²±³µ»½À¾ÀÃÀ¼»½ÀÃÊÎÍÇÃÁÀÄÉÍËÉÈÈÈÆÂÀÃÉÍÍËÊÆÆÆÅÅÅÆÄÅþÀÀÃÈÈËÎÎÍÑÐÐÉÀ¼¿ÁÀ½¼½¾ÀÀÂÃÅ¿ÄÍÐÐËÀ«•ž¸ÏÔȾ±®»ÒØ×ÒÎÍÍÎÍÅÀ¾¹´³¸½¿º¶®§¤¡¡Ÿ£¤¢ Ÿ£¥¦£œš›ž¥©¬­°¯ª¦§¥¥¤¡¡¥¦ª©ª¦¥£¢ šœ˜“““‹†~||wtrqonprxwwplmnpmqsqld`__[VVTSZ]]\`cfn|ytqnnpsuw„’”’”ˆ}„“ž¤§©©§§¤¡¢£ª®²¯«ª¥¥¬¯±¯ª¥¨®±·¼½»¹½ÂÇÁ¾¸²°²··µµ¼ÃÉÈľ»·±®²²­®­«°²²®ª¨ª¨£™‹{zƒ„ˆŒ©¨¨©¦¨©§¨¨¥©­­¬¨¢¡¢¡¥¥¥¤ Ÿ£¥¨§¨¤£¡¤¤¦¤§¥©«¬±¶´¯¦ž ¤¦ª¥ ¢¢ žŸž¥®³µ±¨£¥¢›”’–š•’Ž’”“‘’““••›ž›–Ž•››¢©¯±°¬©¨©«§¡¢§««¦¤¡Ÿ¢©ª¤¤¥ª¬¬©§¤¤©®²µ´®«««­®°¯¬«ª§«²¹·ºº»¿ÀÃľ·²³·º·³³´¶¹¹·µ®«¨¨©­­¯±³³´´³µ²±³´¸½¿¿¾Âż¹¼½ÀÃÇÇÇÆÉËÌÎÌÈÅÅÈÆÄÀ¿ÀÃÈÈÇŽÀÂÀÀÀÀÂÁÄÂÂÄÃÊÉÍÏÍÑÓÔÏÈÄÃÅÃÀ¿»º¹²µ¸·±¯¸ÄÐÒÌ°¥¨ÂÖÕÏý¶ÁÔÙÖ×ÔÔÔÕÓÍÇýµµ¹¸·²¯«©¥£¡¢§©§£  ¢¢ž™œž¥¨ª¬¯¯­§¥¥¦¥¤¢§«««ªª¢ Ÿœ›—™›•ŠŠˆ‰yxqnnlehkqvxtqonrroqspke`a\XSQNSX]`aaceotrqrutz{€Œ•–•’Œ…†™Ÿ££££¢¢Ÿž¢¥¨¬ª¥¨¤¦¬­«©¦¤«²·½ÀÁÃÁÂÇÈÅÁ¾¹¸º¹º¶¶¾ÅËÉÂÀ¾¼¸³­±°¬«¬ª®±³¯­«­ª¦˜Š{y}ƒ†‹‹ª«¬¨§©©¨§¦¤§¨¨¨§£££¢¢£¢¤  ¢¦©ªª¨¤ ¢£¤¤¢£¦§«®±°¦ž™¤§¨¨££¤¢¡¡¡¤§°º½º°§ ¤¨¥—“””™Ÿ¡›”‘‘“”“‘“““”–™›˜›™’“œž¡Ÿ¤®´³±¬£Ÿ £¢¡¢¤©©§¥¢ ££ ¡¤¦ª®¨¥¡ ¡¨¬¯­¨¦¦¤£¤©¬«ª«¨©²¹¸·¸·¸¹¼¼¼¶¶ºº½¹³´´´··¶²«¨¨¦¨¬­­¯³¶¶²±±¯¯²µ¹½»¾¾ÁÄÁ»º½»¼¾ÄÅÇÊÎÎÎÎÉÇÄÃÅÄÁ½¼»¾ÂÄÅÄ¿º¼¼¼¼»¼¾ÂÃÂÁÀÃÃÈÌÍËÍÏÑÑÍËÊËÇÿº¶²­­¯«§¬³ÃÒÔÎÉ¿´ÀÊÎÏÌÇÄÂÄÓÖÕÕÖÖÕÖÕÏÉþ··¼¹³­­¬¨¤  ¢§ª¦£ ¢¤¥¡›ž¡ž ¤¢¤«°«§¥¦¥¤¤¤§¬¬«­©¤œ™˜—™œ•……†ƒ|wtkdfdaagotvuvsrsoloqnjfc_\YTTRUYbcdbadnplpvwx€…‡‰‘–—–––”‘”—›¡¡ Ÿ  žœž¡¤¥£¢§§«­¬¨¥¤¦­´½¾ÀÄÃÃÃÄÄÃÿ¼¼½»º·¸¾ÄÉÈÄÀ¼¹·²¬ªª¦¦§¨¬­®«§§ª©¥—‡}xw|ƒ‡‰¥©¨£§©§¦¥¦¥¥¥¨¦¦¤¤£¢¢¢¡¡ ž ¦©ªª©¤¡Ÿ¡¤£ž¡¥¤¡¥¦£¡›—ž£¥©§£ ¡££¥ªª­´º¿¿·© ¤§§¢š—–—œ¡¥ ™“‘––••••–—™œ˜—”“˜¡¥¥ ¤°³¯­¦›•˜œ›žŸ£¤¡    ¢ ¤£¡£§¨¨¥ žž£¥¨§£¢¢™›¢§©«¬«®±¶¶´²±®±²³·¶·¸º¹¸´µ´³´µ³®««©¨©«¯¯®°²³²¯°¬°´¶·ºº¾½¿Å¿º¸¹º»½ÃÆÇÈÉÈÅÄÅÂÃÿ»ºº¼¾ÂÃÆž¶¹»¼½½¼¾¾¼¿¼¼ÀÁÆÊËÇÈÉÊËÊËÎËÆÁ¿»µ°®®­­«¬¹ÅÏÐÐÍÊÃÄÃÀ½¾ÃÅÅÆÍÐÑÓÔÒÑÒÒÌÆÀ¹¶¹¼¶¯­°®«¥¡Ÿ¡§ª¦ Ÿ ¥¤¡œŸŸœœ£©¯­§¦¤§§¥¥§©©¨¥¥¡œ™š—•˜š“‹‡„ƒ|wnc[Z\Z^dotvxzzyuojlnlhge_[ZVXYYZbcc``dlmmnyxw€‡‰‹’˜˜šž Ÿ›•’˜ž¡£ ££¡› ¡¡ž¢¨¬«°¯©¦§©«³¸ºº½ÀÀÁ¿À¾½ºº¹¼»¶¶ººÁÇÈÄ¿¹´µ±©£¢  ¡¦¥¤¢   ¤¥£•†|usz‚‡‰‹¦¥¤£¦ª©¤¥¦¦§©«ªª¦¥¢ ¡ž ¢œŸ£¤¥§§¢ž£¤¢ ¡¤¢šœœ›šž£§§¨¥££¢¥­®­¯´¸¾¾·«¢¤¨¦£ž—•™šŸ£–••”••—˜–™—š™•Œ”›¥©¤Ÿ¤¬¯¬¦ –’’™šš›š›˜˜Ÿ¡ŸŸ££¡ŸŸ¢¤¤¥¡›Ÿ££¥¥¦¢ œ¡¦§¬®®®²²°¯«©ª§«­®±±²¶µ¶³·±¯°±±²¯®¯¯¯²²³±²µµ³±±¯±³´´¶¹¼½ÂÅý·¸·¸º¿ÀÀ¿¾½¸»»½¿ÃÁ½½½ÀÁÂÂÄÅÆÀ¹¹»ºº¼¼¼¸·¹¼½ÁÂÆÉÉÇÅÆÇÇÇÍÍËľ¼¹·³¯³³´³¸ÀÄÈËÌÍÊÉÀ·¯©®¼¿ÀÃÈËÏÍÎËÍÐÏÌĽ¶´¹º´¬­³´°«¤¤¥«­¦žŸ  ›™™›š—›¤©®­«¥¦§©©¨¤¤¢ Ÿœ˜••˜•–™’‰†‡„€{tk\TRXX]dovz~€{xplprnkif_ZXWWY[X]bc`^blomtzyy‰—›œž£§¥žŒ”¢¨©ªª«§ œœŸŸžšž««­¯®ª¨¥©­¯³´³·¼ÁÀ¼»¹¸·¶···²²·º½ÃÄÀ»¸´µ²«¥žœ ¤¡˜–™›žŸž’‡}vw}ƒ‡‰„¥¥£¥¦ª¦¥¤¤££¤§©§¤¡¢ ¡Ÿ¡¢›œ¡¤¤££ŸœŸ££¡ ¢¢¢›šž¡ž¢££¥£¤¥¢¢§¬­©©­°¶¶³«¤¤¦¦¤ œœœš›––”˜˜—–••––—˜—’ŽŽŠŽ”š£¤¡¢©§ š˜’Ž˜›š˜™˜“Ž”ž¢ ¡¢¡Ÿ›žŸ ¡¡Ÿ Ÿ¡£¤£¤¨¨§¨¬¯¯¯°¯®¯®¬©§§©¤¥§¨¨«­±³´´µ±««°²±°±²¯°³´³µ´¶¸·²²±³³²³´·»¾ÄÊÆÁ»····¹º´³µ²°±´·¼ÀÁÂÁÂÆÆÅÂÅÆǺº¼»¼»»º¸´·½ÁÅÇÇÈÈÇÈÈÇÈÇÍÎÈ¿º¹¶¶¹º¿¼½¿ÃÄÂÃÃÈÉÍɶ¥«¶¾¾¼¾ÁÅÉÈÈÇÇÉÉÅÀº¶µº·³¬¯µµ±«¤¡¦¬®¥Ÿœœš—–˜™——š £§«§££¦©««¨¤¡˜™š•“”–™•”ŠŠŠ‡„~wh[NPUX`gq{€…‡…€ztlosplie]WVWXTXW[\\\[_llksywz‚Š’˜œœžŸ£¡˜Šˆ‘Ÿ«°­¯±®§¡ ¡ž™Ÿ«¯­­­ª§ª®±±´´´¶¸½¾½¸¹··¸¹¶°«©®´¹¾¿½¹¸¶¸²¯¨¤ ¢¥¥¢ž™–™œ›—Ž…}{}„ƒ~¤¤¡¤¨§£¤¤¡¡Ÿšž£¢¢Ÿ    ££š¡£¡£¡Ÿ ¡¢Ÿžžž™––›¡¤¡¤¥¡£¡¡¢££§¨¨¢¢§¬°±®¦£Ÿ ¢¢ Ÿ ›—˜™›˜—˜›š™•––—–š›–Œˆ‰‘—ž¡¡ Ÿ£Ÿ“Œ‹ˆŒ“•“–™–’’£ ¢¢Ÿž›œœŸ¡¢¤£¢Ÿ¢¡¢£¥§ª­¯´µµ²¯­¬©¦¦¦§¦¢¥¥¤¤§©¬¯±³²±©ª®±°±±°¯®°±±±²·¹¶µµµ·¸´µ¸¸ºÀÆËÊƾÀÀ¾¹¹´­¬³²°®­°·¾ÁÃÁÁÄÆÆÆÈÊ̼»¾¼¼½¼¸¶°µ¹ÁÆÉËËÊÆÉÉÅÆÇÏÎǽ¶¶³¶»ÁÂÀÂÇÇÆľÀÅÈÌÉ÷­´»ÀÀ½¾¿ÃÆÆÄÄ¿¼º¸µ¶¹¸´°´·µ¯ª¤¥§¬«¤ žœ š˜˜™—–™žŸ¢§©¤ž¢¨­¬©§£ž™—˜˜”””˜š”‹‹Œ‰†€yl^OHR[aku~‚‡‰‡„}unnqmifa\UUXTRV[_\XVX^dfdlruxŠŽ–š˜š Ÿ–Š‡ž§¬«­²²«¦¤¢›šš ¯°±±°­¯³··¸···¸¸»¾¾»¸¸º½½½²¥ £©´¸»¹·¶µ´±®«§§§¦¨¦¢žž¡ ™“…€~€…ƒ‚|{£¡¤¦§©¤ ¤¢ Ÿ››¢¡Ÿ¢ ¢¡¡¤£Ÿ› ¢£¤£¢¡ ž ž››™˜–””› ¡¤¡¢¢¡ŸŸŸ¡¡¢¤¢žŸ¥¬®¯«¦¢ŸŸ¡Ÿœ›œ˜“™š›˜™—˜–”•”™›ž¡˜“‡‚…‰–œžŸ¡¢š‘Šˆ„€…“–”˜›•šŸ£¡¢¡¡œ¡¢Ÿ¡£¡¤¤  ¢¥£¢¦ªª«¯°±°®ª¨¥ ž  ¤£££§§¦¤¦©«°²´±®¯¯°±¯¯®®¬¬«­®­±¸¸¸º¼º¸¶·¹»¼½ÄÆÆÄÃÇÈÄľ·±®³¶°¯°³¹¿Â¾¾¿ÂÇÈÊÊÎÌÈÀ¾¿¿½»¸·µ¯³»¿ÅÈÈÈÇÉÇÇÄÄÈÎÎÊÀ¹·´µ»À¿ÀÀÃÅÅÀ½»ÂÊÌÊÈÀ¹¼ÁÄÃÀ½ÁÀÂÿÁÀ½¹´´¸¹·¸·²´µµ±­¨¦¦ª®­¨¢¤¢ ¡ ŸŸ¡¢¦§¥¦«¦Ÿœ¡¨«©§¤¤ žšš•”‘’——”Œ‹‹‰„‚|qbXQV[hqy€ƒ‡‰‡€ullkie`a_YWRNRVX]\WRW_dd`gprq{ƒˆ‹Ž”••›ŸŸš“•Ÿ¤§¦©­®©§¨¤š¡¨²¶¶···¹»½½¸·ºº¹½¿ºº¼µ²µ¹¼»³£šš¡­´µ¶µ±®­¬©ª¨ªª¬¬¬©¥£§¦ –‘Š†„……ƒ~ys¢£¤¨©ª£ ¢£¢Ÿ ŸžŸ¢¢¢£¢¡££žŸ¡£¥¤¢  ž™š›—–—•“˜ŸžžŸž  ›ž ŸŸ¡¢Ÿ £©®­¨¦¢¡£¢¡Ÿ™™š–•”˜œ˜™—––—”–šœ¢£¢›“‹†ˆ‡Š’—œ ¡¡œŠ‡‚}‘˜™œ¡ ˜–›¡¢¢¢¡Ÿž¡¤¤¤¤££¤  ¤¥££©­®©©ª««©¦£ž–•–šžŸ ¢¤£¤£¥¨¬®°²±°­®­¬¬«««¬ª««ª¬°¶¹½¿¿»µ³´¹»»¼¿ÂÂÄÆÈÊËľ¸¶¹¹´°³·ºÀÁ»»¾ÂÈÈÉÊËÊÆÂÂÁ¿¿½¹¶¸³·¼ÀÅÆÅÅÅÅÅÅÂÂÅÉÉÅ¿¸·¸»¾À¾º¸»¾¾½º»ÃÊÎÌÍÈÆÈÈÆ¿¾¼½½¼¼½¼¸²°³¸»¸·´°¯±°«¤¢¤¨­²±«¥¤¡¢¤£¡£¤¤¨©ª©¤£¤¡˜š¢©«©£¢¡Ÿœœ˜“‘”‘ŒŒŒŒ‰…}qe^ZYZjw|~†‰‰}phflkfbb]ZSNPRTW[YTTY_fcaiqssv€……‹‘’‘–œ˜—™ž££¢¥©ª¦§¨¦ £©¯´¸¸º¼»½½¼º¶³·¸»¼º¸¶·³¯¬³¸·±¨š”œ¦®±´³°«¨©§¤§©ª¬®°®©¦§£—’ˆ†‡‡ƒ{vrŸ¢£¨ª¦£ ££ ¡Ÿž¡¢¡££¡¡¢ž¢¢¢££¢¢ žš™™˜—˜—˜™šžš¡ žšž žŸŸŸ¡¤ª«¨¦£¡¢¥¦§ ››–‘”–™˜™™˜˜˜˜›ž¡¡Ÿ™•Œˆ‰Š‡‹“š¡¢ š‰†|z‚Ž’—šž ¢Ÿœž££ ¡ ž ¡¤¥§¥££¡¡¤¥¦§«¯°«©«­­§¤£ž˜”˜˜œžž£¡£¢¡£¦ªª©¬¬¬ª«©ª©©«ª¬¬©§¨ª¯´º¼ÁÁ¾¸´·º¹¹¼º½ÁÂÇÈÇÇÃÅÅÀ¿À½ºµ¶¼ÁÄû¹¾ÆÆÇÈÇÃÅÃÁÃÄÀÁ¿»»·¶·»ÀÄÄÄÅÅÅÆÃÁÁÁ¿»¶³´¸¼ÁÃÀ¸µ¹º¼¾¾½ÆÍÏÍÍÌÐÌÊÅÁ»»¿¿½»¼ºº·°­²º»¶°«©§¦¦£™¢¨¯®ª¦£Ÿ¤¦¥¥§«­¯¯¬§¢¡Ÿš—˜ ©ª©¤¡ž™›–’Œ‹Œ““”‘’‹ƒ}pia\X[jx„„ƒˆ‹‰€vmlpneaa`XQLTXYX[YRV\bigekosuvz†ŠŽŽŽ”™œŸžŸ¥¤¤§¬«ª­¯­©©¯µµ¶¸¸¹»¿Á¼»¹¹º¼½¿ºµ³µ¯¬¨®´µµ¯§š¤ª­´³®©ª©§©¨©©©¬­®ª¥£œ•Ž‹‹Š‰ˆ‰ˆ„|rp¡Ÿ¤¤¥¤¡¡¡Ÿœ™š™œ™ ¡¤Ÿž¢ œŸŸž ŸžŸŸž™š™šœšš™›š›šœŸ žš™¡  ¢¢¢£§©¨¦¤ £¦¨§¦¢£¡›“‹••˜ššžœ›™¡¡œ—’‰‡…‰—œœ™”†€xw|†Š—™¡¢ŸŸŸ žž¡ Ÿ ¡£ ŸžœŸ££¨«¬°®©¨¬¬­ª¤¡¢œ›œ›ž¢¥£œ¡¥¦¤¤§©¬©ªªªª«ª­®¨¦¬¯²µº¿ÂÁ¼»¶¸¼»º¼»½ÀÄÆÆÄÂÃÇÇÈÅÃÁ¸¶ºÀÆËżº¾ÃÅÃÄÂÀÁÅÇÆÇÄ¿¾½¼º¶·º¿ÁÄÅÅÇÇÆÆÁ½¾½¹µ³±´¹¾ÃÄÀ¶²³·¿ÂÁ¿ÃÉËÈÈÉËÌÈÁ¼¹¼¿À¾½»º¹·²¯³»¼µ¬©§¥¥¡¢œ˜¤¨¨¤£¢Ÿ¡£££§®µ¶±«¨¤ žžžŸ¤©«ª¥£›šš˜—ŽŒŒ“”’’‘’—€zskb`ZXix€‹‹‹Œ†~wstnf`^\YRNWa_ZZWRU]ejmknrwy|}…‡‹‘‘–›žŸ¡¦¦§¤¢¥§§­²³±¯¯²µ³·¹¹¼À¿¾ÀÀÃÅÃÂĽ¶µ°ª¦¤§­±±²¨¢Ÿ¤«²´²¯ª©«­­±¬ª«ª¬¬ª£¡›“‹ŠŒ‰Ž‰„~tl¢ ¢¢¢  ž —–˜›š—›œ›žž¡¢ œŸžŸžžœœ››™ ›™ššžž¡Ÿœ—–š¡Ÿ £¦¨§£§¨¨¦£Ÿ£¨§¦¦¦¨§¡˜‘—›œŸžŸœ›œ›™¡ ›–‡ƒƒˆ†Ž““’Ž‹…}wty†—šŸ¢£ žž››œ Ÿ¡žœžŸžŸšœ ¡¥¦¨«©¦©ª©ª¨¢£¤ ¢£¥ Ÿ¢¦£Ÿ›š ¤¦¤¢¥ª©ª©«ªªª¬°®««¯±´·¾Âÿ½¹¸¼»º¼»¿ÃÇÇÄÁ¾ÀÅÉÊÈƾ¶µ¸¿ÇÊž¼¿¿À¼¼¼»½ÆÊÌËÇÁ½º½¼¹¸¹¾ÂÅÆÈÈÇÆľº¸¸¶²²´´¹¿ÀÁ¼´¯®´¼¿¼¼ÀÃÄÁÁÀÃÅÁ½¸¹¼¿À¾»¹¸·µ²°³»º±¨§¨¦¤£¢žŸ¡Ÿ¡¢£ŸŸ  Ÿ¢¨³µ®¦¡žš›ž£¥¨«­ª¦¢›™˜–ŠŽŽŽ‘’”–›€yvmhea[gu…Ž‘‘‘‘‰€yssoib_ZYVR[a`]\YUV^ejnoow~ƒ‡‡‰‹‘”˜›ž ¥©¢œ˜–˜¤±²²³±µ´³·¼¿ÁÂÀ¿¿ÂÇÊÈŽµµ®§¡ž¢§«¯®ª¡£¤­´´°­©¨¬°±²¬ª¬¨¨ªª£ž™““Œ“‘ˆ€vn¡¡ŸŸžœžžœ™•—š˜••˜šž ¢ œŸ ŸžŸžœœ›œšžŸš™™™Ÿ¡ž ŸŸš–”˜Ÿ¡¢¦¨§¥¥¨¨¦¤ž¤§¥¦¥¥ª«¨ž•Š–œ  ¡¢¡œ››™ž˜†ƒ††ƒ…‡‹‹Œ†‚|z{ƒŒ–›Ÿ¢¤¡ŸŸŸœœšŸŸ™—šžŸš›˜šž  ¢¢¢¨ª§¤¤£¢¢¢¦§¨¥£¢¦§¤¡œ›¡¦©§©¨¨©©«¬««­­¯®®®®±µ¸¾ÂÃþ¾¹¹¹¹¹¹¾ÄÆÌÉž¼½ÂÆËÉûµ³·¼Á½»¾¿¹´²³³ºÇËÍÍÇÄ¿º»¾¼»»½ÃÄÇÊÊÇź³´µ´²µ´³¶¹¾¾º²­ª°¶¸¹¹¼¼¾º¸¸»º»·¶¹¼¿À½º¸¶µ²³¯³¶¶«žž£££¢¢ ¤¥¢Ÿ ž›››š–š¢ª­©¡›˜””šŸ¦§¬­«¥Ÿ›œ˜˜•ŠŠŒŒŠ‹•”˜˜Žƒ{wonmiehr‚“”’Ž‹ˆ~vpolgc^XXSSUTYZ[^[[]dkoqpu€Ž‘“’ŽŒ‰Œ“—œœ ¡£•‘—¢«±´¶¹¸·µ»¿ÃÆƾ½ÀÅÈÈþ·´³¯©¡Ÿ¢¥©ª¨¢ ¦«°±®«ª©§°³³®«ª¨§¨¨¢ž•–—’‘”””’‹ƒwpžŸžžšœœš˜™šš˜“‘˜™ž›ž¡œž    žžžœžž›™žššš›žš›š—–””˜Ÿ žž£¥¨¥¨©©¦£Ÿ£§¦£¤¤©«ª¡›‘ˆ‘š¡££ ¡œ›šœ™›–‡†‰ˆ†‚ƒ‡Œˆ…‚ƒ‚‚‰’—žžŸ¡¢£¡££¡žœ›š™–™Ÿžœš›–“’–š›¡¦«¬§¤£¥£¢¡¥¨¨¤¦©¨ª¨¥ŸŸ¢§«¬®­«««««­®°¯¯®®¬°­±´º¾Á¿¿½¹¹¹º¹º¼ÅÌÌÌÊľ¼¾ÄÆÄ¿·°°²´¶½¾ºº¾¼µ°­°±¸ÄÊÉÊÊÄ¿ºº¾¹¸¹½¾ÁÄÇÈÆÿ¶±²³´´´²³²¶¸½¼¹°¯³µµ¸º¸¹¹µ²¶¸¸·¶´¸¼ÁÁ¿½¹¶´µµµ¶´²¥–—Ÿ žŸ¢¦§£žœššœ››š˜•–§¨£š—”‘”›¡£¨§©¨£š—šš™–‘Š‹ŒŠŒŽ••“”‚~}tssojpuƒŽ••“Ž‹‡~wsple_ZWWVPEBGOW^][^agqtst~Œ•—•””ŽˆŠŒ”œŸ š—’•˜ž©°±³µ¹º·¶¹ÀÃÇÇÄÀ½¾ÄÇÆ»´´³¯©¥ žž ¤¨¨¡ ¤¨¬¬©«ª§§¬²°©¤¨¤¥¥¥Ÿ›–’–“”—•”“ŠƒwnžžžŸŸ››››™š™š˜–”™™œž›™šžžžŸŸœœžžŸœšž™—–—œ›—•”’”šŸ ž ¢¥§ª­­¨¥¢¤§£¡ ¢¥ª¨¡œ—™ ¡  žš›žšš˜–˜˜’‹Šˆˆ‹ŽŒ†‡ˆ‡…Š•—š ¡¢¢£¤¥¢Ÿ ›š›™›œ•—“ŒŽ‘”›£¤ª±¯©££¢ Ÿž£¥¦§©­¬ª¨§¤¡£¦ª¬®­¬ªª¬¬¬°°®¬­­®®¬­°¶¹½¾¼¼º»¼ÀÀ¿¿ÈËËÎÌŽ¼º¾¾¾ºµ°¯±°²µ¹¶·º¹µ°®°²¹ÃÆÅÉÉľº»º¸·¹¼½»¿ÁÂÀ¾¹¶³³´¶¶µµ²²³·¹½¹µ²¶¸···¶³´²²´¶º¹´µ·¼¾¿¾º·²´··¸µ²­¢™•˜œ™•”›¢£ œ›™—˜›žœš–”—› ¢Ÿ——”•˜£§§¥££¢š”˜š™˜’ŽŒ‹Ž–‘Œƒ~{tttpmry‚Ž’•“Šƒ~wvrkc[VUZYM=7AHQVUVY\coustz†––——”“–ž¡ŸŸ›š™š›ž£­²¯®­­³µ¶¼ÀÂÅÆÇÆÆÄÇÈÅÁÁºµ´¯¨¦¢ŸšŸ¢¦¡¡£¦¨§¦§¨¡Ÿ¦«¨¡œœ›œ›˜•ŽŠŽ‘’‘’‘ŒˆrfŸ¡¡  žš›š›š›šœœš™™–œ›šš™šžŸžš››œœœ˜–’•˜™˜”Ž’™ŸŸžž¢£¦«°¯­©¦§¥¢  ¡¥§¥£¢œ”•šžŸŸž›˜œ›—“”——•”“”“““ŽŒŒŠ‰‰Ž“–œ¡£¤£¦¥¥¢  Ÿ›œ›œ›–ŽŠˆ‰‹§¨ª¯¬¨¡ ¡ Ÿ¤§¦ª¬³°«ª«¨¤§©«­¯¯­¬¬­­­­¯¬ª«¬¯­®®°´¸»¾¼¼¼¾ÁÇÇÁÂÉËÊÍÊƾ¹µ¸¹¹º¹·¹»·³´¸·µ·º¸´±³¶º¿ÂÀÅÆþº¼º··¹»»º»¼½¼¹·µµ·¸¸¹µ¶µ³³±³¸¸´³µ¶µ²´²¯°°±³¶¸»¶¶¹½¿¾º³°¬¬³µ¶±«§ ›šœ—“ŒŒŽ œ™–’’“–š˜”–™˜œ›œ™•˜œ¡¥¨¬¨£¡Ÿ›•–™š—ŽŠŒŽ“’Œ„~yusqmjqu‚‰”“ˆxssqhb\Y\\XPA4FV_jnrs~…’”–˜š™›œ˜—•–—š–‘’”‘“–™š˜›¦±¸¹¸·¶³¶¹ÀÆÄÄÆÇÇÅ¿¶²µº¸®ž™››™˜˜˜ž¡¥¥£¢§«¥ ˜—š——™šœ›–“Š‚…ˆˆ„{vx”—™š™š˜ž›œšœž¢¢¢Ÿœ›œœœ›™  žžžœš˜œ›—’‘‘‘”•“’•”–š—“•““–—šŸ›š™™››šš £¤¤£   Ÿš•“’“‘–šš”“’–•‘’•–—•““’“—™™™˜–’Ž’’”••”’‘“•—˜œŸž ¡ž™˜–•šž ›•˜ ¤¥¥¢ŸŸŸš——›ž£¤¤¦¨¨¦¥¦¤¡ ž £¦¨«ª¥£¢£¥¤¥§©ª­°¯±´¹º¹µ²µ¶ººµ²²°ª©®µ½ÅÍÍËËËÊÆ¿½¾¿¾»µ­©§£¦ª­¯±¸½½º»ºµ´³±±°±¯°²µ¶¶¶·¶µ°ª©¦§¦¥¡¤¤¨©¦ª­°´¶³®©©©©ª««­«§§¦¦§«¬ªª¦¥¡¤¡£¤¢›“Ž…{rkmmozŠ’–•‘’—œž¦°²­§Ÿš—‘Œ‹–œ¡¦«­©¤ž Ÿ‘€ojlmknu|ƒŽ‘”œŸ˜‘‹ˆ„}zzuty‚‚…‡…‚‚}rmopf`^]XQE1.=CLXbkmor|†–š™›˜™–•”’ŽŽ‘“•‘ŽŽ‹‘˜ ¡¥«´ºº´®¬¨ª°·¾¿¿ÂÇÅýµ°µº¹®žš›™–••˜œž¡¥¡Ÿ¢¥¢–˜›™˜š›››–‘‰~„‡„€}}xv““”—–š ¤¤Ÿœœ £¦¥¡žš››œ™ŸŸŸœš™—š›–‘Ž‘””“’‘’‘–˜–•’”––˜›œœœž™˜™œ››œ¤¨ª¬©¤£¡žœ™”’–›–‘‘‘’“‘“’”“––™š—ŽŽ‘““””‘“••••™››žŸš’Ž“™š™–œ¤¥¦¦£žŸœ˜’’”—›œŸ¤¤¤¤¥¥ ›œŸ¥¦§¦ š™ž£¥¤¦©¬®¯¯²³¹¸¶°²µ¹¸·¶´°±®«®³ºÁÇÉÊÏÓÎÇÁ»¼½¹¸±©¥£ž¡¤©¬¯¸¾¼¼½¹¸·´²°±°¯°²µ´´³´µ¶°ª¨ª¨©ª¥£¢¡›˜– ª²¹µ¬¦¥¥§©©«©¨¤£¢¢¢¢Ÿ›š   ¢  ¢¡œ”Œƒxqpqty†”—œ™—“’–ž¢¦«­©¤ —Š†‡Ž•™œ¡¦¤¥Ÿ–˜˜—Šthdikqw‡Ž”–˜š™‘ˆ†…}|{yw{€„„€|rmmmga^\WRD4#1ENU^inppu|†‘–—™™š˜—˜˜˜“‹†ˆ‘”•’Œˆ†‹“™£¨ª­²¸¼¸­§¥¤¦«´»¼º½¿¿¿¼·µµ»¼°¢Ÿžœ•’“˜˜œ  žŸ£ ™–›œ™š™™š™˜’ˆƒ…‡„||{yŽ“•—›£¥©¦ ŸŸŸ¢££ Ÿžžœž¡œ›››œ™–•—”’’Ž‘Ž‘‘–™™–”’”””“–•˜™–˜œ›œœŸ§ªª­ª¥  ŸžŸœ–“‘Ž’–•ŠŽ‘‘•”“”“”“’”•˜–‘‘‘’“–––•”•””—›ž ”Š‡‰Š”•—š¡¥§¥¦£žžš’ŽŽ•˜—šŸ£ ¡ ¡¤£ Ÿ¡¢¤¥£ž›šœ¡§¨«­±²±±±¹·¸´®¬²³´³³µ´·ºµ´¶¼¾ÁÀÄÉÐÐÊÅ¿½»·²°ª£¡Ÿ ¤©«¯¹À¾ÁÂÀ¼ºµ±±²±±®°³±®­¯°±³°®­­¬®©¥¤¢œ—•›¥­¸·®¥££¡¥©¦§£ ¡ž ¡ ›–•™›œœŸŸž™’‰wssz…‘ £¡—”—¢¤¥¦£Ÿ•‹…ƒ†”™šžŸ›™–˜–Šymfhqv~ˆŽ”˜›˜š—™‘ˆ‚€}z~}|ƒ‡‡‚|{yz{wmhjhe`ZXSNE9*%*=QTZdmqrtw~…””“”””—šœœ˜‘‘’•˜˜“Œˆ„†’Ÿ¨¯®®°³µ°¨££©®±·½¿º¹½¿¿Á¾¸¹¾¿µ©¤¡›—”‘•—’—žœšŸš–™œš™›˜–™–”‹‰ˆŠ‰‡zzzr‹‰Ž’—–›ž¢¥©¥Ÿœœ žŸœ¡ ŸžŸ¡ž›–™˜˜˜”Ž’ŽŒ‹‘Ž‘’––˜•‘‘’’’’•”“—œœ¡¦¥§¨¥¡ Ÿž›”“ŽŒŠŒ‘Œ‰ŠŠŠ‘–”•”’‘“““”’“““““•”––•”‘‘’—›žŸ–‹ŠŒŽ‘–¡¤££¤¢žš–‘Ž˜š˜š £¡œŸ£¦¦¡ž  ¡££  žŸ£¥§®°³¶µ²³µ¶µ²¬ª¯¯±°±³·»½¿»¹º¿Á¹¸ÂÌÍËÅÀÀ½¹²²«¦£¢¤¥©­±ºÁÃÅž¹³¯¯¯±®¬¬­­­­©­¯®¯¯¯®¬¬©©«©¥žœŸ¡¬¸·®§¤££¤¦¥¢ ŸŸ¡ ¡š–™šš™š››—“‹ywx}†Œ–ž¤©£Ÿ˜–˜¡££Ÿœ˜˜“‰„Œ“•”“’•—š œ“…shhrz‚’˜˜—“’“Œƒ~xux€~ƒ†‡{wyyztlhfgea[WQJF=518HRV\clrnos{‹’’“’˜œž™—™™——™›”Ž†‚ƒŸ§®¯¬¬®°«¤¢ª±·¼¿Ä½·»¾Áÿ¾Áù®¤˜•—™™˜“—™–•›žœš—™›˜˜™˜™š˜““ŽŒŽŒ‡}vvto‡ŠŽ“—˜˜›¢£™šœœžœœžœž   Ÿ ¡ ™”‘••”‹Š‹‹Œ‹‹ŒŽ‘’––—“’‘’“‘“’‘”™žž›œŸž £¦§¥¢ Ÿž›™—“ŽŒ‡‡†‡†‡‡‰Œ‹ŽŽŽ“‘“’ŽŽŽ’“”••““““’’’’Œ”˜œž›˜’‘“”“Ž•œŸ ž¡¢ž žš“‘‘˜ŸŸž ¡š—œž¤£ŸŸŸž¢¢¤¤£¢¤¦¬°²´´²®±´µ²²¬©«­­­®­°¶¹¼º·ºÀ¼µ»ÃÉÈÿ¿¿ºµ³¯ª¦¤¥¥§ª±ºÁÁÆÄÀº´´®®¯­ª¦ª«ª­­««­¬ªª©¨¨¨ª®­«¨¤¡¢¢«·¶¯©¥¤¤¤¤£ŸžŸ žŸž¡Ÿž™›››™››š—‘‘Ž‡~z}„–ž£¦¡›™”˜œ¢¤¡˜—–„}}‰Ž‰‚‚ˆŒ•œ¤§¤™‹xknu~‡Œ–•‘Œˆ€|vpv€ƒ††„}z}ywrmhffgb[TQLID<8;JSTZclromvw~ˆ‘Œ“›žœœž›™˜™–Š‚|€ŽŸ¦®±¯®­­¬¦©¯·½ÂÃÆý¹¹º¾ÀÂÁÁÀÀ¸¬£š—š› ¢žœ›—”“˜žš™™š˜™˜˜š™—”’Œ‹ŒŠ‡{ttss‡Š‘“–––•˜–—˜•™›žŸŸžž žžŸ ¢ ”“’’Ž‡‡ŒŽŽ‘Ž”’“““‘“’”””’Ž’ŽŒ—›Ÿ ›œ››Ÿ¥««§¤¤¤£¤¢œ”ˆ„‰‰ˆ†‰ŽŒŒŒ‹‘’‘’“ŽŽ‘’“‹‘’•™™˜™–˜š™•ŽŒ’š››™œž› ¡›–•“šŸ Ÿ —”“•™ž›› Ÿ£¤¤¥¦¦¦«°³´³±°­°µ´´µ¯ª«ªªªªª«¬¯³³±ºÃÅÀ½¹¾ÂÂÀ¼¾¾º¶µ²­ª§¤¥¡ ©´º»¾½º´´´±®®©¦¦¦¨­­¯­­«¨¥¢£¡¡¥©­­®«§¢ ¡«·µ¯©¤¦§¨¤¤£ž¡Ÿ›žŸ žŸŸžœ››™˜••’”‹„|z†•› Ÿ ˜˜šž¥¥ ž˜•š’‚{~‡‰x}…Œ– §¬ªœ|rv~ƒ†‹‘”“Œ‰~{wy€…‚‚…„‡„~{xutsmojggbZWSOPK=6;KXY[fpsrvyx{‚‹ŽŽ‘‘Ž—žžš›š••’‹†~„” ¦¯³µ²­¯°²¶»¼ÁÃĽ¸·¼ÁÁ¿º·®¤˜—œ¥ª­¬¦£ž—•–˜™—–•”••–“˜™–ŒŠŠ‹ˆƒzrsyv„‡Ž“”–•–”“•——šžŸ ž žžŸŸ Ÿ ŸŸ¢–”’‹ƒ‡Ž’’Ž‘Ž’“‘‘‘‘“’‘“”‘Ž‘’Ž•˜™™™™˜•— £¦¥§©«©§£š“ˆ€„†Š‡‡‰ŒŽŽŽŒŽ‰‰Š‰Œ‹ˆˆ‘’““‘”’“–———˜”˜™–‘ŠŠ‘—™™˜›œœœ¡ ›•’’–˜—––”’’—˜ššž£¤¦¦¥¥§¥¤¨®²°®­¬«¯³²²¶±©©©§¨¨¨§©©­­­µÂÌÌü¾ÃÁ¿»¿½¸µ·¶±«©ª¦Ÿ¤±´´¸¹±°²±¯¯«¦¤¦¥§ª­­±±­§¡Ÿ¢Ÿ¢¨¬«¬¬¨££¤¬·´¯¨¥¥¨ª¦¢¢ž œ›žžŸ¡šš›š˜›–˜—’†~Š•›š›š—˜›Ÿ£££¡ž™–ž”…{„Š‹†ƒ„‰™¡¨¬«‹}xzƒƒ„‰‘—–’‘‘Š‚~~y}~‚†„…‚„€zzvprsqqlifb[VQPRH<9?P`abjrvvxxxx|‚†ˆ•“‘”—šš™—–““Œˆ……„Ž›¥¨¯´´®ª®´¼ÂÃÀÂÆÄĽ·¸¼ÁÂÁÁ»¶±§ š—™Ÿ¨­²³­§¢™“’‘‘““““““‘Œ‹‰ˆˆŠˆƒyrvww‚ˆ‹“”••’‘“™˜›œœœ ¢¥¦¡Ÿ¡Ÿ Ÿ Ÿž›•“‘Š†ŠŽ”””ŽŽ“•““”—’ŽŽ’Œ‘‘‘’”•“•””‘•™¡¢¢¥¥¦¤¡›“Ž‹‹ŒŠŠ‹‘‹‰‰‰‰ˆ‡‡Š‹‹Šˆ‰“•–”‘““”–››œ›™–˜—”ŽˆˆŽ“•š—š››šœ™–”••Œ‹‰ŒŠ‰‹“–™¢¥§§§ª«§¥¦«ª¬­­««°³±°²¯¨©©§§¨¨ª©ª­«­µÂÏÐǽ»Â¼º½¾¹¶¹¸³±­°±ª¥«³¶¶¹·²±¯®®®¬¨¤¦¥¨ª¬«¬¯«¤ž £ž¡¨¬«ª®©¥¥§¯¹´¯©¥¤©ª¦¤£¢Ÿž™—™œšœ œ™›š››™”””’‘‡ƒ…“˜—™š—˜š›žŸŸ ž™šš–†}‡Ž“‘’Ž—¢¨«©Ž~|‚‚~ˆ—š—””‘ˆ~zyz~~‚††‚{{{wsrssomib\]YRPOC;:BO^adjquxxwrru|~†—œ›˜”‡†ˆŠˆ‹ˆ…‚Ž›¦¬¯¶²¯ª¬´ºÂþÀÃÇÈļµ²¸¿¾½º¶´°¬£šœ¢§­°±­¦Ÿœ–‘Œ‘’”””‘’“‹‰††ŠŠˆ€}}|z„‡‹ŠŽ’‘’‘•™–›š™Ÿ¥§¦¢žŸŸŸ¡žŸŸœ—–“““’•”••ŒŒŽŽ’”•˜™›•‹‰’‘““‘’Œ“—šš™š››Ÿ ¡¡™•”’ŽŒŽ‘‘Œˆ…†…†ŠŒŒ’’Œ‰…‹“˜™–––““˜™œ£¢¡Ÿœ›™“‡†ŠŽ“˜ššœ˜˜˜•’“‘“—‰‰…ˆŽŠ‹Ž‘”–¡¡£§¦ª­«§©©ª¬ª­­­±´²°±®§§¨ª««««¬«­°±¼ÉÓÓË¿¼¿Àº¶¼½º·¹¶´²¯µ»µ°°´²²³¶³¯®­¯°°«¦§¨©«©¨ª¨¥ ž¢  §¬«©«ª¦¦®³¸µ¬¤  £ª©§¨¦¤ —”šžŸ›™››˜“Ž’‘ˆŒ‘–”–™˜™šš™˜›ž œ—™’ˆƒ†”–™˜˜Ž•¡§¬ª¡”‹†„ˆˆ…‰—›™˜–Ž‹ƒ}zwy{z…ˆ„~{|}xpoomkic_ZZVPLI@MTYceiov{}}upuxx{„š ¡ž˜‘ˆ|u|ƒ‚…†‚zv|‰“ž¦«°°©¦¨­³½¿¼»¾ÅÉÆ¿²¬¬²´´°°³¶µ®¦£¤¨ª«®±±¬¢¡¡ š›˜˜––“’’‘’“‘‹‹‹‰ˆ‰‰ƒ~}zy‰‹Œ‡‰‰”’ŽŽ”“—˜›››˜˜˜˜–™™›œœŸž›™–—™——”‘Ž‹ˆ‡††‰‰‰‹Œ’—¢¥¢œ•Œ‡‡‹‘–——›š–“ŽŒŒ’’’’‘‘’—šŸŸ›—’‘•””””Œ‰‡‡‹ŽŒŠŒ‹‰Š‹†…‰‹•”Ž’“•™™™–——•–”’Š†……Œ”–›œ™•“““’‘•–™œ™˜—•”•˜“’–™™š ¡¡¥¨§£¡¡ ¢§§¥£§¦§¥§¤¥¦«¬­­«¬«¬±µ¸º½Âý¸¸´´±®°¯¯®°°°¯¯³¸¶µ´±­¯­°°°³³²°®ª¦£¢£¥¥¦¥¥¢ŸŸ¡£¡ £§¨§¥§§§«µºÀ¹­¦Ÿ›¡¦©­¬««£”‹‰‹‘—››—›—“‘ŠŠ‹ŽŠ‰‰‘—š˜˜—˜˜šŸŸœ›Ÿ¤£›”‘Šƒ‰–˜˜¤¬¯¤ž¥ª«ª¤Ÿ•‹‹““•—šš›™”Œˆ‹‰ƒ~{{vx~€{{xnf^\aehf\Z[UKJIAAOW^dfhlrz~€€vpsswz‚ˆ’™›š•’Œ‚‚„†‡…‚|†›£¦©©¦¤¦¬µº¾¾¼¼½Ãü³«ª­°°¯®³µ´­§ ¥©ª¨«²°®¨¥¦§¤¡ ž›™–”””–—“‹†ˆˆ‰‰ŠŠ‚{zvw‰Œ‹ŒŒ’‹–˜—™˜˜˜™š›šššš™š˜š™—–•’”•’ŽŒ‹ŠŒ‰ŠŠŠŒŒ‹ŒŠŒ•œ›š™•“ŽŠŒ•–—››˜”‘’‘‹•–”——”–› ¥¥¤£ž™—˜—™•–”‘Ž‹ŒŽŒ‹‹Š‡……††ƒ‡ŠŽ‘–••”‘”–•••’Ž‹ˆ‡Ž‘“˜š—”–”•“‘“•™››™™••’’–š¡¥¢¢¦¤£žŸ¡££¥¢¤§¥¥§£¤§¨«ª«ª«¨«°¶¶·¹¸¹¶´±®­°««®ª©¬¬¬®©¤§¬³·¶¶¸³³µ²µ³°°­§¦¥¡¢¢¢¤¤¡  ¡ ¢¢ ¢¥¤¤¡¤¥¥©±¶»´®§¥£§ª¬¬­««¥™’“““–š˜›š˜“ŽŽŒŒŽŽŠ—žŸžš›˜›Ÿ¢¥¥£¡¤¥¤˜‹‡„Š”–——™£°µ«¡¡¦©«¨¥ ›••žžžŸœ›˜•’ŒŠ‡ƒzzsv||}|xslc]\`deb_]]UONKGEMT\fiinuz{~zptx{„‡˜—˜—‘Š†…‰ŒŒˆ„‚…Œ•™Ÿ£¦££ ¢ª±·½¿¿º¼¿À»µ¯©ª¯±««¯²®§ œ£©©­³¶´²¬©©¤¢¥¢œœ˜——•™˜‹ŒŽŽŠ‹‹…~zx†ŠŒŒŒŽ‹†‰•™˜•••–˜˜œœ›œ™–˜™—˜“–‘ŒŒŠŒŽ‰‹‹ŒŽŠ†‡‰ˆŒ’“˜žš–Ž•–—•“•’Œ‘“•–——–”š£§¦¥¥¢ŸŸ›˜––”“‘’Œ‹Š‹ŽŽ‹‡††…‚†‡ŠŒŽŽ’’‘‘•—–”‘ŒŽŠŠ‘‘–š˜—•“••–”“–šžœ ¡Ÿ—”“’™¤¥£¡£¤£¢¢¥¤¢¤¢¡£¤¥¦¤¡£¦¨©©ªªª§ª¯´·¸·¶µ´±­­°±°¯­«ª¬¬¬©£¥´¹»¾»¶µ·µµ¶³°¬¨§§£  ¡£¢¡Ÿ   ¢¡¡ž ¢¡¢¡¡¢¦¨®°®¨©¬­«®­®«¨¨¤š—šœšš—™›™•‘ŒŒ‘—›Ÿ š›œ ¥ª««¦¥©«¤—‡„†Ž–™š™— ¬´¬£¢¨©¨¦¢¡Ÿšœ§¥¢¢¡š—”ŒŽŽŒŠ…||{uyyz{|yrlf`\]adc`^\\SLMJDCKS[hlnpvzz{|xsuw|†‡Ž“–—•Š†‡’‘‰…ƒ‰‘˜™¡¢¤¢¡Ÿ£©²ºÁ¿»¹¼½º´¯¬ª®®®«ªª§Ÿ˜•™¢ª®±¶¸º·²®¨ ¢¥ ™˜™˜•–›¡—‘’”“Š‹Šˆ‚|x†ˆ‹ŽŒ‡‡••””””•—™››˜•’’”˜–˜”’Š‰†ŠŒŠ‹Ž‡‰‹‹ŽŠƒ„………‡‰“œœ–‘ŽŒ‹ŒŽ‘’‘•“ŽŒ‘’“•—˜””–¤¤£¡¡  žœ›˜––““‘‹‰‡‰Ž’’‘Ž‹‰‡‡†‚…„…‰ŠŒŒŒŒ‹Ž‘™š˜–“ŽŠ‰ˆ’‘‘•™–—•–šŸŸšššœœœžžŸ›—–“™ £ Ÿ£¤¥©«¬©£¢¡¡¦¥¦¥¤¡¢¤¥¦¨©«¨¨«°³²´´³²±®­­°±±°®­¬®®®©¥ ¡«·½¾¾½¹»¹¹¹´±¬«¦¦§£ ž ££¢£¡¡¢¡¡¢žžŸ£¢¡¡£§¨ª¬¨¤§®´²®¬­«¦¦¤™šœ–––•”‘ŒŽ”˜–’Œ‘“˜ž¡¡™˜¡¦°²¯«¨«ª£•ˆ‚„‰“œ  œ¡©´¬¦¥¦©©¦¡¡šŸ¦¥£¢ š”’’Ž‹‹…~wvwwtsslfc\^addb___^WLHE@>FR`iorsy}}}~{xxvz€‚„Œ””’‰†ˆŽ’“Ž†ˆ“˜ž¡££¢žŸž¤«³º»·´µ¹»º¶°­««­¯¯¬¥œ•”˜žª¬±´´¶¶²¬©¡¢¥Ÿ˜˜–˜—šŸ  ™”•—–“ŒŠŠŠ†~zˆŒŒŽ‹„€ƒ“’’’”–”–—˜š•’‹•˜–•‘Œ‹‹‹‰ŠŽŒ‡ŠŒŒ‘”’‰…‡……‡‡ˆ‘”—–’ŒŒ‹Œ‘”‘ŒŽ’‘’–•“”•—›œ›šœœ››™™˜˜—’“ŽŠ…‡’’“ŽŠ…‡………„ˆ‰ŒŠˆ‰‰ŽŽ’–›žžš–‘Œ††‘••”––”–šŸ¥ª¦¤žœœ›š››šœœ™š˜••–œŸŸž¡¤¨°µ´­¥¡  ¥§¥£¥¤¥ª©§ª«¬¬ª®³¯­®±¯­¬­¯¬¯¯®­­¬¯±´³±®®°·¾À¼¹¼¹·º¸µ²­©ª¥¥¨¦£¢£¡¤¢£££¡££¢šž¡¡¢¢¤¨ª««§¡¤«²±¬©«©¤£¢ž˜›žš™–”’’ŒŠŽ•  š”’””›Ÿ¢¡œœ˜•ž¨²¹µ¯«¨£Ÿ‘{€ˆ˜£©¦£Ÿ¡©­®¨¥§©©§£¡ž £¤¢ ”Ž‘“ŒŽ“’Žˆƒyvuspnlgca__cbda`aba\RF?=;BN\jqruz|zwz|}}|}}‚‹”‹ˆˆ‰Ž‰}{…—›  Ÿ¡ž ¡¡ ¤ª²·´®²º¾ÀÁ»²­­±´¶°¥™•–œ¡¥©ª©­®«ª¨¤¤¦ ˜•’”˜š £Ÿ›”’–˜•‹‰‰†{ŒŒ‹Œ‹Š†‚„‰‘’“””–˜›”Œ‹‡Œ“–—˜•’‘Œ‰‰ŒŒ‰‹Ž’”’ŽŒ‹Œ‹‰‹ŠŒŒ’“”‘‘ŽŒŽ‹‰‹Œ“–•’‹Ž’’““’’”•••”–––––—š››˜—“Ž„†‹Œ‹‡‚ƒƒƒ„†…ŠŒŒ‰Šˆˆ‹ŽŽ‘“–šžš˜–”Š‰‘“’‘’”’”˜¤¨¦¤¤¢Ÿ›˜™™šœ™—•–”••˜žœš §­¯°«£žŸ ¡¤¡ ¡¥¨¬­­¬«®¯°±´±®¯°¯«¨©­¯­ªª«««­°¶¶³´¶º¼¾½·³´±°°°®©¥¦¨£¥§ª£¡ ¤¤£¥¦¥¥¥¥¤ž›Ÿ¢££¦ª¯®­¥¡¡§««¨¨ª¦¢¢¡——›š›™—“‘‰— ¡›–•””™ ¢¢ š˜œ§¶»¸´­¥¡˜Œ€y€›§««¦¡¢¨®¯«¦¦¨©§¢¡¡œž¤¤¢ž™‘‰”•“‘”–‘‹ƒ{vvromjecccceeb_[]`_[TJA=CKR[_celpporx~ƒ‡ˆ†‚€…‡‡‰…ŠŽŒ‰„‚‚†ˆŒ“š ¥¤¡œ™ §¨¤¢¡¦­®²¼¾ÀÈÌÈÀµ­²¶µ²©¢››œ ¡¡¥¤¤¤¡ž¡œ—Ž‰ŒŒŽ‘—š•’‡‚ƒ…„ƒzŽ‹‡‡‰ŒŒ‹“•”–š˜•““Šˆ‰‹”‘Œˆƒƒ‚ˆŽŽŒ’ŒŽŠ‰‘ŽŽ’ŒŽ’˜•Š‰‰‰ˆˆ†ˆ‡ˆˆ‘’““””’“–˜™˜™•“ŽŒŽˆˆ„„„€ƒ…ƒ……€…‰Š‰‹ŠŠ‘Ž‘’ŽŒŠŠ‹Œ“‘Ž‘“”–—˜šœŸ¥¨¬¨¢žžžŸš•“‘’—žŸ™› ¤£¢¡žžž  ¢žš—™œª¬¬¬©¬®°¯±¯®±²³®©©««««§¥©§¨«®®­¬°³³±²´³¯©¢œ£§¥ §©¨¤ž  £¨¦¨§§¨¦¤¡ £¥¨¨«®°°¬¦£¥¥¥¤««¨§¥§£™˜’Ž’””•™š”’“””—œ¤¤¤ œ•™¥®·¶´­¥ œ”—Ÿ¥§©©¦ ¡©´¹°©¤¡¦§¢œšœœ ¤¤¡–”™œš’Š†ŠŒˆ„|vnjheba`cbcc`]WTYYVSNB9;>FLRWX[]ejkjosy€‡ŒŒˆ‡‰Š‰„…ˆŒ‘ŽŒ‹„ƒ…Š’™ ¥ª©©¦¡¦®­¨§¤£¨®´¾ÂÁÂÇƼ´°²¶µ±­©¥¨¨¥¥£¤¥¦¥£ž™”•š›˜‘‡Š‰ŠŒ‘˜œš˜•†||€|w \ No newline at end of file diff --git a/Common/data/lena_512x512_8u.raw b/Common/data/lena_512x512_8u.raw new file mode 100644 index 00000000..b583d34f Binary files /dev/null and b/Common/data/lena_512x512_8u.raw differ diff --git a/Common/helper_cuda.h b/Common/helper_cuda.h index ff803350..41335ba0 100644 --- a/Common/helper_cuda.h +++ b/Common/helper_cuda.h @@ -664,6 +664,7 @@ inline int _ConvertSMVer2Cores(int major, int minor) { {0x72, 64}, {0x75, 64}, {0x80, 64}, + {0x86, 128}, {-1, -1}}; int index = 0; @@ -709,6 +710,7 @@ inline const char* _ConvertSMVer2ArchName(int major, int minor) { {0x72, "Xavier"}, {0x75, "Turing"}, {0x80, "Ampere"}, + {0x86, "Ampere"}, {-1, "Graphics Device"}}; int index = 0; diff --git a/Common/helper_cuda_drvapi.h b/Common/helper_cuda_drvapi.h index 173f9dc9..dfba72a0 100644 --- a/Common/helper_cuda_drvapi.h +++ b/Common/helper_cuda_drvapi.h @@ -33,8 +33,10 @@ #include #include #include +#include +#include +#include -#include #include #ifndef MAX @@ -66,48 +68,22 @@ inline int ftoi(float value) { // These are the inline versions for all of the SDK helper functions inline void __checkCudaErrors(CUresult err, const char *file, const int line) { if (CUDA_SUCCESS != err) { + const char *errorStr = NULL; + cuGetErrorString(err, &errorStr); fprintf(stderr, "checkCudaErrors() Driver API error = %04d \"%s\" from file <%s>, " "line %i.\n", - err, getCudaDrvErrorString(err), file, line); + err, errorStr, file, line); exit(EXIT_FAILURE); } } #endif -#ifdef getLastCudaDrvErrorMsg -#undef getLastCudaDrvErrorMsg -#endif - -#define getLastCudaDrvErrorMsg(msg) \ - __getLastCudaDrvErrorMsg(msg, __FILE__, __LINE__) - -inline void __getLastCudaDrvErrorMsg(const char *msg, const char *file, - const int line) { - CUresult err = cuCtxSynchronize(); - - if (CUDA_SUCCESS != err) { - fprintf(stderr, "getLastCudaDrvErrorMsg -> %s", msg); - fprintf(stderr, - "getLastCudaDrvErrorMsg -> cuCtxSynchronize API error = %04d " - "\"%s\" in file <%s>, line %i.\n", - err, getCudaDrvErrorString(err), file, line); - exit(EXIT_FAILURE); - } -} - // This function wraps the CUDA Driver API into a template function template inline void getCudaAttribute(T *attribute, CUdevice_attribute device_attribute, int device) { - CUresult error_result = - cuDeviceGetAttribute(attribute, device_attribute, device); - - if (error_result != CUDA_SUCCESS) { - printf("cuDeviceGetAttribute returned %d\n-> %s\n", - static_cast(error_result), getCudaDrvErrorString(error_result)); - exit(EXIT_SUCCESS); - } + checkCudaErrors(cuDeviceGetAttribute(attribute, device_attribute, device)); } #endif @@ -135,6 +111,8 @@ inline int _ConvertSMVer2CoresDRV(int major, int minor) { {0x70, 64}, {0x72, 64}, {0x75, 64}, + {0x80, 64}, + {0x86, 128}, {-1, -1}}; int index = 0; @@ -161,11 +139,9 @@ inline int _ConvertSMVer2CoresDRV(int major, int minor) { inline int gpuDeviceInitDRV(int ARGC, const char **ARGV) { int cuDevice = 0; int deviceCount = 0; - CUresult err = cuInit(0); + checkCudaErrors(cuInit(0)); - if (CUDA_SUCCESS == err) { - checkCudaErrors(cuDeviceGetCount(&deviceCount)); - } + checkCudaErrors(cuDeviceGetCount(&deviceCount)); if (deviceCount == 0) { fprintf(stderr, "cudaDeviceInit error: no devices supporting CUDA\n"); @@ -192,7 +168,7 @@ inline int gpuDeviceInitDRV(int ARGC, const char **ARGV) { checkCudaErrors(cuDeviceGet(&cuDevice, dev)); char name[100]; - cuDeviceGetName(name, 100, cuDevice); + checkCudaErrors(cuDeviceGetName(name, 100, cuDevice)); int computeMode; getCudaAttribute(&computeMode, CU_DEVICE_ATTRIBUTE_COMPUTE_MODE, dev); @@ -218,7 +194,6 @@ inline int gpuGetMaxGflopsDeviceIdDRV() { int device_count = 0; int sm_per_multiproc = 0; unsigned long long max_compute_perf = 0; - int best_SM_arch = 0; int major = 0; int minor = 0; int multiProcessorCount; @@ -234,19 +209,6 @@ inline int gpuGetMaxGflopsDeviceIdDRV() { exit(EXIT_FAILURE); } - // Find the best major SM Architecture GPU device - while (current_device < device_count) { - checkCudaErrors(cuDeviceGetAttribute( - &major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, current_device)); - checkCudaErrors(cuDeviceGetAttribute( - &minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, current_device)); - if (major > 0 && major < 9999) { - best_SM_arch = MAX(best_SM_arch, major); - } - - current_device++; - } - // Find the best CUDA capable GPU device current_device = 0; @@ -277,17 +239,8 @@ inline int gpuGetMaxGflopsDeviceIdDRV() { clockRate); if (compute_perf > max_compute_perf) { - // If we find GPU with SM major > 2, search only these - if (best_SM_arch > 2) { - // If our device==dest_SM_arch, choose this, or else pass - if (major == best_SM_arch) { - max_compute_perf = compute_perf; - max_perf_device = current_device; - } - } else { max_compute_perf = compute_perf; max_perf_device = current_device; - } } } else { devices_prohibited++; @@ -414,7 +367,39 @@ inline bool checkCudaCapabilitiesDRV(int major_version, int minor_version, } } #endif +bool inline findFatbinPath(const char *module_file, std::string &module_path, char **argv, std::ostringstream &ostrm) +{ + char *actual_path = sdkFindFilePath(module_file, argv[0]); -// end of CUDA Helper Functions + if (actual_path) + { + module_path = actual_path; + } + else + { + printf("> findModulePath file not found: <%s> \n", module_file); + return false; + } + + if (module_path.empty()) + { + printf("> findModulePath could not find file: <%s> \n", module_file); + return false; + } + else + { + printf("> findModulePath found file at <%s>\n", module_path.c_str()); + if (module_path.rfind("fatbin") != std::string::npos) + { + std::ifstream fileIn(module_path.c_str(), std::ios::binary); + ostrm << fileIn.rdbuf(); + fileIn.close(); + } + return true; + } +} + + // end of CUDA Helper Functions #endif // COMMON_HELPER_CUDA_DRVAPI_H_ + diff --git a/Common/helper_string.h b/Common/helper_string.h index 0566938c..3a0d7d34 100644 --- a/Common/helper_string.h +++ b/Common/helper_string.h @@ -293,6 +293,9 @@ inline char *sdkFindFilePath(const char *filename, "../../../../Samples//data/", // up 4 in tree "../../../Samples//data/", // up 3 in tree "../../Samples//data/", // up 2 in tree + "../../../../Common/data/", // up 4 in tree + "../../../Common/data", // up 3 in tree + "../../Common/data/" // up 2 in tree }; // Extract the executable name diff --git a/Common/nvrtc_helper.h b/Common/nvrtc_helper.h index 92225d76..bf885890 100644 --- a/Common/nvrtc_helper.h +++ b/Common/nvrtc_helper.h @@ -47,8 +47,8 @@ } \ } while (0) -void compileFileToPTX(char *filename, int argc, char **argv, char **ptxResult, - size_t *ptxResultSize, int requiresCGheaders) { +void compileFileToCUBIN(char *filename, int argc, char **argv, char **cubinResult, + size_t *cubinResultSize, int requiresCGheaders) { std::ifstream inputFile(filename, std::ios::in | std::ios::binary | std::ios::ate); @@ -83,9 +83,9 @@ void compileFileToPTX(char *filename, int argc, char **argv, char **ptxResult, &minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, cuDevice)); { - // Compile for the GPU arch on which are going to run cuda kernel. + // Compile cubin for the GPU arch on which are going to run cuda kernel. std::string compileOptions; - compileOptions = "--gpu-architecture=compute_"; + compileOptions = "--gpu-architecture=sm_"; compileParams[numCompileOptions] = reinterpret_cast( malloc(sizeof(char) * (compileOptions.length() + 10))); @@ -158,21 +158,20 @@ void compileFileToPTX(char *filename, int argc, char **argv, char **ptxResult, free(log); NVRTC_SAFE_CALL("nvrtcCompileProgram", res); - // fetch PTX - size_t ptxSize; - NVRTC_SAFE_CALL("nvrtcGetPTXSize", nvrtcGetPTXSize(prog, &ptxSize)); - char *ptx = reinterpret_cast(malloc(sizeof(char) * ptxSize)); - NVRTC_SAFE_CALL("nvrtcGetPTX", nvrtcGetPTX(prog, ptx)); - NVRTC_SAFE_CALL("nvrtcDestroyProgram", nvrtcDestroyProgram(&prog)); - *ptxResult = ptx; - *ptxResultSize = ptxSize; + + size_t codeSize; + NVRTC_SAFE_CALL("nvrtcGetCUBINSize", nvrtcGetCUBINSize(prog, &codeSize)); + char *code = new char[codeSize]; + NVRTC_SAFE_CALL("nvrtcGetCUBIN", nvrtcGetCUBIN(prog, code)); + *cubinResult = code; + *cubinResultSize = codeSize; for (int i = 0; i < numCompileOptions; i++) { free(compileParams[i]); } } -CUmodule loadPTX(char *ptx, int argc, char **argv) { +CUmodule loadCUBIN(char *cubin, int argc, char **argv) { CUmodule module; CUcontext context; int major = 0, minor = 0; @@ -190,11 +189,10 @@ CUmodule loadPTX(char *ptx, int argc, char **argv) { printf("> GPU Device has SM %d.%d compute capability\n", major, minor); checkCudaErrors(cuInit(0)); - checkCudaErrors(cuDeviceGet(&cuDevice, 0)); checkCudaErrors(cuCtxCreate(&context, 0, cuDevice)); - checkCudaErrors(cuModuleLoadDataEx(&module, ptx, 0, 0, 0)); - free(ptx); + checkCudaErrors(cuModuleLoadData(&module, cubin)); + free(cubin); return module; } diff --git a/README.md b/README.md index e7726a99..ab0e00e8 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,20 @@ # CUDA Samples -Samples for CUDA Developers which demonstrates features in CUDA Toolkit. This version supports [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads). +Samples for CUDA Developers which demonstrates features in CUDA Toolkit. This version supports [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads). ## Release Notes This section describes the release notes for the CUDA Samples on GitHub only. +### CUDA 11.1 +* Added `watershedSegmentationNPP`. Demonstrates how to use the NPP watershed segmentation function. +* Added `batchedLabelMarkersAndLabelCompressionNPP`. Demonstrates how to use the NPP label markers generation and label compression functions based on a Union Find (UF) algorithm including both single image and batched image versions. +* Dropped Visual Studio 2012, 2013 support from all the windows supported samples. +* Added kernel performing warp aggregated atomic max in multi buckets using cg::labeled_partition & cg::reduce in `warpAggregatedAtomicsCG`. +* Added extended CG shuffle mechanics to `shfl_scan` sample. +* Added `cudaOpenMP`. Demonstrates how to use OpenMP API to write an application for multiple GPUs. +* Added `simpleZeroCopy`. Demonstrates how to use zero copy, kernels can read and write directly to pinned system memory. + ### CUDA 11.0 * Added `dmmaTensorCoreGemm`. Demonstrates double precision GEMM computation using the Double precision Warp Matrix Multiply and Accumulate (WMMA) API introduced with CUDA 11 in Ampere chip family tensor cores. * Added `bf16TensorCoreGemm`. Demonstrates __nv_bfloat16 (e8m7) GEMM computation using the __nv_bfloat16 WMMA API introduced with CUDA 11 in Ampere chip family tensor cores. @@ -84,7 +93,7 @@ This is the first release of CUDA Samples on GitHub: ### Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. For system requirements and installation instructions of cuda toolkit, please refer to the [Linux Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/), and the [Windows Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html). ### Getting the CUDA Samples @@ -144,31 +153,33 @@ The samples makefiles can take advantage of certain options: **[warpAggregatedAtomicsCG](./Samples/warpAggregatedAtomicsCG)** | **[boxFilterNPP](./Samples/boxFilterNPP)** | **[binaryPartitionCG](./Samples/binaryPartitionCG)** | **[dmmaTensorCoreGemm](./Samples/dmmaTensorCoreGemm)** | ---|---|---|---| **[EGLStream_CUDA_Interop](./Samples/EGLStream_CUDA_Interop)** | **[conjugateGradientMultiBlockCG](./Samples/conjugateGradientMultiBlockCG)** | **[simpleIPC](./Samples/simpleIPC)** | **[memMapIPCDrv](./Samples/memMapIPCDrv)** | -**[vectorAddMMAP](./Samples/vectorAddMMAP)** | **[shfl_scan](./Samples/shfl_scan)** | **[conjugateGradientCudaGraphs](./Samples/conjugateGradientCudaGraphs)** | **[globalToShmemAsyncCopy](./Samples/globalToShmemAsyncCopy)** | -**[nvJPEG](./Samples/nvJPEG)** | **[simpleCudaGraphs](./Samples/simpleCudaGraphs)** | **[deviceQuery](./Samples/deviceQuery)** | **[simpleVoteIntrinsics](./Samples/simpleVoteIntrinsics)** | -**[simpleCUBLASXT](./Samples/simpleCUBLASXT)** | **[simpleAttributes](./Samples/simpleAttributes)** | **[cudaNvSci](./Samples/cudaNvSci)** | **[tf32TensorCoreGemm](./Samples/tf32TensorCoreGemm)** | -**[UnifiedMemoryPerf](./Samples/UnifiedMemoryPerf)** | **[cudaCompressibleMemory](./Samples/cudaCompressibleMemory)** | **[bf16TensorCoreGemm](./Samples/bf16TensorCoreGemm)** | **[cuSolverDn_LinearSolver](./Samples/cuSolverDn_LinearSolver)** | -**[vulkanImageCUDA](./Samples/vulkanImageCUDA)** | **[conjugateGradientMultiDeviceCG](./Samples/conjugateGradientMultiDeviceCG)** | **[matrixMulDrv](./Samples/matrixMulDrv)** | **[cuSolverSp_LinearSolver](./Samples/cuSolverSp_LinearSolver)** | -**[simpleCUFFT](./Samples/simpleCUFFT)** | **[reduction](./Samples/reduction)** | **[nvJPEG_encoder](./Samples/nvJPEG_encoder)** | **[simpleDrvRuntime](./Samples/simpleDrvRuntime)** | -**[MersenneTwisterGP11213](./Samples/MersenneTwisterGP11213)** | **[simpleAWBarrier](./Samples/simpleAWBarrier)** | **[immaTensorCoreGemm](./Samples/immaTensorCoreGemm)** | **[bandwidthTest](./Samples/bandwidthTest)** | -**[concurrentKernels](./Samples/concurrentKernels)** | **[simpleCUBLAS](./Samples/simpleCUBLAS)** | **[NV12toBGRandResize](./Samples/NV12toBGRandResize)** | **[cudaTensorCoreGemm](./Samples/cudaTensorCoreGemm)** | -**[jacobiCudaGraphs](./Samples/jacobiCudaGraphs)** | **[simpleVulkan](./Samples/simpleVulkan)** | **[vectorAdd_nvrtc](./Samples/vectorAdd_nvrtc)** | **[cannyEdgeDetectorNPP](./Samples/cannyEdgeDetectorNPP)** | -**[p2pBandwidthLatencyTest](./Samples/p2pBandwidthLatencyTest)** | **[simpleVulkanMMAP](./Samples/simpleVulkanMMAP)** | **[matrixMul](./Samples/matrixMul)** | **[systemWideAtomics](./Samples/systemWideAtomics)** | +**[vectorAddMMAP](./Samples/vectorAddMMAP)** | **[shfl_scan](./Samples/shfl_scan)** | **[simpleZeroCopy](./Samples/simpleZeroCopy)** | **[conjugateGradientCudaGraphs](./Samples/conjugateGradientCudaGraphs)** | +**[globalToShmemAsyncCopy](./Samples/globalToShmemAsyncCopy)** | **[nvJPEG](./Samples/nvJPEG)** | **[batchedLabelMarkersAndLabelCompressionNPP](./Samples/batchedLabelMarkersAndLabelCompressionNPP)** | **[watershedSegmentationNPP](./Samples/watershedSegmentationNPP)** | +**[simpleCudaGraphs](./Samples/simpleCudaGraphs)** | **[deviceQuery](./Samples/deviceQuery)** | **[simpleVoteIntrinsics](./Samples/simpleVoteIntrinsics)** | **[simpleCUBLASXT](./Samples/simpleCUBLASXT)** | +**[simpleAttributes](./Samples/simpleAttributes)** | **[cudaNvSci](./Samples/cudaNvSci)** | **[tf32TensorCoreGemm](./Samples/tf32TensorCoreGemm)** | **[UnifiedMemoryPerf](./Samples/UnifiedMemoryPerf)** | +**[cudaCompressibleMemory](./Samples/cudaCompressibleMemory)** | **[bf16TensorCoreGemm](./Samples/bf16TensorCoreGemm)** | **[cuSolverDn_LinearSolver](./Samples/cuSolverDn_LinearSolver)** | **[vulkanImageCUDA](./Samples/vulkanImageCUDA)** | +**[conjugateGradientMultiDeviceCG](./Samples/conjugateGradientMultiDeviceCG)** | **[matrixMulDrv](./Samples/matrixMulDrv)** | **[cuSolverSp_LinearSolver](./Samples/cuSolverSp_LinearSolver)** | **[simpleCUFFT](./Samples/simpleCUFFT)** | +**[reduction](./Samples/reduction)** | **[nvJPEG_encoder](./Samples/nvJPEG_encoder)** | **[simpleDrvRuntime](./Samples/simpleDrvRuntime)** | **[MersenneTwisterGP11213](./Samples/MersenneTwisterGP11213)** | +**[simpleAWBarrier](./Samples/simpleAWBarrier)** | **[immaTensorCoreGemm](./Samples/immaTensorCoreGemm)** | **[bandwidthTest](./Samples/bandwidthTest)** | **[concurrentKernels](./Samples/concurrentKernels)** | +**[simpleCUBLAS](./Samples/simpleCUBLAS)** | **[NV12toBGRandResize](./Samples/NV12toBGRandResize)** | **[cudaTensorCoreGemm](./Samples/cudaTensorCoreGemm)** | **[jacobiCudaGraphs](./Samples/jacobiCudaGraphs)** | +**[simpleVulkan](./Samples/simpleVulkan)** | **[vectorAdd_nvrtc](./Samples/vectorAdd_nvrtc)** | **[cannyEdgeDetectorNPP](./Samples/cannyEdgeDetectorNPP)** | **[p2pBandwidthLatencyTest](./Samples/p2pBandwidthLatencyTest)** | +**[simpleVulkanMMAP](./Samples/simpleVulkanMMAP)** | **[cudaOpenMP](./Samples/cudaOpenMP)** | **[matrixMul](./Samples/matrixMul)** | **[systemWideAtomics](./Samples/systemWideAtomics)** | #### Windows **[warpAggregatedAtomicsCG](./Samples/warpAggregatedAtomicsCG)** | **[boxFilterNPP](./Samples/boxFilterNPP)** | **[binaryPartitionCG](./Samples/binaryPartitionCG)** | **[dmmaTensorCoreGemm](./Samples/dmmaTensorCoreGemm)** | ---|---|---|---| **[conjugateGradientMultiBlockCG](./Samples/conjugateGradientMultiBlockCG)** | **[simpleIPC](./Samples/simpleIPC)** | **[memMapIPCDrv](./Samples/memMapIPCDrv)** | **[vectorAddMMAP](./Samples/vectorAddMMAP)** | -**[shfl_scan](./Samples/shfl_scan)** | **[conjugateGradientCudaGraphs](./Samples/conjugateGradientCudaGraphs)** | **[globalToShmemAsyncCopy](./Samples/globalToShmemAsyncCopy)** | **[nvJPEG](./Samples/nvJPEG)** | -**[simpleD3D12](./Samples/simpleD3D12)** | **[simpleCudaGraphs](./Samples/simpleCudaGraphs)** | **[deviceQuery](./Samples/deviceQuery)** | **[simpleVoteIntrinsics](./Samples/simpleVoteIntrinsics)** | -**[simpleCUBLASXT](./Samples/simpleCUBLASXT)** | **[simpleAttributes](./Samples/simpleAttributes)** | **[tf32TensorCoreGemm](./Samples/tf32TensorCoreGemm)** | **[UnifiedMemoryPerf](./Samples/UnifiedMemoryPerf)** | -**[cudaCompressibleMemory](./Samples/cudaCompressibleMemory)** | **[bf16TensorCoreGemm](./Samples/bf16TensorCoreGemm)** | **[cuSolverDn_LinearSolver](./Samples/cuSolverDn_LinearSolver)** | **[vulkanImageCUDA](./Samples/vulkanImageCUDA)** | -**[conjugateGradientMultiDeviceCG](./Samples/conjugateGradientMultiDeviceCG)** | **[matrixMulDrv](./Samples/matrixMulDrv)** | **[cuSolverSp_LinearSolver](./Samples/cuSolverSp_LinearSolver)** | **[simpleCUFFT](./Samples/simpleCUFFT)** | -**[reduction](./Samples/reduction)** | **[nvJPEG_encoder](./Samples/nvJPEG_encoder)** | **[simpleDrvRuntime](./Samples/simpleDrvRuntime)** | **[simpleD3D11](./Samples/simpleD3D11)** | -**[MersenneTwisterGP11213](./Samples/MersenneTwisterGP11213)** | **[simpleAWBarrier](./Samples/simpleAWBarrier)** | **[immaTensorCoreGemm](./Samples/immaTensorCoreGemm)** | **[bandwidthTest](./Samples/bandwidthTest)** | -**[concurrentKernels](./Samples/concurrentKernels)** | **[simpleCUBLAS](./Samples/simpleCUBLAS)** | **[NV12toBGRandResize](./Samples/NV12toBGRandResize)** | **[cudaTensorCoreGemm](./Samples/cudaTensorCoreGemm)** | -**[jacobiCudaGraphs](./Samples/jacobiCudaGraphs)** | **[simpleVulkan](./Samples/simpleVulkan)** | **[vectorAdd_nvrtc](./Samples/vectorAdd_nvrtc)** | **[cannyEdgeDetectorNPP](./Samples/cannyEdgeDetectorNPP)** | -**[p2pBandwidthLatencyTest](./Samples/p2pBandwidthLatencyTest)** | **[simpleVulkanMMAP](./Samples/simpleVulkanMMAP)** | **[matrixMul](./Samples/matrixMul)** | +**[shfl_scan](./Samples/shfl_scan)** | **[simpleZeroCopy](./Samples/simpleZeroCopy)** | **[conjugateGradientCudaGraphs](./Samples/conjugateGradientCudaGraphs)** | **[globalToShmemAsyncCopy](./Samples/globalToShmemAsyncCopy)** | +**[nvJPEG](./Samples/nvJPEG)** | **[batchedLabelMarkersAndLabelCompressionNPP](./Samples/batchedLabelMarkersAndLabelCompressionNPP)** | **[simpleD3D12](./Samples/simpleD3D12)** | **[watershedSegmentationNPP](./Samples/watershedSegmentationNPP)** | +**[simpleCudaGraphs](./Samples/simpleCudaGraphs)** | **[deviceQuery](./Samples/deviceQuery)** | **[simpleVoteIntrinsics](./Samples/simpleVoteIntrinsics)** | **[simpleCUBLASXT](./Samples/simpleCUBLASXT)** | +**[simpleAttributes](./Samples/simpleAttributes)** | **[tf32TensorCoreGemm](./Samples/tf32TensorCoreGemm)** | **[UnifiedMemoryPerf](./Samples/UnifiedMemoryPerf)** | **[cudaCompressibleMemory](./Samples/cudaCompressibleMemory)** | +**[bf16TensorCoreGemm](./Samples/bf16TensorCoreGemm)** | **[cuSolverDn_LinearSolver](./Samples/cuSolverDn_LinearSolver)** | **[vulkanImageCUDA](./Samples/vulkanImageCUDA)** | **[conjugateGradientMultiDeviceCG](./Samples/conjugateGradientMultiDeviceCG)** | +**[matrixMulDrv](./Samples/matrixMulDrv)** | **[cuSolverSp_LinearSolver](./Samples/cuSolverSp_LinearSolver)** | **[simpleCUFFT](./Samples/simpleCUFFT)** | **[reduction](./Samples/reduction)** | +**[nvJPEG_encoder](./Samples/nvJPEG_encoder)** | **[simpleDrvRuntime](./Samples/simpleDrvRuntime)** | **[simpleD3D11](./Samples/simpleD3D11)** | **[MersenneTwisterGP11213](./Samples/MersenneTwisterGP11213)** | +**[simpleAWBarrier](./Samples/simpleAWBarrier)** | **[immaTensorCoreGemm](./Samples/immaTensorCoreGemm)** | **[bandwidthTest](./Samples/bandwidthTest)** | **[concurrentKernels](./Samples/concurrentKernels)** | +**[simpleCUBLAS](./Samples/simpleCUBLAS)** | **[NV12toBGRandResize](./Samples/NV12toBGRandResize)** | **[cudaTensorCoreGemm](./Samples/cudaTensorCoreGemm)** | **[jacobiCudaGraphs](./Samples/jacobiCudaGraphs)** | +**[simpleVulkan](./Samples/simpleVulkan)** | **[vectorAdd_nvrtc](./Samples/vectorAdd_nvrtc)** | **[cannyEdgeDetectorNPP](./Samples/cannyEdgeDetectorNPP)** | **[p2pBandwidthLatencyTest](./Samples/p2pBandwidthLatencyTest)** | +**[simpleVulkanMMAP](./Samples/simpleVulkanMMAP)** | **[cudaOpenMP](./Samples/cudaOpenMP)** | **[matrixMul](./Samples/matrixMul)** | ## Dependencies diff --git a/Samples/EGLStream_CUDA_Interop/NsightEclipse.xml b/Samples/EGLStream_CUDA_Interop/NsightEclipse.xml index 62b856f3..dc2cb3e2 100644 --- a/Samples/EGLStream_CUDA_Interop/NsightEclipse.xml +++ b/Samples/EGLStream_CUDA_Interop/NsightEclipse.xml @@ -59,6 +59,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/EGLStream_CUDA_Interop/README.md b/Samples/EGLStream_CUDA_Interop/README.md index 01fb11ca..477076f2 100644 --- a/Samples/EGLStream_CUDA_Interop/README.md +++ b/Samples/EGLStream_CUDA_Interop/README.md @@ -10,7 +10,7 @@ EGLStreams Interop ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cuDeviceGet, cuDeviceGetAttribute, cuDeviceComputeCapability, cuDeviceGetCount, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2015.vcxproj b/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2015.vcxproj index 695de51f..c3f65059 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2015.vcxproj +++ b/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -102,6 +102,6 @@ - + diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2017.vcxproj b/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2017.vcxproj index 08b4403b..e9236f5a 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2017.vcxproj +++ b/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2019.vcxproj b/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2019.vcxproj index 39c2cd20..b6e08b69 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2019.vcxproj +++ b/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -103,6 +103,6 @@ - + diff --git a/Samples/MersenneTwisterGP11213/NsightEclipse.xml b/Samples/MersenneTwisterGP11213/NsightEclipse.xml index 50ac3a0e..cc2b383b 100644 --- a/Samples/MersenneTwisterGP11213/NsightEclipse.xml +++ b/Samples/MersenneTwisterGP11213/NsightEclipse.xml @@ -45,6 +45,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/MersenneTwisterGP11213/README.md b/Samples/MersenneTwisterGP11213/README.md index efc9a43a..16b392d2 100644 --- a/Samples/MersenneTwisterGP11213/README.md +++ b/Samples/MersenneTwisterGP11213/README.md @@ -10,7 +10,7 @@ CURAND Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/NV12toBGRandResize/Makefile b/Samples/NV12toBGRandResize/Makefile index 90a8e474..e8f03db6 100644 --- a/Samples/NV12toBGRandResize/Makefile +++ b/Samples/NV12toBGRandResize/Makefile @@ -274,9 +274,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2013.sln b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2013.sln deleted file mode 100644 index fe3205a4..00000000 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NV12toBGRandResize", "NV12toBGRandResize_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2013.vcxproj b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2013.vcxproj deleted file mode 100644 index 7d044bd7..00000000 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2013.vcxproj +++ /dev/null @@ -1,112 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - NV12toBGRandResize_vs2013 - NV12toBGRandResize - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/NV12toBGRandResize.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - - - - diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2015.vcxproj b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2015.vcxproj index 8177708a..8407db8e 100644 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2015.vcxproj +++ b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/NV12toBGRandResize.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2017.vcxproj b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2017.vcxproj index 1b1b83f3..d3994c27 100644 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2017.vcxproj +++ b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/NV12toBGRandResize.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -112,6 +112,6 @@ - + diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2019.vcxproj b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2019.vcxproj index 6db0ba9c..f71f92a1 100644 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2019.vcxproj +++ b/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/NV12toBGRandResize.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -108,6 +108,6 @@ - + diff --git a/Samples/NV12toBGRandResize/NsightEclipse.xml b/Samples/NV12toBGRandResize/NsightEclipse.xml index 8d6ec75b..12c23918 100644 --- a/Samples/NV12toBGRandResize/NsightEclipse.xml +++ b/Samples/NV12toBGRandResize/NsightEclipse.xml @@ -42,6 +42,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/NV12toBGRandResize/README.md b/Samples/NV12toBGRandResize/README.md index bcda7ae8..12249901 100644 --- a/Samples/NV12toBGRandResize/README.md +++ b/Samples/NV12toBGRandResize/README.md @@ -10,7 +10,7 @@ Graphics Interop, Image Processing, Video Processing ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaMemcpy2D, cudaMallocManaged ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/UnifiedMemoryPerf/Makefile b/Samples/UnifiedMemoryPerf/Makefile index e1ac47c9..03b5461e 100644 --- a/Samples/UnifiedMemoryPerf/Makefile +++ b/Samples/UnifiedMemoryPerf/Makefile @@ -274,9 +274,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/UnifiedMemoryPerf/README.md b/Samples/UnifiedMemoryPerf/README.md index 0ede1f61..416792c3 100644 --- a/Samples/UnifiedMemoryPerf/README.md +++ b/Samples/UnifiedMemoryPerf/README.md @@ -28,7 +28,7 @@ cudaMallocManaged, cudaStreamAttachMemAsync, cudaMemcpyAsync, cudaMallocHost, cu ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2012.sln b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2012.sln deleted file mode 100644 index 5496720e..00000000 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnifiedMemoryPerf", "UnifiedMemoryPerf_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2013.sln b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2013.sln deleted file mode 100644 index aa0fcdcc..00000000 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnifiedMemoryPerf", "UnifiedMemoryPerf_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2013.vcxproj b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2013.vcxproj deleted file mode 100644 index 24bb15ef..00000000 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2013.vcxproj +++ /dev/null @@ -1,110 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - UnifiedMemoryPerf_vs2013 - UnifiedMemoryPerf - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/UnifiedMemoryPerf.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - - diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2015.vcxproj b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2015.vcxproj index 2f94fad1..8b789f68 100644 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2015.vcxproj +++ b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/UnifiedMemoryPerf.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -105,6 +105,6 @@ - + diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2017.vcxproj b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2017.vcxproj index c6df9656..5704c7a9 100644 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2017.vcxproj +++ b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/UnifiedMemoryPerf.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -110,6 +110,6 @@ - + diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2019.vcxproj b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2019.vcxproj index 92ac82ee..bf1d8bca 100644 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2019.vcxproj +++ b/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/UnifiedMemoryPerf.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -106,6 +106,6 @@ - + diff --git a/Samples/UnifiedMemoryPerf/matrixMultiplyPerf.cu b/Samples/UnifiedMemoryPerf/matrixMultiplyPerf.cu index 8e6df012..00a9e6bc 100644 --- a/Samples/UnifiedMemoryPerf/matrixMultiplyPerf.cu +++ b/Samples/UnifiedMemoryPerf/matrixMultiplyPerf.cu @@ -33,7 +33,7 @@ #define VERIFY_GPU_CORRECTNESS 0 size_t maxSampleSizeInMb = 64; -int numKernelRuns = 100; +int numKernelRuns = 20; int verboseResults = 0; const char *memAllocTypeStr[MEMALLOC_TYPE_COUNT] = { diff --git a/Samples/bandwidthTest/Makefile b/Samples/bandwidthTest/Makefile index 555fe27f..78332244 100644 --- a/Samples/bandwidthTest/Makefile +++ b/Samples/bandwidthTest/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/bandwidthTest/NsightEclipse.xml b/Samples/bandwidthTest/NsightEclipse.xml index 7a584ce8..ed20e3b5 100644 --- a/Samples/bandwidthTest/NsightEclipse.xml +++ b/Samples/bandwidthTest/NsightEclipse.xml @@ -51,6 +51,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/bandwidthTest/README.md b/Samples/bandwidthTest/README.md index fae5ea5a..76c97aca 100644 --- a/Samples/bandwidthTest/README.md +++ b/Samples/bandwidthTest/README.md @@ -10,7 +10,7 @@ CUDA Streams and Events, Performance Strategies ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaSetDevice, cudaHostAlloc, cudaFree, cudaMallocHost, cudaFreeHost, cudaMemcpy ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/bandwidthTest/bandwidthTest_vs2012.sln b/Samples/bandwidthTest/bandwidthTest_vs2012.sln deleted file mode 100644 index 12f46461..00000000 --- a/Samples/bandwidthTest/bandwidthTest_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bandwidthTest", "bandwidthTest_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/bandwidthTest/bandwidthTest_vs2013.sln b/Samples/bandwidthTest/bandwidthTest_vs2013.sln deleted file mode 100644 index 63178742..00000000 --- a/Samples/bandwidthTest/bandwidthTest_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bandwidthTest", "bandwidthTest_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/bandwidthTest/bandwidthTest_vs2015.vcxproj b/Samples/bandwidthTest/bandwidthTest_vs2015.vcxproj index 33f53fa9..56587c35 100644 --- a/Samples/bandwidthTest/bandwidthTest_vs2015.vcxproj +++ b/Samples/bandwidthTest/bandwidthTest_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/bandwidthTest.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/bandwidthTest/bandwidthTest_vs2017.vcxproj b/Samples/bandwidthTest/bandwidthTest_vs2017.vcxproj index 6568794d..14d38d56 100644 --- a/Samples/bandwidthTest/bandwidthTest_vs2017.vcxproj +++ b/Samples/bandwidthTest/bandwidthTest_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/bandwidthTest.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/bandwidthTest/bandwidthTest_vs2019.vcxproj b/Samples/bandwidthTest/bandwidthTest_vs2019.vcxproj index 39712461..4c7b7d2c 100644 --- a/Samples/bandwidthTest/bandwidthTest_vs2019.vcxproj +++ b/Samples/bandwidthTest/bandwidthTest_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/bandwidthTest.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/batchedLabelMarkersAndLabelCompressionNPP/Makefile b/Samples/batchedLabelMarkersAndLabelCompressionNPP/Makefile new file mode 100644 index 00000000..e526d239 --- /dev/null +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/Makefile @@ -0,0 +1,329 @@ +################################################################################ +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################ +# +# Makefile project only supported on Mac OS X and Linux Platforms) +# +################################################################################ + +# Location of the CUDA Toolkit +CUDA_PATH ?= /usr/local/cuda + +############################## +# start deprecated interface # +############################## +ifeq ($(x86_64),1) + $(info WARNING - x86_64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=x86_64 instead) + TARGET_ARCH ?= x86_64 +endif +ifeq ($(ARMv7),1) + $(info WARNING - ARMv7 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=armv7l instead) + TARGET_ARCH ?= armv7l +endif +ifeq ($(aarch64),1) + $(info WARNING - aarch64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=aarch64 instead) + TARGET_ARCH ?= aarch64 +endif +ifeq ($(ppc64le),1) + $(info WARNING - ppc64le variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=ppc64le instead) + TARGET_ARCH ?= ppc64le +endif +ifneq ($(GCC),) + $(info WARNING - GCC variable has been deprecated) + $(info WARNING - please use HOST_COMPILER=$(GCC) instead) + HOST_COMPILER ?= $(GCC) +endif +ifneq ($(abi),) + $(error ERROR - abi variable has been removed) +endif +############################ +# end deprecated interface # +############################ + +# architecture +HOST_ARCH := $(shell uname -m) +TARGET_ARCH ?= $(HOST_ARCH) +ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le armv7l)) + ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le)) + TARGET_SIZE := 64 + else ifneq (,$(filter $(TARGET_ARCH),armv7l)) + TARGET_SIZE := 32 + endif + else + TARGET_SIZE := $(shell getconf LONG_BIT) + endif +else + $(error ERROR - unsupported value $(TARGET_ARCH) for TARGET_ARCH!) +endif + +# sbsa and aarch64 systems look similar. Need to differentiate them at host level for now. +ifeq ($(HOST_ARCH),aarch64) + ifeq ($(CUDA_PATH)/targets/sbsa-linux,$(shell ls -1d $(CUDA_PATH)/targets/sbsa-linux)) + HOST_ARCH := sbsa + TARGET_ARCH := sbsa + endif +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq (,$(filter $(HOST_ARCH)-$(TARGET_ARCH),aarch64-armv7l x86_64-armv7l x86_64-aarch64 x86_64-sbsa x86_64-ppc64le)) + $(error ERROR - cross compiling from $(HOST_ARCH) to $(TARGET_ARCH) is not supported!) + endif +endif + +# When on native aarch64 system with userspace of 32-bit, change TARGET_ARCH to armv7l +ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_SIZE),aarch64-aarch64-32) + TARGET_ARCH = armv7l +endif + +# operating system +HOST_OS := $(shell uname -s 2>/dev/null | tr "[:upper:]" "[:lower:]") +TARGET_OS ?= $(HOST_OS) +ifeq (,$(filter $(TARGET_OS),linux darwin qnx android)) + $(error ERROR - unsupported value $(TARGET_OS) for TARGET_OS!) +endif + +# host compiler +ifeq ($(TARGET_OS),darwin) + ifeq ($(shell expr `xcodebuild -version | grep -i xcode | awk '{print $$2}' | cut -d'.' -f1` \>= 5),1) + HOST_COMPILER ?= clang++ + endif +else ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(HOST_ARCH)-$(TARGET_ARCH),x86_64-armv7l) + ifeq ($(TARGET_OS),linux) + HOST_COMPILER ?= arm-linux-gnueabihf-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/arm-unknown-nto-qnx6.6.0eabi-g++ + else ifeq ($(TARGET_OS),android) + HOST_COMPILER ?= arm-linux-androideabi-g++ + endif + else ifeq ($(TARGET_ARCH),aarch64) + ifeq ($(TARGET_OS), linux) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++ + else ifeq ($(TARGET_OS), android) + HOST_COMPILER ?= aarch64-linux-android-clang++ + endif + else ifeq ($(TARGET_ARCH),sbsa) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_ARCH),ppc64le) + HOST_COMPILER ?= powerpc64le-linux-gnu-g++ + endif +endif +HOST_COMPILER ?= g++ +NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(HOST_COMPILER) + +# internal flags +NVCCFLAGS := -m${TARGET_SIZE} +CCFLAGS := +LDFLAGS := + +# build flags +ifeq ($(TARGET_OS),darwin) + LDFLAGS += -rpath $(CUDA_PATH)/lib + CCFLAGS += -arch $(HOST_ARCH) +else ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_OS),x86_64-armv7l-linux) + LDFLAGS += --dynamic-linker=/lib/ld-linux-armhf.so.3 + CCFLAGS += -mfloat-abi=hard +else ifeq ($(TARGET_OS),android) + LDFLAGS += -pie + CCFLAGS += -fpie -fpic -fexceptions +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/arm-linux-gnueabihf + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib -L$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/lib/aarch64-linux-gnu -L$(TARGET_FS)/lib/aarch64-linux-gnu + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib -L$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/aarch64-linux-gnu -L$(TARGET_FS)/usr/lib/aarch64-linux-gnu + LDFLAGS += --unresolved-symbols=ignore-in-shared-libs + CCFLAGS += -isystem=$(TARGET_FS)/usr/include -I$(TARGET_FS)/usr/include + CCFLAGS += -isystem=$(TARGET_FS)/usr/include/aarch64-linux-gnu -I$(TARGET_FS)/usr/include/aarch64-linux-gnu + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CCFLAGS += -DWIN_INTERFACE_CUSTOM -I/usr/include/aarch64-qnx-gnu + LDFLAGS += -lsocket + LDFLAGS += -rpath=/usr/lib/aarch64-qnx-gnu -L/usr/lib/aarch64-qnx-gnu + ifneq ($(TARGET_FS),) + LDFLAGS += -rpath=$(TARGET_FS)/usr/lib -L $(TARGET_FS)/usr/lib + LDFLAGS += -rpath=$(TARGET_FS)/usr/libnvidia -L $(TARGET_FS)/usr/libnvidia + endif + ifdef TARGET_OVERRIDE # cuda toolkit targets override + NVCCFLAGS += -target-dir $(TARGET_OVERRIDE) + endif + endif +endif + +# Install directory of different arch +CUDA_INSTALL_TARGET_DIR := +ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-gnueabihf/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),sbsa-linux) + CUDA_INSTALL_TARGET_DIR = targets/sbsa-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-android) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-android) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-qnx) + CUDA_INSTALL_TARGET_DIR = targets/ARMv7-linux-QNX/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-qnx/ +else ifeq ($(TARGET_ARCH),ppc64le) + CUDA_INSTALL_TARGET_DIR = targets/ppc64le-linux/ +endif + +# Debug build flags +ifeq ($(dbg),1) + NVCCFLAGS += -g -G + BUILD_TYPE := debug +else + BUILD_TYPE := release +endif + +ALL_CCFLAGS := +ALL_CCFLAGS += $(NVCCFLAGS) +ALL_CCFLAGS += $(EXTRA_NVCCFLAGS) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(CCFLAGS)) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS)) + +SAMPLE_ENABLED := 1 + +# This sample is not supported on Mac OSX +ifeq ($(TARGET_OS),darwin) + $(info >>> WARNING - batchedLabelMarkersAndLabelCompressionNPP is not supported on Mac OSX - waiving sample <<<) + SAMPLE_ENABLED := 0 +endif + +ALL_LDFLAGS := +ALL_LDFLAGS += $(ALL_CCFLAGS) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS)) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(EXTRA_LDFLAGS)) + +# Common includes and paths for CUDA +INCLUDES := -I../../Common +LIBRARIES := + +################################################################################ + +# Gencode arguments +SMS ?= + +ifeq ($(GENCODE_FLAGS),) +# Generate SASS code for each SM architecture listed in $(SMS) +$(foreach sm,$(SMS),$(eval GENCODE_FLAGS += -gencode arch=compute_$(sm),code=sm_$(sm))) + +ifeq ($(SMS),) +# Generate PTX code from SM 35 +GENCODE_FLAGS += -gencode arch=compute_35,code=compute_35 +endif + +# Generate PTX code from the highest SM architecture in $(SMS) to guarantee forward-compatibility +HIGHEST_SM := $(lastword $(sort $(SMS))) +ifneq ($(HIGHEST_SM),) +GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) +endif +endif + +LIBRARIES += -lnppisu_static -lnppif_static -lnppc_static -lculibos + +ifeq ($(SAMPLE_ENABLED),0) +EXEC ?= @echo "[@]" +endif + +################################################################################ + +# Target rules +all: build + +build: batchedLabelMarkersAndLabelCompressionNPP + +check.deps: +ifeq ($(SAMPLE_ENABLED),0) + @echo "Sample will be waived due to the above missing dependencies" +else + @echo "Sample is ready - all dependencies have been met" +endif + +batchedLabelMarkersAndLabelCompressionNPP.o:batchedLabelMarkersAndLabelCompressionNPP.cpp + $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $< + +batchedLabelMarkersAndLabelCompressionNPP: batchedLabelMarkersAndLabelCompressionNPP.o + $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $+ $(LIBRARIES) + $(EXEC) mkdir -p ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + $(EXEC) cp $@ ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + +run: build + $(EXEC) ./batchedLabelMarkersAndLabelCompressionNPP + +clean: + rm -f batchedLabelMarkersAndLabelCompressionNPP batchedLabelMarkersAndLabelCompressionNPP.o + rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/batchedLabelMarkersAndLabelCompressionNPP + +clobber: clean diff --git a/Samples/batchedLabelMarkersAndLabelCompressionNPP/NsightEclipse.xml b/Samples/batchedLabelMarkersAndLabelCompressionNPP/NsightEclipse.xml new file mode 100644 index 00000000..1ec37fb7 --- /dev/null +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/NsightEclipse.xml @@ -0,0 +1,76 @@ + + + + batchedLabelMarkersAndLabelCompressionNPP + + whole + true + + ./ + ../ + ../../common/inc + + + Performance Strategies + Image Processing + NPP Library + Using NPP Batch Functions + + + CUDA + NPP + Image Processing + + + nppisu_static + nppif_static + nppc_static + culibos + + + + true + batchedLabelMarkersAndLabelCompressionNPP.cpp + + NPP + + + 1:CUDA Basic Topics + 1:Performance Strategies + 2:Image Processing + 2:Computer Vision + + sm35 + sm37 + sm50 + sm52 + sm60 + sm61 + sm70 + sm72 + sm75 + sm80 + sm86 + + + x86_64 + linux + + + windows7 + + + arm + + + ppc64le + linux + + + + all + + Batched Label Markers And Label Compression NPP + exe + diff --git a/Samples/batchedLabelMarkersAndLabelCompressionNPP/README.md b/Samples/batchedLabelMarkersAndLabelCompressionNPP/README.md new file mode 100644 index 00000000..7212c14a --- /dev/null +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/README.md @@ -0,0 +1,72 @@ +# batchedLabelMarkersAndLabelCompressionNPP - Batched Label Markers And Label Compression NPP + +## Description + +An NPP CUDA Sample that demonstrates how to use the NPP label markers generation and label compression functions based on a Union Find (UF) algorithm including both +single image and batched image versions. + +## Key Concepts + +Performance Strategies, Image Processing, NPP Library, Using NPP Batch Functions + +## Supported SM Architectures + +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) + +## Supported OSes + +Linux, Windows + +## Supported CPU Architecture + +x86_64, ppc64le, armv7l + +## CUDA APIs involved + +## Dependencies needed to build/run +[NPP](../../README.md#npp) + +## Prerequisites + +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Make sure the dependencies mentioned in [Dependencies]() section above are installed. + +## Build and Run + +### Windows +The Windows samples are built using the Visual Studio IDE. Solution files (.sln) are provided for each supported version of Visual Studio, using the format: +``` +*_vs.sln - for Visual Studio +``` +Each individual sample has its own set of solution files in its directory: + +To build/examine all the samples at once, the complete solution files should be used. To build/examine a single sample, the individual sample solution files should be used. +> **Note:** Some samples require that the Microsoft DirectX SDK (June 2010 or newer) be installed and that the VC++ directory paths are properly set up (**Tools > Options...**). Check DirectX Dependencies section for details." + +### Linux +The Linux samples are built using makefiles. To use the makefiles, change the current directory to the sample directory you wish to build, and run make: +``` +$ cd +$ make +``` +The samples makefiles can take advantage of certain options: +* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le, armv7l. + By default, TARGET_ARCH is set to HOST_ARCH. On a x86_64 machine, not setting TARGET_ARCH is the equivalent of setting TARGET_ARCH=x86_64.
+`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
`$ make TARGET_ARCH=armv7l`
+ See [here](http://docs.nvidia.com/cuda/cuda-samples/index.html#cross-samples) for more details. +* **dbg=1** - build with debug symbols + ``` + $ make dbg=1 + ``` +* **SMS="A B ..."** - override the SM architectures for which the sample will be built, where `"A B ..."` is a space-delimited list of SM architectures. For example, to generate SASS for SM 50 and SM 60, use `SMS="50 60"`. + ``` + $ make SMS="50 60" + ``` + +* **HOST_COMPILER=** - override the default g++ host compiler. See the [Linux Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements) for a list of supported host compilers. +``` + $ make HOST_COMPILER=g++ +``` + +## References (for more details) + diff --git a/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP.cpp b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP.cpp new file mode 100644 index 00000000..6079a289 --- /dev/null +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP.cpp @@ -0,0 +1,798 @@ +/* Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +#define WINDOWS_LEAN_AND_MEAN +#define NOMINMAX +#include +#pragma warning(disable : 4819) +#endif + +#include +#include +#include + +#include +#include + +// Note: If you want to view these images we HIGHLY recommend using imagej +// which is free on the internet and works on most platforms +// because it is one of the few image viewing apps that can display 32 +// bit integer image data. While it normalizes the data to floating +// point values for viewing it still provides a good representation of +// the relative brightness of each label value. Note that label +// compression output results in smaller differences between label values +// making it visually more difficult to detect differences in labeled +// regions. If you have an editor that can display hex values you can +// see what the exact values of each label is, every 4 bytes represents 1 +// 32 bit integer label value. +// +// The files read and written by this sample app use RAW image format, +// that is, only the image data itself exists in the files with no image +// format information. When viewing RAW files with imagej just enter +// the image size and bit depth values that are part of the file name +// when requested by imagej. +// +// This sample app works in 2 stages, first it processes all of the +// images individually then it processes them all again in 1 batch using +// the Batch_Advanced versions of the NPP batch functions which allow +// each image to have it's own ROI. The 2 stages are completely +// separable but in this sample the second stage takes advantage of some +// of the data that has already been initialized. +// +// Note that there is a small amount of variability in the number of +// unique label markers generated from one run to the next by the UF +// algorithm. +// +// Performance of ALL NPP image batch functions is limited by the maximum +// ROI height in the list of images. + +// Batched label compression support is only available on NPP versions > 11.0, +// comment out if using NPP 11.0 +#define USE_BATCHED_LABEL_COMPRESSION 1 + +#define NUMBER_OF_IMAGES 5 + +Npp8u *pInputImageDev[NUMBER_OF_IMAGES]; +Npp8u *pInputImageHost[NUMBER_OF_IMAGES]; +Npp8u *pUFGenerateLabelsScratchBufferDev[NUMBER_OF_IMAGES]; +Npp8u *pUFCompressedLabelsScratchBufferDev[NUMBER_OF_IMAGES]; +Npp32u *pUFLabelDev[NUMBER_OF_IMAGES]; +Npp32u *pUFLabelHost[NUMBER_OF_IMAGES]; +NppiImageDescriptor *pUFBatchSrcImageListDev = 0; +NppiImageDescriptor *pUFBatchSrcDstImageListDev = 0; +NppiImageDescriptor *pUFBatchSrcImageListHost = 0; +NppiImageDescriptor *pUFBatchSrcDstImageListHost = 0; +NppiBufferDescriptor *pUFBatchSrcDstScratchBufferListDev = + 0; // from nppi_filtering_functions.h +NppiBufferDescriptor *pUFBatchSrcDstScratchBufferListHost = 0; +Npp32u *pUFBatchPerImageCompressedCountListDev = 0; +Npp32u *pUFBatchPerImageCompressedCountListHost = 0; + +void tearDown() // Clean up and tear down +{ + if (pUFBatchPerImageCompressedCountListDev != 0) + cudaFree(pUFBatchPerImageCompressedCountListDev); + if (pUFBatchSrcDstScratchBufferListDev != 0) + cudaFree(pUFBatchSrcDstScratchBufferListDev); + if (pUFBatchSrcDstImageListDev != 0) cudaFree(pUFBatchSrcDstImageListDev); + if (pUFBatchSrcImageListDev != 0) cudaFree(pUFBatchSrcImageListDev); + if (pUFBatchPerImageCompressedCountListHost != 0) + free(pUFBatchPerImageCompressedCountListHost); + if (pUFBatchSrcDstScratchBufferListHost != 0) + free(pUFBatchSrcDstScratchBufferListHost); + if (pUFBatchSrcDstImageListHost != 0) free(pUFBatchSrcDstImageListHost); + if (pUFBatchSrcImageListHost != 0) free(pUFBatchSrcImageListHost); + + for (int j = 0; j < NUMBER_OF_IMAGES; j++) { + if (pUFCompressedLabelsScratchBufferDev[j] != 0) + cudaFree(pUFCompressedLabelsScratchBufferDev[j]); + if (pUFGenerateLabelsScratchBufferDev[j] != 0) + cudaFree(pUFGenerateLabelsScratchBufferDev[j]); + if (pUFLabelDev[j] != 0) cudaFree(pUFLabelDev[j]); + if (pInputImageDev[j] != 0) cudaFree(pInputImageDev[j]); + if (pUFLabelHost[j] != 0) free(pUFLabelHost[j]); + if (pInputImageHost[j] != 0) free(pInputImageHost[j]); + } +} + +const std::string &LabelMarkersOutputFile0 = + "Lena_LabelMarkersUF_8Way_512x512_32u.raw"; +const std::string &LabelMarkersOutputFile1 = + "CT_skull_LabelMarkersUF_8Way_512x512_32u.raw"; +const std::string &LabelMarkersOutputFile2 = + "PCB_METAL_LabelMarkersUF_8Way_509x335_32u.raw"; +const std::string &LabelMarkersOutputFile3 = + "PCB2_LabelMarkersUF_8Way_1024x683_32u.raw"; +const std::string &LabelMarkersOutputFile4 = + "PCB_LabelMarkersUF_8Way_1280x720_32u.raw"; + +const std::string &CompressedMarkerLabelsOutputFile0 = + "Lena_CompressedMarkerLabelsUF_8Way_512x512_32u.raw"; +const std::string &CompressedMarkerLabelsOutputFile1 = + "CT_skull_CompressedMarkerLabelsUF_8Way_512x512_32u.raw"; +const std::string &CompressedMarkerLabelsOutputFile2 = + "PCB_METAL_CompressedMarkerLabelsUF_8Way_509x335_32u.raw"; +const std::string &CompressedMarkerLabelsOutputFile3 = + "PCB2_CompressedMarkerLabelsUF_8Way_1024x683_32u.raw"; +const std::string &CompressedMarkerLabelsOutputFile4 = + "PCB_CompressedMarkerLabelsUF_8Way_1280x720_32u.raw"; + +const std::string &LabelMarkersBatchOutputFile0 = + "Lena_LabelMarkersUFBatch_8Way_512x512_32u.raw"; +const std::string &LabelMarkersBatchOutputFile1 = + "CT_skull_LabelMarkersUFBatch_8Way_512x512_32u.raw"; +const std::string &LabelMarkersBatchOutputFile2 = + "PCB_METAL_LabelMarkersUFBatch_8Way_509x335_32u.raw"; +const std::string &LabelMarkersBatchOutputFile3 = + "PCB2_LabelMarkersUFBatch_8Way_1024x683_32u.raw"; +const std::string &LabelMarkersBatchOutputFile4 = + "PCB_LabelMarkersUFBatch_8Way_1280x720_32u.raw"; + +const std::string &CompressedMarkerLabelsBatchOutputFile0 = + "Lena_CompressedMarkerLabelsUFBatch_8Way_512x512_32u.raw"; +const std::string &CompressedMarkerLabelsBatchOutputFile1 = + "CT_skull_CompressedMarkerLabelsUFBatch_8Way_512x512_32u.raw"; +const std::string &CompressedMarkerLabelsBatchOutputFile2 = + "PCB_METAL_CompressedMarkerLabelsUFBatch_8Way_509x335_32u.raw"; +const std::string &CompressedMarkerLabelsBatchOutputFile3 = + "PCB2_CompressedMarkerLabelsUFBatch_8Way_1024x683_32u.raw"; +const std::string &CompressedMarkerLabelsBatchOutputFile4 = + "PCB_CompressedMarkerLabelsUFBatch_8Way_1280x720_32u.raw"; + +int loadRaw8BitImage(Npp8u *pImage, int nWidth, int nHeight, int nImage) { + FILE *bmpFile; + size_t nSize; + + if (nImage == 0) { + if (nWidth != 512 || nHeight != 512) return -1; + const char *fileName = "lena_512x512_8u.raw"; + const char *InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } else if (nImage == 1) { + if (nWidth != 512 || nHeight != 512) return -1; + const char *fileName = "CT_skull_512x512_8u.raw"; + const char *InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } else if (nImage == 2) { + if (nWidth != 509 || nHeight != 335) return -1; + const char *fileName = "PCB_METAL_509x335_8u.raw"; + const char *InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } else if (nImage == 3) { + if (nWidth != 1024 || nHeight != 683) return -1; + const char *fileName = "PCB2_1024x683_8u.raw"; + const char *InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } else if (nImage == 4) { + if (nWidth != 1280 || nHeight != 720) return -1; + const char *fileName = "PCB_1280x720_8u.raw"; + const char *InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } else { + printf("Input file load failed.\n"); + return -1; + } + + if (bmpFile == NULL) return -1; + nSize = fread(pImage, 1, nWidth * nHeight, bmpFile); + if (nSize < nWidth * nHeight) { + fclose(bmpFile); + return -1; + } + fclose(bmpFile); + + printf("Input file load succeeded.\n"); + + return 0; +} + +int main(int argc, char **argv) { + int aGenerateLabelsScratchBufferSize[NUMBER_OF_IMAGES]; + int aCompressLabelsScratchBufferSize[NUMBER_OF_IMAGES]; + + int nCompressedLabelCount = 0; + cudaError_t cudaError; + NppStatus nppStatus; + NppStreamContext nppStreamCtx; + FILE *bmpFile; + + for (int j = 0; j < NUMBER_OF_IMAGES; j++) { + pInputImageDev[j] = 0; + pInputImageHost[j] = 0; + pUFGenerateLabelsScratchBufferDev[j] = 0; + pUFCompressedLabelsScratchBufferDev[j] = 0; + pUFLabelDev[j] = 0; + pUFLabelHost[j] = 0; + } + + nppStreamCtx.hStream = 0; // The NULL stream by default, set this to whatever + // your stream ID is if not the NULL stream. + + cudaError = cudaGetDevice(&nppStreamCtx.nCudaDeviceId); + if (cudaError != cudaSuccess) { + printf("CUDA error: no devices supporting CUDA.\n"); + return NPP_NOT_SUFFICIENT_COMPUTE_CAPABILITY; + } + + const NppLibraryVersion *libVer = nppGetLibVersion(); + + printf("NPP Library Version %d.%d.%d\n", libVer->major, libVer->minor, + libVer->build); + + int driverVersion, runtimeVersion; + cudaDriverGetVersion(&driverVersion); + cudaRuntimeGetVersion(&runtimeVersion); + + printf("CUDA Driver Version: %d.%d\n", driverVersion / 1000, + (driverVersion % 100) / 10); + printf("CUDA Runtime Version: %d.%d\n\n", runtimeVersion / 1000, + (runtimeVersion % 100) / 10); + + cudaError = cudaDeviceGetAttribute( + &nppStreamCtx.nCudaDevAttrComputeCapabilityMajor, + cudaDevAttrComputeCapabilityMajor, nppStreamCtx.nCudaDeviceId); + if (cudaError != cudaSuccess) return NPP_NOT_SUFFICIENT_COMPUTE_CAPABILITY; + + cudaError = cudaDeviceGetAttribute( + &nppStreamCtx.nCudaDevAttrComputeCapabilityMinor, + cudaDevAttrComputeCapabilityMinor, nppStreamCtx.nCudaDeviceId); + if (cudaError != cudaSuccess) return NPP_NOT_SUFFICIENT_COMPUTE_CAPABILITY; + + cudaError = + cudaStreamGetFlags(nppStreamCtx.hStream, &nppStreamCtx.nStreamFlags); + + cudaDeviceProp oDeviceProperties; + + cudaError = + cudaGetDeviceProperties(&oDeviceProperties, nppStreamCtx.nCudaDeviceId); + + nppStreamCtx.nMultiProcessorCount = oDeviceProperties.multiProcessorCount; + nppStreamCtx.nMaxThreadsPerMultiProcessor = + oDeviceProperties.maxThreadsPerMultiProcessor; + nppStreamCtx.nMaxThreadsPerBlock = oDeviceProperties.maxThreadsPerBlock; + nppStreamCtx.nSharedMemPerBlock = oDeviceProperties.sharedMemPerBlock; + + NppiSize oSizeROI[NUMBER_OF_IMAGES]; + + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + if (nImage == 0) { + oSizeROI[nImage].width = 512; + oSizeROI[nImage].height = 512; + } else if (nImage == 1) { + oSizeROI[nImage].width = 512; + oSizeROI[nImage].height = 512; + } else if (nImage == 2) { + oSizeROI[nImage].width = 509; + oSizeROI[nImage].height = 335; + } else if (nImage == 3) { + oSizeROI[nImage].width = 1024; + oSizeROI[nImage].height = 683; + } else if (nImage == 4) { + oSizeROI[nImage].width = 1280; + oSizeROI[nImage].height = 720; + } + + // NOTE: While using cudaMallocPitch() to allocate device memory for NPP can + // significantly improve the performance of many NPP functions, for UF + // function label markers generation or compression DO NOT USE + // cudaMallocPitch(). Doing so could result in incorrect output. + + cudaError = cudaMalloc( + (void **)&pInputImageDev[nImage], + oSizeROI[nImage].width * sizeof(Npp8u) * oSizeROI[nImage].height); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + // For images processed with UF label markers functions ROI width and height + // for label markers generation output AND marker compression functions MUST + // be the same AND line pitch MUST be equal to ROI.width * sizeof(Npp32u). + // Also the image pointer used for label markers generation output must + // start at the same position in the image as it does in the marker + // compression function. Also note that actual input image size and ROI do + // not necessarily need to be related other than ROI being less than or + // equal to image size and image starting position does not necessarily have + // to be at pixel 0 in the input image. + + cudaError = cudaMalloc( + (void **)&pUFLabelDev[nImage], + oSizeROI[nImage].width * sizeof(Npp32u) * oSizeROI[nImage].height); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + pInputImageHost[nImage] = reinterpret_cast(malloc( + oSizeROI[nImage].width * sizeof(Npp8u) * oSizeROI[nImage].height)); + pUFLabelHost[nImage] = reinterpret_cast(malloc( + oSizeROI[nImage].width * sizeof(Npp32u) * oSizeROI[nImage].height)); + + // Use UF functions throughout this sample. + + nppStatus = nppiLabelMarkersUFGetBufferSize_32u_C1R( + oSizeROI[nImage], &aGenerateLabelsScratchBufferSize[nImage]); + + // One at a time image processing + + cudaError = cudaMalloc((void **)&pUFGenerateLabelsScratchBufferDev[nImage], + aGenerateLabelsScratchBufferSize[nImage]); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + if (loadRaw8BitImage(pInputImageHost[nImage], + oSizeROI[nImage].width * sizeof(Npp8u), + oSizeROI[nImage].height, nImage) == 0) { + cudaError = cudaMemcpy2DAsync( + pInputImageDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + pInputImageHost[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + + nppStatus = nppiLabelMarkersUF_8u32u_C1R_Ctx( + pInputImageDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + pUFLabelDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + oSizeROI[nImage], nppiNormInf, + pUFGenerateLabelsScratchBufferDev[nImage], nppStreamCtx); + + if (nppStatus != NPP_SUCCESS) { + if (nImage == 0) + printf("Lena_LabelMarkersUF_8Way_512x512_32u failed.\n"); + else if (nImage == 1) + printf("CT_skull_LabelMarkersUF_8Way_512x512_32u failed.\n"); + else if (nImage == 2) + printf("PCB_METAL_LabelMarkersUF_8Way_509x335_32u failed.\n"); + else if (nImage == 3) + printf("PCB2_LabelMarkersUF_8Way_1024x683_32u failed.\n"); + else if (nImage == 4) + printf("PCB_LabelMarkersUF_8Way_1280x720_32u failed.\n"); + tearDown(); + return -1; + } + + cudaError = cudaMemcpy2DAsync( + pUFLabelHost[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + pUFLabelDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + + // Wait host image read backs to complete, not necessary if no need to + // synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != + cudaSuccess) { + printf("Post label generation cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + if (nImage == 0) + bmpFile = fopen(LabelMarkersOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(LabelMarkersOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(LabelMarkersOutputFile2.c_str(), "wb"); + else if (nImage == 3) + bmpFile = fopen(LabelMarkersOutputFile3.c_str(), "wb"); + else if (nImage == 4) + bmpFile = fopen(LabelMarkersOutputFile4.c_str(), "wb"); + + if (bmpFile == NULL) return -1; + size_t nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) { + nSize += fwrite(&pUFLabelHost[nImage][j * oSizeROI[nImage].width], + sizeof(Npp32u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + + nppStatus = nppiCompressMarkerLabelsGetBufferSize_32u_C1R( + oSizeROI[nImage].width * oSizeROI[nImage].height, + &aCompressLabelsScratchBufferSize[nImage]); + if (nppStatus != NPP_NO_ERROR) return nppStatus; + + cudaError = + cudaMalloc((void **)&pUFCompressedLabelsScratchBufferDev[nImage], + aCompressLabelsScratchBufferSize[nImage]); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + nCompressedLabelCount = 0; + + nppStatus = nppiCompressMarkerLabelsUF_32u_C1IR( + pUFLabelDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + oSizeROI[nImage], oSizeROI[nImage].width * oSizeROI[nImage].height, + &nCompressedLabelCount, pUFCompressedLabelsScratchBufferDev[nImage]); + + if (nppStatus != NPP_SUCCESS) { + if (nImage == 0) + printf("Lena_CompressedLabelMarkersUF_8Way_512x512_32u failed.\n"); + else if (nImage == 1) + printf( + "CT_Skull_CompressedLabelMarkersUF_8Way_512x512_32u failed.\n"); + else if (nImage == 2) + printf( + "PCB_METAL_CompressedLabelMarkersUF_8Way_509x335_32u failed.\n"); + else if (nImage == 3) + printf("PCB2_CompressedLabelMarkersUF_8Way_1024x683_32u failed.\n"); + else if (nImage == 4) + printf("PCB_CompressedLabelMarkersUF_8Way_1280x720_32u failed.\n"); + tearDown(); + return -1; + } + + cudaError = cudaMemcpy2DAsync( + pUFLabelHost[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + pUFLabelDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + + // Wait for host image read backs to finish, not necessary if no need to + // synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != + cudaSuccess || + nCompressedLabelCount == 0) { + printf("Post label compression cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + if (nImage == 0) + bmpFile = fopen(CompressedMarkerLabelsOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(CompressedMarkerLabelsOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(CompressedMarkerLabelsOutputFile2.c_str(), "wb"); + else if (nImage == 3) + bmpFile = fopen(CompressedMarkerLabelsOutputFile3.c_str(), "wb"); + else if (nImage == 4) + bmpFile = fopen(CompressedMarkerLabelsOutputFile4.c_str(), "wb"); + + if (bmpFile == NULL) return -1; + nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) { + nSize += fwrite(&pUFLabelHost[nImage][j * oSizeROI[nImage].width], + sizeof(Npp32u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + + if (nImage == 0) + printf( + "Lena_CompressedMarkerLabelsUF_8Way_512x512_32u succeeded, " + "compressed label count is %d.\n", + nCompressedLabelCount); + else if (nImage == 1) + printf( + "CT_Skull_CompressedMarkerLabelsUF_8Way_512x512_32u succeeded, " + "compressed label count is %d.\n", + nCompressedLabelCount); + else if (nImage == 2) + printf( + "PCB_METAL_CompressedMarkerLabelsUF_8Way_509x335_32u succeeded, " + "compressed label count is %d.\n", + nCompressedLabelCount); + else if (nImage == 3) + printf( + "PCB2_CompressedMarkerLabelsUF_8Way_1024x683_32u succeeded, " + "compressed label count is %d.\n", + nCompressedLabelCount); + else if (nImage == 4) + printf( + "PCB_CompressedMarkerLabelsUF_8Way_1280x720_32u succeeded, " + "compressed label count is %d.\n", + nCompressedLabelCount); + } + } + + // Batch image processing + + // We want to allocate scratch buffers more efficiently for batch processing + // so first we free up the scratch buffers for image 0 and reallocate them. + // This is not required but helps cudaMalloc to work more efficiently. + + cudaFree(pUFCompressedLabelsScratchBufferDev[0]); + + int nTotalBatchedUFCompressLabelsScratchBufferDevSize = 0; + + for (int k = 0; k < NUMBER_OF_IMAGES; k++) + nTotalBatchedUFCompressLabelsScratchBufferDevSize += + aCompressLabelsScratchBufferSize[k]; + + cudaError = cudaMalloc((void **)&pUFCompressedLabelsScratchBufferDev[0], + nTotalBatchedUFCompressLabelsScratchBufferDevSize); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + // Now allocate batch lists + + int nBatchImageListBytes = NUMBER_OF_IMAGES * sizeof(NppiImageDescriptor); + + cudaError = + cudaMalloc((void **)&pUFBatchSrcImageListDev, nBatchImageListBytes); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + cudaError = + cudaMalloc((void **)&pUFBatchSrcDstImageListDev, nBatchImageListBytes); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + pUFBatchSrcImageListHost = + reinterpret_cast(malloc(nBatchImageListBytes)); + pUFBatchSrcDstImageListHost = + reinterpret_cast(malloc(nBatchImageListBytes)); + + NppiSize oMaxROISize = {0, 0}; + + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + pUFBatchSrcImageListHost[nImage].pData = pInputImageDev[nImage]; + pUFBatchSrcImageListHost[nImage].nStep = + oSizeROI[nImage].width * sizeof(Npp8u); + // src image oSize parameter is ignored in these NPP functions + pUFBatchSrcDstImageListHost[nImage].pData = pUFLabelDev[nImage]; + pUFBatchSrcDstImageListHost[nImage].nStep = + oSizeROI[nImage].width * sizeof(Npp32u); + pUFBatchSrcDstImageListHost[nImage].oSize = oSizeROI[nImage]; + if (oSizeROI[nImage].width > oMaxROISize.width) + oMaxROISize.width = oSizeROI[nImage].width; + if (oSizeROI[nImage].height > oMaxROISize.height) + oMaxROISize.height = oSizeROI[nImage].height; + } + + // Copy label generation batch lists from CPU to GPU + cudaError = cudaMemcpyAsync(pUFBatchSrcImageListDev, pUFBatchSrcImageListHost, + nBatchImageListBytes, cudaMemcpyHostToDevice, + nppStreamCtx.hStream); + if (cudaError != cudaSuccess) return NPP_MEMCPY_ERROR; + + cudaError = cudaMemcpyAsync(pUFBatchSrcDstImageListDev, + pUFBatchSrcDstImageListHost, nBatchImageListBytes, + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + if (cudaError != cudaSuccess) return NPP_MEMCPY_ERROR; + + // We use 8-way neighbor search throughout this example + nppStatus = nppiLabelMarkersUFBatch_8u32u_C1R_Advanced_Ctx( + pUFBatchSrcImageListDev, pUFBatchSrcDstImageListDev, NUMBER_OF_IMAGES, + oMaxROISize, nppiNormInf, nppStreamCtx); + + if (nppStatus != NPP_SUCCESS) { + printf("LabelMarkersUFBatch_8Way_8u32u failed.\n"); + tearDown(); + return -1; + } + + // Now read back generated device images to the host + + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + cudaError = cudaMemcpy2DAsync( + pUFLabelHost[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + pUFLabelDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + } + + // Wait for host image read backs to complete, not necessary if no need to + // synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != + cudaSuccess) { + printf("Post label generation cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + // Save output to files + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + if (nImage == 0) + bmpFile = fopen(LabelMarkersBatchOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(LabelMarkersBatchOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(LabelMarkersBatchOutputFile2.c_str(), "wb"); + else if (nImage == 3) + bmpFile = fopen(LabelMarkersBatchOutputFile3.c_str(), "wb"); + else if (nImage == 4) + bmpFile = fopen(LabelMarkersBatchOutputFile4.c_str(), "wb"); + + if (bmpFile == NULL) return -1; + size_t nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) { + nSize += fwrite(&pUFLabelHost[nImage][j * oSizeROI[nImage].width], + sizeof(Npp32u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + } + +#ifdef USE_BATCHED_LABEL_COMPRESSION + + // Now allocate scratch buffer memory for batched label compression + cudaError = cudaMalloc((void **)&pUFBatchSrcDstScratchBufferListDev, + NUMBER_OF_IMAGES * sizeof(NppiBufferDescriptor)); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + cudaError = cudaMalloc((void **)&pUFBatchPerImageCompressedCountListDev, + NUMBER_OF_IMAGES * sizeof(Npp32u)); + if (cudaError != cudaSuccess) return NPP_MEMORY_ALLOCATION_ERR; + + // Allocate host side scratch buffer point and size list and initialize with + // device scratch buffer pointers + pUFBatchSrcDstScratchBufferListHost = + reinterpret_cast( + malloc(NUMBER_OF_IMAGES * sizeof(NppiBufferDescriptor))); + + pUFBatchPerImageCompressedCountListHost = + reinterpret_cast(malloc(NUMBER_OF_IMAGES * sizeof(Npp32u))); + + // Start buffer pointer at beginning of full per image buffer list sized + // pUFCompressedLabelsScratchBufferDev[0] + Npp32u *pCurUFCompressedLabelsScratchBufferDev = + reinterpret_cast(pUFCompressedLabelsScratchBufferDev[0]); + + int nMaxUFCompressedLabelsScratchBufferSize = 0; + + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + // This particular function works on in-place data and SrcDst image batch + // list has already been initialized in batched label generation function + // setup + + // Initialize each per image buffer descriptor + pUFBatchSrcDstScratchBufferListHost[nImage].pData = + reinterpret_cast(pCurUFCompressedLabelsScratchBufferDev); + pUFBatchSrcDstScratchBufferListHost[nImage].nBufferSize = + aCompressLabelsScratchBufferSize[nImage]; + + if (aCompressLabelsScratchBufferSize[nImage] > + nMaxUFCompressedLabelsScratchBufferSize) + nMaxUFCompressedLabelsScratchBufferSize = + aCompressLabelsScratchBufferSize[nImage]; + + // Offset buffer pointer to next per image buffer + Npp8u *pTempBuffer = + reinterpret_cast(pCurUFCompressedLabelsScratchBufferDev); + pTempBuffer += aCompressLabelsScratchBufferSize[nImage]; + pCurUFCompressedLabelsScratchBufferDev = + reinterpret_cast((void *)(pTempBuffer)); + } + + // Copy compression batch scratch buffer list from CPU to GPU + cudaError = cudaMemcpyAsync(pUFBatchSrcDstScratchBufferListDev, + pUFBatchSrcDstScratchBufferListHost, + NUMBER_OF_IMAGES * sizeof(NppiBufferDescriptor), + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + if (cudaError != cudaSuccess) return NPP_MEMCPY_ERROR; + + nppStatus = nppiCompressMarkerLabelsUFBatch_32u_C1IR_Advanced_Ctx( + pUFBatchSrcDstImageListDev, pUFBatchSrcDstScratchBufferListDev, + pUFBatchPerImageCompressedCountListDev, NUMBER_OF_IMAGES, oMaxROISize, + nMaxUFCompressedLabelsScratchBufferSize, nppStreamCtx); + if (nppStatus != NPP_SUCCESS) { + printf("BatchCompressedLabelMarkersUF_8Way_32u failed.\n"); + tearDown(); + return -1; + } + + // Copy output compressed label images back to host + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + cudaError = cudaMemcpy2DAsync( + pUFLabelHost[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + pUFLabelDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + } + + // Wait for host image read backs to complete, not necessary if no need to + // synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != + cudaSuccess) { + printf("Post label compression cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + // Save compressed label images into files + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + if (nImage == 0) + bmpFile = fopen(CompressedMarkerLabelsBatchOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(CompressedMarkerLabelsBatchOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(CompressedMarkerLabelsBatchOutputFile2.c_str(), "wb"); + else if (nImage == 3) + bmpFile = fopen(CompressedMarkerLabelsBatchOutputFile3.c_str(), "wb"); + else if (nImage == 4) + bmpFile = fopen(CompressedMarkerLabelsBatchOutputFile4.c_str(), "wb"); + + if (bmpFile == NULL) return -1; + size_t nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) { + nSize += fwrite(&pUFLabelHost[nImage][j * oSizeROI[nImage].width], + sizeof(Npp32u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + } + + // Read back per image compressed label count. + cudaError = cudaMemcpyAsync(pUFBatchPerImageCompressedCountListHost, + pUFBatchPerImageCompressedCountListDev, + NUMBER_OF_IMAGES * sizeof(Npp32u), + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + if (cudaError != cudaSuccess) { + tearDown(); + return NPP_MEMCPY_ERROR; + } + + // Wait for host read back to complete + cudaError = cudaStreamSynchronize(nppStreamCtx.hStream); + + printf("\n\n"); + + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) { + if (nImage == 0) + printf( + "Lena_CompressedMarkerLabelsUFBatch_8Way_512x512_32u succeeded, " + "compressed label count is %d.\n", + pUFBatchPerImageCompressedCountListHost[nImage]); + else if (nImage == 1) + printf( + "CT_Skull_CompressedMarkerLabelsUFBatch_8Way_512x512_32u succeeded, " + "compressed label count is %d.\n", + pUFBatchPerImageCompressedCountListHost[nImage]); + else if (nImage == 2) + printf( + "PCB_METAL_CompressedMarkerLabelsUFBatch_8Way_509x335_32u succeeded, " + "compressed label count is %d.\n", + pUFBatchPerImageCompressedCountListHost[nImage]); + else if (nImage == 3) + printf( + "PCB2_CompressedMarkerLabelsUFBatch_8Way_1024x683_32u succeeded, " + "compressed label count is %d.\n", + pUFBatchPerImageCompressedCountListHost[nImage]); + else if (nImage == 4) + printf( + "PCB_CompressedMarkerLabelsUFBatch_8Way_1280x720_32u succeeded, " + "compressed label count is %d.\n", + pUFBatchPerImageCompressedCountListHost[nImage]); + } + +#endif // USE_BATCHED_LABEL_COMPRESSION + + tearDown(); + + return 0; +} diff --git a/Samples/matrixMul/matrixMul_vs2013.sln b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2015.sln similarity index 70% rename from Samples/matrixMul/matrixMul_vs2013.sln rename to Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2015.sln index 1c5c1999..f825418b 100644 --- a/Samples/matrixMul/matrixMul_vs2013.sln +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2015.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matrixMul", "matrixMul_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +Microsoft Visual Studio Solution File, Format Version 14.00 +# Visual Studio 2015 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "batchedLabelMarkersAndLabelCompressionNPP", "batchedLabelMarkersAndLabelCompressionNPP_vs2015.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2012.vcxproj b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2015.vcxproj similarity index 84% rename from Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2012.vcxproj rename to Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2015.vcxproj index 5de9dbce..f1b183a8 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2012.vcxproj +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2015.vcxproj @@ -15,15 +15,15 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - MersenneTwisterGP11213_vs2012 - MersenneTwisterGP11213 + batchedLabelMarkersAndLabelCompressionNPP_vs2015 + batchedLabelMarkersAndLabelCompressionNPP Application MultiByte - v110 + v140 true @@ -33,7 +33,7 @@ - + @@ -57,9 +57,9 @@ Console - curand.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/MersenneTwisterGP11213.exe + $(OutDir)/batchedLabelMarkersAndLabelCompressionNPP.exe compute_35,compute_35; @@ -97,11 +97,11 @@ - + - + diff --git a/Samples/matrixMul/matrixMul_vs2012.sln b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2017.sln similarity index 76% rename from Samples/matrixMul/matrixMul_vs2012.sln rename to Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2017.sln index fbbf6070..8819a431 100644 --- a/Samples/matrixMul/matrixMul_vs2012.sln +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2017.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matrixMul", "matrixMul_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2017 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "batchedLabelMarkersAndLabelCompressionNPP", "batchedLabelMarkersAndLabelCompressionNPP_vs2017.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2012.vcxproj b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2017.vcxproj similarity index 78% rename from Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2012.vcxproj rename to Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2017.vcxproj index 6785596a..50677e91 100644 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2012.vcxproj +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2017.vcxproj @@ -15,15 +15,20 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cannyEdgeDetectorNPP_vs2012 - cannyEdgeDetectorNPP + batchedLabelMarkersAndLabelCompressionNPP_vs2017 + batchedLabelMarkersAndLabelCompressionNPP + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + $(LatestTargetPlatformVersion) + $(WindowsTargetPlatformVersion) + Application MultiByte - v110 + v141 true @@ -33,7 +38,7 @@ - + @@ -53,13 +58,13 @@ Level3 WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir);../../Common/UtilNPP;../../Common/FreeImage/include; + ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); Console nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir);../../Common/FreeImage/lib/x64;../../Common/FreeImage/lib/$(TARGET_OS);../../Common/FreeImage/lib/$(TARGET_OS)/$(TARGET_ARCH); - $(OutDir)/cannyEdgeDetectorNPP.exe + $(CudaToolkitLibDir); + $(OutDir)/batchedLabelMarkersAndLabelCompressionNPP.exe compute_35,compute_35; @@ -96,22 +101,12 @@ 64 - - - - - - - - freeimage.lib;%(AdditionalDependencies) - - - + - + diff --git a/Samples/reduction/reduction_vs2012.sln b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2019.sln similarity index 76% rename from Samples/reduction/reduction_vs2012.sln rename to Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2019.sln index dbd1bfc4..f335ed12 100644 --- a/Samples/reduction/reduction_vs2012.sln +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2019.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reduction", "reduction_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2019 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "batchedLabelMarkersAndLabelCompressionNPP", "batchedLabelMarkersAndLabelCompressionNPP_vs2019.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2013.vcxproj b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2019.vcxproj similarity index 82% rename from Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2013.vcxproj rename to Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2019.vcxproj index 6ba10721..b837147b 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2013.vcxproj +++ b/Samples/batchedLabelMarkersAndLabelCompressionNPP/batchedLabelMarkersAndLabelCompressionNPP_vs2019.vcxproj @@ -15,15 +15,16 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - MersenneTwisterGP11213_vs2013 - MersenneTwisterGP11213 + batchedLabelMarkersAndLabelCompressionNPP_vs2019 + batchedLabelMarkersAndLabelCompressionNPP Application MultiByte - v120 + v142 + 10.0 true @@ -33,7 +34,7 @@ - + @@ -57,9 +58,9 @@ Console - curand.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/MersenneTwisterGP11213.exe + $(OutDir)/batchedLabelMarkersAndLabelCompressionNPP.exe compute_35,compute_35; @@ -97,11 +98,11 @@ - + - + diff --git a/Samples/bf16TensorCoreGemm/Makefile b/Samples/bf16TensorCoreGemm/Makefile index fdce3af2..090f0a3f 100644 --- a/Samples/bf16TensorCoreGemm/Makefile +++ b/Samples/bf16TensorCoreGemm/Makefile @@ -306,7 +306,7 @@ ifeq ($(TARGET_OS),linux) endif # Gencode arguments -SMS ?= 80 +SMS ?= 80 86 ifeq ($(SMS),) $(info >>> WARNING - no SM architectures have been specified - waiving sample <<<) diff --git a/Samples/bf16TensorCoreGemm/NsightEclipse.xml b/Samples/bf16TensorCoreGemm/NsightEclipse.xml index b5f1ba54..ad3ddc44 100644 --- a/Samples/bf16TensorCoreGemm/NsightEclipse.xml +++ b/Samples/bf16TensorCoreGemm/NsightEclipse.xml @@ -43,6 +43,7 @@ 1:CUDA Basic Topics sm80 + sm86 x86_64 diff --git a/Samples/bf16TensorCoreGemm/README.md b/Samples/bf16TensorCoreGemm/README.md index e6dc6c95..04aba3f0 100644 --- a/Samples/bf16TensorCoreGemm/README.md +++ b/Samples/bf16TensorCoreGemm/README.md @@ -10,7 +10,7 @@ Matrix Multiply, WMMA, Tensor Cores ## Supported SM Architectures -[SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaMallocManaged, cudaDeviceSynchronize, cudaFuncSetAttribute, cudaEventCreate, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2015.vcxproj b/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2015.vcxproj index 74b23342..3d43ae7f 100644 --- a/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2015.vcxproj +++ b/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/bf16TensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2017.vcxproj b/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2017.vcxproj index d7a4f280..cdb02eef 100644 --- a/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2017.vcxproj +++ b/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/bf16TensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2019.vcxproj b/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2019.vcxproj index 628e7ee0..2938910e 100644 --- a/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2019.vcxproj +++ b/Samples/bf16TensorCoreGemm/bf16TensorCoreGemm_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/bf16TensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/binaryPartitionCG/Makefile b/Samples/binaryPartitionCG/Makefile index 4a108e13..e5feb938 100644 --- a/Samples/binaryPartitionCG/Makefile +++ b/Samples/binaryPartitionCG/Makefile @@ -301,9 +301,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/binaryPartitionCG/NsightEclipse.xml b/Samples/binaryPartitionCG/NsightEclipse.xml index fec56867..a710833b 100644 --- a/Samples/binaryPartitionCG/NsightEclipse.xml +++ b/Samples/binaryPartitionCG/NsightEclipse.xml @@ -40,6 +40,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/binaryPartitionCG/README.md b/Samples/binaryPartitionCG/README.md index 113c76db..f752202e 100644 --- a/Samples/binaryPartitionCG/README.md +++ b/Samples/binaryPartitionCG/README.md @@ -10,7 +10,7 @@ Cooperative Groups ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -24,7 +24,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/binaryPartitionCG/binaryPartitionCG_vs2015.vcxproj b/Samples/binaryPartitionCG/binaryPartitionCG_vs2015.vcxproj index d8343a89..4b990f86 100644 --- a/Samples/binaryPartitionCG/binaryPartitionCG_vs2015.vcxproj +++ b/Samples/binaryPartitionCG/binaryPartitionCG_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/binaryPartitionCG.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/binaryPartitionCG/binaryPartitionCG_vs2017.vcxproj b/Samples/binaryPartitionCG/binaryPartitionCG_vs2017.vcxproj index d5d24c47..839145be 100644 --- a/Samples/binaryPartitionCG/binaryPartitionCG_vs2017.vcxproj +++ b/Samples/binaryPartitionCG/binaryPartitionCG_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/binaryPartitionCG.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/binaryPartitionCG/binaryPartitionCG_vs2019.vcxproj b/Samples/binaryPartitionCG/binaryPartitionCG_vs2019.vcxproj index 458e3518..84de4b69 100644 --- a/Samples/binaryPartitionCG/binaryPartitionCG_vs2019.vcxproj +++ b/Samples/binaryPartitionCG/binaryPartitionCG_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/binaryPartitionCG.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/boxFilterNPP/NsightEclipse.xml b/Samples/boxFilterNPP/NsightEclipse.xml index 8b1219f6..b0e598af 100644 --- a/Samples/boxFilterNPP/NsightEclipse.xml +++ b/Samples/boxFilterNPP/NsightEclipse.xml @@ -59,6 +59,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/boxFilterNPP/README.md b/Samples/boxFilterNPP/README.md index d403359c..1dee2b98 100644 --- a/Samples/boxFilterNPP/README.md +++ b/Samples/boxFilterNPP/README.md @@ -10,7 +10,7 @@ Performance Strategies, Image Processing, NPP Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2012.sln b/Samples/boxFilterNPP/boxFilterNPP_vs2012.sln deleted file mode 100644 index 1f2b1049..00000000 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boxFilterNPP", "boxFilterNPP_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2013.sln b/Samples/boxFilterNPP/boxFilterNPP_vs2013.sln deleted file mode 100644 index 144d2971..00000000 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boxFilterNPP", "boxFilterNPP_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2013.vcxproj b/Samples/boxFilterNPP/boxFilterNPP_vs2013.vcxproj deleted file mode 100644 index 5bb6ba57..00000000 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2013.vcxproj +++ /dev/null @@ -1,117 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - boxFilterNPP_vs2013 - boxFilterNPP - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir);../../Common/UtilNPP;../../Common/FreeImage/include; - - - Console - nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir);../../Common/FreeImage/lib/x64;../../Common/FreeImage/lib/$(TARGET_OS);../../Common/FreeImage/lib/$(TARGET_OS)/$(TARGET_ARCH); - $(OutDir)/boxFilterNPP.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - freeimage.lib;%(AdditionalDependencies) - - - - - - - - - - - diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2015.vcxproj b/Samples/boxFilterNPP/boxFilterNPP_vs2015.vcxproj index 617ac918..a8dac035 100644 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2015.vcxproj +++ b/Samples/boxFilterNPP/boxFilterNPP_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -112,6 +112,6 @@ - + diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2017.vcxproj b/Samples/boxFilterNPP/boxFilterNPP_vs2017.vcxproj index 77023d22..ecf6d250 100644 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2017.vcxproj +++ b/Samples/boxFilterNPP/boxFilterNPP_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -117,6 +117,6 @@ - + diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2019.vcxproj b/Samples/boxFilterNPP/boxFilterNPP_vs2019.vcxproj index eeb3c8a5..fd083632 100644 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2019.vcxproj +++ b/Samples/boxFilterNPP/boxFilterNPP_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -113,6 +113,6 @@ - + diff --git a/Samples/cannyEdgeDetectorNPP/NsightEclipse.xml b/Samples/cannyEdgeDetectorNPP/NsightEclipse.xml index d8bc0479..f34e30e1 100644 --- a/Samples/cannyEdgeDetectorNPP/NsightEclipse.xml +++ b/Samples/cannyEdgeDetectorNPP/NsightEclipse.xml @@ -55,6 +55,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/cannyEdgeDetectorNPP/README.md b/Samples/cannyEdgeDetectorNPP/README.md index d9a6f025..b8c08033 100644 --- a/Samples/cannyEdgeDetectorNPP/README.md +++ b/Samples/cannyEdgeDetectorNPP/README.md @@ -10,7 +10,7 @@ Performance Strategies, Image Processing, NPP Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2012.sln b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2012.sln deleted file mode 100644 index 56b2871f..00000000 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cannyEdgeDetectorNPP", "cannyEdgeDetectorNPP_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2013.sln b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2013.sln deleted file mode 100644 index 2d7f4131..00000000 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cannyEdgeDetectorNPP", "cannyEdgeDetectorNPP_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2013.vcxproj b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2013.vcxproj deleted file mode 100644 index 13c462a1..00000000 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2013.vcxproj +++ /dev/null @@ -1,117 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cannyEdgeDetectorNPP_vs2013 - cannyEdgeDetectorNPP - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir);../../Common/UtilNPP;../../Common/FreeImage/include; - - - Console - nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir);../../Common/FreeImage/lib/x64;../../Common/FreeImage/lib/$(TARGET_OS);../../Common/FreeImage/lib/$(TARGET_OS)/$(TARGET_ARCH); - $(OutDir)/cannyEdgeDetectorNPP.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - freeimage.lib;%(AdditionalDependencies) - - - - - - - - - - - diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2015.vcxproj b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2015.vcxproj index 77bacb3d..81b907ce 100644 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2015.vcxproj +++ b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -112,6 +112,6 @@ - + diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2017.vcxproj b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2017.vcxproj index 2a29b02a..7051f1d8 100644 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2017.vcxproj +++ b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -117,6 +117,6 @@ - + diff --git a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2019.vcxproj b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2019.vcxproj index 2b735caf..2c0377d2 100644 --- a/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2019.vcxproj +++ b/Samples/cannyEdgeDetectorNPP/cannyEdgeDetectorNPP_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -113,6 +113,6 @@ - + diff --git a/Samples/concurrentKernels/Makefile b/Samples/concurrentKernels/Makefile index 847f090b..efa37c13 100644 --- a/Samples/concurrentKernels/Makefile +++ b/Samples/concurrentKernels/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/concurrentKernels/NsightEclipse.xml b/Samples/concurrentKernels/NsightEclipse.xml index 959c0d36..5050175d 100644 --- a/Samples/concurrentKernels/NsightEclipse.xml +++ b/Samples/concurrentKernels/NsightEclipse.xml @@ -36,6 +36,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/concurrentKernels/README.md b/Samples/concurrentKernels/README.md index 34151489..0e3341aa 100644 --- a/Samples/concurrentKernels/README.md +++ b/Samples/concurrentKernels/README.md @@ -10,7 +10,7 @@ Performance Strategies ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -24,7 +24,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/concurrentKernels/concurrentKernels.cu b/Samples/concurrentKernels/concurrentKernels.cu index b54d1c89..15c895b8 100644 --- a/Samples/concurrentKernels/concurrentKernels.cu +++ b/Samples/concurrentKernels/concurrentKernels.cu @@ -163,7 +163,7 @@ int main(int argc, char **argv) { #if defined(__arm__) || defined(__aarch64__) // the kernel takes more time than the channel reset time on arm archs, so to // prevent hangs reduce time_clocks. - clock_t time_clocks = (clock_t)(kernel_time * (deviceProp.clockRate / 1000)); + clock_t time_clocks = (clock_t)(kernel_time * (deviceProp.clockRate / 100)); #else clock_t time_clocks = (clock_t)(kernel_time * deviceProp.clockRate); #endif diff --git a/Samples/concurrentKernels/concurrentKernels_vs2012.sln b/Samples/concurrentKernels/concurrentKernels_vs2012.sln deleted file mode 100644 index 9cb8a2df..00000000 --- a/Samples/concurrentKernels/concurrentKernels_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "concurrentKernels", "concurrentKernels_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/concurrentKernels/concurrentKernels_vs2013.sln b/Samples/concurrentKernels/concurrentKernels_vs2013.sln deleted file mode 100644 index d90f8153..00000000 --- a/Samples/concurrentKernels/concurrentKernels_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "concurrentKernels", "concurrentKernels_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/concurrentKernels/concurrentKernels_vs2015.vcxproj b/Samples/concurrentKernels/concurrentKernels_vs2015.vcxproj index 14335c59..e5ac6351 100644 --- a/Samples/concurrentKernels/concurrentKernels_vs2015.vcxproj +++ b/Samples/concurrentKernels/concurrentKernels_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/concurrentKernels.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/concurrentKernels/concurrentKernels_vs2017.vcxproj b/Samples/concurrentKernels/concurrentKernels_vs2017.vcxproj index 31858a48..d2c5c888 100644 --- a/Samples/concurrentKernels/concurrentKernels_vs2017.vcxproj +++ b/Samples/concurrentKernels/concurrentKernels_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/concurrentKernels.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/concurrentKernels/concurrentKernels_vs2019.vcxproj b/Samples/concurrentKernels/concurrentKernels_vs2019.vcxproj index b2f9ef42..18019795 100644 --- a/Samples/concurrentKernels/concurrentKernels_vs2019.vcxproj +++ b/Samples/concurrentKernels/concurrentKernels_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/concurrentKernels.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/conjugateGradientCudaGraphs/Makefile b/Samples/conjugateGradientCudaGraphs/Makefile index cd0c71f6..82bcf22e 100644 --- a/Samples/conjugateGradientCudaGraphs/Makefile +++ b/Samples/conjugateGradientCudaGraphs/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/conjugateGradientCudaGraphs/NsightEclipse.xml b/Samples/conjugateGradientCudaGraphs/NsightEclipse.xml index e07b7518..3bc5bd3e 100644 --- a/Samples/conjugateGradientCudaGraphs/NsightEclipse.xml +++ b/Samples/conjugateGradientCudaGraphs/NsightEclipse.xml @@ -58,6 +58,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/conjugateGradientCudaGraphs/README.md b/Samples/conjugateGradientCudaGraphs/README.md index 01fc7cd5..2d675c5b 100644 --- a/Samples/conjugateGradientCudaGraphs/README.md +++ b/Samples/conjugateGradientCudaGraphs/README.md @@ -10,7 +10,7 @@ Linear Algebra, CUBLAS Library, CUSPARSE Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaStreamBeginCapture, cudaStreamEndCapture, cudaGraphCreate, cudaGraphLaunch, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2012.sln b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2012.sln deleted file mode 100644 index 347c0144..00000000 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conjugateGradientCudaGraphs", "conjugateGradientCudaGraphs_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2012.vcxproj b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2012.vcxproj deleted file mode 100644 index ad1fab2d..00000000 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - conjugateGradientCudaGraphs_vs2012 - conjugateGradientCudaGraphs - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cublas.lib;cusparse.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/conjugateGradientCudaGraphs.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2013.sln b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2013.sln deleted file mode 100644 index da17ae9e..00000000 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conjugateGradientCudaGraphs", "conjugateGradientCudaGraphs_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2013.vcxproj b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2013.vcxproj deleted file mode 100644 index 1497f258..00000000 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - conjugateGradientCudaGraphs_vs2013 - conjugateGradientCudaGraphs - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cublas.lib;cusparse.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/conjugateGradientCudaGraphs.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2015.vcxproj b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2015.vcxproj index ebf5e05c..e1c1a2fb 100644 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2015.vcxproj +++ b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/conjugateGradientCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2017.vcxproj b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2017.vcxproj index 5ab677d8..eb57ae97 100644 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2017.vcxproj +++ b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/conjugateGradientCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2019.vcxproj b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2019.vcxproj index 98cd556f..76955931 100644 --- a/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2019.vcxproj +++ b/Samples/conjugateGradientCudaGraphs/conjugateGradientCudaGraphs_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/conjugateGradientCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/conjugateGradientMultiBlockCG/Makefile b/Samples/conjugateGradientMultiBlockCG/Makefile index 8d98ab7a..77b23960 100644 --- a/Samples/conjugateGradientMultiBlockCG/Makefile +++ b/Samples/conjugateGradientMultiBlockCG/Makefile @@ -267,15 +267,9 @@ ifeq ($(TARGET_ARCH),armv7l) SAMPLE_ENABLED := 0 endif -# This sample is not supported on aarch64 -ifeq ($(TARGET_ARCH),aarch64) - $(info >>> WARNING - conjugateGradientMultiBlockCG is not supported on aarch64 - waiving sample <<<) - SAMPLE_ENABLED := 0 -endif - -# This sample is not supported on sbsa -ifeq ($(TARGET_ARCH),sbsa) - $(info >>> WARNING - conjugateGradientMultiBlockCG is not supported on sbsa - waiving sample <<<) +# This sample is not supported on QNX +ifeq ($(TARGET_OS),qnx) + $(info >>> WARNING - conjugateGradientMultiBlockCG is not supported on QNX - waiving sample <<<) SAMPLE_ENABLED := 0 endif @@ -290,11 +284,38 @@ LIBRARIES := ################################################################################ +#Detect if installed version of GCC supports required C++11 +ifeq ($(TARGET_OS),linux) + empty := + space := $(empty) $(empty) + GCCVERSIONSTRING := $(shell expr `$(HOST_COMPILER) -dumpversion`) +#Create version number without "." + GCCVERSION := $(shell expr `echo $(GCCVERSIONSTRING)` | cut -f1 -d.) + GCCVERSION += $(shell expr `echo $(GCCVERSIONSTRING)` | cut -f2 -d.) + GCCVERSION += $(shell expr `echo $(GCCVERSIONSTRING)` | cut -f3 -d.) +# Make sure the version number has at least 3 decimals + GCCVERSION += 00 +# Remove spaces from the version number + GCCVERSION := $(subst $(space),$(empty),$(GCCVERSION)) +# Crop the version number to 3 decimals. + GCCVERSION := $(shell expr `echo $(GCCVERSION)` | cut -b1-3) +#$(warning $(GCCVERSION)) + + IS_MIN_VERSION := $(shell expr `echo $(GCCVERSION)` \>= 470) + + ifeq ($(IS_MIN_VERSION), 1) + $(info >>> GCC Version is greater or equal to 4.7.0 <<<) + else + $(info >>> Waiving build. Minimum GCC version required is 4.7.0<<<) + SAMPLE_ENABLED := 0 + endif +endif + # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 60 61 70 72 75 80 +SMS ?= 60 61 70 72 75 80 86 else -SMS ?= 60 61 70 75 80 +SMS ?= 60 61 70 75 80 86 endif ifeq ($(SMS),) @@ -313,9 +334,7 @@ GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) endif endif -ALL_CCFLAGS += -dc - -LIBRARIES += -lcudadevrt +ALL_CCFLAGS += --std=c++11 ifeq ($(SAMPLE_ENABLED),0) EXEC ?= @echo "[@]" diff --git a/Samples/conjugateGradientMultiBlockCG/NsightEclipse.xml b/Samples/conjugateGradientMultiBlockCG/NsightEclipse.xml index d3dfbc29..b88f22b6 100644 --- a/Samples/conjugateGradientMultiBlockCG/NsightEclipse.xml +++ b/Samples/conjugateGradientMultiBlockCG/NsightEclipse.xml @@ -3,7 +3,7 @@ conjugateGradientMultiBlockCG - -dc + --std=c++11 whole @@ -22,10 +22,9 @@ CUDA Sparse Matrix Unified Memory - GPGPU + CPP11 - cudadevrt @@ -45,6 +44,7 @@ sm72 sm75 sm80 + sm86 x86_64 @@ -57,6 +57,9 @@ windows7 + + aarch64 + 6.0 diff --git a/Samples/conjugateGradientMultiBlockCG/README.md b/Samples/conjugateGradientMultiBlockCG/README.md index b11f8bc7..a838d17d 100644 --- a/Samples/conjugateGradientMultiBlockCG/README.md +++ b/Samples/conjugateGradientMultiBlockCG/README.md @@ -10,7 +10,7 @@ Unified Memory, Linear Algebra, Cooperative Groups, MultiBlock Cooperative Group ## Supported SM Architectures -[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -18,7 +18,7 @@ Linux, Windows ## Supported CPU Architecture -x86_64, ppc64le +x86_64, ppc64le, aarch64 ## CUDA APIs involved @@ -27,7 +27,7 @@ x86_64, ppc64le ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run @@ -49,9 +49,9 @@ $ cd $ make ``` The samples makefiles can take advantage of certain options: -* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le. +* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le, aarch64. By default, TARGET_ARCH is set to HOST_ARCH. On a x86_64 machine, not setting TARGET_ARCH is the equivalent of setting TARGET_ARCH=x86_64.
-`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
+`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
`$ make TARGET_ARCH=aarch64`
See [here](http://docs.nvidia.com/cuda/cuda-samples/index.html#cross-samples) for more details. * **dbg=1** - build with debug symbols ``` diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.cu b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.cu index ba8461c3..72540ed4 100644 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.cu +++ b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.cu @@ -43,6 +43,7 @@ #include // helper for shared functions common to CUDA Samples #include +#include namespace cg = cooperative_groups; @@ -197,37 +198,30 @@ __device__ void gpuSaxpy(float *x, float *y, float a, int size, __device__ void gpuDotProduct(float *vecA, float *vecB, double *result, int size, const cg::thread_block &cta, const cg::grid_group &grid) { - __shared__ double tmp[THREADS_PER_BLOCK]; + extern __shared__ double tmp[]; double temp_sum = 0.0; for (int i = grid.thread_rank(); i < size; i += grid.size()) { temp_sum += static_cast(vecA[i] * vecB[i]); } - tmp[cta.thread_rank()] = temp_sum; - - cg::sync(cta); cg::thread_block_tile<32> tile32 = cg::tiled_partition<32>(cta); - double beta = temp_sum; - double temp; + temp_sum = cg::reduce(tile32, temp_sum, cg::plus()); - for (int i = tile32.size() / 2; i > 0; i >>= 1) { - if (tile32.thread_rank() < i) { - temp = tmp[cta.thread_rank() + i]; - beta += temp; - tmp[cta.thread_rank()] = beta; - } - cg::sync(tile32); + if (tile32.thread_rank() == 0) { + tmp[tile32.meta_group_rank()] = temp_sum; } + cg::sync(cta); - if (cta.thread_rank() == 0) { - beta = 0.0; - for (int i = 0; i < cta.size(); i += tile32.size()) { - beta += tmp[i]; + if (tile32.meta_group_rank() == 0) { + temp_sum = tile32.thread_rank() < tile32.meta_group_size() ? tmp[tile32.thread_rank()] : 0.0; + temp_sum = cg::reduce(tile32, temp_sum, cg::plus()); + + if (tile32.thread_rank() == 0) { + atomicAdd(result, temp_sum); } - atomicAdd(result, beta); } } @@ -238,10 +232,10 @@ __device__ void gpuCopyVector(float *srcA, float *destB, int size, } } -__device__ void gpuScaleVector(float *vec, float alpha, int size, - const cg::grid_group &grid) { +__device__ void gpuScaleVectorAndSaxpy(const float *x, float *y, float a, float scale, int size, + const cg::grid_group &grid) { for (int i = grid.thread_rank(); i < size; i += grid.size()) { - vec[i] = alpha * vec[i]; + y[i] = a * x[i] + scale * y[i]; } } @@ -276,10 +270,7 @@ extern "C" __global__ void gpuConjugateGradient(int *I, int *J, float *val, while (r1 > tol * tol && k <= max_iter) { if (k > 1) { b = r1 / r0; - gpuScaleVector(p, b, N, grid); - - cg::sync(grid); - gpuSaxpy(r, p, alpha, N, grid); + gpuScaleVectorAndSaxpy(r, p, alpha, b, N, grid); } else { gpuCopyVector(r, p, N, grid); } @@ -430,7 +421,7 @@ int main(int argc, char **argv) { (void *)&nz, (void *)&N, (void *)&tol, }; - int sMemSize = sizeof(double) * THREADS_PER_BLOCK; + int sMemSize = sizeof(double) * ((THREADS_PER_BLOCK/32) + 1); int numBlocksPerSm = 0; int numThreads = THREADS_PER_BLOCK; diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2012.sln b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2012.sln deleted file mode 100644 index c22e87c9..00000000 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conjugateGradientMultiBlockCG", "conjugateGradientMultiBlockCG_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2012.vcxproj b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2012.vcxproj deleted file mode 100644 index 6fccf0ae..00000000 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - conjugateGradientMultiBlockCG_vs2012 - conjugateGradientMultiBlockCG - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/conjugateGradientMultiBlockCG.exe - - - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - true - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2013.sln b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2013.sln deleted file mode 100644 index 417f79a1..00000000 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conjugateGradientMultiBlockCG", "conjugateGradientMultiBlockCG_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2013.vcxproj b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2013.vcxproj deleted file mode 100644 index 47d0a4c2..00000000 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - conjugateGradientMultiBlockCG_vs2013 - conjugateGradientMultiBlockCG - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/conjugateGradientMultiBlockCG.exe - - - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - true - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2015.vcxproj b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2015.vcxproj index ebb1ee85..14dd4e81 100644 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2015.vcxproj +++ b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -53,20 +53,19 @@ Level3 WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); + ./;$(CudaToolkitDir)/include;../../Common; Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); $(OutDir)/conjugateGradientMultiBlockCG.exe - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 - true @@ -103,6 +102,6 @@ - + diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2017.vcxproj b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2017.vcxproj index c7129808..ee8788ed 100644 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2017.vcxproj +++ b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -58,20 +58,19 @@ Level3 WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); + ./;$(CudaToolkitDir)/include;../../Common; Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); $(OutDir)/conjugateGradientMultiBlockCG.exe - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 - true @@ -108,6 +107,6 @@ - + diff --git a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2019.vcxproj b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2019.vcxproj index 4fbd02bb..dfb14a87 100644 --- a/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2019.vcxproj +++ b/Samples/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -54,20 +54,19 @@ Level3 WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); + ./;$(CudaToolkitDir)/include;../../Common; Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); $(OutDir)/conjugateGradientMultiBlockCG.exe - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 - true @@ -104,6 +103,6 @@ - + diff --git a/Samples/conjugateGradientMultiDeviceCG/Makefile b/Samples/conjugateGradientMultiDeviceCG/Makefile index 9f125347..6ac8829a 100644 --- a/Samples/conjugateGradientMultiDeviceCG/Makefile +++ b/Samples/conjugateGradientMultiDeviceCG/Makefile @@ -267,15 +267,9 @@ ifeq ($(TARGET_ARCH),armv7l) SAMPLE_ENABLED := 0 endif -# This sample is not supported on aarch64 -ifeq ($(TARGET_ARCH),aarch64) - $(info >>> WARNING - conjugateGradientMultiDeviceCG is not supported on aarch64 - waiving sample <<<) - SAMPLE_ENABLED := 0 -endif - -# This sample is not supported on sbsa -ifeq ($(TARGET_ARCH),sbsa) - $(info >>> WARNING - conjugateGradientMultiDeviceCG is not supported on sbsa - waiving sample <<<) +# This sample is not supported on QNX +ifeq ($(TARGET_OS),qnx) + $(info >>> WARNING - conjugateGradientMultiDeviceCG is not supported on QNX - waiving sample <<<) SAMPLE_ENABLED := 0 endif @@ -319,9 +313,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 60 61 70 72 75 80 +SMS ?= 60 61 70 72 75 80 86 else -SMS ?= 60 61 70 75 80 +SMS ?= 60 61 70 75 80 86 endif ifeq ($(SMS),) @@ -340,7 +334,7 @@ GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) endif endif -ALL_CCFLAGS += -dc -maxrregcount=64 --std=c++11 +ALL_CCFLAGS += -ewp -maxrregcount=64 --std=c++11 LIBRARIES += -lcudadevrt diff --git a/Samples/conjugateGradientMultiDeviceCG/NsightEclipse.xml b/Samples/conjugateGradientMultiDeviceCG/NsightEclipse.xml index 905be0ae..d79aa31b 100644 --- a/Samples/conjugateGradientMultiDeviceCG/NsightEclipse.xml +++ b/Samples/conjugateGradientMultiDeviceCG/NsightEclipse.xml @@ -3,7 +3,7 @@ conjugateGradientMultiDeviceCG - -dc + -ewp -maxrregcount=64 --std=c++11 @@ -40,10 +40,11 @@ true - conjugateGradientMultiBlockCG.cu + conjugateGradientMultiDeviceCG.cu UVM MDCG + CPP11 1:CUDA Advanced Topics @@ -55,6 +56,7 @@ sm72 sm75 sm80 + sm86 x86_64 @@ -67,6 +69,9 @@ windows + + aarch64 + 6.0 diff --git a/Samples/conjugateGradientMultiDeviceCG/README.md b/Samples/conjugateGradientMultiDeviceCG/README.md index 7aae376c..9f4e2059 100644 --- a/Samples/conjugateGradientMultiDeviceCG/README.md +++ b/Samples/conjugateGradientMultiDeviceCG/README.md @@ -10,7 +10,7 @@ Unified Memory, Linear Algebra, Cooperative Groups, MultiDevice Cooperative Grou ## Supported SM Architectures -[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -18,7 +18,7 @@ Linux, Windows ## Supported CPU Architecture -x86_64, ppc64le +x86_64, ppc64le, aarch64 ## CUDA APIs involved @@ -26,11 +26,11 @@ x86_64, ppc64le cudaMemAdvise, cudaMemPrefetchAsync, cudaLaunchCooperativeKernelMultiDevice, cudaStreamSynchronize, cudaOccupancyMaxActiveBlocksPerMultiprocessor ## Dependencies needed to build/run -[UVM](../../README.md#uvm), [MDCG](../../README.md#mdcg) +[UVM](../../README.md#uvm), [MDCG](../../README.md#mdcg), [CPP11](../../README.md#cpp11) ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run @@ -52,9 +52,9 @@ $ cd $ make ``` The samples makefiles can take advantage of certain options: -* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le. +* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le, aarch64. By default, TARGET_ARCH is set to HOST_ARCH. On a x86_64 machine, not setting TARGET_ARCH is the equivalent of setting TARGET_ARCH=x86_64.
-`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
+`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
`$ make TARGET_ARCH=aarch64`
See [here](http://docs.nvidia.com/cuda/cuda-samples/index.html#cross-samples) for more details. * **dbg=1** - build with debug symbols ``` diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2012.sln b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2012.sln deleted file mode 100644 index 64ef36a2..00000000 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conjugateGradientMultiDeviceCG", "conjugateGradientMultiDeviceCG_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2012.vcxproj b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2012.vcxproj deleted file mode 100644 index 6472eb97..00000000 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - conjugateGradientMultiDeviceCG_vs2012 - conjugateGradientMultiDeviceCG - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/conjugateGradientMultiDeviceCG.exe - - - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - true - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2013.sln b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2013.sln deleted file mode 100644 index 77fa91e8..00000000 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conjugateGradientMultiDeviceCG", "conjugateGradientMultiDeviceCG_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2013.vcxproj b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2013.vcxproj deleted file mode 100644 index a6e23d25..00000000 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - conjugateGradientMultiDeviceCG_vs2013 - conjugateGradientMultiDeviceCG - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cudadevrt.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/conjugateGradientMultiDeviceCG.exe - - - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - true - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2015.vcxproj b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2015.vcxproj index a3654d7c..7e37ac85 100644 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2015.vcxproj +++ b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,11 +62,10 @@ $(OutDir)/conjugateGradientMultiDeviceCG.exe - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 - true
@@ -103,6 +102,6 @@ - + diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2017.vcxproj b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2017.vcxproj index 695378ea..ff268d74 100644 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2017.vcxproj +++ b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,11 +67,10 @@ $(OutDir)/conjugateGradientMultiDeviceCG.exe - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 - true @@ -108,6 +107,6 @@ - + diff --git a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2019.vcxproj b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2019.vcxproj index fa60e158..4fddf867 100644 --- a/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2019.vcxproj +++ b/Samples/conjugateGradientMultiDeviceCG/conjugateGradientMultiDeviceCG_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,11 +63,10 @@ $(OutDir)/conjugateGradientMultiDeviceCG.exe - compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 - true @@ -104,6 +103,6 @@ - + diff --git a/Samples/cuSolverDn_LinearSolver/NsightEclipse.xml b/Samples/cuSolverDn_LinearSolver/NsightEclipse.xml index 9cf0af78..bd05ae1e 100644 --- a/Samples/cuSolverDn_LinearSolver/NsightEclipse.xml +++ b/Samples/cuSolverDn_LinearSolver/NsightEclipse.xml @@ -54,6 +54,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/cuSolverDn_LinearSolver/README.md b/Samples/cuSolverDn_LinearSolver/README.md index 41ab8320..3cff021d 100644 --- a/Samples/cuSolverDn_LinearSolver/README.md +++ b/Samples/cuSolverDn_LinearSolver/README.md @@ -10,7 +10,7 @@ Linear Algebra, CUSOLVER Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2012.sln b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2012.sln deleted file mode 100644 index 5cb51fb8..00000000 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cuSolverDn_LinearSolver", "cuSolverDn_LinearSolver_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2012.vcxproj b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2012.vcxproj deleted file mode 100644 index af572f81..00000000 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2012.vcxproj +++ /dev/null @@ -1,109 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cuSolverDn_LinearSolver_vs2012 - cuSolverDn_LinearSolver - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cusolver.lib;cublas.lib;cusparse.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cuSolverDn_LinearSolver.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2013.sln b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2013.sln deleted file mode 100644 index 5ba4a6f3..00000000 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cuSolverDn_LinearSolver", "cuSolverDn_LinearSolver_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2013.vcxproj b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2013.vcxproj deleted file mode 100644 index 0e2b7469..00000000 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2013.vcxproj +++ /dev/null @@ -1,109 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cuSolverDn_LinearSolver_vs2013 - cuSolverDn_LinearSolver - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cusolver.lib;cublas.lib;cusparse.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cuSolverDn_LinearSolver.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2015.vcxproj b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2015.vcxproj index c0cc5cfb..d24fb130 100644 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2015.vcxproj +++ b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -104,6 +104,6 @@ - + diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2017.vcxproj b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2017.vcxproj index 11dc7e6e..9e504b62 100644 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2017.vcxproj +++ b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -109,6 +109,6 @@ - + diff --git a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2019.vcxproj b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2019.vcxproj index 734e5293..bc13e2db 100644 --- a/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2019.vcxproj +++ b/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -105,6 +105,6 @@ - + diff --git a/Samples/cuSolverSp_LinearSolver/Makefile b/Samples/cuSolverSp_LinearSolver/Makefile index 7ef0549f..242bca46 100644 --- a/Samples/cuSolverSp_LinearSolver/Makefile +++ b/Samples/cuSolverSp_LinearSolver/Makefile @@ -272,9 +272,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/cuSolverSp_LinearSolver/NsightEclipse.xml b/Samples/cuSolverSp_LinearSolver/NsightEclipse.xml index a76bb7af..e7679e57 100644 --- a/Samples/cuSolverSp_LinearSolver/NsightEclipse.xml +++ b/Samples/cuSolverSp_LinearSolver/NsightEclipse.xml @@ -55,6 +55,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/cuSolverSp_LinearSolver/README.md b/Samples/cuSolverSp_LinearSolver/README.md index af7831fc..617be4c6 100644 --- a/Samples/cuSolverSp_LinearSolver/README.md +++ b/Samples/cuSolverSp_LinearSolver/README.md @@ -10,7 +10,7 @@ Linear Algebra, CUSOLVER Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2012.sln b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2012.sln deleted file mode 100644 index 77b28c03..00000000 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cuSolverSp_LinearSolver", "cuSolverSp_LinearSolver_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2012.vcxproj b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2012.vcxproj deleted file mode 100644 index b22ef78c..00000000 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2012.vcxproj +++ /dev/null @@ -1,109 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cuSolverSp_LinearSolver_vs2012 - cuSolverSp_LinearSolver - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cusolver.lib;cusparse.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cuSolverSp_LinearSolver.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2013.sln b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2013.sln deleted file mode 100644 index 5811063d..00000000 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cuSolverSp_LinearSolver", "cuSolverSp_LinearSolver_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2013.vcxproj b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2013.vcxproj deleted file mode 100644 index ab1e78f9..00000000 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2013.vcxproj +++ /dev/null @@ -1,109 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cuSolverSp_LinearSolver_vs2013 - cuSolverSp_LinearSolver - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cusolver.lib;cusparse.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cuSolverSp_LinearSolver.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2015.vcxproj b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2015.vcxproj index a9c03e23..ae5a5e38 100644 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2015.vcxproj +++ b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/cuSolverSp_LinearSolver.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,6 +104,6 @@ - + diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2017.vcxproj b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2017.vcxproj index e1c6793b..f235c42e 100644 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2017.vcxproj +++ b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/cuSolverSp_LinearSolver.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -109,6 +109,6 @@ - + diff --git a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2019.vcxproj b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2019.vcxproj index 9e8ff635..1063099b 100644 --- a/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2019.vcxproj +++ b/Samples/cuSolverSp_LinearSolver/cuSolverSp_LinearSolver_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/cuSolverSp_LinearSolver.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -105,6 +105,6 @@ - + diff --git a/Samples/cudaCompressibleMemory/Makefile b/Samples/cudaCompressibleMemory/Makefile index d29b16e4..65db6e89 100644 --- a/Samples/cudaCompressibleMemory/Makefile +++ b/Samples/cudaCompressibleMemory/Makefile @@ -294,9 +294,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/cudaCompressibleMemory/README.md b/Samples/cudaCompressibleMemory/README.md index 6f59ac2c..b578829c 100644 --- a/Samples/cudaCompressibleMemory/README.md +++ b/Samples/cudaCompressibleMemory/README.md @@ -10,7 +10,7 @@ CUDA Driver API, Compressible Memory, MMAP ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaMalloc, cudaFree ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2012.sln b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2012.sln deleted file mode 100644 index 8fe36227..00000000 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaCompressibleMemory", "cudaCompressibleMemory_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2012.vcxproj b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2012.vcxproj deleted file mode 100644 index 65e4a683..00000000 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cudaCompressibleMemory_vs2012 - cudaCompressibleMemory - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cuda.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cudaCompressibleMemory.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2013.sln b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2013.sln deleted file mode 100644 index e19042ac..00000000 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaCompressibleMemory", "cudaCompressibleMemory_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2013.vcxproj b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2013.vcxproj deleted file mode 100644 index db459933..00000000 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cudaCompressibleMemory_vs2013 - cudaCompressibleMemory - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cuda.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cudaCompressibleMemory.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2015.vcxproj b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2015.vcxproj index 706e5d54..9b25767c 100644 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2015.vcxproj +++ b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/cudaCompressibleMemory.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2017.vcxproj b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2017.vcxproj index 7294e0b9..67d09cfe 100644 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2017.vcxproj +++ b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/cudaCompressibleMemory.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -108,6 +108,6 @@ - + diff --git a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2019.vcxproj b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2019.vcxproj index 4ae71760..4aad1e47 100644 --- a/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2019.vcxproj +++ b/Samples/cudaCompressibleMemory/cudaCompressibleMemory_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/cudaCompressibleMemory.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,6 +104,6 @@ - + diff --git a/Samples/cudaNvSci/Makefile b/Samples/cudaNvSci/Makefile index ca8e28a2..19ee5312 100644 --- a/Samples/cudaNvSci/Makefile +++ b/Samples/cudaNvSci/Makefile @@ -312,9 +312,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/cudaNvSci/NsightEclipse.xml b/Samples/cudaNvSci/NsightEclipse.xml index f75a0beb..614bb629 100644 --- a/Samples/cudaNvSci/NsightEclipse.xml +++ b/Samples/cudaNvSci/NsightEclipse.xml @@ -54,6 +54,7 @@ sm72 sm75 sm80 + sm86 aarch64 diff --git a/Samples/cudaNvSci/README.md b/Samples/cudaNvSci/README.md index dbde9f48..fbb09f32 100644 --- a/Samples/cudaNvSci/README.md +++ b/Samples/cudaNvSci/README.md @@ -10,7 +10,7 @@ CUDA NvSci Interop, Data Parallel Algorithms, Image Processing ## Supported SM Architectures -[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaImportExternalMemory, cudaExternalMemoryGetMappedBuffer, cudaExternalMemoryG ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/cudaNvSci/imageKernels.cu b/Samples/cudaNvSci/imageKernels.cu index dbca136d..f88a2950 100644 --- a/Samples/cudaNvSci/imageKernels.cu +++ b/Samples/cudaNvSci/imageKernels.cu @@ -92,8 +92,8 @@ void launchGrayScaleKernel(unsigned int *d_rgbaImage, rgbToGrayscaleKernel<<>>( d_rgbaImage, imageWidth, imageHeight); - unsigned int *outputData = - (unsigned int *)malloc(sizeof(unsigned int) * imageWidth * imageHeight); + unsigned int *outputData; + checkCudaErrors(cudaMallocHost(&outputData, sizeof(unsigned int) * imageWidth * imageHeight)); checkCudaErrors(cudaMemcpyAsync( outputData, d_rgbaImage, sizeof(unsigned int) * imageWidth * imageHeight, cudaMemcpyDeviceToHost, stream)); @@ -106,7 +106,7 @@ void launchGrayScaleKernel(unsigned int *d_rgbaImage, imageHeight); printf("Wrote '%s'\n", outputFilename); - free(outputData); + checkCudaErrors(cudaFreeHost(outputData)); } void rotateKernel(cudaTextureObject_t &texObj, const float angle, diff --git a/Samples/cudaOpenMP/Makefile b/Samples/cudaOpenMP/Makefile new file mode 100644 index 00000000..353ad427 --- /dev/null +++ b/Samples/cudaOpenMP/Makefile @@ -0,0 +1,367 @@ +################################################################################ +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################ +# +# Makefile project only supported on Mac OS X and Linux Platforms) +# +################################################################################ + +# Location of the CUDA Toolkit +CUDA_PATH ?= /usr/local/cuda + +############################## +# start deprecated interface # +############################## +ifeq ($(x86_64),1) + $(info WARNING - x86_64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=x86_64 instead) + TARGET_ARCH ?= x86_64 +endif +ifeq ($(ARMv7),1) + $(info WARNING - ARMv7 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=armv7l instead) + TARGET_ARCH ?= armv7l +endif +ifeq ($(aarch64),1) + $(info WARNING - aarch64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=aarch64 instead) + TARGET_ARCH ?= aarch64 +endif +ifeq ($(ppc64le),1) + $(info WARNING - ppc64le variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=ppc64le instead) + TARGET_ARCH ?= ppc64le +endif +ifneq ($(GCC),) + $(info WARNING - GCC variable has been deprecated) + $(info WARNING - please use HOST_COMPILER=$(GCC) instead) + HOST_COMPILER ?= $(GCC) +endif +ifneq ($(abi),) + $(error ERROR - abi variable has been removed) +endif +############################ +# end deprecated interface # +############################ + +# architecture +HOST_ARCH := $(shell uname -m) +TARGET_ARCH ?= $(HOST_ARCH) +ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le armv7l)) + ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le)) + TARGET_SIZE := 64 + else ifneq (,$(filter $(TARGET_ARCH),armv7l)) + TARGET_SIZE := 32 + endif + else + TARGET_SIZE := $(shell getconf LONG_BIT) + endif +else + $(error ERROR - unsupported value $(TARGET_ARCH) for TARGET_ARCH!) +endif + +# sbsa and aarch64 systems look similar. Need to differentiate them at host level for now. +ifeq ($(HOST_ARCH),aarch64) + ifeq ($(CUDA_PATH)/targets/sbsa-linux,$(shell ls -1d $(CUDA_PATH)/targets/sbsa-linux)) + HOST_ARCH := sbsa + TARGET_ARCH := sbsa + endif +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq (,$(filter $(HOST_ARCH)-$(TARGET_ARCH),aarch64-armv7l x86_64-armv7l x86_64-aarch64 x86_64-sbsa x86_64-ppc64le)) + $(error ERROR - cross compiling from $(HOST_ARCH) to $(TARGET_ARCH) is not supported!) + endif +endif + +# When on native aarch64 system with userspace of 32-bit, change TARGET_ARCH to armv7l +ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_SIZE),aarch64-aarch64-32) + TARGET_ARCH = armv7l +endif + +# operating system +HOST_OS := $(shell uname -s 2>/dev/null | tr "[:upper:]" "[:lower:]") +TARGET_OS ?= $(HOST_OS) +ifeq (,$(filter $(TARGET_OS),linux darwin qnx android)) + $(error ERROR - unsupported value $(TARGET_OS) for TARGET_OS!) +endif + +# host compiler +ifeq ($(TARGET_OS),darwin) + ifeq ($(shell expr `xcodebuild -version | grep -i xcode | awk '{print $$2}' | cut -d'.' -f1` \>= 5),1) + HOST_COMPILER ?= clang++ + endif +else ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(HOST_ARCH)-$(TARGET_ARCH),x86_64-armv7l) + ifeq ($(TARGET_OS),linux) + HOST_COMPILER ?= arm-linux-gnueabihf-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/arm-unknown-nto-qnx6.6.0eabi-g++ + else ifeq ($(TARGET_OS),android) + HOST_COMPILER ?= arm-linux-androideabi-g++ + endif + else ifeq ($(TARGET_ARCH),aarch64) + ifeq ($(TARGET_OS), linux) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++ + else ifeq ($(TARGET_OS), android) + HOST_COMPILER ?= aarch64-linux-android-clang++ + endif + else ifeq ($(TARGET_ARCH),sbsa) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_ARCH),ppc64le) + HOST_COMPILER ?= powerpc64le-linux-gnu-g++ + endif +endif +HOST_COMPILER ?= g++ +NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(HOST_COMPILER) + +# internal flags +NVCCFLAGS := -m${TARGET_SIZE} +CCFLAGS := +LDFLAGS := + +# build flags +ifeq ($(TARGET_OS),darwin) + LDFLAGS += -rpath $(CUDA_PATH)/lib + CCFLAGS += -arch $(HOST_ARCH) +else ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_OS),x86_64-armv7l-linux) + LDFLAGS += --dynamic-linker=/lib/ld-linux-armhf.so.3 + CCFLAGS += -mfloat-abi=hard +else ifeq ($(TARGET_OS),android) + LDFLAGS += -pie + CCFLAGS += -fpie -fpic -fexceptions +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/arm-linux-gnueabihf + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib -L$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/lib/aarch64-linux-gnu -L$(TARGET_FS)/lib/aarch64-linux-gnu + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib -L$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/aarch64-linux-gnu -L$(TARGET_FS)/usr/lib/aarch64-linux-gnu + LDFLAGS += --unresolved-symbols=ignore-in-shared-libs + CCFLAGS += -isystem=$(TARGET_FS)/usr/include -I$(TARGET_FS)/usr/include + CCFLAGS += -isystem=$(TARGET_FS)/usr/include/aarch64-linux-gnu -I$(TARGET_FS)/usr/include/aarch64-linux-gnu + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CCFLAGS += -DWIN_INTERFACE_CUSTOM -I/usr/include/aarch64-qnx-gnu + LDFLAGS += -lsocket + LDFLAGS += -rpath=/usr/lib/aarch64-qnx-gnu -L/usr/lib/aarch64-qnx-gnu + ifneq ($(TARGET_FS),) + LDFLAGS += -rpath=$(TARGET_FS)/usr/lib -L $(TARGET_FS)/usr/lib + LDFLAGS += -rpath=$(TARGET_FS)/usr/libnvidia -L $(TARGET_FS)/usr/libnvidia + endif + ifdef TARGET_OVERRIDE # cuda toolkit targets override + NVCCFLAGS += -target-dir $(TARGET_OVERRIDE) + endif + endif +endif + +# Install directory of different arch +CUDA_INSTALL_TARGET_DIR := +ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-gnueabihf/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),sbsa-linux) + CUDA_INSTALL_TARGET_DIR = targets/sbsa-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-android) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-android) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-qnx) + CUDA_INSTALL_TARGET_DIR = targets/ARMv7-linux-QNX/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-qnx/ +else ifeq ($(TARGET_ARCH),ppc64le) + CUDA_INSTALL_TARGET_DIR = targets/ppc64le-linux/ +endif + +# Debug build flags +ifeq ($(dbg),1) + NVCCFLAGS += -g -G + BUILD_TYPE := debug +else + BUILD_TYPE := release +endif + +ALL_CCFLAGS := +ALL_CCFLAGS += $(NVCCFLAGS) +ALL_CCFLAGS += $(EXTRA_NVCCFLAGS) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(CCFLAGS)) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS)) + +UBUNTU = $(shell lsb_release -i -s 2>/dev/null | grep -i ubuntu) + +SAMPLE_ENABLED := 1 + +# This sample is not supported on Mac OSX +ifeq ($(TARGET_OS),darwin) + $(info >>> WARNING - cudaOpenMP is not supported on Mac OSX - waiving sample <<<) + SAMPLE_ENABLED := 0 +endif + +# This sample is not supported on QNX +ifeq ($(TARGET_OS),qnx) + $(info >>> WARNING - cudaOpenMP is not supported on QNX - waiving sample <<<) + SAMPLE_ENABLED := 0 +endif + +ALL_LDFLAGS := +ALL_LDFLAGS += $(ALL_CCFLAGS) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS)) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(EXTRA_LDFLAGS)) + +# Common includes and paths for CUDA +INCLUDES := -I../../Common +LIBRARIES := + +################################################################################ + +# Attempt to compile a minimal OpenMP application. If a.out exists, OpenMP is properly set up. +ifneq (,$(filter $(TARGET_OS),linux android)) + +ifneq (,$(filter $(TARGET_OS), android)) + LIBRARIES += -lomp +else + LIBRARIES += -lgomp +endif + +ALL_CCFLAGS += -Xcompiler -fopenmp +$(shell echo "#include " > test.c ; echo "int main() { omp_get_num_threads(); return 0; }" >> test.c ; $(HOST_COMPILER) -fopenmp test.c) +OPENMP ?= $(shell find a.out 2>/dev/null) + +ifeq ($(OPENMP),) + $(info -----------------------------------------------------------------------------------------------) + $(info WARNING - OpenMP is unable to compile) + $(info -----------------------------------------------------------------------------------------------) + $(info This CUDA Sample cannot be built if the OpenMP compiler is not set up correctly.) + $(info This will be a dry-run of the Makefile.) + $(info For more information on how to set up your environment to build and run this ) + $(info sample, please refer the CUDA Samples documentation and release notes) + $(info -----------------------------------------------------------------------------------------------) + SAMPLE_ENABLED := 0 +endif + +$(shell rm a.out test.c 2>/dev/null) +endif + +# Gencode arguments +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 +else +SMS ?= 35 37 50 52 60 61 70 75 80 86 +endif + +ifeq ($(SMS),) +$(info >>> WARNING - no SM architectures have been specified - waiving sample <<<) +SAMPLE_ENABLED := 0 +endif + +ifeq ($(GENCODE_FLAGS),) +# Generate SASS code for each SM architecture listed in $(SMS) +$(foreach sm,$(SMS),$(eval GENCODE_FLAGS += -gencode arch=compute_$(sm),code=sm_$(sm))) + +# Generate PTX code from the highest SM architecture in $(SMS) to guarantee forward-compatibility +HIGHEST_SM := $(lastword $(sort $(SMS))) +ifneq ($(HIGHEST_SM),) +GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) +endif +endif + +ifeq ($(SAMPLE_ENABLED),0) +EXEC ?= @echo "[@]" +endif + +################################################################################ + +# Target rules +all: build + +build: cudaOpenMP + +check.deps: +ifeq ($(SAMPLE_ENABLED),0) + @echo "Sample will be waived due to the above missing dependencies" +else + @echo "Sample is ready - all dependencies have been met" +endif + +cudaOpenMP.o:cudaOpenMP.cu + $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $< + +cudaOpenMP: cudaOpenMP.o + $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $+ $(LIBRARIES) + $(EXEC) mkdir -p ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + $(EXEC) cp $@ ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + +run: build + $(EXEC) ./cudaOpenMP + +clean: + rm -f cudaOpenMP cudaOpenMP.o + rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/cudaOpenMP + +clobber: clean diff --git a/Samples/cudaOpenMP/README.md b/Samples/cudaOpenMP/README.md new file mode 100644 index 00000000..9a1ba169 --- /dev/null +++ b/Samples/cudaOpenMP/README.md @@ -0,0 +1,74 @@ +# cudaOpenMP - cudaOpenMP + +## Description + +This sample demonstrates how to use OpenMP API to write an application for multiple GPUs. + +## Key Concepts + +CUDA Systems Integration, OpenMP, Multithreading + +## Supported SM Architectures + +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) + +## Supported OSes + +Linux, Windows + +## Supported CPU Architecture + +x86_64, ppc64le, armv7l + +## CUDA APIs involved + +### [CUDA Runtime API](http://docs.nvidia.com/cuda/cuda-runtime-api/index.html) +cudaMalloc, cudaFree, cudaMemcpy + +## Dependencies needed to build/run +[OpenMP](../../README.md#openmp) + +## Prerequisites + +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Make sure the dependencies mentioned in [Dependencies]() section above are installed. + +## Build and Run + +### Windows +The Windows samples are built using the Visual Studio IDE. Solution files (.sln) are provided for each supported version of Visual Studio, using the format: +``` +*_vs.sln - for Visual Studio +``` +Each individual sample has its own set of solution files in its directory: + +To build/examine all the samples at once, the complete solution files should be used. To build/examine a single sample, the individual sample solution files should be used. +> **Note:** Some samples require that the Microsoft DirectX SDK (June 2010 or newer) be installed and that the VC++ directory paths are properly set up (**Tools > Options...**). Check DirectX Dependencies section for details." + +### Linux +The Linux samples are built using makefiles. To use the makefiles, change the current directory to the sample directory you wish to build, and run make: +``` +$ cd +$ make +``` +The samples makefiles can take advantage of certain options: +* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le, armv7l. + By default, TARGET_ARCH is set to HOST_ARCH. On a x86_64 machine, not setting TARGET_ARCH is the equivalent of setting TARGET_ARCH=x86_64.
+`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
`$ make TARGET_ARCH=armv7l`
+ See [here](http://docs.nvidia.com/cuda/cuda-samples/index.html#cross-samples) for more details. +* **dbg=1** - build with debug symbols + ``` + $ make dbg=1 + ``` +* **SMS="A B ..."** - override the SM architectures for which the sample will be built, where `"A B ..."` is a space-delimited list of SM architectures. For example, to generate SASS for SM 50 and SM 60, use `SMS="50 60"`. + ``` + $ make SMS="50 60" + ``` + +* **HOST_COMPILER=** - override the default g++ host compiler. See the [Linux Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements) for a list of supported host compilers. +``` + $ make HOST_COMPILER=g++ +``` + +## References (for more details) + diff --git a/Samples/cudaOpenMP/cudaOpenMP.cu b/Samples/cudaOpenMP/cudaOpenMP.cu new file mode 100644 index 00000000..ba10df04 --- /dev/null +++ b/Samples/cudaOpenMP/cudaOpenMP.cu @@ -0,0 +1,159 @@ +/* Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Multi-GPU sample using OpenMP for threading on the CPU side + * needs a compiler that supports OpenMP 2.0 + */ + +#include +#include +#include // stdio functions are used since C++ streams aren't necessarily thread safe + +using namespace std; + +// a simple kernel that simply increments each array element by b +__global__ void kernelAddConstant(int *g_a, const int b) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + g_a[idx] += b; +} + +// a predicate that checks whether each array element is set to its index plus b +int correctResult(int *data, const int n, const int b) { + for (int i = 0; i < n; i++) + if (data[i] != i + b) return 0; + + return 1; +} + +int main(int argc, char *argv[]) { + int num_gpus = 0; // number of CUDA GPUs + + printf("%s Starting...\n\n", argv[0]); + + ///////////////////////////////////////////////////////////////// + // determine the number of CUDA capable GPUs + // + cudaGetDeviceCount(&num_gpus); + + if (num_gpus < 1) { + printf("no CUDA capable devices were detected\n"); + return 1; + } + + ///////////////////////////////////////////////////////////////// + // display CPU and GPU configuration + // + printf("number of host CPUs:\t%d\n", omp_get_num_procs()); + printf("number of CUDA devices:\t%d\n", num_gpus); + + for (int i = 0; i < num_gpus; i++) { + cudaDeviceProp dprop; + cudaGetDeviceProperties(&dprop, i); + printf(" %d: %s\n", i, dprop.name); + } + + printf("---------------------------\n"); + + ///////////////////////////////////////////////////////////////// + // initialize data + // + unsigned int n = num_gpus * 8192; + unsigned int nbytes = n * sizeof(int); + int *a = 0; // pointer to data on the CPU + int b = 3; // value by which the array is incremented + a = (int *)malloc(nbytes); + + if (0 == a) { + printf("couldn't allocate CPU memory\n"); + return 1; + } + + for (unsigned int i = 0; i < n; i++) a[i] = i; + + //////////////////////////////////////////////////////////////// + // run as many CPU threads as there are CUDA devices + // each CPU thread controls a different device, processing its + // portion of the data. It's possible to use more CPU threads + // than there are CUDA devices, in which case several CPU + // threads will be allocating resources and launching kernels + // on the same device. For example, try omp_set_num_threads(2*num_gpus); + // Recall that all variables declared inside an "omp parallel" scope are + // local to each CPU thread + // + omp_set_num_threads( + num_gpus); // create as many CPU threads as there are CUDA devices +// omp_set_num_threads(2*num_gpus);// create twice as many CPU threads as there +// are CUDA devices +#pragma omp parallel + { + unsigned int cpu_thread_id = omp_get_thread_num(); + unsigned int num_cpu_threads = omp_get_num_threads(); + + // set and check the CUDA device for this CPU thread + int gpu_id = -1; + checkCudaErrors(cudaSetDevice( + cpu_thread_id % + num_gpus)); // "% num_gpus" allows more CPU threads than GPU devices + checkCudaErrors(cudaGetDevice(&gpu_id)); + printf("CPU thread %d (of %d) uses CUDA device %d\n", cpu_thread_id, + num_cpu_threads, gpu_id); + + int *d_a = + 0; // pointer to memory on the device associated with this CPU thread + int *sub_a = + a + + cpu_thread_id * n / + num_cpu_threads; // pointer to this CPU thread's portion of data + unsigned int nbytes_per_kernel = nbytes / num_cpu_threads; + dim3 gpu_threads(128); // 128 threads per block + dim3 gpu_blocks(n / (gpu_threads.x * num_cpu_threads)); + + checkCudaErrors(cudaMalloc((void **)&d_a, nbytes_per_kernel)); + checkCudaErrors(cudaMemset(d_a, 0, nbytes_per_kernel)); + checkCudaErrors( + cudaMemcpy(d_a, sub_a, nbytes_per_kernel, cudaMemcpyHostToDevice)); + kernelAddConstant<<>>(d_a, b); + + checkCudaErrors( + cudaMemcpy(sub_a, d_a, nbytes_per_kernel, cudaMemcpyDeviceToHost)); + checkCudaErrors(cudaFree(d_a)); + } + printf("---------------------------\n"); + + if (cudaSuccess != cudaGetLastError()) + printf("%s\n", cudaGetErrorString(cudaGetLastError())); + + //////////////////////////////////////////////////////////////// + // check the result + // + bool bResult = correctResult(a, n, b); + + if (a) free(a); // free CPU memory + + exit(bResult ? EXIT_SUCCESS : EXIT_FAILURE); +} diff --git a/Samples/simpleIPC/simpleIPC_vs2013.sln b/Samples/cudaOpenMP/cudaOpenMP_vs2015.sln similarity index 75% rename from Samples/simpleIPC/simpleIPC_vs2013.sln rename to Samples/cudaOpenMP/cudaOpenMP_vs2015.sln index 16384816..6387449b 100644 --- a/Samples/simpleIPC/simpleIPC_vs2013.sln +++ b/Samples/cudaOpenMP/cudaOpenMP_vs2015.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleIPC", "simpleIPC_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +Microsoft Visual Studio Solution File, Format Version 14.00 +# Visual Studio 2015 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaOpenMP", "cudaOpenMP_vs2015.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/concurrentKernels/concurrentKernels_vs2012.vcxproj b/Samples/cudaOpenMP/cudaOpenMP_vs2015.vcxproj similarity index 89% rename from Samples/concurrentKernels/concurrentKernels_vs2012.vcxproj rename to Samples/cudaOpenMP/cudaOpenMP_vs2015.vcxproj index 48520a70..c101849d 100644 --- a/Samples/concurrentKernels/concurrentKernels_vs2012.vcxproj +++ b/Samples/cudaOpenMP/cudaOpenMP_vs2015.vcxproj @@ -15,15 +15,15 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - concurrentKernels_vs2012 - concurrentKernels + cudaOpenMP_vs2015 + cudaOpenMP Application MultiByte - v110 + v140 true @@ -33,7 +33,7 @@ - + @@ -59,13 +59,14 @@ Console cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/concurrentKernels.exe + $(OutDir)/cudaOpenMP.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 + /openmp
@@ -97,11 +98,11 @@
- + - + diff --git a/Samples/simpleIPC/simpleIPC_vs2012.sln b/Samples/cudaOpenMP/cudaOpenMP_vs2017.sln similarity index 82% rename from Samples/simpleIPC/simpleIPC_vs2012.sln rename to Samples/cudaOpenMP/cudaOpenMP_vs2017.sln index d6650401..2f910c13 100644 --- a/Samples/simpleIPC/simpleIPC_vs2012.sln +++ b/Samples/cudaOpenMP/cudaOpenMP_vs2017.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleIPC", "simpleIPC_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2017 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaOpenMP", "cudaOpenMP_vs2017.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2012.vcxproj b/Samples/cudaOpenMP/cudaOpenMP_vs2017.vcxproj similarity index 81% rename from Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2012.vcxproj rename to Samples/cudaOpenMP/cudaOpenMP_vs2017.vcxproj index ebfc5c9f..c056a772 100644 --- a/Samples/UnifiedMemoryPerf/UnifiedMemoryPerf_vs2012.vcxproj +++ b/Samples/cudaOpenMP/cudaOpenMP_vs2017.vcxproj @@ -15,15 +15,20 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - UnifiedMemoryPerf_vs2012 - UnifiedMemoryPerf + cudaOpenMP_vs2017 + cudaOpenMP + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + $(LatestTargetPlatformVersion) + $(WindowsTargetPlatformVersion) + Application MultiByte - v110 + v141 true @@ -33,7 +38,7 @@ - + @@ -59,13 +64,14 @@ Console cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/UnifiedMemoryPerf.exe + $(OutDir)/cudaOpenMP.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 + /openmp @@ -97,14 +103,11 @@
- - - - - + + - + diff --git a/Samples/shfl_scan/shfl_scan_vs2012.sln b/Samples/cudaOpenMP/cudaOpenMP_vs2019.sln similarity index 81% rename from Samples/shfl_scan/shfl_scan_vs2012.sln rename to Samples/cudaOpenMP/cudaOpenMP_vs2019.sln index 104a0f01..a2839d52 100644 --- a/Samples/shfl_scan/shfl_scan_vs2012.sln +++ b/Samples/cudaOpenMP/cudaOpenMP_vs2019.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shfl_scan", "shfl_scan_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2019 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaOpenMP", "cudaOpenMP_vs2019.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/concurrentKernels/concurrentKernels_vs2013.vcxproj b/Samples/cudaOpenMP/cudaOpenMP_vs2019.vcxproj similarity index 88% rename from Samples/concurrentKernels/concurrentKernels_vs2013.vcxproj rename to Samples/cudaOpenMP/cudaOpenMP_vs2019.vcxproj index 2be82287..24bf4645 100644 --- a/Samples/concurrentKernels/concurrentKernels_vs2013.vcxproj +++ b/Samples/cudaOpenMP/cudaOpenMP_vs2019.vcxproj @@ -15,15 +15,16 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - concurrentKernels_vs2013 - concurrentKernels + cudaOpenMP_vs2019 + cudaOpenMP Application MultiByte - v120 + v142 + 10.0 true @@ -33,7 +34,7 @@ - + @@ -59,13 +60,14 @@ Console cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/concurrentKernels.exe + $(OutDir)/cudaOpenMP.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 + /openmp @@ -97,11 +99,11 @@
- + - + diff --git a/Samples/cudaTensorCoreGemm/Makefile b/Samples/cudaTensorCoreGemm/Makefile index 45a028b3..8e9c4c3d 100644 --- a/Samples/cudaTensorCoreGemm/Makefile +++ b/Samples/cudaTensorCoreGemm/Makefile @@ -280,9 +280,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 70 72 75 80 +SMS ?= 70 72 75 80 86 else -SMS ?= 70 75 80 +SMS ?= 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/cudaTensorCoreGemm/NsightEclipse.xml b/Samples/cudaTensorCoreGemm/NsightEclipse.xml index 3e33a22a..45ced6d1 100644 --- a/Samples/cudaTensorCoreGemm/NsightEclipse.xml +++ b/Samples/cudaTensorCoreGemm/NsightEclipse.xml @@ -46,6 +46,7 @@ In addition to that, it demonstrates the use of the new CUDA function attribute sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/cudaTensorCoreGemm/README.md b/Samples/cudaTensorCoreGemm/README.md index d9de3e8c..f334a60e 100644 --- a/Samples/cudaTensorCoreGemm/README.md +++ b/Samples/cudaTensorCoreGemm/README.md @@ -14,7 +14,7 @@ Matrix Multiply, WMMA, Tensor Cores ## Supported SM Architectures -[SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -31,7 +31,7 @@ cudaMallocManaged, cudaDeviceSynchronize, cudaFuncSetAttribute, cudaEventCreate, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2012.sln b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2012.sln deleted file mode 100644 index 93cde543..00000000 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaTensorCoreGemm", "cudaTensorCoreGemm_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2012.vcxproj b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2012.vcxproj deleted file mode 100644 index 6b5093bb..00000000 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cudaTensorCoreGemm_vs2012 - cudaTensorCoreGemm - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cudaTensorCoreGemm.exe - - - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2013.sln b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2013.sln deleted file mode 100644 index 1c767fc9..00000000 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cudaTensorCoreGemm", "cudaTensorCoreGemm_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2013.vcxproj b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2013.vcxproj deleted file mode 100644 index d948962f..00000000 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - cudaTensorCoreGemm_vs2013 - cudaTensorCoreGemm - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/cudaTensorCoreGemm.exe - - - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2015.vcxproj b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2015.vcxproj index 55bf9310..c38e4179 100644 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2015.vcxproj +++ b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/cudaTensorCoreGemm.exe - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2017.vcxproj b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2017.vcxproj index 1dc900e7..c6527d22 100644 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2017.vcxproj +++ b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/cudaTensorCoreGemm.exe - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2019.vcxproj b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2019.vcxproj index 7659af7d..9ea5a29b 100644 --- a/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2019.vcxproj +++ b/Samples/cudaTensorCoreGemm/cudaTensorCoreGemm_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/cudaTensorCoreGemm.exe - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/deviceQuery/Makefile b/Samples/deviceQuery/Makefile index c5e045f8..35904be9 100644 --- a/Samples/deviceQuery/Makefile +++ b/Samples/deviceQuery/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/deviceQuery/NsightEclipse.xml b/Samples/deviceQuery/NsightEclipse.xml index 4b4d81ea..1d6c7b76 100644 --- a/Samples/deviceQuery/NsightEclipse.xml +++ b/Samples/deviceQuery/NsightEclipse.xml @@ -41,6 +41,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/deviceQuery/README.md b/Samples/deviceQuery/README.md index 5cb523f1..f1ec8604 100644 --- a/Samples/deviceQuery/README.md +++ b/Samples/deviceQuery/README.md @@ -10,7 +10,7 @@ CUDA Runtime API, Device Query ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaSetDevice, cudaGetDeviceCount, cudaGetDeviceProperties, cudaDriverGetVersion ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/deviceQuery/deviceQuery_vs2012.sln b/Samples/deviceQuery/deviceQuery_vs2012.sln deleted file mode 100644 index 1737da5f..00000000 --- a/Samples/deviceQuery/deviceQuery_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deviceQuery", "deviceQuery_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/deviceQuery/deviceQuery_vs2012.vcxproj b/Samples/deviceQuery/deviceQuery_vs2012.vcxproj deleted file mode 100644 index 722f7aec..00000000 --- a/Samples/deviceQuery/deviceQuery_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - deviceQuery_vs2012 - deviceQuery - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/deviceQuery.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/deviceQuery/deviceQuery_vs2013.sln b/Samples/deviceQuery/deviceQuery_vs2013.sln deleted file mode 100644 index 51c58f49..00000000 --- a/Samples/deviceQuery/deviceQuery_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "deviceQuery", "deviceQuery_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/deviceQuery/deviceQuery_vs2013.vcxproj b/Samples/deviceQuery/deviceQuery_vs2013.vcxproj deleted file mode 100644 index 0fa4c503..00000000 --- a/Samples/deviceQuery/deviceQuery_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - deviceQuery_vs2013 - deviceQuery - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/deviceQuery.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/deviceQuery/deviceQuery_vs2015.vcxproj b/Samples/deviceQuery/deviceQuery_vs2015.vcxproj index 4e978602..eaf3c356 100644 --- a/Samples/deviceQuery/deviceQuery_vs2015.vcxproj +++ b/Samples/deviceQuery/deviceQuery_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/deviceQuery.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/deviceQuery/deviceQuery_vs2017.vcxproj b/Samples/deviceQuery/deviceQuery_vs2017.vcxproj index fca2616c..07d89265 100644 --- a/Samples/deviceQuery/deviceQuery_vs2017.vcxproj +++ b/Samples/deviceQuery/deviceQuery_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/deviceQuery.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/deviceQuery/deviceQuery_vs2019.vcxproj b/Samples/deviceQuery/deviceQuery_vs2019.vcxproj index 6861b9f4..9a59ce4d 100644 --- a/Samples/deviceQuery/deviceQuery_vs2019.vcxproj +++ b/Samples/deviceQuery/deviceQuery_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/deviceQuery.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/dmmaTensorCoreGemm/Makefile b/Samples/dmmaTensorCoreGemm/Makefile index f40af361..d999c439 100644 --- a/Samples/dmmaTensorCoreGemm/Makefile +++ b/Samples/dmmaTensorCoreGemm/Makefile @@ -306,7 +306,7 @@ ifeq ($(TARGET_OS),linux) endif # Gencode arguments -SMS ?= 80 +SMS ?= 80 86 ifeq ($(SMS),) $(info >>> WARNING - no SM architectures have been specified - waiving sample <<<) diff --git a/Samples/dmmaTensorCoreGemm/NsightEclipse.xml b/Samples/dmmaTensorCoreGemm/NsightEclipse.xml index 9d7ccc56..15251e7b 100644 --- a/Samples/dmmaTensorCoreGemm/NsightEclipse.xml +++ b/Samples/dmmaTensorCoreGemm/NsightEclipse.xml @@ -43,6 +43,7 @@ 1:CUDA Basic Topics sm80 + sm86 x86_64 diff --git a/Samples/dmmaTensorCoreGemm/README.md b/Samples/dmmaTensorCoreGemm/README.md index 6358918e..6503b344 100644 --- a/Samples/dmmaTensorCoreGemm/README.md +++ b/Samples/dmmaTensorCoreGemm/README.md @@ -10,7 +10,7 @@ Matrix Multiply, WMMA, Tensor Cores ## Supported SM Architectures -[SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaMallocManaged, cudaDeviceSynchronize, cudaFuncSetAttribute, cudaEventCreate, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm.cu b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm.cu index 65f91c02..1118b00c 100644 --- a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm.cu +++ b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm.cu @@ -65,6 +65,8 @@ #include #include #include +#include +#include // Switch for choosing cpp interface for cuda pipeline // vs primitives interface. @@ -622,9 +624,6 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const // Each CTA slides along the 64 x 64 tiles from the top left corner of the matrix to the // right and down, and selects the next tile to compute. Once there's no such tile, // all warps in this CTA exit. - - nvcuda_namespace::pipeline pipe; - for(unsigned int block_pos = blockIdx.x;; block_pos += gridDim.x) { const unsigned int block_tile_i = ((block_pos * BLOCK_ROW_TILES) / N_TILES) * (BLOCK_COL_TILES); const unsigned int block_tile_j = (block_pos * BLOCK_COL_TILES) % N_TILES; @@ -638,17 +637,15 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const const size_t gmem_idx = (block_tile_i + warpId) * M * GLOBAL_MEM_STRIDE + block_tile_j * N; const double *src_gmem_warp_stream_ptr = &C[gmem_idx]; - // Stream multiple C tiles to shared memory. - #pragma unroll - for (int i = 0; i < N; i++) - { - int4 *shMemCopy_t = reinterpret_cast(&shmem_warp_stream_ptr[(SHMEM_STRIDE * i)]); - const int4 *gMemCopy_t = reinterpret_cast(&src_gmem_warp_stream_ptr[(GLOBAL_MEM_STRIDE * i)]); - cg::memcpy_async(tile32, shMemCopy_t, tile32.size(), gMemCopy_t, tile32.size(), pipe); +#pragma unroll + for (int i = 0; i < N; i++) { + auto dst_ptr = &shmem_warp_stream_ptr[(SHMEM_STRIDE * i)]; + auto src_ptr = &src_gmem_warp_stream_ptr[(GLOBAL_MEM_STRIDE * i)]; + cg::memcpy_async(tile32, dst_ptr, src_ptr, cuda::aligned_size_t<32>{tile32.size() * sizeof(int4)}); } - cg::wait_prior<0>(tile32, pipe); - cg::sync(cta); + + cg::wait(cta); // These fragments will accumulate the result of A and B matrix fragment multiplications // along the K_GLOBAL dimension. @@ -660,12 +657,10 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const #pragma unroll for (int j = 0; j < WARP_ROW_TILES; j++) { const double *tile_ptr = shmem_warp_tile_ptr + i * SHMEM_STRIDE * N + j * N; - wmma::load_matrix_sync(c[i][j], tile_ptr, SHMEM_STRIDE, C_LAYOUT); } } - - __syncthreads(); + cg::wait(cta); // Scale the C matrix. #pragma unroll @@ -694,24 +689,24 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const // First half of the warp copies the first row / column of the matrix, // the second half of the warp copies the next. - int4 *lane_ptr = (int4*)(warp_ptr + tile_k * K + (laneId / CHUNK_COPY_LINE_LANES) * K_GLOBAL); + auto lane_ptr = warp_ptr + tile_k * K + (laneId / CHUNK_COPY_LINE_LANES) * K_GLOBAL; // Shift the second half of the warp to the next row / column in the shared memory. shmem_idx += laneId / CHUNK_COPY_LINE_LANES; #pragma unroll for(int i = 0; i < ((WARP_SIZE/2) / CHUNK_COPY_LINES_PER_WARP); i++) { - // Copy 16 bytes at once in each lane. - int4 *shMemCopy_t = ((int4*)&shmem[shmem_idx][0]); - const int4 *gMemCopy_t = lane_ptr; - cg::memcpy_async(tileChunkCopy, shMemCopy_t, tileChunkCopy.size(), gMemCopy_t, tileChunkCopy.size(), pipe); + // Copy 16 bytes at once in each lane. + auto dst_ptr = &shmem[shmem_idx][0]; + auto src_ptr = lane_ptr; + + cg::memcpy_async(tileChunkCopy, dst_ptr, src_ptr, cuda::aligned_size_t<32>{tile32.size() * sizeof(int4)}); // Advance the global memory pointer and the shared memory index. - lane_ptr = (int4*)((double*)lane_ptr + K_GLOBAL * CHUNK_COPY_LINES_PER_WARP); + lane_ptr = lane_ptr + K_GLOBAL * CHUNK_COPY_LINES_PER_WARP; shmem_idx += CHUNK_COPY_LINES_PER_WARP; } - cg::wait_prior<0>(tileChunkCopy, pipe); - cg::sync(cta); + cg::wait(cta); // Compute a grid of C matrix tiles in each warp. #pragma unroll @@ -739,12 +734,10 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const } wmma::mma_sync(c[i][j], a[i], b[j], c[i][j]); - } } } - - __syncthreads(); + cg::wait(cta); } // Store the D fragments to shared memory. @@ -764,7 +757,7 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const } } - __syncthreads(); + cg::wait(cta); // Now that shared memory contains all the D tiles, stream them to global memory. double *dst_gmem_warp_stream_ptr = &D[gmem_idx]; @@ -775,7 +768,7 @@ __global__ void compute_dgemm_async_copy(const double *A, const double *B, const *((int4*)(shmem_warp_stream_ptr + SHMEM_STRIDE * i) + laneId); } - __syncthreads(); + cg::wait(cta); } #endif } diff --git a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2015.vcxproj b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2015.vcxproj index 5af957f3..a7e94449 100644 --- a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2015.vcxproj +++ b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/dmmaTensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2017.vcxproj b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2017.vcxproj index 61ad2574..c916cfcc 100644 --- a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2017.vcxproj +++ b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/dmmaTensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2019.vcxproj b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2019.vcxproj index 93932d9e..ccff4ad5 100644 --- a/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2019.vcxproj +++ b/Samples/dmmaTensorCoreGemm/dmmaTensorCoreGemm_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/dmmaTensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/globalToShmemAsyncCopy/Makefile b/Samples/globalToShmemAsyncCopy/Makefile index 155b0336..54c097ac 100644 --- a/Samples/globalToShmemAsyncCopy/Makefile +++ b/Samples/globalToShmemAsyncCopy/Makefile @@ -301,9 +301,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/globalToShmemAsyncCopy/NsightEclipse.xml b/Samples/globalToShmemAsyncCopy/NsightEclipse.xml index aac3235c..3d9784b7 100644 --- a/Samples/globalToShmemAsyncCopy/NsightEclipse.xml +++ b/Samples/globalToShmemAsyncCopy/NsightEclipse.xml @@ -58,6 +58,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/globalToShmemAsyncCopy/README.md b/Samples/globalToShmemAsyncCopy/README.md index e501458c..379cd93a 100644 --- a/Samples/globalToShmemAsyncCopy/README.md +++ b/Samples/globalToShmemAsyncCopy/README.md @@ -10,7 +10,7 @@ CUDA Runtime API, Linear Algebra, CPP11 CUDA ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaEventCreate, cudaEventRecord, cudaEventQuery, cudaEventDestroy, cudaEventEla ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2015.vcxproj b/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2015.vcxproj index adc47076..dadfa5a9 100644 --- a/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2015.vcxproj +++ b/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/globalToShmemAsyncCopy.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2017.vcxproj b/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2017.vcxproj index 528e7faf..d000bb74 100644 --- a/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2017.vcxproj +++ b/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/globalToShmemAsyncCopy.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2019.vcxproj b/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2019.vcxproj index b055d13a..0f5aa4b2 100644 --- a/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2019.vcxproj +++ b/Samples/globalToShmemAsyncCopy/globalToShmemAsyncCopy_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/globalToShmemAsyncCopy.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/immaTensorCoreGemm/Makefile b/Samples/immaTensorCoreGemm/Makefile index b70ce8f0..f5a355e5 100644 --- a/Samples/immaTensorCoreGemm/Makefile +++ b/Samples/immaTensorCoreGemm/Makefile @@ -280,9 +280,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 72 75 80 +SMS ?= 72 75 80 86 else -SMS ?= 75 80 +SMS ?= 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/immaTensorCoreGemm/NsightEclipse.xml b/Samples/immaTensorCoreGemm/NsightEclipse.xml index 1e030bb5..317d8579 100644 --- a/Samples/immaTensorCoreGemm/NsightEclipse.xml +++ b/Samples/immaTensorCoreGemm/NsightEclipse.xml @@ -41,6 +41,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/immaTensorCoreGemm/README.md b/Samples/immaTensorCoreGemm/README.md index 072a9efb..104c3263 100644 --- a/Samples/immaTensorCoreGemm/README.md +++ b/Samples/immaTensorCoreGemm/README.md @@ -10,7 +10,7 @@ Matrix Multiply, WMMA, Tensor Cores ## Supported SM Architectures -[SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaMallocManaged, cudaDeviceSynchronize, cudaFuncSetAttribute, cudaEventCreate, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2012.sln b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2012.sln deleted file mode 100644 index fccd0a25..00000000 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "immaTensorCoreGemm", "immaTensorCoreGemm_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2012.vcxproj b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2012.vcxproj deleted file mode 100644 index 08d06549..00000000 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - immaTensorCoreGemm_vs2012 - immaTensorCoreGemm - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/immaTensorCoreGemm.exe - - - compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2013.sln b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2013.sln deleted file mode 100644 index e389a707..00000000 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "immaTensorCoreGemm", "immaTensorCoreGemm_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2013.vcxproj b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2013.vcxproj deleted file mode 100644 index dcf52e8c..00000000 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - immaTensorCoreGemm_vs2013 - immaTensorCoreGemm - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/immaTensorCoreGemm.exe - - - compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2015.vcxproj b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2015.vcxproj index 0769602a..a4043ef5 100644 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2015.vcxproj +++ b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/immaTensorCoreGemm.exe - compute_75,sm_75;compute_80,sm_80; + compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2017.vcxproj b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2017.vcxproj index ade4fc73..b2c7d643 100644 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2017.vcxproj +++ b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/immaTensorCoreGemm.exe - compute_75,sm_75;compute_80,sm_80; + compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2019.vcxproj b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2019.vcxproj index f30114c8..5f2f6504 100644 --- a/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2019.vcxproj +++ b/Samples/immaTensorCoreGemm/immaTensorCoreGemm_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/immaTensorCoreGemm.exe - compute_75,sm_75;compute_80,sm_80; + compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/jacobiCudaGraphs/Makefile b/Samples/jacobiCudaGraphs/Makefile index 4c0c967e..ce3d60e1 100644 --- a/Samples/jacobiCudaGraphs/Makefile +++ b/Samples/jacobiCudaGraphs/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/jacobiCudaGraphs/README.md b/Samples/jacobiCudaGraphs/README.md index a5211bd2..caf7618e 100644 --- a/Samples/jacobiCudaGraphs/README.md +++ b/Samples/jacobiCudaGraphs/README.md @@ -25,7 +25,7 @@ cudaStreamBeginCapture, cudaStreamEndCapture, cudaGraphCreate, cudaGraphLaunch, ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2012.sln b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2012.sln deleted file mode 100644 index 774de33b..00000000 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jacobiCudaGraphs", "jacobiCudaGraphs_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2012.vcxproj b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2012.vcxproj deleted file mode 100644 index ac9782f2..00000000 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - jacobiCudaGraphs_vs2012 - jacobiCudaGraphs - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/jacobiCudaGraphs.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2013.sln b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2013.sln deleted file mode 100644 index 7e022cd5..00000000 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jacobiCudaGraphs", "jacobiCudaGraphs_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2013.vcxproj b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2013.vcxproj deleted file mode 100644 index d3d7b4ff..00000000 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - jacobiCudaGraphs_vs2013 - jacobiCudaGraphs - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/jacobiCudaGraphs.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2015.vcxproj b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2015.vcxproj index 18d3a89b..8c18eadd 100644 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2015.vcxproj +++ b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/jacobiCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2017.vcxproj b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2017.vcxproj index 0262c508..56042e81 100644 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2017.vcxproj +++ b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/jacobiCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -108,6 +108,6 @@ - + diff --git a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2019.vcxproj b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2019.vcxproj index 4f51bcd3..2caeb3ce 100644 --- a/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2019.vcxproj +++ b/Samples/jacobiCudaGraphs/jacobiCudaGraphs_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/jacobiCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,6 +104,6 @@ - + diff --git a/Samples/matrixMul/Makefile b/Samples/matrixMul/Makefile index b99c1750..afab5417 100644 --- a/Samples/matrixMul/Makefile +++ b/Samples/matrixMul/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/matrixMul/NsightEclipse.xml b/Samples/matrixMul/NsightEclipse.xml index 6583eb57..aaa79c33 100644 --- a/Samples/matrixMul/NsightEclipse.xml +++ b/Samples/matrixMul/NsightEclipse.xml @@ -48,6 +48,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/matrixMul/README.md b/Samples/matrixMul/README.md index c43508ce..20c4d94b 100644 --- a/Samples/matrixMul/README.md +++ b/Samples/matrixMul/README.md @@ -10,7 +10,7 @@ CUDA Runtime API, Linear Algebra ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaEventCreate, cudaEventRecord, cudaEventQuery, cudaEventDestroy, cudaEventEla ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/matrixMul/matrixMul.cu b/Samples/matrixMul/matrixMul.cu index 470d4aae..c82408df 100644 --- a/Samples/matrixMul/matrixMul.cu +++ b/Samples/matrixMul/matrixMul.cu @@ -142,10 +142,13 @@ int MatrixMultiply(int argc, char **argv, // Allocate host memory for matrices A and B unsigned int size_A = dimsA.x * dimsA.y; unsigned int mem_size_A = sizeof(float) * size_A; - float *h_A = reinterpret_cast(malloc(mem_size_A)); + float *h_A; + checkCudaErrors(cudaMallocHost(&h_A, mem_size_A)); unsigned int size_B = dimsB.x * dimsB.y; unsigned int mem_size_B = sizeof(float) * size_B; - float *h_B = reinterpret_cast(malloc(mem_size_B)); + float *h_B; + checkCudaErrors(cudaMallocHost(&h_B, mem_size_B)); + cudaStream_t stream; // Initialize host memory const float valB = 0.01f; @@ -158,7 +161,8 @@ int MatrixMultiply(int argc, char **argv, // Allocate host matrix C dim3 dimsC(dimsB.x, dimsA.y, 1); unsigned int mem_size_C = dimsC.x * dimsC.y * sizeof(float); - float *h_C = reinterpret_cast(malloc(mem_size_C)); + float *h_C; + checkCudaErrors(cudaMallocHost(&h_C, mem_size_C)); if (h_C == NULL) { fprintf(stderr, "Failed to allocate host matrix C!\n"); @@ -166,15 +170,20 @@ int MatrixMultiply(int argc, char **argv, } checkCudaErrors(cudaMalloc(reinterpret_cast(&d_A), mem_size_A)); - checkCudaErrors(cudaMalloc(reinterpret_cast(&d_B), mem_size_B)); - checkCudaErrors(cudaMalloc(reinterpret_cast(&d_C), mem_size_C)); + // Allocate CUDA events that we'll use for timing + cudaEvent_t start, stop; + checkCudaErrors(cudaEventCreate(&start)); + checkCudaErrors(cudaEventCreate(&stop)); + + checkCudaErrors(cudaStreamCreateWithFlags(&stream, cudaStreamNonBlocking)); // copy host memory to device - checkCudaErrors(cudaMemcpy(d_A, h_A, mem_size_A, cudaMemcpyHostToDevice)); - - checkCudaErrors(cudaMemcpy(d_B, h_B, mem_size_B, cudaMemcpyHostToDevice)); + checkCudaErrors( + cudaMemcpyAsync(d_A, h_A, mem_size_A, cudaMemcpyHostToDevice, stream)); + checkCudaErrors( + cudaMemcpyAsync(d_B, h_B, mem_size_B, cudaMemcpyHostToDevice, stream)); // Setup execution parameters dim3 threads(block_size, block_size); @@ -185,42 +194,34 @@ int MatrixMultiply(int argc, char **argv, // Performs warmup operation using matrixMul CUDA kernel if (block_size == 16) { - MatrixMulCUDA<16> <<< grid, threads >>>(d_C, d_A, d_B, - dimsA.x, dimsB.x); + MatrixMulCUDA<16> + <<>>(d_C, d_A, d_B, dimsA.x, dimsB.x); } else { - MatrixMulCUDA<32> <<< grid, threads >>>(d_C, d_A, d_B, - dimsA.x, dimsB.x); + MatrixMulCUDA<32> + <<>>(d_C, d_A, d_B, dimsA.x, dimsB.x); } printf("done\n"); - - cudaDeviceSynchronize(); - - // Allocate CUDA events that we'll use for timing - cudaEvent_t start; - checkCudaErrors(cudaEventCreate(&start)); - - cudaEvent_t stop; - checkCudaErrors(cudaEventCreate(&stop)); + checkCudaErrors(cudaStreamSynchronize(stream)); // Record the start event - checkCudaErrors(cudaEventRecord(start, NULL)); + checkCudaErrors(cudaEventRecord(start, stream)); // Execute the kernel int nIter = 300; for (int j = 0; j < nIter; j++) { if (block_size == 16) { - MatrixMulCUDA<16> <<< grid, threads >>>(d_C, d_A, d_B, - dimsA.x, dimsB.x); + MatrixMulCUDA<16> + <<>>(d_C, d_A, d_B, dimsA.x, dimsB.x); } else { - MatrixMulCUDA<32> <<< grid, threads >>>(d_C, d_A, d_B, - dimsA.x, dimsB.x); + MatrixMulCUDA<32> + <<>>(d_C, d_A, d_B, dimsA.x, dimsB.x); } } // Record the stop event - checkCudaErrors(cudaEventRecord(stop, NULL)); + checkCudaErrors(cudaEventRecord(stop, stream)); // Wait for the stop event to complete checkCudaErrors(cudaEventSynchronize(stop)); @@ -233,18 +234,17 @@ int MatrixMultiply(int argc, char **argv, double flopsPerMatrixMul = 2.0 * static_cast(dimsA.x) * static_cast(dimsA.y) * static_cast(dimsB.x); - double gigaFlops = (flopsPerMatrixMul * 1.0e-9f) / - (msecPerMatrixMul / 1000.0f); + double gigaFlops = + (flopsPerMatrixMul * 1.0e-9f) / (msecPerMatrixMul / 1000.0f); printf( - "Performance= %.2f GFlop/s, Time= %.3f msec, Size= %.0f Ops," \ - " WorkgroupSize= %u threads/block\n", - gigaFlops, - msecPerMatrixMul, - flopsPerMatrixMul, - threads.x * threads.y); + "Performance= %.2f GFlop/s, Time= %.3f msec, Size= %.0f Ops," + " WorkgroupSize= %u threads/block\n", + gigaFlops, msecPerMatrixMul, flopsPerMatrixMul, threads.x * threads.y); // Copy result from device to host - checkCudaErrors(cudaMemcpy(h_C, d_C, mem_size_C, cudaMemcpyDeviceToHost)); + checkCudaErrors( + cudaMemcpyAsync(h_C, d_C, mem_size_C, cudaMemcpyDeviceToHost, stream)); + checkCudaErrors(cudaStreamSynchronize(stream)); printf("Checking computed result for correctness: "); bool correct = true; @@ -269,15 +269,17 @@ int MatrixMultiply(int argc, char **argv, printf("%s\n", correct ? "Result = PASS" : "Result = FAIL"); // Clean up memory - free(h_A); - free(h_B); - free(h_C); + checkCudaErrors(cudaFreeHost(h_A)); + checkCudaErrors(cudaFreeHost(h_B)); + checkCudaErrors(cudaFreeHost(h_C)); checkCudaErrors(cudaFree(d_A)); checkCudaErrors(cudaFree(d_B)); checkCudaErrors(cudaFree(d_C)); - - printf("\nNOTE: The CUDA Samples are not meant for performance"\ - "measurements. Results may vary when GPU Boost is enabled.\n"); + checkCudaErrors(cudaEventDestroy(start)); + checkCudaErrors(cudaEventDestroy(stop)); + printf( + "\nNOTE: The CUDA Samples are not meant for performance" + "measurements. Results may vary when GPU Boost is enabled.\n"); if (correct) { return EXIT_SUCCESS; diff --git a/Samples/matrixMul/matrixMul_vs2012.vcxproj b/Samples/matrixMul/matrixMul_vs2012.vcxproj deleted file mode 100644 index c9772070..00000000 --- a/Samples/matrixMul/matrixMul_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - matrixMul_vs2012 - matrixMul - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/matrixMul.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/matrixMul/matrixMul_vs2013.vcxproj b/Samples/matrixMul/matrixMul_vs2013.vcxproj deleted file mode 100644 index aa244129..00000000 --- a/Samples/matrixMul/matrixMul_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - matrixMul_vs2013 - matrixMul - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/matrixMul.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/matrixMul/matrixMul_vs2015.vcxproj b/Samples/matrixMul/matrixMul_vs2015.vcxproj index c5fa032d..f616225f 100644 --- a/Samples/matrixMul/matrixMul_vs2015.vcxproj +++ b/Samples/matrixMul/matrixMul_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/matrixMul.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/matrixMul/matrixMul_vs2017.vcxproj b/Samples/matrixMul/matrixMul_vs2017.vcxproj index d95a0ed7..327d7736 100644 --- a/Samples/matrixMul/matrixMul_vs2017.vcxproj +++ b/Samples/matrixMul/matrixMul_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/matrixMul.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/matrixMul/matrixMul_vs2019.vcxproj b/Samples/matrixMul/matrixMul_vs2019.vcxproj index 5e6df3a2..63785a6e 100644 --- a/Samples/matrixMul/matrixMul_vs2019.vcxproj +++ b/Samples/matrixMul/matrixMul_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/matrixMul.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/matrixMulDrv/Makefile b/Samples/matrixMulDrv/Makefile index 26a52302..f754a1cb 100644 --- a/Samples/matrixMulDrv/Makefile +++ b/Samples/matrixMulDrv/Makefile @@ -268,20 +268,24 @@ LIBRARIES := ################################################################################ -PTX_FILE := matrixMul_kernel${TARGET_SIZE}.ptx +FATBIN_FILE := matrixMul_kernel${TARGET_SIZE}.fatbin # Gencode arguments -SMS ?= +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 +else +SMS ?= 35 37 50 52 60 61 70 75 80 86 +endif + +ifeq ($(SMS),) +$(info >>> WARNING - no SM architectures have been specified - waiving sample <<<) +SAMPLE_ENABLED := 0 +endif ifeq ($(GENCODE_FLAGS),) # Generate SASS code for each SM architecture listed in $(SMS) $(foreach sm,$(SMS),$(eval GENCODE_FLAGS += -gencode arch=compute_$(sm),code=sm_$(sm))) -ifeq ($(SMS),) -# Generate PTX code from SM 35 -GENCODE_FLAGS += -gencode arch=compute_35,code=compute_35 -endif - # Generate PTX code from the highest SM architecture in $(SMS) to guarantee forward-compatibility HIGHEST_SM := $(lastword $(sort $(SMS))) ifneq ($(HIGHEST_SM),) @@ -355,7 +359,7 @@ endif # Target rules all: build -build: matrixMulDrv $(PTX_FILE) +build: matrixMulDrv $(FATBIN_FILE) check.deps: ifeq ($(SAMPLE_ENABLED),0) @@ -364,8 +368,8 @@ else @echo "Sample is ready - all dependencies have been met" endif -$(PTX_FILE): matrixMul_kernel.cu - $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -ptx $< +$(FATBIN_FILE): matrixMul_kernel.cu + $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -fatbin $< $(EXEC) mkdir -p data $(EXEC) cp -f $@ ./data $(EXEC) mkdir -p ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) @@ -383,8 +387,9 @@ run: build $(EXEC) ./matrixMulDrv clean: - rm -f matrixMulDrv matrixMulDrv.o data/$(PTX_FILE) $(PTX_FILE) + rm -f matrixMulDrv matrixMulDrv.o data/$(FATBIN_FILE) $(FATBIN_FILE) rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/matrixMulDrv - rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/$(PTX_FILE) + + rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/$(FATBIN_FILE) clobber: clean diff --git a/Samples/matrixMulDrv/README.md b/Samples/matrixMulDrv/README.md index 27c82ed8..da99cfd4 100644 --- a/Samples/matrixMulDrv/README.md +++ b/Samples/matrixMulDrv/README.md @@ -10,7 +10,7 @@ CUDA Driver API, Matrix Multiply ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cuModuleLoad, cuModuleLoadDataEx, cuModuleGetFunction, cuMemAlloc, cuMemFree, cu ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/matrixMulDrv/matrixMulDrv.cpp b/Samples/matrixMulDrv/matrixMulDrv.cpp index e4621c98..f24f9fb2 100644 --- a/Samples/matrixMulDrv/matrixMulDrv.cpp +++ b/Samples/matrixMulDrv/matrixMulDrv.cpp @@ -46,13 +46,15 @@ // includes, system #include -#include -#include #include -#include #include +#include +#include +#include +#include -// includes, project +// includes, project, CUDA +#include #include #include #include @@ -63,8 +65,6 @@ #include #include "matrixMul.h" -// includes, CUDA -const bool use_64bit_memory_address = false; //////////////////////////////////////////////////////////////////////////////// // declaration, forward @@ -74,15 +74,10 @@ void randomInit(float *, int); extern "C" void computeGold(float *, const float *, const float *, unsigned int, unsigned int, unsigned int); -static CUresult initCUDA(int argc, char **argv, CUfunction *pMatrixMul); +static int initCUDA(int argc, char **argv, CUfunction *pMatrixMul); -// define input ptx file for different platforms -#if defined(_WIN64) || defined(__LP64__) -#define PTX_FILE "matrixMul_kernel64.ptx" -#define CUBIN_FILE "matrixMul_kernel64.cubin" -#else -#define PTX_FILE "matrixMul_kernel32.ptx" -#define CUBIN_FILE "matrixMul_kernel32.cubin" +#ifndef FATBIN_FILE +#define FATBIN_FILE "matrixMul_kernel64.fatbin" #endif //////////////////////////////////////////////////////////////////////////////// @@ -118,13 +113,7 @@ void runTest(int argc, char **argv) { CUfunction matrixMul = NULL; int block_size = 32; - CUresult error_id = initCUDA(argc, argv, &matrixMul); - - if (error_id != CUDA_SUCCESS) { - printf("initCUDA() returned %d\n-> %s\n", error_id, - getCudaDrvErrorString(error_id)); - exit(EXIT_FAILURE); - } + initCUDA(argc, argv, &matrixMul); // set seed for rand() srand(2006); @@ -142,18 +131,6 @@ void runTest(int argc, char **argv) { constantInit(h_A, size_A, 1.0f); constantInit(h_B, size_B, valB); - // First reserve about 4GB of memory, so we ensure that all memory allocated - // afterwards is > 4GB - CUdeviceptr d_Mem[4]; - - if (use_64bit_memory_address) { - unsigned int mem_size = 1024 * 1024 * 1024; - checkCudaErrors(cuMemAlloc(&d_Mem[0], mem_size)); - checkCudaErrors(cuMemAlloc(&d_Mem[1], mem_size)); - checkCudaErrors(cuMemAlloc(&d_Mem[2], mem_size)); - checkCudaErrors(cuMemAlloc(&d_Mem[3], mem_size)); - } - // allocate device memory CUdeviceptr d_A; checkCudaErrors(cuMemAlloc(&d_A, mem_size_A)); @@ -190,8 +167,6 @@ void runTest(int argc, char **argv) { if (1) { // This is the new CUDA 4.0 API for Kernel Parameter passing and Kernel // Launching (simplier method) - if (use_64bit_memory_address && - (totalGlobalMem > (uint64_t)4 * 1024 * 1024 * 1024L)) { size_t Matrix_Width_A = (size_t)WA; size_t Matrix_Width_B = (size_t)WB; void *args[5] = {&d_C, &d_A, &d_B, &Matrix_Width_A, &Matrix_Width_B}; @@ -199,17 +174,6 @@ void runTest(int argc, char **argv) { checkCudaErrors(cuLaunchKernel( matrixMul, grid.x, grid.y, grid.z, block.x, block.y, block.z, 2 * block_size * block_size * sizeof(float), NULL, args, NULL)); - - } else { - int Matrix_Width_A = WA; - int Matrix_Width_B = WB; - void *args[5] = {&d_C, &d_A, &d_B, &Matrix_Width_A, &Matrix_Width_B}; - // new CUDA 4.0 Driver API Kernel launch call - checkCudaErrors(cuLaunchKernel( - matrixMul, grid.x, grid.y, grid.z, block.x, block.y, block.z, - 2 * block_size * block_size * sizeof(float), NULL, args, NULL)); - } - } else { // This is the new CUDA 4.0 API for Kernel Parameter passing and Kernel // Launching (advanced method) @@ -225,24 +189,13 @@ void runTest(int argc, char **argv) { *(reinterpret_cast(&argBuffer[offset])) = d_B; offset += sizeof(d_B); - if (use_64bit_memory_address && - (totalGlobalMem > (uint64_t)4 * 1024 * 1024 * 1024L)) { size_t Matrix_Width_A = (size_t)WA; size_t Matrix_Width_B = (size_t)WB; - *(reinterpret_cast(&argBuffer[offset])) = Matrix_Width_A; - offset += sizeof(Matrix_Width_A); - *(reinterpret_cast(&argBuffer[offset])) = Matrix_Width_B; - offset += sizeof(Matrix_Width_B); - } else { - int Matrix_Width_A = WA; - int Matrix_Width_B = WB; - - *(reinterpret_cast(&argBuffer[offset])) = Matrix_Width_A; - offset += sizeof(Matrix_Width_A); - *(reinterpret_cast(&argBuffer[offset])) = Matrix_Width_B; - offset += sizeof(Matrix_Width_B); - } + *(reinterpret_cast(&argBuffer[offset])) = Matrix_Width_A; + offset += sizeof(Matrix_Width_A); + *(reinterpret_cast(&argBuffer[offset])) = Matrix_Width_B; + offset += sizeof(Matrix_Width_B); void *kernel_launch_config[5] = {CU_LAUNCH_PARAM_BUFFER_POINTER, argBuffer, CU_LAUNCH_PARAM_BUFFER_SIZE, &offset, @@ -281,13 +234,6 @@ void runTest(int argc, char **argv) { "Results may vary when GPU Boost is enabled.\n"); // clean up memory - if (use_64bit_memory_address) { - cuMemFree(d_Mem[0]); - cuMemFree(d_Mem[1]); - cuMemFree(d_Mem[2]); - cuMemFree(d_Mem[3]); - } - free(h_A); free(h_B); free(h_C); @@ -304,46 +250,11 @@ void randomInit(float *data, int size) { } } -bool inline findModulePath(const char *module_file, std::string &module_path, - char **argv, std::string &ptx_source) { - char *actual_path = sdkFindFilePath(module_file, argv[0]); - - if (actual_path) { - module_path = actual_path; - } else { - printf("> findModulePath file not found: <%s> \n", module_file); - return false; - } - - if (module_path.empty()) { - printf("> findModulePath file not found: <%s> \n", module_file); - return false; - } else { - printf("> findModulePath <%s>\n", module_path.c_str()); - - if (module_path.rfind(".ptx") != std::string::npos) { - FILE *fp = fopen(module_path.c_str(), "rb"); - fseek(fp, 0, SEEK_END); - int file_size = ftell(fp); - char *buf = new char[file_size + 1]; - fseek(fp, 0, SEEK_SET); - fread(buf, sizeof(char), file_size, fp); - fclose(fp); - buf[file_size] = '\0'; - ptx_source = buf; - delete[] buf; - } - - return true; - } -} - -static CUresult initCUDA(int argc, char **argv, CUfunction *pMatrixMul) { +static int initCUDA(int argc, char **argv, CUfunction *pMatrixMul) { CUfunction cuFunction = 0; CUresult status; int major = 0, minor = 0; char deviceName[100]; - std::string module_path, ptx_source; cuDevice = findCudaDeviceDRV(argc, (const char **)argv); @@ -352,85 +263,39 @@ static CUresult initCUDA(int argc, char **argv, CUfunction *pMatrixMul) { &major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cuDevice)); checkCudaErrors(cuDeviceGetAttribute( &minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, cuDevice)); - checkCudaErrors(cuDeviceGetName(deviceName, 256, cuDevice)); + checkCudaErrors(cuDeviceGetName(deviceName, sizeof(deviceName), cuDevice)); printf("> GPU Device has SM %d.%d compute capability\n", major, minor); checkCudaErrors(cuDeviceTotalMem(&totalGlobalMem, cuDevice)); printf(" Total amount of global memory: %llu bytes\n", (long long unsigned int)totalGlobalMem); - printf(" 64-bit Memory Address: %s\n", - (totalGlobalMem > (uint64_t)4 * 1024 * 1024 * 1024L) ? "YES" : "NO"); - status = cuCtxCreate(&cuContext, 0, cuDevice); - - if (CUDA_SUCCESS != status) { - goto Error; - } + checkCudaErrors(cuCtxCreate(&cuContext, 0, cuDevice)); // first search for the module path before we load the results - if (!findModulePath(PTX_FILE, module_path, argv, ptx_source)) { - if (!findModulePath(CUBIN_FILE, module_path, argv, ptx_source)) { - printf( - "> findModulePath could not find ptx or cubin\n"); - status = CUDA_ERROR_NOT_FOUND; - goto Error; - } - } else { - printf("> initCUDA loading module: <%s>\n", module_path.c_str()); - } + std::string module_path; + std::ostringstream fatbin; - if (module_path.rfind("ptx") != std::string::npos) { - // in this branch we use compilation with parameters - const unsigned int jitNumOptions = 3; - CUjit_option *jitOptions = new CUjit_option[jitNumOptions]; - void **jitOptVals = new void *[jitNumOptions]; - - // set up size of compilation log buffer - jitOptions[0] = CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES; - int jitLogBufferSize = 1024; - jitOptVals[0] = reinterpret_cast(jitLogBufferSize); - - // set up pointer to the compilation log buffer - jitOptions[1] = CU_JIT_INFO_LOG_BUFFER; - char *jitLogBuffer = new char[jitLogBufferSize]; - jitOptVals[1] = jitLogBuffer; - - // set up pointer to set the Maximum # of registers for a particular kernel - jitOptions[2] = CU_JIT_MAX_REGISTERS; - int jitRegCount = 32; - jitOptVals[2] = reinterpret_cast(jitRegCount); - - status = - cuModuleLoadDataEx(&cuModule, ptx_source.c_str(), jitNumOptions, - jitOptions, reinterpret_cast(jitOptVals)); - - printf("> PTX JIT log:\n%s\n", jitLogBuffer); - } else { - status = cuModuleLoad(&cuModule, module_path.c_str()); - } - - if (CUDA_SUCCESS != status) { - goto Error; - } - -#if USE_64BIT_MEMORY_ADDRESS - - if (totalGlobalMem > (uint64_t)4 * 1024 * 1024 * 1024L) { - status = cuModuleGetFunction(&cuFunction, cuModule, "matrixMul_bs32_64bit"); - } else -#endif + if (!findFatbinPath(FATBIN_FILE, module_path, argv, fatbin)) { - status = cuModuleGetFunction(&cuFunction, cuModule, "matrixMul_bs32_32bit"); + exit(EXIT_FAILURE); + } + else + { + printf("> initCUDA loading module: <%s>\n", module_path.c_str()); } - if (CUDA_SUCCESS != status) { - goto Error; + if (!fatbin.str().size()) + { + printf("fatbin file empty. exiting..\n"); + exit(EXIT_FAILURE); } + // Create module from binary file (FATBIN) + checkCudaErrors(cuModuleLoadData(&cuModule, fatbin.str().c_str())); + checkCudaErrors(cuModuleGetFunction(&cuFunction, cuModule, "matrixMul_bs32_64bit")); + *pMatrixMul = cuFunction; - return CUDA_SUCCESS; -Error: - cuCtxDestroy(cuContext); - return status; + return 0; } diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2012.sln b/Samples/matrixMulDrv/matrixMulDrv_vs2012.sln deleted file mode 100644 index 92bf41ca..00000000 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matrixMulDrv", "matrixMulDrv_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2012.vcxproj b/Samples/matrixMulDrv/matrixMulDrv_vs2012.vcxproj deleted file mode 100644 index 8b86e944..00000000 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2012.vcxproj +++ /dev/null @@ -1,111 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - matrixMulDrv_vs2012 - matrixMulDrv - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/matrixMulDrv.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - data/%(Filename)64.ptx - ptx - - - - - - - - diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2013.sln b/Samples/matrixMulDrv/matrixMulDrv_vs2013.sln deleted file mode 100644 index 211d2c9d..00000000 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matrixMulDrv", "matrixMulDrv_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2013.vcxproj b/Samples/matrixMulDrv/matrixMulDrv_vs2013.vcxproj deleted file mode 100644 index 1e44ef4b..00000000 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2013.vcxproj +++ /dev/null @@ -1,111 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - matrixMulDrv_vs2013 - matrixMulDrv - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/matrixMulDrv.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - data/%(Filename)64.ptx - ptx - - - - - - - - diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2015.vcxproj b/Samples/matrixMulDrv/matrixMulDrv_vs2015.vcxproj index 39a39266..d01b46c2 100644 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2015.vcxproj +++ b/Samples/matrixMulDrv/matrixMulDrv_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/matrixMulDrv.exe - compute_35,compute_35; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -99,13 +99,13 @@ - data/%(Filename)64.ptx - ptx + data/%(Filename)64.fatbin + fatbin - + diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2017.vcxproj b/Samples/matrixMulDrv/matrixMulDrv_vs2017.vcxproj index 71c5e210..39bde580 100644 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2017.vcxproj +++ b/Samples/matrixMulDrv/matrixMulDrv_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/matrixMulDrv.exe - compute_35,compute_35; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,13 +104,13 @@ - data/%(Filename)64.ptx - ptx + data/%(Filename)64.fatbin + fatbin - + diff --git a/Samples/matrixMulDrv/matrixMulDrv_vs2019.vcxproj b/Samples/matrixMulDrv/matrixMulDrv_vs2019.vcxproj index 5188a6a8..827dc26f 100644 --- a/Samples/matrixMulDrv/matrixMulDrv_vs2019.vcxproj +++ b/Samples/matrixMulDrv/matrixMulDrv_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/matrixMulDrv.exe - compute_35,compute_35; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -100,13 +100,13 @@ - data/%(Filename)64.ptx - ptx + data/%(Filename)64.fatbin + fatbin - + diff --git a/Samples/matrixMulDrv/matrixMul_kernel.cu b/Samples/matrixMulDrv/matrixMul_kernel.cu index a1680431..a0762f4b 100644 --- a/Samples/matrixMulDrv/matrixMul_kernel.cu +++ b/Samples/matrixMulDrv/matrixMul_kernel.cu @@ -34,16 +34,8 @@ #include -#define CHECK_BANK_CONFLICTS 0 -#if CHECK_BANK_CONFLICTS -#define AS(i, j) \ - cutilBankChecker((reinterpret_cast(&As[0][0])), (block_size * i + j)) -#define BS(i, j) \ - cutilBankChecker((reinterpret_cast(&Bs[0][0])), (block_size * i + j)) -#else #define AS(i, j) As[i][j] #define BS(i, j) Bs[i][j] -#endif //////////////////////////////////////////////////////////////////////////////// //! Matrix multiplication on the device: C = A * B @@ -119,18 +111,10 @@ __device__ void matrixMul(float *C, float *A, float *B, size_type wA, } // C wrappers around our template kernel -extern "C" __global__ void matrixMul_bs16_32bit(float *C, float *A, float *B, - int wA, int wB) { - matrixMul<16, int>(C, A, B, wA, wB); -} extern "C" __global__ void matrixMul_bs16_64bit(float *C, float *A, float *B, size_t wA, size_t wB) { matrixMul<16, size_t>(C, A, B, wA, wB); } -extern "C" __global__ void matrixMul_bs32_32bit(float *C, float *A, float *B, - int wA, int wB) { - matrixMul<32, int>(C, A, B, wA, wB); -} extern "C" __global__ void matrixMul_bs32_64bit(float *C, float *A, float *B, size_t wA, size_t wB) { matrixMul<32, size_t>(C, A, B, wA, wB); diff --git a/Samples/memMapIPCDrv/README.md b/Samples/memMapIPCDrv/README.md index b4d6ba68..b8303b2a 100644 --- a/Samples/memMapIPCDrv/README.md +++ b/Samples/memMapIPCDrv/README.md @@ -10,7 +10,7 @@ CUDA Driver API, cuMemMap IPC, MMAP ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cuModuleLoad, cuModuleLoadDataEx, cuModuleGetFunction, cuLaunchKernel, cuMemcpyD ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2012.sln b/Samples/memMapIPCDrv/memMapIPCDrv_vs2012.sln deleted file mode 100644 index 9d98e0ed..00000000 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memMapIPCDrv", "memMapIPCDrv_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2012.vcxproj b/Samples/memMapIPCDrv/memMapIPCDrv_vs2012.vcxproj deleted file mode 100644 index d341e068..00000000 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2012.vcxproj +++ /dev/null @@ -1,112 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - memMapIPCDrv_vs2012 - memMapIPCDrv - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/memMapIPCDrv.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - data/%(Filename)64.ptx - ptx - - - - - - - - - diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2013.sln b/Samples/memMapIPCDrv/memMapIPCDrv_vs2013.sln deleted file mode 100644 index 337b0413..00000000 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "memMapIPCDrv", "memMapIPCDrv_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2013.vcxproj b/Samples/memMapIPCDrv/memMapIPCDrv_vs2013.vcxproj deleted file mode 100644 index 5eb16173..00000000 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2013.vcxproj +++ /dev/null @@ -1,112 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - memMapIPCDrv_vs2013 - memMapIPCDrv - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/memMapIPCDrv.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - data/%(Filename)64.ptx - ptx - - - - - - - - - diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2015.vcxproj b/Samples/memMapIPCDrv/memMapIPCDrv_vs2015.vcxproj index a34b94d0..8c755b00 100644 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2015.vcxproj +++ b/Samples/memMapIPCDrv/memMapIPCDrv_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2017.vcxproj b/Samples/memMapIPCDrv/memMapIPCDrv_vs2017.vcxproj index 80fee5c9..69914bef 100644 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2017.vcxproj +++ b/Samples/memMapIPCDrv/memMapIPCDrv_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -112,6 +112,6 @@ - + diff --git a/Samples/memMapIPCDrv/memMapIPCDrv_vs2019.vcxproj b/Samples/memMapIPCDrv/memMapIPCDrv_vs2019.vcxproj index b33860f5..f09f2de2 100644 --- a/Samples/memMapIPCDrv/memMapIPCDrv_vs2019.vcxproj +++ b/Samples/memMapIPCDrv/memMapIPCDrv_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -108,6 +108,6 @@ - + diff --git a/Samples/nvJPEG/README.md b/Samples/nvJPEG/README.md index b556bddf..e3417933 100644 --- a/Samples/nvJPEG/README.md +++ b/Samples/nvJPEG/README.md @@ -25,7 +25,7 @@ x86_64, ppc64le, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/nvJPEG/nvJPEG_vs2012.sln b/Samples/nvJPEG/nvJPEG_vs2012.sln deleted file mode 100644 index 3579beae..00000000 --- a/Samples/nvJPEG/nvJPEG_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvJPEG", "nvJPEG_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/nvJPEG/nvJPEG_vs2012.vcxproj b/Samples/nvJPEG/nvJPEG_vs2012.vcxproj deleted file mode 100644 index 784e05b1..00000000 --- a/Samples/nvJPEG/nvJPEG_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - nvJPEG_vs2012 - nvJPEG - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - nvjpeg.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/nvJPEG.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/nvJPEG/nvJPEG_vs2013.sln b/Samples/nvJPEG/nvJPEG_vs2013.sln deleted file mode 100644 index d66d94c7..00000000 --- a/Samples/nvJPEG/nvJPEG_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvJPEG", "nvJPEG_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/nvJPEG/nvJPEG_vs2013.vcxproj b/Samples/nvJPEG/nvJPEG_vs2013.vcxproj deleted file mode 100644 index f638caca..00000000 --- a/Samples/nvJPEG/nvJPEG_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - nvJPEG_vs2013 - nvJPEG - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - nvjpeg.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/nvJPEG.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/nvJPEG/nvJPEG_vs2015.vcxproj b/Samples/nvJPEG/nvJPEG_vs2015.vcxproj index 5e86535c..c8811c0e 100644 --- a/Samples/nvJPEG/nvJPEG_vs2015.vcxproj +++ b/Samples/nvJPEG/nvJPEG_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -102,6 +102,6 @@ - + diff --git a/Samples/nvJPEG/nvJPEG_vs2017.vcxproj b/Samples/nvJPEG/nvJPEG_vs2017.vcxproj index 987e8dc6..e99ab26e 100644 --- a/Samples/nvJPEG/nvJPEG_vs2017.vcxproj +++ b/Samples/nvJPEG/nvJPEG_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/nvJPEG/nvJPEG_vs2019.vcxproj b/Samples/nvJPEG/nvJPEG_vs2019.vcxproj index 0118281e..c075b565 100644 --- a/Samples/nvJPEG/nvJPEG_vs2019.vcxproj +++ b/Samples/nvJPEG/nvJPEG_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -103,6 +103,6 @@ - + diff --git a/Samples/nvJPEG_encoder/README.md b/Samples/nvJPEG_encoder/README.md index 97321d97..b5caa295 100644 --- a/Samples/nvJPEG_encoder/README.md +++ b/Samples/nvJPEG_encoder/README.md @@ -25,7 +25,7 @@ x86_64, ppc64le, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2012.vcxproj b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2012.vcxproj deleted file mode 100644 index d161dcc0..00000000 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - nvJPEG_encoder_vs2012 - nvJPEG_encoder - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - nvjpeg.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/nvJPEG_encoder.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2013.vcxproj b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2013.vcxproj deleted file mode 100644 index 2f862c29..00000000 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - nvJPEG_encoder_vs2013 - nvJPEG_encoder - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - nvjpeg.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/nvJPEG_encoder.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2015.vcxproj b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2015.vcxproj index b2825a3d..a27d9c5f 100644 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2015.vcxproj +++ b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -102,6 +102,6 @@ - + diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2017.vcxproj b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2017.vcxproj index 38f3eef7..aff650f5 100644 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2017.vcxproj +++ b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2019.vcxproj b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2019.vcxproj index 85aa6f2c..8692513a 100644 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2019.vcxproj +++ b/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -103,6 +103,6 @@ - + diff --git a/Samples/p2pBandwidthLatencyTest/Makefile b/Samples/p2pBandwidthLatencyTest/Makefile index 0f830b77..60e62903 100644 --- a/Samples/p2pBandwidthLatencyTest/Makefile +++ b/Samples/p2pBandwidthLatencyTest/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/p2pBandwidthLatencyTest/NsightEclipse.xml b/Samples/p2pBandwidthLatencyTest/NsightEclipse.xml index 65b1a254..74cfdc5a 100644 --- a/Samples/p2pBandwidthLatencyTest/NsightEclipse.xml +++ b/Samples/p2pBandwidthLatencyTest/NsightEclipse.xml @@ -50,6 +50,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/p2pBandwidthLatencyTest/README.md b/Samples/p2pBandwidthLatencyTest/README.md index 130d0879..ff50ee98 100644 --- a/Samples/p2pBandwidthLatencyTest/README.md +++ b/Samples/p2pBandwidthLatencyTest/README.md @@ -10,7 +10,7 @@ Performance Strategies, Asynchronous Data Transfers, Unified Virtual Address Spa ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaDeviceCanAccessPeer, cudaDeviceEnablePeerAccess, cudaDeviceDisablePeerAccess ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2012.sln b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2012.sln deleted file mode 100644 index 9cfed601..00000000 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "p2pBandwidthLatencyTest", "p2pBandwidthLatencyTest_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2012.vcxproj b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2012.vcxproj deleted file mode 100644 index 06d313b8..00000000 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - p2pBandwidthLatencyTest_vs2012 - p2pBandwidthLatencyTest - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/p2pBandwidthLatencyTest.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2013.sln b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2013.sln deleted file mode 100644 index cac60a5d..00000000 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "p2pBandwidthLatencyTest", "p2pBandwidthLatencyTest_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2013.vcxproj b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2013.vcxproj deleted file mode 100644 index 31e7a1a8..00000000 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - p2pBandwidthLatencyTest_vs2013 - p2pBandwidthLatencyTest - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/p2pBandwidthLatencyTest.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2015.vcxproj b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2015.vcxproj index 12f7f57a..12023d37 100644 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2015.vcxproj +++ b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/p2pBandwidthLatencyTest.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2017.vcxproj b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2017.vcxproj index 94e41a0c..74245c9d 100644 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2017.vcxproj +++ b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/p2pBandwidthLatencyTest.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2019.vcxproj b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2019.vcxproj index 929881cd..ee13c354 100644 --- a/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2019.vcxproj +++ b/Samples/p2pBandwidthLatencyTest/p2pBandwidthLatencyTest_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/p2pBandwidthLatencyTest.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/reduction/Makefile b/Samples/reduction/Makefile index ee4a3b23..70bc1c3b 100644 --- a/Samples/reduction/Makefile +++ b/Samples/reduction/Makefile @@ -301,9 +301,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/reduction/NsightEclipse.xml b/Samples/reduction/NsightEclipse.xml index c0696c61..0eb01ccb 100644 --- a/Samples/reduction/NsightEclipse.xml +++ b/Samples/reduction/NsightEclipse.xml @@ -55,6 +55,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/reduction/README.md b/Samples/reduction/README.md index b2a9b5fd..f4434a40 100644 --- a/Samples/reduction/README.md +++ b/Samples/reduction/README.md @@ -10,7 +10,7 @@ Data-Parallel Algorithms, Performance Strategies ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/reduction/reduction_vs2012.vcxproj b/Samples/reduction/reduction_vs2012.vcxproj deleted file mode 100644 index f0b64b8f..00000000 --- a/Samples/reduction/reduction_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - reduction_vs2012 - reduction - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/reduction.exe - - - compute_30,sm_30;compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/reduction/reduction_vs2013.sln b/Samples/reduction/reduction_vs2013.sln deleted file mode 100644 index a04f9b38..00000000 --- a/Samples/reduction/reduction_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "reduction", "reduction_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/reduction/reduction_vs2013.vcxproj b/Samples/reduction/reduction_vs2013.vcxproj deleted file mode 100644 index 38e5c283..00000000 --- a/Samples/reduction/reduction_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - reduction_vs2013 - reduction - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/reduction.exe - - - compute_30,sm_30;compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/reduction/reduction_vs2015.vcxproj b/Samples/reduction/reduction_vs2015.vcxproj index f34c22cd..f2c0e160 100644 --- a/Samples/reduction/reduction_vs2015.vcxproj +++ b/Samples/reduction/reduction_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/reduction.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/reduction/reduction_vs2017.vcxproj b/Samples/reduction/reduction_vs2017.vcxproj index fc3371c3..9cadf8b4 100644 --- a/Samples/reduction/reduction_vs2017.vcxproj +++ b/Samples/reduction/reduction_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/reduction.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -108,6 +108,6 @@ - + diff --git a/Samples/reduction/reduction_vs2019.vcxproj b/Samples/reduction/reduction_vs2019.vcxproj index fd0ad454..201791dc 100644 --- a/Samples/reduction/reduction_vs2019.vcxproj +++ b/Samples/reduction/reduction_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/reduction.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,6 +104,6 @@ - + diff --git a/Samples/shfl_scan/Makefile b/Samples/shfl_scan/Makefile index 20052c72..1f01d4eb 100644 --- a/Samples/shfl_scan/Makefile +++ b/Samples/shfl_scan/Makefile @@ -255,6 +255,12 @@ ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS)) SAMPLE_ENABLED := 1 +# This sample is not supported on QNX +ifeq ($(TARGET_OS),qnx) + $(info >>> WARNING - shfl_scan is not supported on QNX - waiving sample <<<) + SAMPLE_ENABLED := 0 +endif + ALL_LDFLAGS := ALL_LDFLAGS += $(ALL_CCFLAGS) ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS)) @@ -266,11 +272,38 @@ LIBRARIES := ################################################################################ +#Detect if installed version of GCC supports required C++11 +ifeq ($(TARGET_OS),linux) + empty := + space := $(empty) $(empty) + GCCVERSIONSTRING := $(shell expr `$(HOST_COMPILER) -dumpversion`) +#Create version number without "." + GCCVERSION := $(shell expr `echo $(GCCVERSIONSTRING)` | cut -f1 -d.) + GCCVERSION += $(shell expr `echo $(GCCVERSIONSTRING)` | cut -f2 -d.) + GCCVERSION += $(shell expr `echo $(GCCVERSIONSTRING)` | cut -f3 -d.) +# Make sure the version number has at least 3 decimals + GCCVERSION += 00 +# Remove spaces from the version number + GCCVERSION := $(subst $(space),$(empty),$(GCCVERSION)) +# Crop the version number to 3 decimals. + GCCVERSION := $(shell expr `echo $(GCCVERSION)` | cut -b1-3) +#$(warning $(GCCVERSION)) + + IS_MIN_VERSION := $(shell expr `echo $(GCCVERSION)` \>= 470) + + ifeq ($(IS_MIN_VERSION), 1) + $(info >>> GCC Version is greater or equal to 4.7.0 <<<) + else + $(info >>> Waiving build. Minimum GCC version required is 4.7.0<<<) + SAMPLE_ENABLED := 0 + endif +endif + # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) @@ -289,7 +322,7 @@ GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) endif endif -ALL_CCFLAGS += -O3 +ALL_CCFLAGS += --std=c++11 -O3 ifeq ($(SAMPLE_ENABLED),0) EXEC ?= @echo "[@]" diff --git a/Samples/shfl_scan/NsightEclipse.xml b/Samples/shfl_scan/NsightEclipse.xml index 933951d8..6fc22f42 100644 --- a/Samples/shfl_scan/NsightEclipse.xml +++ b/Samples/shfl_scan/NsightEclipse.xml @@ -3,6 +3,7 @@ shfl_scan + --std=c++11 -O3 @@ -18,6 +19,7 @@ GPGPU + CPP11 CUDA scan parallel prefix sum @@ -29,6 +31,9 @@ true shfl_scan.cu + + CPP11 + 1:CUDA Advanced Topics 1:Data-Parallel Algorithms diff --git a/Samples/shfl_scan/README.md b/Samples/shfl_scan/README.md index 68695af0..788e02bd 100644 --- a/Samples/shfl_scan/README.md +++ b/Samples/shfl_scan/README.md @@ -20,9 +20,13 @@ x86_64, ppc64le, armv7l, aarch64 ## CUDA APIs involved +## Dependencies needed to build/run +[CPP11](../../README.md#cpp11) + ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/shfl_scan/shfl_integral_image.cuh b/Samples/shfl_scan/shfl_integral_image.cuh index 294080bb..e4036da4 100644 --- a/Samples/shfl_scan/shfl_integral_image.cuh +++ b/Samples/shfl_scan/shfl_integral_image.cuh @@ -24,76 +24,68 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include + +namespace cg = cooperative_groups; // Utility function to extract unsigned chars from an // unsigned integer - -__device__ uchar4 int_to_uchar4(unsigned int in) { - uchar4 bytes; - bytes.x = in & 0x000000ff >> 0; - bytes.y = in & 0x0000ff00 >> 8; - bytes.z = in & 0x00ff0000 >> 16; - bytes.w = in & 0xff000000 >> 24; - return bytes; +__device__ uchar4 uint_to_uchar4(const unsigned int in) { + return make_uchar4((in & 0x000000ff) >> 0, (in & 0x0000ff00) >> 8, + (in & 0x00ff0000) >> 16, (in & 0xff000000) >> 24); } -// This function demonstrates some uses of the shuffle instruction -// in the generation of an integral image (also -// called a summed area table) -// The approach is two pass, a horizontal (scanline) then a vertical -// (column) pass. -// This is the horizontal pass kernel. -__global__ void shfl_intimage_rows(uint4 *img, uint4 *integral_image) { - __shared__ int sums[128]; +// Utility for dealing with vector data at different levels. +struct packed_result { + uint4 x, y, z, w; +}; - int id = threadIdx.x; - // pointer to head of current scanline - uint4 *scanline = &img[blockIdx.x * 120]; - uint4 data; - data = scanline[id]; - int result[16]; - int sum; - unsigned int lane_id = id % warpSize; - int warp_id = threadIdx.x / warpSize; +__device__ packed_result get_prefix_sum(const uint4 &data, + const cg::thread_block &cta) { + const auto tile = cg::tiled_partition<32>(cta); - uchar4 a = int_to_uchar4(data.x); - uchar4 b = int_to_uchar4(data.y); - uchar4 c = int_to_uchar4(data.z); - uchar4 d = int_to_uchar4(data.w); + __shared__ unsigned int sums[128]; + const unsigned int lane_id = tile.thread_rank(); + const unsigned int warp_id = tile.meta_group_rank(); - result[0] = a.x; - result[1] = a.x + a.y; - result[2] = a.x + a.y + a.z; - result[3] = a.x + a.y + a.z + a.w; + unsigned int result[16] = {}; + { + const uchar4 a = uint_to_uchar4(data.x); + const uchar4 b = uint_to_uchar4(data.y); + const uchar4 c = uint_to_uchar4(data.z); + const uchar4 d = uint_to_uchar4(data.w); - result[4] = b.x; - result[5] = b.x + b.y; - result[6] = b.x + b.y + b.z; - result[7] = b.x + b.y + b.z + b.w; + result[0] = a.x; + result[1] = a.x + a.y; + result[2] = a.x + a.y + a.z; + result[3] = a.x + a.y + a.z + a.w; - result[8] = c.x; - result[9] = c.x + c.y; - result[10] = c.x + c.y + c.z; - result[11] = c.x + c.y + c.z + c.w; + result[4] = b.x; + result[5] = b.x + b.y; + result[6] = b.x + b.y + b.z; + result[7] = b.x + b.y + b.z + b.w; - result[12] = d.x; - result[13] = d.x + d.y; - result[14] = d.x + d.y + d.z; - result[15] = d.x + d.y + d.z + d.w; + result[8] = c.x; + result[9] = c.x + c.y; + result[10] = c.x + c.y + c.z; + result[11] = c.x + c.y + c.z + c.w; + + result[12] = d.x; + result[13] = d.x + d.y; + result[14] = d.x + d.y + d.z; + result[15] = d.x + d.y + d.z + d.w; + } #pragma unroll - - for (int i = 4; i <= 7; i++) result[i] += result[3]; + for (unsigned int i = 4; i <= 7; i++) result[i] += result[3]; #pragma unroll - - for (int i = 8; i <= 11; i++) result[i] += result[7]; + for (unsigned int i = 8; i <= 11; i++) result[i] += result[7]; #pragma unroll + for (unsigned int i = 12; i <= 15; i++) result[i] += result[11]; - for (int i = 12; i <= 15; i++) result[i] += result[11]; - - sum = result[15]; + unsigned int sum = result[15]; // the prefix sum for each thread's 16 value is computed, // now the final sums (result[15]) need to be shared @@ -101,17 +93,15 @@ __global__ void shfl_intimage_rows(uint4 *img, uint4 *integral_image) { // the __shfl_up() instruction is used and a shuffle scan // operation is performed to distribute the sums to the correct // threads -#pragma unroll - for (int i = 1; i < 32; i *= 2) { - unsigned int mask = 0xffffffff; - int n = __shfl_up_sync(mask, sum, i, 32); +#pragma unroll + for (unsigned int i = 1; i < 32; i *= 2) { + const unsigned int n = tile.shfl_up(sum, i); if (lane_id >= i) { #pragma unroll - - for (int i = 0; i < 16; i++) { - result[i] += n; + for (unsigned int j = 0; j < 16; j++) { + result[j] += n; } sum += n; @@ -126,19 +116,18 @@ __global__ void shfl_intimage_rows(uint4 *img, uint4 *integral_image) { // The results are uniformly added back to the warps. // last thread in the warp holding sum of the warp // places that in shared - if (threadIdx.x % warpSize == warpSize - 1) { + if (tile.thread_rank() == (tile.size() - 1)) { sums[warp_id] = result[15]; } __syncthreads(); if (warp_id == 0) { - int warp_sum = sums[lane_id]; -#pragma unroll + unsigned int warp_sum = sums[lane_id]; - for (int i = 1; i <= 32; i *= 2) { - unsigned int mask = 0xffffffff; - int n = __shfl_up_sync(mask, warp_sum, i, 32); +#pragma unroll + for (unsigned int i = 1; i <= 16; i *= 2) { + const unsigned int n = tile.shfl_up(warp_sum, i); if (lane_id >= i) warp_sum += n; } @@ -148,18 +137,52 @@ __global__ void shfl_intimage_rows(uint4 *img, uint4 *integral_image) { __syncthreads(); - int blockSum = 0; - // fold in unused warp if (warp_id > 0) { - blockSum = sums[warp_id - 1]; -#pragma unroll + const unsigned int blockSum = sums[warp_id - 1]; - for (int i = 0; i < 16; i++) { +#pragma unroll + for (unsigned int i = 0; i < 16; i++) { result[i] += blockSum; } } + packed_result out; + memcpy(&out, result, sizeof(out)); + return out; +} + +// This function demonstrates some uses of the shuffle instruction +// in the generation of an integral image (also +// called a summed area table) +// The approach is two pass, a horizontal (scanline) then a vertical +// (column) pass. +// This is the horizontal pass kernel. +__global__ void shfl_intimage_rows(const uint4 *img, uint4 *integral_image) { + const auto cta = cg::this_thread_block(); + const auto tile = cg::tiled_partition<32>(cta); + + const unsigned int id = threadIdx.x; + // pointer to head of current scanline + const uint4 *scanline = &img[blockIdx.x * 120]; + packed_result result = get_prefix_sum(scanline[id], cta); + + // This access helper allows packed_result to stay optimized as registers + // rather than spill to stack + auto idxToElem = [&result](unsigned int idx) -> const uint4 { + switch (idx) { + case 0: + return result.x; + case 1: + return result.y; + case 2: + return result.z; + case 3: + return result.w; + } + return {}; + }; + // assemble result // Each thread has 16 values to write, which are // now integer data (to avoid overflow). Instead of @@ -170,131 +193,58 @@ __global__ void shfl_intimage_rows(uint4 *img, uint4 *integral_image) { // consecutive data to be written so larger contiguous // segments can be assembled for writing. /* - For example data that needs to be written as + For example data that needs to be written as - GMEM[16] <- x0 x1 x2 x3 y0 y1 y2 y3 z0 z1 z2 z3 w0 w1 w2 w3 - but is stored in registers (r0..r3), in four threads (0..3) as: + GMEM[16] <- x0 x1 x2 x3 y0 y1 y2 y3 z0 z1 z2 z3 w0 w1 w2 w3 + but is stored in registers (r0..r3), in four threads (0..3) as: - threadId 0 1 2 3 - r0 x0 y0 z0 w0 - r1 x1 y1 z1 w1 - r2 x2 y2 z2 w2 - r3 x3 y3 z3 w3 + threadId 0 1 2 3 + r0 x0 y0 z0 w0 + r1 x1 y1 z1 w1 + r2 x2 y2 z2 w2 + r3 x3 y3 z3 w3 - after apply __shfl_xor operations to move data between registers r1..r3: + after apply __shfl_xor operations to move data between registers r1..r3: - threadId 00 01 10 11 - x0 y0 z0 w0 - xor(01)->y1 x1 w1 z1 - xor(10)->z2 w2 x2 y2 - xor(11)->w3 z3 y3 x3 + threadId 00 01 10 11 + x0 y0 z0 w0 + xor(01)->y1 x1 w1 z1 + xor(10)->z2 w2 x2 y2 + xor(11)->w3 z3 y3 x3 - and now x0..x3, and z0..z3 can be written out in order by all threads. + and now x0..x3, and z0..z3 can be written out in order by all threads. - In the current code, each register above is actually representing - four integers to be written as uint4's to GMEM. + In the current code, each register above is actually representing + four integers to be written as uint4's to GMEM. */ - unsigned int mask = 0xffffffff; - uint4 output; - result[4] = __shfl_xor_sync(mask, result[4], 1, 32); - result[5] = __shfl_xor_sync(mask, result[5], 1, 32); - result[6] = __shfl_xor_sync(mask, result[6], 1, 32); - result[7] = __shfl_xor_sync(mask, result[7], 1, 32); + const unsigned int idMask = id & 3; + const unsigned int idSwizzle = (id + 2) & 3; + const unsigned int idShift = (id >> 2) << 4; + const unsigned int blockOffset = blockIdx.x * 480; - result[8] = __shfl_xor_sync(mask, result[8], 2, 32); - result[9] = __shfl_xor_sync(mask, result[9], 2, 32); - result[10] = __shfl_xor_sync(mask, result[10], 2, 32); - result[11] = __shfl_xor_sync(mask, result[11], 2, 32); + // Use CG tile to warp shuffle vector types + result.y = tile.shfl_xor(result.y, 1); + result.z = tile.shfl_xor(result.z, 2); + result.w = tile.shfl_xor(result.w, 3); - result[12] = __shfl_xor_sync(mask, result[12], 3, 32); - result[13] = __shfl_xor_sync(mask, result[13], 3, 32); - result[14] = __shfl_xor_sync(mask, result[14], 3, 32); - result[15] = __shfl_xor_sync(mask, result[15], 3, 32); + // First batch + integral_image[blockOffset + idMask + idShift] = idxToElem(idMask); + // Second batch offset by 2 + integral_image[blockOffset + idSwizzle + idShift + 8] = idxToElem(idSwizzle); - if (threadIdx.x % 4 == 0) { - output = make_uint4(result[0], result[1], result[2], result[3]); - } - - if (threadIdx.x % 4 == 1) { - output = make_uint4(result[4], result[5], result[6], result[7]); - } - - if (threadIdx.x % 4 == 2) { - output = make_uint4(result[8], result[9], result[10], result[11]); - } - - if (threadIdx.x % 4 == 3) { - output = make_uint4(result[12], result[13], result[14], result[15]); - } - - integral_image[blockIdx.x * 480 + threadIdx.x % 4 + (threadIdx.x / 4) * 16] = - output; - - if (threadIdx.x % 4 == 2) { - output = make_uint4(result[0], result[1], result[2], result[3]); - } - - if (threadIdx.x % 4 == 3) { - output = make_uint4(result[4], result[5], result[6], result[7]); - } - - if (threadIdx.x % 4 == 0) { - output = make_uint4(result[8], result[9], result[10], result[11]); - } - - if (threadIdx.x % 4 == 1) { - output = make_uint4(result[12], result[13], result[14], result[15]); - } - - integral_image[blockIdx.x * 480 + (threadIdx.x + 2) % 4 + - (threadIdx.x / 4) * 16 + 8] = output; // continuing from the above example, // this use of __shfl_xor() places the y0..y3 and w0..w3 data // in order. -#pragma unroll + result.x = tile.shfl_xor(result.x, 1); + result.y = tile.shfl_xor(result.y, 1); + result.z = tile.shfl_xor(result.z, 1); + result.w = tile.shfl_xor(result.w, 1); - for (int i = 0; i < 16; i++) { - result[i] = __shfl_xor_sync(mask, result[i], 1, 32); - } - - if (threadIdx.x % 4 == 0) { - output = make_uint4(result[0], result[1], result[2], result[3]); - } - - if (threadIdx.x % 4 == 1) { - output = make_uint4(result[4], result[5], result[6], result[7]); - } - - if (threadIdx.x % 4 == 2) { - output = make_uint4(result[8], result[9], result[10], result[11]); - } - - if (threadIdx.x % 4 == 3) { - output = make_uint4(result[12], result[13], result[14], result[15]); - } - - integral_image[blockIdx.x * 480 + threadIdx.x % 4 + (threadIdx.x / 4) * 16 + - 4] = output; - - if (threadIdx.x % 4 == 2) { - output = make_uint4(result[0], result[1], result[2], result[3]); - } - - if (threadIdx.x % 4 == 3) { - output = make_uint4(result[4], result[5], result[6], result[7]); - } - - if (threadIdx.x % 4 == 0) { - output = make_uint4(result[8], result[9], result[10], result[11]); - } - - if (threadIdx.x % 4 == 1) { - output = make_uint4(result[12], result[13], result[14], result[15]); - } - - integral_image[blockIdx.x * 480 + (threadIdx.x + 2) % 4 + - (threadIdx.x / 4) * 16 + 12] = output; + // First batch + integral_image[blockOffset + idMask + idShift + 4] = idxToElem(idMask); + // Second batch offset by 2 + integral_image[blockOffset + idSwizzle + idShift + 12] = idxToElem(idSwizzle); } // This kernel computes columnwise prefix sums. When the data input is diff --git a/Samples/shfl_scan/shfl_scan_vs2012.vcxproj b/Samples/shfl_scan/shfl_scan_vs2012.vcxproj deleted file mode 100644 index 94c42307..00000000 --- a/Samples/shfl_scan/shfl_scan_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - shfl_scan_vs2012 - shfl_scan - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/shfl_scan.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/shfl_scan/shfl_scan_vs2013.sln b/Samples/shfl_scan/shfl_scan_vs2013.sln deleted file mode 100644 index d7667ce4..00000000 --- a/Samples/shfl_scan/shfl_scan_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shfl_scan", "shfl_scan_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/shfl_scan/shfl_scan_vs2013.vcxproj b/Samples/shfl_scan/shfl_scan_vs2013.vcxproj deleted file mode 100644 index 4eb5c420..00000000 --- a/Samples/shfl_scan/shfl_scan_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - shfl_scan_vs2013 - shfl_scan - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/shfl_scan.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/shfl_scan/shfl_scan_vs2015.vcxproj b/Samples/shfl_scan/shfl_scan_vs2015.vcxproj index 4b53151f..7ad22790 100644 --- a/Samples/shfl_scan/shfl_scan_vs2015.vcxproj +++ b/Samples/shfl_scan/shfl_scan_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/shfl_scan.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/shfl_scan/shfl_scan_vs2017.vcxproj b/Samples/shfl_scan/shfl_scan_vs2017.vcxproj index 43ef2691..fa33808f 100644 --- a/Samples/shfl_scan/shfl_scan_vs2017.vcxproj +++ b/Samples/shfl_scan/shfl_scan_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/shfl_scan.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -108,6 +108,6 @@ - + diff --git a/Samples/shfl_scan/shfl_scan_vs2019.vcxproj b/Samples/shfl_scan/shfl_scan_vs2019.vcxproj index df2dd263..c118fa7c 100644 --- a/Samples/shfl_scan/shfl_scan_vs2019.vcxproj +++ b/Samples/shfl_scan/shfl_scan_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/shfl_scan.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,6 +104,6 @@ - + diff --git a/Samples/simpleAWBarrier/Makefile b/Samples/simpleAWBarrier/Makefile index d11c54c6..deae4112 100644 --- a/Samples/simpleAWBarrier/Makefile +++ b/Samples/simpleAWBarrier/Makefile @@ -307,9 +307,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 70 72 75 80 +SMS ?= 70 72 75 80 86 else -SMS ?= 70 75 80 +SMS ?= 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleAWBarrier/NsightEclipse.xml b/Samples/simpleAWBarrier/NsightEclipse.xml index 5c73108c..48dcfe69 100644 --- a/Samples/simpleAWBarrier/NsightEclipse.xml +++ b/Samples/simpleAWBarrier/NsightEclipse.xml @@ -43,6 +43,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleAWBarrier/README.md b/Samples/simpleAWBarrier/README.md index ab36896b..5ba9a7d0 100644 --- a/Samples/simpleAWBarrier/README.md +++ b/Samples/simpleAWBarrier/README.md @@ -10,7 +10,7 @@ Arrive Wait Barrier ## Supported SM Architectures -[SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaMalloc, cudaFree, cudaMemcpyAsync ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleAWBarrier/simpleAWBarrier_vs2015.vcxproj b/Samples/simpleAWBarrier/simpleAWBarrier_vs2015.vcxproj index 9f140fda..97c9b929 100644 --- a/Samples/simpleAWBarrier/simpleAWBarrier_vs2015.vcxproj +++ b/Samples/simpleAWBarrier/simpleAWBarrier_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleAWBarrier.exe - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleAWBarrier/simpleAWBarrier_vs2017.vcxproj b/Samples/simpleAWBarrier/simpleAWBarrier_vs2017.vcxproj index 050b5802..a1551a5c 100644 --- a/Samples/simpleAWBarrier/simpleAWBarrier_vs2017.vcxproj +++ b/Samples/simpleAWBarrier/simpleAWBarrier_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleAWBarrier.exe - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleAWBarrier/simpleAWBarrier_vs2019.vcxproj b/Samples/simpleAWBarrier/simpleAWBarrier_vs2019.vcxproj index 763a5d81..eb762f87 100644 --- a/Samples/simpleAWBarrier/simpleAWBarrier_vs2019.vcxproj +++ b/Samples/simpleAWBarrier/simpleAWBarrier_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleAWBarrier.exe - compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleAttributes/Makefile b/Samples/simpleAttributes/Makefile index 42678edd..984dd442 100644 --- a/Samples/simpleAttributes/Makefile +++ b/Samples/simpleAttributes/Makefile @@ -274,9 +274,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleAttributes/NsightEclipse.xml b/Samples/simpleAttributes/NsightEclipse.xml index 29538676..8b24ab8f 100644 --- a/Samples/simpleAttributes/NsightEclipse.xml +++ b/Samples/simpleAttributes/NsightEclipse.xml @@ -44,6 +44,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleAttributes/README.md b/Samples/simpleAttributes/README.md index 6d034226..a7d176d7 100644 --- a/Samples/simpleAttributes/README.md +++ b/Samples/simpleAttributes/README.md @@ -10,7 +10,7 @@ Attributes usage on stream ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaCtxResetPersistingL2Cache, cudaDeviceSetLimit, cudaFree, cudaGetDeviceProper ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/simpleAttributes/simpleAttributes_vs2012.sln b/Samples/simpleAttributes/simpleAttributes_vs2012.sln deleted file mode 100644 index f00b1367..00000000 --- a/Samples/simpleAttributes/simpleAttributes_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleAttributes", "simpleAttributes_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleAttributes/simpleAttributes_vs2012.vcxproj b/Samples/simpleAttributes/simpleAttributes_vs2012.vcxproj deleted file mode 100644 index fb26b4d6..00000000 --- a/Samples/simpleAttributes/simpleAttributes_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleAttributes_vs2012 - simpleAttributes - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleAttributes.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleAttributes/simpleAttributes_vs2013.sln b/Samples/simpleAttributes/simpleAttributes_vs2013.sln deleted file mode 100644 index 7e15975e..00000000 --- a/Samples/simpleAttributes/simpleAttributes_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleAttributes", "simpleAttributes_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleAttributes/simpleAttributes_vs2013.vcxproj b/Samples/simpleAttributes/simpleAttributes_vs2013.vcxproj deleted file mode 100644 index 4ee2e5ef..00000000 --- a/Samples/simpleAttributes/simpleAttributes_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleAttributes_vs2013 - simpleAttributes - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleAttributes.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleAttributes/simpleAttributes_vs2015.vcxproj b/Samples/simpleAttributes/simpleAttributes_vs2015.vcxproj index f1e09101..f5abf252 100644 --- a/Samples/simpleAttributes/simpleAttributes_vs2015.vcxproj +++ b/Samples/simpleAttributes/simpleAttributes_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleAttributes.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleAttributes/simpleAttributes_vs2017.vcxproj b/Samples/simpleAttributes/simpleAttributes_vs2017.vcxproj index 4a19feaa..2e805841 100644 --- a/Samples/simpleAttributes/simpleAttributes_vs2017.vcxproj +++ b/Samples/simpleAttributes/simpleAttributes_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleAttributes.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleAttributes/simpleAttributes_vs2019.vcxproj b/Samples/simpleAttributes/simpleAttributes_vs2019.vcxproj index 71597815..8d17df3f 100644 --- a/Samples/simpleAttributes/simpleAttributes_vs2019.vcxproj +++ b/Samples/simpleAttributes/simpleAttributes_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleAttributes.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleCUBLAS/NsightEclipse.xml b/Samples/simpleCUBLAS/NsightEclipse.xml index 9e9022ae..8d3a6e3a 100644 --- a/Samples/simpleCUBLAS/NsightEclipse.xml +++ b/Samples/simpleCUBLAS/NsightEclipse.xml @@ -43,6 +43,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleCUBLAS/README.md b/Samples/simpleCUBLAS/README.md index 58cea27f..efb542b5 100644 --- a/Samples/simpleCUBLAS/README.md +++ b/Samples/simpleCUBLAS/README.md @@ -10,7 +10,7 @@ Image Processing, CUBLAS Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2012.sln b/Samples/simpleCUBLAS/simpleCUBLAS_vs2012.sln deleted file mode 100644 index 4ea5adb0..00000000 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCUBLAS", "simpleCUBLAS_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2013.sln b/Samples/simpleCUBLAS/simpleCUBLAS_vs2013.sln deleted file mode 100644 index 75b516b3..00000000 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCUBLAS", "simpleCUBLAS_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2015.vcxproj b/Samples/simpleCUBLAS/simpleCUBLAS_vs2015.vcxproj index a3eba4f8..5247102e 100644 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2015.vcxproj +++ b/Samples/simpleCUBLAS/simpleCUBLAS_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2017.vcxproj b/Samples/simpleCUBLAS/simpleCUBLAS_vs2017.vcxproj index 24f3268e..abb9f9a8 100644 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2017.vcxproj +++ b/Samples/simpleCUBLAS/simpleCUBLAS_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2019.vcxproj b/Samples/simpleCUBLAS/simpleCUBLAS_vs2019.vcxproj index 8686be4e..3bbf8aa7 100644 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2019.vcxproj +++ b/Samples/simpleCUBLAS/simpleCUBLAS_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleCUBLASXT/NsightEclipse.xml b/Samples/simpleCUBLASXT/NsightEclipse.xml index 14138971..e7b47ded 100644 --- a/Samples/simpleCUBLASXT/NsightEclipse.xml +++ b/Samples/simpleCUBLASXT/NsightEclipse.xml @@ -42,6 +42,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleCUBLASXT/README.md b/Samples/simpleCUBLASXT/README.md index fea4f1c9..45c3d5e7 100644 --- a/Samples/simpleCUBLASXT/README.md +++ b/Samples/simpleCUBLASXT/README.md @@ -10,7 +10,7 @@ CUBLAS-XT Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2012.vcxproj b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2012.vcxproj deleted file mode 100644 index d7411e13..00000000 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCUBLASXT_vs2012 - simpleCUBLASXT - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cublas.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleCUBLASXT.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2013.sln b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2013.sln deleted file mode 100644 index 0deb06af..00000000 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCUBLASXT", "simpleCUBLASXT_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2013.vcxproj b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2013.vcxproj deleted file mode 100644 index cdcec294..00000000 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCUBLASXT_vs2013 - simpleCUBLASXT - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cublas.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleCUBLASXT.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2015.vcxproj b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2015.vcxproj index 94a99b3f..6ed4c962 100644 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2015.vcxproj +++ b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2017.vcxproj b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2017.vcxproj index 04bb6ae1..9bb1594b 100644 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2017.vcxproj +++ b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2019.vcxproj b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2019.vcxproj index 46e15086..097fb61d 100644 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2019.vcxproj +++ b/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleCUFFT/Makefile b/Samples/simpleCUFFT/Makefile index d0178106..e7a95a84 100644 --- a/Samples/simpleCUFFT/Makefile +++ b/Samples/simpleCUFFT/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleCUFFT/NsightEclipse.xml b/Samples/simpleCUFFT/NsightEclipse.xml index c1a79133..135a7a4b 100644 --- a/Samples/simpleCUFFT/NsightEclipse.xml +++ b/Samples/simpleCUFFT/NsightEclipse.xml @@ -41,6 +41,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleCUFFT/README.md b/Samples/simpleCUFFT/README.md index b96b46b8..3d63c976 100644 --- a/Samples/simpleCUFFT/README.md +++ b/Samples/simpleCUFFT/README.md @@ -10,7 +10,7 @@ Image Processing, CUFFT Library ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ x86_64, ppc64le, armv7l, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2012.sln b/Samples/simpleCUFFT/simpleCUFFT_vs2012.sln deleted file mode 100644 index c2f8cfdc..00000000 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCUFFT", "simpleCUFFT_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2012.vcxproj b/Samples/simpleCUFFT/simpleCUFFT_vs2012.vcxproj deleted file mode 100644 index 691801a3..00000000 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCUFFT_vs2012 - simpleCUFFT - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cufft.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleCUFFT.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2013.sln b/Samples/simpleCUFFT/simpleCUFFT_vs2013.sln deleted file mode 100644 index e9782b2d..00000000 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCUFFT", "simpleCUFFT_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2013.vcxproj b/Samples/simpleCUFFT/simpleCUFFT_vs2013.vcxproj deleted file mode 100644 index 2ebade8c..00000000 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCUFFT_vs2013 - simpleCUFFT - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cufft.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleCUFFT.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2015.vcxproj b/Samples/simpleCUFFT/simpleCUFFT_vs2015.vcxproj index bbed32a8..9728b87f 100644 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2015.vcxproj +++ b/Samples/simpleCUFFT/simpleCUFFT_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleCUFFT.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2017.vcxproj b/Samples/simpleCUFFT/simpleCUFFT_vs2017.vcxproj index feda86d7..c8ab32bc 100644 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2017.vcxproj +++ b/Samples/simpleCUFFT/simpleCUFFT_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleCUFFT.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleCUFFT/simpleCUFFT_vs2019.vcxproj b/Samples/simpleCUFFT/simpleCUFFT_vs2019.vcxproj index f34a1780..5653ce94 100644 --- a/Samples/simpleCUFFT/simpleCUFFT_vs2019.vcxproj +++ b/Samples/simpleCUFFT/simpleCUFFT_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleCUFFT.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleCudaGraphs/Makefile b/Samples/simpleCudaGraphs/Makefile index 0b2dab99..dba59a20 100644 --- a/Samples/simpleCudaGraphs/Makefile +++ b/Samples/simpleCudaGraphs/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleCudaGraphs/README.md b/Samples/simpleCudaGraphs/README.md index 792f4049..3d51631b 100644 --- a/Samples/simpleCudaGraphs/README.md +++ b/Samples/simpleCudaGraphs/README.md @@ -25,7 +25,7 @@ cudaStreamBeginCapture, cudaStreamEndCapture, cudaLaunchHostFunc, cudaGraphCreat ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2012.sln b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2012.sln deleted file mode 100644 index 855904cc..00000000 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCudaGraphs", "simpleCudaGraphs_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2012.vcxproj b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2012.vcxproj deleted file mode 100644 index 2d865022..00000000 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCudaGraphs_vs2012 - simpleCudaGraphs - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleCudaGraphs.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2013.sln b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2013.sln deleted file mode 100644 index 4e87fbe9..00000000 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCudaGraphs", "simpleCudaGraphs_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2013.vcxproj b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2013.vcxproj deleted file mode 100644 index 67b464a8..00000000 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCudaGraphs_vs2013 - simpleCudaGraphs - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleCudaGraphs.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2015.vcxproj b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2015.vcxproj index 0f2e727d..bb40cc82 100644 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2015.vcxproj +++ b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2017.vcxproj b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2017.vcxproj index ea33de0a..26d2fcdb 100644 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2017.vcxproj +++ b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2019.vcxproj b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2019.vcxproj index 5e118853..19e88d7a 100644 --- a/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2019.vcxproj +++ b/Samples/simpleCudaGraphs/simpleCudaGraphs_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleCudaGraphs.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleD3D11/README.md b/Samples/simpleD3D11/README.md index c63fbcce..15bc6193 100644 --- a/Samples/simpleD3D11/README.md +++ b/Samples/simpleD3D11/README.md @@ -10,7 +10,7 @@ Graphics Interop, Image Processing ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaD3D11GetDevice, cudaImportExternalSemaphore, cudaImportExternalMemory, cudaE ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleD3D11/simpleD3D11_vs2015.vcxproj b/Samples/simpleD3D11/simpleD3D11_vs2015.vcxproj index d701a183..8d94b121 100644 --- a/Samples/simpleD3D11/simpleD3D11_vs2015.vcxproj +++ b/Samples/simpleD3D11/simpleD3D11_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleD3D11.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -106,6 +106,6 @@ - + diff --git a/Samples/simpleD3D11/simpleD3D11_vs2017.vcxproj b/Samples/simpleD3D11/simpleD3D11_vs2017.vcxproj index 1901f1d3..73dec4d7 100644 --- a/Samples/simpleD3D11/simpleD3D11_vs2017.vcxproj +++ b/Samples/simpleD3D11/simpleD3D11_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleD3D11.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -111,6 +111,6 @@ - + diff --git a/Samples/simpleD3D11/simpleD3D11_vs2019.vcxproj b/Samples/simpleD3D11/simpleD3D11_vs2019.vcxproj index c72c032d..f7918c4c 100644 --- a/Samples/simpleD3D11/simpleD3D11_vs2019.vcxproj +++ b/Samples/simpleD3D11/simpleD3D11_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleD3D11.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleD3D12/NsightEclipse.xml b/Samples/simpleD3D12/NsightEclipse.xml index 32fcba5e..7d63fcd2 100644 --- a/Samples/simpleD3D12/NsightEclipse.xml +++ b/Samples/simpleD3D12/NsightEclipse.xml @@ -50,6 +50,7 @@ sm72 sm75 sm80 + sm86 windows10 diff --git a/Samples/simpleD3D12/README.md b/Samples/simpleD3D12/README.md index b268341a..ef78debb 100644 --- a/Samples/simpleD3D12/README.md +++ b/Samples/simpleD3D12/README.md @@ -10,7 +10,7 @@ Graphics Interop, CUDA DX12 Interop, Image Processing ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaWaitExternalSemaphoresAsync, cudaSignalExternalSemaphoresAsync, cudaImportEx ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleD3D12/simpleD3D12_vs2015.vcxproj b/Samples/simpleD3D12/simpleD3D12_vs2015.vcxproj index 41223661..31c2d6d3 100644 --- a/Samples/simpleD3D12/simpleD3D12_vs2015.vcxproj +++ b/Samples/simpleD3D12/simpleD3D12_vs2015.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleD3D12.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -119,6 +119,6 @@ - + diff --git a/Samples/simpleD3D12/simpleD3D12_vs2017.vcxproj b/Samples/simpleD3D12/simpleD3D12_vs2017.vcxproj index 9653329a..46fe7c30 100644 --- a/Samples/simpleD3D12/simpleD3D12_vs2017.vcxproj +++ b/Samples/simpleD3D12/simpleD3D12_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleD3D12.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -119,6 +119,6 @@ - + diff --git a/Samples/simpleD3D12/simpleD3D12_vs2019.vcxproj b/Samples/simpleD3D12/simpleD3D12_vs2019.vcxproj index a2813d77..6e20534c 100644 --- a/Samples/simpleD3D12/simpleD3D12_vs2019.vcxproj +++ b/Samples/simpleD3D12/simpleD3D12_vs2019.vcxproj @@ -39,7 +39,7 @@ - + @@ -68,7 +68,7 @@ $(OutDir)/simpleD3D12.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -120,6 +120,6 @@ - + diff --git a/Samples/simpleDrvRuntime/Makefile b/Samples/simpleDrvRuntime/Makefile index 2491545b..c6308f2c 100644 --- a/Samples/simpleDrvRuntime/Makefile +++ b/Samples/simpleDrvRuntime/Makefile @@ -272,9 +272,9 @@ FATBIN_FILE := vectorAdd_kernel${TARGET_SIZE}.fatbin # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleDrvRuntime/README.md b/Samples/simpleDrvRuntime/README.md index 28abd337..3d6deca4 100644 --- a/Samples/simpleDrvRuntime/README.md +++ b/Samples/simpleDrvRuntime/README.md @@ -10,7 +10,7 @@ CUDA Driver API, CUDA Runtime API, Vector Addition ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaMemcpy, cudaMalloc, cudaStreamCreateWithFlags ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2012.sln b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2012.sln deleted file mode 100644 index 05f91d9e..00000000 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleDrvRuntime", "simpleDrvRuntime_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2012.vcxproj b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2012.vcxproj deleted file mode 100644 index 9ba1fa93..00000000 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2012.vcxproj +++ /dev/null @@ -1,111 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleDrvRuntime_vs2012 - simpleDrvRuntime - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cudart_static.lib;cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleDrvRuntime.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - data/%(Filename)64.fatbin - fatbin - - - - - - - - diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2013.sln b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2013.sln deleted file mode 100644 index 0a197d4c..00000000 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleDrvRuntime", "simpleDrvRuntime_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2013.vcxproj b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2013.vcxproj deleted file mode 100644 index ad8ad7f3..00000000 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2013.vcxproj +++ /dev/null @@ -1,111 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleDrvRuntime_vs2013 - simpleDrvRuntime - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); - - - Console - cudart_static.lib;cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleDrvRuntime.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - data/%(Filename)64.fatbin - fatbin - - - - - - - - diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2015.vcxproj b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2015.vcxproj index f26509ea..9cb0bdee 100644 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2015.vcxproj +++ b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleDrvRuntime.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -106,6 +106,6 @@ - + diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2017.vcxproj b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2017.vcxproj index 6885ade1..672b7f0e 100644 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2017.vcxproj +++ b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleDrvRuntime.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -111,6 +111,6 @@ - + diff --git a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2019.vcxproj b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2019.vcxproj index 29cc91ff..0f1250de 100644 --- a/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2019.vcxproj +++ b/Samples/simpleDrvRuntime/simpleDrvRuntime_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleDrvRuntime.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleIPC/Makefile b/Samples/simpleIPC/Makefile index 90df2682..406d8a43 100644 --- a/Samples/simpleIPC/Makefile +++ b/Samples/simpleIPC/Makefile @@ -292,9 +292,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleIPC/NsightEclipse.xml b/Samples/simpleIPC/NsightEclipse.xml index 3fd5b6bd..91346c03 100644 --- a/Samples/simpleIPC/NsightEclipse.xml +++ b/Samples/simpleIPC/NsightEclipse.xml @@ -49,6 +49,7 @@ sm72 sm75 sm80 + sm86 ../../Common/helper_multiprocess.cpp ../../Common/helper_multiprocess.h diff --git a/Samples/simpleIPC/README.md b/Samples/simpleIPC/README.md index f9b9fef9..0f143cf3 100644 --- a/Samples/simpleIPC/README.md +++ b/Samples/simpleIPC/README.md @@ -10,7 +10,7 @@ CUDA Systems Integration, Peer to Peer, InterProcess Communication ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaIpcGetEventHandle, cudaIpcOpenMemHandle, cudaIpcCloseMemHandle, cudaMemcpyAs ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleIPC/simpleIPC_vs2012.vcxproj b/Samples/simpleIPC/simpleIPC_vs2012.vcxproj deleted file mode 100644 index fb46bc41..00000000 --- a/Samples/simpleIPC/simpleIPC_vs2012.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleIPC_vs2012 - simpleIPC - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleIPC.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/simpleIPC/simpleIPC_vs2013.vcxproj b/Samples/simpleIPC/simpleIPC_vs2013.vcxproj deleted file mode 100644 index 0c8aed02..00000000 --- a/Samples/simpleIPC/simpleIPC_vs2013.vcxproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleIPC_vs2013 - simpleIPC - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleIPC.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - diff --git a/Samples/simpleIPC/simpleIPC_vs2015.vcxproj b/Samples/simpleIPC/simpleIPC_vs2015.vcxproj index 655ea1e0..e0e42c80 100644 --- a/Samples/simpleIPC/simpleIPC_vs2015.vcxproj +++ b/Samples/simpleIPC/simpleIPC_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleIPC.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleIPC/simpleIPC_vs2017.vcxproj b/Samples/simpleIPC/simpleIPC_vs2017.vcxproj index 21fcf4b0..da52a797 100644 --- a/Samples/simpleIPC/simpleIPC_vs2017.vcxproj +++ b/Samples/simpleIPC/simpleIPC_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleIPC.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -108,6 +108,6 @@ - + diff --git a/Samples/simpleIPC/simpleIPC_vs2019.vcxproj b/Samples/simpleIPC/simpleIPC_vs2019.vcxproj index 62066054..f48fb7bf 100644 --- a/Samples/simpleIPC/simpleIPC_vs2019.vcxproj +++ b/Samples/simpleIPC/simpleIPC_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleIPC.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -104,6 +104,6 @@ - + diff --git a/Samples/simpleVoteIntrinsics/Makefile b/Samples/simpleVoteIntrinsics/Makefile index c38ad0ca..adf4d69c 100644 --- a/Samples/simpleVoteIntrinsics/Makefile +++ b/Samples/simpleVoteIntrinsics/Makefile @@ -268,9 +268,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleVoteIntrinsics/NsightEclipse.xml b/Samples/simpleVoteIntrinsics/NsightEclipse.xml index 3c5f4a00..afb1c8f4 100644 --- a/Samples/simpleVoteIntrinsics/NsightEclipse.xml +++ b/Samples/simpleVoteIntrinsics/NsightEclipse.xml @@ -42,6 +42,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleVoteIntrinsics/README.md b/Samples/simpleVoteIntrinsics/README.md index 7fd65b51..da9a237a 100644 --- a/Samples/simpleVoteIntrinsics/README.md +++ b/Samples/simpleVoteIntrinsics/README.md @@ -10,7 +10,7 @@ Vote Intrinsics ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaMalloc, cudaFree, cudaMemcpy, cudaFreeHost ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2012.sln b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2012.sln deleted file mode 100644 index 18ac0121..00000000 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleVoteIntrinsics", "simpleVoteIntrinsics_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2012.vcxproj b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2012.vcxproj deleted file mode 100644 index aa5825c7..00000000 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleVoteIntrinsics_vs2012 - simpleVoteIntrinsics - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleVoteIntrinsics.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2013.sln b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2013.sln deleted file mode 100644 index 09a21ad5..00000000 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleVoteIntrinsics", "simpleVoteIntrinsics_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2013.vcxproj b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2013.vcxproj deleted file mode 100644 index 0da82ca6..00000000 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleVoteIntrinsics_vs2013 - simpleVoteIntrinsics - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/simpleVoteIntrinsics.exe - - - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2015.vcxproj b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2015.vcxproj index f36fb960..b8231f02 100644 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2015.vcxproj +++ b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleVoteIntrinsics.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2017.vcxproj b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2017.vcxproj index 33c61fc5..8db084d7 100644 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2017.vcxproj +++ b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleVoteIntrinsics.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2019.vcxproj b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2019.vcxproj index a8a2d64a..e1dba472 100644 --- a/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2019.vcxproj +++ b/Samples/simpleVoteIntrinsics/simpleVoteIntrinsics_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleVoteIntrinsics.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/simpleVulkan/Makefile b/Samples/simpleVulkan/Makefile index 390b6eb1..f15f967e 100644 --- a/Samples/simpleVulkan/Makefile +++ b/Samples/simpleVulkan/Makefile @@ -329,9 +329,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleVulkan/NsightEclipse.xml b/Samples/simpleVulkan/NsightEclipse.xml index 8b3c8bd1..112eca69 100644 --- a/Samples/simpleVulkan/NsightEclipse.xml +++ b/Samples/simpleVulkan/NsightEclipse.xml @@ -62,6 +62,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/simpleVulkan/README.md b/Samples/simpleVulkan/README.md index 66e03928..7ef5aef9 100644 --- a/Samples/simpleVulkan/README.md +++ b/Samples/simpleVulkan/README.md @@ -10,7 +10,7 @@ Graphics Interop, CUDA Vulkan Interop, Data Parallel Algorithms ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaImportExternalMemory, cudaExternalMemoryGetMappedBuffer, cudaImportExternalS ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleVulkan/simpleVulkan_vs2013.sln b/Samples/simpleVulkan/simpleVulkan_vs2013.sln deleted file mode 100644 index e5c843d0..00000000 --- a/Samples/simpleVulkan/simpleVulkan_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleVulkan", "simpleVulkan_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/simpleVulkan/simpleVulkan_vs2013.vcxproj b/Samples/simpleVulkan/simpleVulkan_vs2013.vcxproj deleted file mode 100644 index e10455bc..00000000 --- a/Samples/simpleVulkan/simpleVulkan_vs2013.vcxproj +++ /dev/null @@ -1,117 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleVulkan_vs2013 - simpleVulkan - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(VULKAN_SDK)/include; - - - Console - cudart_static.lib;vulkan-1.lib;glfw3dll.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir);../../common/lib/$(PlatformName);$(VULKAN_SDK)/Lib; - $(OutDir)/simpleVulkan.exe - - - compute_30,sm_30;compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/simpleVulkan/simpleVulkan_vs2015.vcxproj b/Samples/simpleVulkan/simpleVulkan_vs2015.vcxproj index 22c50edf..9893d488 100644 --- a/Samples/simpleVulkan/simpleVulkan_vs2015.vcxproj +++ b/Samples/simpleVulkan/simpleVulkan_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleVulkan.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -116,6 +116,6 @@ - + diff --git a/Samples/simpleVulkan/simpleVulkan_vs2017.vcxproj b/Samples/simpleVulkan/simpleVulkan_vs2017.vcxproj index 66c2df91..1a8f03a5 100644 --- a/Samples/simpleVulkan/simpleVulkan_vs2017.vcxproj +++ b/Samples/simpleVulkan/simpleVulkan_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleVulkan.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -121,6 +121,6 @@ - + diff --git a/Samples/simpleVulkan/simpleVulkan_vs2019.vcxproj b/Samples/simpleVulkan/simpleVulkan_vs2019.vcxproj index 2730af2e..00003b28 100644 --- a/Samples/simpleVulkan/simpleVulkan_vs2019.vcxproj +++ b/Samples/simpleVulkan/simpleVulkan_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleVulkan.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -117,6 +117,6 @@ - + diff --git a/Samples/simpleVulkanMMAP/Makefile b/Samples/simpleVulkanMMAP/Makefile index 92651d14..91079062 100644 --- a/Samples/simpleVulkanMMAP/Makefile +++ b/Samples/simpleVulkanMMAP/Makefile @@ -331,9 +331,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/simpleVulkanMMAP/NsightEclipse.xml b/Samples/simpleVulkanMMAP/NsightEclipse.xml index 6fa08e36..525ae261 100644 --- a/Samples/simpleVulkanMMAP/NsightEclipse.xml +++ b/Samples/simpleVulkanMMAP/NsightEclipse.xml @@ -78,6 +78,7 @@ sm72 sm75 sm80 + sm86 ../../Common/helper_multiprocess.cpp ../../Common/helper_multiprocess.h diff --git a/Samples/simpleVulkanMMAP/README.md b/Samples/simpleVulkanMMAP/README.md index 1406bb14..304c0a21 100644 --- a/Samples/simpleVulkanMMAP/README.md +++ b/Samples/simpleVulkanMMAP/README.md @@ -10,7 +10,7 @@ cuMemMap IPC, MMAP, Graphics Interop, CUDA Vulkan Interop, Data Parallel Algorit ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -33,7 +33,7 @@ cudaGetDeviceProperties, cudaImportExternalMemory, cudaExternalMemoryGetMappedBu ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/simpleVulkanMMAP/VulkanBaseApp.cpp b/Samples/simpleVulkanMMAP/VulkanBaseApp.cpp index 91fc83a9..dc665bdc 100644 --- a/Samples/simpleVulkanMMAP/VulkanBaseApp.cpp +++ b/Samples/simpleVulkanMMAP/VulkanBaseApp.cpp @@ -568,7 +568,8 @@ void VulkanBaseApp::createDevice() std::vector::iterator it = std::find_if(phyDevs.begin(), phyDevs.end(), std::bind(&VulkanBaseApp::isSuitableDevice, this, std::placeholders::_1)); if (it == phyDevs.end()) { - throw std::runtime_error("No suitable device found!"); + printf("\nNo suitable device found! Waiving Execution\n"); + exit(EXIT_WAIVED); } m_physicalDevice = *it; } diff --git a/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2015.vcxproj b/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2015.vcxproj index 99982866..91c2c3eb 100644 --- a/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2015.vcxproj +++ b/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/simpleVulkanMMAP.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -118,6 +118,6 @@ - + diff --git a/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2017.vcxproj b/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2017.vcxproj index ace71004..a1619619 100644 --- a/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2017.vcxproj +++ b/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/simpleVulkanMMAP.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -123,6 +123,6 @@ - + diff --git a/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2019.vcxproj b/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2019.vcxproj index e57a781b..daf7450a 100644 --- a/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2019.vcxproj +++ b/Samples/simpleVulkanMMAP/simpleVulkanMMAP_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/simpleVulkanMMAP.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -119,6 +119,6 @@ - + diff --git a/Samples/simpleZeroCopy/Makefile b/Samples/simpleZeroCopy/Makefile new file mode 100644 index 00000000..06548a1d --- /dev/null +++ b/Samples/simpleZeroCopy/Makefile @@ -0,0 +1,325 @@ +################################################################################ +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################ +# +# Makefile project only supported on Mac OS X and Linux Platforms) +# +################################################################################ + +# Location of the CUDA Toolkit +CUDA_PATH ?= /usr/local/cuda + +############################## +# start deprecated interface # +############################## +ifeq ($(x86_64),1) + $(info WARNING - x86_64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=x86_64 instead) + TARGET_ARCH ?= x86_64 +endif +ifeq ($(ARMv7),1) + $(info WARNING - ARMv7 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=armv7l instead) + TARGET_ARCH ?= armv7l +endif +ifeq ($(aarch64),1) + $(info WARNING - aarch64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=aarch64 instead) + TARGET_ARCH ?= aarch64 +endif +ifeq ($(ppc64le),1) + $(info WARNING - ppc64le variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=ppc64le instead) + TARGET_ARCH ?= ppc64le +endif +ifneq ($(GCC),) + $(info WARNING - GCC variable has been deprecated) + $(info WARNING - please use HOST_COMPILER=$(GCC) instead) + HOST_COMPILER ?= $(GCC) +endif +ifneq ($(abi),) + $(error ERROR - abi variable has been removed) +endif +############################ +# end deprecated interface # +############################ + +# architecture +HOST_ARCH := $(shell uname -m) +TARGET_ARCH ?= $(HOST_ARCH) +ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le armv7l)) + ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le)) + TARGET_SIZE := 64 + else ifneq (,$(filter $(TARGET_ARCH),armv7l)) + TARGET_SIZE := 32 + endif + else + TARGET_SIZE := $(shell getconf LONG_BIT) + endif +else + $(error ERROR - unsupported value $(TARGET_ARCH) for TARGET_ARCH!) +endif + +# sbsa and aarch64 systems look similar. Need to differentiate them at host level for now. +ifeq ($(HOST_ARCH),aarch64) + ifeq ($(CUDA_PATH)/targets/sbsa-linux,$(shell ls -1d $(CUDA_PATH)/targets/sbsa-linux)) + HOST_ARCH := sbsa + TARGET_ARCH := sbsa + endif +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq (,$(filter $(HOST_ARCH)-$(TARGET_ARCH),aarch64-armv7l x86_64-armv7l x86_64-aarch64 x86_64-sbsa x86_64-ppc64le)) + $(error ERROR - cross compiling from $(HOST_ARCH) to $(TARGET_ARCH) is not supported!) + endif +endif + +# When on native aarch64 system with userspace of 32-bit, change TARGET_ARCH to armv7l +ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_SIZE),aarch64-aarch64-32) + TARGET_ARCH = armv7l +endif + +# operating system +HOST_OS := $(shell uname -s 2>/dev/null | tr "[:upper:]" "[:lower:]") +TARGET_OS ?= $(HOST_OS) +ifeq (,$(filter $(TARGET_OS),linux darwin qnx android)) + $(error ERROR - unsupported value $(TARGET_OS) for TARGET_OS!) +endif + +# host compiler +ifeq ($(TARGET_OS),darwin) + ifeq ($(shell expr `xcodebuild -version | grep -i xcode | awk '{print $$2}' | cut -d'.' -f1` \>= 5),1) + HOST_COMPILER ?= clang++ + endif +else ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(HOST_ARCH)-$(TARGET_ARCH),x86_64-armv7l) + ifeq ($(TARGET_OS),linux) + HOST_COMPILER ?= arm-linux-gnueabihf-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/arm-unknown-nto-qnx6.6.0eabi-g++ + else ifeq ($(TARGET_OS),android) + HOST_COMPILER ?= arm-linux-androideabi-g++ + endif + else ifeq ($(TARGET_ARCH),aarch64) + ifeq ($(TARGET_OS), linux) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++ + else ifeq ($(TARGET_OS), android) + HOST_COMPILER ?= aarch64-linux-android-clang++ + endif + else ifeq ($(TARGET_ARCH),sbsa) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_ARCH),ppc64le) + HOST_COMPILER ?= powerpc64le-linux-gnu-g++ + endif +endif +HOST_COMPILER ?= g++ +NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(HOST_COMPILER) + +# internal flags +NVCCFLAGS := -m${TARGET_SIZE} +CCFLAGS := +LDFLAGS := + +# build flags +ifeq ($(TARGET_OS),darwin) + LDFLAGS += -rpath $(CUDA_PATH)/lib + CCFLAGS += -arch $(HOST_ARCH) +else ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_OS),x86_64-armv7l-linux) + LDFLAGS += --dynamic-linker=/lib/ld-linux-armhf.so.3 + CCFLAGS += -mfloat-abi=hard +else ifeq ($(TARGET_OS),android) + LDFLAGS += -pie + CCFLAGS += -fpie -fpic -fexceptions +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/arm-linux-gnueabihf + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib -L$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/lib/aarch64-linux-gnu -L$(TARGET_FS)/lib/aarch64-linux-gnu + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib -L$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/aarch64-linux-gnu -L$(TARGET_FS)/usr/lib/aarch64-linux-gnu + LDFLAGS += --unresolved-symbols=ignore-in-shared-libs + CCFLAGS += -isystem=$(TARGET_FS)/usr/include -I$(TARGET_FS)/usr/include + CCFLAGS += -isystem=$(TARGET_FS)/usr/include/aarch64-linux-gnu -I$(TARGET_FS)/usr/include/aarch64-linux-gnu + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CCFLAGS += -DWIN_INTERFACE_CUSTOM -I/usr/include/aarch64-qnx-gnu + LDFLAGS += -lsocket + LDFLAGS += -rpath=/usr/lib/aarch64-qnx-gnu -L/usr/lib/aarch64-qnx-gnu + ifneq ($(TARGET_FS),) + LDFLAGS += -rpath=$(TARGET_FS)/usr/lib -L $(TARGET_FS)/usr/lib + LDFLAGS += -rpath=$(TARGET_FS)/usr/libnvidia -L $(TARGET_FS)/usr/libnvidia + endif + ifdef TARGET_OVERRIDE # cuda toolkit targets override + NVCCFLAGS += -target-dir $(TARGET_OVERRIDE) + endif + endif +endif + +# Install directory of different arch +CUDA_INSTALL_TARGET_DIR := +ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-gnueabihf/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),sbsa-linux) + CUDA_INSTALL_TARGET_DIR = targets/sbsa-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-android) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-android) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-qnx) + CUDA_INSTALL_TARGET_DIR = targets/ARMv7-linux-QNX/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-qnx/ +else ifeq ($(TARGET_ARCH),ppc64le) + CUDA_INSTALL_TARGET_DIR = targets/ppc64le-linux/ +endif + +# Debug build flags +ifeq ($(dbg),1) + NVCCFLAGS += -g -G + BUILD_TYPE := debug +else + BUILD_TYPE := release +endif + +ALL_CCFLAGS := +ALL_CCFLAGS += $(NVCCFLAGS) +ALL_CCFLAGS += $(EXTRA_NVCCFLAGS) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(CCFLAGS)) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS)) + +SAMPLE_ENABLED := 1 + +ALL_LDFLAGS := +ALL_LDFLAGS += $(ALL_CCFLAGS) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS)) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(EXTRA_LDFLAGS)) + +# Common includes and paths for CUDA +INCLUDES := -I../../Common +LIBRARIES := + +################################################################################ + +# Gencode arguments +ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 +else +SMS ?= 35 37 50 52 60 61 70 75 80 86 +endif + +ifeq ($(SMS),) +$(info >>> WARNING - no SM architectures have been specified - waiving sample <<<) +SAMPLE_ENABLED := 0 +endif + +ifeq ($(GENCODE_FLAGS),) +# Generate SASS code for each SM architecture listed in $(SMS) +$(foreach sm,$(SMS),$(eval GENCODE_FLAGS += -gencode arch=compute_$(sm),code=sm_$(sm))) + +# Generate PTX code from the highest SM architecture in $(SMS) to guarantee forward-compatibility +HIGHEST_SM := $(lastword $(sort $(SMS))) +ifneq ($(HIGHEST_SM),) +GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) +endif +endif + +ifeq ($(SAMPLE_ENABLED),0) +EXEC ?= @echo "[@]" +endif + +################################################################################ + +# Target rules +all: build + +build: simpleZeroCopy + +check.deps: +ifeq ($(SAMPLE_ENABLED),0) + @echo "Sample will be waived due to the above missing dependencies" +else + @echo "Sample is ready - all dependencies have been met" +endif + +simpleZeroCopy.o:simpleZeroCopy.cu + $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $< + +simpleZeroCopy: simpleZeroCopy.o + $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $+ $(LIBRARIES) + $(EXEC) mkdir -p ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + $(EXEC) cp $@ ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + +run: build + $(EXEC) ./simpleZeroCopy + +clean: + rm -f simpleZeroCopy simpleZeroCopy.o + rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/simpleZeroCopy + +clobber: clean diff --git a/Samples/simpleZeroCopy/NsightEclipse.xml b/Samples/simpleZeroCopy/NsightEclipse.xml new file mode 100644 index 00000000..ed0544b6 --- /dev/null +++ b/Samples/simpleZeroCopy/NsightEclipse.xml @@ -0,0 +1,76 @@ + + + + simpleZeroCopy + + cudaEventCreate + cudaEventRecord + cudaEventQuery + cudaEventDestroy + cudaEventElapsedTime + cudaHostAlloc + cudaHostGetDevicePointer + cudaHostRegister + cudaHostUnregister + cudaFreeHost + + + whole + + ./ + ../ + ../../common/inc + + + Performance Strategies + Pinned System Paged Memory + Vector Addition + + + + + + + + true + simpleZeroCopy.cu + + 1:CUDA Basic Topics + 1:Performance Strategies + + sm35 + sm37 + sm50 + sm52 + sm60 + sm61 + sm70 + sm72 + sm75 + sm80 + sm86 + + + x86_64 + linux + + + windows7 + + + x86_64 + macosx + + + arm + + + ppc64le + linux + + + + all + + simpleZeroCopy + diff --git a/Samples/simpleZeroCopy/README.md b/Samples/simpleZeroCopy/README.md new file mode 100644 index 00000000..b06a785c --- /dev/null +++ b/Samples/simpleZeroCopy/README.md @@ -0,0 +1,70 @@ +# simpleZeroCopy - simpleZeroCopy + +## Description + +This sample illustrates how to use Zero MemCopy, kernels can read and write directly to pinned system memory. + +## Key Concepts + +Performance Strategies, Pinned System Paged Memory, Vector Addition + +## Supported SM Architectures + +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) + +## Supported OSes + +Linux, Windows + +## Supported CPU Architecture + +x86_64, ppc64le, armv7l + +## CUDA APIs involved + +### [CUDA Runtime API](http://docs.nvidia.com/cuda/cuda-runtime-api/index.html) +cudaEventCreate, cudaEventRecord, cudaEventQuery, cudaEventDestroy, cudaEventElapsedTime, cudaHostAlloc, cudaHostGetDevicePointer, cudaHostRegister, cudaHostUnregister, cudaFreeHost + +## Prerequisites + +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. + +## Build and Run + +### Windows +The Windows samples are built using the Visual Studio IDE. Solution files (.sln) are provided for each supported version of Visual Studio, using the format: +``` +*_vs.sln - for Visual Studio +``` +Each individual sample has its own set of solution files in its directory: + +To build/examine all the samples at once, the complete solution files should be used. To build/examine a single sample, the individual sample solution files should be used. +> **Note:** Some samples require that the Microsoft DirectX SDK (June 2010 or newer) be installed and that the VC++ directory paths are properly set up (**Tools > Options...**). Check DirectX Dependencies section for details." + +### Linux +The Linux samples are built using makefiles. To use the makefiles, change the current directory to the sample directory you wish to build, and run make: +``` +$ cd +$ make +``` +The samples makefiles can take advantage of certain options: +* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le, armv7l. + By default, TARGET_ARCH is set to HOST_ARCH. On a x86_64 machine, not setting TARGET_ARCH is the equivalent of setting TARGET_ARCH=x86_64.
+`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
`$ make TARGET_ARCH=armv7l`
+ See [here](http://docs.nvidia.com/cuda/cuda-samples/index.html#cross-samples) for more details. +* **dbg=1** - build with debug symbols + ``` + $ make dbg=1 + ``` +* **SMS="A B ..."** - override the SM architectures for which the sample will be built, where `"A B ..."` is a space-delimited list of SM architectures. For example, to generate SASS for SM 50 and SM 60, use `SMS="50 60"`. + ``` + $ make SMS="50 60" + ``` + +* **HOST_COMPILER=** - override the default g++ host compiler. See the [Linux Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements) for a list of supported host compilers. +``` + $ make HOST_COMPILER=g++ +``` + +## References (for more details) + diff --git a/Samples/simpleZeroCopy/simpleZeroCopy.cu b/Samples/simpleZeroCopy/simpleZeroCopy.cu new file mode 100644 index 00000000..0e0212fa --- /dev/null +++ b/Samples/simpleZeroCopy/simpleZeroCopy.cu @@ -0,0 +1,247 @@ +/* Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// System includes +#include +#include + +// CUDA runtime +#include + +// helper functions and utilities to work with CUDA +#include +#include + +#ifndef MAX +#define MAX(a, b) (a > b ? a : b) +#endif + +/* Add two vectors on the GPU */ +__global__ void vectorAddGPU(float *a, float *b, float *c, int N) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + + if (idx < N) { + c[idx] = a[idx] + b[idx]; + } +} + +// Allocate generic memory with malloc() and pin it laster instead of using +// cudaHostAlloc() +bool bPinGenericMemory = false; + +// Macro to aligned up to the memory size in question +#define MEMORY_ALIGNMENT 4096 +#define ALIGN_UP(x, size) (((size_t)x + (size - 1)) & (~(size - 1))) + +int main(int argc, char **argv) { + int n, nelem, deviceCount; + int idev = 0; // use default device 0 + char *device = NULL; + unsigned int flags; + size_t bytes; + float *a, *b, *c; // Pinned memory allocated on the CPU + float *a_UA, *b_UA, *c_UA; // Non-4K Aligned Pinned memory on the CPU + float *d_a, *d_b, *d_c; // Device pointers for mapped memory + float errorNorm, refNorm, ref, diff; + cudaDeviceProp deviceProp; + + if (checkCmdLineFlag(argc, (const char **)argv, "help")) { + printf("Usage: simpleZeroCopy [OPTION]\n\n"); + printf("Options:\n"); + printf(" --device=[device #] Specify the device to be used\n"); + printf( + " --use_generic_memory (optional) use generic page-aligned for system " + "memory\n"); + return EXIT_SUCCESS; + } + + /* Get the device selected by the user or default to 0, and then set it. */ + if (getCmdLineArgumentString(argc, (const char **)argv, "device", &device)) { + cudaGetDeviceCount(&deviceCount); + idev = atoi(device); + + if (idev >= deviceCount || idev < 0) { + fprintf(stderr, + "Device number %d is invalid, will use default CUDA device 0.\n", + idev); + idev = 0; + } + } + + // if GPU found supports SM 1.2, then continue, otherwise we exit + if (!checkCudaCapabilities(1, 2)) { + exit(EXIT_SUCCESS); + } + + if (checkCmdLineFlag(argc, (const char **)argv, "use_generic_memory")) { +#if defined(__APPLE__) || defined(MACOSX) + bPinGenericMemory = false; // Generic Pinning of System Paged memory is not + // currently supported on Mac OSX +#else + bPinGenericMemory = true; +#endif + } + + if (bPinGenericMemory) { + printf("> Using Generic System Paged Memory (malloc)\n"); + } else { + printf("> Using CUDA Host Allocated (cudaHostAlloc)\n"); + } + + checkCudaErrors(cudaSetDevice(idev)); + + /* Verify the selected device supports mapped memory and set the device + flags for mapping host memory. */ + + checkCudaErrors(cudaGetDeviceProperties(&deviceProp, idev)); + +#if CUDART_VERSION >= 2020 + + if (!deviceProp.canMapHostMemory) { + fprintf(stderr, "Device %d does not support mapping CPU host memory!\n", + idev); + + exit(EXIT_SUCCESS); + } + + checkCudaErrors(cudaSetDeviceFlags(cudaDeviceMapHost)); +#else + fprintf(stderr, + "CUDART version %d.%d does not support " + " field\n", + , CUDART_VERSION / 1000, (CUDART_VERSION % 100) / 10); + + exit(EXIT_SUCCESS); +#endif + +#if CUDART_VERSION < 4000 + + if (bPinGenericMemory) { + fprintf( + stderr, + "CUDART version %d.%d does not support function\n", + CUDART_VERSION / 1000, (CUDART_VERSION % 100) / 10); + + exit(EXIT_SUCCESS); + } + +#endif + + /* Allocate mapped CPU memory. */ + + nelem = 1048576; + bytes = nelem * sizeof(float); + + if (bPinGenericMemory) { +#if CUDART_VERSION >= 4000 + a_UA = (float *)malloc(bytes + MEMORY_ALIGNMENT); + b_UA = (float *)malloc(bytes + MEMORY_ALIGNMENT); + c_UA = (float *)malloc(bytes + MEMORY_ALIGNMENT); + + // We need to ensure memory is aligned to 4K (so we will need to padd memory + // accordingly) + a = (float *)ALIGN_UP(a_UA, MEMORY_ALIGNMENT); + b = (float *)ALIGN_UP(b_UA, MEMORY_ALIGNMENT); + c = (float *)ALIGN_UP(c_UA, MEMORY_ALIGNMENT); + + checkCudaErrors(cudaHostRegister(a, bytes, cudaHostRegisterMapped)); + checkCudaErrors(cudaHostRegister(b, bytes, cudaHostRegisterMapped)); + checkCudaErrors(cudaHostRegister(c, bytes, cudaHostRegisterMapped)); +#endif + } else { +#if CUDART_VERSION >= 2020 + flags = cudaHostAllocMapped; + checkCudaErrors(cudaHostAlloc((void **)&a, bytes, flags)); + checkCudaErrors(cudaHostAlloc((void **)&b, bytes, flags)); + checkCudaErrors(cudaHostAlloc((void **)&c, bytes, flags)); +#endif + } + + /* Initialize the vectors. */ + + for (n = 0; n < nelem; n++) { + a[n] = rand() / (float)RAND_MAX; + b[n] = rand() / (float)RAND_MAX; + } + + /* Get the device pointers for the pinned CPU memory mapped into the GPU + memory space. */ + +#if CUDART_VERSION >= 2020 + checkCudaErrors(cudaHostGetDevicePointer((void **)&d_a, (void *)a, 0)); + checkCudaErrors(cudaHostGetDevicePointer((void **)&d_b, (void *)b, 0)); + checkCudaErrors(cudaHostGetDevicePointer((void **)&d_c, (void *)c, 0)); +#endif + + /* Call the GPU kernel using the CPU pointers residing in CPU mapped memory. + */ + printf("> vectorAddGPU kernel will add vectors using mapped CPU memory...\n"); + dim3 block(256); + dim3 grid((unsigned int)ceil(nelem / (float)block.x)); + vectorAddGPU<<>>(d_a, d_b, d_c, nelem); + checkCudaErrors(cudaDeviceSynchronize()); + getLastCudaError("vectorAddGPU() execution failed"); + + /* Compare the results */ + + printf("> Checking the results from vectorAddGPU() ...\n"); + errorNorm = 0.f; + refNorm = 0.f; + + for (n = 0; n < nelem; n++) { + ref = a[n] + b[n]; + diff = c[n] - ref; + errorNorm += diff * diff; + refNorm += ref * ref; + } + + errorNorm = (float)sqrt((double)errorNorm); + refNorm = (float)sqrt((double)refNorm); + + /* Memory clean up */ + + printf("> Releasing CPU memory...\n"); + + if (bPinGenericMemory) { +#if CUDART_VERSION >= 4000 + checkCudaErrors(cudaHostUnregister(a)); + checkCudaErrors(cudaHostUnregister(b)); + checkCudaErrors(cudaHostUnregister(c)); + free(a_UA); + free(b_UA); + free(c_UA); +#endif + } else { +#if CUDART_VERSION >= 2020 + checkCudaErrors(cudaFreeHost(a)); + checkCudaErrors(cudaFreeHost(b)); + checkCudaErrors(cudaFreeHost(c)); +#endif + } + + exit(errorNorm / refNorm < 1.e-6f ? EXIT_SUCCESS : EXIT_FAILURE); +} diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2013.sln b/Samples/simpleZeroCopy/simpleZeroCopy_vs2015.sln similarity index 75% rename from Samples/nvJPEG_encoder/nvJPEG_encoder_vs2013.sln rename to Samples/simpleZeroCopy/simpleZeroCopy_vs2015.sln index 54688bb7..0dfecc0d 100644 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2013.sln +++ b/Samples/simpleZeroCopy/simpleZeroCopy_vs2015.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvJPEG_encoder", "nvJPEG_encoder_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +Microsoft Visual Studio Solution File, Format Version 14.00 +# Visual Studio 2015 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleZeroCopy", "simpleZeroCopy_vs2015.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/bandwidthTest/bandwidthTest_vs2012.vcxproj b/Samples/simpleZeroCopy/simpleZeroCopy_vs2015.vcxproj similarity index 90% rename from Samples/bandwidthTest/bandwidthTest_vs2012.vcxproj rename to Samples/simpleZeroCopy/simpleZeroCopy_vs2015.vcxproj index de4691dc..84f15686 100644 --- a/Samples/bandwidthTest/bandwidthTest_vs2012.vcxproj +++ b/Samples/simpleZeroCopy/simpleZeroCopy_vs2015.vcxproj @@ -15,15 +15,15 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - bandwidthTest_vs2012 - bandwidthTest + simpleZeroCopy_vs2015 + simpleZeroCopy Application MultiByte - v110 + v140 true @@ -33,7 +33,7 @@ - + @@ -59,10 +59,10 @@ Console cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/bandwidthTest.exe + $(OutDir)/simpleZeroCopy.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -97,11 +97,11 @@ - + - + diff --git a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2012.sln b/Samples/simpleZeroCopy/simpleZeroCopy_vs2017.sln similarity index 82% rename from Samples/nvJPEG_encoder/nvJPEG_encoder_vs2012.sln rename to Samples/simpleZeroCopy/simpleZeroCopy_vs2017.sln index 9a38a419..6fe54239 100644 --- a/Samples/nvJPEG_encoder/nvJPEG_encoder_vs2012.sln +++ b/Samples/simpleZeroCopy/simpleZeroCopy_vs2017.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvJPEG_encoder", "nvJPEG_encoder_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2017 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleZeroCopy", "simpleZeroCopy_vs2017.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2012.vcxproj b/Samples/simpleZeroCopy/simpleZeroCopy_vs2017.vcxproj similarity index 81% rename from Samples/NV12toBGRandResize/NV12toBGRandResize_vs2012.vcxproj rename to Samples/simpleZeroCopy/simpleZeroCopy_vs2017.vcxproj index 54d0612d..36e2458e 100644 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2012.vcxproj +++ b/Samples/simpleZeroCopy/simpleZeroCopy_vs2017.vcxproj @@ -15,15 +15,20 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - NV12toBGRandResize_vs2012 - NV12toBGRandResize + simpleZeroCopy_vs2017 + simpleZeroCopy + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + $(LatestTargetPlatformVersion) + $(WindowsTargetPlatformVersion) + Application MultiByte - v110 + v141 true @@ -33,7 +38,7 @@ - + @@ -59,10 +64,10 @@ Console cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/NV12toBGRandResize.exe + $(OutDir)/simpleZeroCopy.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -97,16 +102,11 @@ - - - - - - - + + - + diff --git a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2012.sln b/Samples/simpleZeroCopy/simpleZeroCopy_vs2019.sln similarity index 82% rename from Samples/simpleCUBLASXT/simpleCUBLASXT_vs2012.sln rename to Samples/simpleZeroCopy/simpleZeroCopy_vs2019.sln index 3d53b50e..d16d34a4 100644 --- a/Samples/simpleCUBLASXT/simpleCUBLASXT_vs2012.sln +++ b/Samples/simpleZeroCopy/simpleZeroCopy_vs2019.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleCUBLASXT", "simpleCUBLASXT_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2019 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simpleZeroCopy", "simpleZeroCopy_vs2019.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/bandwidthTest/bandwidthTest_vs2013.vcxproj b/Samples/simpleZeroCopy/simpleZeroCopy_vs2019.vcxproj similarity index 89% rename from Samples/bandwidthTest/bandwidthTest_vs2013.vcxproj rename to Samples/simpleZeroCopy/simpleZeroCopy_vs2019.vcxproj index 2c07ea07..8643bc4d 100644 --- a/Samples/bandwidthTest/bandwidthTest_vs2013.vcxproj +++ b/Samples/simpleZeroCopy/simpleZeroCopy_vs2019.vcxproj @@ -15,15 +15,16 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - bandwidthTest_vs2013 - bandwidthTest + simpleZeroCopy_vs2019 + simpleZeroCopy Application MultiByte - v120 + v142 + 10.0 true @@ -33,7 +34,7 @@ - + @@ -59,10 +60,10 @@ Console cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/bandwidthTest.exe + $(OutDir)/simpleZeroCopy.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -97,11 +98,11 @@ - + - + diff --git a/Samples/systemWideAtomics/Makefile b/Samples/systemWideAtomics/Makefile index f80c167c..d7733fa5 100644 --- a/Samples/systemWideAtomics/Makefile +++ b/Samples/systemWideAtomics/Makefile @@ -292,9 +292,9 @@ LIBRARIES := # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 60 61 70 72 75 80 +SMS ?= 60 61 70 72 75 80 86 else -SMS ?= 60 61 70 75 80 +SMS ?= 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/systemWideAtomics/NsightEclipse.xml b/Samples/systemWideAtomics/NsightEclipse.xml index 4bc50b92..52b49fe3 100644 --- a/Samples/systemWideAtomics/NsightEclipse.xml +++ b/Samples/systemWideAtomics/NsightEclipse.xml @@ -42,6 +42,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/systemWideAtomics/README.md b/Samples/systemWideAtomics/README.md index 3b008e59..2313826e 100644 --- a/Samples/systemWideAtomics/README.md +++ b/Samples/systemWideAtomics/README.md @@ -10,7 +10,7 @@ Atomic Intrinsics, Unified Memory ## Supported SM Architectures -[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaMalloc, cudaFree, cudaMemcpy, cudaFreeHost ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/tf32TensorCoreGemm/Makefile b/Samples/tf32TensorCoreGemm/Makefile index 9bfa32d2..7ebfa8ae 100644 --- a/Samples/tf32TensorCoreGemm/Makefile +++ b/Samples/tf32TensorCoreGemm/Makefile @@ -306,7 +306,7 @@ ifeq ($(TARGET_OS),linux) endif # Gencode arguments -SMS ?= 80 +SMS ?= 80 86 ifeq ($(SMS),) $(info >>> WARNING - no SM architectures have been specified - waiving sample <<<) diff --git a/Samples/tf32TensorCoreGemm/NsightEclipse.xml b/Samples/tf32TensorCoreGemm/NsightEclipse.xml index 14258688..a26babf6 100644 --- a/Samples/tf32TensorCoreGemm/NsightEclipse.xml +++ b/Samples/tf32TensorCoreGemm/NsightEclipse.xml @@ -43,6 +43,7 @@ 1:CUDA Basic Topics
sm80 + sm86 x86_64 diff --git a/Samples/tf32TensorCoreGemm/README.md b/Samples/tf32TensorCoreGemm/README.md index 62b61f7f..fd9acb07 100644 --- a/Samples/tf32TensorCoreGemm/README.md +++ b/Samples/tf32TensorCoreGemm/README.md @@ -10,7 +10,7 @@ Matrix Multiply, WMMA, Tensor Cores ## Supported SM Architectures -[SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cudaMalloc, cudaDeviceSynchronize, cudaFuncSetAttribute, cudaEventCreate, cudaEv ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2015.vcxproj b/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2015.vcxproj index c34d2299..61875160 100644 --- a/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2015.vcxproj +++ b/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/tf32TensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2017.vcxproj b/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2017.vcxproj index 5029aa37..b3137249 100644 --- a/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2017.vcxproj +++ b/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/tf32TensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2019.vcxproj b/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2019.vcxproj index 937aee97..f14197e3 100644 --- a/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2019.vcxproj +++ b/Samples/tf32TensorCoreGemm/tf32TensorCoreGemm_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/tf32TensorCoreGemm.exe - compute_80,sm_80; + compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/vectorAddMMAP/README.md b/Samples/vectorAddMMAP/README.md index 82c26f17..26424ab9 100644 --- a/Samples/vectorAddMMAP/README.md +++ b/Samples/vectorAddMMAP/README.md @@ -10,7 +10,7 @@ CUDA Driver API, Vector Addition, MMAP ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -27,7 +27,7 @@ cuModuleLoad, cuModuleLoadDataEx, cuModuleGetFunction, cuMemAlloc, cuMemFree, cu ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2012.sln b/Samples/vectorAddMMAP/vectorAddMMAP_vs2012.sln deleted file mode 100644 index c6e0d35f..00000000 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vectorAddMMAP", "vectorAddMMAP_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2012.vcxproj b/Samples/vectorAddMMAP/vectorAddMMAP_vs2012.vcxproj deleted file mode 100644 index b3d6fbf5..00000000 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2012.vcxproj +++ /dev/null @@ -1,112 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - vectorAddMMAP_vs2012 - vectorAddMMAP - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/vectorAddMMAP.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - data/%(Filename)64.ptx - ptx - - - - - - - - diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2013.sln b/Samples/vectorAddMMAP/vectorAddMMAP_vs2013.sln deleted file mode 100644 index eb847271..00000000 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vectorAddMMAP", "vectorAddMMAP_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2013.vcxproj b/Samples/vectorAddMMAP/vectorAddMMAP_vs2013.vcxproj deleted file mode 100644 index 8e120f88..00000000 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2013.vcxproj +++ /dev/null @@ -1,112 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - vectorAddMMAP_vs2013 - vectorAddMMAP - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cuda.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/vectorAddMMAP.exe - - - compute_35,compute_35; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - data/%(Filename)64.ptx - ptx - - - - - - - - diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2015.vcxproj b/Samples/vectorAddMMAP/vectorAddMMAP_vs2015.vcxproj index 1d988b29..c71cc6e1 100644 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2015.vcxproj +++ b/Samples/vectorAddMMAP/vectorAddMMAP_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2017.vcxproj b/Samples/vectorAddMMAP/vectorAddMMAP_vs2017.vcxproj index f97cfe1a..8ac502a7 100644 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2017.vcxproj +++ b/Samples/vectorAddMMAP/vectorAddMMAP_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -112,6 +112,6 @@ - + diff --git a/Samples/vectorAddMMAP/vectorAddMMAP_vs2019.vcxproj b/Samples/vectorAddMMAP/vectorAddMMAP_vs2019.vcxproj index 86cc2b3d..03112056 100644 --- a/Samples/vectorAddMMAP/vectorAddMMAP_vs2019.vcxproj +++ b/Samples/vectorAddMMAP/vectorAddMMAP_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -108,6 +108,6 @@ - + diff --git a/Samples/vectorAdd_nvrtc/README.md b/Samples/vectorAdd_nvrtc/README.md index c552178a..f05de494 100644 --- a/Samples/vectorAdd_nvrtc/README.md +++ b/Samples/vectorAdd_nvrtc/README.md @@ -10,7 +10,7 @@ CUDA Driver API, Vector Addition, Runtime Compilation ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cuMemAlloc, cuMemFree, cuMemcpyHtoD, cuMemcpyDtoH ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/vectorAdd_nvrtc/vectorAdd.cpp b/Samples/vectorAdd_nvrtc/vectorAdd.cpp index 40c5721c..275fdd34 100644 --- a/Samples/vectorAdd_nvrtc/vectorAdd.cpp +++ b/Samples/vectorAdd_nvrtc/vectorAdd.cpp @@ -49,11 +49,11 @@ * Host main routine */ int main(int argc, char **argv) { - char *ptx, *kernel_file; - size_t ptxSize; + char *cubin, *kernel_file; + size_t cubinSize; kernel_file = sdkFindFilePath("vectorAdd_kernel.cu", argv[0]); - compileFileToPTX(kernel_file, argc, argv, &ptx, &ptxSize, 0); - CUmodule module = loadPTX(ptx, argc, argv); + compileFileToCUBIN(kernel_file, argc, argv, &cubin, &cubinSize, 0); + CUmodule module = loadCUBIN(cubin, argc, argv); CUfunction kernel_addr; checkCudaErrors(cuModuleGetFunction(&kernel_addr, module, "vectorAdd")); diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2012.sln b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2012.sln deleted file mode 100644 index b3bf2b60..00000000 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vectorAdd_nvrtc", "vectorAdd_nvrtc_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2012.vcxproj b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2012.vcxproj deleted file mode 100644 index 04d8211b..00000000 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - vectorAdd_nvrtc_vs2012 - vectorAdd_nvrtc - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir);$(CUDA_PATH)/include; - - - Console - cuda.lib;nvrtc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/vectorAdd_nvrtc.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2013.sln b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2013.sln deleted file mode 100644 index 3647a494..00000000 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vectorAdd_nvrtc", "vectorAdd_nvrtc_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2013.vcxproj b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2013.vcxproj deleted file mode 100644 index 6de82672..00000000 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - vectorAdd_nvrtc_vs2013 - vectorAdd_nvrtc - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir);$(CUDA_PATH)/include; - - - Console - cuda.lib;nvrtc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/vectorAdd_nvrtc.exe - - - - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2015.vcxproj b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2015.vcxproj index 226e74c2..5d0b773f 100644 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2015.vcxproj +++ b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -102,6 +102,6 @@ - + diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2017.vcxproj b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2017.vcxproj index 54935d94..eea8fa82 100644 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2017.vcxproj +++ b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -107,6 +107,6 @@ - + diff --git a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2019.vcxproj b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2019.vcxproj index 27b4d659..981e938c 100644 --- a/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2019.vcxproj +++ b/Samples/vectorAdd_nvrtc/vectorAdd_nvrtc_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -103,6 +103,6 @@ - + diff --git a/Samples/vulkanImageCUDA/Build_instructions.txt b/Samples/vulkanImageCUDA/Build_instructions.txt index 7e4e5a2f..9b3ada8d 100644 --- a/Samples/vulkanImageCUDA/Build_instructions.txt +++ b/Samples/vulkanImageCUDA/Build_instructions.txt @@ -1,12 +1,12 @@ For Windows: Follow these steps once you have installed Vulkan SDK for Windows from https://www.lunarg.com/vulkan-sdk/ -- Install GLFW3 library at suitable location --- Open the simpleVulkan VS project file. +-- Open the vulkanImageCUDA VS project file. To add the GLFW3 library path --- Right click on Project name "simpleVulkan" click on "Properties" +-- Right click on Project name "vulkanImageCUDA" click on "Properties" -- In Property pages window go to Linker -> General. Here in "Additional Libraries Directories" edit and add path to glfw3dll.lib To add the GLFW3 headers path --- Right click on Project name "simpleVulkan" click on "Properties" +-- Right click on Project name "vulkanImageCUDA" click on "Properties" -- In Property pages window go to "VC++ Directories" section. Here in "Include Directories" edit and add path to GLFW3 headers include directory location. ** Make sure to add path to glfw3.dll in your PATH environment variable** diff --git a/Samples/vulkanImageCUDA/Makefile b/Samples/vulkanImageCUDA/Makefile index c229af9a..88d98476 100644 --- a/Samples/vulkanImageCUDA/Makefile +++ b/Samples/vulkanImageCUDA/Makefile @@ -329,9 +329,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/vulkanImageCUDA/NsightEclipse.xml b/Samples/vulkanImageCUDA/NsightEclipse.xml index 74d9e421..2ee64488 100644 --- a/Samples/vulkanImageCUDA/NsightEclipse.xml +++ b/Samples/vulkanImageCUDA/NsightEclipse.xml @@ -57,6 +57,7 @@ sm72 sm75 sm80 + sm86 x86_64 diff --git a/Samples/vulkanImageCUDA/README.md b/Samples/vulkanImageCUDA/README.md index 75d2bc0c..fc4e88c1 100644 --- a/Samples/vulkanImageCUDA/README.md +++ b/Samples/vulkanImageCUDA/README.md @@ -10,7 +10,7 @@ Graphics Interop, CUDA Vulkan Interop, Data Parallel Algorithms ## Supported SM Architectures -[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) ## Supported OSes @@ -30,7 +30,7 @@ cudaImportExternalMemory, cudaExternalMemoryGetMappedMipmappedArray, cudaImportE ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. Make sure the dependencies mentioned in [Dependencies]() section above are installed. ## Build and Run diff --git a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2013.sln b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2013.sln deleted file mode 100644 index 2438e3d2..00000000 --- a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vulkanImageCUDA", "vulkanImageCUDA_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2013.vcxproj b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2013.vcxproj deleted file mode 100644 index 1b8110b9..00000000 --- a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2013.vcxproj +++ /dev/null @@ -1,117 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - vulkanImageCUDA_vs2013 - vulkanImageCUDA - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(VULKAN_SDK)/include; - - - Console - cudart_static.lib;vulkan-1.lib;glfw3dll.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir);../../common/lib/$(PlatformName);$(VULKAN_SDK)/Lib; - $(OutDir)/vulkanImageCUDA.exe - - - compute_30,sm_30;compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2015.vcxproj b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2015.vcxproj index bace6519..0da9169f 100644 --- a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2015.vcxproj +++ b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/vulkanImageCUDA.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -112,6 +112,6 @@ - + diff --git a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2017.vcxproj b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2017.vcxproj index 43834690..7eee7ae7 100644 --- a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2017.vcxproj +++ b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/vulkanImageCUDA.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -117,6 +117,6 @@ - + diff --git a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2019.vcxproj b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2019.vcxproj index 875a4b92..4c39e79e 100644 --- a/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2019.vcxproj +++ b/Samples/vulkanImageCUDA/vulkanImageCUDA_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/vulkanImageCUDA.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -113,6 +113,6 @@ - + diff --git a/Samples/warpAggregatedAtomicsCG/Makefile b/Samples/warpAggregatedAtomicsCG/Makefile index 71942c7e..b50f6af9 100644 --- a/Samples/warpAggregatedAtomicsCG/Makefile +++ b/Samples/warpAggregatedAtomicsCG/Makefile @@ -295,9 +295,9 @@ endif # Gencode arguments ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),armv7l aarch64)) -SMS ?= 35 37 50 52 60 61 70 72 75 80 +SMS ?= 35 37 50 52 60 61 70 72 75 80 86 else -SMS ?= 35 37 50 52 60 61 70 75 80 +SMS ?= 35 37 50 52 60 61 70 75 80 86 endif ifeq ($(SMS),) diff --git a/Samples/warpAggregatedAtomicsCG/README.md b/Samples/warpAggregatedAtomicsCG/README.md index 5030b8f7..a3d3558a 100644 --- a/Samples/warpAggregatedAtomicsCG/README.md +++ b/Samples/warpAggregatedAtomicsCG/README.md @@ -22,7 +22,7 @@ x86_64, ppc64le, armv7l, aarch64 ## Prerequisites -Download and install the [CUDA Toolkit 11.0](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. ## Build and Run diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG.cu b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG.cu index 429c755b..674137c3 100644 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG.cu +++ b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG.cu @@ -33,6 +33,7 @@ #include #include +#include namespace cg = cooperative_groups; @@ -152,6 +153,107 @@ int mapIndicesToBuckets(int *h_srcArr, int *d_srcArr, int numOfBuckets) return EXIT_SUCCESS; } +// Warp-aggregated atomic Max in multi bucket +#if __CUDA_ARCH__ >= 700 +__device__ void atomicAggMaxMulti(const int bucket, int *counter, const int valueForMax) +{ + cg::coalesced_group active = cg::coalesced_threads(); + // group all threads with same bucket value. + auto labeledGroup = cg::labeled_partition(active, bucket); + + const int maxValueInGroup = cg::reduce(labeledGroup, valueForMax, cg::greater()); + + if (labeledGroup.thread_rank() == 0) + { + atomicMax(&counter[bucket], maxValueInGroup); + } +} +#endif + +// Performs max calculation in each buckets. +__global__ void calculateMaxInEachBuckets(const int *srcArr, const int *valueInBuckets, int *bucketsMax, const int srcSize, const int numOfBuckets) +{ +#if __CUDA_ARCH__ >= 700 + cg::grid_group grid = cg::this_grid(); + + for (int i=grid.thread_rank(); i < srcSize; i += grid.size()) + { + const int bucket = srcArr[i]; + if (bucket < numOfBuckets) + { + atomicAggMaxMulti(bucket, bucketsMax, valueInBuckets[i]); + } + } +#endif +} + +int calculateMaxInBuckets(int *h_srcArr, int *d_srcArr, int numOfBuckets) +{ + int *d_valueInBuckets, *d_bucketsMax; + int *h_valueInBuckets = new int[NUM_ELEMS]; + int *cpuBucketsMax = new int[numOfBuckets]; + int *h_bucketsMax = new int[numOfBuckets]; + + memset(cpuBucketsMax, 0, sizeof(int) * numOfBuckets); + + // Here we create values which is assumed to correspond to each + // buckets of srcArr at same array index. + for (int i=0; i < NUM_ELEMS; i++) + { + h_valueInBuckets[i] = rand(); + } + + checkCudaErrors(cudaMalloc(&d_valueInBuckets, sizeof(int) * NUM_ELEMS)); + checkCudaErrors(cudaMalloc(&d_bucketsMax, sizeof(int) * numOfBuckets)); + + checkCudaErrors(cudaMemset(d_bucketsMax, 0, sizeof(int) * numOfBuckets)); + checkCudaErrors(cudaMemcpy(d_valueInBuckets, h_valueInBuckets, sizeof(int) * NUM_ELEMS, cudaMemcpyHostToDevice)); + + dim3 dimBlock(NUM_THREADS_PER_BLOCK, 1, 1); + dim3 dimGrid((NUM_ELEMS / NUM_THREADS_PER_BLOCK), 1, 1); + + calculateMaxInEachBuckets<<>>(d_srcArr, d_valueInBuckets, d_bucketsMax, NUM_ELEMS, numOfBuckets); + + checkCudaErrors(cudaMemcpy(h_bucketsMax, d_bucketsMax, sizeof(int) * numOfBuckets, cudaMemcpyDeviceToHost)); + + for (int i = 0; i < NUM_ELEMS; i++) + { + if (cpuBucketsMax[h_srcArr[i]] < h_valueInBuckets[i]) + { + cpuBucketsMax[h_srcArr[i]] = h_valueInBuckets[i]; + } + } + + bool allMatch = true; + int finalElems = 0; + for (int i=0; i < numOfBuckets; i++) + { + if (cpuBucketsMax[i] != h_bucketsMax[i]) + { + allMatch = false; + printf("CPU i=%d max = %d mismatches GPU max = %d\n", i, cpuBucketsMax[i], h_bucketsMax[i]); + break; + } + } + if (allMatch) + { + printf("CPU max matches GPU max\n"); + } + + delete[] h_valueInBuckets; + delete[] cpuBucketsMax; + delete[] h_bucketsMax; + checkCudaErrors(cudaFree(d_valueInBuckets)); + checkCudaErrors(cudaFree(d_bucketsMax)); + + if (!allMatch && finalElems != NUM_ELEMS) + { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + int main(int argc, char **argv) { int *data_to_filter, *filtered_data, nres = 0; int *d_data_to_filter, *d_filtered_data, *d_nres; @@ -204,14 +306,17 @@ int main(int argc, char **argv) { checkCudaErrors(cudaDeviceGetAttribute(&major, cudaDevAttrComputeCapabilityMajor, devId)); int mapIndicesToBucketsStatus = EXIT_SUCCESS; - // atomicAggIncMulti require a GPU of Volta (SM7X) architecture or higher, + int calculateMaxInBucketsStatus = EXIT_SUCCESS; + // atomicAggIncMulti & atomicAggMaxMulti require a GPU of Volta (SM7X) architecture or higher, // so that it can take advantage of the new MATCH capability of Volta hardware if (major >= 7) { mapIndicesToBucketsStatus = mapIndicesToBuckets(data_to_filter, d_data_to_filter, numOfBuckets); + calculateMaxInBucketsStatus = calculateMaxInBuckets(data_to_filter, d_data_to_filter, numOfBuckets); } printf("\nWarp Aggregated Atomics %s \n", - (host_flt_count == nres) && (mapIndicesToBucketsStatus == EXIT_SUCCESS) ? "PASSED" : "FAILED"); + (host_flt_count == nres) && (mapIndicesToBucketsStatus == EXIT_SUCCESS) && + (calculateMaxInBucketsStatus == EXIT_SUCCESS) ? "PASSED" : "FAILED"); checkCudaErrors(cudaFree(d_data_to_filter)); checkCudaErrors(cudaFree(d_filtered_data)); diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2012.sln b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2012.sln deleted file mode 100644 index d02f9b6c..00000000 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2012.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "warpAggregatedAtomicsCG", "warpAggregatedAtomicsCG_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2012.vcxproj b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2012.vcxproj deleted file mode 100644 index 1bedd62e..00000000 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2012.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - warpAggregatedAtomicsCG_vs2012 - warpAggregatedAtomicsCG - - - - - Application - MultiByte - v110 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/warpAggregatedAtomicsCG.exe - - - compute_30,sm_30;compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2013.sln b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2013.sln deleted file mode 100644 index d0f712f9..00000000 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2013.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "warpAggregatedAtomicsCG", "warpAggregatedAtomicsCG_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.ActiveCfg = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Debug|x64.Build.0 = Debug|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.ActiveCfg = Release|x64 - {997E0757-EA74-4A4E-A0FC-47D8C8831A15}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2013.vcxproj b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2013.vcxproj deleted file mode 100644 index 83691eda..00000000 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2013.vcxproj +++ /dev/null @@ -1,107 +0,0 @@ - - - - $(VCTargetsPath)\BuildCustomizations - - - - Debug - x64 - - - Release - x64 - - - - {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - warpAggregatedAtomicsCG_vs2013 - warpAggregatedAtomicsCG - - - - - Application - MultiByte - v120 - - - true - - - true - - - - - - - - - - - $(Platform)/$(Configuration)/ - $(IncludePath) - AllRules.ruleset - - - - - ../../bin/win64/$(Configuration)/ - - - - Level3 - WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common; - - - Console - cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir); - $(OutDir)/warpAggregatedAtomicsCG.exe - - - compute_30,sm_30;compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75; - -Xcompiler "/wd 4819" %(AdditionalOptions) - ./;../../Common - WIN32 - - - - - Disabled - MultiThreadedDebug - - - true - Default - - - MTd - 64 - - - - - MaxSpeed - MultiThreaded - - - false - UseLinkTimeCodeGeneration - - - MT - 64 - - - - - - - - - - - diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2015.vcxproj b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2015.vcxproj index 38aa67aa..3e00228e 100644 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2015.vcxproj +++ b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2015.vcxproj @@ -33,7 +33,7 @@ - + @@ -62,7 +62,7 @@ $(OutDir)/warpAggregatedAtomicsCG.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -102,6 +102,6 @@ - + diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2017.vcxproj b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2017.vcxproj index d3b55cbc..a9c3f7ea 100644 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2017.vcxproj +++ b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2017.vcxproj @@ -38,7 +38,7 @@ - + @@ -67,7 +67,7 @@ $(OutDir)/warpAggregatedAtomicsCG.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -107,6 +107,6 @@ - + diff --git a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2019.vcxproj b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2019.vcxproj index 169e003d..0cb9098f 100644 --- a/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2019.vcxproj +++ b/Samples/warpAggregatedAtomicsCG/warpAggregatedAtomicsCG_vs2019.vcxproj @@ -34,7 +34,7 @@ - + @@ -63,7 +63,7 @@ $(OutDir)/warpAggregatedAtomicsCG.exe - compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80; + compute_35,sm_35;compute_37,sm_37;compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;compute_80,sm_80;compute_86,sm_86; -Xcompiler "/wd 4819" %(AdditionalOptions) ./;../../Common WIN32 @@ -103,6 +103,6 @@ - + diff --git a/Samples/watershedSegmentationNPP/Makefile b/Samples/watershedSegmentationNPP/Makefile new file mode 100644 index 00000000..19f2b511 --- /dev/null +++ b/Samples/watershedSegmentationNPP/Makefile @@ -0,0 +1,329 @@ +################################################################################ +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################ +# +# Makefile project only supported on Mac OS X and Linux Platforms) +# +################################################################################ + +# Location of the CUDA Toolkit +CUDA_PATH ?= /usr/local/cuda + +############################## +# start deprecated interface # +############################## +ifeq ($(x86_64),1) + $(info WARNING - x86_64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=x86_64 instead) + TARGET_ARCH ?= x86_64 +endif +ifeq ($(ARMv7),1) + $(info WARNING - ARMv7 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=armv7l instead) + TARGET_ARCH ?= armv7l +endif +ifeq ($(aarch64),1) + $(info WARNING - aarch64 variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=aarch64 instead) + TARGET_ARCH ?= aarch64 +endif +ifeq ($(ppc64le),1) + $(info WARNING - ppc64le variable has been deprecated) + $(info WARNING - please use TARGET_ARCH=ppc64le instead) + TARGET_ARCH ?= ppc64le +endif +ifneq ($(GCC),) + $(info WARNING - GCC variable has been deprecated) + $(info WARNING - please use HOST_COMPILER=$(GCC) instead) + HOST_COMPILER ?= $(GCC) +endif +ifneq ($(abi),) + $(error ERROR - abi variable has been removed) +endif +############################ +# end deprecated interface # +############################ + +# architecture +HOST_ARCH := $(shell uname -m) +TARGET_ARCH ?= $(HOST_ARCH) +ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le armv7l)) + ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifneq (,$(filter $(TARGET_ARCH),x86_64 aarch64 sbsa ppc64le)) + TARGET_SIZE := 64 + else ifneq (,$(filter $(TARGET_ARCH),armv7l)) + TARGET_SIZE := 32 + endif + else + TARGET_SIZE := $(shell getconf LONG_BIT) + endif +else + $(error ERROR - unsupported value $(TARGET_ARCH) for TARGET_ARCH!) +endif + +# sbsa and aarch64 systems look similar. Need to differentiate them at host level for now. +ifeq ($(HOST_ARCH),aarch64) + ifeq ($(CUDA_PATH)/targets/sbsa-linux,$(shell ls -1d $(CUDA_PATH)/targets/sbsa-linux)) + HOST_ARCH := sbsa + TARGET_ARCH := sbsa + endif +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq (,$(filter $(HOST_ARCH)-$(TARGET_ARCH),aarch64-armv7l x86_64-armv7l x86_64-aarch64 x86_64-sbsa x86_64-ppc64le)) + $(error ERROR - cross compiling from $(HOST_ARCH) to $(TARGET_ARCH) is not supported!) + endif +endif + +# When on native aarch64 system with userspace of 32-bit, change TARGET_ARCH to armv7l +ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_SIZE),aarch64-aarch64-32) + TARGET_ARCH = armv7l +endif + +# operating system +HOST_OS := $(shell uname -s 2>/dev/null | tr "[:upper:]" "[:lower:]") +TARGET_OS ?= $(HOST_OS) +ifeq (,$(filter $(TARGET_OS),linux darwin qnx android)) + $(error ERROR - unsupported value $(TARGET_OS) for TARGET_OS!) +endif + +# host compiler +ifeq ($(TARGET_OS),darwin) + ifeq ($(shell expr `xcodebuild -version | grep -i xcode | awk '{print $$2}' | cut -d'.' -f1` \>= 5),1) + HOST_COMPILER ?= clang++ + endif +else ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(HOST_ARCH)-$(TARGET_ARCH),x86_64-armv7l) + ifeq ($(TARGET_OS),linux) + HOST_COMPILER ?= arm-linux-gnueabihf-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/arm-unknown-nto-qnx6.6.0eabi-g++ + else ifeq ($(TARGET_OS),android) + HOST_COMPILER ?= arm-linux-androideabi-g++ + endif + else ifeq ($(TARGET_ARCH),aarch64) + ifeq ($(TARGET_OS), linux) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_OS),qnx) + ifeq ($(QNX_HOST),) + $(error ERROR - QNX_HOST must be passed to the QNX host toolchain) + endif + ifeq ($(QNX_TARGET),) + $(error ERROR - QNX_TARGET must be passed to the QNX target toolchain) + endif + export QNX_HOST + export QNX_TARGET + HOST_COMPILER ?= $(QNX_HOST)/usr/bin/aarch64-unknown-nto-qnx7.0.0-g++ + else ifeq ($(TARGET_OS), android) + HOST_COMPILER ?= aarch64-linux-android-clang++ + endif + else ifeq ($(TARGET_ARCH),sbsa) + HOST_COMPILER ?= aarch64-linux-gnu-g++ + else ifeq ($(TARGET_ARCH),ppc64le) + HOST_COMPILER ?= powerpc64le-linux-gnu-g++ + endif +endif +HOST_COMPILER ?= g++ +NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(HOST_COMPILER) + +# internal flags +NVCCFLAGS := -m${TARGET_SIZE} +CCFLAGS := +LDFLAGS := + +# build flags +ifeq ($(TARGET_OS),darwin) + LDFLAGS += -rpath $(CUDA_PATH)/lib + CCFLAGS += -arch $(HOST_ARCH) +else ifeq ($(HOST_ARCH)-$(TARGET_ARCH)-$(TARGET_OS),x86_64-armv7l-linux) + LDFLAGS += --dynamic-linker=/lib/ld-linux-armhf.so.3 + CCFLAGS += -mfloat-abi=hard +else ifeq ($(TARGET_OS),android) + LDFLAGS += -pie + CCFLAGS += -fpie -fpic -fexceptions +endif + +ifneq ($(TARGET_ARCH),$(HOST_ARCH)) + ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/arm-linux-gnueabihf + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + ifneq ($(TARGET_FS),) + GCCVERSIONLTEQ46 := $(shell expr `$(HOST_COMPILER) -dumpversion` \<= 4.6) + ifeq ($(GCCVERSIONLTEQ46),1) + CCFLAGS += --sysroot=$(TARGET_FS) + endif + LDFLAGS += --sysroot=$(TARGET_FS) + LDFLAGS += -rpath-link=$(TARGET_FS)/lib -L$(TARGET_FS)/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/lib/aarch64-linux-gnu -L$(TARGET_FS)/lib/aarch64-linux-gnu + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib -L$(TARGET_FS)/usr/lib + LDFLAGS += -rpath-link=$(TARGET_FS)/usr/lib/aarch64-linux-gnu -L$(TARGET_FS)/usr/lib/aarch64-linux-gnu + LDFLAGS += --unresolved-symbols=ignore-in-shared-libs + CCFLAGS += -isystem=$(TARGET_FS)/usr/include -I$(TARGET_FS)/usr/include + CCFLAGS += -isystem=$(TARGET_FS)/usr/include/aarch64-linux-gnu -I$(TARGET_FS)/usr/include/aarch64-linux-gnu + endif + endif + ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CCFLAGS += -DWIN_INTERFACE_CUSTOM -I/usr/include/aarch64-qnx-gnu + LDFLAGS += -lsocket + LDFLAGS += -rpath=/usr/lib/aarch64-qnx-gnu -L/usr/lib/aarch64-qnx-gnu + ifneq ($(TARGET_FS),) + LDFLAGS += -rpath=$(TARGET_FS)/usr/lib -L $(TARGET_FS)/usr/lib + LDFLAGS += -rpath=$(TARGET_FS)/usr/libnvidia -L $(TARGET_FS)/usr/libnvidia + endif + ifdef TARGET_OVERRIDE # cuda toolkit targets override + NVCCFLAGS += -target-dir $(TARGET_OVERRIDE) + endif + endif +endif + +# Install directory of different arch +CUDA_INSTALL_TARGET_DIR := +ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-linux) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-gnueabihf/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-linux) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),sbsa-linux) + CUDA_INSTALL_TARGET_DIR = targets/sbsa-linux/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-android) + CUDA_INSTALL_TARGET_DIR = targets/armv7-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-android) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-linux-androideabi/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),armv7l-qnx) + CUDA_INSTALL_TARGET_DIR = targets/ARMv7-linux-QNX/ +else ifeq ($(TARGET_ARCH)-$(TARGET_OS),aarch64-qnx) + CUDA_INSTALL_TARGET_DIR = targets/aarch64-qnx/ +else ifeq ($(TARGET_ARCH),ppc64le) + CUDA_INSTALL_TARGET_DIR = targets/ppc64le-linux/ +endif + +# Debug build flags +ifeq ($(dbg),1) + NVCCFLAGS += -g -G + BUILD_TYPE := debug +else + BUILD_TYPE := release +endif + +ALL_CCFLAGS := +ALL_CCFLAGS += $(NVCCFLAGS) +ALL_CCFLAGS += $(EXTRA_NVCCFLAGS) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(CCFLAGS)) +ALL_CCFLAGS += $(addprefix -Xcompiler ,$(EXTRA_CCFLAGS)) + +SAMPLE_ENABLED := 1 + +# This sample is not supported on Mac OSX +ifeq ($(TARGET_OS),darwin) + $(info >>> WARNING - watershedSegmentationNPP is not supported on Mac OSX - waiving sample <<<) + SAMPLE_ENABLED := 0 +endif + +ALL_LDFLAGS := +ALL_LDFLAGS += $(ALL_CCFLAGS) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(LDFLAGS)) +ALL_LDFLAGS += $(addprefix -Xlinker ,$(EXTRA_LDFLAGS)) + +# Common includes and paths for CUDA +INCLUDES := -I../../Common +LIBRARIES := + +################################################################################ + +# Gencode arguments +SMS ?= + +ifeq ($(GENCODE_FLAGS),) +# Generate SASS code for each SM architecture listed in $(SMS) +$(foreach sm,$(SMS),$(eval GENCODE_FLAGS += -gencode arch=compute_$(sm),code=sm_$(sm))) + +ifeq ($(SMS),) +# Generate PTX code from SM 35 +GENCODE_FLAGS += -gencode arch=compute_35,code=compute_35 +endif + +# Generate PTX code from the highest SM architecture in $(SMS) to guarantee forward-compatibility +HIGHEST_SM := $(lastword $(sort $(SMS))) +ifneq ($(HIGHEST_SM),) +GENCODE_FLAGS += -gencode arch=compute_$(HIGHEST_SM),code=compute_$(HIGHEST_SM) +endif +endif + +LIBRARIES += -lnppisu_static -lnppif_static -lnppc_static -lculibos + +ifeq ($(SAMPLE_ENABLED),0) +EXEC ?= @echo "[@]" +endif + +################################################################################ + +# Target rules +all: build + +build: watershedSegmentationNPP + +check.deps: +ifeq ($(SAMPLE_ENABLED),0) + @echo "Sample will be waived due to the above missing dependencies" +else + @echo "Sample is ready - all dependencies have been met" +endif + +watershedSegmentationNPP.o:watershedSegmentationNPP.cpp + $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $< + +watershedSegmentationNPP: watershedSegmentationNPP.o + $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $+ $(LIBRARIES) + $(EXEC) mkdir -p ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + $(EXEC) cp $@ ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE) + +run: build + $(EXEC) ./watershedSegmentationNPP + +clean: + rm -f watershedSegmentationNPP watershedSegmentationNPP.o + rm -rf ../../bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/watershedSegmentationNPP + +clobber: clean diff --git a/Samples/watershedSegmentationNPP/NsightEclipse.xml b/Samples/watershedSegmentationNPP/NsightEclipse.xml new file mode 100644 index 00000000..889cd6db --- /dev/null +++ b/Samples/watershedSegmentationNPP/NsightEclipse.xml @@ -0,0 +1,74 @@ + + + + watershedSegmentationNPP + + whole + true + + ./ + ../ + ../../common/inc + + + Performance Strategies + Image Processing + NPP Library + + + CUDA + NPP + Image Processing + + + nppisu_static + nppif_static + nppc_static + culibos + + + + true + watershedSegmentationNPP.cpp + + NPP + + + 1:CUDA Basic Topics + 1:Performance Strategies + 2:Image Processing + 2:Computer Vision + + sm35 + sm37 + sm50 + sm52 + sm60 + sm61 + sm70 + sm72 + sm75 + sm80 + sm86 + + + x86_64 + linux + + + windows7 + + + arm + + + ppc64le + linux + + + + all + + Watershed Segmentation NPP + exe + diff --git a/Samples/watershedSegmentationNPP/README.md b/Samples/watershedSegmentationNPP/README.md new file mode 100644 index 00000000..6b6ec5dc --- /dev/null +++ b/Samples/watershedSegmentationNPP/README.md @@ -0,0 +1,71 @@ +# watershedSegmentationNPP - Watershed Segmentation NPP + +## Description + +An NPP CUDA Sample that demonstrates how to use the NPP watershed segmentation function. + +## Key Concepts + +Performance Strategies, Image Processing, NPP Library + +## Supported SM Architectures + +[SM 3.5 ](https://developer.nvidia.com/cuda-gpus) [SM 3.7 ](https://developer.nvidia.com/cuda-gpus) [SM 5.0 ](https://developer.nvidia.com/cuda-gpus) [SM 5.2 ](https://developer.nvidia.com/cuda-gpus) [SM 6.0 ](https://developer.nvidia.com/cuda-gpus) [SM 6.1 ](https://developer.nvidia.com/cuda-gpus) [SM 7.0 ](https://developer.nvidia.com/cuda-gpus) [SM 7.2 ](https://developer.nvidia.com/cuda-gpus) [SM 7.5 ](https://developer.nvidia.com/cuda-gpus) [SM 8.0 ](https://developer.nvidia.com/cuda-gpus) [SM 8.6 ](https://developer.nvidia.com/cuda-gpus) + +## Supported OSes + +Linux, Windows + +## Supported CPU Architecture + +x86_64, ppc64le, armv7l + +## CUDA APIs involved + +## Dependencies needed to build/run +[NPP](../../README.md#npp) + +## Prerequisites + +Download and install the [CUDA Toolkit 11.1](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Make sure the dependencies mentioned in [Dependencies]() section above are installed. + +## Build and Run + +### Windows +The Windows samples are built using the Visual Studio IDE. Solution files (.sln) are provided for each supported version of Visual Studio, using the format: +``` +*_vs.sln - for Visual Studio +``` +Each individual sample has its own set of solution files in its directory: + +To build/examine all the samples at once, the complete solution files should be used. To build/examine a single sample, the individual sample solution files should be used. +> **Note:** Some samples require that the Microsoft DirectX SDK (June 2010 or newer) be installed and that the VC++ directory paths are properly set up (**Tools > Options...**). Check DirectX Dependencies section for details." + +### Linux +The Linux samples are built using makefiles. To use the makefiles, change the current directory to the sample directory you wish to build, and run make: +``` +$ cd +$ make +``` +The samples makefiles can take advantage of certain options: +* **TARGET_ARCH=** - cross-compile targeting a specific architecture. Allowed architectures are x86_64, ppc64le, armv7l. + By default, TARGET_ARCH is set to HOST_ARCH. On a x86_64 machine, not setting TARGET_ARCH is the equivalent of setting TARGET_ARCH=x86_64.
+`$ make TARGET_ARCH=x86_64`
`$ make TARGET_ARCH=ppc64le`
`$ make TARGET_ARCH=armv7l`
+ See [here](http://docs.nvidia.com/cuda/cuda-samples/index.html#cross-samples) for more details. +* **dbg=1** - build with debug symbols + ``` + $ make dbg=1 + ``` +* **SMS="A B ..."** - override the SM architectures for which the sample will be built, where `"A B ..."` is a space-delimited list of SM architectures. For example, to generate SASS for SM 50 and SM 60, use `SMS="50 60"`. + ``` + $ make SMS="50 60" + ``` + +* **HOST_COMPILER=** - override the default g++ host compiler. See the [Linux Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements) for a list of supported host compilers. +``` + $ make HOST_COMPILER=g++ +``` + +## References (for more details) + diff --git a/Samples/watershedSegmentationNPP/watershedSegmentationNPP.cpp b/Samples/watershedSegmentationNPP/watershedSegmentationNPP.cpp new file mode 100644 index 00000000..1f914e7c --- /dev/null +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP.cpp @@ -0,0 +1,544 @@ +/* Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) +# define WINDOWS_LEAN_AND_MEAN +# define NOMINMAX +# include +# pragma warning(disable:4819) +#endif + +#include +#include +#include + +#include +#include + +// Note: If you want to view these images we HIGHLY recommend using imagej which is free on the internet and works on most platforms +// because it is one of the few image viewing apps that can display 32 bit integer image data. While it normalizes the data +// to floating point values for viewing it still provides a good representation of the relative brightness of each label value. +// +// The files read and written by this sample app use RAW image format, that is, only the image data itself exists in the files +// with no image format information. When viewing RAW files with imagej just enter the image size and bit depth values that +// are part of the file name when requested by imagej. +// + +#define NUMBER_OF_IMAGES 3 + + Npp8u * pInputImageDev[NUMBER_OF_IMAGES]; + Npp8u * pInputImageHost[NUMBER_OF_IMAGES]; + Npp8u * pSegmentationScratchBufferDev[NUMBER_OF_IMAGES]; + Npp8u * pSegmentsDev[NUMBER_OF_IMAGES]; + Npp8u * pSegmentsHost[NUMBER_OF_IMAGES]; + Npp32u * pSegmentLabelsOutputBufferDev[NUMBER_OF_IMAGES]; + Npp32u * pSegmentLabelsOutputBufferHost[NUMBER_OF_IMAGES]; + +void tearDown() // Clean up and tear down +{ + for (int j = 0; j < NUMBER_OF_IMAGES; j++) + { + if (pSegmentLabelsOutputBufferDev[j] != 0) + cudaFree(pSegmentLabelsOutputBufferDev[j]); + if (pSegmentationScratchBufferDev[j] != 0) + cudaFree(pSegmentationScratchBufferDev[j]); + if (pSegmentsDev[j] != 0) + cudaFree(pSegmentsDev[j]); + if (pInputImageDev[j] != 0) + cudaFree(pInputImageDev[j]); + if (pSegmentLabelsOutputBufferHost[j] != 0) + free(pSegmentLabelsOutputBufferHost[j]); + if (pSegmentsHost[j] != 0) + free(pSegmentsHost[j]); + if (pInputImageHost[j] != 0) + free(pInputImageHost[j]); + } +} + +const std::string& SegmentsOutputFile0 = "Lena_Segments_8Way_512x512_8u.raw"; +const std::string& SegmentsOutputFile1 = "CT_skull_Segments_8Way_512x512_8u.raw"; +const std::string& SegmentsOutputFile2 = "Rocks_Segments_8Way_512x512_8u.raw"; + +const std::string& SegmentBoundariesOutputFile0 = "Lena_SegmentBoundaries_8Way_512x512_8u.raw"; +const std::string& SegmentBoundariesOutputFile1 = "CT_skull_SegmentBoundaries_8Way_512x512_8u.raw"; +const std::string& SegmentBoundariesOutputFile2 = "Rocks_SegmentBoundaries_8Way_512x512_8u.raw"; + +const std::string& SegmentsWithContrastingBoundariesOutputFile0 = "Lena_SegmentsWithContrastingBoundaries_8Way_512x512_8u.raw"; +const std::string& SegmentsWithContrastingBoundariesOutputFile1 = "CT_skull_SegmentsWithContrastingBoundaries_8Way_512x512_8u.raw"; +const std::string& SegmentsWithContrastingBoundariesOutputFile2 = "Rocks_SegmentsWithContrastingBoundaries_8Way_512x512_8u.raw"; + +const std::string& CompressedSegmentLabelsOutputFile0 = "Lena_CompressedSegmentLabels_8Way_512x512_32u.raw"; +const std::string& CompressedSegmentLabelsOutputFile1 = "CT_skull_CompressedSegmentLabels_8Way_512x512_32u.raw"; +const std::string& CompressedSegmentLabelsOutputFile2 = "Rocks_CompressedSegmentLabels_8Way_512x512_32u.raw"; + +int +loadRaw8BitImage(Npp8u * pImage, int nWidth, int nHeight, int nImage) +{ + FILE * bmpFile; + size_t nSize; + + if (nImage == 0) + { + if (nWidth != 512 || nHeight != 512) + return -1; + const char* fileName = "Lena_512x512_8u_Gray.raw"; + const char* InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) + { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } + else if (nImage == 1) + { + if (nWidth != 512 || nHeight != 512) + return -1; + const char* fileName = "CT_skull_512x512_8u_Gray.raw"; + const char* InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) + { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } + else if (nImage == 2) + { + if (nWidth != 512 || nHeight != 512) + return -1; + const char* fileName = "Rocks_512x512_8u_Gray.raw"; + const char* InputFile = sdkFindFilePath(fileName, "."); + if (InputFile == NULL) + { + printf("%s file not found.. exiting\n", fileName); + exit(EXIT_WAIVED); + } + + bmpFile = fopen(InputFile, "rb"); + } + else + { + printf ("Input file load failed.\n"); + return -1; + } + + if (bmpFile == NULL) + { + printf ("Input file load failed.\n"); + return -1; + } + nSize = fread(pImage, 1, nWidth * nHeight, bmpFile); + if (nSize < nWidth * nHeight) + { + printf ("Input file load failed.\n"); + fclose(bmpFile); + return -1; + } + fclose(bmpFile); + + printf ("Input file load succeeded.\n"); + + return 0; +} + +int +main( int argc, char** argv ) +{ + + int aSegmentationScratchBufferSize[NUMBER_OF_IMAGES]; + int aSegmentLabelsOutputBufferSize[NUMBER_OF_IMAGES]; + + cudaError_t cudaError; + NppStatus nppStatus; + NppStreamContext nppStreamCtx; + FILE * bmpFile; + NppiNorm eNorm = nppiNormInf; // default to 8 way neighbor search + + for (int j = 0; j < NUMBER_OF_IMAGES; j++) + { + pInputImageDev[j] = 0; + pInputImageHost[j] = 0; + pSegmentationScratchBufferDev[j] = 0; + pSegmentLabelsOutputBufferDev[j] = 0; + pSegmentLabelsOutputBufferHost[j] = 0; + pSegmentsDev[j] = 0; + pSegmentsHost[j] = 0; + } + + nppStreamCtx.hStream = 0; // The NULL stream by default, set this to whatever your stream ID is if not the NULL stream. + + cudaError = cudaGetDevice(&nppStreamCtx.nCudaDeviceId); + if (cudaError != cudaSuccess) + { + printf("CUDA error: no devices supporting CUDA.\n"); + return NPP_NOT_SUFFICIENT_COMPUTE_CAPABILITY; + } + + const NppLibraryVersion *libVer = nppGetLibVersion(); + + printf("NPP Library Version %d.%d.%d\n", libVer->major, libVer->minor, libVer->build); + + int driverVersion, runtimeVersion; + cudaDriverGetVersion(&driverVersion); + cudaRuntimeGetVersion(&runtimeVersion); + + printf("CUDA Driver Version: %d.%d\n", driverVersion/1000, (driverVersion%100)/10); + printf("CUDA Runtime Version: %d.%d\n\n", runtimeVersion/1000, (runtimeVersion%100)/10); + + cudaError = cudaDeviceGetAttribute(&nppStreamCtx.nCudaDevAttrComputeCapabilityMajor, + cudaDevAttrComputeCapabilityMajor, + nppStreamCtx.nCudaDeviceId); + if (cudaError != cudaSuccess) + return NPP_NOT_SUFFICIENT_COMPUTE_CAPABILITY; + + cudaError = cudaDeviceGetAttribute(&nppStreamCtx.nCudaDevAttrComputeCapabilityMinor, + cudaDevAttrComputeCapabilityMinor, + nppStreamCtx.nCudaDeviceId); + if (cudaError != cudaSuccess) + return NPP_NOT_SUFFICIENT_COMPUTE_CAPABILITY; + + cudaError = cudaStreamGetFlags(nppStreamCtx.hStream, &nppStreamCtx.nStreamFlags); + + cudaDeviceProp oDeviceProperties; + + cudaError = cudaGetDeviceProperties(&oDeviceProperties, nppStreamCtx.nCudaDeviceId); + + nppStreamCtx.nMultiProcessorCount = oDeviceProperties.multiProcessorCount; + nppStreamCtx.nMaxThreadsPerMultiProcessor = oDeviceProperties.maxThreadsPerMultiProcessor; + nppStreamCtx.nMaxThreadsPerBlock = oDeviceProperties.maxThreadsPerBlock; + nppStreamCtx.nSharedMemPerBlock = oDeviceProperties.sharedMemPerBlock; + + NppiSize oSizeROI[NUMBER_OF_IMAGES]; + + for (int nImage = 0; nImage < NUMBER_OF_IMAGES; nImage++) + { + if (nImage == 0) + { + oSizeROI[nImage].width = 512; + oSizeROI[nImage].height = 512; + } + else if (nImage == 1) + { + oSizeROI[nImage].width = 512; + oSizeROI[nImage].height = 512; + } + else if (nImage == 2) + { + oSizeROI[nImage].width = 512; + oSizeROI[nImage].height = 512; + } + + // cudaMallocPitch OR cudaMalloc can be used here, in this sample case width == pitch. + + cudaError = cudaMalloc ((void**)&pInputImageDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u) * oSizeROI[nImage].height); + if (cudaError != cudaSuccess) + return NPP_MEMORY_ALLOCATION_ERR; + + cudaError = cudaMalloc ((void**)&pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u) * oSizeROI[nImage].height); + if (cudaError != cudaSuccess) + return NPP_MEMORY_ALLOCATION_ERR; + + pInputImageHost[nImage] = reinterpret_cast(malloc(oSizeROI[nImage].width * sizeof(Npp8u) * oSizeROI[nImage].height)); + pSegmentsHost[nImage] = reinterpret_cast(malloc(oSizeROI[nImage].width * sizeof(Npp32u) * oSizeROI[nImage].height)); + + nppStatus = nppiSegmentWatershedGetBufferSize_8u_C1R(oSizeROI[nImage], &aSegmentationScratchBufferSize[nImage]); + + cudaError = cudaMalloc ((void **)&pSegmentationScratchBufferDev[nImage], aSegmentationScratchBufferSize[nImage]); + if (cudaError != cudaSuccess) + return NPP_MEMORY_ALLOCATION_ERR; + + // Output label marker buffers are only needed if you want to same the generated segmentation labels, they ARE compatible with NPP UF generated labels. + // Requesting segmentation output may slightly decrease segmentation function performance. Regardless of the pitch of the segmentation image + // the segment labels output buffer will have a pitch of oSizeROI[nImage].width * sizeof(Npp32u). + + aSegmentLabelsOutputBufferSize[nImage] = oSizeROI[nImage].width * sizeof(Npp32u) * oSizeROI[nImage].height; + + cudaError = cudaMalloc ((void **)&pSegmentLabelsOutputBufferDev[nImage], aSegmentLabelsOutputBufferSize[nImage]); + if (cudaError != cudaSuccess) + return NPP_MEMORY_ALLOCATION_ERR; + + pSegmentLabelsOutputBufferHost[nImage] = reinterpret_cast(malloc(oSizeROI[nImage].width * sizeof(Npp32u) * oSizeROI[nImage].height)); + + if (loadRaw8BitImage(pInputImageHost[nImage], oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, nImage) == 0) + { + cudaError = cudaMemcpy2DAsync(pInputImageDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), pInputImageHost[nImage], + oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + + // Make a second copy of the unaltered input image since this function works in place and we want to reuse the input image multiple times. + cudaError = cudaMemcpy2DAsync(pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), pInputImageHost[nImage], + oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + + nppStatus = nppiSegmentWatershed_8u_C1IR_Ctx(pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + pSegmentLabelsOutputBufferDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), eNorm, + NPP_WATERSHED_SEGMENT_BOUNDARIES_NONE, oSizeROI[nImage], pSegmentationScratchBufferDev[nImage], nppStreamCtx); + + if (nppStatus != NPP_SUCCESS) + { + if (nImage == 0) + printf("Lena segments 8Way 512x512 8u failed.\n"); + else if (nImage == 1) + printf("CT skull segments 8Way 512x512 8u failed.\n"); + else if (nImage == 2) + printf("Rocks segments 8Way 512x512 8u failed.\n"); + tearDown(); + return -1; + } + + // Now compress the label markers output to make them easier to view. + int nCompressedLabelsScratchBufferSize; + Npp8u * pCompressedLabelsScratchBufferDev; + + nppStatus = nppiCompressMarkerLabelsGetBufferSize_32u_C1R(oSizeROI[nImage].width * oSizeROI[nImage].height, &nCompressedLabelsScratchBufferSize); + if (nppStatus != NPP_NO_ERROR) + return nppStatus; + + cudaError = cudaMalloc ((void **)&pCompressedLabelsScratchBufferDev, nCompressedLabelsScratchBufferSize); + if (cudaError != cudaSuccess) + return NPP_MEMORY_ALLOCATION_ERR; + + int nCompressedLabelCount = 0; + + nppStatus = nppiCompressMarkerLabelsUF_32u_C1IR(pSegmentLabelsOutputBufferDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage], + oSizeROI[nImage].width * oSizeROI[nImage].height, &nCompressedLabelCount, + pCompressedLabelsScratchBufferDev); + + if (nppStatus != NPP_SUCCESS) + { + if (nImage == 0) + printf("Lena_CompressedLabelMarkersUF_8Way_512x512_32u failed.\n"); + else if (nImage == 1) + printf("CT_Skull_CompressedLabelMarkersUF_8Way_512x512_32u failed.\n"); + else if (nImage == 2) + printf("Rocks_CompressedLabelMarkersUF_8Way_512x512_32u failed.\n"); + tearDown(); + return -1; + } + + // Copy segmented image to host + cudaError = cudaMemcpy2DAsync(pSegmentsHost[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + + // Copy segment labels image to host + cudaError = cudaMemcpy2DAsync(pSegmentLabelsOutputBufferHost[nImage], oSizeROI[nImage].width * sizeof(Npp32u), + pSegmentLabelsOutputBufferDev[nImage], oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage].width * sizeof(Npp32u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + + // Wait host image read backs to complete, not necessary if no need to synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != cudaSuccess) + { + printf ("Post segmentation cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + // Free single image scratch buffer + cudaFree(pCompressedLabelsScratchBufferDev); + + // Save default segments file. + if (nImage == 0) + bmpFile = fopen(SegmentsOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(SegmentsOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(SegmentsOutputFile2.c_str(), "wb"); + + if (bmpFile == NULL) + return -1; + size_t nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) + { + nSize += fwrite(&pSegmentsHost[nImage][j * oSizeROI[nImage].width], sizeof(Npp8u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + + if (nImage == 0) + printf("Lena_Segments_8Way_512x512_8u succeeded.\n"); + else if (nImage == 1) + printf("CT_Skull_Segments_8Way_512x512_8u succeeded.\n"); + else if (nImage == 2) + printf("Rocks_Segments_8Way_512x512_8u succeeded.\n"); + + // Save segment labels file. + if (nImage == 0) + bmpFile = fopen(CompressedSegmentLabelsOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(CompressedSegmentLabelsOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(CompressedSegmentLabelsOutputFile2.c_str(), "wb"); + + if (bmpFile == NULL) + return -1; + nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) + { + nSize += fwrite(&pSegmentLabelsOutputBufferHost[nImage][j * oSizeROI[nImage].width], sizeof(Npp32u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + + if (nImage == 0) + printf("Lena_CompressedSegmentLabels_8Way_512x512_32u succeeded.\n"); + else if (nImage == 1) + printf("CT_Skull_CompressedSegmentLabels_8Way_512x512_32u succeeded.\n"); + else if (nImage == 2) + printf("Rocks_CompressedSegmentLabels_8Way_512x512_32u succeeded.\n"); + + // Now generate a segment boundaries only output image + + // Make a second copy of the unaltered input image since this function works in place and we want to reuse the input image multiple times. + cudaError = cudaMemcpy2DAsync(pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), pInputImageHost[nImage], + oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + + // We already generated segment labels images to skip that this time + nppStatus = nppiSegmentWatershed_8u_C1IR_Ctx(pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + 0, 0, eNorm, + NPP_WATERSHED_SEGMENT_BOUNDARIES_ONLY, oSizeROI[nImage], pSegmentationScratchBufferDev[nImage], nppStreamCtx); + + if (nppStatus != NPP_SUCCESS) + { + if (nImage == 0) + printf("Lena segment boundaries 8Way 512x512 8u failed.\n"); + else if (nImage == 1) + printf("CT skull segment boundaries 8Way 512x512 8u failed.\n"); + else if (nImage == 2) + printf("Rocks segment boundaries 8Way 512x512 8u failed.\n"); + tearDown(); + return -1; + } + + // Copy segment boundaries image to host + cudaError = cudaMemcpy2DAsync(pSegmentsHost[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + + // Wait host image read backs to complete, not necessary if no need to synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != cudaSuccess) + { + printf ("Post segmentation cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + if (nImage == 0) + bmpFile = fopen(SegmentBoundariesOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(SegmentBoundariesOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(SegmentBoundariesOutputFile2.c_str(), "wb"); + + if (bmpFile == NULL) + return -1; + nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) + { + nSize += fwrite(&pSegmentsHost[nImage][j * oSizeROI[nImage].width], sizeof(Npp8u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + + if (nImage == 0) + printf("Lena_SegmentBoundaries_8Way_512x512_8u succeeded.\n"); + else if (nImage == 1) + printf("CT_Skull_SegmentBoundaries_8Way_512x512_8u succeeded.\n"); + else if (nImage == 2) + printf("Rocks_SegmentBoundaries_8Way_512x512_8u succeeded.\n"); + + // Now generate a segmented with contrasting boundaries output image + + // Make a second copy of the unaltered input image since this function works in place and we want to reuse the input image multiple times. + cudaError = cudaMemcpy2DAsync(pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), pInputImageHost[nImage], + oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyHostToDevice, nppStreamCtx.hStream); + + // We already generated segment labels images to skip that this time + nppStatus = nppiSegmentWatershed_8u_C1IR_Ctx(pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + 0, 0, eNorm, + NPP_WATERSHED_SEGMENT_BOUNDARIES_CONTRAST, oSizeROI[nImage], pSegmentationScratchBufferDev[nImage], nppStreamCtx); + + if (nppStatus != NPP_SUCCESS) + { + if (nImage == 0) + printf("Lena segments with contrasting boundaries 8Way 512x512 8u failed.\n"); + else if (nImage == 1) + printf("CT skull segments with contrasting boundaries 8Way 512x512 8u failed.\n"); + else if (nImage == 2) + printf("Rocks segments with contrasting boundaries 8Way 512x512 8u failed.\n"); + tearDown(); + return -1; + } + + // Copy segment boundaries image to host + cudaError = cudaMemcpy2DAsync(pSegmentsHost[nImage], oSizeROI[nImage].width * sizeof(Npp8u), + pSegmentsDev[nImage], oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].width * sizeof(Npp8u), oSizeROI[nImage].height, + cudaMemcpyDeviceToHost, nppStreamCtx.hStream); + + // Wait host image read backs to complete, not necessary if no need to synchronize + if ((cudaError = cudaStreamSynchronize(nppStreamCtx.hStream)) != cudaSuccess) + { + printf ("Post segmentation cudaStreamSynchronize failed\n"); + tearDown(); + return -1; + } + + if (nImage == 0) + bmpFile = fopen(SegmentsWithContrastingBoundariesOutputFile0.c_str(), "wb"); + else if (nImage == 1) + bmpFile = fopen(SegmentsWithContrastingBoundariesOutputFile1.c_str(), "wb"); + else if (nImage == 2) + bmpFile = fopen(SegmentsWithContrastingBoundariesOutputFile2.c_str(), "wb"); + + if (bmpFile == NULL) + return -1; + nSize = 0; + for (int j = 0; j < oSizeROI[nImage].height; j++) + { + nSize += fwrite(&pSegmentsHost[nImage][j * oSizeROI[nImage].width], sizeof(Npp8u), oSizeROI[nImage].width, bmpFile); + } + fclose(bmpFile); + + if (nImage == 0) + printf("Lena_SegmentsWithContrastingBoundaries_8Way_512x512_8u succeeded.\n"); + else if (nImage == 1) + printf("CT_Skull_SegmentsWithContrastingBoundaries_8Way_512x512_8u succeeded.\n"); + else if (nImage == 2) + printf("Rocks_SegmentsWithContrastingBoundaries_8Way_512x512_8u succeeded.\n"); + } + } + + tearDown(); + + return 0; +} + + + diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2013.sln b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2015.sln similarity index 72% rename from Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2013.sln rename to Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2015.sln index 40c1680c..f3961c87 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2013.sln +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2015.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MersenneTwisterGP11213", "MersenneTwisterGP11213_vs2013.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +Microsoft Visual Studio Solution File, Format Version 14.00 +# Visual Studio 2015 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "watershedSegmentationNPP", "watershedSegmentationNPP_vs2015.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2012.vcxproj b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2015.vcxproj similarity index 85% rename from Samples/simpleCUBLAS/simpleCUBLAS_vs2012.vcxproj rename to Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2015.vcxproj index 99a4c693..d7ae203a 100644 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2012.vcxproj +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2015.vcxproj @@ -15,15 +15,15 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCUBLAS_vs2012 - simpleCUBLAS + watershedSegmentationNPP_vs2015 + watershedSegmentationNPP Application MultiByte - v110 + v140 true @@ -33,7 +33,7 @@ - + @@ -57,9 +57,9 @@ Console - cublas.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/simpleCUBLAS.exe + $(OutDir)/watershedSegmentationNPP.exe compute_35,compute_35; @@ -97,11 +97,11 @@ - + - + diff --git a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2012.sln b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2017.sln similarity index 78% rename from Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2012.sln rename to Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2017.sln index 0611332a..93f1641a 100644 --- a/Samples/MersenneTwisterGP11213/MersenneTwisterGP11213_vs2012.sln +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2017.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MersenneTwisterGP11213", "MersenneTwisterGP11213_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2017 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "watershedSegmentationNPP", "watershedSegmentationNPP_vs2017.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/boxFilterNPP/boxFilterNPP_vs2012.vcxproj b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2017.vcxproj similarity index 79% rename from Samples/boxFilterNPP/boxFilterNPP_vs2012.vcxproj rename to Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2017.vcxproj index 1bf4eb76..e4dbfbe4 100644 --- a/Samples/boxFilterNPP/boxFilterNPP_vs2012.vcxproj +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2017.vcxproj @@ -15,15 +15,20 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - boxFilterNPP_vs2012 - boxFilterNPP + watershedSegmentationNPP_vs2017 + watershedSegmentationNPP + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + $(LatestTargetPlatformVersion) + $(WindowsTargetPlatformVersion) + Application MultiByte - v110 + v141 true @@ -33,7 +38,7 @@ - + @@ -53,13 +58,13 @@ Level3 WIN32;_MBCS;%(PreprocessorDefinitions) - ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir);../../Common/UtilNPP;../../Common/FreeImage/include; + ./;$(CudaToolkitDir)/include;../../Common;$(CudaToolkitIncludeDir); Console nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(CudaToolkitLibDir);../../Common/FreeImage/lib/x64;../../Common/FreeImage/lib/$(TARGET_OS);../../Common/FreeImage/lib/$(TARGET_OS)/$(TARGET_ARCH); - $(OutDir)/boxFilterNPP.exe + $(CudaToolkitLibDir); + $(OutDir)/watershedSegmentationNPP.exe compute_35,compute_35; @@ -96,22 +101,12 @@ 64 - - - - - - - - freeimage.lib;%(AdditionalDependencies) - - - + - + diff --git a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2012.sln b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2019.sln similarity index 78% rename from Samples/NV12toBGRandResize/NV12toBGRandResize_vs2012.sln rename to Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2019.sln index e92ab30e..3f7dcb23 100644 --- a/Samples/NV12toBGRandResize/NV12toBGRandResize_vs2012.sln +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2019.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NV12toBGRandResize", "NV12toBGRandResize_vs2012.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" +# Visual Studio 2019 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "watershedSegmentationNPP", "watershedSegmentationNPP_vs2019.vcxproj", "{997E0757-EA74-4A4E-A0FC-47D8C8831A15}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Samples/simpleCUBLAS/simpleCUBLAS_vs2013.vcxproj b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2019.vcxproj similarity index 84% rename from Samples/simpleCUBLAS/simpleCUBLAS_vs2013.vcxproj rename to Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2019.vcxproj index 015649a6..29cb1892 100644 --- a/Samples/simpleCUBLAS/simpleCUBLAS_vs2013.vcxproj +++ b/Samples/watershedSegmentationNPP/watershedSegmentationNPP_vs2019.vcxproj @@ -15,15 +15,16 @@ {997E0757-EA74-4A4E-A0FC-47D8C8831A15} - simpleCUBLAS_vs2013 - simpleCUBLAS + watershedSegmentationNPP_vs2019 + watershedSegmentationNPP Application MultiByte - v120 + v142 + 10.0 true @@ -33,7 +34,7 @@ - + @@ -57,9 +58,9 @@ Console - cublas.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + nppisu.lib;nppif.lib;nppc.lib;cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) $(CudaToolkitLibDir); - $(OutDir)/simpleCUBLAS.exe + $(OutDir)/watershedSegmentationNPP.exe compute_35,compute_35; @@ -97,11 +98,11 @@ - + - +