From 7757d5a612cc22642302e454eaed87d53538b452 Mon Sep 17 00:00:00 2001 From: Sergii Ivashchenko Date: Sat, 4 Jul 2020 13:06:13 +0100 Subject: [PATCH 1/4] Added metadata integration tests --- .../Integration/Model/AddMetadataTest.php | 150 ++++++++++++++++++ .../Integration/Model/ExtractMetadataTest.php | 103 ++++++++++++ .../Test/_files/empty_xmp_image.jpeg | Bin 0 -> 19336 bytes MediaGalleryMetadata/Test/_files/exiftool.gif | Bin 0 -> 12704 bytes .../Test/_files/iptc_only.jpeg | Bin 0 -> 19884 bytes .../Test/_files/macos-photos.jpeg | Bin 0 -> 22850 bytes .../Test/_files/macos-preview.png | Bin 0 -> 57535 bytes 7 files changed, 253 insertions(+) create mode 100644 MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php create mode 100644 MediaGalleryMetadata/Test/Integration/Model/ExtractMetadataTest.php create mode 100644 MediaGalleryMetadata/Test/_files/empty_xmp_image.jpeg create mode 100644 MediaGalleryMetadata/Test/_files/exiftool.gif create mode 100644 MediaGalleryMetadata/Test/_files/iptc_only.jpeg create mode 100644 MediaGalleryMetadata/Test/_files/macos-photos.jpeg create mode 100644 MediaGalleryMetadata/Test/_files/macos-preview.png diff --git a/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php b/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php new file mode 100644 index 000000000000..2c677398df0a --- /dev/null +++ b/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php @@ -0,0 +1,150 @@ +addMetadata = Bootstrap::getObjectManager()->get(AddMetadataInterface::class); + $this->varDirectory = Bootstrap::getObjectManager()->get(Filesystem::class) + ->getDirectoryWrite(DirectoryList::VAR_DIR); + $this->driver = Bootstrap::getObjectManager()->get(DriverInterface::class); + $this->metadataFactory = Bootstrap::getObjectManager()->get(MetadataInterfaceFactory::class); + $this->extractMetadata = Bootstrap::getObjectManager()->get(ExtractMetadataInterface::class); + } + + /** + * Test for ExtractMetadata::execute + * + * @dataProvider filesProvider + * @param string $fileName + * @param string $title + * @param string $description + * @param array $keywords + * @throws LocalizedException + */ + public function testExecute( + string $fileName, + string $title, + string $description, + array $keywords + ): void { + $path = realpath(__DIR__ . '/../../_files/' . $fileName); + $modifiableFilePath = $this->varDirectory->getAbsolutePath($fileName); + $this->driver->copy( + $path, + $modifiableFilePath + ); + $metadata = $this->metadataFactory->create([ + 'title' => $title, + 'description' => $description, + 'keywords' => $keywords + ]); + + $this->addMetadata->execute($modifiableFilePath, $metadata); + + $updatedMetadata = $this->extractMetadata->execute($modifiableFilePath); + + $this->assertEquals($title, $updatedMetadata->getTitle()); + $this->assertEquals($description, $updatedMetadata->getDescription()); + $this->assertEquals($keywords, $updatedMetadata->getKeywords()); + + $this->driver->deleteFile($modifiableFilePath); + } + + /** + * Data provider for testExecute + * + * @return array[] + */ + public function filesProvider(): array + { + return [ + [ + 'macos-photos.jpeg', + 'Updated Title', + 'Updated Description', + [ + 'magento2', + 'mediagallery' + ] + ], + [ + 'iptc_only.jpeg', + 'Updated Title', + 'Updated Description', + [ + 'magento2', + 'mediagallery' + ] + ], + [ + 'macos-preview.png', + 'Title of the magento image 2', + 'Description of the magento image 2', + [ + 'magento2', + 'community' + ] + ], + [ + 'empty_xmp_image.jpeg', + 'Title of the magento image', + 'Description of the magento image 2', + [ + 'magento2', + 'community' + ] + ] + + ]; + } +} diff --git a/MediaGalleryMetadata/Test/Integration/Model/ExtractMetadataTest.php b/MediaGalleryMetadata/Test/Integration/Model/ExtractMetadataTest.php new file mode 100644 index 000000000000..a813684c7d3b --- /dev/null +++ b/MediaGalleryMetadata/Test/Integration/Model/ExtractMetadataTest.php @@ -0,0 +1,103 @@ +extractMetadata = Bootstrap::getObjectManager()->get(ExtractMetadataInterface::class); + } + + /** + * Test for ExtractMetadata::execute + * + * @dataProvider filesProvider + * @param string $fileName + * @param string $title + * @param string $description + * @param array $keywords + * @throws LocalizedException + */ + public function testExecute( + string $fileName, + string $title, + string $description, + array $keywords + ): void { + $path = realpath(__DIR__ . '/../../_files/' . $fileName); + $metadata = $this->extractMetadata->execute($path); + + $this->assertEquals($title, $metadata->getTitle()); + $this->assertEquals($description, $metadata->getDescription()); + $this->assertEquals($keywords, $metadata->getKeywords()); + } + + /** + * Data provider for testExecute + * + * @return array[] + */ + public function filesProvider(): array + { + return [ + [ + 'macos-photos.jpeg', + 'Title of the magento image', + 'Description of the magento image', + [ + 'magento', + 'mediagallerymetadata' + ] + ], + [ + 'macos-preview.png', + 'Title of the magento image', + 'Description of the magento image', + [ + 'magento', + 'mediagallerymetadata' + ] + ], + [ + 'iptc_only.jpeg', + 'Title of the magento image', + 'Description of the magento image', + [ + 'magento', + 'mediagallerymetadata' + ] + ], + [ + 'exiftool.gif', + 'Title of the magento image', + 'Description of the magento image', + [ + 'magento', + 'mediagallerymetadata' + ] + ] + ]; + } +} diff --git a/MediaGalleryMetadata/Test/_files/empty_xmp_image.jpeg b/MediaGalleryMetadata/Test/_files/empty_xmp_image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cee7bff38a6c62b9bb8d59b682b10567c6c696da GIT binary patch literal 19336 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 Y_Wa?0f${ujYsB!kdAI-N$2$K10F^uY0RR91 literal 0 HcmV?d00001 diff --git a/MediaGalleryMetadata/Test/_files/exiftool.gif b/MediaGalleryMetadata/Test/_files/exiftool.gif new file mode 100644 index 0000000000000000000000000000000000000000..70574d70b609e0a180bbf680447f6e970f484b43 GIT binary patch literal 12704 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 literal 0 HcmV?d00001 diff --git a/MediaGalleryMetadata/Test/_files/iptc_only.jpeg b/MediaGalleryMetadata/Test/_files/iptc_only.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5d7dba35fede7547ce742ea33ce62cc71d5f825f GIT binary patch literal 19884 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 literal 0 HcmV?d00001 diff --git a/MediaGalleryMetadata/Test/_files/macos-photos.jpeg b/MediaGalleryMetadata/Test/_files/macos-photos.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..10c6ca9438ca30cea966d32b6646370865c7bde3 GIT binary patch literal 22850 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 literal 0 HcmV?d00001 diff --git a/MediaGalleryMetadata/Test/_files/macos-preview.png b/MediaGalleryMetadata/Test/_files/macos-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..966520f0d01124eec138a9e29298dbe8e2fea5ab GIT binary patch literal 57535 zcmeFZbx>SO6E}*|j>Z^MHe4&;z+tc0io1UJYIeq33s;nrD@|@r~6ciMS3<#(S1qBoLSiVDqfBf6M z3p9DWKs%{Qi$j%<674>g?M<{~OcfNM=pQQ(p%9=^p_n=IBNUqY}26x<*DA0DqzKocipM+Uj+8pKU-> z$H4tn=8r-Dt&H%fKrsg6ud+s55Y!_L3geNk9~b)@9ggQwQ(WBN<@eBk_wzl>pSWS- z-oyS`hPr#y0rg*q{)@)I%Er(72=>pbn3{x)%%i-Tv7?EJt&_PO1jzd({gHrV57Ksm zg2JJC`asL5QhtYmLJ+o4*Mev%$nzW9*)SV|?Tk#A-E8ci+J_Q!<9{sLm_Q84+-$6E zo%r2^0KakYKbD`!EC90KSRhtH04)V&G6_3J6EZGlPG(ks@N+UUGC@bMDZeUE>JRb9 zZ$bcb2*jSBg~ip?mD!bp+0N07g^iDokA;<;g`J)0k%P&}-496+wA?0Rh|38K7AIHV+ad7^J=wH?UQvt-n^nZYTs`*{) zw^8`rID%kfekW%mOA}+rFVx4n-v&wC(CnYoKP#*)g#Va0f-Fx~fBgOrga68B0=6(T zGqkogaddz34zMA_@V|wAr~b1|L6-jn_yimL_hkNOF0)+YZq5UW2a`p-D_{}b!K5eYu| zHNTp(k&}tBx`mAi(8A0DV&P!|7Jdv`g1>qFf7br(0>5ieGBtHFfjntYa(q-_YiKR} zdo=n($A8rSTZOWPn~Aj+@KJ@W(__>Y=H}x4L-^k{|CW5^Wa21cXY(|*h5wFue+d6t z`ES9$QT^TT{{j1NhJP#h+jxI<{l9GYSLMIuf9sw0-~DFiV*j<@ztsF&Qo_#K&QZ4 zD5mZPeelV3%IuZ%!)KAh;>pyU9a>mgBWO9`Gf6REH;zu6oxI+FY_&$5h^nT?aM*6) zY@(68l25OH7$-VBP`>hQU@jzqy`A-cs{e|c^ ze6ho>e?j>T*c%x{%2-_t>r~o55&n)h6x;^;XJ3BrnVdLT=w{rTA>cpBGL&b;zl;2- zKnnv#hB6sWhg$X@JqH0&kAK(nr-Jr4G!USPa*kc)AEpz<81O>))n*{Lq<}{vRYy|j zKgo}#6!?Fpd~%vcQ<^i=y`tuSi+D~-QF5KIy1>d=zOD-cI2vmZX(aGSK`(L?NJzo` z)Ammzaq#kSpso-;{ZvHm3C}~^DBo@qqVY|MKt|eZD4gpl;(ik>q_kQSB#wd+>O0ok zQRcbEqzO*kzf<^SVBh#Y4Wh^naZIh)8CfV-ENJxZ-6?h&qChvU=4c>lP;{uS$MdTs zyKJ=O5Um+mb)}&%Wcj*Zt7wTT{xN9|P@d4h7retqn4qbj#l}BCJw^X{=8Fa_jgRSr z*Q{)R7KN8g(txJ)bB3~jJER0{pXZ!`fjYU%F@Q|)P22!=@Yts0-=1{9^`wvB<2!T} zxN@l?$n>a|xt=o)RxO6=uKF0?>RW|%fv*8vO3LH`=iZnaInhff#Nf#;*?WnH)?Xd^ z4Ga2X2a`pKBh0_I9<>wfKt@AXb2B=lg)NB#?-R>yx1-QkC^Bl}Hh<1P|L*xPAE+2~ zfdSAK$K6V8_=mZlJpqErr=bW_%0f~F1+fYqbtzrxic>m7gh5Cf1Tj((bCVPSgy=VT zxmw+9xf2#2e8N9rrtbdg^>et7!Qu${H3Bd5c?CYu0rYco*9X>-wv8tvqKu3&xp4x& zJmlO0bD9_lJ2yUjjMzesm4bDMc9?xVt}6Z?sUH>QOKPlpib4 zVD;P?{!*@Qn%HDRl$)U@cXvHIT{sN(;0GPEkhCo(SYvHk5DCP}*nX-&O>+H(n@P)R z6|)?)ww!LAMV;atrBg({vTX9-kx&l!ekNJRXhGhE3=QoDt+V+{?3xNBlc-ms!)5O9 zs#M!5NhQ(-T@K*+aM3zC$q%+EjU4h--%c8>7U2&)2+gQ3%Sl}u0~x^6hLr4=LoV)g z))Gs#rdVneLdkO#lOb_v5P z=}iZpnS)rng`c=T(<37y=N4u^PadSiCs+*h6o38a1Y>yeKkO=4;?>*AA31V_Mt!ALhmgFs-84k1q^^a#3~|V?9Y@P0 z#%*t1@@rTazPcU_?&*=Twv%$LHF>LH)8vX8vvB1Z{hv5&J=3y`?DNXW4cioKLg<4* zppSDU+tOM56TdDvl@*VR%aUd{s=1doev1|vf)2SQ5hVq_rwxCdVGO`q$l1`e8q3j7O%68__CA(@aS&RhgUdn?4D=j9pEw)QqFRO|9l!n$rsSk~1=Us%??GN?z{yv?S%U`%yPGKxW&c`PY^C62-4bFqUz- zW&F4WueJJsr)?Z%*tzPfWZLrL86e@hv9H_F?=FPzrqpV@FYBl!Ep%Cpr=EI3-uLKv z%h^J>%`4Av1&FIwjX>G_B0KG#fu`JbrBZ`+Qk%8%yOZerSuId=A5wZ*gS92N$%a_Z zg63n3=MO&I6oqotlvB&%7M&qz3;Jj)+?yPg>81xGB>?T)f?$9-NV1DUmdKw$JXj?x zMHZw_{nsX;JvN|SEe#}YZbaPM=^7SYLy1mK-SUQGX&M*McM~oa49r<)&uR^jY$lIZ zCF&KxXjq+Yj(KO|sud|sqOos5&5ddCt>N`?jpo8^#dUt<@tk%1Asu0kXG`y}m9sQM zQc`MdVXyK`V&id5D_5avr>C%!RC8zwHx=frO6&dg^TnlE>!Z3awebceRq-rBL)Kme zuI@vJn5z z(fQ$mOma|*usTLERGAu$2V&TCin_swjT%hhqgL}deXor~h1zNFG^;Fne(9RPvz^-J zv>SJBpyI)$29wiAb%W0PrwsbI@Mg_;0&rjwE-R@Vw}0)usJ<;?k>jgmkDLZ)&>>la$2y(}aVB1EDjZg;*jv6ftS87 zuev2^+z)%n6-FJ@BbKEX6q?U}*+6#vK5lnk!N!?!zjD9yF&uS%8K~vo} z$W@zT%XE3B?JqyrylqULql4C3-dttIy;wga40iSX_FQM$Vv&Ai;^^2-9XZC;Mt^xe z5`D*fx6{_b#RX#0U=o$_4kWu<$Qa-}M^#hdtw73OJf0fo+@m@DY&msyygn8^R?;SR zZa=h}oxDicBAsS-{w6uwX6TE_-6lckxTDxX%)3eP9f*<|LD<9vgOoXa2u%Dl?RS3F zC@eo{6|49#TIa9t|6F`1VWi<*0QlvS*a<^Q+ymcX0L$0OG?JOXZ zf^gkliTje+h(NE@g=_pMDGO&2V>ih>nn{?zb{n zo_5y8PX}Z$DfFgVUfGyJ0!O0D>PN3F1$JLm@OWMja``xx0nO!25 zh_6>$o~c$0Lzze)9-keynu#MChuI(?FFpz3$5IBBm=}Z;DixxK9!w31e?y^(d;J^) z#yI_^u4u6%bsSP#6}f(wQJO&@!k5E@(cT@jhx!Bw>Rhlp!-43IrfUSz<6Cmu??61R%qs}7k^L!dWf!^=sM`v z2}l5=`e+#v;u~L3yk4N14fXdM+?+&hw!If_?jD&i`)xDXw|i&fJhA)wU*vFSTBlx3cN~7Q*=UHK@8`fNiKZX@2;;w3m7? zjaGHA5o9Wur>B;08$fIcq%<=jJCH?Z%taxFICza{TxP%EUy&A82@ddD&yne>U)kfV) z$fY?VFoCvO4OI(^uo_ek{Mv7)s6#1E`H4c;P?40}rJ7TmmT-Z@!KJ<|l&wuPdV6s! zidU%MICP9VCotbwPp0RX;d9i)fwkgX(l=Spr25wxZh_6Mvw{+W$_}pq5w^RG3C&U3 z6QPu{So>5S*a*;?JfGB*cAC~Jmzs6B5LCYZb3}=rMidF@`ND?$h>XJZcg|bJ&k|^I z8*fH2=N;od^t6$SdQ*>vTqin2G#^-P<2Qe-3(WDpCusSR8@=E-(nexs#pb|trWOox zWYthz`nXCu+i}Fc*(?gmM5h1zk$I`AR_P=#rRr`p#A~aoQD!C$vaX>zU0{XJBLmF~ zDrW5oyvESvmirOXPLIbIBN&;Rprp1BjG8NrS_#WLbeqW*+|WIYa7t(-(_3LuKveaL zl~&kEq8|K=jDtbB4_+K7sE$#q%s2c|(7rY55Fy(7kC_?#G&51NG!x5uC?Jj!Z$Bg> zsz!E%0~895aa5`M8v6?o3;PQvsi-HXI7v>A(hm!x@51L{UFXIRwF%W4xWWUjfKs<< zl6obsoV_YQ)dA0+NP$)Qd6QxTbl^Dr`K;Tw;Evn(ejQDS@7kt47&~BN6Rbt1^q6zC zrp$U93j47%_I$)Bg`Cg@Wc>{^y*Ju43cTjntLQjrcJ}}SlXXd@@k7?@^DMQ-Uwmrj zo%HkXPq!3lTL^gQ;4((}=Qa3l04YL|p99QtY25o!iwW&JbM$tfUoGCr{C$r?f#Fxg z85^+qX0}Vr<+)5((HQ3)o7TsMS)|15Eot4$?p_Q{94uVF0}JZQ!j`&>FVc^DLSZxM zns$nPQOj?fa3$M7bb;*Buu5^7SCF)!YP!%@03^fGz4wH!fl_gFY@j^8FYHu7D`@?W zSQxL@6R(-Sl*Poz4}PdA3SJ)<8a?9mE@Pqd?Xmh;iPGHM1D|e;S?}Cdc9OEez5Lo@ zU(r3Z%(F|N*7qvZ)VL(U1(>ha#HQ%@9%TtTD-wNHhE=k&iGN~}DQC$j^4a(=n|k|v z^6v>Waaxo1%J|LhF>42+`sy?jPf)?s>LKgm8QZg0x))L^n9Qo8RJ5y8Id*Ak}cmKLLz zB9DPMb124MQwFs=1a@`qkjF(okV*Fh%F_dZRpXekiPP16!}dMQoh$mjMY8d6W<3gYy9v!R+AZuAxsu zlr-b&?o_diUpMXkyp^{HKV`kXx6UD%&i+_{#n2|_+e^f0!gzNu8jcbQ9JOY)gXWH%hE)&S%6X%R)sK$n0q0!#JRQ|avW%zM$x|i>Y=F0 zaDd#o9iVuCypG_5hfY(m;72AIje?odM8V?)~2vOwZzWSnEo6I(+3xsQ~UVwikXMAW>Xh8+5CbFW*q^%z8R=-G7A{Iyft zNS1p&^`_thBvr3Y0JUAk1+T!Y&q(aeYg$S<>?R6Ey*~#q29YQhQE)4i(yMTcUQY~% zfihg6HKThZR5YzuT-dS5rtSRmVHS&b?+o`sy}aDc)FL1SpdiH7UCwCF#Iy?wz3*JR zTBk~md5WmSxICgeS;sh902M;2(JPLDTmw*|iBmk;A;85}kJ;x$Bsbli>HXZzJRI50 z+T_QQ`jQA7#k(naBc6p{v%{0s$wG`A3C6-FAttQb-KDeo=$T#+`psm z%^3?hRilluXMu}AsI-4YA|0w(zJa?SIec0o$BZMrnPqG3lAr3+|E=QFlx@=uK&P<4 zI|?K8K*6R?j$MC_DtO@a?RRx@%5o}Kvmfxj+H{B_tZjy(_m9UK`=0%?v>JJQ(mTh{oDr| zQjx)#&j*4!Ljgnv%pgy%@V7WHI*x(;>w}pFs6OlD_WFn@tCsTRp*aWPi(95&HI2GQ z#FxIGa5}_q|9u<$n6N_Si+zELCVMF>lv>Ct{#Z|C>qb07rw&O_B?=(aT1eHS!CCHF>pZCJZ7#DI0OvSKi$lHi)$Zd(@ zSOJuo$~v?#Pxgmv-1sJ5L22I>)~#$>J53aFS$SM=C_XOKvk|+P`tOU^i1*EVuWcS$ z#-&_rt4}Ubt(*&ORjJ3EM&tzb zoW6+EgG(iX>b~-V31qw(OBPfe>Z^1&XlTk@hLKzb1y*caCeEj)vjUap&L!)uBp9ggqn*nwE;@wKV}WodCFNKRd-1csST7loNCW7Y%>5II;0{rr z3=@qbLko#Hz#SM%h)&bXHuL&5t&Wd;fT5>&$TOVw=89)~EF%jb%Yis&=hh&FXNiP!GCUV)SX%6iZU0Hjs?XOr~u4~fA)-z58 z;D&to0$9C_vALfLba}YYTv(WwwuYFNK(H;a*$%5&n?Ozyr_E_-Q{w^TCRE}KfFf7` zk_+0ZBeREqDD4L{mcjOQ&GJuhiatV-Isz1#Z{JqRn%Y59g*Y`EE?7JY%DlQ-hNJjY zyc`2Hh|`pl+gRgCv~cj%2H7S0vl4q;^PjzvWVik9HGr`V)Xf2u9fj;L16~LPwMpt2 z9zX0{nqkW|U%N&Mpd}RjJ@4IM;7|zxO>$}^x?~BfRQ7%gXa`asLXJ0(5MmK%nqBZ4 zv_gUbodC(wZlBtu#t`IqRjt8bp$1n$BLQL0rsa$IA?t&2Piqs>k}Ojv2AT9aoF4m> zz-3k6a_e^hGaF~Fyy*Ur(!gOi=5G1*ExC~W52PUKhM4@UIa6szay#d;jXA825(|9N zRaIAiqlhwZF*~4B0{uu;7X~gEr^}_ zTx(fxc2?u9%n$*q}-M?Zlf*kn8sK;Iz!YcWdK8f-sd|8 zU|c~Mt<^7y#yQQW2+@{(IG(VgYyX>+S3F z)z{jZ-6fw!ln^2##eZd;QSTl+XA8fyt3uE=q?$5_y;7CLlrwcFkzHo9`?0GQxX}4mu zZ^^+uk%f+b^dn+_UYm(9|Js`;2j^4x=s30kqc^0ABNC)$li$=U{t-%VcSWNKIVWK> zZa&VWF2|XQ+)cTb`Qr}hPWv=rbK0)?`slUnBDMdL-lyKIvjt?Zws+)wwK0|)rsGoQ z$7)20xBg_+LyF|F^3Nyg;z9Rl=1t6}2`n1Dr>#vd5oVNuqeNLgqLec4D(*SQ#7ckJ zaX+TCiS&UOqm^^m@T}*0L_O~CIbqUTIZ-ii<`h_n4CycQZ+gT{(*oA5U+$YogZD34 z77vrX=e`{`&1*O}EbiR7!~$X^wFe0H6it72i$mqO0^H>p9YRsGX>?|GL_2|Um8_j9 z_KGfKuaJQl7#gQkF#Oond>?IhZFMMKn9!A3klW$hu8`Mr3$)1^BlFD3*xicN7-ut8 zJJ-(5rJN=yDBx&7+T#jQt+KBrlDY6|5!^zfEXrdLPwz}?N<<7@^)J|T$gNByz>bzf zI69x?bqHO6sD!Zo-=N}nKj5w>1Y^n+1wDVqT0&Xv&u*1rRocWTHZ_IP>_+d*({S;| zYq+4lQ5l2$__4Jln2E-|!^6k?JhzRf)r1sxhAB5 zicIoQTbreYn|XpmfTO}0LwX9EalH^0wQDmu2r=(imm)475x@`;$>@HW;+D%B!$`xX zNME%s)}ByzYgJ0stzt-!Rcsh#toYWYKljSqIQ1f0Xq>xs52apLuYG}9%2dhOa42ni zgFF@%196*@&skf3IS0mrRiR~g3B3kO+w`)jd5;vwa0RkqX6>w`!#jFV>yVg7Cs&4P zNZrpX1ItAXD~7gPAB2XJ4o2$3*soX4qVWaER>|J zn}Iy*(4TR3IX(dqDE~{s<~E=`hbE45$J3GZt)#8Pd1LThJH~n&GATM{KfiC|U><%5WxN5qO$gO3mLuVr@i`3IMCE2EZ z+3sx$8FVmB9-lC*#O$<%GIy0(i47Abb&0a`G0>c~*h6G^Dw{)qC$I3%Sx46EqZkve zyhe_2bG&xyE9O4lx4LYlUT#H@`GBFKavKyWkqhsPpc#iQ(Zb6Q3QOx(0xRa{(GKgs zEX;5yYc{z`=e?sm8PZ>tM>LZ1Q1~L@WR6uf=PUpSw_$pHZ{A?|_~dLo)J*RUgTWbf z4R#+L-_~pZAS;__&VdY*bR?C9$BmZdia5sd+S8o^ks*iVUE}myP7uHFkN7`t1Q?(B zbwz_F7BqF00=keuXmB*N>p-oBDeM<4Z;J6|WGJ6Isy}L61BzcivUu3PjK~7FtP?EsrluHqZJ9L)d@OD$Rb4gsP91u39q4B{YyxVyi zMIW&UF|VIS?yeR{bgQR*NjW7$?Io+hdv5Y0^QPNzvAq0D;S-yHhUcpa5d)m2Jf#@x zNL(;?{UjBY6y51LCXZ?sV1J^|l>bMUCdoS)A*yO0A*Nv&#mz4bt_KH|_nIPB2A>YZ z)7`!@>(Iq%PY$1>vyGw8aM)yN=ChSmZDyo%*ipF_md`IfSw+-obf!=^lAwhuyXE+b$;OI>UL!(SJ^$6E`bSfGyC zGydZov0%<>M$|qdX;nsj6zA0DpU6WLqhE}WWBOZct38E(ka9cUM%K@mmXafb_26tF z!0?SX#qls`O1E_g0*K5$uO>6y%Ql zXVs?zr*lbLWs5{LX`oGSwKHz_PCA$M^g8pa0T$J68ErH!DSNQEBe~^Z&lx38KYD5& zaen!Z3L`{5NK6xeb`%=IxH7FG8_23gOcOWvo*`RC>UH~4dE4;O{Ziu0yyNFGYfCn# zvg~=)1{Y8Lcn7eJO_X9tEk!VTQDBN%ecN}3cZ^B0CbN$z2pSBe4)~fv#=JntKB^a4 zTqo}1F^%|K72(vk-gMM@GvwuiX0q|Nrpctn99CI|UwnsL(}j+y2DN5nOasEFWMfWe z=U!oln)wM*FHepfPj=H4Nstp4ytD(ZMc#u&zsNA-d9=QjYxw2C^_ydKUcrz}%pK%d zaJHGnoLw~BB)|8fGD3G zJ6LkSJ&Sf%N1mQyEG0Hdfb++3>pgAiX5LwkezDva4FL|7y$jjdFB;+YkDCtYvtM(S;HUg7u3p*9 zm#R)llODFeIc#Q=hf&j7*II|DrU_TZaJrKZav!rPmkh8@pYh2saLLFlWs4c9nX+lw z(_$kV$&}+3_pX??x6MsEXB#q0L+OFI+04oj`>aWm*ie6e>vt@`TlPF86T#c>x z14|D9R~FlX_lxC0eyIBDg^B0a(}(&)*A>bMrdIH$0El8lWEkFMnGlVaWUmeZi!$!Y zL5H3iu3L;9bB0FCG{g^tv!Jk|8!8$Gno-wpP-I8NSTFU}iDM&9_Lm#tvHNDGWpz0vaNP3*h3{3RG8V^rO-%<3AV=Sb{Y6Yvi2?fT!U*CQ++ zP{?us00C=bSHl`hS*76$?zKSp?OG#uPon}M-s)kEERV+wo@H_RhGHC*GB+oq6~Xp= z&|8_P=o zcwydZLtPq@=JE|Gj=LqoYEFvclKFE1$xYcQrn0*9?9}%oUb(b=YgQjy9Bu*Fm5e#GpG}HgR`ccB%hO`?>Qm%2llI9==&(C~MZ&=jJz7Mcz+x0z2DQvFTGRV%HFj@sz?&aD)OjT9W}-SF+LYgF>^)*kbEG6c{%1Us;3#aGOyCEvxNyM? zYxlQCd+@ge&u^pnuH{_$?V8@xO87BriJ-~gX@sf*UVto=0%u1TNBg|BWmq$tzZ@(m zEtF~Mna2ZmDD<>xso;LjHKRKQy;6NCih%mQ-#rITF^ZVO-bwN~Uoy!HOfvrPPaO5* zH1aZhlxT@RoAEhhQm=y(T{Uuk4oqKuU~GxZQ>s;4p_R|BIEg24+Iu{tlHg73vC!-a z8calndn>j^K6&TI8X~du>mA53B9S9Nd#5K0J6H<~p=B&Fnbjuc_6~=RpF>R9 z5d$#%)k>rHUMHEL52}O^Er_PD?xKW*Ae!h!6c;fYOjLcnM6LR=TlH#Y21EFZ&@r(o zi=YHy15p8Ibw*vSX?{E{I5Z;E%kp_ce@uV$gyrj49GY25;sN5#Z)W9uORq$oU>KEN zR$RX{lGSt%YkU^jnQcBM#D6%S6uT9h!8>Fr*Jj(1p5%5l%}G=#cdOS99AT5^)0^L2>yaD1zMx2y2GDtl+MqZ`H}1LvtZ;M|XEzmm^9K zzT8b4&}D%i@cXKx>cDGOqN6}T561eC7c>^m>9Z*!rGd`Qfen%?X#fQUbX;qxbhhTEiN+Jea)Ic2FciS;>v*%Bjk?qbd^UP%)7nqcwCkZm9=_!W zJ(isr%Z2li8a+%gs!CT?d3MZ|cGZc#v18P`!WM=+mfunkGf5aj;%G1WZEOPoS@kYfo%NAKW{U(vhntgMDz_^5W)D6Xcca#Qxb3%O>SET$7)bJR!IyXyMJx{4IMJ7EM9&vCtA;X<)Bz!$V(xj%C-=eOYvDQ zIAqnu#DWN+a)E`L=u9&bY`>+M*M|Fw-ho1g84W4K54y29F6QHo!ZBa$6EG1ldt|o{ z;%-$}a#8q2?Ic_|nNUef%>(fUG_81&(&GxvKgG0FDQh)q2Z}!POWIPxSX$q^A=5=i zP>!iMhF3R!@sY88*1*J7&ndO;xMfIVb|Ec>gQgl@C=rKVt_#-!t1jq3j<)G7HO%~0 zkT0-zy+18mufV~R*3{U!?u(TM8rI5pEo}%#(=Q;7+25PhXk=( za1e=0Fx#UaSw-&=Gwi=VBIu(aDHPdR9wX3HX`@xb|M+vk~pSN0k4D0WW=#Nt08Nkhb{a8F$jl^$0w9EfU{HA$ z5L-v!`x?~K#`-EvG4BPHxy6Y~&~V(B1a-S;mYOXV_p-7dD+UQYj&(y)ZAuz6LPKo3 zt8axpRbo9Wm(I^?mt7WZOn%Utz)+*HEG;c%L|VE*ZBLhIE}ry}8nCJnWxpwOLX%Un z$9otvf6pMzI4h}5>h)c0vDP9!Ii9N3)YP;!qWhhEJSq=2_hU*1GEsTb!9qx+{CHx8 zs0|TLyVSDZ^}+1|XO-(>aigbraA?1a)Ng{t9q}UIGjFU~mnv@p0S-aF80O1R2adEF zXq5Su2Oph0=4p7nO3p?SL)T|-8Od6R(DMi~@gV1MzPs{|8QNaIXw+S3cW}p98vJzR zhoMB5ig0XIW8$J|y-&{bCzlyDES0gzS;btK{b5X%uQtchko3`TTh^o^78shWY_4_m)(%l$!G1G5$nYFnmn(QqJY4_xKJcoXZA zZxLT=kfW1cO(+K@h1^Df=0|N7ts~F3qoG!!4oC zqJI;Dok-t}{BZU8;it>_xHNK5u0zJlEEfa~#~ngK1p5cSmtO5{cUvrrmxqg=A~@M8 zC`??7KE67wom8y3YTXuUp;|)F7)nTbOfn!m_q(3?QC{5V)xf7Gt@l>MnP_y@e|lOYeiTvuFIBLY0VlMv zY*D%GhetD&d+`SX#XWOx`KI30$Jx>4;d1)ZqB4*A!nU<{Hd)MEXn9T_# z>zYSfe!BzP6pf4=)N*0I{%GbQ8!ew0{{2m+0)O+XGDNjl385i&_4kmI>Z!O%0eW(g zFg zu51rzDek-1-W!GnnXWvL(Oz+ikE0QnZz+CyJgfhHN+m`n>YAeI=J3=T!4IzDdV_79 zI_QB1jW-{Nfhbo)e+s3tZYr9B$0N;fd?*;nlEfJsG&-edwXa3qsWB_m%W%Q^a`Qzz zg$FJV+CFd`7OgnE+9?t-G~|Wc&&pnMFvfz!3fGp3T0Wh2^9_T>V&MY2j`OM9!DfS3 z^8A8X7*lyH8I#CHSX}$`Ib-GK^fHF_;Cj|zVyF--Y<>l?3~f!wiA2OAUK2T);Ia|T z%X31wSMTV;X`mRi@+q-Z50V3w(VzK>-1U0)hK{TsyslFTE-f3xa-Xw8Uk{Q!?Q5j< zWzy>Aq(nbRd0CQrZ>)-}_ib5kNgyPYF8&JilvOiGy{!q~jEi zD7)+|#0Lt4*wDTzUhn>av)I6Pa+Ix?U32jO!K`~NYy&LA7hsp z?3C)>8knAXgVtQX<%qM7+S{rRXZiSazr=3QEL$x?6|bCDdebTT5M`#s$w9y zs@AIgwXw5qy>)7^om%pp^Q@j(QMS)bhwAp*Aw6sF_f_rV_PX8|(>@~{MPkJ+7V%NA zs@f|^Lb!&32Hi9YPuVV0}Xs+!s0n_`!QXPjrj{^(H3VT?)h zV_0~fjQY%7S1*B%CF9+W1C=&se!tiXb5sIV`-Zy~7shNLA_ivh7U}GcM9~eIZ{{*x zsMVgV!&#rV{2XD3mA0=9X`3GlLHXai~vu4-(Ie zsss_Rh6eu}bhqW0yzi6tRu9E(@^kA^YyWPlk`L=9_e_8-hpmQQU{*~{?OxMOJwF3q z1Vl9q#Oj|-HM49j(^c<9P|k#9{wPaXGHY-%k$m72X@;7M7m0wPr0dj6AU97z;wIXN z6waoJpu3Be@-#!>pxboXF0MWud+SG^^s%jSI781K`&_jg>K%K`#(?2ZD9`pTpjD^? ziP)bu?)j42tKxZWW7oHdIsnN_GFMA5f7<);F}cClF$ZSEz{9H6_njE<00!YKy{h)W ziqX@tex}3biCVr9+LavV=h;8PY7Xh4{;rb49cB^`96o5}kjAfpJ39Q~Eg2SE& ze(9pA@Cu(2yF3fQ0-JkEj_34aC?~&4P~#1j{SOW#_yft>d2gxo8*?Hs{=RwI_jUi- z$OX35vv`*X(0Bv$L&);&1ZCi79Ei9S@!T{S>p#<2VcUGl|?7t#D1{qUBhI zBDqv~0j{^HfD+*4m3;6XP{o4Gc}x;j`XYO>#5X z`AX>qc@NfSC3sljJr0_Y*wMv3fT5U;wwc1x;{B|E1EwPlVIXR^!+P^()T?o6wj^a3 z!O8$t;V*im?5M)1?$+V0T;$%uQOZbjNd3mj^obRfR#zubte1`mD3U3s_PJ6daV3~d zF$iL#aMGN%wH4JFcLX;4XGS`=fhC7Y3?in+>BqHoBNplNRXs^nx-p<<0w~(P`aeFj zNGuZ9YiAI3Onhi1RH62Qhtt;YK4mK_4?0(Ww)N2YQ7}doNat5XuE(dV`BKnLWG4W5 z0xv(@(b%C&vWEa}Ka8RLdsUp+=m!WA1<7s~Q`^f2nlqxC?o{@iSu>Ga?ODD-{F~rJ zw$btT!1+A+t>{{s8p>47rxz_5U{03Lemahj22R`Ybn^8zj5u?RwtY)Ic_{*iN*4=< zO7ncYT0r<+P<8F+m1|s=>an*Nk+xsHuN@pZyESHag z;fo-AdOY84QOdti?~*=~uyvAfR=c$luAevKn;3?lB zmBiUvrH5w%a73uHnY0cC7Mwo_4Q=}pC+m6oK4CEwmqDu6Gs7CDCm~-Bs2@m z8F!H5lpk+{9F_FZH&0xC((xy6`ihUy7mEG(wSco9 z9}3Z?pDAs#5rQtjpTSHVLd(QiTmm0yb6F|lLX}@~G*9<+IkYsC+g@{1kudm~BND5jz0vn(4{M;(43ONF;%Q#w|v>w0XnI=0HK@O;Ot&(d~@ngNf_1$GftzYF-Ww z9UIj^l2^0tO2F!JXV0%OM3T&L7w|i6=6)m|H*(4ln)615x-*P7ReW~mOoK8Pog z`HR6*NF!>X^;|P#HC}t4rLWdL{9Jt?j!L9N0W$V$CB_7{N_a~Z(e6_v>#lD_dJc{{ zYiYqoBZ^Elo8A9$h)PbHY+<)RjyHyG`kuvhC+~#x<|T8`RrsmFd$g@E_)(@<#X&Mz zfYYf}$$lfpp#S>5^&$TDyp!+VY-tV>7kBvpXI@DuLpa_LbW`~7I-`<`ax4+fX$QR) zVzhKcH+fk+=@0ZEDc)#|F!3!aD1O>HLB+|k#M5z9HenKU(|wuy^Td^+cbK2KDdWiP-$S_|lMRY{hx2W91wb5oSF$ zvg{EUoeFxnQw~h| zY!+VNkUOK8YFn{b$%<2I{vQD1KpnpUokFi7aUgGS6In%k@=|;(sS6G~bhtz;r0P!B z9c#%m4%HotZ+A$jvOVur_NhmDmxFM0mK=|^Ys{gaybr32u|QbkaJ+vIEGF2jU%%cSee_Y=ym|AG zSVg?AfBow|>-pGYkM*#SgA9ln?{mn)?@+tY>C#It_408aUD}kF`?JnE%Rc_`kNY!b z20Q-g5`jb@5l94%Yy@_p0Z)EWXz2&XpiN;+8$P?bg?M41!a_Do8v&7n)Wrta-E>rXH{@rB}#YpvH@V_of=-5n6ao-AWc%?x+O5#k~r&X5(XY{NX= zQ}M}=L-$2V0!loc+fJ~B#;h++m6rlmR1^fYRlH>EDPnBEWj^$wG5T3m9!V#>Clg`DmgwBx@Vq=Kq8O`Bm(=7z#%4*wBxk;&^tMA?SsJRUYDie zFLZ$@K_m->z~}Lu+AB52G-}EPc}%jwLW0MH78UPKTD?1=USV14dRo3f#0(;WHDz9F z9v0$>mgUNIg+xNru#$xvurOv3cO~C5#oBvce%o>Ri`(PKRuE-6>fhMIvwg zn%)10zinUt_xIbxrn^M;wkZM23l#$FUCN=xpevi~i$qOMaS|sF#S!mv>s^C2E~g*0 zW%Vg*f8%=l%0K*}?fl^1nr*sO2_?Tj>zud%4G}H-)|3?@$xLOJ&TizB0)2I#yKv3+ zX2!RW^rX6xo}#VlqV~hFVXvI7AB;+EYQQLacXtE|l0l*0kY#f0D4W%y?;R)SB9JO? zT@QTdf+J6=RWs2V^MV+k0BF5l93QfkfblL}1Y0cxZK}DN;K$aKnqiJv0gGpxcWs!aojkW)Y$_(GbcwC zS~bXB5%eE9rL$R?vdFiNhL*f(^ko&?{GdJj;Sbr)TfSfW@i)*j^#Tz`el-0@XA@m1&9vUA=h{wFf$ z8&mT-AO})N=0$;mBU$@X(3yXQ#JHVwpc6i!9vYPL$~P>Ll3mwO0pj3@-&J-ax~OUW z$-1n>ozA=_-H3i_c0JoG`mjq0b4>;b1A1iexFb)_Lrz(NfOtgWITObn;lrDO-$6P- zsvu86oFIh|D*R78@kBfN=%an@$RLn05$C@9?z1m{`OEgg7rxMEXa@;hd_G8O@0D1} z5as&Rr#>~j4nN9@HTBi6ezjXHqq`e_tghUrO9T>uL?973auFy@;gIQ1YaWEfX@FCe zLRS7;e-l)tuOG25ap z<_q6%cmMIv+timYx5@eYwQI~)b@|QOsMgDLmZjZdYO>&=ixXbIKn&v?g^5HmGrZ70 z`PGprgWlhUQPQwO6OmBzcw zB^cAHlvgn^Kx!zakWiR9nsq=ZQH-B*3iXN?ztRjVrE3U^MK#Wh96)c+j`5*9C&ldw zP$h!Qq@RxZre;31&_&LPEDGtW{Haj%Ko^K4&ttdFm92yjZ%=V6(e~%EYMFxo zLa>5FhQ;nxuX>gH5f%iDJV|@mWtRGnsj1D*D+yY8}EZn?#Eh8%|V6cYLL zr$60Z{Nfk8MUs5cpYSJR`JyVG_M?*SHUS7oSN_obZqM_#bMAE>(T1p&#`ZN2HDVFVe+1 z;>SJmLig}n>N)bRrmtdE&6|AV{$S-F^3f~us9uMjghhDx#k;nvAqOu3~j66yh;Nz{OP=Lr4(m&_s~BANue_w&;R(hU94kL!1YQ#BDiO?@9zG zE=n{nvPk!NSF=ibZH-ZMlbPb{WpI<4NRKG6)n?UwJ+E$Tjfb?)f7)*U%ips5H(q38 z58iHTOnXw>l;X`u_`Gic34!yzafu;!ccDfo>lRqbrckouKWC< zn-$sv`=~iByYui}_Vo|_quucje{A-RFBRR|(orwE%Zpjxl2X{L&X7uH-N9A~T!3$= ztLGhYI2R%rMc`asKv8Tx7k{EY7C@9&$}*9M{m!w-)*;g>7-KAxZr{dydtL3^ud_bbYR zUscD5yVNss$rB84aSnWfaDiJqBXq_;;yh8_qzy+}4jk#pk27WBOc;KgLw=k|6Y-H5 z?>qi`a)DvUh6C|m4K6?uj(@hn0w@>ndV>W4fIFeP5(wI|*7#y_w_whw_~LO8bdEuT)cO zQBsYxWc74Y+N?}>Bf3_};CGr=^D-h+dP-pL_w!0=*HKcCjo-Lc-ZZkK1-oEyYTkQDL&a~yPe}~yI zC#Vd|wK+}8G>TFQ+1^kMiFAY9Hv0PLba{|e+f~v3!*^61#~gEvZP>8EzV)qdc}el3 zqQ+5yuuIH$e&=`keN={2dizqLdE$fcgAN=lqRu;u?l}C=ol5dGuX&A!MTHr9Q>n)F zK~QZd61}1VC%@`F*Hqku$It@&a1l4|@gpwfz{S~b4$%({FM3D$z#o09<=T^KQ7+2K z5#`~U_l$Q87nWoEh(kCo8a(n23_~W3T%_~J`|*QJ@+1!&_vBgq1}Jyv8(Bqp2#fIW zi#P}3T-76<19BtJ$b+!JC%*3pd%SbtO&ro!%MkgISA>Tj_u=n>`UxzNS(Ovvi_Z~< zXJ38Kh({Ryp%droJHqoP|Iml9xDL6<;kkk#N9f0yV}D&>hpc!%(5YJf&?WrQG4kh3 zTn_w0Mpf><=ortViVNwlzy5k(I_G6E16KAat?hD)c3V7 z`tK=j63IOwvzPwZ%lHsl8s9fCimB!WR*^={cxh-dOM|ZLhaa+suDsM9yndstn19%g z>Tj`$QCR@gW!sb0ugzc5s-O8-XZ__>#ju<2h$?(H-g~L-uFkd}Cq2Ny&j-ZSol^hCUniwtBVGyIT;|AA`ckRMn_9n5}R*=XOm`ciA|c*u^fX+wK;D^Cjf_SCE-5q)?J z=wdM}nqx~d}$*oEAPALsBV|M24* zA|3aEMfH8*Jt1A_MShFPcl2gd%U{)NZ?8i?;v*|C;hy}f??9B3G{lRv_;XKrNQ2{^ zBktXEH$M?h+Q=))&*lw~#h?HApSLw@v>cusGFcXG_3G8W(#2Q5`c?a-U-~8c{ont6 zCz9Y8n1t-zWc#FhB^B6T$o1g$6^Q@oCDU#=rdiRxI5=xU-gupT*0HBb$7cp zMId3Eqijz&FY-1ruC=+TJpd7W3&r0`Ivwuct9k{#?<9LwQb7A zSO{Fp`*fuHXlvfKJaChJ{eur!{kp5|*>C-S);RG6QdQPSE!ESOWwN0zc{L?V$T^b) z0z7Xj1{y!sl)UoFE4}f?kA{)Thsv032U$Xg_*6<9hl9KS{`>9r+i!POsCc71(GBy8 zSG>Z*q7tT}j50hK`cv7GC%W-{g^r<5RPNEx1sOp%;zk1(l{T_CBAhsfgA2W?dd52v z1TXXqJh-ox1q{MPn!qI*FYW_7o+FNX{E0)lxR3lp=2Fh&L75ig%suj>+?=EAF3=yld!EjZ6H;bEIGVJfggu(V<%QkQJC!pA%t$ z!QMQdz%j~zOyq^^$Sd^0e?~*JsLv=PWe(jU-*``m%Yi?2T$B-+bm1N-7q|yj$PG;5 z8R1vOqguYIKk;zY@Zz)k-@vc>K2UzJ`PYB_SNomc`5iASR!Qnnk`LMR zonN)dxkqhMv#@J5Svtn`(X?gm7YSpD8^%O-l#U&Dm~6re!b>}Raa9=|Os6JM6NOmM zvTw^LCiNlrY?jG2D$ktCGNu=Lbb6C@@1C)n{_-|E;bmvr#97*leBB9JQ+%y?JRGiR(^z7_;<(7relp_q^x1wIF0YS-S5jAM}WZJsNCg&tvVNLC2cS+Mbk==Rn

6+89w;ngGQGp?<{}7u_IRC4c6qv_x7x3J?1G3d8e^s*dvcT;$6yHw{G>aQ5T>e?*;@G>)U;55fAv@PUElRxjvL{OjRZf81$@h!P?h4lzfKjtW}CNUA)VIC z+t+mGmaL?04Swuvq7eLeL<^s{r?;qrGJEjaOKkdvFW9qQ_YNC-^;@mAe4P|Huo~@e ziH@}NJZ~y>Dkmy_8hMBgepEd8Q_(P<=Blf%vhV)x?>?-GNJCz&RJo>+rUHH4>t5&Y zGZi0>^56)=kM}&nJm4VwfE{^2HrSpKeQ8L*l?IY<8VRmBgENga;Sf#ALmbYKX378o zJNMjkz1yBOKo7M;x37KeYyN&fq8@(uVQ-8m17YAyBh5Y6ymM6o!8HrxGY%Jm8RaEy zG=yA}4)>q``Jdh(gDd{T4~K>2Ks)j!9~`?U@mxOr=}-GEN}*GPbLQYVp&xi~hAdDP z8fpGmU;@|~XPn{7Qtgkv$ixK(LAtpAwO{)+*9F`m3Gtpi_qortcfb4H{yd&2Z{AnF zdnVi=GoBmI5qVKgKFH-QW+F7!w(I;D@d}C;q63cMyFe9pUH{&+B)8_jg?to)={WxBYc@-+i|+#{Bc2 z|GfWEMY+izJtzcdvb?eqSf#aKJ%r`E=pGZIQi}E0ke7L{j ziYx4=e_BiL4IE+P;sf9R{on6CET_f+am1Z}{`pQOd1vF<#XIj24)M?bc_JAPvaj_c z!^MN(CEgzZRK01b85%{&p5JMAT>fF(`NdD!y7?_Os+rpO_hsQ5sgL{2ZDptUN}~l7 zS%;BD(s>zJd|SRgw6dnD(7b5w^b$VSh2Mc7aLCYjJXs>!%rci2HMWM-LX0ibI-BCg z`mZR`S4$SH)OwWTJ0G;$F8h$3v}&DAy!^Fd1>;J#KPZyHQ`hnQqw?iUWBzx4_je8m zl?(4G?F{BZN6hKNZyzoLh?X=UJ++#J^ z+r|aixX`iOJ^pXR4ILx>#*G{810VQ+>x8a2^Z*my5B#`Be=tW5_r!^31v!8uv!Fbd zyVt(qk1ln*)Flb$jokFs(OnUEaHdhx{<`(^;IfBoz2+rRzW{n?T>p1BuHKj;uR;9@@7MzmJmBRB`5}w4MR_PU_kjyKBA@39 zk%LI_N8Ov>{AN4hgcF9(v#JwvkrDFIkvwrX-gx5>Q^I2gaWy{I=)nOoi*obas3Z7p zkQef~4suCc$`blS-oy@ng{Bf#Vn#naQ+WIR@;~mR@PlxtncaqklS?y*0Q7xviLd*f5%g_JT*a5dsl%?vjK{X}+E233Vx$X#Scw zoa;>4xOd}gLQ!2~S<3gbH`!&J$3cL~21^N(ZlXe?5~SjwvU}*EhuoqTf2BT-r~?)h zm0VO@RFXJ!rMrbnx7wf)#yx+%6DQK)e=uA$o-|ZA^5ej&OZU+izVL-%Lj#6jiGCba z{kSHK@azHk~i-L-SB_;mw)NqosnO}MK2oZXwWDtY0!oA99&034hf)~q(?4|7`Xl9PyVDW zTei&QL|Sx0KKc-!bo=X&fsW{fO!VOzM?Q=tqY(%Dz_Xf$>mZg~Q&!SNeDnni{5Z$= zL|onz{?NGYy6fzxe(I-ug@MRB-UH%=A3CAm-a7OR?2yN^3R&E9ATP>~HSy2>?9ZG` zh974f>ClBVfdkk0M;zo6hd*|BU%`blWRhpfGGYv&Aq_IX8$3uu+<0fXuex~u@xy8l zrhzm1BL_cR^&7#T{J|b#%Q?QY&>P($pYiM|6SA=w;?OfNCl2w+D|D=u1JcWQ!+Y<& z*YgUQffwh%Ja9xdWhX4&74i@K$cFSQG4YZ~;7+W4ke{t!>Q{r7qJX~K$?7{McmG*n4*^SvCC?uQIgQIi{n=xHryppt4uEEUNk>w1koV;^oDau1-8v3SSi5 z^{nW#cbR6a3IbF-R3=oixafAH!l6Q;#*c~~J+U@H>R8MjeQ;6H69>JbJcM&kgTph328H-I!imdsA)Mzx zez=IsJ>!?C{8nJ`8+76zKDvW9*XSSmR-YC6$MXwWV1^i?x7#z z@2evXx=}{-f{+Dn=*K}E^!wYt{ac@WLH9j`f#-=oj2Y=w!E#i_7@o@3Z;vae8Pkz-uD1sQGJ7vNVpChi3fg>FG9OT6T7J)nE zLmv0x@PkCgdlv5pamX{sUgSw$VD_hf`ltSF+^z0x!s5Fi9c4h5z%FExC*M9Y11r*^ zCpcEiL0t4gF5ljJ-t!*ElJTm@jkv^%XC6A@7iDB^NV=_Yk%lu{;r`3N{EK6aRg$ve z4<1-5>Gi;o7k-=%7q|C+S{*JLA8vZEjmls*7QGfCUJx#Q?2s)8qFw~f@ef;HZD{eM zFnoMflV1547ZOv?aiSrBaM8Ho$K)EuJ%TUS9CRZw zd4t9mD;K#&h-$N&TNPd@o%$0YCy45DFK>>uHa&yKxLYO=K=7HUfwd;Wz#z(n9O4j$491Kx&JTjj9|q_U z&pC(z@%G1&KAsW!hc5gvfW@_nSHz`E_@gKB!396Mj&!TQNJ28l*K;nnw_e2I%Ld-HA+C!P=T&<#KGkN1%=yDaYlnME$~ za9rbvPo9xC_h3euDL-Yz#XACt#A-+wGDt^U^uV!s0FLzudFKhkh5TyS@FPE-H`g2y zj-H_xd4=A{tHwbu4$=~bxX47Gz>+jke-Ib{D0e&~(&4J_3HQ9GJTJ&3<-s9?^yEo8 z&OApjr!45lcTPP;8scEZ#VW}2h&)11(xM0V@y(z=mTWAAzxR8;XB#$b@Vw&(9dML| za+42w&^^xZ1>QH_2ORp~xW_X7o4@&+K0XriNE+T@!m95gx*RSpiRAt~2`7S;c?g}I2NE+L<6S?Ig?u$xc1B_pu7GN967_8=7; zpXf8 z58a7N9yrR(cY?m_*ROYS#xiTCoN|ii9p#PkMLuB3&>g-FbPQd%4ot~|JRya@_=~^j z-#pJJ9J++uC>L^YtR}!jo*(&?>$JPKrv2|EU{23P*+O$i@(M{Ji<0he(kVw73uBQ9@6|p(e?JojUUQvltQBgrK`2TPI=5M^R zB`hi+&KuQGyz`y!^hzrH_g9BKrAN1@3?nZ{4aAB{v|7odJC-1JXoyO7PjU~GKlzgv z7E-#Eqw?mAKl;;<(6}*flUb2i=R!ZuQ7&|fGI1U0DSucmSl^9&7>5NZKz=mXG!`^i zq@(+pF`DFEm5_=nyt3W+6*gT{|%zQ2w#;m8XD$pjJPhYLOMql=X# zi+=crf7n+!00;be-a)8|AMXWc%1s;=^yh%Mu@Lm%|NY;48n7Te4tb=3bkbG&<3Il6 z!v;I#hF*JfMkn46@&H%xLmzO1JYjhXiz4}gb?D5vTgu7vtUkMHzUYL-nS-uT(lQYQ zl5){S7kRnKpS;n5@*#`zf&rFutj)L}JH$i3crL_S>_@&K3*wDMm2yybfi-8y9q%N& zwFK#*eDMwwFI>pup1jEqM|nb*z@M^!>)j&HSm=?7EXqX~dBr!$JIXR%=&?cXI`W81 z`OyQJfd_t}C#x6y&=38PAB>CqumAclCzXVg2Az=2HM&rC{($6tfv6&jyl~(Y`Jfk$ z8QY9OW^%ZhGE{2S3KP;pr42{2$i`+eIFn(E(j!l1(*?%9$|qra~kv!Vk8Nj5nguj|PZ}7zd^tG_nvo2n56q z7nOXR(Vqi{oT#h=fBXrjObmi&1~E&x;73Ce77_9z4wfbc<%7xYaM+z6c`SA`j1W?~ zws;@VD;&C!KbBR-y`fK7v?31WBd;iD3mQudVWq>Lxabj)2h`9qCvY?k8T z*%1d!NK4~QI{r9eW;a$@Twqs?8}jya=3R<(#NpdOUv%S{VHGA04jp+W7hG_Gzh6K5 zvp?(aYrKP1Ib5R$`i3JteqaRwIPTF6IrwwNafVbfeijQM-$}%!jJzitIKEN3xcNhqIFT1;?!g7U zIOyKS8u`BWz0X&F;2VDW)1U5gC@;j3dW#hq7>dB~5*%ef7IC7U^MFJA^M9O3@-pb- zaF7R$?!tFB@IL@gK!mI~gqOpOjk^QB9Ew8sXVb5agW|qqFkdF`mlY0#Yx?mHMmS}oyN}5lG=%ZIt1_2* z4OUnH>AvH-`aH;={1_7oq2>=2!YL>EQr6Ii{39*lIO1@P9O8z2{AtW7C$pFXGyJhG zA(J#%Em`25>u@1E?)T;le!P=dA$f-U;X|3xhkNjcI6!@&{qf`A z9xM8<|N5`{A3l_eG7uJLbV8q)V1zC>bipAb^ouZX!37?i(Sb6AYzP_t#Qp!7 zva&q*=iZvDN4f!l&`=H0MihY{AP!6d0znjzPXt|}3tdQpD1MGH5=AnvB+9~=;X|V_ zqB0o-1P2;gK!z11K-(x$geDBqK#$cm+*{xK+vh&FPT#s!^{={94SQFeyU*FfyWjon zefEC-dpe27j}FXKK6hdGP2U~v$(uOBM825-KMdK@Wu!+gQtRHw5VQ+M2O~GSlPgT( z%4hIPUV<0d(c97jBj%RwNK1U-#f`q~U;gD^Ztp6c`6s_g-?K|yHj3$oxzWkr`JLZs zN2)oxNWFW}i(b^;IX^f|%Zn2X=nv;J#he2~awLl@0j=U4iK1!cM%5}@*j>4}P32h` z_mrN~S5`9HYGI_Q;rWu?h*yp49o}9$*0vkL<5#~rYlrlF+vV+Luh9!y*8lQqQxwO<91EYS7TD6lXPv<+->Y}suj(ewoCTL=ypCy)!?L2NaLgN z%ajn}lZINuB#bj0EeemB)@6;%dK(RxhD@WEMvTo}+VnDQX#Li-5nihvtK}b8&t;b@vW!&GH$MatZklxBOx@gz7x^pw zOh-CPQrhXPrQuneoa-9@mGMvX99*YytxH7~B0$OnN1MMqRD*<0k*nnOtF}c6+ElbY|FOy5bi7*)a*{Ir5`((g@MYGk+I3aU%yo zw0@kQbkzgyt`PmlKK8LK?fA#04=jK2 z7k_aXkLXSge|iQ3KLFM3tX1{S+vI12(hoYLuE|H@&}*uH^xI1NXp6X&TAX&;Avgp~ z@0SEtp^YZ?(&M^YqkL5k`D%o*rCndEsnNcLnlmXe7n6i1XgPlG=A0_=2Kl7OARW5snOz()Wv9^(r`~3 zwfL{a&M$fmnQ0sPPCIcOyawEqTpISZq&JN#FJ!u;E04(^+xdbzKSmh$!nicf;oqqNXoCjx8oxeMpn=8Nz7p6?NT z&4$dCCiU-m&wJjozNv%4EAQlKW!&kru<|Ud`108fv$HBIYu?#ZFY5B$InwBuDgOV>s=T@U?EBm-{IgT6KiITI6>@&Ui- ztn42B=tsBFJ#qN2hlw0mG19Td(V9j2@sFMKuC8_Lj?iN0!aw(H^_U^c4_%vYtZlV? zL|r6%-0`bt=In@ncVA z#_e=$a(qI~x=EdX46?(|(LoITT*{BW3~Yr-N0@Tw=a6h88!r9`YVwHWSg&PtWWCMG z`e&(v^@P%rzl;i|PRx?NJj*B9jC`gZ+u&oAlV8eFSm_93v=9+W+>G2uP7}C>KatDU zfs-$vF88qKhtw+zM&9YDJWgiBccuK<;wnQp7{Ny(Jx`4^XOTaRv)a8hq;DD@IU!g2 zuyvnwoY|SM70r@MPPB4p}~Fh=*D|NQ5-{CZw5lX6h*(h6qCq~%A^ zG4(g^zBQ`asOZObG3plm$zt5cuQ}A8mCtcM6YWkU&%{#cI-NHNq`{6Y<7qfGV2*-F z!=z#1$L42h+d8Y5__3$*;(t0eSq$4}0rO0L(lJty9fe6_z0yx(nsjv{X}F!=7ED5H zJe&44y(LcKMX&X?Qx-@x-C|$@1DB~x9R|IFn{e?@N0rXSl=#&(q9G1~L2gFJHbJE)Amv<7r@4HtssNG)Cg3!*aheEVt7!8fMd9zGTCs;iDfzM;jLC5jXei zVWy2~WTq3e&dj|u;X_Y^1Q9^&rg%n|^};0b=qG(d%RTwQfKDNRArEmAUwF?hd2_i( z*xl1#{B(>uP`gH-^{i(tcS_OYbnT>1?m2}Z1EXsnf7w<=rQ!5qut}{mF9Zr9U0NxXs})M-feXv<->OQ0bp|x zBY(j&a@Jx?4~}FS9e1Di8HvpM7@b09g)`#r2ZM`|AMQ-vFK+4>`O1P}=e{|d;eR@j zJi`m9t9NcAkj6seqCv@Xa?Q=zfZR1S8Xv|pKT}eUnwd62?)j~Uk&cG>>KY+4QbsQM z^kp*^@;kaB4di;JPre449@8|rf8-+{X?RF4ojv{b?b~;UQ66z~iML+Zkj2o?hLCgy zoOw5kE$JMm>J@t6$yZz(Bg(_{*1b{}@>D58+Gw=eL@!+)u|SJ4SlGWiM~slo$Nz zL=WUQVQ0y|ywhEL@#rj`betU+S;ELWe{RAcE9+s%qdQ|0m3sszWeHRHl&1986W6us zAB?RxG{P4Q=?qi4Iu`2bPk;I`7^kkSMF(l*eWgoea!bATgGc-4#}xxhx+0UE`@}hu?b%v_GdTxcw~oMBjKH+f){rpVTxm3~yzo@e-$hjQ$yMajc1a37_tx6CS7Az`B5TGL$5_^CfR6rGOI6<*#GBZ9D!m-xwN>hoIkAyYbxcbQB& z<-JK7-}PPJwY)JdUmh8w zk@CSkWfxt1{!_e^Z{p@zI417x;WYn9ha7n!pRqB;@hkLGw#l_0oaN(>3tQ5(s+HDfLF)?_KCt{8@{|SrzrBc!Kam?ou6~uklmvra1??wGlZn#nE7Cd_MpA&$q81_}rETiizDGX84oN%sUZ%(r_D%WHfx-T;#KzWtedE z)JS?}@;T%<*hkAsJbhsGNQN zP&t!3%}4HMDU;)+x6(cD44cj{hHp&jSDx21?Z{kmYF$i{;o{NQCBX6dwpFBvhP`OIh9S4rdxsbL38YcbWaX(yX_8)4H=T6tgS zL05Xj%`+Y8#aNrmq#WAAasH6uofTg?-Wi1S;)^eyDgJT9o;S|0&yI3W_5TJ~66{wbja-4(d1Kgb86>^067ZZB(9DlY8{-Ud^|=bp$#BTZ%v$ z9G$iUzcrvbqcmP@4bywx^PV;Zoz9(`>ttrNMoj~#)70o$vzN|Q2k6S^iZ9uiMi$;h zmN?96a!;nqR`>^BX(u1@>t0^qnLG*Oo`3wf=``$U&ssX2i7>8N4ZJc+=RSshbg<(# z?(Av$3A+(C9GIku&<2}X(n~#!?l3_NU?pGble{3R!Wd!lyjdnAbM%Ui(%!dkUwa4W z9}-9};Vo5w!8H7d^c8Lz9+UkKLpinWuDmx=iLe`4{UYnTr!I5l88dC* z;&w7yBd76;aqmkK+@*scF&aS~zeBj0_`6TKo7Ip@bFC)2%CCIt1YF4r`SQqciyt?a zqf;DBf_&>ZkPTQ(%c(_Pm$S`OYoMxK%{c}l+64ut=ipZS?~P_k#EByeI9 zu05ROkFY*dr~IVrIq}K!0|KVe$vtAT8Ajgel5$3Bxdpcq>5x23!(4aWbuF&ExX5Cw zTT}9;Jos(oMK3tQ*cIHRsgBdj4+Lb88w~6?XHw4X;RJuk6qhV{y7baZ+x-cmbgv}@ zd>IPq3Wljqu($jm{;sOQW9&j=pjv)duwO4#c_|V{$z??9iaDSy}xV9;Ea(w zk(?2z9;_prqT19QAkJA zXxJU5oJO7PiXLR0Er#Cmn!Ly-6I@pkbK!2i_13nz=@qYd#qg4syrfOPrL#l$;g#vF zS#Xd(LoOrjl#BGNjkJ@PnRbxMW}{7Ti9XWHMw9rRNC$aK{>X3^pb>z=ia;F+2vWgz@}e_BvPr)ZN~e%UimzkoQ-dZPNqTk?+A1R zPKba;C=He=H|xmW{`R-G#xxD7&d&Ys|Nif{2G%IbEFBfOj5Negqp0ylB)K6+A+PBa z9g-gT;^dyJ=n}oTovDW2Iwd%;LkQFOdp1&NotBX(-x_z1^yvuTqho-JdwC{PJUC2o zSq+0=ml3a&2lrggk0hIk|7Kwu{igZIsB3gtEnh3$QYSw9+0QmyLf(XfyJtia0Z-lK zzR_kSj`GXMFQTIJk50m-eC6X#ce>L_)eC+CDnmFVjgv<10os?3)PuZR>Ky#ornZ&S z6l0LB=C+YgrvB1nUrlX$m%aatx}$C2$DQ$fu9>r(Nctt8h1pf1lui}c`1`)@>!!Ia zI|wkkahgli=Gy;s1kOAJrX5`xEYsW8LuxQJs2V7?#tXsx{_p?()>!eM#YjWkG}szF zU(7MJoiy1l;r!~J9{QbzoE{oUM1axw^E;D`yjuv5EN8QeBY1T9KHqoq%{RAud2u1w zaFtJZ2q(Y%$Z*eHd2l2DL?)e{kzTUIC0l%P;fG{#X9v&tvp3R^FKu~Y=m-PP(fvf} zr)~%%ynJS}R`R1xk%^$c>}4-o?ubu@-HFmYRlnquEsuUU<+FjxBjiB7;o+j+$?)ed zZ}KYth=qG*miVWdk8>@&{2%;{mRvWeA*;W;?O0GR0soNH7p$hfP?&r?p zs?}9r4+Jzg8cK~+8mud?ymGkDeeTl;P#Q4dbbuN$JFUO{+rNFep-OxWmrK~GA%mMV za!*EN>j*W7p2c_M&(uVov^UDo0pW;|*We-j=pBDHH-V7VF& zdB4>;^~19^$a^L{_ry!xnqnEhsoO@}r~W6sl(V$*j?m8!5lbSt33I%BZ-kDUA@i&z zlE(s6FKx9uc|8%vW@1kxOu|i_`+Y~?OhZ6Jng&$^v#N3k002M$NklZ+@{)Ga7oU9oE6r+dE5oeUv-~izQ!nUuG86q% ze{;xp^yiL5A_)mA|0%zd$=_&yI>{$}-ABhfCm$QF$GIwhC4R~s-rfaYcS;>&dq3H! zhq1RBo4l{|px-_2agTPcEO+&Vp6a){o-pj>wK<;Uf6g%?d6t((SHB~$0)cc~aZbbQ zOE<54-&l!x?AW>U_vldn9B?>>hA)GzKEWy1%yjC7OsRHxO_ zPPpU;Ie=^2{V;(!!1{I%Q#bjPH`CiW{%PuersU;x_2@+Mbdl@vIs%)7fCea?t47wd zM%A~E9r>g4)xh!-P9x0yfe(CO(=ZL4crlUVISm@(sKGX^O(r?~bnxQZ=q#OeR1@y| z_dhBMDvc6@fiOa)8%Bvpmx@ZqloAE8eg7wY)`y64`+~xP4ax6^TYB2EF%)r?MRv0>GRfN0PD*VL^6WxU*PR_c&~& z6hadnO1Mc)CuD825m#0CJym}cY1XX(um`cVI}(;%EUbj3VOxho8qD04f4!pIt?ROJ z#%wJo9Vuq9UH{zbLFP$O=r%oPbIaFFgRm0TA!7pBe+e+^9tEjEHJYI&Y*M<}NYNPU z%}B>D^Sti2AF0GWxetp&YxvZbY;#lV;Q|r`4A$ovY^gN6!n5`WUc*01vlVw0pfy)h z@ug_w8-NbY*p%gaRLGPl&Y(+E_`d&&MI*Got#KK+M{RJ{M#Uv;x>V~AnT^>&YBkhq z3!A^wsI{O5$&Z^%8^@gOm{Qzie~ACo9p?#r+LrszXUED=?5elqO35?VRiV^AO>hkx z$`Jz}d5fklSHXF(*$^$RCK%2adtaUi>gqW}$zT_sH+3)5e`MxZ)?ViglP;xp)L>1E zvE7|Yw%LgF8kWCN@4#bsFnUz7g1d0{yp-gDb&GruU2b)C7yqPUq& zTa`eq9)2O zG6TW1hp~C$Idg%-o!(hH8&Tp4k+i^_`#u<88D1~cLPp?FqctbDNLQjuwliN8kBYx+dO^Q*!gHJO#1x>VRMW}0N*@>vbkbgf)v~%SBrr>q$I#y;h@-yq6>{7~(3tP0A z=VO=aAqza@i!w4;T<52Xs^}|$TI;MB@TG7gn&<(xOErs98z6KF;NQK1QxVOj-(b?K z4Tr9JWFq`!-a8-d)&;yN8Z`r@VY;%*)Ii}zcOp^a8BBp+26xlOx`CU+YKKRsyu{`Q z#Ai+Yv2Is|1?b8ffHAEEX%HhfB&yAb28c|2{6Ol4>tJaD4~QGqKzmpcDk~3D7Lg-A zisj}t165OC)xf763h6#!?4W+Wi;I(7zHRQIs6wnkgWJjO02}1$H}OtKb&t zB<1M*{=`^8Vb)`RF(w9bQ5fpJEjoSFuQCSebn##Ed~qdy&jRJ&28g07Qypa3r9NVZaBd5IPBlES_>F31(F3em71!maCja?hj1<{?C&Pq^ z*&hKp3bm;L7(cqpz4gH)_~gSnkzGzl$0}w*_s_S@q#9t7ObH51phljRx)pX-3%5Xv zG{2{Hm}g(NHp2fZ`soc-gv%-Ud0|xKn`#wW<5jVOKC>iozWJG0|FU=*4=y*KyhpvtEPq2D6WQO|<)(u4iF+ zgVxUa85F=QlH^?r-LpEg-L0mwz>>n90`Q(INuE9a1}mv*#uj)9_qFm-vkk=Jr=EAL zG%XIQT$AU{Y=wOvc-1Qd?756`Wlz4J^NUY8vHxPX=<`grJTVaSEXHHd1=pqRIIwh? zhlz=#<&elPL{|tr(BFw@JrDn`Ml`~o6gQ}|9H>y$C5F=AGr zXfRDBC_RrNK(OW&*`)aue>C;=?Vb9Yj08NKP%Jd(|DxrrgWEP)Gr9&gP7)7=C{y_C z`W^HjspRDkf8$I1nZmrR`TbJMxidD?BSf93l$76{@|e^{D!R)HL3sRR&?OYegA> z$WzVBY!0LJ`VCu(@D>nYX@@M)Oi=>1!Ii_zLO5DtR*}^`wHi$MgQ%su(YO7*{my^QmC7`S?n6+Pn zRqnpjNm-=edFf=Knt4(L6sCs?o7ZSrhNKKKP(I$<$XWS8D@9e;Exn{tCYpA2Y@ePR zbFn6`gzZ_7(9c_O0N6m(0 za$Tc)ql|lH$7vdfJw0ArONgCi>d?V}>9_Qly~Q7|L+x+5ABbp1d9kNc2m!ruNj{4e zEDJ4+0o2U11eSaW6l;NIm(|&1XJ~*)FOrsIE29Kcy}5?KDP2-G2b_CLEG@M83{$0Y zN0ZPvp?T?0FAD;A z1>|@2U*56v^%R?yN1g|il*#npTn*he3c7$j+hz5Lss217UG}|-MB{kX3H;M@JTvG#p~TRHz$mbSX`V%MGy2qU?jz-F?%s!9lg;W6XDmeE zY=dmIiZPapD?i_TlB6g3y0ke%UwR~PlB8>UYrpPm{FN_b6=}PV7=JS=BUaftB_ZZ` z%7|R_>Ja6lL}PWBOdkqPJD>vMh?rY^yqBn`V=?xkr$HS%S`gh0ZnPXb5tr8 z${L9eJlgT7IsBzoXZp|lZ&rCZdMz`I%W^99!hwf8w~ zh4>zW0Ii8FgVTCb^+Qwd>_Dw6Xf{B^_-G5)MoF3xXyoaSEmggqxRiw1 zSZm1d3JzlQW}PZ{6(s8_D9kv)4=12sj2%Gf@JHnS+3LJO8vAzl)Uj-Uh5xG&K#}R~@hSxh#FV8;-|yXXK<0nofDI#`}i(onfh9n)9@U>s{BH zRR9#_5}IY;E>Gva8l=IaaMc~2QZXgD9=y`qrr;dfglv(*rSztF$o!yMaV$L28l(ew zmGDTF8kWpI$nie%vSI$XxSA{|{S06TIgeRR9@Vu$GH$dcVlD*gkux3o>zQyhwwPM0 z9vOf)@Tb~a@W0oNsumB0(dV>+vK;EBnctSS2pLXFgQ{Q}OVK%mJu%$CybtC1j0l#U z4ca=CeZkyQd|eDr$etwMEe_Lmv|owF4a4Bgs0iJ&F_r!Asb`y%GZXQ}xS}|oK83GW ztfKeg?ZVBBuhpKc&t(5c?#P%~-a%xh*(Sc&>R^1lD>542 z#;-ayIjp6AyGtUAe*L=F(?R8@Sw2Ekop}i9h_S?FL2uvqWgjRZ3V#SrFKZ(<-#!y? z1Y2)43j`|kh~eBf#zk`-Vtzl03TKl%2{&MY)wE zjD)m)1eE$i6gXWQx_u9YeJgU58PJPtg_qid{WSFrUapsl>K-4%N>Z}ddA?zDEGoB4 zZZ=DFv=zTimnn&vyxi^y=h-Bon44qca+d>1D9hhq1gz$}zkXS|H<2fGjZw9QzTiKX zW|lh6SLa;k^vSA(N4@K+O^r|uyeiF+=GK_NmAf*^$qjsH;yhffNt9sd<9@h2KM+Eu zK$9P{FY!6cdQ>cVBSq<+ldX?iwo2ovsqWXaf||S-1LJm9HaYsY9CPvsx93u~X1Z2s zU@rXwaowle{MCdt-MS=mnG=adr^0BJmjT5x@>o^>C8rqfZ$vr(-mV&v_tRY8 zK+!_;=G&;nr|T(F8j5B=L*@bYat0fPj0y5Lb@Ij3R)5A(+207{7!8njRda*5lDx1F z^tsvi;M=aQY$wNC93)-FUMrE@cC3^lFLu#``=A+4)ge|5*57RI_ot zddlMU9o}cdPkFltY~yHQz;tE+OA;EJL%*l@o>?!)|94*feRmtFN- zM95W^I+oaOy_i*^9`7kwSD3DaqG!hkbpM~GXd7psXRo+z!IVa!%{z)Au_%wWg$f2I zA>6jAEsM++4|G#B3G3b@&hU1snk+2&;!p9g;=FhP_fosQNZ{=8pO&o3qT88}mGK1W ziQk}7Ry+X(05>ddaE{y6EI#KR%AD~YKo0_xyumF`j1? z9yuL2^<=4w0~l5C1z|PujjecU#njntu|iBe5|C^OqJ;gfimWU*FxwE8O$rBxNljX> zDm4o@|6ZXDI4@(kEIZMb-bG=R%w7-nghK;jirFs;q_!w$Pl*)7gzW=qC256>eQ;`#A=6t3DeaYln%3w z_u_%>tgR3f7J~B4z7Fd6ygJO2*s<6N`<(ck)Nsn3ZT9xk_jXU0R$l1znCI2{=s)qk zAcmFOO~dPgRacFs&zh5)HHi-mA0{_HfQA-MZe^^0>C;LVb|`QfLG2Nw zvKRzC6uzr{@Jo{$tc2wLjEWVA00^ONSnbu<5{;lwpk`QSg6wx`(RL709z5;5a!0&H z=%KWvHuC8?daWDhQPE*&y<7Sg3F&$_p$)EpvKrU7kMQzE7+mb);P`k3ixw5p^fg1ZEzyI8Ot^!QJ3Z%6)#<@>D#?>icDy(1TM(9VBIqXx>W$| zh@QSXiCs0B{kbw=c8=X}K}FtlPF+5!M~~zIzX`j9@}ovtY%bx71jha{V(%coTQnN)1CyFPn+5l}^wPO{4sKS&qk-BenVB{ zjRls_B))Ea1y?*ce+}J|_H48*iPhNy-ANwkz89`HMsj;$c)JzITm#Ky zQ#PP;|IM$Rh8m#`aNm$&s8>nKk!~*Cg|89vwS%qME~ zH;&jINXHN15~tgP#o$+`Bj|VKc|L7@nnzg$jUGa(+(p(aaC+DJ$ESujeZDlsb!$m$ z@nHH}3qYO|HxVCa*gm3_|G|vW@;sS9?$Rpb@h%i8wy@-N5N2qt{iXR8zjLqm=2-~O zheySuz;)ig>1l99zDkR5Pt**~2S^H~Mjh3u1FOUo5c3#&2 z-`pEr(FeIo93}V8_g<*3P_uFA`OZsnpNed5 zk|SZjsrpTi6wOUX%NZ5yrCJE@PqR8dA`)aKt-dLoyD=+5UB`(#hoXv;dF!;cZr&FrlCIw>KPCazjOxJa>19vwN`Y3BTA&31d=)yqHcNXFCu$Q@{;SW_KQMX90pD*9X7IpXW$tJrIWd z&L72HXtF!bWjQQF7JW69ziRQr8iltT^H81+KNH{?noXOZZM==<>-Ah%~aFvCd@t|97CT^z{)Q_0M^nzG@aeUk*5E<{Y z(h#Y5QMP=8Gp#HQsNurNJykB!;uwTcBUoQdPD1sojgqs_67yZdiyXsg1@1YhSHuxK z=P|_-A&V9`d;NZg!^BjzX6gxd;JW8@2C3U zxbr&itr=(w$SwDvCmCST&<+Y47?xOFrvDOQ+f)Au-5o%t+f?;sYE zX+C>f42`~8c1!6NBy;GKA;!}b-|RdksXe(KxHlh}uOe6wY5bQ#t~gb~5?EGM+V(Hb zaHWgYQ%4BJx13-mq(bHini9%j;VuhUzoEdf@rXPBxN0J9AHsK!ZnFhd7ra-VQb-AX zYudFN9nswky}I}j$MDW#;p$~{u?8i%oryalcq$xg_t>T_{V-I)_I{c~NJJ};bXd!H z^mS@gU{r&ga}g`-xjV`eR@F%e-zU-vYzd6c@M8xD?`c8-la%Jb8wI}+H_P{ewMZqi z&dB1nkw^v#eTsNp@O|)|K8V3*ciqRf4iP!OROh8T8_|2Gfwu5}4HFh^lPfMI6eE)K zJ#7=Ao8g)dx82X;mRhxt$amHa-@|OSQls^dRTk|@NIpVXO@}x_F3abH6sHa1N!<_KPp0V7(g_5wYRE>y$ntpyDmPy(qW?eHe9P z>Ea|l$l%x>BYzG;z5H?%$6$LkX9i3m`-mEdw~rzdRZLe&@ah54s9=qB$T26j%nTzk zI>Gq&H!89SxRz<;jH4-%#k@6q{a59Q5s}uI;h6MGi!(}lzZ;b@I9Jn881tO^;d5d1 zh7aGj2Px%n?qem-AZy0Ynqt`@BIx#9Bxd=~- z4%PKVafM{wT9zIEF>2&1yk$lb_io2!s<&lduF0jS&Gk@PPT!2OKt>xhUSEXTkJN9X z_)-zc^GCVk|6(#A6Zw5Hja$FNv$ZuWY~nuDdE%yr1L``)b?sql;2IL2eLtI`#k+3L zxWk5cclZw?;7+#yU)%6PcdE$BNZf$_?47HO9j$WnML|nFE_IgcGH#j(2|ruuW&lYA z!&G06ALnSOOg)ho7O5wJ_=kxjSx(z>WCQ~GCH#Ntf$EW=#7G=wfeK?Zv#bfCxs4Kx zyIrDcsqGQQCVA!c2lzEryn_)ZMhM5B#?fp}g4Ky?-!`+bIav_kU5q5V{;Z^2^WJoqhAET^$-cUR8 zd45&9c9Cu_I*$UASbiAsivKup)<`jM>#lD`o4Af+9s(tO_M@L$=UK4n;ehCt)2V2D ze=I8f1}a7^eyo|YqDb?iLM{#HZzqR5k|PHnBBd8=XiLI|jZ z%>|LkH%H^-@vP(+Y8GDA{C`wx=Nsm9J~o^QP>__z6NFneWvI=&?aP+i%j5eg=n#zH$4^T4w|rW!aFwW0?S5$3W?!lIEttAo=PLr z;)@l%e~-krjmO?E5+mB~mgKTKwK5{LI?BX-Et+;I(0^n=Pjf)M#o~N+dmwew#cG(? zrqMi$5_bRWBA2eeLcm6X#Z}xKw`r?!zP+E%MyYJ=-JzVHdEWLC^mQL9$(ZrcoIaM( z#JqFGQplZ+*<0NkKUeR4>#?i9nQ2CigiFq@N}%(3!y;aZ?fo3WYwIOooHFiU2J+?L zvmFzt5xSPQqlY9`DJ0qz>)K)(Smcc{A3XZN(YZ%g z-P!3QAC6y9x5u0I#tn|Z34QK%oy}Y>HNhW&`p=DV0_t?7hIMBY+3;_3FM&`15T*kV z9kLRHXM9LCu;|X-+7{c271(XtSAL+zKy{un&8wFWdzzdOKj z`Q{FlEjm=3k0#0D%hkO-y}en$L6lKH&J@_(<0wU!Qu_%i_)?=@f->baRYsCLV%X|? zYbs;QYLQrR)dU97UV5M0l`#rhORr2got)R{QUi$^mer>Xcjc(Zmz=Tpt*8U+0~6s; zU?p5LOQ!pWmqN_0;)FL={>$d0M5v9#KF(vLaO_eip57kV|x^UzGJ2Wha6`jhDVBLpR#GhFeCC$D$6C|MU|HN>u9L z%Tpw(tdpe}u3`~r*zQ$3QLaz_#ee<+AnuD0-{xOsE~(sgJLlU3)_nIZ+66`}`~?I6 zdB^7F0{&d4uhn&MIs&4v&|!z{k>z5vj3fsuO>h8LMQE8 zW|o_fse+;S5ToTR)Mz&P%aZJ%rAzN8E%#7GJ>W0Z&$(maAKRAhk+{8~b%@132yj-E za-75(p+c+5h?j)^g6#e=TErkYfu&}~jFZE!>O0or&vqltV!H(N6bPnr=~w%}6L+%# zqKQ#-yG9_A*-y1b97Xd1u6ZyS&c~KM03+-a+aJ0;mtx?MdJ)NSuqqaqLXBI!y-Q<} zYm3LdYpmEOTg~opW|yr9Oy5ibzutpp3NI(xrcvCytM9SGLX1fgnUjC;Hl96QPt&uo z|JEhN*B&F;5)1N7!iNN82qT0Li`#lxlkrVa?5d89Tl)#suHaRAVaP^*`rs?j-rv%z zsk-$&aoxVxj=v=(KJNbG6l!srqq89zI!-yca>lFv?;h-zpuROxnB4ns9R@>zfgCWa z@XK!D)vwcI0A5>*?*SQI->iTsa)Ji|2RJeO1LfRGfkC;4g1xif4u_hcxD;8ztG;1k zBc{uIgX{&Wkqb4M`xpKnq(^DKJ9*7{Gocho%6dTql&OwNY=15!f&|rX4MTHX+-Mn@ zW%5{4p$c`8YMc~o=b*XlE>?-1+D`XPmb^bJYpWWuBi~n(Q;|LD1Vgufcw_O;NncT}&PxadbDqXax9;=D3{_JPj zL*Yzt0-+^^S;pIV@~xTx%%6(zGoD{d9TG$N4`ydU9X(Vtvhm8P!Fp(6q)JFCG*cN% z5?1*E8b4&@%-4jaFYn=hyQ_cn&+iVyht+C-k+H>cT8HyJaaRULs&Z>?rd@742d=X0 z{5KO^?!;UaS?x2Oq~!sJd`hO@S4i3&BfF9NT!kWZmAa2v!WQ;73J>|5RLlemdPmzi zM3-!Uh;VahQ{|9s+o7r}u?G71y@cTs+pGW!{m$8HbhQl?QH^zj+hnyCYyf_7EIjJ* z8$!skqW9eP+TvqmZ0Uh*tWHS~>GEet1VIhozZ|IWXeL!hZ~q5Aow#MMx`rg-l3a$O zF7b$w*CYY5huDPWGoDVXNV=|J1X;^$H#LgZK?}=XQzW4D?Mfu-z{H@?NLDpK983Zz5y#G+h&)bM}Kc_Z{%dTsH*`iFN%UjhUF>me}jGs zdW#R^keHGi--zEo>b|b@BaT3cJAu0DrNpFERg*SlU+(mdF%po3Wh=80H4*=8IKyyk zK$hXaf8)6Ae767ag?coP!U$2BVAP#3!DgCp_iE!ee{=+Kj{vqu1xY~J)?n5RWl?d` zb97bLT$vDraSx6Lr;7(uSZfAS1R2hv*@{Ip^m5D9T^O2}Kpw$eoHxBEce?|pP1aAw zs$wYfD=k@^@c_!)`^P*k8P*#^{?oYeG$JXx zmOwunaPU}T?+w&C#BMk}TiUn&#maa(D?^XpO4VcDD?j@%s`MiaPfJs=UgiVOTmQaQES_x z%Z?zzxdr#_)(7_2 zo1DkhuMmD?FNYANj^$2!_K2kjbgq5^k*oLO1d;C^t<}4=(2~OPd9hCi!hR`{byzJD zUY3GnC#rkEzPstLi$NyH0m>w|LHD+3nfGV#rx&kX904N)Wm@W=Na@YqGm(LZp`m3m zLP)Y=6|r}$)uy_$Fd+>-xMz9>>eZG22K_UKc;d&}2MAk-k%gRwwHSu=8VkPH|2iM2v5kzW2J1fe%L%`ud(l zpEi1*bWc42?K5_m$d?rMed}GGp{IEjn9KdaoL)@(jW9AsuDb_y@D+^v8+^N#4?>#k| z+ndyHP@@Vh+?(Y0I_Qo-XI}c8+b_sV)lq^a8rQ(w`M-{zQVyx4F;`ucdR446WXrd? zT&76B!Cy=f10ibwOqr$_eBG<40go3iYs^ zsm_TRqc#_eS4HB>)XGL4Xt?h7TGO1=T*=*^TAeiHUYd$mPhfnPiHJo4I~&&K)*}> zAPcOw8i`57YIf+VC(JQ$1b9*Bjknvnec!HfAnnP#&Dq~B36sf#(vp$@PO49)f3xNd zg@%lvqGCPJA0nXW!%d*#!wK6#PQ16x5yAt{zS7)IZjHIW^9iPgV%k+g z5+Ys$wR1HzT?`nljcsxhT`J}NQ+=qzMOv7737s>+mg5Fw-z?f*p1Bc|Dg4TpWIsr~ zIKFgx@FUi99ys*sG|pLI*D>N9A8LO9f*BIn9=-NzT5x2_7c+}W=gERkhI3d9#@Z)? zImZ@vK_UUo`|%Tm={KznK{F={Jlh71P2*DA#d0gH z_O)^))q8(ZO<<+rGM|D%jp@0ntKVno>)Mbu#Jd7}$m_&HA7c5*Td=n1Ge+M&5kZ;AJ8>0X&SZD82up~>NAHa*!|Dt#7DX88NK-pa!3QEJSpLURqVUmCWP ziL{(w)nq#V1ppjtA#y`I_MuRP9aFeHS~&G~awC&JYaJ@U4_py2q;*J#W~CzZS(7%W5G&Y6z&2%i;56VREuQog^ z;feD-eL4OG01iJY?#-mH)_gEzo4`OSdlEV7>~_0@c*`lH)wqE~^E*-Dg848a(9;*C z5rnqAv;8Th|g{_guW>h3lz1j#eqtx0Uf-nWhSIT*0=`C>MKN z8{aC4T4Oetv!5CamSkhqT6fRdjs>2h_zZ|>Z41akVaTGsIS;%q<1)@hIwaV^yk?b| zz_CiI;^c2+lOLJt3f1CNY5grx<@GLEP-Ox6y3YtZ`f+PJZN#q4SZRC(>vr{YO_S9S z3!+-ad3@qC3GJ@)Y63CB^TzG0Ps&Y|Y+#7UlX#YIJ5@|zyBK31m#fNd!~OANvVpCb z+g51<(O%qdPQHx6-0F3?am~cSWA9yBd_I>ox$cqH7kC83v(Js6j=a7Y`EPl{B%su# zGI$K0gW0LpO>x45WeOjcWV0u5J`e&`5h)&v+_aht*o%CkwWK^T;F*1&1@kPaUD#iZ zyoiU?F34E!qBDCd{mfwRBKUO1+13AsEihyS=|ro%HBY%%pBbo&Y*iu`^(JQ24SCxw z2Tq8)$-@?cl3gT`N8!H|yAG8Oi(Q)vywwK5oT%Ap4o7Rkx6Bh^E5$0VRc03~O}L_6 z$`&s{Z8rRE=b2t=>gm7O<~sFXuu?xeocB(VurE{&;YI*x)AXp{^Q8)DjTUULNtv2BFo^3;qO(8CPaX4YEw~ z=!#&Xl7Xpt@9+n4Uv9FEU-V26-JZ_1Na=ZPnFaPyhB;D(=y1F>2|6q$FSW|+T$>DR zWT|=Ot8`m8{rRQ3Y;Y&Myw`WmuEy=-&GgI1^;#%h*he9-7PsFAS&hms6!FwXb-}Ok z>-eaJ2dO9KPdkzV|4Qr!S+PNZ0s6aRQBNkBLTb+g2WMFHH+S^@JTD82JAF-?g?frh z*syMW#nUPk>uQMWw4+MM1cJfP?k08XZ&g%B%FOgfnoqg1q^cU13w#TqRX3yEPKfN3 z1fQhJ7mkAj^8KZ$WZ$(Y&wfV)PbK%8^lu<z=L<`ui8hzbw8B4M9!v{<0$>ymZ#mMwDkN)G}3@ST>x^i3SCu2(|y10+O zIfo~g53Lc=-7*7~lzUp@KPjIZ{&9xNrvSCAKta>~=*bl2mh*<7%iCe)pr;JjTC`n_ zp^#VZ;O|E7(+(Nn2VGi`&EyI>Ufu1Sqng&t%MX6fs6G^0Y&a05FXdm=ycx(7kY~fC zFc|^n0p{jqfHSx(?8C0eH1!lq3ll-ece^@^&{$hpODann5Z2A9$nW~9IH_~qI{{4} z>9x6!TNE=@x&^;2?XAu&a~%_oRz3c#J)s`NO9E3d4flAZ?h|QEd*C@V8_;~i~S9fJj!q#h8ZeE zsq5ox`_qKm0`FaWop*|UAMyTM0#{h4K(hUkU4RW+2qq$x-LdjdGOgP1Z%Gd==y6KX zb*}rH!Qe&5A(fu2_1XrrQTXy$OdO<(dVPJNQ@WaKOV%X3kn#Q*QOmBL zWT8#rT<@_%Q)Xo6jFJnix#~efm=W!VLTyh!xBvc1IcsQ~e2HfLR&}rb{^*e%ym%&Z z6pR8_dX5yEV}fV@`eR1V#3>_!Av=Uf56mua;pL22tE+68I zDy1&=0)gt@H#~YLCb*iYOB%yvxcMmUrB%;PW}S6Hxw%T2c;AT_p7`g!X+woj=c6Uu zAqf8tZqV^oWoujLD5SLIoP0Mg0J8wk7m=o9FaKdO;|uLeCkt%G%>j4zFD6==>loG8 zmxUsiuR;pP8uQA(1Reqp?`)`bJG(zM@Ekdv&zGKQcx(1*aSj~Y$FL&Q-09VKkL24A z+MuVn^1+#T53&iHU7K@dIL)U$9aCv5UUO}(gB7h)u6k@w7clB?t|bG$HIx>90Ktz1 zqVJt3{3Rtgz3FKO@_)>(kmCj_`CL|C{A}F?^we)=;Ew%m48pHv`5|H;Vb-b^vKx&y zg4s^BS2%Ybd60=&m*=j*+cV>xJ%682jhS135>^es^c=VK?6;ZkgBUeWpU?i*6?>3 z|AnbEj^pot1)W4_3s*T-!K4mc^PTsUldj8Q#UWfU5S0Qi>!*8H{8U0#&`MX;YSKmQ zo4qDHI_L(0{&DI#xqmKoevNjjqCHcS6{zX0^kRZLH?Kxa-*Yb==Ouo6Tz397h{~F~ zv*x{FzqYtYKlkXp*(zlq^FZaRnR?n8tdPBhD*7wg;AY_Ku8yY7;vKE=e`g<6GRkTQ zCT4e>S-+vh4G|t;MNTvsR*u5g>Z{%6M}s>ESb_ns_z~?bx^&%&Ui)GkJh3BtLuI8Y z5%s$JW6KzJWESAoJ2g=I!!*CQQm>M1r~auXeVOk4!hj8597Z158oO9Wl31aJ{MW;9 zvmZno(*NNNLHZmLhs&}*S{M-m)J9jzK60nYaT}+WS6Ts~SiJ?lIElN}|h?lrjz58MZnM!lsA6uVF;_0^5CB8BqTl8Jg?r#iX8*jjIS;) ztVrxW!M!y0=$eYbx|EVv`aw3_l<-;oobuC?i$ZjIqX{+rd1Yqc@#8$OR2k;=VcY>C z_g{gAy|pLe!6O?RlZOTSHXfJuWT*$ub4OF??(}Pn{YqFmEmu>i!n6&(m4M@fy=M_w z>I~Uyk_t|qwRzz=(+XrUi+yGdUf?Az4LReMEblSv&ITyJWU*!f=0 z%+w(7h{_uMxgL_+C>cJP?OHZfTgG2Vv+ZZTxb+kha!fnDx$-WNv<~lBD@NAjeOBZH zJ!hBccM>mShm|yDZNc|}Kb#nTa9)p}Ojd1;cX9bN((XNwVA?PQkspN4O}>Fu(~Mb; z8imjk%x8~Rs*|axu3!_4NU63stYE9=g$#7GBP>B0HI%j`6|e2+Bu}R`iE9iFlhA`f zE$@jc1%m}Q^U%e<5!DA02cRk|kI{i?wU}~z_QK_GuGi#(hIl2-jQSeWHFUM!B3}Pi z5$FaljD3ejn!d)Np+2gSYC<7(1dO`Ge_ah+h%hT@+IA675U_e!Btl1NOCPA)%tN^6 zacaMlY#^rRvxq_z%NTO}vRug+HzvkcDcF1ciX{&UpdyS7e!ehmE0)z)*U6KRJG~aD zzSn47ixu6m@jfO71&dnhnWCi8u$jc`b+sc~8 z_j-9z-==lj<=Zk(zb?y*zVMbe(jX_s(=}L;-_y``Z;lT2zi?Y+Q9y4YB|&ByoJWl~|Po z2(IDXt_T>&y2ao~?m-K@>R$?!)i9FLbRnq!OMB{DCZpiDSwFRp;+IGZ-Oav*{2O!B zGJRwmPBKnfon^0cX8AqLjsEqnLa~-rHe5DPEnR{5_&NQ`M(a`lB4Qf%4>b1Wgcas* zw=J*vIq$AMH01O0fSlS-;QL}XHu&-4Nsy+uCJkwfM*ZcipgZ@hX$kwP0UVoZdR6{@ib zwq$!umAUIQ8i&hjyC=b&@jl}r7b|FmUUr4Vvhajhh6lotET^mRO_q}9gUXT0X>*$d z)?D}5A2X8+v6xk!Z{ai`|8M5k{Ts)S*U4;<_R|qYG&&rfw>{-BimKc5 z0(rGD6M>S0H}P@W`ZdbTmvrPkthyqB27~2yf+q1vZTc8-|EtcX8Q>2bweq8N(#p== zpg?Q_P4!Q?i=I4D(0AZl56ZZ(fN9J`0C~if#9L1=-W~X%5Y*h;YC>05kgOvtY-q(s z_7`x;2dpz9#pq8PYkd--n>y)7=1XBIOK(lBEVoPX+LyqvxaC117kPpp6wp` zwzki64;4zCEi;2BR`1aELf#MzZfotgF27V zg7q(fSp9BO0v0j6Xq#vJ@8ZRo$@3dGGQ$Gdi)+8SP4yWFY4InH43lbm1P>X%E2rpt zB!Bmg>trG_!7Jp0G!ih)PwlxIooo%hIA9t3Xfn;d;GfH4+^}LJV_2Z$M;r+y&NZ#$GR=%LT+c~ z1@umS zDY=u#Cp#GbNxyp43JO#2o3*&UH&+ejq01>~+LXmu-k+2C$o@H-FBf{G7K~?cs_d)t zAr{{g@cVP#nwD=VDxS%6$35yJF7#KuAYBUBHi2^6GMZi8AbihA5V{K&<7k|Ks%FNN zdW#jV2C=b!%=ivF3kvr<89lFGP5;o*O%W(I^Czn`Eia+8dvR{h=M?=|-K}jOw`}&B z7&VLKu!RyU5>c|}jW5sdM7)t-oPBGw6|w@nz>0}KLxTR@JO7YA+d(2jy$9ojsXsR4 znu?p7Y**NvCNKc0FqiyOC>$tEnEm=DOz^&2HgH?3<;v>az%%TLPK!dpL4PN*Lg?y~ zr#>W=Slc)ku<1glEoB&&`z!X+#c}6cqY7^Le7mOD+w zP{Tt(L;gmLs-5M!B7n1hjS5XFgU1C5o7XmF$)^xP2S`8aa2}F)A zUL_xA7Q${615FK@h47~E1nS2YSXd{Zv8FILj!|3e`PYTPKb4=&i`zH=ydA8OtS{gi zLRnu%Y+rfMMY_}VEFF+*lkJH7^H1VjalnJFN3`ZLeQ)JeNb}U_8}b;hm^N|hpP4_Y zKC!XQijX59duvRRp**|%ibI?a%;M+rRceKiga)Ul=pu4$n3;=LwCFZx3+Ue{1nA|C!<4N9^mPx4@`!n|sScSiq37M#VP<68ZUhI?C1dk6aM^#@KsnvDz>@rE} zV?&iyOy5s_Thcn0DO!Ew9;n+fu)U__W>kjOun@Z6D4P7yGIe>$<|$&n?m|f&xLi>X zF_`~&EA&HFrYtK-bwJ=U^Den6N1f`|spo|%FySv3vgTXv>u+I%@wbEZZo(J(_ekQm z&v%?xjU~>q0L|9k}DWW7(q*ih<^*CT*}551OmWSOi6GUtYurKQFhGaVJuEOK**WSN$oSB2@zC|t8_ z+ampKjbpp#YtwpIV@_m~l71SztO2rM_jhXIT#NXu+biWrW}qjv^F13GAJjB2h0)%* zl4sJAD;wG62{ifEP!!n)fi=N>Mk^YV{%#|o z3j3OWYtkeh?;FH}&RBLiLPHYZJyEh*DY=C?G)upDD!R8J|395nW1e{5DR(k`9xIrH z3#QA}(~IQ|E^qC`YMWdXCtjj=pKi(s%Du4KE>WQ8k9Y!h>|%0{nfzl8?*;^~ehqGAbYcu;bY%~j>s_b7n6yWGO$ekxvlG=p(Tv+lEW{zd*U7EUW1{Oy6?jd9w{TIb5|R@SPt z!1;}+)NQ6cIUOC{MccLzBAl@ktZonXjf5V&Px(kKI-@Gcq3VVfAGrUtsfGyg`v&gD zv%g9n5bn7#T4<;TeTn;v&r}N4J-O+Bv`gW{$#nu|z)7N{l~8Fw;C5BlbsRsJzy)UNw@~KZBUBvG! ze2zhip2#1hESK&y*?y;3b1T=a1w=B`m%a=e`5o`%m&M~2aRyhT zjMZv{s`9uLTSis(dn6PS7kbUDi;6gDN0&lyd#>Zn4Xb);N3Nvx`<9gCq~ajXUvZW) z!h(N})}BsCFfi9uYd(oih*yB9im;95$+4e3bzu+dP6JO<1B!xg7pEt@Dc7xPRcAw&B7otLZ@3o`&OS2zAOMK3DVnQ zrTQ9oA1_77sz%!;<>Up~#x_(*5AZvTyKZIqO!)HFOx=H0j>^%MGmH@>dg?K0m!R3O z_^QB-ZQI+c5oBpKSun!ex!EgeU7KE)F(*y-stCqG2?KF0>xjc(I6><0E@G^40Gd2X zLoyzHVo|sApY35X?Cyj@s4zEmJW23{@OX^z7k~2U%}G(7(8Y3P9-k*W^<*6#K7MXy zAw4YQ#>NW7O-F!{N{wQ?o+Tq4K-y|V^qr?*L8e27`(rzqK6mXRe*;;8v)X5HDsZ#f zmPt#_3T?Ph$#a9pcF9)zAC(YG}`iI zS4TR(rF_VWMr%#;74j|8np)&=TYdH3)WX7`rT#k#!pC{8J~@S@m@X-ph%ITHk9ZEh9Xmwahi0vOpSMy^Z?bTeIU_x!6!ZZj54dJ4LNh zQ9S4p1Ca8Qe=JWlpz0h;a0ouOr80i>$q7c)fuluj7oO`L!5YZ4uf=df%&ps99C)LJ z&qLcXC+`O0(XyvJTGdTHfWnq^7-09hu}!b1$Z<b;VM z@l01Wud$2VVlSwaB3>Q(2wMnvsSBS70l(1Y=z^Jk(E_!qN|>}{gIY6Noa|$yA1qCV z`KI(J^#{JBoLVrOuxx+mXl(>~JC1&iuL0iaut1kh6x7IoiGeN8BRNGDOKmGR-Ohof{EJT7H4fmuyu=Y*iJ3Hyqj?Z2b%uc|;N+Z;2T#hX*Y5^dI$k*{)c4i3E9;ljQ#D zao((*Y!C69U`4*7@G9LC>~G~#oYXD7*F3?eHm)s)=MR#uX$pk`qg%E@VbekH@bi#Y z$4Ya`7(OxlR`MYj@7dR@`l4rOtEm~Phpye$nY2LZw2PNMDxVpr@RNw~mbu>XuR?dJ z{@*cpAt0U6qbV2aPF%sk;Z7)S^1{it*@V{ln%=S5RBGd!2a0fi?`=*Ko*#h>Ln?G}mYKfW-ypzof znFf2PSDLXElx1M<@*tu~iC4Pmk6_Sr*n8FLgwMZZ$1zqoWmcjWD*bJRZsohs2_L!q zM1sIIm+pZcm;6e70=m&YKb|`y=+b{KRJ-|pLmUx(_0Da&?|6*fUw`_u)DkP#SriuZ-xP*``lM%2ys-$V`4p zXpevdv^eOwxDa}kz9ty@4}_FtHK@4iy?qw3?3fb%=u6m4aHMRH@A7s!|Djc2A3CZo zHuPpe_+~LAj{h@EzB2-nMX!&s*w>q|vB_;vq%=Yqx_oj} zby1`?7wG!SQIY(Jhgd($jx_NOND$VK2}QUTKyLA zSUIFjNpkkz+G6Kgz15%)nK^As>e1{uo(SxJO0(folwh$=;dpvP{`;q)0WE>pF5oJ^ zT_>|L*o!0%L_c4m%FRU04{L(i!hFI`R#~6c9?out4~KgK8%UE4IC2JAnMdt?$K};b zIB7xyC(oqSRe+E+75r1D6tT(*2;Ru>KD$afqpry;K=X+Spg4XVJB@lPejRb(-3wrXmz6$)B;_sX)a6f zvso{P$6^$9q|^wO4bLoo_~RQ#+Cf$i4qj&n^ZAvAHRhMw`}Z5o_JiFU1`cF+2OCB7 zTaR`%rLWf6SFWsDD@<2SKGZp(u0Czmt1cz1qBz}m>+S0uja!eMIvUBSsm46TOJ%oDm{7|FEhWXU}47e-mT7hG}tU!-bnqX$_ST{MdVv9LP$g@_ntOZUkNFGfCmo@!$HHAT|Iza_!M%tC+DAUfVUY85pT;*SGbFp@M-mo){b;gqVl=uAuE0` z3`@bK9biTD0cVED{-m@N-38;f*)ELnDEaF0GPy?W;Reb$(`ke$cbkrUAxS6LznKpd zPr#fU5vbdl`JalwBCFF1Kr`)!KI`t6f<(31-XZ#1OJLfA)Q?meg%lD>aH2oYMgX@Ucicm3n(p(mM z*Rj-_7H_`=O`;p0gJ@spg;8_fSlEsA{+u4*ux_oVv;By(v>w?+SbXDTQ^DyrOV4P& z#A`?!GaLJR`mM@#$%Hl~?mh?U`9?nHEUdX)Yjj%|csSiiDS7?L56FOEV+%XvmaaUTHx4fqCfw*S*9ciZ=&1YEh+!^AJ>lb4gP}5hdThm3U?^s zKUD-4Ucy+7C;bS%hs;m^DapG4u(1HxW5V;B-Af9vi(vHvShL2To{;ITr{n?ryUR%Jt; zMgC?l0_;Ije-CE=gc;DJ%>jVo(*DR2$@`b|L^|)cmHl&0NMC|9Q|`UY&Iq* Vxo;2f)6+51CZ4mo`(IOuD**ri literal 0 HcmV?d00001 From 3bd53b5f1b22f851290ad7a3a0daebc3db776534 Mon Sep 17 00:00:00 2001 From: Sergii Ivashchenko Date: Sun, 5 Jul 2020 14:43:50 +0100 Subject: [PATCH 2/4] Fixed XMP segment creation --- .../Model/Jpeg/Segment/XmpWriter.php | 34 ++++++++++++++----- MediaGalleryMetadata/etc/default.xmp | 1 - 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php b/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php index 08d8b66e4334..11927a7c18c3 100644 --- a/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php +++ b/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php @@ -73,18 +73,22 @@ public function __construct( public function execute(FileInterface $file, MetadataInterface $metadata): FileInterface { $segments = $file->getSegments(); - $xmpSegment = []; + $xmpSegments = []; foreach ($segments as $key => $segment) { if ($this->isSegmentXmp($segment)) { - $xmpSegment[$key] = $segment; + $xmpSegments[$key] = $segment; } } - if (!empty($xmpSegment)) { - foreach ($xmpSegment as $key => $segment) { - $segments[$key] = $this->updateSegment($segment, $metadata); - } - } else { - $segments[] = $this->writeSegment($metadata); + + if (empty($xmpSegments)) { + return $this->fileFactory->create([ + 'path' => $file->getPath(), + 'segments' => $this->insertXmpSegment($segments, $this->createXmpSegment($metadata)) + ]); + } + + foreach ($xmpSegments as $key => $segment) { + $segments[$key] = $this->updateSegment($segment, $metadata); } return $this->fileFactory->create([ @@ -93,13 +97,25 @@ public function execute(FileInterface $file, MetadataInterface $metadata): FileI ]); } + /** + * Insert XMP segment to image segments (at position 1) + * + * @param SegmentInterface[] $segments + * @param SegmentInterface $xmpSegment + * @return SegmentInterface[] + */ + private function insertXmpSegment(array $segments, SegmentInterface $xmpSegment): array + { + return array_merge(array_slice($segments, 0, 2), [$xmpSegment], array_slice($segments, 2)); + } + /** * Write new segment metadata * * @param MetadataInterface $metadata * @return SegmentInterface */ - public function writeSegment(MetadataInterface $metadata): SegmentInterface + public function createXmpSegment(MetadataInterface $metadata): SegmentInterface { $xmpData = $this->xmpTemplate->get(); return $this->segmentFactory->create([ diff --git a/MediaGalleryMetadata/etc/default.xmp b/MediaGalleryMetadata/etc/default.xmp index 2adcc5c50020..772b6af671ec 100644 --- a/MediaGalleryMetadata/etc/default.xmp +++ b/MediaGalleryMetadata/etc/default.xmp @@ -18,7 +18,6 @@ mediagallerymetadata - 2020-07-01T15:31:21+01:00 From 9ecfd03a1d87203643ec79715ae5c039a9789b4c Mon Sep 17 00:00:00 2001 From: Sergii Ivashchenko Date: Tue, 7 Jul 2020 12:32:45 +0100 Subject: [PATCH 3/4] Added XMP reader and writer test --- .../Model/Jpeg/Segment/XmpWriter.php | 2 +- .../Integration/Model/AddMetadataTest.php | 1 - .../Model/Jpeg/Segment/XmpTest.php | 117 ++++++++++++++++++ 3 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php diff --git a/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php b/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php index 11927a7c18c3..48c8f0f85261 100644 --- a/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php +++ b/MediaGalleryMetadata/Model/Jpeg/Segment/XmpWriter.php @@ -123,7 +123,7 @@ public function createXmpSegment(MetadataInterface $metadata): SegmentInterface 'data' => self::XMP_SEGMENT_START . $this->addXmpMetadata->execute($xmpData, $metadata) ]); } - + /** * Add metadata to the segment * diff --git a/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php b/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php index 2c677398df0a..f23cd025e7eb 100644 --- a/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php +++ b/MediaGalleryMetadata/Test/Integration/Model/AddMetadataTest.php @@ -144,7 +144,6 @@ public function filesProvider(): array 'community' ] ] - ]; } } diff --git a/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php b/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php new file mode 100644 index 000000000000..0b82555446f9 --- /dev/null +++ b/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php @@ -0,0 +1,117 @@ +xmpWriter = Bootstrap::getObjectManager()->get(XmpWriter::class); + $this->xmpReader = Bootstrap::getObjectManager()->get(XmpReader::class); + $this->fileReader = Bootstrap::getObjectManager()->get(FileReader::class); + $this->driver = Bootstrap::getObjectManager()->get(DriverInterface::class); + $this->metadataFactory = Bootstrap::getObjectManager()->get(MetadataFactory::class); + } + + /** + * Test for XMP reader and writer + * + * @dataProvider filesProvider + * @param string $fileName + * @param string $title + * @param string $description + * @param array $keywords + * @throws LocalizedException + */ + public function testWriteRead( + string $fileName, + string $title, + string $description, + array $keywords + ): void { + $path = realpath(__DIR__ . '/../../../../_files/' . $fileName); + $file = $this->fileReader->execute($path); + $originalMetadata = $this->xmpReader->execute($file); + + $this->assertEmpty($originalMetadata->getTitle()); + $this->assertEmpty($originalMetadata->getDescription()); + $this->assertEmpty($originalMetadata->getKeywords()); + $updatedFile = $this->xmpWriter->execute( + $file, + $this->metadataFactory->create([ + 'title' => $title, + 'description' => $description, + 'keywords' => $keywords + ]) + ); + $updatedMetadata = $this->xmpReader->execute($updatedFile); + $this->assertEquals($title, $updatedMetadata->getTitle()); + $this->assertEquals($description, $updatedMetadata->getDescription()); + $this->assertEquals($keywords, $updatedMetadata->getKeywords()); + } + + /** + * Data provider for testExecute + * + * @return array[] + */ + public function filesProvider(): array + { + return [ + [ + 'empty_xmp_image.jpeg', + 'Title of the magento image', + 'Description of the magento image 2', + [ + 'magento2', + 'community' + ] + ] + ]; + } +} From 5c57ece41a0dd5cce0871253885c7fddb5341c4e Mon Sep 17 00:00:00 2001 From: Sergii Ivashchenko Date: Tue, 7 Jul 2020 14:48:55 +0100 Subject: [PATCH 4/4] Corrected namespace --- .../Test/Integration/Model/Jpeg/Segment/XmpTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php b/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php index 0b82555446f9..54470adc2188 100644 --- a/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php +++ b/MediaGalleryMetadata/Test/Integration/Model/Jpeg/Segment/XmpTest.php @@ -5,7 +5,7 @@ */ declare(strict_types=1); -namespace Magento\MediaGalleryMetadata\Test\Integration\Model; +namespace Magento\MediaGalleryMetadata\Test\Integration\Model\Jpeg\Segment; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem\DriverInterface;