From f8dfb87604583a21840eaca2dd5542d77f5a8463 Mon Sep 17 00:00:00 2001 From: Dhravya Shah Date: Sun, 23 Mar 2025 20:18:37 -0700 Subject: [PATCH] Documentation edits made through Mintlify web editor --- .../endpoints/add-new-content.mdx | 2 +- .../api-reference/endpoints/create-space.mdx | 3 - .../endpoints/get-current-user.mdx | 2 +- .../endpoints/get-user-spaces.mdx | 3 - .../endpoints/import-notion-content.mdx | 3 - .../api-reference/endpoints/list-memories.mdx | 3 - .../api-reference/endpoints/list-spaces.mdx | 3 - .../endpoints/search-content.mdx | 2 +- .../api-reference/endpoints/search-fast.mdx | 3 + apps/docs/changelog/overview.mdx | 2 +- apps/docs/essentials/architecture.mdx | 59 --- apps/docs/essentials/distinguishing-users.mdx | 86 --- apps/docs/essentials/metadata-filtering.mdx | 78 +++ apps/docs/image.png | Bin 0 -> 79915 bytes apps/docs/introduction.mdx | 87 ++- apps/docs/openapi.json | 501 +----------------- apps/docs/quickstart.mdx | 42 +- 17 files changed, 128 insertions(+), 751 deletions(-) delete mode 100644 apps/docs/api-reference/endpoints/create-space.mdx delete mode 100644 apps/docs/api-reference/endpoints/get-user-spaces.mdx delete mode 100644 apps/docs/api-reference/endpoints/import-notion-content.mdx delete mode 100644 apps/docs/api-reference/endpoints/list-memories.mdx delete mode 100644 apps/docs/api-reference/endpoints/list-spaces.mdx create mode 100644 apps/docs/api-reference/endpoints/search-fast.mdx delete mode 100644 apps/docs/essentials/architecture.mdx delete mode 100644 apps/docs/essentials/distinguishing-users.mdx create mode 100644 apps/docs/essentials/metadata-filtering.mdx create mode 100644 apps/docs/image.png diff --git a/apps/docs/api-reference/endpoints/add-new-content.mdx b/apps/docs/api-reference/endpoints/add-new-content.mdx index 6bee3091..5ffab854 100644 --- a/apps/docs/api-reference/endpoints/add-new-content.mdx +++ b/apps/docs/api-reference/endpoints/add-new-content.mdx @@ -1,3 +1,3 @@ --- -openapi: post /v1/add +openapi: post /add --- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/create-space.mdx b/apps/docs/api-reference/endpoints/create-space.mdx deleted file mode 100644 index 775d8786..00000000 --- a/apps/docs/api-reference/endpoints/create-space.mdx +++ /dev/null @@ -1,3 +0,0 @@ ---- -openapi: post /spaces/create ---- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/get-current-user.mdx b/apps/docs/api-reference/endpoints/get-current-user.mdx index fe057b1a..8de39072 100644 --- a/apps/docs/api-reference/endpoints/get-current-user.mdx +++ b/apps/docs/api-reference/endpoints/get-current-user.mdx @@ -1,3 +1,3 @@ --- -openapi: get /user +openapi: get /session --- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/get-user-spaces.mdx b/apps/docs/api-reference/endpoints/get-user-spaces.mdx deleted file mode 100644 index 8b91a1e0..00000000 --- a/apps/docs/api-reference/endpoints/get-user-spaces.mdx +++ /dev/null @@ -1,3 +0,0 @@ ---- -openapi: get /v1/user/spaces ---- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/import-notion-content.mdx b/apps/docs/api-reference/endpoints/import-notion-content.mdx deleted file mode 100644 index 14ba2ba6..00000000 --- a/apps/docs/api-reference/endpoints/import-notion-content.mdx +++ /dev/null @@ -1,3 +0,0 @@ ---- -openapi: get /v1/integrations/notion/import ---- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/list-memories.mdx b/apps/docs/api-reference/endpoints/list-memories.mdx deleted file mode 100644 index 82f2cdf7..00000000 --- a/apps/docs/api-reference/endpoints/list-memories.mdx +++ /dev/null @@ -1,3 +0,0 @@ ---- -openapi: get /memories ---- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/list-spaces.mdx b/apps/docs/api-reference/endpoints/list-spaces.mdx deleted file mode 100644 index 23f1cee9..00000000 --- a/apps/docs/api-reference/endpoints/list-spaces.mdx +++ /dev/null @@ -1,3 +0,0 @@ ---- -openapi: get /spaces ---- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/search-content.mdx b/apps/docs/api-reference/endpoints/search-content.mdx index 03788e9c..ea2f8389 100644 --- a/apps/docs/api-reference/endpoints/search-content.mdx +++ b/apps/docs/api-reference/endpoints/search-content.mdx @@ -1,3 +1,3 @@ --- -openapi: post /v1/search +openapi: post /search --- \ No newline at end of file diff --git a/apps/docs/api-reference/endpoints/search-fast.mdx b/apps/docs/api-reference/endpoints/search-fast.mdx new file mode 100644 index 00000000..e4dd1947 --- /dev/null +++ b/apps/docs/api-reference/endpoints/search-fast.mdx @@ -0,0 +1,3 @@ +--- +openapi: post /fastsearch +--- \ No newline at end of file diff --git a/apps/docs/changelog/overview.mdx b/apps/docs/changelog/overview.mdx index d7d818d9..d9cf59fe 100644 --- a/apps/docs/changelog/overview.mdx +++ b/apps/docs/changelog/overview.mdx @@ -9,4 +9,4 @@ mode: "center" - All endpoints have been updated to `/v1` for better versioning - Improved documentation and examples - Interactive [API Playground](https://docs.supermemory.ai/api-reference) - + \ No newline at end of file diff --git a/apps/docs/essentials/architecture.mdx b/apps/docs/essentials/architecture.mdx deleted file mode 100644 index c23b74e2..00000000 --- a/apps/docs/essentials/architecture.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "How Supermemory works" -description: "A short guide to how Supermemory works" -icon: "toolbox" ---- - -Supermemory is a hosted service. This means that you don't need to worry about the infrastructure. - -but it's still good to know how it works. - -![Diagram](https://camo.githubusercontent.com/d6049c13d165a803aa0c6cbee9fc64fd4feafdfe51aecf47fc93c2f18b58e55a/68747470733a2f2f692e6468722e7774662f722f436c6970626f6172645f4a616e5f32302c5f323032355f61745f332e3531e280af504d2e706e67) - -Supermemory has three main modules, managed by [turborepo](https://turbo.build): - -#### `apps/web`: The main web UI. - -![image](https://camo.githubusercontent.com/5113555da016ca2621aac80b13d29dc0cd0aeaafc5296cf090ee1dd33264bf9b/68747470733a2f2f692e6468722e7774662f722f436c6970626f6172645f4a616e5f32302c5f323032355f61745f332e3139254532253830254146504d2e706e67) - -Built with: - -- [Remix](https://remix.run/) -- [Hono](https://hono.dev/) -- [authkit-remix-cloudflare by Supermemory](https://github.com/supermemory/authkit-remix-cloudflare) -- [Drizzle ORM](https://drizzle.team/) -- [TailwindCSS](https://tailwindcss.com) -- [shadcn-ui](https://ui.shadcn.com) -- And some other amazing open source projects like [Plate](https://platejs.org/) and [vaul](https://vaul.emilkowal.ski/) -- Hosted on [Cloudflare Pages](https://pages.cloudflare.com/) - -#### `apps/extension`: Chrome extension - -The [chrome extension](https://supermemory.ai/extension) is one of the most important part of the setup, but is not required.This is to easily add pages to your memory. - -image - -> please rate the extension to improve the rating 🙏. - -Built with: - -- [Extension JS](https://extension.js.org) -- [TailwindCSS](https://tailwindcss.com) -- [React](https://react.dev/) - -#### `apps/backend`: This module handles the vector store and AI response generation - -This is where the magic happens! -Built with: - -- [Cloudflare Workers](https://workers.cloudflare.com/) -- [Postgres + Pgvector with Pgvectorscale](https://github.com/timescale/pgvectorscale) -- [Cloudflare Workflows](https://developers.cloudflare.com/queues/) -- [R2 Object storage](https://developers.cloudflare.com/r2/) -- [Markdowner by Supermemory](https://md.dhr.wtf) -- [Cloudflare KV](https://developers.cloudflare.com/kv) -- [mem0](https://app.mem0.ai) diff --git a/apps/docs/essentials/distinguishing-users.mdx b/apps/docs/essentials/distinguishing-users.mdx deleted file mode 100644 index 28c7167f..00000000 --- a/apps/docs/essentials/distinguishing-users.mdx +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: "Managing Multi-User Search Results" -description: "Learn how to handle search results for different users in Supermemory" -icon: "users" ---- - -When building multi-user applications with Supermemory, you'll often need to manage data for different users accessing the same account. Here's everything you need to know about handling multi-user scenarios: - -## What are Spaces? - -Spaces are Supermemory's way of organizing and separating data for different users or groups. They help you: - -- Keep each user's data separate and organized -- Group related content together -- Manage access control efficiently -- Scale your application to multiple users - -## How to Use Spaces - -**Creating Spaces** - -- Spaces are automatically provisioned when you use the `spaces` parameter -- No separate setup or initialization needed -- Example API call: - -```bash -curl -X POST https://api.supermemory.ai/v1/add \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"content": "This is the content of my first memory.", "spaces": ["user1", "user2"]}' -``` - -## Manually Creating Spaces - -You can also manually create spaces by using the `/spaces/create` endpoint. - -```bash -curl -X POST https://api.supermemory.ai/v1/spaces/create \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"spaceName": "user1", "isPublic": false}' -``` - -Creating a public space will make it globally accessible to all users. By default, spaces are private. - -## Retrieving Spaces - -You can retrieve all spaces for a user by using the `/spaces` endpoint. - -```bash -curl -X GET https://api.supermemory.ai/v1/spaces/list \ - -H "Authorization: Bearer YOUR_API_KEY" -``` - -## Moving a content to a Specific Space - -You can move a memory to a specific space by using the `space/addContent` endpoint and specifying the space id and the document id. - -```bash -curl -X POST https://api.supermemory.ai/v1/space/addContent \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"spaceId": "123", "documentId": "456"}' -``` - -## Retrieving Content from a Specific Space - -You can retrieve content from a specific space by using the `/memories` endpoint and specifying the space id. - -```bash -curl -X GET https://api.supermemory.ai/v1/memories \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"spaceId": "123"}' -``` - -This also means that you can augment multiple spaces together to create a more complex search. - -```bash -curl -X GET https://api.supermemory.ai/v1/search \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"spaces": ["person", "project", "team"], "query": "my query"}' -``` - -This will filter only for memories that are in all three spaces - `person`, `project`, and `team`. \ No newline at end of file diff --git a/apps/docs/essentials/metadata-filtering.mdx b/apps/docs/essentials/metadata-filtering.mdx new file mode 100644 index 00000000..3ac4e6a7 --- /dev/null +++ b/apps/docs/essentials/metadata-filtering.mdx @@ -0,0 +1,78 @@ +--- +title: "Managing Multi-User Search Results" +description: "Learn how to handle search results for different users in Supermemory" +icon: "users" +--- + +When building multi-user applications with Supermemory, you'll often need to manage data for different users accessing the same account. + +You might also want filters, like memories from **_multiple users_**, or in a certain **_time range_**, or products within a certain price category. + +You can do all this filtering using Supermemory's api. + +Here's a quick example + +```json [expandable] +{ + "AND": [ + { + "filterType": "numeric", + "key": "timestamp", + "value": "1742745777", + "negate": false, + "numericOperator": ">" + }, + { + "key": "group", + "value": "jira_users", + "negate": false + }, + { + "OR": [ + { + "key": "team_name", + "value": "engineering", + "negate": false + }, + { + "key": "org_name", + "value": "supermemory", + "negate": false + } + ] + } + ] +} +``` + +You can compose these conditions together to add filtering: + +- `AND` +- `OR` +- `numeric` (greater than / less than) + +Here's an example call: + +```bash +curl --location 'https://v2.api.supermemory.ai/search' \ +--header 'x-api-key: supermemory_RXPx' \ +--header 'Content-Type: application/json' \ +--data '{ + "q": "How to use teamcity to set up a project?", + "limit": 10, + "filters": { + "AND": [ + { + "key": "book", + "value": "maths", + "negate": false + }, + { + "key": "author", + "value": "r.d. sharma", + "negate": false + } + ] + } +}' +``` \ No newline at end of file diff --git a/apps/docs/image.png b/apps/docs/image.png new file mode 100644 index 0000000000000000000000000000000000000000..a99caa146678840f5d8bf9793773e02014ad9be7 GIT binary patch literal 79915 zcmeFZXH-*L*EUR55h$f)R@9z4(oJWzY!_R7t}@U^v#otmAiorjZ+f!cjC zGMVV;XBLjvpIueTXsi~zH4r{pSeQUhkW8w1Wia$+YL#GD?J^^j_^L)Vt{Xj@<-{kx zc#`iVpmbH0v8{MMah_<_#(&efWFt~Iw?;pgD*X20;IZ20VHO%xqj)tWu>sK1J9D&> zi3vu|d2Y_p#x)3;rOfeC2(gt5FOMu#cdq>WDd*J&9Havd3Jb<0-$~{pXJ2fGPHkYg zI_BU9^;n_4GpIz~aVxJ-b%_ffZ0NxCl2NJ}^lRQG5W z@N+s`FShzF@G63`;UM*nN6PQ_jNoTWGhPuDB2Lx67>Ra`PBhy*WEPO-w;mU_m44bh z3v9l=>h=mnmq+@Q`o^t4n8PbVE<87Xftwg=dw|e(of?r*{S#OR>JjH zJ9rh}S!Q1H>bmQFvVZJjoRxNAAwiafmMw}`)Tnm*eiz8NmOr1-s?G}(yD-zGGo9E& z4u*o+mh}@k6F1D2elmZG?pA4gFMHkst9Y3!YIDS4Hn@1zs z1&#=0^-rA%U8vQeyY~x;JX?cb+cA#Mc$zN-`#Y9+57OAb<{7=GA*zuOet4Zbap^AW z%{;CI{%%9tDBB@9O?t`B6mC!3-NvC&e{voJuykZ|W`5CY*yrbySU<%`eX)t-*iG);kNBt z#r7ZVwpx0t%r>#TIMEdiE>uzc}EyOvgu|5kqbIOQCFP~jp* zoKn|y@ePlLGAs967f8UHjr~HOU@gU|iqHhs(`BKV3oMW$4h{IwFhOAVn(C@&&kN@XO1cl64_>VSYJvLYg zCu-l!&y{zMY$B+|l8D0x0Cy=z5o8THL`ovBAMG!j@m`XHcxCro!(K;+><;Pp0vQ!K z8yPj}h@A9RB4_{KQg^*^z8Ydt78Y>w-e_s z(0sn~b-0Acsvv05JH*RE#Qr_y~2r$(Ww1bscItL!(Ra z=NodyFHljV3aFCT1MctcTv$rgjLG_AC!}U&xEQa#dWrEj+M6>?OfBI&+CEeXKmOc! z6v*kA&hY1PlA5^ioJ$Sc75@Uj*vg;7dG+e8IaU0E+S>b-mFKf$6iVlP{xsMB%q})0 zrWw{fq5_Qhbl4)Gn!q^>Bg!imyTuNRD&%n58lV!*5Q{xb6c@Nc$o}wAz%;lOsH>a3 zw6db^qg%JMwEq2=OHUv1@OW0>Fns4dhDGLD=n2KG(tk6uoFJ+L3@iaZX_ET@o%Q6H zZ4gF$Nr4Nvju|?l+Uf1gHu^VmzWtPo#|Daq^@xQAa(s3(*krlf#~){Pn}_{h-K`vo zM!(X~g4M8HqNfp&_@u`LJ?V3z`LkY-g>qBxXvg4zPHPFN8T{1YM@Iq&Wv_6L>e?Uw ztJS^DLatL{B`T*Wkps?16m0Zw9IuipZvzTb?FgSE-2a0bpAIm`gG%BP=M@eC*+yBu z2&=oNgZJ2^RQoq}@cr@yI=bYpuGifI<1boSv)m|-nQRH4?sFlmUy}cu+4o$D_!v?FeFSyuS5sCf`ie?)@}aw@&gA(np6oJr{!NER6xN?V8#&_@ zuJlP0^|-+2DgTXVzFxghOL^okyCOmI7sku|^ArDOlvL;6Yr5*jNU~Xtpw2%C`;#gD z-Q+WVMkXfPa|=k5wf%h|QfIR*^IiX@v*#3zF_d5SIWAuNH&#;Y9I9|-$l+n|GX!-^ z?4L)bkEGs_2m|FXcGdG9KKwVD{E%dA%sfj)ANl7_LPC_uDUJwFpTGYX z*QzknFm_dN`~AO$L;jyA{@3#VpD6x+CyG#gkf6!g7OgK$T_x=jx3>mW@7O7*0`;4A zPeIf?M#On##0>7QcWTUrVWlVC=+#V|qJ=6W@ zPg6;RKyCVdRN?WkTW-EaUqnS4EGs3hyML89!T_1Z%Yk2}t<_G^T!i-3WRpcZPdl%W zg!Y9c_%eSeK<%HMXQ-S&&Z2@Z^f2mGFj}B{uBu|@(tWna>XByU@o%O#Q*s!Y9;C7h z(cKJD$ztS+v*LFZXZdi}Sg&5~(wMrL@z{!6;|fTy;aleTPYzIVO#sS*#$~7~(=?y; zbd(3Q4U|W1wM37``)4CPbC)U9$cRC{^?vwaK<1Kwr`@u9XE(tva$k`86h*mINbZ|F z>(i3W4;Sl z?st^fA;5w&C3jq87s1h0+aI4Kq^24>buOup@K;5Lg(UG23>WfDw7hz=5)-Lsi!-xg zev-E!&8u^wbI`hN@QX8o=X5Hy54pPbf^%_(!i{O>=l<7J|H~TAU+dD+OSHoutFI&o zZ;p`*pMU>QeWY_U<6I;Qe4mN!e6y(hX)oTYFM7u} zm~LDavHon$WXdA)32-K4ujhW>l(rNxWK^y)RC7}NE&O3~?8ook{;t<4lqOxKU?B~d zGEX!HBoQ}Td%FhMei1c_{6|{C4hvk- z-(#ldg7hS`$o|%v97mGYJi=8npQ$zR6l)``seN{4luFpaH|K^oBN_6SdtvJOPoI9r zvD7{|=xC{OTi}26%$ogFtRa`V;$SxaJi60a+z(Z}0=+%_EPV9MGpiBVFlfTEVrgEPz{3l*|t-^Jc=1c<)o#L$o9aR}v=?|kY>N^gJw-yo0 z1+IAw99U5^?#qhw0_CP(>XFOK$pKbA56ME;Z!%uJ`czRj|KmUyDTr(He12B*Ik{9- z@G@cVk?9+(X6rz$rbPlBO3SpiD}V|exn#{lA!(XZiSV_c*}BqIF%&Dxf3_iA?V7Bw zpYL(5;d8Tc{sQaZm@%v7)+!7J^UDIQ!HJ9QG;Y)%Tv`*#*f*mL82M*)^x; z*-^YEbn~AzkK|SEbIE*uQrj9c_~spX7Wmw{ho|RqKZ`->sk?w4Tpqm;hs*65N(WSGk%bCtFc2c4)o5Iw z2CakSxr%sP5CPT|j(1!xlI(b1Fb8uEsJ05ZABo@GDl;BwB`KnlZ`AIie}-goDorj% zU-Tf;=+~1w+YjC)9pdJb(z+hz4!r%#147q_VHo*J|_Ow}UDB1(Tl~G)-r}7V!Yelt~Kz_*CKZDEwC}tfA7* zl;oi&Q?FSX&z&XB9LCVNHyy((wZ^w(zV2Cn9yO`93x1us@9-os{GzPE?~>`5K+|^9 zdf{dYv%d|znM#w`ap3$;^bA>&ggo|4#c--V_~7>)*%qVNIidY`sR}J1m-NLZ&F`|e zDK0#xki=WuCy@}WXBZ7*F(t)zUPb)44W@Wh(8V3;=;VjQCkJTLzdMDJbEi=9Tf~Fz ztf8pTP%*h4Rn!CmN~t>Er{wsol{m5yrSuRyIyZn-d(oBrr#Sci6z6_tzzWWS_1P;C z?B0!D$G^=!peMiH7g5T!v2h}96b;XJOy9`|vYi^!dKf9@YI>d8cqVW5otJT_0_v51 zlzM9}u=b6_1z#5d{L9y`A|#;x`CjRY#w2wS20lRl9pZ9P?f73f%ejWi-DbSXEF4Y5 ze)6(t);FE;PkU1f(7*E^6^SOsi_ju9NBF_1^AimQwLf(K7T1l?90fxKE0eRix#CC) z|4EYssbzVMG^s}h_IO^W-f{K0%~Fc1ZQGxjCO_ByJWw`&d7dtQHBmQlzN?F3UlY9M|ws+KRWGS&e!5KzvJR-;%WB_bjPw_*dcXl3%$Ok5(rxO=T zck2gpbv`NV8hL^;O1)(pxw|!FtNd+Zf({6lCda<%h^E$!s77Ut6?`kq%>t1ex;c$0 z4)Ey3(=c6Ka$1|qsO#N%%bLwBH0DQ=nMO^fSb>;a)9!}MY$^;+f zi?1i+j%r_Bxq}Iw)@*O5^_jbk4L_2YsImLheEh_)f{U;Ys$M$imBNiK0bCewA3lV? zD_LOs=b`+KTE$%CI*Y+`#m_6otE+Zw*Rg9=euQ8ese5xGE$w!zAD%F+u$6(3;dHi( zQ`#mH{IdY7)+C+z(s+XWRS5}0j$3tfsX72`>LHnUkwZ@@Vh5ua(HOe{d8Z}qDQZ?v z=S{IH+;;(=%6F@0Ra`oyVYbSsl!cSqP4Ct3eFYap0#6=n@|IjQS;4_6j|s#k3I4$e zaglT2fv`my%QArT?zEa)ih?+}$$}4fduK^eRqSB@+AwnKHK2CDiSRv9X9?YgLOTbg zgnxH(_$5;&WRb+11$is0ij6FH=88pp>z}loY45Wdu^WC5p?!*)lh(BKt4|woeLrB$ zbe-*1<0LcZBlr*zqwOp(#8(||aj@B)_@u}!>D5T+8w2@MoEX6MJUcTgz3?>TdzT=) zU-U=I<`>WzpD)DG6*k)zr%}G67aoE`NoZ3xX}XkmIuGpNb+1sk?~69e3xW%!%PwY~ zOWA-rbz<8+kM+j=0%OGMp(nqM%`2acS9H~^Pk_A9tOBW)8C+#kZ#D4^T$34@`~V}{ z?xYHXWq5bshV$EC`oGu&`N1Z7rfKmjG|^$aBbV+YzA37;;uRjX9^INOF$~MbEQ(52 zPYn-T@R7yO{IxdRQn2qmT!dT7pb13l3?SnSZI;orD6K^M&rGbsRX{*_so2`QG8@#) zNOZfE&!LFyTKcVbCWQwg%6htzP8gefVCP-H*!*IyHWy;f^jNPycWZ^V+hfxE2&>6K zugLw_o>*707oGA#PjP@9T%Yte7{;oUKm`49ykQPHLDV@B+wRy=zFnLhc4^ zp-YuFFa>P%E8S@RE!IrEQYo`g8=S(2X-QhD7ZKDFRpEl}`TPeQ|IxGScT&a3Pl_L# z8Kxur_s3sSTLyW=uFmZE$of8QZdR}_+OJi^Tv(fsR9>AK@7oPt`L*rwBWv!*;KFtN{qpzH;FkQ}qg?Zl8G)Z?^tYlk!3*Qw8Nu2(Vt!8qg(->9-P zj6v)4e1l#)mbG#II0O8li-hIVbO)o}y`}En_w_qp2o$sgxh+zt1|j6wZi501XlW!j z8Y2rGLCbme)M1C4a!uD=*INiCv`&K)S5ywl3`c!A9ubZmK9Ekf;;wt%Pg1a>7_$?2 zpnLbn2}9B>#Dmx0I3@`H&DTDJRy4Z4Bxy~Yr$3M?=#Ad_NHNLHDOs!v^j*fL+k$p) zPDbrw*M44|EQgReL?*JJ7VKIjgGON1^xgX^Zx`tx-u~v%u85_41Y6t1UetZ`!VOuy zM^S*=PbT>NL8C%cqOUr_Zw{lHjfDhd7G_JrP`wyK19QZQs57HcWZ@E6IuI)KDbcz= zven6g;6Bh)9GdAJ%8&Q2O5?|u=o#1^$2tv{SS4NJyu3)Yme(I~2h>vU0jwnPKx9@BX4<7IQFhvX9|~W>5C@A;5^!rJ6liA@i`lm)XA8=ccZ8 zSy7$~M0-Qi&d0E*v-5t*0B|4i$3~?7M*3GNuLfgh8Vs+&`k@`|Qv#9rJttPNy`Lv! zt@gSy#ej#QYYZABr&qtk&%Y-)u)H`Z12Y##Me7aj+DTmANC1f3JgXb+`#nF9!X(wq| zbs#cdvvRQ5q}bfM1iNjogD?(Lq^uZjaw(2#m=IsLFzXV_lK+UhWMG7=w^A1i4bpo@ zl~wnB_VPoR%}?IBNxHc}?~3xmry(Ily*ktqx`}5;P!~q8h4SeO>2&I|h9C3+` zQt%IVJ-EY`58vDKaRNMEJ8wF`xlFU?90)gWXjHi}EoI+*-Yp<()7}1Q%dBjU$}+dn zC7F)Io2v3ErKV`sG9~Mv;6k!M>}BHi4IQ@%EMEH+$DI!@KeCiNv#;?JCDZ7X4qFQx zQz#&-5yX#dA4oCE1jP-xjrK1{f8Se`uwMkB68yU{oL#3646p1_*$G$b`0zt9W-870 zz>Rq%txd_&f?)eF*rF9@E`L_CAENSsI)Nc7xZd{ytuXOkHIy)~e0K_?j>%b9fIw(ijx)@I7zZi%Fr+YR`|RnZn9Rn48w@c^O@x6KAFr z%4!M>BeG>G|H_ZR8mHH9(HqunGTua`I2@O(`_BFjU)S(!;IAZ1>&;DG_Hpe`*)a3S z*VsKlIXQ@3{`tvk`-?!fN-gxAnz=bF>K&G<1V1*UOPL4Twq@NiF5(`a^{@)-JK=q{ zH+7P{Q%M}QmHZ0`41Q1E-#3V={L5s^_^Wq=ec6x9R}4)Hoo)&o{3lrqs2;v~JgtD4 z89JJj3jH(p5u#GYJW+K|`B4inwBPLAhr$}sid^!8y{E*`6+XUN2xR8910@!IKUF^6 ze_*yic_lY5Ey1p(Mts(83Ah3$gsuI6WjJe*aQoAJ_Y*r#y`lloe%A! z44_+_16bQV+o}inPk@dGZZx8sWcYc$AEkE4hMo|k4i13WjRz4bJvqy_du_JdM_-H`k*zuy`{jhmZ!+0jXZ&QEyD%& zq?6+??Xd^P{*MW$?RQ`nL$tM?ynNxq(34lV>Z3>oYbI!#phV>Z9>Y5 zG0_=Rk%jLOO-dz$&U(r@nWtMwqnZKemunMHHK|v#^|_IWykfJfHvN5 zVjGaBCbbjt><|4Xp}3wKth*jpP<~UgIfy6www(t;MdG2ZpSBJxkwMRk|01P`%!`^O zXDKg<1=gR3A;g!9ZyxQAsi~c3k&~MOuB9So1_ieiHgLereqPhL8r5*vQRf)PHBoJb z+srM6qi|W+hL~qS;f((;dtAxxWP^LRT8F%R<2A3Pfbe%mE=#sZle`{_j9$C#%*bYB zC89+T&UOz|vF*e0qZuvQq@da{SKV(l=3KqGxGi9btg^LC50bq()-9JKZ~zA8eaQ?S zmFt%5@DUKjnLzV30|K&ln=^y#6*cA-({^r7U*FBpOW63aW1>o7hvPLG)EE*v(?&_0 z+LQS*mKG#6d}!!_Uaa8WQ$0m!=yhNzKUoF&@Gs96H3OEWYQT?ra6oKG>s}KT+z6Ii zI1gGLN%81?ptDq&hthcM7`)Z$fN<2~t(GA0Vo-z8rpA;AUg6*I*)ik?N+ZGQ)hxWD zQ7cLZ5=5yM`p9@=WsRgEY3YQRSw(^AtSnlSL6m$$IP!WTcBy+S6t$G_n;lP(ZH1W* z^^y6oiuHMlqP-=5?@pet?;Y64ei48_C8Gm#!}~s#QCn zQx#xeMyXoa{9~wg081{5`DZYpq$u?3{THIpU>=(5$F|F8bD*uD5heNWf`;c=# zAqO8)PE*b@?61JAl?+(m`K1=AYuk1sQ}`Owe7H2mG;o@c%iRZvs#WxfaB8+=XG zQ#Y-1ciUotwcjrNm7p8|+`NPt-RGyPz|^`u_lwgYB8CBbO~!92t*Xp-JF$w*FZ6>J zaDmMfNawsSld}bnGVc1Le?1;CTc2Ac~PzU6!YJ9ftPH8r&xb?Xw~^m(%-noi$C8fQ)HQauo-h>$|)y4E#~pC_nhQ0WL=fy>>;P^5Rsuj5V#=oVFV5OH^QV!TdAk?mhali`mHv0@bRcN zEgNSakO-dc6dhShSOXg`Mv8;yn*AtMIU6V@yZnkI!JvWc4{6OEOO=t2V9-gx5#X`? z2Zn=QhP9pVI%Znt2&+eQ9aaG=_T4_wAK`oZ8&mH!JIk#tRZk?Y)If2jn8tZ4V23=r z%1aa@>)qS!Q*inP$Vfd-{=Ivw|M`La!)=+ZC8>}KO zQ~u|-B^!t*dGaS5U%xkzXn+=qUWo5<&x&{U&;hlNOy$dUMtN^YhDvy6Z>nuKNO$fQ7O|=v0bcA*!OYbT+Ua})O*Wd@?n4Qb69Ih!i2U9! zl;e>x^FFB>oSSt6(u%WJM(gSUJtz0Dn<=a#iacYURkSgK#9cUW=O-nE_eXxIZz^BE z!X%9sepI7-XP!gDa<>VBLJ<~k%<`~+n?C>CEdxuni!)hFAAk8&b9}J9XNebwEf!=k z&~qj!S1I#%23BD+%`vE|>D!ytLK{>~m}p}CuM(U4(j%%1t5*~Zd6QD{Ke4`n1v~IP z0%!B)YbZA$b7sa|wj5r#10Zd2Ton7^U{*_; znzF%tOIqGI<=kij^bf*F=w%%%S#d^3Ekbg_!V*Ex%wcSv&1b`Fd zZDQO?VfPJA&tS+><6Xt#Sd=v6;39;$B7__dHjlgA*4DEzsW&nz1tAz zx(^&?RV3p3j#ZA(L0-Ae>#)Os6%2G!QS!mEmCmdjH)%h^8`^042UB8H`Cg#{Biu_! zPY|>SeA9bGWI>H;+(QLtk!T_EFK?(Rj*>(AZl3MNNM}h!OIxEQ(Yy-HFXWEDVK>S* zi!4zCu)cBCe^Cis+)Kd$Q9Ghr0O3vUQ=R$kDt>k3W>JTh@%~ zE(WKGRN33r1sxMC)9y(Y$Yt4Q$+D0(>sE|BKmS3kNCg<6P~P3)QyTKb&DN!WHqI0} z+%3!X2XOzp*|)TeU7|DZg#XwF$(Elsk#?Fi`H><2=Hja&`kzBjNW9lkAmOFSHxHNJ z4&Sd)ef_LrFnlA8(0N@$4_5ll!FW%=&K8}jY~P>EA@9p<5nuMFw)KUn?+fmfb|~P# z3LQFp@Qx7IQ+_fayZG~?f_ZW+9;()~wr(Twq@uW0>!Lj%@V8MF6&R$8Noe&fzzaj0Yk@^I@DOBq5N zKM~-8i_W72giQTmY@;5b7wMLW)qZI|ut@Zgq*z?VB-OB(*e#)351V|}=FMXRttWSq z$KgpW0-Iw(aQ#q!kf_Iif*`+H3Lc^v;Eh3-mh`+8HmmPF$kG@W@Y?ix9ZG)=CFSZK zc4+D}ZUr)is06=$T{!_wyF2nE?2kpxa}>Jhl!%y zJT_LP8b$q$DXR0Uc?{AV(mRxWbXS=218;K3^t_HRz{vfsb}K_Z0eA1Cq?jF%Ia0y} zb}wlGEtWsx+SINV8;%Kvg@t7rUWmNpn{sx!$El44g7bbUUC@Ms+TvpfFwf%Vi{5sry^(jDVa6)IE=ihOTT7+<>bj7e*DIko+c1 zMIn-9@R$CXo4BO@JgyaQ-L`6``Dnmc>_l&JZfkRmABlG9b^wK&&;TiUPZf4*;UP+$s{3po7Z?)JQwTh(KKm8kyo>CaHi z94EV!OT1evPGh_bam!?Ka`?-l>iE$fY9w#syPc-@ko$&n zfmx^{2leoC?qd6?tYQwE%2hT<5mW%g7j^sn!KO$VQ$}D`HGVmbr6c3=qHMxM?w3s8 zgD(fpCJl#HNA6Q@1K5RYx^lslUTZV0Dz#BjmyWEbIIEoZO+8)YOL1{=jG~GV-xQlz zR<3XN=2(R+If>uUIvV$|E}uunJw;nw@C2`4PW*Jq^c&Nr(`ZCWVI}nU`V&5$#}T!2 z*a}`P8wr~mC(KKE z9Cvqqud;#y!_9DlO|X@6nuABl zkxqUFB4Xby>Ztz3#9%0saUYaYBQT-=NH}g;5Z*K8&CWaH#pDF9OZGw!8l9t4FrP7$ zYl!U@`|o!06coxO{>01DbzfO;fRU6j8L1$cYrnh^v8ZdOLK=5r4TDoc)ozFwn~UYD z$Zcw0K?65`)h}a?h<+A0sVm>Jps&AapRAv6JXCh*rQv(NDAKFVI8Lu{LvsFZg$e;& zjqEM#H+yLK3hZ^l)rk4+Q2KQGfH3WgPJ*tS2wzbmnr8bQ>N+`wMG<-~Ua9e)A983p z7z<#Ra!ueYB;2W=ecjk6#&J<1q@?qX1{Vmt_SXw=J?_({cUqbQj&4aWTh3z6pD2!X zt@7_RIy!>0dTh0AEQLbK1?K_A1QK@nd(5Dy%kBEp_jh{t(uT_|0F9d;<9RPeOu95F zV?U|DH?RsKK1iy-jJeK7S}AEb857r*;F>+9{EU|FqrH~Yie^G=A%Zo2~Zq}}%dqrQco>muF=wDjTiAJ7Ar{n8@VQVjdf z1=Q||wRs|PVc9AB>}>wjJMdBq40dvB7D1RR(|S)4dg8`M6aohw*D_zKMXeRhoyQA1 z=bRj{S8O#gfcny1qF?yJ;ee_NEqUIF&>&oWfp@je`Kt((R-Y9=TeQ~rx0#JEy;aMC zcIz-`w*WtVGOb$X%G@hq6!079e3{PqL@Q9na!|b>YWH{pJF>KA7$fa7mnDyu`~BNG z!Tz}GjoKk+yw#L%%xthVc+=qlLgSZWr`?fG%08P!G5*j{l*Nzp)lAJ~01K43ohr7{ zCZ8WqlY&cG$R;OkS7ml)42ZOb1_e%UE?w>J>q_`wrB~-$tyJx)KrCr2cF+W`arOtg zs}NfYDM#N@XREnrV?p0fbb%nu0rXyCYZf;$%QHRGqy1hm zA&t7I8TlBQx5uD$PTz0vwIXQJ zJlh5D^V>G4PE({!{Ws?^HrCxez=3gv9!Cp?{b#IH-r{}$I+uJn@J4{CnApK|iRMXK zcD9q8mI8|Tr>~jQgY^PruGlR9HYgmY)UX1$gPCi2|=jldn|ik$2lc}|HP zeA8hLRP_NdzyohwWw0_BxF*a$QHJ~a1){KBBRlZbd-K^Nk@M%zA5cU@?F~$ArLKM7 zX?yd*l3Wd_D&NiKkmEgshtprJgBmxMcak+U!tKdy*Kx%JAOYg;CK*mAS!jv2?Dsg$qx>G%W zjWN!}00rG`dk9FX-YnulNIt8V_da$NPY!{IhsT&J1|HIkcLmZpi;4*hf&&S{f_~*~ zkb33A(uZl(=-ryfz3D2cF@@u~9IV~gn_InGq{tRU@UHj@J54g_C%^ggU-@2p!+ z6*aFJ_1fv$%ivHIT;2T)4~%8?2m5hFx1Q_bl;p`8GoXB92s(No0rb=8`NB_s8E^R9 ze>BRA=&&sY@GMFBV5I2=DW5~KSo*^W&X3o9ywklJ>nXziGkMC6Z~_RjP`R=y0t^<6YzT+(r$6s&RcXWgA} z(2J)XkbNe>91yvpL;I>E$~WdlP4WL#>Tq4Nosc!JJXlDItA$*TNfG!(FyOoy4;ZoKLwg4tyS+^jj3C@GdP%@K|kR7NYe8med;9DsA{SXv;nL z{5>GC{|LvqySesTV*A69^v~eJeZ(g~dBb!1wV}y%p@JAI?c+AKXBF~6duzAWKod7D zO)eCsJ8_`JYzO0w_&%(z-UcN5bPW2I*fR|I_CzToyF-59CdQ8b`$G(&Y}|vpgBMH` z;EB8q?=q!|NcDorLOGa^Q%}PrH|oww4X_0#(EQ~srWz;S{8$l{IqW0rv!%ixQGw#- z;jv3fb7;ceR9vcTZCOT(>(-Q<+xsGb#55dT(VZ>BSZURIYu(pol*_4>K`}Khvpup) zJ9-xG>WO8^=hn+Efj}`IB7)sj1CT=d>V0efHK|7 z>CaTkYHT`Oq+@(2uxvR%P`k0uJ_T5A_!%Xht$A$V;-2xJ!f=6mor=C%;#beM*4!?UV3T0G-N=ABJ zjQtD9V=u+VdFqgvf!~Jr$<6?>O|Z=fXa7zeV>w|_tF=alfgUj-^ejY=54f8*(q6!$ z_B_;tZsEf3xZD5pUjTq1va-Sv<3LC=Vf_6;E&>+l3LQ_U_`W%m5BG$*z-3JCN$f*? z?6-wUA^byK8P~YIJ@GPCyJpY5ppOADy~i0sy^`983-U-{4lB#v>_mZQAj)JI+ieXD z?3wj7UySmB4`@RBKP_sRmm^>b_=l`^g?ig`3oKaeH5@AGO6)zSZ9U%sWNeyemfb8O ztI7(YgFoJTEtb7nL!L@R_z$<@RmYX4zRdH83%`Z*`Pzjwz8YDgx@es4Zm|s! z{LAb2(T|qLj#IeKG_rzoU`t^2>Wh2}sDjdaj=&^@eGKV&`t)fFX##+vX48Ka`N@l< zDw9-MC(Lw9`x_%88g{J%`E#32VL`kC&~)@UpCNj7VY92(smsXg<+U9`%`m}zUytiq zB}?+0yj$GX+~iyuC=8%j= zl;lKt)-|tuS4+!mgu|e$`aRlo$={2jt?tgV9zT|czat3`A3b{R8H7?myiGp-cF!op zh%&{;D6D<`Tob|9xYC$1??E4Cz-s8lYUUB~IVw~8u62GnNb%}@NH<8 z{!LrPHv%GR#mF{6Yt1i%vKIJD!fq7h!$!M*oYU}nn!hKN1(J|)OJxNGgdIPKWqt1W z?gOf#S-l*(4;pus+X#U;BG2`glR~B$&Pk#^*1n`V0!q(gnSA&Ul*X88&TN~#{`#OJ zi5x341@rTho^gD}pM$voG#)Kv`kH4a$!PF=&3PC!{m4+(Dqx>OZ0}RvQWp=sBv0g( z-m51y)B7x!MqP9={8s1?C~*qlZc5p~W^UdDtzddgQ`N@-@f)0+NbKwW41Wq3L|g6^ z#POn=4(?T|BtUv9l3J;{N`WV%Or;e()JN?jCOBS-t@)B?LAp7>QcVER<4+g0p*GC)XP7n( z=5;QnN*?VO0S5Y3v(N@P&o`8$iCGUcza6h*E*bv-RUxzmhv9r|boTv~8N2kRS~@K) za$!Aw$kh*553Z+nx>eP{E8*HaFO^~GPWihV+Ii-NWivGYy{;TiRw>yR2rbN@*GB1ii2-*#e+w z^yFe1w{1@>G=d;d?#Q2)H2M^Y_&SuD$zM;vUPekccq}{n&z%hAW-&_awr_XR3*8k~ zaqqPLhw7E5Wg#5j;i_&;LHfA6tU#^IW~p)U=T*+IxICT^74OS~zTvH;^|FS_?^PGF zj3}%2Ma=i_4DnlaOTrO?yDUNiuXR|`M)%=Xzz;Q!bA5n}Rs|MO3lUK$p?oF?$y4Rh zsavtZeDv!^8L15ABF_HVQe#rVhQyUh5giT5ycI3eSAulq*OGy%(*Q;mltf1S<-^9w z&O5z84b3T=?4tKeSqw@nS;T4A5v6@C z&~T?SYBD(da4J4GSF@>PSBu2#KDzO^sGw3SAiZcLs--+vxnw8H&=T4`Y#xrA*tfvu z+{LITmd}YyeaWxV;({eXJv}iPw?JzYiK@xcN&iYb;wSP`9%Gpi^tS@Fk;&bKp5Oa@ zm4v`R*~!WG)c<`CpxA`Mrxe+@n`irTb^S7Du}N5_Fh#Ag3WDa?^|pwV$rbAR-am8C z$=9r^cYcGl@WGVv${Jf5mq9@NNky%gTrga!WeTEf1hOzj1 z1A}Xhca7CPJI5KzGhUV22}YLBQd6{ztvx=HQ})6L^UAdx9v<_4ElNf=&hHa8NfE}! zi;S*Q&HYZ&B1&7JOTCM&QKW=$axq==GYG0QT&?EdG+kIA;WnjCirEPVs3S;7rVmRnV5p*dvnI+~jvO+v9G?uNj-(!HK%d z9?v62blKQ<*rzJpt82uw-zL+sD;gUAJZh%BI9=2XHy)EOQUE1}T9Tx1*7ua@QF31? zsW>Bou=w=pxhtTJB(-_vIENmDYy*}vczxSr^`_##<4YBRK{aWAXzjMAS$rn~Z#L?$*=XUpD z#e#XfB1+FKL3h$5aL+u{WNuT8Jy020L#dyL4@7#+G58dL*WKUQDMt>bg8kJAmJJWH z{Ws|Z<0?ddoRXjd{5KZs_dEDPay>avVA3Duq>1hOI%Kbq2>$MsezQkN(~8xE7mux- zd%T5v2^NNqT%ccHYmKtjkB#qBVnTvQj4~yC7qhR+w!3?k3y!{IibNC@IA90fZoY(% zT#RN9INy75w!8L}Q38LdMKL_g(1FA%`@OGm%377XPgu}RJb>QmGTYzs z48)O0PB{c#xX;rLB9reR-MIg*_u>qSv`?cki%PrLW+h)>0WW?MR*jnS&d}zkKmtPF z*0M{!clmJBITSHhH#7%R|F;z~cR2lCzSJz_7;__jwA!Y)roF2V&88!ef-$ zo!}gOvsK=Zle^wcQ6Q`#ig)d)7%iKG?An{Q@#gh|W8rB*{+3`+BFA@;MFj47f(1{* z#(sLR{|N*3Uekw|@a$0dW7v=Q)*ab9R+wX1t9mOx(PS-75rN$-+-!Q&cpG!S7|pBojmI z9kz^(O3el3U=0?>*N6KpOOs$9HW{T1A-^fBt@7uc)-ZrBcI8 zm!`N^VWAojUwKrMm%@ZedDmOg=D>@vDZ{c+LRuPb`SU%|o?k540v7W1^{!Jr&rr4} z=fN61tyR&k<2l*09ZmZg7wLpjmrY}p4{nptCbo=E!lF5*XJhnpmT{t-+erhz zXOO~^&AU!B3~OU!CA!vD@7PK(!H3;brFpZGFO*M`7Ms7KYJn$d{9VfEiM*D&)IAbQ zr}Z+ja2#JH=qt3qKkOzLdX(6vkA|_G(Ld*i7H33{@sGGWZ~4s%Ri zv#J*lvUY@XZ)_IIsYp!;7;8+DafCa3=2a}yRk4l?vl9A>pH7Q|_i>jdnw&GQ4(CVG z)Htnrr^}Ezh0-b!;|)N__2pBdgX^A;s7lDK$fzH|kIHdR#wCfdF(E@O&Vg5hs6)&( zOBNOu<vIu`6T-%z%Un#<3m6#uXq0yD)jLP$88GpF|aKJGur)(4dm_3?<6jZhTuXV6oEcamZfwC?=F8q z)d0i$$c}H*$t@e)Z%;Jyf~K|5dWm3WQ6JNL8X9Z}#w-l%jJ13{=q51(J@%z4^h24` zGih1bdj}koMm2p_%j67$AMnAw-gN9#BRer@eLQD_{v!MU)pPeei+XH9$kfUtIGNPhed^unjAzrq1<=Lh8Y^~` z?7uLv*JqXPq*PdO!;h4DcVL*=;zG6X7x%UIJeI68dB6iX7+s*J zg0}p1YtTpt@47blqGT1HPQPdGQ4mNlSxjGK!xJ1x4Yegdf)EdbAx~TlLWdtv(5r7Z4yW6r&w_*2dPeLew)DEd6A6-l#23 zGb)4Ril=}W^Hs3F=g6l;uA#G+vAWC`3C8Rv?uY!Gf&U9sc~tlK5$5dy`f|O~*)E2K zbva@y)Vk4tGKlYYYQ+;Rf)7$r-c-h8P}YN$fDvW2;=|ocANs&Ngq7H^cDiTPRq+zI zZaO~m^vv>Lr-CDjN`lTi3_7tNRlzA_77hEhZ*%2LhTl;ovNFC?_ZXUC3Yi-iOh1SA z!!nI`&DV|A8D3vhH zAFt8b_J{^Ac}kW9)t~OS?45M}!v0R^LEdxIKCv(l&`@*Z=6>V!`sU*9?peM#@B`$y z!=+HhWtdAR{n5OL!TIegdkOFB%Q_wSWb|+ZwPOS-#Y(Q>Q+ss+? z8V#(`3H9aBp)!S*lhe`N2%Q_cpRb}AGQiQcto}A4g8xIsdo$xyke)?oqCNCAL_`sg z;K!3bz|<@3(XTQqdgkkuqWt8Oq>xCz&rMrp20N7QyJcpLcg;@(EXagSd_{BLcHFI) zI|b2k40Z{xyRT$+fa%R{v=QFkeri+EC~0wfOFI2p-HAjP(btZ&KhONuMIZYkTI8eJuZbiqoa?8A(Q!es~@1 zIZDoP0ym!Ur~cu(1zqer&#(89l)YXIwaR?4w|2e^yn3%eJio09y7pw~T}123sZ~A> zn3_`V?u#q;DKxk=Bv8^E)mz{X58S;+^E@=K$hws}+&@rfMUKrpRk40IlRQ_6sT`Wt zJ@KOl8{3ss3h$+ph%k9Edp}b$=>?+;_lejQp=efVFEd7e3uN>D!4U5lj@r?Jfo{fyFQ8q4IYHW53h%0{&lHFzhk_k&HVB#kr2R^WSfV>~hd6ywA1r9_-A4 zh@-v-=O53SYP$!u91G%f2Y>rW;=LSPglVV8bfQ_A5{M4UrlExtps)))_Dh|McuVh(asCMJbZdA~=f{W%o# ziMBD3O_wjCGdHmQn+ojYIA;rnH(+**0F@KJ>2qIdMrrxEeunv{K5_=bEllu_SBNeT zqCyL3^CnqlXM^gv*>ol5L@PCIP>yp@_R*DvN#+Y16P+lVQAZ0D1+#}BrwD_D?1fg( ze<{|XE#R7GX3#DL9Hv3FP7XcU6X@)v02SMc?#skuiBGv@_{?}ijJ8o0ki-Yn1j@bgGsom284v z+-^RoA-^e_BM56;9Y@+FX(l=LjdJ^iOMuv?2?=KgR9pV9I?im)*?3k#gmYCX1d)Cn$$Vd(z<3HD;NG$k;yriO#b9+a zQ<=*l&H%4&`f+FH4{Oshxgt1$qJpBH9K|4>>yo;xnFCZjQfGFb$rbM|2_x;1G1j~g zl{YtdrJ2|tTiV>aFP)BW^guq&=u4!&xT3A=X5(Q*leD0q69^a{k+A<-CY6wpBJ#FB zQ~Uj@(;NeD>Vo-L{Xj=Q(yqOu|2-D9-ZqP~_DM@!$db6PO|q5;>F9aHP%6^zLW$~H zc!ZohXj9sV*)7#~-V&{AmN%GzxjN6|4tc+35>7FGaH4(l$?U+#F9J*xbk*sF`!gjI zm>qgzRZz-u>|G6;tv4tX>23D&02HA=ps3HYQ8hTk**T}Qq@?5mrvqrmX2J!fpJ57D zec|ss&0GBi!wc14mvK+FZuQf8(d6&!il?U+ZcDuLRzD)*FI_&@19zHJC^MvG``c>| z9#e&V(G=XcAz1P_8u?1&rB2#g4cc@TtLSY08~xOr=p(21SHT-9Lv@R!9=OnW*NIpK zTle8ddrf>8f>|_hk^f_efQD|yKTI!&J)?2)+M|#c>}jc8AS&(*-&y zCUFjWi%-W72Wm+fe2r6H&ATg;L+cqpJz{YVxZMIVRxn#^Tz-sD_$0*npB9Tnu#`j| z|2Svzb9D z@v~5M;S_a~=%Tuo+F#56{|UnnG^nRaajw2xXcz!aA{FZ%*%!GXTkiktjzi|>*C@I7 z(obHLcSmWbmXlNTeWgbLhiKvgY_!R;Y%X1C>vIoPLH;zz>s2md>WF`Nxf#D`^sjE^=lz^Zqp&?cww3&1kn3N!{)&z=SO36<^&b}Q z{Rd{}xk0>h&Phj6m|8?&5=X{JwkTTPK zC&2mYf6n#y0u1{|;kwf<-E;rzhTfk=FKA5JO!R7J`1bFdB8;++fUz&~SIp8sj&58+ zc_4I)g-?Iy6jT?v;yBY->VHQsN*?^2dFs)b|CRmxv?OX?6)xplqAtIqLJ#tO?u<-I z?f9KjoYJMp?UBvsKhK~2OVZ7uMu4?>yb@-_QEG`BMkhW)lvU6 zXO-Xc6UQ+WKM}P2dwzn7;((Oj{hnug2BJI<=x=(q;}n<4`J2A@ziRxS?BKs@{2!n9 z|3Nhl`!@g7u?_kBw<0OExe893QJnPZ3yqf3gOZnQ%GWyJme*dP==i#2|6%XwztfKb zkub>8Y)5zUyW7o9hmp~({O6zMB`Doi=%?Mi@=zHFHIx1I@X|~QQ`0$L3%$;-J+GQ{ zoF^%6CIi-%b@i8NLtF#3vHsCzS<&S=k%Eegwb}Gx!E7fjei^ckg^gZ2=X$m=*EDG9 zVwXNUMm6T2_DB9-ZTNVPYkVag{BoK&RhWY%1_Kn=uK(YR8;jlwV zke2MVUw>)*JVhR|{kR@VS7^NrENk@3uW;R`vx;iXDjJBS$gU+T>+COO=e2&?ikI^9 z*1iLmf1UWvEHO1*xCFv-Skc8qaqJ7I*k1hQnT~~JYH;bDT0kq9z2N?9rtzOH+_Xqj zStNEmaG|*ROwa0{bJV}g#|k_sA+(fu@O1YtKmPMCIR8wlSXam#jGatg zZxPnlnuT!_?eP&bOGWYLSFr~p)Tfc2tR)=C9NnmTWiE#Q=4zQ_w*f-Rlvf!k{V9@*Ci*VAWgV%O0SG+9eVM0 z&{jF>ox}c`oc_r_g_A#D>)&DzTR8P{z*-T&YFxS8u$BH@Vuz6Rw#I=dC+ola;pOX> znt8}GnqTJ@3*BD?-B7ssdDG7{uL=o(d0UXIC9Rn&EZw%q!(&2*3gGhs79X1GT)(Mb zACVoT_uNDTM$28{!6HObgj*YX#ubq~{QQ~`Ec}8zbeB?1fm;b(yYZ%D)Kw@qA|eZH zw^$_Qz!r(9_~ss+Evve$c1LYtbF1n~=ee8316c{N>I@_6Hce!K?qsP{n+EZ9kVg`_ z_{dr0b=f8-c=}=TdqjXMb5GJe@~V4~@{cGxxNxgYgJaT>yfT>IOaven>1tN)oH4N; z_ZxkvA8?hG7IwC&lRL{*);B2Xk^3mNSEf7#?w}i&#|=+9u8&J(mdfNU$)^jRCVd<_ zvGeU2-@>|WFZNGFsf4~U@Ds$>83iDivnfXau}{q#4Fr~z@| zZP?%{R}_?>)a-|+`#$7-1`J7y`{6P=1>8C(|!G{XH?6BHEpcqV-O;U2Xb z;o*yoVajPla5K^;LCV$vs<%nrofrwUuFC+M>7gzx9$9SheM1=n}F)yPTbY|W3@vL~fH3K<_CHQcWucd0_% z?4JyN?Mb4MD8J{7u1gk+zLWO5xAy>16dp}_XzUpz1f8zU9hq9;iQZrAWfm4zq{WFt zN?OVs2_g3<(|cha${t(P)vpK5=tFl8<%e5rbZXskxs%}i_x20%jXBc2qa<+J9%L6r zw(yZ%vWhZqUxqwKS?8v-uGif{l#*MfCbTL$zIOlE<}Q3vx??ykT^Fj|*qzezi17u*-85(#z(UYXlu8L0XZ|E<3iD8y{ z9|hvz>)$vO3t$OO525iIaWWj6nUAuokdTuIkLeO*^xNoo3&_%{ebCZMcYfegA}m`j zS1d$5pC$O(M8Kn13u*VEo6b$E9IK;k6{CUxHNi{5e5;>FRuAw|qR2^P^8|L2t$rx% z(4FYlJsyJWk7pQt%Bc*rVy?6(($7ZL9yALu@%mKP80KbH=gEV44Rl1hG9E;|s z(QU+|&SCr_t)1tn5>as5-m>_$$K0zQA8t8MmlP^}?#8l@T+vNawn&w!nl`U-=qpS8 zEq`Y7u~Z{8rf(t(-$eZ8(Vfa2Yh>|+a-3Y*c6YsgnNkBl%M>uzD82O+*J)|0fdNML zB+-Yaq2OgcS+9+_o94BertTKPy)u<4M;Z*Py!fjq(Gd8GC>&0V6fwF2XaKtKr=NLx zVY#7*)t>7?sqK8wVr;2x|59>yhjr#+gKlH@>rKmD5qasy<{{ClzYexddQ^I0he)5P ztvY0XP=nSqU43>>`74~fjJ7HFk4#ZVC5UG5w9*ZJ^PPn*3XeZH*`qhDd!B^TOYAD4 zJufHa?nx>sJA)8S2El>=#^(TqW0uls*w2oXSl8@E9!z!L+-zFn{@k7&@m}w)R`YfH zte(;5;ta-yj6zBL5AHT>BJH=H;LG+CWYyH6tye8-bh0D1s-Ts3e|>h9j~FUFwROlx z;85_ZUA@q&@>Y5sS);wC>bOhbCo?|78|e*(e}#QnLESFM+@3hCdK_@-}Yl0gT9w;Xzq&n zOr*MJv+6#%1{$C0I7O8XtdNB;ue2qKj5GL&W4&`RHv`k6J#*&VrT67oL32pNWCy`rbnUswTS4N5eG#kC((5HOH>D9 zQ(n?7A8APR-1NDD za9>KBJj^Y0hBOlTXHJ$O0+-h0+(S#OTfw?9xA)e&uU{r*siJTE_;NPYo$-35^7xPml` zx8;lNzRqpV9yFU(33klpZCP#>MXsGpOmEJ=Ltl(tA>)E}R^JTrsM(z~@EHfh78G4{ zGKN<6*=#9Xe^w)s);fc`O^yHOcYXa)L(W`}d#3?=NFKO&RH$mQygy_TyXhS1AWO5| zo666v1~~jysD*Ac^O+>9O^%dKC$k~CFl5r=r9)FDo1nVJq?-?{5cFs06G@5(nv^WX zx`^ZCp6!}>dbMw*(K)zYA?wba;$om8pkXZfh6MJzBBS>DYvC*x$oW&{TrfG33p6 zANaBHLb}qh;CL0xqlz_f4%NAkU3{QLu`=IQd>{KFr03-|a2ofq@4Y6lfM{NElzFlG z8Lw31Oi`sDNx=xrneG%>h!GQ@!G!+R%a<$ojR0$Z;fr>C%H&T*o|zqmbWA=ED>!al z-rfQk=Do4q3n`}Sxa0K(>3FNpfD;vH4jc}vE&RG0gJu=aK2a06x$AJ?xs6+ zr%QzwFoL3Z*f-C|^9B|?$KQY08>A0iHOh30`cs(tvw8f>f~-8lHdNCq z2_i==aJBGQP5--1CGiW1XBUXTK}o-n(@~i+sy4(!_7E#>^pQG~V`-@_(vg(=Gy5g$oh3{zF;{KfLiKQ3f* znwq^eP;LMsT=MIu!u9Oqecm`l{*n8BcTwyEdF>iE6s}u+zSI6P4+pKy|1H4&zp&Q7 zdnf-zXaCb~{4YBDZ=VtNUy{MU8?XPbkqoAEso3zIDOc8)yONuPWJVrOOLls1&B>-W zd6!+i9k5a)%gaFhH_p6?iRO;y*F?RwEW%YZ-%)6grCCscmRWP{9b4#zzC|)?Y@bIfuPMu3eREB&eQ&i}`cL7ZHfhy6e56#?H8**Ad_lGz1 zwB{>|o7I;FG)@6pp{*`Sg~!8C?L;l(-Sb#oRx>BASeez7^4fy{yyp%&W5Qv2%EG(5 zn2}L?+|QUU>lq!tA9+W%*>~~1U4NPhY=u;f2Kfn1u^m2*Avv{USYl5e@!ksF;@|h5 zGIIzrp-W9XKL}oLY#6ztmRe<%!h2$}EB(xJ-^f00zpB7xHX>ABiU<|C&3_k$k<}f3 zRfx4DN>bkP_m=^yfQQmz^{8CpJk!yWp_qxwz!Wp;n{tu&(i8QNt0%3*$v3kFIb)7= zQER(3zU5=%_7zSKpTkqfIj8*0b+5gz{^v!08rah)9W5Z?s+-`rMekttk%h!CjxtIvhQG&=n!Rft-|c`HednpL{AuY&^54eVxB)rEHoz z=6FHY?gP&On10A!6i9{FCAC36xGA<-j$&@HZ#m5)WHh|q%-a;RHgLTEv99NI_HT?p zlbh0@w-#C0VHfJ>iVz$~P|ClX8!6@*Wg)4TuYym>=Ig$As=g^%&&7;Z0zt$y^|cU|>geJ~O-WB)m# zyT${K)InSdM@IZpr04XJ#DKJ!8F6M!D2!^+I0ior(m z(YE3vlTS@NiM|2a63rgHJOpEBkAZGW-dtO!jZ%nXL7i4Z>sOi{7Jlwc*XatTlSi_~ z16lID!&kQd#Qiqux%O5l*Omhkmi= zlBzm)=<4WnYcP@bset+4ur?b%JnMwN>*zKKz%@4Bzz@?TIzCvIxnXpmt7jY(i%C82 zL*hd+Y$cT#X)HE$=^AorD6Kw#)Q<`pjFeV}cLwAQQ@&0=ve{2MMY zv)QgMS>9)ws*j=tljeg zG%JRBxW%&V1$-TEmtW`w!zC)cg4c$2^Qf1Z*x7{P{p`XJP(`X5Uw)KpuBtXGBj>1) zk!1#(2)MJxZxC9p(;5T7@{IV_5-B z!3HQI@#6lwNZV5(V_O>Jv&r8hm;0^lA~Z!qwnBzBx7vW!tlKyV_xkxQT;QbWboHGM zkt?FD`S|YA?-B{bhAcw`{l}}5?`lgvrnD|p5geMt^g-p-FLocV?s}xS0Yu>aY}|ZN zdAN##C0yv%GHmGy%B`{2m4L4?4LFkX?7fq2KP7|MoVZCD%TJ<`#cD+g-Y+moX4Z-s zf49WU+3NPZZ~DUnhO3des62DjXTwsjfK{vF{Fm05psDp2Ee)UYR@yt7V^i3}LEW%? zS{{WPx*mf$mJdyx1%-uV^!NM zYIeNQ^vTBMmPv$ug?A9f6=c13pIJ2pYwcXYyw$!Z)TM@#drN0dOc1exagi%YgZ^N* zIQk%&-dB+<_pIl|_jR<2AG%*W)SGD$#VIO18Q`Drb4tA`0aL@;^$YW0FD08wJ=ESm z)Kb=5=qJRj!xV*)%2mRGS1`CT;Tz|2C2;biUzm*SKBe$19o?90s+^FpkFTN8)=53c zRzT@*bVB`+hF73oSsSt~`XT_>6E{n3my|Mx&_*|<5BFeM_(Th+&$ORmqn$9Z$U&*F z^T*dDj9qUYd&e$=Dg|&jk^LIpxP@anlM>HypHuAh4EkETV{AeNtzQ};uIHQZWy`L3 zY0U=i2|0A7W)fl&6mHKw>R4s`Xu9a^x|A`o*>U1n4%I%bK8HA!?zSpUcUAm0%?_iw z{CM)MCGVrq11}3(>i5C-N20=y8*>>K$`wM=eJ(ZLdagcxYp<*krcAY8c0@IPD5*pmDP_)M#MFvon$KqN)y^_ck5HxO;cIZwp>R&N}U zK1iE(60m*B1sb)LJD;Z&E9R)H1OhNQZ{Cg*doyOG8^aEBNo)c{{j1W1M#L%VMhHsq z6HH@(o!du7M6A~}r6lE1h&G-0ON|~&#@*!9(16~l;JKYEJ1WyL2bX2or=HlzKsJvP z2wLaP8Lu18J*i(^cbs(ToLAOG8sY|HKUExrIHIe8o_+CRIuR%KIS-FY&+~J-dYbxOoe-*( zxtTD?7b@DGOP;i?vS+e`W9Bt>N4ZV8*KDNi$K3Xx9(e9}AVLk{#_X;pHGr`bCMVPx z6SjMcc)qLGD-Z4+220{4t{m-%CdjOBo?iQYCRkP@NWL-voD1HaFnVj_SWlJ_$pIcr zaVYv2%LVU#$f4_y>rm`u==xkCw9s10ZD&ph8!mARaZNU>BI<3VasZ$u80YbhaVgS7 z6Pi9CIBt~RaO~mYuAKiIOUKb3SkHb9TcBjS76S6@XWn_(nwmAxZ8L$yTq8ETUEIt? zT)k485f%&v4={UJKGDs@!nU8yixsOGpc&Ud$>`-+i7h??8{y(08mv$LkwB{az-o{? zcv`5a_r`qfP|=e0fud2~qg85jGwf>n*?Ev8Fx#Xh7*{ibc{&bNI?%1#K4x7I{3w`t zQ;U5b5XsAPApZ_Z!tFsjVahvynL<)VFS-;pT zORZ8YRW>ECk}{zDT>G=N9k*$=P4o|v815e--ftgVwlwj4yo5A{>!jYdkkv63)dd#_ zb#Qi86p-TB-F6={`WiwjT3NBBmWs8m%vCo5gv%SFSU+rD#p&mJYpM)HPNd1l!@NBG zE?L`{$H}7)n%&*nTajq_%4JFC#Y^m8%tp>!>PkV^YbW%=2RJHDTwZH3zBQ5qlcCZr zV`*$n8YX!33ikW@U}Z$c1B85TE;Si_)S;0WRXbDZ+&ym6vQimwABaNeMn?1(ydJtZ ztbL?GUsJQwQ4%HxfI8i4rmQdtoaiYS{W_@>SA}SYVLVS)@WiQrO`ZwtIy3nVE-|ZYok?mW&Cdk9d2BoY0&tY#oOZp zH9qWwwGdW$N59RSAQ9qiwkAKk5R3Artp(w=^37(Gq(-8ZZ-MRcZn^cL@n=~HrMs?3 zO9TO=j(cYYR@g#p(@+XO?(P&Z%Lu=`*FWk5=gaUJN$yS!i4sP70`aXMCgksLx^}#t zc>lZzR#YD(v%;&rBs_OX7a??*W&r+<*;$=$K?Em%UR-G93zs{ZJt`3kCgkTT=AYQC zD3eL%!)$oiSmKVg&u#WDBm+>A$Oo!f1QN&16Buy2LQf@bD>2@OB#x~e7f#UWI5+q> zZ`&snsozfe@Z|`IoHXN+uj07-0HKMKb~i7obS|b^9SkK$$XB*qw!||{9A31*(jT$Fnr=AVJVq1Nz$v~jRLjyV=W9RO zcvRZ~bmg58w_}o$Y+`jm(`hptxTc9sg^D;oR3edP0$T(^Jj?uSoQ{%Y?`av>x||c5 zHY#i`$>lDN(M)VaW`13(m7m-9tPm6kRP?zg-H~?hA}%AG)h`Lv!GCJ}*3nv^?|xlt0HYz}nVa8hzRw@s zE?h1FZSh_#!44+!H1-7xkyL9=9$}^K3|!A)^(2(8dYHgRnqR{6S&v z{;_Nq!2K|Z4?f`O999NW_RtH;N@Mpx?MzlsW-cG@Q5Uss(>{T8)uj^96wth#ley)a zySo^qi5cyUqS(`5FrkLTV1jV?Zi`{d|DH6YVaLfcM`*Ua7_46!&Q*>vtTz~JXtA+_wvP1MD>h(cNim zZXXf?_th&uSnm<&DnTVtY&Z;6lQE}q8tF!3R2cH)}Dj37UM=!3VE7}`tFryo%?GFr*u0f!xHJ=0D-f&zQCAr|s)j!Y^ zCA2{@M;s>}&O#!`^tb>g?5n73l}XE&p?TyGXhG!mOajF*7NE#3w?m}PHYKA-?b}yA z^lVUaE6=jcOfx690oN^$O4lGFsRtowV1iot)_HagB3*meL5#B}u-RQ7dPXXWFcBFO z&%?`xrib`-D!(iUoFVOOm>Jf4-II7zB`rwl3W;>T}-0nGWBx?0(`DpK{FGw(Lm%T!lcsViL zP#XMn)wno$$_QF$G8PE@J&OCThL(r1+i?5Z@y6}v;Xmu<0&L0v9bb(kL< zd#%*0=(X(gFXX_Zl}lgDI&m(osHK%Nf>lbKm1v{f`(6qK`N6r)C^cotqAi`Z zyZdk4(GdOSSN~963eoV|)`H#{@|qnl{k7XM64CKX>9QJ;|&xb07&CVq{XvzwbhqYUu-Rc^Uw#ep{=D)HJbnj3tX ziY`l=hJ%!)#)U7F;%{@*#w|?TdIX1y5rDkR_M3AW?C)#oI?J1 z&I-Isvpvnjl-2M$!i+oXdvWhx>`H1Mz*4Amv5Lv6ms)Jw)%bmF_$Zhbqt*4>Pn8v{?kOxb!&lTijmw zba^<+*Z%M61bS3?V9^{m>OGE;S1vG1NN3@MYfDW&-&zKA9SGf_(a}*yS`7q#t=Db$ z2KGNT8JjzRW?GpM-J4y+&_T5rS(yH4){}$5v(q-RZ!CNMUnz9!4LNLCy?}Zl? zPV$%2n+#%ipxMak@d$mptRis#q4UP|&J*m6qwqmN z{6W3jCqs@#fjGt7Y7wPpp}W3^KhR}0%BWVL&bVX{5^|n4#T~%ylIAXT{Tbbt5}PW) zF#!{`m~7d{F$(XfV6=K1;^B3s`L`%-OJsRIm1H3{K#8{2kdAEBiJetDQ2-GGHz<~h zyY5m2H7i?fY|;pF@)L1ER|!QY7umT*nsUMq`i#XmhSTarNROj{LDHK0hxS$wEp1fh zY1U>28ka6l+)QM#G1SiFD0DjbQD$8!Gr(uwM&p~BPTnK_50wim`U=>#!(Drw{w=et%azr=A60-*!Va-e-{#UJkH}ookL< zTU8mowL%*mWDw@Ik85~qzr}BHe{e`CbVAYs=3cL07ZvxdE||L*wO{F8j)I!9yb6CA z5DYHSW{H0My`m1g!ZAM^|70!}a}Cm;xo8ps@KCNX!e1V_v!U1mFx{}4mwf-Z*%i&c z=HGaAvXZeicvk$hdVjTPSv<=q)M2ZG$JF3`73!+md-@5}G6R{>QMIjvqsN)~#j(wh zJ6Hauul-C#ocfMQ?DVFA{Jo!i~$?`3q{JhYTK@3DI+v;Jugg&k}WWiw;STI&^@5EcxnEH=Z%ebHbfq;@Q_ z`j^f5?1NpigQC%osh7*Id0Df?*3dx5S~QeFXtr@+t9$rWRk<<0kqDsuWPQ%je2U(% zp5S+Opdg9yfKm-%oiDwbYHViYD6u^wvGm3-^>75Op!m{`O$j4Jbze@7^Nnud9j3eYgC1Ll%SS&xG)Zq=U}OPp z9<<(kfY;DxM}$A*1)R}*VCnAl51TDHO;@$T>$MQZC{H-?@n;qjJV%OnE-BH zEB&(e9Z^baS5%QH;KG_{(mKB0Jh=%>NNmi_Z#^hTXDqb z^X4wht@xLn^)DWbG?_bFj&9k3W8Gw%#we7F`Jk>za&)kw|IP>5gMrax2^_zAw`>k~ z13FoI0+qYfAnYDhnP|?XT-Z6|0odxN{iW zEBEFL07#TWe2Do`B~IQN!c4y4gAz0Ij)}6!9&Z*|=t{cJk`13}Mif-~o{*SN)f);j zgANBBO#wt(dpBhLK3=`^Jwq8~&2BROZi8J9GW_aZ*QSL}B;93{$*Nwgs$+5VVbc#} zTeV^DiWsWI?Xyjm<6!Rnp`3v%AL<6<6V_3Aeig@d(2?w6heKzsGV1u2BYE!;ckH>r zP*A3so88HsvFbk5EyURc(H7~Kp$%u#`&BGROby@IuH2N@2PYC~;h(Q&-Yft2mR zS#RehU0DJVb3q~?#!7a>>p^GAz@9(_qqw@BF8Z;^kxTh^a|J^OmVPdYGk1HMzj0aj z8u5-t21TyP9`449t`DZUX1aVyx+A-@HbiBGK&Fn#@}_KXU$D|FaD+qYamQjCyEC!+ zddP7x{>WSNv+utcHuO#4*3!;&!#g2E@+1UNW8dLGf2XqzjvKvMCWd2|1>)SW8X=vf z&gSI?Hc#4`#t%M5>Gn16+3Kt=_fX;<3XdBQorGEC931e(8eJ)&ozVN*(G;SxIBe3% zPxJWGTL3cdF2|GI#mkk&sZw7^xG6s3-*Ns76QAv;&ULE~$}@GL?av;$^iSu==u}dx z!InSJ)cD=q)ZSHSv{&J-^gFy-a2%@l;JCdu?$w z`;on7v5fd8QecJu+(2c`WZH#CtN5`c5x{}{vnVj|vy1ntaP8-%u!P%Ebylf z@pWA^)pj}*8o+5 zu$rkXd(gwRwx^(k`&%&)xguYUzPdL&?yKe5J{LZwZs#wj7~Mh8XG}iZ;cfU+Im(3V zQF147@4mgQ<-31TAGs;JajR?AJC;xvZBn^q;vy1+t9?v%m=A3*PPsy;U zH&$CYk|jFSIO98382+C0K1k)jrF>u&wI6<9vA(>PL1l=XUm@V$oJ}eg(99;l4*EY#fUSlF_kawmr4-*&%jDm=@G6 zXbZCyDj6#`Ttf<}st zETfxe6lvcyUiF&7?l|c*`rdnNG*2c%8lfOCi zhj^GNUbQVWn^Y2Jlv#NqyoPvD%&;E(B%RV{=53ff^-^w$dvM;HjIDd@H=kGceLlQz z>{ADsf`AZ=r5-J=UArJ97^R)b;1=J);~FrPI?a_UW~ixc)O=WY?`YR)_`Y6_A`d3| z$h@dL!(CeD(sMo9_(wd0_lxM>LUM+cOY<_De~3`98%QnYujWc1T0Vf zfbh*ukOF#v)@P?{C=d{&WyH1b)#d$=f!vlpjv3=uG&P;HpGMC?@f3%5Qr%&Qnc$9G z-^(y-zpW40OhX^`@+qa5nppZD29U#!J9ui=18_fH6k`dvro;M>7d6|*bE3}2@3;@< z9ZYU2KQ%vy@*i=Qx$>F2|5&}r?T~(5q0AXzidey+Xst#MYMywp+=wQ7&G*})ky(F| z7Nlr>k+@zzw!fafjR-Ph_o)?(-pwP66G7QkmOWz0cWQTHX0h;WQe@>wTSUGU3+iJO z+^Q1cIElvhyNz5utao}p(LOP~_<+&2d=jc!d{*}6L3K9By^oeuX56bFK0SrVe-c*^?DKDmXBpX z(Po%LBU2?)S$GP`Mrp`BIfM`2TMmreZBe&R1Szs5S3w%nKRk&TXmv0QB;ozaXrhq(9k!oG5DHH5$epM0q5o+0bz041_Hmc78 z2~Rc_^-3N+`l4+aO`AQcu$eRbqdDJhYDen=J6i>04;!Q@lkr(sTgfrgjq#SW7{`(~ z%NH|PZ(|iO$hbZNajV$gKqxj#=~_E4c(VaDSPQ<0Q`{2S4?MdyS@3tf1r-X5lNvJX zW5U|#Un6^|$?Z5!2CwgXH<5G`q^72rpqdHJHD0D_ug(W zuwSH0F%)%JlW}=h@~lO%^w_tS8-e)~>&22}bc;n`&O<4903~s};I2)d9%?qm+cLm; zh8+uA|C}jlB&h#1U_H!icc|aIkxMnM$VjoXoh?M;Y*KRT#gl9dxpLP<8NoVASIG5K zM>dW>0c?+vo~ckvk@lLp=90h)NGY4Kq1qi8h?gzZ1St?xhIO)-7{dDFU++D7L^H3L zEpjvap*!!Gt2DR)+26(*I;q_+B$o@P^Jd7|do?BXA)nH_c78tiyx#hq&C#MaRB41% zXI50NGkWVa@1WaG*|UY-b|T+9CD3-30znO6ZG%o@nNotc*qr~UYu6Ih0%YRC@!k%7 z`sI}DWL|3*N}`1x?kEy*6^!ANJ^GRF{V9!1T%4`S%=h-aa*))f?BP@cGLr)sScArL zUJ^Kg`UieJr>yx(`z+yLH$BYbs$#0rK`^C2jz%vFxtXkjM_<^y|t4 z+Wt3FqcF8eIdB(+VgDaJ+L?^*^)(0ew!)q54=9}g7N!rN`2kpE^?;_<9peZCU zFT9UJA}Uz_kh3!eho=$t3+3mEX{yc8ZfEN~d4RcR&d^J+m~g?i>uKpnU!1ajt+0ik zO`Bj_?(Uq2CCI2lMd^uXA-wF?5l+#LJy)g*7CbN-D#%n>0%{z`&%~OPpn?Vu_aZ_u z7K`H$)`~*ccKrBzN;6jzd%zJ9Bi=h|Oqb6b75`}-J_NLqfN{KV4GJ?ih0jk*tc316 z9o~v%4*M?Z{&$NiO7C;k+1INtd2N@4Hz#wHU{(y=lP#)Vw6qCWGAOt)Y(fG@Wj4_2 zYssb8>b1w?Hp40J{gLwNzcytOf{Xh&I0#OE#J}BQ@3Q(hfC7*>Q@@ngiY$wc=2~L1 zsIhOBb!)DNtH5F`ByD8CpfLxzTyyn)jMBLOifUoHD@zXr5Xq)$dg~sPkEn;BdM?w2 zRw#usMO8icP%f4m#Dx7O$ELW7*qr7kUmiJG!qu0btIUV%9Z!-gbdAVp^`A!3iw7@V zJ_-j(eF<(C2TtXfE(dN#+ho7!1C9qlOmGf?#>X1jXqvupVyuC0?s+py7SVRSM=zI^ zYrQ&H`zj#C571EWXNUAArMfcq%d)X_4N8z5#|?nJ3!(yRa@K7hJ8CB6<5Eki;B93IyN8(N>3p(v@t6^*gdu_LLqRa9) zA`A&uVPBeu`RZ3)j19TE`{%*0>6DUSI}8cBQMM0HT;T0{A*Oe02(u?Z^L#4?8zoRYncuWg^h|> ztMx1hQ=qK)Q?J=_9i^h*YOl$E%fy-?FF~PkTkc15u}4v|;~43{Hb6>erk@1db<}a@ zh!&8F2o2IVkvW0C7!}mOy2-89qM6?MIP4~}dcdlf4K6}&wO^qGWWm?w+x-T_0wf=DC6o2T?gL6TnWg&;H#cY#kDa-`v;{A4|%*L(BqBXdAm;FZ|dM=nm} zUttb+9#A^WDIJ)Df_7sAIEXT;X-KPi0prt6LwoC5#``YX(&lOXu9&__2d4$#+G&Zy z+caQ?yXXOB*JsU%|KjII4bxDQOW6jujb_snt#^Mu{We?1H?%M|QWP9L9_i*~RC&qM z#>T82SO9vKkM)Oj7lObSLl4%LUa_nlHeZfbaX@TB5eB<*4T0Iy1`p`Zt1J`i;oU;u z)FBs2rK-v+MkSxpP5Gb8wXZ@rX^D$EmP+l;K*_)thh)=a>GI`^r5$A>t@rp#)IcM> z(G|uAzL@Qk3NT6G5N~**swET)n6e?Jcn?{IFJ?k=F0w+EJUC1FV3aBI-BBRuJCn^N zb$QKLCzqMs*XtnceMz4=|0U?t+;PTnKgqyI&9@pi# zQ7tBFWwysrqdP%sUVr#g1$I*rb>Q6OTSqI@QeQn$4@x#!pL%|j##B#zdJZ#9FwG>n zZl^sfczr7ZDM+=eH!pI0SZYz7LemZMn_z(tjGV1W>X97*NuwsI<%W$}LFfVUX@kIq z02A6YHYXLi{KL_2F5@R%q3a|^d=*@4^ww2=>phJr@Lt@$S{S2DtgMFp6IE#G)7k68 zxD5!ja}KtdN5?E!@MRjA4%e1;MiMG{Wi>B7UUas*h6`l^D(^l{&46?p@u1yum5v6O z^xF$QVd^SIzg*-f^jlF}`1U!+?BT(fO;_%v9q%8ziXNL1*iALn&6uS>VBP8K{?c;Aa3(k(UB{A$Is7dpMU z#&Ga~8@|>iz-#&_zPxN&{?^$>R9I2N^YQ(fa_eensrgW^{yR~(>1V#vW3K$Gl#&Ez z&0URMO)ui3<)5_Krj2{}bU$Ut_Y{h~2Szjcy76KQB&_Jc##iFYY?x7X#>dy&iaqH< zC1N#_h;hiKrZ!x*lBfjt^T6jSP2-2?3d}2HHHJL(Oi7!m1qSUmOl=cXRpBm|+HN;I z^L$jC(uh182prLm`8c@~W-EGQrxToAIQHEj-ObaI03&VIX1{JN3;8A`2=orU&*yc49rOciT z{64e0yX3tDr9@ovk$~m!sDG0#CC$XrV)@mZ<*UXW*BCarSN*H50zvMxiRPv)BUxn{ zdYIuR_e=XbL;j29U8i-PU2ng%7kKu^7X}6TNiLsKFWuMZ@zv+kpTiqRy(x&6c71$F zaMcv{pUPZ~#&mCDtdy^myi2Hm#{=1#y49erZNOIsAQSmp7WdNUm(XprYdxXW%!BlF z#w~z`f{m113K_6Ji`fvn_0x}^@uXPpQsAtUz8tw`YUh59>ToeuuvjGE_%a&DRu~HD4mS9ud!) z6{c;s`De3rjI9NVm)k0NA5}=S`UyO_pVv~HctugWAH!r7l~{K{bnWTBjR^k@o&ESk zNK&B1$ya=WyUr+vr{H3t)QLTNLUKw4x4RCJ*al*~3Dk5K7TA^du8A}niZ{}hfJeM;JGm{+Y~8k=E#K@oXLT_FJxX?E z*ZyqA`QQC`YQpEcd6R^aFPD4+hy*%&!FFb1dh2bMObvZsZy55WS(mLG~r5XdJ%IQUHx>{ zk@`XN1N0kjsx(k06K5<=S>oUUR`fCc(N^^zgr7f6*tB#)4+qu3%tNS+&kj~Tw3dD$ zj>pQkFuasd?(e2E%1rgRcSjp z&s~%tXjG$7T{9N!wLcL_x2wdFbrf7?7vxm%Hc13m%D8xj@A-w-zN5#|8-w1Nu>}*8 z&aNH48(C&_rh5k~rWDdpYcG@Uakz=bJ^YVN{`pZ$GtVF3Fv5(4RkNVu$5ck)~vyR7)(^=As8Dt7$Io-WQiH(=D#Nh1v zSpOcM5^s-LCPlwTSrWCN=C9#9_3_f>I+5Yjo_Ym;o{q!$W~HJ2hw&3gl~i2}DBDrm znZ`ow^^Le(?$Db#q{v(Tn+7#QFz%@s|X_R;jS)=6t=x^SUap6yBPdo$3BZvvA~ z^HPkm3pu^05)ZyA&Za(HH4|?pSCodv|Q?PfxvnbzB?PeJLvHYgITJJe$6F zxFpKPe)**<*A0mpuGi?Jxeet&D|9j~H-YZoPcFY{>m_2udYq2!%(?FdYWI%+!vn`H z(YTjN_I3Ihu7`Z7jvO+T=_1hO%1s{(mf*MBx`ZuHIh-f5Mb zoBJFn5%5oY{vZF0^~3{Xr7w?vBen|#LPbuqoL=zc|G<@8G1I(Uj}*0n5_$$K)<`cGMfe^ug2wP|#M&duhRMQ9TKsm>=SIs7dni32m+9%~2OQHO7*n|UvE z18i38J*3prC11BN?Ebgz`A`d!5Va#w;EFtr(^^aCM8{;!-nvh<^7ec55fRr6CuBDC zLRe-Vh*=HUTibt(-w*Rz*mAxg{Ev{#-#1W0^>6v@uX=Bs;fr&i`}%>M*waKN{*v)y75^&6X^EcbxRM#wKfN~g>mAoEzK12ziG!|_{p-*y z6;Z{^hGcIS6mTr2r1w{JU-uAO(}O+e_JarV|2~}P$Dw=-@qCeScOuU)rg}2K^EAI9 z{^o7b3E|yOp@Y%hKQ(8rWv?8%#eulBnlpXr_dg8mX?`Uvj!dt)PO85&tr+fWbGXOb zfj<^j^aZ&@0|p*_xVfSr-2hx838)ZB}14xlJ3Beda;!mq~Qf4VN4Q9u+lzuNP42 zl=EoZ%RV?oR1xcv^9mMk)4UUxh(QoD7Nta&@cDQfl74Z_r9WYiT31i-45Ge(#3I+d zZUrx7SpMa#s%fz2YJfD9$}e9yamKRh1c0~ALNXb7X?WY_Y16&d#rztF__s%ri{0EF z$}ooXoZ!d#l25Gr``$VIyU>2F=>#~3oSLy84-D-73xb2|BkgE0Ej{(lJ;UdD?aYI8 zK41#hRhE^<$m|3D!o@=_1wxk)ReSqK&5pY;V5;GRY&OHc7YxgQpv?N&%O(8;?fyPfXq@UwGfk8Kd`^`7ef0>t<-{6L~`?1EHGClc!mAI7b4#meTs~MIRVXrmYvGgc`Xwdbisep(-1mYgrzKHSkNLc?HqkWBu#_OK`fu8o( zhVJltis?AWleRA<6s<3orZ_Rr0n+8}Axxlg&SX2yKgIBfA?rL3Oh?F~{;!oN2HJWC z6Yp>SetsXJbIHmr-GxsQ>ilcik>FzI@Ed(Qu?w!*8A5I1et(*P!Wf!PMqfFI|M3rh z*a5zuH)*`=I^n-ntEO?j@m6^jc}uU!@%u?OTHoD=%f=~?=$j6+*wOC>=dENu{Q0v# zSN_wT=gR-B_U#Jqewx}l7_#8yFgt4%vud9fN!Kn&Y2b?{M?Cd`3bzo}%ZjIdz53c; z6!E8;&#C>q$Mt^dwFB2Wz4fx`@h+Oxv8Yw5SJLapdRghVS+zra zzrfKwK2_uHNe0@%KNosJ(?F{j2I!sa)LHEB9q{ragXDp$uB{(6Qv3KNjQg~G!pyI` zW%f-9bIgl=qx<7&`1l#mbtB&cl5PJ3iqPFnv$#_D$;F9(y|_>LR&&6M=%f2=l&(#$ z4OJr}RZYM6)_?_c(cMgNs5RT=fAd{%{l4j$j@XX<>Baw#ocOXC>HTIN zW>8f8|M~J43tAI(1C!Bzm)HMnL+b)<6HZ?d`u{&)-r{_}4aur4Jso>BiBue2Z_<`; z>DyHNf|kis2%3A}DzzKzk}mmBr!QJGkj_eFG+jqVJkhMLy@9j6_|@sA{C@j9D33>z zZAnbeO)jhJX13KoGE=Pu4*i!@(`y`P3_H&oKJ8CR0V*p@ZyT#a+siBh<7?l2l3!okCJFxz1;>NUA@t19*uEoh%8$9|EjoWi% zN2!t;5Y}%k(ba1aHD#)^J3OXDNawkLgecPdcvZ0`uZ0BNC+TlC3}J+V_A5~hy1G6B z0Yy0tb--V&?c@i<%V-g7e*VG`FO4UlKaxt(F2$JotK8?dZu2eDO{0`z^WAWD2_|(G zuMs+qbFzKyiIpw&=20_fqDD`mvcbLb2RnyGB?e~ueV|vw_XxrCDDgWE<8u1}R52X+ zz>`G2G5v6IPW*e4kKi4T^%G`Q4)MvGxJ(;Cj;Le^-SnlnvrcaNmUlfYm>TFX0; z`~9bVbYB$de2#LQZd;dJo+(*qPzA*{#L~tTW1QdJaVV3>ji+In5HMi;@S2CB5@@l06x{5$etfFnTxoq4&5nM zsy(y(rx*L1q)e>EdICR>LSKjb$k2C+5pLb84;m5PpWhsTbg}n-Zz|{PZL?uDkDB#g zpV4Mq5G0X&hkjgLNc6BpR)Qfl4v6cWjO@v5^iewH<^wl95Uod1a`V90HRjjB$s#5Q zI(+uS3(|K0ot9>B+k!fM@`2mQQ+UmRJ*^Zs^B1C~&7RuaXu_`$^3Xkx*f#RpETyYY zH_?p+wdKZ??Q7bjGR{VXN2hg!l&mZtp zH0fL$;RL%4^g1zKYz-tmhINYVIT7@#NC2ZPjggsbch*4Gk3JPg9xAuMRI)+$#AF-xrnzZa0nPTjJTf!O5Nn6e zFU5~1u_{Rws0WJH7K0NZM>LMZol0hq@4yeQ{?XZnkvV47sj!tLZ|YE(`X)Hj&#fkA zF>J+FHxE8O+>V=p)G73FiYe7Y@eJYAEww3vV!e8@Khd8$4JR~~gmH2X-MhRA-i>s{wA_a@Za;DH?~{S~FmkTG zb<%O@R?gmdpPF16RifCHDE;&Fu-|~Xqgtz;8yF?05A-`6reZqMxk)@!ZI0eg$SN6 z=Tc#A8hj7RISnVhrBi4(k8_L+upVl6*8|6cu6P*0!(JNv#aW|yUFyHB6!K*Tbu1N= zQC;#PdO=6GY6{WSS-fO-OWVb!ow#x)=b;Xlu)tzeYT|E3zIwPSneKZq=f}bGmC^0w zZjgw-dDspmB0{GFP0xR~fdL>Qgq8kPdCK}Ly#0$#ER3&dg zC(QlAQjmbZPos2FC%;#^WvZnxau%PIDC?F0@A3}L-hO_P=kjGwE7bs}wL31KVJZDd zE}1?trbc@eS;?t_t-oB$;!9_qHM|rBC=IIVE=^!AWar!zs6S?yYrnqoOHNSSAV|;Q zNDet$xC=CFa}+8+b+B9X=2O);VdFvzopEQbl(ad^11OuMa-jO&w7P z)z7ToQ#4Y$T@Kj7;;U1mjwZET0;rh6c%oy1YK>iF3-3#Ws{d=Z3a`iy!)5wL*r2wf zNv$S)Y4f)E*bojhw!SwKLhxmi&mM`EgXURD`>(QL5zIjm$@`t+tekXYf0 zX)t2pRm}Riu>>_gCmsjG)a<)}&NOZWqh>`^-P>jq{F`GvQjv@kb6-AjUsXgks;KTb zjVS)~lj{9gQ=CkvNbwh_-(?0K-a8x}zm_jW@8M;Ylc-fHxV4!+Ve-`{c4|iFlT){# z_yOHE(?YMHu^w}f=yJ_8yCmAzGj>Gy{cMER-@Op={O88i+K5;8*ZUGj4wq{&r0+Wv zsI;*)bb6`jrAivW-(h1IFvaWK^Yds1;dm$LlD^ztE8|m z!ZR>@2VA$WDEjIKs`zJK*m5*3Nq2mHSGiDYzpeOm`SXA*SLbw+``Ae9Io8U-$5n1c zT>+xbcN3kW+Um_kh7Q~DE0^#NRMTJs2df~QN%K7jj$CW-(=_v8&K;}~H({pmyMw5en9b+cX50Z(oJs%&ycTkn`m*pg zhHZN6JC;zaovLxA=<&uqmA<0U?x+UkOZZ~4|ArtFO04b;w#$GbFyBsn>h3(&2cS?h zcZ!YV^6q^e9{$x^uR{1HjnCKzO;jE^=I$(lkXq5zZF=aC3qFcCa#wn@0Pa za?FPGG)iHbXk*<)(}MU+rhfuMjcv}z?7ml0ZACzx(bkYPHcn`CYcbzr?a2ye9eTre z^QUVFEfm`tvh~o3R|+4opY8F<`cf_0XWuzqhj^>$evz*dSL^d*{kWSScn5VgbLbY3 zE$8o)d7kfFYndLM-5u%bJD`mc1XIv@3wb8uT^G}wi%N#&_%oH@RokZKAI7Eem3Eu+ z-5%`<)7?1JTOH{gYSnbsysG^Sb1u&bSAus6quc!+m!?Ybt)~3PZeb z;kq%^-khy}6kw>b7x+8d zf1fpekuX0mUA|e7)p7dnmlFERXz5+q!&af|vE~*r%a~mjK@VGiezp13XTgd?r(`2O z^%CVF#d>)l5Y(uGO53%5xZXdI1C)<^2jo@v-;s9^9~Tz{-P!=l)hHwGvXy! za0TkR!u=gZ&tvMrcU9#8ik{4a)hM0(JLx)!pDP$>bsm5^MYSjRPRp7FUrFt@c~F*G zdOdiW#9-d?`dvU|>+^wo$bwJCpNoB5hC98jUkbQS)IIqzkhNSfT(Yj0FC96vQdzp$ zGy4sQPR#m+%dm1eC?Zy_FZJI&`P=i%L6UpZM=Q-ra@C8~28!E{_B|6Lf)Rdim`9<8 zI_{2vR;>?XAWF^$mew~^(?F?p+J_g~b7~ncE+9aqNn%eeg_CZJ%hoTSuUgv7k|x-V z$6^$xDT~i7F-1}-h@^p*dO3nm?xWIPfs11!fDD6w^FJSmUZ-gMkIpJN_6%OTR^58sK`oZ(VQO?n`xsUyTOMV_1LV*mJHWOc7~|a4SY#aw$ROcFRn}&-sl})vbO%_ z4N;b8!ae|dfFx%=O{~-t8|c>VTc!>jd*ytC5)5f^hU(43mIBEn?i+x&3E-j zrLj4v#~>RD>Q$^u=({=k4{~}kn`nydj0QroHHo>C*Z#6gKkO5M|Xx znMv%~v~=Y$-8AJVerYa_sR4dN_fAc%`R6I^7dk}?3^%>d>;b*!8#3%2J^;(&gQ@y61Jn#+B<6muTTbbdU^|3HUT7>%GWfqunx(z`*ipM!hcu! zC1VRcuIyW|wX-)H90;Kwx&iPpU-?=z=et|8jco)_ zo$bq4UaBX~qQZ)VXgu7*dVO}djVmVpd}F#7D0*TpjtGFxNI1g9YiW(Ud^fhxN4}7H zDgf8#Z%>7hD{r%lJnr|o<^^b7b9@08=L{CA0cY_?#9po2;5ulfz2P$6RIwX+Vjgx! zmBY6`1++#>(hA7`8MVBB9GZsYO5?gFvP8Bs2C(?CW!hR&;7|@QenydMU~o7uUmOGU*Zy+7TyuB z-B|UWEaot|BbAg~?J%&)-My(&7>ivsADr7GV(i9<%mR;94XoP;W)~*JIXot5#`KiZ zRUXGNReuG0>pKUh@tR=r=aDri&@9-gSiF086L>*sd3=Ybsb;?Nc$nqEo1iTq@?c^^ zlK#q$K^W^;-&2{6PL6RgXVXu=xVsGy0b|TKo%L&1+kdWgsX%DMPNI(1rNkMrP;*x+ z8}rB4Btn1ZHqwh@Bc?O&iic#)7|jA-H##LW#3}a?j9lKt z95_@Ul_jyd}Z)lMh}GdITcw+U+*<)JCr9*hHy!y!*F_3gdu zuvx74fOE)$uyY=I`)b1M;@Fz>uK`StR7RL1W>4;3)}_2?Cg5iP9moD{5%cS!vc0`L zQdN~t_Lb{-_ObNWRRsHfpu_K;^Kkbq=zpd#Equ{I*2WsV2may?HC`H?dM2|_6ItNYi2YjNPhFGL^qcEG1GBJqqzfA(-TE3#0wvrs1kZ;qpRMihOBbN zNyCD}zNw$wckzcB{5D=WnLD%Qx4}>LU1y*6*>@dXlU({tn)i+H+}cwQ*qEovBTmBF zQLoNoLm-={F@dA(b03-brl(QfwyHYN$u<@1)GI`_ZiUjt0i+w3%2v2LUvD*NtPMt8P)op-a$2;;Zw-;5&YP$4MqxTP-D5J=A< zuwTC%WS+giDRV;ENPN20e8+?I3my~CsYXObWJjpwG*h}XmEGDJa1{@Cn%0QK;CWHd zLPLQUS%mZ~TnH_-+dP7OOc?>pVGO8Z!PDq9>$fldVsX^?tQfyf(1y0JVn)`0hR5}#TpGQr$)9h25D1ITfUz7?AjNLUpOr;C%&~~?@AS; zC^gLFnp;f<--2o!A(s{_+A5fCUb!Oy*EW3t$%pM(!#o)_zmll z#&PF(7hCuT@@<=e(HnRJbK4pHK)od4Py4s7Q`325rimM#2-rB0Ox|o?_?^A$%tlhW zSbFdC&pTH;#T`l-*Wpoi{uI7mh#RrzK`xn!-ULQ(Ega%Zgs~%eX<%S zhz%S|Iki-g?m?e*Xp;PBNkP?X?LE~F5ENDVsyskTcNhoU0vafE2)T*1RxvC<_9(J~ z-Pk&KTd@G-${M#UPHIGRPZ|==+B)uQpo0kT^$-+|sN=-sUb=cW90sYc&KpQIu()hN zFcRExn&$5~8j(I{(^;$ZvgD+|vx4vwY&5D6eU>!bg#K>X=;zZTJ0mP}ska|L6;7#m zPC+=5=reXmep_UNJ_{1XCLf=chC!)a8V8{x%tSM?>N$tV7KtJmbmmHvBO>XzIa7j# zqagFW=?*)f`MsP@0++1lS0Aqv5QEr2b^W7Py=Lo?v$4L~}$a3M1&x4E!=RNps|qc?V#L z@M6!*`e(V?NI<*3|Fdr!)D=>z?|QL``ibnLB8GZr7d~sJ@z|PdKqF)4BOtK>8h*OY z_?V*87W5Hq^3Mc2o#J!IO`4BC66i1ptTn~6&Y6l>X@6J{afL|BSg4zbUgW%$ELmCR zNaFTW@H#XtugZ(Td8l==wS`~w3H(LJSbk%-L81w%*O0k1XqssfxC6{XM&1`Zn^@w( zQ(;!0Fzy4I3%iEcck~Jf3pwry%q|4c*b_Pg-@}l?96Cv<-dIFB8Kp9!kaWt7dT0I> zGV_ScW9!@t-dU#uRQqwgGHWVJ5K>5VooJdAZp;gvMyXu6w(pHiRakUU=v)0_M!+b; zRF?@J$Aibav*!)X+HGq%F6T7wS>*V>iJm}49l*=Yeo5{VV5;_G^~~eST1^oPW6%Y%lIEnqFwEPo!*0T|t>B zOLl&rsHs3o7JtbE3)>e@iVircH$etkqGp*cWWLjXJ%&v;x9|{o0V!|DbkS#e0a8G< zNM}DL7Lf3ov%!|*>E7kqOfTAYzqmm5gT~nh$8eg7fn(){--NsKv33nYw=1ZKL6`fm zfWM*hjXO_QA*+^}J~aeG@8(~qpe_!&H=*dZq%RhWe`>Qns`M$l+D?3S$%sjVx>h(4 zIjeeoqccxg`E$ExFpoEr3sydHwm?fg@1j?HmK<(b`Ybx(cYxi!g`Ewp^Y&LAl0>+BT1!j0z|U zvl}%>W2SdGC^aMB0}>Y~FqO|5(_6j911`eR_2;?c4kxhCCyqKKlfTO2KwYJ%))(y?(m~pvU7xe00ovBs9RR)3J$cj2T z>1SJC-3-X1-^blpat`YQJ_l*Ht~_~15k z@!e16(}9yPl91vV7`=*n<3TeW!Kh%3Lo(il{>tkk&Rs5vv+q$E;WbiHxui>!nnW_t7{h*UY{MiWApt*~ zhQ_IURZ^9mGXf26?FM|#p_Tnv znkN>n+0HA&5S9`sGr(iyaedykNFFm&e?T zg;G0qShK%uS21{WPY7y~gG!bvAe*#1a_ZtZl^&aJV$t<_Z@sHi?A+qot4)mGL@Lp* zmb0~`E=y5y=K4&gPaU8SIHDjE{)npCS43ue6 znbmocUDAO+jv|hzi&UbkdwI{|N{FV^ua)<+xFAQDP;X9{mun}UT9rw2K+LR=RHf78 zk?A`-qG7?-Y|h>|R#Gb_J;(6m1?-QpEfI^tLS&!u3?M4QR0rNG%?1aGqVaQSrdhi$ zGe={Y=;WjcFE&%Eq3 z>_VFebV^4Vy0J>P?JLjx06nuW21uqr$0f5O)lcm#9)5|BRjl)=D_$I^^f+7nZu52> zr90>}CDTYesU>bVdutVOuffx$Wft*H<;bs9Dl08iOCA>4-G?}568C`f58u4)$nveHRc?YI!F6l!>pMS^BG2*|AXH5|=X_t<)LO>fJ97T(Z(c`j zsQP_z>d=JO%7dwQgYXvmZM*&llNJy>!^>6tK})XHF+Cp1A7J0|O>f{_ovH5@!yIns zG!*ASZ@6x6I4>pC9{nrOeHb`?j?iykVk+qP>m#Lj3}P%9&|x}mr;HI#-$<`^h+)>4 z?h6cFl`g`{PUH|HHgaOpRQlFOKRMqA4(@+UalG)roo%zJ-}?DNEh!6^Pn(T8PBDO; zR9rcja&4){=W4?&)<5)Q{|J^H;$ELQP{;w8Gk=r10vn`q~> zv<@FP?Gp&_w&oG1Dbca~jQMhTk9{;;rsMA4#2GUT4_vB5H0v*KOU~w-cmp!pZj7`s z87TzU94h9tJ>1*~D&KMDwP3naL=5g9qXTcOHGOTq6s#^iIC}8erpm>rxWhU|u$F-D z6qbv+ETso3F&6g7Flw5S34L?^anoC}Lf~^59HVYkjS!Fsk7-4^0Sy#_N z#xPHlKSoI6iK&|kl?;xRd5>w%ykkqGJj^uR!31vo#q{=hf49pjujKNq1b}U(>yLt) ztZ7wsz;r}dEBko3Li(3>@bDX6zvn&f3S;1OwRzfIK3SSwikg)QhMcMWgx#5~YzA`X zZ(B}CKe1pR*ER@0jv=zo+6y-xLclJYi8;|O;Hpd^HS;1bZ> zV%KfoEFJlFG*8_H>FVQr&YwC}PXZwA(H9a4L{@ zcrG&7R!bjlF-7_)OAf`I-pj(gW=dnowv=8g5zXNBh=*}@jY+zj6vR8;!KhYFxAmm^ zn3hauy?`BuVc<3_YrdT8!*ZZwPr-@iqfNAnN1EowPhUh}1(>I-{o8Kx1QUZC7oG_Szql#mv8CZ&!2auNF%aT z+yWK99i23PJ*b~)Me|0j+sIm$9qGi~si`RWoJnznn6C)E_}i7+uBXIAj5ZJ65j0LW z;E}#gko0zt-02MVN2Du55 zg0764Kbn$tdzmS{i_x#z{#M+sujmx*3wsKEPx67;`%b;Hy0nNRP|o3A-_u*gN%}FO z0>*frTMNO;r6Y~N5WM+~ijfbCBCAdC*3>1x;+(tUPA6|NpE%|GP7!-^GFt$)+e~0Q zw(sG8h&Hg_-Y+hqQQRI@66>r%KSc7~no*=RByz z;1D#dEHdlq1-9vs!kwI6u^_m2~_E*^G#GizkcLnuSe z)}>Pn9HJB3+}w%jypA_$$HIT>2-!|$tX+Aa=kWw5oPJjon&J^P70GJu?-5w3Yj$TQ zz+?#2fHSE`ey(CZ-ex{~cxZ(~dq@UDT$pZe97CT)dDxqdm^OlkIiI2{6-RG#1wJ-z zD5{%S-z+=QVDC=GfVswBHyvxILYN|6yfg$|`bI(fXm(lXQP*86kCmQMTraGvo<=b# zPbiFzqQw(Rs^Ed$ImVBSJ)67tpC4Qt`FO-STy>CaSQErt-kF)k7w%9ySk-b4;|AMd zb!wlsIzCeXwH+Uq!7udBH${KADbnj@ns*!-jxeZr&L|OZ6Ha7Y>cQRhhhc{)t_9M4 zb;pwYLi15LbR8k6nI~;km~Q0r3q_dKTlHNr*MjN^LXR`33b1q{{Ve2+-{My5}7P%wy@n6jo-1a>ZD zXE>pL1xwyklS=y4ubJ2SYCx8kqP!6f@FL~a(Xcd_=WZG{JMgK^PP&r`w1P(HP7o9} zMp~m~OoOc*1Y}k7ps;}|KUqDuw!40571K>-EIE79*38#Q^@t|T{;dw%S19dSK2%DJ zNi;^_t7PDgon_^x!{U@!)8RM5c>=*rhim&PrM}rRzA%}Ay?30i&tLx`b%C$iB{QFb;t3KhY1r(Mj=Q$HISw!t3aJLw;QRolTppf<(Ts-Xy3Mys{sxmoQW zAZ_K1YNqs)ADPyk4g;<3qAE-*Nh~%^&ekv*1|a}6M9w#T(L57DRG4nC;Pe!Dd#8%J zd>l~v+=}DIlK<@FbIE_1{SB;u=bK``Of?tT_i|LeihmRa!aFzaqzDdWkx`CV!&hS_0DN z;W=l<`U-LYF=WN?tE%s-I!0;VAz6g0+i{1Uca4B>mR+N^b4ehN=`lCAX3p0p#qhoK zpq*u{m9gqfB;500*bLv7XQi*=`=t%A>e+UzU3=dvP}K#ekXM-cgPGvOAvmbON@~Oa z#uK7N7NdJMwR7_Pbu!hh7E4)klC#NRqS?Fif8)O>Gkv#AlGoANH;A5!Jh<1Szu5PX z>^@p3O@ZF>Pp4bWR4Du?SoJu*l|K6>y6$yWr1r&UwcDr5O`_ndI{r!=RrP7`{+%MJ zg_;1P^(W;ka}Ls(TE{O~_OCdK9~wO~ zkSY?plB!(qg!V`sxElsD?sU3VC{n8@;?ykf)!kO_x3YE3)~lva?8gX& z+~e@)b#(V95u)pX7J46X)dg+)&zvJ3mygZ57rvg_*X}JDuL=%0q{^53xecqAW$;WP zvthoZrNV}y7h@uoM=sgnhOhZPV+%u^GSJYDgL0wo>mLIL=&8#3pBJ1(ctY{%2_w>tQj?=94I?$dS5x<0IJ+DAu+Qr3ZPK^E#nQ2P z#I=wd?fo{+R~$UGE{Uhm>hGm?CYO7Kr5CH5>f7HtRX%JH&>rxqbV7iLANI$^+RY^U zoQ9sS<~KU*D$0Doo%ovFpn7!ljoX*&lc#{dovj?9)|Vx^>L4zoIkTQw7z$trjZS*) zKIL}evtJZ_22z!J(8u1dlqD>k!jxe?VwF1{FSA!@IF!A%zCKK)rAIveYy33T2WcGebS zi%)Vk9_B#>wHPh+&vJ4J<}qcL6$$r>7yqoDy-*iP&6~GLycW#szbQ8BIls!huzvbo zk0vH2p2K2X{#|qKlCcF~xE<>OysnK5+xF}J6Py2kLF;_c^e^9xDI9(q8x6{12dP(x zuf5v^tJ6|g!lc&ikdd>CwwubLIZDJ(1Gjk33=YI4Q=N^}`{V~+;o_5Xu%< zpL4Tu$)WU#%&&~;3vIE?Zreww4^M1D^`PI{nmXg3oL9!cA(lthL&;2_)%+R@YSIy@O)H|gY~x_!_pQIhjy`WCfdlvG`8Ec5g4l@eCca zerfb175mE6&6T?DDD^8I@|EUytc^`@BXYpm zER9p!50oN!l{p&2IsF?f>8--U*012&h0Iaz&UN)gBW>pRI`mY1tSVk>Oe7ad5UrPtFP)aB#&R44KE2Sx!<&H;%`m7tMWIl z#?GyC!OP2eA^R#DtNsn|MSfoK47cmQW!#v?@g1e71nj$@|I^wG`6o_o(Z>b>Xu`QGu4@m_xI!Prb`j6%wSfE#0xpaK>vZ&%b%#G;LgH7frdA6@2(wRIa zzN*m8TBxb0bhgsb&@hpt11AUQUUvA7ruXWFcfbFhG&;^iS9hRbM=WodYDZFo-CA}1 zzXxW2Oo3Ly(8~BF){`_UeURdn9C0*bEd9})HwspcUZZL>T8kg4?(*;M`ES2=Au#ii zWzJq^8`|tFKKMvJzD7Jz^ZBG*@HMh}uQ26x41W0&)~ZAuN*Umh%9aMD-SezsEOqC7 zZmC4bhE@+_I+V>vo??hFSmDSjKZLiTHsK@HQkiL7*T#;!9dhM5sTgUdqRqKwBHVME z?hMv%AP1Yd(^Px)Q}HDQ$*?}CdR85ex4%?oYWb(Hvv|eXfl$;DK^~ej6=gZ5JoW1s z?8`2*vP4vco~<77ul-!6xEBK8hKPbHE z*RJk;zBFoXovM4M1A-YJ(0D1$hqDon(q+=3QP-oXI>EFed)nwp_RFjikLA?>3oCQ?zzg=3HYjYazA93TZ%2Fj|pi$%o(Rf!z}+@-LB#mAH8%F?H|g7 z{#E#hd3fF^RrbJ9&156e|2(nGar5=Z?rY*D6U{7I(8ED2{Q%V5&gWJeLO9$+{A4z$#u?F_ z(PVGUZ2E53%M{bZpuvS{b63io6Z8BQTO{@?3^-fD*6?ZL2(jTximm{g8BjMtDK!*< zD=1coSn@+40!%JIkqer1)ptH1pPxR5F+kK0SG?V-^+J&+(1x)l6fV}bZxR`71Cu^6 z^#@l{X|g>m0omLJZ>;DsTz_E#8$WwP%vZgZEqzxkAxNY{b7R;HlXTpmL3$VJ3-hmd zu~!@{K~NvTphnwvsxxIKC|it2tV3(754>dINudUAVOQjt7{+p34?DQln%qN<1~T-zgK3(_9&dV^ubJfVZTpX>?b&!p8hpH0>Bg(Ad-?hOf;d zx}lXbW#r+*z0RhaqaJy-;;b^+0O0xsK?7kiaWn556lM{9SSSu{o}@?f@y!8m@sns= z{{-%lK}^hI`>4AI>a*tN-5OLs!v4P3D_=aBy&Jf(;iH^-_whYwLmF`-P9tR_ ztY5pd8&U10O;X+R1j7StaxvN)i|w;|{rTE~tFP;1U446)ZPeNyVQ%K$PW_w-Zom_& z3z<7asBv$JgG*|;G4XRr4wGPPM&_gKuatTUjt@Uf!%~|dPd)>vRM~#k2l+w~l1GEz zJuGl-_w9n|U%7urVrA6U$@&u;gF4n<2mqS44jnKh2Xjr_V6#)PgO% z%=hZ9XxJO8rJG;%xxr{s)i*F2NjHReMEq(3Y;PV2KU6Cp>RmodbEM%|IYD|EHf&wm z#uu!pwkh&1=f?X{2;N5Xt*aU1R~P?O@=Q_{>x7a0T$Y23*Vp$|Mp?Moc4wp0YInJ6 zaZZ=KcT%3O%+I>;<@h=Ub|p@7F9$r`mfxS*A*%u4@A)Y)@>halw;RskrTlZPH>1gi zTBJbYB;1wBQjNQ3uLz^xTfqnF)$|3GatIB*{nm;7(vtA{&l@e(L%|I|0tT%hZS|G9 zZ?3FWq01RtS&4gDPu+@B);JW9Cx3a2K)OPM+MCoDOaj(r{MXPqpeE3q2P19&6o)2p zZ|7-s)W8SV>bUC_0u}ggbP%p-E{WpO1(1@&yMYQfJ}lu@Vn35DeQNQ8g82N4$=#A- zQ^Wh)2|_v&-)xD9-528{AEO?KX_7&Qvk3^ILAhQYuTw&`*9y~N6y0_1YlxEXh^Y&i z&D+%+UbwX5kr`JfKC_>4Di}+5_VyB*&cJaF9nnfmwni}tUY{T$0&)$z?!*xK>V|wH zBVZjBZ)A;|w#nt^pH7fo%deE?+qmSN9n(uba=1Y}0IOGEbG9zU#b~4V2!*%*a;u6Q z2q950sw5D9na|j}jVZ;~ukorMj9j?wXt_IJo8=;jUfV)iQ#@cTTH140bnsWc0^avL0CcHp zz{avJ+|iUj8Ikn;gbfK&nIUgiDqyQhsDQxA!7^_T#%59vQP@6f3r7yPmx6kHMVaQz z$A)a6gl*eU;oaN11;T9v0P!|Lpd=BVdFAzGVf<-2O7F9?p@StwCT#*ai9MC4WfcKb zrkF)lhU@3A&d=69NrWBFkiP%s8E{~ig~dxQ4LjEkZ|FqgZ|s9T#~BP>?guC6#$ zD+(rjIR71JmvPBOBN$2Sw<~=PiB`!E&Ar4cb4M@frf-CXkndg~_HLKs^)*9%mG4=X zO;oX8{Yv~nU#?p~|9+rmuXDroq`i$0(;-6hq+VuaJx^?*aZ;)=AtqU|8&(PJkRwhq z_SHVrZjUGF%&unFi3zQRJ(|pr86EYB?O4;r+DmJ~`EL1u0f(VamyaEIdym|l@r zOqB)t)er#1f9F+FLQ}B##E~mgWsNn$%kx{Z_mC!NoTt~D!nt%26+=qv@%+);wAG*iv#ph#7--UvZfktE`3@ z`EgFUgsEx1%F9rm`2ll8$9k9GqXcQRx4J4Z@Pm+2^eb#hX;|re+ZgOCx&R4t;ScZWHR8y zE1qmWFV6%jkC8*nqX!}t6Ks8uebSyGIH!%G&(8kw8>JvM$ZqL|RY{@9))vp>ySa`$ zg+`hdV8VzX?kfNl>^cFI`eCW-d4J5#<>N)kq z>Jv=u<~2t4aZ4xnwdY)#O6w|i8>8cJ2}<_MT!@s!7F@X%R)%2z$uj7rBSQ7fvklg( z*%;4ObMpSmoC!^W{XMCBeWNA$9A8j-dT`tH+va6?o_+Yon42wW0fPiV=2t+0AEIQm zv&dBSOGZYI9igyT+*G^MJv7f>+u)l~K4xAsXF!=}F4wI@W-9Xt#MUONaMtll4HKLy z0KUlI&(u{K`iS_R1k~_+Z9*x2yCPxNC6}4Nl*WRlE|S|34+}I7pFD{0i{x8KvoH19 z2J10%Qx?D(U$!MlS-T_Hzyy)E2;O3>LAGko?_ zfBEQ~MyHp%L4zAMWZ~wHXUSQ+Rk=ah4ri@GLIH?GY%uR)0g|(3#U-KJTOzY4+TU%?McO zQz_YUg+y+RC1)8+u*htCVQaG~MIpimLqr;Mu#Sf@fQf<`&A2gdVl9lgj`7G(21L_J z+_0(TZ3!b496BV%rgr) znb*vmUVHl0A7Ki&j`cF}F9seI(4M+3WwCv0cVcH{pxrklFyN_Cbf2(>gSH2F+XU4u3^MO1x7~cz6LY4-OuI6 zY~e~0bJ>YD`?Fj-o?-7(2SB6_5WQa7TYQudX?x9 z^m*&U@sqyww6Ec-yT{R;9nH--_AmxnWtH@jB?oOOvSEY0p&K=5lV`Lt=wpZ>LOK0D zG$>~HQT?YC&v3cPfUNwW`H3^xDfV5Yj*b+7N$m^=hYx#k`(f((l*s|+CoZ(-90wED z%S%L2U}lM=!u^ z>Mu_=R8Se}=s+~waMMyH*MzMJrLr!)#X&U$yjd$)s&`6XUqLk4V>y1=C_+Yr80ch; zoIg@j(qZd9K~vWt_|9a{Y;QBg7OZk}03W}O$ktnmWZW7Y$HmKIitd?AlrUA8InWPu6dc{y6sty* z;N+^{g-t2o6{#I80mFu$XrHYI4bGP|yw9)O z=)vk;U?YP*Pi9bAkC~3Na%!&UCFYS^#|cgZLOZzHV)l*3XDM03iq{mIXPrf?!A#dX zg09-<0ENih7CyKAffM1gU7#)jLG=lD6lHV(ssZak2s{sT7!puBF07xdr@rjj-qL_d zk)I&tQzGujuP1nMEQ-%&il&z&<1=ujA-&-n02GK0knLJ$b%XnL9NV-lec_ z%<}^NZTEN=NW#MwQ`6-r;njMJr3ZT(pUz<71IOrmxL1d!EeX&~yn|9DK+*#ie4zh4b&9<<;3Pp}GZ5?Y@Mb$ngE_r@PkMdL>}eXljA@%y=0dSe z98g`SHgQ+qH^U`h3g82{!i@)amG95&xrhfS{GxnU$)E8BYqeu%b)m)^u@xH6u1GKU zfq}9QIt68M0uLHtyCW9VAG$adH|{^)08$as2AY``V`{j%e^e?{U_avsNf0AOvZ#qU zC#f7<`*;jyT9#_dOM@1?LX4S0B;0l1SVA-m74qXZx=>sF7QA0!{W1 z<9-%-%Q97Mj=?bhd`E>Yi|~}gD<$qE5jG9juxzeLuc*87NCy;RQh_k8)r)R8>ZB`K zOzu(|)4~D32sw0jhF9e53x|~5=XQGrwf%{of#J&c6vxWT>vR|HDP5f3Tk2+PQe*6C z@F#GL@EL3LZ~DJMNoby=F2E#}%bN^?9Kgs_4X#Fj&m%q%lKQ04FCvL`GxsTz$uama zz%pYqUn%~cG6jIOm|j10_b&Meabm*D6>iTp=Hp$qbIT0@pgm&k9mkpo#nF7ew>{G32)1_5=Ivf(M?KPxPnAk_WIWkcauol{qE_W?D zm@>xQtYTp(PFYtO1mDg3PRz7e(k2yaJm83b1;Q^HYtF8loey^eBf6e>sD8~gm7(mS%kIhFHg4nv^_L}r(l zmD{;$sVyZ2bvG{;mi>xe_7kP>w}CI(MNI&d`fArISB0J|iC_*f9A4?BDPV{26Csf5 zgE*}rnz`d8hF!f&4Uy#Fo57=dFxVK?Lr{NRdG_02szxs}utb-0WYT&_9ceyXC;O&2 zze@@dnZT3EF5|7*V0;Z(ZC032kOUET(w*(R-AE7@kBklaM>;g8=!y5nDiO^+*PI^< z`5M*YA|v&?DUGR+3YXmxPkjsOHE}L^V=qQ0 zhZoP398cIM-W%QATUudDx6_&+Ls$IsY$b+&MMkS6!=&nd9(=IWvfeh8H_K7e@P#9A z_G!KjH+H}r{H0IRtqW2k7AtAzTn+Cq#i`NeF^0HiqQubMUtU2$P(^TPU)ZbmSxJa9 zSMGtI>YFvyod!s&TN%T5Cklx>yVJD^t+yw+XQnU0rg~~K)bwCG3Tzs4UohZejW=k?k!*MMlGPevqs#U&?rmjV2y2AmW0FJXxzWAbJ^uaz7eEs z)45l-Ttr>x(TTav;Cz#qEh|Bf#3Uy6aefnY#ohK-eT6oXhNOO@5ii#g-PPO1uP@&( zO}bvUe773Nfvo|7WSE)X??w+VtC?k|( z^>JNo)XZJaQNQHP?PT)MV`CRb1um~p2&HfrH?bC#tHzgaUTx;?ed-#PD!}zOIDY8er-Q3<1KI{tUM2Y#VwNdc9+_>0PL@V9T4?J?pJ4{uzW)mPTKe^(-7@~H5$Q37Tq zE!zB_v9poq6F#u&(g^*};oy7UITZl=UbzCrGS|VF;o zd+Pr0Rz>rP+lNDb=Do~G1`OkRwq4r~Q~XvSTJ6}J%2M?O^B-D{nH&QcAVr?RIN1e*9(e$o&|#_ZmA2 zut#sc-t-`{kUTvCe^g2icSus`{p$Yv-t7W^*2~Wd{H{+H}Ie!* z#(!|KAI1G1ejd33Qn2hF_3-^szF*vpQUC5$GUjtke?y9=07)t)K1SN5NIi z0VC>1?Oufc4JlYm04b;xKeKcG4I}!$!jzw6D&3(8v@4%olQn()cP7O%S;=RjWru)48L;)9GH3=l;grSW#NNx4J0dqSk&+d_DGktIXd}`zh|| zFs0z;G#b&+zm6fUAvBNVnYoiY!7TjuxfQw7H6tniQm(2eN3VYia`Q}}^=SrT$~gc0 zlOGM`XaA(Rbw1T3ZrX7cn+zzx(geZI^Ot53{SJ5wFtxMBOW)#%4Z3=5`_M0P89xv5 zcFmI^JygmLi};I@gQM%*B!NrdzoEDUr6G@N?%#(slGdU|EAY1YAx0X6Y>B1A=4`x5MpgMKqhO%qxncE9D?(t5qcnJqgc_8J{ zqG6AxcA@y%jEe8@`xUGWe#0E(bmZu%lLRTnAz9P<0W{@wQHi;zGB z#UG#ibL&4lJ+E@)$gXtFxs;o~b^oiI{?T-FokagvKN-S){Ma0N(aQeBKSceHeH}Y_ z@(V%sUnBaDx4B;eHa6K2@A&^}6u`L@_kaT`A6c zccdp8U+kxuo$I>z-^U)Zbmrujl5Q-n==gtE`T4x>(^r2rMfoqLZ;=0dw0Sye!jSR5 zXb5Oh(xN=N?%{8FJ>oC)S)i+Q9wAdw3*-HZp`@JvOk%Uqp6M@4;z1r@*Is5mcA9@N z6zQ|TehCxSd*x4V@$;}gXdMpOU#i1(r~JiG+ywwL>!-;!{0lR?mkua<&~G9gIA`g< z-a7XH*o5XW-+}$XZGV>Uyi%47pzOkp8d=bP@9*T7d_Xr^BCl;v{i>Va^`+zmC|e)x z&#g@0FWKoM|IVUeML@ahUQ76;CzZjJ#3m-BlAadeVE$3GUi+uos4tmkBp(50>$K ztnZR;utwYun_e)+U#TrBFT0<8XF63sh<|yq&JgonW?nX2@niQ-85M(OLLE436@0%y`mO4xL6}BuR5e;i zVY}yoO8C2{QQZ=$a`P{*t|PN)=6#Wb!43s3f%K*so{mPO3(;%1%FWu6w4vZ0=pGlembaE*XNI87B*mS)k-^U7Q73fb4$AD0KGA! zZ?BxI;c?5j@sy}PUcB7>paBa6NxV!o#e$l}0UJ%zmSQzek;%vRTCf?eVf|P|`!&1G zDz)isyR_3<@;3JAUVS(BXZ878R`@hBbPNLfqGucZGIvz#AL>JmI2P&^5N1KSujtq$ zo=x1ER|=->j$$FGrgybzC!N+(T*;B~`dI2rB3|{G#BMFYAKYi%F)y{~)yr%$R#SP| zx4GU?V*7Ay|CPL15Y)E!!$-y@GpNy7nZuillhVfK&wqO_MC*qLP4GpgUajug6w_AB zU9KNZz%iQpJ811-7u~{w0@oU8zAAjf?*tjm2TbS?9=bq}bG#CWh~mK4M)Y5x*bAQ~ zygpVaImI^VK4v;yASf(gmK!}4*Nn41Nv^2gI5EFta|@4?@fmumbL015eJCXDc&D$w z-UZ(@3Bh2zB09eMojRJ-UqGcuMu)teMuPJ(hs^3`W_Z+Z?kDed!Ys)onJ{$`PNvb7 z{z~8YQqPfBGH%ahXxJ`yf~{|)=U(%E+bTF|Qc=)dHgl8q!<1)-OBwwlrfjDZIMc*W zEiaV1iGusi^O8#(EdD&{#E#rP{2^xq3D<+b`!sTP`G~;%PXn;a3MaL`!wn|>R{nj( z##p#uYuJqTzS&GOV=>LtgKv!DevkMs3hDa7_G7uy7Mvo z!Nz;V*KTu25*;8X^SYzzS)UL_U{>{^rCXe<7H18M&mYf~i{l;~`ez22w-}te6 zWz^gO^!h|#2S=D0Id`jNo}*q{upv({(WN2GF#FZmX}hGFokmN;K^PKoj#ncsCB9#S z-R~{cn)RN@-po~V;T$Q2KQ7CntwY>qxuB?;YqKDka+L8s9XD&y2)F9_4iENGYd##TeYfz?@R&l7o!<0kBIWog}LJVxlvbwPuUM3ejtt$Tf8a zf=qg7VtS1Wh1h^IJTPgnyeO|7f2)ZmACJ_Ck!8BFwwo)-3~VhDO@+;5|41<@cvl_rf zD_`T~;JOr-Nm@*iSuso546Q-?fNA?Pe9P`}1xTj5EvdcJ92@c)Qm1iy)(bWZurV4h zMy|D=;dgL^BPT6;XHq5|)&jSuT&6tlPs5Zu2w|C|xlzC`SNk)`qH^*c-tP`VH;~8M z*mpzxu@4Gf=pxeyYeX@I2S$kUgY}LB`As~k@Lqi|>G^77ghykMojGlGOyo&7$g`y2 zAaqcegZVc0f!so2=@;<7LU{F=%k|o?xd&#?1i>CF_f3cfnRVvreCq zEBd@8=d^Uw+!5nq%VEr5?&d>&8dGGPWK2k8ym?_7uJ9c)EP{y-xm`gaHCvq#Fodz} z`5Y9x5o~Vo(f#4+DlqSOs$5B4Tm5e3)U(X}Zz)ij?d&LdPAUck_gXXAKs^2+TD;yR zGh;d?Lio!aLL2H(^XI~~+80R>-pS1RZ{v@az?QSLLVU@imT+l@Xxo#%l1FE_c5~H1 zd91tRb_&TF=>SK?Oq)b=76IPi<{-8DWYodzPP~R8BDb<~qE=J1Z*jkIQy2r_DSTkd zMdgn%>yMjtfR{{+$epN8dU5~dp)Jo2i7z*J53+mV+EK1U$$8H}#Ru-wT$pl0#QvbX z!w}zZ3+iw3e5EdJ+taUdD6E%#lOcx4`Z!zo4ohC0?CKM(=^7XFj5n+1>2+leEwAE@ z$0f7{0|orH9M-@h?xfswoH?#3GFi!nkm=m$?NYJ8xuu#A6KRt z!ZH~O_3Pu~r=XqbO)8JjEGl*8LGwJ*!`Tc%N7t;`j8+Ck(_HsYO|QS#qFNgv98iOf zEXI$r5aJQ1Z_5+pb2-FSW`xeyDDY6E@mAb*^bTApjo5oB{;q^_Xe*NR^T}kem5$_`kPW9fSXnL-?$+qJ zR|f&1y2Bh+XQ?_8L>Rb($*z?vLyv}>GA5)l{Lj}PWQ$KciYEt^%&3eRcUB#AhfU**y_O*k5Z82(lh&s6Lepjr80ymkr} zCY!{fnD1>wYN8JSFZO&im1yMGQdb1YHn2~A<|XM$Mv;drT=Zqrmj)av`my`E43F%7 z+iZpSsAZ|aMnx_S@zt-x`Jkr88^m{2P8;&u!x^T_eNHuA^5@g`-(4_d3-)W1pFW^I zkQ8K)CC|Ro#HQTeGt8y^)3$O>$6`LUut{B{i@#jRyOXmAVYhBH`xI8m6uJd+gusyk zl6DY{)VB|}mPUliCmUhkY!Yb&o1LxpAv@M* zzk@YKh#+F()x|)uzFKbIz;jL6jiHiE@x^){$Aw>JpNU#RtTFq)p{9J_Y^ZCyC*S(K{WS9)@G`D4Ee`m8#@5dK%r<1$&4Tzk57xD}wURuqE>;*r zXqFQzTvsiMZ2z!XKUOI`QFJdOwT@dn$W&=Lf2cM9ev@RWrVR&-iD}(BCc~MI1F;+l z|L8s)+CrCcD~(A!l6`E_^V^NR@SVxzBqrga-SNqwk;vaxY^8;iwr3~ya&Q8H~6)FxnqUC<+I&=Nv1Opx6J+F&BnNmT)whLYh^_Rz^(xnn5#j% z>B2v3?l8syH81ydsEp7`ceMN3A)qe07Jtae2rm4(G%A9L7rE}XYE@kxOd|HcR1zDn z1Z#H{VXnINJNblRi+3HX2eE_Vcb~gudd{p(mw?%f4VcX3T`^~;=qZR>^x?r47QSH7 zY>y6k*eZi;gKClo+cQ!q)lu80gS}%L7FwX)Ln1-XbYirK#n*NVUnf7^?L= zMQO1jbHs(@SGH(U2^aak8ria)^+DWA80#j+w7)&;gMT4xLWb)k#0eJ<-x9%&|lm?iBLS3UPZ?d=!sdf>EI$SI#}AQ z`_HIw1=N)W&bGdpZqKtj8*J5bu;+CGsPdMeRoH%UCF6m&ihxi4C-PzS2oHh!g!_tz PfIl^5t=q*nEkgf4&A0~E literal 0 HcmV?d00001 diff --git a/apps/docs/introduction.mdx b/apps/docs/introduction.mdx index 5ed2e1f4..84e6117b 100644 --- a/apps/docs/introduction.mdx +++ b/apps/docs/introduction.mdx @@ -3,7 +3,7 @@ title: "Introduction" description: "Supermemory is the Memory API for the AI era." --- -We built [Supermemory](https://supermemory.ai) and scaled the RAG system to 10,000,000+ documents and multiple thousands of users. +We built [Supermemory](https://supermemory.ai) and scaled the RAG system to 10,000,000\+ documents and multiple thousands of users. We faced challenges. It turns out that building scalable, reliable, production-ready Memory layer is pretty hard. Introducing the Supermemory API. An _affordable_, _easy-to-use_, and _production-ready_ Memory API for the AI era. @@ -13,15 +13,16 @@ Introducing the Supermemory API. An _affordable_, _easy-to-use_, and _production src="/images/hero-light.svg" alt="Hero Light" /> + Hero Dark -Trusted by Open source [8.5k+ stars](https://git.new/memory), one of the fastest [growing projects in Q3 2024](https://runacap.com/ross-index/q3-2024/), Product of the day on [ProductHunt](https://www.producthunt.com/posts/supermemory). +Trusted by Open source [9k\+ stars](https://git.new/memory), one of the fastest [growing projects in Q3 2024](https://runacap.com/ross-index/q3-2024/), Product of the day on [ProductHunt](https://www.producthunt.com/posts/supermemory). -and thousands of you! +...and thousands of you\\! ## Why Supermemory? @@ -33,24 +34,24 @@ and thousands of you! Found a vector database? good luck + - Oh no, it's way too expensive. Time to switch. - Turns out it's painfully slow. Let's try another. - Great, now it won't scale. Back to square one. - The maintenance is a nightmare. Need something else. - Which one to choose? Unless you have a PhD in AI, good luck figuring out: + - Which model fits your use case - What are the performance tradeoffs - How to keep up with new releases - - + - Websites: How do you handle JavaScript? What about rate limits? - PDFs: OCR keeps failing, text extraction is inconsistent @@ -58,7 +59,7 @@ and thousands of you! - Audio/Video: Transcription costs add up quickly - - Multiple languages: Different models for each? + - Multiple languages: Different models for each? - Various formats to parse: \ • Markdown: Tables break everything \ • HTML: Scripts and styles get in the way \ @@ -78,45 +79,33 @@ And in the middle of all this, you're wondering... If you are not a fan of reinventing the wheel, you can use Supermemory. - - + +
- - Start for free, scale as you grow - Simple API, deploy in minutes - No + - Start for free, scale as you grow - Simple API, deploy in minutes - No complex setup or maintenance - Clear, predictable pricing +
- +
- - Notion, Google Drive, Slack integration - Web scraping and PDF + - Notion, Google Drive, Slack integration - Web scraping and PDF processing - Email and calendar sync - Custom connector SDK +
- +
- - Enterprise-grade security - Sub-200ms latency at scale - Automatic + - Enterprise-grade security - Sub-200ms latency at scale - Automatic failover and redundancy - 99.9% uptime guarantee +
- +
- - Open source core - Active community - Regular security audits - + - Open source core - Active community - Regular security audits - Transparent development +
@@ -127,24 +116,17 @@ Stop reinventing the wheel. Focus on building your product while we handle the m What can you do with Supermemory? - - + + Quickly built chat apps like: • Chat with your Twitter bookmarks \ • Interact with your PDF documents \ • Chat with your company documentation \ • Chat with your personal knowledge base - ... and more! - + ... and more\\! - + Search things with AI: • Product recommendations \ @@ -152,12 +134,8 @@ What can you do with Supermemory? • Document similarity matching \ • Content discovery systems \ • Research paper analysis - - + Assistants and Agents: • Email management \ @@ -165,17 +143,14 @@ What can you do with Supermemory? • Task prioritization \ • Calendar organization \ • Personal knowledge management - - + You can contribute to supermemory by making community import tools. Examples: • Notion \ - • IOS shortcuts \ - • YOUR app / service + • IOS shortcuts + \ + • YOUR app / service - + \ No newline at end of file diff --git a/apps/docs/openapi.json b/apps/docs/openapi.json index 1600761c..45d4402f 100644 --- a/apps/docs/openapi.json +++ b/apps/docs/openapi.json @@ -1,500 +1 @@ -{ - "openapi": "3.0.0", - "info": { - "title": "Supermemory API", - "version": "1.0", - "description": "API for Supermemory personal knowledge management system" - }, - "servers": [ - { - "url": "https://api.supermemory.ai/v1", - "description": "Supermemory Production API" - } - ], - "components": { - "securitySchemes": { - "bearerAuth": { - "type": "http", - "scheme": "bearer" - } - }, - "schemas": { - "User": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "uuid": { - "type": "string" - }, - "email": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "profilePictureUrl": { - "type": "string" - }, - "hasOnboarded": { - "type": "boolean" - } - } - }, - "Space": { - "type": "object", - "properties": { - "uuid": { - "type": "string" - }, - "name": { - "type": "string" - }, - "ownerId": { - "type": "string" - }, - "isPublic": { - "type": "boolean" - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "permissions": { - "type": "object", - "properties": { - "canRead": { - "type": "boolean" - }, - "canEdit": { - "type": "boolean" - }, - "isOwner": { - "type": "boolean" - } - } - } - } - }, - "Document": { - "type": "object", - "properties": { - "uuid": { - "type": "string" - }, - "content": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "createdAt": { - "type": "string", - "format": "date-time" - } - } - } - } - }, - "paths": { - "/user": { - "get": { - "summary": "Get current user", - "security": [ - { - "bearerAuth": [] - } - ], - "responses": { - "200": { - "description": "User details", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/spaces": { - "get": { - "summary": "List spaces", - "security": [ - { - "bearerAuth": [] - } - ], - "responses": { - "200": { - "description": "List of spaces", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "spaces": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Space" - } - } - } - } - } - } - } - } - } - }, - "/spaces/create": { - "post": { - "summary": "Create space", - "security": [ - { - "bearerAuth": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "spaceName": { - "type": "string", - "minLength": 1, - "maxLength": 100 - }, - "isPublic": { - "type": "boolean" - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Space created" - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/spaces/addContent": { - "post": { - "summary": "Add content to space", - "security": [ - { - "bearerAuth": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "spaceId": { - "type": "string" - }, - "documentId": { - "type": "string" - } - }, - "required": ["spaceId", "documentId"] - } - } - } - }, - "responses": { - "200": { - "description": "Content added to space successfully" - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/memories": { - "get": { - "summary": "List memories", - "security": [ - { - "bearerAuth": [] - } - ], - "parameters": [ - { - "name": "start", - "in": "query", - "schema": { - "type": "integer", - "default": 0 - } - }, - { - "name": "count", - "in": "query", - "schema": { - "type": "integer", - "default": 10 - } - }, - { - "name": "spaceId", - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "List of memories", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Document" - } - }, - "total": { - "type": "integer" - } - } - } - } - } - } - } - } - }, - "/chat": { - "post": { - "summary": "Chat with memory assistant", - "security": [ - { - "bearerAuth": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "items": { - "type": "object" - } - }, - "threadId": { - "type": "string" - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Chat response stream", - "content": { - "text/event-stream": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/v1/add": { - "post": { - "summary": "Add new content", - "security": [ - { - "bearerAuth": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "content": { - "type": "string", - "minLength": 1 - }, - "spaces": { - "type": "array", - "maxItems": 5, - "items": { - "type": "string" - } - }, - "prefetched": { - "type": "object", - "properties": { - "contentToVectorize": { - "type": "string" - }, - "contentToSave": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - }, - "description": { - "type": "string" - }, - "ogImage": { - "type": "string" - } - } - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Content added successfully" - }, - "400": { - "description": "Invalid request" - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/search": { - "post": { - "summary": "Search content", - "security": [ - { - "bearerAuth": [] - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "query": { - "type": "string", - "minLength": 1 - }, - "limit": { - "type": "number", - "minimum": 1, - "maximum": 50, - "default": 10 - }, - "threshold": { - "type": "number", - "minimum": 0, - "maximum": 1, - "default": 0 - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Search results" - } - } - } - }, - "/user/spaces": { - "get": { - "summary": "Get user spaces", - "security": [ - { - "bearerAuth": [] - } - ], - "responses": { - "200": { - "description": "List of user spaces" - }, - "401": { - "description": "Unauthorized" - } - } - } - }, - "/integrations/notion/import": { - "get": { - "summary": "Import Notion content", - "security": [ - { - "bearerAuth": [] - } - ], - "responses": { - "200": { - "description": "Stream of import progress", - "content": { - "text/event-stream": { - "schema": { - "type": "string" - } - } - } - }, - "401": { - "description": "Unauthorized" - } - } - } - } - }, - "security": [ - { - "bearerAuth": [] - } - ] -} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"Supermemory API","description":"best memory api on 🌍","version":"2.0.0"},"servers":[{"url":"http://localhost:3000","description":"Local Server"},{"url":"https://v2.api.supermemory.ai","description":"Production Server"}],"paths":{"/add":{"post":{"responses":{"200":{"description":"Memory added successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"required":["id","status"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"string"}},"required":["error"]}}}}},"operationId":"postAdd","tags":["Memory Management"],"parameters":[],"description":"Add a new memory with content and metadata","request":{"body":{"description":"Memory content and metadata","content":{"application/json":{"schema":{}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},"spaceIds":{"type":"array","items":{"type":"string"}},"id":{"type":"string"}},"required":["content"]}}}}}},"/update/{id}":{"put":{"responses":{"200":{"description":"Memory updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"required":["id","status"]}}}},"404":{"description":"Memory not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"string"}},"required":["error"]}}}}},"operationId":"putUpdateById","tags":["Memory Management"],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true}],"description":"Update an existing memory","request":{"params":{"description":"Memory ID","schema":{}},"body":{"description":"Updated memory content","content":{"application/json":{"schema":{}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},"spaceIds":{"type":"array","items":{"type":"string"}}},"required":["content"]}}}}}},"/delete/{id}":{"delete":{"responses":{"200":{"description":"Memory deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"404":{"description":"Memory not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"string"}},"required":["error"]}}}}},"operationId":"deleteDeleteById","tags":["Memory Management"],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true}],"description":"Delete a memory","request":{"params":{"description":"Memory ID","schema":{}}}}},"/search":{"post":{"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string"},"chunks":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"},"isRelevant":{"type":"boolean"}},"required":["content","isRelevant"]}},"score":{"type":"number"}},"required":["documentId","chunks","score"]}}},"required":["results"]}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"string"}},"required":["error"]}}}}},"operationId":"postSearch","tags":["Search"],"parameters":[],"description":"Search through documents with metadata filtering","request":{"body":{"description":"Search parameters","content":{"application/json":{"schema":{}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"q":{"type":"string","minLength":1},"limit":{"type":"integer","exclusiveMinimum":0,"default":10},"filters":{"anyOf":[{"type":"object","properties":{"OR":{"type":"array","items":{}},"AND":{"type":"array","items":{}}}},{"type":"object","additionalProperties":{}}]},"chunkSize":{"type":"integer","exclusiveMinimum":0,"default":3},"minScore":{"type":"number","minimum":0,"maximum":1,"default":0.5}},"required":["q"]}}}}}},"/fastsearch":{"get":{"responses":{"200":{"description":"Fast search results","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"string"},"similarity":{"type":"number"}},"required":["id","content","similarity"]}}},"required":["results"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"string"}},"required":["error"]}}}}},"operationId":"getFastsearch","tags":["Search"],"parameters":[{"in":"query","name":"q","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"limit","schema":{"type":"string","pattern":"^\\d+$"},"required":false}],"description":"Fast, lossy search using quantized embeddings","request":{"query":{"description":"Search parameters","schema":{}}}}}},"components":{"schemas":{}}} \ No newline at end of file diff --git a/apps/docs/quickstart.mdx b/apps/docs/quickstart.mdx index 7b3c37d3..87dc84ec 100644 --- a/apps/docs/quickstart.mdx +++ b/apps/docs/quickstart.mdx @@ -5,26 +5,18 @@ description: "Start using Supermemory API in under 5 minutes" To use the Supermemory API, you'll need: -1. An API key (get one by signing up at [supermemory.ai](https://supermemory.ai)) +1. An API key (get one by signing up at https://dev.supermemory.ai ) 2. Basic understanding of REST APIs 3. A tool to make HTTP requests (like curl, Postman, or your favorite programming language) - - 1. Login into [supermemory.ai](https://supermemory.ai) and click on the "Add Memory" button + + 1. Login into https://dev.supermemory.ai and create an organization + 2. Create an api key, copy and save it securely. - ![Login to Supermemory](/images/setup/1.png) - - 2. Click on "Integrations" in the navigation menu - - ![Navigate to Add Memory](/images/setup/2.png) - - 3. You'll see your API key, you can copy it by clicking on the copy button - - ![View API Key in Integrations](/images/setup/3.png) + ![image.png](/apps/docs/image.png) Keep your API key secure and never share it publicly. You'll need this key for authenticating all API requests. - @@ -33,14 +25,14 @@ To use the Supermemory API, you'll need: All API requests should be made to: ``` -https://api.supermemory.ai/v1 +https://v2.api.supermemory.ai ``` ## Add your first memory ```bash -curl -X POST https://api.supermemory.ai/v1/add \ - -H "Authorization: Bearer YOUR_API_KEY" \ +curl -X POST https://v2.api.supermemory.ai/add \ + -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"content": "This is the content of my first memory."}' ``` @@ -52,24 +44,12 @@ Try it out in the [API Playground](/api-reference/endpoints/add-new-content) ## Search your memories ```bash -curl -X GET https://api.supermemory.ai/v1/search \ +curl -X GET https://v2.api.supermemory.ai/search \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ - -d '{"query": "This is the content of my first memory."}' + -d '{"q": "This is the content of my first memory."}' ``` Try it out in the [API Playground](/api-reference/endpoints/search-content) -## Get your memories - -```bash -curl -X GET https://api.supermemory.ai/v1/memories \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" -``` - -This will return a list of all your memories. - -Try it out in the [API Playground](/api-reference/endpoints/list-memories) - -That's it! You've now added your first memory and searched for it. +That's it\\! You've now added your first memory and searched for it. \ No newline at end of file