From f87d614b42d6938bd989824352b21ff20314571e Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Mon, 5 Dec 2016 13:50:30 -0800 Subject: [PATCH] Address some of @scribblingfox's useful nits and suggestions for the Pipeline chapter --- STYLEGUIDE.adoc | 5 ++++ .../doc/book/pipeline/getting-started.adoc | 28 ++++++++---------- content/doc/book/pipeline/index.adoc | 26 ++++++++-------- content/doc/book/pipeline/multibranch.adoc | 11 ++++--- .../resources/pipeline/snippet-generator.png | Bin 12073 -> 12324 bytes 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/STYLEGUIDE.adoc b/STYLEGUIDE.adoc index 5759baea18a1..98b59a43487e 100644 --- a/STYLEGUIDE.adoc +++ b/STYLEGUIDE.adoc @@ -30,6 +30,11 @@ ____ As opposed to "the Jenkins cluster", "agent pool" or any other phrase to describe the collective set of resources provided by Jenkins. +=== Conventional Terms/Phrases + +* We don't "reindex" we "re-index" (note the hypenation, see [this comment for + why](https://github.com/jenkins-infra/jenkins.io/pull/465#discussion_r90798432)) + == Syntax/Formatting Below are some tips for keeping documentation consistently formatted to ensure diff --git a/content/doc/book/pipeline/getting-started.adoc b/content/doc/book/pipeline/getting-started.adoc index a76a9de64d23..48c6afbf094c 100644 --- a/content/doc/book/pipeline/getting-started.adoc +++ b/content/doc/book/pipeline/getting-started.adoc @@ -18,7 +18,7 @@ extensible set of tools for modeling simple-to-complex delivery pipelines "as code" via the Pipeline DSL. footnoteref:[dsl,link:https://en.wikipedia.org/wiki/Domain-specific_language[Domain-Specific Language]] -This section will introduce some of the key concepts to Jenkins Pipeline and +This section introduces some of the key concepts to Jenkins Pipeline and help introduce the basics of defining and working with Pipelines inside of a running Jenkins instance. @@ -76,9 +76,9 @@ image::new-item-creation.png["Enter a name, select *Pipeline*, and click *OK*", -* In the *Script* text-area, enter a Pipeline script and click *Save*. +* In the *Script* text area, enter a Pipeline script and click *Save*. -image::hello-world-script.png["In the *Script* text-area, enter a Pipeline script and click Save", role=center] +image::hello-world-script.png["In the *Script* text area, enter a Pipeline script and click Save", role=center] * Click *Build Now* to run the Pipeline. @@ -91,7 +91,7 @@ image::build-now.png["Click *Build Now* to run the Pipeline", role=center] image::hello-world-console-output.png["Click *Console Output* for the Pipeline", role=center] The example above shows a successful run of a basic Pipeline created in the Jenkins -web UI, using two valuable steps. +web UI, using two steps. [pipeline] ---- @@ -110,15 +110,13 @@ node { // <1> [[defining-a-pipeline-in-scm]] === Defining a Pipeline in SCM -Complex pipelines would be cumbersome to write and maintain if you could only do -that in the text area provided by the Jenkins job configuration page. - -Accordingly, you also have the option of writing Pipeline scripts -(Jenkinsfiles) with a text editor and then loading those scripts into Jenkins -using the *Pipeline Script from SCM* option. +Complex pipelines are hard to write and maintain within the text area of the +Pipeline configuration page. If necessary, you can write Pipeline scripts +(Jenkinsfiles) in a text editor and access them in Jenkins with the *Pipeline +Script from SCM* option. Loading pipeline scripts using the `checkout scm` step leverages the -idea of "Pipeline as code" and allows easy maintenance of Pipelines with source +idea of "Pipeline as Code" and allows easy maintenance of Pipelines with source control and text-editors. To do this, select *Pipeline script from SCM* when defining the pipeline. @@ -166,7 +164,7 @@ on the plugins installed which explicitly expose steps for use in Pipeline. To generate a step snippet with the Snippet Generator: -. Navigate to the Snippet Generator +. Navigate to the *Pipeline Syntax* link (referenced above) from a configured Pipeline, or at link:http://localhost:8080/pipeline-syntax[localhost:8080/pipeline-syntax]. . Select the desired step in the *Sample Step* dropdown menu . Use the dynamically populated area below the *Sample Step* dropdown to configure the selected step. . Click *Generate Pipeline Script* to create a snippet of Pipeline which can be @@ -175,7 +173,7 @@ copied and pasted into a Pipeline. image::snippet-generator.png[Snippet Generator, role=center] To access additional information and/or documentation about the step selected, -click on the help icon (blue question mark). +click on the help icon (indicated by the red arrow in the image above). === Global Variable Reference @@ -183,7 +181,7 @@ In addition to the Snippet Generator, which only surfaces steps, Pipeline also provides a built-in "*Global Variable Reference*." Like the Snippet Generator, it is also dynamically populated by plugins. Unlike the Snippet Generator however, the Global Variable Reference only contains documentation for -*variables*, provided by Pipeline or plugins, which are available for +*variables* provided by Pipeline or plugins, which are available for Pipelines. The variables provided by default in Pipeline are: @@ -191,7 +189,7 @@ The variables provided by default in Pipeline are: env:: Environment variables accessible from Pipeline Script, for example: -`env.PATH` or `env.BUILD_ID`. Consult the built-in +`env.PATH` or `env.BUILD_ID`. Consult the built-in link:http://localhost:8080/pipeline-syntax/globals#env[Global Variable Reference] for a complete, and up to date, list of environment variables available in Pipeline. diff --git a/content/doc/book/pipeline/index.adoc b/content/doc/book/pipeline/index.adoc index fb62387a0f84..237564034534 100644 --- a/content/doc/book/pipeline/index.adoc +++ b/content/doc/book/pipeline/index.adoc @@ -81,14 +81,14 @@ for aggregating test reports. Jenkins is, fundamentally, an automation engine which supports a number of automation patterns. Pipeline adds a powerful set of automation tools onto -Jenkins, supporting use-cases that span from simple continuous integration to +Jenkins, supporting use cases that span from simple continuous integration to comprehensive continuous delivery pipelines. By modeling a series of related tasks, users can take advantage of the many features of Pipeline: -* *Code*: Pipelines are implemented "as code," and typically checked into - source control, giving teams the abilit to edit, review, and iterate upon +* *Code*: Pipelines are implemented in code and typically checked into + source control, giving teams the ability to edit, review, and iterate upon their delivery pipeline. -* *Durable*: Pipelines can survive both planned, and unplanned, restarts of the +* *Durable*: Pipelines can survive both planned and unplanned restarts of the Jenkins master. * *Pausable*: Pipelines can optionally stop and wait for human input or approval before continuing the Pipeline run. @@ -125,22 +125,21 @@ image::/images/pipeline/realworld-pipeline-flow.png[title="Pipeline Flow", 800] [[step]] Step:: - A single task; fundamentally steps tell Jenkins _what_ to do. In - order to execute the shell command `make`, the `sh` - step would be used. For example `sh 'make'`. + A single task; fundamentally steps tell Jenkins _what_ to do. For example, + to execute the shell command `make` use the `sh` step: `sh 'make'`. When a plugin extends the Pipeline DSL, that typically means the plugin has implemented a new _step_. [[node]] Node:: - Generally speaking, all _work_ which is done by a Pipeline, will be done in - the context of a single, or multiple, `node` step declarations, which does two things: + Most _work_ a Pipeline performs is done in the context of one or more + declared `node` steps. Confining the work inside of a node step does two + things: . Schedules the steps contained within the block to run by adding an item to the Jenkins queue. As soon as an executor is free on a node, the steps will run. - . Creates a workspace, a directory specific to that particular - Pipeline, where files can be checked out from source control and work can - be done. + . Creates a workspace (a directory specific to that particular + Pipeline) where work can be done on files checked out from source control. CAUTION: Depending on your Jenkins configuration, some workspaces may not get automatically cleaned up after a period of inactivity. See tickets and @@ -151,7 +150,6 @@ for more information. [[stage]] Stage:: `stage` is a step for defining a conceptually distinct subset of the - entire Pipeline, for example: "Build", "Test", and "Deploy". While stages - have no bearing on the execution of the Pipeline, they are used by many + entire Pipeline, for example: "Build", "Test", and "Deploy", which is tused by many. plugins to visualize or present Jenkins Pipeline status/progress. footnoteref:[blueocean,link:/projects/blueocean[Blue Ocean], link:https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Stage+View+Plugin[Pipeline Stage View plugin]] diff --git a/content/doc/book/pipeline/multibranch.adoc b/content/doc/book/pipeline/multibranch.adoc index 87094a865a39..832b6f17aeb6 100644 --- a/content/doc/book/pipeline/multibranch.adoc +++ b/content/doc/book/pipeline/multibranch.adoc @@ -22,10 +22,9 @@ more dynamic and automatic functionality in Jenkins. The *Multibranch Pipeline* project type enables you to implement different Jenkinsfiles for different branches of the same project. In a Multibranch Pipeline project, Jenkins automatically discovers, manages and -executes Pipelines for branches which contain a `Jenkinsfile` in source control +executes Pipelines for branches which contain a `Jenkinsfile` in source control. -This eliminates the need for manual Pipeline creation and management, as would -be necessary when, for example, a developer adds a new feature branch. +This eliminates the need for manual Pipeline creation and management. To create a Multibranch Pipeline: @@ -57,12 +56,12 @@ Upon *Save*, Jenkins automatically scans the designated repository and creates appropriate items for each branch in the repository which contains a `Jenkinsfile`. -By default, Jenkins will not automatically reindex the repository for branch +By default, Jenkins will not automatically re-index the repository for branch additions or deletions (unless using an <>), so it is often useful to configure a Multibranch Pipeline to periodically -reindex in the configuration: +re-index in the configuration: -image::multibranch-branch-indexing.png["Setting up branch reindexing", role=center] +image::multibranch-branch-indexing.png["Setting up branch re-indexing", role=center] === Additional Environment Variables diff --git a/content/doc/book/resources/pipeline/snippet-generator.png b/content/doc/book/resources/pipeline/snippet-generator.png index cbcc6a4f60662cc55c34f41c8ce1b797539383fd..0f89d4ad5a48825691f05ff2d811b11ab035cc19 100644 GIT binary patch literal 12324 zcmd6NXIN8Pw=P>YxGl&=1fPl+!ep?e5c&+ob#M}?~l9w_hdZu#ctB?^kaD4s)PwS6WxuyAcHSlS^;@7>4nuw1Ga89^_2v{cxO-8zdjV4Od6 zyV7WTe}1+Nubg(CIto&~5VZA}!pNazSUsKO?TcG}WbWR6(qMiN0J5WYdjdf=p<${ZmSoXyo+|#2+$WsBv zig*2<3;eudp`@V5Xtyv7a4F)eG_YV?k{s3MpgEA%G_WiCbl9TILP7BjQBd~EcF}{d zPUt*upxqxO_z`lbcDf?PN1bUte5hP6mHrX%8wJHwC(D(Zb+7=4xqAI-Dkn2h+^Mwm zz&8wGZWg*Ig-?QH&(__&i~6d#V7HevHx%4_-puk`B9bQ)PSAMqH&+f{?dXZnVOcl7u(`dSsO^yi8Cv#DUKf$eKuKw zsLobwt&jGSN{Z-5AK;Wkj9^8)zC=3+1d>OO+-yA&Nt-^@toB?tTb>-aCDCX;lH3r* z1>V~%F-g8cpXBZ2Qz!ZDJK&A0T9y``PNx&|5{WTJ2c(_8`1GJ*RHyEae5wrKad?n=P-!w9V1{b7mt!{2IB1hSc3Ib;v`~2|-I+78} zj{!frir$MZcU^q%V0Kn=AV$J!Np!iF%%+MaN6J%!^Q5NyRDt1D8}aSOCquID{B&EL z&E`z~AiymPsqdG2IHA_G+cXi=knCU?7>_QH{L_36aQgewvT!-;lo-6Lw3NS{edq_p zr<%uBbctuMhBZMy%g-gGS=UFP>zgZ#$gZyX-@7_Z=0o?e^Anc_>-}3<(?41QLC`v) zuVnpv^QqEi(gr`>rHcVoDj;Eu&2T6uCnqq!HJ%WNc-GH2zQJ83GbR7l$pB#DG_mgX zcV17Pz5aGy4E$S!ON;4?=Yl}xg3D!A=N?ARa79h`3-q)==z~B>xAo-1ey@h=*VrpO z!%NU1yAmaW3)9T%gybMCC&q1RW7XXYDF}?XRnNd$yjhT?!jJ@VVPe|fd!u0LYU;bd zyGm(}ADMgNxty_st^(4_IS5Chi05qUt@xgblf$}k#&p-Zuw~8%d*s0kkH-({S(Xt@ zglmA?vG!Ob@bl#X5JQ-egj@N)0~6t8;e7QUu@Ag`f*^;l>D*zih5AX(hFH##=_UdF`4d48GZxjwd7r$=5ZTywSU2E*<=xAhQq^3rz1vHUYC>+TJ zuDm=mV&W-oT!`EIcz5*@{XHQOp!1#&@>%xw_G4FtN88^!I68&{S5#C~c(|n)VBJc< zb{mtlw6wFc^YFMAeswkRp?$P&;fUSCUSK8MOtpK+f{^b|2gCbpBX{}E6~kRxyPqcC zwJ}Fosw~cK-6VL8>sjz_2cs9xD_!^vR!`g;#LQcM*97bhU}izsyz7{d*SCDl&ubE5 zTeRbIFgi9y!0zEDTe@gQP;tro)TNDJ_48IGr z_5vco-0b;g_u86H9eM4~Nw6_XS~R#gyKR0`iFAS+@`URRSBpKa`5xUcYiBjSVeDZC z%#u+_yQj!yCT{|6YzDLG_(vt}T72gKOzbeCAO5u_h~Qrs4J+~|xs)Z3Qmi9p>7wp5DP?m773|At~gdo|H=2i7Jexd~xZ*pRbUcfG5 zKVrW^v8XM@1Fo!bqT&9+`k42Kim`IjMI+d12+z2|o}1EqrM>{ZGFk$1;t z3!Faii>}&~6yVm%tydtnl?*I*irLHN-(6~7j1uhqxhh;9&rBbEMG&Wo-hJ2GxOhdx z^SKD|vWVn<)ivct#i7XDs~z-Lw4yc3zb3A_>Z5EHyQ*b zZo3NzZyA?vDk>-pNj6xUOixeDLg}!I2g@uNW^X(8bRgDU3&+M^UF%M;^xzZM9is-d zF}ol3#ltwk4FitJiPv$Phd%@r>SH%IBR?ocD`saIi5tZKHOOIgseWN$La+(nrN-QL zepP7QyQP(e2Iwv(Vpl5mmI5@?*6c4fI;5iix0=<|C+!!qR3Y(?I}*~My^3qs4y%W~ z6>IN4F24iEzAml`!Q7e6sv6;6t?qqYs8!G0V^ag2aDT*h>0)&WkEb@ZJPLdX$Y1+U z6c!vXb=^O+#&nxn>Q1ORb|X@z%5aI|r1K*3#YdcL;eg8ccu&b+1U9*rKgQZ4dQAGg zi!d`j#6uwUEHF#>I>H%^K6H2bJE(4FDd7?y`yWkKIW{QiK0Zy^e%s>c;=U7cn$6G4 zxM8RABWT~Yhr0C5-H9}K(6k3{Jf9?2S4BL!viH%>*+8G~dDZDMTR83$IeT42rxwyk zAFE6H2$%1+pGS=}P8?ZS;*PuZiVX7WJ11fk_MLFXO}49zjrQ{oB!Q)zU0Zwj?KR~Y z{6{(%U0&{f15@{WEdT1si=7(2>H2{<&mJ1=&z~PZeY(NH0k7IA2x_i7k58{wYQYlq z8h4J@QaYC!Q}nT;pKDz<5t z%J#cSLxAmKIXB2z%G4F5j~y=&5j2}VfFL_J=Z;vFu4yk_HLeL?H!btAoc+<=$o*`8 zdEsW%H6Wp7l$2}^C~$0$h*;Qkm0>Yu`cDjo^;$?pMMWtp^^)?US2&w78s%1Y^3sEd zoE+h<0^#cNGGdejE&M=nQmotx5L zQVy_T(HfdZd=jHsloYS%z8V%2m;0lzX<+#I#~Z8?4o)|6v)3lC4R1>LXqN8;Rp)u{ z6@8v~h;K`kGV4psr8gNJBv{KurZONEiJMDBb1lAFxmJtPT92joM_zX#CztG1ZB^Gk zY2(8f@)1(WrQVxkpRB>S#-}VWU6PYmn%C%AcsRVau4JR!7W-x3H;QlSYT&cokE~g) zF(oW%R+yEFK%J1$K0}kbAfjKth*G+Ja`kSa-l$aZvnclJ4O8^-NO!$uS^98-83=U! zl7c6988q1)=3w?st|gB}&!|H8pb5HNrJI-A+wF1wsGl2Tt9GlXFkp{4Pg}1vK}?lA zZrS7b4*4b_Z=%CGud29nBGI-d<+^>z*=*QIY47yWye}n3B%3kG!g+A5TUyCBN8TZv zsY7*TXw?&mA|$6tdsVwIIK1e_63t3WdK=E^t8hM*IAVT(#uu_PE&+=a`DT zNl<2TwU42P^#-!SHrWw7lHMLduw~gHn}j})UdJc$bnMaMZmbRrK#b_ z2?7B*_eq(;#MO+Fa#+*Jjuk4>#m5`m%xagH6L)N*WlHz6o@gvGAf{YgLf1|f&=2(a zZ|}88w^fucflZhabr0XvNy2eOZH2VGaPvU7g|?jj^+@F&|IhlS{psSj)))x;c%Oqo5RD7W;99DZZ~;EcnaBsK3w5?*ahMrM|_GW0`Nf30LJVS%^ zs|o5edKYD++}CMA!j8u#O2r5KDal7*9L{auc!3Ge(WLoNgA8S}4!|T|Qin>h!1AE2 z_;66r(&_X$csghXwM#U?Ho#9#x}6dBUC&Ep>YVymaqB09b39sKXr1vj7g+CCmgw&ghd=&F%pBY(XExOPcZD>zeB02pA41w;V@& z6$5M*dQo}?Z>ZXKTjhQZ_6tn@5OC)B{t`=H{=SEZh!ziN6N$TGc6xw5ItspG_V{2t z(~=9*5Ay;a#7o4xysIL^d5waT!*{+m?WNZO?t$vx9nv?86tly%Jq?MySLs&&NF8&S z=eoCc?Yv{vH@AUw78BD7eP>n+4E*L@c!u+jv8y3ThETosPr*^ z$b#J!M5}0f(%-W)ob1QK2`1_1=d|RN_ia2`NHz-*rS`L(%WmH5(j@we8zI1_ z6Q1c|VbSvL68&|rODuJBYR0bF*U3&&ZXa$Q9 zVwD;F@yp7+d-r;4xfUy8(x<`F&i`=G=*3Nm;o%)y_)Zn2f@)hwhkey{(k1$RxVvT{ z0w4=YiXX<>J387_d}dG$K`_3j~0B^)vMY&z`>ecs>gt)14r%{q4O;bA}AEG8q%>QcY_BZSGeY3G1cKPMH(Yw|UEniW{_H=D*|k(z{*bspcX zpSJKvyAvFM3%OskMEGmo>U@!yCgZgM-Z<_b{Q(hf5lQ>T^8!@e%XuoFnfF>umCHu%p52cIPC(aI3i z*&Z)@Mm9NHK`*7W0i5%{P8!f6pInMo$-rYzfB%Mp0&t3CuWSrb>Z z8{Fa7__fr^{QP|uQubi{MSD=j>-30A^ol^3AKO1n!auSao_vA8s{bdXjgc<2QmoQ* zIzhJeWYk%b&3xxKirPh!+P`SQd`trBmg36UIiFi=r^&*o}8O%R%7Ec z&$aYD>=O@JEi;$Dn{Sr#2@VAEZ^FrR(jKscLgPq%}a zB~9e_g)N`D&$eM!0~;Q+&;i@Km!xmGi_Us0?c(=PWaArxcBJZH%4w{}j$W8z?V{_m zz4tn5O4inH?K50e|HAp&b-$I%LF!wVL6^FogFw+v$}h$RL4)k8D|UvqHAQ%T6Yp9h zi1_-~3EuSa^C?!E(&EOo`=IELpN4CwQlT>&<8TETVEnZLq%GP&+Xx_7lEr(J1T`$h zQ9Z&-<7_>Mk*e37Gc4h3LBvJ&u72q5q)qO-8YvX9N1szAZqpUQ`J8j=`leCG;9ai% zpj8vKpzc53_n02NBh-nr?39Rgi<UQ-|0l06mWNbSg{-{w2{x7V+{ zy92szPkSiVMBl0ZlB_jx;U_8C>FDT8cGxWa>L1+6mzu$7Vs6jIxk5ZwCz$z-yxC|% zC^6zX98n_)(Dw3)VxwxdYYHu|iwiHa$G$E+7^hcTeVmpRSjrClyry> zb`sos_`bw{N4r$Th3MXNm*N}z`LjsXeU7T^_Vy&VI{XCliTI;9zH)uO@b$aNhKxmL z25#>^tSmhy8J-7qfWn=1o^jqG-Wb3u8c`opz|d#^_c^9 zmAo@v6Bh&uiyM(&FHp>6_ViD2bk&_|Oz}B$@b&vTl=|^*8U_Xis;Tw=^lzwMG%hMj zP=iZ~^BnV_uolbP_WnJUr~`F_(aV z-|69qc+cecqbu4ad=oQ{p^!;d-1hInPVJ>Tb;R5YdCg`cU&0i>w9oDuNWcCu%2HTb zIm~*UP7XOFQ!}kGHsbqLn;)i2b+JiOf056*a;(zZ>zM6a*jDAI`b@cKoF3J2`YbG7 zbkdlLT1JfGRq2~^;=x50_j?nrU&`EUjCB)mGsizN<@RGwA__;BtOIhU5x5M!X9XX= zAasH(4HB^#;^QxrXuL$v$A9b1zh|3|%~?lS>X3P-ek!b@w_q#(H;Sp_5>1m<-ARgoJom<&apPE-F*s73{_?vUZ%rW( z8g}qkkV!=*;q}zd98-EaI=RyC_0CTsgP(@U#2JRkUJBNxdmz~zp&Ku*t(9@m&=aua zUW1If3J7Nzq|?9(0~Xek%?PZFucpkY`VO&lS97#o$iX2C!~T#d@dn)htFQ-k%FJTb zL9t!%@pWaIe5N5hNUl`xZD16&PT;ym6V}?rQ_|srsb27!>%^|I2*nJq`Ov-4sCbSu z#cOP}p34dx&wcASIXkCGXF8@Y5a!xXgIwg0*kVE68oV6j0Yf4sLt6bumL2~vNv+v9=%WTe@$6w*$>BYU-{qET?W;`oUTYJ@p&wb+A z#o-Hjba@0y3KR?K@ag&4^j#_cLxtsDB>beNu+b2xT_ircI`H$S5Nvbm@K6wD_<600 zxx43$%!yZtD^=n8l6ynxw#Dji6t0dd8ynJ|E9(2P1$a$U`(tQCQ8|EHYi@|H6yA3~ z-VoKvzDY47){J~HC3$zLiZ^uCJL+>|d*A8_pc7L&TGpBa@|hL7WZ7RQGMSPBD)kFi z{c|D&1<7e>>sa3cc9Z+pL+^Kwn^i@zvQ=moTOG>7U@!)^DJlMv*Z2fnm6err3nP0b%%S9>%uTH^1Iu4LtTvIXUjHl2`gT)M zv3A#mtUteOEH=Cw1}fA=Y^?_50f2MH=ATL1|7ZN`{~!MJ&*)gKPMcYfo|>APi;JMv zTUm}zhduyc1IjF}t&T-`dCL_s#e3;hLZUbCOYxqeNO7_sf1?n(C8|rB$TwS`>KT5S z@r6&AMKd38Z9CgC8TS73$pt+B?^*6Q#Gi1=YGzn}N-*!a=keI?HfTADL!!0|52mY& z#Z^L&3;PAS8h2qXE5l_6O(#Kt_lP65@m4Q7jKKN%;l^XRk~ly7d?QyWv5L};&`8iY zp&V5{%N{>Zk*PY<^LJG9H0ih&;b06wR@d09U0UfG-HwYIqE_;nH88{Qn#o-@H-9r6bifpwi{IX=Tw)U!{2aN!pO8zSAshr99)$Go ztqAz%TKMgiGFk6eL#3k=NKX!oz!S%AJ7eiz!5>q_G$7~WZl`CH(io{+6XWec=_9At zjXLq=o?G(oU67mfDjh}}L&AHo9MvQgs2a7nzbwII{h|XM#5Z~|nk&`uOm45#!Ki+5 zhaEqyOk&Ylue#%_b#_8uN=hnzme0NSw{cld%%_E{r5TdU zpSi3(o366S>q;}zK3C~;d;TL}y@6Qn7uB>CW6~i9k;EN$g$1H;l-AODA>8|y*#i*dK#z|72Jb3RM|skitpMhLUyChtk2EBhhBJTEiTik z8j1aj9Lb+uruUlH4wC!^g*keX;~Cf=Gaw5$J*;L@K3V_;uCVq1XTBhd#t+6TtL&Qg z`Qe0t(06O+^F$ko(emArh}8q@4avJ8(DIs$v($ipqfV~1>L{Ko$FTIYclvaHIPnT- zaDNj+I)pm)XsJ~zEpeWiV0uj3^dxZYr{%KO1Krwb_qql)EfLKB`eM5t^ zRa%AKNvS0o4RM9N3mO_8J@&2T$4xi2}h>L!`jeo zO0_tG5571mj|Y?qUoSf|#%J1X~Y^e1wci@U2??a8} zq!Wiw)>Y#ogkzD0oJ|h393IN)y^M`?bj$0p<`W<-C`X;fx1F)z31d8k1}Zr=CuzXtb9J3t^UwAXYh z_dy^Yv5Y1~!S}vNyR~}vD5f#z0ks8JQ$){kE;mr!gBE~5?xqmV*;|W5_GE8`fU4D!IJ~MH^6az|G49P zr&(g~7=OncnSH9jXp1s z>uh`muZzP?1f9mz6u`&)ZtoYUcSjS7;J?1vPs%|ZwRmk*C}zV|Z=Jr6qy_ez8a9=O zEbNB|z-C`~aO=43M^nvSQ2+y6bB~%pG~+Yb-O8*3B!dMKQ2mYIFNpvs@h^>Hs$?$l zjd?&~4_jG3uzCCalE(f!_2M&HJa@#QqCyx#%u}YJF1NC_t1?{rjpEe<@mfk@f1@4)DC57@SV<#Sn;Z`R22^x(tQ~;n?Qxm+ zxw*N4>a|``*-)NZy0ri3OCi@lag!sN3653#ww82?#u$fca{Bn&Wm>JJvg($1Za zf5$eNWR2$^VCZkPc=C8&8KK(W-12`7TQ5n^9*s>Zw)VPRihX(TzVYAiKX|xlGR`~D z|BK&-{brATeLcZhfDtMs4@A|OZuT(pdK|7p<8?H4{hENq;Zf}+ zmo;Fg_YGf8WvpxDJOAj$$4qqV;ae5&^a`hhf#G)Hys`S?D&DmU-T-%?pTm&^maRv< z)Cl=3jfiSt7j;f`bCa*zEBgRezNy5jgUqNIw$TQ@+y2sP^moBgrC^|RWEVlj0Bva2 zr8mM|9(`0y4SdqfFY|XtV^Mj%L<2gFPx^?x17x$Yy6!xGe3-C{V#(KFbwuAwSVMRO z(36mH4OIb~O%w1*Ww~2uo@Sng{7xy?I{pQI;fcaGVVPrUiAGDp!=LsDQ+H+Io%&Xy z>cFP(GQd%}n3uP(V$4%M%LK9bzMwozenj7}hTqoVM|Fu^MoZBb#A1$V3}%{PXQ@U5IRY!@xr2svM-uZ*6L{$FD z%LuQNtj0oR{|0Q>%j*`OPEV@NTP2?VjvTg+ulOYo4X^CeNIzn6d~67$*a#RR6qoUP zpboD7RYF+71;pagZMn<@-qWBO?3WJ~Jgy1aa7BnVdd$ULvdFI~zjHAqKb%U%GIm;D z*G7DWrg~8GnF+#-L4y+Ysu?gpx89X2(c>YGH?*T?^n@kf7$1ZQm;cBj+oXr zbP&1kSJ-NQb@))H&2UK@%MciDce}Kw_)(95Tn5fb{P%#jVjzca_-$T!X%1#U;KqsO zCiDcRy~$|k{PZQ^a(7^BiaN(`+=PlBFtbzJKQ~1JkFIORqO$z_=G$8R9aausGpqs> zKCABF;>E~|PeGv1uL{ueOYbh+Zp%Q=F~kcH@t7UFYKI}qv*ZuZ499-|R1s zQXO>yDWr^nJp+Y8<>hhtC5}4x_o@MhDk_ie8U=AQRCtioJcb~Hwe#Rvqmr&|COJg*Vot2{h?E_$WsQYeNC4qI&V>7m(c^zMt2_O%f?heV~1%m zIn;rRa;oU27IT)JCzf@*>N7k-#{1XX{yOJzc_q>TB*vTdZlX3k?l)rC6%vlvN&45cyQ01 zTsRQ&ZeLWq3&a=1Dj(m0qS;6PFdqdJ zwl?jB?LuH>vLu&%n->t~4m=QRhdM@3LD7B>&Qf&WW)7?r|45pN_3ktuw0lTxbhL;T z@;}M|UEhhFhyb>@n;VN>@g{@Dd;Vd))#iX=KvB!!&}+7+5q?=Y9*fcz@v^q|+E4mn zS6Ns#rLLnp0H|wUyA3AoO6@n+b|p@&1Fdruf8zJ08b6ne@>KNOdr-6C)b;QuqxC39 z?qCNt)$|ei6{q5|;}=Rztv8|#m$#(?Oj0i@jqD5-G&hT_XWTArovre_U}AFa-h`1j z%v8B;me`chy|x`^P-g`=w3fa?8qfCM-Ch%CVg=*C!lD3;~!p1}mp2S;+~BTImZOY(=i z&iK5n%?ddVFCFA{uyZY@k@~`NnfrZ@Bfb|J;&mh#8P;s~R~rzR{Dzjd&4Tr&$x~0e z@xW5nAXYHLTeSX0O;#nKostE)GF{EL1*YKgIkIL~T`4cPGa2GL(N?bYEZ*6BTy~E- z@V<}l=&FrmU}`aDT}DARINe3>0uW|p?N4!+(`PLrXlkVsCiVY)F1+D^l$a^mq8fQ= z5-jzShh?DbNt?FSHEo}@rw*M2Zs7@@_eb0`BZTeY;9+&kSd2?$GBp(V9D~+t34M)O zngWN6cJqg^`>Eo&H=S&nnm70B5YUGC7t>^{SL-XvSd_oT%r2MvxhCY^r@G3iTlbqt z*Hq@%sbq}g>Qw0H0%hfbCyYL(B|s07c&DiDNGX`Qz#580sbHKqH@LyqjP>&LL3N!0 z3>$Tg=ys&!g4h ztDpnt(pWZfHv|@~b(GyFd%(V0*?U4jvGHGV>%VGx|07ubPtKtJ2aW2#?(Tom{$(Xl z7bR!bSIKb}tm4qWm03UE$of@owF&!ml3+gGB1Ig);jSWD>yyg}?y$@P9(rK&aDA)E z2MD5J!dv!9b`K{>9RQVRopqI$Z~q=jpC}7-TIO|rdK4EImz|vr$e**0e2i8=fwc(G z>L?;4c9UXC zQtYf1W7*KmbxzAlP0dhXSVvYC>hv=k>%fOadKX4Xg8vujMHt nm^|Iz1pxu>Z<=6DA&Da-I)I(w`^Mo_*JXP(cRjsios;1ovilQ}-Noxusf|v;%RS~M@d84J~nuj1& zrPMqIL8y72Bc|kAocFxvd*Ab&^E>Bv&L7|UBgtA>&w7S+KlgoI*L}Zzq^rTiz{>yv zftWNOK=eT%ItdWymv_JY3S7DIuyqaiqC?-;H2m$i--uIslfdck9%`l@1}J+E@2Bo| zAOijKBKGSL8b=YX$zZruim{3%|5I3my4!dUT&5QbE3>r z#J3UQ5%|+!W=!P+|0=iniT5LMafSSEYFCkdM5D_&T|JIC?ApbCoPn)ZdraX9ucudd zS6(&U)u9NivzvAC{Y!sArd!WHLDPQI|I_e8h*tofn#lcrTWMeSKyiKEU$?6llJ)o( z5aP76@6)YAA3kg~90QaG1{%k2rhPK9a(JfmkD1bF&ivls- zZ)b!iChGmQpWff@!b%LCN$>%t!Q%8VJVHms@3s)yiTFIdf%-H0A~Akg3yP?-y(!XH z*XgZmYditYa(kTi_yZblMcYaU36Yfe?qC@srwvKM2!WN9l)!zJXarUwrOFQ0L=}D$ z_4XVH#GTs$(dUeJDcF=*352(k6r-X==XpuyxP4RG1%%&M7IXij_d?WDF_*GeR7`>ube?K^C3kz1;ZZbyZ_2|5wLqOIO(akdgz%-q$S=L zZbOu3iONlsf1RH$W|aa4PaPNi6j~m&b?VCI=PR2v?F^G>s4Ux0d9XExQmS|HbP3k| z+VI}4`}U85Sdr*TBvLUxZToAs=RQyE21{i7>uT1na^lXVlN)ba`+PLbX)Rn?}3@$~|clu^@ZMEz5NjjcmAM}+h06fhW2!wq#4o2a1{-D$1w);6KK z5D!hB?Ja_f$1FS~#Kd~iI~yQZgJG9SB=J5s#jGF;+Ux#mu+={p_BQ>Cl_%u{~;i$f{k` zWHiWa;ndd&wJPhhYwvm6A6NV0b}!JP`p(w8E|bTzfwpk^s!b<)4{>{45ARH9#J0A_T3Xd%cT@wNos z0~(kc^2#Fe_K>sX@draA4tR*i3W-8ku9B%tWn+n2p~eec6I`^8^r&r&JXab2E+&fI zUtIo*ySNm^vN-Jl9KP*`v%}EvWlc)p+TOKpqe|(YJ$D;`z%*%JTyl>;MzVX()UhC! z5fUmr)4D9N_At;dnjotnSl6_PO^@&rQBq1}iMkf`03PX*Cw|ZNk5*QXwl*}(hZvnM z6@1KN`)&1=1}`u0IC`E{l(1677;886&pTjnRKzpXw#D;sHTBdGao;parSXKQ0k#cf z;c|>C!pB2{>h~*gDZ&Ht_4|^Oc|S7orAdxQnQ;e_SiAe+4lA>>h1J3*hVZ~3*7wn# z{Li~uV^5amdr`f8EV|oMd4Wg12K`bRHC1nRddz)%O&WJ!Sb2qI27!v+JTAiWnAE1N zS>k&)58k4|;I=aNt)b%^mA}VE?R~5J`6j+z#&hk5=km~QOo879&$Rz*6Vl9p*}kTQ ziP*?UT*~oIr11r-v)ZLfhbvULR=k+JP#fB$;q%u!2gkjg{^Zyr_$6&j zzNDjBR=Ykm0xYQ#{c_EKha5YDvZ_Hwi!EmJ)s~b<-n@BJS(&OeYqXt$Zqid(dG|_z ztH^J0P)0sV%vW9_=myw5$A(xmKc6zb-Dl8k!ml`Z_2yixL=6lYB@B+rvPkKQ-%G1S z@1wgya4xe&c^v(aQE%n>fQIZ`RXDUJgZ3I6rPRzQ7kjDT2Tz>~*GQSuV)j=nBj5hu z)$TU8%lv@XxsSmdH(gXw+~}?%1rnVqm;>*@V6Z!vy1Kd=w!E%O#u7x`9h!o(Kdz~Y ziD@hkeHg$5wfDA$8_CeBZ#hn>Tt@ET3KIlF7xT1?@h9Kt`9L zffevfJ^UkLd$%ME(goQvKL1M4>q2x=F095vd`lJOmq-xC+3uEiaYwV|H%>OholQre%1Zn_-a z$W)8)d5?_lCadwA%fWR9gT?q1^~8emFfCg-(9y|qW)-jD26$6aeEw48ck$ek&k)Ep z)`$gt>v7rDt^w+^uvdCAg(dcdi$SEm{6bxwMQctAzA@cO9UaFVP|Bg4F~o{o;Ttpir4bpeRubK3=> z&8{D|M%5x*S}mxyR_$g{0}Aj3FyMMy%N24`l>()_?63o8rS<1KQY6LtO8cz{;&8nR z4Tzl0Vt8C$Z5F({a-asG9ByT)6CW!#KNFXv3cm`sa7wd;)_t7SqN{SgX<7TDK4;b$ z0s*gzDZo6dI!x0(CMWd%0{Ze>f${RZ8FyAo3q%e+=pCQt=h*zBK%Oz>9G5b_C6BFF z%!fMowZ0i$%BgH7kocIAQgc11G36tISv z)v=gV`q8eXkEhlG?g7ARvy^6)r=?pBo;lmODe_M>llF5EW3Q!MGEQb|=k~$9`t2Qk zz(KqGaw!*pB$QwO1+4!Y_87+I3_3|zR)0|hfKK;fzn;pVQ^mlrjJA%>>f++!^0JLE zfO-;kfn#UqLpJo-rN{F7)9Rfa4;DuhYJGLpP8Rro*r8%{U|_)1#FB@=2LO!fsMB8m z2_2n6p8p5|fn)$Ubqa`{@d8gcJw0uIdU`tS|Muhlr|thI!};Hx&KE8nMFU_}Hufu0 zRs#0s1qSf65|tit@O7KK-3Huc%E4FxPn$_#)^%R26b87_hU|EIi5h<(wtnnxS2Uui zFx_Cb2;K@rTNt1bgXC-!*U{6qmyAM=w@+cMr)J5Up}N%DYI{KqW!AK*FWt<69y=72 znr&ByLY&3AnWD;e5WZ%6rKVL+RxzOFkE|2Y*RqD9?SDD!M2gRE<;V?T+~;3s&FGd z-_sk5PAs);D5*Gh&de11kqRSk2w+_6jz8k}>W_TZ;`RbZ+)L5lu%Az$_bv6}Ba+f6 zrFtjk!+L$K6{O)vu<06h&hUH9Na9VSpzTMb*Lt*_;=q8ZuQ}a{r8AVai0yHu?jzr> zk9<#&0P=nkzC@x814{!xr^3o&b^qvlqck!VZ{T6Ry>fwN@j@!WX20!&c2Rx|o` zA^-eZ{b9t#plyp2tpDUlC+S0P%XcA%X}0ps+B2&#T65nkN_7?W_%m&~sO|0f=<7OK z1A-1SrSa914+Md&#hn(Qso^Tazvvu6ED|%UgHWkl&S&2hH0BDc6u5)*zQL|81SzKKF z$`vS|fB=`=VuSx0Wp{JZ1g~iG_vO79fLT*HCT6H@OVc*mgMJs_;u4V4RFNrJ$#@+Z zB;xOG{X#eXuN&vlYr4n!!Bp%LEnspPmVIg%21DU9c*>j!Z1hOlq>X^L{t*(E%+5s! z@=Gx0OaBWiH|}}(Qo9U#fTNl2GPTdTn6~YnHWc@Qe;6R<)M~A%9QC3u2JH}sBG94l zPiA*ms&AjI2iuFp(O?z?;&N!UG%GO6T?VN={DA)iB4FiSzOPqH0q(sFZzswe7eUQF z9u!!|+@^^{a<~&*0SC8SFl#%HQ=v`bmG3NG{IZU2~`=vBBnH|}%IPM}v#mddBIp-CIjQP)p0sN`*y*|vR?mOe5 z7Uw)lk&|aDywLXO9Pd$Q!tJ;0bf72C)U#@I--H7=<~L_CPyWP;(dltQPtRx6p29Li zj_eS{T6n8z!=g8oiq5geaaL0VzhC4WR#H)X~Dke6IvcGq|Qz*N(7 z#S&j5gKA$JFD`T_a#ZBdh~RfntRE8`;+lT?1Pw0>y*7^w~oI&SSziBJsH zC5)J|wfZCXPPpD6LO6#NKC=r8*?HBi2GAV<4~`_nxc&+GAk;T9Qa9mZMxr&WxJHJ!e0y4^EkNAt zKwyhwpl<9enh&&=NH28dC~hl38Y6O8YmnxW#chk|gP3nK>)RnEcu}766ZU zHb?!C{LSZ5jbPgGb5{VK@&7`atNN8EEc|ZNs~KA>jlZP9;7si__(MH8`)j*r0xXvA z3XbtcgorCCWO*)k*-W`U`97D#R>IrgX)alXTpqeQ_2ABDq-RE!u&7VRlBt89vQu~rHVx)bgc@2K{8}{Zh+FIc|OUq8DR};F8u~A zt?}%w6#yu4h|5G-@r;10Xvwg#oVwIjTEe`)&&c}#6B}~bGDDM!&qm^LRQS>0{`q79 zXk~#%ciq<-gG0J@@=6(+Pdi@Bj6AuV8YW=zv~G){xt(U3nmRy>WYMTu(x`4>Irp%8 zWP%@%UdDeZZs&A0LvrZ6;sAlt_1NXK4*f;YX~Q`a;kcomo*p7m;b>%SRh|nWI@cu7 zrPq$B5+O%cdTVoLFG8{%$ zXQZ54B(`d{vwzKLgpGd)eeh{$YR63Jc~PZ#esMtuA1jMmRKIc+=`m^C^V7pZSL1VU z>J&^@MG>WhN>A_oOH_9_vggrcsf>}~IeO@ncf8z)#DbkU86C=ZNH z8>|0f;PjHGFAr=%FH3G=@SQN&$)JK{3U!fNV5%&YQpFUic!AKhZD#gzH~h+)92tC$ zUq(9RQO)rs1s(Q}c8uTjbAQ^+53Lx>tra=E7#Lh9UiDM7N;m)k0^tc1omq%>Nljir z5h?m28^bI1mrw|VDfLdZuvJ+e?P5(vx1SCK!d}n1TzOBPli}upsnbn*L3Vw$Zwoi% z%&jIKA)imIi|-|hjHx$B0b@rOV4rpjT(44a5SO|M&XlvAyKuL$9kCAUW!M!;;MJGN zCa8r%i|G$(yoS3a_@z~G|LFe5d>ggGMsM1);Yq&$`r)k???@JAw%*I_A}f9@j~}Yd z{rNFR`9ttg8aTSJk0jt67;k1iF(n9H^DY2!LGMpCB&~u-1F8R|q?P z#XsE8K)`!b@vrRU-w}Z(rVlql^YS`?0R2)8%%a9a!;w!Ss+N}4EpEjisv;1H|LoY` zo+plu>g(&bVA{uc&R+#oQx6S|b0W4N(6@h!(tt8{1f4p8SpO?j_ z3Pn48X?1lKV0%utX2MtniU*w%0ZpLD9}7swfgYuWQ(4B@^e^q;A4%Kic+LR&GuvYu zCV|w0wj#_!Ci<`+tXWrL0owLt%x&UC+&&>c{{`}8d2y5QG}+C&)1q!E(mqgAK*F8+ ztyeXouK&$YXTbiVU1It%PQqh}f}1#2QHkE)>Tj3&xQ!JU7}6+mG)P6&Z3a$E z6DSk+%Bx7*pO2Lh*@0TlLAvRqn`IbJ0dH6nbGRb_**E-6ZTi=(DrF@M{Fma3^4NIx z=2c|jZKITJQvN=r0}_w|K|GzBF6+XI>sX(Sb|t*9lNg2<3a`kQ>`$VXBO~2rS~pAZ za%*H2e}_eZ<*V!dB+T^j+RkBIAR#T$J80p!idVT|WB+@7wme{5FbZ$7i&c!g8u%Qw zpX8oBKMkXxrR~Xi(L&$b5`9#m6Ys|o{V)MA|Mmh5uzPk+0fc-xA?{xnQ$B9rH! zVdIx|JZ(G*U0_kk>kt2FOkMG2*C z6YQQ*g);s4QM_JTh&7M4u4g{uv%IAsWj_&JaTpU4l9EsRd_3L2hLpOB&V#B54*Knz zP=A`_bXoo$MXn+py{WRXNDC}gmC9LIe}IjT6S>I6wR2H^BmRiePYSezK8+qjEW;8KX$y9&I{QA5;rL!YYfGTBz!Gf zyfSKYx-v1*;2c@S#q=0k9u>B%aV%~o-p6z(ssuNTqNG7t-s(N5?u)Q;x-GC&cD#5z zLm?V{Cq-!2iJ)5u1)TnK{6WrD1GJ`GL%WTf%caNL@$wsYJ<DW4U3Bh`XhNuH;h-(I$#!N*Osbj?6Sekn` z0qRdC(l)sE#yRAytHS4E-OO2{80QD83yPEa)F3~zMZn;B0OPOeEAy1AeM-5%Mv&*ArqwkykZV3U5O!*+5h z^1XGltLewWeduqv>F=HMeeo(AP3Pc_dR28+d&}*X4NuvN!_NdAv{$~nHX_g&^k9$5 zhd)|fhtOKnNh*4yfq}P0-^b84^jFs&Gkc%S7*dE2@b)cDQP{Ux-(==F20-pb&#CBi z+RCHp+{@9&&vg*gH;DaJej#O_tT_Ub%X*#Rqv&Bv@M)h%6d0emxMja`7=(UqhFZKp z`AP?J?FZ@$dK+oVLDYcGh9;GfiuJg(Sc#v4M#bC8w2>{ri{gnYzFW4`JVit!e?pY z^q2CjG%@3~jgfKj{LF=2KQ&19yz_d5dRFh+GlCssbwOol_W2uss0Af&DkQHe!}ov7 z%GH_GE%x-c@E(AhQ09Q8ew!~TGwGJVbOLa>k+TzjJ@~7y)}g_FY~xY^6SN>+3->symzz;|-0NkbY-Jrsfu}iBsCpJ{WUQ_bX&yj<1SK0Xg!f2jiTdyb^YSJ|#JPkMhpsuV#bSCub|) zRkhj{GYf}8Rgi%-?T;*!KcmynAE>r~^PjT0HmzkpPDd8mw1B`xO4h&7k&-q2L^h3qGp>xBMv4e5&BG zxqhP)+$_4jvJlrkzY(v1cp3a_d|__p-CG+BcwAlEobas{bpkOZ`+60M(%5S{-D?fV zl9`ByJM@AJ`Q)K<-wX};9rA8n6k%<)T-?L0s;jXZJa77NpbE}Bs1J%9Vqb5G@ zY$fWDly}^+<&L|D`Wzd}vxGR#3*p^3d%>%W`UCfuiR#j94^=b%!2~dBF{&a~eMvE$WIdV|N zx}0F$OO~-ky$-jNaCr0vdXgf&H2CG+)x-)i&SZ$F6l*-x0&E@#AtA(C^hPoH z?7-Uf_@7>uTVbjd4P$17-uu6f_c{=UQWlR<`t+qY*sF&%{8a6`hAJ1-CVEqui)CxZ z@1dhKYrb;cKUV#8#i;kxSj>wB^Vo?6J-A_ zFOz#!9gnNM$-ZS`;=`toftsv7FP z7U5SoA%^(x1_Ju3I+v?RwsK7SSDyVN32lxj7oID1&nhlxU6hH9XHuZ>GQ0{Fh#5#` zNXdSJc~=a$Vs2RPJzid3KY#zMcn2bN;OlJ`7EKG&(p|X{AsqA3EjgWQs~O|ty=$s^ zot#mNjOnA)WI9r^SS<>`uwML>iLZ;`+L6eH{ifGk#ipAhm3{6FRrMm|fuWT0F>jnQ zU$MV`7hK^}d&kWY_fP(>>UoCm?~zj$?Z;17n#Ygv(jkDWAvt3_s2(hd z%Cz1voWO}@LKH|6cZ^(HyG-`QO?2wCkBrK!j5P8A!Vq^fP%{%89NgILklDNNC*`)R zY*)I9in4NGN|?k#NfJWj*NV#aOYs+siG_n**`qHc)2jn@-YeV+eiJ!u$SI`CIhr2KH)(3-NVok|Fp}zR3=NBHxNA zf?*RwFSQ(G;@H^w8J%=E(yrjm>OPG?97t??+otWikm)_xUuAkeU3Yn zz$k7S7V8AH$=p;AaKAtVHfXgxLe$iPr+gP?>bY?e8Xx|NJ)1Y4@q!BCJMwwPyK$$3 z9$5Ov;g#+v*GUX>88oZ+Mm9JS#=&xaa5VhvW$!4>#h}WYWK$ba*TccE#rbkxcC0$e zbBJD|N|iZUJxg*}SiJu0%EyBiEt`<-N?Vp>wJ}&ckAvYXueR-_-b(v zE>#sZ%Dxp#WXvnPjH-#XF#Z*g**>=bl99#%o%64F{T)~Molm1Pj#78po$1vinOC5+_WZB{=Ag$&WTM&BGO#i(ExZQHB8b>9N!f+X zcZyOb6veamyrXVDmgF#`STCD7-T1IzgU#ZOd9+|Hb2E6DHzxA}W=sXT@U78k@l;zn zR5+)1M*XheCp<;GJ~KFYXf)(yUdB7?>hj926*p58>P!N6IK4iw`^P@WaBdm-?H>Ok zOWEAGEX^5Xa`>y0ceJ*f!jB~*md87OGTaD3nNLf*St6I~uSmlY7CYc#%&RIZQ3V-~ zHhYarhNzx5FXHV}T`KztgO%fJXm-PceNOVdvNIp^GaCM*#^(M?+ws%iM7F%~z^w7xK4n*#^AZ?3 z8h>b^9vRV9FlXf!(CQ?cpGYq=c~x~IJ&64Ahs}UNf5GOLJVAc!UbrE}6r`w_(P76y z{&S?h%8?Z%vN0ko;taTAMq!c8i5ENHJa7cdMRD$N`7J*j5m_i!Ew)+d-~RIKY`mqG zs*xHB%{?~sjmT-ZU=^ztoPiQ>e1v&Uv_ZLl5V}5L#d*UW7wnml@nyR3-PVgOKh9R5 z^ZBf|>REI&2WRILm7u_Y0L5*fn9x;eXLpxhIpB_hg8wAX=}vaN`uJq`{incmvSlb? zslpLJOl^xyl4ii|Y*3rfajsPtqRaN(_T*~D-~SflLaaY?aH|HcMFCkVS5>DK@JaLo zxje!yVna#Oj6Ek^$z`^%BVH4sv@he8PF=HrYLr0XHAoizQJ*a)a1grl5D<&Lydor= zNq%u1{#^6v*OMneux~?dl%M1%vAL45{d<51aWTc_{(`E2T@XD1rr|hBery6Ejw0lL zZ95s|S2%NWGZ1&J_tdf;vH`z6|L@}C6UFd9P1*fV