From 02cc3266ab0319fe92be522aff9e649715a35d73 Mon Sep 17 00:00:00 2001 From: Tim Nunamaker Date: Wed, 28 Feb 2024 17:17:30 -0600 Subject: [PATCH] feat: Telegram and Text Files connectors (#20) --- README.md | 60 +++++------------ docs/images/playground-augmentation.png | Bin 0 -> 118456 bytes poetry.lock | 13 ++-- pyproject.toml | 1 + selfie-ui/src/app/components/Markdown.tsx | 2 +- selfie/connectors/factory.py | 8 ++- .../connectors/google_messages/connector.py | 53 +++++++++++++++ .../google_messages/documentation.md | 9 +++ selfie/connectors/google_messages/schema.json | 14 ++++ .../connectors/google_messages/uischema.json | 8 +++ selfie/connectors/telegram/connector.py | 53 +++++++++++++++ selfie/connectors/telegram/documentation.md | 10 +++ selfie/connectors/telegram/schema.json | 14 ++++ selfie/connectors/telegram/uischema.json | 8 +++ selfie/connectors/text_files/connector.py | 50 ++++++++++++++ selfie/connectors/text_files/documentation.md | 3 + selfie/connectors/text_files/schema.json | 14 ++++ selfie/connectors/text_files/uischema.json | 8 +++ selfie/parsers/chat/__init__.py | 2 + selfie/parsers/chat/base.py | 14 ++++ selfie/parsers/chat/telegram.py | 63 ++++++++++++++++++ 21 files changed, 354 insertions(+), 53 deletions(-) create mode 100644 docs/images/playground-augmentation.png create mode 100644 selfie/connectors/google_messages/connector.py create mode 100644 selfie/connectors/google_messages/documentation.md create mode 100644 selfie/connectors/google_messages/schema.json create mode 100644 selfie/connectors/google_messages/uischema.json create mode 100644 selfie/connectors/telegram/connector.py create mode 100644 selfie/connectors/telegram/documentation.md create mode 100644 selfie/connectors/telegram/schema.json create mode 100644 selfie/connectors/telegram/uischema.json create mode 100644 selfie/connectors/text_files/connector.py create mode 100644 selfie/connectors/text_files/documentation.md create mode 100644 selfie/connectors/text_files/schema.json create mode 100644 selfie/connectors/text_files/uischema.json create mode 100644 selfie/parsers/chat/telegram.py diff --git a/README.md b/README.md index 86722cb..832e51d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Selfie personalizes text generation, augmenting both local and hosted Large Language Models (LLMs) with your personal data. Selfie exposes an OpenAI-compatible API that wraps the LLM of your choice, and automatically injects relevant context into each text generation request. +selfie-augmentation + ## Features * Automatically mix your data into chat and text completions using OpenAI-compatible clients like [OpenAI SDKs](https://platform.openai.com/docs/libraries), [SillyTavern](https://sillytavernai.com), and [Instructor](https://github.com/jxnl/instructor)* (untested). @@ -17,10 +19,11 @@ Selfie personalizes text generation, augmenting both local and hosted Large Lang * Runs locally by default to keep your data private. * Unopinionated compatibility with your LLM or provider of choice. * Easily switch to vanilla text generation modes. +* Directly and selectively query loaded data. On the roadmap: -* Load data using any [LlamaHub loader](https://llamahub.ai/?tab=loaders) (partial support is available through the API). -* Directly and selectively query loaded data. + +[//]: # (* Load data using any [LlamaHub loader](https://llamahub.ai/?tab=loaders).) * Easy deployment with Docker and pre-built executables. ## Overview @@ -60,56 +63,29 @@ This starts a local web server and should launch the UI in your browser at http: > Note: You can host selfie at a publicly-accessible URL with [ngrok](https://ngrok.com). Add your ngrok token (and optionally, ngrok domain) in `selfie/.env` and run `poetry run python -m selfie --share`. -### Step 1: Gather Messaging Data - -Future versions of Selfie will support loading any text data. For now, you can import chat logs from popular messaging platforms. - -> Note: If you don't have any chat logs or want to try the app first, you can use the example chat logs provided in the `example-chats` directory.) - -Export chats that you use frequently and contain information you want the LLM to know. - -#### Export Instructions - -The following links provide instructions for exporting chat logs from popular messaging platforms: - -* [WhatsApp](https://faq.whatsapp.com/1180414079177245/?cms_platform=android) -* [Google](https://takeout.google.com/settings/takeout) (select Messages from the list) - -These platforms are not yet supported, but you can create a parser in selfie/parsers/chats to support them (please contribute!): - -* [Instagram](https://help.instagram.com/181231772500920) -* [Facebook Messenger](https://www.facebook.com/help/messenger-app/713635396288741/?cms_platform=iphone-app&helpref=platform_switcher) -* [Telegram](https://www.maketecheasier.com/export-telegram-chat-history/) +### Step 1: Import Your Data -Ensure you ask permission of the friends who are also in the chats you export. +Selfie supports importing text data, with special processing for certain data formats, like chat logs from WhatsApp and ChatGPT. -[//]: # (You can also redact their name, messages, and other personal information in later steps.) +> Note: You can try the example files in the `example-chats` directory if you want to try a specific data format that you don't have ready for import. -### Step 2: Import Messaging Data +To import data into Selfie: -1. Place your exported chat logs in a directory on your computer, e.g. `/home/alice/chats`. -2. Open the UI at http://localhost:8181. -3. Add your directory as a Data Source. Give it a name (e.g. My Chats), enter the **absolute** path, and click `Add Directory`. This must be a directory (i.e. folder), not a file. Example absolute path would be: `/Users/{you}/Projects/selfie/example-chats` -4. In the Documents table, select the exported chat logs you want to import, and click `Index`. +1. **Open the Add Data Page**: Access the UI and locate the Add Data section. +2. **Select Data Source**: Choose the type of data you are uploading (e.g., WhatsApp, Text Files). Choose the type that most closely matches your data format. +3. **Upload Files**: Choose your files and submit them for upload. -If this process is successful, your selected chat logs will show as indexed in the table. You can now use the API to connect to your LLM and generate personalized text completions. +Ensure you obtain consent from participants in the chats you wish to export. -[//]: # (1. Open http://localhost:8181/docs) -[//]: # (2. Find `POST /v1/index_documents/chat-processor`) -[//]: # (3. Upload one or more exported chat log files. To get these files, export them from platforms that you use frequently and contain information you want the LLM to know. Exports: [WhatsApp](https://faq.whatsapp.com/1180414079177245/?cms_platform=android) | [Google](https://takeout.google.com/settings/takeout) | [Instagram](https://help.instagram.com/181231772500920) | [Facebook Messenger](https://www.facebook.com/help/messenger-app/713635396288741/?cms_platform=iphone-app&helpref=platform_switcher) | [Telegram](https://www.maketecheasier.com/export-telegram-chat-history/). Ensure you ask permission of the friend who is also in the chat you export. You can also redact their name, messages, and other personal information in later steps.) -[//]: # (4. Copy, paste, and edit the example parser_configs JSON. Include one configuration object in the list for each file you upload.) -[//]: # () -[//]: # (![chat-processor.png](docs/images/chat-processor.png)) -[//]: # () -[//]: # (Setting `extract_importance` to `true` will give you better query results, but usually causes the import to take a while.) +Support for new types of data can be added by creating new data connectors in `selfie/connectors/` (instructions [here](./selfie/connectors/README.md), please contribute!). -### Step 3: Generate Personalized Text +### Step 2: Engage with Your Data -You can quickly verify if everything is in order by visiting the summarization endpoint in your browser: http://localhost:8181/v1/index_documents/summary?topic=travel ([docs](http://localhost:8181/docs#/default/get_index_documents_summary_v1_index_documents_summary_get)). +The Playground page includes a chat interface and a Search feature. Write an LLM persona by entering a name and bio, and try interacting with your data through conversation. You can also search your data for specific topics under Search. -Next, scroll down to the Playground section in the UI. Enter your name and a simple bio, and try asking some questions whose answers are in your chat logs. +You can interact with your data via the API directly, for instance, try viewing this link in your web browser: http://localhost:8181/v1/index_documents/summary?topic=travel. Detailed API documentation is available [here](http://localhost:8181/docs). -## Usage Guide +## API Usage Guide By default, Selfie augments text completions with local models using llama.cpp and a local txtai embeddings database. diff --git a/docs/images/playground-augmentation.png b/docs/images/playground-augmentation.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4369de268b762fcdf682d0dc14f46f7a5c75ab GIT binary patch literal 118456 zcmY&<1yq|`vo=!PrMR{f_u^XIy~RDn2@u?+xKrGrq(F;%a1GGn?(P&Pxc;2`-S59W z$x5=;o4w!c*)#L(nP(=E>Z)>B=w#?{aBx@(^3s}ca7Zn1a0nKt$S+r5_8i79A81bU zdMXPgEh#Sk)V_kj-Z!nS_g= zA|Hs**GJ-16?;;{rj%M(-ZpCtS#^BUwNt9$y7>|lbK8E7>UcD`pkz>U4wEzS^SAAq zm`0`z!Ieb)@7spoQ04)_Ul(4!T46(L3H|$0>xse~+rMXxX8dcG4uV_iwUxtbhQ&TK zTK0d&4aH3h`PXQX z>0$_cO~PUg*Fdi>w(f}QUaaJ_lmq2ASJdW}Ew&&CuKCr!BpdlA_PabCy(uNOI{R?A zXU_PpcssCWGMqG45uuEZ2CDNq?ITW{6x!d8tTPTTohE2#AN_(`eTB=A9b7am+ z4D=!qj(0yN5e~05jH%I(1-r)7P^hD01aqO$p(*Np|Hd!>vIpsG`0g10|1J^lr})!9 zl1xp}dFUG?hAs7td^_?bawVP^RHXuE*VQi4{h)(tq8Adxye_0|)HEfuyweN8HP@E^ zTQ!zHuANIK`Sa?sS@&M%Q}m4x5HF0o<8hL-1U9(ng+@y3qbkjlP+Cr|?1%8{zR#5_ z`bQeMzoqHY^JzLDS6y(J8O)Je^r~BwA8QTyF&A466L>;Zlp`5b!Li`c-T=71()(qU zx6Nn!Cu3))hfvb6`fruqd?*cH()RYUOm7&VqQB(}9*#Dfx$GNsCJS*{%19i&8w(DcTW|rMS7XP!=Sj7QRi6n;ctAx1TV0v7`9EErXiT z5pw%^W)SE@vWO@g4^pBtek(D_-Mu05#oT0J^D(vjU9Ad3O7{d8Gg{RK^NX;(V%nO6 z-N$rUhchQ<{j4E3GznENxBXwI*gyoxazJX}Q-C5i09KruX8cVePSv1%FF~{F@cgOh z1`*4!B}I$0Sc%?GW!CsCXzG!9$jhMDEG4GBVu~n?ltBs%Eh!(wWpJN0Z;;(oh>1?E3C%Z~J~RmxuuB$fgGaWh3JhZkkv z@@!p^aT*i&AJ}e45`!ub%d>g*=$Do8!K%U~-GK_fHUT!&DIaM|OhXBD$6smdjxZ~i z*n~z#*5n)fV~=TZe=AET8=~q`obt}*7ciTmkFCH37&5H%BZVkoOMen>N!jtk&*V_S zLAnO+%mT^{*-!G!>DKrKXdgfJy{vsxQQJf_Z%RQ z1mbLNajD|v*u7(NR|mF)&Dqg{6er`g*Ywwfko&7Me%KDhR4r z+j|;Ndngq6+g6oT-KO`~gJt*?a&%TI?-_I?DMm-Rf!0E3eK|YWQuxhTX^4itNkM@^ z1j`SB#h3|c(~U`l;|s4}ao~ws-V;J^B^vgSM$W%~v-M=!PN}Rc%V!5U*(+vIKGBiE zT2Hq8TOQqPw!_B^QEm8Pr0@~?EV*O-4_qkXUVv;w1_X6gcWNmx3XF`^wNQ~lo2Kl; zN10yU2s=i~0@rLem!zDeSj`=_u7Q!%BZnCic^5LQpg`6g$xz$A6I*YD^HRHAI!BYMa&?^3*^9DR)>Wb~r9v(|ee_B6#SH z4=X|dArTtM1Y{{usN(nI389aHP(gtT-DMThR*>N4@T(A%c(G`8C%n z?*8elgyQc})8GtILCAlb<_cs=&sIq!MvLY*#*wbnVSPbck?T1*5~Dq4w6J}} zvCA$0HLI0`Ph7SY3~C2{7y+Qv<_qUkx&uk}*b7`^qp%}3P;=<=0Y%+b7C}daT`j7e zbm{ip!YsP*0LzO2D~YQqzllNQ8XAM*E)PFNiX^1-a;Z<(${9&4Pi-FbloHi6?F$Iumv))#byq40epmy0*cS5d(D!az+ z=f~mTWW?Z#@QnedybtX=>E0vP z@#YuvRr1IdL#!Z7Nx+y4qugd3`cj1qyyV#v;mg#}-BUhZCdmkvum4gViw!DpD#qX8 z#Z+COz3dwsz9ldRdJuWdKq9NMcBX9qMrJ#LK?QIJaNx5CytEz=CIOKA?0dMcJlVbk zf5ImuaboRpizd^X*w(0cW&MF1BRSZ)^@2@DQR6X7HmN6wq zJ585;;hfU}QNxC+KF$t}{7#`YwNCX_Rb8w_ui>)6XA6&9jul99E`9tJGEU({L1Jg8 z&hss*T05U=@})fs2C{ebQeER$`EX@z%+#7{O5)jJaEvUAdTuy39vxZ<)rX|e<*8s` z%>j=rgVy8>ePr#JFjifx0;f>UskRVCgIl($?}0#@O8>qzM1hlD!U9s zs;gbL{q%jb?z~YxxG)0TIS?g=dAgL#)&Bg4F$MLHnNxsVP#&p$an~n`tg*(p=rkq9 zK0NHqxmtOA9HrtcEq(gmUo4B_?1x;XJcN3IV?tef-gD*Sm-z<85|D8;eTIZbn+?<# z(e_A^KEr!n6(uoZ%^g6j;2VGQ4JmWX7WeZ;k!o$B7d3ZTwOUF>Tr>Q=_v}9Jzc>sk z1UoROWuHJ#8dLMV-hsYRCL{2mV~oy}=`D52RoLvfKsfT-l6#b{vxoRxlxtUPe~{*) z&b!sgrbe96IPG8g{ z$x&6e19Ryo?Rj6KS|^DaljnraWzwmx&I-{gm~RNk9*`u`wW;A3B%vljNhkq{s7cZ` zb2-upA(Li}3Mb%1)>otSos*ry85&-itFN?1({GT`+Cx19zW#kO)}(5u<^OqHqKcfA zPCPNKxyIh`C61iU4xI}ODqLo_BYJ(i(WbO#GcZ2AXQ8tChfNLw?BzER=-ZPw0TrTwM$WD+W+933b`b>jCiog$(m zSjsgUX+;mU!qq#2m7-tT<}z}m+c7D>2*HV^RQRW3h+aSn-38Ic6V zcAvXKE76ykPalP6a9{g$y2FQZuL)JTYam{)j*S#M>=o2<$&ECOkU7sD32K||eGKdy zso;uHmG!kdK+Oen>PmwU7~f!}PUxa=)MPY z()z+4J-6E>zjkY#x#wX9c|)LJUW*Z*lPfYV@~sNKT{q*KD1rh;`iP#3M@HH>KmjLR zl6wB*4c0Xwg2petRdN-_JShIn0Jvz6vx)Y*N7;MFfSOQ2j$$a=`?S9Rbwv*0?;<{!3B8Vza{fl6d1)TIT=3hA9U`llh z&|!ml92id z5|o#{Yla!4BWXBG8$p1dbmhU&EJo^3gKP9H76G6YI}!VqMPf)^u-tOq3p$nv@m#sw zx31c^KizX+Rv$9pc}=^U&U%WC+7m((@gtN=f&@Q|ww{v?v)lfUFde$z#*Z*;1Xqd# zX)omm4LGjp#$`tuv zGWrS$3e!Z~lvfGgyCB?LQ^M`Bstj!^eh9|iFWaE>ceHBAM=1M~b?@p_82P7rS>cTL z<&e+V%-ZQGkka>07*&PARE(xgt9OtdKU^P4-EXSO&irv?3JWu)P`+$Fwp^mbsXR`* z13u(JLLp%k0HH+NBEYNnc2}2zjR8~b25L4`0T3&;&CEL_?bYIwQ=K9y zWnvC8GFtbpF%BSpv(A7QMl<92c@Ri7r6-h(nzq8^- z)+wLn+Q{RX>13Z18sfVE7-m>ze z4p<&P)=DpC+Wdj>8(A-fh;a`N?`Vf$*Kb>>i%(xf?C{Dr?rIHbG`dXtJ0mO7MoEk1 zwF)d1q^xYLK_9Yx#(7qU;q{*+vwR;P5^M=Ie!jY?kI={6KoP6gkJV>WlsXw>Kz(4n zsrV*E{f3(I)@Cm!1otH={T}2ob7E8}@NLD6{Tl@Lgy~AiAmJQ3i;j&IX5xuU^ zH_h17o(P4GzV9YIl}J;z@IfX@Jtv(E*oYgMY7}>LW=NDXoYgoQY#8l`AMuL_R)t0+ zPoyOsX?Ftuj&fbtkM{Xel@jd$_Vc57Dc)QTTy66tGi*aJ7IGi2y@uQQov&9*x#z6h zdZ>mtEeB}_5F13IsA~O~O?{CLkC@HvhyZ`Lkgt&;M=10pm0dp-vyoT#4u7GChHB== z7PNI0j89{-+kOY{)fBYI8uWGi*iT zHNgz$H=OFcD<1~<5@VP1xNi_?kfb5=-)=JW(_0M^?5-5U_DCoJbFS0+z!WOsGFXG3 z*KR}gyiAFqVJn2%t~p)YdXTn$acb}l6<>;1`3JOWvs1t)PUq&Vf(ttbbKalx!_N>J zW$MyT3)eYR@4D*Qgp}Atfk@hyMAm}_Lyp5*(UP|Hfr`B56F3=VcOM_%I{s*t-+p|2 zK|ovSdS;Gj0bFQyAAl`ERjD<07thSWMTGf+`Ac(ZHC8-0;viYC9q5b@L!etrzUFIE&1`!RyqURDD@_@cE^&@c|joMkB9^QADYODJ~2!)``63j z-rTgS>6YTpGD9Vh2=4Z(q9RM?EmP}RZ?Gp-9SKJFE@$M|*r12CS&Kr?kA`{wM{Gh- zwA$LCVD4u=`rXwp)v&3axuACZyr!n$aEJZEEhEADcf?8-&!wemUMw`b`kryU1y^sB zc3Z*u?3xSx$x~N6z1}fD_xtgnC1W)^&FO-5q|8NQ-Yu^1lp-35%?sI^ zya_0SL7v86^W$we&@R~mPa4gvKx5vuzH1}dQ9zIDP=Ke)lZ|$a=qT1pUrA73(d#@{ zr3?1Uhuv5Vqm>e;A5=|2Y)^bhF>u8>fNWuvWu;Ft!Tj1{Xv&2-qGg7w_ovRkNuuaIf_^Tp^ifyXVLhb(!@Xb{jW3)`o*F|4g$T4@S!U@ed zlO{JRagR-riW5hFCAV--AIEDUrcO6S> zZ=8s{(6>=?OhIijJHW9r@&5HM#W6pdZ3>K8O~d8M&XQX!U;AZ|DncNV0Otlk4;?r$ zDuqk_0Ih#^Usb4w%Y;XexPQ<54B@^ne7yw_CS zb8rW-NwF#Zkm0K5e1mOE_Z8;_G_g`b@~y&_H34s+_Wxp$MZuf{8&frTZ*2`xnU6e2 zT8N&nz|l=7&8ifGnIK2BmQ_2g$|g-e>%9r7eWYId5a>}JXUw>7VmOD(QCZt2Az_wAHbRX21> zUEGatCE*JRv9Pd)@@9L^U$Zpb78%U9?P4`Jt}2p*y0|<1N1#?6=UW61-#t}__DlCZ z)wmj~YxbuzgXhlip78WCZBG5s-(F0E1>bbd{Z|nx^xMDSIJSqYiQYtuz&5GRr^KHF z^LJi`z*|>FR+-T%R0u}%W08>LqTUXOQ}0ZD9_sP9F#GycM#DCUn--m2t~;Tz#?QxL z*{@EzSaWkvtcFXju4u**8`{?}p_a>qJV-~96sXX-XRoE0j@|ffkI1~?2a=M`;3^|6 z)WT+aV7knpCHLE=oacIIfLV=U?tzxK99C>Brg3f9lZ?__^AVE!kvFhHP2qnsj0h#m z$Gfb?>vpv&#}g{5=O+&V=bJIZyb0kyM+TicIM0}mN@-{1j!&W-t*1-b+2Pd`1)3Z$ z$29};?48>`3LcH)9jTzqgI z*ma=iW_Q`XfmW}wp>F^N0WRM!XXBf%Hsurs7}TE>KI-;GJ=%i@>ab-{&yE$W{?VW7 z0g$>NV4pkJZ%3~6;heAA$y-w>Z&Zslm61q^5Z$XaJ6tnLAa3_Gh89x_n^NdkkQ9n; z$CIp(P>X=4({pxi(tilGv~EP42a(zGmZ0Z5kAR-*j%T9*0s6K`EuN3seVX)cDorM)?E#X?NfK6)V?CrTh0Nr z;yc?G^xb?;8Q7w$x6NqegI}kU7SqPhSB~MX5iG>5RiJ;VucqY)pWLB_YJO#)dSPtGmF;Q8zR10wPr^@ID*CsYBbP*EgSypS3EvSvLDbkbS9mFh z>|CqagnhCzydPSu{tS;Z76C3?diSX>j6p!mMI6;r3=_XtBPn>ehA$?|Q$6)QYyQ}>B52a3%t~fW?QFQ&Jzs}v%PE&YO zRD%b=ykA*TD%3PvyeeO62NC%BVeEeHZW&>r?nLV!ACOoS#BV|U@SW|8^x0M^g96V* z-4>%akzl{Mka2rsx*lLmC`VN_=9^(OX=NXYX(I)<2&sBB*4rf7>0h{Z!{cWOoa54w z-|*=?b5+wHYy zeN3EAI-?r5pk9%-U}!}OZCU;X88e!O5c0+ACq=Zgl|(G&7c+`YVbPhKUF_%YxV`+D z?{m7q>*_Y#u?Aq%tN9WZChOkX>erwKYrSnBtrhpm9L_p1dx4ON|J|>Z*_q0Y$agOY zP{{F^=OPwzhmm({fs8V1e7ec^f^x^lw-3`MPlCLwyBtsFYPUaJ{c8gn|PndEetnPHpTBvsXzbwt3_5y$RpmJkhTihihuaw60e zKRK>8mih962NERsjPVZoTKXmKs^BRU)4t;80XU?|X};aX6jyi*>C&Ob2AZ{v<|YH6Og}WVh8?<VN6o&9iyq+_cPWM#iAtV-~(w4mvkotlK1&U9$Gx3Gbb|Ebyuh|wdvpn{}lr0 z$`f~s=DBDDT+Kz1q0or0i5y767P>-`pG7GqFDnCnCn zgiXx@tn~YRnbC~mZx@n7J7_K8U^Dt$YIil8h(X(lLH{Q7G+0M%V*wk4kk2H9XGUUP zN3Y5Q%Eo<1mIO_pBgsKtCc)C$=E8Ty;L56qscNxHP&r6duY!AHj-}z2T@AROuf6Bo zZh9OpfmmHuKUwjO@jkG|w>f!MjP4A4)E)NAyVqN2cti`hx;VSOYErvz7BTX@kZHf3 zcz2i0u>>uq)*n6yxRRmr^CLR(G0tqX9PF{LrrLbId+cvY!2il?H^U|3o7~p23ODg5 z(SyKs*3E6$>h}b<Z=UYy^ znr<%dD5;y1{2Y(BFO4ck`XUYMgio69jgXezf`jb@-DfrYPodX0<2ZSrhcgcvH>Etz zmrwkCh(^vg^gyBAd+vv8gt-C9kw_lqtT-{D4HU+dCFl36*MeeHF1`hQZFWL%(X53d zCDJQml6)W1Kj^r8?E!G%5s}ESDR{;N;AODEEw$RJj#MRYEB)4mLl9WkhuHJ< z^+JwOu>VwNG}^eVrqwp0w? zD-F?x*$daYL=PkS5;3!~$c=OXG=)SGg7EyLi{UA$e|l8XfjZK2N3P|&Bf`kvxCf-+ zDvY3PuYU=Du%PC6m|Q)LC5|&0Q!6iyTZRM)?^190q?v*a%2uFqjwW*LnroedCV*WO z@3q><6i8)oTCVx5j4G>Z`TS7LS+S?(Y77%%=?4QJawE3hdBI@}&P%s_wY9w4UdX+Q z|LMef^j&7FW_hFSYc=slx&#N=rq92l^n|Yx-?0d|U(97Y=-)nIjDl9>#F_pff+KL~ z^eRozKDRwdc)-dbu$1Qq9~W<&81-J z)Ql=Z4$lTNhU=-@bxMLU=i=UQeZPF$myqtdvB((8O+Re)i7X-uLLvGZie4qio%-Y_ z?!;|=zfSf}4R0U7df>WeEA}f>Muy0PP;c76+{Oy=2#ZQZaJMG!j*p~|UJ5(@WAUHQ z=M}*~gDqAm!u}ADBw;@tC?*auCQhP1pI|;gGeT)E3bjQ`tn%T=arnjtqI3{N-UNF~ zZSjcsj0n7ahU##5YIa(T$6i-eUtsy4cH48fq8rxw^Nx&(g*9u}`sa6!r0pEf7Va1> z3h^zs1+}$sxSuWcFSPL0Ud->RnuzE$oLfB~%*+c7Mz6sJz|Rh;MVu9ekB>^EsLrf9@{xEVAtNW|8#{0L|+?<@hMskELAHCSaD6^qae%XICUU-RbGu~JW zpe|h!!d1V*p|PI{Msj{sO?G&tyJ=M;0Feb3Rzh?j>jWt zY7xBd=A`+dj4MM%IW1pRLxwHCB%3@A4b@JL<80Jp4DdEAuQmSToPgX~NfqmPWIgoW z$F>o3a`jWEs-&2=AHPv7c2>ncR3pj)MmE;Brkkd7QI3_2E-1@PRzCUDyWGsicd=Kxia)u)E zUd#`txI8aK$!Fj8D8Eyn$H$`zSOOU;bnB&DYHCI+Zp|j=BMb~laugY?7(avy^#nd*iBv0KlO;Fg9O;OZ+~6;?9C{sAOPfiqO8N|FAC9xJ^$ADC{_u|AO- z&*n||e9MuHd+dn7=#Kx4@h8*g=*o2uEa&A;d?6)uDzBs*jw91X|6h{Sb|*`nZ;AuO zomluezWi_w(Q!W<6yr3)_+gZ9e|4BS>8d^YpVyP025j_K{jibph z9lfH&>^~}N^+yT?Oj18j+0}FUmFv6UZGZJUTzXo#5S%vI{WLrIX=P*tAVY+OT~ovF zqv8(SPVpnCJ;f=(@QZV4C2|vLb8NSIJzH)pS!!T$IA+&c2fL_DgXrX2nNqS44;Sb6 zldfD+ERLL?2^|gUwOrYHE2>lZzc?btv5uP0J&}63cJWHy>aveUzZV0n#b=l25LtlF zHDsk7=|3DqVA-ri8~efK^{BVsbP2rs$%>mse2$9UtYLsc-0iTVFJ&M=F22fky3>Nd z9q|XWzaq5m`1YCcI!^tlIS2|=E>)4A1O4ch7hJo1Yw?s8&$fG&0-U=NBx}XGXxOo4 z(vP`Cw#ZM0HNqAgDhzaK%6c*5Q4Xo8cK0H=`{kHpbozgOiYHLZr9-2yvfZ>E>{YZS zVRfy*1MWsdi3Yy0)eY2$qMHqCfaQO5AGyR8iS-WF)p}1c=#}*Aw>Q<;AV>p znV68&a1I))l$E}kSqyn6r_|NPTGY;lB<}4OLO@{V%_lpV068NhDgW6^U&=YYCk=in zO1J_PMZw+D2#&Oti?1o%tv37~)_zkiJ!H6*=}nHj7gyG4ADKY8i5*>5OcEbB-Fv0+ zGb`2uXtp_NvVPrOpVhdFO?9)Ua*-OiG;QB#freXMoXv)d5&W>x;gt^W@nwBo!?!eY zMYzFfw>Bu8H+17#9`hJg}c)Ld*Mc$ zK(E;+*6T_^$ar_Ff|eRS+yc@e`~9? zAd}6>gI&Blk)huuN}I7+P4{oZZ^uoZ;o~3c+HryA+c`MS9_8^s75cn_x7iU@Vt}RD5zrATwi)}!DQ2I1I>zPen2>ccH`HhKoLu?TW2g1pX-DB35pcOCv{0ZCrmEaolGXT_Iyp9XF?Y~-dTE(VO?P-l##&voTxlnk}i3z`m`dtt=#fA);y|NFg9)3cCV2T2*sp ze1I|nJ#y0bApU(EvJl+bg8`hDAkUL5it&TJqa&n=P@|XrYpTah20?CK(h2B7_>&b? zD~P}@Z*CYvDjqhyy4>&ge1+#A@DeJV*cqrjGc`R6t==!3oX1MtGg|T2tz4l#->s<~|s;KO~Vx%b%2Ud^%vu+nGGb5;!ei-BHUM z@n5bV8(q%37s;Y}@Cx(aRh#1jFU;$K-nOX)gg&2^FYhOZPWBf)Utuh@fd~-Q0%CJ^ zNr;(TFKVsV_h(gNjsb^nayPRpWgY{y36$=yVSCT_G7T1a4>OlIuv?Ud(|w$dzO;6j zyNMMN^07}u>`}Pa;dMuMe4I?6(x_41F3iI(ldZ*{<#B->^SqYYL~ijnHEde^PWVcD zqW`6l4Yk8t*eS@QPi1&Gn@kw#13;=LRP+XchmU8-W=>R4P(jNDmMz-x!g_(468~`_ ztHjH@ZHTd>gM*oM9E);uix2yLHO>nWd(6MG_LjQoI#G1A1)xq}v3+YD}p*p%xmq2aWPUNAS;DmzVADWH)F+ddl0N!{LnLo zqtGh*!X_@*%5ARe75Nu=kns_dczY_o!S#PBzsISz_s``JZ3y?7ajmIh z8||;mi!a2=Q4wVQb2*>J_rOQOY&N8X!th&=Z<@2K+Y~<*$Rm-6Yvs2Lq5vc^`ekt~ z=d@dF~b1}EgxmmJBM`T}I^X?}2VnKC=yG#WnRH8j|+pS=wM8I_K*sEOsW zXTx7Gjy``D-tKlr*3Nx8!|Ax0o9ZUbZ-vRYf652?-{1NY^^~GF1cQZ-m6X&95&i3Hrk4ug=XFhrkEf zCM-zWEB8oG({GDA9uIA=H*z--jHB1n+WG5W1ol~96mcPGu4vEAh4?Hh+UbgqL4Old z4-$>Q;YqzPL!uyp(h4K&K$mH6?bJ8!qPIu(>zHdUYxin32X9JPVND{%s)Y;(+au>3 zxq8k_@qS`4Tw5-;f}$ud+4jauOZjDO!aw#nY92Rpkb5w)Z+QZTmFC1)v!Thg{j3SH%CEyRkRunS?^Sn8_W1buR~a8l057-F|KjHtP4IM^GVq{4vQ_&e})> zDgTpSIxfY8X#LX8QgitsBa-HgB7U-knE`e~QqR@7t})d%QRi>7m%i{T&Q#I27xc@X zT&4T!vf!95MTF$>x%F2oTN39CCg8I%0v;;=FC#k72|I|-@&_v&g`DTyO=qI}-y6mJ zZi{NJ=y$ zNl3piK3bMlHoOm0FcOR790Zjr#(6jwjR@icB z(@u$h^8y*umI%5L4DPu#;ME$>RkgDzZyV(>Pb#`Vuh;^sz*AhjhhCFECGd_!*iD?J zQn50&FAfi<0`NHCSmm)Rtelbki2&BTus(G_A>h`hA{9m1bJim_dKe0eL~vq7K^Xzd zRem^#nl`L;f-fKTLT|zc`myU?2~yt@jfi*)=U*+*j@+C^UZ3p9w+5}`ikZqnV7~zr zf&hs<6s|SrW4DCSihvtLszr~x-6?AEO&8ylQBZqj@4WH#CMMQBXZn-WURg);;<8*N z;)UZzS6&_{PMg5!Lwi%K$k-GwjvV!FXU1~Ex>;OISEn8}TmDW!AbD$@lAaD*_^_CQ<~E4XEb9)kewN8*@|x!vHUtWCN(QSRWb<8mD&R zCzou}rQCPFcdURUc><{C<#^0ljxT2_7Y!Wxg*fssQ61 zj&lQT1mLAzFb=Rmmx0|9n|mgt@QV#vc;1ED(n36D(FNT*v;UUr)>&=`*yubsq!g0% zqANIL4TC)l|ER#ifw5d;Yl<{w&0bSl9&QO}6n566z*cU93MFPLnFA+B`$iwg$VVH! zrtc)qg(0~Bt;F{__Uv&OA)gA~6H9AE1T^%%#~atvDc`M59xhCx0a4`4ToQf4f!!&E zlagmP_8SjbTZ!1zRKC7GS+w96ezj3P?R;(*tj?;5G2%E#`w!G0 z%FGV4)!H8lVQAkc+Y za%89A%oa!+LFh;oe^Xd_xE6iQzOy;&R#R6hKT=&x-+Hg_g2_7MvX-odYd``P5IBVC zgQYxbco|Mj7GujIK<^X6L-5mT;j`4EPqzVG90(vsNNNC9@dn(?fH z2Y4`X1pkus+C$0ilp+gEfQO8zJ2y~JSs!_38$u0z`S%AP5z0lcK%?-X*l#(%Rx<;G zb(B~#I}PW<+)<75BMoqdar978xG(#Yfv2e-xg6C!u>GND{{?GTYQCr-syKS&+Z1Bi z&vVOzu3!G)kS8kK_SWZ`XlAA6g%(|Cv_u?q28+O~0)EA-l7Dj2eOQCZ8$(eMspB}k&Y?*ebTv)E}aA>(VxL?d`_L)DpD_{1j zTb{OCtaq?;tUFL?W3&BQ5=b;(3yb~$#lWWra2koY!+ zc7@*q@A?r%jecV|S#dYIe3fu0LQ##_GIn<1ron&Xs=23v>OKLG(z(PCX{(0ukW2hv zc=b6k3F)Fu`z+yW--ngpocvmF@B`?!t{!PmD4zDp_t=LfsxQ8{7QA^#9u*N0!!&R( zaNx&S8UL$wWqf=Ds*p5S>odDXB@pxCkgL5*Ehqc$Eyu>kpRc07j?Oj^cznllRKr*< zghlT7qElp94|UdIJ)QBp9Xg`JQtTdvvJ+&CWn0&esCPFfUHW1AZscv7 zmyMiG5t-Pj0MnKwffb%p%RqjDegXtF)H2REVQ>4bn)Nx;xk%$Hby<%7-DmfVvRj;8tp4+f=Sf%Gy?YbplT&_90x8&o8NZUe8;@YpeH^e5Qb43J+1;Q_ z!SV%=b*8c0uxv#}fG0>Tdz-y%OwWGD4H@O2Yqdf=IgAhB2mgS}TON37^K&F0G(F!^ zc%*Waz&yRk+U2hdM8M%WT2xp~PkC=Kpttj#<@3|_C4HX5DXug< zdUaZ1xqXYh)!8;!fEewGbW+gFeXnjmS?$W)&pEJp(l7AgH`NtNSHS!>VcvSPjj(G1 zyAE1f@-;bW3V+UT8AQQc0!pBbrKEXRM%)!&nHCN}h#}SHof}9oaAE_E0=OR_RS^;K zOSh=CqID(y{4QeXzzxMN0|dHVqZWwygFQo^dDFu(MNn{T$_7WQmIXRI__%p=`^qFg zD*JBrt5+Ra@J%vx0|2)k%fJ1W5$CZe?i#z!`TN_DO#x3sWElN!)x!knJ89siDXHp)rjI42>OqdhE^%_YWhhVklt)!ndz{` z3?9v+2lx{)?r) z>~^>OVeL{%r0Evbs7Oj@?$2zz$K9icE#6=e!yjB!dVdY9tX5@WJu%{(E|MHk4evK+ zmXO!6=Kac500DRNj~?b^NkOrJ#9zC}WZt%j5*oHf+|CEC(-%A8Ck^g8|Au0Ahx?Ce zsR4x=&fR`AePy40vt!&AvFv#GeVTD=qts#JZvRnitpSk&$aSV{{HuN&WzL(h)skfx z7|Ube^n06Mz53bh&lgfc6K||MJwCJpWsh<%+U)Du0Y0Pru*p!UgqBCDPP?laH@l9dw0_~{KEm_w~9tb+@ z8jd#}GdpRn0N4+PbPd;r&KMr$Ay|v#d&;o)C(Xj?Y16+OhN*KmTIqDDVLM@ML+!Wp zPY+5Nt!E?DHmI4NHHwXUiAra_4?HJR2=ynY$Lpa>PDlCEa@U4 z2j%Ndq8LQRXeWKo{@<&EYHEH5ua1*a*w~ZIJYw~RL=wzbKgR!Nmy(vIQ%Igod3oMD zZapIW25oyrk{X*+nG}puDhw@BA}w}rL!Gio!q(Ta(<~i)O>*T~NZ4CN<*Fw7g9fEW zZ;*6tZbL9Q5Y6Xo<^zK_Nd)4e-!6|$y|&o>DjVgJNNEq8KamO7n&$YxJoW40m5I12Vvya(3s~M3_RITevM$jKO zY8MB%7G$t>jn2ja|Cm3rIG+&S2gd7l!Ii(%DMo6^y>^2aHd%5JwTB(O++CPF*qW1k zSm2eLuUfmbo|}@$pPV)F{M>6U>vfo(CsfKB@BOvm+&G@!#seP`baL}l&xVz5HuzJa z*Q9eJr5$&8f_e8sld4+lb)jim_D9?E@v6j`nR8cWY_lso;kR1G+r5t}t+yBN2?N&O z8@lcCH==j``F`AHYb%idTwUKnhaSC-5@^%i?J+zp-BFYrBwP|x$b3`W^C!brr1}%BL(P>;>=Q2~%l;5A!m#g?&4sfQi z4xW%pt$p$4GX$q*j@4`_-@JMA8~lR&6|MftQQMb){v7!pk8o_{@kEC8{3h4y@S0rg zSvg#3-3P+$jFi&}3unCy`N#f;tH9qqs5*h}n`nF!T(|V*HuC~u7%0IxShP=9`$A9V z^PUcktliU-7{)~_;L1v6k5-@R& z;aHZ^`9(*FJwEgQSo!LxsJ<^=5CN4EkuD`gx*G)PR8qP@y1PZ`kdO}PZt2dUyN2$r zA%}i<@cWAwYrQ|-yW_%{b?>R&pMCbZ#2LJXdSbFg@jon+Ag+V%xr{q^@*+bhnHICz z2A7<4^l_`-PzQ8rEwxMth?gmI%itm=B~``Kekf?-htl?SnLCcnx&Ic{n3gNLO9>mhfj!7QM<9%h0A_bFN4KBTq;&?hmP9LnOo z7PfSNGoT47x33#>tGu0!16%&im5Nhx3jF z(~br6&IZlxcb5s*?!TL1M$L8B-b3kXWuEUG1L+xG1+D)wFvi9jOz>ahu#v+%-RaD| z0o*jSGXBfD-e98wj@+O@Hx#wPBeiqBg*yDu>p_=V=VphYV7Hx147Enj#x^|;U(~9e zoJvbe=vzw4(*|{B-lXz|r1Y(KVztC^;2)SF`ZFr8hQfMgmWOEZ9&{^0Boe=T*LD7B zb7m3LPDSwIRrnX`MbFJI-~EKXz1?dpO*a=8e(IMF|AUnFH3eRQQ*B8ngwUCb3;Qy2flYeBLxMP zmE?;`&l?VHj}>mX67A}5!QA$)C%x2xYBVSLeQSE{c~OKn8dZOREQLXlf#?c;h^R6-o*67%>8R@S;n zDm<*l8W}3a`F;E%xib7Oo(ZZyJYUE`^Yg=VTnurb}nRFdj)jq^!&h=wWA zQ2v34zuG`JW|&xQg08=wFzFdE2`%}#72S}z~iGvLb3#(f7t$IP>gM^~J zfr2?ECT1jsf_B_%+)BFohK4WaJChdR6Nc)PM)@~R77yFW1dDSu)@yMsP#QQuCp|7I z(@Yi$8SS=5+E!@ozB3V_sL~0$fxKGV22R$NrP%%~Opt`x)UtnL9Be~U=OzCWV3FKO z7FK=WgWX+DHdFm^z{v&`Va~RUmIg?NjC;GQ3#Y4nsQp3a;c zD(^R1oVE*NP|~753R55$iGu{4O?+l)_ryd zHOa>pnNa=@0xv-Z^=mQ$bOZl}a9BAe(aTK_W|WKwQgXRl12+8F!7x0-E@n-^y&7MgSuF0Y;5Lw1g-9ckv(^rH)Hvi z(3~7GCZg^zTB3<&bfTH)Gt32lcLG!FffNZR^`TGFJnZ6wux{zJ z>XR`9W}+t40jfR&*~W8NUV}Lg*TOix+$}_E7|H$I5AO+((f8M!TQr;n`iL-5LET2; zl6xf`Sf=EOf@mE!D->d!oQ@*kxz{SpR&k`~g=j-@6)pV*I??u3_BGIyHKX{?^c^l5lKkCmRaa!Lq zXfwKq)ltzVIZ$lCg|o8|U@Jb`niO;(M{VrV8Xl3%p}zw4SQtg0kF18Kjml}Na5B(- z(-V)7b!3SmXbk5iCdZ*va=|y=eEN-2b=9S^j6VU=eOa!KHZ~6tfSx3Pm56sU=)dZA ztvYjNiO=@#+~Of1Bdgwiga^8DG7#ah6$SqBhO;-K%}sbLkZnaKE|9U1(W})bM~yvi zd{d2zs?qdeN-qPlPvfnvp@~U!YOKGX5O89(p&=yvq8h8Z;r0Yk)4M}< ze@>%=b@=wZMB#MRa3UqX+i;0+5mCJg(hc+ZVOU{r zR|{x9U2;nx@uc^}1SQ~C$XLugZz1Rzk>54>~wHQB~zgaLK5eP+MAB z{;8=Nn*?}P1|Q>4_c$hVcAI;>g3@_kvt-rBzOEQrmAmsbQaF< z;ugMaK8G!6%qvAl&snZ~`^6F@K~&?b2k1VZggQtdP;@oqlloiKLh8|NjFsRYw&2lD zj|B*#kod0aOMEo83JnplKWx?n_FLLRXCWpdljB`&2*_MxXU`WF7QVk4JTg2sGStOG z0)xRa?-C?-L@G?hCGk%dzU8Q7m};fUi(dWap8=k#d}YdY~_=}E`b^cIoD&)+A<@ka|7fQaW zdhkSdZXZJPHY2&~Z=U+2%tcF5Y>^El_ny5T203Nx0dEomHpLSrMXl}#A&4K)5I`GL z0(^_zWyR3Ii!V=A>4I0{bwO-Df_hwYjB5h3LTMCpR??KZp&9yirzgkRH>(}!QEj%* z#M>R59Blq%C-`@q!(f9PJxm7Ixx_Vo8t5AMmDX-6bd5fdLw5EmH% z7`mXahB`MEbNG$sCn1n1C#Ezb#pWQNEaOxg@y?qj1IE;m(aykQ86sx_2$D5w9Co{r z6XoWyRmg*>Q|{SolIppDU);XOwL9@(#phc(c17iuU#QkD1SH+2g@`)B#(8;2a^*Yb zo=`)moy^#7L>1xz-T&t@NKV+uwLb|HsiZczdLcI#A$v3vP}+oK0~nZ@LsX(TTpK0} zT7iWie4Ut4;vE3UoU0{|N`WH>fl*Upr75hD(%YrW$3kq9_}59H*7GYIOqyK&Ay5Zu zxyJm1&Q--)U>iHs3|G=Nu~Oqv8bm}4L+z8aptEK+^J+7x7DU#YLH2gkonxoAU@FrE z$Dpe^tkX}tavmjCbHT%(i9=R{MPHpNCk44SDmpitb(Gtv360fb0IodnYzU#29Db~R zcNHYAUt*^pWN?vQI&dBcSqhuukR*+Iznt)GKAbWyB28n0`C zS6TY#Ny=}rnw}pkl1}jdA|#8Qp?3v*+@$DmXZ9C-tU%XFCe&@M$}vEHjb2AjIlhbo z2kD91XlfI65L=sp$nZd74xpqKf7bfMrY7=PcpEoCWUfh~^US?kQ8AvdeV9*zU6EKW zere0-Rk~N*E4Ab03p;0)^W7eZK=j`n?up0Dx;S&lTfmD0n97KKr*n=bd^GX~Q9}yF ze-m3oZZ+sn)Rb~WN^IDHRL6xOmbD9^kMEk@8jD{RB8CB%u|Au#e#zk%Jn|{$W-I!U zcVt^>v|z+X8xQ>H=~;iy9torrD-s3YG~F;Ep(8DaJFSE}teTg$mATm@2+bRFT2&GP zv@-f}BV+W6Two)BV1dle%XH}9Jm97$$9a1>!ZUA-D+a;t96OP)UJz9|y>Sti)y4Bc z0R=|nhej-i6DO74K$8~$SKo7$4XD~bSF-X{q-<>lF;@v2kmET%V;keme(q1(%(qtl zi!P-z4amLp{K)*z^QaPHy2#>js#1{I@;ki@sRKsI2qz{>Tm&?5n1fcsH*w`s*$Xa36 zl_}JNE$29#==|>?F{k})wyi;GGt3Ba8gJDB={9^5GriINNgEd*|IE56kV2=A$|oMX zBU~-{HX>gvsK;j4o1c4zIV2uiT8bSeI{Ct`S`4Tgj=-qg43tR=%>C`QY{DW@U2V4d zopiL|A21SxO7!hTY4+^_&l@QBu{T)Gb=z93wy9+bQ{bx4> zT~QlY1%9DIDVTV#iCDHxEsDnLj<|(H6nNq(5awh769gUzQ78agg51P`0ba|k*1v{{ z+lC{)E3j}8k?yD%Gbhm29TvWtgBGxL64*(D+bfZ^rvMDHFHvsnTtWMiJE24xXcNh` zL53gn_*5uy{`kHV(T5t*K8fgBhF`ydo(zi=wc{`)UA2I(bP$RLpSDplPL{FlMA(4b za$pHD0F>|tIUxTI-`yTSFO)cFfGG!Z>3+Zlc6vc90KS#9=+#g&OxzeP12VO{B zdk%9JM(yn6&TGQfZ1`OP#x2aqbbNdA2G3ud_6uDJaNo^SHv=MCWTPi<#$}{#@t@Ws zmyter#L^`Xii*~`?8_yht3VDnBjl2)M-+S3>rUhCM|0oN^>l5qKPN5TTBF|st4~w^ z-cl+%@vmF|Zsu}1dAajWW57{$xGPP0cuvqgNGp={_1L74i7`oC_G!GZv~Wt8}!y1(lPQj8#LxTU9*<*Vz4e zbc_a?)wr}{lFOgaCY3e7bI!al#!9~5IDbnNa8eI26no!bPbI?oD)GW(4^#j=4^@PED3>St{+X1*(%1e)Y#E+`N3KFTq@*^zP$4 z(w13yj;!7W)PmqWY=68pPJ5pE!s#gIHc<#79HFh@an6+Ua|BIUNA11>S?DOu!VKPJ8mE#Ha`I>*?Wd*&zFYWKcOR3#Y zT37Nwa(3d?PV4Ln0sPXS^mj9s6wZ9NC5kizs%p0|f6jL= zgkd;fG*}>FQ~hLr7K(Gzo;{#e0qyibT~6rR6_k9sH5K7P3b8>7r%YFhj|;iLtBo~D<2a0QEkh04Wzk!wO%0~RfXV$29XSCyiXpi+!50t zjFu(+ci<}of@?t`XLiO1P=srto=?rL>u+;+cG>CJ&vv7H485*N#ai0NL#e(Pc{ghu zJRo|K6WfU{x4mNpru>)HP12LiW(6Fn1+jd$lnEBDd!84EUTLy-Uh{t-&qFY7N9 zN*Y%=s2ZAHhYlmU9cya#p6z#DSlFvI_Gg{^6ax&MO1TVe{zVmDx^WSOrAiakf*>4G^vJKuMu7}s2nzD6XR zP-D;vS%w!<)zAB#*oB6MA=G<^VI#5hVTn#+e>f>N&@ol>MWwIPo0eqCejG*S;?Qr& zs1;*PE@Q81Ht}->&V4QSkVul@CH!(M_g~CQNJ0RmOzfSCFt%}Zy^ZaOaDKYHn@$P> zA`Gyt7I&q6V~o;buZ~W&zdvw>X^LM44I^9dObqkd?#wRYETeZfT;2ob@x)j*&V@+- zn(H2B16s~b0PS*w)nEykE*H|KcB0hG2ZuQTJR4_9V1R_b`31n zou*!ilPtZ``E9hBc8kIq62Kz0F|g~Tg7u|2v^@m3Y?d9HbfnCaw)n%4qz1+<7u?rk zUsa`I=N6Z*TrRD#p!O_Chrlc8nLBmFvN{ z`EDjpq&MTb8LKzX`7V0wAzhX)R8FQVb5qNf<>Z|)aF*Z3H9lb^lKAeeL(=S}YA&ye zjAP`ot#{-7fY35;>(5CQDORBE7E>@SoltjXtWugREm$kLSZ$AE%Eg1_DbnON6({{XukWN;Z5eZJ~fC2S&cPD zveT(ANkD1Qw}gA>w2C=eQmShr#;d|<_c2xp1Sy7u{`FfZ;kTjs!Q0LJnh5&!wf=#p z#^it&c^jl>)1(rO0@}t5YC(d;Z=!ppahb9os@=`MmaPh=RW>@$ zecx9w9tv&=dSmjwl948C=^MVO;q*22ml{?`BDB#EFPC5T(MAZ-lwK-mtHR=+$TmU^ z@&@?5R%yP<@?`hexYgd&z7s~TqzzBbz{%qz=c&p|wg`*|h^SZ1SENG5p)A84PM5D% zZ4I?O$S;c$f+vZ8(~Q8YWkXR`Z@%W`=U_3$Y2GOd2#!zCYCVKv#sp3H` zp-~xpe4}vgmlNagFD$#U;Ivj8%Q64p&OOU6K#D!XJ_)0za68dNVoZwe3LIQ7ao~TTd99GlWm@X6i21 zUn|60VSe3decuq)(qv6ZX_e=`;|=LpO7rO7DxYR~MK)r4a?cO`vA*d7>6YP9NBACK z`#lh}hWPPP72sW=<1z4<%Zb^+-R1b0iv?SM{>Dm6*3VA|@ahdu*c{(GWT)YTW@)dOxHcNQdA-j(`2M#?>{p;yK=p-hJgI3D+ebiF(2mBrB|L+C}J z3b$CVLJlXI1~qP?G&5l|?)j44$N;D;Ignansp#b4njMj-ZH$@Ekg*GqT3f2&`3n8Y zKipJ%|JoiNCa-}#i0OYD%*3ZvYKXm)r$R*hVVH#wN%F+^g9qd{rj$KQuzTWj8wIK# z!_S^)G5X{U?l&hdXfjhLKbqUiR}|v;OhAhyU~wvdxk*_cg9*c@Qsu@qC_k|A)lkoj z<$#-6almE?+h6z`1Y|Z){SSGfBPFJ@fq6(I+eLkZ}^0%6Co1bp`q$qJC=^( zr?B*0Mk53HFBmy`;v;zmty(w6=)baz;RV5Pu!snNr2$tB!_v|)EDh&h==>*e^GS?h zu#UGsa3I$nX2qWO?XlQBE+JHuW^%tf(EGhL9>eNqb$IotHu%-)^nRo5SP7Wh*9M*> z`}?GF{^ULqYDepa)8+FKGF){su7(A?7elcAs6YJ|#4iD(L3;M>8kjXn&!u2N#QM}*W53sc(NdTD(w!d;oe~x9M zKk@8?eqLbDv7+wdehR^cW8KR~j(i^-**}zq7l*YnT>l5np1z~R&3jBazz`ZH=8p7# zGIjuBa|Lohu&F#=5`F)b&Jqz(Nc~U#l8h|sWa8h+GJu9Lx&O%n1qNpE$ycD@$&tkQ zfe;xGP!U26aVY>2viNiRtoa=H82K5|ri3~Eb*|)~uLFCT8Q=p)-mE(8SQz{fd*$cy zaoorUgoutliWkqEU0wb+6JfZHALh!RowUG!Ft&hhCEE>S49hD1hk8Oj|Bn>Ly1cz5 z5<{GS?ePRN!HHX6w_FVhOXFV_=8JJ#S&Zz_0ga*(6}Um!y1fugGJ%N9xi_$36=H<= zhU;E$i&6g5L2Q95Kad>Su|hNfNENAs+ak+?coY^>`InfIp84_9iY4HK$z*TXL^A#7 zu!o&l+#Z=87)p{KJFUpzpHmmD}@U>?zbkQ}x8wtic|*t>jiW-PFpcloj(N|`DB2e)T{S5Po3o*A%&8c1 zQ~2ZfiUsS9K>CP~#!lh!p3VPqZ^F!px&aQxc5cT1`4)^{64m`|{z&aBHjmA?3zeP?+ZhAG;+F}tUHKH)C-sL1yg&B$EplWMGM4FR zhPO_cjrv|!R8~em=FED^fOOm_km3XA>EHYgiVfleZYfNWj)2iTO?=kvfRO!1SYO;=s7agA5_7m%zNuhv3( zhY6%8wJTnP&;GEJlSta|^m;HTaueX?*@ zqttt2Xs;c{VY&JaES0Aac~XDk_Wp6rlIXy6SXfw)YO~|AF9rHCBj!JD?ARIZ0H+vh z#9fc4@ckG&HHK!r-C~X&bWpJL!2Ru|9%~sb>0IMD>!ft0s(Q65 z0(GStR*2@!4j6?;cLbIJB&!?#@cTwF+OYO4^GO_NpFMG z+pyR8ABYtNZs0EIO}Da-?tRdF7eTTsQ!Nbl9Z{$uHOxD=iTi1y2bk4}vUj3!zh-s+b-SX0yH{{lN^o;3S<* z-X+)IS-hXDe%Q|Q-36|SG((VAeCi)3k5bomI4@rE9l&o@t~Mj9MYsF_HQ&5;zsA{4 zY16t~>TfTJgC4e6{dV=)LT*&@y3(79wd6HT>zeisxv^$i+bU`DH+i_?E!r~+JmPKJ z-=)Gsu)O{Fy9IL07R#eCB@fa>Y}^q4{%+UM!}!f9NgQ}Hd!NyJ|R3@^YyO% zMdMemSUlXUUNCdqCv7p0Z8+9f3R(7ZR!kT-8J{s-+hW4|LL9J{)O$T4j5D-@bttuE zyFny)Z>p-GHfmyxoD>HsMGI1Q)fjkNfB|;|2;<|^i`>~xxv_^v;9Mj zwUN}(6Q)Jm*Ee@c^R}esTS5o!)+d{>2!FbKlBEv4j)j_?1}VNZaGYG%qbWJdtpYIET1v|NlE-D6igdi=CB#Wm{{XMBmF-3`P39e`$4Nt?!c`ilzM&Kn})#JirLGX z`AYlElw8Ll|Gw!q;X!5I?b)P^ZH;2X*0E_J%o9geeg-7^5kyHk5`g)YN<4BHG+lNv z@wkn$&TmwvzBNF{GUy7t?_Vx?=3jha@-UtA5~2a>PV&hVk&GO3QmRE&%8t&fDd~uX)qrug%i#@IUI~X&A5zF z8@~I#ph1PnS`Kk>2_){lKAbd2QJJt=qW^v~X6^1b0am;n*dlmPUHj(uUDk{6UQ%&4 zclso+3$BP_b1o-_B~#aUaRG03>0EyKgVeR8h!CrlhKC!;f(RoyMnJ{}3!VqKUNvAq z*2_uxK(VEK14~O~vFz3l^zy`f=i{6fvl4^E&OkC3%vaa+9&)SQhpVh$F?Bqf$(v>!1M@Blp@5MBK7hN6&osXLWTb4f=ZS4HzYd)x z*WRR05WgP{AY(z{*7+1C%{GwuU#>RgRa=mXp%6HOG00o~?FE-=OU%X~K zQtw+piBq^QUN8u}{xWnI>R zUPkR4qt&-sM_w5)FvR!i-vndb=iSxb9Q=%N*ir>!og#;HFfGA-L+TMEb=v;kGz z=VJ?uBj`Ed%hi?>@xNkpIG$UpQ(`9sfXkW^bbkjY&hRS@^_paAwY^qFDD|{S#3X3y zW?X50@MM&hO25-ZV-G-Ath&J<3Rf<>INdN2l&FbgYelV2IXTbsDvhnaYhz8VT%HQE zFxQdT$dGCzRbqDkOnJpWHv?UP+@W1K5`_Ka4n=0|yY%OF&fLmklC!v*r}1*&}~ zfg$mq2j2ou^E&e(zW1IRhQ!6I9Z0Q38E&NWPHL3D%IzA(IgbMr!<2Rm`W$O24Lt}6 z?}weC57z_O+geP&su1$|XJj<+f(vyvkp&9~)S;-V<+d8U(j~P~eIB)T+5!ip7Fh+C zF39d)f!`V)1|om{`qiDkcrD`GJb-bJMsPvP^SBxydV+lbWB7T+;;ks$wMj+h0ZM@!qQuQgL<%$#mZ)Nl98J8Ad)Fq^lD= z*>XeO`ht950aig#EZHofy?t6(hy}!+`LnL^e-g~UC`O8&UKA)sG;??N*Cx|3nS(zs zc(q^lGbY*kD}!&IO@FGQmAJ>I{h~f&eKf9Odl_eKl)mJ?3nDS7SW6KcN#>5g*7?%c zm~4E1JQOa#>}<1@+r2hy1jrE4Zovbo(z@4?zICP!WLToeMn1 zehRTbeDG$_ny<^e|Ip-IN8rP32xGaeD(mQczS5!#VWCNT&h8dcbLsgoWS0H1@;deA zO8ws6VtyPc8@s6f-0A&HNA$3@)V%(VQ8zB>W*fWL>=b_|XKEhFl*Trawz&QchT!@! z?xDVv=}*}f9uhXfYUOc{8?)O(Ck~HK_OS%AW=@kYHPw0#bkxGG8q5;$#jlhL)tX$0 zl252Q?`Of#y|~(ow8Pa@Zzv8Wqm{1sM^4lG{<@X$Nu_J2k>k0o;d)&AX|Zay68&>_ zl=KxNjzgaE6W=t_=)_`WHl3E>N#J!CYI_eKEFFkWW9hRgoC=f=o9J%)$UXKF=`L<} z=RCGJP3ppwU`BjM%2f;Y0nVK}4edSVcgcqfCF z2s_2^SIkmx4=;89#3S|So;14j?#goB?MT?_VBxY2xZeSCEw+W@4LZFsFrV z>ou@TebvU;ZF_WpqGo%8$}|T)yDj7cUmlI6=b{-Z+b?#%35*X^MI0o3B|-g>go!jT0kM-6CU) z=os6Uuh7&G@(pH;uvrbHm`&4-%`P}GuDC0ua+ilM^^pkj_<3q?Q18+_ejpbtH+>5T$1kLs}gM6r^$t=dwPp?I1G zVOgVRVM*=d6_iG%*K&D-w5hjF9Et*}J}``X1JI4-E0BWGeGDTFViOmh=a@#Nrl#(* zP++gSr#B>3$8v&?H|-l$Qq)h66O7F!X@NFRfF{rWX|lO5cYJfVzO|KBa~Bf&`rzPz zjqR(b3xLgB74*e1rj|l{F(<|kmn-GX>QhrR~JK@tIjVioqqQYhCBZozM46u2|GJ; zR#jEKAdETz#sj{okHV0Z7&ZV;>Hk95xX&C13e;dxR3)d`ABCYB|u-MI1 zhnXgR7k&%Wn(u6HOE^ga1oex3v7$C4mc_C-w$d&g1Vzv5^n{TLt(y7LEM>rzF?bKb2>>ebUy_n2J8s`R(Cg*4t$;dP;Zl6iXGCm1Vfj916M7yjL@O|IIS} zAbkmE_66u87s=UK`vEz~Z{7>BW%^H|8$;(@=L_|qA6cz$Z@k?#unKheT*CdiiWJlN z)^#rvvTkv7hIK5HK(^1uk4wUpPS_sWEL4|;~=o)uy@NO%&N z#5`2h>7nG+Rn7gfz0yJUF`2QO)41sUuGCp31y=kx#`v^*C~LPQ*KyB4kR|V4arN@{ z>3D*ts-Zi=TR!ROM==Eo_xJ9Av%cA9K2iXcf@)_8sc5(^Kcap9m{-4NYGxh(dM5)$ zS&65>MwNWuUYvpntY}SSUJb;9xaC#w*6bNDGcqk$Vg)nk&Bpn?v}+T+BP_KkA)>r= z9k_YBwf}>a$eXt#wy%Ib>NseS(NTHi!X_TY z3iA{qdzv3n_jau7=gSGud@G1^Fv5WuCVT5I6tqc!?RCQZ$4Wr5&Gwmz5!`U3xo1om zR<6B#Pr5tLyy_STo*Ia?#%~MEcf-A!g20A|ga<@K7l4d^m-5L{bKCwwHu1&L9p1g8 z#W>1n*}={6?nE;UAzbG2)YFfrDP+Yy+FUS117IG z^4N1-^}7c&Iv(wRZkh!WyxJj?z;kGX&9{WU&l@2mJnoUH>t@V&_vZ~|*60Hg-xdVF zC#H3{bC(&iF%eC9AS`OYvp-<$YrwGzrwAVN)Cyv23R#os<$lgAue7C+n{tEAWhF#Zy>%wck&>;XJhSjgJsz;fx-kJ)}qxt-hh>5VeSM7 z1mIo>%P99t8w~t(;I~M6def)(5Vy>$sJkaz+k#HziOP778;XyDA?N!T*A$s*qwN`y_5RwMbM731O;Kn>NejlywnhBHr zD-RR&(EI>yYj%3BXI{xTQ0GWs|_VWJ_>M}kL_og+mQ9RB_`tu+n3 zLyd7_N*Ig?9WDM@g{xg;NdwA~{E3bHuy$uf3=f-rFB#B{s&oP z+LCWs?Xh=HXKYb9yby7`5ViSc&sN{K9OL{Z&^~rDK!%BiNPPxy@R9^Ru^aZIy;Meb33C~Mh)pUT7i(|ZRb zCf{P3^g;Qjr-(Byd6pj-1yLDqo7N_q-D(fKod{@)i@M$^ z^zAi?J(?%7X`fYtWqee%AhyLg(U+lam z@OLozfwp{w7wEUX?c_~}8g2Eg(&Ol(5PKH&x4{=`WH%VSC76=aCXffSok=6MNkMIrEoa7XNW< z1~+!}{UILZlCw36GktD+pS^YSfXSOP1~&7ytYN(kZ{fBdRz;s_MFLTylVOQ6GBVRkmR*4N5_6bXO2U*?Tu5Kd!?@R@nz!sGJZ!}@B}c}38_ zec%E2qQ=|K6E~L5zt}jw4*SB}3wVEF(pmfZ@zU!I6vydvaQ#N#V-0OxJ>XFQYi;<| z5N7x#7*8LX;=b9_S=@5m78W1$Gu!@TComKIcEa?{J`~%_fjs7yGvgz`4%9>g$fy0c zC_amn(A@XPgK&)YcP)~>f7_joucV*uozBN39i~mO8D>JNE?;^$l%?HMeHfe#)WnLJ zzQO(LAv#eD9%B6S-bONrJt!k!+%wK_Vv#gHj}7&c_xp6uaJ#2*yo#J&+)ac~RrSdU z)ocH|Y6Ew$(WkrI1^36jTU4OBI4-?$@#yPgy>?LiWwT1B2|1NmJ>IJf#=AQTEbZR? z%5#kG+;G|Ej~-YRcjMew)K$y=(UCpvQfeUAdivZiJPtM}HwA`V7njlSj zOWmdx<2Kv>s}>;b<>_bFtPof`GR&;TMM0WUo%d#)Xqk58T7jQL#YO9%0(Zt#GZ-6( zM;ApUu3k!Kh1fp^C(x#cp7X7~k{OP@-O>jAxv1vHt#G?@1??l9m}y?8|6N+$ ze*YiCqpQGyE9dl*hX9iu01&`vFXYN^7cQuCsnN5wswO z$PymEUBRx}WAC7RC)P6=nhyCp8hs=DXDe#;IWS;iX9>hs?tObJpC1E&z%!Kp1Vkbw z+6Zq;_uzj$uKn>3%kp1l!b~%8A@My*C5(r_)#H=A>zFg3&m?2N&kq?V))EokLl}AFY1?= zbqWLo1kaHCJg#?gHEV5rTORI?A{l___>2`M*^#h~y}K^QH7dD#vauh}CP%hubtWRo z#b4p#f|lE^wLXYswLouAhx1EHHajo`LmfVgWZ`P%H86~c{v>(aj0Ma>ojTh0#*(2! zxz5f`-7589k<@D{=}5H%k~`q+M)AMdh@lmiEHvAhCX;~Utg|u zhbaaG1OkWZftc42h~jV~X(gYR6BkYv0R6GFq7tw@E1V>NDOnFTtQ(eNU~8)9S4PZC zUr!|YxpZb=4;(fYRtNCoQHORu!svnkR8RzJKHuH9qGVtI*7_1Nl4RtvHn3+>cIgzj zozx5x%__~WZ0HTdB*)`(u>mxijEtYjr#<)1x55Ux z!Gx0g%R_?hss%(-_)E(TOZP~pCb=)2SC}?TZkF4bxObYA^x3?5_g6f)<|5z#`0s1}X5BGt-%1}(>~hgr1O4GHVbJ2< z5&Z&PRd3m4ora@ySWoJbV|0aQJl5Ly)IXcza+ar5pBX*&&X~1uOUqo|i^GOaUF-s( z-({ObItzt-0n?x@R=0zNZVVCsOZ|-}pu~4`t$;xbV76u6O9KxSc>Vg3RAOR>YY-xl zl2j%m)5`Ha3Yo8y2d~CwQr_Bll7Ev{rQ+C8Ax(^oJHmQ1pOj~NG7+7XT*J8Z&7}!A zYk^4mPp{91-<;C+k**gnI0RGrza_Q1rN9GgWbc8@ z-%Js=P0bRxV)bnjJ%$_C=j#+Z4U|L+Hv)i`+{?LYxrIfF3>oaHrLbo^^XiozLJvEt;(4-2B<>Lzs2*6xs>F47ycmflG! zxm|>nw|Gh}G4bn3QCSuww65G;WE%)l5c&mPI;2EQY8K58->&%md z{^)%O!?m`|>K_Yodp1@u&Pz0k^s>`g%r8kqByq=flV7)0sY;K&A7l*d^ zS@*%~435h;1`J7y77ZPnYW-hQup@5jG*80WN;+z3eu=7`+E9F97Dt9W3=S@)%+c^{ zZ>*{m;TPSiA+@Q_7LQ9%QF8`#8ff%-jt)|0v%KojZX&vIzgqW>m$|q@w=l+V6;uN; z2);Dx7GO;JQF$=4D)V&sCXY+0Cp=CH^8Mw{#QxMo-L47Ei*}FTK94Y?y7>!PjYHgLYOx)vR1dJ9=@iS9_rk!T zth|Cl{l<}R9Op7o^x&!kFJ$`Tpc-d3qU$=T1#XmnQI@e0tF;)JN~O@qp7B*|;0PxB%5;HEp*7k%nA@CbWnGC1rt`8{TnSo8SD9x5%jFi8)V@&}vTIr$E6$)o;0c zEpLPfX^iU6;Y{3Rh;ec&FW!I*Jm=*O8I$+}aK5QFjzCYHtm2myT%g`G(NM&4pL0y^WW{W+C zj?^)POT5wBzO?1&;e|oF5~zrRG`(i_><6ZfCL1g1BJ7qZ9lV2kN&}l8kDy-oIK|GDcTgQ{4Gzezb1C%r ztXcIKZ^>))WwhF_kEjgr5k!nCu4#~c>tCFBS0S4GEGxNTXzI2vuVHFgaFj(BZX%(^ zTkJV}N1Gt1Au1+3R}a;dUvvBoghw(Mc^3NR-+6P(6aFB_v9Qkeq6{CbebwT#-^^mV z-M5ljGLKfm7hFrq`Vzpz!JQEKFx_=u6JeY4mgHuD%~+0WSRkuRRa-=?RO-tySNgL0d_U4k&T4P}hR*EJU zn+K8X>hzI`@jkcH5x0;uT0$MK3HMIsdz$P2LD^de#r14`zXS~lPH+$I?iM7tOK^90 zcMl#I+$|7-OK^7`EWsJvVFq`(lizcmbI-Z;)?0O__Mbgfy}MWMUcLIWzUx_}BR|YV zo~QNo3Y||%V;j_+-^?IFenf*raA{@IzERZZL+LViCzTdPF&s-*ZLhhny4@-$2)DA1 zeqI)4NZ9qG?1htz7DT`A?txJ>l-xuISn2lX9Q7Jdb30*1)5X4IJuw07d(-2Oc3rjGGr}oYk0uVA3a+A zuE6QTe`U%32s+2~m{Z{3NG9;VVr|I=S?Au$y9Np29pAg&q>^sjEg>>_m2kf13F1E~ zjSlWA0QN68*3Jh4sWXXKTb3XKvZr5V734jfV?Ev-dd2UY=qV*UoeJ&M@Hv+RMm#jf z(mMh3O&TxJ(Cpvlf2X4X27ZOIATG}P6u`!xcy6=2cb;PyN>8mB7w-!zA!bF9aRnwa zOn}OMe!m^=oZ*g+TSxvp^srA~Pa9jS;^X!cY;d1mf91ms12MQ+2&8|8A>-ZD?Mtdp zG+CaFuaW^oM857ri#LpcHtl~im#hV`&Y3bS1}rYzZIn1KtGMN^i=?%#(-S&KFSG-w9u+Cczc49C8GFm(L0i=4Pt%PUI*bhx&nF6@zBoq&8h^t zOiRyCEi$R{mOg_V(SH@@b+acuJzon61PO&~`z;zg;Fhrrm@4N_t<7_$oQNv&Jwva3 z0HZS9najoPbRr;G?I?LSGwgl=Kt!hc57DO}I^jPUhFxFllg}%zndBQ(^jZ^zk%%sL za%vRK+%w`Zmxd!&&0XPf2OMy?CRXWGoM>3d(W9A@%;T1`!=xf`0j3q>lxgHMzZXwcv(Dv2Xgs2ry;1s(W4Z7Ua8nnliy1S zQrRE31JPLL*UqpD56yg4+|tSRY@!;n(Vg=198uk|km9m?Dj;y;cMS)D*0>eTKpRAW zviT3&;sBdS$V_xxyuf53FS@GEH4DzL()R1etK+UcJE7sPwh1TeQ%Trl#*3C5UWSB5 zBJJq=heOKd6VN-$UJ?m9R>udF2ybChZjlHlfuSwGibKx%=uN=hH+JesY$tHh39%$P zNuQO}O50hE&{%ZCv&UOMJ*XcKH}~o99ow2gv6@T+(H)3s(;6cbjD?mXZw1s+ukEOd zm3REeky-9@h$qzAaL*dilK$%T1t>Rcvi7<6@W$zY-%O3LoHyigNk7lOlU}kzO<}NK zK2w~DrURa>HpmW{z^sDK*ObHuytkh2wc&3roCr$q4;AhvfBk@wt^|Y|J-fjTJkN&a z5BBYMr}Zumr`I|sg(WKj6Qt>WlYZYRNW5A?o0U2(`f=ZZn;vSG9O9&mT&+tesQs!( zgDgg?N4g^8a_NfDKJxU(*OhdH;&}tWTx=$x3K_hQxt)Dre_XoPWwB8v5&A|T&y+4*AdAck`7LujbqDngm&EDR{$D zs2CB-Ixv(3A)l=CzfVWhi%fz1e?Bb$1lGh;-30Ib+Sip(<-c`Stt?mIRNhU#Q-jD2 zKKPnFXKhvQ0~l!USsjWtye|o3%O7^tndBAC#$p}ytAey!?TKuEy4j%)cI)(~g-znU z3c5U-!!bg1MgnSD>CSFW{_#+bmf-8PU=d%IV zrLYb;nc#1n%-06(4F(LSIO?6^Xy##pTDoCxLsTvz?kkpf(|1EV03lBJ8NF}J*EwY4kTz3s7Z>4r*g+zs+4hX-LT606!W{?PM%n(VHk z<>V&u>*ZPPRXG+}w2R=K1K-ou@pwgmEk`xkFgQ-`+l&l_j-BPFDSl z6Hhy2j6fabj~{KrH{^a6smn|4)Rgf1jlQ%He32=E!(sNYH@saK{4uJj12&rxvBh@T zRcpMx&)}N3DL0mj!mkZ4F!}mgTRTf|g*9txnEfJvFn`rCFK;LXA6?Lh$?y-Z`EUpM7DkLgF6R!BI+>%`LLZ#6Z${5?OYSxy$@XmOB$+WXkT6Ke)OIsNKtfAZ+2b|I-?XNm zYWYCC-O~`{l&&5NOkzg=M)2YKRUkJ#)wd8^?@FkB+zNLOTIWt>0Ee9~$^zsiRl(C+fIHT2CO& zPS|@2hD_7B@ejuB20c0%S1|qj@0L@xWgltr2d0QZtK(xSL1CBRt$Byj4nVUqe6LW} zjG|RYPZBIo)ym?}Vj}Y3b+TX+%ZV8Wd6y-g-x~Y9l%JvJm;k>rvi*jNyThNQ^aj4( z_Rvt6fZO1OZ)a5JBLlK7Ny*ypr=sW*0#Ah(4mmW$w~!|iD*W(+y6DBoUrhVZqNqgq z%#PWa9}nyA`y?;oc7}xR<=Tbrr7(d!J{(W}bE;`z7t8nTu|}(jDjXgo9@E^AUejgC z?+r?;hHN@a1F-nfC5pc=m{>o)svMu-lw2f6w7^;>tDWM1s_lz@q=Z{JRrIi>;-IF; z`YC+R*GYrrC~rS8y=R_GOL&(+T=0_!UAf~&QFtz`-f6&e*l`Q`7L#^XqI!nMI;Tlv zGt@RR-&Pkr{WXncxp(VAa?ToNBpy^dH`-+IM+LEhU!gbp?$8~HMD>g1q(aZ#4}7n9 z1Uq$6g@V<1Cqn@nFCBW{@-^l45SaW%^tT>jJ>+dQfv$Y5v3<>R+MZLzLY#l(Ki{h| ztU02ccx~Bqh0T0WenK_w63$-zMbPL&1+6hxsftlMV7fsm0t&^nFr7zV;Ml!v%I1jY z>Akiz%|<-&q`GrN{ti;$ASu^=(Fm>qh4v?X-DECmv7xHRbfOj+QCwcmUlCD_(4_E z2r$8`f)}Z_xs@aFK#hM~(#A_0if#LO`@=d2Pk%b>Rsn;>jkXRlDINpS6??cq6?*hQ z2fOm(NP|juR4nGKsfz0q|9nwZ^*NlWyzoAkrZ%Y~)X%B-E;2%!@9DgAeAvR0eM`IJ z2|jHxh`7*sC#^h>rzGg$%Y7$1NsZ^#YiuCzXKOk@y^-NU8_mObZpJh)q*FVPSpbr5 z?*flE7nTa#rhd_XNL4u=URhO`6c*xvMrKJ``+U~)e1l`0cE9CheFBZj;qQ^}e!+fu zp7dgkba_E*qhoRfTy-kUivS|aRuw<*s*c?Vy7)X!0hm~_S&NwBNNswS5-v;jQJ8(| ziSA4LnbwFhnNyfRR3!=|wj}yP-&fvU=#T`@XtSsbr4jWscZZ$e{MZp@K=)P!y8SLt-y4Grg09-V*_viCOdk)X@x zqWnt!RU`nn>GVFG#9(FrDBy$B9ev*KN11$)h=J_6k*p-K`P+^UuQ$j|DG%ghrf|IH1kh+x;_|m(>~aTkmvPzJT-FU`glYA~-+X;hQ|I;nR&3!2 z+kjO|i+^{bUhD7vA)Qtxq801aUhsw;v96ic^rD@Pu^U#l68)%)k)pX-EdHACM-|2N z3liWGrv(UKepd^K51%0oQ-rdWGE?OZg7%2WUi`IE_b#1RLe!@h$reKr=E{oHr;ID- z#1Qnd3YffE*rrrm7~?kjT#IgPsRu8-EqBLWoHJGR_qbk|*@1qCPqtM7Dh6=9Fi3gp zGOB!Tmd#tt%)NkAi7^yL;KK)djpTJ-staim+YIrJKk(Aa@v``w2}4m{3ysWWGmaBB zjnT*La}#h=m@8-;!f3pM%SB?4O(8lM*wdO@HwTVMe4?yh#_L=eZS??QEmK;y1VHBVh zEhmN`0?N;$ip~}mLY$XvM!e#+WnLeM?SCmX2{lD;HQ=$1%X(Xz{9v>>HY4j&Cbv=W zUns8k+x_byHsVHifXmFgV+Tc@zolt^wHo@M05VA7^1||@w0cOy0|a%noRjUrbEMaN zv)j#|GCMy&)zyh zRGYuWl)0@~D{#U*DeL0Bx33nJkUy4 z4~?&=IA6?I5)4Cv=Z`(sQ`wfY&yy0f9$@konrdB~yaFxT{QXe!R!8T{&{gJo*Q%j6 zh$53qBrKFk{OZikuCzX^>1u7wr$Gqa>#`P|2-3QyMrfbVqVJm&(wL?`w*J}i3{j^} z(SSE@X>|eBF2B>?eKVmxCmU<`7-(jSC{GIPGjUkOcFH7z6iCj3m93kdEQ!&XD6Oh< z$AP5*P2tHGH(uAf%CSI8i;mz6BzHF&6&e7h!M`CRe7j@TKt+uuhnCdWTI=bl7N<4FlZWMuNGt+UpbBRj7<0{W9PIsYtIT^lf&xgX0<tJzDq`(mVU8V#gi)si zm{RyC@z?-Rgpj<{ed@58<1TOUk#t10rS_Ps9F?}yZBk>@1Nm|n5aO@ z4+9QE?2Pvp1lm@Om<^GQ-+qCC`5b{^$x;FdKucI!F&hHog$McH8ZDrq9=&8czw_!_J&j zP07&?K2hhf3I*S)W6!T}jCf|eg<1+}=~mg!ckw-;yvf<&FB}hvgT&W{@i|%A z;NwhB%A_zB&krp!FJibAT4FE2=JIz#93~I2xWHcXQ|&o9?VbA|CXu62kT!w%m1inN1u755Ssu%3s-<;DVjqvn6Q=!h^^3RSyJ0Iut=XnPJ* z>Qov!)S8vW-ioj%@!3(lx6(fAeB!~0pA+%?DD&9|A;d3P=SqgASG4^cQ+{hgfuoyH zUb;bzH!($78Q~Qql+)?0T=6<7^ui{bP95v&GY0N6z#;cl_$X^;_k#~%)ZnE+1<4E` ztM^UmslfU|UKk$b{f+yZd$Rv!0j?rS;*qzOwug|M>%Tp9mRIJqC;zz)DmdHl`;C8I zGNC84Hvj{)iV^Uy_u;*vx$*>sOpC~iF`%`bO-_G{`tr*EckS)zrmx9dMW`b4P)7R-F`I5 z>9$i;a4rGZ^Y+F@v`oRX$178Cjwfug4r# zH5AHX7H3}GR9fJ`mo3*JuAKGQ_MA-nBp?3M7bf9Q>;rtwDkNnoTtNLyy!6-iMZi%(My)a_)kFqpIunDcsx z%!81YEG!s>tN~(-Gf;W0Y}t z_$7Q$Q{sL6r3nma<6XLa=)RQvt(F$Z2%xUu&>J&siDqWiG;9il^=rO>oHJ_Q{DKzV zuw8CyPU$#R!WBtzKO_RCsi@^C_Bn93$ocua`|8Wu&QsaT%L;fTj;2~JE*Er5=?GeR zv+k3&Q)kf0FSAR=Q|GbBQ4i4@TCU;lT-C>8UUDRk#Ia!j|=C3(i`;+=X zv^}-TDUu)0Q;YgtYp&NBNJUg0EX4CHlC~R5T*4|BT#!Gu&{Y4+lftf>;N^j@IlE&Y zOXqw|qn=D@@Ub3gAvTY+c@FIcV*$dOWMwFJ1AXDZf^+Wm!qcbCNgbw4zt&r?`gs6? z{UVG!nc=7Ti=82X8uX0-!Tk8whTWnL+P_;uNmbX>aqfH9#w(bvC4zx3DbAyN62d`` zu}cqE)@i~yvcM@~yaf_I&9Nq{<}Ld?UhipZELxp9Z`eCOGw}JPQj>^5&$Z|Tm5(Ej zXXxEnQ^W3{c3NfDT&D-3zWsBv;_v4(iamcPghLoHvTD5MTEAJ_w0Ngq_N+VE-#EW? zM)f)PtX>t{&vpYoExW)qx4#W)(dlSDE+|vNIUkVHewY@o*W&t>`v3!~hvjjcbUHk7 z+6r3vJQ&mfIB?mt_0ZXSWaZUdmnH9-{j5V*SKsh}QhZ=yfaH;u)Q>6UciGvMD1}|C#7YYySadd!-d5EwOpUrn4`xmp2D1NN|(G2pn%dZl2 zM;sOPj+7>GB9;5PRi+^D-l-;s&n>phM z?oP>X1t{vp&yMy*s1xfkDV`~4dFdWmc&tZ=hBQ_+3Q~y|gm-O%(ttrkQc&7L#G`!!Wh)%2BH zbjr@d&yiLE*ZvEqlmSf5f_ykKrVhTl&C>04T0(xEUlFUgeADkHtoi{IXrygJA!4uuC90&S1HVT(in+2=p%i@8Y7`Ool_ zV4CDI8ngJHB^$fR74^A)7PK7jqr*Qb zZy%rsa%DmWy4A+Wo@i%FULraaQ`D9-7aVB0WA(dXHU9uU#fYoWhVS;er^O%b-qkMaM#3_a{=NSLZ}Q@CJDt&Ga_&i#jVVKHeYc|JkijbdYE(si+xGQ9M%}>Br`j~e zuI!J(^H(|q`qBl}$B6cEUT5)s*yTa%5*}+f3?Lk5@M+(o9Yb z$^H!?ef?0ek23o&>WL_qiGu;43B{A1;iBD}Wb)aubaL7=C!sPEb>s0~^<>+eI?s#m z>PuI?#uL2r2oz{XtOM!|?pe(@cyHmX%OB#`>!0$VeFG#((zes9T*yseNcghh^qrJf!L9`Ddo7K(oJX@Nc}Bwwf>INQYfqb>!z6={t1E7{q$Eqcel+MICLq3@hf~FC@9Z~?;VA$`O;xy) z&oX(}XFLItSpJF(qnIa6Vj~WbzrFK^|EL*m_qE=vhiBBF7I#Gg$y5is^F`OqvN(o^LRD zPSJVdkI=B@sVw@{bds{;*Gxm`v|9o>-E5y*^2VuaXem2bNwbCWM7PNw?M4?T5JPTr zPZpa}w=UI39>C&zi&Ys#u-@Y_-Y=~N8ciZ>G(?9w?=#(^P~~%wx3S4^ECxS3LkwD; zga3DDYUP>&vz0|(c zKc4B0KMhFo;mr;-2ru)I42VnpU1`5JDKlWp^VWCm#GgG;U0o}ga}NgEV7k*n;$8?Q zo zpo^D`eG^Cqo+a6F@Y=FtsQE8s>$?GhAt=~QfhTtEbifFm+iEQZcPA;R_LPp)Oo1bF zU3a8XuS(k#>Nv%Y2E91YJQ?%f+%_dY3f}$^tT%*eJX8M*XxeXzg-#)mnzk_J=~~Y@ z&&hvMKp60Oa)0$d$Sq9<+n_Fc9`@K@qM4un#8xbN)`oF{Qh^tR<~ZW(5VXO?5vcAX zN^E+cRbJtpJDa#qANgj;A138^CqPtao_OA(MjY$!hn7|LqY;Y>Ywh7;-ui6|H+P7^ zuoR16lRmA;WpaKagoS+2viHaJCjH9i7fAoq+$581CexEHp=Skxx&p@Qqhn5uqt)Zf z&7*_qLIX6mnx~kxCcc)fdJOF+^1LL?0ychv$oBo65{C5A~0`3t#oc&&>j zrW`ZU@t?eJ0MNhFTNW=}bIuB=;XC*IT`1&^<;GEp;pU3oKIYE_v$rI=9ld+YQNQ<= z+9_?rw>yn>JyXn5j*0e`bW1^7G)M_pl%4XutRo*u&5s;)USKw*bce*$q~*u@+qG8mQI`h|3j4EZ2tpMa<;M{{=X1K6+|rH z;gl);r~H62z2^js$(=Z2Fri0QcSm5x5o<6MR_oTCLZ4;w_xC6J?nJU5_9Ht}IEc_J zYHeh)&gyRb*g}Ihyw(0kJ`!cfiAQ3c_l1Y|O(!rf4CgmWYeYMwJAFWT-Bfwk2cILS zu$Rshdy60t%vN*Cy6;rRz<1LOtp1`v1r;()1d=Il+>v^wcMX=muUnkkcWb^zp?*|W zf6rF=Xa96sL=G)~fXt1P6Ea2RFhPLEugq(>devxvv1RqW;yJFK%>lHw>isN3qa45g zG^2(_EIdi;;%QkLm^#{WcUd>|z^0ft6=p-pf1hs9Vi(+E<4-x>Yc2ng)2VX1){Sgf z2`Re$Pw&L`|BJ&?J==io6vL4(GEXYiJ{fF>ure-{GFIS z!3m_^lpJiR;Yc8vg$D`4+aUIkxSDmvrw9qWDKD4-h3%Db4q2gw*p4+)TN|PMy%%qm z`ODoCM&X|G22^dZjMa;<7u#KK@=&ED(*8J2qzBD=&N7vtyH^$8pKtyXfUAYn`_Fku z_a}XfVayK9MCYyuuUls~YRyLQLMiNMvFS!7B6yv$OZRu(x^{%e$ z*7--d*(#Th2s%hOwNkAX4Bv1X>Ee|`3PVve!IuSbsjnW#Uc2sV&eHcvzs_AP z=l&C`eY4gN`ouOS#zEfyhJx^To8a~-kA1GXh;dKu5$?+#N5gVnk8khNMLi025@qM0u@gJFBIznl8 z^mlGK)(+HzteRUC(Z91{Ti#vJ9}SK^p~wfXb?ZteHJ`7yE7$CnM*(D4yQ4L`=^e6o zooR6@@=bNr-g)*%bH2?m`+un)dFg!+`a;8Ih)#(jQ;+)L@Vyo zrHtL$kmlfIFToo0l{l^wcG8Pi9})z`Vx*XV^E;tzR@_`uV{G(kOf@&|Ujk2p=#j(}}z~wRf>|tY{JRJtHP6og+e9!5g{7E6K>^&9OdG>4j-i zw|i!5WjxiamG;|{^^vw%huW{5c^2mD_==TpUJ62<_2frt=T$mfQ1#Hb7gjvwx*GCU zokS#WUO0G2>PCYS?tf<4ExtLUL78x#-d7i&-z;M4d zaA?WKy0~dhKl?3e@y%BYc18IMPXf*TyaZpQAHA=s;<(qed_+n0Vo%KZ!532~79aQD zY){g^*`6hD(u8sH{Sb2$FVf>Yy1qGoLx1kn)WjO{%R+^l7q>Sc=R7?1f4HsW^hc5L zs3gs{_Vvirxcn;1XyKmfvV7x}!two)E+BT71QeC1J|su?plmmAjT69CBRvJ)v}ck? zOwM$AkgQ}frjbnI+U7kYDDxOGI<3d=*S!L*C}@fY$C(@Z?>5)JSC=BBiCerB1;=X70itJMDEly;mxb!19nPl!G zI`UHI6E8={OtPCOkipxq-4WJa#lnCA3b^?7n%7~x4;E9i#oBYD-ho^-BBKWGE6D)~ zsg!=1*P?�rsf(*|*#^xTnuKr#v~>nb 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 MD*LJAqmK9g0uOkmjsO4v literal 0 HcmV?d00001 diff --git a/poetry.lock b/poetry.lock index 2e76f87..4339821 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "absl-py" @@ -3045,31 +3045,26 @@ python-versions = ">=3.8" files = [ {file = "PyMuPDF-1.23.22-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:e301481b8549d1d0497e1072563de9d8ea70b374263933e9906b69e1b358cf0c"}, {file = "PyMuPDF-1.23.22-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:e416948cc5050e012ebe28ee15c6bba23aaae41fd248fc9043eb7f934b30c303"}, - {file = "PyMuPDF-1.23.22-cp310-none-manylinux2014_aarch64.whl", hash = "sha256:9dc8470905648f9b55f4cd899854f60f0f3d6bec13984ada730bdc8727aa3a64"}, {file = "PyMuPDF-1.23.22-cp310-none-manylinux2014_x86_64.whl", hash = "sha256:8b27ce82af2edf973d1b83ff52641e29b53386de3e953a872d76ed2b1cf0a320"}, {file = "PyMuPDF-1.23.22-cp310-none-win32.whl", hash = "sha256:61b8a44a61504edd2f8975c15a7d56c8877c2e760600c263aa62f3f065ba42db"}, {file = "PyMuPDF-1.23.22-cp310-none-win_amd64.whl", hash = "sha256:23400f405b2a6b88c69676df3e8c2001eb655c910b7077fc2af2811c3c38a63e"}, {file = "PyMuPDF-1.23.22-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:ec4cd4894f8edde505856b9426c67e9c57318f5e283b44634ebc15a2ec9fe532"}, {file = "PyMuPDF-1.23.22-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:ad70aba698f2382f694902c49b258b7393247b715d429acc493b9d37ecbe96fe"}, - {file = "PyMuPDF-1.23.22-cp311-none-manylinux2014_aarch64.whl", hash = "sha256:c8a4d945a5980f996d4a4da9f385f33937aebd637417c091c4bef50f5a78dfe4"}, {file = "PyMuPDF-1.23.22-cp311-none-manylinux2014_x86_64.whl", hash = "sha256:68543c6958876d246e18d290bc2250633a84411806296d44306a015e6ff64239"}, {file = "PyMuPDF-1.23.22-cp311-none-win32.whl", hash = "sha256:78ec6364fee90bcefae7f036a3c115bf4ec85f5d7af56979f237c96fbb5fc57b"}, {file = "PyMuPDF-1.23.22-cp311-none-win_amd64.whl", hash = "sha256:5b8b7ad2a1d27c4a48219a913cd9b6b7d48eb443bc6ca12cea9287b2c7aede5d"}, {file = "PyMuPDF-1.23.22-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:5a7a720656b8efc00e5b3e42edbb74dd51484268b38edc34ba12dd7fc77d0048"}, {file = "PyMuPDF-1.23.22-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:80887102345bc7452a5b45a69d1842131ab2d7652d272ce7b0619885775f6bfb"}, - {file = "PyMuPDF-1.23.22-cp312-none-manylinux2014_aarch64.whl", hash = "sha256:8bdb49633242dfe89c29345f58e06b55dfd834774db2e4481dad82ad89d1eb3b"}, {file = "PyMuPDF-1.23.22-cp312-none-manylinux2014_x86_64.whl", hash = "sha256:13cb22263fa5e9ec87f46f74ef3ba5ad57200a07764fcf5918aa64118056de58"}, {file = "PyMuPDF-1.23.22-cp312-none-win32.whl", hash = "sha256:d58b328faad077297efee0a808490149b1796a359f737fb74f9e2125632d0347"}, {file = "PyMuPDF-1.23.22-cp312-none-win_amd64.whl", hash = "sha256:2878fecb1cb4e1a03f33ca786672c236400a811f310e2fa2929c30445b88952c"}, {file = "PyMuPDF-1.23.22-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:c79b5eee74f4138b1bd0abc1ecd06e551ebabff2262ac88db625311709e08a9b"}, {file = "PyMuPDF-1.23.22-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:96b3188bc12ce96e92673a8e9133328cb9fa050289ff9dd9e2a3716d46c8d62a"}, - {file = "PyMuPDF-1.23.22-cp38-none-manylinux2014_aarch64.whl", hash = "sha256:ec2385777a910a9531f6df58339dbcea65efc0c5e90384541550598111b658f4"}, {file = "PyMuPDF-1.23.22-cp38-none-manylinux2014_x86_64.whl", hash = "sha256:20fa2094b4adda4902e47842d4d34334e6f09dcd0db8ffb9fe71f45dd33349ab"}, {file = "PyMuPDF-1.23.22-cp38-none-win32.whl", hash = "sha256:c134307e4a2990599b291c6de28a3411851f08980e4bee05576361fdf726e3fe"}, {file = "PyMuPDF-1.23.22-cp38-none-win_amd64.whl", hash = "sha256:f03e131c5aadc63d15b2dff096ee520a9f66852a6712dd6005633bcad7c386ac"}, {file = "PyMuPDF-1.23.22-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:34380f046b117d10a4c06942a0cc19b843b8ce35c322543437f4d64673b64165"}, {file = "PyMuPDF-1.23.22-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:475eb3cf564aef3a2de98df72f478a5508c9eadc7072bb8d59c9c7e5b6611ba8"}, - {file = "PyMuPDF-1.23.22-cp39-none-manylinux2014_aarch64.whl", hash = "sha256:67085a596a4413989ae449ca5ad41c82289359d2130ca1fdeae014cf163f92f3"}, {file = "PyMuPDF-1.23.22-cp39-none-manylinux2014_x86_64.whl", hash = "sha256:3c999c1ac8050afb2330349ac9a3c3b8fddd72749665a670ca4ba992b9c570f5"}, {file = "PyMuPDF-1.23.22-cp39-none-win32.whl", hash = "sha256:df5d47f63db5ad4a83cb89e35243a3d0a221be23c3535c8d953fc79a47bd6635"}, {file = "PyMuPDF-1.23.22-cp39-none-win_amd64.whl", hash = "sha256:4fb6f0bd2ce12eb2964e7f2b81568d0f9848207e347850095724af4b6bdecf96"}, @@ -3088,7 +3083,6 @@ python-versions = ">=3.8" files = [ {file = "PyMuPDFb-1.23.22-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9085a1e2fbf16f2820f9f7ad3d25e85f81d9b9eb0409110c1670d4cf5a27a678"}, {file = "PyMuPDFb-1.23.22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:01016dd33220cef4ecaf929d09fd27a584dc3ec3e5c9f4112dfe63613ea35135"}, - {file = "PyMuPDFb-1.23.22-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf50e814db91f2a2325219302fbac229a23682c372cf8232aabd51ea3f18210e"}, {file = "PyMuPDFb-1.23.22-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ffa713ad18e816e584c8a5f569995c32d22f8ac76ab6e4a61f2d2983c4b73d9"}, {file = "PyMuPDFb-1.23.22-py3-none-win32.whl", hash = "sha256:d00e372452845aea624659c302d25e935052269fd3aafe26948301576d6f2ee8"}, {file = "PyMuPDFb-1.23.22-py3-none-win_amd64.whl", hash = "sha256:7c9c157281fdee9f296e666a323307dbf74cb38f017921bb131fa7bfcd39c2bd"}, @@ -3289,6 +3283,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -3937,7 +3932,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", optional = true, markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or extra == \"asyncio\""} +greenlet = {version = "!=0.4.17", optional = true, markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\" or extra == \"asyncio\""} typing-extensions = ">=4.6.0" [package.extras] @@ -5105,4 +5100,4 @@ gpu = ["auto-gptq", "autoawq", "optimum"] [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.12" -content-hash = "6e0c082803aee00b213535ca5868cd694bd03de280fbcf4630855d5a47486b5d" +content-hash = "3c3da1501932f8ba4f90732803b9bd0b3892c69ed285c91873d32d966464a358" diff --git a/pyproject.toml b/pyproject.toml index b55104b..c2b4203 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = ">=3.11,<3.12" +beautifulsoup4 = "^4.12.3" fastapi = "^0.109.0" uvicorn = "^0.27.0" humanize = "^4.9.0" diff --git a/selfie-ui/src/app/components/Markdown.tsx b/selfie-ui/src/app/components/Markdown.tsx index e86b8c4..7c9eda6 100644 --- a/selfie-ui/src/app/components/Markdown.tsx +++ b/selfie-ui/src/app/components/Markdown.tsx @@ -5,7 +5,7 @@ import rehypeSanitize from 'rehype-sanitize'; export const Markdown = ({ content }: { content: string }) => { return ( diff --git a/selfie/connectors/factory.py b/selfie/connectors/factory.py index ea9c76f..b6c8616 100644 --- a/selfie/connectors/factory.py +++ b/selfie/connectors/factory.py @@ -1,3 +1,6 @@ +from selfie.connectors.text_files.connector import TextFilesConnector +from selfie.connectors.google_messages.connector import GoogleMessagesConnector +from selfie.connectors.telegram.connector import TelegramConnector from selfie.connectors.whatsapp.connector import WhatsAppConnector from selfie.connectors.chatgpt.connector import ChatGPTConnector @@ -5,8 +8,11 @@ class ConnectorFactory: # Register all document connectors here connector_registry = [ + ChatGPTConnector, + GoogleMessagesConnector, + TelegramConnector, + TextFilesConnector, WhatsAppConnector, - ChatGPTConnector ] connector_map = {} diff --git a/selfie/connectors/google_messages/connector.py b/selfie/connectors/google_messages/connector.py new file mode 100644 index 0000000..f8718c1 --- /dev/null +++ b/selfie/connectors/google_messages/connector.py @@ -0,0 +1,53 @@ +from abc import ABC +from typing import Any, List + +from selfie.connectors.base_connector import BaseConnector +from selfie.database import BaseModel +from selfie.embeddings import EmbeddingDocumentModel, DataIndex +from selfie.parsers.chat import ChatFileParser +from selfie.types.documents import DocumentDTO +from selfie.utils import data_uri_to_string + + +class GoogleMessagesConfiguration(BaseModel): + files: List[str] + + +class GoogleMessagesConnector(BaseConnector, ABC): + def __init__(self): + super().__init__() + self.id = "google_messages" + self.name = "Google Messages" + + def load_document(self, configuration: dict[str, Any]) -> List[DocumentDTO]: + config = GoogleMessagesConfiguration(**configuration) + + return [ + DocumentDTO( + content=data_uri_to_string(data_uri), + content_type="application/json", + name="todo", + size=len(data_uri_to_string(data_uri).encode('utf-8')) + ) + for data_uri in config.files + ] + + def validate_configuration(self, configuration: dict[str, Any]): + # TODO: check if file can be read from path + pass + + def transform_for_embedding(self, configuration: dict[str, Any], documents: List[DocumentDTO]) -> List[EmbeddingDocumentModel]: + return [ + embeddingDocumentModel + for document in documents + for embeddingDocumentModel in DataIndex.map_share_gpt_data( + ChatFileParser().parse_document( + document=document.content, + parser_type="google_messages", + mask=False, + document_name=document.name, + ).conversations, + source="google_messages", + source_document_id=document.id + ) + ] diff --git a/selfie/connectors/google_messages/documentation.md b/selfie/connectors/google_messages/documentation.md new file mode 100644 index 0000000..15560b7 --- /dev/null +++ b/selfie/connectors/google_messages/documentation.md @@ -0,0 +1,9 @@ +## Export Instructions + +Google Takeout is a service that allows you to download a copy of your data stored within Google products. To export your Google Hangouts chat history, follow the instructions below. + +1. Go to Google Takeout and log in to your Google account. +2. Select "Deselect all" and then scroll down to select "Messages" from the list of Google products. (note: `Messages` may not appear in the list if you have not used Google Messages in the past) +3. Click "Next step" and choose your delivery method, frequency, and file type. +4. Click "Create export" to start the process. Once completed, you will receive an email with a link to download your exported data. +5. Download the .zip file and extract the `.json` files in the `Messages` folder to access your chat files. diff --git a/selfie/connectors/google_messages/schema.json b/selfie/connectors/google_messages/schema.json new file mode 100644 index 0000000..8e777b5 --- /dev/null +++ b/selfie/connectors/google_messages/schema.json @@ -0,0 +1,14 @@ +{ + "title": "Upload Google Messages Conversations", + "type": "object", + "properties": { + "files": { + "type": "array", + "title": "Files", + "description": "Upload .json files exported from Google Messages", + "items": { + "type": "object" + } + } + } +} diff --git a/selfie/connectors/google_messages/uischema.json b/selfie/connectors/google_messages/uischema.json new file mode 100644 index 0000000..f4ef5a6 --- /dev/null +++ b/selfie/connectors/google_messages/uischema.json @@ -0,0 +1,8 @@ +{ + "files": { + "ui:widget": "nativeFile", + "ui:options": { + "accept": ".json" + } + } +} diff --git a/selfie/connectors/telegram/connector.py b/selfie/connectors/telegram/connector.py new file mode 100644 index 0000000..99bd6ba --- /dev/null +++ b/selfie/connectors/telegram/connector.py @@ -0,0 +1,53 @@ +from abc import ABC +from typing import Any, List + +from selfie.connectors.base_connector import BaseConnector +from selfie.database import BaseModel +from selfie.embeddings import EmbeddingDocumentModel, DataIndex +from selfie.parsers.chat import ChatFileParser +from selfie.types.documents import DocumentDTO +from selfie.utils import data_uri_to_string + + +class TelegramConfiguration(BaseModel): + files: List[str] + + +class TelegramConnector(BaseConnector, ABC): + def __init__(self): + super().__init__() + self.id = "telegram" + self.name = "Telegram" + + def load_document(self, configuration: dict[str, Any]) -> List[DocumentDTO]: + config = TelegramConfiguration(**configuration) + + return [ + DocumentDTO( + content=data_uri_to_string(data_uri), + content_type="text/html", + name="todo", + size=len(data_uri_to_string(data_uri).encode('utf-8')) + ) + for data_uri in config.files + ] + + def validate_configuration(self, configuration: dict[str, Any]): + # TODO: check if file can be read from path + pass + + def transform_for_embedding(self, configuration: dict[str, Any], documents: List[DocumentDTO]) -> List[EmbeddingDocumentModel]: + return [ + embeddingDocumentModel + for document in documents + for embeddingDocumentModel in DataIndex.map_share_gpt_data( + ChatFileParser().parse_document( + document=document.content, + parser_type="telegram", + mask=False, + document_name=document.name, + ).conversations, + source="telegram", + source_document_id=document.id + ) + ] diff --git a/selfie/connectors/telegram/documentation.md b/selfie/connectors/telegram/documentation.md new file mode 100644 index 0000000..b7b5849 --- /dev/null +++ b/selfie/connectors/telegram/documentation.md @@ -0,0 +1,10 @@ +## Export Instructions + +To export your Telegram conversations, follow the instructions below (based on official export instructions). + +1. Install the Telegram desktop app from the official website if you haven't already. +2. Open the Telegram desktop app and log in. +3. Navigate to and open the chat you wish to export. +4. Click on the three dots (...) at the top-right of the chat window and select "Export chat history". +5. In the export settings, deselect all options to export text only. +6. Click "Export" to start the process. Once completed, click "Show my data" or navigate to the "Telegram Desktop" folder in your "Downloads" directory to access the exported `messages.html` file. diff --git a/selfie/connectors/telegram/schema.json b/selfie/connectors/telegram/schema.json new file mode 100644 index 0000000..995779f --- /dev/null +++ b/selfie/connectors/telegram/schema.json @@ -0,0 +1,14 @@ +{ + "title": "Upload Telegram Conversations", + "type": "object", + "properties": { + "files": { + "type": "array", + "title": "Files", + "description": "Upload .html files exported from Telegram", + "items": { + "type": "object" + } + } + } +} diff --git a/selfie/connectors/telegram/uischema.json b/selfie/connectors/telegram/uischema.json new file mode 100644 index 0000000..39b72a9 --- /dev/null +++ b/selfie/connectors/telegram/uischema.json @@ -0,0 +1,8 @@ +{ + "files": { + "ui:widget": "nativeFile", + "ui:options": { + "accept": ".html" + } + } +} diff --git a/selfie/connectors/text_files/connector.py b/selfie/connectors/text_files/connector.py new file mode 100644 index 0000000..d54c8fd --- /dev/null +++ b/selfie/connectors/text_files/connector.py @@ -0,0 +1,50 @@ +from abc import ABC +from typing import Any, List + +from llama_index.core.node_parser import SentenceSplitter + +from selfie.connectors.base_connector import BaseConnector +from selfie.database import BaseModel, DataManager +from selfie.embeddings import EmbeddingDocumentModel +from selfie.types.documents import DocumentDTO +from selfie.utils import data_uri_to_string + + +class TextFilesConfiguration(BaseModel): + files: List[str] + + +class TextFilesConnector(BaseConnector, ABC): + def __init__(self): + super().__init__() + self.id = "text_files" + self.name = "Text Files" + + def load_document(self, configuration: dict[str, Any]) -> List[DocumentDTO]: + config = TextFilesConfiguration(**configuration) + + return [ + DocumentDTO( + content=data_uri_to_string(data_uri), + content_type="text/plain", + name="todo", + size=len(data_uri_to_string(data_uri).encode('utf-8')) + ) + for data_uri in config.files + ] + + def validate_configuration(self, configuration: dict[str, Any]): + # TODO: check if file can be read from path + pass + + def transform_for_embedding(self, configuration: dict[str, Any], documents: List[DocumentDTO]) -> List[EmbeddingDocumentModel]: + return [ + EmbeddingDocumentModel( + text=text_chunk, + source="text_files", + timestamp=DataManager._extract_timestamp(document), + source_document_id=document.id, + ) + for document in documents + for text_chunk in SentenceSplitter(chunk_size=1024).split_text(document.content) + ] diff --git a/selfie/connectors/text_files/documentation.md b/selfie/connectors/text_files/documentation.md new file mode 100644 index 0000000..88992ac --- /dev/null +++ b/selfie/connectors/text_files/documentation.md @@ -0,0 +1,3 @@ +## Instructions + +Upload any text files. If there is a tailored connector for your content (e.g., WhatsApp chat exports), you should use that instead for higher quality results. \ No newline at end of file diff --git a/selfie/connectors/text_files/schema.json b/selfie/connectors/text_files/schema.json new file mode 100644 index 0000000..52b818d --- /dev/null +++ b/selfie/connectors/text_files/schema.json @@ -0,0 +1,14 @@ +{ + "title": "Upload Text Files", + "type": "object", + "properties": { + "files": { + "type": "array", + "title": "Files", + "description": "Upload files containing text", + "items": { + "type": "object" + } + } + } +} diff --git a/selfie/connectors/text_files/uischema.json b/selfie/connectors/text_files/uischema.json new file mode 100644 index 0000000..f4ef5a6 --- /dev/null +++ b/selfie/connectors/text_files/uischema.json @@ -0,0 +1,8 @@ +{ + "files": { + "ui:widget": "nativeFile", + "ui:options": { + "accept": ".json" + } + } +} diff --git a/selfie/parsers/chat/__init__.py b/selfie/parsers/chat/__init__.py index 95cb821..b0b1884 100644 --- a/selfie/parsers/chat/__init__.py +++ b/selfie/parsers/chat/__init__.py @@ -5,6 +5,7 @@ from typing import Dict import yaml +from selfie.parsers.chat.telegram import TelegramParser from selfie.parsers.chat.discord import DiscordParser from selfie.parsers.chat.whatsapp import WhatsAppParser from selfie.parsers.chat.google import GoogleTakeoutMessagesParser @@ -47,6 +48,7 @@ class Parser(Enum): DISCORD = DiscordParser GOOGLE_MESSAGES = GoogleTakeoutMessagesParser CHATGPT = ChatGPTParser + TELEGRAM = TelegramParser class ChatFileParser: diff --git a/selfie/parsers/chat/base.py b/selfie/parsers/chat/base.py index 5a997d8..2569fbe 100644 --- a/selfie/parsers/chat/base.py +++ b/selfie/parsers/chat/base.py @@ -211,3 +211,17 @@ def extract_conversations(self, data: Any) -> ShareGPTConversation: """ raise NotImplementedError + +class HtmlBasedChatParser(JsonBasedChatParser): + def _parse_html_to_model_hook(self, html_string: str) -> Any: + raise NotImplementedError("This method should be implemented by subclasses.") + + def _can_parse_hook(self, document: str) -> bool: + try: + return super()._can_parse_hook(json.dumps(self._parse_html_to_model_hook(document).dict())) + except NotImplementedError: + return False + + def _parse_chat_hook(self, document: str) -> ShareGPTConversation: + model = self._parse_html_to_model_hook(document) + return self.extract_conversations(model) diff --git a/selfie/parsers/chat/telegram.py b/selfie/parsers/chat/telegram.py new file mode 100644 index 0000000..4bf4521 --- /dev/null +++ b/selfie/parsers/chat/telegram.py @@ -0,0 +1,63 @@ +from datetime import datetime +from bs4 import BeautifulSoup +from selfie.parsers.chat.base import HtmlBasedChatParser +from selfie.types.share_gpt import ShareGPTConversation, ShareGPTMessage + +from typing import List, Optional +from pydantic import BaseModel + + +class TelegramMessage(BaseModel): + id: Optional[str] + timestamp: Optional[str] + author: Optional[str] + content: Optional[str] + link: Optional[str] + + +class TelegramConversation(BaseModel): + title: Optional[str] + messages: List[TelegramMessage] + + +class TelegramParser(HtmlBasedChatParser): + SUPPORTED_SCHEMAS = [TelegramConversation] + + def _parse_html_to_model_hook(self, html_string: str) -> TelegramConversation: + soup = BeautifulSoup(html_string, 'html.parser') + title = soup.find('div', class_='text bold').text.strip() if soup.find('div', class_='text bold') else None + + messages = [] + for message_div in soup.find_all('div', class_='message'): + id = message_div.get('id') + timestamp = message_div.find('div', class_='pull_right').get('title') if message_div.find('div', class_='pull_right') else None + author = message_div.find('div', class_='from_name').text.strip() if message_div.find('div', class_='from_name') else None + content = message_div.find('div', class_='text').text.strip() if message_div.find('div', class_='text') else None + link = message_div.find('a')['href'] if message_div.find('a') else None + + if content: + messages.append(TelegramMessage( + id=id, + timestamp=timestamp, + author=author, + content=content, + link=link + )) + + return TelegramConversation(title=title, messages=messages) + + def extract_conversations(self, data: TelegramConversation) -> ShareGPTConversation: + share_gpt_messages = [] + + for message in data.messages: + timestamp = datetime.strptime(message.timestamp, "%d.%m.%Y %H:%M:%S %Z%z") if message.timestamp else None + from_user = message.author if message.author else "Unknown" + content = message.content if message.content else "No content" + + share_gpt_messages.append(ShareGPTMessage(**{ + 'from': from_user, + 'value': content, + 'timestamp': timestamp, + })) + + return ShareGPTConversation(conversations=share_gpt_messages)