From 8a6682c5bc42dab876e9285d237a117c4463d6e2 Mon Sep 17 00:00:00 2001 From: Nicolau Manubens Date: Mon, 19 Nov 2018 17:29:25 +0100 Subject: [PATCH] Updated documentation. --- DESCRIPTION | 2 +- R/Apply.R | 9 +++-- README.md | 19 ++++++--- multiApply-manual.pdf | Bin 72043 -> 72238 bytes tests/testthat/test-use-cases.R | 68 ++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d514a06..31dcd94 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -6,7 +6,7 @@ Authors@R: c( person("Nicolau", "Manubens", , "nicolau.manubens@bsc.es", role = "aut"), person("Alasdair", "Hunter", , "alasdair.hunter@bsc.es", role = "aut"), person("Nuria", "Perez", , "nuria.perez@bsc.es", role = "cre")) -Description: The base apply function and its variants, as well as the related functions in the 'plyr' package, typically apply user-defined functions to a single argument (or a list of vectorized arguments in the case of mapply). The 'multiApply' package extends this paradigm to efficiently apply functions taking one or a list of multiple unidimensional or multidimensional arguments (or combinations thereof) as input, which can have different numbers of dimensions as well as different dimension lengths, and returning one or a list of unidimensional or multidimensional arrays as output. This saves development time by preventing the R user from writing error-prone and memory-unefficient loops dealing with multiple complex arrays. In contrast to apply and variants, this package suggests the use of 'target dimensions' as opposite to the 'margins' for specifying the dimensions relevant to the function to be applied. Also, two remarkable features of multiApply are the support for functions returning multiple array outputs and the transparent use of multi-core. +Description: The base apply function and its variants, as well as the related functions in the 'plyr' package, typically apply user-defined functions to a single argument (or a list of vectorized arguments in the case of mapply). The 'multiApply' package extends this paradigm with its only function, Apply, which efficiently applies functions taking one or a list of multiple unidimensional or multidimensional numeric arrays (or combinations thereof) as input. The input arrays can have different numbers of dimensions as well as different dimension lengths, and the applied function can return one or a list of unidimensional or multidimensional arrays as output. This saves development time by preventing the R user from writing often error-prone and memory-unefficient loops dealing with multiple complex arrays. Also, a remarkable feature of Apply is the transparent use of multi-core through its parameter 'ncores'. In contrast to the base apply function, this package suggests the use of 'target dimensions' as opposite to the 'margins' for specifying the dimensions relevant to the function to be applied. Depends: R (>= 3.2.0) Imports: diff --git a/R/Apply.R b/R/Apply.R index 335d437..876c8f4 100644 --- a/R/Apply.R +++ b/R/Apply.R @@ -101,14 +101,17 @@ Apply <- function(data, target_dims = NULL, fun, ..., "found across different inputs in 'data'. Please check ", "carefully the assumed names below are correct, or provide ", "dimension names for safety, or disable the parameter ", - "'guess_dimension_names'.", dim_names_string) + "'guess_dim_names'.", dim_names_string) } # Check fun if (is.character(fun)) { - try({fun <- get(fun)}, silent = TRUE) + fun_name <- fun + err <- try({ + fun <- get(fun) + }, silent = TRUE) if (!is.function(fun)) { - stop("Could not find the function '", fun, "'.") + stop("Could not find the function '", fun_name, "'.") } } if (!is.function(fun)) { diff --git a/README.md b/README.md index df71716..99d3eab 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ ## multiApply [![build status](https://earth.bsc.es/gitlab/ces/multiApply/badges/master/build.svg)](https://earth.bsc.es/gitlab/ces/multiApply/commits/master) [![CRAN version](http://www.r-pkg.org/badges/version/multiApply)](https://cran.r-project.org/package=multiApply) [![coverage report](https://earth.bsc.es/gitlab/ces/multiApply/badges/master/coverage.svg)](https://earth.bsc.es/gitlab/ces/multiApply/commits/master) [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) [![CRAN RStudio Downloads](https://cranlogs.r-pkg.org/badges/multiApply)](https://cran.rstudio.com/web/packages/multiApply/index.html) -This package includes the function `Apply` as its only function. It extends the `apply` function to applications in which a function needs to be applied simultaneously over multiple input arrays. Although this can be done manually with for loops and calls to the base apply function, in many cases it can be a challenging task which can very easily result in error-prone or memory-unefficient code. +This package includes the function `Apply` as its only function. It extends the `apply` function to applications in which a function needs to be applied simultaneously over multiple input arrays. Although this can be done manually with for loops and calls to the base `apply` function, it can often be a challenging task which can easily result in error-prone or memory-unefficient code. -A very simple example follows showing the kind of situation where `Apply` can be useful: imagine you have two arrays, each containing five 2x2 matrices, and you want to perform the multiplication of each of the five pairs of matrices. Next, one of the best ways to do this with base R: +A very simple example follows showing the kind of situation where `Apply` can be useful: imagine you have two arrays, each containing five 2x2 matrices, and you want to perform the multiplication of each of the five pairs of matrices. Next, one of the best ways to do this with base R (plus some helper libraries): ```r library(plyr) @@ -16,7 +16,7 @@ D <- aaply(X = abind(A, B, along = 4), FUN = function(x) x[,,1] %*% x[,,2]) ``` -Although it is not excessively complex, the choosen example is very simple and the complexity would increase as the function to apply required additional dimensions or inputs, and would be unapplicable if multiple outputs were to be returned. In addition, the function to apply (matrix multiplication) had to be redefined for this particular case (multiplication of the first matrix by the second). +Since the choosen use case is very simple, this solution is not excessively complex, but the complexity would increase as the function to apply required additional dimensions or inputs, and would be unapplicable if multiple outputs were to be returned. In addition, the function to apply (matrix multiplication) had to be redefined for this particular case (multiplication of the first matrix along the third dimension by the second along the third dimension). Next, an example of how to reach the same results using `Apply`: @@ -31,7 +31,16 @@ D <- Apply(data = list(A, B), fun = "%*%")$output1 ``` -This solution takes half the time to complete, and is cleaner and extensible to functions receiving any number of inputs with any number of dimensions, or returning any number of outputs. Although the peak RAM usage (as measured with `peakRAM`) of both solutions in this example is about the same, it is challenging to avoid memory duplications when using custom code in more complex applications, and can usually require hours of dedication. `Apply` scales well to large inputs and has been designed to be fast and avoid memory duplications. +This solution takes half the time to complete (as measured with `microbenchmark` with inputs of different sizes), and is cleaner and extensible to functions receiving any number of inputs with any number of dimensions, or returning any number of outputs. Although the peak RAM usage (as measured with `peakRAM`) of both solutions in this example is about the same, it is challenging to avoid memory duplications when using custom code in more complex applications, and can usually require hours of dedication. `Apply` scales well to large inputs and has been designed to be fast and avoid memory duplications. + +Additionally, multi-code computation can be enabled via the `ncores` parameter, as shown next. Although in this minimalist example using multi-core would make the execution slower, in applications where the inputs are larger the wall-clock time is reduced dramatically. + +```r +D <- Apply(data = list(A, B), + target_dims = c(2, 3), + fun = "%*%", + ncores = 4)$output1 +``` In contrast to `apply` and variants, this package suggests the use of 'target dimensions' as opposite to the 'margins' for specifying the dimensions relevant to the function to be applied. Additionally, it supports functions returning multiple vector or arrays, and can transparently uses multi-core. @@ -44,7 +53,7 @@ install.packages('multiApply') library(multiApply) ``` -Also, you can install the latest stable version from this GitHub repository as follows: +Also, you can install the latest stable version from the GitHub repository as follows: ```r devtools::install_git('https://earth.bsc.es/gitlab/ces/multiApply') diff --git a/multiApply-manual.pdf b/multiApply-manual.pdf index a1f26396885bcaa03cdf279c9f38176bab2d08b2..c1ab41cb14670fb7d596548390f3070814cc0963 100644 GIT binary patch delta 21752 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 delta 21532 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

Z+V16L&40N7+h;Ylq!BcmC(4;q4p zuc_xJNtpnzGZGa{y_~l)uAd)IJ=zbP29_cb^P()n7?C8DwOG)a39^`aTn--+dzktM z{(lMZ*F^A&O5}=Ovtt()^03pNKLZx)NvTc8P&wqlah|3o%VRJ!t7dpweo>H8*R5txM|Z%x5yL>7%{eCv-2InH}E;$=B950PS*qk*%!D+&iz%%@!G< zvAjSDn5eUB3;CdV@|kKWJcEA)&mt~@QZ4>3k?jX&FEbZbI& zv-@0Echzj6W`wT>P{<)ENhL(mH-Gq<*0FDYmagx@${J;Oi@Akc$ZC`{xGv*bJD3Eb z$=RBqe%;`omi4x!{|v}rD9BFU;A<9vY9R&QS0S!8uf8WXswJ#^4^tNAu-MQDW8p@o zc*TF()v0R2X3|pqkoFtX+Hhb11oQ4E-gT^i8*P@4K$%s)`-+Up7s?Tu#($6gM7o?p zR?%~!D7ojiPekv$G1--dQs(-ECvn;-auf`CkKavU?#iJI^hQpvJC*oF<6R(;8+@c^ zC+BB`phgDY5jo=YmVz$44*bz`@vzRxdFu1#rZfUd(JUo(%jz-x?(}LMYB?&zNe8Xx zIZBs>O{*0=ARNESDs>JLUw_dEf=t1K#lLY2+K3{@|Jrt%f&e1F7qJ^3A%U?Z8^)BK z%=yfGdWx6lDxo^?vNjY63_rRnt{Rq2-U3DA3JzY^Nnm?dDI z@)dRiT(D*d>E4{j`31G3%kP8OH%m&}6_1r@vwCcd!qxtnogbEJSAQxG+n@$q97S3F zGD51Z)c?KPcaw0tPEw17jeHzsn<}4fK7h?a0;lwpYMLXca2EU;E200@8-edVzZo|ROKgmZ^x1#jw zlqcv1k7i#FW;(+MHGhZoI~_N>EWY90Jq^z~o*^MTbM{g`sb zg4Ku+B8cM(e?YMw{R+k4=H2P;C1p5q0d>_ZsOWCDjm*M`!hgZ1MQMk8hJ3KFhDoQk zc?qC+UgEW=GOq5DJ^60cCvkGl;>vg0_PmjdlP$QnK(MMDKjy&esjf73?JEUd7Rmj5+V{*g=F){A`yc5P3}KKL~Le8hi!BZg6B=D9vAnx1WVM6$(w;lWn&7+_XRwv448|&f&?oqx_SRv+tW(%fsHN zw3`)ee3m-3H|ZaW5iuS4Y^`^Dq>b20C5rXCnM5X`#soa9futGd)@6F>!bIFSdHj`; zl~0+^L5Ceqv;a1h#8;O|t=*(=)F$^2IQy#RpD;txlCMCCEf~XDViziR-J|PH$nm`P zzKTDV^MCPx0!HoV9EaHO(w$kF&^nZ2?CSQvNhzHNuh>vY$Ee(Md?u_uZ>X`{DU+JR zj6-HV(Gg*%Cb(!+p1RpTQ=BoklEpLkj~6eVGH*4;HgN0|rs39qGkr29Tkk2MOnPR0 z^Z90CQ#xf9lV?(t6@m9s_-`!Kp4wEUFb@&`X@%Bh=M;4M&dqVTEVIy99iH4y*NWjSm8@&MQB|HHSY5Zw^%7b& zmrX*HY#!&bJv)&bJS8eg?iqnfiCmfMQaTb+*_CwTy~8Rf`HbLNJPuxw>164FP`z!- zr+*=1#n;;A_qAfqW!$~TZh%>LawcZkf$gykbb$=niUg0irzSlz_qw^U(ZS&^-S%*~ zxBwox%NIgbi$kws6}tl!Te)7-q@ALaG~1AC+jM+|ig%hG*QAZ!I{<$v9<_0lWeIYt za?njM@5qrC&r=y$3&dnk7W%bDm4Cy{P7n>jPBLFVdyu`usY^B&IoMpI1WrUq za$-jy+y!2#+fn#5<%9t~t>WB7+4SQ~0snk1dQOq33L~{u9lO>=kX{wiE`lu&{h7zM z=TW_u3Nt&mr%5q2fAQJ(65V=@i-1KMCybWsb4Qdq=AbndU?T9kr1)VBfHF>WQ-5ur z{W>%1VN)n%!Qg-~nq1*QnhHz>Rf5txz8@)gd6VJ{tOldZ1CUwWL+M}S=e=sDmwQ1{ zB#_pRWkw(tYda;&5c(`-dmgy<5=KGSK8dDKZA;OJp(nQBR|9vr3oQl7sQ_J@zu-p) zOLsU#AkJt9$YivNi>|0B5DSJB3x6(=H>RtRZ{bnr2#pVwI5nWlklIS!E>S8_kPYEn z@jGG>v|@Sm#|d!D<7xu&gMhx6I^vW6C}3zXmLTw@^IgZ|cf8|=FQ?c2nq{Wz>vw}o zrYCpJ;#B;#5meQdl*8;71-DetY_Z&k>CU1uytd>w7B%5%YoffcbX4sGYH8wn7R#Dca<}~^`8GkGXkKu^*kBCxD z1wcYewJ&vyjxiTC?H{@^Spta}G@!4IXZBB2Pn?Y`jA_9u4d$=l(Q%fLCDevi84)UM z`^nVb>NVGb%}d}_(39Na_@P$&?( zNbpCRLDQ-0n=1)vn1A_JvwS1hGPu_COCdPg@C6NP1*u!MRJ}p?j7;OY?b}$T15x1P z2UtMX!3S1;yG-X%Vw0B$$13%LaC5dxsDbwbH-8(s@^#y5>nh;+gV3hs*~A+CGLyRJ z+nxnps*X%p5S7HTLuSz8P$*WZTqZk7;3M`qLy4H@N)a=$e}7{nfF;OqY$-T@2ZJni z9GDB!$&V7GU=g`z-1AO#GwZ1^Ri8maYKXM2&FZG(dg23*X31QEL`%%enTl2hXKX`% zLay`Cq4K@})bYBp(o6%Pa2VmEh3e4s>lp|Xs_0Y5a@qJo~5HvE1SrV_9 zKRmb4b+!Z+M1Qjn`t@0}5&SytQ+qBjLLR!_rs+RFFclv#201^K-Z5mKfw3Mhk_? zvkLaKvG#bMUPniiYj7ed4cgfZp%yD#*6^+%6Ce=_)_=)+YYIJld?lydKpuzQPJWRV z9P0P1vPp>g9I@N&Dg;ZiR?chzR3~dbNy!WM%#Q@SuW7P=10FRttOerbW5&3E=HQe2 zLb7QdeD0_QRdzl`#1Yq*I~|Qrny*Um%>TBZ%&%2OS$C3}>Khh292|phhE8U%6)=}K zpE8%itA9`O?Wcpj5b5&RfSskXB(=zdm)1tWdX-ZAq81fnHRkJVCZGoece{yG>jcA> zS1)Hme~%ZdKZKDccbb~219|HtDrfkrm=?*q8UjepCk4u`Va~5(Wq#C2mW%KrSYu-V zOHrA36Ndzy+FCADndN;CP@mXmr!;u?N@URfbAQ!Y={M(C=dvo*X%$;AmD9-VqpG-x z$!2$MLtl5ss1bBK%D#xJc6G)qr!xpVYMdti!Vmdya!w9`3=u5F38SDa)ZlDw%2*5V zyt`8Ki1qLh5wkrlTsJv3a{TDu{AfsC2C{4wCAihXumV#SRq}m>K3u;_6IhgqO3?E3 zJb%}dUcJh6S`B6K1{(8SvKET>b^*9EtVMZ+9f{9@w2vCk!_wSH^*c|{{L!qF+!0G< z76avYGHbyHOJ#deJ_ol{4HglKz6V2gB}^cD$bUXSug+w&6a4`GB_}Ab7`z-YsE#9? zXybG;dQ04s-oWZ-h3FJ#Bci@~5;<4@8plDWg;WfVOirUjK`er2b9QSo$=#UpD~#s(3O_)?kV(YeQfXk- zP^7j24wk%!Ivs05d=T)(XpM;v5VidGG=I&Up@TliS!u3j6JYL|hVlmPrGMnaJ%3e2 z!7zGwEuh~jSttSH_9}Rd{pt^jg*X-aW@Qs`cjSyAy$G@Br389sP{P|9?I#nt4JKSv z(ra3q!qrQMSg^!6+lZBaYY*0;{W_6BTK*E-ScmK3=*JyL`%m!8Z8Pw`=auesW{RkYwuc+v&QFSv{zNW1F)vH@qZM4L``{;I)+Aa znT3bs&y=4%Q=*ngE4dl4`na(rNkQ$d7XllV`vEU96j-!oW$Ow+l%P(| zM;VMd_WC;$ybI*CGtJCiXEf(pNiM+}I{1KeS%URz{%IRe)RM<(pf!XaOm$0|xnsEo zt7{8ad`m5hU*mWH;eSJQnCcRITRG(=$D<;QI3!RnX6Wij3_t4GV*B@l$~=+<<3~C_ zVZSUU7S~0M6VkR~@B~^Am;=J11ZZ1wW%_{t{-UJ3a3s_y(Ts&=~$J-A`dZQWOnW z`e?7#VE8gEl5Q`^N>5EViP&lMkmkCW^Z8>ZacO+*(XZr%4t?iSUY=LQ9J_fW>5h@# z{fQKxSPSw~%idbr`UvYT`Q40@YK!pP83~~+apgnFi|&UPx9d`L!+JBde?I=Y;uD*$oQA5x;_JEX+}63(vy@@V{Sz%!MQ2}zUS{&`Egam|;SvZho%IZ1S$^sXoM#DdcEB%L zYc;GvpJa>Z-S))aukttBP>NyQYq+-cif{f$8D`hqd1!eEpU8mKJtzSj{=|)M5Lb+Sq z)yFW+jXpAd9jpG?uz~-_KVKjo&R|P7JWhOnna~r_kx;&Wo(w@|Qebj7Wfc?7ukGOv zgBOF886tyUq}j~GL_A!KEIDhhMzQw97X4#;{eSX(9d>FVBf{39G3(hWd$8x*Q2ORh zGh2Oi3JH}W0=6yF6Zcopm6@!3ng>+p3uagDqlzeW$rGSN-bvQ0A1F+Bq+dXZ;|vJt z)=&DnSXVdeT(z91`^6NiazKt(I>HyC;tacTvkwOocqVd0kkt0NHz%y&Svgi`Y>+|6 zDSum;)Kz#_)WC-w|0ad(`n-u&cjcz*%}$pwyh`f5c@Q>6#^K`cTi8!^8_%@l{V5R6 z!o!lCYCy$yn%7m<^#%dqdnn<3DSzJ> z_#y|H3YPno#Tb7pl*i={`P7w%@JsZK^GY!y{Khh+4VUk3%BF)jFFs>7sUTeoC4W5E z>DgL`Ru72d4I}v7S?}*vuOO>WlNmK=PwG?u$RI&Eb5fjkCTZ>8{n4~;R+3> zA0vW)t29jOe;3LqiWYi!kmLUF#kV<_K;QkWGo4iiFS9y*dm&ArUZAnKFn@~yRvK@A z9M@hwu!StNR&f!zlA-HQ>$MN*U(Vb0hXEQ=`V_b697$LPCa;%VZwW+rZMxpXr!=cK z+df3@l?ScYWMJe`tx$Rr>U7+J7;#2>7`aA{8fDHgcJQK znCDJ?l;1o+GLX3%Ev1}+zJJQ(pu$sO&Fo)B8Q5s%%Rwk zaM;&H!%>ri9Anw4yJ|^hu;D4=+-IB1=VD}b-Ucz=zz5gBsU3gzk)@#@; zyy&=VZap3oWq*OVo=^6chA_?jmLmXi8X0b{&V#tg)J)|aK1m(U-#%Dkb{K&l&bub- z)z9CwQt^k98vL0r9A~Y%8d|_PQ?St0>kwtPmKPE{d6wIfA))s%!>uv4&Lc|!}{ ziu3c-KyYCMg1NcGjN)hH7h5)KF7a~=#xkiiBW0~}X2uN{SG0v4SLp{|b(Veo6ip#u zJ7Cm~I3ISbckqrDHdcl0t+C0)a=(pSMrt`$I7Z?tB(L;NZCE-#@Vt}+$u-$y&RuC} zKJqAgO@9DhCKj9iC!0ndTnX$tQak5340>zoclUa)l`^cW`y7;MtY^2O*JM0@#D-P+ za!FVoUZ^5n4T!#`O6S&jv>B>5q&U59_(;$WoncjGlBr0CH%MLd@5%U%mZzW zk*TCEbv&NpCT@}J5}a~Nz*0%Bl$n&TqV&W!tbYPmk$wn8^4a8=$KI@oaCx z{EYI49!K?!RpRowaKuyjAU!0nR|7X}%WRt;^4{-F{T0WwqPNML2$P03JoYhhrcr8X z_J73V@9~D+UtlzG<@#p(_Lo(aurx%Ma`D6>$S;vzNf;lz5FZ}XVUTZ7F7M;)?kw)| zFMrhBmY5QIN0#=dkA?S%`=YZ+Z86QnQ~He_;pkz9KYS5oB6UA>nm~Zyf0t!|vTu;; zq=~H{^Y~TOCzynSQOr~WfpH*X!$jEGXMPd2G6!MM_!LS*tgf^V@$q6tbDZ2TzBHC* z>Fa&Hokk`IM8w2oy~K)5v?E|-CJz6el7Bh~{#GuQYbg>ZL%wHBd+)z_$(SY^2n&Fn zCBUOuz(4TDZM`nP_+B>vZjvlW*8{K9FKp=Pu_i>m7E{bDpw#BrX~<_hbE6()r~sOYa^@dJBW<84-E1F zkwsdGYeQQX^2*QjP#?NXFo;JPLprH>$;|OfZ}Uj+%kzp@HK^9rhJyh!D8twxCH67i=Z*8(pI0N-X0n(z=2Ra6sx zI@b&qp;!W;&<@hIA`f5gMHp~W*I!PV!I$_-?8E)otu{8cK&(v$Okm6%e^NS_vkKbK3@ABr+ zL3kfWzb;_Pe4i~ZRgn_)VMEgZd+)DwWSnH-{fmj({a6Nwc94KK_-L{(ZxlsdBcJQU z@e9E&A9U%^%LpEiH}S#qcYpp*J}1f`D2daE4sN)>_v8q{tvFyUck2FZNcO5$w}E`pG&`%EBE`h>3%BrG7!+KGI`3yYid%Ucl)>y-SV;Ho?&gORKZOC#(Y#uia^^A2KWbq_=4{KL($^CAz&kMJ zE_{8>)rbE?F7|EeMDO6^H_R^K*4%)+<%h_9kjG$v>m$Ay%6}OIxO4F@tlETlNIwn| zBseZSpFxA}lKAt>q6nH$qn_R)Rt2f!aXpPwIulXDv~41LFI$v_)DIg1N`lG!uC?5PU-%ew15pdY+ibx*yYm;FBn}+R zT}HRiT-&h4Pj zK*SS}Zrh$xI}cx1605g(lrT;*f}W@%*KcD~U%yS%l@j`omx&&*49XJr_@Th|N10AS zC!F#NR(m5(9ryA@rCqhBORl+^fMKe3szGQPLK1r#6?2XS)&PDabtyUZT@?I zIA2D{f%4tkq{~WCPzc!@w>ol$ zlNd~YHk6%J7NE2E-NkmK2#rpw^i!igOOdoPr54{&zldkXM2;(>Yh`ax%VKkRjNuCK zI*~9YgV}>m@FfR(C2}TVh3x$9AOs@Y+3QqLsDFn_Ie_!iDN~=6Spc9Y0$mm2IH#%_ zg@3X;N}Xs0inxh{P1#OMM4vsn3lJV7iU7l)H19l~hU$)BA7dErk8~#lct3&c*?#S~ zByn5)5d$No*JR#+CPfTr=Julz-9}Ly*WNeILEDfskXC88Wg3a5Bg7n2czcXB2y-Xc z)Kl5%+a&UvXn~1i`L(=d007KvQYw+xLw}1Yfhj7ITS3r)R%(3!(dX=*Sf@N(_B0?= zLp(VVf}5$)P;z$$6XWl-yB&xkUz%1LVg8KLyf0q{*M7d96U!eJs)B!rEQ$GhnSR&k zm*&L+;9Chaescs z0=meXgFVIl)_vw+a0U2M0^m`Z`;sF|c^*K*rk~r6o_JTG5Y z$$YzvgS(U2eW>4vE_QI4Ew+Nkh{Mhk$q>V9B}F}=YvsVG;V35hAC1_NxPLCVGvo(M z?@2);mrW<(YTP!EE_`mfS)Sn^kqZu{*Yqt>3mZ$I{d=kAX-#%=?{doSfmr})f~M@H zV!Q&+b?Z_AQBF9h{U3X;mCkxitLcQlrF-I@TMsI^uk~FVdAREx)bPeU%HN@G)?OfZ z4)2(_Zec>g;8o8^$ajWXu77_k>!)|T%GQ9(ps3{yT1D;kJC0t-41q3(J>JAgX`uO$v=RVb~;$6kK*EHz8k?Y2JJ&`oJ|s``}3%idp zB=sZXsaTj{gcmY9BJkvB`5bkAfZxImQs^CEY#_%xILCG3CBYbhl*dn|Qb{h<9)QGR z#!9A!9uNrbM>8Bv27ge|AY&zP@U}@`a8ha-Uz<{EReOGNTROJSTpn?XRU8o1Ud5Lu z$6`3wf3qCm1M-J;&DpoyLDR@Qb_tcVC*z~X?!ZL$0Zldbu);q#*oF?$<%p0j>~JWD zuLT!?;BO>1@oIz;8y6t zGdPcn6l)J-C^Dt93vx9k;}HO*hnAVoWQFM$%RPGJ?o!Zb0b%-1Nqbm=T`qp9A5eWKt&m?eTMO9#FrxCVkN54 zd67Nsm?-5M6@T{tWM}4EtL9SgQ1Z>p!)32LpW^Bp-Nh7FuAX#=f2%wo>v<_eA(LQW zdzPUx{R~L-5c_p$?tXc)M?o;5dwZaP)>bdMj2VX_fVK%o3x{x3KKk*{Sy=EeC-ds? z=xs*@dhKQm9xz*W=ETRcbhUF!_dEx#p{`-gD9VDf2Wt19ZL;LL zG__MIV8e7%IG7!>vebLy1C5U0lnU9KWeT zjL(U(WPc{191n;*O?MfUPe@m6BZ6`oE%P+@;-|KF|vn%#hV`EwD zTPB_~0VlkhoHxNZMk0q!vzS~hJYS(?Y~9U73*Kz+$DdQ8nj2oI8y9_t#f5T8RkNxS zM|m25BWv*{jKl!K|LboEFO^Q0IkG3~GS|zMBU!usCBI}-E(O1dW@^dmSrbgGxr-e!gaXv(s()USPePzf>^KrkE z;P#p_ZbvdOSOnP@+ajghrk#}wCY<}ESCn=$YEf&PP(i?rL#DlDX#Nf{U6-Yov1iS3zTU6dKqZ!i z5{-Gg1!;hDO@s6N(Hn!=Rd>sVL}!Aim#)};nZLQT9v*~ejQ4$9?zZ&9Ln)iF++~v0 zhNqD5;3GuH_sq{Ls!l1m`?{Hmevd5wH5Y$gTPBvaO59NNl$ETvtB&Bj#_x$-GEy@X zSF?YaS7mE%UGB{>U`QU>YC)K=0_`%rSiw`T$-e)?fPCgcIRS*7Grnt zPH6oxK~Kj&L8U+t7Z_B}s{OM1=eS2v3Va^PBqdfbz?kr;q0QJ_KbfG*%^;MYiur%S zwKu|gN=2|g*6RvFA)FZWS`Je2{ERXYo{tUdcX(KbK?Y^Q&+t>byp`#AiGR6b7uXGh zrX6<}f5K8_KEP(7#4rHM2oOR;yf^xUtu#HPJLVQE;KskfFLlZk!aSUd!-6&aAnsyJ zVGLzg!9WTb%`Qf*xuHyKX!)F~oBn?~h5=P>hVpTIY)f+un}&K-S14HjQ6uwY6do*CfN!n(pjW4NjZ=h)&>}V9_RN7HGXQ_bwAsA} zhi#4DLUc@&M1#w2;1uj7#`|$XFdMk_vry=bGP9Xr+vbj;nK zgkZ#qvX&}I%9+j8SuoW(meb;|G=Dx0RD2{tc6bgt+T<~V#dX-m`VlANv9TsRFy}^m zjPgrk$$;Qw^hc$0?}lo^Pi%kYng^GsCZIXbXL3i7B9Ko%w{)AcNCnR;} zOphQcw;%aH+py$bmZZdZ2}`(JVkd;en-V_XgGanHvv1I;(rSD79+g#v%u`?uh!#%8 zS1)Z%=a1)Y43}Ct0HzD;9GXfM!@R*MWw$Ond^+pq)jISQTNma?qL9V~vGgwagpb3n2Yn9^|-@;8(M z+)F(yMh~EmHyq7wX^*D8$&aa!vW5L?r|6fzPC%jIEU|#H(TMq@BcTKQm6Zq;2c@L-^|qx?3B`rN#6g4ttmf2&aY(Ow zOkJ>oLK(*2#=fF30=1S!<=nRFuCc$pNT#-p-N;7=`FZaFrFgQ6(lAs({^lVbs(&m` z6fim40p>91;r9Q%s4QECMrC5W$vw(k>E`@5vq4==!Gye)(h#Obq zqU2>|!#XA~6~Td>y8u%4^xVI1{isfxc7Cpe<@n9A1okUq9WYFA7<~HTc%=eSsw1$^ z6R|;=tNVp{Hu3G-*9Ek3!&HJxv``>s+)oiY+mGGy<0 z?}y}@Kv#dYnkzALH9vxJ#plOb#8Q1EJ_G3xlyJ%D*$j(t0B$w2BV0$dIZNh{&j2Sa zf-`8)(zr`_fbXpak?g_NW7su2?-{W{z@(?1k!Y+Ujj?T4JBnPB7+kWJ#rsexl3lcL z;~nd?&WVE;o-?x^d&O$|qKUMbZFWc#x@Tk>BDH^a=JJs>`q+%S1Gvv&$JT4Plms*^d6>dLcXeHN1L-LwD$*>eW zN9>^>&U?YqNy{eI>Rs>5WYAA%_#FnLifV3&qBlR3-%6%0A3)ntd{H~yzpa6M8Hx}J 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