From 1150963ef4a0cd6cc217cccb3f61e237caed7b77 Mon Sep 17 00:00:00 2001 From: mostafa Date: Tue, 28 Jul 2026 13:34:58 +0300 Subject: [PATCH] intial commit --- common-qabilah/qabilah-profile.md | 1 + q1-deploy-monitor/Dockerfile | 18 ++++ q1-deploy-monitor/dashboard.html | 105 +++++++++++++++++++ q1-deploy-monitor/monitor.sh | 22 ++++ q1-deploy-monitor/package.json | 18 ++++ q1-deploy-monitor/server.js | 23 +++++ q2-postmortem/postmortem-report.md | 51 +++++++++ q3-cicd/.ghaymah.json | 17 +++ q3-cicd/.github/workflows/ci.yml | 55 ++++++++++ q3-cicd/Dockerfile | 18 ++++ q3-cicd/README.md | 50 +++++++++ q3-cicd/package.json | 18 ++++ q3-cicd/server.js | 23 +++++ q4-scalability/architecture.png | Bin 0 -> 113688 bytes q4-scalability/calculations.md | 20 ++++ q5-mithal-monitor/.ghaymah.json | 17 +++ q5-mithal-monitor/.github/workflows/ci.yml | 34 ++++++ q5-mithal-monitor/Dockerfile | 28 +++++ q5-mithal-monitor/dashboard.html | 115 +++++++++++++++++++++ q5-mithal-monitor/monitor.sh | 41 ++++++++ 20 files changed, 674 insertions(+) create mode 100644 common-qabilah/qabilah-profile.md create mode 100644 q1-deploy-monitor/Dockerfile create mode 100644 q1-deploy-monitor/dashboard.html create mode 100644 q1-deploy-monitor/monitor.sh create mode 100644 q1-deploy-monitor/package.json create mode 100644 q1-deploy-monitor/server.js create mode 100644 q2-postmortem/postmortem-report.md create mode 100644 q3-cicd/.ghaymah.json create mode 100644 q3-cicd/.github/workflows/ci.yml create mode 100644 q3-cicd/Dockerfile create mode 100644 q3-cicd/README.md create mode 100644 q3-cicd/package.json create mode 100644 q3-cicd/server.js create mode 100644 q4-scalability/architecture.png create mode 100644 q4-scalability/calculations.md create mode 100644 q5-mithal-monitor/.ghaymah.json create mode 100644 q5-mithal-monitor/.github/workflows/ci.yml create mode 100644 q5-mithal-monitor/Dockerfile create mode 100644 q5-mithal-monitor/dashboard.html create mode 100644 q5-mithal-monitor/monitor.sh diff --git a/common-qabilah/qabilah-profile.md b/common-qabilah/qabilah-profile.md new file mode 100644 index 0000000..dd4d1ec --- /dev/null +++ b/common-qabilah/qabilah-profile.md @@ -0,0 +1 @@ +https://qabilah.com/profile/mostafa-bebars/posts \ No newline at end of file diff --git a/q1-deploy-monitor/Dockerfile b/q1-deploy-monitor/Dockerfile new file mode 100644 index 0000000..de3e077 --- /dev/null +++ b/q1-deploy-monitor/Dockerfile @@ -0,0 +1,18 @@ +# Use a lightweight Node base image +FROM node:18-alpine + +# Set the working directory inside the container +WORKDIR /usr/src/app + +# Copy dependency definitions and install them +COPY package*.json ./ +RUN npm install --production + +# Copy the application code +COPY . . + +# Expose the API port +EXPOSE 3000 + +# Start the application +CMD ["npm", "start"] \ No newline at end of file diff --git a/q1-deploy-monitor/dashboard.html b/q1-deploy-monitor/dashboard.html new file mode 100644 index 0000000..6526e34 --- /dev/null +++ b/q1-deploy-monitor/dashboard.html @@ -0,0 +1,105 @@ + + + + + + API Metrics Dashboard + + + +
+
+

System Status

+
Loading...
+
+
+

Avg Response Time

+
0 ms
+
+
+

Dashboard Pings

+
0
+
+
+ + + + \ No newline at end of file diff --git a/q1-deploy-monitor/monitor.sh b/q1-deploy-monitor/monitor.sh new file mode 100644 index 0000000..4f8d711 --- /dev/null +++ b/q1-deploy-monitor/monitor.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Replace this with your actual deployed Ghaymah URL +API_URL="https://bebars-64f19cdda81b.hosted.ghaymah.systems/health" + +echo "Starting monitoring for $API_URL..." +echo "Press [CTRL+C] to stop." + +while true; do + TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") + + # Fetch only the HTTP status code + HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" "$API_URL") + + if [ "$HTTP_STATUS" -eq 200 ]; then + echo "[$TIMESTAMP] ✅ Status: $HTTP_STATUS - App is HEALTHY" + else + echo "[$TIMESTAMP] ❌ Status: $HTTP_STATUS - App is DOWN or UNREACHABLE" + fi + + sleep 30 +done \ No newline at end of file diff --git a/q1-deploy-monitor/package.json b/q1-deploy-monitor/package.json new file mode 100644 index 0000000..0ca8fb5 --- /dev/null +++ b/q1-deploy-monitor/package.json @@ -0,0 +1,18 @@ +{ + "name": "q1-deploy-monitor", + "version": "1.0.0", + "description": "", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "dependencies": { + "cors": "^2.8.5", + "express": "^4.18.2" + } +} diff --git a/q1-deploy-monitor/server.js b/q1-deploy-monitor/server.js new file mode 100644 index 0000000..404221e --- /dev/null +++ b/q1-deploy-monitor/server.js @@ -0,0 +1,23 @@ +const express = require('express'); +const cors = require('cors'); + +const app = express(); +const port = process.env.PORT || 3000; + +let requestCount = 0; +let totalResponseTime = 0; + +// cors +app.use(cors()); + + + +// The requested health endpoint +app.get('/health', (req, res) => { + res.status(200).json({ status: 'UP', timestamp: new Date().toISOString() }); +}); + + +app.listen(port, () => { + console.log(`API running on port ${port}`); +}); \ No newline at end of file diff --git a/q2-postmortem/postmortem-report.md b/q2-postmortem/postmortem-report.md new file mode 100644 index 0000000..b16ca8d --- /dev/null +++ b/q2-postmortem/postmortem-report.md @@ -0,0 +1,51 @@ +# Incident Postmortem Analysis: Application Outage (OOMKilled) + +## 1. Summary +The application deployed on the Ghaymah platform experienced a complete outage lasting 45 minutes. The service continuously crashed and failed to start due to recurring `OOMKilled` (Out of Memory) errors. This resulted in a 100% failure rate for incoming requests during the incident window until mitigation measures were applied. + +## 2. Timeline of Events + +* **T-00:00 - Traffic Spike / Memory Leak Initiated:** Application memory consumption begins to spike uncontrollably due to an anomalous load or internal memory leak. +* **T+00:05 - Initial OOMKilled Event:** Container RAM usage hits the hard limit. The Ghaymah orchestrator forcefully terminates the process to protect the node, logging an `OOMKilled` event. +* **T+00:06 to T+00:44 - CrashLoopBackOff State:** Ghaymah automatically attempts to restart the container, but it repeatedly exceeds memory limits shortly after booting. Service remains entirely unavailable. +* **T+00:45 - Incident Mitigated:** Engineers manually intervene by vertically scaling the container's memory limits or deploying a hotfix. The application stabilizes and resumes serving traffic. + +## 3. Root Cause +An `OOMKilled` error occurs when a container attempts to consume more memory than its configured limits allow. The underlying causes typically involve: +* **Memory Leak:** A flaw in the application code where unused memory is not released (e.g., inefficient garbage collection, unclosed connections). +* **Unoptimized Queries/Payloads:** The application attempted to process an unusually large dataset in memory all at once rather than using streams or pagination. +* **Under-provisioning:** The application lacked the baseline memory required to handle a legitimate surge in concurrent user traffic. + +## 4. Action Items & Recommendations +* **Code Profiling:** Conduct memory profiling on the application to identify and patch memory leaks. +* **Pagination/Streaming:** Ensure large data processing tasks use streams rather than loading entire datasets into RAM. +* **Capacity Tuning:** Re-evaluate and adjust the baseline memory limits and requests configured for the container. +* **Implement Auto-scaling:** Configure dynamic scaling policies to absorb sudden spikes automatically. + +--- + +## Auto-Scaling Policy Design for Ghaymah + +Ghaymah natively supports both horizontal and vertical auto-scaling based on CPU and memory usage. To prevent this issue from recurring, a proactive scaling policy should be implemented: + +* **Target Metric:** Average Container Memory Utilization. +* **Scale-Out (Increase Capacity):** + * **Condition:** If Memory Utilization is greater than 75% for a sustained period of 2 minutes. + * **Action:** Add 1 additional container replica (Horizontal Scaling) or dynamically increase the RAM allocation (Vertical Scaling). +* **Scale-In (Decrease Capacity):** + * **Condition:** If Memory Utilization falls below 40% for 5 minutes. + * **Action:** Remove 1 replica to optimize resource consumption. +* **Limits:** Minimum of 2 replicas (for high availability) and a Maximum of 10 replicas (to control cloud spend). + +**Why this works:** The 75% threshold leaves a 25% safety buffer. This gives the Ghaymah platform enough time to spin up new instances and distribute the load before any single container hits the 100% `OOMKilled` threshold. + +--- + +## Early Detection Using Ghaymah Monitoring Tools + +Relying on user complaints or complete downtime is an anti-pattern. You can detect memory exhaustion early using Ghaymah's built-in monitoring: + +* **Threshold Alerts:** Configure Ghaymah to send automated alerts (via Slack, email, or webhook) when memory usage reaches 70% and 80%. This provides a critical window for intervention before the container crashes. +* **Restart Rate Monitoring:** Set an alert if the container restart count exceeds 1 within a 15-minute window. Frequent restarts are the earliest indicator of a `CrashLoopBackOff` state. +* **Application Logs Analysis:** Monitor logs for warning signs such as garbage collection (GC) taking excessively long, or application-level out-of-memory warnings that often precede the infrastructure-level kill signal. +* **Endpoint Health Checks:** Ensure proper Liveness and Readiness probes are configured. If high memory pressure degrades application performance, the Readiness probe should fail, instructing Ghaymah's load balancer to stop routing traffic to the struggling instance before it dies. diff --git a/q3-cicd/.ghaymah.json b/q3-cicd/.ghaymah.json new file mode 100644 index 0000000..ac07ee9 --- /dev/null +++ b/q3-cicd/.ghaymah.json @@ -0,0 +1,17 @@ +{ + "id": "9299b6b6-ff2e-4984-8d85-5bdb0b809533", + "name": "q3", + "projectId": "27aacb50-4d56-474c-baae-b52a853b4d57", + "ports": [ + { + "expose": true, + "number": 3000 + } + ], + "publicAccess": { + "enabled": true, + "domain": "auto" + }, + "resourceTier": "t1", + "dockerFileName": "Dockerfile" +} diff --git a/q3-cicd/.github/workflows/ci.yml b/q3-cicd/.github/workflows/ci.yml new file mode 100644 index 0000000..5feaf17 --- /dev/null +++ b/q3-cicd/.github/workflows/ci.yml @@ -0,0 +1,55 @@ + +name: Ghaymah CI/CD Pipeline + +on: + push: + branches: [ "master" ] + + + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + deploy-staging: + name: Deploy to Staging + needs: build + runs-on: ubuntu-latest + # Staging is used for pre-production validation before a live release. + environment: + name: staging + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install Ghaymah CLI + run: curl -sSL https://cli.ghaymah.systems/install.sh | bash + + - name: Login to Ghaymah + run: $HOME/ghaymah/bin/gy auth login --email "${{ secrets.GHAYMAH_EMAIL }}" --password "${{ secrets.GHAYMAH_PW }}" --debug + + + + deploy-production: + name: Deploy to Production + needs: deploy-staging + runs-on: ubuntu-latest + # Production is the live environment and should be protected by manual approval. + environment: + name: production + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install Ghaymah CLI + run: curl -sSL https://cli.ghaymah.systems/install.sh | bash + + - name: Login to Ghaymah + run: $HOME/ghaymah/bin/gy auth login --email "${{secrets.GHAYMAH_EMAIL}}" --password "${{secrets.GHAYMAH_PW}}" --debug + + - name: Deploy to Ghaymah (Production) + run: $HOME/ghaymah/bin/gy resource app launch --debug diff --git a/q3-cicd/Dockerfile b/q3-cicd/Dockerfile new file mode 100644 index 0000000..de3e077 --- /dev/null +++ b/q3-cicd/Dockerfile @@ -0,0 +1,18 @@ +# Use a lightweight Node base image +FROM node:18-alpine + +# Set the working directory inside the container +WORKDIR /usr/src/app + +# Copy dependency definitions and install them +COPY package*.json ./ +RUN npm install --production + +# Copy the application code +COPY . . + +# Expose the API port +EXPOSE 3000 + +# Start the application +CMD ["npm", "start"] \ No newline at end of file diff --git a/q3-cicd/README.md b/q3-cicd/README.md new file mode 100644 index 0000000..029d056 --- /dev/null +++ b/q3-cicd/README.md @@ -0,0 +1,50 @@ +# Ghaymah CI/CD Guide + +## Staging vs. Production + +- Staging is a pre-production environment used to test changes safely before they reach real users. It is typically isolated from production data and traffic, so teams can validate deployments, configuration, and application behavior without affecting live services. +- Production is the live environment that serves real users and business-critical traffic. Deployments here should be controlled carefully, usually with approval gates, protected environments, and rollback plans. +- A common release flow is: + 1. Build and test the application. + 2. Deploy to staging. + 3. Validate the release. + 4. Request approval for production. + 5. Deploy to production. + +## Connecting the GitHub Actions workflow to Ghaymah CLI + +The workflow uses the Ghaymah CLI to authenticate and deploy the app. + +### 1. Add GitHub secrets +Create these repository or environment secrets in GitHub: + +- GHAYMAH_EMAIL +- GHAYMAH_PW + +### 2. Install the CLI +The workflow installs the CLI during the deployment job: + +```bash +curl -sSL https://cli.ghaymah.systems/install.sh | bash +``` + +### 3. Authenticate with Ghaymah +After installation, the workflow logs in with the stored credentials: + +```bash +$HOME/ghaymah/bin/gy auth login --email "${{ secrets.GHAYMAH_EMAIL }}" --password "${{ secrets.GHAYMAH_PW }}" --debug +``` + +### 4. Deploy the application +The deployment step then launches the app through Ghaymah: + +```bash +$HOME/ghaymah/bin/gy resource app launch --debug +``` + +### 5. Recommended GitHub environment setup +Use GitHub Environments for deployment control: + +- Create a staging environment for regular validation. +- Create a production environment and require manual approval before deployment. +- Attach the same secrets to the relevant environment when needed. diff --git a/q3-cicd/package.json b/q3-cicd/package.json new file mode 100644 index 0000000..0ca8fb5 --- /dev/null +++ b/q3-cicd/package.json @@ -0,0 +1,18 @@ +{ + "name": "q1-deploy-monitor", + "version": "1.0.0", + "description": "", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "dependencies": { + "cors": "^2.8.5", + "express": "^4.18.2" + } +} diff --git a/q3-cicd/server.js b/q3-cicd/server.js new file mode 100644 index 0000000..404221e --- /dev/null +++ b/q3-cicd/server.js @@ -0,0 +1,23 @@ +const express = require('express'); +const cors = require('cors'); + +const app = express(); +const port = process.env.PORT || 3000; + +let requestCount = 0; +let totalResponseTime = 0; + +// cors +app.use(cors()); + + + +// The requested health endpoint +app.get('/health', (req, res) => { + res.status(200).json({ status: 'UP', timestamp: new Date().toISOString() }); +}); + + +app.listen(port, () => { + console.log(`API running on port ${port}`); +}); \ No newline at end of file diff --git a/q4-scalability/architecture.png b/q4-scalability/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..f033c4a846b5b80346940a7e5faa27cc3c8daeec GIT binary patch literal 113688 zcmY&g2{@GB_qUHF4Vh5JT3IT4F&Jy4lD#aET~f9ojD3$RqmnI*t9XrAHIWjUPvYV>PcaY?ZY19^`cSl=#Q*M5}a`URYr>AG;Tb;;ixyw-YUaU2^UyS?npUIQ^xp^iQX zGpb5dzpoog%2dIzfuV@im}i$y{qKEp<~%as(bHt|sVR5H{`a&h&mFoO?BPG#+MRy& z6covmA*H57)szIZzz!~``d?2#e>$!}3pQ_m_xz{-HLCN`=lofi$N<%D@MI`N{!$I1 z4QPP8-og7zE%mmGKa0 zL2X0#{XY#Tg)-54SweXUZ=8Nx;COrkXroD&VWhyh$Y5AGIHCYA$~3R{-`!*7CIrPcHUv?M z`|h}i<)?Pj8*MEf-4sX*HLLZe{-}8sl1v4~D#!6_idi&}Jy{$Qm*CAC{WhMgP!^g&bs!uE5p zFcvfF-AR1wJXW`gL@|0T4Szyxk9ZOm3hP@x8keqa^ePhG<)T$c#HEezTX?tLiR@T~ zrcZ-r9Admrni-|Xj}BLkR`)l0vjH8aW#Iy;E)=7F+xI(*Z95Zohu<6Izy1`2>zqzB zcOo6F1RQbn!Z%KE1?(flj z|15qqlj6KszS=I3J}w%t%aE0o_2r|nr0?E*?#^=c%HrWBrv8A@x;45H=UgA-IqHRt zBuqXQl?CCvb|%7w1Bh$D`yy2h;yHTX0#+MA$d%gdF9r9jRW#&KA^lo%jD@wtv!h4? z?;aY6KPHU|7 z9Ly1h9bllA)}q)HZx_xf$t~9(`B!VAy??%IdELB^mtqsX7kacmt2mB? znA|u6xOOnAq4-@H;mT1RX}J_+$Yt|d+8Onfk>g$=tM(N9#>RLz|K#MP5_$LYq@=dI z=ZuRC@+Y0lp;#e=IZ}7Eh0T0C!Nf_q7cHM3{u~{}AW}gFf0pXnA!NW_tm6G;==ukP zdfAM5Qjgx%TM@%_H>SyN&2xofr6f;autJKYYp25}5osj1K|v^oYKI9FJhvwc%@2g4dCKIvA%Bl};}0^P&%1V>rUS zHfDZAy&$~%aJggP{auED!;SQ%7D2~*b-ps}*r-Zij&NsRk0~M9CW_qm?MC1@q#Tl* z_xCY(B@~Clgts4??bPo5{4m~PPiT#4WY9+`idqSN9=U$%)Tz}k*T6rbbVn=4*V3?; zoG>+k4~(TnvCqm!y%+L{6yaWg0*v&1cIkeskYuOP$h`++?ay%|fH|YCo;!E0S=O&Y z*zH7H^^i)(anO81MZq84t3Yzt2V9Fvo*r)Bk5g;h{%&Y)jKGHQ5ugIvFj*9V1&NAd z3uiiTgJQisIdi8D#v9|!&P0k}5g)f>Yq)$C#V^smzw?g5J5W#yiY>hI&Bbg-6S2LnCMTjXpOlGICOJe*!#^eXIDh z5a?R?$(G5MsN|&z3Q_pn1R&}9#FLnEM;w=7+F=+cR_5nU(@HEwn96dOWbY=OznS0~ z#p_8FF58?aVf<#Nz_^ruhz55t?v{ozo&0v{_5K`9j`IQnA(Jnywb$CKFQ5qHKyV}u z&G!cL#bP05cUIY5`_$MP84b<-uCiV>(#cbU*8x#VKJU)EQwf)iDI#s0I%~u-E2i&L zaYdO{BVWwGPWtb!sr&G@M6sH+AxtV43aTAA;Gi#NX1;p2>o&h?NQtJMa|j=um+XNx z&*bNUv4}-ZE;Gp5PVtlZuU49tij`x1alH!b$nIjH@(hVk3GyFYPmf2?xoVzY?!FbS z+>vO&;hdre*|3oD-$(lJDE6l=(tAhE3HeUP8;aTWKv$)>z&{U1sYcBn$ky6zqIIJ2 zcJO|QSb{KXJ+?Mn4HMQj;Gd5;%1!sL+Ui?8A z>U^pagXWBL$ff_Xar@-rIchS3P(fQb1|~$qjy;4QZ1xiq1RQ78PH0EmW@v4QqSxw2 zX#XsGfnLIl`QuRMoR!l94tJ42G+4^Fq_>X*&A3r&_bBeKQnsPSQVToRT>3{=PG2$z zoKNjg>btepSmwSk@ME4aT0p}!?TY=WL(EKPV z@cn~bZhHl$dVYy?NLtA+njk7=ekN9kx^T?UB_qsVoAl!!%>A&FZGI+zewgd$5|H(r z|J*X=ZMl0HMl!ooarrLOOKU)~`Z0g8W`kh=!9Kyoh9vLa6UwRxa3eiPhhoVwy2Nw`V{j~aqM7%*)ArD7 zCDVuMy3ei!!1;AH-Kto&HOkxf=9#At8>9pkD!E-!k7dO#1ktsKI)yau)q~+iR3A!^j;9 z+I-}S%O1L4`kVk%Tg`C}YV>>NVdn9}*2Bk| zOWFm_?YF7h`BFd8sd`DuM{E30H38pK*+pP6c7=KsE6Ev$6JW%o4nH(bk<@Gd2oI{v zUq|-(o`5b`wl*)rP6~Q>@iur@9Mo>~$Pr;}j*+v}T-FaIJ70({WXa>X=kMFq1Ot`W z920GX*bH5#{F$}SpAdxWHV+;Q;~L(*dpFQOkZ&Tr+R#o}q^LkI6RC)HLF!DC$D!@G zkVsMtNJdL2qhTsu9(-LI?-C*}rk}JLI8x)~CMOUJk{aly z1BNyEH|uniR;g60_nXHXL-KcqYJH@US#O#6CB2Q15;N`Tww0-AX-nqcMB=1pUG?Wm z<-MzhK#`An44YUsTGwK_B9xMC%@67$ccx?Bwt$ugMt?)n)juEQ*qz zA;A`ou^gCyolMfIHU{+%u~PQigTpSjNMnSFiNr6g^wO@D=q42)#WqAK6N4zmwnWyY zWEVU;D;)Kv#t>Lei?fasb)>?80|rRsA{*g#^1<}`4+Rw4+{2RtjgBvEg;IYeGf+6C zPbp<~z!&8fY`ut4wm(GrE4W{X_Dgf08fQOLT*RY9eg8AA&_gk;2PgNetz*L1Y_J}%PvKZa6r)U>4D}@pB7v~8krje< zGJ9Ua<>U$HU)Q3?hL*c1zS)_DxsF*X(4YjcQBrzCk|=_fz=>T1j_^d7%g$I4XURph z4n~wb7g!hJc@Rk2s3T~Oz# z&rpKP;p2UA*pTyJn@zDV`YPl%v>9rtx|*wgoCF{4=Oo5}5Ca;Goh($fFbF#OxV+FA zVL2_Y5S?q3qaGrlRo)C6rI>0=DqqjgDr5ztAfGoM>M*S}@}O%tXN$yUZbl23%n;f` zZXWJ{(6vD7gBL<*Q(y@>szC7 zi4EBvOO6qDAj=B773g1Co5E7c%U`XL*M32Og>Q(NXHcw2eQCbFa)DBQAFjNIS%G<# z%b={Yy(FfdJ@?C*O$mO^_hJDRmxz4;-)tllE!6n0jGO)qA!4=GXGbPvRaZ|P7wxyJ;Ae@96-BRv$3YWMy*%?LW zQMk)TC(p$vvqG6S0MY=l*}V9bvXvvr^dr~u4@q`lwB6{0%!2+Fcf(a(UL}8WbI-#qRiCeNL zYtj@9l_uA7&~sV@a?uwSOVFqWGK@8OZ3IMes_N1Ai#m`EC-Q}CKPcGjqg(xyze@3S z-gd$%YTj9c4VZFYGh!mChzl#@z_5P^6o4cY0VXwofIgPo_H@$6A61C1Qv^D?nTCV8 zon~p=a0Nj8@hb?#@zC%0i8zJZsQ1ca(>hb694WBjoz#&=CdfY3a+{kXetVn6C&`=) zeRZNID=cKB6>;OmQCpJW!R_S{hDbA~6iD(SN0>lAtZ?j8NEb{b+Rm>mllG` z9%yfH=OO@=i59sTm3W5NFP}pWEZ~3lCq*u(nZdKvnFD;I0*;GTpd=$ zQuor;?7Y2UE zuO=5LR;$oL#@k)ULP*w2%q+P%dB(+d0E36mhSuxf{%*u0^q3e2E^u32uuR^((> z#)PmwTFEOVF}O)Fy}HXJ*S91+D~#_cxCD_Zcndl^w^T75wU^U2S#!$?1fi+9tI;b) z4VBk{yxQcK)f#O%i+x61<%{0Zd*uSJ>|s#%mqd@HzE@>#c0Xzmp9%{iOgU~tCZXzD zgBIh|V2r?#gy~GV3U6DTzUqdQeC~-C=eEh|jdH{bIgrfCE3(daOHZiLW4IGC#m>8F zoykayK^qghg*%s?ahXQ?I#o{*fP!GoC_E*049`|6UmYB?p=BA%EW>mU=Jn)O@?sxdC54weaH%~f`} z-G;(Zs>#H1J2WGpBr(p~9O{K!v6=E7e;rlU+oBF>sjvaab9lm9khClax%g&vwobLs z*V2|#z}du(vn;;|zDP;n6c814BzRjkBA}O)02l68G%5^GI4VIAb_AwPW)vE#nNp=1 z9YYE2*8Ik7Xl&rTf_{ zy5cV3T)?h}hyoXv)EY{ug^BjGQ4rS~8Mc?BSF!CHo~bp?1KkZQum$UbMFs-C&gF;V zDo0n#@_?Wf0bFN=#1`hO*|SawDmngg-2W%ZH=l#uQrFSdqmla_vtA z&JU}xLhKebENzi`xorfxoGU>pc}3o5)U~<7>N(~voG;A&(If%Cxt@~sR6tlne`@u! zfsu@B)?m0jo~E)(!j>6E{Fn|k=5{9Nm90t%YZq-=t$WDyLvwAcKi8;H6Vv$;y>?uf za1X`==>_+_`evL2x(GDhr-Uw6Xvxh_%qVE+&cja5t-S>$%sY*jE1NllARKUr^>Q^s zsyI1dQOY~5Ca@u1bOIYO2Du46*D8myt}PI3Ob3cqMiKl2FVhL4N)99x()2NSZA!UM z^(5qGSxP59p)C}9!PCStnLzh3(QiULu+t&k^x--AZOFS5H5HyvY!B~@!s6KRDjS$1 z&pMh~8Ps>P1!vPlBmGAmCyN91p>t0%gyCq2L##*15h~8pQpL<^t4jk*iG60>Q9S8C z2|J0*{5fNNg#0)myRpu$a?(bVx0AsnM_f!))cc3X!lj>+As%bNVP3{4&nv)kBlg); zTSN6dNYm}vwNSQO4&hR(JH56NQ!S9h5hbooky5A8`))(zfs=sQRk!d}$3Xh;d%(-;kVkxIzuF2~q{08vPVTJv&bQoQt zmxK$r2TrHkC5Z<4NK8mjYP&kg!^wdVr#yoWL`uAQZsAWeYVahrd6#{brmp&x0Nc8V zW`^C@{14;O^0u1_RY7J7XhDXV4RgDIO0CA8xbulW?6yNY+>gc;6%IQOy>3;T7Aa_j zXBZ{~2MOHM63W`SoK#r0R1Dp%z)^|bVaGPGz@78^t>>2$qwRq7P&XPC{gB~DAE{HO z7+=7y&aB!iuu&bfcGy|akeQUjhO+B&XK~3bXP^8i;DfoXbT)3TPfNvCH+Og ziE=YkqL8C4UP?a+VSeG7bbg+*nUNcb55yH<4Bm)iS#V1<7EK&!SZetchvCx+71wr1ou)xvTAlLyv*=GgclFRBYCfrkX@Dv2^(P) z3|&~k;cmb1%kvHhnJVk<4GL-z(blANsY;yek~`*Rj`$Z5E^C?VaP5jEApDlHeoUO@ zGCTiO%SqIx(>Vcf{JNHqPN=p2B>)N!JxQ+3b97n46fs`QggeZsJ7TSdGPToXpp7X7fUfUI6zvgg2qgR+{!2aZPaDFV}kF*tMyA zhhq7{*Eaoi;Hx$*9x{muT<&PtZqYey_GmjEL$s0*+1!Q9h6nzmuQz+KHBK4Q$!H}l z4I$0(XFd5JF4xJVh2qE@XZMxR&t(+jp`BTWgm)n-@eVS*@orP|Ey6KIQ-|(XBjsl!T6PUERsX3xJknen(Px^(UaxZ$S! zyB$#^1&nYczuA>yM{go*x~;ye7?`UGnVF2GV=PeG(HEGp1#zN&Z1B|D|%=o zuzfC4Y52yAR=>3Vi*4mVg_SgWpQF6D?pOZ9QOEk(bTfF;JDa&|C@X4-TOCytuEUmK zUZal&dKES*ItUyX>V(<*JWeT_4W+`v-HuTds{qRWNxyzhkO#EQf&(&a>j z^TtlI)R2N`N82l~L8-sQ>??42uT&&MS8sS;`^)kdU~D>8o!+3%JpxCLJI~-GP%~$l zf8pyAt0Mb zJ8ySnU@j)ut>0)sajaNmBcnY;U@3QKHs8gY1uC#&Fk3t@o1WhEvd|+dA8zdSnl?8Y zzQ5W`ROgzj9fxaqYkC!Ji+0)$H_0NirYW^kKWHj{jst;b%F3L2{Ffe z?kti~ayJk*!OPN+hnrvAxU-W8uLQZWk-mHkqxO8Fk-9SoV0L|(+P~xdvOUyOR4^F% zLah#hhdgN63US<+5JNFw12;xxxXQx8UbH@I}BttBLSIJ6d0Q}na1`QC{nn0#u2ID>~+3y2V~dy9s2cL%3!vi zkj&K91}U%Gb{sVk<8m!tA14su{j#vM5WZJy!1h^`u-OS0#cA(Gf2d=cb&CuMKDxF9 z@x2Bzb~T?wBC5_fPI=s*v1whi;;89w^RIF*_0z)g2qa|2+_vU&%@s)Ia#>c~-0bJj ztgC^ItFd;vktTP<&^YPN-?1wwkj@%SE4YbNdBaXnju*I!HucJy5Wedz9D&M;)gE?} zC6_-1uarQ8gjzQqrGYM@BaknrpGAPql{ZqJ@9dLn2)Ww1M%EG{g(Jvv;<#hkF!r_7DiN+QCld$jJv#(&TWv z#{nfb*%RoWnxLU#-h?}h44br7yb^79Fx6hpFk@F0u-dEP%#6{O zPIK?)N5yxh+t;M1WUBNvGsu-|C^r%xGHjooA+Q(2Nlgk8s305-!3&2QNq}ix?v%w> zi}`+uAlz7MVmMDvB{8jVlj~!rqRyi0k&S=kt)nXv)71{fic1qf*r@Em4d5T(_n~sj zV-P+(2#L6r0t-*nXRR3N^U?4*Q_)pogI%*uD+_T*PF!%}=xX-Y4b@$A4Ings!e198 z^J?sno#UK>@DdY8Ee0A7LJ3__Zr-2T&x_Wx{lx-MUPx$G-sEA+o{YiN_3LFR2oxa@ zM}gs8w;ZeN?mO2h?ODVPNli{pCXUpY+SM+yQSPqYuTK4{9Hhys2EJsB@X4?stVMer zP!b+i6Q;cQWv(C2FH$az6UWQ3j$uUIj{q2YB6F3%jtH=WV>E}A8Z}mA>WxKl*)G!v z6ja8ehKWa=81HNdAU;mHHMA2(E~%B8&%cM#u{8Mgo_;pfR;$);EFU$u=bgn9#FH?5S3T} zW*HyazN=HgP0k{qEtU=C#No>x`?2kLQ}Xl=t|cokYG6zM3onzHPR{>a0d$gAzy;sI$dpgL? zUruY(gbUdj3o;&PKStnD+K18$Sw%Jq!@gH^+iT$LrLmjDbt$pgY(0qnY8A+F02>FvjX!Hx;^=gJPw&j} zRbfE6QEj4;g|+hq?`|phL@a!rcJBUL$FdZakX@KUS%`Zdp#!6(!~TK;mxHvZTc?N2 z!(WudZl2i1G_Pe2S)S#d;gcrD5mXCLdbu2OJ14JCX%)gqP1Q7TW&np7JGjNad8JtU zc5a20+~JlRht2T{Cn-@td$@_=B${W$_p(Nck@PmTG@38yM0*0^vm=U)x2rQwUX5l$ zFQdpT(&xzAi?K}RDNcSv?2AF<4dM$NJE?6c32KT%X5R2IPL!*Is-w6UrXCkp2$z_f z&iWHvC#3sjwt}|Stzwt-RQp*vFrcDBhr}(nv5C4)IK&n|*q%Cn0uoshIHk}7$NLY7 zECKV=j~GkhR+Aa5)D}x)>x2eK5ZLv)`Wd?5P{n~+nsUt-E#fm*1cuuPyqNomQ7MB5 z5B#8_#AMI+bN4;^cQjLmPGUF*nqf5b4hb4h9gt$c?AQtW` zLyhW(4{OV>Vah zIJ2Q`cUDxvh#NNpTR$D@>&L(CHDgPvX|UodZ#i5&8B#4Q23~oz+QWEeRV4!9WC4xE zErL7yoyr>t0-~3J#5gaW1olR$#@ZsG4?2s0?u`3XYG80k0 zLNATMq&C;7d1Bhy=AjsRi-fuFQkhp1_I)Wqz|D2qUm2I2=x_$c--U$@EBRC|(*Tfv z{m4?{!2{z~(yRajimkTOA?mh$sY&9IbaE+t12W)T-uQ$@ge@`M!$poz-sYTuz*(PN zvK=qsSQ)sqg2_u?Vr56YSsr0L9(80~+Yucf!>Ox`;aMZ&Y@c#e3o9 zEPyJdt7_inv&RtEf;(ZvS%To-V|}wxd>lfn6_r^FDRDaE-_O53-J*bvjeaQCPft_A z3!b^4?c_|o;gaT;8PnBVW7ANcY+z*JbK7pLqMog*c`vEQdq|PkKjMk6>AI%S)l85g zP3Nqo5N>LViz*1>&&+Z^q{L7zD>`vFan`iuG~`MrJ9t?xnj3T;WA4fsDxnCTzAuz2 zYt1YawLGbE*lDHVjPi?UGVPjFx%RjVxg%c|nlZ0d&ujEbJJ0Lgxl{92*)k}a){3Gg zBLkGEuLetdX4X?8mWWeq;gkOfDYwgd#_huo0em_TaxRX_STRVvXzEv(doUa8lO)y1M0jeewjXoQIu8@E zsREwyu4nu_&xd2m*6(W^3DBju!SeB^|M0RJm~}J&dr#j6SZ1l@AH4q(wt!y;ec|D; zH0>k2A^u@~{c0jO7~q)coCt|NW_AUwUdTWn)6A6en4XKBjDPVm?GKyo7pHCdR>rHQ z3R6eD>3{F?F}VP&FLLz)8lYX3;J|3eFIggBz+GnPsh>svk-^BUT+RcuuXD+Q|B}>r zC;&p6`gq2N&WYPf|B=iDg@H%EzSNibt3yx&i%t}u4hrDabut&cXZ@}6ufJ(IfzC1| z4JI7k{l@_0p*XDtn4u|LiRL%wEL4$vO9udMAb`=rn*`gh|84nLbyoo%OJ8Wj-8+A6 z3z&z;_xQ zA8>q3|4{G*8IN_-(LeK_1bHxuN0q5Se~BzccQ5_R4!j2_eC=_KjU$Xj=Rbbp#aF<< zg-sd~{)`2a4AnP%W?B!x5RD2dCEEWA!2`5F87z~^q5I$asyy&x<*=~#Y`98yN9PYmfphQIhP(ooAdEa&Zc^~k@big`uv6t`oqA-5Ss4cEVXd6xuM4} z?~^i&e(I^&JT${J^bVBrH0hB<`KK9P)m(XFZx}09pq;3Kn*XWY!ji{inQBx>SGB1~ zN2y&!d!LjZU49>wg_ikYSn!fo;JvH3^1Kzq3#T;w{*z9Tk0J`ViDk;6BP0RfJ-ESdJtMFtrRgf~o^9C!fvWljL zSGqm0RR8Mn<_%QI!^0!&iCIjfQXcbo-OHCRt+vzN>H9a&#BeMswD?{6w#Vo5+qis* zN<~DtMN>uf8f5S>p1yv6le66E2lOM{CXqH267*Jsb=WVG#JXMlT*9pN4>wflIrA}r z0p8}_s(*XM;Q5yMOoWmV)A)V%Wo!K4#e!>(jQ=>cN{W(FD5800>4mF>;@k+mqiKm5 zRd5{HO4H)#i_n~WIZ$p;$*tpun}P!On21yz_t`f-=`p5!YJPwBQWIB>tRThdn-+u| z#yni!>3e1KWLU(-uaHl|e_W3DW(GbC;j7}#z<>3^5C4U0RKd|oLrHP3Up^w~l^Wdt z_Q9}M1i1Uh7c-`gJHWPHFnav;>(@n$0&u@0T5R^HtXJ}M-fp`m(ri!`2a-M z2@OiGQN{N}KA|&A>v}&Kug-UNN_R%(85Ly07<#a7)fC$Q$I! z)*4Uvz&DcmQR883N&NG`l4nYmRA0N*9^SeAQFGn9HUfnz@7(+E6|_<%17R-dR$EWU z#nDsK$L{MyVf?^+1DWl+b*I4e2j(L+Gp#sVX1O?e<{<)8SMwaV-}H1cz^THh;<|c zJ^~2Mw1Pmm3!F5t{4_V~)-6GA+@j04$_HinGUQbBaQH=MUn2;&|!^(eSM5dNQnRKJ+d z&@_*HlW`)42=+8vy1VKn`Kog4eT-=cOH2`*uQ-_R^_BOr=n+{S0Rc93Qnrgf>8*fE zzk8xZ*UjeDHa}?sK{~zh-GehTu?JP#<&P0FNz55A1;h?nD%|S%eW`Zr!O_j{?YV>*q77jwdG16~MgVGZpbs-_vBvibu!XIi%R`9dQ>_k!5SKN4%4qoxpcG zH%CYod`{;=o&vqp|7ciYN8Y>h^>p8tCq;j;fDee#cnq##TIG^_Yny_6wMAQ?8P@35 zkN*N|29n|eYio<)TPXHgpgz-b^?|JK;V8q-G9hs-Hhh^X_i}|haq0VM(Srr$I3oSw z%BNhH`Q6;go3Mp%ENkhxTxIBQVDo^p&NZu^Dc7}^F7?8LxfT7o6Dn6z#ib4(axcY% z%bk;C&`2y);A5z*KNn8Kc6?u0+s-|VdXrY|fSxa%A><#CpvCc4Vh%do9J5DjpF;vD zLO2Xx`kT6r+9OGd+Cy~;8$*6`eV;;vd%W*SJ&u|DpsAP`XAAi=y#d2z z@Bp3?ta|a`L4ipDP1tNx%ca$g(06kVH5gAk^6l0*+WV^*{7J87o>@M9POq7Te3{{W z*ON|_%X*I;^Iw1O8;BV0*WyA6<6ern_3%YQrN}TNE;6Sk39CN_t&5$H$W0LwXJC)J zZkXg0f$7)Ya8`@?98R8lX(HtueUWZ0soFwZPY*n!!A)9NVfP!|+L`*mz0u^CyFZ@gn5?UX#X`$Uulov)0vx}U8|Z70s>eANV6I{z`Ep2P!$#Bo(E`_y5AQ|?w<^!_EcCs zZ|1*n?uz23&RBT5U-;nY0hKm<!`&M_=f5+<-N-Chjnq&}>e}_)Puwd=G zu1n*c@Vvad;Jyp@?6}!cpSa~bmdnAEt)ErdhI@*MrC)AAg#Ok%JQPorjOeWCuaB1J zVi2oBiQ}75&Y#)F4uVq(t3TICb#Jl_j_#4w?ILQ@vVBI+2uQwH0sg?}INdn{rrO!o zmetM4D=T3un{lf@OJm1_st+U1e*X}ZRrH>@DgU)}5Qm@@#zC_rt1rL#h?GdDAHBV+ z)@5FHB2BKW)z8y3cH3-MU~hYQCcPVj&#{%1Q?u-QdAbgE6t^+WZMlEfo{fmJV$k@DBljyCdDDVPhDx;sBf=7{gz z0gY{?1+8y{O2zWb!RH6^o>GGJ8Y=4(kJij~!WWzanDifXZN-aL6n+18Fk64XVQ1zl z$>lvseJAo+qj4^)0yfFb2eUF1maQ3XRBjcM){iUn9P|ZKmvrlEK_f{{^(RwvnzouK zsJ-n;x<-D72<%twBiDPsR~xi+6cTzs$;smois!}k zE)46`-n;uI*Un<>(548*+I^PL`dFl7266ARkEr4^&m+>C?#JgCeBmy$jL4-*^$G8m zg>Ubl&CLlej(BD$Y3)$$bleT=6@5TXKhs;k`$NKKr!GbOiG?#s2_Mgv9`->*h65Mp zF+oZfkXX>YX1}LvWGmj+=kbWPAN4l9tMG4;4CFxdbHHFB>(}0w#BD8npD?V`!A5A- z#WyOJ_}31P*Wk-GpB&9enEM}o-(GrhGSWD5EWIAdVrce+6(&s_JMzLQn5y@#4=SQS z=8431T<>JRXZp321kFZR&RS+=d;bH%zN9(8XL==nEK7j>{f{vIeVtUe93k^D5Zlo?88saInIt%A*Oc^@SQ7@pGylH z?*|+RaQRMBr@HOtR~!;S#SiB#dG}g<(kHt#oLif<>mo>8{=+kN(51=ESaq~7-K@Dg zh--H?zy;?Qi`(rVJG>IqPRwT!K)ZiBC}*At0skmwd@6wUJDqqq!G+@|Xu8%Nb*Ee@ zD^wI}<=vRqV8lok9 z`xas#m?l;ss^GtI2Jg1;iKs4dxP|dq^zjlZg27|)o(!Xhy(~ce+VWw=w<|A@I&#~b z|F+Eg#Kfi-6zE-g$&2>0B1Q1pwy?KstXT6@0#2Bo<+GE2?4b2nY!`8)VzSOy)G<@D zWm-6?N8+;2=H*43Ia($zYG90RS84zmML*n*h?X6!oLwab{{&y@c=+r6N zOO{;<8wrP$0RaPAauqWPpw*smbFpDI*oBF(!BLR8`%Kg~fIM_uA##!X9j`)^sD4S| zNwEPs@BL&cFgOTYci}TuZB^{U!oNl0d7V4743@ViNYfRIiR3aO8H3N0DLSh{f0~@t>hV1~;mMfAIeVRvtW`Y1>TygjtyX zaYMW4(F4#+#COerMmzJ^Plb#Gxb;y32EIQV16~`%rk55vEqp0Itq0DT=mDWWYZM-F z-~041xL=#gfB#Cz$ES07f~soMUTqAo4Tj5tx1cLkgA2+FGcimoEPge2-_`sXs!&n# zt;;-ADrW2$=Y9%B6p8V|Zsy6lTxn@(Hb)cb?Z$(hDDK5rhgEeE-xtb7Y zJ6Diphi`8gKj}+8=hDk9`k8Yu&8}I-`svPBJayy*gO(yW#@q)*H#_+;4n(4IweQDQ zb?#MbS-Ed6ex(s3=nc4kQ23ixel5j$g`?%Uz&ko4%eACi-)1*APn^q;d~THeS~LJS zG&SIikA4s2XdtJHS?PeEJiD%`^Ot|hm)G1^oE^A!B{=h)y8`tLD4yC_x1o7}OeQin_ zH81Jv=$bKnrsAY^vP5&W7hti6r1ESSX{D4>9c@p;fatz=JLVbc>EOaAK8fP%cR#DD z?*e*b5nsx5?{}Hh&>I{77%wCjxnD`{c<;(n!Yh&PeB8nEkGH}Fu$A+8k8YU^tn9^( zDDiW96FrKl&ds*7(JH>Cwkh&`rlEM3AM;X&v5Dy@hF(}BG6FYz#s7-E4jYG*^DLjY zyW`{9@sG2wqgpfWeW&6m1pg8~Naq4iwHi+uZD@^{|LQZg#lpsT2+8`$pL*=zinuw^ zaP)8|Vw-ceQ-}OgyAWuCJ^-^@(Gjon;lb5Z537Jw#8)M}@An@Mzkke3aj3Vx)RN)q zaN!c#F?4sR)VZFyMajPZ_G$HfJC4GD9r?N99Ol;# z>YsSBdpKLe7*s3HCr93vDfQ_I{8>lS@=oWH+j+?@XQp)jW({+|4?SDk0Q0AEm zL-6oWKjy%BE*FEp_r)y^CncaQbG3K0OY?N|->)e&_Y}^2i?r5sTM(JwPFRu?w_g5g zRVw{RhvQ~7ksasSIDh$w^njx7!1m&MgBa|0HgvGak_p5lT;f;6l3~(0M$?#qa&z=2V==d05H+*_*AdQ~j^hmRB z-t%l;t_7_gRM@wUYGw@n4n=>*gF=bNH55T+k>JU)$s}s>iQEtfwhCQR70ztY=@MYy zY)bBk>bWlFfzafQL|!=oHcwL@5vQv4+rSDXvgOhMr{Qa1-&f#)?rwG%aU z>fik5gmn;rd_!qFuzjsyLT*UV-7g$)uT~Y3%WxFn6KtdVcxkXSFeArsoI6sHvGs?i zd+QF9>Cz{oxC2U^^DH>uYFZmhcbOGIxqS~ys~;^q-~b*FGV@>IAVpTZN%L`(t+!ve zv=R_vI7&K8BIXY5Jl%T4d-W=#Z`*TbNT2z^X7y5kbvmjgVC;bYa_5!f{o|L+IwHTP zApyW2eSP;YzPVy9oQOtGJjNlQcRrkQ4n@2aMKL5B8yl3lR$2f@FdM!12ZgFeKLC5sm#EUWEA~w; z`!TTO^fWiU{jjuetw3wE_xg_BKhr4zfK7j_-*IeV%3z;KowF(tl6gs+SNJFIF`Wlc zo)8-zo2Rr&wj$ntv4B7MTM2ner%)yQ7@%B-ao!A2nZBQalP+% z3z;{Rq<$SppFf6>&}p~+J#ik&9Q2&2)$+5+edd3FX<9vsX_072$*&VJk@R1eJ1;ZS zic;u4Fz;;dp)b@@yYBo=@aQZz?O1g9-+2$=pt>JV$H#O?b@A@|(2vn&t1Efl zg1?q+OjcAX&3FK)vwzn<-afpr^^}I$Scro6Rv^hJx{|iLx3XNUZ7{#1+PLi04lPm-vS(4M}cZ`aw8OR z{a$2Y5O7j>tc3MW%-ENkW9c8e-F`904uaEulHKg`)v3wlE^9Rc2}9|VuBKTxmmsPwQnEqgW9jN zlRQO*H8)}oydM4?oJc+Z!>oCXqjA7hoMPmV7V2Pq3+y1hdZ~o%8F^mf$?^5%Vu#^1 zS6A0M_k6%nRB6b!0Ef!}PVe$X+YjU0$2br*^yjqCQhH<9bAg43i!T+D?J4P7(1^*4 zGLJ*%cuqKSH3Fvg$H@X|AzC~ZO-bFoY5Qr+*h|VQ2C-bVy470uKVuEa%_Uo&gk{kR zYEoHj$M5VQt5-I;#n@{Yu4%9JY%!o3ns-|Oc8dDvODcbTKEs8A{B-M;AT;3&p-z0qeFR<~dvdlQ(fWmx=1cq03Ud#TO(MmNhb-aut1%yy zh7Zpp-THN9T6JkDXar6yo}`IUcX5c-eK2-ote&wNI2ny{XDIU8y|Xx6L`yvjaXYda z!Z>s5>7A@Ek3k%tWcq!nu?RX_n%XQpHn`k4^Qp7QnRIV)xD0|D>}nZ^mpmODsNC8} z`CINbKkGsM(!%rk*VfVbZL2;POd8W1Rz_=w${kG_AO5#Cf?Uf0w)dT!M3B{<8#CSG zuHxkvfdS8;rNDgU5om!2_`M7Z;95&`NW~-mC0Wp2i%b7_A%-^-|*h#|L?Jaj{~#vUHAW4 z=oLEfR-_U&0G1cbuJLTfr#Jlk{y{hUI-@C~<@7E~*+1W6;Z@6+YQ4ptn0i-r zI#t&FqW{hW2=6tU#{Av+zx`SsSHK+V%R_9q4dBrJ;EZvR1^M-uv$lyqaBWmk^7xz4 zi~%h~9%oq^m;+xsSZ!hu9S1(^(e&nK+^=tIbW4w&c!&hP41$<{o0tWBiNx}{;mDul z5|n*PM}->LZY&_1%N&?`Tv+>*!>NLNrH&*59K>aF*)aL^C=577f3mPf^J6;JLp8@~%eUYCZ3Qs zbNAkt@8yanl0i--$4X>4WqD4_){C6a??*O)3CC}21OX{_p;o0(qE;b)4b@sQ< zXjPOQjg)0aPSE0Dj3#Wmew};DwTFv}*Gx8)RI}!9E4q=bc%@0uARbaAZ_ydwG1KTX z_)$J$j$d{3uR9JE1m@&5eN&f^KOlGV0^sp4plS{P@A!SdLW}~eigDTRm)}{O=UPy1 zv$BR~&R6LFu}#JoIH8rigilxaRsZ}5X|4#Qt<9!%F(doL&V*uhtv$o80@$n7Lv8o} zbb)}qhA!yF*llxKvpHM!f8QYr%rVw-ZPz^#Y-`lNCX0RtX|J?5sqg%$vl7>%TfQnl zo>Pq^zMcLbdqtiDsk#(a{3E{u;Ppj-H|)@x9{%~XM~`Gr6c~RZP3nx5@y5Sz0Gx^{ z?mX>(+B--mK#DwyB4M?u}16a~fo+7&XcAV+Qbbys#S$;wC(<&@^u1tW#X692(bX4vrYt*{ z9jX6wGe~&Wxt+jkzfZ*PqXP_Vwvzxrc@=Vz=lR!v`;G+YDnIHM+wSC+9-ijdQ~~Rs zhhwIlz`raW$kC)-3b4Xb@_kD*Hv_5uEE)uIC}+zF8ZsMCw;F2qx;YZxy$hYFw1$)tvk}U{?ek$^6R`+6C0KJ_Az#Dwj&R2gi+a#rwK<|*RM{e=@&0kYi z$kqoer-S)%xEXVc4SBkX?|Mm1aM1l%z(&(*nPZP!wL!Ry*{n#z4VLY|vv4AZ96oJ@ z<*?<5Cn&sZb|Vp3;K$$-T@&7EUE>tA8zkj2tcF^r<;H)|fF&NWIHC=n4=BGJdpqYa z#4y8}G5=)!CmmN$>eae{^~gj;Td`k2YPB`k8w3pIzvGqlE*&dUN$ z@eIyHs60yu<(>*Gj}f+&7;JicCahU~6G8xEuJ5~{a7<;9An`ujII7@g8XZWcaUT7vAfcEU3>`$ zmV-qfz5fYD+1~rM!<~9#J11*C<5&vP!y1IuRN%7*S z1};YgQZG1&Q1P+!Mio4!h4ci3SdR#Ld6W|ApV~e^+VJao%1n2+IRjym%#c%(p<~)8 z3x}K6mYXCyfoEa3naD6x&qXqA&YsTIGiNMD@nFKulC=YAJFE3{P|h>^#mN<#}ub8o;icI^#GHdHME9F8nH$xd+whV>Yxf~Q#dSGRZ;?1cJz z$VW&Nk&nP?$lIKS~k z6`SaaFN_6*f!bZt=L8<#1iTvgL)j>1X9yBZz*2hab*ewaqwuQi_D&`U=(nOCIH&e` z--pH7%-^{l_B~_*lYzM9Tplol8X0qM{H( zM-tQCQ;R8#Xagqy{m$$6=J}6n=_2DsG?W@R4~*l{pHu^b^_`eKz?{~?QH7c9g*c}? za>dORpu1Ki!sGVtbapJhO7J83(*iqW3)(--3`*pa1MlQTX4{w{1>DG^tG$m6eqrqn})_?S<(9V-_!=+^JQ? z)kM*tbl%N=*Hdyw=Nc45jE~Gk&B-l8fYxSXlMls*I`aj-yZWWM8ejmTBE=+yZrAU+ z`aDi_00EEG$B?E+)A={D0iX|ZzytasY-oJ%Y+2HA3Y`8vwx|L8ruMAiGfI*5FJl@ zxhJ}(3%eH7y{;v8FcjV&(V@qi76&V4JQXT`)>rR4LbNhL;W_P$p-wOSopPYo#|eV# zxfA9a|ECr(>wL%CeRVD-zpMFtQbmrh_d)!rgPv*dsZ--k>kMDiT;HJcy2V1g{c`8J zvVo@9-!_EY<@tcUhBUXZHrDfU_tC-16ya=qTBty269Jp)FJ;MNC|1E6;)rz~vHS-K zHXR1W(p&)|TO#-p+qX=qUJV|4?ZbI`^215}R8)M= zdB|caDOIoY6P`$HN?l?oc-SFgH-3Yfn%az7=?7Z6ekC$j8LV`}QlcYS;xxhypf|c0 z>v3X8)F1(ddr@At8VHg@DS<{ZG7OlX`xs~mS{?ZUCFE1-`NNU%U4%>9_6yA#b^nAf z@VTb6QYa-zCM4nVRAb5v(sf}BS&1F=f`5tF9ibWcIl{*9bs|@J(sJqaIK&euG$(mv zFoc{QwZuSG{90|;g0wL*eHKiNypO0LCkHHGf3SSQvdngKduj8|ir>mm30cf!%c3=X zJuJ^}r;V(3|5r~!$`8#-B_YTKC}QW(Z~%VNJRK3NO=7Ruxg%$2dO6mP_;Ikkd+Mn8 z@|}pO&Czzbk0V&P(N1zJIm_o(rvHxmdX%R?JT)H`kIZhM)mNv|2AeRy$}AnypXJ`u zP?k4hjuM{Riu{Fn^lC>-b+9O4KQ%J{B+(fTp@2Bu{$l#g&Ep^9rCv| z2#-2U1}m_b8HzXs4*`d{1i(paV-%cr{?xGvIx66_>k5>_2XJ?xOKCPlQyx-lG(M~Y z=`qzb!Xerij!k>a+HNxe0MMYdvBBar-Z-Vv4CjMzafBhL37a!389puzYFx1&$`W{; znHf(VuGcsjwX(@JES7bmF=iUB?qC>n7OFno+qc`>t^mX8$I7~FPd!4Ss zHquSBdb}d^N~g`nV1Sp2hxWVEh`^5x_K6n{Kg5KCh1D4Tx&pvL+iHDllMG6PigYS# z#%fqMIkhq*JT{@Z1C7z0re1WHhylawnm6}fhvoMf1lGu$;Cjj&;hT7^%R>%#lXY)A zrc%%3qdbkH9BQ=EaG9L+5)g4vYdfgJGoYnUzyivKZS9vAJQsTlc;nB}H-YHR<#_fo zPC4@xb#tn??USNt=;8Xa!(VC$#5%)nLh{VlArK@6>*A1k)P6kFqvS*Dc~2h(^jsS4 z_;O#-@S-zHTT`N(b&^JFW$7+ry1`C)eK&6`Eof%OgH>je?nh0&jVB9$IloM_HYumq ztBHRbK_Hv)G|Fpv$jRQvKH20rWraO0EXUnBYb!5atx4R`e-6ifA~O_NoG{5Szp58M zuzijhZZx)seFo__%y^aNwyfUtt9QR&U5KM!=ZL0TY>=>~Qxup}`(+o~r#Gzo9@&7n zw})c_qP9Dw`6ULcT2|a`fzrnMmzIy4WO)R{YFif*dEV+Gp+LWjCFIBqL6ftUVpWvh zODZB_ZI);z3?~aRkLMfNQ!NUd6nMMU^^1YhXS=O1aiOaP!rMFCc*$te2!2QEb^5chlX9PJY0W9% zFw%eqs{X-td35h%*`=hv%m=~ZED%F6uo&JeI+#t1O-y*4ya1pj+vRQV+tSRZpOmjDT|PT-YJfP$>UuRn9$aaj-@1j2s?FzrydMuJAet7hQtVqBdHwcn3=Gsb zEIkh0PD!C!=gUWc!_K6s#)c1in(3M?8y=JbW$DqkvrX=JG&RHHWxj{vJt1wG+V=== zflD1Avh!iMJo@8VcQ{7%K?03i;9z-%stnqxxjoT$#XP^$)W`>@pEnQ8t92%CJ<{wK z#Z-B%Vt~t1W;bB6;~}m1Iqf39S;~r`wtjsuzuay>TBLq_TW0npfr;o+ytnuH(3Dj_^-PnS$Wy@SC_&SjoB}E`*2=v) zY;OYyHf`k(!i5O{;%nn2ev{3oS8u~#=z|Dne75*@m?I^{66%!mj~uIy(uS;zZk~C( z8dtcA4zIE=TC$)(Y>Nlf3`5xn>pZV+{u!uTV*|tP+|#VB3@tG*sjvfV%k2~Vc!NHbiG%eJ^%!-plVrA`#^K1WzZDo=b5;Qu$o*XPdG7mLOW z(|{v~tuxq=Zq;P0KLe*md7}sXdGk06rI$W$ z-(JmVX=!lY2qrx@89BsAXJ9sQ$x`1)`rwGuUENd3(a&p8}Y`1)X)xZ8(|NL}X z1SUc@tX>>M1FF4Yp-vUc1@jE7fyIQBneXeKey0m#>T#3ad(3i#=ID?Sc{f z#KAuKL~cGSDKm(pUy5Kk!<+fV&?*~Y%{z(s}dBOca`qjzZQ#f6( zHgA>9AbI+X9LTv<@bVBCn$(yS{nsK=hmMnL?lhZ%aR4-D=YHre;5xnnev;4Q=M!h~ zXqqL?r_lfcD|pE0&q*O;FLr?hg?fwj{LQYwXE-|<9i|rt9Ej0Kwo6wD_Thf%SLjJ4 zCNb6~J_G$k+@++^GdM%fKN`Tp5i6hBcKZwma$mhwItr4wtnfX>*mqq+!$=L7Ea%h^ zbf9~n-eKx=iROQ?L$M>|k{<8O=}w-M3{r;=qh8MSmoFKLd!aZ3yVHC!k!eRtqWm1s z)?JeyyI$fv+d|@olPbxmn;W7xbm(@>mFPml0{bVOZ;PMjIiktB3_yd6VSU z{p6#PR*{Fr`jsnTuDx2#d(P;8Ab>rMq(^jgf5kmBRCk z0)I=q8StpzjQmdnOy?mqTWzxdc*gVme75!seCje{GnAO%*6J)G*!0Uwc`LQdYe1lT`L_1+ z{*bYCMQ+nXbN(_y*T!F^5xWVO5Sw*owxiD5%crx224o7aa%G*In?lbxJmQ8}x$71O zPVCK5XD#IZu{Dd+Mg=8MM~#HO!L96 zo8Ac1bn@O@cckaW4nSS|h#g9VtbtMYz}IkQy;~Vj=hG)Z{1dvbj9X$59#5{AXu&tU%J4gkN$Xp2J z1Wj#r)%eb?91}F;uPXGaF+88iXMLrS{bS}F zyY{eJvB~65uu%=TPpi^4*tnFICIs9^!vua@Wjyv5k}m5-5=mw5yVk|zwV6dU55K%1 zJ9CMB#K(6eWEF7H>6RjFjZ#{_FLx$rj>|0xxAaB)l-b#Y@ysPkTw-5T7>bvN_$yH?gM4Zl)dY zV_O`JK*DEI{Wvb~2b&Zvd=KEa&mDx*21kt) z2HG6x>q!fqhpor0kD@jXI?|EvmwXVE9s1?I*P$0*VmVn%P*a?iHA{{-h-6s1w?g7H zRLpd14CIikO_*o?V?*(Qnu@gtO`%>?4gE{d@=htaljNpLUPj@r3u{S|WN*?tX`mFl zc3sG4mqCpfSXvyzbnPkMdh=u&@=$*2FoI*l=b6mK5}V{nR*iE99noBaOY=$ezWXx` z$N?sx*Wl{U zc??K&#oqdkW)Xg%)XcrfTi}D0E@J!o?mEV$646$en`+}UtOmV9IN#sMe-bCJ@ww>8 zJL<_wvdWKI848*TB6gZs_^}(~g;BeKMEBYJvn0_sV~>+}$w#f@RuY(`Byy}fb!#nq zoi(R~g{+G79^R0eQj2Xl@`i}|>6;E|bfV9Fy_k01Ysp-h1Y>Z^oTF=YRZ4^1cIjK} z{?r0K?B)?|4^4Q_@JPAWZi)>32d0m{t@$wug#=15DL>?u@%6(Jnb%R=@$RhWWds9M zL;5FOjc~}xoP>?c`Ifch;hqHI)sH8`0;oL-${UyVEH92}AMnu+A?{Oa%5G2k+z={c zrP{q^)v+i-W<8fbyF9n=qCME?ho>z}c-O`T;WzV`!*xLNV;0HVJ`yqtE6bzA5pPMt zHy+y^$IX3hV`O=7GjB|G;Z%X{_13dRyWMuD%5uAH|JaQ&3i5FowbT%efD1acSkIau z>dM9S8ng9&Dg826x|^j&MAAkRAU8wbqaO0_@bkk^8>N??RWnA>2*Dxf7}@i2Z%WWp zC#jK`-sAY`Q(m8Mwwxx7GZ)yAWALEFju)fZ-0UBkX=Mmx)HCB|mpFy}w$T&Hr!Btv zRqS$Kn*D4RUj34{9T$g{afH;`xc)-tLD4W%EqamVV&+Xe4HEjBnkP+sUE_P^kTH2^&Im(+us+;YXv zrnpmFfP=L;w+a}c3}bh)4PX+fN&E1^3Ik5Uz~gZv{zo`*Y8ssJ=8TlFJe(& zR-%N90!pg~f&2E#2b-AQe#hj@v3EVhuu|F*W`?9r-;yjIw)s)eFa#DkDeRACG;F4E z^ozMEND{w>pE-l_t$GdT z!qzx%w1>(Zmgyz#{CvaL-U2|fSY(+Rr@S2T*72k&l0QIv>836gLiC$Fw9O}Wda7O> zjkr)|@sm?h`7Cjn;zgT1HvxOF{PJ*&A^Y`G&RYrd1?;Z8H_d6pBo+eL4}#C1+U{*? zh(-3O(>bE$D`;|}wfr2R;jPlMmSC8GyXcn?q`md9IE0p%HQ)m!%Z^Y3JUJ!@ft9~B zJ;nuWg;3u9Z{Nz%;4S5|oqLII<(uK<@35yKtJJAp@R+RKU5)067QKo-{aRFC-nhn` zNZ;c$m!tP~moyU8S(p46ZP#=hDSWB6@b(*hr&-tEFG^0?;3dJe zwH-G;VlA@vKMn0I=DaDz%xO?bGJ7tJXBw9UR8COe^1zl(zP_8aMlUhuV|dtbJShpN zZ*BG)f}vpRHygedP4tfSt7sX+MZ)$Sdd=$X<6qo%J8Hk^Lu}D1C+gX5X`PNBR*!;Y zM&Ccz=XKd!a!BeZ?%;?+478rk#@Cq4(^jhWJ%x0Swx5}5qz4)M99Lp5-J)6IGF-2; z=!V?UcX@|*!%+6BcBH9=K3ocv(4|pHm}1|0Y?fz~YIAIFl6!ncXE4WuwfY zZ6w*TjG)GoO*Ax`$@y{8PBR#>bb0eV=#!0akz(sB=pC*i-@o;>k8;49`5Ge)!FT2t zKBCQu-bqs*tkOcOvK^%YYGb%@iJbBrbe$-sb{^mE%5M@mIIHsp)P|^~+}_b!5(OO% ze{9^OHEgmYb}l{R(0Md(hUz*Xu=HB! zrx~o4r-2*=WYGzkB3KumqNIEC_BHv(y1f)}fY~rSh0A*lYMFfPfKJw^^2R;e?VPoS znWl2!kafB^KfBy2NFt6H3O_2BDQ$J#G!z6oRft}Gl4EV8x!0i}aI5|FW$Sm7j24k6 zJ398$li;#uUeB#4v`rWnLKwRV0}jy&X{o*E^4>uVI`*)b5Y%ZA;E(_^vk-5bCBNuZ zK#_rXQX0nF^vW9y&y4>78^|B5eZPg);9mCA>%l<0vuPjHbgTgg&%rYS;m2X?297gj zrG6|}vr8`X-$EQN5lKYg|Ly`JK0}vmb$T{ofJkODZOK_I+WAf=GFM7dD*G(X_T-+^ zGz8~jA7RQ{WvT($Yt2VE{7Uy-O)P7}>Kb*LHgBxU$6vDw2n;cqn?8Npiq(Z+oajCT z98y=%k@W|f;ZmE~N3B?MkJ=*KBJ+8S2uB58ZISMjkhtN%e}a z7iAJV&HAZsALe~Beh`_UnDIf!VdgH>PO8|`+J2^~#~XC=+W0i-)wWFO^KPB!c;TGU za{A3itjDrEdll7byk$O_<0S@Mt^HEgXNXk1?}ZQ1hKo%o&QM4%KF~|`pHWEiKP=Xz z&@v$+{rQY`sZ~}9i9(XSO%};+uFA6_6%c@#<#&k(P3NV$Jl$?~-j34?3PuDOg4*paeX*i3|4cAaCHduNkGWz4?HDP6zL9FP6r#Nrj;$<6zJj64v0 zmhv-w+p_eQDYY+};!~yY^WDUS;SfimqqMeUr>Su>$ck@6N89^#&7OD534y%rU}K-y z@mcG}O&|&rnOQ(@@%r{r=67n0?SuMpR!(EZbAH^r1#1^st~c`C_oI@qxu--xXNKW2 zz)iP7NGe|KW~fUl1=rz!0PMnb2y#H`p=ZQp0oab=`%+g?m-i1dx3GM z%N{Z}cXdsCn|92-zG1)bfGZXs@|<8ze^3MDxOq#bRj>4wq;k@65pMb|;I5+SgNY~4 zNGnwRCX^PGm6cP40zs*jcuOojpHg|w|AO?eNl;1HVy9guK2(uuTr6`Ly&P(+J)aMl zKcm@#cFvwzb|j{;kv7MfpwB*-SGVfoqkrb@>sl?O+o%iB77Pa*4+j%R72i{<$H(uz*Uc$6nGQH7>en_(!vRdjOiq zu8mr#3b6i}O{h*Eyl5rOE`U`#$uwp1(w!}(PhxP48fZ8^*9H6CNZ3zEE}nS7AegJU zARcDv=t$_FDoj*)6ZG}X2#vjdy+^KJOP{X)O2|{dXD^%e<&|{tQr=FtKAUzD076$D z#B11sSWMiwk%iknN+Vsv@r0E>=hJF>j!~zj9Fp=n#NL=q-UY;T7JfD_rlL1dMUAIt zHgsexyjiq6q-sJ#pdNy_s4-BgKrOag%6We@4-rZO!-0&iYy{hM>63nzq&1G{=g@VT z6n?BBepNp)#KeKiNO(zsapNt~G4H%p9*hxai3G0?4s7{WnKxY6nXsbywYBj-A;d!f ziX__k`F=@`^CF;bWK=iP^v!&8X%na$98Y{*)S&^73rY_|A*z;jn+-=#69gLj@yYY+ zRLwA(Tl5;aOlzpm>a3LZ^YiMY9a{PAr<#Uv^`P3$`Bs*$gP77~oe+->U;Ae>l61IG zfoTPcu_m;+baP>~UEmNz9cP{>(mB;Fd7>t&lF}Rwrc+AUMq_|j+>%;ISMIA(FC$Dc z_s`p9Y5{s}e$Qe0xxE$UTUnAm8@34Da+y0LP37&zA_fPhf2xFxkw_HW?i_lqO}fVV zq4ykSLjI0gmkX_EJXx$U`w#A>d@=U8q$?b*W?-N$691GbJ71W$0n>^zmkk8nrV;og zqE0_f#zwGWj<&pXbF{iXYGkm%V!iFnJ;~C5F^^Xudk!<4fQf|jx1!uPl#2c=9j4(K za^pX>03=w$Hai4H)$~4iTgarzgDeTugO{$n?o>Ty0r|%IRj(BN0-@Y0m;m@9!%mm8 zw{wSHb9^=@%y`9scJ{uQ`b7nAfQiQZq7*9#NS_0upzd}P$J~aXnuh`%o0qY@oW(P> zBmK(49UBsF{1(qScA`#w_u zN`@d;nje*9-X8X0Ud;@X+0Ioqjp84ZcbT<$Jsqdtbrd5$d8W#A_A-!s(a9~0<3Y?H zdbJ!A?z82b+^Z|ZaS_JLchy{}m`0hN%=L(a)EMw4%80j_w!zZ`CWW0WXXSdmFufyI z2kECOb3v*e9)zSn@3Ba*!M^G!Ms1KSE}oL5xTtoUb8dv3Y?1Mbzql?a-|-(Ti4?d{{2wt*NooM+!h6TE`ms zGJ|rw4rJeg?Lg;3bsv=&_ah`zpr!*fBh3;BdN|q_tWCQ)+b3#fkDI=KR&zVpoVvLV zwy)V%U3x;;>7v=JOMt&VP3?>AG#f;o&IbXh<(tt@fYJ`1f~MbCVsIgpy2Ik_mp0MS0__h|OU+1r4^5NmeOw*kuZo`m6 zCCCr7#@5I_aGrYF{CD7{9iWa1@bmq^C7wX^o6_*IIzt!mO$<$0k}zC2fuSdrlM^9( z@v2y<0T&89kB8R^Y_{=EY|bZ!NGIx5j~;BSY1iGsV8S3z6_U1aI#cZ_gSaQ$R3GQG zk{x;MEjfC#DJlLurO8=rO2iz2Ys+MblcL6N>5x2sZH1kHLRW)v>KO z%q%;_9k^6MZoK-qh3O`t$Hq6G<1#oe*Ug65E=y+9Y4HAc{@HK3jgKG{V`t?FAEhLy zH5_y}s#3=Y-sj}TDv#lLhfde((9|$D zoAVsAh+jet&!mA&z1Mms;3$gzxkQ~PPq+V%{Y~7@Rk8S@^qrHf44m_J6ZWk8BTg_q_JWizfzACc$)lroXG+iF}H7q$?xItOb0OsgtiPZAreGSG#-yjgKK`XR11 zw*c43LXklUF1xgpl96kw4KMXc2#s4(F~7;Ifv~TDxi|t&D}4SPD~to9RKjTjE?QtB z6x6|2pp5nD)8`3>X~eg@VA*w@w7r7G++FIonJ2{GN*dMc42a8cdR zA$fu!%9THQSNGosZh+DEo`e_=M_`jHGisc>m^cAhRI8>)dHCITcC(KM8;wpY6x#@9n*>t1JABLort|w;oIw?Q&6|{Nx?w=2Jm%aHI06 zF4a^nOKeiLN1glfsc;nMI_Bhdo?%4UNtdw6+DXsYv&daXkrGpy449yN#;p<6##i=J zXTSc+n_)`xY8?@JnTLW0P5gor@oq{`6NGp z%EZuxq)>ogse0dcSn0y1^fuWaG=e1$!vqkecP6Wicz;iU3Nm z{l_g+UfRzGE-YE9DtFo!CY12eXll06F?csEsH07z9ZSbR#%Sc-Z=dskiAZ$;mR`Uw zY9&Dd&~FZTHg*9W3A-T@rQV}mO>sZaJJH1CqHyYNh| zxjpCj*oj9BQBzjn>@pWdzTJ0@jQ1II8_#?G@}q;E0Vk@IXb-+wDF&JVtV^kI=15*&aNrzQO7s1UgWTCikK zSpnK{wHx|{tpEOkm=#Hu6M-|%?S}I*r*flG$jLhBq6ZmuqG@>ODhie$@9+g`C&7WT zCwTC8jm|mGg0qYGf!$RWJ(_7QE?A_;sF(7s+BaYxtYl?%B4vq5u>*N$LX1G6F2wPT zs(=qSBGJ_BwLP)?I6{CC`_UpPzrP#P0eynGu4#{>R!0Ad)W_cR7BS zhS(H(0wcimka5hY)`wr4q}fSc`czxHeMt`Dd;TN(+A8LeBtAERp+unoPGUU*vBODn z$EasleMQAy5ZsOeI+5ck&mq$DWMHC-_Xn+YktoH^0sFAuHN zOU%fO-T;Rr4iz%E+6q~{xmt^~a@ms1t{i&u9=ZKpHX`Ke_X%j#$hXJKb0t6MWn8Z^ zIaNUCE``?h=nfP7m?*K@jPqGK?Sk-X^ag!COT+%du2o*z2?tE3{JtAk*!kK$s9|fi zgW~BU7nm$qEYGrrA$&ufC2@L_e4&aV`q3`VgDG*!INeL5g8USa4Gg&3j>zCDvCzy! zf8q&f+tu=d&j52&rFZ`*`sys-VL9ki;!|bN8EXv2nvq^3La4m)EAv z94Xs@4VMob8X78hJiPa0vKd3i1EkcqiKl4|e==++q9unPJ%xEMf5)#> zE`WaS51-X?gGoMt)zRXd3TIc$`a~1aMf;kPx7&>t2bl~l$>&@ReXo~^LzDRZ0_ zw?|$?OGtY|QD7)V`D*2L2j57zD+%71ZJwpK8%?z!OpubqY<>VVC^6YfDvS96DNy(eAaI(q_?<#AVoGL69JJ z(aDH(a)3ut;10?rgCO!a@Vowq9L2*EQ$W)8b{8k3HVN+(zE$@R|Eb-`;am68Q@Z1@LFE4m+K=u z*$yPRPV@*+GHm*Oqe_}{m;>j~rk zK-CjffH$~ynn+!jRw5-)*UAA`P6E6kCNTH*zc1)w0ul&9ixTPoX)lu31Xn7+{oU2H zz%}HXf@A^TPl#?+{STp@nfL(xo+cHR6b;{?UZ}dHr zB66PySNS9Ih^+GM5Mzs|09|uX7`f8b1iS+BE9fzj8$}^ZLHa*eo?8NxqWE4HJ<#vD z0Qh?a%goN?z&@*tlKbL+y2cE2%>Yi<->CBsk8=)5USyz@ruZFJ1<8_VN&s^R$bz=j zLU4-y;!u!ncnv`Njau73E&V(5!ALTkb8JZQRWqIMWcve-I8wF?IXI~w-+a8b)9dex z53^qaa=l!Sr~myavnC2KJRCRbKLGU>Y=6`WK#LY>X?sA^lxI?kI{*FSFyw}d9{pRO z?RrL-k(bvm#MODz{v#y|3>lIGAS6z4t-A{}4_gqWnhkXkC}Y%0t`=TjU;le}Un3`; zU!I~ryzoDc1G6Ubu6hoCe9NHgg;7hUc?o>veWW(<1N^tY6@9O#h}{Vo^v`U?Z~kqq zxdJf5v6$Ld)cT-`JK2+0J*z%!e0hs4wb8V*oX1jnL)wbsUGIWvcB7O{XNZz*A(*A!`VecX3 z4LbJp{^{NL|}k0gnfLiQfrzH`U?Xk$Xye!89lc~vuT<$B!f?JV)@#Rh!WEJtU4 zLZ!#~vf4x(6?uIza65NGQE7d*UMq#3QBZ>PFKmJ5y*nK?S5EeNgdZVc;)26Z^4hQ^ z0VXMxkS)2m`&#JHCd}esWzfT0F^u|CxFVxIPSz3?JEEVJ~4S9SzkA%s-yxb?5KD_M(JBX-xXzjHo$dh34W$oIWvC&W|SYq#n8y+e3 zW~&hUK>Z@=otbhZG6Pqjbn_)ov1Z1-uJ-1XW*5qv_EW}|^bX1&YZ=~$^y%2O!pgXE zVED2x6Znp5wQa`VN7@eJslT+RqJ@t9jwC7o`D*ixFS=NKXguBfb5y&__9;Z$>7aRI z1ev4?w7uaOza&Q5+!Yo*C#0P^2>%P@iYlOq+d;rxElM91g$(+CS#uTyz!5%@`^kik^AByVb@weY zbY<40N5*CuD~}@A#Bq6Ns0Y9li-SZXSNX+f<~aiiy#7*x$Sv2LCEDcZY+S`FSqA11 zKvTE8#)VB3Cu+yhgp~Tp2%vru^qP5YV-h>xRcA+^;&FJ7{KN87)PBy zw6cZVlaNNe2gv8XR&IGXgRwCgTB|Ds2uHo8{GxIFL?nymMcX(ThDHe3`N%O!v=*ri z4qREhvoRSM8!BEfTbK3KWd+~RCF!0q(jUY}{btUMGOqK1Rjx>EL31o~x3`f*G&&vX zzBCb_nA2+g={M$%9pL71$CBs~bgA+*s25x%2JAej6RBO%rS^(0eIJB+iYR_l`GIr? z;Mhs*3e8zsquU%?0a;HVHiCo~5OfspR~jxghWYD#jhMW)!UC#4#5n`LM(wK#r!yyd z1^>nq+?ogW#s2)0Rv)j3?CkQWa)vrUW0p`yHg)c;bGgQ5%iih0tm5054DwMrj-pt>`puqznp1 zucE&ITt$08?1(%tIdA?j=iVeexlaE6BjC{zp}eOE$|ZA7M}2g%V(^~%%JULqA|E#+ zMlOM%3T8$oBi-9N8pI^8?*gs5!-~`-Hhkvx?pn?Jk5|4Ij+9&Oc*#|4sDo_n->>cz zq|G?0C+!w|5l7B5a9*{RjT}sXXbe0u*YNq~Umt;dYHl1G{RtIAnoai~spadz2toot zMMrIc&I3tILB#b>nE)kw(NHXnyuV>lq^ucEsHYt%bY7}yE#p529Vv?g>>J6%?*LWg z|MB`jy2%T}{UB@`=+>DY39xyn0JV*f+V1ib?{SbaCGSFvWcQ=ZueYd1n<@2|wJOMI z`oL7UJ>#W1Zgwm%xxkBY%A+r3!ryFPG@DQfeQM^R?K{d%?eYHBn6U~Q++)AiCSaUH zAI`>p7YXbVQM_SFc?}oN7$&F7AqcqDviZS|9Ae#J41T`M(0P{)f6qP82EQqi`DVSR zeS}15BRNZK3pcZ2;zRqGk7cU)akRLTy&kwKJPD#lVSe|D`@mdj^GQYAUrinBMkz0L zmti}L0Ez5CtNoEB;ks4Ucnv9q=HDzhD4S^xC-ly*hbw#ezHkakv*GU-Dbm(V+>lih zfN7;9xdTde=H;T(%Lrio<*{vap@d!^=4$KI-}afxV@61L3V=F~H+nMkOD!r0I%RHwuqRo@t3U_OZ7P$P%N>@|C!`>+-(! zE~;=vi*lA@#?A)Iu|8-;Vn8xFrk~1~5o_aR?DC}tLlb}IP;!>n4FI^%pB!N|dfbL+IIP^Z+!>b=$pr{`O?$;z?lS(fC5VHOe3#V;3tt-~ zSMhh;2B_(vvc#gn@+0j^6yJvH;`bXv@R5AO!^@s5DEwWIQ=81?scw^3sdIG4c@45< zg=SEQ;sgHRU)_K(vs3^i`kSy9#3Yt>ipV4(WR+FJ{_~^S`HFo%Z9K<@B~p%sAF%I7539@T;Y7?d9&LglE4_@qyEO0ud8`lzLBF z>!EX*=pNW7b1D4QA+(YYLan_gF^O;AhU}};g~bd=cIdiwyvh$bkBW){`vH(R@xv_Ul7Sex=J5@aX{IZX07x3lu9$4QTjEsf3Tl>K)BjJ zz;eURYF43fvih|h`UtcS7XM{0G2|B$7Yo{@_lbk#McaDq>Gmb`-NgPNNZERJ7!TAL z0`TPETb-HZujqdr2OtHL%Q$J$0C4im#R5m#MVleR&ys{@1rHBl@ha(!YRje{=wPjP zenn$WZJnlX4G|WO>R!pfT$jG`r!W9QQ*zkB@93UkOLj zt;^*YuZ7g)-5(MRxsQBl0ak5`HNdUJ+8GOI4DB@aMT5l5seHdKE+W$nX;ejyP+x;; z(q44hPPr%V#;ku%ix@>+G0raiceoLkTKXd;8Ic4^s&4gxY0y!M?Emho^d!H> zk0$_)u1lKpIIDA8`EB@NoF~j8%mP5JjOs4sQXk}1f+m)jgV&Yu4BvV@B@%4>F0jOn zny+Q#GdR&y<94Lw#DMBnvv*|eD^ z--!g+@(Zs{jqbl|NwnT0-h6O7t+8Y3hsdL0wyCaQ6EkU9kM2bg^L8c;Hu$t=?o$dt zchTZF)6enUd0qrXU7cI9+OAiUuiU?kd#z1uDI9BQ)>=N!xd^ZzDi20dVWkS0%QlJr_8tp<8^ik zhy6c#&c^ahkaPtC6NPkpNLl*ODG2K#G+&kKdnE_yPY#RKZlMP}-wBJPk|4dNyk9$X zgwq?d`!I%T`|mPCB5i(TH*LyL1H4rtfTm^O(kJ=fIrSYj&Bx|Od$-;T%%QJfOgC)b z_~o&lu0cEW8X!t4l-wGTb23RnUHl_n^lv)fE1rC9#==H{+cm4z#K&?NSL+A$D8dR76te3|Wzu zuW(=XmmJoF`I%>(!J`dl%p@1c$92d^zvmmWRqc#r;_w5> z*&R6faGjUWc_&VDu1UsIues6nmb&}{-8}~qUpzV2NB01xrk?@>qRgb-+kGcOrN7z+ z&BwD72klp&Hcnpe2WvQDuu=u9mdJ;XC!f35v;vhp)_0{8Sa68fw_uXrymX3mAIch> zQCQD5oqro$H)bo(bJ)reP|h{T#q>yJs7h>05q3km)mo!BEf+f|GW@Y6#G z{QQ*_nkBZu8ECzDQ2_NcWEEpwG6{mw6U3`B&1)II{Dx{J9ge0^`|47!|9Y0|WaioKNG@CmJ zjIP-l=R!2|Gj)G?7`;EEu*I}2ZxXm;uzWphQRL6rw zbF}8(2A8KZY)xV%fclv}#8*hv6M*`;8>HDHdIQ}H2(kaL0RMz$0h4(4L&VB@FT(8doR{mDeAv?}j z8_gkaa{~>y$Z!H*`DA6VPU-~_^~E80eG_8UbQJG|VC=MUyO|RZ4R5^prxq|!iul#H zyt|}L1Uu=#!h;Zm>M*F7Eb(wc&YM91^Bi;Pdh*#;{;a;% zMO$tFc-1$zBiM>#cUMG)LO0{*byUg>l+{c)kzAi=B?W=_pv!$G$zsN5xrtHAY z>5t}2Gr>bkfbXXZsNL4GlQ{j_L{SxS{|I1rVg&evX9bj4b-#i-`kTCXO}!3T4Pvuz z%s2I;nK?tK^u+GhPlzn>+~XOt;Xnf}IzE&+-@M!KXxHbo{jvhy#`hE9oUz;6;tv4G zvbfOlOkeIdB6?&pYbd!?t&Q=GbgxT1$h7r?>{ncinP2|r?F0K!**fdOIj)Q2IZB&55CA!X?9hM~JV zzGuXJcmL;nyR2sq&U4RQ&mGtGi>{`AgRX6zey@aTifk-S5+ddl%PExqa9-Jbg7G^b z(vpb(yI#EU_D;m}X@nqv_m`qNo`N?0PQUitOOjK*Tt| z_ks5VWL;q*Rg?&*2mpSDB4K;)mgM5gJw#`{aeNCH_W9zblYR+&eR>_!iCjgJlkM4O z9x@x_#fV#D`HxFznBM~XtKui2{&OrRiz$S${C0{KCTdJ3!k8cm+0mg zAS{VZRQFvPc-;*_8cA1AeH|#A#PH=svg1ETu_c|k@)H8^oBVc_wfuh%0jQ`5;tnx` z@xsP4^&ZG;4BAL{+(6Rn_jw)fUb<0fM;qxhXHgF zy=Pb^%u*IT1}_@Pv1%H3Ub97C^x{iuXdoF zK3|Px=>l^z{EgTF_eE~^9L#m?L~s>==7t@l_^&$!E?X~i(+ofQ(CjsE= zQWxDjeL5x4ZEB3d+JZP$vhb}j@zB82!8zA-^J(XJAy-0@v7!L0-9(MU506bUBQF*} zdSn3H+iLfhQe#NfPvz5m0Q5q{TVobzhI*(RR)+(y1aK1*I6=780WZ`KQ-vef}rfJO;W8Y>9oWws|o05Tu!_5uGI z`J0t<1?jHUTo#yN1R!PRE%baI%~!zhBOVol(dG2!0CJ|m+xfG8&Z#)Y4y3d2%!Oye z5|g;{$grpb<#$x)7um;J(>0I1hI*kZ`>bAwmR@$O<>B!MCJGg<9ASi`1Y;5Qu0CEV zuheoL{mhLJZ3n<{L131?U^i?qv$+Z%?_y&z|1}It zXDgo0`gM5|V9*JZKxH&?F?TU^)C?>Z`YpqLg_TvO=vzov>Q6rze;a90<LvMEc+=_vzj! zaWYbLLPEH5ILV?vSgYtF3!4HU4)T%&0-_HaV;T6|VjZ^p;&>C)BT}@ouSey`rXhBQ z4FY_X?|=sEPF9-fZ*7kt0pZR8m}Bp*Yg@R4z1-t4*1s&4)32K3{&5{}DQq7o}Djrq8x zLAb_*?HcM9w5GSVmrZuz1eH9>*0W~Y>L4=#seS`mfbmWjE!qNvq&(Rn!kQ8r{P6~DDnTRioxAZrT z#VLpxoOh0Iy0?6`R-$S?t)a`FZ@?(IRsO5!e1hmnsm&^{bZP^_4leE_&9saxh^^Fd z#BoGi0IConVgj|K-~ve8*3-rp^jyo0XlBYXrA~0wyVHKC70>kd$~i9djw}EUHJPzy zG(fNffbAmMg$o!m;goB5v1z&e6$ZC$D{32h2=$O32B{2ujt2R4d@LiS>PFnGO#lSU zvN}53oKt_~EJb&r`sJ>^<3pSt2)vlX=>Y}@IjG?8Mc?ZBdcW-qXE4-izorf>knne{ z!nJfA2|Tq_&vh)?bzPlQZO{f&)GabNx*l!#B$wGBa*~L&Y8(+IB#48IRlmJg`0ade z3V-Lw)34{#urT{Em*Cqbp4UwThevK_5C4~f6m973>pbe$6aG~9Y$=k_RE@U$v!=1yC|n+mx$jw5HUa^s&cAS)9DV|22iChP2T8~-NcbJ_dYv)7Az zrB>qh=@Xvsm0ZW4*ftQAAi_p5*W2O7oOd}>fSt6t-A+(KxATzqO1CGp+^e;iE)ExH z$V)flk{v>1t^jS1sneO_y2;|W^`IfD4ru+;lf{T6mIYVL*SfSIz%)aympcN!pCg;_ z=LT?k5Z_tBcx9c!7onJy0AMZ;TxE!GnmNw^lA%K1E36M%Byem(nw-Ij*cMJ<>%E=6n&I2c+A&~})YxYf36x#8h zIKygtomm%o5y22myn{@iL-I&HB8{$KY1c&}dyD6601~sHiCC!bY_&osXR${ocj`&j z7wDMdI#Y#mx#PMCpN%x0-{sM@*Wiy2!Jz@rmFz>`L0eKjt#&4jJF#f+kaLL8jb5f@ zlA_|3lWCGr{PhgIhmm)T!x;Q~sPS@iprpmw<1k(&Yy| z^>oX0-%LwT`-T>9{s;$)H&ErZH)EH5V5DJ!zHbu1C+1#2eY*Smy^{Tq2ov|ZSsOaZwfavp{?3-BzSBUt zw)(G&Aj4_Mp`Ol8K$w?!)2gcdW1IP}@O@`LbaQKWrqV1JMQ&LAPcwap#&7>5aDcH1 zd9nEV4a?{Vt?y(|(TtOBf9tD@)AP+my6FuU`{bW#k7{-&zt)Au>d&r#Zt_5Ly&>Hk z+-D-WfHJ_0WGs$I4-sxM#TepVcW!J zPy2@C)VY%|df|q8ap42%fi#)B+4) z$7!SqfT54HPMF4K_o$zYWANm8&k?H_u(7z>B>oQg8KnDuK-N*)##ov2Ozrx-{hwF> zO>SbP!?+{3v1KA%ZBc`RTP_akysYSAQgz13N(ySiD158VA#?3F)MU=b2WS=W7}M{5 zLR3t>udpu%?1W^nzNot*{gkoUVSf^$F?|T57q_mrMk5=Xq-#6M+9uXTEsdh~Gnu6I z^O;7yjy7HATR$}=11@Yn01whv^wK+p82)9FJ)7$dCc2a$E}^e;jb2H zxP)>6n}0{1F{xUhHNmCF-pBu;jsf_h>Jz9uF@Ff{e7#_l-Jr=?hb7-3K+;uyWJEl4 zHL`Diuts2Tc%}jkQ#maCoaGIWiggbAC!mFdw|g~e)xEPu1!bMV&7@S)YMU!{Ql-Wt zoP1S2`X`~biicP0LV7zt>MmSczg(x|i#q8iLu8%U95iPa z_Q;U;H!p?p^N=`{Aj0|aXk90dA=P#U zV4rgG-M&$G5&*FSsN1$PzZcP1Ux%KZ1rT84E$l$-sCoha3JK8dDicge!A2c!JCpks zAn77>{FCQNF-KLa|ky=wK{A$H>O>E&LPkp|r^vtcG_&d(3( z%dU%p#FNAFW4vD)+L%q?n2Xc=s>n~j;(+tm^B}X-mDce|s1r28QE}<>Dw_2|(e7kZ zD7LZ<8_qMd=J^sMo3DNG9L34vRT%zTO0H61-u*X~D{pwvbzI!Z2V9i|y zorJXtGy{$-Z`kjL_l??NvE5mB2v$YPv&MnCg4N30JW6^wtj@0Qvk!+^g$+eJ6*T4XUI z99ZOz*kyu}1;sW`Po+D)0HjwF?ObecvdGZgmB@Qo-z9hsQOBC-3U)O3+?E-IVOWti z0rzCfpiNCDfM(D^UV?GwSigD2nCP7of!8OI2TO@!?;&8)`7`gEzI2GRrm0;54b?8L zJg>bf{B{;Zf3d~HN;q6WRm`{kQj^!1+X}RZcW|l?Tyx!jwpE!#wvL&k2G>`ar32R= z&V^UG=xr3zTELC7{6(~Agtd__e-H3f{Ow_AcZ|Lbz$mvJ+IU`jGOEYD-tH6N8kn$O zh;wUuX-X4+2Jvp%FsV$&x68%YeKKwHdy^`RjOv?e5t@wn0A|qv=l9w;< z1Ec(h! zUXh;an9jt<>-2-}+5|b>5#jbiOXo+0h{8CVNgzO{@*ATbX&GeY-<* z&{*XjPP8C?a5e#L=HinVE_d&H+q7}kR2JP*LkW{0;$~_9qAq8BDEHT!T#D!1*BuC8 zidsq$h;4I?Jm?Zw4Oi9|cKL!gUt7);e)EX#C`h~W=K^040hd6e->=2qEQB2Pb2Tkf zjpPn^CHN}K5EIJnEXl-SZQina2m)7|RxaF}>-mo6iLu6;E-YOQcYDMIClJ7QDdTF> z#s;oX0I}9vs82IK#VQ%ftqQh^uG;q7r&ezvC(uB3pD3T$ZsF6p55a0m3#Pzq#8|1} z32jNUx-%Y@rq`^(1kA($ZH*H5E2@j1FWgDQ*2nvrg^(j|iOj()%PA!t8GxROBN`IV zvA`gc=S2}26L>Du?K*aCx!pi#0&-|@ry`T$USlh&N$)JuuF`*q@d_PkLa&R9_U)~( zz=O9Bw=7)H*l%0qtmT%si@NGaK$NoMU_M1;fYIxMs@pkWd%V!fi}s}e6|Vc+7MSn} zpXH_Z3mw~7S7wZ4@#ga0iizO&;9Z~n2ASzbtiqs@=wpC775ZVR+W~wR>dOYUD?I(^ z#FELxbDEyF-AOW1Y3bE1QaWE)NMBkAFn@j>Nr=d9j3CmSZ3pIvmr@g#?Q%!pZvm=M z<*CyZ;^^KJZ+TD`D7MR6+AnJ2E8R*ggFN&pHa^I*I38A+7dGYVwV&f3R~hAODBPQv ztm~eG4K-A9$}YY0{N}Yot+j?uNmXgz^-Rr~=Jd^eISQq&mvID<}DS`x3rggKH z-dVHEEFxm*;Hp%(;%mBepnNeKLufc7E4BQeN=d7q@a4HEpgK*23<^+0I%lmpNYcG( z#lKj*Mon+d#=&blv1xUFt#?QJi*}i|yElJd2v|ac<#1=;mq0AuU^YAL+*$8fcWCgF z*R3u5&P7LT1pM2u)Ui%Ynr(EPbL)QTp1)I%08gK2>w^KU=IGn{gGqQ22H7`O@q ze994eROe5<)$rq`nu8}I1lllUCC0?A*(jso>G}~W#D;mEc8K~CK z{#W^047by3je)o1<6Hkn>m~hK)g7+PxXb!2rg-cr+7Q>TV>kpP20;9n-FGDD6wn7{ zj|Q@phjL*=~i)gaHQW{hQIOxZ1<{d z$}b;48k$}+Zl3}H#AIB{3er_S3n0}8kG9n_qO?UtoAmo%{!T2!;5PyiEf^5_FA;?ss|KmcU`&=Frg7QqtNa8E1G+XB9-l+N7 zyX0t_VeiyVcI_bxDo&>)jcq)e^>E@aK-LPC=42DCKgh_{SUL8veK-vb&@1yh4tGgP z)s~QjsMZb#FE%2VGVvhdb*ZGXJXJ~I8SZykWjcAaJ0IlON1RZLYYRyJz|ch+jywG( z_OgH%VpwgT0A5l`bokB=Khwrm_)KXJ%6^X=-{T3AnTsgOb@Y+7B0eYRFiV^5+|2nv@)Jl%AB$S+WWYR7#36Uzb>qN3mOD!q>LiYP_3`W~o%6kxpzx*|DFW{DMSL zy25QpJk#m6K7adpq%vcPYdQj+=@IAUtyzYt@L%=?oSZO2Ak3!*o4D|MVtq%jw4g2o zx%8rR;(8&x#y3{fVrp6j*qL+=_a>Tr50i~W%1!}kpUJfETjsup6nD%x`yR)1^Ovrq z&x$m$(Av?d%9|3H$@bk(L-PzsRrhpV>kkccmh2TF4b)6+kxc_-Sap|g*q^vzzJxY> zU<<$KVK*_!mZ_fduiN?KGKgT&;N0>UmY|& z9s{h$X}A2p1HVv7ua~I$)k&$$uzMc(a3L|WmEHte@`Vxbh8A4H1@JLZ0xC@g!xb!g zYockLa&iOA1Q-=I&83n9osV)OR;Kv-+Xt#!V;lyws);L|mb$At+LDmY)^|%fd=!~F zy~*e3sph>>z>hSrw1lJDRG_&ea`z&9M!s0+-v!_)va+yqGaAl!A;=4ImC)AeuAswB zqJ)bL$Om0g$a+v$g@u5$BJFb@ekU(fHo6B3BH>zqFMwHt!*QDtpY?uOb5t7ot(RFp zHgoc&+R|FiCB%f-Hqn5;w70GKM%sidS*4ekXrLJsX0TXpn@W7o5Ek59ZXZP?m(c^d zdk%3HRl_=FOWp2;RM+;i#~LMBH0bh=5KiVKEok*0uNbS5s0wX6j>J!B$pwf0hJ~&* z8lI_Enh8XsVekYZ_KYA+#~4_ch=&-HSU;P@j5Ec3o1@pqkKUU`5NFx`y7#xYp252+ zk~mXmwluH%x>VCG-A2uR7EWd%7n|N$XHWZ-L!gqq1Hx8T?rRyGgeCHd=(fF*$Vm8W8vf`xa4?7YSbhCT-r~{ElBy$1l%Wzc zzlb89QT#suB_0e|`slrL$sdZ>|Db&mFxx10){qDG$lv@Y0Kx@$4~MqRiVA-)ynkr~ z2hXw5TDjdn7ts9gao~SMU<8!ULEpRTHr+{4*ECoXdumF(TXgiVqEdem(c|Obq zydy-k2>>Kn{tm&erwNs-m?HU~SioNd2zEQrWa7hiGc_S5yB-|;^N z9B0(l^uZU&-49F~>_CKWHA48h*KSeUG0d24mJ(V|eGaG=zXo!#aok*GlRt!Ce+0u& z(ph`(nRGFognvwhe9&I~As>?egw%>+C_^8rZ}g#AF*XKYS;cXfmn22wr_b&99}zeN zDxX<@^)nZg`#ik5I@bw9=7<;zfaZuo@AKZQXf}Ywt~{#3<+Yvj@Yk2+TLnP8_dQN$ z(ackpEP3;YJVZkOLFNq0cCpe6>ZMp=3Mak<1FS^OhA(l5e$8VfbV&? zqFfOA2AT6xf(rO&p>`%li?VVgdK*Ps+-OR?e7>G0 z-V!)GJbdw2)(QJL0vvT%7n|FZbtmEZoAMFGZ*z{!cIu~ZWs7p8Kf)4JKHk`!MVc5> z;k;D2bMoA%95(CTD_6mfTe2`XxM{kBCK2s%0&pd&rwlE-f0~SfF6OO**P2 zgnBw5_bx`DATnOjB2sS6V0XGIotrZhHq5ZM18|KLC!~N&222th3RE(N?-+iSyK$IV z>3H*!66H6f71PjXQn3t7!$Ifek3i?tb6+5Ly%7Xfb*XO5z5QQ##fqKw;S@eyre!ZTsT(I3E6h{s)I34p}jUZ2kx^zqvF zE|mpAD02c_&c_7)tXDoSP!Ix`&uSt|B&I7&usE&f(ff}z!0tTG!yi?tG1pqV<}fcj z)sURD7VZb;)tV)2LDn~Q4YeXRPE7KWb8~Zz@5AdGZnpOrf7JJs?1^Kb1;8PO5IDtQ zH{D-L*Ri9q-?*y6|PMt{$g55>Yn3CbpN&A!3#IHR%N zN3iWhSQEz6>#dE2F__w%i*i7WB*~72Q$FhHkM`<{(!{O!jb0zX0|Pipt)DC ziSa*W2A~iWamsmrTV|w?e;Mwu{&`Pmj{WYH&+kwI*edtNGH&PvwmRGctL0rf%m&3= zQucByrg^0+dI;ol>{=xf^S}Lh6y670`L!OYXzd%`F9^o{$zOMNEYJy=DZj-0GW@3l zd}?7lN0m7;zHl-YeFX5u@)MXBV%f;A3#+f{53eF6+^H#1(bEyxt@z<=nnh-eF3VjN$Et59kEP}*U{z}hV<4uFeG`4I(lbJVl= ziE{ca7HiyJuW_-38O+0ydh~|`?2)ag=I^hh1{>YZdFd6z z9`@r=e_=dSXd=6u%b(NF5o)1E4Q4nASA_dpqYT)LYUc*(OSrGg0ce&`hM;tQ`ZK0J zu7GKyX32%p134LZn}APZ`MkHz^S8}9kJ|a~1VecOlu)Xx{OSdE55nj_Q#Tj`HgAU_ z%>w?+TiE;f3+2~rEsXNXrBxIN+xh1RbuMI%+ zP}{{Wfn{W<&nydQZ5Ga?Rl_be3IKA|MX|6aGCk}5!@&zi20G?&u*d8t%BOe2ho_>t zol(z$Ij#C(W4@7(P!hr-(@2;r`3El)0kjHYyI!yf)aLZ6<>)S_M;lB1?nZOtN%<{A)s%4^|VZ{I+`YNm%P)0Kpx{^Beex?YK z71KJh5SJICD6cWLKnza|pA_zM&UND-k;0c@Kf!oW_<7X$+97##-@n7VLl_k9)7v&p z<&eAferp~(6;DU?mEEMjt$x85z?qbe71K262RQuOC_4uDNBeYuVUNy41~2EB!yJx+ zHk^Bx62|kzCNU(XDw)mv`N%5W7(0bu2AV5>&A6XA#i#N1(2|K8H1%a(`ld_*%u0Kl`?kAsY z<56nMj%Zx^6|B8n7~SxQBt+rh^eLXF@lt~kEioA6xJ2`xO3kC;-F_OwhP%@+lvkSh zQM`4l`b1esW4<0!iQMb?uZH58kH3$s>bJz1@swCRK)H0BvSS$EnhWbWRZ=})g?LpT zND;ne-fJopw*5afdLl#h%)Rzezyf1{my(Zt{%{L1W?#LSo~8!X2Atf?&sQNTD;dtC zZ*(p7EJHv2A3C}!wLJQT3PJkk6-m6lK9Q@(mWvny}N&EH$3p<0W-2%#woUENch z0md>j&YS)({a+XE&Xi=)JlQvk5ku6^C?@ z12q)3XX5;N_W0E^A2d|<&)A8V9Zx&(Urb>BpY`HpR7?#1(+c1g=c^Q;{9YKgH2wWa zk45e5 zR=hWVhZ0==yZR;x%Uhb^G{YW zse^S~Ph4hgcNw@17yOtP{S^-{Qm~f#x2+g(KH#z98EYzM_g=}`?-7~!WYjy#)617? zIdv&TIGXuxYDcX@WbUnf_( zG8REag=C!NJ?(VfIM`$@WEJ?56g2SI`SLIWaJn$J8JtJ16?9#@gQRR=eF(t$L@QUz zNMVOs+^}M{({MfiysA)Rz1WIW+wD*Z1($qQ`JY(8GiSJ7_N9&ED9%p-4=0AvL}4Yg zVAV+51#ORmQGv+isq3_6!G_%cIq)4RO`03hp39CW&;_-PPIEokdg^O=zlKg8=`e3- zW@TqDF9Ec_j9l^n1Ee(nk|3`j%d3;N-zF(K3ghu%xr-LFzgR*-LP{+$5cK!SHF&J; zap`_mdpoz8g^zBw_lJ++*m;^HEJkU2_seUP%;MqLrQpO&&YNyk0x z*>6J3-1<^C6Vb5PtB9=E7Kl;1*PmpwVJZO~Jx11_)q$4nTe(4d6_LhGJ-#VVp50c9 ziL3KI^+4Tgz?Z!4kRgr49pJ&ZCU+`*V!t+k_*OURI-YvegS?wF-{N6MJirN7)pLg$ zO?am+#x1z?d0xmuaNANlLX_wvJAs*cv*fm#GNGmJx-R+jhXxNYoP)pgIOlH`_%3c5 zN@nMi!+D$+^MX<+e{$#K_Ux8Mc1(pQFWwzwI~{cHp8s4>_Fy<$xYwR@U9L8_>d+Vf zZ?%TUX=&Ic+)RfS+g)#byXE4TJ@JO@Ib)xsY6-6B&pMvUa9c0(IG4JK5*g(!2d1dNDOKQ8A;e1hj-Rxn}=BROwoLfG) zEp5$&Ti$0eK_>@Vw0KTcz6|ab4bAC`ijVUCsz_}x6|%~>S^EL^U@d50w{-z`sPoGA z8=fZCoGZn=*Am0J3^hRq8^RW~+@9A-1aj$me}nymvCr9p*Rhrru}r!a4Y^D5w)I-$ zdIw+k3D>o+N9!HtLE~wD(wmdJ;iP`aAn@S}@ko+3rHNu19oK#arzuYwnlpHZG>0u= zE=*@TNPA3G^bOrM$)1T&iu=h|t696=(%H9X0#RZ?uPnwIY1Ww3y@@JJGM&z~X+4yl z53UV^rgAOV!VAE+y;ZC7^#cj@U((8TrkcW_VDIqN>wxROb{bn>y=nMQ#S58J*-x!6 z+yyNxeJfRJ$nl34BW)Inu4*fzb7YH|wHi2gOZ8VJ-A~(UlCtYgatfr~(~w+aYe!5{ zi?y64iKJqg99qk?wySFodXHzZ+?jBH<1OB_Q1C6u$v5wo_MLHi4c0B{^mkxv7|f5R z)XaQKV%(`aw(9KeZ5>S*8OnE&S{K{4*4|?A3iq2>=XmUz?;;-A0YW@xG2gS;(et%B z=z`bOb}dIv`GUlmcz)8LGxE=bdTT0xwwTjFuVHKLD6EjBFR9O7zp|SL>kxdv9)hP%VL^hnh zV|{{)&hKSDAkO^8E&Yip*m`=NWg0EQnd~T1*4G@384+Y!kptb&Q!JfebgMNbq(@%8 ziw9fwaCR8=88!Wyuf%f(UdeaycHfZD)k5~I8&l%ibjf`VGnwg@cd-4+!X)Aga zhAZ0^v#zsd_Ts+#D)5@GdVixMdSbhc7I&?ytBV`LO=hL-qVgU^=xo-->EQb4{3P#U zgnz{XQtfdaGup`+eSRoG8aie^Q46*hDkLiA-v8)i_w3E}l!}jFuKfC!{M~EIpbw6$ z9iDS84Jpn09M_SYvHNk~kv{*?25XfOJ`IQg*g()3a?q1|r~BQ#@AT`Bgzgs=7x_g> zCZ42CY>yK`JU|w1J@8J8XF+?#*yN4B@$B(l;!{sow(XxouXO^UYi`zUyI2e1C0;kr z@V*K(d|}HdN58*bHsHUyiLTx63Yx8q81lMXdS{T9+9-mhr(j!#+e9CcIyuguVQ?kH zmfUQhsqHBk*mzmqbG?Ra-Im|BZy-@uUtD*KM6U_L?rp22f1$XczY${ zeiM*Np&#sVU8g#)Kl+S2Gu0r$WQ;|8bv}h;>X_%&y3%xT+^JLc<&xE+;gnNk1S!;g zyUj^NBsnfF2-rw^WjVpN_7N__2Xg~LyjD&Et`w=PSf={=FEHo!({+FUXb&&vEbpZb zPh14wH_W&sZGM}ZXY4|Lx(gn$>g*eU?=h-9iZxI9Wj$Y5Cw0_T(#CQU9%nPB#RWYi zNbNvQ^Y9=2fp=0RXp8#h@*vUs#$go2gzMVG|M<4qVBb(iAMg+h5yq5kWX!H+%f2q*6(% zSWlOZUCWyJt4Z0CUEBAEiE%UN`Q9J#hA+nuJiEwEISDV{|J?!7v{1>XsAFPzjsvB+ zMXV0@=(7E;tAc)UyXKk3Re81#h8FLI^qTKCErIQKj%zHW6$dMtOyLKFrOrb`NB%|u zdT|fL&7Lq3vLle#+1czV5iFzOikwIuttC#Ry5f`wUS>871=_~VxmQU=8<@gt&!Ej1 zzIa(0nc7~H=7zD*cpmU14Ri&@otf3q)bu|k8Mhw`(8Trry*9LhBt|Rtw9)3o?(n;Z z&atW+Klw%Pu_Vsh0o{S(xw+M&BDd4B1ywBZ2%>;yiuKcB_}<;tR#CiX&vbX|0Vx2z z)5NjP_i|3#c;N=UY#v8LG~W7$g^I|}*#z3UZ%Ve&=z)cX6@J?|L9>K*(67dEPW?t- zKZ*wJWRJsoxc6&$$dScs@K2ZcuHBL*n%I}Cq}m}T)kQP4wR(~K+p5U%(L&cgd<)kr z@T5*_UA55`C6eU7x*> zaaD^nD&Z(RBv{&|b`ppZUTN=rZy!_rASDHlIADf*nqBct?xX(qP}j4VjQ%H*Ow{nX zAEc9b=60XB%P$^DwwMy2J9;$sobegN?K;8rbPn`jy`-ziqHH+N;j>K(NU50{O8F#R zCUtqarpFjvibP^TP+>cb5{FJI^;_(><{W*gz;=-r9Jv?u#aixu3ke#}xbvxxZHuU* zUtnp!8XKf}D9kmxXZI}e zLfnplaXbpFSdp~7FD!VZ;VMH5SHOoEO=<#>(BoI^#51hb8s zd3c%>SA!$9*MT!yiRVJs*b}q1Zvz^eFB@-s1V8WJc4uY$S`K$0k>T#u;%@2%>yq%D zE|BL@%agmVDbS2s*IwV37XPS;bD4c*NM{YX<4acxja@VXzy@_Cygu`dMSUbPkt||2 z0TWurskLeOitWaxn=NZb=BemEp1mD0>7%VvF!Sg~T3L<5&o}|O^0(w-l|FU7p|z-2 zr?5@(p?QAtak!^{cLCT3#Plg|*pCR-$5#5>B4<6lz7oWkcA4+_x}+EJm#H>7a%^xI zd)W%T1+HlguaT0E2CEEA4syCj7zzEQtU$w{7)4zxhtadh-AoL!>AUqJU~42BD%ERC z7aQ4Av%j-dG?E)x*~;a=3a#Wnh@FJ!YNoV%q3Vt zAVb1s6#KoIbv%KPL5HaZ{#GI7)o~0S*fiTIvZ%R$POj-hvkMj5+DglcCh&IWos%N# zOX`=I0jL|z)g(04WP~(=)?>R^KNM0{zZ*%-UaWlqWEZ$8vf*A4g(wx zU6`D}nW6hBw1#_gmhE7x!8*RCCLu{s!SxNI*A375S-ZU~1gi-h`S{bQ0G=qx1lP}sHqm3E^m2bla$i|8BgS&41> zB$PeWuMC&FS2e!axN@SIz!5RcP%XE-312{zB+P5UTQb&ef=#JS6hIow41bh zWf=X5rb2R>rpP+=t>6p{(9)q76L`0S=lu0UV6&a(v2_+_5_yhWFNymPR0>x= zIqqvbe$JB*PIdM}!@sRkY$-f1Q6qRSY-Sy9i(+K6(`oioArz$)o3Hn}P+_-mta(=^ z*F@w;tRnxamrrV6~_7?qivz_R`6`bt~e{!kLHB_jV&69NC$; zeq+oe%u$lKf0?Q?Nyg}3V4$T%c?lV4y5F)2{K?&TJAL1ld})6;?Pg6m)xPo5iQgMb z$CJSQJA4{_i^NKdA$s}IP+XcXTu5X%^k=6t>Rl$=fP`$nIOt-Hu74c3*3QjMiqP=< z_$LO)&CxZA=AqX_ zt?;4EnW>-ULIL;X25xdtet90=j>+Amw*586-YO=@G?eRlB~tOR5#_?oiGXT{*o02RlaeO%bHPJOByIO+jNm1^WaoZUYQT`9?un;YnO1Qh zy!EIZPLg0T=(L{IRE@gFm@MhLw<(g2Yw?Wxl>g|5_0$MHaxk(=(ysd~f%QkXgH4H9 z&m03Ak|e>}K2}c4SbA=+^ItwRwI*C~@2u1_oK5N`791)<^%^CTZ42E@Tc78Wq5|-g zl*%~N_`4s^;b%SjPmO1}+L|Dn1ehI4HCmB;M5A#9m#H> z;YB9UYGiajd$y>x_z6`u_xXJVqYxIJyY#^zTjWyMlK})dPsZ{)?)}72Eg|IE@2K!2 z-(}L9YSWIr>Q)4iisP)d%kg_`Znf@_kJ7_Sz~|J?KVPl4vU-#XH+*i(TgP~Gz302l z`1{Z#1rDuT*mYbHY*ih-YoJj}zaYCd_i=$41M(U|t!9`1=sMEKUWc|d>E3PTP%o)F zZUC2}+-;=}BIS6?VnyFycLaBUBv~DEt5QCqY-T2O9p4f{d#qDGP)B7`u`Y8yyL=Vo zfm`ZhNxQ(*`xA)L13%c;Fw>b5^@?c$$8G-#S;R(PAi%~n?|z1VjHkVq^9gi#(&NbE zAq2W?;nO8XD;P5$x0p8&(Wk}cZgSAX$mK45FWZoAgVh^qND9vcwYS;?H|#@G*+mB4 zK+SQtTIZ)nb>=`TlHkgQdKWJWK4QEBJn@#J?_71!UYEBqyL4&Q`7;`)8vznlUXMVo zEqPo!3nLMHMDCTO0uYTixjCF;>^i1ysvQS7LJiS%!-wC>`vr46D%s*?!qz==o>Vt6 zE_2VD@hWd;ddB<(v#7z^gv@-1ihi$5g*Tv;c3^M$(&EiR07u;s^F4jN|DZo~80Eozy>MIVj5mM2(3&>Rc*>k+3#&}m{E zX=1Xw0-8>?mV6XNBAS`nn_PuKK}J7({LM4u3ZAFShJJriU&3?P!OnW5pQ+QnH%pa6 z(me7}mq(f%IuOq!y1#R2lew*Zu#$Yd-X|WSRsM4g!FeiWMEs2J4x8DA7m=x9qMb_H zo-RK&dj5;21Ubpor!iK4o-q;%5XLmbs5GBy?oOBUFNBD41))`0WE2HjilZR*-;lB` z%v*-BK`Z>34+KMSD`KrbIn|%W?Uc5fR&pN(g%AGxA zKL2iDu)Nmfrc@P>RHeK^>3qof`Jlk^)gmd+761J{%4(E%D&|1uxuD6g=-=FAuy8O8 z$beE9g72eBonHO7aAA5FxZt<8QquoQ0MG(1&>uikk{v;b|4|bhdMjMwACU_Fo;@TY zto(1@Q}`9a3QI9UgyTO&vg1S*0mD-TK;Ja^JpYd%AvP5ZM*yZWO8;-oxM4N(E8har z6|js&y!RQb(Zc>f0x%*fB8uq0V|^+``3XonYh+LVi-rL54e5zM!3C(&U9jIS>cCw+ zAQFN(VA5ezF(MuAV;_D#Lc{cl6i0Z>OoMt|69&M(Vm^useFL!1M!2(IN?N9x*h+8H~ z9)srC7A@1z99!o^|6bQizlaq1%)^7$-Nx15cJ;? zDu#XO^0uB3f6rgf;oiUzSYtx1>zmi95tca%7eJ^lzjNBQz>PZ3=y+6N$@%o`v#)<+ zQhoIEm#$kI1q$K%?03ss*V%`;P*ab)oX9d0HBwcx{>oUc7iZ#JFP(+sqsa=^bOXF_u^G1z0RlQVR< zU$4245zBC!_XkAx{PAO|RIc@-gj;+uRIj@LJyJ{J+P#@P1=V)j3y2Q7qc%GGR|8on z6A~}0WK#MeK{goymGQ*H#gkXyU-%vKYh4GY-J<>0p=D>gM6{Yea3y8m@S&mLF-!$J zP)8l-7K!}&UDlz4haSwF^y`qocrm{i-6x*N%Sb&t{PT0{{zC#Y>Y>+RxQz#==E0dt zmy_K3AAS+#-Oy5DV?*Wz)lj;U4Z@pfNpO}pRG>^CkdlTP9I=;?%V#maE$ z;nuI?Hy}$z?_PwJo6_|D9%UZ~*>r8RUa|)C)Dr~fnd}LdTVgMV2=+C!(TmVJ#_)V3 z(;G1*r{BqC&q=)Q4$?y;^>$2SeSOuoqwWW$59B{GC`fo8r=ppZNZ4IVzjXF+Fl*}2 zNm&l-YGuFEFV~`uu_+DUJcL|qBf_H7l{ zX15qaK~3d-3L*B2VV&r|NBMkn3lTM6q5*o+b1nZ+2<|zN*F8SPaMdqBrq{R&^Z&8+ z6;M%i-TN|hNH+*5NW*~AtrAKLB3&XNC@nBFL&pFLQj&_KNC*PL&@s~8&Coq`^S`67 z-}ipM^>@vhwH)T&Ip^H7pLN&u^Fa-`L~%0a7Pf*Ks90Yj^j+OO|)w=CoYjqtxAXT;uwA=WD#0Y>Xf-0 zLyh}U!dIWY<%32q@Ry zVHdpse@J=POL-z=QH@i-xIKcy7+K6dwICeRW(q&@epzma1m8QmZSpN|1GU0`8G>Oo zgm2*&i+k0yAdvZ#s#LDQ)QkzKWgym{qW9Ix=3jjZ!_=A z4f`s|A$!gHl%&aahlls4Hrjo47^bnjpYEOW#FI`VRY!E={5g!uj=$O@#v*VrqUujp zS03ACbF_ryL&)-A{v67_es^I!8wy+h(Yb&X08-lk24!$q*d}l9zvfZy0&NpA>Yl6o z(WM;}eHCa0`~k3oMg$?~Mr;4EV+)CLyadRTEwvwi8eskTQ)U~WG+)Ei>Cj)zti#JQ z`K>&mnxtXCUdPAAkLLpEumQ7H&{U=-2PEotW5L6(kL8fX5t$zfkFeJBgYqcb4qKFm z|E*tJ1famD=AJxeMD8^opECg03FqX(T;+i4h*=84=qdV6z6wfM!pK2SxnNmA-@5*T zmrfylF9pT+xZ(MWxkC_bDyCDva-!2vKRh4 z_18=>QhRu32W#4|c_iF6!=#U=DAv~240$&ORKTqXLSmHm~C{^~WzfhPp?OdP5^k$ z?p`O@LD0^QeAmmdldp0v#i5StG#w?Wm2z)`x0nFHJmt}VP|g>uQ<300TB)}E%BybC z*_PX(j7_g-AiRqX_l5DAfuZAHnbf460d}1hx3Lt#6glZoe@j6@0kROzfrihO+YI7V z&Un85)+!jxp`Z@5%%~ju4A9CG7uTI}1HiTozMOA10j$wtAaLyg`9!5dOi&OOjjch# z-tbKff>tOd?n1BZb&JpObf`o9C3Wa6H(FZLNuZ!@nbyd;{jMRe6|htQ8@=f6(WJxg z`4~AiVvqTrZ%w;zLUEboHb%ZVoh~Jg<~&{kKv7{YKvF%eov5A7vR*fY8v#n4s5AW*~9X=6G2n^z7x!-}`*)ifp$jNss4 z=qtXB@CN>x&48_nNn&Qdi&BavG_Z@wd-s8RK>6@4`ociu(e>5N^%NED1mZ;QRsUz~9QCwyEU`(67cF=~4m0qU5IG4xK$X16 zkb~d47I`x^S41RpG-g37YR_1Aw$AeFS??|T9fVg!bshSw)ZlCI?YxbOp)tJ4*i z#C?8dpM(Bi?d?t`vJvJvrWJ4KsQCa43Y!CK%ARX z_!QVeh$mWFvHK0qypC`_ebS@CsXUgUmL%>PdOpTW3Y;21^S5j1EXxV zkyR@vE64sO+gZ^P9mDNDP$!l5(iUw*KnI?L{<}~nvJg4>8n>+yC!}Iuk6da3pv+JY zSZ1RA-oBAKU5qPo$(LLe)2p<<1)O6S7cP8d_xAUvJ?8=^{B1BNQSc7}{G;bS=SQxf z1|;gkq;`!OaaBu;Jg;6!W>WyCDyI%B6Ge=hY4bsngVSphRoMiYr8{^N6URLg zp7b&vJJI9StCojWXolUtN-(r{5)n}ULWDRskD+N^dR+IfkVDf^gp)E8T91_UH&Tv-rqi z<+b%Av1Z*dG79Wjxi+7fo9z0XDB93d9#D|{yI65fjUa5d;&6YHM&+_kh8kYF^G=pNcTOn zk=pONpZSjSmg%Hx`nP_s4lW$3_~8=sM-VBdu2k_dwsrtJ)m`$p`GtUO=BABNlP-aeSMJ&NW)us}ojEM}r@> zI$9k2tt&#|tBih(JdNtGlC|QeS&BVb9f2HKfF=}m|E}QFwKZ_5_Eh;(HwDKw4>RNr z?=|VUv6h2O$82tJX52-^lQs1v1Jxj9Oy?RSX|+S%9>JzUy3{-!K4 zP7NZB`An2!@Y@lSD2C4t7f#j9fDv|V!snU0+t#U<3xl zp5qeH`iIB5~_{C0c)k( ziAk!GhcMLwu#~5dI#c9%R2Y2D*R3uTOlvHi96|HZ-%?OCJ+reA$t#p-il~TorQ=)8 z8~b8i=MSp7z2wBYqnuQmm1_5{-nGYZxVTS+0-luXpu<7S_b&|tNR-$PFH#v-MmWHQ zPJFcDt+(r_cub(en! zZ)i@kA^_z|rpD@J+ zL7iyyJf+g#Mc0QidE&vJ#)=MI0$$Rbh(^l^B|-Ep8PgO|>)lenO@|088HW_4nM(J( zn$N-GGNN=bRET7c_R0yc$J`sZNDaBOE_|cC(pOQqAC?^L&reWDp0r$M&cF&$n}HUO zB#(hkx%cXyZavPjd`mv3BO*ZqVYDO^+wPItS0$pm*D~$VTjhIs1{ICnE@>v7dKM-J zf+9`K)=;Y_y45MRE*Hpnkr|4;DVN@#vyKvT5F)@oa!+FoIzN?O@L@=O{yrszFo)0B zPpTM^Ca@eO>HPxaK(ui4b?QQc2i#~6=g!rxb6R3Tab(YVx zm&kNCv^IAV~7=e5*2p;wB@B_c~_AhleAS2+G#n4BzUS@Mw#W%U++Q z^Y_T5ysT&tg5+3R&SlE+jf*X5uC=3Vag$@0Gb3&rcO_j?j0#TC{SQoojLlsLMB~#% zpf?!tOkv{EAn`H}Gbikn5jg-o()m#5?Q5sRk705XISig*Q|0*yw7f35ADu2Bfm5|u z@$e;SABtoS6%Cbcx{EnVx4wRYu#kv>rs{eRs)<5%Kb@YaF(LIe<{;`(4|bg9+|$k} zN&Q@4T+Uo?#79F^aAfwlN)}mvRrRRU8|@7UC{1M0oxp@lqxA!&tLlSiE0_Qv(EoF2~|}WBvUarM8wg5vGL;nl(+TnITAx z`g-&2+>g36$KqMqw4)`Hic$1BS*hNe?R=F}T3PT8HV_7IAqKeta8zw!z_@k2@C}hw zS?hEc=0W44;BNhVDA=1GJ0qD6BH*U5cIS3F_++j-;JsPoo3T{6+Nk<&HGF*{1T(_? z7q@03;B`HH!on2owr`ovqw{n%+AfWZL_%r+jcr;_ZzMbDzRQeOjOsqY9(%$-EixKNN~--Q}W`WQ=BW zMQ+wbRrvJ?k)cDauo#mx6N!ZT_GTON;60M_Jtc4lA+J9;>K>lpG@inlwfXcVbVOTp5*9ZX|_ca=m;FZ8Qc`9q93GG+Q`;x*WD zUEbI$-0Ns_O@5)u3E5X}qg}#O7oFIvz5HlRTqn>vgOc7m{oZVc($gnS?UzJA*GNp$ z>IN|F>@QKjEAL%()4F`vLw`F$th%)jQ|CGY_fcbaSG%Pc@?Ph`fq{m-Q==y`j?zhX zQ0J<`U;K6Yw%3=(xb=O7)?dF>fM(U(qzdD3F-Dq?_V~P+VnS;QXkUox`@rfW&U{e| zt#e|jlI}%@S}gnTgT2oP&ZB&OS$l#F%71NT+_xr%wB8*%;hwgjit0DB_;zPfIgzG| ze|sf-358$=x-Pp1I&@@-hRU*gyD)34p4{-d+Qm}mPS*Hjg$3cA1BzIqKE~g02T?;F z8LM@2rp1V$s@iRM#*+ngForzt=ujuy+=CUImF)^P~tEUS9C4!BY zJ^PgaRR3o)LL%F0uX(0WqR$I zM~CQCHCowt%XN%;s-pHWn+^&M@mN=m7_D&+KyaLOW4ME9+Gu<8MM4TbJB0fl{XBsy~n zGTyiN26=|kZ`7|yh3`yOIqbkNE7P|qDEjMcf?N&8HOzz?Z$@rZ4 z2V{SDUNz2o6v$!4nDPey)(!Z_#yAcMJgM}#8KIn;)Oze1sgQtP9uHOR_csg6F5>U! zkOW2SVIMhEz>s)M8cnC?hD@#{7V2uzp^S(NyCuO0gjyYK;YBH0p&hV#Nfre=iPeM@ z3ubG62|Was15p8lDD)2jWT@CiVOawgBOI%XIlP-(9}E0w50L?8GtWE@emLRw)6XQt zW~}7)(Y+nfW5CETMhstH?)YtMiAgUOhBkSrROndID8zkzI~a;UI>~;3S(^!w$QkV^ z1*!z^Qsm|BbQ(4}xsO{WLUk!PeLHtn+!Ta|a4W283?@9kSxboR+=a^gK+0I2Q1C_Ha6dF?VQX^6&4(-5dEW{|x zDMhO=Ij-JZpcCq}N`r4IYp5!0nbQaNk(>EpZJh7@*vq_Xr7@k05}j!%)GzDUahs%y z0w2|=m@)s6eQxwKsSRc{C4zH5D2__LkL@bZHcn-h!H?{u7OtBv`;D&#y0YwpyXJZd@9Cy|zC zRf>K)_*9Q(vK7*Uu@pn)rwX#Pr85C-#sI2;*|A4Z1_`_0a0#@>ykY9m<2&inE3E?i z@+;Hbes`|XzCg7Er4u{$oSQzYvCTlCLSOLiHPv`4*2Vj*TA&cQC}poPp8}R!o9fk} zTRmv;$O&!U$WOqs((tJT9W2ik@!`lxBj*&*F)E^wRtbI4K@=^*Lf2BaCn*~Fj>FHR8b%(#~cUkUg z1kSTJOh)FRCqGxxT};gQllga9HOxJFrH`w`5dF~mTxkcCKoW|9-C@iu2#J&~>XWd6kLtT?I z%eyrl&Kj((pnEX(+$5gUFT3a zHP3P;2@utx&l-Jl$mMg1qR*~5U*AZT6`ENH>D5IH;H)qEE~5iZ&ZZ@vVn^H^+7k66 zua*24Vl?*V2d!6yk%Owg<41=DpJT;ElkX%jA-@*a(ZlHM5?hH;(u9Y#I zyYa}W{ooBQ(uUCPg-k`7jk4(z^JIcM05oB#{x$SWOkKPUbF#nsAhg{PXzU1mE{x6? zk#1mdYH``Wp6r=Ocod`Wx@l%GqCa78f4}Z6<0wy!bK50R7vjQ5mlV27rm5!o07zHy za~2T&8;y{MhBF)*=i&UDk3ycs8%S0)BMgN9fs6nNyt|ovWIzve@;0*JTlWxurhK%H)w8XEL5UThoxZ)}Dz zx{u|J!T)I*E`?6Jt<3070@p7@`Wx{4DX>QqSSX`j{SUOGoHXxS8hP7~yLlJrrTP03 z1ST!UUi~zR^k1l&7HNza4qm+fi|vua#-gmX1kHQYFn|hyUE?4k<3MB*@IT z;TF%^nZK*%f2Z-*VR8^7plsK5#GD)868ZhvLb(3~P$Z9L&Nw=I#)mHH|NF|r0ESL4 z7rDf1`-jR4fPMhyDjwid$d(5>2nb9x&fnlSn1zZwOu~G#{kS=f*40XP3}b@K0F*Az zEEVjk8`@?%T?z}01rQpa5?L#w=>6VLilWT)(dlKuNQvOJS`wh#4XCdi=#c#t@s z-KA5WF~iGOQT6NhBUc#d{ZLcqhqG=`^=CVQkc!MAglUzYXS2>z<6-2iCYDA-aZ!Y} zxS)DN+(NLmg)squWT0if=Q;teX7m$MMaXJt=5Yg=;(}PMYE4ogB~C-Y5E#F9lbWvI ziLz}O8}^F9(x`=WcT5kpG?FF|(q`InU?)WT8AWrmma;~~_M+8(R`F4%t-#ft&-za} zV3CQ-;*Rao^wrri@|kx);am4^6ywflF(D_EUq;EU7DoW*@d7;M_JMnB8f1lPtCQQCPG<>fdV*uj1OlgYKhAm<%SWdh%HPW=IVP^mm(4VMHJ%9)JwVw6c58wfg zu%awAI1#2|j}@~86dwT2Z!xs^>Ae9r8!}?`0@et;mrOGlPp0WvT$IV+!In3RKML@t zSeNkuae#N63$j2Y;kvZX-~|8GMR3MX+lv^vUx-;ho!~d!4BulP89Ab2r6|=*B8Spa zST}-t9=}SaUZB_U{z9=Utf4Tck}OgkKAmxyZ7`xr-@<7C-wYS7sFgVd3>r!ux$-LJJIM#WVk(SLU9NU%qhvE zZX@pc_>l6t0@R8eVG$O-xpw~J0g|UeF^lk=<-9Qcm7}fb%F`TO@wP`(<#9eArK>pT z)9R_{O-E?-Ib0vu4ywLX<(1FM2=t0LHHx?y%rN~fe~=`qzKYHriUg!)rD|heZdR#D z3k@xjL72-&)k|CoUKf|F(zLx%A=4DHklyn%h+sEe{?wQUdZ`XpJR<-PyoZ&S3ju(s zciT@C&*+)&E#F9{Am}%HDf8WrM{Yg!bN4c(3q*jo(-2!$_aRvX@KDzzb5Ob&2<_o- zs9ZtK48&v@gWv5Fwd0V?E>E8CeWpQ6;$PoamH!I=0;`XFC!BNRrV=-R^eU7kcqf=o zYI8rb0Z|(7tL}8#s3ZsrKV#(acolq?{?j4AIWt~#!n zMy+aQf}QMOBng$7Riu$Fx}S?y;&8sIIK5Z%w=hGsQQ?Jh62AjrChz)y*;{1F06S%v z!)Mr-89)%^AyNg{Y3q%JOiioE2u1l3-{Hf0+9eo26;3l>eZqZjL-_*mYd-kYlydeS z3ZJL?^a?hVl5Qt_S07Phcoo@ZTIIz8Kh!b52p(pM0zzv=#~ngf>$QXn6aJ4G{9OC# z1i4@;fuGD4)O30FM1ArMi zho$=a^nRt2l}qOm_hBVqDRkH~ zgZ@$9qz-7^{S7hv2TOuh#^jo$&~5?|&hbKBSsyz-6D%-J2yUxb^>K4*_x;05&LZ-H!KPwGY4s*#S_;taRoX+7hxb z;pIi4f0Yy)7+6+j+{@4ZwuGzrLyEMaGZMppjo6<7nxnC#?0p4*@nxaM|78W-UXFFr z{ckJ)Ft-r&H#BO$Rs0wFB4-0K0RJz)&HtJl$prj=VIhTCNS)0$d%1!TEBR2Hjz0t} zzlYI?$H_l~2hpOK!V3>mjLR$D~fHT}JlTojGBK z0*3X;<;P$B>dQzlAL(qpFbFBgiAj3vB@|Lz(AcJvHfcOu9S^XoJmYz;R+#P>Y71+W zZn86^U7s9W&$Go-IR9$kj=e^H^g5&^%OJ2bD2MA8y>3{LPOIe)OB0jit?CK9NP(PE zY(i19?$?8*SNlJAReK-U`hv8`(c_DA35a@46EOC4rij~~!?5~{ zn9J&s>m#2@Mw>(C!D};tXT$tCmU*^kn%Q67e%7(E=?afk6}X)mc4+@+jN#8UsvZfq zWrC+Ff$Fk z1y_#Tr=bj-K@QLMDvTt7gc$Q#aL{x*sQWnNBWI18!!p+B)zPg!p;K9Zedx*?gF&!R zzQ!I#L){p+LsGz}TWoSms4nFF-SH-F80HUZDk}5ssh?0aG>YTDqMoUYwcM2)xUleD zo2TGIDM9$U0_|WC&{0G+L*`azB3S9c1KRYlE@djTLlx?8@Q0d-^gdP|RX$z*Em8X^ z+V5_|DFRlJtKwFy)&SiYkkjN0gQCfORAVqCuxJZB;TFF~DsdV8il}9jHZ1ol=lK__ zFK%B#h;;IF%^3?6^Z!i)1)!Mt0Y7e?T-%cj;8>&L|LZ+!ngUY35eZ-ahYAh~VapVW zl*2+hw{t!3ZT`Jg=g}HPW~9_8?!V-2Kww`3&`Rqynm7MAl6cY>Xx%_cf>vvv5{Ch} z`d337c`{qa|`EM9#{J z9iS6@x^#ycYyt!RapwZ&47higEXZ~81wOKRDSrU{3^E^rx>H0EL;2b~Q>MNMfX}T_ zY6jM_*G9~~r_6mr;ak_n-s7t0QyV}I1g49ST%-`vF@TnMG-tjdCp9C0c2hn0qEYnhk#C2 zdWHDK3ruN@Mb2RdNM##Yr2AcYR2KFi(8O=CWkjB7(;+f{whiDsHi@z6SrqpfyNzR8 zr@2yZ16f%j1`*ZUw3w|nMjz-gci{WPAtcP(@Y(}_5pJ@w4HsuQyE55i1xV!L14yzW zy~G!{IuTz0cpG7Enj5{_jK>On46`LLq&x{=4h3ZqlOL=zd_>Ycmg!QR+UQpMK0TUp z)@)YDl)$p;O2Y6A0|F36Sn#^xc2gO?PWpdw#$DLkAvmG@#?}6aIp7x5$1`3IwUt^p zVRD7&jdI9TWO)ubJ^CEU-vq?#!ljSKFoC$66b=bfAzH!=X)%H9vb2fUmawQsRf1`A z>}G0))IX$h3-#DnrOv4m|CdsZDNY3^2u()1jz-I;u|`#Zcq&Ba(&j9uitDec7lI~O ze{W(^Ef4@yxCi02x_iLlk`L@G&13YQPPbA0@ay!=fqI_`8O2R4REZiC)G3{!&5f{NSa$`S%5-Ckty(1;#eUb??c) zlncuRFuCSlBjE@+UJ6Y#!xZ|(VvF8zcBAc%|G9pbLNf{|MraaC@Y4NnMFM&g-vfS) zJ4>tSFEmt+jpBc4+S)5RMaaU~ftBeWG6Yy%fB(WZ9*~j80sxvk_}(FckJiL;#zC}O z0FW~egub7g)?Z?&JTRzNYM%(ed_;YE6uJPgv~f|OcRq|(5TvSYdX#TM7IqhX@2QmU z#((b3j|boD;Gq?BWJ%yRju5nHt15Zbe+NjA(}Ll<4~+ygSru3q(er+w@A?POI~3-B z?^4C=WOx1qh>{7u>dW+F-E?X2$AAENWdYkEPV`YJOwJh114kIa{hKHdn8riZIRKp5 z3@|SG&(wNlS@))k0U*%ng9uXHuL}w+MR-Gj0?|BmwuS$=0Yms0>REF}3ux>o5oHI@ z^TNEi?>b?4VGZ@baITloY*|oFj=4j&%m*(dh19mAMz|!id?ri|X`WS%g}x&4zCMy& z9V?}%e!CqoD`UXcb9sdULCYnZzo#QsG3eS9CajE0t;Um7sG2*Y^5r3ea;`&f)G z@ntLWIhW)e$x?~|a{4>{DS#viisSfRdfxH9w9-wKCY9_9y)bPOTMW~I;>i<2SIgoO$3EUY zd|-}}CMG$!OK1Nsz? z75diHg$<(pURz2Q_M?CsSiQWvEX`T5a`vbfY+hyWlKZ$9k5p(w8B4i=t%^qlWpfDe z2;bM7Gi4~?epdARvB*hNWUkQeva)95!~YPYne?*g_!yCDvLch@z87Oeyk|yW4ZZy> z!nhz`mw?4PJU_UqT{l9?%gf&h8#IZ%e5F$YY>zyAHi%XsK|S_mruczT2KoG}bY zlLmLW@S1OuZv5RlzoozcPv})23tNsdZ79}80-+AUUwH!r7f8qd>gXuYZ{u5x6_^3B zpoIf1Z)6yMIH2E=J$^F(thyR((p0sbTp<7NOG(LrRP1f8T2H_Xu;&4m@IQ(GxPc!a zEr+wXWEPEXlXjtUzq-1x0QRZQFu`XbVRCr*d9Qwd9eM)rRWjE5nC2`!3L$C)YU7n3 z0_eR)O^IlrRBs>zPhJoMC?8LApT$@)ac1B4+ao6OTCwro?PfsJs7+Ni7fm)I^C#}s z*h|-#HHhcVO-15nIb6>iD&}4jUpkIvRW6{+N#<55NM=9ZDt8^NbyGAjShuqI>5zeW zEMHPGdR3EU94fL}qvl}byme~-Qy(J&m`9ip=zA_XFopPr@Lc2nuWIN@62x?XqZFlX zKQ**Sl5=*Br2uj-t~Vvzx59LIbSO{;*)K-aB)x@-4dSIEm%pU0}Ih41jN zm#(M1q__Rn)ft_pK8ekh_&BXRx(@YXs_({EvU)RJ5l_)|ehV%t`jyi2&G5|?V>fEI z3A<44Z0kD_`}<&720lY!#Klj-67O*WMO}Jz38a{{AUkj zz@O)V>d@x{AyU2BB;3~gm9~A!bxk3x+tq6rQf{+@5LB|R@tg#*NNUGZ%J=&I>cBUO zXz{f$f(^0$Aj=)!+THodjD;~wb=Ud$m03BCuSiFVj;^sP8`eIa$*&F?_RqP>Z3oG{ zHp_Ub-|jriK2ZG-`!V3l7q$zVhu1TPOl`fh*KMoxp&Q^@?9grBLPArYvs=#2A`6X@ zOfHj3+dg+pyyp3&&c_5C(>m#OzrcPU0Wkn2$C^oTr!@#bu_6JcO+@B{KxI{W0W<%| zb08$Gg66^OS2tUV7%sv;D4aRny`JBU#QB(eO!}tY#c$71CHW!z?>?haV&b*z=dY=dL(tV7cH!mQoJp@S%fejvY-m-A%e*(GUy895nY%Z|pg?+ijbr zm+>>|Y4ry7PHnB%trpz2Tz_ehfPfT@ijK zZ0|A>R|YP2yET5<50NURIf{v8oFtsv-^kSk#Or1m!`yjsXid3?$EiKtrp0(Hl{#$O zZ&&8kK%vu<*u)H)grbMx&@kEGodd5YF)fMq2$CN()eoH%U)naO(OKC>dL6xF;Q|2j$S0oshOqf1z8 z-53lXk=Ny zq9iV=lr9|@3OlQ07T+%19rvj!Yu50J^^Gav(_XHvzf2YNX`?_CgK^g%K@o2}Ux>#X zGgH93nz?T3rukt~gY{t3$1|-1F-^J|zJ^*PxzLhrK9NjfioTlZpN1UXhwYVBm(^ZQ zJJ-@dE6jdmbjfsM$CTu|MOr zq~tyZs}|$lk`|n% zMP8y3K~j^;ZU!bi*GsxSdc8VTidpTt7J$72CvJ0M9u(l)7XWvf>GQ@}mJ$EXRN7_o zm4{dKD^4h<*ho$`RFtRL(szbr;{ z3$@%BgcbREyu9VZ;j$ojJZy;y%`eVUfQKb}rl>>lc~Fm_iRir1?hSOI)FOaJTD3vz z)%L3ZS9gl9=ec(m1PBp1919;{Y(yQZO*aU0t=JY`PRjH*IaTbuB2@Zvx2il8K$56V zZCeJok1k@paWH2ftW~2tF7F%nEt$A`(l_ytkZ@dv`8)3yPoKx-bESuO45QD_Uc=7M zcuwr5t)1Gb2l#}_nJe28iY-5r*nKM`uGozI@anT9hEE)46-7zlFru0(2c7?te8p;) z-Cdq$XJ$CYUa>`4foPf^!Kp|i`W2x1D+Ff10eN8cGI0?lZ@tpF?#Ur{`w6SM>;~n* z`XK8nz}u3xREJ@m(edT6`V+U#4w(e7@qCWDk>H|)`=gBdD%x|MJ<5nqhpJ!F?E&dS zZED{IEhcz1pXolswNqAAm1kAyOu@zcWH$IV@&HyI@jZkuT|^73(r$EOdhRj9WVu6> zrAi{J(hIRSmzfcOMB1WBp3kN_7I(*~Ycry{v?m81;!;#jtMO{F4ScOm!5{Kb%hRG| zvH%?|cF7Y>vDwE|Zn5$*nwUYPmpkbk z60E;F&kRBBTEtWf436j@3q@ww&N~ps@u`-7XCHHh^C8BaVb~-0J1Ue6%%)SuUsm)# zpHQ6~$EgUmdoiik`yz&BL)G7l_hs^~y}4Ai0ZWQBj7K|akgFHB2&3nvc%hfvHqv3rHJ?Ii4nd%Y*nU+2O%xj}4u((76}i4rPh zpEZSBTdR9Ln{D}G?dCG;EI0XA_-TCWEOX_)hrbCuHqD+m*ks7_ge?5h>wA^Wcc^3y8Sz zs#Xe&kEseU`RTDRaGcnsbzPPFynNhP_lx$uT`3sDrtRlXkNBFgcIRaIv5%T}8^l6o1=+>a$Yl~BAIZ@)xk_KmwV`gf*UA4kyuPA7RHF|1~z?cC|A zp|j$Z+yh@3w;3NLBgaWd}lw&(yMmW-lv0$;Xp)ND#P~k z>9hUKMCzW@j{c@L+!Y0-8#u|DN?0Ssv;L-jjPvq>!H#Qk@4Fb*Mf5)M=^T%A?wBtG z)jI)ZJRseQVEB@FoPpvh6-%Z!>68PO7UpEZZiXA?!whBeAvGzNI=EMlT9`~SXF`_o(}usGtJ(56@ixR-_(QUQB^>{Vu@>gL45 zYcje2ZrJ^A*H#|n0^?W*dWHiQy}q|BE;rAH&)z0yqsGK+UO-*S#QBLUN}az)Q2zrERY{-2LDdyvuy^{Th z8Q!aMQ_hEJb8w{GUg);>lr#qN%Ol*mMCL21Ma*b%+~b)u0sHccm2^)*b?FxZOf|<` ziNT_WrBlsEV#I;b%nLcnCH(3sRgQg2kdq<~$JTcn4c>q~-q_Rh&v5D*ziTNF>yZ?_ zBw!@8N|3m6rs6Pf@7ONYwQ-00B-0qd456>PUY}JO!;Y;zYBDsFN`xV=%G9fGlCMAV2 zyt(mKWV{a9ZnElMUwc2_rFvB4-aCG|hjf@SGOas0Ey*Hjf`;yd_83c6SAk{D+OmJH zUoenDybUi6!GwS|T1fOaV6p{0<$#M?NHr|&8#Eyw3p!$WKp6e-u{K(bI> zLK&Svlci-D4I`(B@-_gCd;Ab)&E$chYwXC1li|n|J$_Az_Q|c8eHydPCmxrX{-##} z0`k((JhHX}ynSqP@1}-)_8<~96}jFoSjU^jGv2LhB;MaKnQw^<1_^+}S4O14@ti=; zvmu|3P?c6g0i-zjgueKhqi37MK6hmqMb)Ft2%MFQ!I~~ahw!d4r!HL)`9E1gIXpc1 zasm6exmLG!{5dtJ1H7G=CY6Qq;N_IDljat1?xPF44NB&X3v#O4w9MS!iSc)pTa_UK zlWp4>)R5-cw-oK|Cd?ITsQIJ=`Mwl*VATGI$k8X+-{<$6AfPda{7q;WMcctgyR^k- zvSqRvSz(MV^4ht<+b88W2*UA~J+eX}wLy+UMEB_EQ{|uv;6pFLZe%ka!zlb`%*^8R zaG6~N_Egr{S^0a+tgoIN{%!OE^s)w#-G=#$JeHA78f04)-mq$d)Oz%{o%x(l;BS9( zNTq)elX7?1kB#)*O;>e)(c}IUshKt@#FarY&6XP5eguB5@j>a1LIOW*NZg(3cef=# zL1KUoxnZ?TBtT(Iq4C2R!MhmY?4T3!5Ls2)3yZ{$r;6qNp9~`8q{!yRavw8U&tgX` zMzP19R_|Kek1fgacrU&plMc!Ic1M#L>lpx2lDiLGY5%u3;Cv@P8n*y&!z(8Rg}uq~b!?K(NSNSVAEg#C+<0f8?|_;QPFQR2vh|;7uz$Lz-wSk_mvM@)xBR^N-Tj;}@HY zxbUgJ`u#I*0FCqMjj>*kAai|1+~q3`;RjN^4>=jWd{NDOW< zJpWIAK92`!8{%}9lOpr|MaH7b)P@qH7&_z0+#exq{zXYRoJ@NFP3p8C>+S3P%E2f>|91zlw! zefoS)GU27J6}c*7<(qMGIyyQs%M92*4WposInbAE98YQpzq6Aac~AW4C|pj6V$QwG z;^wbo_A!pW95n_=?d|J`n(6}pX-4`LYlxpL3=Fz`Jt11tike zKisJQ)xEWNe^!}~|4;-DG)Ic;2cqx)B;9rJc8|-s*KFh25x#la-)8QA^!^(Q2>K?i z@T(;IY6Ae@#qfcijHJqNf~0&4j|Z(`vGqV9WLZWrkZ3 zwmNC=Gfftt2VnbzWf0!tvl&#@cd*NL9vu(n7Zfb@{!pRtA2fp|D`==dxI=GRm4O$t zRd6SDmY{Xj@^+{15T5~hDTmqQ9!zy(p(?0H8UxKfSAA6A{@eDaMH*UyZxNd##$;jg z&4yZQ>$`*B`O}>jiT>i<0p~n7CxCv5{sRGHE5~MqK8ZPNt>W~5S*HMJ2AwFT1`Cns z%CU%+s5D$k2d^%0DPo>rJ}C#H^PCEq`97i*-zlDWhKc7wq`XfUObUPOXyv~&h;jzq z`_tqj(-(gzQh-=UoaLSM$5Ec)9fZhH^X%+HLyC4Ab}Z0ZIVF&_eP9r|09Zv zx>ikW(;j-~bC$;l{l~}AzZ9|Pv$F9%u)edksK^dCjb57W;(-fC^o_Oc8ORC%3imO? zK0M%ii#jP^fswu4AIlPy;=dlr3^MQk@Z;2}_dXQfh1H}=K?KLV9##8n9@Q!;;?&9xi#wUA3VJn)!(?mqInom7SB{3N2ONaVSDx#0h!>#d`rdf#_{ zMLI+pBn2s@5e6hBMLHxTrI8pKhLo00=|fHXtrZ}a}1&*z-qI_s>( zTKq-qJ$@jKRI}B-jHJc@un2$ zVV+u-eM{5=)v?1MHg+TGqzW0i>#5u9qoS-gQF!uTxqi;6YiPvmCFo)q=8g8Z;vLDq zm?vOmA4|7W?vHHhp1FsJqG51~P37GJM$+F**`VZ4+4WIibl3nYw)9{fiv&K7?Fejf z&L7pOCi?pkEXxQmT-MMPO4`GPf;hK24(*stsSNjR^%#?N!WB=W>fcfcLnwn#?cujx z;kp*gu607MAI!ge9Q>RE{8`nH;*W!TjWqE;IO|62h{#X!Bb0seQ|Ue*4i_znhSU{) zl~mx0s^hZ{SNF-oHqo4f!olV=2sT}&g~_;GvFBL!*rzr)+sPd*@Yo)88NBkX2aEb$$KWg)89T(#u}HnyZ<)2gp*L9+YC$3VUi#9*ozL zP?D$I&FAFiB#ViD-A;;}Gr5Ro8~ zJe5E~21iCb`>*m~DMrsRSv)eX5+YieiZ0z7M-lqJwi<&%ZNe-?6$6y%V`9oQXEok( z&&P4=#0$<>KUxKe&hc)3cuP+VwG+`CSexA?eA6O0QMlyb_7j@EPDg(Caz52O`Hfb}=B-XN zjc1!;9^8Y}c>do8S%27Ye-!ROoWek2#6T)Dhv}H8kzs}M9B7Z>eA<+#-p^-4?uGLA z`zq0NyJO_u>mORA0{9K>*W&;CeRnKL$JQx8>Tu7T-m;Q*BaoGlG+&rnk=wtvh=^sX zV}S;z%{l~@K75rAvo6pz-I?(aW_d@DZVVrk@ey0N44)VYbQEhYX$uIoP}-cEV#oPF z&@VgXkolJL3Q6dzOf(_F=3FbR&!)_bLv7oVfu?k2X)6z>>#fJ&cQRgzmZ{so3xz@= z;GakH^4&Ky{9f;}co+zdv@2ApqkP|uSQjk-@HSr!5<9B2&57P7xm0ifRtc+TwmFJ5 zk^HWFX_maU7L;?Ob)mK_b>!~%u}5htofLKTUqS>WTtWjrt-a}ci|39p65>= z(I(E1w+DNu&x+vW`b)@vpXgHAf#U9g4zCq>IIJ8mwdTAG3Jk%Y%ilE)kb#ClV?0@3 zg+@?$gO;+GKFI2W{=^{qC70Ii5{$8; z7@%m=oPy?|BbbpLAG*bnNq<@){%X()?ca+Io1kXPRL5P6G-FZ_9QnSM;J16)>-hg} zORN5w{BH|ytvG64rtYV$Ic(rNTYsQU|BsU7;JyABwt)njfw>ogZyavEn$X$74BGIt z_Wx)5a*NXmcM7132UTMcyIpC%Ds(*hjSj6D+gdv5?a*;;%mR5HS3PLxZpHJv^S(l3 zKx3rEmr>p!C;CI2)CO}5L<<`>RIqUxW$R(;QYKZN5JbTuxAI#<;uCG98_E+50u#mm z)l)yTe;e&*R%J88-8pEQQIf_#PP!lk`#;*f1@kkcb+NW)Y4ff;bU2bZ|0yG10HDAZ zv_C^+$@?nFik+fq=4{*U#tXbdvKij+vEvEtH!@!z)~Ju)<%IoOVdEd;-I_qm%ajFC zA&s3lIJRcXDqS8e_czJGRw*G6c6k-#T%sSDL13PeAc>9dxD;Q6={zpqFwM>Uo4*Nj z;KnciISSM=0k}RrYu>#2?|1lOC}hj_L`sy72IDe&l@Ct^9#VJTEYiMH50tU1URQG8 z*wk`3%WyMUmc;MEdWNwY#hlq$>$dbP^U0r}`Hg-RGPB>f;<*2-8W%^s2ee+dwBa#j zE(dUG;;7BH^X7#av2m$iMBo3d+aVC!+;fUa%?#e6@p@87>qR#z{1?;fVyAGsR#6NW zxESACG=9OvIbzyowW^|9H+{HIB*(FQ~Jz8zTL9R$DXv(hAN`y6|dg zmWHAgXu6vYjgmIe^X5=i5jN>=H?lgrIZ(8g)wLlDYN&1I;Xga7)Vxbe7Zb~(OgVRr zGZahUGNXx7%97P@hvv8WbQwbQ*mTzTdhtr}QyE5PN6&OLC9?5N%p0u~ibPx{>Tk;m zVHaZ4Q8)u|CVro)7uLQ&66^Lvq@du(PfES6&3kGE{MegHOHF<^@`sj-HLM)a0}tW5 zQP0N#xk8r}YQ5++d6baJlLPk?R@}Q~*#<;ebLHnYTl)b;(E9v^XuJ0qevfDf)!+ul zxUSHOKhE)-HF)I;U$pzP+hV9)OP%A*rNgFeecJ5x7p>9i!#TTr^Rybv&+F3uvAYu37-KzX-w`LeZ+*{9H`8M`V+6XdFy_UUC2!Xp zaSbT#=vMd$QdZ<-9|wZ4MGaco6*<4Ltmm{ZwW%Xx)^h0VtX%3V$2)9xOpObQ=clJ^ z4kEvgL=x6Hz-(|}2?*-|VlZ!YeGcloqU$X_^N~nf5G4kTa_gXOY4Fl4=bt(7U235U z8#)>Z7fT)Yn&kVq7WR9Qvbj)=fIx$~C0v>t83y!w=vS)%A@bn-f*&QOCZp(V>7cRD zSxsA5;@roaJ^7=r6Sr544vWe;FmMPpx67JgGM{Y`)?a;x<48~dJs$%v&i;GX&U;y^ z&@<~99={$Xh?@B}*luu{%#GM?i^ zruWUk@2+&Aw(EKGpo`bTz>Ndl(2-S%%8Tj55ww;BZu9GVMkQuMcP_f|f~m)$ zPV^`@JSI6I&>_zUgGl8Mt@9~2<}Dw19-F$!x#v<$#$@xvOkn$;ywa9{CA*}D&TthC zjqMX=CdM2upCm3#u?UM2es(x)(~nG4IhDwdIN)hVnw3B3?T?j_Bi9ePp)&YtswxQ~ zF4FRqJier)n|Gmtf?~!q!JOPKcMn`nkG zTGykTAz`oP-+Xp&YHgzaOIMfm404j68HTB8LieJkSE`CQHZ z$rG|tJmHt9c?gmvmleu?U*Wqp$88ytv5(3Up7*36$?bkmuwQ2^B$Aud&Nr`MrT5Q;JFsWP)$&SH>VTS_wM z&d@RpO3HMnI)q-*1E{_6S_@9*Temq|5L+ElP#Qj^|D=oqL*4n{6S1MsbBun3&3FQ=N#;5>SWX=Q8+4lc*2`8cSVDAk~Nk)a4+f4 z`j)xW*w6hnMGN}8=f2-J6=eIXv<9MhPi5UjY&|4kJ%vf+D5g!>#&vAd377H-{m!4$ zI+=wgWd+`E|-xwNA079j%xn z$Zlh8c?IL-#F2Xn+83eSWS?`lauqvW@oK?!&oZem?5I9e{=kI%45`e-l$0`OGo(m{ zjeWxHJ8Dxu8qLk%@n1ty z=Pt;VE;&Z-aGV@{>@!dTW*Dq8Om%k9ak?=uMczz78}^r|^cQ4u6k@+L-JcFCY>n7X=WdY ztBY8&7_gxuOBSC9ap08P4UuxneDm;d3D@u-_=gt-E7N%#Cp~2x4Uec!##O@i=IM?< zsxtaXxKl-e5kKihWOoUk;XLEu1=kX^1-SQ)Yj!RjVxyGm8|CwEd8020o}rOkA@?Q^ z9ZTLMhe|h^JU&zlz?XlLeZTuUw)W&g#VVM5%g*FP30vlwlAH5XjeUuRykl3p9i3i# z@F=p~qHJvqk&8)z2B$e~5_U zOIqz1cXkBxf8-~#hvHW899%5Nrd1PoIm(33lpf8_RWfESo(vQ!XYL8Fq&KO0&<0(# z<8U}4e>A6Fq!_GX`QG}y>Z1*z92LW7@VU%+Ex7fix^-rMA*tIT2t;)be`lBqBMBmr zPof8bX3sn!uJwixK@^&^u#-M1sJ_ULP}gp8hPYw*q`%gYKehz|6qKzPkUFv*A=W z-I+&8^oFYDaFIgaxEWU-t}#t_AmDUU1uqSoXcgT9=JR z53-gq4@S~VB?5bk96;fivpegWH$`7@QvAZx>Aa9Ytj*~>#LA}-rWDVvt1 zbH=OsWf#zeX*A`bZ_H~KL33Wbks>zTQBe( zSZEjNGqa^1yJl<0@QTs+AI1f&FG>@}l;CiNUM31c7^-7fBFxPkYf>$>BWXLbsn>2` zt;tH|M>;LBVr1$&7ykQ`{d#iuxmOM6i`5xPKgY&5HPA$L{F08{mLHx#k!xJ(PJ0vX zw`D?$CuP=U=wRdZcYY6^mjqOvy%c37Dn7S@j;PxN1>yxN9EN0tnqH>}O3T?whDw`d-D&!R1|HmcQt6j@SJOEFE-v|CW@f7Id^j;8pYG>U6Vy zXNjHdO}D?G6TvWC+(R^Vzo(D(S}0`fqf^XvIA1-bn_nmZD9=rFlbeKZ!abGa6Pk0SR*pGRyy^Xt{}B|=Eg z0k+={YaqyKxvGB&p$FB|Q~Eq-tL1Al-iIBkLPybP!f#@O$C@HICS-9ULqN)Kp_ z48t&i5g(RBN#Dv3+1Ubpfe3oGu{4{^O+y71->4u;*;n=U8Id80{G@d-aN9+X?=v%}Wo+fQzPA8i!oeOT{hiV{&p>!AERlgOLs1g3?YeZIIg zP{Lnf=w%5*45x?I)HqXpqcQcszVccIp7_m+5ZB*#Tj17?1wQM=Q^?eZYzMxL`9#(BQ z?A<-y-mia8FqUL)f2h3d75OxT1~+lYHW&zjK$PS~*)yXoj_rpliBP!dK?G?kPew%! z$W^)>X#o)8ipSLoCx?uWfv9_z-j(-e{nl7Yq)>SiAuz5LplRAPUv$07CwK1t>b^6; z{3*`yeLsYmYHPt|>$BF%5K z#+prK_M*VN>jggwC3e!S5Mv1o0p6GSX?NwhqB0k0_?IM=XfzeJOy4!E73iWat@mQf zX^wuO(r9izK$V>{iGHs-(3cRo&g)>SEMc7MDba&>u@o&2z88zQJ(ksTT=;!?P_3+L zLq8rTHT*Ca%fRh;X}@Jvij&7OTKt7(+0?B)R@V69?xN2_C^Vb7xrl$2A)4A-qUYdeBWx;JbG)v|a*JOST3@g%ckdWs0s_`4PQMG6|!*6e&ArQAHa49WI z6pCviziiZ7yTKj_A-~kxRqK+0tZ-AXI;FgK%wKDYce4629wGxQ1p>c^Bt8R*jaYG2 z2T|c3IS!XEb%B-72>#-?w(Q3y8TR;u&^~QjjwTSh|6V*MN<`ao+|;bITRFSjo*mBN zsw~xTe&FfQ9m?zvTGMwL)wx^^=UfbDeDAyyMtR`-#B2X#EeJ=_*6~lmLl4H`dP!b1 zYN65X(bbl!i5nHg%bMSr*_B}>tbVVRB~6)}WpnFaC2lHqiU}GDDbs;Dep{ssl4YTu zgwGmV-Ae(7JH|wW5=xeO#?NsaIrv`8)7AK=EJ_lZe%PdbpB|U)h{^5pbZnq0nDIA* zg_g6n&Qngf6wwCdE@Zl1#5i)!hMgtg6 zMzAhb13#nja#?rPyPkc0#p9(9tQKt~%G-e*Kl~DW)f?unycF@uNS8}*M#UH|jt@_7 zj1w3B>6%`Qq&!}z9$QIYk9sPSE}QO7nCW@=47c@?(0O|j4S9csk#6WUl%LdaXOK0f zSm|y*CvT4o55ey zr{bWrM+eZLFRu417!Ew|(d@5Lw@8qXCNGJefG&gXugvK`>J6!aag;;}y4tP@S%HYO zzX|F`e{>JCZ^IcSOkMTJihDy6zl+uM^hxg!_W-s2%D**LR5*We?3pZGxjP?X>psd< znc>&f!c5kyA|1flMfZxEEv|Z|^vCnJZ!HmB_3$;C#`AG`&H&C1%ZVmFnfrHCN$Eas z1R{-ha)S=!NW3!b##+6P7X$Fua@B#AQ4uqr?dK^()8mr%oZ11|L$-D^CRUuyBn>b) zUtmtlSvuFWo@+AEO?MBp<+^9kIH284{}8X`1=?FtL6E%IFJogOWp%5Az%ZF^MeawG z;XgoPM0{U#m&;a0cyn1RwiU&W`z6qZ?J2Df0Jo+I+ogNzQ5s%5bizH?{L;WEhKSgu z2JX?OQ^%tnVmwN-<|IF1huIA6cVbmp$mG<_=Z2lW@pHvIq%ESf3$6$L-M@Sfu}eSE zR_*6!n@h*O z5xp(5h9O90VVYvivi5w?vcJXh%@Z#)XAkp&-MuLNX2HW_lk&FE+*}DgQTr#EO&2sJ z+I7SG<)?Y6LNMpQ5$YVR#LW8c+)8lbrn9A{)chwx`@T;+Y=92f-eya*@JnykxymnQ zrXZ`ZgS+d-G(33=(?(fb@`e;6yFVq3)hRBCO0-zJrXJf?g+O&utEoFdgYlnU0AkPS z&xDaq?Hj2SlSIG`#}{^orj*@n!!TU|0JLOdDLn_^h>xTHWD>omr+l3!Mfd4(x*8Hb zQbh8WYi~l3VQtYQ1&t2#uaL1<`~w~@142la-}kg&xf@uk9(1lp3PYP&ygBM#(h(1(J&s2)>uf_QC8<;CfD{ z*J_Fd_xQ?EMlSpUWMD4}_r7A(1D<*Z(sVe8QLNWEFvsbt{FU&JlRP|&&Oh{@3u7`H zo|c2Ivg4J|3+2Yi!>04lv#>l;qD7Hxrlw}x3qjA61qL9|f*Jk>$_TN|T=|OdP~Y;g zt;vK3OLzf0=~$YU=z=XL&+`mVTeRq{Woycs9BG(qzs|#QS~CwNfA^{duCsyZLd`yn zXVd9v1C7_oZ#!CBBg%8(Tg-Il4(U;Kc&#$67LYsmVL8Lq^>}!!t}=2_4*xx@U6?uD ztrg-R#Ql`=`KJn%XP&7N)Bb0`OG&4~NVKo3o$sugX1TB-=YEk- z#_ib~;bATLmdFC{B_Gd3BMtS)+qA@3KetRDY_Q0c0C1iT$-Juv;^{s-EM2rmwB0)z zAj(IE7Tcjsn~??N8-K#;vpfh7MQ`3|a_Ex&8A?md^h>CD$5z}9q)~OCF!xud@jHF4 zIrxKxc6FuQ{Ou>~++BFiZmi{aY&rfo5z->&b0uAIU|y=*eD_=PJet<`M}3yhWa!;A zqSV4u=I#i{Bs^T5R7rN*hEr#?o`+cz!DdI^;}c-Yv_~5s<(#ss)qU`1X4EF^2^G&E`gm@hV>al@e}3`=tSWbvs;25M@%FL2 zf>%rvTac*!q4A!X7dVR>s(^Kb7!50TRXXkvGIQXZoJ_PV^KUoqyB?*6WLphsG7(QL z;RPbiN1cDMBqwp`t<1>#mgu%D2>+VTo^8-iDoehfMP+UPLd85xh!TQ=(E7PoNA^!% ziE)z2lMTx<6a6*F!q4!u3rg`-_HVmfrdVaQ+Ud89*%U5mse{q%EABD9W~6VnQrFVR z+#DMlkyQQq3LA+NQ_tPkvt`%s;IL@9Q1lZEDQ)*2qnHJjII+ zzxaTk@=3-cVZK9-LE8-1Sb^DSS3SEbdz?HuRon&+I^aW;oVLG6%)NWqHc{e2sbU25*#YREPTD!Dp+Xwh({RKnUTgKs z%AJ%Hf!m0umayMAr1waCmSh}7Hm$rLpW%Oj8`m%LK97<80V4e{nwzM-C#2_O&|U;dRATZ6U^bGxZ-n8z?J<1X;5#@XReeQ zC@OS-I*N~2gm-VeR-nFMW_sX$NjX~%Dz_m7h6%Y9*)ME`++0cXEzEOuihT>&8-6I# zrZ2if?ztPj;02IdeDf~o^xy5y=k6oKZX7ZH|UFbITTL#*~ z;4)ncVM)7DbmVE7wBJu=vmPKw!I?4eg(@-RENA@W!kAA8XQnm z(KpSnTytNjVTWXMcO%kwXe6(-b5ct~^-4H@|JSw!rK`y03#|vGn}g`u zVogmA4f6HRpWnS$S+53qbFL`!V2i+0ntG*q0t%*Yxg9?9q}`dgfARjP=j)|CKp42W_e?(7%32I6heL)+%XJzFhc5=+a<2O( zB5v>>wg#O;`Mt*_Q`6#2XjabBj0ZW~dB0@q!CzdQt1CBLjVX})6S7N;pndN7lor>U z=1>?(-1@MLQC4=c|28A!#*zqmbLRu9Plbq8oln^%4nPK$y^lmieRib107TB^+Q_W_ z{BYM@NxT)r>D88bHC3W+D(k*QOFlB8KK}87HtjZU`jdUmuZu7L?$@_hH7I{TEs~(C zwD2xd<4w0a*Ri`&6maxRS~<>Fw8p&sM5#TPI-;N-Zob)Ss(bEk~&$ZqL)= z_7}=DG_^htmi<%8mh?)S0zkss(+khFhOKF9e(gXg^gEi6Bx`Dvtx11J6)5$0ihdZl zBBc!1OrF~b8r{M0GuS}K+K*k4`^tkxARY#yjEwh4c5_#DuHuf%_=Dz^wgwdE9i594 z{j6W!d;(Mx1fS?OIt6AAWhDanMKwoq#ZCWNKmXmpLKkBxIwDcdiOm*iK(zD0AP)4r zn%^rjA40Txd^t|<0>}w5@)QS0`<3HY_tJIcx;BPMq_FU0j&r2v>MOf`^cKvyt!k>3S`eCaCdA>ni>Jn*VsmIR<|7A3{5 z4Wajdixc)gl-u9bh{VQ@69V0WuRxzv0oON5y3yCjcGZiLEX{DB$V2fHpuv2h^eC_m z55FxF(Lo5hzP$#tgqT=iA5TAS4&_R*0e&L9YqWMsz~EyMbXmiX^2-{91g%#w~!|{{t&q*+m zSw%#C?sVgmUTXS#LUml#ufm|O9=`NFn|xVcId}a(Z3F7vz{%6ItoP+7O`SnZxp6TW zb9i2^w$Z~TihBFeiL9_MdKSNKQeRD^eOdSTS!suPDJ=Jqmtc{r@>wb~I1+eCeD|Jy zWeW!8S%JpBPcLiYeEGe?t#-v6;Hzek_!#wHNf^_L`2P?;x^Ut48V~Ee62l;e#W5eQ zFCVEwo;Cjc!GL0`NbGh&Y~tF*q#cu@U$BYx!A^!PUYzn3b2}>;@!$}WS&)Fwq^mHw zaTSMcPJoayERoJ?N*!lmKL3(qCnUw~iiODJCe;n%xs@{vJclPWjQ??+{w^K|dPaf8 zPHmEzu5vk9z0AJ;u?9r2I4tE*gtgH=1Trsq7(Sx}XX^eGn`%jTb}dr;6k?C!<1N9_VD5%naoiRo;9b^Ku)8KQbo9s1iPai~k}e^FDk8*8NP@1ZnNOj4(`whHfbtpJr; z+Wh~h)P&}-p23Fe;-79g#beELi6A{z(B?}Avx2S~+l+gI$GFYzZjx(P--4#itl);) z`dl!q4SHW1U^+qnA`2C|YImM+OYc>c^TMeGYukvXyj1l^0bxJT7O@F^!icNP1W}t8 z=m?pgAK_}Tk}r|}^gPuCASST9d4t`=Nl0%dIgNEB(~1`)Ur}U)o|u{h`EYPJIwfq~ zm6Y6c@5^EDtuz|F(n@lr-a*-p9qtrsWUz4>NV?+WqFZ1S&VPW$c#|!E{c1bYp$3`h zIwXKioDi{VN*^ChweIX+_q$p5T7UeFnJgD)4?rSPjQ7+52=|NI=%LiZ)k~x)Sfw$U z|24eNhu>M0e(OHTYe1TMw7dZP6XtJ`cRmq%)lZi_ z<0~hG^>rr#B76(AO;fbZU!nmf3ty~v=a&=H&@Lf&?1`DOIL@)b-e08q6~gT6%cvhj zS;Ig!KcZ>x=|-ZP|1tK>fk@7#)H_kkkPf3s(@PtD4qOYnWks-Nm|Y2ZH>{70gugFf`B zf=7pcm*sS;2}sJ8K3MRFj4~}~p1CU2@(;Vrj^1#Y6(Zax0swJ_zZ971m%W$L|S=$1>kd+8DwrGQ7#I z=XeAKNt`J8x-JvI0^8fOoPl`u<{TK!m={_|(huV24-ZgQ>G0qomjrpPf6e!tdwbI?`4>=O?j(jok)|7mA?ve2kp@D-P*n9GtC`rPb z2vhY=lyaGBJwpNY0yJjti+ll6QfMzikK`(Y=qi9GQHIobRrZcGEITIi<+)w{YHT17 zn#nRk|9W#?VjY>b`99oRF1LDzUSZIBai#KE2Ln97#BNnKLx3~szF#|g1cW55)l4b9 zo$spwE!qdbE&z6-@v`>?`+T1>AUp#yX;?!K=PDUk^eD!JL#P}-4zvPfh7}-D&3;oK zxGJOht#l`)f%{3bNnkBiIZa^)-96^r04rl|8VLl?uXkY3cE2r$`U4sDD-G*WPOPlS z@=5w0X`5AE3;jU0N78_3S=+q_*Id!f*82ch1%81U4Z@6qZ76sBdYKZdl#`9EJ6AfK z%X)^5Z813nq7%tgX(n{L^o!Avw`#n9OOlodTPV$F+l;10lZig=?F>fj`0IJP$7m08 z)&=+5?MR8eZ|i9$P(O&sj5&Yza-{AGCs8-j*4soPH^1c4wBF}bb*MYbdw<%t908loiEVd*_`bZDx-UfJ@8&a3lZi`Q` zPaa8w07;_(2!(fOe~R%v_Yz=%$`)&u9sxg*BcH@E2Y}8pR4mNW*E)6xfFOE@%$0w! ziGAMr&xTmvyg}Jzr+xr-;(N+wmt90IfC5ob<7fB;)|x@^+b(?fgOE3jwx1O(^w%5{ z(@T(JeBavIGFj~mO6E2}Ph{5({w&9uyi^fNG(ePE-?4@sxvHpuLaSU`9U6MilmKz_ zVIUgB@{<7UDwvEhR`d;gVG~oGN=$)*77Z;uB!w16=C0}y+^>Y^%aV_}?Om|VoOax*f&`qhz4EBR4rnr>{se0;%9{~(Cr4I?~31k&(sW? zXuH22vPA{}8p3KkxEE4U_@tlVvhCqUEaD{}w&y`3vs<1S(AZ19y1zMGN2Gy!ftdZU zWuF_oQr&tPC8g(&G}%W!qyUh*$7M6erSb>vIK{okuLh% z(gY-aHVstj;E(UEXu4-k5AoD>1$8JK$66T+s$?e8zpz7L)%?m!8IYkG=)=!(QFGi_ zTIyB<)>He2ooK;_T8MWyQ4|omX0Dx?7<$X@9{knUdZxs|;05;D=VHyB-$cDqk3xGA zqJN6Ri}jmbT{35_%Nh$5%!tiTp?0jVnKXSiixqN6Y$7N@qoH#F&)@ftfC}t4po`)s zkK8-*N0gKFas>;C%rvwgh-mBY>j~&|s%-7ngcs6>q zN5py6k(KbejfAWW1Y?zwS}yG>KmuQGXv%c$s#2lL;O_iw)!! z2CSF#_I&b9;;Kn$)pWIX9=vBk$5_niD{TIlMkh~<>ql-c<6E~zblImB;S9G1aUc7<)E3I>34;f zX5>{pgPC42Vl_@aq&^k9n-@`55f(>HH6=U;5R+jeko8mgdvdPU*RhYmkWzFgnD&ED z!5?92*-piEh|v_@z7c95_A=u`^gfUYsaDW07thqlN^okd{tu6R(X*@r@o11V^A@Hr z06{p2wG=Khx3FkVLp-uFKra4P+do$R#QyoCp>+>{3b`RCruM1mB9jpte=rh#0i376 zhat+@FEy4O`lB+V-Uu&q_)%X!B^WxPIAyui#0Qe^1Soxf4+wJHEt=gKs0zR70hHYA z-qnF8L{oW70M15h7NCLPdU#P7>ZCPhU8TOWT0=-VeZm?t7e@2=Y-@V$jt$4Ovk59V zR)}=_=OiN9;9ZzmnYu6r&!(rhww1AIS!mn z(;1Yb{^cDQY+$Z5w*BqcR`DH(_e1w@icr7K+6X}uQESzvGba*D%#5!%d2w)Ts1$7`u}@K=t>&M`+uGcjILJ>`$EZt#D?Z~yS$G6N zs`^+7fe*yUK`En~3yT$)Z2n1jLM_WTqAN;^Mp`I^+HG)kw>pQ2v=io6gZco>X|tkV z_J}E}IskudPy4Kp1wd|2j<6%BHi1_S4K(%upn|$gO}aDCh>WF|51)DkbHN6-n0Tqr z&+qYZm=60G#rt*>QtIFitN|;4B9w+3ooah(EXs3d($F=l*Co4b2MK z?uE8c!5HPV>}|!5AMI_8(vp)=Qb21H9M~rJ=3JRKZ@=+g_##I@b{<%0Vm*RA{Oc4& zCJa-3@)cQE+h8D7wxSv$^9js@LCz`YbfB~|Lz1j*kd_|S!=z_!0qR*E`I1*-RPc{Z z+{BZ{-&P;r9UAZweS}VwCxzzPvhRIE38m@0zn3`WIbIw{v{ewOt#J0jl1yZW`0VgH zd~Px*ouz&H-)NfJTB6L+8SviheVu9Bft~k|;9u{OETOppl|<@08i~P%#3?Dr=K2KZh4yRW zJ-?xgEZTrBKKIEKL?@}V7@o3ZOB_-jzT8y&B+Q$}V;0t|(BW6_er&A5#;dqfkU%iZ zdXOCnQQ%K6pNHEPK&Lf8<8%t$-d3NZ%Rc4VdSJ&Dtoc3UrSBTakJ9n(ckoAqUk~p z`Ng}A=Gw~T(YZrYd8L&3rNq7X`?@S3%wlTl#(_ zdWM>N;M&)G9g&OSy(psZViwUTfe#}8lZ_61OKKc&T! ziPh$m(a2N7HV;10*-psb{>8-7b_kS}E>m=aeNHdYkSZ(~=c+ZL$K6Ekz(;G}L!#Bd zSm>sZ%=Id!n>{6Ivni6@tKt>_rq7G`N72}N1n-!^CFx`AiG1irjKU6}2&|DR^DapQ}Y2r6fD#?yv@BFcIlucqt%R$v;kp__pQ`in`y5=W= z2fHJ4qlqEA65|wh0dIjfovP~k-C?`yLa3(3%jx)BKsD_isQ-K z=XJlxQbE{`_q@{jhD5HX=8kV_8w66!?b=@=PiL%6&gONqZp)!1Gy@S`yZO_}V* zo-3zWQa)(0pt)y|Ys>5l7h?X@H`k&rQ!HaC?GHl6QH=C6rQ zFwMg6L3E7B4RsF=qbvQX;+$jNqdX_L3G?;y>cIaiBhOg;>wS4h-jV$ zP8f`8{ZjD(4pQQrFMCkdSqmVI83u1e@53@pM*B9Pas``=izjdkgZHff9%^Zb@G=(_ zVWES2dUCABg-l%TbJV7}P;KBAd3N>q23)~Yfu@AI@*3nIPT2XC2e(X%$&?r$DX^%TqVB_N4fCejaHOt`)b3NtHHxp8@ znSN@b_z_u9GEqk*|6!@7*7J1nbkAJda!1R|jA1q~LyVDxmFXYKv^i^A|5TJ1WcE$k z$Hh@8dd{0e%iYrm$2U*V7({;gjaU3PFMv2&@4)=VwYDNYf2jjH1Jhmcn)hLPUtf3D zTDNCAWKg$fmD3z#N4gEkm#xji(okYusUljxlivQ8)7QK%qmTo0;vj2E9cg<1iZT-m|B|u7uAStMsd$Oo)8$EzP@IO3Ov9P= zspP3RiHUXJybZe;I(7``zdX$i6 z<>?V~9?M!dfxv8RZf26>l|b=o*HG*2_daDBUDoW&HKt5*IDkw$=)pX-Jk}mcqCJXw z5P!>}2hl6&vk9SgeUkM-o_hpvKBtcylD4>Rbjia3{u1={=pmh9jCjXr4e_2r7volp zxw&~$z3;I(3qt*cUlUzBcOR>GdS<(WY^5IAW>Lg7;Y;J@o1 zGT~x0UJ&suzf1?>QQ%hwh$1yK%quP>qA?)Ef8+*M^0qX8nHg1vwqK>pC&w=lR}a4x z8R6JR#@z#*nWfD;f>NQcze2^aJH^vNO zoPAHqdAKqS{KeaxhW}Jjyx~B{v@fF<`FNUp;@JafQWm>=$HD~oX8m>}@>YIfZmg$o zL)J5pu|K}|iDaHmbd9)RL+aMA9680@0fym{ZnJyI#t>d|qEn(^blenAe-H@&nBzuV z=&GgZY(_U@>k0tS$rdVQEb5MKAGe%N$}cf`c?9=GQR|*CmCuyw3Mo@($q&639E)eB z0#-qCTBZX~`~FLnqaEuZ`?y~{ChGUMrsS#LXogVUZ9>xHd&4VXJ`qJZ?wg94h`H+Y z@uzmma=dc6X4dbQdF{_^#08K;G)Giw0zXN|(hE8QL|Vd6h1EZD`zro@zHywET|l=1 zwe%1}5)#Ime3djNoMFy4%7B!z(rD%X5@1D(w!&eM&%Va5x^n!Ib1_> zqPKZ)=ao6&LEBz3eOa)HCsLT{QRFGF^(!{Vy^!VkoHUqwD^2YbIbZ3QM2mW!WT3V^ z*(`%EC}K@qn}30HA2?)Lziin!1r@9^UIL{pyya&^rWL@pwIcTcbg36{luGL>OAi}; z?xJ|#!GfN*$9)~|i2r!GfaCNd*X}Q|U66X%N?%t$<0+A3i$`$=f3p=P0OHHn;T-Il z5Z2hWFu1fwCTlipCrdj^_jb@Pj5slrQ-zZcaAF%`yJ1P-nps%78HexpSsdx`s~BlL z_8@B?>^8_=G;e%r-B5rNLpR2JjA%TH-5tBC+^af$ZtBs!!^HQoY5>47O|(UIz24`1 zQ~0UO@jMXRUi2E@`em3}m`Rv6{MFcR+}q3vUH3=KD04yw?i!T|9Ba&qT=>HZQsc^- zEhBM?8U+TWh{nC7&L?XCa`4^%{w@?h6q0tKqgLi%2_9-o_Pc@j%j4ey6o8->Hv1xU zk<-OO6>k(_^GVoPabEg+l{>-&Nz~j&#f8WjQ4qN_4L%RC1#p3~0T{H{pfC}o>6K`V zAYNZDmLrx^@&?7&5%Gz>c4z2R;#!QD9`5j%_(VS~cA}g^{|RfWAUGN&-bLMJQeHBR zh1806AD3?J{W?W*upeAwVXPgBd&_O2gG+plTM_{OQWq(fN&JvLtN1~_*^*&D|IP*@ zh#l7JTGfJUBUay-Wi?Nl*yS2S32Sfq|ET&3sI0c;Z%QRZI+X5iB&9{V8>B(HlhoM=+%Vzj00Z?kGYcO$Q(yut}sQ$Kh3z$k<))+0-8M(i_V z2k<_Zp6$?De*xlX4=p4G1ew}&4Q^L|O};Yf9mXV@bmHg&>X}vc=s<^fCw?DBeA=sv zjt*gmUSSc!b_%!kwer#S(3#KycBAX1Gq=DKhY8}`GvlYVp5cPT?U{b8Ec;YX4&y$(`Rn)e z`i;7~(52%O!Idq*fsd!2OGHz*z+?MFL}NQPy4jp=juE^L1V!s5g=MkJ;-D)2m{tzDB@E78q zj@x;SyUwR2aa)&9wPt@7=pN#0O?1C|)H`(y*k|^G^(PvI2sjT{qi(k5yjE}I-y`5T z;m|8TtMS4SpI8XEyg}%2VjQAf?337ctff$j9QLIjvnzISrV^UuZi%E=rzDx-x)Pd| z^f^P(U5}0$_%;wgLO-$Gpj7i(q7JLYXzoXImI6WRmfJsw2=YF4KuovA>A#S4kge!1 zcw?WzrtjE_hhpE%a;|ctvRoN?N?T>)>5pI+xcZ63A`AVU_PW4HKS!JWm>jp?N$I61 z{Qeh2{_Vmqtpq2al8UkW{;H?OzjEVh`$Tk$%VE)L%hg*bTJXwz>P_^9 zemQGj_P2MQt!2W*>of#{(yZ^bg|r+bmNS~uv) z7`^sh2dKk(?psucCP98QLTQk$QJ$ex1;QEStnQ4h9eVo|Oa$QBjRDZbmoH&|n zPvoa9`f0}U(R2k9yTA=owvEfA?Yna`sKlvE`Tj|H#7Hij$C4)i<{*dF- zei^p@RxAW}XSa!v>p#=RXooYu^ZJ$(lro+|@umXzLzB-c{;q`J$-1!t0d0yFOYQS% zpuoLHM$sp3w~)kc!fttMmfV;l20O%_972oM=f+9YSICI*qfp~pb(+JF)UC^a?z{(+QC{xXE8Ad~C9m2=xtux=U|`J8 zS@XVRU7pA@&zt^@Ehu;tH1@|8PTH^ka>J7kIf&*F3qc!Q(5tUGG3!l&Y43$$K^%J8 zotVSV?kAwo#}l{$>|?D(PfO$i_|fZLCuH-Cj|t2HE9ql6bh*iyDvvK4ZRJUFN{OSN zcoK1*J4j1!eGOoYBQ|#5(%J{U97OkoYm$rC__JMqz-6iMC#(WHH{gzB#jD)F zowTwGaD%zOo;SD$Hc|Lvpu>!G^+PSAqu0KA29Tr=7H%ppriw9LrIOq}C+bl%L$6Wd zqG>%q&I}YSXKl)q6^WIqkRdt_+P%q&h8L|Q<4Xdx-9uavcE$_thkI~(jK-lhX{dWPs{nsV%}#*s8P z9vi=%oBj9vijO;)1tuaGbl(`Hk11cse#l?tLui z7c8mDlpmPM570?C&CxdpzyZ6-w327J_@is%W-=L;UJ}759wsyF2QQ@2FpfL8GC7U9 z)$HR*{p3^ZnzXW3uhVU1o)3JYt*N~i27Y7ov_)=JGy;{_dD!i1W6GPA^6~@Ad<71Q z_#C=h?3+#b-L;k7^GdQRgdgZ}1cn#`{LbFbBI;)kaw&PDkq8o=5}sJFcm|Ryl+D=Y zn}K>`sV8~K88q%PMVz7fWa%|0&=+W2U#;J;_32@<#-#7H-=ogu3_P|r= zClu9q`jf!gb!@oo`~J2qz7ZkGOqWF1h*ke(m?4{d!bf3jtYrdn60cJw`#YA*ihe3k zhi1eJ;Ei_to?CfI=!dz=)yLQPhs;%5X*B({mk#NAI_~u$APc0+H%pyf%9cJ2qbH5Hxy<38iJTkfB~opRZD{R+ZsO_iMy9E5-OVo+&aMUST- z<*b5vR%|Xg!!J76gg75S%p8<+V$bG>+%I~@X)--A`z4$ileTbrF+qw*pO_9g`YOWs zD`-)|`zjY=nD=U?OFsMklQYdTr^3j72#8FM=wySil_$rWT$A@Pd)<7SVf$wsO=`}cwO-0ZM0S}&-W;%j4jfPP$Y5Z>mAJkH z*rW~r#P=>#cdqp3&s32ss# zlHh)`_4(7E8cbiv9E~mlZO)va(6rq_xoz4g zq0D7o2(7DLmHx4=VC{jOfdt-j6kJBuffm(_T}$b{cy%*M{{v1~)KJom&VEKbUj3sBpWnE(Jr=<|x{y7tTJad}NkgQ29q-Ut2(34ub9vudVnh8FE}jc)(k)ELT9sxW?c*MKXAmX`<0 zTqX)m2{hMW?3HpUoIff16BPVm5ZL2j+Icv-6ZAx2;NWGKf%}9rlurOo3+;8xvTC5J zOS(*iWvsUigF-j4>oV+E5jJKfX0Mln{)*a8!uB)InNO?7Q9 zj(|8j@}0cpSmNwulgJ;cT&EH*{dw;cpO zUf-%z>v<_UzA7wkE{fKEA$#WUxkwhn2scf{1BbZkXROeN?kgOO71N5Wo`;y|J$kIL z7Z>%YSlRq}ezVcYD`~2k5jlSMq;KOME>dUyd?H%n-Zi*Ii9Vys3hs6O$NsCOOKSSD zI^xbaM-$kOk=7fFqrW2-mh|0Hcy(t zr40+d1zQyK#gwt-;czuecYYXrccU^a$;@vZ+j3U7la8gp(B5GRU;Z&^%R{Kq4elUs`m+<@}TVDf>4HgiNU>=UL&ohwV-Is~@L$(K{wf4SL^EM~cl?2+JS z|G~Lb|DhwJN2gs%N6||I_B~k&#xN~;Rl1xM#*dLYtNe~?`SdU#PM+^4r<`!?NHb|{ z)_D9=@yG;DoE#1hOBoqsi?D!gCpG!@x~kRE6DnVvrilQQahA)ho~qu{+?KF+45B5p zP2}ed_QO{YA^}!WNP;}?8n#OATO~_5HYMV(@Ngy~r0|HO5gZ2STW|=V-$?|{Qeg~D zfm30$$HSGjcIhHs2)iW|4TMi9G_rn*nT!>PWxEZr%J z`n3L=K8L}f-BvuIMgSbIl3$GWJtpmM1EBn9$W7zR#?A||$-$D*3`>BD~?eu=371Afk5?f4XQVgToe3I~1s zNf>;MQ206U-*3@3QT+VAhO-jm?^h%L=W`?QIUN^i9lW0`weZsaI{GRLKJWb!U7V#+|Y~WFAMZuaQnQx|+Sk{PT33Wry8{A#P*u&+L zEp8$rO*ksvFV?ER7T@K`3>;fNo_wwyBAkc?IOP&a_?!&J4}wsXx~{Ejoe;@5KXxp( zW`kDw#18?hu!msdwL^((Xs2`{<+S_FIxP|`A}1E&%a)_RbA|Oo9Z@J{gA8`zdbI`r zJ}@_A5#ss5kANwfMXGA3gY7*Symnw&F)IGf)VsPaeQg$`;J=>^0t+bzR>Ha+{#|A; z=)M_!8vV9^QbMSrvJr!;Y?HLOhsZ7?D3S#6G)P#laJuLiQpG0zL|aKOXeMjs9aSGc zr`C5!cE^n?hcRwV%o@HBIzA#CnU|jXh@W|bf(?1ZbzpQaSY&D}u*jxXFBZ8OG;PEv z=H@O|I;_o-o39KE3mWpZ9(~VO(KM5Zn}qzi^s>~1bH$UHN%Fj$z?bim0`Q| zE8ApS>_t^hg*Hma@oKrS6e4Ae@N^#s3ODtz(fwyp{BtxjZ9f=<(a)_ZXD21in-nNX z<&fSUa{>*=kCC*~9bpUGIC?M6pH9U|k#;kDtDGN!nEw92#mC;+dm^D#Xp-0Y*vF_s z24v*(es!WxtyH#vw`ZGXU1Jx{Y zDgDkEifzOe$g2#i`itKhP{pqE=IG$bImNbqN{d~;WdCvT(-Q778?(4)q4y2WzLgG+ zf)k!%P>?t-L*_;%KZ#C>b%hh;_%$PLm6ObN$ve4j|M~)hFU_pa-0B5N-?$-C2Kt)a z)#J(c*QcR}tZ@3XMqy!hLW!9+tk&H-a-uUamD?mL{3fVxN?U6LT_17Jcr`qlmFY}9 zr79@s?4?miPftH5+@ow{f_UzcHxhr&TjY59gK>Aw#lQ=tkCUF$cia~U+DI_ue5Gf1iw2d zR20gVDM;pv8&`Qw5NDw?ytdU+w^lf!7 zUn(<(aN*LhxfSmCZ1CC{t`+iotP|p@&lB9G)yHoG9gIF2QR%^{xnVITYS^fM%gzfE z90plYw91a+W)VbjA(E~i!Pu>|^=w3cR>&iw(M>N(Bg-(A&);|G zznl~85P~QskdQH-eyPsh|I$2BysaDPdRyrp&PAz-Q7byTED;&r-m!2wNuMf*NEs;% z$o_ut>C5m7yx>x83)vO7#iC?EJHR;+=CqFZYk!48 zAapAutbe^8B3;Vq60dei?yCAL!<+L0-6tZdb|m(;w9>v&JnWcJwPM^zOpwd&x9mx9 zf30R{OJ>X9jY!qLwCW@5#$Vb zDI&1>tX78?U9Lxdwx}>9(X<}6MoB7jF{;lok3eOa9_V`WtTL3Udv3B*VisRN29@Qr zHBP;bmSJ6QyPkIyxEofEba(A?q=cSfh{#Ip*rl537A5}ZuJh-QPgpi@N3yvp4Oj?% zhcB<>u=g>QauaY)MJAB9>rIG;i>s%sO?FK*=f5%6Yxr^4%R7;eQW!j2xJCWF?kQ!K zVw`wsgGJd|kn}ve0}^X;8}+8PK2ikz{G9arH^~~!KN!c=5qEST&9ev5SJ`*wfm~3w zG{J%mH4&GXWGSvvYbMqHUN~u~&aIis>-_6Y6`athX2W=iWrmxW5F5dkL}G~7Cd#@3 z6SyD*Sz1h8opU<)4fV|D9_+dN3v-&3Zafl0v;W#A~86}-XsT-8OPI2o+ZWH-uAE|CL0=-X9%BO%-WiB#oaP38R(5{7J5Uvq^TIe;f} zca-s2=G{z6{v$}kFQUGq_qQlPEEg6&K%~j)XVv3qnN%MvbLKXbQrwCTd0pLWy{Myay2Wtg?}W>s zZLuzq($pK&T$gH`ZJ2pA@-B44g^6oEng{LAm!W3F{$kC&*M<&SKj_0kW|qnIh4COb z!*hulCg86DmP~XN5>@xrmib)6Z^^Owjib(xnYtXY8^@T)BZ_h3us^j-6xWwNi05Zx zdd)Bk3&D7@5W~ywbrwi8@&bMF*k9Ea5B+s@la+!zF4xX0n8-7$fM~FB9Kj|axb%-? z;+uxh^Nr)xhFtFv{gU_)U1=j7b>zh}Nu78hn2=_Uv> zb;^RNp300nFUB!`9(#}ydDHWXZA4tW6Rx|Ljp2~u)M)dPk^9NKsXXJ04>DhEG_~xm z9t+D9OCeh6j8VYBJU{>npPz3*>nt($R@aJ96w>Jt*wwZv!82~_#o*N}Y zMhZbkuW$4%EO#VEx`fq;dVmY;WWH#4yg<>dE76&4-2T{QH1SGbmHBH`Lrr9U#qj5| z-V0w1%gWh&DoDek5ZaqYvy=_uqQm+m>u>%m-^9r=M&CS^NN;SRYcm<+RZ>i|s?T%6 zrPr}gXIm2Txd}gRtLk^GAhz5-+?@onh&Q27te~Oisgpy57`(WzGgL|X(a*Fxp*Z$C zu!1};j9Dg^ZnWff8|O@Y2jwMFJu%A5P|47r{;2OBc~jQdmv$mgeHK?w{oW?4!W*Wc zS>l?k^;0=Kftiha17e*`LUc?q(Hs+{*3VI#W>wM4OYOI2D}6#y3E&C-e0KU`IuvhR zGckyX3gnin->$FbD`YL;ApAtC`KQEXN)Jc78G}P{Dpm0<;92aN*0zH|f(m6*2q$nR@Fq)hR=-Z!xgWlw!}f zaZn+P(HGlrqKxVTr4TiOpmJvB`0^0TIuw-5(0u9B4NDB9Js*}xDZ-t`5$p`Tl&lvB ze3V%qq+330QHM=D53Hb#c{rNTVF#2Z(=?Ds#N()NabOdK^}ZivQ)0empvv{aC>1gY z+m)1*VJ+%!=&X^~EQ+#aj)O@8In${5yftUuoNADl`r3P&Xjxc^&5{#Egtl{L+mKs3 zO{%vEs?4+KRb5xqDgsDOrORYGX9O=wopl4Gri)6q6Hsl{o|GPw`ju1Orv%wX>fkDn zYe?OWuw51l^;S}lP$hPX$`m{jytF;?p@21P{PTjj>PHV|9}?N}yrA#yn>&*=_wtKZP{wm4k0+Z>dY{0NX;zdcr zKq8E+BHxo=zQB{ik+K6;nME7!Vbu!yG| zuqgph8`dv^+Lv{3^H<)7f9+vXZ@3vfOvAK2Gnm_u|Fd)LfkFEWo&~+f1n%^&F$}(T z1!%)+_Uq?RD;nB>auQ622&o8o6$vi%->2ZkQ_zk4!BL;d!4|qG^N#CN4aQRd*vX#q(I9<%(Nnd|>Yo&X1EU%Z}f1 zzjwjI=iaO-wlYGvigmD3eoXgatt5&40{-xfiqBy?d0hPT*n@c3R_@p~eHwohAj5nO zA-c~qww@Ajk(zGZU7zDyi-_Bk(C|e2qx)^D-fd@rds<9kakY7GxR#hN1d9tDUz!1| zWc3T?G+XiE0dns$HnbPga$%e4 zVc%QLGON~Hilx9i3BeaA8v4V&(7LOzF)QFAXs~oLG_$M|EqlOmyYm^Qz0R2VwwXERIwkGWG{?21Up{y$8z-OFOp_#j1CHI*vr7zfISadchmIJzxMDTlZ;P&I$ z?5d=hw32@9NI(+lEF-~?z^xIQr7|`gIy&rwaEU2GI79(kEe#j;hkm=*t^EjY_{Ky$ z6~`&6_8HhzfNr37*|>ds^0!%hd+=VFZqp=W#(AgC>$!llj82t%B;7WlOCC1uM-+5P zDzKQUFHk*!Sq~)%YszodGspzB1JjWn3oSNPd#*YV6Swn6bYPs0(lFo}su#~rGhkjq zj~n5va&WVujvY?InnUXISJk~-)`d~uUp)dK#{d#(1h<*!v%ln@Wd%nFHjDiem@-93 zf;>PB|KY&Xc$juqEH=mkIsScI309vc{7GgRK(J=s_}=C7`K41I7>Ll*GqdLz=pXFe zYUstNs?$wRd0ZbuVJ=+&?zjwueEHj^pEsHP>{PS$)PlRI%!`%*9u>><0(L)+Sz9kz z(**5}ud<36E{GV&?F7sw~gRXN>#FQUoy3OX!*|jX_dAJ3C zl^srmcqj`NcJqV7h8J+dhBXfy;FZU)jesN2T`v|TY-XR2S#OQzaT#|#O#&`x6SEAr z{M*ZDG@GvMf;Daq;m6?9U_e=@&j2j=us`q;%XxTuH3j#VC330G@4~S_c0z-|)$-DA z>C}?NPZTb9ZP2Ah5k_mKDj5(e39+qcf5nfl!t#0TqD=_#`;Sm89s&w@rt&!zEx1et z+{H%SpI3W!tM`C42M8b|G9@CV9}G2g%T9w^kMkII_m>vT@ZQ>I%edUFM?);vw&mr{ zsyz#WdB7|9?VsZw=zbnSG;t?EN5s5Pyj@3IYLE-y985@$k%XQQx14){nmB2ZOO}lS zCx<1rd!Rr6!8zO8ob>)H&tWq?CD#a?;1C_}!ruE=j5V^?BKT&rA4f@mJZnP`l}Fq` zYtNcr@FHVvTOu*!)%z-*YBV{lD&a4pJm|NP>Di~}y1iFtb6)*wgSq9qfWVU+IXUmw zH9f~o+3MKDJ3hqH7j|Zs*<|Zl)9k;V7^We8`P?ID0NBEu3>_kRAK>GE|HL2yizeL4 zZ2HL#adq+zNsYqfeaAbE`@VHm1)4Tex{cO6jkgBUM;XTS#n^Uky+_~Y#y%K0pK)+m zb*$c*E#J?C>=3`t^qYueD4oXpX$1~PR zz~j4A=#}4af+Tdj#`tvf?!Eu`XKg@<-(Awcdq4(4*3g5-Xq^oC5QWhtKge)AN6fLZa`zQzDy(`HrcueV3qGy>M#R)WP$L$5%b(>`Kqf^ z$_l;%`YwBdu#;oGnnaRzuEEEk4<6JUDt=N|ZfVHlhp<2#Ny25^uVqfIza3*`p}3YP zfKK4_iJz&{L8^wniD|%%-SYdUJ9BnJ8`21@U`#P|-_~`6Q3jfBh7Zqn9%I(Fp*%>6 z)6bxn3k)+3aX9H25@+X& zG*&JlgSUz)bB4*P{jc#0RtlG~5J*``5k#9=ZQ1WTJcYFjl%RZ*EJnJGVq8u)L;9n*}BI_h5iS*q~a^HjE6!kluan3gyWjM!q=6Sqm!sxPKljVVG0DpzzXp(Od zal`auJ^X?L{8iq6Tk;iti~*qSVS`Z|up%#!mT?|_%6$SvlzRl0-op_F743eiR55Jc zWDy+iXtxmm^SM6IYOY128~&^7#F&CZM2l4{Dc`=6{8{-y#^%c@#m-KSEB-R~;M)x!@@cDieUf|8G*EK+?Z_gTnH^H=)fw z2GZZv_lfU1^gWX&u1*SRD2>1(f{pQI12#gQuyZqKAitMLczyin%+Q8?&AR* z_F*mO<;mbS(p@qHt~S4Lfdo}(MCTsJf`;VekZ=4V3n4V}x$M)IJz%B~*ZZx|=q;DZ zHIU(bWicgmc68u#|NZtijgZCGm#8I=gC@wyApd!TOUum~iyR#>d^h2Thy@U{Gnfg2 zPi8fX8}=;ng3#d4v>-Ra4hp~Twd_f z!~^6w?SYIb$VP_8Amw~n-3qb)HzAdI+HhPnR7 z#HfSrXY22K5ZlZoM{3`LQm~pjV+I5di>Vyd3VeUY;MdgKrTg1VDbo8@lKXGPWevTQ zgf#ML<{&0nGkhqHTCP&)c1z*U_odrGq>W`?^0cC2DqA#f4G90i0?5aT3a+4;z`7thrVJISgVbmt*=t61 zyPt)~Dm^77#k$S^QNG}!_x0W%kYPO&h=iq$XEBo)-Ex0>kj?_q?Y&bs_dvF$4K$0L zuH6&lOQl{-C_AhMd#WejgJ~>$uG*68wzRZ-`$H3t3>sNw%m-4+yVsTj&>&%9$TYJ< zyc>iX6;)hdjr3_wCk9FG4xeb~&o`f>AMh+qJUQ!pK67zAQSLoKG^XhVXvFypWQ6m( zsCp@7j&om@J1@ZMk;cFP}@*=%V&gqgw)q(nsxFf)kt0ZMXQY6MG=RHI2h8s_E`($N6+bf{K zoZd>cpKl1=*Y7}+rVC5BEI^LDy0WqnO`5&`*OF&~pge>#pwzia(?08w9C39GjSU{! zqWNaI38hqb76t|mUB%s+DZM{4W|{R@4d0Z;wVHhZpXE2Fd0%Z=c2Q;x@vJ_*{vD?v zdmCpy`6%X!!oyGZOiu7_`H7G{o_rZQ3;HGn5F{k9%0%ES;e`9j%OO8f4{|C7L6-e4 zb6jtsHFab!Fnmh0v)k^jm+l*EEo^t9eQu1oH`EShr~GDTXA@~xL5jU$WMm|>GQC5d z`9Tn#o_Sci;LTx&{J4~fl(o!jnYy3BfoCh7;d?^&m(k8P3k^=rQ@Sqow3P_+H)N#jExPWM`8?wesis`g03{BX9|UMoCWwT8ae zg!r(N-(hXb?Lep)lB#&e&d$z4r?02RxQ>dVw2Vx8vOUl4RaUwTOVc=|dd&i#h2Ckp z%c2F)E1SaktmMzpd@jVeyEU6F7#;mcD@q`9wU;~k_p_8AqhB3MnyHg(H-C)Vw#ul= znLpN5S_0JwW^r|_4KWWI@ZG?A>n=Hx<)EZ17HXCCWH57Q%{agjRx;U2|Q#2!qH`XpxWuRQ`R5hL|z80i^s$d`a z!auV==#B0)l7DKYgYj<9N=IsBCG&RI>`y<(P~BH_5J8}iAtN5*B$oO*&zAWbkW{G{ z^Uq-GdZK%AxFMgpT_3YQYKmNxqcu!Avs2CzQbsBxs-d@bo~s1R$ECbom=PkE;8G3l zp*kl@Efqo#*FscWQc|5Klf>6n#>erl-`>j`@MX=;k9~C=8`FmRatftgV$yzFW zSy?W5h}V4h==!h&jp<{_w&ts^{MV&6rzScp?+enM-;YUBJ`QLAL3**_hzFo-itSx_ zuSHpnZQ?Z$(6a3s7={CA>gnOk4LzI-Waw=vv)LAyVLx_64R@z2=qIU(9EU~nH@_`9 z3CB7j8OiMp$73SdhdPMcJG}*moC+Rtm|hc2FYZ8m$I*R zn2pj6hl*}9!xz|icymYHB;~p)nU2O;>tx@b>X8mh0GTcbmkTHW#?J(ESYswd#eJu= zwrioEsdnDz%2NA;ZM7`E{Sj4HHD(}rQi@M;IKlz~bw#er0NH-8m$(FulRBsFTsN^t zNvbj7xRMtVvpDsV>uMw^|Gvx2Zm;)z@QpvF7bv2WtP?5fuZstR_Uf?posq5zBBz&d zjv_aSrKNwOs)|0PJJ31=YEyze#~MG#@eiLqZb3TNXMBmKiHE37B)T$7G<|UlK!DT1(Y+o2~zj`O!ZF&GIxp3=V{458BCAxHZHjNa!rM`-hCi0b? z_Fx4%MB6*5etz|!4U>`na@nunXdr0Ari!S=Nl?R9V)j@!08jj$X0b;SvufnxCMIPxG&TLCATG1@zzveiqPDQcXU*RcB|d{r-uxn0&&SmLi-QXvpv zVi{S~s#c8{Uz+5uJR5JerX??RUin&ld<2=%(n9jmMc8a3m*xw3*_2a*_M%`h0CMoTZ$&**L>o)FVtsYR~x)lR(lTez)BcP@V zmm`_aFf3^1<=QONtKh;)v$Si~<<4 z++!9xGOiYu;@2U9xgWpRK`jMR8=(D;Id9s(5lp z(J+kR)%P|1lc1uH9j2MKw;UaAc=9Ceq!_7VBS$Tj!72V$XE0v&L7McjtL` zlIgOcG;C*erlO@~0c!im$wcMvL=X$i?iG7lT{BlrgeNMir1oO&WMzDQe5?ALDDEC= zdTiw@CunT}=GBUF4hXyKqsw}nh(%MD#flI+-)eVs?U!i5+0$Xn(0!;pK3!}uY87`g zDsQ&XL6aL%x&ER3$8m(L8M8r}p5og5MaGS?hx@1OD{6h!dm!E+plr&_Apb$h3MJwx z0Z^V>vh&HHTq8h}MdQ5y(#xH%_iE2+E#xb=|1@@!?Xrv2OLHW zkVc($CTD;`VK`?~o4#YNtDD|**p31*A0dzPwYIdZ3=Vz_4BvBEJe-=EnzFRydKV&< z(+i*rrwZJjj!jNao6~=JHM3vFBz}DMgZq-2ZMM1D%49X%+5)*7s$)6nd7Vu}O7xE> zL64VwE{zgR!?35dwNx#tZB}cBYatcy2A8cY> z7zB)8xHNn-F(h`)m-!ZqAnD00)AKm=XZ~wv(tany9KlU8PRxNTbukQ+N}p|B2WSY}e=cw# zdOfRt3Tk<=aEa^UG^y)d=OSKAHUD|ZzZ$_IyVjZG^?YxKTo~i6?rZZ|NjbU5@Mqy6 zQQ==9RKIJM;&K~A+;klg1bY&57GI!6h6jGT`ic?)Qm%Tix76={Yba)(J5t0*FST?I zF@FzoxJiQsB!V5b5GMWTEYGYV&tT{#6t)0bOd-}aOOPFdj6OVjJwGm2_VIOO=R;vIahuO|_Rm9&7rfofA(Sh_k`ehLz zSv#m@fY9yOV&jaBWX&g+M~w`k<>u90s~|P97U*|#*iGucwMR@#TXPWW^I?io&;P*! zQhyjnv!hF50}{@Wghsjg3L|6oa3yitU6fP}RsySc%IlWp2**=b$Yz#vjBUWo#tTcc zRgzp;1rb_*G`ZASO+$q|-jPw#sQ6<|&PE${=(48EL8Z{Ue*CywP&RRivNyo|0vISp zMkT!cVWTc);j8G9lwfM)7DfP`mh^zz;$>jotDq@?$8-+k+NSOdA$IQ>fK7B5;BEdD zOduQmvl&?H3u(G?&q0<$sAxhgE2s)}EqhXB_kE8GWt$;~4uf{Y4Oru;e@tb#)a;^2 z9GZa42G&ehs;25`)bgVO{ zeE&nldsBC90xbdf*`s%52zNgJI0hyDOv9pzhr%kYv;((`@98N>pe7|iYIbBzO~o$x z%H9L_f3JlOu(_QL^lf_YI?#l6*IkP&l%nuPCwqK#=eXFleO1C~&0|pPCBg0r&|6S0dfU`+wl#RVvJ0 z9yKg^*H>O<*S~J-2iS6W2!NZnPt(@flVQ9b{K8PBARVd{xSbvX00N354rd~mqrg3v z2Z!%3c-iy+;FBv9z<(O8LYAux z|7jDJ)R&bQW|I@?ztPuQz*m=6MiH{~&mf;7z|Qs?0Nds%@!N*S4}*UA30(+ub5lZ_ z{J&8@{Gz1*zCJ5}fdRAd74FXgj+P5QVQS1Q1@uh?xQt88v2g8%+Y7yd)V>Q8=<@L* z{0$oZWK38LZMO0wh#Tfc;m+5M21quyNh#4gfHq1}`sHh;2Qf}vJa`-ZnlTVV-ZSAA z9i+y>7DoP^1b}U+{R&wkI*2h=<6jV^LBowd2}_Cu+Xv*$p|$fYym{*LfF_$qlsZ6U z-oL4L(R#@ z;+vtNU+XyBKJa*o=GNxOTq;*YhH0Z60U)G6*asSbZ8)MCiQ2c6*OHnq0Ntc5u`DbF zh7$-RUol-C1F?L*wR%#)-epws#aOQYkf)zv2a zj$kkM4Am+uMYk=HiGCRwieK>KYakZ7BoZ7?MXYbWimJrM-15zyjjTx+PA~&E@vpzZ z3bW9-K~2&ycf*z`-9Q|hz~EI3%e;~?=U6KpFijpA5!t2%e1F>m%OeL|l$ zNW`ugPW|fRc@{#jI#;5;4WX3iKfk{BceNf7QIF@I=ELfoD1L!CW36mM77-VQw+aTz zhxJiAvef3LhwHVOj-g>TD#P>ygo*bjgif%l3s0ejEtX|^vj>(E-~O5XGm}nU*2(*R z0)59iIa=N>>clkjFDM0?4!NU7YbgB$S5hIdM&Zd5AVRF*WJ%Ohfdj4%#qT$!`9sJQ z#4x`TgiKY4RDmGQ`S;RArQdkE$zu_b9;d;l!D~4@19w|%+ghXt^{S_+^`8r&3B4qE z)mPH9WXD~=bMaQM>f0n`RKTsO4~b%_` z)c2D?%onu94$o8vA(}Iy;W#WD;U$pC9c;TlB6|{HQ;dZ*<|&M0xEIm?m_}Iy zaG2f28xxv*14%piGK9fEI>gw+T}8ZoSi!~;7yqv}{MF-#H&G7TW!7U@_&88%e;+e(C<=2`~8ZoqE{2WP_HnPvPqyfQt@9}@MVw*4cL z{O&p8DklN!Ja7*GBi1CJ`4JRdiIYKNKz11+gDf! z9Xy3MNqLZw4+02X(hG>Hagr~xe`5aQS&D}`!IQIFF#uRqfbhb&#v5ly;U+}52(y(1 zuoDLGSX<$SX;=E7cm1S}fcgk65Vmuy7){)ys-g`aCMWp_E+eQ3E_{s^-$?3K1pge4 zMGdgSIH}@N_2T`v{@SQ@Bx3YFsUgbc3`lUN?n)HBdfT5z-(I|Ex?jU;`*7FEGAC2Sn+0K zGCZ?elZeJqlT^2YCWnB&?jPnonSFyf+cd0Z|!ybN^cehYQv zj|R4;1oLtgTxl)Mys zU$xde!`EyMg*Lcv%Zp_OtHXx#si&a)odxSkEuUt}@ju>5Ua4P3<9k+oXDbYi;8-u@gB(z zHsFEcz=3_LRW{`41(_Njr!2JybQm2r!iPi0mxK!=+!1q}EYbP{YFK;%(_{7BfN2Tv ze0+9BIBZrgICeIZ(ci*^xN0)m$@MQw_zKSgqAVCt%uD%l0hQH%DVseUcr2^B;uimo zH3!iEnwP}~XtjjkJ>P#)s)jNAtg*U?*hta-Eu|M}Qgcpc2qY*2F)>+g%gIY)DTxrQR6h{!g0&K*8Y_69tq2w4hvm*c)gl%`gEN(xT#*|Hb}5*G;$! zLz2QU&0%*7{XYwg44{*OVS{C4KuBu{n}0)spV9)M{~XuPfo_+~7Ig~uzg71$!DzLegwAq6aqJ-k;D2je28RAUr=#LO z32R`S(4lkjO#d$y$^;qq3Md265T&|;AGA9etEVxSQpvuob&j`WCzwJBe zAEtO31yciEm8ba7`D7Ou{`(&A#FGyTweuvnN3i@I%-=RPK|oj?Jgo^-G2Ens?R{{w z3txe4E4arWh5z?^5Cx%S2qY0shb+y1cBlcmLs94;LFB)R91|EP6YccB)G>zm^tBIt zzm}+p{cpt%>s&ZS%C!c(X?Q&vPb0u^%o=H-a_#R78z}9a zl@j(otC$Cf@;VfVviN;s#D>i3KC9UG2Cl9>U@+H05qsvwLs0^Ncf3;ze)`-93Wvx5 z7d02~i(e1AG#dk8+&Z-~R`N&l)kJxNvHtb!)GpMSHa|blWvYGf^aW>66x6GEe{-@2 zYL!{Cz#e3S4(bQUi?=pqBk?u;&v6Tzhflz`>Qt zz+(6c8kGRxDOork+Lj4*9bTce9jH^#V>Oa{*JJ5AqZliGYoEw)o`@{!e~}jtmJO4i z3Niy@OL&i2izDN#dFC?kHYKjy*n|C+k?cqZRByr0BSVu^1| zqywT!h0vnINNjX)m_jWbhPIq?sFcdNZ%IXMg&fK$rzE6NNjVi(ltYTFZQ?7W=8)h0 zj$zU6VU(RzM{?oNxqd49E;;|dpoXSSgm=Qh0rcG?0{F8K zjE!5QI;yKJRP-qqKv+=mptiQQ@`5T*WTOv~ChHZ1#kl^2iiz||sJ#|D=^jSJ0FV{d zsmiR<8qzJmjjtMpM86&Er8_=@CZZEc0*Q)A`#9AJyGh0`6kfFCel-}+>L0*7D>2=I z{VTNfmV4FvVJmO}(ot61Ht#WbL(;=4Sk`<|)DG;ClDSWAIj{_q9i77egfMqkHEoL# zH|ydLhvBVFNmDsq<3kA*Udt>m`Lz>?!~qvQgc<6GeAy7}z{f$1kfD3ksiiv0KD*;B zTIwM2-(M|{Sm|Dx(PlqO-;^GEa?87Vaqt7+WZU&$VtZ2Rk$U&!ua{;g1dJ^3`#)LI zf9n<&Nq##SOfX)UjHRKrP(AOq#*78lf))B7*ZP;2CrGCu79HW=EtaB@K!pG zIfb4T7`v|tJt$q9qoJ^5aEan%--6p?$AP~jySgTt=2GX?#T&?Q84TseFr{2ruIIGn z5+7-|1%tWg`yBEEzxT^GK3p0a45jpTDA#*=w&vQ$Lm_!2?qq9SmBVnTjI{K%UX7~z zgh$&-ziDX?X zkRVsxDc?N};;O99QsiE_ip5=KOB)dv|D%NoQk!_`qZram9cF|ipT{IbS9-8$vCDV( z+fZXx7dJA45`#I0?dUEJ*4H=8ARz!4+y{T^k_oiZ-uUG0F>;RKcL`hFf4wI%_ zEo=Jilh+i~tMt>M%##t>U)GlkzgaX!GKB9U&*SqwR0}H|A3gYf2cODGvQq>-s0RPoH@1u?6BAhvHl>-G@{VZ3U5r{7O7i)YdXva_;0GL?R1 zU4+Nv7>7pvdcVB>BSrD!MhQ5QF8=c{BhuNp_v=dls)B9OeS;opcC(cavxjlZjOhNv4(v(1L z_v5V*vi|=5Ta()d-DnU>(&XvEr;?MHD8c15qSI_QBci+y(p@3)OfC;u~D<8 zN>s+akuR#9408VdP@U9LmUGkQ?xNHYq(<-K@e`_RtQyMaz zZC+u-7>=j*ht! zuwfCun~;s?N|-Eait}_%a_Up>TUpMev&bKCbI&^Vz zL9moVQR7%`z{j9_g&jUVjHHR{d8c0BJ4ssvu$?@FS6MX6;z#TpSIX<5d%%QNLR{i3 ziYQdoRaP!+?C9nMaw`RxEb@^sy-5R{+;)O`%772-%-BZnLNY8`WF~AFIYx41qUSc*_ zIp^-fNc-QGW@A@QMkij=}@Vk1;A+&KHg>dxxZ&*Z2xP3&U&bJf` z-|!U{*Ez3mx5ue@X=P;xRU`T(gzHBr=2Fde?da@`Tt2Vn#O5IUL((%rN(^o-v9EE+ z3ux<%ld%!;aaZ$YYxyolQXxERw?Y|QNu`2*eA15SjXHeYP;5>_&Y_QQ6Px?;DsuUF z61r!}vQ)&pVH#r`T{%cDVg;pM&Pxn>QYhD!U#;<`tE;ChddMSP5^qAjLP5J!shEO;g z)y3SL4cbSYe(y|TPa5c`UQaplUqQ6Wn@gti%euv7jyd)7hnfQb{;}3o%?u|w45jjc zkX%D4UfS~Z>)R6fy@5Pz-MG6&hjvje*^Zv`daoK}(&Ok@z6c1sxfyi;+qz*F`ft*p z&W2{|PG8`uL7driM`MM9-S(+6TxQHu6O{(>@OGL7!xE4TYcSKMhpM>&L`#bLB zo8}yu9!|)Rh|vTp6bHe0T=jf2a_>xFfQ0~9T^~?x)aOVc2|R=EzsPZovLQj(N(8O( zOl}01%z9FYoa~96wXc|gy5@)Fl9hOt(9w{C;X1bS#@YqTWrd6B^iMQ`$d=F8 z-4#l$<+!&{mdFs&ke1Q&#A(6+Pq&<>8|p6A6WYJ%zQ|XaCr7}5@ZuK2?6E;SaGGDS zft$ZBl214L8%%le!bXW_8)PJJ<3z6aB7K^ggF;PB>5Va!P$-lH0!rtg)_*S!wV!_v RU@8h_MIdd<-Ln7O{{adgh$#R7 literal 0 HcmV?d00001 diff --git a/q4-scalability/calculations.md b/q4-scalability/calculations.md new file mode 100644 index 0000000..b927c89 --- /dev/null +++ b/q4-scalability/calculations.md @@ -0,0 +1,20 @@ +Container Calculation + + +### Container Capacity Calculation +To handle 15,000 requests per second with a base container capacity of 500 requests per second and a 30% safety margin: + +1. **Base Containers Needed:** 15,000 / 500 = 30 containers +2. **Safety Buffer (30%):** 30 * 0.30 = 9 containers +3. **Total Required Containers:** 30 + 9 = **39 containers** + +### Cold Start Mitigation Strategy +To prevent dropped requests or high latency when spinning up new containers: +1. **Pre-warming (Provisioned Concurrency):** Maintain a buffer of extra "warm" containers running just above the current traffic demands. +2. **Health & Readiness Probes:** Ensure the load balancer only routes traffic to containers that have passed their readiness checks and are fully booted. +3. **Image Optimization:** Keep Docker images small (e.g., using Alpine Linux) so Ghaymah can pull and extract the image rapidly. + +### Using Ghaymah Block Storage for Stateful Workloads +Because containers are ephemeral, stateful workloads (like databases) lose data if a container crashes. Ghaymah Block Storage solves this: +1. **Provision & Mount:** A persistent block storage volume is provisioned and mounted to a specific directory path inside the container +2. **Persistence:** The application writes data directly to this external volume. If the container is destroyed or rescheduled, the volume easily reattaches to the new container, ensuring zero data loss. \ No newline at end of file diff --git a/q5-mithal-monitor/.ghaymah.json b/q5-mithal-monitor/.ghaymah.json new file mode 100644 index 0000000..598f042 --- /dev/null +++ b/q5-mithal-monitor/.ghaymah.json @@ -0,0 +1,17 @@ +{ + "id": "159ccedb-4f26-447c-99e7-bcad1de22120", + "name": "q5-mithal-monitor", + "projectId": "27aacb50-4d56-474c-baae-b52a853b4d57", + "ports": [ + { + "expose": true, + "number": 80 + } + ], + "publicAccess": { + "enabled": true, + "domain": "auto" + }, + "resourceTier": "t1", + "dockerFileName": "Dockerfile" +} diff --git a/q5-mithal-monitor/.github/workflows/ci.yml b/q5-mithal-monitor/.github/workflows/ci.yml new file mode 100644 index 0000000..5825d74 --- /dev/null +++ b/q5-mithal-monitor/.github/workflows/ci.yml @@ -0,0 +1,34 @@ + +name: Ghaymah CI/CD Pipeline + +on: + push: + branches: [ "master" ] + + + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + deploy-production: + name: Deploy to Production + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install Ghaymah CLI + run: curl -sSL https://cli.ghaymah.systems/install.sh | bash + + - name: Login to Ghaymah + run: $HOME/ghaymah/bin/gy auth login --email "${{ secrets.GHAYMAH_EMAIL }}" --password "${{ secrets.GHAYMAH_PW }}" --debug + + - name: Deploy to Ghaymah (Production) + run: $HOME/ghaymah/bin/gy resource app launch --debug + diff --git a/q5-mithal-monitor/Dockerfile b/q5-mithal-monitor/Dockerfile new file mode 100644 index 0000000..9afb9c6 --- /dev/null +++ b/q5-mithal-monitor/Dockerfile @@ -0,0 +1,28 @@ +FROM nginx:alpine + +# Install bash, curl, openssl, coreutils (for date parsing), and cron +RUN apk update && apk add bash curl openssl coreutils dcron + +# Clear the default Nginx welcome page first +RUN rm -rf /usr/share/nginx/html/* + +# Setup workspace +COPY dashboard.html /usr/share/nginx/html/index.html +COPY monitor.sh /usr/local/bin/monitor.sh +RUN chmod +x /usr/local/bin/monitor.sh + +RUN touch /usr/share/nginx/html/data.csv && \ + chown -R nginx:nginx /usr/share/nginx/html && \ + chmod -R 755 /usr/share/nginx/html + +# Add cron job (runs every minute) +RUN echo "* * * * * /usr/local/bin/monitor.sh" | crontab - + +# Custom entrypoint to start cron in background, then nginx in foreground +RUN echo '#!/bin/sh' > /entrypoint.sh && \ + echo 'crond -b -l 8' >> /entrypoint.sh && \ + echo 'nginx -g "daemon off;"' >> /entrypoint.sh && \ + chmod +x /entrypoint.sh + +EXPOSE 80 +CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/q5-mithal-monitor/dashboard.html b/q5-mithal-monitor/dashboard.html new file mode 100644 index 0000000..1c2fe4d --- /dev/null +++ b/q5-mithal-monitor/dashboard.html @@ -0,0 +1,115 @@ + + + + + + Mithal Engine Status + + + + + +

Mithal Engine Monitoring Dashboard

+ +
+
+

Uptime (Last 24h)

+
--%
+
+
+

SSL Certificate

+
-- Days
+
+
+ +
+

Response Time (Last Hour)

+ +
+ +
+

Recent Logs (Last 10 Checks)

+ + + + + + + + + + + +
TimestampStatusLatency (s)DNS (s)Search (s)
+
+ + + + \ No newline at end of file diff --git a/q5-mithal-monitor/monitor.sh b/q5-mithal-monitor/monitor.sh new file mode 100644 index 0000000..a620826 --- /dev/null +++ b/q5-mithal-monitor/monitor.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# monitor.sh + +TARGET="mithal.space" +URL="https://$TARGET" +SEARCH_URL="$URL/?q=test" # Adjust query parameter based on the actual search endpoint +if [ -d "/usr/share/nginx/html" ]; then + DATA_FILE="/usr/share/nginx/html/data.csv" +else + DATA_FILE="./data.csv" +fi + + +# Initialize CSV with headers if it doesn't exist +if [ ! -f "$DATA_FILE" ]; then + echo "timestamp,status,latency,ssl_days,dns_time,search_time" > "$DATA_FILE" +fi + +TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + +# 1. Uptime, Latency, and DNS Resolution +HTTP_RESPONSE=$(curl -o /dev/null -s -w "%{http_code},%{time_total},%{time_namelookup}" "$URL") +STATUS=$(echo "$HTTP_RESPONSE" | cut -d',' -f1) +LATENCY=$(echo "$HTTP_RESPONSE" | cut -d',' -f2) +DNS_TIME=$(echo "$HTTP_RESPONSE" | cut -d',' -f3) + +# 2. Search Response Time +SEARCH_TIME=$(curl -o /dev/null -s -w "%{time_total}" "$SEARCH_URL") + +# 3. SSL Expiration +EXP_DATE=$(echo | openssl s_client -servername "$TARGET" -connect "$TARGET:443" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2) +if [ -n "$EXP_DATE" ]; then + EXP_EPOCH=$(date -d "$EXP_DATE" +%s) + CURRENT_EPOCH=$(date +%s) + SSL_DAYS=$(( (EXP_EPOCH - CURRENT_EPOCH) / 86400 )) +else + SSL_DAYS=0 +fi + +# Append to CSV +echo "$TIMESTAMP,$STATUS,$LATENCY,$SSL_DAYS,$DNS_TIME,$SEARCH_TIME" >> "$DATA_FILE" \ No newline at end of file