From 86ad01c3b4468fcd347d9e44b88efc3acc2cc7b6 Mon Sep 17 00:00:00 2001 From: John Bowdre Date: Tue, 23 Jul 2024 17:10:31 -0500 Subject: [PATCH] update draft --- .../index.md | 223 +++++++++++++++++- .../new-runners.png | Bin 0 -> 45905 bytes 2 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 content/posts/automate-proxmox-packer-builds-github-actions/new-runners.png diff --git a/content/posts/automate-proxmox-packer-builds-github-actions/index.md b/content/posts/automate-proxmox-packer-builds-github-actions/index.md index d80deff..9cce650 100644 --- a/content/posts/automate-proxmox-packer-builds-github-actions/index.md +++ b/content/posts/automate-proxmox-packer-builds-github-actions/index.md @@ -22,7 +22,7 @@ tags: - tailscale --- -I recently shared how I [set up Packer to build Proxmox templates](building-proxmox-templates-packer) in my homelab. That post covered storing (and retrieving) environment-specific values in Vault, the `cloud-init` configuration for definiting the installation parameters, the various post-install scripts for further customizing and hardening the template, and the Packer template files that tie it all together. By the end of the post, I was able to simply run `./build.sh ubuntu2204` to kick the build of a new Ubuntu 22.04 template without having to do any other interaction with the process. +I recently shared how I [set up Packer to build Proxmox templates](/building-proxmox-templates-packer/) in my homelab. That post covered storing (and retrieving) environment-specific values in Vault, the `cloud-init` configuration for definiting the installation parameters, the various post-install scripts for further customizing and hardening the template, and the Packer template files that tie it all together. By the end of the post, I was able to simply run `./build.sh ubuntu2204` to kick the build of a new Ubuntu 22.04 template without having to do any other interaction with the process. That's pretty slick, but *The Dream* is to not have to do anything at all. So that's what this post is about: describing setting up a rootless self-hosted GitHub Actions Runner to perform the build, and the GitHub Actions workflows to trigger it. @@ -212,4 +212,225 @@ Once all of the runner instances are configured I removed the `github` user from sudo deluser github sudo # [tl! .cmd] ``` +And I can see that my new runners are successfully connected to my *private* GitHub repo: +![GitHub settings showing two self-hosted runners with status "Idle"](new-runners.png) + +I now have a place to execute the Packer builds, I just need to tell the runner how to do that. And that's means it's time to talk about the... + +### GitHub Actions Workflow +My solution for this consists of a Github Actions workflow which calls a custom action to spawn a Docker container and do the work. We'll cover this from the inside out to make sure we have a handle on all the pieces. + +#### Docker Image +I opted to use a customized Docker image consisting of Packer and associated tools with the addition of the [wrapper script](/building-proxmox-templates-packer/#wrapper-script) that I used for local builds. That image will be integrated with a custom action called `packerbuild`. + +So I commenced this part of the journey by creating a folder to hold my new action (and Dockerfile): + +```shell +mkdir -p .github/actions/packerbuild # [tl! .cmd] +``` + +I don't want to maintain two copies of the `build.sh` script, so I moved it into this new folder and created a symlink to it back at the top of the repo: + +```shell +mv build.sh .github/actions/packerbuild/ # [tl! .cmd:1] +ln -s .github/actions/packerbuild/build.sh build.sh +``` + +As a reminder, `build.sh` accepts a single argument to specify what build to produce and then fires off the appropriate Packer commands: + +```shell +# torchlight! {"lineNumbers":true} +#!/usr/bin/env bash +# Run a single packer build +# +# Specify the build as an argument to the script. Ex: +# ./build.sh ubuntu2204 +set -eu + +if [ $# -ne 1 ]; then + echo """ +Syntax: $0 [BUILD] + +Where [BUILD] is one of the supported OS builds: + +ubuntu2204 ubuntu2404 +""" + exit 1 +fi + +if [ ! "${VAULT_TOKEN+x}" ]; then + #shellcheck disable=SC1091 + source vault-env.sh || ( echo "No Vault config found"; exit 1 ) +fi + +build_name="${1,,}" +build_path= + +case $build_name in + ubuntu2204) + build_path="builds/linux/ubuntu/22-04-lts/" + ;; + ubuntu2404) + build_path="builds/linux/ubuntu/24-04-lts/" + ;; + *) + echo "Unknown build; exiting..." + exit 1 + ;; +esac + +packer init "${build_path}" +packer build -on-error=cleanup -force "${build_path}" +``` + +So I used the following `Dockerfile` to create the environment in which the build will be executed: + +```Dockerfile +# torchlight! {"lineNumbers":true} +FROM docker.mirror.hashicorp.services/alpine:latest + +ENV PACKER_VERSION=1.10.3 + +RUN apk --no-cache upgrade \ + && apk add --no-cache \ + bash \ + curl \ + git \ + openssl \ + wget \ + xorriso + +ADD https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip ./ +ADD https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_SHA256SUMS ./ + +RUN sed -i '/.*linux_amd64.zip/!d' packer_${PACKER_VERSION}_SHA256SUMS \ + && sha256sum -c packer_${PACKER_VERSION}_SHA256SUMS \ + && unzip packer_${PACKER_VERSION}_linux_amd64.zip -d /bin \ + && rm -f packer_${PACKER_VERSION}_linux_amd64.zip packer_${PACKER_VERSION}_SHA256SUMS + +COPY build.sh /bin/build.sh +RUN chmod +x /bin/build.sh + +ENTRYPOINT ["/bin/build.sh"] +``` + +It borrows from Hashicorp's minimal `alpine` image and installs a few common packages and `xorriso` to support the creation of ISO images. It then downloads the indicated version of the Packer installer and extracts it to `/bin/`. Finally it copies the `build.sh` script into the image and sets it as the `ENTRYPOINT`. + +#### Custom Action +Turning this Docker image into an action only needs a very minimal amount of YAML to describe how to interact with the image. + +So here is `.github/actions/packerbuild/action.yml`: +```yaml +# torchlight! {"lineNumbers":true} +name: 'Execute Packer Build' +description: 'Performs a Packer build' +inputs: + build-flavor: + description: 'The build to execute' + required: true +runs: + using: 'docker' + image: 'Dockerfile' + args: + - ${{ inputs.build-flavor }} +``` + +As you can see, the action expects (nay, requires!) a `build-flavor` input to line up with `build.sh`'s expected parameter. The action will run in Docker using the image defined in the local `Dockerfile`, and will pass `${{ inputs.build-flavor }}` as the sole argument to that image. + +And that brings us to the workflow which will tie all of this together. + +#### The Workflow +The workflow is defined as another bit of YAML in `.github/workflows/build.yml`. It starts simply enough with a name and a declaration of when the workflow should be executed. + +```yaml +# torchlight! {"lineNumbers":true} +name: Build VM Templates + +on: + workflow_dispatch: + schedule: + - cron: '0 8 * * 1' +``` + +`workflow_dispatch` just indicates that I should be able to manually execute the workflow from the GitHub Actions UI, and the `cron` schedule means that the workflow will run every Monday at 8:00 AM (UTC). + +Rather than rely on an environment file (which, again, should *not* be committed to version control!), I'm using [repository secrets](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions) to securely store the `VAULT_ADDR` and `VAULT_TOKEN` values. So I introduce those into the workflow like so: + +```yaml +# torchlight! {"lineNumbers":true, "lineNumbersStart":8} +env: + VAULT_ADDR: ${{ secrets.VAULT_ADDR }} + VAULT_TOKEN: ${{ secrets.VAULT_TOKEN }} +``` + +When I did the [Vault setup](/building-proxmox-templates-packer/#vault-configuration), I created the token with a `period` of `336` hours; that means that the token will only remain valid as long as it gets renewed at least once every two weeks. So I start the `jobs:` block with a simple call to Vault's REST API to renew the token before each run: + +```yaml +# torchlight! {"lineNumbers":true, "lineNumbersStart":12} +jobs: + prepare: + name: Prepare + runs-on: self-hosted + steps: + - name: Renew Vault Token + run: | + curl -s --header "X-Vault-Token:${VAULT_TOKEN}" \ + --request POST "${VAULT_ADDR}v1/auth/token/renew-self" | grep -q auth +``` + +Assuming that token is renewed successfully, the Build job uses a [matrix strategy](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude) to enumerate the `build-flavor`s that will need to be built. All of the following steps will be repeated for each flavor. + +And the first step is to simply check out the GitHub repo so that the runner has all the latest code. + +```yaml +# torchlight! {"lineNumbers":true, "lineNumbersStart":22} + builds: + name: Build + needs: prepare + runs-on: self-hosted + strategy: + matrix: + build-flavor: + - ubuntu2204 + - ubuntu2404 + steps: + - name: Checkout + uses: actions/checkout@v4 +``` + +To get the runner to interact with the rootless Docker setup we'll need to export the `DOCKER_HOST` variable and point it to the Docker socket registered by the user... which first means obtaining the UID of that user and echoing it to the special `$GITHUB_OUTPUT` variable so it can be passed to the next step: + +```yaml +# torchlight! {"lineNumbers":true, "lineNumbersStart":34} + - name: Get UID of Github user + id: runner_uid + run: | + echo "gh_uid=$(id -u)" >> "$GITHUB_OUTPUT" +``` + +And now, finally, for the actual build. The `Build template` step calls the `.github/actions/packerbuild` custom action, sets the `DOCKER_HOST` value to the location of `docker.sock` (using the UID obtained earlier) so the runner will know how to interact with rootless Docker, and passes along the `build-flavor` from the matrix to influence which template will be created. + +If it fails for some reason, the `Retry on failure` step will try again, just in case it was a transient glitch like a network error or a hung process. + +```yaml +# torchlight! {"lineNumbers":true, "lineNumbersStart":38} + - name: Build template + id: build + uses: ./.github/actions/packerbuild + timeout-minutes: 90 + env: + DOCKER_HOST: unix:///run/user/${{ steps.runner_uid.outputs.gh_uid }}/docker.sock + with: + build-flavor: ${{ matrix.build-flavor }} + continue-on-error: true + - name: Retry on failure + id: retry + if: steps.build.outcome == 'failure' + uses: ./.github/actions/packerbuild + timeout-minutes: 90 + env: + DOCKER_HOST: unix:///run/user/${{ steps.runner_uid.outputs.gh_uid }}/docker.sock + with: + build-flavor: ${{ matrix.build-flavor }} +``` diff --git a/content/posts/automate-proxmox-packer-builds-github-actions/new-runners.png b/content/posts/automate-proxmox-packer-builds-github-actions/new-runners.png new file mode 100644 index 0000000000000000000000000000000000000000..95ebf69e824d4873f1a87d137b340d34c1371280 GIT binary patch literal 45905 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 z zIAgE*j0sexkew}M4~rCiG>Wn?#q*eE8ffQjuZ15R;GAzI?8>~f8Gp+HIi$nW1 zd+1gq+N=?wJv1~ZcWSj;y-0t3LvMJF8enO*oS&Aic9?2)Ac`URR= zg3Q3GG3^F`x9)UhR?i#76Y*hEbhG^c^V^l#IrTpK6P0er=7ZzDJUHB8aJA}kKpX() zzimA9wGCqWeZ4z#+L5yMXU%qZnqk~3x<){}K(n$w*D*$ls57Gi&he>JpL~CGU;K(e z0C<0Z9b0XP(EB|HsD+!me}q_Yqd&)ODzjC2Ji|CJF7KUzL*#-Q6{7yzLN`0Gu(ojf zH4Dp(oqa~wE4?z!qN!GOL|IWCZAB^J(LHd|LbaEu5oIZWoW{Vqvp5!Tg|l2Ac^>ik zybPIP#FaZh5DaeLv4lB88Yt1%II)lCs5lB%*Ph+|=NRIYOzYJ2ikzn8erFOUGPgoF zDjSxV1eS&YIDe7S>8~h-nhn%=4m}%dYm|!Gm2nLJHn9R&Ozv0Y)s$ zg1U#?hb^QGurmQT$8M)u-e}Jbap{abQGoANZ4b3HWdHc3h`nS@M=<>2C}Gz?VDHIw z{c&@)ykUg&hof~u)RPA}Qf#Skj-TS)d2Y(wRx22B-MXvB3JV1TF_aACD z|A5x$Wh(w4-*M$(_T1$HHGtjJT;o7*t&j8aFmUeft9db~K2ZYifMvVk_()smk%428 z687o_mvSnFbGz2+Gqdt!!1MTEO~f$OY5eDO8N1bCW3Hv;91neizVjN%5I2eK-dt25 zD*7OYgfBZ5;4wbyl-oK~*2h-m{3UK-t{?8G4a5t4qf)qcSLvHDd!Or@q+Jop%6|Ep z9%@(s6#0!evx8N+u95XSFgG@4K`$c?`!E6Ejqm(~bV1naWDTx>FH*eD3jN(gJ$u~0 z?bmsZPP|UeDi+-O>EyPk?)tT>oo~ZZnfwbF$_dtalHwrL_D2bw1kW8(*~(j(>M-wp zZH@ecLOgSGkg&U7q=*qpbz9UZvaw41b2mJ$TRWmM%tt`3#z>rf&T!uKc+aBZF%E^m zXnC2v4u2J^JLY5qr7GmLHGddh(F^y*}&4M4?oB!I_iX4dCzC zXE<4NSPR^XTlL8!Jba$eyQn+)2;2%N*sj;cY$1DlUBS<9ljtX0&F8n43wJls zIpPV&q0&AuQrX7_KUtD5FQQE?!Z3&U1@=1B3>zr-66aD{2JZYo2xPuUgyQB%#yjzt z6^k>S_OY&B%H;FM=CJMvdo1yv0g^N@thL)LTwMyE^Ath@kHG5^;)07+*ZY05{$f3E z)5aRA*~P3Uw*oE>a+DwnN^)Za&cYRB!x@c{Sn3K(_=ly&hy9PP_7}oa*it2ODdob^kNGa4Iinj5Zo9(3x511C zD*1M%Q`RnL>-7pW58bf$qaV!GZ}=+M=#3p3HeLYhrl~nI?qq(fcty;--PF<#(GZye z{9)~Mt=J=GuGRp!R-xfm&)Cl?T?I;`d81Yh>+UUIK?qv{#ASZ!`-c;NV z#2A5%1MmSF#zd3}d6{a)d&?6I$Nhz7PP-Ur=#3dH3m^NfKnnxuYi$F~8VQoV^i5RepY3l87;OD~-3UC%$oU*(fjA2J z&amQq%hqlLiw;o=GTn-7-K#BjZdQ!Ra&l@p4K7xXoqUpUhy@Xru7)QmKDXy>B}E71 zz0{DS_(Cx|C?p?s&co>{1um(85))_^kx7)!({=#liI>Olo z)dJ1A;|1}OnKEfRVo7yC$#o07FXmYLcY2Z=EF8v2J^HZ{$s*w2w&GoHdr_Q5Mnxb@NePdeGe`; zLlEfTR}Y@*0)G^{6F1;VWw=C8(!?-6R@{C%Bay+^90?*VOmbMtx zkqwVjkV_9CyE=WYNwq|l{#cjkU@tbK-febZ8IiZ^`D@@ERW0hHzeFt}5fn*g*!cXc zw3Mi|$w47%P`%Sx-h4=%mVh?QQL=l-IlgnKfxlWDS}KsF7%Z!4tS`I#nLBeZN)dkl_g< zG$r!O{5%rE6OFBtdUgO053`${w7mqn!SnKBqd|`Cyyd9sS8kpd%z#$Wxx5v;I$AMI zxgAAg{^oRY)w>&>oFRxNPqHD0ck?&;OO6&22e0W)<+f{#Mh~%0HDhrwYVV7#J+Z9Z zxFmOvbpD;|7dolcB{f*@0j7@7cAQTiV6b<$4*s9nF`0KnmkX1A_=eI(U*P(Q{KX|g zcQwLjVL`jj4n zbM^!h)QaocIU1Pa#mpP7ZQ*d1O!q_=2rX#+7kzr?5iQvNMkLa`r8p#iL?{)v-HK<} zza*m_uQPPq`ykx-0zGVQHD+~rIJ2cgv5hwKfE7&ZWF0uQ>lJ(NnUK5dGYn=ALM3zb zy&OUVr{g_BJYVk`57eywMEa_C8SwaohSnKI<@c=Duu>OyAh866+vvvkv+be$ExnXR z65G@yVB?XUut!S8e~jyXwx*Wx5QT9%-zHJyc9l*4;-qtbgN(V<((*}(nrha-gu3o| ze_#qwnNIpnMb1GEy`%=V8@X<|{-Zvfe!$yf`GeGMaz1`ucE2v0lU;jcBG(kDZpz1n za*FWVhSRW16tBbxvCZVbGVwT4GIZcztCqVtXQHKIr>^3`17fn^ zas*HJC(`peRP+y>)J0`*4r9^^7w42nekX(Wp@~CIYLjev7>v_++4Sisic_#SHA(n)Xars;je&=x$m;}snNqhr6BJV~@79{^N{;CF)-^)3| zeI=Fidt?#~Drje~I=*xT(9uYaS>4z>S1z#p^(>IVi5Pr8{noyPwvw9lhI-EWpyx3tyy?rx#0TO(yI9GB!7QIra!C)lodd6!7gG@@EhMO+6SJt zvq~E9w%DesJa3FdD4rOm80KF<5}p6}m@S4k`vD4`BLYTUYd(*I(w;0DE6DYe4O-@H zoaUu-wM+R}cPw4+3AM^!-*{JT@J+b$2z^)1=aD3K|M-ZV8tET}hJV!n>FAJB%}jop z(nUl({tHic2i8Xb(N$Ev1r|Jw)$#+(TDe?am7-9X@=zK9Ww9V+|m(%C)-@4i^t zZ#=52=N?RR-O?f=sp#yCUj|E5Y5G3 z`B5!KS+vq*@mF8gxIg^TAzQGm-_DUIy?KF4R08KH3tz;3_U~SRVmbLZAwGT?i-zraG8r+sqm}NW zL*mlQmw+mC@=hG_#SzPCWoBB?E2V6bvAO$IWA|i46bK7S#>a9b_)rHoi}1c=H>+rE z4m~GYs_HHrLJXR2Y=z7h^O_EkaQD8jS}Jx3J470ZN7%jO`L5(-Ev4Y3_UmHZzN_2i zkf1>M*TwbcbgXF?GFFA+Vz(Gu=aBB2F!!qSNb(YR>33cR^=r}|E9cU2%_7J~jlx={ zipNJ(|49Ll&sSG~B2MQdYRGu4rk0z}h)9_C>beI%Q&zCw zR6DPH1fRY%;BH?x=vaO><0<6nS7`bGi^ettPO`*pMp;Q+|LWVSJF~y0hPa2`t~aUF zX~e3}RbUFllE;4VTYK1y&ClLv0hza0zA(M|en}P8iJ!{H2|9n2GvqW2!G7xR(}#cU z(r}F~BV^I|by2wu8OyoGT6;MT-5BWBw_f_Qv$e20zsS`e z0F7%^KnOjqUg_H(xP8#Q@PSYlXoXgKHSBV(_cd}7c=N`zAfaA*kM$H4T}_O)>dxOUo3 z^HMR(%8yB*CU4OT&{w%f5Beve)pL(4>(1g6jU_4-~|rL$XxuCcYF75FKvU}!Wl z?{cE}BR+U%jlHm6(ubTYVgQ6ahZPPkNx`V8-g^Zg`o;(V7#h3$5npqM6&`;`i%zOD z9SdcI*)?#RRjFd57xYDc`Mi)T&7@ODWth5Q7}02%F{g0E_09S@Ot?LS#a$E9PcMv@%Ad@SUtd>;3Ek>PN zI=lagyvDrR}N>Rj9|GYEJ?*}EwbE(Fm$KzO9;Ft^qS&kI*>*BzE3Tm4c;vVtCtX#y-B zb`w(iq=j|Dx5YViB~Fz98yAZ&caiKeWu3(~R=-_j6$)|nbw_W0JAd};Ua@^8Fu6?g z&RZXMgXc@!gWY!R(-JG?1z<5#2{omT7_ZbYwqDLHY~UAX73UYY`2?4Sw@D&{@8)7S z)t=+cvY6dA4QwhHT9jI$rZUIxG;4Cx9%*dt@&1jN zjF~uq0+W~{ivJs^I=8%B4=Cl1_-UtzMk~-j{UvFk>Roz2y!cQP)>&GvKT9(abBo~N zlnV!ao{F3=oZq;B{9vGCk&zmRo!#ao|Wxd5`bL#hfot%hSjZexRj1P(i6_9u$_PKIVH*&n_X=szvkGH33b1Wr=r z#MXX8_j~l_{D!SjIARpWp!sT*$n$X?UF?*6Qj!YT>h`)^valA=$8XJpqWa$-V!W*` z{2(>e54;@h6bbG-PSjml=(D`%`R+rsyG>nrh-eT{xEU{BZceV6vsA)d%-sgzY(7hx zN{#bZp?aHB>IY%^q!sFz+#A{x)ft%i}iGtzSlP!v&DT_nV;wvZ*HbGW}7)0+BLjJ@{5z{ zu-ZCUujVp;TmJxIZ>hOcUOH-=@SOj-nU~CHSVfY8zQ@ZAJxlEB22JV@I?7^Stkb2L z*v6J*zpS7G=;lek%}b_rm^m;__LQjz zLdT8F;M;T3KI+L}duuDZ$@(P0&;c#sRtXpSXmDk>R*@kVvczuLc9XGcIuypq-H?cy z|8u(bUd$HWlsoFX9PKM_;%)QD2wTHOzSsi>OdGu{rD88o{FCEFBr@bw1)A1c8=gf*X&PIg@^LiL-|E8$YB(N&gq> z*EVOr3pEktT#T3bTU9&aHfEJ2Hnn1-hT6KE^rpnv^OGM>4?8vix`79_2xoLHv5o`* z@Z75&FpCoBQGnPlu6BF%j`}72V*|wug>SX;m5&dn4w0PvPuP>B3q>?Q-|IWlHn z_$$v+6KZ4qVrmvf$>?^oI9(cV4&ux9Du$+&?`QsdNyLS=>l3phv}j8DqVvnCww&r$ z0CNe^9$NVfvT_3k4K>A?wM7MPB0h}S5ya{E3&65~8}8{f&==vwGqPOo$^D!Me2A9# zWq+@kwRyi@9Yn%=;)L#g?bJ-&y{V6JNYa2|- zeg-0u3D({bZQcXx^^*zAnEsx(5tZI@0HFpqi91|yf-klvt*)jMCtpsI7{~ClGcAhV zYE2_*8%s>xbU(UUg-Hm?R{PdKDf2{JQaDaeHY& zlR1IwW^f*O$S>_+0uu_*3ZHBVb#o~c1nNY$c1>=HlbdOW9RWRUO?8^$Y(ri~Y3hiP z5YO8r6#N8IzUq(m_8V3zCuT*HY+(Bz|DYyx>qxz_v8^n2u-ceZ)0w0D`j#^#UHN!; z>|wLq5ASyQI0T~B$4TP)piXSavgHJas^s1H728|jkB2te(+bL+IHAl25k(WUdCJEF zy5B+Qs!h%Kc(eHIBSC?XmM1<&kURuLoQk8nBWHC&b)kzVL(O+?srYfWOssxVP|kex zxLo5!n`?CRT?J3A7MQOJ;8W^cSp7Fx|mZZan3a;`H zxCh`~ROY%TDP2&_rV>a5T#HzkRZ3DFgkR_ek9C0St3X&; zmHP4wzObU!Aa6;Je=^#xf|Zvjcx4qIT_AMnh{2r=juV93`sg$2XV){l7P?>Rk=ry+ zK-|~$xajm$SMA;k$;{i({iy44qH-GhA|X=^LhSuH9HvZ7)lSaigvAJBdMk!Y(h%dC zjNM(|W8rQ3W)QP<$9M0yg@oWC+jDDjS(_^cnq7mra|Ph*WCgsHb_5ys$v9Fi%vWeO z$Zz|im+MCf``C?A##jk1@+wI7gR%PHl6XRPwSOceE5MTBKeC4dc2*V9LY?-#Y0n;C-HBHuHK z`I?U7MLp=DO=|Z#zzd=UPXdpX@zOMNdJF=r+iY`avP_ASDkCMn=nGBWIQ)HDCK-14 zkq%$_SV%t>Dd$mYVH7qM1L|SC?P*f zHMn34@>?MV4tf~V?bNWCoNNkzS*x6kmLGjMGbm|qKI6fp4`=lm0W2-duHjYSK;&ay zl)mBL?K!Dl7N1SB&B?<9Xr7|-or_zy+^l1Kcv_~o(*Wxhb<&`LR$ZcCdn@&tMxgOi zH8cvRnpJ(qZ~b2KsEe*rEL{PVv($ zDpL6l#|Vx~6MCN({?;ZaaNi7UU8|7MTt5>i^s2@xCGrPk44i~__i8^4+cJAURO(Cd z$$+s9UtruL>Xv1A!b(zwROb{V8K{hYKPxFz?kLJP;YX!f$$%XlV?cnXX5M{givO`; za)!5@4p$dkBh(GUs;Ag~FM`18P3xHs?P;-?^}%F^SvTeh zD4N$tX>P^1;8f9E4V%UaoE@xHy^T6Bo4J1z{H0+l3Lfd281&Lh&&Dkvwf0x(eHy?e zalBmPjMhbUd%DG|s6Lw+T?t4sz+$(_Y#+{TP+Gpcc+sXkF5ppq@_sX*Gq53Oql~bq zOs4EtXKDnapAtvhL>_*wci+o*7|NsY*^KFyF-Mq*Z0bgK*IQs)SDVGazem*;QR4We zv}8$J>%N+M`KP^;H%@F+gpWU`#FXbSqq-rdY?uLSJ?>|*wzn<_JA96q8495 zi7%ALa^kSwJyC6xS6k>Ejtv=n`Xq5qEXC^8_3!!M#7o|cB#pk4y5^1_E&L|X!iYy4 zf0j4!MHg}sof*l`k&VaL-$i1p&F{vS54qFL-fb@V_#_$G4d*XsC7pA^NX}ag-$;>#8CASF z)JWKrX2od^wPd(x|8eg|%kVs~KtEndgV`B)v3fs7m zmPQ#S&zht;TjM{ZW4R%0r%&a>anlxH#2mzG1(DqytSA|fdmfR_2E3QRW>`j7nIv(O}fcjq?58f#l{$-`5+~g zyi!Wt7!&5!nr)Cvfe%55;_J+`Q68CoqVF`XINq^W-O+(jrEDJ>@BgvEY=6a`WW&`R zm2g~tm6M=4Sf>kkDaifTv*%~J92Y5`O@M$|=KTF!c^_yLC4q8}CQWmcJV_qwYUw0t zw|~LF?J7WKVVdb5AZHe4nxLb=;H**{e{Y*&WLIV@CEydHs;oYXs5PAX9{e)FNEp$1 zWBjH-iLKdSYAF5rK%i)cW3dKH`~q*^n|)unmM8b7nY`Q}Pu4QM?Q)II{ph*a$;|Z? z*c{hLp%j0*nS25+-uL4HzlZE;N*@60Lm9MkECf7pZT1`)r7vnV0Or9=@@n`kiwkO7 zw7}Uu5M3^kxtMMLq?3DH=i9C)bBP3tY^T-!$}A2iyC6ZGAt%W+ozJk0^*r36ei>YSj6Y=xd0SYI zoPhsbxC9VKYqL!;pLnv5ex`zuzJjcZ;@Y!EN%mas^u9JWLy_(R8U zQuy2>v={lx#1KOB&pg`bX|_E&$_8EpKqJ;58eGn=7*DNYQY6Q17OFl6YiTOJj&j7A zsGr~68J)-|r_OLgkHdz`{{*sbd^i9bbAMCCMqV0%oaM=(T& z9UNhTmRW1%t&y#}Ur&fHb;2BexVBh~Q1bB6Ur?N2$}x0z$Pca&>~VuPO$ zExZu)Wwn^wOoh3|KcXu5eVg(n^+BnX-8R7Y;w03LDIEbU$@t@cx@$GRhBQP{ZNSNO*T7ybl&L=c04t3A(3_NMA^o~YlJ zTZ*Nj^>xQyUOZVrPxSgo(7nB-A?S!>Vrm$ZO=2#|WVMEcVA-zv6(U*qCd$mNLO3)9 z88CJwh`tx#Pj5I~0Hb7*>ur9JB#ChCo0L}c$I+cAad6JY=40Y({w}u{9Kb>++h%Hm-9(!;d7AY{$ zK6)jPyOq=#$pd~F;=`bvUxsD4X6Zp)6NQ*Hr03}p6>qWjVYzndhDAXP>hM^879F^v=Bnw zEBh3ieO#X@B#A<17|c-LFC<#sp*FAF`d-g=u?@ZMqy&8iJPVT>r^}8$FvbUBJHWz>Vd7v~^!>@e790DGA$r)W6zPX~6C#L86!&311Rjz_ zC9nHgCacb9{+9LjL7I_T8<~J8x%K%oYr0j@mT+ z7M+~(9DDKmDt5=-ciuq5f~z7Hl4(yz^irwZq|+0$2! zcZc#ribCC=Tr0xMpLWwhK}b%g2lb0YNS%H z@`unY!4$=l(8{8B5DW>6X!C*`i3vghvx{$@{qZDvZhZ%W|AwaakYt6S_lF&8zvlbF zNhYO$WO%P*H0xib0IuO+{2}XJAKA4eC9I}@-?SwJs%!>wHD5SYAGNl)jpe2wq`h8T zG|F3cOMg?(!wt5bkpk=V9>*W0D#>`4;0bcD>gdmPrZMwQiZ0YV!iYN4Gln5P+<5XR z!I+}eJfq)}uYf zIm?POweIy99I!^brm-Dna5kC$>JM#4u=(WSW>Qs@W)qXXPTK-$m4*1F;%hEbtx)9t zdr{)1;R*82LrVYR%2{P3A&QW}2S`av;h>!49#|ZWE=zO9X9dXGons6bUf?W(E4Y2f7_xa zC$TK;jhgBRe&>{1$u-{(_r6zIAY^Orc63XZRZV`DPC^~iSqr>t2lD^2T9|xe%@fT7 z6z*MKwyb*P(-#TuZCw<;snc1qH-UUWx5kG)L!3jK8dpM8LZ$?O&C2Yp1snQrE( z160${byn|HE^Ddtp84~b*ffOq50G%$)?aenN5W77X@$Z={n2we+#{{_k@g4-X4#qd zw$BEOWy>ZEvS-ZuRz+__#Q+FD6X=H98ZW8qi~%tyU0jXm#5e%TUf=f>qb<_>QA?{f znR;(B>H^ z)lCR%HD@s?a%gm|kk!7J`Sqb+*1!GFcS_Pp5iWBqOPvC-QKd3*CM;s@rG&Q$Mt0(^ z-m%SCR&rO5q;1T!M&Zqdxp_`a-Kq-$Au=j7P@5Myg-|yF+XDRoy&iTiMLGrX%Hy3i z(mnY37ou`_T9TY+_2LHp&$!k`NwMIMx7f6!o~G!Y;*uBRR$4e0L`sqa=e-gp=;)^W zZ@#iryFVO?9C?Dy%n?;wUJ)Sj?0Ev?g*ohv2|9BJZrwTn0W!-ACgyuO^{GFo1}6wY zEKT?)!o(mG0v_9tsp|3yiM1F-lDrby+WdJxF?Jt-u=1=-nd(4R^$^eFM|w$TIp1sF z>D{-Wq!%=JA7rM)rfk%Vl7c^uakET(Sk<-0=*EU&(B+rHq-c8akoqvaOpiztGQnE~ z)bb5Ik8-zpHcEa@Rw8z5XgJ8|C#`3-Wx5=WqkYCFC7^<@%HCaNSO(UBgl~hpO(`H+ z#e)vIJ~~*h1Dc`pxAo&|?3Tj37i}j~vH3`De#mTKR9VtR9HIZa7ht^Ar`Je#oEJN} zwmim_r39m?Tbh83D{CVbXYTng-*$D6R_$IA#rd&Hx>Z-AH`?^v|l*VX0v0Gk(C z9d_2V^o5fMRP8YO8=Nuw6^g zO<ZkyIw}IG7-d8W#h27hM1Im41 zXEFG~92O!IF`Vc`h@G4?+Tnvej8+AT8Xf|wbf~+W2hYmkRQHRfTw(N?y^lg=rQ^zt zJk$uIPj!1C*et0Fy$3&R?c~uS=FGBsYAv;l=*o};OHVU_mBUNu0a_< zYC$!XM4MlFjT}*VQgL#`tQ!Fopm^tv#NMsZEmB|hrbM=p>ibSGQ|{u>b|gcb>2=5>-SevHb`~a#f1H&^Um=t>WNk3F3lV0~A8!hek3+ zVCTV3p!9e|d_wg5!wQvNgtn?dhYojqy^+lO4|VfZ+M2U@MOQ5d7N8z}`)DWeQFCXq z_)i9CUimgk3K}u&wm zdfn`TaQ79qIK_BIDw~^7Q&lh-MQ3R2JQ90i0u;=tA@MaC{|;HuyTgdU1BLd4Xs`6A zy5O5{QWxfF8ET1PD0Rc#VOgG3f09 zWxPHq+nwn_;2+X$``_RGOwtHF!!ycGfqngg&`Qu5CxANIr+_95klKTn<@&@{aCN_C z`i$XV2Gn;F0$N=xZJ(_dcel|0%Gs=#geH&ZtUr%H4=UAheivrmpQ1A4-QXOg`?QR$ zm0!a+e~Zx5bs0?Z-H*nYdiDTe_zt zI49*f7Ys~)>14LAp?Q=vOJHymneSmV^zHhQ@j457UJJJ%sDZBhsCe4T^qjZ_UMqzu z_plmU8rQBTDuPq@l^MJBYXWRpAR7>v&3)sNxUxM0EfLmOqGe=p2PgWNrH*GQy-(H5 zho2+dosci$K_{v7R1}3}l^;Y-u)SVym zJ^gm&_g!ysUeeX!kJEiGWuDSx(n7^aOW-GQ=H^}6rXZ8he%x_&gN}+rOB}oxxVEWn zNzGgz_To$Lc9HE&4Cocd>tucDW>DiLv#_Sk`eHUKs zJbSgn|L%8$p=v1=8<5m&Rwyc5K~%-JSqu?X4MO1CJH0;!Z5%7%9w@}5E(t?nQfr@o z8l`)eg{VUYIY-A|KfebU4iD7U;$^Vc=kRF7aHV7wp0mtP{66N8A6xs8I_{e6Acj~W z<}C^1JW)`2N+C^-EhBW@i+ptn>I#;Z~uR{S^w1QztV$i5_%q=&JH)T$$-*eNxz zwx+IulYM0ollf>PyY2Z^{6AakMV$EGI{LeY zXXvHNkYgk~xE`6R*2SL{9T-sUZs0c=QoBVvkTiJtRfmGgc#PrK^n@bcY|5{#V8}4* z_(Y50a5*}Qgm_>w_EP}ZE!Znn0#@N{{Vtkb`8{=|Ae z3W{Q_`DrtF8hB*0&BdLkuhKAnvhuC6RxCbXGq_0wY+mw&RFWG5>aPf@GY;>MPxjC` z&Ra~9s!y!My$U32DZ%1f5R%)qXTqk+qy^j67)9*wyOrFSX0p6KlTxnk2w9Goz}Qh! zAWO#E`1JdVM)yK|Vye?qTIp4`ex4@qitH)ul9#xjI>@z7Po_2~Xn=;IH1_=}=12c& z*S$c4zowf+upR|a+}?mPyq?F!5wjJ^?YY#WyZ^QX{AVA1)UZzTh$gHruD%QR|4%zD z4?i+TSa;>MlX%QmfRQ7?(P=Ybcqtu-3@NKW7F`P_&&k&JFnmQ_Z#D!F&GY&wbz;paA6$ zfcn#~hAM&Z!`pm2@C}k%V%?c22vk3Mdj{1I^R?y11|+U4S??qgl9@w_Ef)VR>>K|Q z?G~cmD5)+qHL*}XR>xyiPI~fTn4_Z7;Q$SVZcu(eLb}LF%gpcWnO#;mI?1pJ3mdjXCs~MV}d3rYE~%<(&eMwY8HT&lxD85 z^;6O3GyH_euw2v8hyQ@{Sgcldk^k*bR|B%3$Evjb7%3{239z+++4rvfqqO#ikL?o{ zqJE6?3DzS3t@y`z6*YXXC^SwM3606=`DuUU0gL_p&$ejNnx{wq<%aKj3Heg=R&c3z zp4VoU$*4g;;t4RVkyu2T0%_93(etjyX5$3-QYm_*<-MKlDtu^^2cQU`W%+=7%@X)h zK*z2_1ADql`mnq1G*(c-mj#U;)>69=TQo83y0?`9I@GY*0V8tQeIZo!+t;28_GARS zfsV<>l4xAim)X}^o5st2fS*j38$Wd_m?bEW+V1#p+q*HK3i@)_n*6K*m_ zg1F@uv~lmT?Ve9G5;*v15~^-Ld;0y*D~2DlWRYCz&;mCU0d?%kwF~O@7~ zf&Pd^F5st7!M7SkO8$gO|Zbus7$ zgERJ5gGBy%gz<|J_u~F<9D~~=kYK}%5GwQg-?ScS?4-cz zcTh=Qyxi3Akh1gJsJ&UDxWiW;W)~lncihjEme7C*ExXyqu+p(1&hf2=eXjOJ9UxkBnzGY)LrCj`x3zZ z7-sDh@sr23+heq*G}Hy7TTz8Rbk34M&s}#g_4&*@EY|H|d);@TQnt)hEbzwAM#{6$ zQ>N8WTeK$7ntp3pp;b-cwC2&s99+`JFTTlAz@Bsb#$|(x-0|>^{#FXU%OaO$j-uPo zxM|!I(b4#FztpOen)7d4j^p=N7c_qZo{Xk)<}E`F8Il$a6V`3Mk~?X?Rn6u@iY^baHZe*+CSm4 zxOrE-oC~~UeI2s5kF;THOj9Q14HdeE0K{mn9O!~hTd%%RbV-3HjS+ykej(#K?wwxz z*##M;AbJ-qRMpM*iBqHfJLB2@spm36s1y}8!Ox&)x2C zh0GPcw3lQmj)J-e=YrPuNV+)`oDH$PM_w@zX;nJH!jW`#r+8p0lH>Vkh0+aa-i&&i zJE;JhXddPFoVCnG*wfgbhxBd>Br$s@Bwl#xUy5s3a%fpaNIH6;d23OGym@-2fw>nJ zv6NOpa#zz4jpgteBvZ!tY+H;h^@wAU;I$o@h#PnHyjOIt+!-GIIi4-X#&+tG3V!a> zcSMPicJU9}YI=bCZ|6FP@%4bl+vRuN?P4pVhCLJDoPv8qlzy7Y-%5;%nDS&@^lz@4Pl4U&aXGFtq{zGcLQEQsla`7M!>ETtByE!4V}41V$E!&Rxh$I zIaM4JWiCc<_W-XFi>NmRs{uL^e7Z5vNr5v2El@p!*x+XAq4bw8I*pGn+5iBZ6YnW? z{6p$+`<*?h3b%|l3pjWnIer3I2@rqBhE(-NT!1oX1iYm#AnIojipgIgT5K-5-TH{any$vQp~uZ zXugvNdOhttnY#-=yGtV(8-ISsQ=P2CC9aYhb<7d)S8B)> zC23Z)35Yb^HX;xpZLOW{A^LYg=N6=MMqlGMos-gOeNX*GmG{q(tktSrJu_|@Lg<5^ z?53>Jt&z-j&_#V1Qa|`n6HLYHxUs+rzkMO;@thvfQH`vQx%=ck3S=Yy6D~i6f@bA6 ziiWBO#y1(h&N6*{Xo-E0#9KIJ7qZSJI zX#LV^gcK-!!)OB47mVt)MU8gR)T`Bo1>W)*@?L71;g1WD?a0nL6I#?z!@$1QvrwbWWD0ewE3+I(P@YO6;6G4PE_*J6724W9_}-4*RKAyZl{RAx9Wu z;D8)xNXpik#1>2yfv2+jDc||MP$Pwp%Hzm4)smG>a3^V|y+j4Pl0}hv>J%9FYqso~ z(M$H~GL&aPs||7!*f&b~o~B^gpyMXU_c|>XL>NVlhrkoHTXBS zVB;WZSYz5-a>3o-r08wV8ZXf3xx@I)p(}5PXzt(SsmzJqyix2G{EQ(*&*UZqf+?kr z$#cAF?I`HCOvQPz%vK@7oR)1Z(b3r+qc%CZEzt0C+OP~|_q!Ki4>;_tNzpA|!`kF5 zz2z>Xaewxi0jvq39KR(UX5L-Q(`1lc%{T>_<;*y6Fd51^V+NMlLtW;pe8`!3cI%$# zQz^bY%$aoBg4Qb9;R87yG2N0X4iT%P>ll;yAqvPK$DLt&sG?8(AsU9xj!4X zjCIGWdd}46lO$0%?tOP4q((tC*!YsCwXiox0ZgQGbKfG1;b{(V0Sc+<wB~|fZ61hL7#0A`!-70n$`U@PI zGIHi~&{Cqv`P$8t`9MgNFPyW1;t91Dw9h1NWPQVv`Qf|0D!6A1DOw&WbMkI4q_nH(o{aEcVhm`;+=~opsyur=6xB%`~KyYAM~`wi$`*{!GzAB& zuVjhK_hixgop`ub?rfOKPcCMNi2CCerr4MR;H#kOj?siweEj-i_bKL`akWoK_B-yf zU%sHu>{C>rbO`qiT*{A;8P41U-snxUQGJXcJKt~AqJ=GIfshY6 z-e)}_sD0th5&&=pK&s5fpT~DTm^!Eq3w-4~mH)%3={w=~-bCuuE{#OC_G6SW?{p2& z%G)4F3nLOb0Bz>mxD(Da9OvPt@0{@El2~*2X>Ksb7o2sx7+wIoNO9U0aTkVYm``~b$8_UPXgCHp-V}N z*8B#FuRgU+)(W2?=^j`pArDOK?#8PCQ0MA0<$iQ^zC#n( zT%(}5oiMYE9?8hf92L43uYyrN2af3t!{h#7aMT$#fYD}hkk&eg$(puR^QD=}GSIo5 z`m(dTGS;0f?_@*~`rHL`<*s2*%)}!K)~Qg`wn-kgpHQsNmNvzHU61pax@rPICm z73oXww!LSo_hTuzu_|pUV#@qs=iy)RKV_)B`8ux&a;+a*{RKK7)W3QCQJm;4SH^(d zrvQn$M1T`{Dr>vUL(4BELZl7(=J*;yI5~FY`B|wWc*^BU8WrWRkqsBfz4Ric*{ZR@a~3GXX`hfXY*lCz8rQH zhEA5)TwWqJ&x#5bdQXqek#*G=LO&zjy`hbvja*8|C#29W_LhM!I4V2Ke(fp@(D0Fh3w;Tjqdw*5uANf>ldis zCa-?x>@*$l<+SGjQ7V&5{{D}fcge2)kbeL5F;W2vK90BWA2*QD|Neto{(W-u6!Cv9 z`gJAQ`}gfPksuKwG%W1a&})~X-$lRSi7SG7{p08_Ro?1~7|X7;T0LODcbANr_9mKh zuE_f{2T`tn9>T6FAhLET(>~Mw2-`y*6&-eD&h_WG$k2~&QlhGQ2$4AX{597947mCa z5h=Ja3(a{z|G%CXZS&to@jf|&bva$qfcJgiLD${Cv;f!d7{(~vO9B07My{Sh2gag! zCt-hC8u_2mq6@$6zkOE~33C12g@yHQct*A-hmj<#T)*pGX)sRzY{p za~T*Mog9YjMiFY7=yhYdBmHjF7wKxNe;W7KK)(*+{XY-s=;(E%`oKy!Yw#@gpgMQRUoUm8;Hpc>R^7O@B9n<-u-v zz{BhAafb1`7dr_v%kjEyCIz+Mjexhzn&FLU`CXYI+}q;j8=X<6bu(@w&cr-c|bh^CW93fQc z^^=m7lkP%kad?r0@vj(tcN_E3*kW{gv6e7*NpeJJ44$40VY#*9^^0yGdCHTu$A*6n z<>(Wkhh+J1-0|93d-|_Cfv~CL84l5423H7Fj3#xSz@C4)8rH59 zZaAZc2D|-pPfE4ntiMN2#;kJF`C&r!=py0nvV1Y(T(W1dT)l%XI_x!bt9}pm(Ej4+ zV7{lyUdM~YD5{LbAFkf{N#UGqI*SY{k_IIbty#J_oh)it@Rs!bNwA^0N3E8%#)5I+ zPAHWFssaQW!SH6&rpf@fXCx*cypL>@^Sd!Z_zI88K<(u+L9t%fqQ+1e#F%pfx>jwS za;$1CX>Yu=As(C`c97StIbMC*+nBpokWj(IZVR)UF0|KFzMw1~W0M;xFSD5zRCdoe zP?eL>si}?UDsreFfXlXZHuMhm4clgA0K?G<>MZ61T#Zgp;d;Eqsmkjf_E%vFquQC>+3O;n+RgfyTN(wNGIA=|ufkxsT%GTgt9-m6$ThyPnF@HZ&6~J!3pS<`IperHId@g@V)@#Y%>8`I2`Cn9 zsMqFJ$0>(wQ#n}V^-Cr%2`KR!g!c*ldf(`qH)&&z!Gy|PnK zMY{@g>e?QYbvA}o18_TCoMmYx3|RT5AcGJ{)~!8U#6mMo>RO@c(eK_=akTDM zx8l{<+lJqP3>$>c{pq?;F3H-1s{!M5YO*_|44knB>pKz+-V`B) z#WUJ#NGXFKh10HKV}acZ`bz^CMZxo3Z2iS9V7V&s3~i~QF)5mEt~NPa>NP)GHIPQ4 z6EV4D%%&YJrXmIA%hqO5vN|;Q&13GX9+%?L+A~GhWoIl5f6NSm8&{~B9J=kjR7wu` zJIR5_a7w72Mw$qyM$2gxR~Xsp(5Z!;mH6=bC8sTyS) z>O6bb8IcZj9QPw#Q{Zm`-m<=GZ>go;FXTS?Gab!7>q!_Iwp|M0P)qOr%%+-Uq!xY% zZJTP=oEBLt#^NXu2~IAn*3KG$PdjHj9qQ0TFcshV6y4X}Nu(YrdJG)Obh5l*u01f) zSOAFaqM|V9)?P~d4Sk};JZk5UAtO!*l0sb9?T50Zcns#XPJ5kHOTz-*BZ}+eC2PeY zcM8Dpe+sD1pL`!fCB--_P#h_1Z!3N-HruO%9nC8uWl&-^VGpZHQ@cRCm1-kYzprzw zn$g!h%vk0*92!9c%#pfqLBZC3OMn6D%S$aa-~M1?ym~V~XEbBd|8JYW7bd&A&S!P< z)Y^O5SF+a+oPujJIqqDkI^7ka!R-(h5lm39aT=^?;`){);A6)Komb=|E7k7&)$zzo zL>y3yR3$v^MUl=)#?g^7t+leg3>lbbkJiBinL4)XFiiS|KFAqL^ibd7pZC~EmZt4{ zF(dN2IUZ&6t`$?7|FafTD+`+k3CIuFq%KZF9#0$+7noL2*Mx^B(vwtERph@Ba}RsIa{fvSN30qFxJXnnM4U%X>P1G@V1 z4kY-5H|#ZoeQ{a|9j$4m0Hu3ZCb7&0mtJo>V|rRWq=B3zld!1~yLWa91QiWtTridz(OK#4EUvjnl@uy+Pwr|@hDglqcbWi8e z*aTBnii5@%SVB!IAaFED3SzZ*;XRn;#ESjUz3Ne`Gj&l<%2V*y_`co3A~ux~lkq;Q z0?Bo&^b>6}`JDTzF^*Imfg8KaAPMN5!uZ67SpeZJX94Eyvb^sr@_+xh7WyQV1` z6-Reo1Oy|*atD!*Bw21n(Cf`%T=MuacgaF1TT}l>w7eF(YlsD#S*)e`G50ShmqKby zh+`03VbFG3a^L>)=A&JL*3^kB&oLI$jR&iK;?b%AyYW-iS4I!9RHj))s^O>@FwgzT zUemwt2y*$|S2sL|Zy6UMuc)L?T(5f2UxISk6ZfyA`D>j|E&0N(S;kVzA2L1Sv3W_C$Q25}F?p~kX zmaCFZ_`emEywh#bh<~yRx-jtM-&M;VNd+t9*WWFm;&<<6Qya#zLHQ4~doMf-S_;3h znvmLn==E2@H~+2G9B6dLC9hA}*ZEHU}j%*7o__{NAF#XmU z&P-&`u20z8+TTvtLP9{6#VN0XbO3~kg<~S*_2)!|@I+{iPsu$@g;E_8T3&_D zqlEo7E;K}ltm0+s7N2m(pQC1$y&CZFPt<4#N*e)N*emN)?JygOjsWH~>LzB{nWI@K zXA?7JXEvKE_(kX|>rgiRSP050g8yZwmuvdMjJs_QU%{W{($^0lY^a6wrAONye!cZk zT#PDHe_}m`H;w9#8ay%$u(^)YSzp`8?v2>sXbtv{#YVwbwx>b}YZ=tPM&tWyH0dZ} zVl5d<*fE2Nc`;4yvI|boFe-9^tS1z#W(<-j_x9eB=Fpv!cBtrU{b|#?NFK>(s#PDY zgI*^U73Pqx#d|U7lTuJDyehpH^MkN&Y=i)kqw+DWTUA7tWSx>&=TdUN zAo;Ha7%5X2lvJ+XL5GNgV7Tqdgc%oM@VLNdch z-n8SHlTX@3hYt%mY1Q`i^Tt@kk~mcBx}nc|XbGD+J}kTwEaYw!?3X`uSAT8z=+AJW zmL{w88YZ1S{!&qNi3sZnu;IM@p$&=W4L50Kcwj;zxneP>7K2KlEvkdA`_3l zr>_W1AA}_;B2k0c59@8IfzQ;zLX`{R2`?_RMt2eSd|$aCV&K!b#Q?rDwEXetdW?=q zle2yBtZvYAP!H`bZ;CpV4#mz!@61X^N#q@7Z%xf+SA6&oXYJo&^E!7cIiqjY6w!%M zAj+LzHEjYgdWVwfK8fu`{;_NnAH93|p(NH9@u?71)1b(p#4;Sd2!W&;s5rot>4T4o zEmeI|@?8`<$`YNH4$`uiloE2lE9d4jwfmE*EZJ1i2PYg{Jgd@6KUdzA`m2EORDDZ_ zQ~=9&2~;9YWs3@DeEy>DveZUQ*JLFXPEs_s7xjsd0{K!=MwSNp;B-o(^xayL;L)4R zd|=69vO^%5A5fTTGs!ePp4lpW9t%UoNwOgX6d-tnma{ z1@=8UUPic}NSxu-Nz!F_JG$RQ_1oQ>15#G3dI-xofy0#-m%y0n9q4UJ9vg-|)R6yRjE2 z&wglr{1C^srytSD)B%abBQ}qk5O0i(mj@1^X_?b)<1X)@XAw(c#Gs}zXH(_B$Y`kx zM~lG{ED};MDCuONgGARcGty2i2on}eW1Ds`sc`4nqB54c!LuH5LJeUjz`{aF zdh5Ye!O0nHDvwl--(mC}Zf_9GUljj@O@{XCjor5Xh9k8{lr~SSa!k%!8XgZm%75G5 zoQF+(0$ksILO!Q2spMu8zeF2ZlPB0u@U8`Gi3rrIa%h3Q&;vfY;Do$}N2x?-JK||W zM4iK#L7T6M%IW!L<%d7Tfl^Sj!nUWLa_IY=0*r&11>supt0g4b>E@mw7j_=kD~2jPEo^A`{DFadnwbpYd+n2Bav(qBMNOymhozm%i=Nk zYP1%%8J86kjj*o7xxW16@6%qA9ICF-f~&KAs|HE#j>+``0yJUCzNHaRVKUS*+?@z^s-SiegBDsl*Yu^rG(L{|yi3{uyuNp`Z*bam-en=E zT}N=U4^tq(Plj+el1}eZe2mnZR746TuWvOtv2X&GR^+9n@a{ zuXF4CXIFz8Vhd!b!wbY=l;(L#a0n*MWfrMfQh^*Q(=pE$@Zc)x(A0if@<$Pw&$Y zn^{&*<|NJRDs$Tx55O7KG{{qHx)L2zsurHvCPY`!scFc&A6Iv3$Xm9t3WM6dX`#Q- zL#-Tis=$GvVx)@@O_1Q=2|_ibd}D)skRUz>uimMu%6A}9LU*j6-*@kn#0FiM!aO)xraxEopdh=>-zx^0bH_ z{TE*Mpk=VgEHADoYH&HnozZy=Jw~9M$$9ZXeP?d5T5nyFZ8SKfQYw7#_RyL0+&};auZW4Db^k)J-}6wqz6Im2E~3ft9~>l|pB$#b(FBjPcB?fpV8A094idKL(IB3^088$TKagyhMd}L) zJAAr0y47c;i*p~w;LN9+vT7naGCu-fMYKch$;uWTD+uM`O@!3e1 zR4~c8itF5Vy)$EVTnSF+Z;dNBZ&TI0-nA+-5yxltfahS27)AnoV!e~fF&W?&5MecF zi6Cn`m6jE(b$^oFGMH_YBPx7I1k?XOK&;{hxwQ~{?Bl7lFhs<9Vgx$@V1cM;5gN#xeq)f81^Jiu>8U#}T@@81?SZ*;6l-@aY95jl6&mv?jFj6R z>geUsBS-}x4Q~kx1Sg?6hDK4P;cj=XjIxgMAEUg-yen5M_Oo^6k=uD6w@FW)@hWie zIwtMi(U4^L4NMzzU?C8kmwD26)1F)|x=-)y#e-Q7+HGN);Z+-fEq#@@OqpE32uze5XL95t%YX)DcnOqyrw?0eFs1pDs3 zHPfeMWb+7=zL?833-DIm^M`6$?zyokcn?G!CjZb z{T{%+v2(aSJ>5xDla^~PI;Wtcbw8xIWX!{t0p!@jm$t_(8}ntE+TH_j%?iDqFCrbW zvp?FCAeuXEUWeMg1Yg!Yc}iRZm1f2rPeaPQgqUPdSzvYulX3Z+Gn?6aT%dJPZ4)7p z7wjjKYiI=8Z#q+pQ^mf9?MBlgc{ypPVlrXtcHkKtG8;5Z?8dN@@Bn`B8SW(yA~ky@ zr3XYXcJfamojpa3d-B_@E@C2it0r~37PpLXcs0z5Z9WKz(2E%qf|mH|a-r#pVxpE_ z99sBm;v8s|jiIBpq#W=9k_sJS!PgVRwyhyNmGwamuh+RjV;$laG*-U#V@{!LcV1V> zEArCd1xfhLtMXKM_U@aJOt?UC_Rk2M`PbV&G1oH5%~na|y}j?Nk~{6?SmU{$6T4pLaX6^epiR%sB_T+=Q z0)(LZ2foJK*pe1vK#>5J=&-s*;;1tyveq?I4_T51KJ0#(h1Mioc*sxAmw8_mvG45v z63h!t;z@P(*`oOjZba#x{&R0f|8`weYdl7*iJ9|dwlQl0*hT+DR{Tn+bK5s0WC#GY zhBB%Zj({F&jpK6~Hl2nPzLM&p1wa)vw@2k2rH^B4wlN6eNjTFuzU0R{BuCa_bS%6Q zWqCsYyA$aJmTEXr#d9QZ9}EI62bOoo)Ws~F=ygXSwo9w`?<~FjOAAm0RyIIH!6`op zct%23_nVdUlI#^p)G8b+*6sACZw2d&!(83TkRicqa2MnPkK0$xR!r-z%*KJ@wB6{* z`MhMiUe?yf?3#7*O7({C#$o~XZTEhlNW$m5zkh!G4j>;3s%xbS!8j2(Y(cA`qbwi?`dHkewWYwlcMT8x?hZ2dqf4Z+azg0cr zw!g<#7Kj(eba~WOaRrau&(~)FAn!`t$(uRfsSCcCcHEO1;y9SUbDEXpEPr9j<5yqo z?|0QTYYKej{P5Aio9|Oe6~UXi>lthDq;aB1Gsp_AV4Gn}gCGswQwvwu^Q| zV44f;gikVh4PUK|Rr1pkLlYyH!xLM68*3Ho;Ua5QQT3-o<}OmT^#BoCId?A6*R~}O zoo8IW;#|{EVu2o86U40x`!JT6*k08*5o>owFp8-Rz*GZbs^ea}r=-PhrHzF|C5s{{ zl_o{G;~<_)TQbLwwb~0%X|;>qXLtg#=#raTUc?a;6i3OrB6WKwA*;N_&6HP=`cp@+ z`GoVEv2X@|!)lM|b_iIC0Cn;mBsHdIdmzl%RO>yJR#>w-3e+c`O5gHpW^Td{8?aL2 zGvCV3e>I(*`KVq}Whw-u*E;W9IW3c+PefVXgmS~|uM-xxW=`$-N2@hrXNjy^3ES$ z4wYpzldijvMJP8E;ustTPCZHWoh;eB7; zSX0&nCox6ObrhXHQzT)9(lTKHAZ>MQO8^VcQ~IF`mj~yUKjhDUey3mnkI=eWyq4n2I|ZhvL7FDkA3w}! z<*4UJrbuIyjO_+a#PT^cO%&9S)bvi03t={{07MJd-rpTS*U+_Yg#blofW^Yc#UKDV zE~OZbbPAPvF^x6ukG9{4WP~VpLq8Ixb`NO@zO*$1w$*O+a9TRQE&h{{dTV1 z7HwfY=H^mu(T)|)hi08v9g$C>metFRwyV@Kp=#+Iw2dJdF5nw;ca~TDQGyt%sQn~+ zn$<2(g??_D{A#vGGu(jVc#+WNfdqJ4tInP8{F(DIF$~a0B>;Gs4DsqIOxTfbW57}u zLIsb0CiS@NQNbBws>Fds?CW;}tQNwVm^6zE%k~gcYl%kucZi~*mE0XI^j1F62TyDk z9%kk-T4*Zx{?oy9PNsptLi<>-2?D6Hw^v89<<`%bNB2rOTaPO+o?FRKE4> zg@h*PxN+pYg;z@=M>c&PnH5;?7vaHG!RLfFQ>Sy_5b6g6LcfO3W=iP&qEu zncrwLtlEnz?Cws2@RpWqkIXh~@5-?3AjBjQpy&uxHoH#*JJVvHB(=tX*(oXE^r%s2 z-OBk+gjinTC1q2^2q^}H!s{hM(7sDu*Z_4l;8+#z6hLYoa;m$jfB67Bg-c!FjqUUy z&O^E&MT3&TG8?n8gRc}9YIejXMq5EJYG3EQAjJ_-0f$BiO<+c`8q84wLZo8D`7N>h zG0yHD2|zkbYMH;fvCJzs=V)=aEa1iBNw$}=yBM~ke9*d!7A61+DX}Xu!9q3pjYrUP zxF5$DAfT&)w>7t?V`QbK!^GtfS%_HP-LuY0Mxmy5RP5LoR6L}WbT8c4EtWj3(uY4Z zI&U@SO*^`qTIeOPL}tnM8m&2~>jsQ|Q1sY6Pr7)K`A{z<&)Gu6F3wfAr*D@Smgz0= zLo}XSfxgF&{{<+z0f|ULZV(_Mbryyt&<1gN8-qMXr4k*U4Db1F&9%ipIzC2Oe+XvG zeyfkQ%`B>uiEqZ@^~LvWUIn2@_>>+q)&{)+j9s-(z;$uQ+DonyKzSMBDPwxOHu0q; zh-ROK<2HfTy!Yp+;Di7ewV%W{N(OJaA-~{Zb7J*uQFhz)eX6ky!08SMB_U!k%qA;M zlkly8gV?GefM|gOv~PluaXU7BJ>R5HQ-+*8R0WW-sM02RFZJWqr>y*pV#k{^yl$Zh z?7cY_&EKwfXuc&h+hz^9M;8PGkuGIAB4C!oD%LWrRWJDEYch9yw=PDHk#+TCL4p9V z=zZcc)JU0YhSwMvZ(;lnHA z*q)fUKneAos5V+vi>Ps7=>QOxk3LUU%cLubV@8zh z@no&ldD@kHfy+!;FkV6t^w8{c%k>T$u`HkKXgu#fytDSwvuz zW<<;?m@(2f;R=kojOB8|;F!|`TbU?5uEa~k+9_JnXszo^@#@})bK=p$sk?%pv}1{9 zlP}2oS9jN00hHoG9rv9E$I31(KsX^M zohcM<&QFXSW_SUF;CSqGoc@-;cKURAOHOd_OzchpdIA8nn&HITPmrEojovqBEHmUM z(oEK(KO(0s^mBBqK)*b4n&X#X8=G^|m6!~{U!&tjdBc^_@dmEpGZV?Py5Iyl^T@#m zh=U5PhKetd(Bt8#Bm~A)9KI=Vk{>e)PIORzxv)cPPIJ{>j|>)@!(b*sAOMP5%R2ZX zB9%5&G*hy71)zfuypqnH=1QzADHob1)2LclAx&QnXZt{BL}n}ufC_uTv-F8`9QgW- zZr2qO`r?zlAD{Y;iEMvw&?O~zB_I;~^UK|aLT1Hwq=c(+51uP0aSr{ZaCb+u7n3E>YH~h%B1^qW^uEsN!i z%;i9!>AdQ2;85tI72X}EX1_U6qBGN0YRhzyv}HP4ZEQ28!(@9^DNymUuBjD0 zRL97Y#&(OGIo=MVUgCi7xxWrcz}2?U{fQIVdH7~eETTnn{F#mVE3>)y)G^dY1dbkv z=xv`Lm4o?DONM>Ab3hn$(LHi7+x0<&MtJ?;AC=^7x#&=k_$3XB#X8W(kR$oNU&2vAhEccj%LzR`0!w*`CQ*2__*`if(DzLa)L2gAoF08|_EginPY$V7esb1I+3U>Tmw3}~v{es`e; z9K~N6+i3h7u1fiavYu|RJguXdw(QZS^|R1u?wZRQDD1@N$7n$OxBQsqmgOUijc0I6 z9H2ryq){Mapr8YUn0}A0QAcZobwZzZsR4DSe(=1X$d>-CG4PVPW|wt6#A<)Cu4F!d za1A41^IZ04E!5yp!vsthb;hDtGc~X`!8-{VpLgoP_{)Lb_@Ml8eb4gBKS!@eoR*Jtgn=I>?=x~*^K6!e$hTzQbu zZ;dhZ;w$W5lI}+O-%jv!r%cav?-hppZUot?DA9J;Z9(SnTSsqKYreO6ZU6(20c0jXd+Thy zB8x*leKxdlIoiVk`7^0}eSGgqXc0z@jzJKWsG$4GxlkYTk|%I2ro~&&MNH*n#xSgc)CenT!DTEy6Z6X0O%3~vY^-_=t17c zmGela&m^ZVEnjC?{uwOM%pS83Roxwyz5_@wAt%VzzmmTidt!E|d_{L`cY9;$69*vE z#n#Q*$haU@v{ImWn=(w;ISSfo``a zfvUpa)7~}sUf7WxVB*Ul321BYe_^5XFLI>iQx(Ucy6;Tw$5-<^-0a&ybn&4{sAAO# z5pF?pgV_anT=nG*voAcqFj4*vE&#pwCNZe18Bb3}RI+#Ge$X|W>dD^6mnp>ZrdjPQW0;_0ai_4s! z{@*BjtN$gGy})|S>5tXGE!Tbft#GPx{>zOK((*K+i7+<(T<5-I?rcd5!lQ-J6|0Vh z#5%r3`I(w;*%d#ry9J#4cvh!4RL=pfG=PDC+`mNs9(#HhRBF?Y(st)}FAmiYLKx|1 zMu%-_8ZEbkutB*3`f2oOBmEIXKrq>(ar9%q7nxD?HDW9>z7Mq3#bgG)h!_L$0m;W- zdWx@j>STlHRaU0ree1Wsy>o&#wU^Eq2zb zQ0;X97ZPusfZNG`p)vrRS*WslF58qAwkAP*rZ-`Sk}_y20tGCf$we1G^sMy^#xSt? zzd+Sz3Xpnn$o(0p6~rfiSEn`%$?t%DaQXcifX2moRnjCLF(=V6EtUhurA@5yxgGzUOHvckK~@ceLUc?9g5jE^a40@-)(4U5 z>hvHIvF01p*fFh-+hsd-(hr)9*_rjP(}sZZ06nQ3rj;b%p0oQXiC>LIP_<@9zN)VN zzzBS-ostG{?WvTdg*&?=fNi^C;|pjKRjbOMDq($`ijY(tFXGbLjK|O)jMIMjI>B*u zjj4XOj;nrm9o3mM@1FDaC#+(rr!N*)Vozw294{t{8g@Flv;ftlTWa9IPJaT5B6-l; z&kW{ufSmv`f+X8qjVw71OE;a2! z_=neTcT7}o-jC_jO913#&tTcdWr{;mz6H77-G<9ubnIUsDKl3%m2%G+1UzV3*8nvc zplr`Gl--wg(vcvf+#)-DSM3Dr;NiIi1M$vL4M*MY!y16=L)$6eTZ{swGw0;~7xXKB z5tFnGrWG~gdsX^^`^b^H)H)o;3LU!99pZeX*O)3<6sA4{DiEIy_*%u;8JGKZ_F2N# zWzzy@sc8+`Sw=-q+Bl%}L5t`$C;iDbpfM!GTI%;#(e%zggr}G%-wXcogICS&{wF{A zTA)evt~1*P;(c$~;U5RL0A~RI@V&aLhNx)znazEP#+8&7Q)e_TTO0rFg%D)FCCJW^ z|4dp%s+)$fa;lESJ6}NY;uu$eq%_!LeoP-<12S|}K_PnIlzvZb@1$jVwQQ$)L_uM8 zgNw#uVRof10a?Wc-@N6@>{p1|mHs;wClw9sHL?JLEI?`oCzt@aKr3;r$nvK8Q6#twSdu!Un=3kghoLk_*;?ba%K# zb_=R0ak?VSCx-{!N;7lnv|DdDk_9R?%=OhR5fu`44g)R97O#cN`LKZD*vIyJD`VoI zZ`Nd=xjU-j?iqOr(!bBI^bZusAF|$1>@L^@oksNsWH=ib5rJN5$B6mP)LoH|3b|Q# zLcmy@k$jGEzC<>>Y{nvvq2RoKHow`U$qIE{Iu(*{iT3Y`k|e&O;+xS0&-S&p&Nn=q zQx_R3g&@>kk=c_IBSq`Npo0UrN;o=hL_y?`+eMrZ|IXluJ7R6dKg4ajO(rW(N{*j{ z-uAst>tbEtik}_;+jMi4ZwWd)O&eP48V0f)B9gi!4`dNWyBNxiu7Pfk*N^B7SRKF(6a?< zo&fos_U{|K4z<;V8`2sR!&AY)aYo(uVP~G8^J9^gk(r~>{py4OcDB_}LKFTA$letD zTFnXB@)f80Kkc1qJd|zw$L~j_Qqp2eHOho+2}z+QMU#*$*`{{x#l|0<2=6K-+AR_ zZ_W#sPO?zr_sV+}8Dwp1(%;iL6|&_n8o63Q;J5T^T&&cK-pgT$>wHq<%*LdR=<_Og z#jAxfKTyk_99v5=cXdVNEIHp$Vc*pR* zu)PJzC&4D~#DB%}^EbOkvT24iK?Q=NQuNmc67M`WR6CDQ+$TxCl|W}PC6~Ep@#_Y_sV$LVBJm|J2Y9=ZzmueVN|VKkN?p0bE`nF{4`LbR3rt?tTefHA733u z7^;taEZ=2F7q+1<< zn=SFEf;k-(I-9f2*)_rc3?ajVo{_#dY@jp(F*rv!sNXVWGcC3A-s)( z)dFZ&)WFJzyY|kD<$t7zFT<$Rnp_C(7{D|&|F2+3S=&5Ld}so8jX)~-4}j_nRsT;& z<-_$OE`hM~yS$t<;+dpJHG|ZC?yDJZPT25A2x&3jUTH7_7n}crzD1?3+eQ^_#ZZU7 zQkEPHi~XNmnUR+W>5|FnA;k04kzEP3T!ElGmAU)NlZnMuM_dAJ6h}1R&=wM%y3$I& z{IZpztF2`^)e?6Pdx-yG47^}S*ltZxMB)*t-$CEXXBa@Z4q}gH$K28xUDV8{QxpMU zMPVAG>Vr(= zDuU;PTJFU&JoGr_f^^k48(Rddt+7^-;JWU?NzaL1Hg${hzQ3PfSi5itdd(ywS4vnW z0!vz){nlce0A-+2yel4JVu1<<+j0HG9iC(52LP0E)D@9>-=D(}TTR z4e&U~nG#Fnxo_q6i!22V$L65P$5WwmJNmcgam&YE#4MA~L)pa__oXWST~JbLr+Z`{ z3dZvW$)jZKrt+G!#x4isp0c|94j~xO%yM_wpsN!ffS=~9Xt7^z--Z>~{BE7vt+C8% zz3M{*R)!4d8-b~v;(Z~f10%!M=zyr!OYtb$Dh^_fV7&Y@{|hK%Tj}C})u4#&VN;iK4eeG2T}05Nu6N zINz|NBmT|&zAO!6m8K` zA$nQ5BH}}oY6{G8b^*h_%!q(zdl((!?56o>zyqO^+_K20Wf^rRx6B>TL0&%@^T?KO zjD{yvJrF3>{)(q^*)hr$@nC$;}Amc0$9dOP-lToxTI!k?D z+_yG(bN&X^L4A^%rA%RKhE{9a;USJ=!J;wXk2Jir}ICU}h1fV`O;zYoFtx%EgGZm|TojS<*l7vsvl3 zDl-0{r2C;*%tqCXxzUox)PrA`xtkLY_=cNV*A7Zxs-+(BrB89bnk)P6+hE%lu_3>Q zj=UC=IF+sn>O5kg`u^h6GYHU;{%_f0MB z#I_`d5|DrmIKkb{r$}Cd#Ub`}uyXitg=$jf(*bP?O@xJfxip`BY!E?vOoK};$pfun z@A1O$Q4AVoz^fDiq^$Y12{SA}e7!gzB(QXSWTwK{>k*8E9UU~_8l#AJnxv(|7 zHD10__yDsMkZ+)>%OAfudXDg-&1G&yXq{5>q^%Ge{fz7HKh;K?#ki_iRRxdZXy6zU zX5M!11aw?eTmdHx3KlAd{kU^*4nhReF0QUscMSAOm_E=~EB9Q#+)$(jOqo6TC zHJE^v!n>C0%%1HirXLHC*nc@&PB&<$IXP8b3+wG%7;ipMG2JlE5Me>oVf#y|-7Wy; zP$ARA!vowJsC>^^KhmCVu{4RQwUrTx0k2QO&>`N>>FK>0VR+PdJmG=T>?OIn#*&5nG8%;x)kFagFUO7L}++7_1)xDE9RVHz_gfJml2&9P#CWDp>2C zChZF8jF8L3)kvEN7^^62-^W-ZMK=YmNQJ!7t@F(E$M-Pyd0;Z@RWt zfylUDJA4|PW5$-k)_ewh`lFLAV!laTUYe_cQ{Sehz%;mQ>C~M0K6m+7_%{j+EpK0u z{>njCCa-A<2V?-{#h&tO z=Qdd_ZbFPtjC)jtdR$UyAq9|P2*Z6ft{wOWvui$Y2gAh(hJhNFxSjFfy?lg=(|?pu zD!$sHa#s41q05P>9_(*d0<*=J=$#vq67V~=OMgZvC?!Heq5|>_BOCB+$nQz_P3G-$ z<^(sn-0_EdYe$}eG~hR$6DY%XA}^8wwo_#I@YCabCm-uK-v_vY?!ygRX09M#P^X9~ zDtwh?rf+jzJ15<7+>bqVPYGxCJYcKaN$c{ZH}aaV8K4Zq!mw(rtSETymg?V#< zhFQD1E3^g=F!JMklsszYZIbBDg489*N`vAPl`q)A4(^ibwl+nh-Ym zZo2ryn25I^W8R-Bowc;@n9KxM4@p9YOx!eg`xedp`G;^T&$LuK2J}>!T#1&K!=hH% z1Sp?nDW^Z?e0sH7gMtzjH! z1E{fjxn6J`oH6}(#Z;C1-He$jo4@0*Op<+bIraDo4Q&n{5MdvP6E>D4sWA( zvofNw=I;`3K`^v&QZ6Ck0HaUkCLD5}_bL>mov9b753{wah+UZ;s-C{5;BD#%S>hk8Nx z#VXY@2hsckBj0_Xl*cOdh$K=`Liuctd-P#$QE?h;eC8Bl*2*qID5KsR>j9B;ohl6b@|ChhJmz=ecI-+_NJ1L>Rz@M(pS?$~t H7sLMw0No3@ literal 0 HcmV?d00001