## 🚀 Quick Start
### Prerequisites
-- Node.js 20+ and npm
-- Firebase CLI (for deployment)
-- Google Cloud Vision API enabled (for cookie detection)
-- **Node.js 20+**
-- **Firebase CLI**
+- **Node.js 20+**
+- **Firebase CLI**
### Installation
-**Option 1: Fast Track (Mac/Linux)**
```bash
+# 1. Setup Environment
./scripts/setup.sh
-```
-
-**Option 2: Manual Setup**
-```bash
-# Install dependencies
-npm install && cd functions && npm install && cd ..
-# Setup Environment
-cp .env.example .env
-# (Update .env with your Firebase credentials)
-```
-
-### Run
-```bash
+# 2. Run Local Development Server
npm run dev
```
## ✨ Key Features
-- 🤖 **AI-Powered Detection**: Automatically detects individual cookies in tray images using Google Gemini AI.
-- 🗳️ **Interactive Voting**: Real-time voting system with multiple categories.
-- 📊 **Live Results**: Instant tallying and leaderboard updates.
-- 🛡️ **Admin Dashboard**: Comprehensive tools for event management and image tagging.
-- 📱 **Responsive Design**: Seamless experience across desktop and mobile.
+- 🤖 **AI-Powered Detection**: Automatically detects individual cookies in tray images using Google Cloud Vision API.
+- 🗳️ **Interactive Voting**: Real-time voting system with multiple categories.
+- 📊 **Live Results**: Instant tallying and leaderboard updates.
+- 🛡️ **Admin Dashboard**: Comprehensive tools for event management and image tagging.
+- 📱 **Responsive Design**: Seamless experience across desktop and mobile.
@@ -66,36 +42,24 @@ npm run dev
Detailed documentation is available for developers and contributors:
-- **[Product Requirements (PRD)](./docs/PRD.md)**: Feature specs and user stories.
-- **[Architecture & Tech Stack](#tech-stack)**: Overview of the system.
-- **[Gemini AI Setup](./docs/GEMINI_SETUP.md)**: Configuring the vision API.
-- **[Emulator Setup](./docs/EMULATOR_SETUP.md)**: Running Firebase locally.
-- **[Testing Guide](./docs/TESTING_GUIDE.md)**: Strategy for Unit, E2E, and Visual tests.
-- **[Storybook Library](https://tytaniumdev.github.io/CookieVoting/)**: Component documentation.
-- **[Deployment](./.github/DEPLOYMENT_SETUP.md)**: CI/CD configuration.
-
-- **[Storybook Component Library](https://tytaniumdev.github.io/CookieVoting/)** - Browse and interact with all UI components
-- [Product Requirements Document (PRD)](./docs/PRD.md) - Source of truth for functionality
-- [GEMINI_SCRIPT_SETUP.md](./docs/GEMINI_SCRIPT_SETUP.md) - Setup guide for experimental Gemini AI cookie detection script
-- [EMULATOR_SETUP.md](./docs/EMULATOR_SETUP.md) - Local Firebase emulator setup
-- [STORYBOOK_SETUP.md](./docs/STORYBOOK_SETUP.md) - Storybook development guide
-- [.github/DEPLOYMENT_SETUP.md](./.github/DEPLOYMENT_SETUP.md) - Deployment configuration
-
+- **[Product Requirements (PRD)](./docs/PRD.md)**: Feature specs and user stories.
+- **[Gemini AI Setup](./docs/GEMINI_SCRIPT_SETUP.md)**: Configuring the experimental vision script.
+- **[Emulator Setup](./docs/EMULATOR_SETUP.md)**: Running Firebase locally.
+- **[Testing Guide](./docs/TESTING_GUIDE.md)**: Strategy for Unit, E2E, and Visual tests.
+- **[Storybook Library](https://tytaniumdev.github.io/CookieVoting/)**: Component documentation.
+- **[Deployment](./.github/DEPLOYMENT_SETUP.md)**: CI/CD configuration.
## 🛠️ Tech Stack
-- **Frontend**: React 19, TypeScript, Vite, TailwindCSS
-- **Backend**: Firebase (Auth, Firestore, Storage, Functions)
-- **AI Detection**: Google Cloud Vision API
-- **UI Components**: Custom components with Storybook documentation
-- **Testing**: Vitest, Playwright, Storybook
-- **AI**: Google Gemini API
-- **Testing**: Vitest, Playwright
-- **CI/CD**: GitHub Actions
+- **Frontend**: React 19, TypeScript, Vite, TailwindCSS
+- **Backend**: Firebase (Auth, Firestore, Storage, Functions)
+- **AI Detection**: Google Cloud Vision API & Google Gemini (Experimental)
+- **Testing**: Vitest, Playwright, Storybook
+- **CI/CD**: GitHub Actions
## 🤝 Contributing
-Contributions are welcome! Please check out the [Issues](https://github.com/TytaniumDev/CookieVoting/issues) to get started.
+We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) to get started.
## 📄 License
diff --git a/package-lock.json b/package-lock.json
index 0c7d330..5cae152 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -71,7 +71,7 @@
"firebase-tools": "^15.1.0",
"globals": "^16.5.0",
"jsdom": "^27.3.0",
- "playwright": "^1.57.0",
+ "playwright": "^1.58.2",
"postcss": "^8.5.6",
"prettier": "^3.7.4",
"storybook": "^10.1.10",
@@ -3879,6 +3879,53 @@
"node": ">=18"
}
},
+ "node_modules/@playwright/test/node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/@playwright/test/node_modules/playwright": {
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
+ "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.57.0"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/@playwright/test/node_modules/playwright-core": {
+ "version": "1.57.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz",
+ "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@pnpm/config.env-replace": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
@@ -16238,13 +16285,13 @@
}
},
"node_modules/playwright": {
- "version": "1.57.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
- "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz",
+ "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.57.0"
+ "playwright-core": "1.58.2"
},
"bin": {
"playwright": "cli.js"
@@ -16257,9 +16304,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.57.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz",
- "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==",
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz",
+ "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
diff --git a/package.json b/package.json
index 5f9a583..e3acb32 100644
--- a/package.json
+++ b/package.json
@@ -117,7 +117,7 @@
"firebase-tools": "^15.1.0",
"globals": "^16.5.0",
"jsdom": "^27.3.0",
- "playwright": "^1.57.0",
+ "playwright": "^1.58.2",
"postcss": "^8.5.6",
"prettier": "^3.7.4",
"storybook": "^10.1.10",
diff --git a/public/hero.png b/public/hero.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6f8dc5705bc8656c82da35a9d754ba70cc31c4f
GIT binary patch
literal 115408
zcmeFZcUY6n(tlbgV%E)+VN_i%<;>Tqk2^x>w(GBQmtO|7lO|)+GWaO%6siBJ_W2MgpzJ(+i46E8 zH?O-d=e$xX8fTjd3MggsgfmhA!0l{oNE0H5HO;~(<7AIYtHdg&>e`%}{E6?IB*Kc` zr>S?-ISFyn_chXJ`p28g*!0qy<&ars`zrR&DcLN=Ftz0o$^HDOAb+XHo9X**cdKDA zzjIpELK_|uzPs<)*st+49+Wl&9K5J)g!`Tu2^7gCeL@ajLHv(4_g$MCTZ>X~lb_2> ze^f5d-XZ-A0o_jz3ok$DC9Y~ijbIj8<+gXqq%kZP+gaZwl01i<$H7A1(FEQ5K?1hk zAKg6uJ?MCwI4`NaH4nXVT`bmE(vo}E$39k=)Bl&55QPw9L{Y5Ysy$vqj z 9u zVKo_v+cDDWOjkeCV6!IPSi$R-;Z8XjFh<3Yr2d$ofu8q)xNUiZ5!uDn84pzIc&C<} z$H;Mzg{btcXYs xs z2Zkum41ZaiBt0}+)7~0eyKJSu@2&zb{v~qnTmnInT=o67{6_S(i2^tiBxf=EKd~-D ziSD 6~b_&6tw^M9Bm2n9}*Q#LVKy^rE zCGq6yW(Wcjw1*o3@Iq##06@C@Ny5u~H31|drEh1bSf5|actCvU9?e?M&~o1_Y1%!B z@7DL7^~Jw9%YcB;nknX>U9y?#h}7-o@1G>xqMNHp|2a=YzghDn78w3HW3RrxdvXNp z6?O{9TVz)ORDb2K_*S_bAE%fUzw9IqB?3L)A+pPo Fe$E^| z-W;9#M>BPR9DuHq&M-99BxTMQrmCp=COkC{3ID)E7nZIy&1tN4ij`(+$iI;AhN(tH z<|Gy{MDek@SijN;CY1i5+@+y6%BjJII=9X{XCoz} Z&@XR>Eq zs#RvbJ@pm=SPzw^09G`OdGhiXGsXOURYPAg(QLIc*KSWc!!?8Xc9JEOjj*MxohpP3 z+7IGj*DDx;azAFIpYq;FZ}Wh48*+0rNQhh?g_-(QOqECLlyVXkxLBCr2~`$;+^~24 z>&zFk dZ0aKWg|#^ z-7uQeXx=6 zvU|G|`X(YJyJdZ+`_j7hV_*t2zbm2LO!-M{$0SRd+R+#*8e7JpxJvqd1*DQ;x0@OS zxb-9r#<$#;=R7iY8kv^}-MSsiY^EPgV_o*RewKC@>ZaP8b9p%pxnGIC0{Cx4!ccZ^ zCjn7~z2PLWq8pp&Wzb9vdKQ#&m@1*QwU8%D$ KUOsv!z&Y)Sdh)3fkMC zuDY$AKYmmOBlqz+LAM?+vLawIXJwUJn2^eo(hRzP585A`;77dwKCRR3`R7ZOmd|Cn zM6 s*J9D5m{0W1l{Jc&-3>#~2?z@ikWPT*QRnf~4nKq_yGL*ik zA5vV3sds>+PmAdj#!k)@f734yC==C=%KWo+J3hCp2bC^xElYYe^(@g@hUBwP5u5JF zWHKOjl8Cq@s_XY{7l(Q?o8=VGFIq45 @J2Y|02!(59MOocj*(p -y38P0GZ`NE&fkeYu#1o{mS+wQtYk(jNLwzpW2%;UwqHB*W>=?3E|xc<*B8w|GVr zy7GMvh&A)}5N4OdepSs#xeg;!-AwJak4V!!U%s33pUG;kCzXvhbjfttU1&YLo<1Wq zz0Rw(QzHZto+=As0=-A#OThi4M&$N5IdCygjR1F#Mc~cfRX2^CpZD}E?oA1s7dpT0 z@*d^ 3D$sMcye!XMU69{N$LU8rN-szm;AuJ95!o4x z(&IP$!#VjD3{4%~s6C9S*Dj)rc~{40AYRQURl>eJ_R^`M$|2GO@ ;g<&clIr5L bEuIF@ZjkXAXr6 zw}FxSQ2DR=>4gcNtaWi-@WK(b;H<!Nwt>^@dhf_I+}Gs5^U#OxmcJE)_l@At7l| zw3@yFX&ATrixxH@h?7^jY}+uZWRE*fe+Ys)7AIWvs5f4C5V%}!HUH`6q2Vy;F!LWa z$6SWR;<1)b_rVKQ&r48J=y7Un8js!;tw$SlK3eUkW2dZ}s(aHi23ewqCD^XltIb6v z6fYE#4;$z1!EsA9y9)b!mWemr?Qd+5C3Vk{Vh Q&dC00$lAwtk1c1rggO Ym2`Xp|mpyFXc>P#t#->L`8CKCL%y zs_3IGn8m|=qzY;&_q%xq;7=Id!cPmV VkNwu5Hio~#r$+&}G)hz3tmzO5Tx zahd79{*iF_VX+anzGjWIahB>=SK~s!1O=qUdYiT(MB6qctHFP@f5C6j7vIn}gn#;j z 1eB8$>Eb3ihqP|-tt-Fm~GtE)~$H1H3fJw~f- z>F}qm);{Qd#OQXj|LP9Wj+v-~L#N28yV>|KhI`-9-DoFvpvk;lhbq>kNyP2!^Qq2@ z5l;kGoQ#& &rPTXM zt~9rt;Z&(j7~#_Ol7Plnd4&n8+WAre`u1( jw1 z1fJ9)A*}i>RN^kMiwbmeITZRlJVxJ6t#z*^YVk Co?||DCB5EWD0?N?S-YL#a(bgSsfKPwA~maa4f% zZ;EOfJ!F>2lz8o6#AgrSuuamRBiDZuT{X!GKQGg z%jQ(X@~!HA7>A&2`Xfc7Qbx?$tUM4}x-`>AdXBkzZ12iNHLQ{(XMV7iIK<9qI#eDO z6aIX-&-On3NF|?~a08paF5iW-x$E!!k@M>c(t0y>*qcpG;~MWi$J|>5_0WbXa#j&i ztKK(%3rp0c`k9 Skw*8RIW`v~r1ycZ*ppdET{`=uy2)Gc?UJbid!s2fW^a zCaeC^y%I7&*HcumaPRT3;}YAQDojz`MQf)_Dee%${Pxzb%-p!K-wvo{@$dcsR!VaB zmt&S%{`XBmM5eB37`OO$-0dVwfk0-qLb4IXT0( Mf7MO^%*>RY_xJ?=A=^2vP^!D6JyT|6m$yqD3Ecw-wPQl!kI* z*6AuM8+;!-EKJ+G8HCL9-G-r7?Prktn)lCIdT;k9KPB@yy;NvPF?a?~sd%-;p~p(F z%>s!uNho_;;nKK#-ms5e){;KZ9d@goD%{Qn#Ya7TW=g%{C(2`4xY9@KvjVPc`ru;0 zJ9NLs3KzdBPk1HaO2zBmX$>X(NBiT1eEs<#`k$viZ{>53DIa}%l~wmUGGWha`n*Rt zofq?wMiYvr@BI{BPmUAHW%2u+8#p^1+mPSxS@HQ1LD`zNImLfs H2VhHk;z(PN_I<{QDK+L)tgB;N4W6bWbT{7$2RA(aXBhX`Xf(b-<(eHGi1 z4$`U_+;8vepL`MDL+ lpuS2z^E8ywUGdi&y z3Wsxr^SRxne=_MfLXwRiBq0-B=o*rIQ)nB*+&9i{z~-R5K^fq@y+8*$a=x=|XW#uf zOZho|=Ey-VDm|b|Z_(=K`6Nl)^`<5a+d3M3x7%C<31rGsJC>zbaBi|XB{2-4m7t62 zmrul_*8fdB9M<#skSeaP>?g`RXiD84a;3Vp5lFXqYCx7r9>@`>t!$i#+Vqo_+ze&3 z7&>kjh(n*fmtK7@u28oEymxo(kf+kf$EK7*d!kGbfe&Qn0w)M&jJ@=g*I#T>Ro*R_ z6sY_B%4$bs6D4-${Fc0u?p<6CZGBmL#N*{Xs4mjBx~JL&^U*VVp4L9YHDg}tk~G#) zoEP6mq!(xz{@h-JwmWb3LC5M>Q_Dw*t~Fx;eoNjxU%9l=6KA8QpbPzL@gL;`IO6d# zNpv1NQ1t!2+xdl*!e xZ4FpGJ}aI;!WdU;JBDB;GyzKk)GQiT2$^w0cfK z18+qqxhcL%b@5JiNg=7?>qH$$VV4yP;N<`Zr3sftJ|2GZHq6{W&9+_RMO8(~H-)DY zVO56t+dL_6AC|p#HM0gOIxUDLI5uSeFmbcWVRu~^5u;9wVIgbGe33Ri_Oh&k?Abn( zijsOAzx12^#!{ThtvBX!5?i@%L@Meq>#wBJ1_=uA* +Wii*fy!ITSIqrSS)=esky=giSNWm%CXND3Se zeej`6SA_0sfp5Akca06`2{-UF>-Z=zsFPdVCC{Zl5to}|A=ZXv*TYzCjM=a0*9Oy4!cokd21vlhBH}oa3 zUo@DPv6V)Dq+tnPN@pu&G1VI=)Ey$n`;unG-&fewCJk$9 b4<{hG_JQF1!x!q{2WmJxi{r_%>X)t-4$0O}fwE zi#JKe8X}7pv^afV;-nl9II>?0Q1h{{@^elS5M_^{L_*FT@t8-dra9-&ACKPFX??qG zT^4gP1y4bo933sxa_tVn!I-5~LWUE*nNlUb)#ak96?vJ;0gL3iXyVBAMLc_3@^fti zEa5X<9Wc86a5_Uyi}bxHx(kk62Z+2qIH)x6)zHSrCqwIS?7mv0qg_W3n4Y%cH!eGp zxRgad9ZIR8dFaM`Bp|0c>W3L@x2rvU^5WioC-^QA>H-><=qk5z+A&y6bwlp`ode3@ zxVGLsgc=eX>@`R-#?(yohTpcjwpg9! UOWZ9Oge9*CSqQtU$!!92_>X9k zgQ;_yxfME{OwW28Ywcp&imrq24n=cnvtTRJwbj;Efj`%X%x 4t3KY#|JyWCI{oiz_#~%wUH)pI@>%Je`<}ImiJC)sJ=l00tp0FTP?h4W#|rvR zQpkcCpf?2=Mv55PbQ_*i+$C)GtSd25m3^C(R}xlieQH*eQR(LDe3U9^IlduO*x)Rb zaKKwuJkTLNG~g!DZnu?>3CA~x_1S!uC;9wkw6+Mh0gtQjG>FMPNxr2?cB&0Hsp;wf zU`eni1Neqpd30G7;r!(2B-u+!{=ld5QOLQDj&-%d&o10v4Z`m;z=RWA>L7V{U-sY~ zlYp?mUKQCNWthQFuK;_Czz_m7;58e^?^SNhMvy6ZJU!KqH=1vAYS&|_(PQI_kF8TN z97Wvi8d#gHY#DEpH$fe&& xPFL+2ASf|uljt!%`ilYq}YeV0Hi3=^S7U2Nl$h%x16K^dk>@AV6d5LE272;Wf3 z`hdGzNYK_3oPp?FT|Z1qGhV2R^;8wLDd(J?K?QBU8zD-pf|?(%4Z6JzDKVF-<$7U9 z8bXam&JawSQ1|lwP{N=dq%Wp%u7}gFcn=+4?X33k;R`+^nH2C|+zYF(ub!xDJ}P;e zueGI07{BB=C2gPWdtNCXVP<4aN|gOPOiTG?bl-l|zbZf^f$tVv`|pb%h;_neVr 07~aJvfKZ? zvQ67Gb*#u_&sxGhm5DAEvRci}ny)b3)@hxKfa~yrOZ~;R{BSAhOM(*>2*+u$t>$*l zheDO9fInnAA!N-3?Kd_GQ&DH{YHJGxHJvLR9E!iq5CPZL<9n6A)jx7&mypfpkg?Cw z0qClcJDv|E+KuS-s5qKan>8~f`*B|TYUE{GI^t!xwn>GqM^$YRG86Yc#~7^{w}Z;C z+%^0aZ7CkO)6wHCDO*`1lZvsODQVc H&bqC!YA#*R zw1x`1(((<%t%w^^lf1D2A1;*Ap5|#%R|*OXE*4eXQJW&wiv;>0C*4I5|1swbyDPiF zw>7EkChc8pRYo)6zUNhgK_*F8Pq%nJoS$TBZi6o08~P#E3I_M~_b?uSpvzvqy2!Fc z9>Fw$0P8V^Rl7pBsxWjq-k@Om7jAEAzv*~sBV|`K? rWxI0H*p(gTL4l|P(X|VWoQ(FYbii2*i^s9f z4!;f1$6B_G>n@(dSNY)b^;9Iq DMEMctVUWc@KK++t9^e$M| zvTXc>&D@cztU_!(MOq5Gmzi`nXB;})rOW0OMN`pA@h{y|3j6 XG^x}T4;?ToY&1GU*n9T*^h zze`2)hmx-qbH{GC6fUr|H0oc!d)>JmG~MQh-(%_)ne2rwFn+PJZ#x$U9Vx0YrqeZQ zX%acvz;2(I-}9UQ>4l`c;JPSu;`FiOf5fe<7QIdFwDzrSvtH%eM$*@e-_gzeO#1Ap z(V^4Uc?nVMm2@grbg#>OQVHy6oX4*t^7$r1thysQejfXAO7VDOLp3VEiOy&Cp%!!Y zr`zT@sqBS`1^CiJ#wZ1gW+rb=EoePv8txQl_LGVR_&YcSbDgIEcwUF+B&P<*E0 xL8s2?rnvkI;&NZ z9+;#wQTPS}ZRC=!SMoHoL90pGM^ZjGR5U6Y>3>BnW$zrzDr+!5X}D<{Mlb`|PGux) zI~>7ID|>1{NIO`XQld#c^N6NfNl1ZA;mH&8SB+(n{HOj?iZzz@Nt6?Ih}Ju~I7#b+ zeK{N tX&BCX_CPx5@ARkTq tsLfI+%U5CsUxp-2p1mTJ zoszG0j|CXOZ=_Y~K)_V3r0yj#twZq*J1|$5`S4z=fj5=QtswvVD8=^BXwmR{YU{D| zt?=F>c~@od?eYx9i2`;BI|+^M5V7X5FzLi6s*O5C;8qkEd{gAoEm^GZ>S+yc+R{&q zk!fiii2n8HcmWag(b+%kssDxHF|M6eGcr5NX2HXC4nY~m f9q ;dui z*CeE({4aO6P5)f~Ay%+h375|PWsP6;u#8AQ<5>yn^74}2chSfVcJ;$#hC72*1Arej zCA>&H0V_GWzsE4?5Tc>G^C*&$w}^yhNPwbhVZ1b|hyDn3T%A#cyi4qVXrC{=zLBT@ zaCX+CfpXe!7*6)L(4FmtorAx@2^pCsW0Bs}XHDswmpJl@iVF|#j(p)?H0L*k+>n<{ z*QU9>BZ>Vae)B<`I0I#vU9#?DRwK1~3(+sd6Dj9a`ypppB=!|LVU#$o&Fd&m6llHA zYpePF+ubHcy#oJf4uMxR(xM1)=7+O^$yQ{Vhe?mFZH~6zuYXf&EB>Lx^h>@m(0``O z$AusBVZ8rXK#!_Ko_oa)-Y)}-nlN{?zE3zIDpVeo-zgPtAZ_+#6necE+e#m>et4D4 zh0y6sE74^cO&4|PzL=48N4p_vbjb< (sHls_? z#3_oa{yjrOt~!?4*M}ktwH$cc;p6>bpbK3S#(M3gy$T!rn@+W$R}~vk@7_7$#VNd! z?NFc9FWB;yf~UOPQ@0!6Iv )#ha=%W)$*ZY0AbnuZ=_7%q zr^O)o!JEG;SbHt&(Z)3&G$7;#4^a1mRRhgvl_>y=lB?zU8{QXwHo3`3uUnlV6)0B> zmbg1?=L}sBOEDL}YXiLb&@`I|O{x0eal&l47<46Ph?$h9ZG= O ?iB|dn5Ap*y2 zGG|0UZ%PTK0oWY&(?h$gw7@?EjmxZf!pX;+E!F-oxpnMSiNq#z1{4m@6S(ipm*6KB zf5ir&=?|POC{!+=rdAlz0ykvFeu@B+fJeYY@v==VS3-pEM_t`+f4DeV*U9D#{s^jb z6ySfzC7>)Svgo;Ob|rbg0Jzsm>gytPpVGI>1kIlqnga!FY0Bn$y`~9+v;(;MKXFzH z-cz+$c go5#)*Kb!1GR)nwgqnhl zSE(M<(~BO=o$70dud?9`JGr%idPOOMB*8f*p-@zCh8s+iRwO8J*>6O8JNi=_dFewx z9_E_vQ=^}jAGihnyY=;PtF37Mef+ayk&&6XdZ6$|b}Ejj rHg}`)trtxR1TaN`t zl298sPd-UPndOHbhYx$~cO|pBLLoZHqMmpTAI9QyDUO+(eyjy9!5}KrN)i1X)rqz$ z=Y0P2iT5`lU3L+_9dlz&inCD`V$$|we-{AHFN-(_HFe8BoIW7m{@B1@hAv3%TzlQNf{)w4Dwyae1k9iu`auy zp4)8{J`{WPWr5Y+Aln|rkdYd&$k9DvW4yOF{5!_}OhJJD;+EbzL6XpwZ~Tbp2HZ0A z9dHa24>^2JuH!~T2|`Y{77(;PU2`L9DSG@WW=CdG 3eDPvOvFS(V zE=_7Nt1ifJI_I4#azOnG1R#A<@xRV5#*{X$^9V!SC613t;Mt(^0BSDk+7EBc1N)^l zZ%6!Z0_jShlA%w}KE-LMD*oH7;{Ja~fnUsXhEHF>AWQA|8$d=@@QMVW|4n=9b8UOS zn&0aQ$$S-9bFep`$pcLmp^1hTH8JrfXN!+U=vQZy#!}xu@TKl(+SUwBj-F8M6!UD< zDyx8I?e)hn`@CGfPSyRkKD?;D3^&Fs{@_6NzOH^13oAX*=qJOIOA7?I@Fwbez6Zc` z5}g}ng gq5@qlVrLSBt{L!5L^(&W@k&; z#d)Bo{A5xQl#k)eTQ93&w#Gbp*TiX;s%d9hpoB(s65(ZTap&5z=Q(Y9h-UOy?MVCI z?q^)c%#(J=Kegf2W8h)+nXieP9eLP%ys)nEx~HyKc2qOIuG(tV U>{) z4aEI-QT8N#K?>B4^=KyY3#817R}X6;Z4UM2Uo2k3|M~x-3f7OPI%K{KfSu<&(jB9Q z>(?Cc(;pnz@^aXn_NdA9Qxq5xKPvM1J(I3fC{&mm$#TU_%`0Ulw;Sv&WkNLi_oc3Z z!?3pTaShLIi(6jK-L$XpZ&slmR>A3pDaCy!WhP<^GX+dODOX2r6O)s1)>P34gKkl! zq>+MITw?Ffl$gf#0QR;D`pvCRYY~BCkUt^lp4fe-#PqKdrW`_5Dp 6YNbYU`AsM;$05-g#x^McXzwr&C6` 1 z{Q&d|NYE8B?o#adx<}RfCTE<6*fq5No~ )hevQ*vm{AT8tNM9oJkKd@ zr<2;Q>0TA^m#)AdGqBgcNA|_WTFb?1_k*Lh?Hs2{7(wX+pE |Cng^|1UT6 zn0{h;$LT>7>vPB9l8UMfQ9kJK(AuSdj&6psi3Gq9%eAt(UfWj3+OppF>y$9bT8%s) zaZ>QN-dLlniWhP+c|JBgz3>w+7=T~OCJ1=L kN{ LuZf46JC? zj31nwIWP1qwt6V&Yu_boa<*gxPlRv=8cf`zytecl)frcfRvqi)><|PpMr}5`322b{ zsASH;vuBg3?r@sP3$lK>*t(fz_q!qp=%LKbjT@@`xja$gl%bg|CI&m(=%U6Z{WwW? zq!jC9(FgZ5fSrM9k~uMHD2F5P{A3Yeeonza);Ra%&17(KYY{~Vzt_B;u*}_iPSuBY z%k?@}4Rie0W^$X2;3j8xwoaxUBj9}w0KMu~8uV=HT`DJp@_j^=<-Y UZugUN#dX!^MbhK+wU+RqO&Kr zCn0LkmmTK4!;n9?FUc~alkpoFLo*)*xVsmh535# z(Sm=K(mMIU)R{O z+{MZqF`0*M-Y9zX6_`izVhI1=ckH;rZ#m*;dCNfbltJ1m@1RbvT{&{es`jD}#AiSJ z-3TK2eu5~}5RAS%P_2!V5GsL@Y1 mxS;mAgypM!>cY)YGg=!*MUYBz>liDC=_mlRD5{Qh zfLq*E-1=4zX8;+lS;32oRm}=~po%pK)l;Sm8DClgj?tqr!R4lp{jjQ5GTC1d(-hH_ zor^yz*jYY=S9QmGMyOQoJ&3=e4mWC82fThkXQ+ml{jRJPfC_^JziUGtMGz%!Z7Bpf zCr MfL znKO;`0Wq$5)vsdpJ?7P^K8ZM1y-^`G<4bMoT^sH0&|GTXA6byWsk|LkcjZ ?&vq~(Ht8c$V b_N7Yiw~YFzdQyiR*2`q<2Ov)%z;S3C`1h{KrBbB^G>6#@XmH&1hbt zB5Z3mpvwQ|ibIXkJm@0E5CF!0#D|y|WnddtkBN=fnZSMd(#^ufzKDoxQuTi<;IJ{A zXfbFT>jBZv5) 0hgyRO}*a zy@J9Poj~GmlR`obn%TLI9n~M}7!(%v&IINy6H0!~P+>*5eot?A_1xC?+E-)q7M`iA z^J&mbD=CHPIF$-7c(t+Q^E%kYkk^Je8@`68Xg?A~?UCY#*>H$_Cyx1pr_X 2 z2JJ8~(atgZLOHTiPW_AwvNiL7^5Tj_vE1}8ZjeuUMuurD4uw|g{hR@qcATenx9~Jl zYd^F={SZ6)Ri^?!)OXeuA4dh #NiiBsMvI5 z|Gm&^WfhbJ =Y4P^o+0Ppe)` zyI9dcQ~VSVBt-wHI&ZnPK!m?C?H8F2LCF`$@#i__k?xL>M`pJp+h>H5w}Ovtzg*1B zxg&iJ_KkD`E8^(#gZ>{;=NO&W_ICX?NgLa?oitYC#&>MnYK*%{gT{?*+qP{rMq{I~ z-hIyb_jx~OjEs!zz1LdToWD7jQFY48?J}nS6)>H6zwR!2c7zCS)yi2WCfUct-@2}t zO2TyKDhNVmA08dSvLkl`n!o@j=3YERH7>5o)^H%$apV}2{tYD5IODYcGorU*SgP^6 z!{8e7hlHQ|6Yxy$xHvg2^dDd54%D!ER@}4qz-oajKz=~kckB*RdF26JK?r%i>vuYC zqyD@9M%Z5;|B_mQm>L=k*K%?gIZU_Ys%>NRA4a&5@O%T<67|KizaMVbbo9hzJlAwQ z8`NZBh!c~mPDOCdHOi%}@)~Njbx6g#SzCW`CQM#U%A8h8ThK|HLp!yww@qcqZ+3RF z)&2fSodRpx8%(ZRm0e lLBAyTCy)i{W18l^}{)ws<477yUbHiOOTRB z2dB!YEq}oSl=8?5qKy6r4&z;Onj4sa&|N(@RiRi!ritRZUl3KM<*qlwm?8v6l`3bH z8N?Tq7}sZ=C7;^Y7P`$TeQqDr+w@{cI-K%ir1SMXcM)MmkW%zh)*5IuX7^M4=*?N% z!)GZ1+8mEU1_KnqZ%&7u6OXTxBQCPSFgwWchqGIZCwn9mnEs~%Er9*W!Nnm$BKUlO zuB_nVOPAYN3A_iFLC5v=^(kJ07_Cl4 ~mbQWtpmlFnE`N2q^L+4$fs@EC6m1)2vpw30;M7rH**+&% zV@g6$J=8@+^
qyXI%Q8t0K|d`=ak6<)X=keEVFB9%oOIag{H`U62Utf%3C %C z&wBpxkr!qp)xMQGwt06BO^l+@(>^LItlZVLK_P9bTBOvYf`}pB{ ma7Xtqv2u=PA&N+00W zQtRQMwl|l&-tMu%22NyKQ%g^uK{ZROz&bSe!LeLpv8PC}B?f$ ;ceKH;cbh zu3QxU6qCHu^SqIR=?*%syxx*@#x)F=l32NZno@nAzc|?BmPc^bdG(NaN@BHYE?yEZ zwe>0^gBw$nM~be(C!WMZq4xEIrnF9Bb#}+6E_~#?xwB0w3G2njJ31hB1X_P{h Xa-w8h-h<8qf`umYB`+x5X9LBeQ!I_5vMJ>o*Nx4ax;tA}FyJ2-+pC3#VeFIM; z^Ot)KG%IWD-kZsWbIgfrf_3Ln3XWQ<@5N}w)5?6mnu~E%wUw0~^;OdZsDM>{IMhM& z8_x!6QrIM)Lg{X?!s;nj(Bznc<>v{Km@&|jS3|qSz|uJxB}?| jYC1=g{HgL{iZRaSLdi|gOi*Kc$KtUK1=CHP z>HARvt6v00TW2P~Wthz*#3K_7OA5T=GofdCGEnmfbuAU@(iT^F@r6mcu8_5%QopQ6 z?86C;h8)fwI$Ithy>_+2xbG^BCmB9`II>eLM3Q4g2<3T+chSnRCdg+gH=>q f&$ovkd1X8^Qh#N z)KokmZ)y%R0?za)-bv7%p)6i(@}&@M*@b)kuBJe6I=B9j3;8QqJId zFkk{n8?H9YX4gNCsXoIKvz0FFPeRGvk`j9?r46U8L_?X8GIP{%uavlVmOdYuYV#6T z=1wsM8ZC^pEx#GUq^DI-iyUlXTm!rF00vBV>-p#cpPTKG4xhPXvcjJ4!tBZ-Zcjfk zcec9IFFWO4R$sDz-vb1E?hpS4w@7{?t}yJ{>0GN!)Zxa2En`d_1>LeLXgF!izgg(F z!|sOd24cQ!hdiN;q-L55rDV$HsnTj@fa(eg8Y(IpIw~5N&Sr}f#USN>Ytg}|!b!8H zPu}F!=oXh0b%J8*I8^!IBI^4!C^DH%5^nCs&(B;+I>oME0vB3_j?j-dll8E}s_aA> zj!KWt0*z4HLVHfWh(6qB7@GRd3$Z|LRmnb=fzd8qXSU@YiH__|QHp5{^dVoYw*!!1 zx>wG ?S*;@*z4cSuJ9>0i{&fPG4uIldV^1^#h)$4TX8<$4~ZeNOASMmXYd z-~Hrw*${p47 @LHzsOuwx6NZZq3lUcUQ5>8#_B3|6{Uh-ao=6nL zmJCp&xKR1Ex#JabBHU8(3hULFFh=X-<*p{pZz<*d{V(bzan?!3=JS#=S})31Z7=J= zGY(`4X fP9b2@z21V$Jg3x19TbJT1Dn zrm?p~P6~=9jgzoSwS1Nxb?sNfsG1@fClS>f-Sy12OYpVOy%kM7tX&lr2y^ut7B!r7 z!%t1YBt3o*&X~UvN2}^5HD&ZLU~-EpShN7iq#h8Bn8Am#oB7z9NYJ0u@$!7V-YdFA z7h#0nRQf7D-Qo05M%VuIWr>Xi4$X{1v(BA1z!-=#&35ci*$b6~RGn_P%Ioxhp<83` z=w c&d^e&8#ubE@-5U3 zWK>`39D636x*fnV@yj}?U9@w#Y$|?Bk*<318S?WI1px#LvHLx&K;>0q9n6Onc(tdo zG*(2BDu+w7pUA@Nxj#){lr$UK;QiUU4^ZQ<7nktEE@l$mT9b%>*en|JJ4&Ui L%s5kubJRV7!aTln?QzT+K2%wcuK3*0fXxK= zDkkaEiSnOj$9C35oAvJ^tjTkUMO~Ng6c(t#`ccuiT&w$ejstXn2g;KuvdOM01Aor` z6XD@AOWl`>S919|-)iE)C?8AWhWdkT^F~<=t&(b@YKct?S@aiOV{K7q3EYFDBIXm` zQf47hsogKUl?xe+kc$gqsoPT;@QmYfw`7C2R&^=hnnzX8>Y{E?&GmVF?p01O_P54$ zqu5lt*20|3` e;2*gpo!bfM>VqKo!gg@9JNngp=LC4BxOfG{M3&)A|}eF zOvmM=`1ro3<_+qx$|dqyJ#QtJ6MnG1$sSC5-KMv{4 eAnawRE^2j=!O-i zr&am#=hJ_Gx2jnHQ@4zlZhsP~nDRjj=*)Z~TJc>eCqX${+uvMzTJ>FoTt)(40j+bk ztv6UGaZg0vX({v>Y~~AL=!RNx9M3Vsu_Ddlx5x;*JrGF3bfTpE!YeDuA!XyG)JteF z2tkLJ+IS<$caUBEFNw$PU2(eB`bMrLTuRbJsx oFFU+p!QP$5f~-O)l~gtE z*?_8+ELxK@?pz8J-6MrwP4^`*=C_)ykErutUco|0b;=iQT|=W>w)Xlat=5_WC@UYc zdhEhR$wE1s)F~cP;3A%mxfUhWl$RxxgP8|eMc6%-aXLL! u(^%dTXk#|E#Pg-4iS#1i{N%Kcv*D{^Y+1)ZcX zEUAff1rl`-6^!3l;$^tY&x9*RbQxJD43}l+OPE#}ru_5Be`u_p0R|z#fbHef_uF~% zbQHls0^cl8WB;sGr$L`p!D!!O-egoPC%x5<4qtO860;s#3@0Sv?nVDoi^UXl4jnH- zW@Mbe2CEz!zG9d`l|ciu?_buyjIf$5`tfaw!wKw49G)4sbTO%qG6c*sC{lGS=q1-U z=Yt1e+NY0b`Gllr4aITOYy$R8N)(PWmj6502vhtWg1Jz|6+dj2RXkcf&1D?PBg*a{ zfLfA9Ffjtr-7vLe_iKEL! wid)yF^5kqZiaEWGwySFXmha>0{elg*Sd$h!?y$Wh5j_kJaX* z;;Q>Pu#Ffb-t eNGHWFX!>H9V`%t6Ba_`g~JdVpnEf0&?CPvtNv z^r_c4CioI{+Hy7#j#KQGd~~CE1Z19TC{m`{KFDm9nw{a?;CUJ(3GzGDRc`-1$2~Aw zivgyI_I@rlC#7jUt!Zb{fFt<&`Qjl{D1-g{)J IU?Z`?WfLW; zm9RU)Z5!m1dgcHR0Y%P8ke%`qkUJ6q&G ({G7Uzd`rnr|1sDTZCH$|oJO3SKNDZtTuHOHU_q-8gB`NC+s_-bV0o5? zqPFBC!xxOYq5>sQ{rdA~s*S`2A?cRSkd?SPq|+7v-J#7()%aE3&Mq_0H)T#?MeJp^ z=+!n|V`ENFxpdswx jx_DgRZea^a^*u>)tvB$ znJR^wMcmwC+VFDDQE2WRfu1mkKFSm+x`5_}`uwE|s8P~khD&JxHEu|%ITq9!ILt*7 zx(Jm4pEFmC6)EIzsYd_oqU1Sp>f-z}>%eFpJ~cDb2R)S5PjAna=d>@s?Gf-}xvD$; zP7py@5qifsivNqlyLE?`dM*txA)q}X3y@xVa~$>3%HeV~sa?{kd^~SG1jEFrG}A>< z_8 Ic&k<;Bi_cTNi3rneyBA-QlL?VD+bI zqiVRy)g`7*vv;kj |FW>55^lYDjJB7Xd4 zO!bBopAdqkeqK5`kup$JcEaSP|0_fgb%w9qWsE6G+;{VH@&E$xTsBIaNVY?7`7_=5 zD^!1WHYf^;30=(#NqFLN1fjSRzUd>6g#a0?Oa#jczv@B#?kae#)DO9UC0y6 8Ru~b_xSikN)r)*NP;!x|7%0ceOeezCO@BcP8%CfumnC( z|6gTzfbg&G?^Hu3_mTg_DNMThC-V_+z7exc!8BC+X?<~!Ru0iQ(a5;=@{_9iBKBx& z!XL^QO*vJy`Hje+gBJ8JGCCZ%yO=3~PBfu({xjafFEo3>SeQ(@AaVo~Cm&k5KZGND zEwP9FkjeR?53k`dv ;wdxiTCB@O= (4WzTI~8yso_b$c6FKc6xbaaj^->~sGE&9o?l&(QSGtu&mG zR5y^@Ly2QmmA&)-=ghbZP-PE2#6IdyU8W;yl6Bt(Aw)HCzt_YB3BPr{BO%@5eeXE$ z623 #F>(J{Mcz#Ur`D8lqxGcVOyby=sW`kTvIIS#LMZ&~5v=wXg* z*2~H!1WWu!DLvL>Vw`}iPn>ht?;}T5_Sm#;a%?|w1!Mg;gA1!k{O?=Z!4I{Xmf4RD zH1eaPtXINj!aP+TGF`M(u>Vwy5{CD&AX}C-o*qkXV`Eq@8ggMm&Sp&F2b#TwrNtRd zs?MZ=@5JKp;vRzFUB{(jBQ~Sl4ttt=S;=tVKV{4yJ8_ZgyK#CJt4DcU1RwR(HO*?^ z^3md!uPX5B(#j&G`jCgRic|(}<~fH(@%=;)cJfO8{oGfN+ULUDoEqSCpS$&O)G=$B zXM|7;0{O1Em+ZSj5t_TTMPi)|tD?$8VuMexf*L52gw!@Lr0>F{In}=#ddCcCum&D; z><#$CGjs1hJ5OHVCf_6Ab6DtaNYlMj??#=P4CC(GT0BOL<>P2|JJtpK*Ev}tpFZJ* zZ_R^td=p86i2hE1b$evaaa*pnlc&~0FiSZDI?wvXde{2y6372Xs%qh%SeEmwKblt= zQHvZUtyYcRujXW7G>Ev_*`|F1CO!6EXKIBfa|#AYjU!e-x0|c0o6yvpitT&%GC{BZ z95I!@z-3t-21bl?<_9f~GXPu5sZgX72YtO!M`tj;Tv!OY4~litR+wCrXx`5cT0Urr zwYt+0*wD)?4~bcruw*2RHNIr4ZDTqf_pKq}G8c9f#@1bjel!>6^7-w&`w-=v$@B#i zUVKHJyyzE~EJ$>!K0UtN*6JvAA*b^ZuPf!sI U*F4j;t(vlkVeXL}N=XqC>-RLA5R%RxqT=6W3V2`539)@7OFm!tZ3kMw zZdK0C8XwTJamm*wk$yd6RUOllWE~{xe0_M>;Jc=PfmgQg)zWA^m-0N8rhgaJ(>B#$ z&ro}8jdc*UKjyXHzUj R1%#%~a 7n@+H(=GA=H)}d4z@+ichkl2ZsfpvSp+dG7)k2YJpG;ViL;3AMFxV?TC zdiCmDuOgYf0ODWq8fH7| rT#JrN)<{Z@K zqeewTy };>7`EiiSA3Y z0`_j=Ee1Q!=9s!TsDIEV!^|nrk0M>L+RR9sL5=<7d>`{Va9ylgs5sAAy6vM{I!<}S zpj2P9NAiK#T0wTfE%P7l0sk&IM!J3-(p+EQo-z>I>UM%;uA)mH&~I|A&1Vly`pYu7 zoNL9T_ijDYI55f9FC|2KTy*23t(Am}zK~sWq@v)g6HOy+(a^4^WKxI}-}1_`mi8kw zbn_T)gT O0KyWL}`S|PCIczKEpe-YGduz851jU|Nw z-;XQIb@=vo+WVI%mHP=39{H4z8n!L1d)z?=dJUTPLDBX+e`oI0gUXF$*$Wk|YS(XZ zmNwdW>M~BXZ$X7JikMelvrA 3>vJF9~4H>Bc= zOR+`n9~1Xc8n2C#(pG4Zs)qr5-#^o >ND zqYr80`=R|t! G7QO5!?eDOzwo|7EA zjCLE0y#PD>o`zFy{BXv`U-zAp9Z>TIVdI=ZC`l6LrH@U#NIY*x8gvEv@44@_qTV%b z+;q(q$42o!lfZQMcfK5g$XsSm@4DQn!l5r7gkHwA&wu0)MnBT2!J+cAz*57bIzNBP zQEf2u48)~vEh(BOzOg+L sp$O ^zWH0=sN!6e=wxq z9o^Fp?~xP_QV3! _&MNN7V3wgcZrTy>-eRuGyu3e1u+J(IQ2`x2uY5mLkA^ zj8s%gyu+97T(q!(W__PY!|px6fxM6;}Rz#J>?9>Cw+jY(K+1#ik0VCibOA-_hsC zf3t gFdMc~Db1x%*)g)Su-72Pn68|%LJjmgnWJ!ltrcme zOxv5q*ZOUmErXmtXsqU1%!*A;G8_(@U8`nbX)@|^YHQ5JKbZ*M<~}?;(8rw#n|grH zdLJMae5anS($@3am)iDq#wKX97>V_(xG<=63X|w}Vv@sGEYX|4RN&l)sMxWV(d_vk z3laHZ9WZjP9B>KoDXgF|ZVs5#Vi2seOQ7V>?LSYBIR?U_+qT8=gnStak>Xl%@F_yW zx2<9dFn9>Hi^|p21wQFk12OK?vTI_mZA+NJjkhbXB(ZN+14n{+nOT-B@pNO4`#bx( zZqMBu6{fM0qcG){@{_dQf{#zKYKtYf=9;2ezxT@PUBflA=HV~LoV)dVxG%o7&woV{ zun>Y7QP*d7f9+q?K}ta*-`8Z)OJun|t?Yc|1yMGvc{;=R{WitxM%T*IDvwYZm* pJG2g1NqTJrfCVg&dZf0Gpb1VFQOiJ#QFm{=0!Y1_- S(B$dKG z(?p@Oudc`=+QpuE@!~!r)8WKUY2&AglKukrK+3fxHz5U|_AyXyZa`m7O7NGCFK>6k zcTf6ANEBCbi&f%x`gCre=IAST&Jh+Mx;$M fAxFaW6+iqig-M^&>kh^k4(^L3dW`! zEDj%nq}~Y^#cH0T1SC~YWzb~|KgM4zAbRH8qume8R<31-c9#V`bbn)n!(iezp?_UL ze-gI8^ICpBweoCih^K;P@kngR7pX95skS;F?d-arwhVe3yoLh-ht~3G)vkkc^C`T% z*2mkF)f4y4&OsBB(8opU#ag#trChuBhoVyv_Ts))|h!;^W*PEXlr>_8+PX(*B_& z3q7pG2ocMTPU=Xfr>mSiPHlCdNu=imBSq3?xqvrjFeVF3>^u~#TPkzt4@=O}CiY{O z$|P?S@~ncd^z@b~Ay!x^XV|vV8a@Trj#jq37s)Nrf9rVOo|xdQddV9%1`a;~PHa_& zBJ$%v;kdyo!ay}pz|vNRkT$-j2fh}72`zDG{KO?}0R+|RZW2;OKzg3La_2DlMjepC zxTXCBde$Ah2t>Xomi8StOaWPQ@UQM&9j{n=^?ETlJR@^kKtUU4+?UTJt_;`f-+~dO z`=Xxj`Xq520j6$ cJnjxNqfxQejar0E|TCd*=D3FY%;s-qV zPR#o?@dIgQLp5fzCG$#MQW{{maI8&PQIGEoV;h8U%iJ<&u EBEEp zvCO=;u*KEV>VB9rF>}sCj(S~&*jc?tNYq}Tt})0XOOY|?tn@u)rtyukO6Y?KQ{to_ z-ysAe#yBR_C`i6>b5GiYvCve$+$skk?63mN9_wh4H+ }1ykA{$-Z+KCf#u6yjI~sT zE?wYYC{`$i9a{t?tiR%EkrH5r(HHN1j@ndeIJ{BLd=;hRXR!6W2_dSdgN|)2Cht%8 zR_J!V-K$|~+A20kP|;GqMDnM>on)(yn)|7FTtpX=(4h13k dS?6t{qLjdw+0Z6Py)(5k^5Cw)-&o z>x_RL8`p1rlKOI6rV_g2fR38LOG8^GOcE+_9&GFD+I{!#->nYH@%>*k1NMEHRsh0I zE bBF)D0eHng_D^ovE)C zO-(?RaN?m+lSdYO^K)BZph6;@WipI5x?hmiZ%Yv4uK!t|B>YD#H}i23kk|Ln<5xV- zrb84P22<@T7pCI<6sWYZg88UM+XiNt8FBp%MoiIF5ej)-?3Y7g5F)3B{b?a_hf6t! zS^VvNNR};^z5@gHINyWPQZSE!2TWz{?Gf_2 %7-4=ruWOFP z(}vMo*(7I_EIa5Dd2yo3$&L#+sNFte `Nj4eH zs~g^f?JRh!*ImX2`#sA}>2I23-Kg%@r+0}=+DO7n;LNo``DBxG{BuQ>+s_WSxYVCv z2z-RA2vIK+w8)}mg-K4XW 8ku}=2mN3N|! zkG$sMONGwn&A>tX4G+ovzFIxJDyt&hCJR_7(`z{{UVv{5%;OKg86c&iF3fP)DXBFR z0Rcfx*$l8=XwuW+{_nP=>?`7+-O*MvV%MIW{%obn(y$HJwG9tMoRdc4lXsh#c#)_H z)?bMbFORyaB?)Ve%5ZDQ n;LbyZpko%y4qx%d#ffllp}19tzQuKV$r zz~kUO3dT*r>w)r{F~pBiPW-Y!>R2h5J|K@gDxQrQ9PWpNf;4zcKa(wLlf%+O3GVTw zr-#|#IlZ@SFiMokS|CQcEGKON(4V(u(*x1}&N^TJ?v#IE*%V7U^@|`bVoY$~YsAyn z2I_ET)?-z2?CJ$xRoPW_H4Pl?SNAZg1lH%1;$6OU#nW5BRW+A0oXFoI7F*e%AZm -NjA}9uXQ|#^)rGu)lGsW9-Gk+29DSIrU@?9W-9uPq+k4Xc!>A7Y2#Ilu zvOWyW1x&ljJa|2abvF_y=8h|>4Wm`#4gv=z{d7g9z0y^VE7s3y U4vAc9lXFpapypk^!75%1La4;-d^X+<>J}*@c4wx zQK=uLLl*Wn0A~Z-FIUK==YH^u963hnYtS-WBqX_5a&_{hjtK?5E7k#E@DWI0sgB@D zQ;esfbktwmOrD|^8a#LIfA@+lB>+ G<@`UL>;;b23Z+9HqAt&m?dh??Q2hDqnw-+> z7g0ouM_ofW)KXn0%hl@}>;I|}NPk1PKK!Sk1`CViwbT3W4?{C547wz9&h6{6Ozd&; zC0C_X23Uy1Y9k&^N-RG9a@XWshRoE_DPk~l^Ac>$HoS@BmeLijR#7%Z({SOajM^Yz zk*<9pX^>Tw)T`oONzD3i2b-Yk(?T^OfLM}aW6$ 3d#dHsm;hF?3k$IRf%LoXyDcOjPm$AN^jCQlV^_)lQ wf=BT8x?$i ;A %(uzh`PS^?%g5UPs3E+th?)5M z3RDmKqwrtdvlIL9tFOe2xm%86@B&NB9y=g}km8IRO*qmQDEk!W%yfmiUI5AivEwT4 zaMr6gFMvP0ZFuiurP^5p#$nqBjblwpVV{NV>H!E}7#4G2*7Gy
aoD&+B?Q^8@Shnf;rF+vX&Ph7{*B2BV-&nTxo; zk6c7S$ilrfU%J8!mZ_TYKWs8`>AW<`acXs9e135I7JdqOyLLScZQt>DB?L6|Vg9!f z{dAi9AKmLNa&1I`2A^p~o6FWpJd82?oc(L8Am`5HM+w17CZ5#~pxrL}lh&1~>ZevS zu~;e69A8Doz?p`Q#~i%Dl>sgMu(1>!t~lC12)pmuJhL8uFL<8fma!7mni;5J&f9cM zWsYFFi*u&W62xSSs9Ti&G|#!}}d6pe@BXSeO1PSg^)Ts`t!FxU!yr zC~xLEe*Y4Zt{qNb==Df3Bpszk%JO=%^cD6{5ij-$YHOEy1lNvRhIK_X{*{JAX{ zkSHQLJ++l2^!@gzc=K&v-}~jVF!N=*G*BjiLA%L4Iaz#k!un(~P0+N_-nR4lR@=V$ zK?3MGxl2X+%`U2g6tDL#A6x%wa;>vo6en yHih?A~cMH1cfi_6P`u?s>@(}e$okNJQQ?rlRHZc5N1AZQtogY zlv9uQI_(NuNZ9kTZ+E(lHut`m*5M FqZV9(vhgPJDU^sjF*Sa6O5JCg%4#w?FS-hYFev=vk=L8j}_{@d+Q6z<@xN z#_+iYIF}_=9a+z&ru|pRa>D?}RtmjZ3+soEj4ORMjk2U~04Tb_bJGNHu_QFww$;O7 z3L9P%$l!ceiPIB1-Q2h$I?T7d{rybWnQ22Ruv+sUCyO7jf3<+Cx1#oM2bGj8-y>WK zq4*F2P!D^f_Rkt8&rsq<-yT;)kyrPDIMltt#H!o+%aG$L+V>EipkMF3`(|`Mk6G1U z@TR`VDyGMc2$Cr7D~!luo^jc3bwG}d`?GB=-_}lcUJb8KE@-